From 9ef127afc2cf220538fd1788721ce5254f679a78 Mon Sep 17 00:00:00 2001
From: Brian Canini <canini.16@osu.edu>
Date: Wed, 28 Oct 2020 10:18:47 -0400
Subject: [PATCH 01/23] fixing research gallery mobile view

---
 .../assets/sass/components/_research.scss     |  9 ++-
 web/themes/asc_bootstrap/css/style.css        | 64 +++++++++----------
 2 files changed, 36 insertions(+), 37 deletions(-)

diff --git a/web/themes/asc_bootstrap/assets/sass/components/_research.scss b/web/themes/asc_bootstrap/assets/sass/components/_research.scss
index 1874422aa4..bee094e30c 100644
--- a/web/themes/asc_bootstrap/assets/sass/components/_research.scss
+++ b/web/themes/asc_bootstrap/assets/sass/components/_research.scss
@@ -7,11 +7,6 @@
 
 //## Research Directory.
 
-.view-research-project-gallery .row {
-    display: flex;
-    margin-bottom: 40px;
-}
-
 .page-node-type-research-landing-page {
 
   #views-exposed-form-research-project-directory-block-1 {
@@ -31,6 +26,10 @@
     .row {
       display: flex;
       margin-bottom: 40px;
+
+      @media (max-width: 768px) {
+        display: block;
+      }
     }
   }
 }
diff --git a/web/themes/asc_bootstrap/css/style.css b/web/themes/asc_bootstrap/css/style.css
index c8449a78dd..527e3a9fc8 100644
--- a/web/themes/asc_bootstrap/css/style.css
+++ b/web/themes/asc_bootstrap/css/style.css
@@ -12658,13 +12658,7 @@ article.news-story {
   padding-top: 20px;
 }
 
-/* line 10, ../assets/sass/components/_research.scss */
-.view-research-project-gallery .row {
-  display: flex;
-  margin-bottom: 40px;
-}
-
-/* line 18, ../assets/sass/components/_research.scss */
+/* line 13, ../assets/sass/components/_research.scss */
 .page-node-type-research-landing-page #views-exposed-form-research-project-directory-block-1 .form-inline .control-label {
   position: absolute;
   left: -10000px;
@@ -12673,121 +12667,127 @@ article.news-story {
   height: 1px;
   overflow: hidden;
 }
-/* line 28, ../assets/sass/components/_research.scss */
+/* line 23, ../assets/sass/components/_research.scss */
 .page-node-type-research-landing-page .view-research-project-gallery {
   margin-bottom: 80px;
 }
-/* line 31, ../assets/sass/components/_research.scss */
+/* line 26, ../assets/sass/components/_research.scss */
 .page-node-type-research-landing-page .view-research-project-gallery .row {
   display: flex;
   margin-bottom: 40px;
 }
+@media (max-width: 768px) {
+  /* line 26, ../assets/sass/components/_research.scss */
+  .page-node-type-research-landing-page .view-research-project-gallery .row {
+    display: block;
+  }
+}
 
-/* line 42, ../assets/sass/components/_research.scss */
+/* line 41, ../assets/sass/components/_research.scss */
 .view-research-project-directory table .views-field-title {
   width: 35%;
 }
-/* line 46, ../assets/sass/components/_research.scss */
+/* line 45, ../assets/sass/components/_research.scss */
 .view-research-project-directory table .views-field-field-research-year {
   width: 10%;
 }
 @media (max-width: 992px) {
-  /* line 46, ../assets/sass/components/_research.scss */
+  /* line 45, ../assets/sass/components/_research.scss */
   .view-research-project-directory table .views-field-field-research-year {
     width: 15%;
   }
 }
 
-/* line 63, ../assets/sass/components/_research.scss */
+/* line 62, ../assets/sass/components/_research.scss */
 .page-node-type-research article {
   margin-bottom: 16px;
 }
-/* line 67, ../assets/sass/components/_research.scss */
+/* line 66, ../assets/sass/components/_research.scss */
 .page-node-type-research .page-header {
   display: none;
 }
-/* line 71, ../assets/sass/components/_research.scss */
+/* line 70, ../assets/sass/components/_research.scss */
 .page-node-type-research .research-title-wrapper {
   padding-left: 0;
 }
-/* line 75, ../assets/sass/components/_research.scss */
+/* line 74, ../assets/sass/components/_research.scss */
 .page-node-type-research .research-cont {
   padding-left: 0;
 }
-/* line 78, ../assets/sass/components/_research.scss */
+/* line 77, ../assets/sass/components/_research.scss */
 .page-node-type-research .research-cont .field--name-field-research-body {
   margin: 20px 0 40px;
 }
-/* line 83, ../assets/sass/components/_research.scss */
+/* line 82, ../assets/sass/components/_research.scss */
 .page-node-type-research .research-users {
   margin-bottom: 15px;
 }
-/* line 86, ../assets/sass/components/_research.scss */
+/* line 85, ../assets/sass/components/_research.scss */
 .page-node-type-research .research-users h2 {
   line-height: 0;
   font-size: 18px;
 }
-/* line 92, ../assets/sass/components/_research.scss */
+/* line 91, ../assets/sass/components/_research.scss */
 .page-node-type-research .taxonomy-research-wrapper {
   width: 100%;
   display: inline-block;
 }
-/* line 96, ../assets/sass/components/_research.scss */
+/* line 95, ../assets/sass/components/_research.scss */
 .page-node-type-research .taxonomy-research-wrapper .taxonomy-research-heading {
   width: 100%;
   padding-top: 15px;
 }
-/* line 100, ../assets/sass/components/_research.scss */
+/* line 99, ../assets/sass/components/_research.scss */
 .page-node-type-research .taxonomy-research-wrapper .taxonomy-research-heading h3 {
   line-height: 0;
   font-size: 18px;
 }
 
-/* line 111, ../assets/sass/components/_research.scss */
+/* line 110, ../assets/sass/components/_research.scss */
 .research .field--name-field-research-body {
   margin-bottom: 20px;
 }
 
-/* line 124, ../assets/sass/components/_research.scss */
+/* line 123, ../assets/sass/components/_research.scss */
 .page-node-type-research-project-gallery article {
   margin-bottom: 16px;
 }
-/* line 128, ../assets/sass/components/_research.scss */
+/* line 127, ../assets/sass/components/_research.scss */
 .page-node-type-research-project-gallery .page-header {
   display: none;
 }
-/* line 132, ../assets/sass/components/_research.scss */
+/* line 131, ../assets/sass/components/_research.scss */
 .page-node-type-research-project-gallery .rgall-title-wrapper {
   padding-left: 0;
 }
-/* line 136, ../assets/sass/components/_research.scss */
+/* line 135, ../assets/sass/components/_research.scss */
 .page-node-type-research-project-gallery .rgall-cont {
   padding-left: 0;
 }
-/* line 139, ../assets/sass/components/_research.scss */
+/* line 138, ../assets/sass/components/_research.scss */
 .page-node-type-research-project-gallery .rgall-cont .field--name-body {
   margin: 20px 0 40px;
 }
 
-/* line 151, ../assets/sass/components/_research.scss */
+/* line 150, ../assets/sass/components/_research.scss */
 .taxonomy-rgall-heading {
   float: left;
   width: 100%;
   padding-top: 15px;
 }
-/* line 156, ../assets/sass/components/_research.scss */
+/* line 155, ../assets/sass/components/_research.scss */
 .taxonomy-rgall-heading h2 {
   line-height: 0;
   font-size: 18px;
 }
 
-/* line 162, ../assets/sass/components/_research.scss */
+/* line 161, ../assets/sass/components/_research.scss */
 .taxonomy-research-heading {
   float: left;
   width: 100%;
   padding-top: 15px;
 }
-/* line 167, ../assets/sass/components/_research.scss */
+/* line 166, ../assets/sass/components/_research.scss */
 .taxonomy-research-heading h2 {
   line-height: 0;
   font-size: 18px;
-- 
GitLab


From 2b9509c5a90633bc2c2938b581efad6d655ff423 Mon Sep 17 00:00:00 2001
From: Brian Canini <canini.16@osu.edu>
Date: Thu, 29 Oct 2020 09:58:27 -0400
Subject: [PATCH 02/23] fixing ajax history and infinte scroll bug - adding
 patch to ajax history

---
 composer.json                                           | 3 +++
 vendor/composer/installed.json                          | 3 +++
 web/modules/views_ajax_history/PATCHES.txt              | 7 +++++++
 web/modules/views_ajax_history/js/views_ajax_history.js | 2 +-
 4 files changed, 14 insertions(+), 1 deletion(-)
 create mode 100644 web/modules/views_ajax_history/PATCHES.txt

diff --git a/composer.json b/composer.json
index 7db00e6f53..023637cab2 100644
--- a/composer.json
+++ b/composer.json
@@ -295,6 +295,9 @@
             },
             "mehrpadin/superfish": {
                 "Fontawesome Tags": "patches/superfish-fontawesome-tags.patch"
+            },
+            "drupal/views_ajax_history": {
+                "3028400": "https://www.drupal.org/files/issues/2019-05-16/wrong-url-with-infinit-scroll-3028400-1.patch"
             }
         }
     },
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 13e011b256..cd76bcc7a9 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -8380,6 +8380,9 @@
                     "status": "covered",
                     "message": "Covered by Drupal's security advisory policy"
                 }
+            },
+            "patches_applied": {
+                "3028400": "https://www.drupal.org/files/issues/2019-05-16/wrong-url-with-infinit-scroll-3028400-1.patch"
             }
         },
         "installation-source": "dist",
diff --git a/web/modules/views_ajax_history/PATCHES.txt b/web/modules/views_ajax_history/PATCHES.txt
new file mode 100644
index 0000000000..6cf9ea80db
--- /dev/null
+++ b/web/modules/views_ajax_history/PATCHES.txt
@@ -0,0 +1,7 @@
+This file was automatically generated by Composer Patches (https://github.com/cweagans/composer-patches)
+Patches applied to this directory:
+
+3028400
+Source: https://www.drupal.org/files/issues/2019-05-16/wrong-url-with-infinit-scroll-3028400-1.patch
+
+
diff --git a/web/modules/views_ajax_history/js/views_ajax_history.js b/web/modules/views_ajax_history/js/views_ajax_history.js
index d9e4e22b87..a061f9d9e9 100644
--- a/web/modules/views_ajax_history/js/views_ajax_history.js
+++ b/web/modules/views_ajax_history/js/views_ajax_history.js
@@ -204,7 +204,7 @@
   Drupal.Ajax.prototype.beforeSerialize = function (element, options) {
     // Check that we handle a click on a link, not a form submission.
     if (options.data.view_name && element && $(element).is('a')) {
-      addState(options, $(element).attr('href'));
+      addState(options, window.location.href);
     }
 
     // Call the original Drupal method with the right context.
-- 
GitLab


From 35dc9973dbb33dc8069cbb13429620e913f1f355 Mon Sep 17 00:00:00 2001
From: Brian Canini <canini.16@osu.edu>
Date: Mon, 2 Nov 2020 09:29:01 -0500
Subject: [PATCH 03/23] updating privacy policy link in footer

---
 web/themes/asc_bootstrap/templates/system/includes/_footer.twig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/web/themes/asc_bootstrap/templates/system/includes/_footer.twig b/web/themes/asc_bootstrap/templates/system/includes/_footer.twig
index 274eed466e..38450b2d7c 100644
--- a/web/themes/asc_bootstrap/templates/system/includes/_footer.twig
+++ b/web/themes/asc_bootstrap/templates/system/includes/_footer.twig
@@ -44,7 +44,7 @@
           If you have a disability and experience difficulty accessing this site, please contact us for assistance via email at <a href="mailto:asc-accessibility@osu.edu" class="email-link" title="Email for accessibility assistance">asc-accessibility@osu.edu</a>.
         </li>
         <li>
-          <a href="https://artsandsciences.osu.edu/privacy-policy">
+          <a href="https://go.osu.edu/privacy">
             Privacy Policy
           </a>
         </li>
-- 
GitLab


From 6ad24cd26355798bc8d7b360a8688af9d05c0c05 Mon Sep 17 00:00:00 2001
From: Brian Canini <canini.16@osu.edu>
Date: Mon, 2 Nov 2020 12:47:14 -0500
Subject: [PATCH 04/23] Updating drupal/core-recommended (8.9.6 => 8.9.7)

---
 composer.json                                 |   2 +-
 composer.lock                                 |  27 +-
 vendor/composer/installed.json                |  26 +-
 web/core/drupalci.yml                         |   2 -
 web/core/includes/entity.inc                  |   3 +-
 web/core/lib/Drupal.php                       |   2 +-
 .../Component/Datetime/DateTimePlus.php       |   9 +-
 .../lib/Drupal/Component/Utility/Unicode.php  |   6 +-
 .../lib/Drupal/Core/Database/Connection.php   |   4 +-
 .../DefaultSelection.php                      |  15 +-
 .../EntityReferenceAutocompleteWidget.php     |  17 +-
 web/core/lib/Drupal/Core/Form/FormBuilder.php |   2 +-
 .../Security/PharExtensionInterceptor.php     |   4 +-
 .../book/src/Form/BookSettingsForm.php        |   5 +-
 .../plugins/drupalimagecaption/plugin.es6.js  |   4 +-
 .../ckeditor/src/CKEditorPluginManager.php    |   2 +-
 web/core/modules/comment/comment.module       |   3 +-
 .../comment/src/CommentLazyBuilders.php       |   6 +-
 .../comment/src/CommentViewBuilder.php        |  16 +-
 .../modules/comment/src/Entity/Comment.php    |   3 +-
 .../tests/src/Kernel/CommentOrphanTest.php    | 134 ++++++++
 .../process/d6/FieldOptionTranslation.php     |   2 +-
 .../EntityReferenceAutoCreateTest.php         |  49 ++-
 .../d7/MigrateFieldFormatterSettingsTest.php  |   2 +
 .../Migrate/d7/MigrateFieldInstanceTest.php   |   6 +-
 .../Kernel/Migrate/d7/MigrateFieldTest.php    |   6 +-
 web/core/modules/file/file.module             |   9 +-
 .../tests/src/Functional/FilePrivateTest.php  |   2 -
 .../file/tests/src/Kernel/FileModuleTest.php  |   2 +-
 .../Plugin/migrate/source/d7/FileTest.php     |   2 +
 .../src/Plugin/Filter/FilterCaption.php       |   1 -
 ...guageContentSettingsTaxonomyVocabulary.php |  14 +-
 ...eContentTaxonomyVocabularySettingsTest.php |  26 ++
 .../src/Plugin/migrate/process/FieldLink.php  |   7 +-
 .../Plugin/migrate/process/FieldLinkTest.php  |  12 +
 .../modules/media/src/OEmbed/Endpoint.php     |   6 +
 .../OEmbedResourceConstraintValidator.php     |   3 +-
 .../media/src/Plugin/media/Source/OEmbed.php  |   6 +-
 .../OEmbedResourceConstraintValidatorTest.php |  62 +++-
 .../tests/src/Kernel/OEmbedSourceTest.php     |  62 +++-
 .../media_library/media_library.module        |  20 +-
 .../src/MediaLibraryFieldWidgetOpener.php     |   6 +-
 .../Field/FieldWidget/MediaLibraryWidget.php  |   4 +
 ...media_library_form_overwrite_test.info.yml |  10 +
 .../media_library_form_overwrite_test.module  |  12 +
 .../src/Form/TestAddForm.php                  |  27 ++
 .../src/Kernel/MediaLibraryAddFormTest.php    |  16 +
 .../src/Kernel/MediaLibraryWidgetTest.php     | 158 ++++++++++
 .../modules/migrate/src/MigrateExecutable.php |  13 +-
 .../src/Plugin/MigrateProcessInterface.php    |  13 +-
 .../src/Plugin/migrate/destination/Entity.php |   7 +
 .../migrate/destination/EntityContentBase.php |   1 +
 .../src/Plugin/migrate/source/SqlBase.php     |   2 +-
 .../modules/migrate/src/ProcessPluginBase.php |   8 +
 .../tests/src/Unit/MigrateExecutableTest.php  |   4 +
 .../migrate_drupal/tests/fixtures/drupal7.php | 295 ++++++++++++++++++
 .../src/Kernel/d7/FieldDiscoveryTest.php      |   2 +
 .../src/Controller/MigrateController.php      |   4 +-
 .../src/Form/CredentialForm.php               |  14 +-
 .../src/Functional/MigrateControllerTest.php  |  96 ++++++
 .../tests/src/Functional/d7/Upgrade7Test.php  |   4 +-
 web/core/modules/node/node.views.inc          |  52 +++
 .../modules/node/node.views_execution.inc     |  43 ---
 .../views.view.test_node_views_analyze.yml    | 180 +++++++++++
 .../Functional/Views/NodeViewsAnalyzeTest.php |  47 +++
 .../path_alias/tests/src/Kernel/AliasTest.php |   1 -
 web/core/modules/search/src/SearchQuery.php   |   2 +-
 .../Entity/EntityTestNoBundleWithLabel.php    |  28 ++
 .../tests/src/Functional/File/ConfigTest.php  |   1 -
 .../migrate/field/TaxonomyTermReference.php   |   2 +
 .../views/relationship/NodeTermData.php       |   4 +-
 .../Views/RelationshipNodeTermDataTest.php    |  49 +++
 web/core/scripts/css/compile.js               |  19 +-
 .../Drupal/Nightwatch/Tests/langcodeTest.js   |   3 +-
 .../Component/Datetime/DateTimePlusTest.php   |  41 +++
 .../Tests/Component/Utility/UnicodeTest.php   |  52 ++-
 web/core/themes/claro/css/base/elements.css   |  44 ---
 .../themes/claro/css/components/accordion.css |  44 ---
 .../claro/css/components/action-link.css      |  44 ---
 .../css/components/ajax-progress.module.css   |  44 ---
 .../autocomplete-loading.module.css           |  44 ---
 .../claro/css/components/breadcrumb.css       |  44 ---
 .../themes/claro/css/components/button.css    |  44 ---
 web/core/themes/claro/css/components/card.css |  44 ---
 .../claro/css/components/content-header.css   |  44 ---
 .../themes/claro/css/components/details.css   |  44 ---
 .../themes/claro/css/components/divider.css   |  44 ---
 .../claro/css/components/dropbutton.css       |  44 ---
 .../claro/css/components/entity-meta.css      |  44 ---
 .../themes/claro/css/components/fieldset.css  |  44 ---
 web/core/themes/claro/css/components/file.css |  44 ---
 .../components/form--checkbox-radio--ie.css   |  44 ---
 .../css/components/form--checkbox-radio.css   |  44 ---
 .../css/components/form--field-multiple.css   |  44 ---
 .../css/components/form--managed-file.css     |  44 ---
 .../css/components/form--password-confirm.css |  44 ---
 .../claro/css/components/form--select.css     |  44 ---
 .../claro/css/components/form--text.css       |  44 ---
 web/core/themes/claro/css/components/form.css |  44 ---
 .../claro/css/components/image-preview.css    |  44 ---
 .../claro/css/components/jquery.ui/theme.css  |  44 ---
 .../themes/claro/css/components/messages.css  |  44 ---
 .../claro/css/components/page-title.css       |  44 ---
 .../themes/claro/css/components/pager.css     |  44 ---
 .../themes/claro/css/components/progress.css  |  44 ---
 .../themes/claro/css/components/shortcut.css  |  44 ---
 .../components/system-admin--admin-list.css   |  44 ---
 .../css/components/system-admin--panel.css    |  44 ---
 .../table--file-multiple-widget.css           |  44 ---
 .../themes/claro/css/components/tabledrag.css |  44 ---
 .../themes/claro/css/components/tables.css    |  44 ---
 .../claro/css/components/tableselect.css      |  44 ---
 web/core/themes/claro/css/components/tabs.css |  44 ---
 .../claro/css/components/vertical-tabs.css    |  44 ---
 .../css/components/views-exposed-form.css     |  44 ---
 .../themes/claro/css/layout/breadcrumb.css    |  44 ---
 .../themes/claro/css/layout/card-list.css     |  44 ---
 .../themes/claro/css/layout/local-actions.css |  44 ---
 web/core/themes/claro/css/layout/node-add.css |  44 ---
 .../claro/css/theme/ckeditor-dialog.css       |  44 ---
 .../claro/css/theme/ckeditor-editor.css       |  43 ---
 .../themes/claro/css/theme/ckeditor-frame.css |  44 ---
 .../themes/claro/css/theme/field-ui.admin.css |  44 ---
 .../themes/claro/css/theme/filter.theme.css   |  44 ---
 124 files changed, 1607 insertions(+), 2315 deletions(-)
 create mode 100644 web/core/modules/comment/tests/src/Kernel/CommentOrphanTest.php
 create mode 100644 web/core/modules/media_library/tests/modules/media_library_form_overwrite_test/media_library_form_overwrite_test.info.yml
 create mode 100644 web/core/modules/media_library/tests/modules/media_library_form_overwrite_test/media_library_form_overwrite_test.module
 create mode 100644 web/core/modules/media_library/tests/modules/media_library_form_overwrite_test/src/Form/TestAddForm.php
 create mode 100644 web/core/modules/media_library/tests/src/Kernel/MediaLibraryWidgetTest.php
 create mode 100644 web/core/modules/migrate_drupal_ui/tests/src/Functional/MigrateControllerTest.php
 create mode 100644 web/core/modules/node/node.views.inc
 create mode 100644 web/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_node_views_analyze.yml
 create mode 100644 web/core/modules/node/tests/src/Functional/Views/NodeViewsAnalyzeTest.php
 create mode 100644 web/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestNoBundleWithLabel.php

diff --git a/composer.json b/composer.json
index 023637cab2..61002236a6 100644
--- a/composer.json
+++ b/composer.json
@@ -105,7 +105,7 @@
         "drupal/config_update": "1.5",
         "drupal/console": "1.8",
         "drupal/content_access": "1.0-alpha1",
-        "drupal/core-recommended": "8.9.6",
+        "drupal/core-recommended": "8.9.7",
         "drupal/crop": "2.1",
         "drupal/ctools": "3.4",
         "drupal/devel": "2.0",
diff --git a/composer.lock b/composer.lock
index 4cb02a2e2e..61c67ca994 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "3a0a689eb38e0df625ca5642da5bcf83",
+    "content-hash": "0ea8a728f9988c587c660994aefb5915",
     "packages": [
         {
             "name": "alchemy/zippy",
@@ -3376,16 +3376,16 @@
         },
         {
             "name": "drupal/core",
-            "version": "8.9.6",
+            "version": "8.9.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/drupal/core.git",
-                "reference": "caf4e756d31dfb0c2e52cd0748e900efe4b57766"
+                "reference": "ded1be08c23f19211f9a2514a72e7defb1204efc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/drupal/core/zipball/caf4e756d31dfb0c2e52cd0748e900efe4b57766",
-                "reference": "caf4e756d31dfb0c2e52cd0748e900efe4b57766",
+                "url": "https://api.github.com/repos/drupal/core/zipball/ded1be08c23f19211f9a2514a72e7defb1204efc",
+                "reference": "ded1be08c23f19211f9a2514a72e7defb1204efc",
                 "shasum": ""
             },
             "require": {
@@ -3608,20 +3608,20 @@
                 "GPL-2.0-or-later"
             ],
             "description": "Drupal is an open source content management platform powering millions of websites and applications.",
-            "time": "2020-09-16T11:22:21+00:00"
+            "time": "2020-10-07T19:37:20+00:00"
         },
         {
             "name": "drupal/core-recommended",
-            "version": "8.9.6",
+            "version": "8.9.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/drupal/core-recommended.git",
-                "reference": "6c5c4739afc5549e6089ef34b59c712c8872f154"
+                "reference": "7895ddd703101bdec91fb6ae58381036a9768e1f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/drupal/core-recommended/zipball/6c5c4739afc5549e6089ef34b59c712c8872f154",
-                "reference": "6c5c4739afc5549e6089ef34b59c712c8872f154",
+                "url": "https://api.github.com/repos/drupal/core-recommended/zipball/7895ddd703101bdec91fb6ae58381036a9768e1f",
+                "reference": "7895ddd703101bdec91fb6ae58381036a9768e1f",
                 "shasum": ""
             },
             "require": {
@@ -3633,7 +3633,7 @@
                 "doctrine/common": "v2.7.3",
                 "doctrine/inflector": "v1.2.0",
                 "doctrine/lexer": "1.0.2",
-                "drupal/core": "8.9.6",
+                "drupal/core": "8.9.7",
                 "easyrdf/easyrdf": "0.9.1",
                 "egulias/email-validator": "2.1.17",
                 "guzzlehttp/guzzle": "6.5.4",
@@ -3690,7 +3690,7 @@
                 "GPL-2.0-or-later"
             ],
             "description": "Locked core dependencies; require this project INSTEAD OF drupal/core.",
-            "time": "2020-09-16T11:22:21+00:00"
+            "time": "2020-10-07T19:37:20+00:00"
         },
         {
             "name": "drupal/crop",
@@ -8126,6 +8126,9 @@
                         "status": "covered",
                         "message": "Covered by Drupal's security advisory policy"
                     }
+                },
+                "patches_applied": {
+                    "3028400": "https://www.drupal.org/files/issues/2019-05-16/wrong-url-with-infinit-scroll-3028400-1.patch"
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index cd76bcc7a9..f911db2d6f 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -3485,17 +3485,17 @@
     },
     {
         "name": "drupal/core",
-        "version": "8.9.6",
-        "version_normalized": "8.9.6.0",
+        "version": "8.9.7",
+        "version_normalized": "8.9.7.0",
         "source": {
             "type": "git",
             "url": "https://github.com/drupal/core.git",
-            "reference": "caf4e756d31dfb0c2e52cd0748e900efe4b57766"
+            "reference": "ded1be08c23f19211f9a2514a72e7defb1204efc"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/drupal/core/zipball/caf4e756d31dfb0c2e52cd0748e900efe4b57766",
-            "reference": "caf4e756d31dfb0c2e52cd0748e900efe4b57766",
+            "url": "https://api.github.com/repos/drupal/core/zipball/ded1be08c23f19211f9a2514a72e7defb1204efc",
+            "reference": "ded1be08c23f19211f9a2514a72e7defb1204efc",
             "shasum": ""
         },
         "require": {
@@ -3662,7 +3662,7 @@
             "drupal/workflows": "self.version",
             "drupal/workspaces": "self.version"
         },
-        "time": "2020-09-16T11:22:21+00:00",
+        "time": "2020-10-07T19:37:20+00:00",
         "type": "drupal-core",
         "extra": {
             "drupal-scaffold": {
@@ -3723,17 +3723,17 @@
     },
     {
         "name": "drupal/core-recommended",
-        "version": "8.9.6",
-        "version_normalized": "8.9.6.0",
+        "version": "8.9.7",
+        "version_normalized": "8.9.7.0",
         "source": {
             "type": "git",
             "url": "https://github.com/drupal/core-recommended.git",
-            "reference": "6c5c4739afc5549e6089ef34b59c712c8872f154"
+            "reference": "7895ddd703101bdec91fb6ae58381036a9768e1f"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/drupal/core-recommended/zipball/6c5c4739afc5549e6089ef34b59c712c8872f154",
-            "reference": "6c5c4739afc5549e6089ef34b59c712c8872f154",
+            "url": "https://api.github.com/repos/drupal/core-recommended/zipball/7895ddd703101bdec91fb6ae58381036a9768e1f",
+            "reference": "7895ddd703101bdec91fb6ae58381036a9768e1f",
             "shasum": ""
         },
         "require": {
@@ -3745,7 +3745,7 @@
             "doctrine/common": "v2.7.3",
             "doctrine/inflector": "v1.2.0",
             "doctrine/lexer": "1.0.2",
-            "drupal/core": "8.9.6",
+            "drupal/core": "8.9.7",
             "easyrdf/easyrdf": "0.9.1",
             "egulias/email-validator": "2.1.17",
             "guzzlehttp/guzzle": "6.5.4",
@@ -3796,7 +3796,7 @@
         "conflict": {
             "webflo/drupal-core-strict": "*"
         },
-        "time": "2020-09-16T11:22:21+00:00",
+        "time": "2020-10-07T19:37:20+00:00",
         "type": "metapackage",
         "notification-url": "https://packagist.org/downloads/",
         "license": [
diff --git a/web/core/drupalci.yml b/web/core/drupalci.yml
index 8cc5f1d488..1cec41cef3 100644
--- a/web/core/drupalci.yml
+++ b/web/core/drupalci.yml
@@ -5,8 +5,6 @@ build:
   assessment:
     validate_codebase:
       phplint:
-      csslint:
-        halt-on-fail: false
       eslint:
         # A test must pass eslinting standards check in order to continue processing.
         halt-on-fail: false
diff --git a/web/core/includes/entity.inc b/web/core/includes/entity.inc
index 34c048b35a..3515b6ddbb 100644
--- a/web/core/includes/entity.inc
+++ b/web/core/includes/entity.inc
@@ -233,7 +233,8 @@ function entity_load_unchanged($entity_type, $id) {
  *   An array of entity IDs of the entities to delete.
  *
  * @deprecated in drupal:8.0.0 and is removed from drupal:9.0.0. Use
- *   the entity storage's delete() method to delete multiple entities:
+ *   the entity storage's \Drupal\Core\Entity\EntityStorageInterface::delete()
+ *   method to delete multiple entities:
  *   @code
  *     $storage_handler = \Drupal::entityTypeManager()->getStorage($entity_type);
  *     $entities = $storage_handler->loadMultiple($ids);
diff --git a/web/core/lib/Drupal.php b/web/core/lib/Drupal.php
index 2d5754aa94..0e9d50fc72 100644
--- a/web/core/lib/Drupal.php
+++ b/web/core/lib/Drupal.php
@@ -82,7 +82,7 @@ class Drupal {
   /**
    * The current system version.
    */
-  const VERSION = '8.9.6';
+  const VERSION = '8.9.7';
 
   /**
    * Core API compatibility.
diff --git a/web/core/lib/Drupal/Component/Datetime/DateTimePlus.php b/web/core/lib/Drupal/Component/Datetime/DateTimePlus.php
index ef200d19f1..01c4647013 100644
--- a/web/core/lib/Drupal/Component/Datetime/DateTimePlus.php
+++ b/web/core/lib/Drupal/Component/Datetime/DateTimePlus.php
@@ -624,11 +624,10 @@ public static function checkArray($array) {
     $valid_date = FALSE;
     $valid_time = TRUE;
     // Check for a valid date using checkdate(). Only values that
-    // meet that test are valid.
-    if (array_key_exists('year', $array) && array_key_exists('month', $array) && array_key_exists('day', $array)) {
-      if (@checkdate($array['month'], $array['day'], $array['year'])) {
-        $valid_date = TRUE;
-      }
+    // meet that test are valid. An empty value, either a string or a 0, is not
+    // a valid value.
+    if (!empty($array['year']) && !empty($array['month']) && !empty($array['day'])) {
+      $valid_date = checkdate($array['month'], $array['day'], $array['year']);
     }
     // Testing for valid time is reversed. Missing time is OK,
     // but incorrect values are not.
diff --git a/web/core/lib/Drupal/Component/Utility/Unicode.php b/web/core/lib/Drupal/Component/Utility/Unicode.php
index 64e066d793..a44b50d0e8 100644
--- a/web/core/lib/Drupal/Component/Utility/Unicode.php
+++ b/web/core/lib/Drupal/Component/Utility/Unicode.php
@@ -537,16 +537,16 @@ public static function mimeHeaderEncode($string, $shorten = FALSE) {
    */
   public static function mimeHeaderDecode($header) {
     $callback = function ($matches) {
-      $data = ($matches[2] == 'B') ? base64_decode($matches[3]) : str_replace('_', ' ', quoted_printable_decode($matches[3]));
+      $data = (strtolower($matches[2]) == 'b') ? base64_decode($matches[3]) : str_replace('_', ' ', quoted_printable_decode($matches[3]));
       if (strtolower($matches[1]) != 'utf-8') {
         $data = static::convertToUtf8($data, $matches[1]);
       }
       return $data;
     };
     // First step: encoded chunks followed by other encoded chunks (need to collapse whitespace)
-    $header = preg_replace_callback('/=\?([^?]+)\?(Q|B)\?([^?]+|\?(?!=))\?=\s+(?==\?)/', $callback, $header);
+    $header = preg_replace_callback('/=\?([^?]+)\?([Qq]|[Bb])\?([^?]+|\?(?!=))\?=\s+(?==\?)/', $callback, $header);
     // Second step: remaining chunks (do not collapse whitespace)
-    return preg_replace_callback('/=\?([^?]+)\?(Q|B)\?([^?]+|\?(?!=))\?=/', $callback, $header);
+    return preg_replace_callback('/=\?([^?]+)\?([Qq]|[Bb])\?([^?]+|\?(?!=))\?=/', $callback, $header);
   }
 
   /**
diff --git a/web/core/lib/Drupal/Core/Database/Connection.php b/web/core/lib/Drupal/Core/Database/Connection.php
index 00e6d6c9d0..70e0dea874 100644
--- a/web/core/lib/Drupal/Core/Database/Connection.php
+++ b/web/core/lib/Drupal/Core/Database/Connection.php
@@ -1501,8 +1501,8 @@ abstract public function nextId($existing_id = 0);
   /**
    * Prepares a statement for execution and returns a statement object
    *
-   * Emulated prepared statements does not communicate with the database server
-   * so this method does not check the statement.
+   * Emulated prepared statements do not communicate with the database server so
+   * this method does not check the statement.
    *
    * @param string $statement
    *   This must be a valid SQL statement for the target database server.
diff --git a/web/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/DefaultSelection.php b/web/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/DefaultSelection.php
index 426dee11d1..465de1d66c 100644
--- a/web/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/DefaultSelection.php
+++ b/web/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/DefaultSelection.php
@@ -395,13 +395,16 @@ public function validateReferenceableEntities(array $ids) {
    */
   public function createNewEntity($entity_type_id, $bundle, $label, $uid) {
     $entity_type = $this->entityTypeManager->getDefinition($entity_type_id);
-    $bundle_key = $entity_type->getKey('bundle');
-    $label_key = $entity_type->getKey('label');
 
-    $entity = $this->entityTypeManager->getStorage($entity_type_id)->create([
-      $bundle_key => $bundle,
-      $label_key => $label,
-    ]);
+    $values = [
+      $entity_type->getKey('label') => $label,
+    ];
+
+    if ($bundle_key = $entity_type->getKey('bundle')) {
+      $values[$bundle_key] = $bundle;
+    }
+
+    $entity = $this->entityTypeManager->getStorage($entity_type_id)->create($values);
 
     if ($entity instanceof EntityOwnerInterface) {
       $entity->setOwnerId($uid);
diff --git a/web/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EntityReferenceAutocompleteWidget.php b/web/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EntityReferenceAutocompleteWidget.php
index af3c80a9b0..d9f5b581f3 100644
--- a/web/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EntityReferenceAutocompleteWidget.php
+++ b/web/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EntityReferenceAutocompleteWidget.php
@@ -117,7 +117,7 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
       '#placeholder' => $this->getSetting('placeholder'),
     ];
 
-    if ($this->getSelectionHandlerSetting('auto_create') && ($bundle = $this->getAutocreateBundle())) {
+    if ($bundle = $this->getAutocreateBundle()) {
       $element['#autocreate'] = [
         'bundle' => $bundle,
         'uid' => ($entity instanceof EntityOwnerInterface) ? $entity->getOwnerId() : \Drupal::currentUser()->id(),
@@ -154,16 +154,23 @@ public function massageFormValues(array $values, array $form, FormStateInterface
    * Returns the name of the bundle which will be used for autocreated entities.
    *
    * @return string
-   *   The bundle name.
+   *   The bundle name. If autocreate is not active, NULL will be returned.
    */
   protected function getAutocreateBundle() {
     $bundle = NULL;
-    if ($this->getSelectionHandlerSetting('auto_create') && $target_bundles = $this->getSelectionHandlerSetting('target_bundles')) {
+    if ($this->getSelectionHandlerSetting('auto_create')) {
+      $target_bundles = $this->getSelectionHandlerSetting('target_bundles');
+      // If there's no target bundle at all, use the target_type. It's the
+      // default for bundleless entity types.
+      if (empty($target_bundles)) {
+        $bundle = $this->getFieldSetting('target_type');
+      }
       // If there's only one target bundle, use it.
-      if (count($target_bundles) == 1) {
+      elseif (count($target_bundles) == 1) {
         $bundle = reset($target_bundles);
       }
-      // Otherwise use the target bundle stored in selection handler settings.
+      // If there's more than one target bundle, use the autocreate bundle
+      // stored in selection handler settings.
       elseif (!$bundle = $this->getSelectionHandlerSetting('auto_create_bundle')) {
         // If no bundle has been set as auto create target means that there is
         // an inconsistency in entity reference field settings.
diff --git a/web/core/lib/Drupal/Core/Form/FormBuilder.php b/web/core/lib/Drupal/Core/Form/FormBuilder.php
index 4447534658..1a422d8411 100644
--- a/web/core/lib/Drupal/Core/Form/FormBuilder.php
+++ b/web/core/lib/Drupal/Core/Form/FormBuilder.php
@@ -861,7 +861,7 @@ protected function buildFormAction() {
     //   https://www.drupal.org/node/2504709.
     $parsed = UrlHelper::parse($request_uri);
     unset($parsed['query'][static::AJAX_FORM_REQUEST], $parsed['query'][MainContentViewSubscriber::WRAPPER_FORMAT]);
-    $action =  $parsed['path'] . ($parsed['query'] ? ('?' . UrlHelper::buildQuery($parsed['query'])) : '');
+    $action = $parsed['path'] . ($parsed['query'] ? ('?' . UrlHelper::buildQuery($parsed['query'])) : '');
     return UrlHelper::filterBadProtocol($action);
   }
 
diff --git a/web/core/lib/Drupal/Core/Security/PharExtensionInterceptor.php b/web/core/lib/Drupal/Core/Security/PharExtensionInterceptor.php
index 0d8e8e8304..6f6e161e66 100644
--- a/web/core/lib/Drupal/Core/Security/PharExtensionInterceptor.php
+++ b/web/core/lib/Drupal/Core/Security/PharExtensionInterceptor.php
@@ -60,8 +60,8 @@ private function baseFileContainsPharExtension($path) {
       return FALSE;
     }
     // If the stream wrapper is registered by invoking a phar file that does
-    // not not have .phar extension then this should be allowed. For
-    // example, some CLI tools recommend removing the extension.
+    // not have .phar extension then this should be allowed. For example, some
+    // CLI tools recommend removing the extension.
     $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
     // Find the last entry in the backtrace containing a 'file' key as
     // sometimes the last caller is executed outside the scope of a file. For
diff --git a/web/core/modules/book/src/Form/BookSettingsForm.php b/web/core/modules/book/src/Form/BookSettingsForm.php
index 3189ef519e..19edbad09a 100644
--- a/web/core/modules/book/src/Form/BookSettingsForm.php
+++ b/web/core/modules/book/src/Form/BookSettingsForm.php
@@ -47,7 +47,6 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#options' => $types,
       '#required' => TRUE,
     ];
-    $form['array_filter'] = ['#type' => 'value', '#value' => TRUE];
 
     return parent::buildForm($form, $form_state);
   }
@@ -56,7 +55,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
    * {@inheritdoc}
    */
   public function validateForm(array &$form, FormStateInterface $form_state) {
-    $child_type = $form_state->getValue('book_child_type');
+    $child_type = array_filter($form_state->getValue('book_child_type'));
     if ($form_state->isValueEmpty(['book_allowed_types', $child_type])) {
       $form_state->setErrorByName('book_child_type', $this->t('The content type for the %add-child link must be one of those selected as an allowed book outline type.', ['%add-child' => $this->t('Add child page')]));
     }
@@ -76,7 +75,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
     $this->config('book.settings')
     // Remove unchecked types.
       ->set('allowed_types', $allowed_types)
-      ->set('child_type', $form_state->getValue('book_child_type'))
+      ->set('child_type', array_filter($form_state->getValue('book_child_type')))
       ->save();
 
     parent::submitForm($form, $form_state);
diff --git a/web/core/modules/ckeditor/js/plugins/drupalimagecaption/plugin.es6.js b/web/core/modules/ckeditor/js/plugins/drupalimagecaption/plugin.es6.js
index f90a77088d..e415e5a661 100644
--- a/web/core/modules/ckeditor/js/plugins/drupalimagecaption/plugin.es6.js
+++ b/web/core/modules/ckeditor/js/plugins/drupalimagecaption/plugin.es6.js
@@ -215,7 +215,9 @@
                   'figcaption',
                 );
 
-                const captionFilter = new CKEDITOR.filter(widgetDefinition.editables.caption.allowedContent);
+                const captionFilter = new CKEDITOR.filter(
+                  widgetDefinition.editables.caption.allowedContent,
+                );
                 captionFilter.applyTo(caption);
 
                 // Use Drupal's data-placeholder attribute to insert a CSS-based,
diff --git a/web/core/modules/ckeditor/src/CKEditorPluginManager.php b/web/core/modules/ckeditor/src/CKEditorPluginManager.php
index 47fa80b06c..e3eda0d2b1 100644
--- a/web/core/modules/ckeditor/src/CKEditorPluginManager.php
+++ b/web/core/modules/ckeditor/src/CKEditorPluginManager.php
@@ -122,7 +122,7 @@ public static function getEnabledButtons(Editor $editor) {
     $toolbar_rows = [];
     $settings = $editor->getSettings();
     foreach ($settings['toolbar']['rows'] as $row_number => $row) {
-      $toolbar_rows[] = array_reduce($settings['toolbar']['rows'][$row_number], function (&$result, $button_group) {
+      $toolbar_rows[] = array_reduce($settings['toolbar']['rows'][$row_number], function ($result, $button_group) {
         return array_merge($result, $button_group['items']);
       }, []);
     }
diff --git a/web/core/modules/comment/comment.module b/web/core/modules/comment/comment.module
index a7ba9da4a7..ed50876a32 100644
--- a/web/core/modules/comment/comment.module
+++ b/web/core/modules/comment/comment.module
@@ -694,9 +694,8 @@ function template_preprocess_comment(&$variables) {
 
   $variables['submitted'] = t('Submitted by @username on @datetime', ['@username' => $variables['author'], '@datetime' => $variables['created']]);
 
-  if ($comment->hasParentComment()) {
+  if ($comment_parent = $comment->getParentComment()) {
     // Fetch and store the parent comment information for use in templates.
-    $comment_parent = $comment->getParentComment();
     $account_parent = $comment_parent->getOwner();
     $variables['parent_comment'] = $comment_parent;
     $username = [
diff --git a/web/core/modules/comment/src/CommentLazyBuilders.php b/web/core/modules/comment/src/CommentLazyBuilders.php
index 455bb689ea..11cb097189 100644
--- a/web/core/modules/comment/src/CommentLazyBuilders.php
+++ b/web/core/modules/comment/src/CommentLazyBuilders.php
@@ -144,9 +144,9 @@ public function renderLinks($comment_entity_id, $view_mode, $langcode, $is_in_pr
     if (!$is_in_preview) {
       /** @var \Drupal\comment\CommentInterface $entity */
       $entity = $this->entityTypeManager->getStorage('comment')->load($comment_entity_id);
-      $commented_entity = $entity->getCommentedEntity();
-
-      $links['comment'] = $this->buildLinks($entity, $commented_entity);
+      if ($commented_entity = $entity->getCommentedEntity()) {
+        $links['comment'] = $this->buildLinks($entity, $commented_entity);
+      }
 
       // Allow other modules to alter the comment links.
       $hook_context = [
diff --git a/web/core/modules/comment/src/CommentViewBuilder.php b/web/core/modules/comment/src/CommentViewBuilder.php
index b3fd17e59c..e2da95b850 100644
--- a/web/core/modules/comment/src/CommentViewBuilder.php
+++ b/web/core/modules/comment/src/CommentViewBuilder.php
@@ -80,9 +80,11 @@ protected function getBuildDefaults(EntityInterface $entity, $view_mode) {
 
     /** @var \Drupal\comment\CommentInterface $entity */
     // Store a threading field setting to use later in self::buildComponents().
-    $build['#comment_threaded'] = $entity->getCommentedEntity()
-      ->getFieldDefinition($entity->getFieldName())
-      ->getSetting('default_mode') === CommentManagerInterface::COMMENT_MODE_THREADED;
+    $commented_entity = $entity->getCommentedEntity();
+    $build['#comment_threaded'] =
+      is_null($commented_entity)
+      || $commented_entity->getFieldDefinition($entity->getFieldName())
+        ->getSetting('default_mode') === CommentManagerInterface::COMMENT_MODE_THREADED;
     // If threading is enabled, don't render cache individual comments, but do
     // keep the cacheability metadata, so it can bubble up.
     if ($build['#comment_threaded']) {
@@ -140,10 +142,12 @@ public function buildComponents(array &$build, array $entities, array $displays,
 
       // Commented entities already loaded after self::getBuildDefaults().
       $commented_entity = $entity->getCommentedEntity();
+      // Set defaults if the commented_entity does not exist.
+      $bundle = $commented_entity ? $commented_entity->bundle() : '';
+      $is_node = $commented_entity ? $commented_entity->getEntityTypeId() === 'node' : NULL;
 
       $build[$id]['#entity'] = $entity;
-      $build[$id]['#theme'] = 'comment__' . $entity->getFieldName() . '__' . $commented_entity->bundle();
-
+      $build[$id]['#theme'] = 'comment__' . $entity->getFieldName() . '__' . $bundle;
       $display = $displays[$entity->bundle()];
       if ($display->getComponent('links')) {
         $build[$id]['links'] = [
@@ -164,7 +168,7 @@ public function buildComponents(array &$build, array $entities, array $displays,
         $build[$id]['#attached'] = [];
       }
       $build[$id]['#attached']['library'][] = 'comment/drupal.comment-by-viewer';
-      if ($attach_history && $commented_entity->getEntityTypeId() === 'node') {
+      if ($attach_history && $is_node) {
         $build[$id]['#attached']['library'][] = 'comment/drupal.comment-new-indicator';
 
         // Embed the metadata for the comment "new" indicators on this node.
diff --git a/web/core/modules/comment/src/Entity/Comment.php b/web/core/modules/comment/src/Entity/Comment.php
index 5618cb0dde..13455fd4c4 100644
--- a/web/core/modules/comment/src/Entity/Comment.php
+++ b/web/core/modules/comment/src/Entity/Comment.php
@@ -404,7 +404,8 @@ public function setSubject($subject) {
    * {@inheritdoc}
    */
   public function getAuthorName() {
-    if ($this->get('uid')->target_id) {
+    // If their is a valid user id and the user entity exists return the label.
+    if ($this->get('uid')->target_id && $this->get('uid')->entity) {
       return $this->get('uid')->entity->label();
     }
     return $this->get('name')->value ?: \Drupal::config('user.settings')->get('anonymous');
diff --git a/web/core/modules/comment/tests/src/Kernel/CommentOrphanTest.php b/web/core/modules/comment/tests/src/Kernel/CommentOrphanTest.php
new file mode 100644
index 0000000000..78b7ea6fe2
--- /dev/null
+++ b/web/core/modules/comment/tests/src/Kernel/CommentOrphanTest.php
@@ -0,0 +1,134 @@
+<?php
+
+namespace Drupal\Tests\comment\Kernel;
+
+use Drupal\Core\Datetime\Entity\DateFormat;
+use Drupal\KernelTests\Core\Entity\EntityKernelTestBase;
+use Drupal\Tests\EntityViewTrait;
+use Drupal\field\Entity\FieldStorageConfig;
+
+/**
+ * Tests loading and rendering orphan comments.
+ *
+ * @group comment
+ */
+class CommentOrphanTest extends EntityKernelTestBase {
+
+  use EntityViewTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['comment', 'node'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+    $this->installEntitySchema('date_format');
+    $this->installEntitySchema('comment');
+    $this->installSchema('comment', ['comment_entity_statistics']);
+  }
+
+  /**
+   * Test loading/deleting/rendering orphaned comments.
+   *
+   * @dataProvider providerTestOrphan
+   */
+  public function testOrphan($property) {
+
+    DateFormat::create([
+      'id' => 'fallback',
+      'label' => 'Fallback',
+      'pattern' => 'Y-m-d',
+    ])->save();
+
+    $comment_storage = $this->entityTypeManager->getStorage('comment');
+    $node_storage = $this->entityTypeManager->getStorage('node');
+
+    // Create a page node type.
+    $this->entityTypeManager->getStorage('node_type')->create([
+      'type' => 'page',
+      'name' => 'page',
+    ])->save();
+
+    $node = $node_storage->create([
+      'type' => 'page',
+      'title' => 'test',
+    ]);
+    $node->save();
+
+    // Create comment field.
+    $this->entityTypeManager->getStorage('field_storage_config')->create([
+      'type' => 'text_long',
+      'entity_type' => 'node',
+      'field_name' => 'comment',
+    ])->save();
+
+    // Add comment field to page content.
+    $this->entityTypeManager->getStorage('field_config')->create([
+      'field_storage' => FieldStorageConfig::loadByName('node', 'comment'),
+      'entity_type' => 'node',
+      'bundle' => 'page',
+      'label' => 'Comment',
+    ])->save();
+
+    // Make two comments
+    $comment1 = $comment_storage->create([
+      'field_name' => 'comment',
+      'comment_body' => 'test',
+      'entity_id' => $node->id(),
+      'entity_type' => 'node',
+      'comment_type' => 'default',
+    ])->save();
+
+    $comment_storage->create([
+      'field_name' => 'comment',
+      'comment_body' => 'test',
+      'entity_id' => $node->id(),
+      'entity_type' => 'node',
+      'comment_type' => 'default',
+      'pid' => $comment1,
+    ])->save();
+
+    // Render the comments.
+    $renderer = \Drupal::service('renderer');
+    $comments = $comment_storage->loadMultiple();
+    foreach ($comments as $comment) {
+      $built = $this->buildEntityView($comment, 'full', NULL);
+      $renderer->renderPlain($built);
+    }
+
+    // Make comment 2 an orphan by setting the property to an invalid value.
+    \Drupal::database()->update('comment_field_data')
+      ->fields([$property => 10])
+      ->condition('cid', 2)
+      ->execute();
+    $comment_storage->resetCache();
+    $node_storage->resetCache();
+
+    // Render the comments with an orphan comment.
+    $comments = $comment_storage->loadMultiple();
+    foreach ($comments as $comment) {
+      $built = $this->buildEntityView($comment, 'full', NULL);
+      $renderer->renderPlain($built);
+    }
+
+    $node = $node_storage->load($node->id());
+    $built = $this->buildEntityView($node, 'full', NULL);
+    $renderer->renderPlain($built);
+  }
+
+  /**
+   * Provides test data for testOrphan.
+   */
+  public function providerTestOrphan() {
+    return [
+      ['entity_id'],
+      ['uid'],
+      ['pid'],
+    ];
+  }
+
+}
diff --git a/web/core/modules/field/src/Plugin/migrate/process/d6/FieldOptionTranslation.php b/web/core/modules/field/src/Plugin/migrate/process/d6/FieldOptionTranslation.php
index 05bb2ad0d6..8432c2b262 100644
--- a/web/core/modules/field/src/Plugin/migrate/process/d6/FieldOptionTranslation.php
+++ b/web/core/modules/field/src/Plugin/migrate/process/d6/FieldOptionTranslation.php
@@ -40,7 +40,7 @@ public function transform($value, MigrateExecutableInterface $migrate_executable
           $i = 0;
           foreach ($list as $allowed_value) {
             // Get the key for this allowed value which may be a key|label pair
-            // or or just key.
+            // or just key.
             $value = explode("|", $allowed_value);
             if (isset($value[0]) && ($value[0] == $option)) {
               $allowed_values = ['label' => $row->getSourceProperty('translation')];
diff --git a/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceAutoCreateTest.php b/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceAutoCreateTest.php
index 2147042897..8d590a8c6a 100644
--- a/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceAutoCreateTest.php
+++ b/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceAutoCreateTest.php
@@ -19,7 +19,7 @@ class EntityReferenceAutoCreateTest extends BrowserTestBase {
 
   use EntityReferenceTestTrait;
 
-  public static $modules = ['node', 'taxonomy'];
+  public static $modules = ['node', 'taxonomy', 'entity_test'];
 
   /**
    * {@inheritdoc}
@@ -237,4 +237,51 @@ public function testMultipleTargetBundles() {
     // $this->assertErrorLogged($error_message);
   }
 
+  /**
+   * Tests autocreation for an entity that has no bundles.
+   */
+  public function testNoBundles() {
+    $account = $this->drupalCreateUser([
+      'access content',
+      "create $this->referencingType content",
+      'administer entity_test content',
+    ]);
+    $this->drupalLogin($account);
+
+    $field_name = mb_strtolower($this->randomMachineName());
+    $handler_settings = [
+      'auto_create' => TRUE,
+    ];
+    $this->createEntityReferenceField('node', $this->referencingType, $field_name, $this->randomString(), 'entity_test_no_bundle_with_label', 'default', $handler_settings);
+    \Drupal::service('entity_display.repository')
+      ->getFormDisplay('node', $this->referencingType)
+      ->setComponent($field_name, ['type' => 'entity_reference_autocomplete'])
+      ->save();
+
+    $node_title = $this->randomMachineName();
+    $name = $this->randomMachineName();
+    $edit = [
+      $field_name . '[0][target_id]' => $name,
+      'title[0][value]' => $node_title,
+    ];
+
+    $this->drupalPostForm('node/add/' . $this->referencingType, $edit, 'Save');
+
+    // Assert referenced entity was created.
+    $result = \Drupal::entityQuery('entity_test_no_bundle_with_label')
+      ->condition('name', $name)
+      ->execute();
+    $this->assertNotEmpty($result, 'Referenced entity was created.');
+    $referenced_id = key($result);
+
+    // Assert the referenced entity is associated with referencing node.
+    $result = \Drupal::entityQuery('node')
+      ->condition('type', $this->referencingType)
+      ->execute();
+    $this->assertCount(1, $result);
+    $referencing_nid = key($result);
+    $referencing_node = Node::load($referencing_nid);
+    $this->assertEqual($referenced_id, $referencing_node->$field_name->target_id, 'Newly created node is referenced from the referencing entity.');
+  }
+
 }
diff --git a/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldFormatterSettingsTest.php b/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldFormatterSettingsTest.php
index 387a63e3cd..4806611b74 100644
--- a/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldFormatterSettingsTest.php
+++ b/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldFormatterSettingsTest.php
@@ -128,6 +128,8 @@ public function testMigration() {
 
     $this->assertEntity('node.blog.teaser');
     $this->assertComponent('node.blog.teaser', 'body', 'text_summary_or_trimmed', 'hidden', 0);
+    $this->assertComponent('node.blog.default', 'field_termplain', 'entity_reference_label', 'above', 13);
+    $this->assertComponent('node.blog.default', 'field_termrss', 'entity_reference_label', 'above', 14);
 
     $this->assertEntity('node.book.default');
     $this->assertComponent('node.book.default', 'body', 'text_default', 'hidden', 0);
diff --git a/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceTest.php b/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceTest.php
index 561e162460..fef7afb6c5 100644
--- a/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceTest.php
+++ b/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceTest.php
@@ -167,12 +167,8 @@ public function testFieldInstances() {
     $this->assertEntity('node.article.field_vocab_fixed', 'vocab_fixed', 'entity_reference', FALSE, TRUE);
     $this->assertEntity('node.article.field_vocab_localize', 'vocab_localize', 'entity_reference', FALSE, FALSE);
     $this->assertEntity('node.article.field_vocab_translate', 'vocab_translate', 'entity_reference', FALSE, TRUE);
-  }
 
-  /**
-   * Tests the migration of text field instances with different text processing.
-   */
-  public function testTextFieldInstances() {
+    // Test migration of text field instances with different text processing.
     // All text and text_long field instances using a field base that has only
     // plain text instances should be migrated to string and string_long fields.
     // All text_with_summary field instances using a field base that has only
diff --git a/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldTest.php b/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldTest.php
index 2fa3af38ef..a346a447b7 100644
--- a/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldTest.php
+++ b/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldTest.php
@@ -142,12 +142,8 @@ public function testFields() {
     // have a datetime_type setting.
     $field = FieldStorageConfig::load('node.field_date_with_end_time');
     $this->assertNull($field->getSetting('datetime_type'));
-  }
 
-  /**
-   * Tests the migration of text fields with different text processing.
-   */
-  public function testTextFields() {
+    // Test the migration of text fields with different text processing.
     // All text and text_long field bases that have only plain text instances
     // should be migrated to string and string_long fields.
     // All text_with_summary field bases that have only plain text instances
diff --git a/web/core/modules/file/file.module b/web/core/modules/file/file.module
index c0abe888b4..16494a4301 100644
--- a/web/core/modules/file/file.module
+++ b/web/core/modules/file/file.module
@@ -961,18 +961,19 @@ function file_save_upload($form_field_name, $validators = [], $destination = FAL
  */
 function _file_save_upload_single(\SplFileInfo $file_info, $form_field_name, $validators = [], $destination = FALSE, $replace = FileSystemInterface::EXISTS_REPLACE) {
   $user = \Drupal::currentUser();
+  $original_file_name = trim($file_info->getClientOriginalName(), '.');
   // Check for file upload errors and return FALSE for this file if a lower
   // level system error occurred. For a complete list of errors:
   // See http://php.net/manual/features.file-upload.errors.php.
   switch ($file_info->getError()) {
     case UPLOAD_ERR_INI_SIZE:
     case UPLOAD_ERR_FORM_SIZE:
-      \Drupal::messenger()->addError(t('The file %file could not be saved because it exceeds %maxsize, the maximum allowed size for uploads.', ['%file' => $file_info->getFilename(), '%maxsize' => format_size(Environment::getUploadMaxSize())]));
+      \Drupal::messenger()->addError(t('The file %file could not be saved because it exceeds %maxsize, the maximum allowed size for uploads.', ['%file' => $original_file_name, '%maxsize' => format_size(Environment::getUploadMaxSize())]));
       return FALSE;
 
     case UPLOAD_ERR_PARTIAL:
     case UPLOAD_ERR_NO_FILE:
-      \Drupal::messenger()->addError(t('The file %file could not be saved because the upload did not complete.', ['%file' => $file_info->getFilename()]));
+      \Drupal::messenger()->addError(t('The file %file could not be saved because the upload did not complete.', ['%file' => $original_file_name]));
       return FALSE;
 
     case UPLOAD_ERR_OK:
@@ -984,7 +985,7 @@ function _file_save_upload_single(\SplFileInfo $file_info, $form_field_name, $va
 
     default:
       // Unknown error
-      \Drupal::messenger()->addError(t('The file %file could not be saved. An unknown error has occurred.', ['%file' => $file_info->getFilename()]));
+      \Drupal::messenger()->addError(t('The file %file could not be saved. An unknown error has occurred.', ['%file' => $original_file_name]));
       return FALSE;
 
   }
@@ -992,7 +993,7 @@ function _file_save_upload_single(\SplFileInfo $file_info, $form_field_name, $va
   $values = [
     'uid' => $user->id(),
     'status' => 0,
-    'filename' => trim($file_info->getClientOriginalName(), '.'),
+    'filename' => $original_file_name,
     'uri' => $file_info->getRealPath(),
     'filesize' => $file_info->getSize(),
   ];
diff --git a/web/core/modules/file/tests/src/Functional/FilePrivateTest.php b/web/core/modules/file/tests/src/Functional/FilePrivateTest.php
index 93c7523de1..462b7570cb 100644
--- a/web/core/modules/file/tests/src/Functional/FilePrivateTest.php
+++ b/web/core/modules/file/tests/src/Functional/FilePrivateTest.php
@@ -2,8 +2,6 @@
 
 namespace Drupal\Tests\file\Functional;
 
-use Drupal\Core\Entity\Plugin\Validation\Constraint\ReferenceAccessConstraint;
-use Drupal\Component\Render\FormattableMarkup;
 use Drupal\file\Entity\File;
 use Drupal\node\Entity\NodeType;
 use Drupal\user\RoleInterface;
diff --git a/web/core/modules/file/tests/src/Kernel/FileModuleTest.php b/web/core/modules/file/tests/src/Kernel/FileModuleTest.php
index a1cfa2f51a..a3082bb60a 100644
--- a/web/core/modules/file/tests/src/Kernel/FileModuleTest.php
+++ b/web/core/modules/file/tests/src/Kernel/FileModuleTest.php
@@ -28,7 +28,7 @@ public function testFileSaveUploadSingleErrorFormSize() {
     $file_name = $this->randomMachineName();
     $file_info = $this->createMock(UploadedFile::class);
     $file_info->expects($this->once())->method('getError')->willReturn(UPLOAD_ERR_FORM_SIZE);
-    $file_info->expects($this->once())->method('getFileName')->willReturn($file_name);
+    $file_info->expects($this->once())->method('getClientOriginalName')->willReturn($file_name);
     $this->assertFalse(\_file_save_upload_single($file_info, 'name'));
     $expected_message = new TranslatableMarkup('The file %file could not be saved because it exceeds %maxsize, the maximum allowed size for uploads.', ['%file' => $file_name, '%maxsize' => format_size(Environment::getUploadMaxSize())]);
     $this->assertEquals($expected_message, \Drupal::messenger()->all()['error'][0]);
diff --git a/web/core/modules/file/tests/src/Kernel/Plugin/migrate/source/d7/FileTest.php b/web/core/modules/file/tests/src/Kernel/Plugin/migrate/source/d7/FileTest.php
index b588ad789c..32a31ea0a8 100644
--- a/web/core/modules/file/tests/src/Kernel/Plugin/migrate/source/d7/FileTest.php
+++ b/web/core/modules/file/tests/src/Kernel/Plugin/migrate/source/d7/FileTest.php
@@ -117,6 +117,7 @@ public function providerSource() {
         'filesize' => '3620',
         'status' => '1',
         'timestamp' => '1421727515',
+        'filepath' => 'sites/default/files/cube.jpeg',
       ],
     ];
     // Do an automatic count.
@@ -143,6 +144,7 @@ public function providerSource() {
         'filesize' => '3620',
         'status' => '1',
         'timestamp' => '1421727515',
+        'filepath' => 'sites/default/files/cube.jpeg',
       ],
     ];
     // Do an automatic count.
diff --git a/web/core/modules/filter/src/Plugin/Filter/FilterCaption.php b/web/core/modules/filter/src/Plugin/Filter/FilterCaption.php
index b5a58563d3..817f73b7af 100644
--- a/web/core/modules/filter/src/Plugin/Filter/FilterCaption.php
+++ b/web/core/modules/filter/src/Plugin/Filter/FilterCaption.php
@@ -3,7 +3,6 @@
 namespace Drupal\filter\Plugin\Filter;
 
 use Drupal\Component\Utility\Html;
-use Drupal\Component\Utility\Xss;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\filter\FilterPluginManager;
 use Drupal\filter\FilterProcessResult;
diff --git a/web/core/modules/language/src/Plugin/migrate/source/d6/LanguageContentSettingsTaxonomyVocabulary.php b/web/core/modules/language/src/Plugin/migrate/source/d6/LanguageContentSettingsTaxonomyVocabulary.php
index 4cde5687f6..7787865b61 100644
--- a/web/core/modules/language/src/Plugin/migrate/source/d6/LanguageContentSettingsTaxonomyVocabulary.php
+++ b/web/core/modules/language/src/Plugin/migrate/source/d6/LanguageContentSettingsTaxonomyVocabulary.php
@@ -19,8 +19,14 @@ class LanguageContentSettingsTaxonomyVocabulary extends DrupalSqlBase {
    * {@inheritdoc}
    */
   public function query() {
-    return $this->select('vocabulary', 'v')
-      ->fields('v', ['vid', 'language']);
+    $query = $this->select('vocabulary', 'v')
+      ->fields('v', ['vid']);
+    if ($this->getDatabase()
+      ->schema()
+      ->fieldExists('vocabulary', 'language')) {
+      $query->addField('v', 'language');
+    }
+    return $query;
   }
 
   /**
@@ -44,9 +50,9 @@ public function prepareRow(Row $row) {
     // 2 - Predefined language for a vocabulary and its terms.
     // 3 - Per-language terms, translatable (referencing terms with different
     // languages) but not localizable.
-    $i18ntaxonomy_vocabulary = $this->variableGet('i18ntaxonomy_vocabulary', NULL);
+    $i18ntaxonomy_vocabulary = $this->variableGet('i18ntaxonomy_vocabulary', []);
     $vid = $row->getSourceProperty('vid');
-    $state = FALSE;
+    $state = 0;
     if (array_key_exists($vid, $i18ntaxonomy_vocabulary)) {
       $state = $i18ntaxonomy_vocabulary[$vid];
     }
diff --git a/web/core/modules/language/tests/src/Kernel/Plugin/migrate/source/d6/LanguageContentTaxonomyVocabularySettingsTest.php b/web/core/modules/language/tests/src/Kernel/Plugin/migrate/source/d6/LanguageContentTaxonomyVocabularySettingsTest.php
index c709859f76..e4abb3d9fe 100644
--- a/web/core/modules/language/tests/src/Kernel/Plugin/migrate/source/d6/LanguageContentTaxonomyVocabularySettingsTest.php
+++ b/web/core/modules/language/tests/src/Kernel/Plugin/migrate/source/d6/LanguageContentTaxonomyVocabularySettingsTest.php
@@ -75,7 +75,33 @@ public function providerSource() {
       ],
     ];
 
+    // Test without a language column in the database.
+    $tests[1] = $tests[0];
+    foreach ($tests[1]['source_data']['vocabulary'] as $key => $row) {
+      unset($tests[1]['source_data']['vocabulary'][$key]['language']);
+    }
+    $tests[1]['source_data']['variable'] = [
+      [
+        'name' => 'i18ntaxonomy_vocabulary',
+        'value' => 'a:4:{i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"3";i:5;s:1:"1";}',
+      ],
+    ];
+    $tests[1]['expected_data'] = [
+      [
+        'vid' => 1,
+        'state' => 0,
+      ],
+      [
+        'vid' => 2,
+        'state' => 0,
+      ],
+    ];
+
+    // Test without a i18ntaxonomy_vocabulary variable.
+    $tests[2] = $tests[1];
+    unset($tests[2]['source_data']['variable']);
     return $tests;
+
   }
 
 }
diff --git a/web/core/modules/link/src/Plugin/migrate/process/FieldLink.php b/web/core/modules/link/src/Plugin/migrate/process/FieldLink.php
index 143b7ea09b..14f615e3b4 100644
--- a/web/core/modules/link/src/Plugin/migrate/process/FieldLink.php
+++ b/web/core/modules/link/src/Plugin/migrate/process/FieldLink.php
@@ -60,10 +60,15 @@ public function __construct(array $configuration, $plugin_id, $plugin_definition
    */
   protected function canonicalizeUri($uri) {
     // If we already have a scheme, we're fine.
-    if (empty($uri) || parse_url($uri, PHP_URL_SCHEME)) {
+    if (parse_url($uri, PHP_URL_SCHEME)) {
       return $uri;
     }
 
+    // Empty URI and non-links are allowed.
+    if (empty($uri) || in_array($uri, ['<nolink>', '<none>'])) {
+      return 'route:<nolink>';
+    }
+
     // Remove the <front> component of the URL.
     if (strpos($uri, '<front>') === 0) {
       $uri = substr($uri, strlen('<front>'));
diff --git a/web/core/modules/link/tests/src/Unit/Plugin/migrate/process/FieldLinkTest.php b/web/core/modules/link/tests/src/Unit/Plugin/migrate/process/FieldLinkTest.php
index 18456aa86a..6185341058 100644
--- a/web/core/modules/link/tests/src/Unit/Plugin/migrate/process/FieldLinkTest.php
+++ b/web/core/modules/link/tests/src/Unit/Plugin/migrate/process/FieldLinkTest.php
@@ -86,6 +86,18 @@ public function canonicalizeUriDataProvider() {
         'http://www.example.com/page#links',
         'http://www.example.com/page#links',
       ],
+      'empty' => [
+        '',
+        'route:<nolink>',
+      ],
+      'No link' => [
+        '<nolink>',
+        'route:<nolink>',
+      ],
+      'none' => [
+        '<none>',
+        'route:<nolink>',
+      ],
     ];
   }
 
diff --git a/web/core/modules/media/src/OEmbed/Endpoint.php b/web/core/modules/media/src/OEmbed/Endpoint.php
index 38d265d5bd..97f97e2815 100644
--- a/web/core/modules/media/src/OEmbed/Endpoint.php
+++ b/web/core/modules/media/src/OEmbed/Endpoint.php
@@ -162,11 +162,17 @@ public function matchUrl($url) {
   /**
    * Builds and returns the endpoint URL.
    *
+   * In most situations this function should not be used. Your are probably
+   * looking for \Drupal\media\OEmbed\UrlResolver::getResourceUrl(), because it
+   * is alterable and also cached.
+   *
    * @param string $url
    *   The canonical media URL.
    *
    * @return string
    *   URL of the oEmbed endpoint.
+   *
+   * @see \Drupal\media\OEmbed\UrlResolver::getResourceUrl()
    */
   public function buildResourceUrl($url) {
     $query = ['url' => $url];
diff --git a/web/core/modules/media/src/Plugin/Validation/Constraint/OEmbedResourceConstraintValidator.php b/web/core/modules/media/src/Plugin/Validation/Constraint/OEmbedResourceConstraintValidator.php
index 3b885cce8f..e39b2055cc 100644
--- a/web/core/modules/media/src/Plugin/Validation/Constraint/OEmbedResourceConstraintValidator.php
+++ b/web/core/modules/media/src/Plugin/Validation/Constraint/OEmbedResourceConstraintValidator.php
@@ -113,8 +113,7 @@ public function validate($value, Constraint $constraint) {
     // Verify that resource fetching works, because some URLs might match
     // the schemes but don't support oEmbed.
     try {
-      $endpoints = $provider->getEndpoints();
-      $resource_url = reset($endpoints)->buildResourceUrl($url);
+      $resource_url = $this->urlResolver->getResourceUrl($url);
       $this->resourceFetcher->fetchResource($resource_url);
     }
     catch (ResourceException $e) {
diff --git a/web/core/modules/media/src/Plugin/media/Source/OEmbed.php b/web/core/modules/media/src/Plugin/media/Source/OEmbed.php
index 6a3621a3b5..58a819c25a 100644
--- a/web/core/modules/media/src/Plugin/media/Source/OEmbed.php
+++ b/web/core/modules/media/src/Plugin/media/Source/OEmbed.php
@@ -394,10 +394,14 @@ protected function getLocalThumbnailUri(Resource $resource) {
     }
     $remote_thumbnail_url = $remote_thumbnail_url->toString();
 
+    // Remove the query string, since we do not want to include it in the local
+    // thumbnail URI.
+    $local_thumbnail_url = parse_url($remote_thumbnail_url, PHP_URL_PATH);
+
     // Compute the local thumbnail URI, regardless of whether or not it exists.
     $configuration = $this->getConfiguration();
     $directory = $configuration['thumbnails_directory'];
-    $local_thumbnail_uri = "$directory/" . Crypt::hashBase64($remote_thumbnail_url) . '.' . pathinfo($remote_thumbnail_url, PATHINFO_EXTENSION);
+    $local_thumbnail_uri = "$directory/" . Crypt::hashBase64($local_thumbnail_url) . '.' . pathinfo($local_thumbnail_url, PATHINFO_EXTENSION);
 
     // If the local thumbnail already exists, return its URI.
     if (file_exists($local_thumbnail_uri)) {
diff --git a/web/core/modules/media/tests/src/Kernel/OEmbedResourceConstraintValidatorTest.php b/web/core/modules/media/tests/src/Kernel/OEmbedResourceConstraintValidatorTest.php
index 692c9bb6cf..e085785ab4 100644
--- a/web/core/modules/media/tests/src/Kernel/OEmbedResourceConstraintValidatorTest.php
+++ b/web/core/modules/media/tests/src/Kernel/OEmbedResourceConstraintValidatorTest.php
@@ -4,6 +4,8 @@
 
 use Drupal\KernelTests\KernelTestBase;
 use Drupal\media\Entity\Media;
+use Drupal\media\OEmbed\Provider;
+use Drupal\media\OEmbed\ResourceFetcher;
 use Drupal\media\OEmbed\UrlResolverInterface;
 use Drupal\media\Plugin\Validation\Constraint\OEmbedResourceConstraint;
 use Drupal\media\Plugin\Validation\Constraint\OEmbedResourceConstraintValidator;
@@ -37,7 +39,7 @@ protected function setUp() {
   /**
    * @covers ::validate
    */
-  public function testValidate() {
+  public function testValidateEmptySource() {
     $media = Media::create([
       'bundle' => $this->createMediaType('oembed:video')->id(),
     ]);
@@ -52,7 +54,55 @@ public function testValidate() {
     $url_resolver = $this->prophesize(UrlResolverInterface::class);
     $url_resolver->getProviderByUrl(Argument::any())->shouldNotBeCalled();
 
-    $value = new class ($media) {
+    $validator = new OEmbedResourceConstraintValidator(
+      $url_resolver->reveal(),
+      $this->container->get('media.oembed.resource_fetcher'),
+      $this->container->get('logger.factory')
+    );
+    $validator->initialize($context->reveal());
+    $validator->validate($this->getValue($media), $constraint);
+  }
+
+  /**
+   * @covers ::validate
+   */
+  public function testValidateUrlResolverInvoked() {
+    $media = Media::create([
+      'bundle' => $this->createMediaType('oembed:video')->id(),
+      'field_media_oembed_video' => 'source value',
+    ]);
+
+    $constraint = new OEmbedResourceConstraint();
+
+    $context = $this->prophesize(ExecutionContextInterface::class);
+
+    $provider = $this->prophesize(Provider::class);
+    $provider->getName()->willReturn('YouTube');
+
+    $url_resolver = $this->prophesize(UrlResolverInterface::class);
+    $url_resolver->getProviderByUrl(Argument::any())->willReturn($provider->reveal());
+    $url_resolver->getResourceUrl(Argument::any())->shouldBeCalledOnce();
+
+    $validator = new OEmbedResourceConstraintValidator(
+      $url_resolver->reveal(),
+      $this->prophesize(ResourceFetcher::class)->reveal(),
+      $this->container->get('logger.factory')
+    );
+    $validator->initialize($context->reveal());
+    $validator->validate($this->getValue($media), $constraint);
+  }
+
+  /**
+   * Wraps a media entity in an anonymous class to mock a field value.
+   *
+   * @param \Drupal\media\Entity\Media $media
+   *   The media object.
+   *
+   * @return object
+   *   The mock field value to validate.
+   */
+  protected function getValue(Media $media) {
+    return new class ($media) {
 
       public function __construct($entity) {
         $this->entity = $entity;
@@ -63,14 +113,6 @@ public function getEntity() {
       }
 
     };
-
-    $validator = new OEmbedResourceConstraintValidator(
-      $url_resolver->reveal(),
-      $this->container->get('media.oembed.resource_fetcher'),
-      $this->container->get('logger.factory')
-    );
-    $validator->initialize($context->reveal());
-    $validator->validate($value, $constraint);
   }
 
 }
diff --git a/web/core/modules/media/tests/src/Kernel/OEmbedSourceTest.php b/web/core/modules/media/tests/src/Kernel/OEmbedSourceTest.php
index 180085ae04..d2c2414e12 100644
--- a/web/core/modules/media/tests/src/Kernel/OEmbedSourceTest.php
+++ b/web/core/modules/media/tests/src/Kernel/OEmbedSourceTest.php
@@ -2,20 +2,23 @@
 
 namespace Drupal\Tests\media\Kernel;
 
-use Drupal\KernelTests\KernelTestBase;
+use Drupal\Component\Utility\Crypt;
+use Drupal\Core\Url;
+use Drupal\media\Entity\Media;
+use Drupal\media\OEmbed\Resource;
+use Drupal\media\OEmbed\ResourceFetcherInterface;
+use Drupal\media\OEmbed\UrlResolverInterface;
 use Drupal\media\Plugin\media\Source\OEmbed;
+use GuzzleHttp\Client;
+use GuzzleHttp\Psr7\Response;
+use Prophecy\Argument;
 
 /**
  * @coversDefaultClass \Drupal\media\Plugin\media\Source\OEmbed
  *
  * @group media
  */
-class OEmbedSourceTest extends KernelTestBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $modules = ['media'];
+class OEmbedSourceTest extends MediaKernelTestBase {
 
   /**
    * @covers ::getMetadata
@@ -34,4 +37,49 @@ public function testGetMetadata() {
     $this->assertNull($plugin->getMetadata($media->reveal(), 'type'));
   }
 
+  /**
+   * @covers ::getLocalThumbnailUri
+   */
+  public function testLocalThumbnailUriQueryStringIsIgnored() {
+    // There's no need to resolve the resource URL in this test; we just need
+    // to fetch the resource.
+    $this->container->set(
+      'media.oembed.url_resolver',
+      $this->prophesize(UrlResolverInterface::class)->reveal()
+    );
+
+    $thumbnail_url = Url::fromUri('internal:/core/misc/druplicon.png?foo=bar');
+
+    // Create a mocked resource whose thumbnail URL contains a query string.
+    $resource = $this->prophesize(Resource::class);
+    $resource->getTitle()->willReturn('Test resource');
+    $resource->getThumbnailUrl()->willReturn($thumbnail_url);
+
+    // The source plugin will try to fetch the remote thumbnail, so mock the
+    // HTTP client to ensure that request returns an empty "OK" response.
+    $http_client = $this->prophesize(Client::class);
+    $http_client->get(Argument::type('string'))->willReturn(new Response());
+    $this->container->set('http_client', $http_client->reveal());
+
+    // Mock the resource fetcher so that it will return our mocked resource.
+    $resource_fetcher = $this->prophesize(ResourceFetcherInterface::class);
+    $resource_fetcher->fetchResource(NULL)->willReturn($resource->reveal());
+    $this->container->set('media.oembed.resource_fetcher', $resource_fetcher->reveal());
+
+    $media_type = $this->createMediaType('oembed:video');
+    $source = $media_type->getSource();
+
+    $media = Media::create([
+      'bundle' => $media_type->id(),
+      $source->getSourceFieldDefinition($media_type)->getName() => $this->randomString(),
+    ]);
+    $media->save();
+
+    // Get the local thumbnail URI and ensure that it does not contain any
+    // query string.
+    $local_thumbnail_uri = $media_type->getSource()->getMetadata($media, 'thumbnail_uri');
+    $expected_uri = 'public://oembed_thumbnails/' . Crypt::hashBase64('/core/misc/druplicon.png') . '.png';
+    $this->assertSame($expected_uri, $local_thumbnail_uri);
+  }
+
 }
diff --git a/web/core/modules/media_library/media_library.module b/web/core/modules/media_library/media_library.module
index 5312b8e96d..5726a80a4a 100644
--- a/web/core/modules/media_library/media_library.module
+++ b/web/core/modules/media_library/media_library.module
@@ -84,11 +84,21 @@ function media_library_help($route_name, RouteMatchInterface $route_match) {
  * Implements hook_media_source_info_alter().
  */
 function media_library_media_source_info_alter(array &$sources) {
-  $sources['audio_file']['forms']['media_library_add'] = FileUploadForm::class;
-  $sources['file']['forms']['media_library_add'] = FileUploadForm::class;
-  $sources['image']['forms']['media_library_add'] = FileUploadForm::class;
-  $sources['video_file']['forms']['media_library_add'] = FileUploadForm::class;
-  $sources['oembed:video']['forms']['media_library_add'] = OEmbedForm::class;
+  if (empty($sources['audio_file']['forms']['media_library_add'])) {
+    $sources['audio_file']['forms']['media_library_add'] = FileUploadForm::class;
+  }
+  if (empty($sources['file']['forms']['media_library_add'])) {
+    $sources['file']['forms']['media_library_add'] = FileUploadForm::class;
+  }
+  if (empty($sources['image']['forms']['media_library_add'])) {
+    $sources['image']['forms']['media_library_add'] = FileUploadForm::class;
+  }
+  if (empty($sources['video_file']['forms']['media_library_add'])) {
+    $sources['video_file']['forms']['media_library_add'] = FileUploadForm::class;
+  }
+  if (empty($sources['oembed:video']['forms']['media_library_add'])) {
+    $sources['oembed:video']['forms']['media_library_add'] = OEmbedForm::class;
+  }
 }
 
 /**
diff --git a/web/core/modules/media_library/src/MediaLibraryFieldWidgetOpener.php b/web/core/modules/media_library/src/MediaLibraryFieldWidgetOpener.php
index 84099ed3f6..348f22f104 100644
--- a/web/core/modules/media_library/src/MediaLibraryFieldWidgetOpener.php
+++ b/web/core/modules/media_library/src/MediaLibraryFieldWidgetOpener.php
@@ -69,7 +69,11 @@ public function checkAccess(MediaLibraryState $state, AccountInterface $account)
     $storage = $this->entityTypeManager->getStorage($entity_type_id);
     $access_handler = $this->entityTypeManager->getAccessControlHandler($entity_type_id);
 
-    if ($parameters['entity_id']) {
+    if (!empty($parameters['revision_id'])) {
+      $entity = $storage->loadRevision($parameters['revision_id']);
+      $entity_access = $access_handler->access($entity, 'update', $account, TRUE);
+    }
+    elseif ($parameters['entity_id']) {
       $entity = $storage->load($parameters['entity_id']);
       $entity_access = $access_handler->access($entity, 'update', $account, TRUE);
     }
diff --git a/web/core/modules/media_library/src/Plugin/Field/FieldWidget/MediaLibraryWidget.php b/web/core/modules/media_library/src/Plugin/Field/FieldWidget/MediaLibraryWidget.php
index f957b77fdd..0ab737ccf5 100644
--- a/web/core/modules/media_library/src/Plugin/Field/FieldWidget/MediaLibraryWidget.php
+++ b/web/core/modules/media_library/src/Plugin/Field/FieldWidget/MediaLibraryWidget.php
@@ -473,6 +473,10 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
     // tamper-proof hash in a consistent way.
     if (!$entity->isNew()) {
       $opener_parameters['entity_id'] = (string) $entity->id();
+
+      if ($entity->getEntityType()->isRevisionable()) {
+        $opener_parameters['revision_id'] = (string) $entity->getRevisionId();
+      }
     }
     $state = MediaLibraryState::create('media_library.opener.field_widget', $allowed_media_type_ids, $selected_type_id, $remaining, $opener_parameters);
 
diff --git a/web/core/modules/media_library/tests/modules/media_library_form_overwrite_test/media_library_form_overwrite_test.info.yml b/web/core/modules/media_library/tests/modules/media_library_form_overwrite_test/media_library_form_overwrite_test.info.yml
new file mode 100644
index 0000000000..d2799420a8
--- /dev/null
+++ b/web/core/modules/media_library/tests/modules/media_library_form_overwrite_test/media_library_form_overwrite_test.info.yml
@@ -0,0 +1,10 @@
+name: 'Media Library Form Overwrite test'
+type: module
+description: 'Test module for Media Library.'
+package: Testing
+dependencies:
+  - drupal:image
+  - drupal:media_library
+  - drupal:menu_ui
+  - drupal:node
+  - drupal:path
diff --git a/web/core/modules/media_library/tests/modules/media_library_form_overwrite_test/media_library_form_overwrite_test.module b/web/core/modules/media_library/tests/modules/media_library_form_overwrite_test/media_library_form_overwrite_test.module
new file mode 100644
index 0000000000..f52e79dd06
--- /dev/null
+++ b/web/core/modules/media_library/tests/modules/media_library_form_overwrite_test/media_library_form_overwrite_test.module
@@ -0,0 +1,12 @@
+<?php
+
+/**
+ * @file
+ * Contains.
+ */
+
+use Drupal\media_library_form_overwrite_test\Form\TestAddForm;
+
+function media_library_form_overwrite_test_media_source_info_alter(array &$sources) {
+  $sources['image']['forms']['media_library_add'] = TestAddForm::class;
+}
diff --git a/web/core/modules/media_library/tests/modules/media_library_form_overwrite_test/src/Form/TestAddForm.php b/web/core/modules/media_library/tests/modules/media_library_form_overwrite_test/src/Form/TestAddForm.php
new file mode 100644
index 0000000000..cddece17ac
--- /dev/null
+++ b/web/core/modules/media_library/tests/modules/media_library_form_overwrite_test/src/Form/TestAddForm.php
@@ -0,0 +1,27 @@
+<?php
+
+namespace Drupal\media_library_form_overwrite_test\Form;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\media_library\Form\AddFormBase;
+
+/**
+ * Test add form.
+ */
+class TestAddForm extends AddFormBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function buildInputElement(array $form, FormStateInterface $form_state) {
+    return [];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFormId() {
+    return 'test_add_form';
+  }
+
+}
diff --git a/web/core/modules/media_library/tests/src/Kernel/MediaLibraryAddFormTest.php b/web/core/modules/media_library/tests/src/Kernel/MediaLibraryAddFormTest.php
index 51b70c9780..79a481eabd 100644
--- a/web/core/modules/media_library/tests/src/Kernel/MediaLibraryAddFormTest.php
+++ b/web/core/modules/media_library/tests/src/Kernel/MediaLibraryAddFormTest.php
@@ -7,6 +7,7 @@
 use Drupal\media_library\Form\FileUploadForm;
 use Drupal\media_library\Form\OEmbedForm;
 use Drupal\media_library\MediaLibraryState;
+use Drupal\media_library_form_overwrite_test\Form\TestAddForm;
 use Drupal\Tests\media\Traits\MediaTypeCreationTrait;
 use Drupal\Tests\user\Traits\UserCreationTrait;
 
@@ -137,4 +138,19 @@ public function testSelectedTypeValidation() {
     \Drupal::formBuilder()->buildForm(FileUploadForm::class, $form_state);
   }
 
+  /**
+   * Tests overwriting of the add form.
+   */
+  public function testDifferentAddForm() {
+    $this->enableModules(['media_library_form_overwrite_test']);
+
+    $entity_type_manager = \Drupal::entityTypeManager();
+    $image = $entity_type_manager->getStorage('media_type')->load('image');
+
+    $image_source_definition = $image->getSource()->getPluginDefinition();
+
+    // Assert the overwritten form class is set to the media source.
+    $this->assertSame(TestAddForm::class, $image_source_definition['forms']['media_library_add']);
+  }
+
 }
diff --git a/web/core/modules/media_library/tests/src/Kernel/MediaLibraryWidgetTest.php b/web/core/modules/media_library/tests/src/Kernel/MediaLibraryWidgetTest.php
new file mode 100644
index 0000000000..d5ae2d0c53
--- /dev/null
+++ b/web/core/modules/media_library/tests/src/Kernel/MediaLibraryWidgetTest.php
@@ -0,0 +1,158 @@
+<?php
+
+namespace Drupal\Tests\media_library\Kernel;
+
+use Drupal\Core\Field\BaseFieldDefinition;
+use Drupal\Core\Form\FormState;
+use Drupal\entity_test\Entity\EntityTest;
+use Drupal\entity_test\Entity\EntityTestRev;
+use Drupal\KernelTests\KernelTestBase;
+use Drupal\media\Entity\MediaType;
+use Drupal\Tests\user\Traits\UserCreationTrait;
+
+/**
+ * Tests the media library widget.
+ *
+ * @coversDefaultClass \Drupal\media_library\Plugin\Field\FieldWidget\MediaLibraryWidget
+ * @group media_library
+ */
+class MediaLibraryWidgetTest extends KernelTestBase {
+
+  use UserCreationTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'media',
+    'media_library',
+    'field',
+    'image',
+    'system',
+    'views',
+    'user',
+    'entity_test',
+  ];
+
+  /**
+   * An admin user.
+   *
+   * @var \Drupal\user\Entity\User
+   */
+  protected $adminUser;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->baseField = BaseFieldDefinition::create('entity_reference')
+      ->setName('media')
+      ->setSetting('target_type', 'media')
+      ->setSetting('handler_settings', ['target_bundles' => ['test_type' => 'test_type']]);
+    $this->container->get('state')->set('entity_test.additional_base_field_definitions', [
+      'media' => $this->baseField,
+    ]);
+    $this->container->get('state')->set('entity_test_rev.additional_base_field_definitions', [
+      'media' => $this->baseField,
+    ]);
+
+    $this->installEntitySchema('entity_test');
+    $this->installEntitySchema('entity_test_rev');
+    $this->installEntitySchema('user');
+    $this->installSchema('system', ['sequences', 'key_value_expire']);
+    $this->installConfig([
+      'system',
+      'image',
+      'media',
+      'media_library',
+    ]);
+
+    MediaType::create([
+      'id' => 'test_type',
+      'label' => 'Test type',
+      'source' => 'image',
+    ])->save();
+
+    // Create user 1 so the test user doesn't bypass access control.
+    $this->createUser();
+
+    $this->adminUser = $this->createUser([
+      'administer entity_test content',
+      'view media',
+    ]);
+  }
+
+  /**
+   * Test the media library widget access.
+   */
+  public function testWidgetAccess() {
+    $entity = EntityTest::create([
+      'name' => 'sample entity',
+    ]);
+    $entity->save();
+    $element = $this->buildWidgetForm($entity);
+    $this->assertMediaLibraryStateAccess(TRUE, $this->adminUser, $element['open_button']['#media_library_state']);
+  }
+
+  /**
+   * Test the media library widget access with a revisionable entity type.
+   */
+  public function testRevisionableWidgetAccess() {
+    $allowed_revision = EntityTestRev::create([
+      'name' => 'allowed_access',
+    ]);
+    $allowed_revision->save();
+
+    $denied_revision = clone $allowed_revision;
+    $denied_revision->setNewRevision();
+    $denied_revision->name = 'forbid_access';
+    $denied_revision->save();
+
+    $element = $this->buildWidgetForm($allowed_revision);
+    $this->assertMediaLibraryStateAccess(TRUE, $this->adminUser, $element['open_button']['#media_library_state']);
+
+    $element = $this->buildWidgetForm($denied_revision);
+    $this->assertMediaLibraryStateAccess(FALSE, $this->adminUser, $element['open_button']['#media_library_state']);
+  }
+
+  /**
+   * Assert if the given user has access to the given state.
+   *
+   * @param bool $access
+   *   The access result to assert.
+   * @param \Drupal\Core\Session\AccountInterface $user
+   *   The user account.
+   * @param \Drupal\media_library\MediaLibraryState $state
+   *   The media library state.
+   *
+   * @throws \Exception
+   */
+  protected function assertMediaLibraryStateAccess($access, $user, $state) {
+    $ui_builder = $this->container->get('media_library.ui_builder');
+    $access_result = $ui_builder->checkAccess($user, $state);
+    $this->assertEquals($access, $access_result->isAllowed());
+  }
+
+  /**
+   * Build the media library widget form.
+   *
+   * @param \Drupal\Core\Entity\EntityInterface $entity
+   *   The entity to build the form for.
+   *
+   * @return array
+   *   A built form array of the media library widget.
+   */
+  protected function buildWidgetForm($entity) {
+    $form = [
+      '#parents' => [],
+    ];
+    return $this->container->get('plugin.manager.field.widget')->createInstance('media_library_widget', [
+      'field_definition' => $this->baseField,
+      'settings' => [],
+      'third_party_settings' => [],
+    ])->formElement($entity->media, 0, ['#description' => ''], $form, new FormState());
+  }
+
+}
diff --git a/web/core/modules/migrate/src/MigrateExecutable.php b/web/core/modules/migrate/src/MigrateExecutable.php
index c3a0506419..f15cdf69d9 100644
--- a/web/core/modules/migrate/src/MigrateExecutable.php
+++ b/web/core/modules/migrate/src/MigrateExecutable.php
@@ -189,7 +189,11 @@ public function import() {
     }
     catch (\Exception $e) {
       $this->message->display(
-        $this->t('Migration failed with source plugin exception: @e', ['@e' => $e->getMessage()]), 'error');
+        $this->t('Migration failed with source plugin exception: @e in @file line @line', [
+          '@e' => $e->getMessage(),
+          '@file' => $e->getFile(),
+          '@line' => $e->getLine(),
+        ]), 'error');
       $this->migration->setStatus(MigrationInterface::STATUS_IDLE);
       return MigrationInterface::RESULT_FAILED;
     }
@@ -269,8 +273,11 @@ public function import() {
       }
       catch (\Exception $e) {
         $this->message->display(
-          $this->t('Migration failed with source plugin exception: @e',
-            ['@e' => $e->getMessage()]), 'error');
+          $this->t('Migration failed with source plugin exception: @e in @file line @line', [
+            '@e' => $e->getMessage(),
+            '@file' => $e->getFile(),
+            '@line' => $e->getLine(),
+          ]), 'error');
         $this->migration->setStatus(MigrationInterface::STATUS_IDLE);
         return MigrationInterface::RESULT_FAILED;
       }
diff --git a/web/core/modules/migrate/src/Plugin/MigrateProcessInterface.php b/web/core/modules/migrate/src/Plugin/MigrateProcessInterface.php
index 8fef305f74..09ff01e48a 100644
--- a/web/core/modules/migrate/src/Plugin/MigrateProcessInterface.php
+++ b/web/core/modules/migrate/src/Plugin/MigrateProcessInterface.php
@@ -9,16 +9,9 @@
 /**
  * An interface for migrate process plugins.
  *
- * A process plugin will typically implement the transform() method to perform
- * its work. However, it is possible instead for a process plugin to use any
- * number of methods, thus offering different alternatives ways of processing.
- * In this case, the transform() method should not be implemented, and the
- * plugin configuration must provide the name of the method to be called via the
- * "method" key. Each method must have the same signature as transform().
- * The base class \Drupal\migrate\ProcessPluginBase takes care of implementing
- * transform() and calling the configured method. See
- * \Drupal\migrate\Plugin\migrate\process\SkipOnEmpty and
- * d6_field_instance_widget_settings.yml for examples.
+ * Migrate process plugins transform the input value.For example, transform a
+ * human provided name into a machine name, look up an identifier in a previous
+ * migration and so on.
  *
  * @see \Drupal\migrate\Plugin\MigratePluginManager
  * @see \Drupal\migrate\ProcessPluginBase
diff --git a/web/core/modules/migrate/src/Plugin/migrate/destination/Entity.php b/web/core/modules/migrate/src/Plugin/migrate/destination/Entity.php
index 6bd1ec4edf..2978842ff9 100644
--- a/web/core/modules/migrate/src/Plugin/migrate/destination/Entity.php
+++ b/web/core/modules/migrate/src/Plugin/migrate/destination/Entity.php
@@ -14,6 +14,10 @@
 /**
  * Provides a generic destination to import entities.
  *
+ * Available configuration keys:
+ * - default_bundle: (optional) The bundle to use for this row if 'bundle' is
+ *   not defined on the row.
+ *
  * Examples:
  *
  * @code
@@ -44,8 +48,11 @@
  *   revision_timestamp: timestamp
  * destination:
  *   plugin: entity:node
+ *   default_bundle: custom
  * @endcode
  *
+ * This will save the processed, migrated row as a node of type 'custom'.
+ *
  * @MigrateDestination(
  *   id = "entity",
  *   deriver = "Drupal\migrate\Plugin\Derivative\MigrateEntity"
diff --git a/web/core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php b/web/core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php
index 228caba116..e095c357d6 100644
--- a/web/core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php
+++ b/web/core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php
@@ -85,6 +85,7 @@
  *   validate: true
  * @endcode
  *
+ * @see \Drupal\migrate\Plugin\migrate\destination\Entity
  * @see \Drupal\migrate\Plugin\migrate\destination\EntityRevision
  */
 class EntityContentBase extends Entity implements HighestIdInterface, MigrateValidatableEntityInterface {
diff --git a/web/core/modules/migrate/src/Plugin/migrate/source/SqlBase.php b/web/core/modules/migrate/src/Plugin/migrate/source/SqlBase.php
index ec22c3f65e..cf13b46392 100644
--- a/web/core/modules/migrate/src/Plugin/migrate/source/SqlBase.php
+++ b/web/core/modules/migrate/src/Plugin/migrate/source/SqlBase.php
@@ -452,7 +452,7 @@ protected function mapJoinable() {
     }
 
     foreach (['username', 'password', 'host', 'port', 'namespace', 'driver'] as $key) {
-      if (isset($source_database_options[$key])) {
+      if (isset($source_database_options[$key]) && isset($id_map_database_options[$key])) {
         if ($id_map_database_options[$key] != $source_database_options[$key]) {
           return FALSE;
         }
diff --git a/web/core/modules/migrate/src/ProcessPluginBase.php b/web/core/modules/migrate/src/ProcessPluginBase.php
index b6a0f5aaf8..2aea55660e 100644
--- a/web/core/modules/migrate/src/ProcessPluginBase.php
+++ b/web/core/modules/migrate/src/ProcessPluginBase.php
@@ -12,10 +12,18 @@
  * transform a human provided name into a machine name, look up an identifier
  * in a previous migration and so on.
  *
+ * Process plugins extending this class can use any number of methods, thus
+ * offering different alternative ways of processing. In this case, the
+ * transform() method should not be implemented, and the plugin configuration
+ * must provide the name of the method to be called via the "method" key. Each
+ * method must have the same signature as transform().
+ *
  * @see https://www.drupal.org/node/2129651
  * @see \Drupal\migrate\Plugin\MigratePluginManager
  * @see \Drupal\migrate\Plugin\MigrateProcessInterface
  * @see \Drupal\migrate\Annotation\MigrateProcessPlugin
+ * @see \Drupal\migrate\Plugin\migrate\process\SkipOnEmpty
+ * @see d7_field_formatter_settings.yml
  * @see plugin_api
  *
  * @ingroup migration
diff --git a/web/core/modules/migrate/tests/src/Unit/MigrateExecutableTest.php b/web/core/modules/migrate/tests/src/Unit/MigrateExecutableTest.php
index 5acc995666..2bcb0a6e32 100644
--- a/web/core/modules/migrate/tests/src/Unit/MigrateExecutableTest.php
+++ b/web/core/modules/migrate/tests/src/Unit/MigrateExecutableTest.php
@@ -66,12 +66,16 @@ public function testImportWithFailingRewind() {
     $source->expects($this->once())
       ->method('rewind')
       ->will($this->throwException(new \Exception($exception_message)));
+    // The exception message contains the line number where it is thrown. Save
+    // it for the testing the exception message.
+    $line = (__LINE__) - 3;
 
     $this->migration->expects($this->any())
       ->method('getSourcePlugin')
       ->will($this->returnValue($source));
 
     // Ensure that a message with the proper message was added.
+    $exception_message .= " in " . __FILE__ . " line $line";
     $this->message->expects($this->once())
       ->method('display')
       ->with("Migration failed with source plugin exception: " . Html::escape($exception_message));
diff --git a/web/core/modules/migrate_drupal/tests/fixtures/drupal7.php b/web/core/modules/migrate_drupal/tests/fixtures/drupal7.php
index 372ffa6d0b..4398566cb7 100644
--- a/web/core/modules/migrate_drupal/tests/fixtures/drupal7.php
+++ b/web/core/modules/migrate_drupal/tests/fixtures/drupal7.php
@@ -4512,6 +4512,36 @@
   'translatable' => '1',
   'deleted' => '0',
 ))
+->values(array(
+  'id' => '54',
+  'field_name' => 'field_termplain',
+  'type' => 'taxonomy_term_reference',
+  'module' => 'taxonomy',
+  'active' => '1',
+  'storage_type' => 'field_sql_storage',
+  'storage_module' => 'field_sql_storage',
+  'storage_active' => '1',
+  'locked' => '0',
+  'data' => 'a:7:{s:12:"translatable";s:1:"0";s:12:"entity_types";a:0:{}s:8:"settings";a:3:{s:14:"allowed_values";a:1:{i:0;a:2:{s:10:"vocabulary";s:4:"tags";s:6:"parent";s:1:"0";}}s:21:"options_list_callback";s:29:"title_taxonomy_allowed_values";s:23:"entity_translation_sync";b:0;}s:7:"storage";a:5:{s:4:"type";s:17:"field_sql_storage";s:8:"settings";a:0:{}s:6:"module";s:17:"field_sql_storage";s:6:"active";s:1:"1";s:7:"details";a:1:{s:3:"sql";a:2:{s:18:"FIELD_LOAD_CURRENT";a:1:{s:26:"field_data_field_termplain";a:1:{s:3:"tid";s:19:"field_termplain_tid";}}s:19:"FIELD_LOAD_REVISION";a:1:{s:30:"field_revision_field_termplain";a:1:{s:3:"tid";s:19:"field_termplain_tid";}}}}}s:12:"foreign keys";a:1:{s:3:"tid";a:2:{s:5:"table";s:18:"taxonomy_term_data";s:7:"columns";a:1:{s:3:"tid";s:3:"tid";}}}s:7:"indexes";a:1:{s:3:"tid";a:1:{i:0;s:3:"tid";}}s:2:"id";s:2:"55";}',
+  'cardinality' => '1',
+  'translatable' => '1',
+  'deleted' => '0',
+))
+->values(array(
+  'id' => '55',
+  'field_name' => 'field_termrss',
+  'type' => 'taxonomy_term_reference',
+  'module' => 'taxonomy',
+  'active' => '1',
+  'storage_type' => 'field_sql_storage',
+  'storage_module' => 'field_sql_storage',
+  'storage_active' => '1',
+  'locked' => '0',
+  'data' => 'a:7:{s:12:"translatable";i:0;s:12:"entity_types";a:0:{}s:8:"settings";a:3:{s:14:"allowed_values";a:1:{i:0;a:2:{s:10:"vocabulary";s:19:"sujet_de_discussion";s:6:"parent";s:1:"0";}}s:21:"options_list_callback";s:29:"title_taxonomy_allowed_values";s:23:"entity_translation_sync";b:0;}s:7:"storage";a:5:{s:4:"type";s:17:"field_sql_storage";s:8:"settings";a:0:{}s:6:"module";s:17:"field_sql_storage";s:6:"active";s:1:"1";s:7:"details";a:1:{s:3:"sql";a:2:{s:18:"FIELD_LOAD_CURRENT";a:1:{s:24:"field_data_field_termrss";a:1:{s:3:"tid";s:17:"field_termrss_tid";}}s:19:"FIELD_LOAD_REVISION";a:1:{s:28:"field_revision_field_termrss";a:1:{s:3:"tid";s:17:"field_termrss_tid";}}}}}s:12:"foreign keys";a:1:{s:3:"tid";a:2:{s:5:"table";s:18:"taxonomy_term_data";s:7:"columns";a:1:{s:3:"tid";s:3:"tid";}}}s:7:"indexes";a:1:{s:3:"tid";a:1:{i:0;s:3:"tid";}}s:2:"id";s:2:"56";}',
+  'cardinality' => '1',
+  'translatable' => '1',
+  'deleted' => '0',
+))
 ->execute();
 $connection->schema()->createTable('field_config_instance', array(
   'fields' => array(
@@ -5291,6 +5321,24 @@
   'data' => 'a:6:{s:5:"label";s:7:"Comment";s:8:"settings";a:2:{s:15:"text_processing";i:1;s:18:"user_register_form";b:0;}s:8:"required";b:1;s:7:"display";a:1:{s:7:"default";a:5:{s:5:"label";s:6:"hidden";s:4:"type";s:12:"text_default";s:6:"weight";i:0;s:8:"settings";a:0:{}s:6:"module";s:4:"text";}}s:6:"widget";a:4:{s:4:"type";s:13:"text_textarea";s:8:"settings";a:1:{s:4:"rows";i:5;}s:6:"weight";i:0;s:6:"module";s:4:"text";}s:11:"description";s:0:"";}',
   'deleted' => '0',
 ))
+->values(array(
+  'id' => '84',
+  'field_id' => '54',
+  'field_name' => 'field_termplain',
+  'entity_type' => 'node',
+  'bundle' => 'blog',
+  'data' => 'a:6:{s:5:"label";s:9:"termplain";s:6:"widget";a:4:{s:4:"type";s:15:"options_buttons";s:6:"weight";s:2:"15";s:8:"settings";a:0:{}s:6:"module";s:7:"options";}s:8:"settings";a:2:{s:18:"user_register_form";b:0;s:23:"entity_translation_sync";b:0;}s:7:"display";a:1:{s:7:"default";a:5:{s:5:"label";s:5:"above";s:4:"type";s:29:"taxonomy_term_reference_plain";s:6:"weight";s:2:"13";s:8:"settings";a:0:{}s:6:"module";s:8:"taxonomy";}}s:8:"required";b:0;s:11:"description";s:0:"";}',
+  'deleted' => '0',
+))
+->values(array(
+  'id' => '85',
+  'field_id' => '55',
+  'field_name' => 'field_termrss',
+  'entity_type' => 'node',
+  'bundle' => 'blog',
+  'data' => 'a:7:{s:5:"label";s:7:"termrss";s:6:"widget";a:5:{s:6:"weight";s:2:"16";s:4:"type";s:15:"options_buttons";s:6:"module";s:7:"options";s:6:"active";i:1;s:8:"settings";a:0:{}}s:8:"settings";a:2:{s:18:"user_register_form";b:0;s:23:"entity_translation_sync";b:0;}s:7:"display";a:1:{s:7:"default";a:5:{s:5:"label";s:5:"above";s:4:"type";s:36:"taxonomy_term_reference_rss_category";s:6:"weight";s:2:"14";s:8:"settings";a:0:{}s:6:"module";s:8:"taxonomy";}}s:8:"required";i:0;s:11:"description";s:0:"";s:13:"default_value";N;}',
+  'deleted' => '0',
+))
 ->execute();
 $connection->schema()->createTable('field_data_body', array(
   'fields' => array(
@@ -8437,6 +8485,128 @@
   'field_tags_tid' => '17',
 ))
 ->execute();
+$connection->schema()->createTable('field_data_field_termplain', array(
+  'fields' => array(
+    'entity_type' => array(
+      'type' => 'varchar',
+      'not null' => TRUE,
+      'length' => '128',
+      'default' => '',
+    ),
+    'bundle' => array(
+      'type' => 'varchar',
+      'not null' => TRUE,
+      'length' => '128',
+      'default' => '',
+    ),
+    'deleted' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'size' => 'normal',
+      'default' => '0',
+    ),
+    'entity_id' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'size' => 'normal',
+      'unsigned' => TRUE,
+    ),
+    'revision_id' => array(
+      'type' => 'int',
+      'not null' => FALSE,
+      'size' => 'normal',
+      'unsigned' => TRUE,
+    ),
+    'language' => array(
+      'type' => 'varchar',
+      'not null' => TRUE,
+      'length' => '32',
+      'default' => '',
+    ),
+    'delta' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'size' => 'normal',
+      'unsigned' => TRUE,
+    ),
+    'field_termplain_tid' => array(
+      'type' => 'int',
+      'not null' => FALSE,
+      'size' => 'normal',
+      'unsigned' => TRUE,
+    ),
+  ),
+  'primary key' => array(
+    'entity_type',
+    'deleted',
+    'entity_id',
+    'language',
+    'delta',
+  ),
+  'mysql_character_set' => 'utf8',
+));
+
+$connection->schema()->createTable('field_data_field_termrss', array(
+  'fields' => array(
+    'entity_type' => array(
+      'type' => 'varchar',
+      'not null' => TRUE,
+      'length' => '128',
+      'default' => '',
+    ),
+    'bundle' => array(
+      'type' => 'varchar',
+      'not null' => TRUE,
+      'length' => '128',
+      'default' => '',
+    ),
+    'deleted' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'size' => 'normal',
+      'default' => '0',
+    ),
+    'entity_id' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'size' => 'normal',
+      'unsigned' => TRUE,
+    ),
+    'revision_id' => array(
+      'type' => 'int',
+      'not null' => FALSE,
+      'size' => 'normal',
+      'unsigned' => TRUE,
+    ),
+    'language' => array(
+      'type' => 'varchar',
+      'not null' => TRUE,
+      'length' => '32',
+      'default' => '',
+    ),
+    'delta' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'size' => 'normal',
+      'unsigned' => TRUE,
+    ),
+    'field_termrss_tid' => array(
+      'type' => 'int',
+      'not null' => FALSE,
+      'size' => 'normal',
+      'unsigned' => TRUE,
+    ),
+  ),
+  'primary key' => array(
+    'entity_type',
+    'deleted',
+    'entity_id',
+    'language',
+    'delta',
+  ),
+  'mysql_character_set' => 'utf8',
+));
+
 $connection->schema()->createTable('field_data_field_term_entityreference', array(
   'fields' => array(
     'entity_type' => array(
@@ -14521,6 +14691,131 @@
   'field_term_entityreference_target_id' => '15',
 ))
 ->execute();
+
+$connection->schema()->createTable('field_revision_field_termplain', array(
+  'fields' => array(
+    'entity_type' => array(
+      'type' => 'varchar',
+      'not null' => TRUE,
+      'length' => '128',
+      'default' => '',
+    ),
+    'bundle' => array(
+      'type' => 'varchar',
+      'not null' => TRUE,
+      'length' => '128',
+      'default' => '',
+    ),
+    'deleted' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'size' => 'normal',
+      'default' => '0',
+    ),
+    'entity_id' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'size' => 'normal',
+      'unsigned' => TRUE,
+    ),
+    'revision_id' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'size' => 'normal',
+      'unsigned' => TRUE,
+    ),
+    'language' => array(
+      'type' => 'varchar',
+      'not null' => TRUE,
+      'length' => '32',
+      'default' => '',
+    ),
+    'delta' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'size' => 'normal',
+      'unsigned' => TRUE,
+    ),
+    'field_termplain_tid' => array(
+      'type' => 'int',
+      'not null' => FALSE,
+      'size' => 'normal',
+      'unsigned' => TRUE,
+    ),
+  ),
+  'primary key' => array(
+    'entity_type',
+    'deleted',
+    'entity_id',
+    'revision_id',
+    'language',
+    'delta',
+  ),
+  'mysql_character_set' => 'utf8',
+));
+
+$connection->schema()->createTable('field_revision_field_termrss', array(
+  'fields' => array(
+    'entity_type' => array(
+      'type' => 'varchar',
+      'not null' => TRUE,
+      'length' => '128',
+      'default' => '',
+    ),
+    'bundle' => array(
+      'type' => 'varchar',
+      'not null' => TRUE,
+      'length' => '128',
+      'default' => '',
+    ),
+    'deleted' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'size' => 'normal',
+      'default' => '0',
+    ),
+    'entity_id' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'size' => 'normal',
+      'unsigned' => TRUE,
+    ),
+    'revision_id' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'size' => 'normal',
+      'unsigned' => TRUE,
+    ),
+    'language' => array(
+      'type' => 'varchar',
+      'not null' => TRUE,
+      'length' => '32',
+      'default' => '',
+    ),
+    'delta' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'size' => 'normal',
+      'unsigned' => TRUE,
+    ),
+    'field_termrss_tid' => array(
+      'type' => 'int',
+      'not null' => FALSE,
+      'size' => 'normal',
+      'unsigned' => TRUE,
+    ),
+  ),
+  'primary key' => array(
+    'entity_type',
+    'deleted',
+    'entity_id',
+    'revision_id',
+    'language',
+    'delta',
+  ),
+  'mysql_character_set' => 'utf8',
+));
+
 $connection->schema()->createTable('field_revision_field_term_reference', array(
   'fields' => array(
     'entity_type' => array(
diff --git a/web/core/modules/migrate_drupal/tests/src/Kernel/d7/FieldDiscoveryTest.php b/web/core/modules/migrate_drupal/tests/src/Kernel/d7/FieldDiscoveryTest.php
index bb90e06eaf..cf2c3d70e7 100644
--- a/web/core/modules/migrate_drupal/tests/src/Kernel/d7/FieldDiscoveryTest.php
+++ b/web/core/modules/migrate_drupal/tests/src/Kernel/d7/FieldDiscoveryTest.php
@@ -203,6 +203,8 @@ public function addAllFieldProcessesAltersData() {
               'map' => [
                 'taxonomy_term_reference' => [
                   'taxonomy_term_reference_link' => 'entity_reference_label',
+                  'taxonomy_term_reference_plain' => 'entity_reference_label',
+                  'taxonomy_term_reference_rss_category' => 'entity_reference_label',
                   'i18n_taxonomy_term_reference_link' => 'entity_reference_label',
                   'entityreference_entity_view' => 'entity_reference_entity_view',
                 ],
diff --git a/web/core/modules/migrate_drupal_ui/src/Controller/MigrateController.php b/web/core/modules/migrate_drupal_ui/src/Controller/MigrateController.php
index 2054766a13..0947004adb 100644
--- a/web/core/modules/migrate_drupal_ui/src/Controller/MigrateController.php
+++ b/web/core/modules/migrate_drupal_ui/src/Controller/MigrateController.php
@@ -16,9 +16,11 @@ class MigrateController extends ControllerBase {
    *   A redirect response object that may be returned by the controller.
    */
   public function showLog() {
+    // Sets both the session and the query parameter so that it works correctly
+    // with both the watchdog view and the fallback.
     $_SESSION['dblog_overview_filter'] = [];
     $_SESSION['dblog_overview_filter']['type'] = ['migrate_drupal_ui' => 'migrate_drupal_ui'];
-    return $this->redirect('dblog.overview');
+    return $this->redirect('dblog.overview', [], ['query' => ['type' => ['migrate_drupal_ui']]]);
   }
 
 }
diff --git a/web/core/modules/migrate_drupal_ui/src/Form/CredentialForm.php b/web/core/modules/migrate_drupal_ui/src/Form/CredentialForm.php
index 54b431f9ff..4e8d621fe8 100644
--- a/web/core/modules/migrate_drupal_ui/src/Form/CredentialForm.php
+++ b/web/core/modules/migrate_drupal_ui/src/Form/CredentialForm.php
@@ -90,11 +90,6 @@ public function buildForm(array $form, FormStateInterface $form_state) {
 
     $drivers = $this->getDatabaseTypes();
     $drivers_keys = array_keys($drivers);
-    // @todo https://www.drupal.org/node/2678510 Because this is a multi-step
-    //   form, the form is not rebuilt during submission. Ideally we would get
-    //   the chosen driver from form input, if available, in order to use
-    //   #limit_validation_errors in the same way
-    //   \Drupal\Core\Installer\Form\SiteSettingsForm does.
     $default_driver = current($drivers_keys);
 
     $default_options = [];
@@ -134,10 +129,11 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       $form['database']['driver']['#options'][$key] = $driver->name();
 
       $form['database']['settings'][$key] = $driver->getFormOptions($default_options);
-      // @todo https://www.drupal.org/node/2678510 Using
-      //   #limit_validation_errors in the submit does not work so it is not
-      //   possible to require the database and username for mysql and pgsql.
-      //   This is because this is a multi-step form.
+      unset($form['database']['settings'][$key]['advanced_options']['prefix']['#description']);
+
+      // This is a multi-step form and is not rebuilt during submission so
+      // #limit_validation_errors is not used. The database and username fields
+      // for mysql and pgsql must not be required.
       $form['database']['settings'][$key]['database']['#required'] = FALSE;
       $form['database']['settings'][$key]['username']['#required'] = FALSE;
       $form['database']['settings'][$key]['#prefix'] = '<h2 class="js-hide">' . $this->t('@driver_name settings', ['@driver_name' => $driver->name()]) . '</h2>';
diff --git a/web/core/modules/migrate_drupal_ui/tests/src/Functional/MigrateControllerTest.php b/web/core/modules/migrate_drupal_ui/tests/src/Functional/MigrateControllerTest.php
new file mode 100644
index 0000000000..9b0d8efdf8
--- /dev/null
+++ b/web/core/modules/migrate_drupal_ui/tests/src/Functional/MigrateControllerTest.php
@@ -0,0 +1,96 @@
+<?php
+
+namespace Drupal\Tests\migrate_drupal_ui\Functional;
+
+use Drupal\views\Entity\View;
+use Drupal\Tests\BrowserTestBase;
+
+/**
+ * Tests for the MigrateController class.
+ *
+ * @group migrate_drupal_ui
+ */
+class MigrateControllerTest extends BrowserTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'dblog',
+    'migrate_drupal_ui',
+    'views_ui',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stark';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    // Log in as user 1. Migrations in the UI can only be performed as user 1.
+    $this->drupalLogin($this->rootUser);
+
+    // Create a migrate message for testing purposes.
+    \Drupal::logger('migrate_drupal_ui')->notice('A test message');
+
+  }
+
+  /**
+   * Tests the upgrade report with the view enabled, disabled and uninstalled.
+   */
+  public function testUpgradeReport() {
+    $session = $this->assertSession();
+
+    $this->assertTrue(View::load('watchdog')->status(), 'Watchdog view is enabled');
+    // Tests redirection to report page when the watchdog view is enabled.
+    $this->drupalGet('admin/reports/upgrade');
+    $session->optionExists('type[]', 'migrate_drupal_ui')->isSelected();
+    $session->pageTextContainsOnce('A test message');
+
+    // Disable the watchdog view.
+    $this->drupalGet('admin/structure/views');
+    $this->assertTrue($this->clickViewsOperationsLink('Disable', '/watchdog/'));
+    $session->statusCodeEquals(200);
+
+    // Tests redirection to report page when the watchdog view is disabled.
+    $this->drupalGet('admin/reports/upgrade');
+    $session->optionExists('type[]', 'migrate_drupal_ui')->isSelected();
+    $session->pageTextContainsOnce('A test message');
+
+    \Drupal::service('module_installer')->uninstall(['views_ui', 'views']);
+    // Tests redirection to report page when views is uninstalled.
+    $this->drupalGet('admin/reports/upgrade');
+    $session->optionExists('type[]', 'migrate_drupal_ui')->isSelected();
+    $session->pageTextContainsOnce('A test message');
+  }
+
+  /**
+   * Clicks a view link to perform an operation.
+   *
+   * @param string $label
+   *   Text between the anchor tags of the link.
+   * @param string $href_part
+   *   A unique string that is expected to occur within the href of the link.
+   *
+   * @return bool
+   *   TRUE when link found and clicked, otherwise FALSE.
+   */
+  public function clickViewsOperationsLink($label, $href_part) {
+    $links = $this->xpath('//a[normalize-space(text())=:label]', [':label' => (string) $label]);
+    foreach ($links as $link_index => $link) {
+      $position = strpos($link->getAttribute('href'), $href_part);
+      if ($position !== FALSE) {
+        $index = $link_index;
+        $this->clickLink((string) $label, $index);
+        return TRUE;
+      }
+    }
+    return FALSE;
+  }
+
+}
diff --git a/web/core/modules/migrate_drupal_ui/tests/src/Functional/d7/Upgrade7Test.php b/web/core/modules/migrate_drupal_ui/tests/src/Functional/d7/Upgrade7Test.php
index 327710d15b..8517c5da2a 100644
--- a/web/core/modules/migrate_drupal_ui/tests/src/Functional/d7/Upgrade7Test.php
+++ b/web/core/modules/migrate_drupal_ui/tests/src/Functional/d7/Upgrade7Test.php
@@ -89,8 +89,8 @@ protected function getEntityCounts() {
       'contact_form' => 3,
       'contact_message' => 0,
       'editor' => 2,
-      'field_config' => 79,
-      'field_storage_config' => 60,
+      'field_config' => 81,
+      'field_storage_config' => 62,
       'file' => 3,
       'filter_format' => 7,
       'image_style' => 6,
diff --git a/web/core/modules/node/node.views.inc b/web/core/modules/node/node.views.inc
new file mode 100644
index 0000000000..83e2ccf020
--- /dev/null
+++ b/web/core/modules/node/node.views.inc
@@ -0,0 +1,52 @@
+<?php
+
+/**
+ * @file
+ * Provide views data for node.module.
+ */
+
+use Drupal\user\RoleInterface;
+use Drupal\views\ViewExecutable;
+use Drupal\user\Entity\Role;
+use Drupal\views\Analyzer;
+
+/**
+ * Implements hook_views_analyze().
+ */
+function node_views_analyze(ViewExecutable $view) {
+  $ret = [];
+  // Check for something other than the default display:
+  if ($view->storage->get('base_table') == 'node') {
+    foreach ($view->displayHandlers as $display) {
+      if (!$display->isDefaulted('access') || !$display->isDefaulted('filters')) {
+        // check for no access control
+        $access = $display->getOption('access');
+        if (empty($access['type']) || $access['type'] == 'none') {
+          $anonymous_role = Role::load(RoleInterface::ANONYMOUS_ID);
+          $anonymous_has_access = $anonymous_role && $anonymous_role->hasPermission('access content');
+          $authenticated_role = Role::load(RoleInterface::AUTHENTICATED_ID);
+          $authenticated_has_access = $authenticated_role && $authenticated_role->hasPermission('access content');
+          if (!$anonymous_has_access || !$authenticated_has_access) {
+            $ret[] = Analyzer::formatMessage(t('Some roles lack permission to access content, but display %display has no access control.', ['%display' => $display->display['display_title']]), 'warning');
+          }
+          $filters = $display->getOption('filters');
+          foreach ($filters as $filter) {
+            if ($filter['table'] == 'node' && ($filter['field'] == 'status' || $filter['field'] == 'status_extra')) {
+              continue 2;
+            }
+          }
+          $ret[] = Analyzer::formatMessage(t('Display %display has no access control but does not contain a filter for published nodes.', ['%display' => $display->display['display_title']]), 'warning');
+        }
+      }
+    }
+  }
+  foreach ($view->displayHandlers as $display) {
+    if ($display->getPluginId() == 'page') {
+      if ($display->getOption('path') == 'node/%') {
+        $ret[] = Analyzer::formatMessage(t('Display %display has set node/% as path. This will not produce what you want. If you want to have multiple versions of the node view, use Layout Builder.', ['%display' => $display->display['display_title']]), 'warning');
+      }
+    }
+  }
+
+  return $ret;
+}
diff --git a/web/core/modules/node/node.views_execution.inc b/web/core/modules/node/node.views_execution.inc
index 4d834a11e3..f5401b17b4 100644
--- a/web/core/modules/node/node.views_execution.inc
+++ b/web/core/modules/node/node.views_execution.inc
@@ -5,9 +5,7 @@
  * Provide views runtime hooks for node.module.
  */
 
-use Drupal\user\RoleInterface;
 use Drupal\views\ViewExecutable;
-use Drupal\user\Entity\Role;
 
 /**
  * Implements hook_views_query_substitutions().
@@ -20,44 +18,3 @@ function node_views_query_substitutions(ViewExecutable $view) {
     '***BYPASS_NODE_ACCESS***' => intval($account->hasPermission('bypass node access')),
   ];
 }
-
-/**
- * Implements hook_views_analyze().
- */
-function node_views_analyze(ViewExecutable $view) {
-  $ret = [];
-  // Check for something other than the default display:
-  if ($view->storage->get('base_table') == 'node') {
-    foreach ($view->displayHandlers as $display) {
-      if (!$display->isDefaulted('access') || !$display->isDefaulted('filters')) {
-        // check for no access control
-        $access = $display->getOption('access');
-        if (empty($access['type']) || $access['type'] == 'none') {
-          $anonymous_role = Role::load(RoleInterface::ANONYMOUS_ID);
-          $anonymous_has_access = $anonymous_role && $anonymous_role->hasPermission('access content');
-          $authenticated_role = Role::load(RoleInterface::AUTHENTICATED_ID);
-          $authenticated_has_access = $authenticated_role && $authenticated_role->hasPermission('access content');
-          if (!$anonymous_has_access || !$authenticated_has_access) {
-            $ret[] = Analyzer::formatMessage(t('Some roles lack permission to access content, but display %display has no access control.', ['%display' => $display->display['display_title']]), 'warning');
-          }
-          $filters = $display->getOption('filters');
-          foreach ($filters as $filter) {
-            if ($filter['table'] == 'node' && ($filter['field'] == 'status' || $filter['field'] == 'status_extra')) {
-              continue 2;
-            }
-          }
-          $ret[] = Analyzer::formatMessage(t('Display %display has no access control but does not contain a filter for published nodes.', ['%display' => $display->display['display_title']]), 'warning');
-        }
-      }
-    }
-  }
-  foreach ($view->displayHandlers as $display) {
-    if ($display->getPluginId() == 'page') {
-      if ($display->getOption('path') == 'node/%') {
-        $ret[] = Analyzer::formatMessage(t('Display %display has set node/% as path. This will not produce what you want. If you want to have multiple versions of the node view, use panels.', ['%display' => $display->display['display_title']]), 'warning');
-      }
-    }
-  }
-
-  return $ret;
-}
diff --git a/web/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_node_views_analyze.yml b/web/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_node_views_analyze.yml
new file mode 100644
index 0000000000..df2a8cb66e
--- /dev/null
+++ b/web/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_node_views_analyze.yml
@@ -0,0 +1,180 @@
+langcode: en
+status: true
+dependencies:
+  module:
+    - node
+    - user
+id: test_node_views_analyze
+label: test_node_views_analyze
+module: views
+description: ''
+tag: ''
+base_table: node_field_data
+base_field: nid
+display:
+  default:
+    display_plugin: default
+    id: default
+    display_title: Master
+    position: 0
+    display_options:
+      access:
+        type: perm
+        options:
+          perm: 'access content'
+      cache:
+        type: tag
+        options: {  }
+      query:
+        type: views_query
+        options:
+          disable_sql_rewrite: false
+          distinct: false
+          replica: false
+          query_comment: ''
+          query_tags: {  }
+      exposed_form:
+        type: basic
+        options:
+          submit_button: Apply
+          reset_button: false
+          reset_button_label: Reset
+          exposed_sorts_label: 'Sort by'
+          expose_sort_order: true
+          sort_asc_label: Asc
+          sort_desc_label: Desc
+      pager:
+        type: mini
+        options:
+          items_per_page: 10
+          offset: 0
+          id: 0
+          total_pages: null
+          expose:
+            items_per_page: false
+            items_per_page_label: 'Items per page'
+            items_per_page_options: '5, 10, 25, 50'
+            items_per_page_options_all: false
+            items_per_page_options_all_label: '- All -'
+            offset: false
+            offset_label: Offset
+          tags:
+            previous: ‹‹
+            next: ››
+      style:
+        type: default
+      row:
+        type: 'entity:node'
+        options:
+          view_mode: teaser
+      fields:
+        title:
+          id: title
+          table: node_field_data
+          field: title
+          entity_type: node
+          entity_field: title
+          label: ''
+          alter:
+            alter_text: false
+            make_link: false
+            absolute: false
+            trim: false
+            word_boundary: false
+            ellipsis: false
+            strip_tags: false
+            html: false
+          hide_empty: false
+          empty_zero: false
+          settings:
+            link_to_entity: true
+          plugin_id: field
+          relationship: none
+          group_type: group
+          admin_label: ''
+          exclude: false
+          element_type: ''
+          element_class: ''
+          element_label_type: ''
+          element_label_class: ''
+          element_label_colon: true
+          element_wrapper_type: ''
+          element_wrapper_class: ''
+          element_default_classes: true
+          empty: ''
+          hide_alter_empty: true
+          click_sort_column: value
+          type: string
+          group_column: value
+          group_columns: {  }
+          group_rows: true
+          delta_limit: 0
+          delta_offset: 0
+          delta_reversed: false
+          delta_first_last: false
+          multi_type: separator
+          separator: ', '
+          field_api_classes: false
+      filters:
+        status:
+          value: '1'
+          table: node_field_data
+          field: status
+          plugin_id: boolean
+          entity_type: node
+          entity_field: status
+          id: status
+          expose:
+            operator: ''
+            operator_limit_selection: false
+            operator_list: {  }
+          group: 1
+      sorts:
+        created:
+          id: created
+          table: node_field_data
+          field: created
+          order: DESC
+          entity_type: node
+          entity_field: created
+          plugin_id: date
+          relationship: none
+          group_type: group
+          admin_label: ''
+          exposed: false
+          expose:
+            label: ''
+          granularity: second
+      title: test_node_views_analyze
+      header: {  }
+      footer: {  }
+      empty: {  }
+      relationships: {  }
+      arguments: {  }
+      display_extenders: {  }
+    cache_metadata:
+      max-age: -1
+      contexts:
+        - 'languages:language_content'
+        - 'languages:language_interface'
+        - url.query_args
+        - 'user.node_grants:view'
+        - user.permissions
+      tags: {  }
+  page_1:
+    display_plugin: page
+    id: page_1
+    display_title: Page
+    position: 1
+    display_options:
+      display_extenders: {  }
+      path: node/%
+    cache_metadata:
+      max-age: -1
+      contexts:
+        - 'languages:language_content'
+        - 'languages:language_interface'
+        - url.query_args
+        - 'user.node_grants:view'
+        - user.permissions
+      tags: {  }
diff --git a/web/core/modules/node/tests/src/Functional/Views/NodeViewsAnalyzeTest.php b/web/core/modules/node/tests/src/Functional/Views/NodeViewsAnalyzeTest.php
new file mode 100644
index 0000000000..a94983a2ff
--- /dev/null
+++ b/web/core/modules/node/tests/src/Functional/Views/NodeViewsAnalyzeTest.php
@@ -0,0 +1,47 @@
+<?php
+
+namespace Drupal\Tests\node\Functional\Views;
+
+/**
+ * Tests node_views_analyze().
+ *
+ * @group node
+ */
+class NodeViewsAnalyzeTest extends NodeTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['views_ui', 'node_test_views'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stark';
+
+  /**
+   * Views used by this test.
+   *
+   * @var array
+   */
+  public static $testViews = ['test_node_views_analyze'];
+
+  /**
+   * Tests the implementation of node_views_analyze().
+   */
+  public function testNodeViewsAnalyze() {
+    // Create user with permission to view analyze message on views_ui.
+    $admin_user = $this->createUser(['administer views']);
+
+    $this->drupalLogin($admin_user);
+
+    // Access to views analyze page.
+    $this->drupalGet('admin/structure/views/nojs/analyze/test_node_views_analyze/page_1');
+
+    // Should return 200 with correct permission.
+    $this->assertSession()->statusCodeEquals(200);
+
+    $this->assertSession()->responseContains('has set node/% as path. This will not produce what you want. If you want to have multiple versions of the node view, use Layout Builder.');
+  }
+
+}
diff --git a/web/core/modules/path_alias/tests/src/Kernel/AliasTest.php b/web/core/modules/path_alias/tests/src/Kernel/AliasTest.php
index 111f9bff35..1ae306d6f3 100644
--- a/web/core/modules/path_alias/tests/src/Kernel/AliasTest.php
+++ b/web/core/modules/path_alias/tests/src/Kernel/AliasTest.php
@@ -179,7 +179,6 @@ public function testWhitelistCacheDeletionMidRequest() {
 
     // Create AliasManager and Path object.
     $whitelist = new AliasWhitelist('path_alias_whitelist', $memoryCounterBackend, $this->container->get('lock'), $this->container->get('state'), $this->container->get('path_alias.repository'));
-    $aliasManager = new AliasManager($this->container->get('path_alias.repository'), $whitelist, $this->container->get('language_manager'), $memoryCounterBackend);
 
     // Whitelist cache should not exist at all yet.
     $this->assertFalse($memoryCounterBackend->get('path_alias_whitelist'));
diff --git a/web/core/modules/search/src/SearchQuery.php b/web/core/modules/search/src/SearchQuery.php
index 6e342ca202..bba7fe9c03 100644
--- a/web/core/modules/search/src/SearchQuery.php
+++ b/web/core/modules/search/src/SearchQuery.php
@@ -520,7 +520,7 @@ public function addScore($score, $arguments = [], $multiply = FALSE) {
     // search expression. So, use string replacement to change this to a
     // calculated query expression, counting the number of occurrences so
     // in the execute() method we can add arguments.
-    while (($pos = strpos($score, 'i.relevance')) !== FALSE) {
+    while (strpos($score, 'i.relevance') !== FALSE) {
       $pieces = explode('i.relevance', $score, 2);
       $score = implode('((ROUND(:normalization_' . $this->relevance_count . ', 4)) * i.score * t.count)', $pieces);
       $this->relevance_count++;
diff --git a/web/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestNoBundleWithLabel.php b/web/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestNoBundleWithLabel.php
new file mode 100644
index 0000000000..84771f8495
--- /dev/null
+++ b/web/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestNoBundleWithLabel.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace Drupal\entity_test\Entity;
+
+/**
+ * Test entity class with no bundle but with label.
+ *
+ * @ContentEntityType(
+ *   id = "entity_test_no_bundle_with_label",
+ *   label = @Translation("Entity Test without bundle but with label"),
+ *   base_table = "entity_test_no_bundle_with_label",
+ *   handlers = {
+ *     "views_data" = "Drupal\views\EntityViewsData"
+ *   },
+ *   entity_keys = {
+ *     "id" = "id",
+ *     "label" = "name",
+ *     "revision" = "revision_id",
+ *   },
+ *   admin_permission = "administer entity_test content",
+ *   links = {
+ *     "add-form" = "/entity_test_no_bundle_with_label/add",
+ *   },
+ * )
+ */
+class EntityTestNoBundleWithLabel extends EntityTest {
+
+}
diff --git a/web/core/modules/system/tests/src/Functional/File/ConfigTest.php b/web/core/modules/system/tests/src/Functional/File/ConfigTest.php
index cac94da53e..d3085b3f1b 100644
--- a/web/core/modules/system/tests/src/Functional/File/ConfigTest.php
+++ b/web/core/modules/system/tests/src/Functional/File/ConfigTest.php
@@ -32,7 +32,6 @@ public function testFileConfigurationPage() {
     // Set the file paths to non-default values.
     // The respective directories are created automatically
     // upon form submission.
-    $file_path = $this->publicFilesDirectory;
     $fields = [
       'file_default_scheme' => 'private',
     ];
diff --git a/web/core/modules/taxonomy/src/Plugin/migrate/field/TaxonomyTermReference.php b/web/core/modules/taxonomy/src/Plugin/migrate/field/TaxonomyTermReference.php
index 5623648c31..dc04e2ca7f 100644
--- a/web/core/modules/taxonomy/src/Plugin/migrate/field/TaxonomyTermReference.php
+++ b/web/core/modules/taxonomy/src/Plugin/migrate/field/TaxonomyTermReference.php
@@ -24,6 +24,8 @@ class TaxonomyTermReference extends FieldPluginBase {
   public function getFieldFormatterMap() {
     return [
       'taxonomy_term_reference_link' => 'entity_reference_label',
+      'taxonomy_term_reference_plain' => 'entity_reference_label',
+      'taxonomy_term_reference_rss_category' => 'entity_reference_label',
       'i18n_taxonomy_term_reference_link' => 'entity_reference_label',
       'entityreference_entity_view' => 'entity_reference_entity_view',
     ];
diff --git a/web/core/modules/taxonomy/src/Plugin/views/relationship/NodeTermData.php b/web/core/modules/taxonomy/src/Plugin/views/relationship/NodeTermData.php
index 5a88acea4d..621f43d04e 100644
--- a/web/core/modules/taxonomy/src/Plugin/views/relationship/NodeTermData.php
+++ b/web/core/modules/taxonomy/src/Plugin/views/relationship/NodeTermData.php
@@ -133,7 +133,9 @@ public function query() {
       $query = Database::getConnection()->select('taxonomy_term_field_data', 'td');
       $query->addJoin($def['type'], 'taxonomy_index', 'tn', 'tn.tid = td.tid');
       $query->condition('td.vid', array_filter($this->options['vids']), 'IN');
-      $query->addTag('taxonomy_term_access');
+      if (empty($this->query->options['disable_sql_rewrite'])) {
+        $query->addTag('taxonomy_term_access');
+      }
       $query->fields('td');
       $query->fields('tn', ['nid']);
       $def['table formula'] = $query;
diff --git a/web/core/modules/taxonomy/tests/src/Functional/Views/RelationshipNodeTermDataTest.php b/web/core/modules/taxonomy/tests/src/Functional/Views/RelationshipNodeTermDataTest.php
index c78a511b3c..5de4e0a7e1 100644
--- a/web/core/modules/taxonomy/tests/src/Functional/Views/RelationshipNodeTermDataTest.php
+++ b/web/core/modules/taxonomy/tests/src/Functional/Views/RelationshipNodeTermDataTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\Tests\taxonomy\Functional\Views;
 
 use Drupal\views\Views;
+use Drupal\views\ViewExecutable;
 
 /**
  * Tests the taxonomy term on node relationship handler.
@@ -60,4 +61,52 @@ public function testViewsHandlerRelationshipNodeTermData() {
     $this->assertIdenticalResultset($view, $expected_result, $column_map);
   }
 
+  /**
+   * Tests that the 'taxonomy_term_access' tag is added to the Views query.
+   */
+  public function testTag() {
+    // Change the view to test relation limited by vocabulary.
+    $this->config('views.view.test_taxonomy_node_term_data')
+      ->set('display.default.display_options.relationships.term_node_tid.vids', ['views_testing_tags'])
+      ->save();
+    $view = Views::getView('test_taxonomy_node_term_data');
+    $this->executeView($view, [$this->term1->id()]);
+
+    // By default, view has taxonomy_term_access tag.
+    $this->assertQueriesTermAccessTag($view, TRUE);
+
+    // The term_access tag is not set if disable_sql_rewrite is set.
+    $view = Views::getView('test_taxonomy_node_term_data');
+    $display = $view->getDisplay();
+    $display_options = $display->getOption('query');
+    $display_options['options']['disable_sql_rewrite'] = TRUE;
+    $display->setOption('query', $display_options);
+    $view->save();
+    $this->executeView($view, [$this->term1->id()]);
+
+    $this->assertQueriesTermAccessTag($view, FALSE);
+  }
+
+  /**
+   * Assert views queries have taxonomy_term_access tag.
+   *
+   * @param \Drupal\views\ViewExecutable $view
+   *   The View to check for the term access tag.
+   * @param bool $hasTag
+   *   The expected existence of taxonomy_term_access tag.
+   */
+  protected function assertQueriesTermAccessTag(ViewExecutable $view, $hasTag) {
+    $main_query = $view->build_info['query'];
+    $count_query = $view->build_info['count_query'];
+
+    foreach ([$main_query, $count_query] as $query) {
+      $tables = $query->getTables();
+      foreach ($tables as $join_table) {
+        if (is_object($join_table['table'])) {
+          $this->assertSame($join_table['table']->hasTag('taxonomy_term_access'), $hasTag);
+        }
+      }
+    }
+  }
+
 }
diff --git a/web/core/scripts/css/compile.js b/web/core/scripts/css/compile.js
index 0fe45e8bb7..1e5a68ce65 100644
--- a/web/core/scripts/css/compile.js
+++ b/web/core/scripts/css/compile.js
@@ -12,7 +12,24 @@ module.exports = (filePath, callback) => {
   // Transform the file.
   fs.readFile(filePath, (err, css) => {
     postcss([
-      postcssImport(),
+      postcssImport({
+        plugins: [
+          // On import, remove the comments from variables.pcss.css so they don't
+          // appear as useless comments at the top files that import these
+          // variables.
+          postcss.plugin('remove-unwanted-comments-from-variables', (options) => {
+            return css => {
+              if (css.source.input.file.indexOf('variables.pcss.css') !== -1) {
+                css.walk(node => {
+                  if (node.type === 'comment') {
+                    node.remove();
+                  }
+                });
+              }
+            };
+          }),
+        ],
+      }),
       postcssCustomProperties({
         // Remove converted properties from the generated code. This needs to be
         // set to ensure that CSS minifiers don't remove the generated values.
diff --git a/web/core/tests/Drupal/Nightwatch/Tests/langcodeTest.js b/web/core/tests/Drupal/Nightwatch/Tests/langcodeTest.js
index 7248f2a8a3..4fbce17649 100644
--- a/web/core/tests/Drupal/Nightwatch/Tests/langcodeTest.js
+++ b/web/core/tests/Drupal/Nightwatch/Tests/langcodeTest.js
@@ -2,7 +2,8 @@ module.exports = {
   '@tags': ['core'],
   before(browser) {
     browser.drupalInstall({
-      setupFile: 'core/tests/Drupal/TestSite/TestSiteInstallTestScript.php',
+      setupFile:
+        'core/tests/Drupal/TestSite/TestSiteMultilingualInstallTestScript.php',
       langcode: 'fr',
     });
   },
diff --git a/web/core/tests/Drupal/Tests/Component/Datetime/DateTimePlusTest.php b/web/core/tests/Drupal/Tests/Component/Datetime/DateTimePlusTest.php
index ca280d582b..cde8dacad8 100644
--- a/web/core/tests/Drupal/Tests/Component/Datetime/DateTimePlusTest.php
+++ b/web/core/tests/Drupal/Tests/Component/Datetime/DateTimePlusTest.php
@@ -112,6 +112,23 @@ public function testInvalidDateArrays($input, $timezone, $class) {
     );
   }
 
+  /**
+   * Tests DateTimePlus::checkArray().
+   *
+   * @param mixed $array
+   *   Input argument for DateTimePlus::checkArray().
+   * @param bool $expected
+   *   The expected result of DateTimePlus::checkArray().
+   *
+   * @dataProvider providerTestCheckArray
+   */
+  public function testCheckArray(array $array, $expected) {
+    $this->assertSame(
+      $expected,
+      DateTimePlus::checkArray($array)
+    );
+  }
+
   /**
    * Test creating dates from timestamps, and manipulating timezones.
    *
@@ -442,6 +459,30 @@ public function providerTestInvalidDateArrays() {
     ];
   }
 
+  /**
+   * Data provider for testCheckArray.
+   *
+   * @return array
+   *   An array of arrays, each containing:
+   *   - 'array' - Input for DateTimePlus::checkArray().
+   *   - 'expected' - Expected output for  DateTimePlus::checkArray().
+   *
+   * @see testCheckArray
+   */
+  public function providerTestCheckArray() {
+    return [
+      'Date array, date only' => [['year' => 2010, 'month' => 2, 'day' => 28], TRUE],
+      'Date array with hour' => [['year' => 2010, 'month' => 2, 'day' => 28, 'hour' => 10], TRUE],
+      'One year larger than the documented upper limit of checkdate()' => [['year' => 32768, 'month' => 1, 'day' => 8, 'hour' => 8, 'minute' => 0, 'second' => 0], FALSE],
+      'One year smaller than the documented lower limit of checkdate()' => [['year' => 0, 'month' => 1, 'day' => 8, 'hour' => 8, 'minute' => 0, 'second' => 0], FALSE],
+      'Invalid month from date array' => [['year' => 2010, 'month' => 27, 'day' => 8, 'hour' => 8, 'minute' => 0, 'second' => 0], FALSE],
+      'Invalid hour from date array' => [['year' => 2010, 'month' => 2, 'day' => 28, 'hour' => 80, 'minute' => 0, 'second' => 0], FALSE],
+      'Invalid minute from date array.' => [['year' => 2010, 'month' => 7, 'day' => 8, 'hour' => 8, 'minute' => 88, 'second' => 0], FALSE],
+      'Missing day' => [['year' => 2059, 'month' => 1, 'second' => 1], FALSE],
+      'Zero day' => [['year' => 2059, 'month' => 1, 'day' => 0], FALSE],
+    ];
+  }
+
   /**
    * Provides data for testDateTimezone.
    *
diff --git a/web/core/tests/Drupal/Tests/Component/Utility/UnicodeTest.php b/web/core/tests/Drupal/Tests/Component/Utility/UnicodeTest.php
index 5fed24ed13..50bdc8b519 100644
--- a/web/core/tests/Drupal/Tests/Component/Utility/UnicodeTest.php
+++ b/web/core/tests/Drupal/Tests/Component/Utility/UnicodeTest.php
@@ -23,15 +23,13 @@ public function testSetStatus() {
   }
 
   /**
-   * Tests multibyte encoding and decoding.
+   * Tests multibyte encoding.
    *
    * @dataProvider providerTestMimeHeader
    * @covers ::mimeHeaderEncode
-   * @covers ::mimeHeaderDecode
    */
-  public function testMimeHeader($value, $encoded) {
+  public function testMimeHeaderEncode($value, $encoded) {
     $this->assertEquals($encoded, Unicode::mimeHeaderEncode($value));
-    $this->assertEquals($value, Unicode::mimeHeaderDecode($encoded));
   }
 
   /**
@@ -44,9 +42,49 @@ public function testMimeHeader($value, $encoded) {
    */
   public function providerTestMimeHeader() {
     return [
-      ['tést.txt', '=?UTF-8?B?dMOpc3QudHh0?='],
-      // Simple ASCII characters.
-      ['ASCII', 'ASCII'],
+      "Base64 encoding" => ['tést.txt', '=?UTF-8?B?dMOpc3QudHh0?='],
+      "ASCII characters only" => ['test.txt', 'test.txt'],
+    ];
+  }
+
+  /**
+   * Tests multibyte decoding.
+   *
+   * @dataProvider providerTestMimeHeaderDecode
+   * @covers ::mimeHeaderDecode
+   */
+  public function testMimeHeaderDecode($value, $encoded) {
+    $this->assertEquals($value, Unicode::mimeHeaderDecode($encoded));
+  }
+
+  /**
+   * Data provider for testMimeHeaderDecode().
+   *
+   * @return array
+   *   An array containing a string and its encoded value.
+   */
+  public function providerTestMimeHeaderDecode() {
+    return [
+      'Uppercase base64 encoding' => [
+        'tést.txt',
+        '=?utf-8?B?dMOpc3QudHh0?=',
+      ],
+      'Uppercase quoted-printable encoding' => [
+        'tést.txt',
+        '=?UTF-8?Q?t=C3=A9st.txt?=',
+      ],
+      'Lowercase base64 encoding' => [
+        'tést.txt',
+        '=?utf-8?b?dMOpc3QudHh0?=',
+      ],
+      'Lowercase quoted-printable encoding' => [
+        'tést.txt',
+        '=?UTF-8?q?t=C3=A9st.txt?=',
+      ],
+      'ASCII characters only' => [
+        'test.txt',
+        'test.txt',
+      ],
     ];
   }
 
diff --git a/web/core/themes/claro/css/base/elements.css b/web/core/themes/claro/css/base/elements.css
index 9d17479b87..6caeda07fb 100644
--- a/web/core/themes/claro/css/base/elements.css
+++ b/web/core/themes/claro/css/base/elements.css
@@ -9,50 +9,6 @@
  * Generic elements.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 html {
   font-family: BlinkMacSystemFont
 ,
diff --git a/web/core/themes/claro/css/components/accordion.css b/web/core/themes/claro/css/components/accordion.css
index 00092a2244..968e5dab83 100644
--- a/web/core/themes/claro/css/components/accordion.css
+++ b/web/core/themes/claro/css/components/accordion.css
@@ -10,50 +10,6 @@
  * Accordion styles.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .accordion {
   color: #222330;
   border: 1px solid rgba(216, 217, 224, 0.8);
diff --git a/web/core/themes/claro/css/components/action-link.css b/web/core/themes/claro/css/components/action-link.css
index c76e40f914..4eb59c835a 100644
--- a/web/core/themes/claro/css/components/action-link.css
+++ b/web/core/themes/claro/css/components/action-link.css
@@ -12,50 +12,6 @@
  * Contains Action link component and the action-links layout styles.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 /**
  * Action links layout.
  */
diff --git a/web/core/themes/claro/css/components/ajax-progress.module.css b/web/core/themes/claro/css/components/ajax-progress.module.css
index b17d3e9ec4..e7b098cb43 100644
--- a/web/core/themes/claro/css/components/ajax-progress.module.css
+++ b/web/core/themes/claro/css/components/ajax-progress.module.css
@@ -10,50 +10,6 @@
  * Throbber.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .ajax-progress {
   display: inline-block;
 }
diff --git a/web/core/themes/claro/css/components/autocomplete-loading.module.css b/web/core/themes/claro/css/components/autocomplete-loading.module.css
index 4c49059d3e..be8328ac41 100644
--- a/web/core/themes/claro/css/components/autocomplete-loading.module.css
+++ b/web/core/themes/claro/css/components/autocomplete-loading.module.css
@@ -12,50 +12,6 @@
  * @see autocomplete.js
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 /**
  * Since the autocomplete library is attached conditionally and not globally,
  * we can be 99% sure that the default icon will be used.
diff --git a/web/core/themes/claro/css/components/breadcrumb.css b/web/core/themes/claro/css/components/breadcrumb.css
index b496acca67..1a15aebe8b 100644
--- a/web/core/themes/claro/css/components/breadcrumb.css
+++ b/web/core/themes/claro/css/components/breadcrumb.css
@@ -10,50 +10,6 @@
  * Breadcrumbs.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .breadcrumb {
   padding: 0;
   color: #222330;
diff --git a/web/core/themes/claro/css/components/button.css b/web/core/themes/claro/css/components/button.css
index 8594ae4390..cfb6a50d02 100644
--- a/web/core/themes/claro/css/components/button.css
+++ b/web/core/themes/claro/css/components/button.css
@@ -12,50 +12,6 @@
  * Apply these classes to button elements (<button>, <input type="button" />).
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 /**
  * Buttons.
  *
diff --git a/web/core/themes/claro/css/components/card.css b/web/core/themes/claro/css/components/card.css
index 533f019841..e859249008 100644
--- a/web/core/themes/claro/css/components/card.css
+++ b/web/core/themes/claro/css/components/card.css
@@ -10,50 +10,6 @@
  * Card.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .card {
   display: flex;
   flex-direction: column;
diff --git a/web/core/themes/claro/css/components/content-header.css b/web/core/themes/claro/css/components/content-header.css
index 47ae19d73f..05f31281e9 100644
--- a/web/core/themes/claro/css/components/content-header.css
+++ b/web/core/themes/claro/css/components/content-header.css
@@ -9,50 +9,6 @@
  * Content header.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .content-header {
   overflow: hidden;
   margin-bottom: 0.75rem;
diff --git a/web/core/themes/claro/css/components/details.css b/web/core/themes/claro/css/components/details.css
index a36ce5dd2a..556c25c728 100644
--- a/web/core/themes/claro/css/components/details.css
+++ b/web/core/themes/claro/css/components/details.css
@@ -12,50 +12,6 @@
  * @see collapse.js
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 /**
  * Available modifiers are:
  *  - .claro-details--accordion
diff --git a/web/core/themes/claro/css/components/divider.css b/web/core/themes/claro/css/components/divider.css
index 2bd585d190..247e6ab34e 100644
--- a/web/core/themes/claro/css/components/divider.css
+++ b/web/core/themes/claro/css/components/divider.css
@@ -9,50 +9,6 @@
  * Divider.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .divider {
   height: 1px;
   background-color: rgba(142, 146, 156, 0.5);
diff --git a/web/core/themes/claro/css/components/dropbutton.css b/web/core/themes/claro/css/components/dropbutton.css
index 6c1c90aa79..05a22b0468 100644
--- a/web/core/themes/claro/css/components/dropbutton.css
+++ b/web/core/themes/claro/css/components/dropbutton.css
@@ -14,50 +14,6 @@
  *    contrast mode Firefox.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 :root {
   /**
   * Dropbutton
diff --git a/web/core/themes/claro/css/components/entity-meta.css b/web/core/themes/claro/css/components/entity-meta.css
index 6245dea4db..eb5bee4553 100644
--- a/web/core/themes/claro/css/components/entity-meta.css
+++ b/web/core/themes/claro/css/components/entity-meta.css
@@ -10,50 +10,6 @@
  * Entity meta.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .entity-meta__header {
   padding: 0.5rem 1rem 1rem;
   color: #222330;
diff --git a/web/core/themes/claro/css/components/fieldset.css b/web/core/themes/claro/css/components/fieldset.css
index 06329f3593..e228680ed7 100644
--- a/web/core/themes/claro/css/components/fieldset.css
+++ b/web/core/themes/claro/css/components/fieldset.css
@@ -10,50 +10,6 @@
  * Fieldset styles.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .fieldset {
   min-width: 0;
   margin: 1rem 0;
diff --git a/web/core/themes/claro/css/components/file.css b/web/core/themes/claro/css/components/file.css
index 30d5f44cf1..0311964cdf 100644
--- a/web/core/themes/claro/css/components/file.css
+++ b/web/core/themes/claro/css/components/file.css
@@ -10,50 +10,6 @@
  * Extends styles of the file link.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .file {
   min-height: 1.0625rem;
   padding-left: 1.5rem; /* LTR */
diff --git a/web/core/themes/claro/css/components/form--checkbox-radio--ie.css b/web/core/themes/claro/css/components/form--checkbox-radio--ie.css
index 77aa8b7241..a516e5a582 100644
--- a/web/core/themes/claro/css/components/form--checkbox-radio--ie.css
+++ b/web/core/themes/claro/css/components/form--checkbox-radio--ie.css
@@ -10,50 +10,6 @@
  * Checkbox and radio input elements styles for IE11 and below.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .form-boolean::-ms-check {
   display: inline-block;
   box-sizing: border-box;
diff --git a/web/core/themes/claro/css/components/form--checkbox-radio.css b/web/core/themes/claro/css/components/form--checkbox-radio.css
index ff7aa40eda..8ee90532b6 100644
--- a/web/core/themes/claro/css/components/form--checkbox-radio.css
+++ b/web/core/themes/claro/css/components/form--checkbox-radio.css
@@ -10,50 +10,6 @@
  * Checkbox and radio input elements.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 /**
  * Form item modifiers.
  */
diff --git a/web/core/themes/claro/css/components/form--field-multiple.css b/web/core/themes/claro/css/components/form--field-multiple.css
index 67f9110a57..8502d6ec4c 100644
--- a/web/core/themes/claro/css/components/form--field-multiple.css
+++ b/web/core/themes/claro/css/components/form--field-multiple.css
@@ -10,50 +10,6 @@
  * Styles for multiple field tables.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .field-multiple-table {
   margin-top: 1rem;
   margin-bottom: 1rem;
diff --git a/web/core/themes/claro/css/components/form--managed-file.css b/web/core/themes/claro/css/components/form--managed-file.css
index 4fa4b2ea41..e846d16fcf 100644
--- a/web/core/themes/claro/css/components/form--managed-file.css
+++ b/web/core/themes/claro/css/components/form--managed-file.css
@@ -12,50 +12,6 @@
  * This includes the styles for the file widgets and the image widgets.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 /**
  * The root element of the file/image widget.
  */
diff --git a/web/core/themes/claro/css/components/form--password-confirm.css b/web/core/themes/claro/css/components/form--password-confirm.css
index 304b1b702e..5caa69a07a 100644
--- a/web/core/themes/claro/css/components/form--password-confirm.css
+++ b/web/core/themes/claro/css/components/form--password-confirm.css
@@ -10,50 +10,6 @@
  * Visual styles for the Password widgets.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 :root {
   /* Weak */
   /* Fair */
diff --git a/web/core/themes/claro/css/components/form--select.css b/web/core/themes/claro/css/components/form--select.css
index 989ed67d32..bb1036155f 100644
--- a/web/core/themes/claro/css/components/form--select.css
+++ b/web/core/themes/claro/css/components/form--select.css
@@ -10,50 +10,6 @@
  * Select input elements.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .form-element--type-select {
   padding-right: calc(2rem - 1px);
   background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 9'%3E%3Cpath fill='none' stroke-width='1.5' d='M1 1L7 7L13 1' stroke='%23545560'/%3E%3C/svg%3E%0A");
diff --git a/web/core/themes/claro/css/components/form--text.css b/web/core/themes/claro/css/components/form--text.css
index f7c7923296..86948a5d07 100644
--- a/web/core/themes/claro/css/components/form--text.css
+++ b/web/core/themes/claro/css/components/form--text.css
@@ -10,50 +10,6 @@
  * Text and textarea input elements.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .form-element {
   box-sizing: border-box;
   max-width: 100%;
diff --git a/web/core/themes/claro/css/components/form.css b/web/core/themes/claro/css/components/form.css
index ac3f76feab..82c4619368 100644
--- a/web/core/themes/claro/css/components/form.css
+++ b/web/core/themes/claro/css/components/form.css
@@ -10,50 +10,6 @@
  * Main form and form item styles.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 :-ms-input-placeholder {
   color: #8e929c;
 }
diff --git a/web/core/themes/claro/css/components/image-preview.css b/web/core/themes/claro/css/components/image-preview.css
index 3d1a03f53c..965c02e3dd 100644
--- a/web/core/themes/claro/css/components/image-preview.css
+++ b/web/core/themes/claro/css/components/image-preview.css
@@ -10,50 +10,6 @@
  * Image preview component.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 /**
  * Image preview.
  */
diff --git a/web/core/themes/claro/css/components/jquery.ui/theme.css b/web/core/themes/claro/css/components/jquery.ui/theme.css
index a24a1af1ed..abb365dc91 100644
--- a/web/core/themes/claro/css/components/jquery.ui/theme.css
+++ b/web/core/themes/claro/css/components/jquery.ui/theme.css
@@ -11,50 +11,6 @@
  * Overrides /core/assets/vendor/jquery.ui/themes/base/theme.css.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 /**
  * Component containers
  */
diff --git a/web/core/themes/claro/css/components/messages.css b/web/core/themes/claro/css/components/messages.css
index 76985ea474..f02aecb611 100644
--- a/web/core/themes/claro/css/components/messages.css
+++ b/web/core/themes/claro/css/components/messages.css
@@ -12,50 +12,6 @@
  *   has been resolved.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .messages-list {
   margin-top: 2.5rem;
   margin-bottom: 2.5rem;
diff --git a/web/core/themes/claro/css/components/page-title.css b/web/core/themes/claro/css/components/page-title.css
index 959a33edca..590d0fa2e3 100644
--- a/web/core/themes/claro/css/components/page-title.css
+++ b/web/core/themes/claro/css/components/page-title.css
@@ -10,50 +10,6 @@
  * Page title.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .block-page-title-block {
   margin-bottom: 0.75rem;
 }
diff --git a/web/core/themes/claro/css/components/pager.css b/web/core/themes/claro/css/components/pager.css
index 8af345573b..23225581f4 100644
--- a/web/core/themes/claro/css/components/pager.css
+++ b/web/core/themes/claro/css/components/pager.css
@@ -10,50 +10,6 @@
  * Styles for Claro's Pagination.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 :root {
   /**
   * Pager.
diff --git a/web/core/themes/claro/css/components/progress.css b/web/core/themes/claro/css/components/progress.css
index 4e86569a9d..69f23f382f 100644
--- a/web/core/themes/claro/css/components/progress.css
+++ b/web/core/themes/claro/css/components/progress.css
@@ -12,50 +12,6 @@
  * @see progress.js
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .progress::after {
   display: table;
   clear: both;
diff --git a/web/core/themes/claro/css/components/shortcut.css b/web/core/themes/claro/css/components/shortcut.css
index a77f8697d4..811c6e813d 100644
--- a/web/core/themes/claro/css/components/shortcut.css
+++ b/web/core/themes/claro/css/components/shortcut.css
@@ -10,50 +10,6 @@
  * Styling for the shortcut module.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 :root {
   /**
   * Shortcut action.
diff --git a/web/core/themes/claro/css/components/system-admin--admin-list.css b/web/core/themes/claro/css/components/system-admin--admin-list.css
index 1a8b935fed..4bce6e4b9c 100644
--- a/web/core/themes/claro/css/components/system-admin--admin-list.css
+++ b/web/core/themes/claro/css/components/system-admin--admin-list.css
@@ -10,50 +10,6 @@
  * Admin list and admin item modules.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 /**
  * Admin list (wrapper of admin items).
  */
diff --git a/web/core/themes/claro/css/components/system-admin--panel.css b/web/core/themes/claro/css/components/system-admin--panel.css
index 5fee5d9361..025c5810a3 100644
--- a/web/core/themes/claro/css/components/system-admin--panel.css
+++ b/web/core/themes/claro/css/components/system-admin--panel.css
@@ -10,50 +10,6 @@
  * System admin module: Panel styling.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .panel {
   margin-top: 1em;
   margin-bottom: 3em;
diff --git a/web/core/themes/claro/css/components/table--file-multiple-widget.css b/web/core/themes/claro/css/components/table--file-multiple-widget.css
index 4f3f3558b6..38cc723409 100644
--- a/web/core/themes/claro/css/components/table--file-multiple-widget.css
+++ b/web/core/themes/claro/css/components/table--file-multiple-widget.css
@@ -10,50 +10,6 @@
  * Styles for multiple file widget table.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .table-file-multiple-widget tbody {
   vertical-align: top;
 }
diff --git a/web/core/themes/claro/css/components/tabledrag.css b/web/core/themes/claro/css/components/tabledrag.css
index bf968f446a..e3d01f24ee 100644
--- a/web/core/themes/claro/css/components/tabledrag.css
+++ b/web/core/themes/claro/css/components/tabledrag.css
@@ -15,50 +15,6 @@
  * @see tabledrag.js
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 body.drag {
   cursor: move;
 }
diff --git a/web/core/themes/claro/css/components/tables.css b/web/core/themes/claro/css/components/tables.css
index 8996753aff..e7c8dd6232 100644
--- a/web/core/themes/claro/css/components/tables.css
+++ b/web/core/themes/claro/css/components/tables.css
@@ -10,50 +10,6 @@
  * Claro styles for Tables.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 table {
   width: 100%;
   margin-top: 1.5rem;
diff --git a/web/core/themes/claro/css/components/tableselect.css b/web/core/themes/claro/css/components/tableselect.css
index 0f6bf1e402..9fed12185a 100644
--- a/web/core/themes/claro/css/components/tableselect.css
+++ b/web/core/themes/claro/css/components/tableselect.css
@@ -12,50 +12,6 @@
  * @see tableselect.js
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 td.checkbox,
 th.checkbox {
   text-align: center;
diff --git a/web/core/themes/claro/css/components/tabs.css b/web/core/themes/claro/css/components/tabs.css
index 969feff859..14b26b1d03 100644
--- a/web/core/themes/claro/css/components/tabs.css
+++ b/web/core/themes/claro/css/components/tabs.css
@@ -9,50 +9,6 @@
  * Tabs.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 :root {
   /**
   * Tabs.
diff --git a/web/core/themes/claro/css/components/vertical-tabs.css b/web/core/themes/claro/css/components/vertical-tabs.css
index 9ef2768985..b55f177a0e 100644
--- a/web/core/themes/claro/css/components/vertical-tabs.css
+++ b/web/core/themes/claro/css/components/vertical-tabs.css
@@ -12,50 +12,6 @@
  * Replaces /core/misc/vertical-tabs.css.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 /**
  * Main wrapper of vertical tabs.
  * This wrapper div is added by JavaScript.
diff --git a/web/core/themes/claro/css/components/views-exposed-form.css b/web/core/themes/claro/css/components/views-exposed-form.css
index 1ba2cc82a0..4aace8f752 100644
--- a/web/core/themes/claro/css/components/views-exposed-form.css
+++ b/web/core/themes/claro/css/components/views-exposed-form.css
@@ -10,50 +10,6 @@
  * Visual styles for views exposed form.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 /**
  * Use flexbox and some margin resets to make the fields + actions go inline.
  *
diff --git a/web/core/themes/claro/css/layout/breadcrumb.css b/web/core/themes/claro/css/layout/breadcrumb.css
index d87cb095b7..f2dc4c79a2 100644
--- a/web/core/themes/claro/css/layout/breadcrumb.css
+++ b/web/core/themes/claro/css/layout/breadcrumb.css
@@ -10,50 +10,6 @@
  * Breadcrumb region.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .region-breadcrumb {
   min-height: 1.25rem;
 }
diff --git a/web/core/themes/claro/css/layout/card-list.css b/web/core/themes/claro/css/layout/card-list.css
index 5e67aadb3d..40eeba401f 100644
--- a/web/core/themes/claro/css/layout/card-list.css
+++ b/web/core/themes/claro/css/layout/card-list.css
@@ -10,50 +10,6 @@
  * Cards list.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 :root {
   /* Using 100% as base causes issues in IE11. */
 }
diff --git a/web/core/themes/claro/css/layout/local-actions.css b/web/core/themes/claro/css/layout/local-actions.css
index 38786c74a4..2b7eb3ef85 100644
--- a/web/core/themes/claro/css/layout/local-actions.css
+++ b/web/core/themes/claro/css/layout/local-actions.css
@@ -10,50 +10,6 @@
  * Layout styles for local actions.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 /**
  * Action link layout styles.
  */
diff --git a/web/core/themes/claro/css/layout/node-add.css b/web/core/themes/claro/css/layout/node-add.css
index b92d66f7fb..13d3003a19 100644
--- a/web/core/themes/claro/css/layout/node-add.css
+++ b/web/core/themes/claro/css/layout/node-add.css
@@ -9,50 +9,6 @@
  * Layout overrides for node add/edit form.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .layout-region-node-footer__content {
   margin-top: 1.5em;
 }
diff --git a/web/core/themes/claro/css/theme/ckeditor-dialog.css b/web/core/themes/claro/css/theme/ckeditor-dialog.css
index 7772914c29..12c71ab0d7 100644
--- a/web/core/themes/claro/css/theme/ckeditor-dialog.css
+++ b/web/core/themes/claro/css/theme/ckeditor-dialog.css
@@ -10,50 +10,6 @@
  * CKEditor-native dialogs theming.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .cke_dialog_background_cover {
   display: none;
 }
diff --git a/web/core/themes/claro/css/theme/ckeditor-editor.css b/web/core/themes/claro/css/theme/ckeditor-editor.css
index 8fad4a5f7d..815c03d900 100644
--- a/web/core/themes/claro/css/theme/ckeditor-editor.css
+++ b/web/core/themes/claro/css/theme/ckeditor-editor.css
@@ -8,49 +8,6 @@
  * @file
  * CKEditor appearance overrides.
  */
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
 :root { /* 1px */
   /* Inner border size must be based on chrome border size. */ /* 1px */
   /* Inner border radius must be based on chrome border radius and size. */
diff --git a/web/core/themes/claro/css/theme/ckeditor-frame.css b/web/core/themes/claro/css/theme/ckeditor-frame.css
index d310341992..cc0c24930c 100644
--- a/web/core/themes/claro/css/theme/ckeditor-frame.css
+++ b/web/core/themes/claro/css/theme/ckeditor-frame.css
@@ -10,50 +10,6 @@
  * CKEditor frame styles.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .cke_editable:not(.cke_editable_inline) {
   margin: 1em calc(1em - 2px);
 }
diff --git a/web/core/themes/claro/css/theme/field-ui.admin.css b/web/core/themes/claro/css/theme/field-ui.admin.css
index 9ab712aa5b..848eed52d0 100644
--- a/web/core/themes/claro/css/theme/field-ui.admin.css
+++ b/web/core/themes/claro/css/theme/field-ui.admin.css
@@ -10,50 +10,6 @@
  * Replacement styles for Field UI admin.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 /* 'Manage fields' and 'Manage display' overviews */
 
 .field-ui-overview .region-title td {
diff --git a/web/core/themes/claro/css/theme/filter.theme.css b/web/core/themes/claro/css/theme/filter.theme.css
index 1b1f503c86..7ad0b201dd 100644
--- a/web/core/themes/claro/css/theme/filter.theme.css
+++ b/web/core/themes/claro/css/theme/filter.theme.css
@@ -10,50 +10,6 @@
  * Styling for the Filter module.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 /**
  * Filter information under field.
  */
-- 
GitLab


From ac0707c9334ae25daf64667bd7edea77b756ce52 Mon Sep 17 00:00:00 2001
From: Brian Canini <canini.16@osu.edu>
Date: Mon, 2 Nov 2020 14:24:39 -0500
Subject: [PATCH 05/23] updating privacy policy link in footer for asc intranet

---
 web/themes/asc_gateway/templates/system/page--front.html.twig | 4 ++--
 web/themes/asc_gateway/templates/system/page.html.twig        | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/web/themes/asc_gateway/templates/system/page--front.html.twig b/web/themes/asc_gateway/templates/system/page--front.html.twig
index bbb8a6c6de..aafe43bfe4 100644
--- a/web/themes/asc_gateway/templates/system/page--front.html.twig
+++ b/web/themes/asc_gateway/templates/system/page--front.html.twig
@@ -143,12 +143,12 @@
             <div class="col-xs-12 col-md-6 sf-col2">
               <ul>
                 <li>
-                  <a href="#">
+                  <a href="/form/contact-us">
                     Questions, Feedback, Accessibility
                   </a>
                 </li>
                 <li>
-                  <a href="#">
+                  <a href="https://go.osu.edu/privacy">
                     Privacy Policy
                   </a>
                 </li>
diff --git a/web/themes/asc_gateway/templates/system/page.html.twig b/web/themes/asc_gateway/templates/system/page.html.twig
index 4bb2f1065c..f89866e042 100644
--- a/web/themes/asc_gateway/templates/system/page.html.twig
+++ b/web/themes/asc_gateway/templates/system/page.html.twig
@@ -150,12 +150,12 @@
             <div class="col-xs-12 col-md-6 sf-col2">
               <ul>
                 <li>
-                  <a href="#">
+                  <a href="/form/contact-us">
                     Questions, Feedback, Accessibility
                   </a>
                 </li>
                 <li>
-                  <a href="#">
+                  <a href="https://go.osu.edu/privacy">
                     Privacy Policy
                   </a>
                 </li>
-- 
GitLab


From b0f7334c97ba145b78df05d5fea773702c05ec57 Mon Sep 17 00:00:00 2001
From: bcweaver <brianweaver@gmail.com>
Date: Wed, 4 Nov 2020 15:32:54 -0500
Subject: [PATCH 06/23] Fix primary key on asc_courses_api_data table

---
 web/modules/custom/asc_courses/asc_courses.install | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/web/modules/custom/asc_courses/asc_courses.install b/web/modules/custom/asc_courses/asc_courses.install
index 0ed65d066b..917af32f97 100644
--- a/web/modules/custom/asc_courses/asc_courses.install
+++ b/web/modules/custom/asc_courses/asc_courses.install
@@ -204,7 +204,7 @@ function asc_courses_schema() {
     //     'default' => 0,
     //   ],
     ],
-    'primary key' => ['id'],
+    'primary key' => ['asc_courses_api_data_id'],
   ];
 
   /*
-- 
GitLab


From d3c9a7e629eada0129de9ccc5e01a2e2d89c1668 Mon Sep 17 00:00:00 2001
From: Brian Canini <canini.16@osu.edu>
Date: Thu, 5 Nov 2020 09:26:58 -0500
Subject: [PATCH 07/23] fixing sidebar menu bug

---
 .../assets/sass/components/_sidebar-menu.scss |  6 ++++
 web/themes/asc_bootstrap/css/style.css        | 28 +++++++++++--------
 web/themes/asc_bootstrap/js/scripts.js        |  4 +++
 3 files changed, 26 insertions(+), 12 deletions(-)

diff --git a/web/themes/asc_bootstrap/assets/sass/components/_sidebar-menu.scss b/web/themes/asc_bootstrap/assets/sass/components/_sidebar-menu.scss
index 405ee6df6f..6301e0b32d 100644
--- a/web/themes/asc_bootstrap/assets/sass/components/_sidebar-menu.scss
+++ b/web/themes/asc_bootstrap/assets/sass/components/_sidebar-menu.scss
@@ -116,6 +116,12 @@ aside {
       }
     }
 
+    .active-link-li {
+      ul {
+        display: block;
+      }
+    }
+
     i {
       float: right;
       padding: 2px 10px;
diff --git a/web/themes/asc_bootstrap/css/style.css b/web/themes/asc_bootstrap/css/style.css
index 527e3a9fc8..eb0d5b5648 100644
--- a/web/themes/asc_bootstrap/css/style.css
+++ b/web/themes/asc_bootstrap/css/style.css
@@ -13018,54 +13018,58 @@ aside .sidebar-nav .active-trail .active-link-li ul {
 aside .sidebar-nav .active-trail .active-link-li ul ul {
   display: none;
 }
-/* line 119, ../assets/sass/components/_sidebar-menu.scss */
+/* line 120, ../assets/sass/components/_sidebar-menu.scss */
+aside .sidebar-nav .active-link-li ul {
+  display: block;
+}
+/* line 125, ../assets/sass/components/_sidebar-menu.scss */
 aside .sidebar-nav i {
   float: right;
   padding: 2px 10px;
   cursor: pointer;
 }
-/* line 125, ../assets/sass/components/_sidebar-menu.scss */
+/* line 131, ../assets/sass/components/_sidebar-menu.scss */
 aside .sidebar-nav:nth-last-child(1) {
   border-top: none;
 }
-/* line 131, ../assets/sass/components/_sidebar-menu.scss */
+/* line 137, ../assets/sass/components/_sidebar-menu.scss */
 aside .dropdown-menu {
   z-index: 20;
 }
-/* line 135, ../assets/sass/components/_sidebar-menu.scss */
+/* line 141, ../assets/sass/components/_sidebar-menu.scss */
 aside .nav > li > a:hover, aside .nav > li > a:focus {
   background-color: transparent;
 }
-/* line 139, ../assets/sass/components/_sidebar-menu.scss */
+/* line 145, ../assets/sass/components/_sidebar-menu.scss */
 aside .active-link {
   background-color: #ffffff;
   border-left: solid #D0021B 3px;
   padding-left: 5px;
   margin-left: -8px;
 }
-/* line 147, ../assets/sass/components/_sidebar-menu.scss */
+/* line 153, ../assets/sass/components/_sidebar-menu.scss */
 aside ul .active-link {
   margin-left: -5px;
 }
-/* line 152, ../assets/sass/components/_sidebar-menu.scss */
+/* line 158, ../assets/sass/components/_sidebar-menu.scss */
 aside ul ul .active-link {
   margin-left: -2px;
 }
-/* line 157, ../assets/sass/components/_sidebar-menu.scss */
+/* line 163, ../assets/sass/components/_sidebar-menu.scss */
 aside ul ul ul .active-link {
   margin-left: 0;
 }
-/* line 165, ../assets/sass/components/_sidebar-menu.scss */
+/* line 171, ../assets/sass/components/_sidebar-menu.scss */
 aside h2.active-link {
   background-color: transparent;
   border-left: none;
   padding-left: 0;
 }
-/* line 173, ../assets/sass/components/_sidebar-menu.scss */
+/* line 179, ../assets/sass/components/_sidebar-menu.scss */
 aside h2 a {
   color: #000000;
 }
-/* line 178, ../assets/sass/components/_sidebar-menu.scss */
+/* line 184, ../assets/sass/components/_sidebar-menu.scss */
 aside .nav {
   border-bottom: 1px #979797 dotted;
 }
@@ -13077,7 +13081,7 @@ aside .nav {
 }
 
 @media (max-width: 768px) {
-  /* line 188, ../assets/sass/components/_sidebar-menu.scss */
+  /* line 194, ../assets/sass/components/_sidebar-menu.scss */
   .region-sidebar-menu {
     display: none;
   }
diff --git a/web/themes/asc_bootstrap/js/scripts.js b/web/themes/asc_bootstrap/js/scripts.js
index ab34ced0ce..e75f246103 100644
--- a/web/themes/asc_bootstrap/js/scripts.js
+++ b/web/themes/asc_bootstrap/js/scripts.js
@@ -166,6 +166,10 @@ jQuery(document).ready(function(){
   }
 
 
+  if (jQuery(".sidebar-nav .active-link-li").length) {
+    jQuery(".sidebar-nav .active-link-li").find("i:first").removeClass('fa-angle-right').addClass( 'fa-angle-down' );
+  }
+
 
   if(jQuery("#views-exposed-form-events-page-1").length) {
 
-- 
GitLab


From 43ec9d2d31dfeb6417572e1f0b586766881f39bb Mon Sep 17 00:00:00 2001
From: Brian Canini <canini.16@osu.edu>
Date: Thu, 5 Nov 2020 13:42:22 -0500
Subject: [PATCH 08/23] hiding filter title on courses directory view if no
 filters are active

---
 web/themes/asc_bootstrap/asc_bootstrap.theme | 49 +++++++++++++++++++-
 1 file changed, 47 insertions(+), 2 deletions(-)

diff --git a/web/themes/asc_bootstrap/asc_bootstrap.theme b/web/themes/asc_bootstrap/asc_bootstrap.theme
index 481fdb8e95..b35f5d8110 100755
--- a/web/themes/asc_bootstrap/asc_bootstrap.theme
+++ b/web/themes/asc_bootstrap/asc_bootstrap.theme
@@ -115,8 +115,6 @@ function asc_bootstrap_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $
          ($form['#id'] == 'views-exposed-form-research-project-directory-page-1')
       || ($form['#id'] == 'views-exposed-form-research-project-gallery-page-1')
       || ($form['#id'] == 'views-exposed-form-research-project-directory-mobile-page-1')
-      || ($form['#id'] == 'views-exposed-form-courses-page-2')
-      || ($form['#id'] == 'views-exposed-form-courses-page-3')
       || ($form['#id'] == 'views-exposed-form-research-project-directory-block-1')
       || ($form['#id'] == 'views-exposed-form-research-project-gallery-block-1')
       || ($form['#id'] == 'views-exposed-form-research-project-directory-mobile-block-1')
@@ -150,6 +148,32 @@ function asc_bootstrap_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $
 
   //courses
   if ($form['#id'] == 'views-exposed-form-courses-page-2') {
+    /*
+    * add new HTML content to filters (headers and spacer)
+    * and setting weights for where they should appear in the form hierarchy
+    */
+    if((count($form['field_course_term_1_target_id']['#options']) > 1)
+    || (count($form['field_course_term_2_target_id']['#options']) > 1)) {
+      $form['filter_heading'] = array(
+        '#markup' => '<h2 class="filter-heading">Filter</h2>',
+        '#weight' => -10,
+      );
+    }
+    $form['filter_search_heading'] = array(
+      '#markup' => '<h2 class="filter-heading search-heading">Search</h2>',
+      '#weight' => 4,
+    );
+    $form['spacer'] = array(
+      '#markup' => '<div class="filter-spacer"></div>',
+      '#weight' => 1.5,
+    );
+    /*
+    * setting up weights for form elements
+    */
+    $form['title']['#weight'] = 5;
+    $form['title']['#attributes']['placeholder'] = t('Search Keywords');
+
+
     if(count($form['field_course_term_1_target_id']['#options']) == 1) {
       $form['field_course_term_1_target_id']['#access'] = FALSE;
     }
@@ -190,6 +214,27 @@ function asc_bootstrap_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $
 
   //courses mobile
   if ($form['#id'] == 'views-exposed-form-courses-page-3') {
+    if((count($form['field_course_term_1_target_id']['#options']) > 1)
+    || (count($form['field_course_term_2_target_id']['#options']) > 1)) {
+      $form['filter_heading'] = array(
+        '#markup' => '<h2 class="filter-heading">Filter</h2>',
+        '#weight' => -10,
+      );
+    }
+    $form['filter_search_heading'] = array(
+      '#markup' => '<h2 class="filter-heading search-heading">Search</h2>',
+      '#weight' => 4,
+    );
+    $form['spacer'] = array(
+      '#markup' => '<div class="filter-spacer"></div>',
+      '#weight' => 1.5,
+    );
+    /*
+    * setting up weights for form elements
+    */
+    $form['title']['#weight'] = 5;
+    $form['title']['#attributes']['placeholder'] = t('Search Keywords');
+
     if(count($form['field_course_term_1_target_id']['#options']) == 1) {
       $form['field_course_term_1_target_id']['#access'] = FALSE;
     }
-- 
GitLab


From a81d856371dc96b04c977d2e2288fd4c131f5f3f Mon Sep 17 00:00:00 2001
From: Brian Canini <canini.16@osu.edu>
Date: Thu, 5 Nov 2020 13:50:27 -0500
Subject: [PATCH 09/23] fixing browser back button cache bug

---
 web/themes/asc_bootstrap/js/scripts.js | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/web/themes/asc_bootstrap/js/scripts.js b/web/themes/asc_bootstrap/js/scripts.js
index e75f246103..6e0f236a8c 100644
--- a/web/themes/asc_bootstrap/js/scripts.js
+++ b/web/themes/asc_bootstrap/js/scripts.js
@@ -1,3 +1,9 @@
+jQuery(window).bind("pageshow", function(event) {
+  if (event.originalEvent.persisted) {
+      window.location.reload()
+  }
+});
+
 jQuery(document).ready(function(){
 
   //activates lightbox effect on gallery content type
-- 
GitLab


From 9a954a749eaff2d9656fc2d4d39551569af70680 Mon Sep 17 00:00:00 2001
From: Brian Canini <canini.16@osu.edu>
Date: Mon, 16 Nov 2020 12:12:49 -0500
Subject: [PATCH 10/23] adding 4 column paragraph template and styles

---
 .../assets/sass/components/_paragraphs.scss   |   6 +-
 web/themes/asc_bootstrap/css/style.css        | 163 +++++++++---------
 .../paragraph--columns_four.html.twig         |  92 ++++++++++
 3 files changed, 181 insertions(+), 80 deletions(-)
 create mode 100644 web/themes/asc_bootstrap/templates/paragraph/paragraph--columns_four.html.twig

diff --git a/web/themes/asc_bootstrap/assets/sass/components/_paragraphs.scss b/web/themes/asc_bootstrap/assets/sass/components/_paragraphs.scss
index dbd471379f..ff18046df1 100644
--- a/web/themes/asc_bootstrap/assets/sass/components/_paragraphs.scss
+++ b/web/themes/asc_bootstrap/assets/sass/components/_paragraphs.scss
@@ -21,11 +21,15 @@
   margin-top: 30px;
 }
 
+.paragraph--type--columns-4 {
+  margin-top: 30px;
+}
+
 .paragraph--type--accordion .field, .paragraph--type--tabs .field {
   padding: 20px;
 }
 
-.para_2_col, .para_3_col {
+.para_2_col, .para_3_col, .para_4_col {
   h2, h3, h4, h5, h6 {
     margin-top: 0;
     line-height: 20px;
diff --git a/web/themes/asc_bootstrap/css/style.css b/web/themes/asc_bootstrap/css/style.css
index eb0d5b5648..e8e2058d68 100644
--- a/web/themes/asc_bootstrap/css/style.css
+++ b/web/themes/asc_bootstrap/css/style.css
@@ -11857,108 +11857,113 @@ article.news-story {
 }
 
 /* line 24, ../assets/sass/components/_paragraphs.scss */
+.paragraph--type--columns-4 {
+  margin-top: 30px;
+}
+
+/* line 28, ../assets/sass/components/_paragraphs.scss */
 .paragraph--type--accordion .field, .paragraph--type--tabs .field {
   padding: 20px;
 }
 
-/* line 29, ../assets/sass/components/_paragraphs.scss */
-.para_2_col h2, .para_2_col h3, .para_2_col h4, .para_2_col h5, .para_2_col h6, .para_3_col h2, .para_3_col h3, .para_3_col h4, .para_3_col h5, .para_3_col h6 {
+/* line 33, ../assets/sass/components/_paragraphs.scss */
+.para_2_col h2, .para_2_col h3, .para_2_col h4, .para_2_col h5, .para_2_col h6, .para_3_col h2, .para_3_col h3, .para_3_col h4, .para_3_col h5, .para_3_col h6, .para_4_col h2, .para_4_col h3, .para_4_col h4, .para_4_col h5, .para_4_col h6 {
   margin-top: 0;
   line-height: 20px;
 }
 
-/* line 35, ../assets/sass/components/_paragraphs.scss */
+/* line 39, ../assets/sass/components/_paragraphs.scss */
 .paragraph__column {
   width: 100%;
   float: left;
 }
-/* line 39, ../assets/sass/components/_paragraphs.scss */
+/* line 43, ../assets/sass/components/_paragraphs.scss */
 .paragraph__column .col-l {
   padding-left: 0;
   padding-right: 15px;
 }
 @media (max-width: 768px) {
-  /* line 39, ../assets/sass/components/_paragraphs.scss */
+  /* line 43, ../assets/sass/components/_paragraphs.scss */
   .paragraph__column .col-l {
     padding-right: 0;
     padding-left: 0;
   }
 }
-/* line 49, ../assets/sass/components/_paragraphs.scss */
+/* line 53, ../assets/sass/components/_paragraphs.scss */
 .paragraph__column .col-m {
   padding-right: 7.5px;
   padding-left: 7.5px;
 }
 @media (max-width: 768px) {
-  /* line 49, ../assets/sass/components/_paragraphs.scss */
+  /* line 53, ../assets/sass/components/_paragraphs.scss */
   .paragraph__column .col-m {
     padding-right: 0;
     padding-left: 0;
   }
 }
-/* line 59, ../assets/sass/components/_paragraphs.scss */
+/* line 63, ../assets/sass/components/_paragraphs.scss */
 .paragraph__column .col-r {
   padding-right: 0;
   padding-left: 15px;
 }
 @media (max-width: 768px) {
-  /* line 59, ../assets/sass/components/_paragraphs.scss */
+  /* line 63, ../assets/sass/components/_paragraphs.scss */
   .paragraph__column .col-r {
     padding-right: 0;
     padding-left: 0;
   }
 }
-/* line 69, ../assets/sass/components/_paragraphs.scss */
+/* line 73, ../assets/sass/components/_paragraphs.scss */
 .paragraph__column .col-f {
   padding-right: 0;
   padding-left: 0;
 }
 @media (max-width: 768px) {
-  /* line 74, ../assets/sass/components/_paragraphs.scss */
+  /* line 78, ../assets/sass/components/_paragraphs.scss */
   .paragraph__column .container {
     padding: 0;
   }
-  /* line 79, ../assets/sass/components/_paragraphs.scss */
+  /* line 83, ../assets/sass/components/_paragraphs.scss */
   .paragraph__column .container .call-out-container {
     margin: 15px 0;
   }
 }
 @media (max-width: 768px) {
-  /* line 85, ../assets/sass/components/_paragraphs.scss */
+  /* line 89, ../assets/sass/components/_paragraphs.scss */
   .paragraph__column .col-xs-12 {
     margin-bottom: 20px;
   }
 }
 
-/* line 99, ../assets/sass/components/_paragraphs.scss */
+/* line 103, ../assets/sass/components/_paragraphs.scss */
 .paragraph--type--accordion .field {
   padding: 20px;
 }
-/* line 102, ../assets/sass/components/_paragraphs.scss */
+/* line 106, ../assets/sass/components/_paragraphs.scss */
 .paragraph--type--accordion .field p {
   margin: 0 0 16px;
 }
-/* line 107, ../assets/sass/components/_paragraphs.scss */
+/* line 111, ../assets/sass/components/_paragraphs.scss */
 .paragraph--type--accordion .field--name-field-media-file {
   padding: 0;
   margin-bottom: 15px;
 }
-/* line 112, ../assets/sass/components/_paragraphs.scss */
+/* line 116, ../assets/sass/components/_paragraphs.scss */
 .paragraph--type--accordion .panel-default {
   border: none;
 }
-/* line 116, ../assets/sass/components/_paragraphs.scss */
+/* line 120, ../assets/sass/components/_paragraphs.scss */
 .paragraph--type--accordion .panel-heading {
   border: none;
   padding: 0;
   border-top-right-radius: 0;
   border-top-left-radius: 0;
 }
-/* line 123, ../assets/sass/components/_paragraphs.scss */
+/* line 127, ../assets/sass/components/_paragraphs.scss */
 .paragraph--type--accordion .card-header {
   margin: 0 0 10px;
 }
-/* line 126, ../assets/sass/components/_paragraphs.scss */
+/* line 130, ../assets/sass/components/_paragraphs.scss */
 .paragraph--type--accordion .card-header .panel-title {
   color: #b00;
   margin: 0;
@@ -11973,34 +11978,34 @@ article.news-story {
   border-top-right-radius: 3px;
   border-top-left-radius: 3px;
 }
-/* line 141, ../assets/sass/components/_paragraphs.scss */
+/* line 145, ../assets/sass/components/_paragraphs.scss */
 .paragraph--type--accordion .card-header svg, .paragraph--type--accordion .card-header i {
   float: right;
   margin-top: 5px;
   color: #787878;
 }
 
-/* line 149, ../assets/sass/components/_paragraphs.scss */
+/* line 153, ../assets/sass/components/_paragraphs.scss */
 .paragraph--type--accordion .panel div:nth-last-child(2) {
   margin-bottom: 0 !important;
 }
 
-/* line 158, ../assets/sass/components/_paragraphs.scss */
+/* line 162, ../assets/sass/components/_paragraphs.scss */
 .btn-par {
   font-weight: 600;
   text-transform: uppercase;
 }
-/* line 162, ../assets/sass/components/_paragraphs.scss */
+/* line 166, ../assets/sass/components/_paragraphs.scss */
 .btn-par .fa-angle-right {
   margin-left: 10px;
 }
 
-/* line 167, ../assets/sass/components/_paragraphs.scss */
+/* line 171, ../assets/sass/components/_paragraphs.scss */
 .btn-fullw-wrapper {
   color: #4A4A4A;
 }
 
-/* line 171, ../assets/sass/components/_paragraphs.scss */
+/* line 175, ../assets/sass/components/_paragraphs.scss */
 .btn-fullw {
   width: 100%;
   text-align: center;
@@ -12011,53 +12016,53 @@ article.news-story {
   -ms-border-radius: 5px;
   border-radius: 5px;
 }
-/* line 181, ../assets/sass/components/_paragraphs.scss */
+/* line 185, ../assets/sass/components/_paragraphs.scss */
 .btn-fullw:hover {
   text-decoration: underline;
   background-color: #efefef;
 }
 
-/* line 194, ../assets/sass/components/_paragraphs.scss */
+/* line 198, ../assets/sass/components/_paragraphs.scss */
 .call-out-container .img-link-wrapper:hover + .field--type-link a {
   color: #BB0000;
   text-decoration: underline;
 }
-/* line 199, ../assets/sass/components/_paragraphs.scss */
+/* line 203, ../assets/sass/components/_paragraphs.scss */
 .call-out-container .field--item:hover > a {
   color: #BB0000;
   text-decoration: underline;
 }
-/* line 204, ../assets/sass/components/_paragraphs.scss */
+/* line 208, ../assets/sass/components/_paragraphs.scss */
 .call-out-container a {
   color: #444444;
   font-size: 20px;
   padding-top: 5px;
   font-weight: 500;
 }
-/* line 210, ../assets/sass/components/_paragraphs.scss */
+/* line 214, ../assets/sass/components/_paragraphs.scss */
 .call-out-container a:hover {
   color: #BB0000;
   text-decoration: underline;
 }
-/* line 216, ../assets/sass/components/_paragraphs.scss */
+/* line 220, ../assets/sass/components/_paragraphs.scss */
 .call-out-container .field--type-link {
   width: 100%;
   border-bottom: #BB0000 solid 5px;
   margin-bottom: 15px;
 }
-/* line 221, ../assets/sass/components/_paragraphs.scss */
+/* line 225, ../assets/sass/components/_paragraphs.scss */
 .call-out-container .field--type-link .field--item {
   padding: 15px;
   background: #F5F5F5;
 }
 @media (max-width: 768px) {
-  /* line 216, ../assets/sass/components/_paragraphs.scss */
+  /* line 220, ../assets/sass/components/_paragraphs.scss */
   .call-out-container .field--type-link {
     margin-bottom: 0;
   }
 }
 
-/* line 242, ../assets/sass/components/_paragraphs.scss */
+/* line 246, ../assets/sass/components/_paragraphs.scss */
 .dgray-bg .call-out-container a,
 .dscarlet-bg .call-out-container a,
 .dviolet-bg .call-out-container a,
@@ -12067,7 +12072,7 @@ article.news-story {
 .dorange-bg .call-out-container a {
   text-decoration: none;
 }
-/* line 245, ../assets/sass/components/_paragraphs.scss */
+/* line 249, ../assets/sass/components/_paragraphs.scss */
 .dgray-bg .call-out-container a:hover,
 .dscarlet-bg .call-out-container a:hover,
 .dviolet-bg .call-out-container a:hover,
@@ -12078,20 +12083,20 @@ article.news-story {
   text-decoration: underline;
 }
 
-/* line 260, ../assets/sass/components/_paragraphs.scss */
+/* line 264, ../assets/sass/components/_paragraphs.scss */
 .file .file-icon span {
   color: #bb0000;
 }
-/* line 267, ../assets/sass/components/_paragraphs.scss */
+/* line 271, ../assets/sass/components/_paragraphs.scss */
 .file .file-link a {
   color: #bb0000;
 }
-/* line 272, ../assets/sass/components/_paragraphs.scss */
+/* line 276, ../assets/sass/components/_paragraphs.scss */
 .file .file-size {
   color: #bb0000;
 }
 
-/* line 282, ../assets/sass/components/_paragraphs.scss */
+/* line 286, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container {
   width: 100%;
   position: absolute;
@@ -12101,7 +12106,7 @@ article.news-story {
   height: 100%;
   max-height: 550px;
 }
-/* line 291, ../assets/sass/components/_paragraphs.scss */
+/* line 295, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt {
   background-color: rgba(255, 255, 255, 0.9);
   padding: 20px;
@@ -12113,7 +12118,7 @@ article.news-story {
   transform: perspective(1px) translateY(-50%);
 }
 @media (max-width: 768px) {
-  /* line 291, ../assets/sass/components/_paragraphs.scss */
+  /* line 295, ../assets/sass/components/_paragraphs.scss */
   .slide-txt-container .slide-txt {
     width: 80%;
     top: 45%;
@@ -12123,11 +12128,11 @@ article.news-story {
     justify-content: center;
   }
 }
-/* line 310, ../assets/sass/components/_paragraphs.scss */
+/* line 314, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper {
   width: 100%;
 }
-/* line 313, ../assets/sass/components/_paragraphs.scss */
+/* line 317, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper h2 {
   font-size: 36px;
   text-transform: uppercase;
@@ -12136,36 +12141,36 @@ article.news-story {
   line-height: 1.1;
 }
 @media (max-width: 768px) {
-  /* line 313, ../assets/sass/components/_paragraphs.scss */
+  /* line 317, ../assets/sass/components/_paragraphs.scss */
   .slide-txt-container .slide-txt .slide-txt-wrapper h2 {
     font-size: 15px;
     margin-top: 0;
   }
 }
-/* line 326, ../assets/sass/components/_paragraphs.scss */
+/* line 330, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper p {
   font-size: 18px;
   margin: 25px 0;
   color: #333333;
 }
 @media (max-width: 768px) {
-  /* line 326, ../assets/sass/components/_paragraphs.scss */
+  /* line 330, ../assets/sass/components/_paragraphs.scss */
   .slide-txt-container .slide-txt .slide-txt-wrapper p {
     font-size: 14px;
     margin-top: 0;
   }
 }
-/* line 337, ../assets/sass/components/_paragraphs.scss */
+/* line 341, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn {
   white-space: normal;
 }
-/* line 341, ../assets/sass/components/_paragraphs.scss */
+/* line 345, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-20 {
   width: 100%;
   margin: 0 auto;
   font-size: 18px;
 }
-/* line 346, ../assets/sass/components/_paragraphs.scss */
+/* line 350, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-20 .btn-wrapper {
   min-width: 25%;
   margin: 10px;
@@ -12175,23 +12180,23 @@ article.news-story {
   text-transform: uppercase;
   padding: 5px;
 }
-/* line 355, ../assets/sass/components/_paragraphs.scss */
+/* line 359, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-20 .btn-wrapper .btn-primary {
   background-color: transparent;
   border-color: transparent;
   border: 0;
   border-radius: 0;
 }
-/* line 362, ../assets/sass/components/_paragraphs.scss */
+/* line 366, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-20 .btn-wrapper svg, .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-20 .btn-wrapper i {
   padding-top: 1px;
 }
-/* line 366, ../assets/sass/components/_paragraphs.scss */
+/* line 370, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-20 .btn-wrapper:hover {
   background: #8E0101;
 }
 @media (max-width: 768px) {
-  /* line 346, ../assets/sass/components/_paragraphs.scss */
+  /* line 350, ../assets/sass/components/_paragraphs.scss */
   .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-20 .btn-wrapper {
     display: block;
     width: 100%;
@@ -12199,22 +12204,22 @@ article.news-story {
     font-weight: 700;
   }
 }
-/* line 378, ../assets/sass/components/_paragraphs.scss */
+/* line 382, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-20 .btn-fullw-wrapper {
   background: transparent;
   color: #4A4A4A;
 }
-/* line 382, ../assets/sass/components/_paragraphs.scss */
+/* line 386, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-20 .btn-fullw-wrapper:hover {
   background: transparent;
 }
-/* line 388, ../assets/sass/components/_paragraphs.scss */
+/* line 392, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-19 {
   width: 100%;
   margin: 0 auto;
   font-size: 18px;
 }
-/* line 393, ../assets/sass/components/_paragraphs.scss */
+/* line 397, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-19 .btn-wrapper {
   min-width: 40%;
   margin: 10px;
@@ -12224,23 +12229,23 @@ article.news-story {
   text-transform: uppercase;
   padding: 5px;
 }
-/* line 402, ../assets/sass/components/_paragraphs.scss */
+/* line 406, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-19 .btn-wrapper .btn-primary {
   background-color: transparent;
   border-color: transparent;
   border: 0;
   border-radius: 0;
 }
-/* line 409, ../assets/sass/components/_paragraphs.scss */
+/* line 413, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-19 .btn-wrapper svg, .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-19 .btn-wrapper i {
   padding-top: 1px;
 }
-/* line 413, ../assets/sass/components/_paragraphs.scss */
+/* line 417, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-19 .btn-wrapper:hover {
   background: #8E0101;
 }
 @media (max-width: 768px) {
-  /* line 393, ../assets/sass/components/_paragraphs.scss */
+  /* line 397, ../assets/sass/components/_paragraphs.scss */
   .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-19 .btn-wrapper {
     display: block;
     width: 100%;
@@ -12248,22 +12253,22 @@ article.news-story {
     font-weight: 700;
   }
 }
-/* line 425, ../assets/sass/components/_paragraphs.scss */
+/* line 429, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-19 .btn-fullw-wrapper {
   background: transparent;
   color: #4A4A4A;
 }
-/* line 429, ../assets/sass/components/_paragraphs.scss */
+/* line 433, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-19 .btn-fullw-wrapper:hover {
   background: transparent;
 }
-/* line 435, ../assets/sass/components/_paragraphs.scss */
+/* line 439, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-18 {
   width: 100%;
   margin: 0 auto;
   font-size: 18px;
 }
-/* line 440, ../assets/sass/components/_paragraphs.scss */
+/* line 444, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-18 .btn-wrapper {
   min-width: 50%;
   margin: 10px;
@@ -12273,23 +12278,23 @@ article.news-story {
   text-transform: uppercase;
   padding: 5px;
 }
-/* line 449, ../assets/sass/components/_paragraphs.scss */
+/* line 453, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-18 .btn-wrapper .btn-primary {
   background-color: transparent;
   border-color: transparent;
   border: 0;
   border-radius: 0;
 }
-/* line 456, ../assets/sass/components/_paragraphs.scss */
+/* line 460, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-18 .btn-wrapper svg, .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-18 .btn-wrapper i {
   padding-top: 1px;
 }
-/* line 460, ../assets/sass/components/_paragraphs.scss */
+/* line 464, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-18 .btn-wrapper:hover {
   background: #8E0101;
 }
 @media (max-width: 768px) {
-  /* line 440, ../assets/sass/components/_paragraphs.scss */
+  /* line 444, ../assets/sass/components/_paragraphs.scss */
   .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-18 .btn-wrapper {
     display: block;
     width: 100%;
@@ -12297,46 +12302,46 @@ article.news-story {
     font-weight: 700;
   }
 }
-/* line 472, ../assets/sass/components/_paragraphs.scss */
+/* line 476, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-18 .btn-fullw-wrapper {
   background: transparent;
   color: #4A4A4A;
 }
-/* line 476, ../assets/sass/components/_paragraphs.scss */
+/* line 480, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-18 .btn-fullw-wrapper:hover {
   background: transparent;
 }
 
-/* line 493, ../assets/sass/components/_paragraphs.scss */
+/* line 497, ../assets/sass/components/_paragraphs.scss */
 .paragraph--type--tagline {
   margin: 20px 0;
   float: left;
 }
 
-/* line 504, ../assets/sass/components/_paragraphs.scss */
+/* line 508, ../assets/sass/components/_paragraphs.scss */
 .paragraph--type--tabs .field {
   padding: 20px;
 }
-/* line 508, ../assets/sass/components/_paragraphs.scss */
+/* line 512, ../assets/sass/components/_paragraphs.scss */
 .paragraph--type--tabs .field--name-field-media-file {
   padding: 0;
 }
-/* line 512, ../assets/sass/components/_paragraphs.scss */
+/* line 516, ../assets/sass/components/_paragraphs.scss */
 .paragraph--type--tabs .field--name-field-media-image {
   padding: 20px 0;
 }
 
-/* line 523, ../assets/sass/components/_paragraphs.scss */
+/* line 527, ../assets/sass/components/_paragraphs.scss */
 .para_1_col .field--name-field-media-twitter {
   margin: 0 auto;
   width: 60%;
 }
-/* line 527, ../assets/sass/components/_paragraphs.scss */
+/* line 531, ../assets/sass/components/_paragraphs.scss */
 .para_1_col .field--name-field-media-twitter .col-xs-12 {
   padding: 0;
 }
 
-/* line 537, ../assets/sass/components/_paragraphs.scss */
+/* line 541, ../assets/sass/components/_paragraphs.scss */
 .paragraph--type--video iframe {
   width: 100% !important;
 }
diff --git a/web/themes/asc_bootstrap/templates/paragraph/paragraph--columns_four.html.twig b/web/themes/asc_bootstrap/templates/paragraph/paragraph--columns_four.html.twig
new file mode 100644
index 0000000000..b27300e85a
--- /dev/null
+++ b/web/themes/asc_bootstrap/templates/paragraph/paragraph--columns_four.html.twig
@@ -0,0 +1,92 @@
+{#
+/**
+ * @file
+ * Custom Paragraphs template for displaying a Three Column layout.
+ *
+ * Available variables:
+ * - paragraph: Full paragraph entity.
+ *   - id: The paragraph ID.
+ *   - bundle: The type of the paragraph, for example, "image" or "text".
+ *   - authorid: The user ID of the paragraph author.
+ *   - createdtime: Formatted creation date. Preprocess functions can
+ *     reformat it by calling format_date() with the desired parameters on
+ *     $variables['paragraph']->getCreatedTime().
+ * - content: All paragraph items. Use {{ content }} to print them all,
+ *   or print a subset such as {{ content.field_example }}. Use
+ *   {{ content|without('field_example') }} to temporarily suppress the printing
+ *   of a given child element.
+ * - attributes: HTML attributes for the containing element.
+ *   The attributes.class element may contain one or more of the following
+ *   classes:
+ *   - paragraphs: The current template type (also known as a "theming hook").
+ *   - paragraphs--type-[type]: The current paragraphs type. For example, if the paragraph is an
+ *     "Image" it would result in "paragraphs--type--image". Note that the machine
+ *     name will often be in a short form of the human readable label.
+ *   - paragraphs--view-mode--[view_mode]: The View Mode of the paragraph; for example, a
+ *     preview would result in: "paragraphs--view-mode--preview", and
+ *     default: "paragraphs--view-mode--default".
+ * - view_mode: View mode; for example, "preview" or "full".
+ * - logged_in: Flag for authenticated user status. Will be true when the
+ *   current user is a logged-in member.
+ * - is_admin: Flag for admin user status. Will be true when the current user
+ *   is an administrator.
+ *
+ * @see template_preprocess_paragraph()
+ *
+ */
+#}
+
+{# Setting up variables that determines the width for left, middle and right columns #}
+{% if content.field_column_style_3['#items'].getString() == "paragraph--style--25-25-25-25" %}
+
+        {% set leftwidth, mleftwidth, mrightwidth, rightwidth = 'col-xs-12 col-md-3', 'col-xs-12 col-md-3', 'col-xs-12 col-md-3', 'col-xs-12 col-md-3' %}
+
+{% else %}
+
+        {% set leftwidth, mleftwidth, mrightwidth, rightwidth = 'col-xs-12 col-md-3', 'col-xs-12 col-md-3', 'col-xs-12 col-md-3', 'col-xs-12 col-md-3' %}
+
+{% endif %}
+
+
+{# Setting up variable that determines the background color for section #}
+{% set bgcolor = content.field_background_color['#items'].getString() %}
+
+{% if bgcolor == ''%}
+  {% set bgcolor = 'transparent-bg' %}
+{% endif %}
+
+{# Prints div with classes, and content without Width and Background. #}
+<div{{ attributes.addClass(classes) }}>
+  <div class="paragraph__column {{ bgcolor }} para_4_col">
+
+{% if page_content_type == 'landing_page' %}
+        <div class="container">
+    {% endif %}
+
+{% set thecont = [] %}
+  {% for item in content|without('field_column_style_4')|without('field_background_color') %}
+    {% set thecont = thecont|merge(item) %}
+  {% endfor %}
+
+    <div class="{{ leftwidth }} col-l">
+      {{ thecont[0] }}
+    </div>
+
+    <div class="{{ mleftwidth }} col-m">
+      {{ thecont[1] }}
+    </div>
+
+    <div class="{{ mrightwidth }} col-m">
+      {{ thecont[2] }}
+    </div>
+
+    <div class="{{ rightwidth }} col-r">
+      {{ thecont[3] }}
+    </div>
+
+    {% if page_content_type == 'landing_page' %}
+        </div>
+    {% endif %}
+
+  </div>
+</div>
-- 
GitLab


From 8d7fb9d32e5adf0dd6464735ba6f9b0ade2c73c0 Mon Sep 17 00:00:00 2001
From: Brian Weaver <weaver.299@osu.edu>
Date: Wed, 18 Nov 2020 15:26:40 -0500
Subject: [PATCH 11/23] SECURITY update to Drupal 8.9.9

---
 composer.json                                 |   2 +-
 composer.lock                                 |  27 +--
 vendor/composer/ClassLoader.php               |   2 +-
 vendor/composer/autoload_real.php             |   3 +
 vendor/composer/installed.json                |  26 +--
 web/core/MAINTAINERS.txt                      |   2 +-
 web/core/includes/file.inc                    |  13 +-
 web/core/includes/install.core.inc            |   2 +-
 web/core/lib/Drupal.php                       |   2 +-
 .../Component/Gettext/PoStreamReader.php      |   2 -
 .../Core/Asset/CssCollectionRenderer.php      |   5 +
 .../Drupal/Core/Command/DbImportCommand.php   |   2 +-
 .../lib/Drupal/Core/Command/ServerCommand.php |   1 -
 .../Drupal/Core/Database/StatementEmpty.php   |   4 +-
 .../Drupal/Core/Entity/EntityListBuilder.php  |   4 +-
 .../Drupal/Core/Field/FieldItemInterface.php  |   2 +-
 .../Core/Field/FieldItemListInterface.php     |   2 +-
 web/core/lib/Drupal/Core/Form/FormBuilder.php |  43 ++---
 .../Drupal/Core/Form/FormStateInterface.php   |   5 +-
 .../Context/ContextProviderInterface.php      |   4 +-
 .../Drupal/Core/TypedData/ListInterface.php   |   4 +-
 ...dIPsTest.php => MigrateBlockedIpsTest.php} |   0
 .../tests/src/Traits/BasicAuthTestTrait.php   |  29 ---
 web/core/modules/book/src/BookManager.php     |   2 +-
 .../book/tests/src/Functional/BookTest.php    |  56 +++++-
 .../config_import_test.module                 |   1 -
 .../Functional/Views/TranslationLinkTest.php  |   2 +-
 .../FieldFormatter/DateTimeFormatterBase.php  |   1 -
 ...ldTest.php => ReEnableModuleFieldTest.php} |   0
 web/core/modules/file/file.module             |  59 +++++--
 .../rest/resource/FileUploadResource.php      |  54 ++++--
 .../tests/file_test/src/Form/FileTestForm.php |  15 +-
 .../src/Form/FileTestSaveUploadFromForm.php   |  17 +-
 .../src/Functional/SaveUploadFormTest.php     |  52 +++++-
 .../tests/src/Functional/SaveUploadTest.php   | 167 +++++++++++++++++-
 .../file/tests/src/Kernel/ValidateTest.php    |  19 ++
 .../TemporaryJsonapiFileFieldUploader.php     |  54 ++++--
 .../tests/src/Functional/FileUploadTest.php   |  53 +++++-
 .../Functional/FileUploadResourceTestBase.php |  53 +++++-
 .../tests/modules/hold_test/hold_test.module  |   6 +-
 .../modules/hold_test/hold_test.services.yml  |   1 +
 .../EventSubscriber/HoldTestSubscriber.php    |  19 +-
 .../FileTransfer/TestFileTransfer.php         |   4 +-
 .../update/src/UpdateManagerInterface.php     |   6 +
 .../modules/update/src/UpdateProcessor.php    |   5 +
 .../release-history/drupal.broken.xml         |   3 +
 .../tests/src/Functional/UpdateCoreTest.php   |  37 ++++
 .../d6/ProfileFieldCheckRequirementsTest.php  |   2 +-
 .../d7/ProfileFieldCheckRequirementsTest.php  |   2 +-
 ...llerExistingBrokenDatabaseSettingsTest.php |   2 -
 .../InstallerExistingConfigNoConfigTest.php   |   1 -
 ...nstallerExistingConfigNoSystemSiteTest.php |   2 +-
 ...tallerExistingConfigProfileHookInstall.php |   2 -
 ...gConfigSyncDirectoryProfileHookInstall.php |   4 -
 ...ConfigSyncDriectoryProfileMismatchTest.php |   1 -
 .../Core/Database/TransactionTest.php         |   2 +-
 .../KernelTests/Core/File/NameMungingTest.php |  37 +++-
 .../Asset/CssCollectionRendererUnitTest.php   |  50 +++---
 .../Core/Database/Stub/StubConnection.php     |   4 +-
 .../custom/fake/Connection.php                |   4 +-
 .../themes/claro/css/theme/media-library.css  |   6 +-
 .../claro/css/theme/media-library.pcss.css    |   6 +-
 .../themes/seven/css/theme/media-library.css  |   6 +-
 63 files changed, 736 insertions(+), 267 deletions(-)
 rename web/core/modules/ban/tests/src/Kernel/Migrate/d7/{MigrateBlockedIPsTest.php => MigrateBlockedIpsTest.php} (100%)
 rename web/core/modules/field/tests/src/Functional/{reEnableModuleFieldTest.php => ReEnableModuleFieldTest.php} (100%)
 create mode 100644 web/core/modules/update/tests/fixtures/release-history/drupal.broken.xml

diff --git a/composer.json b/composer.json
index 61002236a6..ee5ee5f08f 100644
--- a/composer.json
+++ b/composer.json
@@ -105,7 +105,7 @@
         "drupal/config_update": "1.5",
         "drupal/console": "1.8",
         "drupal/content_access": "1.0-alpha1",
-        "drupal/core-recommended": "8.9.7",
+        "drupal/core-recommended": "8.9.9",
         "drupal/crop": "2.1",
         "drupal/ctools": "3.4",
         "drupal/devel": "2.0",
diff --git a/composer.lock b/composer.lock
index 61c67ca994..43807b0c60 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "0ea8a728f9988c587c660994aefb5915",
+    "content-hash": "4dc33938bdd0ec165eeb79efb4e6d9d3",
     "packages": [
         {
             "name": "alchemy/zippy",
@@ -3376,16 +3376,16 @@
         },
         {
             "name": "drupal/core",
-            "version": "8.9.7",
+            "version": "8.9.9",
             "source": {
                 "type": "git",
                 "url": "https://github.com/drupal/core.git",
-                "reference": "ded1be08c23f19211f9a2514a72e7defb1204efc"
+                "reference": "724ada1a6c497a663797c40e4ee3d0c7c618371d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/drupal/core/zipball/ded1be08c23f19211f9a2514a72e7defb1204efc",
-                "reference": "ded1be08c23f19211f9a2514a72e7defb1204efc",
+                "url": "https://api.github.com/repos/drupal/core/zipball/724ada1a6c497a663797c40e4ee3d0c7c618371d",
+                "reference": "724ada1a6c497a663797c40e4ee3d0c7c618371d",
                 "shasum": ""
             },
             "require": {
@@ -3608,20 +3608,20 @@
                 "GPL-2.0-or-later"
             ],
             "description": "Drupal is an open source content management platform powering millions of websites and applications.",
-            "time": "2020-10-07T19:37:20+00:00"
+            "time": "2020-11-17T22:05:46+00:00"
         },
         {
             "name": "drupal/core-recommended",
-            "version": "8.9.7",
+            "version": "8.9.9",
             "source": {
                 "type": "git",
                 "url": "https://github.com/drupal/core-recommended.git",
-                "reference": "7895ddd703101bdec91fb6ae58381036a9768e1f"
+                "reference": "875f16a071119e0b26cb8a2b6f44314107110f28"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/drupal/core-recommended/zipball/7895ddd703101bdec91fb6ae58381036a9768e1f",
-                "reference": "7895ddd703101bdec91fb6ae58381036a9768e1f",
+                "url": "https://api.github.com/repos/drupal/core-recommended/zipball/875f16a071119e0b26cb8a2b6f44314107110f28",
+                "reference": "875f16a071119e0b26cb8a2b6f44314107110f28",
                 "shasum": ""
             },
             "require": {
@@ -3633,7 +3633,7 @@
                 "doctrine/common": "v2.7.3",
                 "doctrine/inflector": "v1.2.0",
                 "doctrine/lexer": "1.0.2",
-                "drupal/core": "8.9.7",
+                "drupal/core": "8.9.9",
                 "easyrdf/easyrdf": "0.9.1",
                 "egulias/email-validator": "2.1.17",
                 "guzzlehttp/guzzle": "6.5.4",
@@ -3690,7 +3690,7 @@
                 "GPL-2.0-or-later"
             ],
             "description": "Locked core dependencies; require this project INSTEAD OF drupal/core.",
-            "time": "2020-10-07T19:37:20+00:00"
+            "time": "2020-11-17T22:05:46+00:00"
         },
         {
             "name": "drupal/crop",
@@ -13519,5 +13519,6 @@
     "platform-dev": [],
     "platform-overrides": {
         "php": "7.3"
-    }
+    },
+    "plugin-api-version": "1.1.0"
 }
diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php
index fce8549f07..03b9bb9c40 100644
--- a/vendor/composer/ClassLoader.php
+++ b/vendor/composer/ClassLoader.php
@@ -60,7 +60,7 @@ class ClassLoader
     public function getPrefixes()
     {
         if (!empty($this->prefixesPsr0)) {
-            return call_user_func_array('array_merge', $this->prefixesPsr0);
+            return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
         }
 
         return array();
diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php
index 126478a282..fe8678ed14 100644
--- a/vendor/composer/autoload_real.php
+++ b/vendor/composer/autoload_real.php
@@ -13,6 +13,9 @@ public static function loadClassLoader($class)
         }
     }
 
+    /**
+     * @return \Composer\Autoload\ClassLoader
+     */
     public static function getLoader()
     {
         if (null !== self::$loader) {
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index f911db2d6f..1e39a1582f 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -3485,17 +3485,17 @@
     },
     {
         "name": "drupal/core",
-        "version": "8.9.7",
-        "version_normalized": "8.9.7.0",
+        "version": "8.9.9",
+        "version_normalized": "8.9.9.0",
         "source": {
             "type": "git",
             "url": "https://github.com/drupal/core.git",
-            "reference": "ded1be08c23f19211f9a2514a72e7defb1204efc"
+            "reference": "724ada1a6c497a663797c40e4ee3d0c7c618371d"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/drupal/core/zipball/ded1be08c23f19211f9a2514a72e7defb1204efc",
-            "reference": "ded1be08c23f19211f9a2514a72e7defb1204efc",
+            "url": "https://api.github.com/repos/drupal/core/zipball/724ada1a6c497a663797c40e4ee3d0c7c618371d",
+            "reference": "724ada1a6c497a663797c40e4ee3d0c7c618371d",
             "shasum": ""
         },
         "require": {
@@ -3662,7 +3662,7 @@
             "drupal/workflows": "self.version",
             "drupal/workspaces": "self.version"
         },
-        "time": "2020-10-07T19:37:20+00:00",
+        "time": "2020-11-17T22:05:46+00:00",
         "type": "drupal-core",
         "extra": {
             "drupal-scaffold": {
@@ -3723,17 +3723,17 @@
     },
     {
         "name": "drupal/core-recommended",
-        "version": "8.9.7",
-        "version_normalized": "8.9.7.0",
+        "version": "8.9.9",
+        "version_normalized": "8.9.9.0",
         "source": {
             "type": "git",
             "url": "https://github.com/drupal/core-recommended.git",
-            "reference": "7895ddd703101bdec91fb6ae58381036a9768e1f"
+            "reference": "875f16a071119e0b26cb8a2b6f44314107110f28"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/drupal/core-recommended/zipball/7895ddd703101bdec91fb6ae58381036a9768e1f",
-            "reference": "7895ddd703101bdec91fb6ae58381036a9768e1f",
+            "url": "https://api.github.com/repos/drupal/core-recommended/zipball/875f16a071119e0b26cb8a2b6f44314107110f28",
+            "reference": "875f16a071119e0b26cb8a2b6f44314107110f28",
             "shasum": ""
         },
         "require": {
@@ -3745,7 +3745,7 @@
             "doctrine/common": "v2.7.3",
             "doctrine/inflector": "v1.2.0",
             "doctrine/lexer": "1.0.2",
-            "drupal/core": "8.9.7",
+            "drupal/core": "8.9.9",
             "easyrdf/easyrdf": "0.9.1",
             "egulias/email-validator": "2.1.17",
             "guzzlehttp/guzzle": "6.5.4",
@@ -3796,7 +3796,7 @@
         "conflict": {
             "webflo/drupal-core-strict": "*"
         },
-        "time": "2020-10-07T19:37:20+00:00",
+        "time": "2020-11-17T22:05:46+00:00",
         "type": "metapackage",
         "notification-url": "https://packagist.org/downloads/",
         "license": [
diff --git a/web/core/MAINTAINERS.txt b/web/core/MAINTAINERS.txt
index a0428579f5..9383214f56 100644
--- a/web/core/MAINTAINERS.txt
+++ b/web/core/MAINTAINERS.txt
@@ -39,7 +39,7 @@ Release managers
 - Jess Myrbo 'xjm' https://www.drupal.org/u/xjm
 
 Committer team facilitators
-- (provisional) Pamela Barone 'pameeela' https://www.drupal.org/u/pameeela
+- Pamela Barone 'pameeela' https://www.drupal.org/u/pameeela
 
 Subsystem maintainers
 ---------------------
diff --git a/web/core/includes/file.inc b/web/core/includes/file.inc
index c9eec6c9d8..26ebab7619 100644
--- a/web/core/includes/file.inc
+++ b/web/core/includes/file.inc
@@ -657,8 +657,8 @@ function file_unmanaged_move($source, $destination = NULL, $replace = FILE_EXIST
  * exploit.php_.pps.
  *
  * Specifically, this function adds an underscore to all extensions that are
- * between 2 and 5 characters in length, internal to the file name, and not
- * included in $extensions.
+ * between 2 and 5 characters in length, internal to the file name, and either
+ * included in the list of unsafe extensions, or not included in $extensions.
  *
  * Function behavior is also controlled by the configuration
  * 'system.file:allow_insecure_uploads'. If it evaluates to TRUE, no alterations
@@ -666,7 +666,8 @@ function file_unmanaged_move($source, $destination = NULL, $replace = FILE_EXIST
  * @param $filename
  *   File name to modify.
  * @param $extensions
- *   A space-separated list of extensions that should not be altered.
+ *   A space-separated list of extensions that should not be altered. Note that
+ *   extensions that are unsafe will be altered regardless of this parameter.
  * @param $alerts
  *   If TRUE, \Drupal::messenger()->addStatus() will be called to display
  *   a message if the file name was changed.
@@ -685,6 +686,12 @@ function file_munge_filename($filename, $extensions, $alerts = TRUE) {
 
     $allowed_extensions = array_unique(explode(' ', strtolower(trim($extensions))));
 
+    // Remove unsafe extensions from the allowed list of extensions.
+    // @todo https://www.drupal.org/project/drupal/issues/3032390 Make the list
+    //   of unsafe extensions a constant. The list is copied from
+    //   FILE_INSECURE_EXTENSION_REGEX.
+    $allowed_extensions = array_diff($allowed_extensions, explode('|', 'phar|php|pl|py|cgi|asp|js'));
+
     // Split the filename up by periods. The first part becomes the basename
     // the last part the final extension.
     $filename_parts = explode('.', $filename);
diff --git a/web/core/includes/install.core.inc b/web/core/includes/install.core.inc
index 85981876da..3964fed8b9 100644
--- a/web/core/includes/install.core.inc
+++ b/web/core/includes/install.core.inc
@@ -249,7 +249,7 @@ function install_state_defaults() {
     // The server URL where the interface translation files can be downloaded.
     // Tokens in the pattern will be replaced by appropriate values for the
     // required translation file.
-    'server_pattern' => 'http://ftp.drupal.org/files/translations/%core/%project/%project-%version.%language.po',
+    'server_pattern' => 'https://ftp.drupal.org/files/translations/%core/%project/%project-%version.%language.po',
     // Installation tasks can set this to TRUE to force the page request to
     // end (even if there is no themable output), in the case of an interactive
     // installation. This is needed only rarely; for example, it would be used
diff --git a/web/core/lib/Drupal.php b/web/core/lib/Drupal.php
index 0e9d50fc72..18c41631c9 100644
--- a/web/core/lib/Drupal.php
+++ b/web/core/lib/Drupal.php
@@ -82,7 +82,7 @@ class Drupal {
   /**
    * The current system version.
    */
-  const VERSION = '8.9.7';
+  const VERSION = '8.9.9';
 
   /**
    * Core API compatibility.
diff --git a/web/core/lib/Drupal/Component/Gettext/PoStreamReader.php b/web/core/lib/Drupal/Component/Gettext/PoStreamReader.php
index a69c03ce88..a92bccb127 100644
--- a/web/core/lib/Drupal/Component/Gettext/PoStreamReader.php
+++ b/web/core/lib/Drupal/Component/Gettext/PoStreamReader.php
@@ -506,8 +506,6 @@ private function readLine() {
       $this->errors[] = new FormattableMarkup('The translation stream %uri ended unexpectedly at line %line.', $log_vars);
       return FALSE;
     }
-
-    return;
   }
 
   /**
diff --git a/web/core/lib/Drupal/Core/Asset/CssCollectionRenderer.php b/web/core/lib/Drupal/Core/Asset/CssCollectionRenderer.php
index 24ea64ea7a..13c53e24b4 100644
--- a/web/core/lib/Drupal/Core/Asset/CssCollectionRenderer.php
+++ b/web/core/lib/Drupal/Core/Asset/CssCollectionRenderer.php
@@ -72,6 +72,11 @@ public function render(array $css_assets) {
           throw new \Exception('Invalid CSS asset type.');
       }
 
+      // Merge any additional attributes.
+      if (!empty($css_asset['attributes'])) {
+        $element['#attributes'] += $css_asset['attributes'];
+      }
+
       $elements[] = $element;
     }
 
diff --git a/web/core/lib/Drupal/Core/Command/DbImportCommand.php b/web/core/lib/Drupal/Core/Command/DbImportCommand.php
index 3401ae0f86..4765692168 100644
--- a/web/core/lib/Drupal/Core/Command/DbImportCommand.php
+++ b/web/core/lib/Drupal/Core/Command/DbImportCommand.php
@@ -12,7 +12,7 @@
 /**
  * Provides a command to import the current database from a script.
  *
- * This script runs on databases exported using using one of the database dump
+ * This script runs on databases exported using one of the database dump
  * commands and imports it into the current database connection.
  *
  * @see \Drupal\Core\Command\DbImportApplication
diff --git a/web/core/lib/Drupal/Core/Command/ServerCommand.php b/web/core/lib/Drupal/Core/Command/ServerCommand.php
index 182167a4c4..f60325e8fe 100644
--- a/web/core/lib/Drupal/Core/Command/ServerCommand.php
+++ b/web/core/lib/Drupal/Core/Command/ServerCommand.php
@@ -176,7 +176,6 @@ protected function openBrowser($url, SymfonyStyle $io) {
     $php = "<?php sleep(2); passthru(\"$cmd\"); ?>";
     $process = new PhpProcess($php);
     $process->start();
-    return;
   }
 
   /**
diff --git a/web/core/lib/Drupal/Core/Database/StatementEmpty.php b/web/core/lib/Drupal/Core/Database/StatementEmpty.php
index 8b4b38e946..a87bca920a 100644
--- a/web/core/lib/Drupal/Core/Database/StatementEmpty.php
+++ b/web/core/lib/Drupal/Core/Database/StatementEmpty.php
@@ -49,9 +49,7 @@ public function rowCount() {
   /**
    * {@inheritdoc}
    */
-  public function setFetchMode($mode, $a1 = NULL, $a2 = []) {
-    return;
-  }
+  public function setFetchMode($mode, $a1 = NULL, $a2 = []) {}
 
   /**
    * {@inheritdoc}
diff --git a/web/core/lib/Drupal/Core/Entity/EntityListBuilder.php b/web/core/lib/Drupal/Core/Entity/EntityListBuilder.php
index d07e82c3a8..a877ba779c 100644
--- a/web/core/lib/Drupal/Core/Entity/EntityListBuilder.php
+++ b/web/core/lib/Drupal/Core/Entity/EntityListBuilder.php
@@ -249,9 +249,7 @@ public function render() {
   /**
    * Gets the title of the page.
    */
-  protected function getTitle() {
-    return;
-  }
+  protected function getTitle() {}
 
   /**
    * Ensures that a destination is present on the given URL.
diff --git a/web/core/lib/Drupal/Core/Field/FieldItemInterface.php b/web/core/lib/Drupal/Core/Field/FieldItemInterface.php
index 8e3e52b9f4..37d0cbfa1b 100644
--- a/web/core/lib/Drupal/Core/Field/FieldItemInterface.php
+++ b/web/core/lib/Drupal/Core/Field/FieldItemInterface.php
@@ -162,7 +162,7 @@ public function __unset($property_name);
   /**
    * Returns a renderable array for a single field item.
    *
-   * @param array $display_options
+   * @param string|array $display_options
    *   Can be either the name of a view mode, or an array of display settings.
    *   See EntityViewBuilderInterface::viewField() for more information.
    *
diff --git a/web/core/lib/Drupal/Core/Field/FieldItemListInterface.php b/web/core/lib/Drupal/Core/Field/FieldItemListInterface.php
index 5367f39fb4..d52834aace 100644
--- a/web/core/lib/Drupal/Core/Field/FieldItemListInterface.php
+++ b/web/core/lib/Drupal/Core/Field/FieldItemListInterface.php
@@ -174,7 +174,7 @@ public function deleteRevision();
   /**
    * Returns a renderable array for the field items.
    *
-   * @param array $display_options
+   * @param string|array $display_options
    *   Can be either the name of a view mode, or an array of display settings.
    *   See EntityViewBuilderInterface::viewField() for more information.
    *
diff --git a/web/core/lib/Drupal/Core/Form/FormBuilder.php b/web/core/lib/Drupal/Core/Form/FormBuilder.php
index 1a422d8411..023a66151e 100644
--- a/web/core/lib/Drupal/Core/Form/FormBuilder.php
+++ b/web/core/lib/Drupal/Core/Form/FormBuilder.php
@@ -643,7 +643,7 @@ public function processForm($form_id, &$form, FormStateInterface &$form_state) {
   }
 
   /**
-   * #lazy_builder callback; renders a form action URL.
+   * Renders a form action URL. It's a #lazy_builder callback.
    *
    * @return array
    *   A renderable array representing the form action.
@@ -657,7 +657,7 @@ public function renderPlaceholderFormAction() {
   }
 
   /**
-   * #lazy_builder callback; renders form CSRF token.
+   * Renders the form CSRF token. It's a #lazy_builder callback.
    *
    * @param string $placeholder
    *   A string containing a placeholder, matching the value of the form's
@@ -690,9 +690,10 @@ public function prepareForm($form_id, &$form, FormStateInterface &$form_state) {
       // Instead of setting an actual action URL, we set the placeholder, which
       // will be replaced at the very last moment. This ensures forms with
       // dynamically generated action URLs don't have poor cacheability.
-      // Use the proper API to generate the placeholder, when we have one. See
-      // https://www.drupal.org/node/2562341. The placeholder uses a fixed string
-      // that is Crypt::hashBase64('Drupal\Core\Form\FormBuilder::prepareForm');
+      // Use the proper API to generate the placeholder, when we have one.
+      // See https://www.drupal.org/node/2562341.
+      // The placeholder uses a unique string that is returned by
+      // Crypt::hashBase64('Drupal\Core\Form\FormBuilder::prepareForm').
       $placeholder = 'form_action_p_pvdeGsVG5zNF_XLGPTvYSKCf43t8qZYSwcfZl2uzM';
 
       $form['#attached']['placeholders'][$placeholder] = [
@@ -708,8 +709,6 @@ public function prepareForm($form_id, &$form, FormStateInterface &$form_state) {
 
     // GET forms should not use a CSRF token.
     if (isset($form['#method']) && $form['#method'] === 'get') {
-      // Merges in a default, this means if you've explicitly set #token to the
-      // the $form_id on a GET form, which we don't recommend, it will work.
       $form += [
         '#token' => FALSE,
       ];
@@ -729,14 +728,14 @@ public function prepareForm($form_id, &$form, FormStateInterface &$form_state) {
       '#value' => $form['#build_id'],
       '#id' => $form['#build_id'],
       '#name' => 'form_build_id',
-      // Form processing and validation requires this value, so ensure the
+      // Form processing and validation requires this value. Ensure the
       // submitted form value appears literally, regardless of custom #tree
       // and #parents being set elsewhere.
       '#parents' => ['form_build_id'],
-      // Prevent user agents from prefilling the build id with earlier values.
+      // Prevent user agents from prefilling the build ID with earlier values.
       // When the ajax command "update_build_id" is executed, the user agent
       // will assume that a user interaction changed the field. Upon a soft
-      // reload of the page, the previous build id will be restored in the
+      // reload of the page, the previous build ID will be restored in the
       // input, causing subsequent ajax callbacks to access the wrong cached
       // form build. Setting the autocomplete attribute to "off" will tell the
       // user agent to never reuse the value.
@@ -762,8 +761,7 @@ public function prepareForm($form_id, &$form, FormStateInterface &$form_state) {
     else {
       $form['#cache']['contexts'][] = 'user.roles:authenticated';
       if ($user && $user->isAuthenticated()) {
-        // Generate a public token based on the form id.
-        // Generates a placeholder based on the form ID.
+        // Generate a public token and placeholder based on the form ID.
         $placeholder = 'form_token_placeholder_' . Crypt::hashBase64($form_id);
         $form['#token'] = $placeholder;
 
@@ -771,14 +769,14 @@ public function prepareForm($form_id, &$form, FormStateInterface &$form_state) {
           '#id' => Html::getUniqueId('edit-' . $form_id . '-form-token'),
           '#type' => 'token',
           '#default_value' => $placeholder,
-          // Form processing and validation requires this value, so ensure the
+          // Form processing and validation requires this value. Ensure the
           // submitted form value appears literally, regardless of custom #tree
           // and #parents being set elsewhere.
           '#parents' => ['form_token'],
           // Instead of setting an actual CSRF token, we've set the placeholder
           // in form_token's #default_value and #placeholder. These will be
-          // replaced at the very last moment. This ensures forms with a CSRF
-          // token don't have poor cacheability.
+          // replaced at the very last moment to ensure forms with a CSRF token
+          // don't have poor cacheability.
           '#attached' => [
             'placeholders' => [
               $placeholder => [
@@ -798,7 +796,7 @@ public function prepareForm($form_id, &$form, FormStateInterface &$form_state) {
         '#type' => 'hidden',
         '#value' => $form_id,
         '#id' => Html::getUniqueId("edit-$form_id"),
-        // Form processing and validation requires this value, so ensure the
+        // Form processing and validation require this value. Ensure the
         // submitted form value appears literally, regardless of custom #tree
         // and #parents being set elsewhere.
         '#parents' => ['form_id'],
@@ -806,7 +804,7 @@ public function prepareForm($form_id, &$form, FormStateInterface &$form_state) {
     }
     if (!isset($form['#id'])) {
       $form['#id'] = Html::getUniqueId($form_id);
-      // Provide a selector usable by JavaScript. As the ID is unique, its not
+      // Provide a selector usable by JavaScript. As the ID is unique, it's not
       // possible to rely on it in JavaScript.
       $form['#attributes']['data-drupal-selector'] = Html::getId($form_id);
     }
@@ -983,12 +981,12 @@ public function doBuildForm($form_id, &$element, FormStateInterface &$form_state
     if (!isset($element['#id'])) {
       $unprocessed_id = 'edit-' . implode('-', $element['#parents']);
       $element['#id'] = Html::getUniqueId($unprocessed_id);
-      // Provide a selector usable by JavaScript. As the ID is unique, its not
+      // Provide a selector usable by JavaScript. As the ID is unique, it's not
       // possible to rely on it in JavaScript.
       $element['#attributes']['data-drupal-selector'] = Html::getId($unprocessed_id);
     }
     else {
-      // Provide a selector usable by JavaScript. As the ID is unique, its not
+      // Provide a selector usable by JavaScript. As the ID is unique, it's not
       // possible to rely on it in JavaScript.
       $element['#attributes']['data-drupal-selector'] = Html::getId($element['#id']);
     }
@@ -1158,12 +1156,6 @@ public function doBuildForm($form_id, &$element, FormStateInterface &$form_state
    *   otherwise.
    */
   protected function valueCallableIsSafe(callable $value_callable) {
-    // The same static class method callable may be formatted in two array and
-    // two string forms:
-    // ['\Classname', 'methodname']
-    // ['Classname', 'methodname']
-    // '\Classname::methodname'
-    // 'Classname::methodname'
     if (is_callable($value_callable, FALSE, $callable_name)) {
       // The third parameter of is_callable() is set to a string form, but we
       // still have to normalize further by stripping a leading '\'.
@@ -1410,6 +1402,7 @@ protected function getFileUploadMaxSize() {
    * Gets the current active user.
    *
    * @return \Drupal\Core\Session\AccountInterface
+   *   The current account.
    */
   protected function currentUser() {
     if (!$this->currentUser && \Drupal::hasService('current_user')) {
diff --git a/web/core/lib/Drupal/Core/Form/FormStateInterface.php b/web/core/lib/Drupal/Core/Form/FormStateInterface.php
index 9a69764f19..223cc24c75 100644
--- a/web/core/lib/Drupal/Core/Form/FormStateInterface.php
+++ b/web/core/lib/Drupal/Core/Form/FormStateInterface.php
@@ -121,12 +121,13 @@ public function getResponse();
    * @param array $route_parameters
    *   (optional) An associative array of parameter names and values.
    * @param array $options
-   *   (optional) An associative array of additional options. See
-   *   \Drupal\Core\Url for the available keys.
+   *   (optional) An associative array of additional options containing the
+   *   same values accepted from \Drupal\Core\Url::fromUri() for $options.
    *
    * @return $this
    *
    * @see \Drupal\Core\Form\FormSubmitterInterface::redirectForm()
+   * @see \Drupal\Core\Url::fromUri()
    */
   public function setRedirect($route_name, array $route_parameters = [], array $options = []);
 
diff --git a/web/core/lib/Drupal/Core/Plugin/Context/ContextProviderInterface.php b/web/core/lib/Drupal/Core/Plugin/Context/ContextProviderInterface.php
index 3083bc964c..2d67eb0ab1 100644
--- a/web/core/lib/Drupal/Core/Plugin/Context/ContextProviderInterface.php
+++ b/web/core/lib/Drupal/Core/Plugin/Context/ContextProviderInterface.php
@@ -8,8 +8,8 @@
  * Implementations only need to deal with unqualified context IDs so they only
  * need to be unique in the context of a given service provider.
  *
- * The fully qualified context ID then includes the service ID:
- * @{service_id}:{unqualified_context_id}.
+ * The fully qualified context ID then includes the service ID, e.g.
+ * "@service_id:unqualified_context_id".
  *
  * @see \Drupal\Core\Plugin\Context\ContextRepositoryInterface
  */
diff --git a/web/core/lib/Drupal/Core/TypedData/ListInterface.php b/web/core/lib/Drupal/Core/TypedData/ListInterface.php
index 1dab39a0f7..7e3e616d09 100644
--- a/web/core/lib/Drupal/Core/TypedData/ListInterface.php
+++ b/web/core/lib/Drupal/Core/TypedData/ListInterface.php
@@ -83,8 +83,8 @@ public function set($index, $value);
   /**
    * Returns the first item in this list.
    *
-   * @return \Drupal\Core\TypedData\TypedDataInterface
-   *   The first item in this list.
+   * @return \Drupal\Core\TypedData\TypedDataInterface|null
+   *   The first item in this list, or NULL if there are no items.
    *
    * @throws \Drupal\Core\TypedData\Exception\MissingDataException
    *   If the complex data structure is unset and no item can be created.
diff --git a/web/core/modules/ban/tests/src/Kernel/Migrate/d7/MigrateBlockedIPsTest.php b/web/core/modules/ban/tests/src/Kernel/Migrate/d7/MigrateBlockedIpsTest.php
similarity index 100%
rename from web/core/modules/ban/tests/src/Kernel/Migrate/d7/MigrateBlockedIPsTest.php
rename to web/core/modules/ban/tests/src/Kernel/Migrate/d7/MigrateBlockedIpsTest.php
diff --git a/web/core/modules/basic_auth/tests/src/Traits/BasicAuthTestTrait.php b/web/core/modules/basic_auth/tests/src/Traits/BasicAuthTestTrait.php
index f8482208ee..b51b17138b 100644
--- a/web/core/modules/basic_auth/tests/src/Traits/BasicAuthTestTrait.php
+++ b/web/core/modules/basic_auth/tests/src/Traits/BasicAuthTestTrait.php
@@ -26,35 +26,6 @@ protected function basicAuthGet($path, $username, $password, array $options = []
     return $this->drupalGet($path, $options, $this->getBasicAuthHeaders($username, $password));
   }
 
-  /**
-   * Executes a form submission using basic authentication.
-   *
-   * @param string $path
-   *   Location of the post form.
-   * @param array $edit
-   *   Field data in an associative array.
-   * @param string $submit
-   *   Value of the submit button whose click is to be emulated.
-   * @param string $username
-   *   The username to use for basic authentication.
-   * @param string $password
-   *   The password to use for basic authentication.
-   * @param array $options
-   *   Options to be forwarded to the url generator.
-   * @param string $form_html_id
-   *   (optional) HTML ID of the form to be submitted.
-   * @param string $extra_post
-   *   (optional) A string of additional data to append to the POST submission.
-   *
-   * @return string
-   *   The retrieved HTML string.
-   *
-   * @see \Drupal\simpletest\WebTestBase::drupalPostForm()
-   */
-  protected function basicAuthPostForm($path, $edit, $submit, $username, $password, array $options = [], $form_html_id = NULL, $extra_post = NULL) {
-    return $this->drupalPostForm($path, $edit, $submit, $options, $this->getBasicAuthHeaders($username, $password), $form_html_id, $extra_post);
-  }
-
   /**
    * Returns HTTP headers that can be used for basic authentication in Curl.
    *
diff --git a/web/core/modules/book/src/BookManager.php b/web/core/modules/book/src/BookManager.php
index d577e1414d..c11809a4ec 100644
--- a/web/core/modules/book/src/BookManager.php
+++ b/web/core/modules/book/src/BookManager.php
@@ -121,7 +121,7 @@ protected function loadBooks() {
       // @todo: use route name for links, not system path.
       foreach ($book_links as $link) {
         $nid = $link['nid'];
-        if (isset($nodes[$nid]) && $nodes[$nid]->status) {
+        if (isset($nodes[$nid]) && $nodes[$nid]->access('view')) {
           $link['url'] = $nodes[$nid]->toUrl();
           $link['title'] = $nodes[$nid]->label();
           $link['type'] = $nodes[$nid]->bundle();
diff --git a/web/core/modules/book/tests/src/Functional/BookTest.php b/web/core/modules/book/tests/src/Functional/BookTest.php
index b57773c805..24e35e7551 100644
--- a/web/core/modules/book/tests/src/Functional/BookTest.php
+++ b/web/core/modules/book/tests/src/Functional/BookTest.php
@@ -21,7 +21,13 @@ class BookTest extends BrowserTestBase {
    *
    * @var array
    */
-  public static $modules = ['book', 'block', 'node_access_test', 'book_test'];
+  public static $modules = [
+    'content_moderation',
+    'book',
+    'block',
+    'node_access_test',
+    'book_test',
+  ];
 
   /**
    * {@inheritdoc}
@@ -66,6 +72,7 @@ protected function setUp() {
       'create book content',
       'edit own book content',
       'add content to books',
+      'view own unpublished content',
     ]);
     $this->webUser = $this->drupalCreateUser([
       'access printer-friendly version',
@@ -86,6 +93,7 @@ protected function setUp() {
       'node test view',
       'administer content types',
       'administer site configuration',
+      'view any unpublished content',
     ]);
   }
 
@@ -496,16 +504,54 @@ public function testSaveBookLink() {
    * Tests the listing of all books.
    */
   public function testBookListing() {
-    // Create a new book.
-    $this->createBook();
+    // Uninstall 'node_access_test' as this interferes with the test.
+    \Drupal::service('module_installer')->uninstall(['node_access_test']);
 
-    // Must be a user with 'node test view' permission since node_access_test is installed.
-    $this->drupalLogin($this->webUser);
+    // Create a new book.
+    $nodes = $this->createBook();
 
     // Load the book page and assert the created book title is displayed.
     $this->drupalGet('book');
 
     $this->assertText($this->book->label(), 'The book title is displayed on the book listing page.');
+
+    // Unpublish the top book page and confirm that the created book title is
+    // not displayed for anonymous.
+    $this->book->setUnpublished();
+    $this->book->save();
+
+    $this->drupalGet('book');
+    $this->assertSession()->pageTextNotContains($this->book->label());
+
+    // Publish the top book page and unpublish a page in the book and confirm
+    // that the created book title is displayed for anonymous.
+    $this->book->setPublished();
+    $this->book->save();
+    $nodes[0]->setUnpublished();
+    $nodes[0]->save();
+
+    $this->drupalGet('book');
+    $this->assertSession()->pageTextContains($this->book->label());
+
+    // Unpublish the top book page and confirm that the created book title is
+    // displayed for user which has 'view own unpublished content' permission.
+    $this->drupalLogin($this->bookAuthor);
+    $this->book->setUnpublished();
+    $this->book->save();
+
+    $this->drupalGet('book');
+    $this->assertSession()->pageTextContains($this->book->label());
+
+    // Ensure the user doesn't see the book if they don't own it.
+    $this->book->setOwner($this->webUser)->save();
+    $this->drupalGet('book');
+    $this->assertSession()->pageTextNotContains($this->book->label());
+
+    // Confirm that the created book title is displayed for user which has
+    // 'view any unpublished content' permission.
+    $this->drupalLogin($this->adminUser);
+    $this->drupalGet('book');
+    $this->assertSession()->pageTextContains($this->book->label());
   }
 
   /**
diff --git a/web/core/modules/config/tests/config_import_test/config_import_test.module b/web/core/modules/config/tests/config_import_test/config_import_test.module
index d77df0e99f..e883045a42 100644
--- a/web/core/modules/config/tests/config_import_test/config_import_test.module
+++ b/web/core/modules/config/tests/config_import_test/config_import_test.module
@@ -29,5 +29,4 @@ function _config_import_test_config_import_steps_alter(&$context, ConfigImporter
     $config_importer->logError('_config_import_test_config_import_steps_alter ConfigImporter error');
   }
   $context['finished'] = 1;
-  return;
 }
diff --git a/web/core/modules/content_translation/tests/src/Functional/Views/TranslationLinkTest.php b/web/core/modules/content_translation/tests/src/Functional/Views/TranslationLinkTest.php
index 6370ca8391..3eb5de68a8 100644
--- a/web/core/modules/content_translation/tests/src/Functional/Views/TranslationLinkTest.php
+++ b/web/core/modules/content_translation/tests/src/Functional/Views/TranslationLinkTest.php
@@ -35,7 +35,7 @@ class TranslationLinkTest extends ContentTranslationTestBase {
   protected $defaultTheme = 'stark';
 
   protected function setUp() {
-    // @todo Use entity_type once it is has multilingual Views integration.
+    // @todo Use entity_type once it has multilingual Views integration.
     $this->entityTypeId = 'user';
 
     parent::setUp();
diff --git a/web/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeFormatterBase.php b/web/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeFormatterBase.php
index 272cb9ea1e..93ef2a260a 100644
--- a/web/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeFormatterBase.php
+++ b/web/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeFormatterBase.php
@@ -232,7 +232,6 @@ protected function buildDateWithIsoAttribute(DrupalDateTime $date) {
     $build = [
       '#theme' => 'time',
       '#text' => $this->formatDate($date),
-      '#html' => FALSE,
       '#attributes' => [
         'datetime' => $iso_date,
       ],
diff --git a/web/core/modules/field/tests/src/Functional/reEnableModuleFieldTest.php b/web/core/modules/field/tests/src/Functional/ReEnableModuleFieldTest.php
similarity index 100%
rename from web/core/modules/field/tests/src/Functional/reEnableModuleFieldTest.php
rename to web/core/modules/field/tests/src/Functional/ReEnableModuleFieldTest.php
diff --git a/web/core/modules/file/file.module b/web/core/modules/file/file.module
index 16494a4301..7d0bc57ccf 100644
--- a/web/core/modules/file/file.module
+++ b/web/core/modules/file/file.module
@@ -331,7 +331,17 @@ function file_validate(FileInterface $file, $validators = []) {
   }
 
   // Let other modules perform validation on the new file.
-  return array_merge($errors, \Drupal::moduleHandler()->invokeAll('file_validate', [$file]));
+  $errors = array_merge($errors, \Drupal::moduleHandler()->invokeAll('file_validate', [$file]));
+
+  // Ensure the file does not contain a malicious extension. At this point
+  // _file_save_upload_single() will have munged the file so it does not contain
+  // a malicious extension. Contributed and custom code that calls this method
+  // needs to take similar steps if they need to permit files with malicious
+  // extensions to be uploaded.
+  if (empty($errors) && !\Drupal::config('system.file')->get('allow_insecure_uploads') && preg_match(FILE_INSECURE_EXTENSION_REGEX, $file->getFilename())) {
+    $errors[] = t('For security reasons, your upload has been rejected.');
+  }
+  return $errors;
 }
 
 /**
@@ -1021,25 +1031,36 @@ function _file_save_upload_single(\SplFileInfo $file_info, $form_field_name, $va
     $validators['file_validate_extensions'][0] = $extensions;
   }
 
-  if (!empty($extensions)) {
-    // Munge the filename to protect against possible malicious extension
-    // hiding within an unknown file type (ie: filename.html.foo).
-    $file->setFilename(file_munge_filename($file->getFilename(), $extensions));
-  }
-
-  // Rename potentially executable files, to help prevent exploits (i.e. will
-  // rename filename.php.foo and filename.php to filename.php.foo.txt and
-  // filename.php.txt, respectively). Don't rename if 'allow_insecure_uploads'
-  // evaluates to TRUE.
-  if (!\Drupal::config('system.file')->get('allow_insecure_uploads') && preg_match(FILE_INSECURE_EXTENSION_REGEX, $file->getFilename()) && (substr($file->getFilename(), -4) != '.txt')) {
-    $file->setMimeType('text/plain');
-    // The destination filename will also later be used to create the URI.
-    $file->setFilename($file->getFilename() . '.txt');
-    // The .txt extension may not be in the allowed list of extensions. We have
-    // to add it here or else the file upload will fail.
+  //  Don't rename if 'allow_insecure_uploads' evaluates to TRUE.
+  if (!\Drupal::config('system.file')->get('allow_insecure_uploads')) {
     if (!empty($extensions)) {
-      $validators['file_validate_extensions'][0] .= ' txt';
-      \Drupal::messenger()->addStatus(t('For security reasons, your upload has been renamed to %filename.', ['%filename' => $file->getFilename()]));
+      // Munge the filename to protect against possible malicious extension
+      // hiding within an unknown file type (ie: filename.html.foo).
+      $file->setFilename(file_munge_filename($file->getFilename(), $extensions));
+    }
+
+    // Rename potentially executable files, to help prevent exploits (i.e. will
+    // rename filename.php.foo and filename.php to filename.php_.foo_.txt and
+    // filename.php_.txt, respectively).
+    if (preg_match(FILE_INSECURE_EXTENSION_REGEX, $file->getFilename())) {
+      // If the file will be rejected anyway due to a disallowed extension, it
+      // should not be renamed; rather, we'll let file_validate_extensions()
+      // reject it below.
+      if (!isset($validators['file_validate_extensions']) || empty(file_validate_extensions($file, $extensions))) {
+        $file->setMimeType('text/plain');
+        $filename = $file->getFilename();
+        if (substr($filename, -4) != '.txt') {
+          // The destination filename will also later be used to create the URI.
+          $filename .= '.txt';
+        }
+        $file->setFilename(file_munge_filename($filename, $extensions));
+        \Drupal::messenger()->addStatus(t('For security reasons, your upload has been renamed to %filename.', ['%filename' => $file->getFilename()]));
+        // The .txt extension may not be in the allowed list of extensions. We
+        // have to add it here or else the file upload will fail.
+        if (!empty($validators['file_validate_extensions'][0])) {
+          $validators['file_validate_extensions'][0] .= ' txt';
+        }
+      }
     }
   }
 
diff --git a/web/core/modules/file/src/Plugin/rest/resource/FileUploadResource.php b/web/core/modules/file/src/Plugin/rest/resource/FileUploadResource.php
index 2518a22967..d7e6f12c81 100644
--- a/web/core/modules/file/src/Plugin/rest/resource/FileUploadResource.php
+++ b/web/core/modules/file/src/Plugin/rest/resource/FileUploadResource.php
@@ -462,26 +462,42 @@ protected function validate(FileInterface $file, array $validators) {
    *   The prepared/munged filename.
    */
   protected function prepareFilename($filename, array &$validators) {
-    if (!empty($validators['file_validate_extensions'][0])) {
-      // If there is a file_validate_extensions validator and a list of
-      // valid extensions, munge the filename to protect against possible
-      // malicious extension hiding within an unknown file type. For example,
-      // "filename.html.foo".
-      $filename = file_munge_filename($filename, $validators['file_validate_extensions'][0]);
-    }
-
-    // Rename potentially executable files, to help prevent exploits (i.e. will
-    // rename filename.php.foo and filename.php to filename.php.foo.txt and
-    // filename.php.txt, respectively). Don't rename if 'allow_insecure_uploads'
-    // evaluates to TRUE.
-    if (!$this->systemFileConfig->get('allow_insecure_uploads') && preg_match(FILE_INSECURE_EXTENSION_REGEX, $filename) && (substr($filename, -4) != '.txt')) {
-      // The destination filename will also later be used to create the URI.
-      $filename .= '.txt';
-
-      // The .txt extension may not be in the allowed list of extensions. We
-      // have to add it here or else the file upload will fail.
+    // Don't rename if 'allow_insecure_uploads' evaluates to TRUE.
+    if (!$this->systemFileConfig->get('allow_insecure_uploads')) {
       if (!empty($validators['file_validate_extensions'][0])) {
-        $validators['file_validate_extensions'][0] .= ' txt';
+        // If there is a file_validate_extensions validator and a list of
+        // valid extensions, munge the filename to protect against possible
+        // malicious extension hiding within an unknown file type. For example,
+        // "filename.html.foo".
+        $filename = file_munge_filename($filename, $validators['file_validate_extensions'][0]);
+      }
+
+      // Rename potentially executable files, to help prevent exploits (i.e.
+      // will rename filename.php.foo and filename.php to filename._php._foo.txt
+      // and filename._php.txt, respectively).
+      if (preg_match(FILE_INSECURE_EXTENSION_REGEX, $filename)) {
+        // If the file will be rejected anyway due to a disallowed extension, it
+        // should not be renamed; rather, we'll let file_validate_extensions()
+        // reject it below.
+        $passes_validation = FALSE;
+        if (!empty($validators['file_validate_extensions'][0])) {
+          $file = File::create([]);
+          $file->setFilename($filename);
+          $passes_validation = empty(file_validate_extensions($file, $validators['file_validate_extensions'][0]));
+        }
+        if (empty($validators['file_validate_extensions'][0]) || $passes_validation) {
+          if ((substr($filename, -4) != '.txt')) {
+            // The destination filename will also later be used to create the URI.
+            $filename .= '.txt';
+          }
+          $filename = file_munge_filename($filename, $validators['file_validate_extensions'][0] ?? '');
+
+          // The .txt extension may not be in the allowed list of extensions. We
+          // have to add it here or else the file upload will fail.
+          if (!empty($validators['file_validate_extensions'][0])) {
+            $validators['file_validate_extensions'][0] .= ' txt';
+          }
+        }
       }
     }
 
diff --git a/web/core/modules/file/tests/file_test/src/Form/FileTestForm.php b/web/core/modules/file/tests/file_test/src/Form/FileTestForm.php
index 08c4a57ffd..c9fc1f0e93 100644
--- a/web/core/modules/file/tests/file_test/src/Form/FileTestForm.php
+++ b/web/core/modules/file/tests/file_test/src/Form/FileTestForm.php
@@ -49,9 +49,14 @@ public function buildForm(array $form, FormStateInterface $form_state) {
     ];
 
     $form['allow_all_extensions'] = [
-      '#type' => 'checkbox',
       '#title' => t('Allow all extensions?'),
-      '#default_value' => FALSE,
+      '#type' => 'radios',
+      '#options' => [
+        'false' => 'No',
+        'empty_array' => 'Empty array',
+        'empty_string' => 'Empty string',
+      ],
+      '#default_value' => 'false',
     ];
 
     $form['is_image_file'] = [
@@ -92,9 +97,13 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
       $validators['file_validate_is_image'] = [];
     }
 
-    if ($form_state->getValue('allow_all_extensions')) {
+    $allow = $form_state->getValue('allow_all_extensions');
+    if ($allow === 'empty_array') {
       $validators['file_validate_extensions'] = [];
     }
+    elseif ($allow === 'empty_string') {
+      $validators['file_validate_extensions'] = [''];
+    }
     elseif (!$form_state->isValueEmpty('extensions')) {
       $validators['file_validate_extensions'] = [$form_state->getValue('extensions')];
     }
diff --git a/web/core/modules/file/tests/file_test/src/Form/FileTestSaveUploadFromForm.php b/web/core/modules/file/tests/file_test/src/Form/FileTestSaveUploadFromForm.php
index 10127dc94c..79bff3ad7b 100644
--- a/web/core/modules/file/tests/file_test/src/Form/FileTestSaveUploadFromForm.php
+++ b/web/core/modules/file/tests/file_test/src/Form/FileTestSaveUploadFromForm.php
@@ -90,9 +90,14 @@ public function buildForm(array $form, FormStateInterface $form_state) {
     ];
 
     $form['allow_all_extensions'] = [
-      '#type' => 'checkbox',
-      '#title' => $this->t('Allow all extensions?'),
-      '#default_value' => FALSE,
+      '#title' => t('Allow all extensions?'),
+      '#type' => 'radios',
+      '#options' => [
+        'false' => 'No',
+        'empty_array' => 'Empty array',
+        'empty_string' => 'Empty string',
+      ],
+      '#default_value' => 'false',
     ];
 
     $form['is_image_file'] = [
@@ -139,9 +144,13 @@ public function validateForm(array &$form, FormStateInterface $form_state) {
       $validators['file_validate_is_image'] = [];
     }
 
-    if ($form_state->getValue('allow_all_extensions')) {
+    $allow = $form_state->getValue('allow_all_extensions');
+    if ($allow === 'empty_array') {
       $validators['file_validate_extensions'] = [];
     }
+    elseif ($allow === 'empty_string') {
+      $validators['file_validate_extensions'] = [''];
+    }
     elseif (!$form_state->isValueEmpty('extensions')) {
       $validators['file_validate_extensions'] = [$form_state->getValue('extensions')];
     }
diff --git a/web/core/modules/file/tests/src/Functional/SaveUploadFormTest.php b/web/core/modules/file/tests/src/Functional/SaveUploadFormTest.php
index 407b1a01c1..c01fe7eb0a 100644
--- a/web/core/modules/file/tests/src/Functional/SaveUploadFormTest.php
+++ b/web/core/modules/file/tests/src/Functional/SaveUploadFormTest.php
@@ -198,7 +198,7 @@ public function testHandleExtension() {
     $edit = [
       'file_test_replace' => FileSystemInterface::EXISTS_REPLACE,
       'files[file_test_upload][]' => $file_system->realpath($this->image->getFileUri()),
-      'allow_all_extensions' => TRUE,
+      'allow_all_extensions' => 'empty_array',
     ];
     $this->drupalPostForm('file-test/save_upload_from_form_test', $edit, t('Submit'));
     $this->assertSession()->statusCodeEquals(200);
@@ -227,7 +227,7 @@ public function testHandleDangerousFile() {
 
     $this->drupalPostForm('file-test/save_upload_from_form_test', $edit, t('Submit'));
     $this->assertSession()->statusCodeEquals(200);
-    $message = t('For security reasons, your upload has been renamed to') . ' <em class="placeholder">' . $this->phpfile->filename . '.txt' . '</em>';
+    $message = t('For security reasons, your upload has been renamed to') . ' <em class="placeholder">' . $this->phpfile->filename . '_.txt' . '</em>';
     $this->assertRaw($message, 'Dangerous file was renamed.');
     $this->assertRaw(t('File MIME type is text/plain.'), "Dangerous file's MIME type was changed.");
     $this->assertRaw(t('You WIN!'), 'Found the success message.');
@@ -262,7 +262,8 @@ public function testHandleFileMunge() {
     $file_system = \Drupal::service('file_system');
     // Ensure insecure uploads are disabled for this test.
     $this->config('system.file')->set('allow_insecure_uploads', 0)->save();
-    $this->image = file_move($this->image, $this->image->getFileUri() . '.foo.' . $this->imageExtension);
+    $original_uri = $this->image->getFileUri();
+    $this->image = file_move($this->image, $original_uri . '.foo.' . $this->imageExtension);
 
     // Reset the hook counters to get rid of the 'move' we just called.
     file_test_reset();
@@ -286,13 +287,37 @@ public function testHandleFileMunge() {
     // Check that the correct hooks were called.
     $this->assertFileHooksCalled(['validate', 'insert']);
 
+    // Test with uppercase extensions.
+    $this->image = file_move($this->image, $original_uri . '.foo2.' . $this->imageExtension);
+    // Reset the hook counters.
+    file_test_reset();
+    $extensions = $this->imageExtension;
+    $edit = [
+      'files[file_test_upload][]' => $file_system->realpath($this->image->getFileUri()),
+      'extensions' => mb_strtoupper($extensions),
+    ];
+
+    $munged_filename = $this->image->getFilename();
+    $munged_filename = substr($munged_filename, 0, strrpos($munged_filename, '.'));
+    $munged_filename .= '_.' . $this->imageExtension;
+
+    $this->drupalPostForm('file-test/save_upload_from_form_test', $edit, t('Submit'));
+    $this->assertSession()->statusCodeEquals(200);
+    $this->assertRaw(t('For security reasons, your upload has been renamed'), 'Found security message.');
+    $this->assertRaw(t('File name is @filename', ['@filename' => $munged_filename]), 'File was successfully munged.');
+    $this->assertRaw(t('You WIN!'), 'Found the success message.');
+
+    // Check that the correct hooks were called.
+    $this->assertFileHooksCalled(['validate', 'insert']);
+
     // Ensure we don't munge files if we're allowing any extension.
     // Reset the hook counters.
     file_test_reset();
 
+    // Ensure we don't munge files if we're allowing any extension.
     $edit = [
       'files[file_test_upload][]' => $file_system->realpath($this->image->getFileUri()),
-      'allow_all_extensions' => TRUE,
+      'allow_all_extensions' => 'empty_array',
     ];
 
     $this->drupalPostForm('file-test/save_upload_from_form_test', $edit, t('Submit'));
@@ -303,6 +328,24 @@ public function testHandleFileMunge() {
 
     // Check that the correct hooks were called.
     $this->assertFileHooksCalled(['validate', 'insert']);
+
+    // Ensure that setting $validators['file_validate_extensions'] = ['']
+    // rejects all files.
+    // Reset the hook counters.
+    file_test_reset();
+
+    $edit = [
+      'files[file_test_upload][]' => $file_system->realpath($this->image->getFileUri()),
+      'allow_all_extensions' => 'empty_string',
+    ];
+
+    $this->drupalPostForm('file-test/save_upload_from_form_test', $edit, t('Submit'));
+    $this->assertSession()->statusCodeEquals(200);
+    $this->assertNoRaw(t('For security reasons, your upload has been renamed'), 'Found security message.');
+    $this->assertRaw(t('Epic upload FAIL!'), 'Found the failure message.');
+
+    // Check that the correct hooks were called.
+    $this->assertFileHooksCalled(['validate']);
   }
 
   /**
@@ -467,7 +510,6 @@ public function testCombinedErrorMessages() {
     $submit_xpath = $this->assertSession()->buttonExists('Submit')->getXpath();
     $form = $client->getCrawler()->filterXPath($submit_xpath)->form();
     $edit = [
-      'allow_all_extensions' => FALSE,
       'is_image_file' => TRUE,
       'extensions' => 'jpeg',
     ];
diff --git a/web/core/modules/file/tests/src/Functional/SaveUploadTest.php b/web/core/modules/file/tests/src/Functional/SaveUploadTest.php
index 17c87e2f94..3c46988161 100644
--- a/web/core/modules/file/tests/src/Functional/SaveUploadTest.php
+++ b/web/core/modules/file/tests/src/Functional/SaveUploadTest.php
@@ -218,7 +218,7 @@ public function testHandleExtension() {
     $edit = [
       'file_test_replace' => FileSystemInterface::EXISTS_REPLACE,
       'files[file_test_upload]' => \Drupal::service('file_system')->realpath($this->image->getFileUri()),
-      'allow_all_extensions' => TRUE,
+      'allow_all_extensions' => 'empty_array',
     ];
     $this->drupalPostForm('file-test/upload', $edit, t('Submit'));
     $this->assertSession()->statusCodeEquals(200);
@@ -227,6 +227,27 @@ public function testHandleExtension() {
 
     // Check that the correct hooks were called.
     $this->assertFileHooksCalled(['validate', 'load', 'update']);
+
+    // Reset the hook counters.
+    file_test_reset();
+
+    // Now tell file_save_upload() to allow any extension and try and upload a
+    // malicious file.
+    $edit = [
+      'file_test_replace' => FileSystemInterface::EXISTS_REPLACE,
+      'files[file_test_upload]' => \Drupal::service('file_system')->realpath($this->phpfile->uri),
+      'allow_all_extensions' => 'empty_array',
+      'is_image_file' => FALSE,
+    ];
+    $this->drupalPostForm('file-test/upload', $edit, t('Submit'));
+    $this->assertSession()->statusCodeEquals(200);
+    $message = t('For security reasons, your upload has been renamed to') . ' <em class="placeholder">' . $this->phpfile->filename . '_.txt' . '</em>';
+    $this->assertRaw($message, 'Dangerous file was renamed.');
+    $this->assertSession()->pageTextContains('File name is php-2.php_.txt.');
+    $this->assertRaw(t('File MIME type is text/plain.'), "Dangerous file's MIME type was changed.");
+    $this->assertRaw(t('You WIN!'), 'Found the success message.');
+    // Check that the correct hooks were called.
+    $this->assertFileHooksCalled(['validate', 'insert']);
   }
 
   /**
@@ -234,8 +255,8 @@ public function testHandleExtension() {
    */
   public function testHandleDangerousFile() {
     $config = $this->config('system.file');
-    // Allow the .php extension and make sure it gets renamed to .txt for
-    // safety. Also check to make sure its MIME type was changed.
+    // Allow the .php extension and make sure it gets munged and given a .txt
+    // extension for safety. Also check to make sure its MIME type was changed.
     $edit = [
       'file_test_replace' => FileSystemInterface::EXISTS_REPLACE,
       'files[file_test_upload]' => \Drupal::service('file_system')->realpath($this->phpfile->uri),
@@ -245,9 +266,9 @@ public function testHandleDangerousFile() {
 
     $this->drupalPostForm('file-test/upload', $edit, t('Submit'));
     $this->assertSession()->statusCodeEquals(200);
-    $message = t('For security reasons, your upload has been renamed to') . ' <em class="placeholder">' . $this->phpfile->filename . '.txt' . '</em>';
+    $message = t('For security reasons, your upload has been renamed to') . ' <em class="placeholder">' . $this->phpfile->filename . '_.txt' . '</em>';
     $this->assertRaw($message, 'Dangerous file was renamed.');
-    $this->assertSession()->pageTextContains('File name is php-2.php.txt.');
+    $this->assertSession()->pageTextContains('File name is php-2.php_.txt.');
     $this->assertRaw(t('File MIME type is text/plain.'), "Dangerous file's MIME type was changed.");
     $this->assertRaw(t('You WIN!'), 'Found the success message.');
 
@@ -269,8 +290,39 @@ public function testHandleDangerousFile() {
     // Check that the correct hooks were called.
     $this->assertFileHooksCalled(['validate', 'insert']);
 
-    // Turn off insecure uploads.
+    // Reset the hook counters.
+    file_test_reset();
+
+    // Even with insecure uploads allowed, the .php file should not be uploaded
+    // if it is not explicitly included in the list of allowed extensions.
+    $edit['extensions'] = 'foo';
+    $this->drupalPostForm('file-test/upload', $edit, t('Submit'));
+    $this->assertSession()->statusCodeEquals(200);
+    $message = t('Only files with the following extensions are allowed:') . ' <em class="placeholder">' . $edit['extensions'] . '</em>';
+    $this->assertRaw($message, 'Cannot upload a disallowed extension');
+    $this->assertRaw(t('Epic upload FAIL!'), 'Found the failure message.');
+
+    // Check that the correct hooks were called.
+    $this->assertFileHooksCalled(['validate']);
+
+    // Reset the hook counters.
+    file_test_reset();
+
+    // Turn off insecure uploads, then try the same thing as above (ensure that
+    // the .php file is still rejected since it's not in the list of allowed
+    // extensions).
     $config->set('allow_insecure_uploads', 0)->save();
+    $this->drupalPostForm('file-test/upload', $edit, t('Submit'));
+    $this->assertSession()->statusCodeEquals(200);
+    $message = t('Only files with the following extensions are allowed:') . ' <em class="placeholder">' . $edit['extensions'] . '</em>';
+    $this->assertRaw($message, 'Cannot upload a disallowed extension');
+    $this->assertRaw(t('Epic upload FAIL!'), 'Found the failure message.');
+
+    // Check that the correct hooks were called.
+    $this->assertFileHooksCalled(['validate']);
+
+    // Reset the hook counters.
+    file_test_reset();
   }
 
   /**
@@ -279,7 +331,8 @@ public function testHandleDangerousFile() {
   public function testHandleFileMunge() {
     // Ensure insecure uploads are disabled for this test.
     $this->config('system.file')->set('allow_insecure_uploads', 0)->save();
-    $this->image = file_move($this->image, $this->image->getFileUri() . '.foo.' . $this->imageExtension);
+    $original_image_uri = $this->image->getFileUri();
+    $this->image = file_move($this->image, $original_image_uri . '.foo.' . $this->imageExtension);
 
     // Reset the hook counters to get rid of the 'move' we just called.
     file_test_reset();
@@ -303,13 +356,34 @@ public function testHandleFileMunge() {
     // Check that the correct hooks were called.
     $this->assertFileHooksCalled(['validate', 'insert']);
 
+    // Reset the hook counters.
+    file_test_reset();
+
+    // Ensure we don't munge the .foo extension if it is in the list of allowed
+    // extensions.
+    $extensions = 'foo ' . $this->imageExtension;
+    $edit = [
+        'files[file_test_upload]' => \Drupal::service('file_system')->realpath($this->image->getFileUri()),
+        'extensions' => $extensions,
+      ];
+
+    $this->drupalPostForm('file-test/upload', $edit, t('Submit'));
+    $this->assertSession()->statusCodeEquals(200);
+    $this->assertNoRaw(t('For security reasons, your upload has been renamed'), 'Found no security message.');
+    $this->assertRaw(t('File name is @filename', ['@filename' => $this->image->getFilename()]), 'File was not munged when all extensions within it are allowed.');
+    $this->assertRaw(t('You WIN!'), 'Found the success message.');
+
+    // Check that the correct hooks were called.
+    $this->assertFileHooksCalled(['validate', 'insert']);
+
     // Ensure we don't munge files if we're allowing any extension.
+    $this->image = file_move($this->image, $original_image_uri . '.foo.txt.' . $this->imageExtension);
     // Reset the hook counters.
     file_test_reset();
 
     $edit = [
       'files[file_test_upload]' => \Drupal::service('file_system')->realpath($this->image->getFileUri()),
-      'allow_all_extensions' => TRUE,
+      'allow_all_extensions' => 'empty_array',
     ];
 
     $this->drupalPostForm('file-test/upload', $edit, t('Submit'));
@@ -320,6 +394,83 @@ public function testHandleFileMunge() {
 
     // Check that the correct hooks were called.
     $this->assertFileHooksCalled(['validate', 'insert']);
+
+    // Test that a dangerous extension such as .php is munged even if it is in
+    // the list of allowed extensions.
+    $this->image = file_move($this->image, $original_image_uri . '.php.' . $this->imageExtension);
+    // Reset the hook counters.
+    file_test_reset();
+
+    $extensions = 'php ' . $this->imageExtension;
+    $edit = [
+        'files[file_test_upload]' => \Drupal::service('file_system')->realpath($this->image->getFileUri()),
+        'extensions' => $extensions,
+      ];
+
+    $this->drupalPostForm('file-test/upload', $edit, t('Submit'));
+    $this->assertSession()->statusCodeEquals(200);
+    $this->assertRaw(t('For security reasons, your upload has been renamed'), 'Found security message.');
+    $this->assertRaw(t('File name is @filename', ['@filename' => 'image-test.png.php_.png']), 'File was successfully munged.');
+    $this->assertRaw(t('You WIN!'), 'Found the success message.');
+
+    // Check that the correct hooks were called.
+    $this->assertFileHooksCalled(['validate', 'insert']);
+
+    // Reset the hook counters.
+    file_test_reset();
+
+    // Dangerous extensions are munged even when all extensions are allowed.
+    $edit = [
+      'files[file_test_upload]' => \Drupal::service('file_system')->realpath($this->image->getFileUri()),
+      'allow_all_extensions' => 'empty_array',
+    ];
+
+    $this->drupalPostForm('file-test/upload', $edit, t('Submit'));
+    $this->assertSession()->statusCodeEquals(200);
+    $this->assertRaw(t('For security reasons, your upload has been renamed'), 'Found security message.');
+    $this->assertRaw(t('File name is @filename.', ['@filename' => 'image-test.png_.php_.png_.txt']), 'File was successfully munged.');
+    $this->assertRaw(t('You WIN!'), 'Found the success message.');
+
+    // Check that the correct hooks were called.
+    $this->assertFileHooksCalled(['validate', 'insert']);
+
+    // Dangerous extensions are munged if is renamed to end in .txt.
+    $this->image = file_move($this->image, $original_image_uri . '.cgi.' . $this->imageExtension . '.txt');
+    // Reset the hook counters.
+    file_test_reset();
+
+    // Dangerous extensions are munged even when all extensions are allowed.
+    $edit = [
+      'files[file_test_upload]' => \Drupal::service('file_system')->realpath($this->image->getFileUri()),
+      'allow_all_extensions' => 'empty_array',
+    ];
+
+    $this->drupalPostForm('file-test/upload', $edit, t('Submit'));
+    $this->assertSession()->statusCodeEquals(200);
+    $this->assertRaw(t('For security reasons, your upload has been renamed'), 'Found security message.');
+    $this->assertRaw(t('File name is @filename.', ['@filename' => 'image-test.png_.cgi_.png_.txt']), 'File was successfully munged.');
+    $this->assertRaw(t('You WIN!'), 'Found the success message.');
+
+    // Check that the correct hooks were called.
+    $this->assertFileHooksCalled(['validate', 'insert']);
+
+    // Reset the hook counters.
+    file_test_reset();
+
+    // Ensure that setting $validators['file_validate_extensions'] = ['']
+    // rejects all files without munging or renaming.
+    $edit = [
+      'files[file_test_upload][]' => \Drupal::service('file_system')->realpath($this->image->getFileUri()),
+      'allow_all_extensions' => 'empty_string',
+    ];
+
+    $this->drupalPostForm('file-test/save_upload_from_form_test', $edit, t('Submit'));
+    $this->assertSession()->statusCodeEquals(200);
+    $this->assertNoRaw(t('For security reasons, your upload has been renamed'), 'Found security message.');
+    $this->assertRaw(t('Epic upload FAIL!'), 'Found the failure message.');
+
+    // Check that the correct hooks were called.
+    $this->assertFileHooksCalled(['validate']);
   }
 
   /**
diff --git a/web/core/modules/file/tests/src/Kernel/ValidateTest.php b/web/core/modules/file/tests/src/Kernel/ValidateTest.php
index 3e9eb07a8a..f1547d62ef 100644
--- a/web/core/modules/file/tests/src/Kernel/ValidateTest.php
+++ b/web/core/modules/file/tests/src/Kernel/ValidateTest.php
@@ -35,4 +35,23 @@ public function testCallerValidation() {
     $this->assertFileHooksCalled(['validate']);
   }
 
+  /**
+   * Tests hard-coded security check in file_validate().
+   */
+  public function testInsecureExtensions() {
+    $file = $this->createFile('test.php', 'Invalid PHP');
+
+    // Test that file_validate() will check for insecure extensions by default.
+    $errors = file_validate($file, []);
+    $this->assertEquals('For security reasons, your upload has been rejected.', $errors[0]);
+    $this->assertFileHooksCalled(['validate']);
+    file_test_reset();
+
+    // Test that the 'allow_insecure_uploads' is respected.
+    $this->config('system.file')->set('allow_insecure_uploads', TRUE)->save();
+    $errors = file_validate($file, []);
+    $this->assertEmpty($errors);
+    $this->assertFileHooksCalled(['validate']);
+  }
+
 }
diff --git a/web/core/modules/jsonapi/src/Controller/TemporaryJsonapiFileFieldUploader.php b/web/core/modules/jsonapi/src/Controller/TemporaryJsonapiFileFieldUploader.php
index 2847e17e53..432b40557d 100644
--- a/web/core/modules/jsonapi/src/Controller/TemporaryJsonapiFileFieldUploader.php
+++ b/web/core/modules/jsonapi/src/Controller/TemporaryJsonapiFileFieldUploader.php
@@ -380,26 +380,42 @@ protected function validate(FileInterface $file, array $validators) {
    *   The prepared/munged filename.
    */
   protected function prepareFilename($filename, array &$validators) {
-    if (!empty($validators['file_validate_extensions'][0])) {
-      // If there is a file_validate_extensions validator and a list of
-      // valid extensions, munge the filename to protect against possible
-      // malicious extension hiding within an unknown file type. For example,
-      // "filename.html.foo".
-      $filename = file_munge_filename($filename, $validators['file_validate_extensions'][0]);
-    }
-
-    // Rename potentially executable files, to help prevent exploits (i.e. will
-    // rename filename.php.foo and filename.php to filename.php.foo.txt and
-    // filename.php.txt, respectively). Don't rename if 'allow_insecure_uploads'
-    // evaluates to TRUE.
-    if (!$this->systemFileConfig->get('allow_insecure_uploads') && preg_match(FILE_INSECURE_EXTENSION_REGEX, $filename) && (substr($filename, -4) != '.txt')) {
-      // The destination filename will also later be used to create the URI.
-      $filename .= '.txt';
-
-      // The .txt extension may not be in the allowed list of extensions. We
-      // have to add it here or else the file upload will fail.
+    //  Don't rename if 'allow_insecure_uploads' evaluates to TRUE.
+    if (!$this->systemFileConfig->get('allow_insecure_uploads')) {
       if (!empty($validators['file_validate_extensions'][0])) {
-        $validators['file_validate_extensions'][0] .= ' txt';
+        // If there is a file_validate_extensions validator and a list of
+        // valid extensions, munge the filename to protect against possible
+        // malicious extension hiding within an unknown file type. For example,
+        // "filename.html.foo".
+        $filename = file_munge_filename($filename, $validators['file_validate_extensions'][0]);
+      }
+
+      // Rename potentially executable files, to help prevent exploits (i.e.
+      // will rename filename.php.foo and filename.php to filename._php._foo.txt
+      // and filename._php.txt, respectively).
+      if (preg_match(FILE_INSECURE_EXTENSION_REGEX, $filename)) {
+        // If the file will be rejected anyway due to a disallowed extension, it
+        // should not be renamed; rather, we'll let file_validate_extensions()
+        // reject it below.
+        $passes_validation = FALSE;
+        if (!empty($validators['file_validate_extensions'][0])) {
+          $file = File::create([]);
+          $file->setFilename($filename);
+          $passes_validation = empty(file_validate_extensions($file, $validators['file_validate_extensions'][0]));
+        }
+        if (empty($validators['file_validate_extensions'][0]) || $passes_validation) {
+          if (substr($filename, -4) != '.txt') {
+            // The destination filename will also later be used to create the URI.
+            $filename .= '.txt';
+          }
+          $filename = file_munge_filename($filename, $validators['file_validate_extensions'][0] ?? '');
+
+          // The .txt extension may not be in the allowed list of extensions. We
+          // have to add it here or else the file upload will fail.
+          if (!empty($validators['file_validate_extensions'][0])) {
+            $validators['file_validate_extensions'][0] .= ' txt';
+          }
+        }
       }
     }
 
diff --git a/web/core/modules/jsonapi/tests/src/Functional/FileUploadTest.php b/web/core/modules/jsonapi/tests/src/Functional/FileUploadTest.php
index 47bd338add..6091712b6d 100644
--- a/web/core/modules/jsonapi/tests/src/Functional/FileUploadTest.php
+++ b/web/core/modules/jsonapi/tests/src/Functional/FileUploadTest.php
@@ -621,11 +621,11 @@ public function testFileUploadMaliciousExtension() {
     $response = $this->fileRequest($uri, $php_string, ['Content-Disposition' => 'filename="example.php"']);
     // The filename is not munged because .txt is added and it is a known
     // extension to apache.
-    $expected = $this->getExpectedDocument(1, 'example.php.txt', TRUE);
+    $expected = $this->getExpectedDocument(1, 'example.php_.txt', TRUE);
     // Override the expected filesize.
     $expected['data']['attributes']['filesize'] = strlen($php_string);
     $this->assertResponseData($expected, $response);
-    $this->assertFileExists('public://foobar/example.php.txt');
+    $this->assertFileExists('public://foobar/example.php_.txt');
 
     // Add php as an allowed format. Allow insecure uploads still being FALSE
     // should still not allow this. So it should still have a .txt extension
@@ -635,11 +635,11 @@ public function testFileUploadMaliciousExtension() {
     $this->rebuildAll();
 
     $response = $this->fileRequest($uri, $php_string, ['Content-Disposition' => 'filename="example_2.php"']);
-    $expected = $this->getExpectedDocument(2, 'example_2.php.txt', TRUE);
+    $expected = $this->getExpectedDocument(2, 'example_2.php_.txt', TRUE);
     // Override the expected filesize.
     $expected['data']['attributes']['filesize'] = strlen($php_string);
     $this->assertResponseData($expected, $response);
-    $this->assertFileExists('public://foobar/example_2.php.txt');
+    $this->assertFileExists('public://foobar/example_2.php_.txt');
     $this->assertFileNotExists('public://foobar/example_2.php');
 
     // Allow .doc file uploads and ensure even a mis-configured apache will not
@@ -659,6 +659,45 @@ public function testFileUploadMaliciousExtension() {
     $this->assertFileExists('public://foobar/example_3.php_.doc');
     $this->assertFileNotExists('public://foobar/example_3.php.doc');
 
+    // Test that a dangerous extension such as .php is munged even if it is in
+    // the list of allowed extensions.
+    $this->field->setSetting('file_extensions', 'doc php')->save();
+    $this->rebuildAll();
+
+    // Test using a masked exploit file.
+    $response = $this->fileRequest($uri, $php_string, ['Content-Disposition' => 'filename="example_4.php.doc"']);
+    // The filename is munged.
+    $expected = $this->getExpectedDocument(4, 'example_4.php_.doc', TRUE);
+    // Override the expected filesize.
+    $expected['data']['attributes']['filesize'] = strlen($php_string);
+    // The file mime should be 'application/msword'.
+    $expected['data']['attributes']['filemime'] = 'application/msword';
+    $this->assertResponseData($expected, $response);
+    $this->assertFileExists('public://foobar/example_4.php_.doc');
+    $this->assertFileNotExists('public://foobar/example_4.php.doc');
+
+    // Dangerous extensions are munged even when all extensions are allowed.
+    $this->field->setSetting('file_extensions', '')->save();
+    $this->rebuildAll();
+    $response = $this->fileRequest($uri, $php_string, ['Content-Disposition' => 'filename="example_5.php.png"']);
+    $expected = $this->getExpectedDocument(5, 'example_5.php_.png_.txt', TRUE);
+    // Override the expected filesize.
+    $expected['data']['attributes']['filesize'] = strlen($php_string);
+    // The file mime should also now be text.
+    $expected['data']['attributes']['filemime'] = 'text/plain';
+    $this->assertResponseData($expected, $response);
+    $this->assertFileExists('public://foobar/example_5.php_.png_.txt');
+
+    // Dangerous extensions are munged if is renamed to end in .txt.
+    $response = $this->fileRequest($uri, $php_string, ['Content-Disposition' => 'filename="example_6.cgi.png.txt"']);
+    $expected = $this->getExpectedDocument(6, 'example_6.cgi_.png_.txt', TRUE);
+    // Override the expected filesize.
+    $expected['data']['attributes']['filesize'] = strlen($php_string);
+    // The file mime should also now be text.
+    $expected['data']['attributes']['filemime'] = 'text/plain';
+    $this->assertResponseData($expected, $response);
+    $this->assertFileExists('public://foobar/example_6.cgi_.png_.txt');
+
     // Now allow insecure uploads.
     \Drupal::configFactory()
       ->getEditable('system.file')
@@ -668,14 +707,14 @@ public function testFileUploadMaliciousExtension() {
     $this->field->setSetting('file_extensions', '')->save();
     $this->rebuildAll();
 
-    $response = $this->fileRequest($uri, $php_string, ['Content-Disposition' => 'filename="example_4.php"']);
-    $expected = $this->getExpectedDocument(4, 'example_4.php', TRUE);
+    $response = $this->fileRequest($uri, $php_string, ['Content-Disposition' => 'filename="example_7.php"']);
+    $expected = $this->getExpectedDocument(7, 'example_7.php', TRUE);
     // Override the expected filesize.
     $expected['data']['attributes']['filesize'] = strlen($php_string);
     // The file mime should also now be PHP.
     $expected['data']['attributes']['filemime'] = 'application/x-httpd-php';
     $this->assertResponseData($expected, $response);
-    $this->assertFileExists('public://foobar/example_4.php');
+    $this->assertFileExists('public://foobar/example_7.php');
   }
 
   /**
diff --git a/web/core/modules/rest/tests/src/Functional/FileUploadResourceTestBase.php b/web/core/modules/rest/tests/src/Functional/FileUploadResourceTestBase.php
index eb26456192..c48e1a3b14 100644
--- a/web/core/modules/rest/tests/src/Functional/FileUploadResourceTestBase.php
+++ b/web/core/modules/rest/tests/src/Functional/FileUploadResourceTestBase.php
@@ -519,11 +519,11 @@ public function testFileUploadMaliciousExtension() {
     $response = $this->fileRequest($uri, $php_string, ['Content-Disposition' => 'filename="example.php"']);
     // The filename is not munged because .txt is added and it is a known
     // extension to apache.
-    $expected = $this->getExpectedNormalizedEntity(1, 'example.php.txt', TRUE);
+    $expected = $this->getExpectedNormalizedEntity(1, 'example.php_.txt', TRUE);
     // Override the expected filesize.
     $expected['filesize'][0]['value'] = strlen($php_string);
     $this->assertResponseData($expected, $response);
-    $this->assertFileExists('public://foobar/example.php.txt');
+    $this->assertFileExists('public://foobar/example.php_.txt');
 
     // Add php as an allowed format. Allow insecure uploads still being FALSE
     // should still not allow this. So it should still have a .txt extension
@@ -533,11 +533,11 @@ public function testFileUploadMaliciousExtension() {
     $this->refreshTestStateAfterRestConfigChange();
 
     $response = $this->fileRequest($uri, $php_string, ['Content-Disposition' => 'filename="example_2.php"']);
-    $expected = $this->getExpectedNormalizedEntity(2, 'example_2.php.txt', TRUE);
+    $expected = $this->getExpectedNormalizedEntity(2, 'example_2.php_.txt', TRUE);
     // Override the expected filesize.
     $expected['filesize'][0]['value'] = strlen($php_string);
     $this->assertResponseData($expected, $response);
-    $this->assertFileExists('public://foobar/example_2.php.txt');
+    $this->assertFileExists('public://foobar/example_2.php_.txt');
     $this->assertFileNotExists('public://foobar/example_2.php');
 
     // Allow .doc file uploads and ensure even a mis-configured apache will not
@@ -557,6 +557,45 @@ public function testFileUploadMaliciousExtension() {
     $this->assertFileExists('public://foobar/example_3.php_.doc');
     $this->assertFileNotExists('public://foobar/example_3.php.doc');
 
+    // Test that a dangerous extension such as .php is munged even if it is in
+    // the list of allowed extensions.
+    $this->field->setSetting('file_extensions', 'doc php')->save();
+    $this->refreshTestStateAfterRestConfigChange();
+
+    // Test using a masked exploit file.
+    $response = $this->fileRequest($uri, $php_string, ['Content-Disposition' => 'filename="example_4.php.doc"']);
+    // The filename is munged.
+    $expected = $this->getExpectedNormalizedEntity(4, 'example_4.php_.doc', TRUE);
+    // Override the expected filesize.
+    $expected['filesize'][0]['value'] = strlen($php_string);
+    // The file mime should be 'application/msword'.
+    $expected['filemime'][0]['value'] = 'application/msword';
+    $this->assertResponseData($expected, $response);
+    $this->assertFileExists('public://foobar/example_4.php_.doc');
+    $this->assertFileNotExists('public://foobar/example_4.php.doc');
+
+    // Dangerous extensions are munged even when all extensions are allowed.
+    $this->field->setSetting('file_extensions', '')->save();
+    $this->rebuildAll();
+    $response = $this->fileRequest($uri, $php_string, ['Content-Disposition' => 'filename="example_5.php.png"']);
+    $expected = $this->getExpectedNormalizedEntity(5, 'example_5.php_.png_.txt', TRUE);
+    // Override the expected filesize.
+    $expected['filesize'][0]['value'] = strlen($php_string);
+    // The file mime should also now be text.
+    $expected['filemime'][0]['value'] = 'text/plain';
+    $this->assertResponseData($expected, $response);
+    $this->assertFileExists('public://foobar/example_5.php_.png_.txt');
+
+    // Dangerous extensions are munged if is renamed to end in .txt.
+    $response = $this->fileRequest($uri, $php_string, ['Content-Disposition' => 'filename="example_6.cgi.png.txt"']);
+    $expected = $this->getExpectedNormalizedEntity(6, 'example_6.cgi_.png_.txt', TRUE);
+    // Override the expected filesize.
+    $expected['filesize'][0]['value'] = strlen($php_string);
+    // The file mime should also now be text.
+    $expected['filemime'][0]['value'] = 'text/plain';
+    $this->assertResponseData($expected, $response);
+    $this->assertFileExists('public://foobar/example_6.cgi_.png_.txt');
+
     // Now allow insecure uploads.
     \Drupal::configFactory()
       ->getEditable('system.file')
@@ -566,14 +605,14 @@ public function testFileUploadMaliciousExtension() {
     $this->field->setSetting('file_extensions', '')->save();
     $this->refreshTestStateAfterRestConfigChange();
 
-    $response = $this->fileRequest($uri, $php_string, ['Content-Disposition' => 'filename="example_4.php"']);
-    $expected = $this->getExpectedNormalizedEntity(4, 'example_4.php', TRUE);
+    $response = $this->fileRequest($uri, $php_string, ['Content-Disposition' => 'filename="example_7.php"']);
+    $expected = $this->getExpectedNormalizedEntity(7, 'example_7.php', TRUE);
     // Override the expected filesize.
     $expected['filesize'][0]['value'] = strlen($php_string);
     // The file mime should also now be PHP.
     $expected['filemime'][0]['value'] = 'application/x-httpd-php';
     $this->assertResponseData($expected, $response);
-    $this->assertFileExists('public://foobar/example_4.php');
+    $this->assertFileExists('public://foobar/example_7.php');
   }
 
   /**
diff --git a/web/core/modules/system/tests/modules/hold_test/hold_test.module b/web/core/modules/system/tests/modules/hold_test/hold_test.module
index 867eacf906..9dc4d72aed 100644
--- a/web/core/modules/system/tests/modules/hold_test/hold_test.module
+++ b/web/core/modules/system/tests/modules/hold_test/hold_test.module
@@ -12,7 +12,8 @@
  *   TRUE - enable hold, FALSE - disable hold.
  */
 function hold_test_request($status) {
-  file_put_contents(\Drupal::root() . '/sites/default/files/simpletest/hold_test_request.txt', $status);
+  $site_path = \Drupal::service('site.path');
+  file_put_contents($site_path . '/hold_test_request.txt', $status);
 }
 
 /**
@@ -22,5 +23,6 @@ function hold_test_request($status) {
  *   TRUE - enable hold, FALSE - disable hold.
  */
 function hold_test_response($status) {
-  file_put_contents(\Drupal::root() . '/sites/default/files/simpletest/hold_test_response.txt', $status);
+  $site_path = \Drupal::service('site.path');
+  file_put_contents($site_path . '/hold_test_response.txt', $status);
 }
diff --git a/web/core/modules/system/tests/modules/hold_test/hold_test.services.yml b/web/core/modules/system/tests/modules/hold_test/hold_test.services.yml
index 88e7babdff..895db31be0 100644
--- a/web/core/modules/system/tests/modules/hold_test/hold_test.services.yml
+++ b/web/core/modules/system/tests/modules/hold_test/hold_test.services.yml
@@ -1,5 +1,6 @@
 services:
   hold_test.response:
     class: Drupal\hold_test\EventSubscriber\HoldTestSubscriber
+    arguments: ['@site.path']
     tags:
       - { name: event_subscriber }
diff --git a/web/core/modules/system/tests/modules/hold_test/src/EventSubscriber/HoldTestSubscriber.php b/web/core/modules/system/tests/modules/hold_test/src/EventSubscriber/HoldTestSubscriber.php
index 332f4c00b9..a9160a4614 100644
--- a/web/core/modules/system/tests/modules/hold_test/src/EventSubscriber/HoldTestSubscriber.php
+++ b/web/core/modules/system/tests/modules/hold_test/src/EventSubscriber/HoldTestSubscriber.php
@@ -13,6 +13,23 @@ class HoldTestSubscriber implements EventSubscriberInterface {
   const HOLD_REQUEST = 'request';
   const HOLD_RESPONSE = 'response';
 
+  /**
+   * The site path.
+   *
+   * @var string
+   */
+  protected $sitePath;
+
+  /**
+   * HoldTestSubscriber constructor.
+   *
+   * @param string $site_path
+   *   The site path.
+   */
+  public function __construct(string $site_path) {
+    $this->sitePath = $site_path;
+  }
+
   /**
    * Request hold.
    */
@@ -34,7 +51,7 @@ public function onRespond() {
    *   Type of hold.
    */
   protected function hold($type) {
-    $path = \Drupal::root() . "/sites/default/files/simpletest/hold_test_$type.txt";
+    $path = "{$this->sitePath}/hold_test_$type.txt";
     do {
       $status = (bool) file_get_contents($path);
     } while ($status && (NULL === usleep(100000)));
diff --git a/web/core/modules/system/tests/src/Functional/FileTransfer/TestFileTransfer.php b/web/core/modules/system/tests/src/Functional/FileTransfer/TestFileTransfer.php
index 48e57845dd..a7f051966c 100644
--- a/web/core/modules/system/tests/src/Functional/FileTransfer/TestFileTransfer.php
+++ b/web/core/modules/system/tests/src/Functional/FileTransfer/TestFileTransfer.php
@@ -60,8 +60,6 @@ public function isFile($path) {
     return FALSE;
   }
 
-  public function chmodJailed($path, $mode, $recursive) {
-    return;
-  }
+  public function chmodJailed($path, $mode, $recursive) {}
 
 }
diff --git a/web/core/modules/update/src/UpdateManagerInterface.php b/web/core/modules/update/src/UpdateManagerInterface.php
index 74dac9f67c..32eb34cbba 100644
--- a/web/core/modules/update/src/UpdateManagerInterface.php
+++ b/web/core/modules/update/src/UpdateManagerInterface.php
@@ -82,8 +82,14 @@ public function getProjects();
   /**
    * Processes a step in batch for fetching available update data.
    *
+   * Before calling this method, call
+   * UpdateManagerInterface::refreshUpdateData() to clear existing update data
+   * and initiate re-fetching.
+   *
    * @param array $context
    *   Reference to an array used for Batch API storage.
+   *
+   * @see \Drupal\update\UpdateManagerInterface::refreshUpdateData()
    */
   public function fetchDataBatch(&$context);
 
diff --git a/web/core/modules/update/src/UpdateProcessor.php b/web/core/modules/update/src/UpdateProcessor.php
index 25dfc7a004..8d42dd5362 100644
--- a/web/core/modules/update/src/UpdateProcessor.php
+++ b/web/core/modules/update/src/UpdateProcessor.php
@@ -127,6 +127,11 @@ public function createFetchTask($project) {
    */
   public function fetchData() {
     $end = time() + $this->updateSettings->get('fetch.timeout');
+    if ($this->fetchQueue->numberOfItems()) {
+      // Delete any stored project data as that needs refreshing when
+      // update_calculate_project_data() is called.
+      $this->tempStore->delete('update_project_data');
+    }
     while (time() < $end && ($item = $this->fetchQueue->claimItem())) {
       $this->processFetchTask($item->data);
       $this->fetchQueue->deleteItem($item);
diff --git a/web/core/modules/update/tests/fixtures/release-history/drupal.broken.xml b/web/core/modules/update/tests/fixtures/release-history/drupal.broken.xml
new file mode 100644
index 0000000000..1ba5d5e408
--- /dev/null
+++ b/web/core/modules/update/tests/fixtures/release-history/drupal.broken.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<project xmlns:dc="http://purl.org/dc/elements/1.1/">
+</project>
diff --git a/web/core/modules/update/tests/src/Functional/UpdateCoreTest.php b/web/core/modules/update/tests/src/Functional/UpdateCoreTest.php
index f01e9b2dd8..e425d52553 100644
--- a/web/core/modules/update/tests/src/Functional/UpdateCoreTest.php
+++ b/web/core/modules/update/tests/src/Functional/UpdateCoreTest.php
@@ -862,6 +862,43 @@ public function testRevokedRelease() {
     }
   }
 
+  /**
+   * Checks that Drupal recovers after problems connecting to update server.
+   */
+  public function testBrokenThenFixedUpdates() {
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer site configuration',
+      'access administration pages',
+    ]));
+    $this->setSystemInfo('8.0.0');
+    // Instead of using refreshUpdateStatus(), set these manually.
+    $this->config('update.settings')
+      ->set('fetch.url', Url::fromRoute('update_test.update_test')->setAbsolute()->toString())
+      ->save();
+    // Use update XML that has no information to simulate a broken response from
+    // the update server.
+    $this->config('update_test.settings')
+      ->set('xml_map', ['drupal' => 'broken'])
+      ->save();
+
+    // This will retrieve broken updates.
+    $this->cronRun();
+    $this->drupalGet('admin/reports/status');
+    $this->assertSession()->statusCodeEquals(200);
+    $this->assertSession()->pageTextContains('There was a problem checking available updates for Drupal.');
+    $this->config('update_test.settings')
+      ->set('xml_map', ['drupal' => 'sec.0.2'])
+      ->save();
+    // Simulate the update_available_releases state expiring before cron is run
+    // and the state is used by \Drupal\update\UpdateManager::getProjects().
+    \Drupal::keyValueExpirable('update_available_releases')->deleteAll();
+    // This cron run should retrieve fixed updates.
+    $this->cronRun();
+    $this->drupalGet('admin/structure');
+    $this->assertSession()->statusCodeEquals(200);
+    $this->assertSession()->pageTextContains('There is a security update available for your version of Drupal.');
+  }
+
   /**
    * Tests messages when a project release is marked unsupported.
    *
diff --git a/web/core/modules/user/tests/src/Kernel/Migrate/d6/ProfileFieldCheckRequirementsTest.php b/web/core/modules/user/tests/src/Kernel/Migrate/d6/ProfileFieldCheckRequirementsTest.php
index 7fa4eceaab..4be275f25d 100644
--- a/web/core/modules/user/tests/src/Kernel/Migrate/d6/ProfileFieldCheckRequirementsTest.php
+++ b/web/core/modules/user/tests/src/Kernel/Migrate/d6/ProfileFieldCheckRequirementsTest.php
@@ -21,7 +21,7 @@ public function setup() {
   }
 
   /**
-   * Tests exception in thrown when profile_fields tables does not exist.
+   * Tests exception is thrown when profile_fields tables do not exist.
    */
   public function testCheckRequirements() {
     $this->expectException(RequirementsException::class);
diff --git a/web/core/modules/user/tests/src/Kernel/Migrate/d7/ProfileFieldCheckRequirementsTest.php b/web/core/modules/user/tests/src/Kernel/Migrate/d7/ProfileFieldCheckRequirementsTest.php
index 85d163948b..41553288d5 100644
--- a/web/core/modules/user/tests/src/Kernel/Migrate/d7/ProfileFieldCheckRequirementsTest.php
+++ b/web/core/modules/user/tests/src/Kernel/Migrate/d7/ProfileFieldCheckRequirementsTest.php
@@ -21,7 +21,7 @@ public function setup() {
   }
 
   /**
-   * Tests exception in thrown when profile_fields tables does not exist.
+   * Tests exception is thrown when profile_fields tables do not exist.
    */
   public function testCheckRequirements() {
     $this->expectException(RequirementsException::class);
diff --git a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingBrokenDatabaseSettingsTest.php b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingBrokenDatabaseSettingsTest.php
index 32fe43edeb..c6aa4eda20 100644
--- a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingBrokenDatabaseSettingsTest.php
+++ b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingBrokenDatabaseSettingsTest.php
@@ -48,7 +48,6 @@ protected function prepareEnvironment() {
    */
   protected function setUpSettings() {
     // This form will never be reached.
-    return;
   }
 
   /**
@@ -56,7 +55,6 @@ protected function setUpSettings() {
    */
   protected function setUpSite() {
     // This form will never be reached.
-    return;
   }
 
   /**
diff --git a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigNoConfigTest.php b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigNoConfigTest.php
index b19ee44267..da9a504012 100644
--- a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigNoConfigTest.php
+++ b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigNoConfigTest.php
@@ -21,7 +21,6 @@ class InstallerExistingConfigNoConfigTest extends InstallerExistingConfigTestBas
    */
   protected function setUpSite() {
     // There are errors therefore there is nothing to do here.
-    return;
   }
 
   /**
diff --git a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigNoSystemSiteTest.php b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigNoSystemSiteTest.php
index 4ac68d4e86..138d66e3de 100644
--- a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigNoSystemSiteTest.php
+++ b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigNoSystemSiteTest.php
@@ -22,7 +22,7 @@ protected function prepareEnvironment() {
    * {@inheritdoc}
    */
   public function setUpSite() {
-    return;
+    // There are are errors. Therefore, there is nothing to do here.
   }
 
   /**
diff --git a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigProfileHookInstall.php b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigProfileHookInstall.php
index 2d9d6cdfc1..da0cb3b322 100644
--- a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigProfileHookInstall.php
+++ b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigProfileHookInstall.php
@@ -32,7 +32,6 @@ function config_profile_with_hook_install_install() {
    */
   protected function setUpSettings() {
     // There are errors therefore there is nothing to do here.
-    return;
   }
 
   /**
@@ -40,7 +39,6 @@ protected function setUpSettings() {
    */
   protected function setUpSite() {
     // There are errors therefore there is nothing to do here.
-    return;
   }
 
   /**
diff --git a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigSyncDirectoryProfileHookInstall.php b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigSyncDirectoryProfileHookInstall.php
index 38a06971fa..42c0a0181c 100644
--- a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigSyncDirectoryProfileHookInstall.php
+++ b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigSyncDirectoryProfileHookInstall.php
@@ -46,7 +46,6 @@ function testing_config_install_multilingual_install() {
   protected function setUpProfile() {
     // This is the form we are testing so wait until the test method to do
     // assertions.
-    return;
   }
 
   /**
@@ -54,7 +53,6 @@ protected function setUpProfile() {
    */
   protected function setUpRequirementsProblem() {
     // This form will never be reached.
-    return;
   }
 
   /**
@@ -62,7 +60,6 @@ protected function setUpRequirementsProblem() {
    */
   protected function setUpSettings() {
     // This form will never be reached.
-    return;
   }
 
   /**
@@ -70,7 +67,6 @@ protected function setUpSettings() {
    */
   protected function setUpSite() {
     // This form will never be reached.
-    return;
   }
 
   /**
diff --git a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigSyncDriectoryProfileMismatchTest.php b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigSyncDriectoryProfileMismatchTest.php
index 80b392a72a..cf8c0fab26 100644
--- a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigSyncDriectoryProfileMismatchTest.php
+++ b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigSyncDriectoryProfileMismatchTest.php
@@ -42,7 +42,6 @@ protected function setUpSettings() {
 
   protected function setUpSite() {
     // This step will not occur because there is an error.
-    return;
   }
 
   /**
diff --git a/web/core/tests/Drupal/KernelTests/Core/Database/TransactionTest.php b/web/core/tests/Drupal/KernelTests/Core/Database/TransactionTest.php
index 3adc34c0cf..d73f8af752 100644
--- a/web/core/tests/Drupal/KernelTests/Core/Database/TransactionTest.php
+++ b/web/core/tests/Drupal/KernelTests/Core/Database/TransactionTest.php
@@ -101,7 +101,7 @@ protected function transactionInnerLayer($suffix, $rollback = FALSE, $ddl_statem
     $txn = $this->connection->startTransaction();
 
     $depth2 = $this->connection->transactionDepth();
-    $this->assertTrue($depth < $depth2, 'Transaction depth is has increased with new transaction.');
+    $this->assertTrue($depth < $depth2, 'Transaction depth has increased with new transaction.');
 
     // Insert a single row into the testing table.
     $this->connection->insert('test')
diff --git a/web/core/tests/Drupal/KernelTests/Core/File/NameMungingTest.php b/web/core/tests/Drupal/KernelTests/Core/File/NameMungingTest.php
index 644375a029..26a3e9cf36 100644
--- a/web/core/tests/Drupal/KernelTests/Core/File/NameMungingTest.php
+++ b/web/core/tests/Drupal/KernelTests/Core/File/NameMungingTest.php
@@ -7,28 +7,51 @@
 /**
  * Tests filename munging and unmunging.
  *
+ * Checks performed, relying on 2 <= strlen('foo') <= 5.
+ *
+ * - testMunging()
+ *   - (name).foo.txt -> (name).foo_.txt when allows_insecure_uploads === 0
+ * - testMungeBullByte()
+ *   - (name).foo\0.txt -> (name).foo_.txt regardless of allows_insecure_uploads
+ * - testMungeIgnoreInsecure()
+ *   - (name).foo.txt unmodified when allows_insecure_uploads === 1
+ * - testMungeIgnoreAllowedExtensions()
+ *   - (name).FOO.txt -> (name).FOO when allowing 'foo'.
+ *   - (name).foo.txt -> (name).foo.txt when allowing 'FOO'.
+ * - testMungeUnsafe()
+ *   - (name).php.txt -> (name).php_.txt even when allowing 'php txt'
+ *   - (name).php.txt -> (name).php_.txt even when allowing 'php txt'
+ * - testUnMunge()
+ *   - (name).foo.txt -> (unchecked) -> (name).foo.txt after un-munging
+ *
  * @group File
  */
 class NameMungingTest extends FileTestBase {
 
   /**
+   * An extension to be used as forbidden during munge operations.
+   *
    * @var string
    */
   protected $badExtension;
 
   /**
+   * The name of a file with a bad extension, after munging.
+   *
    * @var string
    */
   protected $name;
 
   /**
+   * The name of a file with an upper-cased bad extension, after munging.
+   *
    * @var string
    */
   protected $nameWithUcExt;
 
   protected function setUp() {
     parent::setUp();
-    $this->badExtension = 'php';
+    $this->badExtension = 'foo';
     $this->name = $this->randomMachineName() . '.' . $this->badExtension . '.txt';
     $this->nameWithUcExt = $this->randomMachineName() . '.' . strtoupper($this->badExtension) . '.txt';
   }
@@ -78,6 +101,18 @@ public function testMungeIgnoreAllowedExtensions() {
     $this->assertSame($munged_name, $this->name);
   }
 
+  /**
+   * Tests unsafe extensions are always munged by file_munge_filename().
+   */
+  public function testMungeUnsafe() {
+    $prefix = $this->randomMachineName();
+    $name = "$prefix.php.txt";
+    // Put the php extension in the allowed list, but since it is in the unsafe
+    // extension list, it should still be munged.
+    $munged_name = file_munge_filename($name, 'php txt');
+    $this->assertSame("$prefix.php_.txt", $munged_name);
+  }
+
   /**
    * Ensure that unmunge gets your name back.
    */
diff --git a/web/core/tests/Drupal/Tests/Core/Asset/CssCollectionRendererUnitTest.php b/web/core/tests/Drupal/Tests/Core/Asset/CssCollectionRendererUnitTest.php
index d3f973dc39..51a4a01c5a 100644
--- a/web/core/tests/Drupal/Tests/Core/Asset/CssCollectionRendererUnitTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Asset/CssCollectionRendererUnitTest.php
@@ -4,6 +4,7 @@
 
 use Drupal\Core\Asset\CssCollectionRenderer;
 use Drupal\Tests\UnitTestCase;
+use Drupal\Core\State\StateInterface;
 
 /**
  * Tests the CSS asset collection renderer.
@@ -27,18 +28,13 @@ class CssCollectionRendererUnitTest extends UnitTestCase {
   protected $fileCssGroup;
 
   /**
-   * The state mock class.
-   *
-   * @var \Drupal\Core\State\StateInterface|\PHPUnit\Framework\MockObject\MockObject
+   * {@inheritdoc}
    */
-  protected $state;
-
   protected function setUp() {
     parent::setUp();
-
-    $this->state = $this->createMock('Drupal\Core\State\StateInterface');
-
-    $this->renderer = new CssCollectionRenderer($this->state);
+    $state = $this->prophesize(StateInterface::class);
+    $state->get('system.css_js_query_string', '0')->shouldBeCalledOnce()->willReturn(NULL);
+    $this->renderer = new CssCollectionRenderer($state->reveal());
     $this->fileCssGroup = [
       'group' => -100,
       'type' => 'file',
@@ -76,15 +72,16 @@ protected function setUp() {
    * @see testRender
    */
   public function providerTestRender() {
-    $create_link_element = function ($href, $media = 'all', $browsers = []) {
+    $create_link_element = function ($href, $media = 'all', $browsers = [], $custom_attributes = []) {
+      $attributes = [
+        'rel' => 'stylesheet',
+        'media' => $media,
+        'href' => $href,
+      ];
       return [
         '#type' => 'html_tag',
         '#tag' => 'link',
-        '#attributes' => [
-          'rel' => 'stylesheet',
-          'media' => $media,
-          'href' => $href,
-        ],
+        '#attributes' => array_replace($attributes, $custom_attributes),
         '#browsers' => $browsers,
       ];
     };
@@ -93,6 +90,8 @@ public function providerTestRender() {
       return ['group' => 0, 'type' => 'file', 'media' => $media, 'preprocess' => $preprocess, 'data' => $data, 'browsers' => []];
     };
 
+    $custom_attributes = ['integrity' => 'sha384-psK1OYPAYjYUhtDYW+Pj2yc', 'crossorigin' => 'anonymous', 'random-attribute' => 'test'];
+
     return [
       // Single external CSS asset.
       0 => [
@@ -106,7 +105,7 @@ public function providerTestRender() {
         ],
       ],
       // Single file CSS asset.
-      2 => [
+      1 => [
         [
           0 => ['group' => 0, 'type' => 'file', 'media' => 'all', 'preprocess' => TRUE, 'data' => 'public://css/file-all', 'browsers' => []],
         ],
@@ -114,6 +113,15 @@ public function providerTestRender() {
           0 => $create_link_element(file_url_transform_relative(file_create_url('public://css/file-all')) . '?', 'all'),
         ],
       ],
+      // Single file CSS asset with custom attributes.
+      2 => [
+        [
+          0 => ['group' => 0, 'type' => 'file', 'media' => 'all', 'preprocess' => TRUE, 'data' => 'public://css/file-all', 'browsers' => [], 'attributes' => $custom_attributes],
+        ],
+        [
+          0 => $create_link_element(file_url_transform_relative(file_create_url('public://css/file-all')) . '?', 'all', [], $custom_attributes),
+        ],
+      ],
       // 31 file CSS assets: expect 31 link elements.
       3 => [
         [
@@ -185,7 +193,7 @@ public function providerTestRender() {
       ],
       // 32 file CSS assets with the same properties, except for the 10th and
       // 20th files, they have different 'media' properties.
-      5 => [
+      4 => [
         [
           0 => $create_file_css_asset('public://css/1.css'),
           1 => $create_file_css_asset('public://css/2.css'),
@@ -264,10 +272,6 @@ public function providerTestRender() {
    * @dataProvider providerTestRender
    */
   public function testRender(array $css_assets, array $render_elements) {
-    $this->state->expects($this->once())
-      ->method('get')
-      ->with('system.css_js_query_string')
-      ->will($this->returnValue(NULL));
     $this->assertSame($render_elements, $this->renderer->render($css_assets));
   }
 
@@ -275,10 +279,6 @@ public function testRender(array $css_assets, array $render_elements) {
    * Tests a CSS asset group with the invalid 'type' => 'internal'.
    */
   public function testRenderInvalidType() {
-    $this->state->expects($this->once())
-      ->method('get')
-      ->with('system.css_js_query_string')
-      ->will($this->returnValue(NULL));
     $this->expectException('Exception');
     $this->expectExceptionMessage('Invalid CSS asset type.');
 
diff --git a/web/core/tests/Drupal/Tests/Core/Database/Stub/StubConnection.php b/web/core/tests/Drupal/Tests/Core/Database/Stub/StubConnection.php
index 4692dffb87..06f7deb164 100644
--- a/web/core/tests/Drupal/Tests/Core/Database/Stub/StubConnection.php
+++ b/web/core/tests/Drupal/Tests/Core/Database/Stub/StubConnection.php
@@ -51,9 +51,7 @@ public function databaseType() {
   /**
    * {@inheritdoc}
    */
-  public function createDatabase($database) {
-    return;
-  }
+  public function createDatabase($database) {}
 
   /**
    * {@inheritdoc}
diff --git a/web/core/tests/fixtures/database_drivers/custom/fake/Connection.php b/web/core/tests/fixtures/database_drivers/custom/fake/Connection.php
index 377b0f3679..27656f8792 100644
--- a/web/core/tests/fixtures/database_drivers/custom/fake/Connection.php
+++ b/web/core/tests/fixtures/database_drivers/custom/fake/Connection.php
@@ -49,9 +49,7 @@ public function databaseType() {
   /**
    * {@inheritdoc}
    */
-  public function createDatabase($database) {
-    return;
-  }
+  public function createDatabase($database) {}
 
   /**
    * {@inheritdoc}
diff --git a/web/core/themes/claro/css/theme/media-library.css b/web/core/themes/claro/css/theme/media-library.css
index b41f78eac0..9659f503b7 100644
--- a/web/core/themes/claro/css/theme/media-library.css
+++ b/web/core/themes/claro/css/theme/media-library.css
@@ -658,9 +658,9 @@
 /**
  * Style the added media item container.
  *
- * The added media container receives screen reader focus since it is has the
- * role 'listitem'. Since it is not an interactive element, it does not need
- * an outline.
+ * The added media container receives screen reader focus since it has the role
+ * 'listitem'. Since it is not an interactive element, it does not need an
+ * outline.
  */
 
 .media-library-add-form__media {
diff --git a/web/core/themes/claro/css/theme/media-library.pcss.css b/web/core/themes/claro/css/theme/media-library.pcss.css
index 78970b4dcd..5d623270b9 100644
--- a/web/core/themes/claro/css/theme/media-library.pcss.css
+++ b/web/core/themes/claro/css/theme/media-library.pcss.css
@@ -609,9 +609,9 @@
 /**
  * Style the added media item container.
  *
- * The added media container receives screen reader focus since it is has the
- * role 'listitem'. Since it is not an interactive element, it does not need
- * an outline.
+ * The added media container receives screen reader focus since it has the role
+ * 'listitem'. Since it is not an interactive element, it does not need an
+ * outline.
  */
 .media-library-add-form__media {
   position: relative;
diff --git a/web/core/themes/seven/css/theme/media-library.css b/web/core/themes/seven/css/theme/media-library.css
index 80217a64bc..be85589c2e 100644
--- a/web/core/themes/seven/css/theme/media-library.css
+++ b/web/core/themes/seven/css/theme/media-library.css
@@ -625,9 +625,9 @@
 /**
  * Style the added media item container.
  *
- * The added media container receives screen reader focus since it is has the
- * role 'listitem'. Since it is not an interactive element, it does not need
- * an outline.
+ * The added media container receives screen reader focus since it has the role
+ * 'listitem'. Since it is not an interactive element, it does not need an
+ * outline.
  */
 .media-library-add-form__media {
   position: relative;
-- 
GitLab


From a1d4537ba21dbce42331a9a335690cb9c6a572b0 Mon Sep 17 00:00:00 2001
From: Brian Weaver <weaver.299@osu.edu>
Date: Tue, 24 Nov 2020 11:39:26 -0500
Subject: [PATCH 12/23] Composer package/plugin updates for composer2 (details
 below)

- update drush to 9.7.2
- update cweagans/composer-patches ^1.7
- oomphinc/composer-installers-extender ^2.0
- update composer/installers ^1.9
---
 composer.json                                 |    7 +-
 composer.lock                                 |  480 ++-
 .../drupal-code-generator/composer.json       |    2 +-
 .../src/ApplicationFactory.php                |    7 +-
 .../src/Command/Drupal_7/Hook.php             |    2 +-
 .../src/Command/Drupal_8/Hook.php             |    2 +-
 .../src/Command/Drupal_8/PhpStormMetadata.php |   72 +
 .../src/Command/Drupal_8/Project.php          |  236 +-
 .../Drupal_8/Service/EventSubscriber.php      |   10 +-
 .../Command/Drupal_8/Service/Middleware.php   |   12 +-
 .../Drupal_8/Service/RouteSubscriber.php      |   12 +-
 .../src/Helper/Renderer.php                   |    8 +-
 .../drupal-code-generator/src/bootstrap.php   |   38 +-
 .../templates/d8/_field/type.twig             |    2 +-
 .../drush/Commands/PolicyCommands.php.twig    |    4 +-
 .../d8/_project/drush/drush.yml.twig          |    3 -
 .../_project/drush/sites/self.site.yml.twig   |    2 +-
 .../templates/d8/_project/phpunit.xml.twig    |   45 +
 .../composer/create_required_files.php.twig   |   58 -
 .../d8/_project/scripts/sync-site.sh.twig     |   17 +-
 .../d8/_project/tests/behat/behat.yml.twig    |   42 -
 .../behat/bootstrap/BaseContext.php.twig      |   14 -
 .../behat/bootstrap/ExampleContext.php.twig   |    8 -
 .../features/example/user_forms.feature.twig  |   11 -
 .../_project/tests/behat/local.behat.yml.twig |   12 -
 .../_project/tests/src/HomePageTest.php.twig  |   20 +
 .../configuration-entity/model.info.yml.twig  |    1 +
 .../module/content-entity/model.info.yml.twig |    1 +
 .../src/Entity/Example.php.twig               |    4 +-
 .../templates/d8/phpstorm-meta.twig           |   81 +
 .../templates/d8/plugin/_ckeditor/dialog.twig |    7 +-
 .../templates/d8/plugin/_ckeditor/plugin.twig |    3 +-
 .../templates/d8/plugin/rest-resource.twig    |   48 +-
 .../templates/d8/service/logger.twig          |    6 +-
 .../templates/d8/test/browser.twig            |    5 +
 .../templates/d8/test/webdriver.twig          |    5 +
 .../templates/d8/yml/module-info.twig         |    1 +
 .../templates/d8/yml/theme-info.twig          |    1 +
 vendor/composer/autoload_classmap.php         |   39 +-
 vendor/composer/autoload_psr4.php             |    2 -
 vendor/composer/autoload_static.php           |   49 +-
 vendor/composer/installed.json                |  520 ++-
 .../.scenarios.lock/finder5/.gitignore        |    1 +
 .../.scenarios.lock/finder5/composer.json     |   62 +
 .../.scenarios.lock/finder5/composer.lock     | 3037 ++++++++++++++
 .../annotated-command/.scenarios.lock/install |   14 +-
 .../.scenarios.lock/phpunit4/composer.json    |    4 +-
 .../.scenarios.lock/phpunit4/composer.lock    |  212 +-
 .../.scenarios.lock/symfony2/composer.json    |    4 +-
 .../.scenarios.lock/symfony4/composer.json    |    4 +-
 .../.scenarios.lock/symfony4/composer.lock    | 1023 +++--
 .../annotated-command/CHANGELOG.md            |    4 +
 .../consolidation/annotated-command/LICENSE   |   16 +-
 .../consolidation/annotated-command/README.md |    2 +-
 .../annotated-command/composer.json           |   14 +-
 .../annotated-command/composer.lock           |  507 ++-
 .../.scenarios.lock/finder5/.gitignore        |    1 +
 .../.scenarios.lock/finder5/composer.json     |   66 +
 .../.scenarios.lock/finder5/composer.lock     | 2938 ++++++++++++++
 .../output-formatters/.scenarios.lock/install |   14 +-
 .../.scenarios.lock/symfony2/composer.json    |    2 +-
 .../.scenarios.lock/symfony3/composer.lock    |  359 +-
 .../.scenarios.lock/symfony4/composer.json    |    2 +-
 .../.scenarios.lock/symfony4/composer.lock    | 1026 +++--
 .../output-formatters/CHANGELOG.md            |    4 +
 .../consolidation/output-formatters/LICENSE   |   12 +-
 .../output-formatters/composer.json           |   12 +-
 .../output-formatters/composer.lock           |  361 +-
 .../robo/.scenarios.lock/finder5/.gitignore   |    1 +
 .../.scenarios.lock/finder5/composer.json     |   87 +
 .../.scenarios.lock/finder5/composer.lock     | 3588 +++++++++++++++++
 .../robo/.scenarios.lock/install              |   14 +-
 .../.scenarios.lock/symfony2/composer.json    |   38 +-
 .../.scenarios.lock/symfony4/composer.json    |   38 +-
 .../.scenarios.lock/symfony4/composer.lock    | 1999 ++++-----
 vendor/consolidation/robo/CHANGELOG.md        |   36 +-
 vendor/consolidation/robo/CONTRIBUTING.md     |    4 +
 vendor/consolidation/robo/LICENSE             |   30 +-
 vendor/consolidation/robo/README.md           |   26 +-
 vendor/consolidation/robo/RoboFile.php        |   17 +-
 vendor/consolidation/robo/codeception.yml     |    2 +-
 vendor/consolidation/robo/composer.json       |   53 +-
 vendor/consolidation/robo/composer.lock       | 1796 +++------
 .../robo/{phpunit.xml => phpunit.xml.dist}    |    9 +
 vendor/consolidation/robo/src/Application.php |    6 +-
 .../ClassDiscoveryInterface.php               |    4 +-
 .../RelativeNamespaceDiscovery.php            |   20 +-
 .../robo/src/Collection/CallableTask.php      |    6 +-
 .../robo/src/Collection/Collection.php        |   67 +-
 .../robo/src/Collection/CollectionBuilder.php |  107 +-
 .../src/Collection/CollectionInterface.php    |   37 +-
 .../src/Collection/CollectionProcessHook.php  |    3 +-
 .../robo/src/Collection/CompletionWrapper.php |    2 +-
 .../robo/src/Collection/Element.php           |   14 +-
 .../Collection/NestedCollectionInterface.php  |    1 +
 .../robo/src/Collection/TaskForEach.php       |    5 +-
 .../robo/src/Collection/Temporary.php         |    6 +
 .../robo/src/Collection/loadTasks.php         |    1 +
 .../robo/src/Common/CommandArguments.php      |    9 +-
 .../robo/src/Common/CommandReceiver.php       |    1 +
 .../robo/src/Common/ConfigAwareTrait.php      |    8 +-
 .../robo/src/Common/DynamicParams.php         |    3 +-
 .../robo/src/Common/ExecCommand.php           |    4 +
 .../robo/src/Common/ExecOneCommand.php        |    1 +
 .../robo/src/Common/ExecTrait.php             |   74 +-
 vendor/consolidation/robo/src/Common/IO.php   |   10 +-
 .../robo/src/Common/InflectionTrait.php       |    1 +
 .../robo/src/Common/OutputAdapter.php         |   10 +
 .../robo/src/Common/ProcessExecutor.php       |   11 +-
 .../robo/src/Common/ProcessUtils.php          |   14 +-
 .../robo/src/Common/ProgressIndicator.php     |    1 +
 .../Common/ProgressIndicatorAwareTrait.php    |    6 +-
 .../src/Common/ResourceExistenceChecker.php   |   13 +-
 .../consolidation/robo/src/Common/TaskIO.php  |    8 +-
 .../robo/src/Common/TimeKeeper.php            |    8 +-
 .../consolidation/robo/src/Common/Timer.php   |    1 +
 .../src/Common/VerbosityThresholdTrait.php    |   30 +-
 vendor/consolidation/robo/src/Config.php      |    1 +
 .../consolidation/robo/src/Config/Config.php  |    5 +
 .../GlobalOptionDefaultValuesInterface.php    |    1 +
 .../robo/src/Contract/CommandInterface.php    |    1 +
 .../robo/src/Contract/CompletionInterface.php |    1 +
 .../robo/src/Contract/IOAwareInterface.php    |    2 +-
 .../robo/src/Contract/InflectionInterface.php |    1 +
 .../src/Contract/OutputAdapterInterface.php   |   10 +
 .../robo/src/Contract/PrintedInterface.php    |    1 +
 .../ProgressIndicatorAwareInterface.php       |    1 +
 .../robo/src/Contract/RollbackInterface.php   |    1 +
 .../robo/src/Contract/SimulatedInterface.php  |    1 +
 .../robo/src/Contract/TaskInterface.php       |    1 +
 .../Contract/VerbosityThresholdInterface.php  |   30 +
 .../src/Contract/WrappedTaskInterface.php     |    1 +
 .../src/Exception/AbortTasksException.php     |    1 +
 .../robo/src/Exception/TaskException.php      |    8 +
 .../robo/src/Exception/TaskExitException.php  |    9 +
 .../robo/src/GlobalOptionsEventListener.php   |   19 +-
 .../consolidation/robo/src/LoadAllTasks.php   |    1 +
 .../robo/src/Log/ResultPrinter.php            |    4 +-
 .../robo/src/Log/RoboLogLevel.php             |    1 +
 .../robo/src/Log/RoboLogStyle.php             |    1 +
 .../consolidation/robo/src/Log/RoboLogger.php |    2 +-
 vendor/consolidation/robo/src/Result.php      |   18 +-
 vendor/consolidation/robo/src/ResultData.php  |    5 +-
 vendor/consolidation/robo/src/Robo.php        |   28 +-
 vendor/consolidation/robo/src/Runner.php      |   55 +-
 .../consolidation/robo/src/State/Consumer.php |    3 +-
 vendor/consolidation/robo/src/State/Data.php  |   13 +-
 .../robo/src/State/StateAwareInterface.php    |   12 +-
 .../robo/src/State/StateAwareTrait.php        |   21 +-
 .../robo/src/Symfony/SymfonyStyleInjector.php |   16 +
 .../robo/src/Task/ApiGen/ApiGen.php           |  116 +-
 .../robo/src/Task/ApiGen/loadTasks.php        |    3 +-
 .../robo/src/Task/Archive/Extract.php         |    2 +-
 .../robo/src/Task/Archive/Pack.php            |   39 +-
 .../robo/src/Task/Archive/loadTasks.php       |    9 +-
 .../robo/src/Task/Assets/ImageMinify.php      |   41 +-
 .../robo/src/Task/Assets/Less.php             |    1 +
 .../robo/src/Task/Assets/Minify.php           |   12 +-
 .../robo/src/Task/Assets/Scss.php             |   29 +-
 .../robo/src/Task/Assets/loadTasks.php        |   15 +-
 .../consolidation/robo/src/Task/Base/Exec.php |    6 +-
 .../robo/src/Task/Base/ExecStack.php          |    1 +
 .../robo/src/Task/Base/ParallelExec.php       |    3 +-
 .../robo/src/Task/Base/SymfonyCommand.php     |    1 +
 .../robo/src/Task/Base/Watch.php              |   19 +
 .../robo/src/Task/Base/loadShortcuts.php      |    1 +
 .../robo/src/Task/Base/loadTasks.php          |   14 +-
 .../consolidation/robo/src/Task/BaseTask.php  |    6 +-
 .../robo/src/Task/Bower/Base.php              |    8 +
 .../robo/src/Task/Bower/Install.php           |    1 +
 .../robo/src/Task/Bower/Update.php            |    1 +
 .../robo/src/Task/Bower/loadTasks.php         |    5 +-
 .../robo/src/Task/CommandStack.php            |    7 +-
 .../robo/src/Task/Composer/Base.php           |   24 +-
 .../robo/src/Task/Composer/Config.php         |   20 +-
 .../robo/src/Task/Composer/CreateProject.php  |   35 +
 .../robo/src/Task/Composer/DumpAutoload.php   |    3 +
 .../robo/src/Task/Composer/Init.php           |   21 +
 .../robo/src/Task/Composer/Install.php        |    1 +
 .../robo/src/Task/Composer/Remove.php         |   11 +
 .../src/Task/Composer/RequireDependency.php   |    5 +
 .../robo/src/Task/Composer/Update.php         |    1 +
 .../robo/src/Task/Composer/Validate.php       |   11 +
 .../robo/src/Task/Composer/loadTasks.php      |   19 +-
 .../robo/src/Task/Development/Changelog.php   |    5 +-
 .../Task/Development/GenerateMarkdownDoc.php  |    3 +-
 .../src/Task/Development/GenerateTask.php     |    1 +
 .../robo/src/Task/Development/GitHub.php      |    5 +-
 .../src/Task/Development/GitHubRelease.php    |    1 +
 .../robo/src/Task/Development/OpenBrowser.php |    3 +-
 .../robo/src/Task/Development/PackPhar.php    |    3 +-
 .../robo/src/Task/Development/PhpServer.php   |    1 +
 .../robo/src/Task/Development/SemVer.php      |   23 +-
 .../robo/src/Task/Development/loadTasks.php   |   17 +-
 .../robo/src/Task/Docker/Base.php             |    1 +
 .../robo/src/Task/Docker/Build.php            |    1 +
 .../robo/src/Task/Docker/Commit.php           |    3 +-
 .../robo/src/Task/Docker/Exec.php             |    5 +-
 .../robo/src/Task/Docker/Pull.php             |    1 +
 .../robo/src/Task/Docker/Remove.php           |    1 +
 .../robo/src/Task/Docker/Result.php           |    1 +
 .../robo/src/Task/Docker/Run.php              |    6 +-
 .../robo/src/Task/Docker/Start.php            |    1 +
 .../robo/src/Task/Docker/Stop.php             |    1 +
 .../robo/src/Task/Docker/loadTasks.php        |   17 +-
 .../robo/src/Task/File/Concat.php             |    5 +-
 .../robo/src/Task/File/Replace.php            |    1 +
 .../robo/src/Task/File/Write.php              |   27 +-
 .../robo/src/Task/File/loadTasks.php          |    9 +-
 .../robo/src/Task/Filesystem/BaseDir.php      |    1 +
 .../robo/src/Task/Filesystem/CleanDir.php     |    1 +
 .../robo/src/Task/Filesystem/CopyDir.php      |   13 +
 .../robo/src/Task/Filesystem/DeleteDir.php    |    1 +
 .../src/Task/Filesystem/FilesystemStack.php   |    1 +
 .../robo/src/Task/Filesystem/FlattenDir.php   |   10 +-
 .../robo/src/Task/Filesystem/MirrorDir.php    |    1 +
 .../src/Task/Filesystem/loadShortcuts.php     |    1 +
 .../robo/src/Task/Filesystem/loadTasks.php    |   17 +-
 .../consolidation/robo/src/Task/Gulp/Run.php  |    1 +
 .../robo/src/Task/Gulp/loadTasks.php          |    3 +-
 .../consolidation/robo/src/Task/Npm/Base.php  |    1 +
 .../robo/src/Task/Npm/Install.php             |    3 +-
 .../robo/src/Task/Npm/Update.php              |    3 +-
 .../robo/src/Task/Npm/loadTasks.php           |    5 +-
 .../robo/src/Task/Remote/Rsync.php            |    3 +
 .../robo/src/Task/Remote/loadTasks.php        |    5 +-
 .../consolidation/robo/src/Task/Simulator.php |    7 +-
 .../robo/src/Task/StackBasedTask.php          |    5 +-
 .../robo/src/Task/Testing/Atoum.php           |   10 +-
 .../robo/src/Task/Testing/Behat.php           |    8 +-
 .../robo/src/Task/Testing/Codecept.php        |    3 +-
 .../robo/src/Task/Testing/PHPUnit.php         |   14 +-
 .../robo/src/Task/Testing/Phpspec.php         |   41 +-
 .../robo/src/Task/Testing/loadTasks.php       |   17 +-
 .../robo/src/Task/Vcs/GitStack.php            |    2 +
 .../robo/src/Task/Vcs/HgStack.php             |    1 +
 .../robo/src/Task/Vcs/SvnStack.php            |    5 +-
 .../robo/src/Task/Vcs/loadShortcuts.php       |    1 +
 .../robo/src/Task/Vcs/loadTasks.php           |    7 +-
 .../consolidation/robo/src/TaskAccessor.php   |    1 +
 vendor/consolidation/robo/src/TaskInfo.php    |    1 +
 vendor/consolidation/robo/src/Tasks.php       |    1 +
 vendor/consolidation/self-update/VERSION      |    2 +-
 .../consolidation/self-update/composer.json   |    9 +-
 .../consolidation/self-update/composer.lock   |  307 +-
 .../site-alias/.scenarios.lock/install        |   14 +-
 .../.scenarios.lock/phpunit5/composer.json    |    7 +-
 .../.scenarios.lock/phpunit5/composer.lock    |  513 ++-
 vendor/consolidation/site-alias/.travis.yml   |    6 +-
 vendor/consolidation/site-alias/CHANGELOG.md  |    5 +
 vendor/consolidation/site-alias/LICENSE       |    2 +-
 vendor/consolidation/site-alias/README.md     |    2 +-
 vendor/consolidation/site-alias/VERSION       |    2 +-
 vendor/consolidation/site-alias/appveyor.yml  |    6 +-
 vendor/consolidation/site-alias/composer.json |   11 +-
 vendor/consolidation/site-alias/composer.lock | 1438 ++++---
 .../consolidation/site-process/CHANGELOG.md   |    8 +
 vendor/consolidation/site-process/README.md   |    2 +-
 vendor/consolidation/site-process/VERSION     |    2 +-
 .../consolidation/site-process/appveyor.yml   |    7 +-
 .../site-process/src/ProcessBase.php          |   10 +-
 .../site-process/src/SiteProcess.php          |   21 +
 .../site-process/tests/SiteProcessTest.php    |   13 +-
 vendor/cweagans/composer-patches/README.md    |   19 +-
 .../cweagans/composer-patches/composer.json   |    4 +-
 .../cweagans/composer-patches/composer.lock   | 1360 ++++++-
 .../cweagans/composer-patches/src/Patches.php |   36 +-
 vendor/dnoegel/php-xdg-base-dir/.gitignore    |    1 -
 vendor/dnoegel/php-xdg-base-dir/README.md     |   17 +-
 vendor/dnoegel/php-xdg-base-dir/composer.json |    4 +-
 .../dnoegel/php-xdg-base-dir/phpunit.xml.dist |   24 -
 vendor/dnoegel/php-xdg-base-dir/src/Xdg.php   |   21 +-
 .../php-xdg-base-dir/tests/XdgTest.php        |  116 -
 .../drush/.scenarios.lock/php5/composer.json  |    2 +-
 .../drush/.scenarios.lock/php5/composer.lock  |  185 +-
 vendor/drush/drush/.travis.yml                |    1 +
 vendor/drush/drush/composer.json              |    2 +-
 vendor/drush/drush/composer.lock              |   14 +-
 vendor/drush/drush/drush.info                 |    2 +-
 .../Commands/SiteAliasAlterCommands.php       |   13 +
 .../drush/examples/Commands/art/sandwich.txt  |   48 +-
 vendor/drush/drush/examples/example.drush.yml |    8 +-
 vendor/drush/drush/examples/example.site.yml  |   35 +-
 vendor/drush/drush/includes/drush.inc         |    2 +-
 vendor/drush/drush/src/Boot/DrupalBoot8.php   |    2 +-
 .../drush/src/Commands/core/EditCommands.php  |    2 +-
 .../drush/src/Commands/core/LoginCommands.php |   19 +-
 .../drush/src/Commands/core/RsyncCommands.php |    7 +-
 .../src/Commands/core/SiteInstallCommands.php |    2 +-
 .../drush/src/Commands/core/SshCommands.php   |    8 +-
 .../src/Commands/sql/SqlSyncCommands.php      |    4 +-
 .../Drupal/Commands/core/DrupalCommands.php   |    5 +-
 .../Drupal/Commands/core/QueueCommands.php    |    6 +-
 .../drush/src/Runtime/ShutdownHandler.php     |    2 +-
 .../php-console-color/.gitignore              |    3 -
 .../php-console-color/.travis.yml             |   24 -
 .../jakub-onderka/php-console-color/LICENSE   |   27 -
 .../jakub-onderka/php-console-color/README.md |   10 -
 .../jakub-onderka/php-console-color/build.xml |   93 -
 .../php-console-color/composer.json           |   23 -
 .../php-console-color/example.php             |   38 -
 .../php-console-color/phpunit.xml             |   16 -
 .../php-console-color/src/ConsoleColor.php    |  287 --
 .../src/InvalidStyleException.php             |   10 -
 .../tests/ConsoleColorTest.php                |  184 -
 .../php-console-highlighter/.gitignore        |    4 -
 .../php-console-highlighter/.travis.yml       |   22 -
 .../php-console-highlighter/README.md         |   42 -
 .../php-console-highlighter/build.xml         |   93 -
 .../php-console-highlighter/composer.json     |   28 -
 .../examples/snippet.php                      |   10 -
 .../examples/whole_file.php                   |   10 -
 .../examples/whole_file_line_numbers.php      |   10 -
 .../php-console-highlighter/phpunit.xml       |   15 -
 .../src/Highlighter.php                       |  263 --
 .../tests/HigligterTest.php                   |  274 --
 vendor/nikic/php-parser/.gitignore            |    4 -
 vendor/nikic/php-parser/.travis.yml           |   31 -
 vendor/nikic/php-parser/CHANGELOG.md          |  659 ---
 vendor/nikic/php-parser/LICENSE               |   44 +-
 vendor/nikic/php-parser/README.md             |    4 +-
 vendor/nikic/php-parser/UPGRADE-1.0.md        |  121 -
 vendor/nikic/php-parser/UPGRADE-2.0.md        |   74 -
 vendor/nikic/php-parser/UPGRADE-3.0.md        |  160 -
 vendor/nikic/php-parser/UPGRADE-4.0.md        |   77 -
 vendor/nikic/php-parser/composer.json         |    5 +-
 .../php-parser/doc/0_Introduction.markdown    |   80 -
 .../doc/2_Usage_of_basic_components.markdown  |  516 ---
 vendor/nikic/php-parser/doc/README.md         |   46 -
 .../doc/component/AST_builders.markdown       |  138 -
 .../Constant_expression_evaluation.markdown   |  115 -
 .../doc/component/Error_handling.markdown     |   75 -
 .../php-parser/doc/component/FAQ.markdown     |   68 -
 .../component/JSON_representation.markdown    |  131 -
 .../php-parser/doc/component/Lexer.markdown   |  159 -
 .../doc/component/Name_resolution.markdown    |   87 -
 .../doc/component/Performance.markdown        |   65 -
 .../doc/component/Pretty_printing.markdown    |   96 -
 .../doc/component/Walking_the_AST.markdown    |  337 --
 vendor/nikic/php-parser/grammar/README.md     |   10 +-
 vendor/nikic/php-parser/grammar/php5.y        |   38 +-
 vendor/nikic/php-parser/grammar/php7.y        |  332 +-
 .../php-parser/grammar/rebuildParsers.php     |   48 +-
 vendor/nikic/php-parser/grammar/tokens.y      |   15 +-
 .../lib/PhpParser/Builder/Param.php           |    6 +-
 .../lib/PhpParser/BuilderHelpers.php          |   22 +-
 .../php-parser/lib/PhpParser/Comment.php      |   98 +-
 .../Internal/PrintableNewAnonClassNode.php    |   10 +-
 .../lib/PhpParser/Internal/TokenStream.php    |   31 +-
 .../php-parser/lib/PhpParser/JsonDecoder.php  |    4 +-
 .../nikic/php-parser/lib/PhpParser/Lexer.php  |  217 +-
 .../lib/PhpParser/Lexer/Emulative.php         |  178 +-
 .../Lexer/TokenEmulator/AttributeEmulator.php |   56 +
 .../CoaleseEqualTokenEmulator.php             |   29 +-
 .../FlexibleDocStringEmulator.php             |   76 +
 .../Lexer/TokenEmulator/FnTokenEmulator.php   |   59 +-
 .../Lexer/TokenEmulator/KeywordEmulator.php   |   60 +
 .../TokenEmulator/MatchTokenEmulator.php      |   23 +
 .../TokenEmulator/NullsafeTokenEmulator.php   |   67 +
 .../NumericLiteralSeparatorEmulator.php       |  105 +
 .../Lexer/TokenEmulator/ReverseEmulator.php   |   36 +
 .../Lexer/TokenEmulator/TokenEmulator.php     |   25 +
 .../TokenEmulator/TokenEmulatorInterface.php  |   17 -
 .../nikic/php-parser/lib/PhpParser/Node.php   |    2 -
 .../php-parser/lib/PhpParser/Node/Arg.php     |   11 +-
 .../lib/PhpParser/Node/Attribute.php          |   34 +
 .../lib/PhpParser/Node/AttributeGroup.php     |   29 +
 .../php-parser/lib/PhpParser/Node/Const_.php  |    2 +-
 .../lib/PhpParser/Node/Expr/Array_.php        |    4 +-
 .../lib/PhpParser/Node/Expr/ArrowFunction.php |   12 +-
 .../lib/PhpParser/Node/Expr/Closure.php       |   14 +-
 .../lib/PhpParser/Node/Expr/Match_.php        |   31 +
 .../Node/Expr/NullsafeMethodCall.php          |   40 +
 .../Node/Expr/NullsafePropertyFetch.php       |   35 +
 .../lib/PhpParser/Node/Expr/Throw_.php        |   30 +
 .../lib/PhpParser/Node/FunctionLike.php       |   13 +-
 .../lib/PhpParser/Node/MatchArm.php           |   31 +
 .../php-parser/lib/PhpParser/Node/Name.php    |    2 +-
 .../php-parser/lib/PhpParser/Node/Param.php   |   29 +-
 .../lib/PhpParser/Node/Scalar/DNumber.php     |    2 +
 .../lib/PhpParser/Node/Scalar/LNumber.php     |    2 +
 .../lib/PhpParser/Node/Scalar/String_.php     |    4 +-
 .../lib/PhpParser/Node/Stmt/Catch_.php        |   14 +-
 .../lib/PhpParser/Node/Stmt/ClassConst.php    |   21 +-
 .../lib/PhpParser/Node/Stmt/ClassLike.php     |   61 +
 .../lib/PhpParser/Node/Stmt/ClassMethod.php   |   16 +-
 .../lib/PhpParser/Node/Stmt/Class_.php        |   14 +-
 .../lib/PhpParser/Node/Stmt/Function_.php     |   14 +-
 .../lib/PhpParser/Node/Stmt/Interface_.php    |   10 +-
 .../lib/PhpParser/Node/Stmt/Property.php      |   19 +-
 .../lib/PhpParser/Node/Stmt/Throw_.php        |    2 +-
 .../lib/PhpParser/Node/Stmt/Trait_.php        |    8 +-
 .../lib/PhpParser/Node/Stmt/TryCatch.php      |    4 +-
 .../lib/PhpParser/Node/UnionType.php          |   30 +
 .../php-parser/lib/PhpParser/NodeAbstract.php |   33 +-
 .../PhpParser/NodeVisitor/NameResolver.php    |   31 +-
 .../NodeVisitor/NodeConnectingVisitor.php     |   52 +
 .../NodeVisitor/ParentConnectingVisitor.php   |   41 +
 .../php-parser/lib/PhpParser/Parser/Php5.php  | 1461 ++++---
 .../php-parser/lib/PhpParser/Parser/Php7.php  | 2381 ++++++-----
 .../lib/PhpParser/Parser/Tokens.php           |  228 +-
 .../lib/PhpParser/ParserAbstract.php          |   42 +-
 .../lib/PhpParser/PrettyPrinter/Standard.php  |  123 +-
 .../lib/PhpParser/PrettyPrinterAbstract.php   |  120 +-
 vendor/nikic/php-parser/phpunit.xml.dist      |   20 -
 .../test/PhpParser/Builder/ClassTest.php      |  153 -
 .../test/PhpParser/Builder/FunctionTest.php   |  114 -
 .../test/PhpParser/Builder/InterfaceTest.php  |  102 -
 .../test/PhpParser/Builder/MethodTest.php     |  162 -
 .../test/PhpParser/Builder/NamespaceTest.php  |   46 -
 .../test/PhpParser/Builder/ParamTest.php      |  166 -
 .../test/PhpParser/Builder/PropertyTest.php   |  147 -
 .../test/PhpParser/Builder/TraitTest.php      |   46 -
 .../Builder/TraitUseAdaptationTest.php        |  106 -
 .../test/PhpParser/Builder/TraitUseTest.php   |   52 -
 .../test/PhpParser/Builder/UseTest.php        |   36 -
 .../test/PhpParser/BuilderFactoryTest.php     |  327 --
 .../test/PhpParser/CodeParsingTest.php        |  119 -
 .../test/PhpParser/CodeTestAbstract.php       |   26 -
 .../test/PhpParser/CodeTestParser.php         |   68 -
 .../php-parser/test/PhpParser/CommentTest.php |   74 -
 .../test/PhpParser/ConstExprEvaluatorTest.php |  130 -
 .../PhpParser/ErrorHandler/CollectingTest.php |   23 -
 .../PhpParser/ErrorHandler/ThrowingTest.php   |   15 -
 .../php-parser/test/PhpParser/ErrorTest.php   |  104 -
 .../test/PhpParser/Internal/DifferTest.php    |   65 -
 .../test/PhpParser/JsonDecoderTest.php        |   43 -
 .../test/PhpParser/Lexer/EmulativeTest.php    |  210 -
 .../php-parser/test/PhpParser/LexerTest.php   |  263 --
 .../test/PhpParser/NameContextTest.php        |   65 -
 .../test/PhpParser/Node/IdentifierTest.php    |   29 -
 .../test/PhpParser/Node/NameTest.php          |  157 -
 .../PhpParser/Node/Scalar/MagicConstTest.php  |   26 -
 .../test/PhpParser/Node/Scalar/StringTest.php |   61 -
 .../PhpParser/Node/Stmt/ClassConstTest.php    |   34 -
 .../PhpParser/Node/Stmt/ClassMethodTest.php   |  123 -
 .../test/PhpParser/Node/Stmt/ClassTest.php    |   59 -
 .../PhpParser/Node/Stmt/InterfaceTest.php     |   26 -
 .../test/PhpParser/Node/Stmt/PropertyTest.php |   44 -
 .../test/PhpParser/NodeAbstractTest.php       |  325 --
 .../test/PhpParser/NodeDumperTest.php         |  106 -
 .../test/PhpParser/NodeFinderTest.php         |   59 -
 .../test/PhpParser/NodeTraverserTest.php      |  344 --
 .../NodeVisitor/FindingVisitorTest.php        |   53 -
 .../NodeVisitor/FirstFindingVisitorTest.php   |   38 -
 .../NodeVisitor/NameResolverTest.php          |  505 ---
 .../test/PhpParser/Parser/MultipleTest.php    |   94 -
 .../test/PhpParser/Parser/Php5Test.php        |   13 -
 .../test/PhpParser/Parser/Php7Test.php        |   13 -
 .../test/PhpParser/ParserFactoryTest.php      |   36 -
 .../php-parser/test/PhpParser/ParserTest.php  |  183 -
 .../test/PhpParser/PrettyPrinterTest.php      |  307 --
 vendor/nikic/php-parser/test/bootstrap.php    |   31 -
 .../addingPropertyType.test                   |   39 -
 .../code/formatPreservation/anonClasses.test  |   28 -
 .../code/formatPreservation/array_spread.test |   29 -
 .../formatPreservation/arrow_function.test    |   97 -
 .../test/code/formatPreservation/basic.test   |  190 -
 .../formatPreservation/blockConversion.test   |   29 -
 .../code/formatPreservation/comments.test     |   52 -
 .../emptyListInsertion.test                   |  110 -
 .../test/code/formatPreservation/fixup.test   |   67 -
 .../code/formatPreservation/inlineHtml.test   |   54 -
 .../insertionOfNullable.test                  |  176 -
 .../formatPreservation/listInsertion.test     |  309 --
 .../listInsertionIndentation.test             |   17 -
 .../code/formatPreservation/listRemoval.test  |   41 -
 .../formatPreservation/modifierChange.test    |   33 -
 .../formatPreservation/nopCommentAtEnd.test   |   11 -
 .../formatPreservation/removalViaNull.test    |  194 -
 .../removingPropertyType.test                 |   22 -
 .../code/formatPreservation/traitAlias.test   |   19 -
 .../test/code/parser/blockComments.test       |   36 -
 .../test/code/parser/commentAtEndOfClass.test |   38 -
 .../php-parser/test/code/parser/comments.test |  108 -
 .../code/parser/errorHandling/eofError.test   |   36 -
 .../parser/errorHandling/lexerErrors.test     |  140 -
 .../code/parser/errorHandling/recovery.test   | 1417 -------
 .../test/code/parser/expr/arrayDef.test       |  173 -
 .../code/parser/expr/arrayDestructuring.test  |  164 -
 .../test/code/parser/expr/arraySpread.test    |  432 --
 .../test/code/parser/expr/arrow_function.test |  145 -
 .../test/code/parser/expr/assign.test         |  381 --
 .../test/code/parser/expr/assignNewByRef.test |   43 -
 .../test/code/parser/expr/cast.test           |   94 -
 .../test/code/parser/expr/clone.test          |   15 -
 .../test/code/parser/expr/closure.test        |  176 -
 .../test/code/parser/expr/comparison.test     |  129 -
 .../test/code/parser/expr/constant_expr.test  |  694 ----
 .../test/code/parser/expr/errorSuppress.test  |   14 -
 .../test/code/parser/expr/exit.test           |   46 -
 .../code/parser/expr/fetchAndCall/args.test   |  109 -
 .../parser/expr/fetchAndCall/constFetch.test  |   43 -
 .../expr/fetchAndCall/constantDeref.test      |  265 --
 .../parser/expr/fetchAndCall/funcCall.test    |  158 -
 .../parser/expr/fetchAndCall/newDeref.test    |   82 -
 .../expr/fetchAndCall/objectAccess.test       |  184 -
 .../expr/fetchAndCall/simpleArrayAccess.test  |   72 -
 .../parser/expr/fetchAndCall/staticCall.test  |  214 -
 .../fetchAndCall/staticPropertyFetch.test     |  113 -
 .../test/code/parser/expr/includeAndEval.test |   50 -
 .../test/code/parser/expr/issetAndEmpty.test  |   88 -
 .../test/code/parser/expr/listReferences.test |   92 -
 .../test/code/parser/expr/listWithKeys.test   |   84 -
 .../test/code/parser/expr/logic.test          |  190 -
 .../test/code/parser/expr/math.test           |  313 --
 .../php-parser/test/code/parser/expr/new.test |  187 -
 .../code/parser/expr/newWithoutClass.test     |   25 -
 .../test/code/parser/expr/print.test          |   14 -
 .../test/code/parser/expr/shellExec.test      |   56 -
 .../code/parser/expr/ternaryAndCoalesce.test  |  174 -
 .../test/code/parser/expr/trailingCommas.test |  140 -
 .../expr/uvs/globalNonSimpleVarError.test     |   27 -
 .../code/parser/expr/uvs/indirectCall.test    |  511 ---
 .../test/code/parser/expr/uvs/isset.test      |   87 -
 .../test/code/parser/expr/uvs/misc.test       |  129 -
 .../test/code/parser/expr/uvs/new.test        |  119 -
 .../code/parser/expr/uvs/staticProperty.test  |  123 -
 .../test/code/parser/expr/variable.test       |   67 -
 .../test/code/parser/nopPositions.test        |   13 -
 .../code/parser/scalar/constantString.test    |   86 -
 .../test/code/parser/scalar/docString.test    |  115 -
 .../code/parser/scalar/docStringNewlines.test |   77 -
 .../parser/scalar/encapsedNegVarOffset.test   |   82 -
 .../code/parser/scalar/encapsedString.test    |  344 --
 .../code/parser/scalar/flexibleDocString.test |  361 --
 .../scalar/flexibleDocStringErrors.test       |  117 -
 .../test/code/parser/scalar/float.test        |  108 -
 .../test/code/parser/scalar/int.test          |   61 -
 .../test/code/parser/scalar/invalidOctal.test |   26 -
 .../test/code/parser/scalar/magicConst.test   |   47 -
 .../code/parser/scalar/unicodeEscape.test     |   26 -
 .../test/code/parser/semiReserved.test        |  490 ---
 .../code/parser/stmt/blocklessStatement.test  |  130 -
 .../test/code/parser/stmt/class/abstract.test |   45 -
 .../code/parser/stmt/class/anonymous.test     |  214 -
 .../code/parser/stmt/class/conditional.test   |   35 -
 .../stmt/class/constModifierErrors.test       |  137 -
 .../parser/stmt/class/constModifiers.test     |   77 -
 .../test/code/parser/stmt/class/final.test    |   19 -
 .../parser/stmt/class/implicitPublic.test     |  110 -
 .../code/parser/stmt/class/interface.test     |   40 -
 .../test/code/parser/stmt/class/modifier.test |  254 --
 .../test/code/parser/stmt/class/name.test     |  266 --
 .../code/parser/stmt/class/php4Style.test     |   59 -
 .../code/parser/stmt/class/propertyTypes.test |   70 -
 .../test/code/parser/stmt/class/simple.test   |  185 -
 .../code/parser/stmt/class/staticMethod.test  |  175 -
 .../test/code/parser/stmt/class/trait.test    |  188 -
 .../test/code/parser/stmt/const.test          |   48 -
 .../test/code/parser/stmt/controlFlow.test    |   59 -
 .../test/code/parser/stmt/declare.test        |   70 -
 .../test/code/parser/stmt/echo.test           |   32 -
 .../function/builtinTypeDeclarations.test     |   87 -
 .../test/code/parser/stmt/function/byRef.test |   49 -
 .../parser/stmt/function/conditional.test     |   35 -
 .../parser/stmt/function/defaultValues.test   |  173 -
 .../parser/stmt/function/nullableTypes.test   |   55 -
 .../parser/stmt/function/returnTypes.test     |   64 -
 .../parser/stmt/function/specialVars.test     |   57 -
 .../stmt/function/typeDeclarations.test       |   63 -
 .../code/parser/stmt/function/variadic.test   |  134 -
 .../stmt/function/variadicDefaultValue.test   |   31 -
 .../code/parser/stmt/generator/basic.test     |  319 --
 .../stmt/generator/yieldPrecedence.test       |  253 --
 .../stmt/generator/yieldUnaryPrecedence.test  |   56 -
 .../test/code/parser/stmt/haltCompiler.test   |   61 -
 .../stmt/haltCompilerInvalidSyntax.test       |    6 -
 .../code/parser/stmt/haltCompilerOffset.test  |   36 -
 .../stmt/haltCompilerOutermostScope.test      |    8 -
 .../test/code/parser/stmt/hashbang.test       |   26 -
 .../php-parser/test/code/parser/stmt/if.test  |  103 -
 .../test/code/parser/stmt/inlineHTML.test     |   33 -
 .../test/code/parser/stmt/loop/do.test        |   17 -
 .../test/code/parser/stmt/loop/for.test       |  110 -
 .../test/code/parser/stmt/loop/foreach.test   |  168 -
 .../test/code/parser/stmt/loop/while.test     |   25 -
 .../test/code/parser/stmt/multiCatch.test     |   75 -
 .../code/parser/stmt/namespace/alias.test     |  178 -
 .../code/parser/stmt/namespace/braced.test    |   46 -
 .../stmt/namespace/commentAfterNamespace.test |   22 -
 .../code/parser/stmt/namespace/groupUse.test  |  188 -
 .../parser/stmt/namespace/groupUseErrors.test |  113 -
 .../stmt/namespace/groupUsePositions.test     |   28 -
 .../stmt/namespace/groupUseTrailingComma.test |   47 -
 .../parser/stmt/namespace/invalidName.test    |   87 -
 .../test/code/parser/stmt/namespace/mix.test  |  103 -
 .../test/code/parser/stmt/namespace/name.test |   50 -
 .../code/parser/stmt/namespace/nested.test    |   30 -
 .../code/parser/stmt/namespace/notBraced.test |   49 -
 .../stmt/namespace/nsAfterHashbang.test       |   22 -
 .../parser/stmt/namespace/outsideStmt.test    |   60 -
 .../stmt/namespace/outsideStmtInvalid.test    |  109 -
 .../test/code/parser/stmt/switch.test         |   81 -
 .../test/code/parser/stmt/tryCatch.test       |  144 -
 .../code/parser/stmt/tryWithoutCatch.test     |   29 -
 .../test/code/parser/stmt/unset.test          |   26 -
 .../test/code/prettyPrinter/comments.test     |   67 -
 .../prettyPrinter/commentsInCommaList.test    |   53 -
 .../prettyPrinter/expr/anonymousClass.test    |   27 -
 .../expr/arrayDestructuring.test              |   14 -
 .../code/prettyPrinter/expr/arraySpread.test  |    8 -
 .../prettyPrinter/expr/arrow_function.test    |   18 -
 .../test/code/prettyPrinter/expr/call.test    |   13 -
 .../test/code/prettyPrinter/expr/closure.test |   18 -
 .../prettyPrinter/expr/constant_deref.test    |   13 -
 .../code/prettyPrinter/expr/docStrings.test   |   86 -
 .../test/code/prettyPrinter/expr/include.test |    7 -
 .../code/prettyPrinter/expr/intrinsics.test   |   29 -
 .../test/code/prettyPrinter/expr/list.test    |   19 -
 .../code/prettyPrinter/expr/literals.test     |  158 -
 .../test/code/prettyPrinter/expr/numbers.test |   35 -
 .../code/prettyPrinter/expr/operators.test    |  151 -
 .../code/prettyPrinter/expr/parentheses.test  |   86 -
 .../prettyPrinter/expr/shortArraySyntax.test  |   11 -
 .../prettyPrinter/expr/stringEscaping.test    |   23 -
 .../test/code/prettyPrinter/expr/uvs.test     |   23 -
 .../code/prettyPrinter/expr/variables.test    |   73 -
 .../test/code/prettyPrinter/expr/yield.test   |   46 -
 .../inlineHTMLandPHPtest.file-test            |   58 -
 .../code/prettyPrinter/nestedInlineHTML.test  |   16 -
 .../prettyPrinter/onlyInlineHTML.file-test    |   19 -
 .../test/code/prettyPrinter/onlyPHP.file-test |   16 -
 .../test/code/prettyPrinter/stmt/alias.test   |   20 -
 .../prettyPrinter/stmt/break_continue.test    |   13 -
 .../test/code/prettyPrinter/stmt/class.test   |   53 -
 .../code/prettyPrinter/stmt/class_const.test  |   20 -
 .../test/code/prettyPrinter/stmt/const.test   |   11 -
 .../test/code/prettyPrinter/stmt/declare.test |   17 -
 .../code/prettyPrinter/stmt/do_while.test     |   10 -
 .../test/code/prettyPrinter/stmt/for.test     |   28 -
 .../test/code/prettyPrinter/stmt/foreach.test |   28 -
 .../stmt/function_signatures.test             |   43 -
 .../stmt/global_static_variables.test         |   11 -
 .../test/code/prettyPrinter/stmt/goto.test    |    9 -
 .../code/prettyPrinter/stmt/groupUse.test     |   16 -
 .../prettyPrinter/stmt/haltCompiler.file-test |   27 -
 .../test/code/prettyPrinter/stmt/if.test      |   16 -
 .../code/prettyPrinter/stmt/multiCatch.test   |   19 -
 .../code/prettyPrinter/stmt/namespaces.test   |   50 -
 .../prettyPrinter/stmt/nullable_types.test    |   11 -
 .../code/prettyPrinter/stmt/properties.test   |   20 -
 .../test/code/prettyPrinter/stmt/switch.test  |   37 -
 .../test/code/prettyPrinter/stmt/throw.test   |    7 -
 .../code/prettyPrinter/stmt/traitUse.test     |   25 -
 .../code/prettyPrinter/stmt/tryCatch.test     |   24 -
 .../test/code/prettyPrinter/stmt/while.test   |   10 -
 vendor/nikic/php-parser/test/updateTests.php  |   32 -
 .../nikic/php-parser/test_old/run-php-src.sh  |    4 -
 vendor/nikic/php-parser/test_old/run.php      |  271 --
 .../.editorconfig                             |   18 +
 .../composer-installers-extender/.travis.yml  |   20 +
 .../composer-installers-extender/CHANGELOG.md |   55 +
 .../composer-installers-extender/LICENSE      |   21 +
 .../composer-installers-extender/README.md    |  100 +-
 .../composer.json                             |   78 +-
 .../composer-installers-extender/phpcs.xml    |   22 +
 .../composer-installers-extender/phpunit.xml  |   27 +
 .../src/Installer.php                         |   35 -
 .../src/InstallerHelper.php                   |   15 -
 .../src/Installers/CustomInstaller.php        |   18 +
 .../src/Installers/Installer.php              |   53 +
 .../src/Plugin.php                            |   32 +-
 .../src/Installers/CustomInstallerTest.php    |   18 +
 .../tests/src/Installers/InstallerTest.php    |  117 +
 .../tests/src/PluginTest.php                  |   55 +
 .../quicksilver-pushback}/LICENSE             |    5 +-
 .../quicksilver-pushback/README.md            |   41 +
 .../quicksilver-pushback/composer.json        |    9 +
 .../quicksilver-pushback/lean-repo-utils.php  |   64 +
 .../push-back-to-github.php                   |  231 ++
 vendor/psy/psysh/.editorconfig                |   15 -
 vendor/psy/psysh/.github/CONTRIBUTING.md      |    9 -
 vendor/psy/psysh/.gitignore                   |    9 -
 vendor/psy/psysh/.phan/config.php             |    6 -
 vendor/psy/psysh/.php_cs                      |   32 -
 vendor/psy/psysh/.styleci.yml                 |   29 -
 vendor/psy/psysh/.travis.yml                  |   44 -
 vendor/psy/psysh/Makefile                     |   95 -
 vendor/psy/psysh/README.md                    |    1 +
 vendor/psy/psysh/bin/build-stub               |   22 -
 vendor/psy/psysh/bin/psysh                    |   38 +-
 vendor/psy/psysh/box.json.dist                |   12 -
 vendor/psy/psysh/composer.json                |   16 +-
 vendor/psy/psysh/phpunit.xml.dist             |   12 -
 vendor/psy/psysh/src/CodeCleaner.php          |   26 +-
 .../src/CodeCleaner/AbstractClassPass.php     |    6 +-
 .../CodeCleaner/AssignThisVariablePass.php    |    4 +-
 .../CallTimePassByReferencePass.php           |    4 +-
 .../psysh/src/CodeCleaner/CalledClassPass.php |    2 +-
 .../psysh/src/CodeCleaner/CodeCleanerPass.php |    2 +-
 .../CodeCleaner/EmptyArrayDimFetchPass.php    |   50 +
 vendor/psy/psysh/src/CodeCleaner/ExitPass.php |    5 +-
 .../psysh/src/CodeCleaner/FinalClassPass.php  |    4 +-
 .../src/CodeCleaner/FunctionContextPass.php   |    2 +-
 .../FunctionReturnInWriteContextPass.php      |   17 +-
 .../src/CodeCleaner/ImplicitReturnPass.php    |    2 +-
 .../psysh/src/CodeCleaner/InstanceOfPass.php  |   12 +-
 .../src/CodeCleaner/LabelContextPass.php      |   91 +
 .../src/CodeCleaner/LeavePsyshAlonePass.php   |    2 +-
 .../psysh/src/CodeCleaner/LegacyEmptyPass.php |   73 -
 vendor/psy/psysh/src/CodeCleaner/ListPass.php |    2 +-
 .../psysh/src/CodeCleaner/LoopContextPass.php |    2 +-
 .../src/CodeCleaner/MagicConstantsPass.php    |    4 +-
 .../src/CodeCleaner/NamespaceAwarePass.php    |    2 +-
 .../psysh/src/CodeCleaner/NamespacePass.php   |    4 +-
 .../psysh/src/CodeCleaner/NoReturnValue.php   |    6 +-
 .../CodeCleaner/PassableByReferencePass.php   |    8 +-
 .../psy/psysh/src/CodeCleaner/RequirePass.php |    5 +-
 .../psysh/src/CodeCleaner/ReturnTypePass.php  |  118 +
 .../psysh/src/CodeCleaner/StrictTypesPass.php |    4 +-
 .../src/CodeCleaner/UseStatementPass.php      |   44 +-
 .../src/CodeCleaner/ValidClassNamePass.php    |   12 +-
 .../src/CodeCleaner/ValidConstantPass.php     |    2 +-
 .../src/CodeCleaner/ValidConstructorPass.php  |    2 +-
 .../src/CodeCleaner/ValidFunctionNamePass.php |    2 +-
 .../psy/psysh/src/Command/BufferCommand.php   |    4 +-
 vendor/psy/psysh/src/Command/ClearCommand.php |    4 +-
 vendor/psy/psysh/src/Command/Command.php      |   23 +-
 vendor/psy/psysh/src/Command/DocCommand.php   |  132 +-
 vendor/psy/psysh/src/Command/DumpCommand.php  |    4 +-
 vendor/psy/psysh/src/Command/EditCommand.php  |    9 +-
 vendor/psy/psysh/src/Command/ExitCommand.php  |    2 +-
 vendor/psy/psysh/src/Command/HelpCommand.php  |   15 +-
 .../psy/psysh/src/Command/HistoryCommand.php  |    6 +-
 vendor/psy/psysh/src/Command/ListCommand.php  |   28 +-
 .../ListCommand/ClassConstantEnumerator.php   |   13 +-
 .../Command/ListCommand/ClassEnumerator.php   |   44 +-
 .../ListCommand/ConstantEnumerator.php        |   81 +-
 .../src/Command/ListCommand/Enumerator.php    |   14 +-
 .../ListCommand/FunctionEnumerator.php        |   48 +-
 .../ListCommand/GlobalVariableEnumerator.php  |    8 +-
 .../ListCommand/InterfaceEnumerator.php       |   89 -
 .../Command/ListCommand/MethodEnumerator.php  |   15 +-
 .../ListCommand/PropertyEnumerator.php        |   16 +-
 .../Command/ListCommand/TraitEnumerator.php   |   89 -
 .../ListCommand/VariableEnumerator.php        |    8 +-
 vendor/psy/psysh/src/Command/ParseCommand.php |    8 +-
 .../psysh/src/Command/PsyVersionCommand.php   |    4 +-
 .../psysh/src/Command/ReflectingCommand.php   |   48 +-
 vendor/psy/psysh/src/Command/ShowCommand.php  |   51 +-
 vendor/psy/psysh/src/Command/SudoCommand.php  |    6 +-
 .../psy/psysh/src/Command/ThrowUpCommand.php  |   28 +-
 .../psy/psysh/src/Command/TimeitCommand.php   |    4 +-
 .../Command/TimeitCommand/TimeitVisitor.php   |   19 +-
 vendor/psy/psysh/src/Command/TraceCommand.php |   80 +-
 .../psy/psysh/src/Command/WhereamiCommand.php |   59 +-
 vendor/psy/psysh/src/Command/WtfCommand.php   |   15 +-
 vendor/psy/psysh/src/ConfigPaths.php          |   51 +-
 vendor/psy/psysh/src/Configuration.php        |  548 ++-
 vendor/psy/psysh/src/ConsoleColorFactory.php  |   51 +-
 vendor/psy/psysh/src/Context.php              |    8 +-
 vendor/psy/psysh/src/ContextAware.php         |    2 +-
 .../psysh/src/Exception/BreakException.php    |    2 +-
 .../src/Exception/DeprecatedException.php     |    2 +-
 .../psysh/src/Exception/ErrorException.php    |   16 +-
 vendor/psy/psysh/src/Exception/Exception.php  |    2 +-
 .../src/Exception/FatalErrorException.php     |   14 +-
 .../src/Exception/ParseErrorException.php     |    2 +-
 .../psysh/src/Exception/RuntimeException.php  |    8 +-
 .../psysh/src/Exception/ThrowUpException.php  |    2 +-
 .../src/Exception/TypeErrorException.php      |    2 +-
 .../Exception/UnexpectedTargetException.php   |   37 +
 vendor/psy/psysh/src/ExecutionClosure.php     |   45 +-
 vendor/psy/psysh/src/ExecutionLoop.php        |   67 -
 .../src/ExecutionLoop/AbstractListener.php    |    2 +-
 .../psy/psysh/src/ExecutionLoop/Listener.php  |    2 +-
 .../psysh/src/ExecutionLoop/ProcessForker.php |   73 +-
 .../src/ExecutionLoop/RunkitReloader.php      |    2 +-
 vendor/psy/psysh/src/ExecutionLoopClosure.php |   10 +-
 .../psy/psysh/src/Formatter/CodeFormatter.php |  297 +-
 .../psysh/src/Formatter/DocblockFormatter.php |   12 +-
 vendor/psy/psysh/src/Formatter/Formatter.php  |   12 +-
 .../src/Formatter/ReflectorFormatter.php      |   25 +
 .../src/Formatter/SignatureFormatter.php      |   10 +-
 .../psysh/src/Formatter/TraceFormatter.php    |  116 +
 vendor/psy/psysh/src/Input/CodeArgument.php   |    2 +-
 vendor/psy/psysh/src/Input/FilterOptions.php  |   16 +-
 vendor/psy/psysh/src/Input/ShellInput.php     |   10 +-
 vendor/psy/psysh/src/Input/SilentInput.php    |    2 +-
 vendor/psy/psysh/src/Output/OutputPager.php   |    2 +-
 vendor/psy/psysh/src/Output/PassthruPager.php |    2 +-
 .../psy/psysh/src/Output/ProcOutputPager.php  |    5 +-
 vendor/psy/psysh/src/Output/ShellOutput.php   |   18 +-
 vendor/psy/psysh/src/ParserFactory.php        |    6 +-
 vendor/psy/psysh/src/Readline/GNUReadline.php |    7 +-
 vendor/psy/psysh/src/Readline/HoaConsole.php  |   20 +-
 vendor/psy/psysh/src/Readline/Libedit.php     |   26 +-
 vendor/psy/psysh/src/Readline/Readline.php    |    4 +-
 vendor/psy/psysh/src/Readline/Transient.php   |    2 +-
 .../Reflection/ReflectionClassConstant.php    |    6 +-
 .../src/Reflection/ReflectionConstant.php     |    2 +-
 .../src/Reflection/ReflectionConstant_.php    |    4 +-
 .../ReflectionLanguageConstruct.php           |    2 +-
 .../ReflectionLanguageConstructParameter.php  |    2 +-
 .../src/Reflection/ReflectionNamespace.php    |   60 +
 vendor/psy/psysh/src/Shell.php                |  275 +-
 vendor/psy/psysh/src/Sudo.php                 |    2 +-
 vendor/psy/psysh/src/Sudo/SudoVisitor.php     |   11 +-
 .../psysh/src/TabCompletion/AutoCompleter.php |    2 +-
 .../Matcher/AbstractContextAwareMatcher.php   |    2 +-
 .../AbstractDefaultParametersMatcher.php      |    2 +-
 .../TabCompletion/Matcher/AbstractMatcher.php |    4 +-
 .../Matcher/ClassAttributesMatcher.php        |    2 +-
 .../ClassMethodDefaultParametersMatcher.php   |    2 +-
 .../Matcher/ClassMethodsMatcher.php           |    2 +-
 .../Matcher/ClassNamesMatcher.php             |    4 +-
 .../TabCompletion/Matcher/CommandsMatcher.php |    2 +-
 .../Matcher/ConstantsMatcher.php              |    2 +-
 .../FunctionDefaultParametersMatcher.php      |    2 +-
 .../Matcher/FunctionsMatcher.php              |    2 +-
 .../TabCompletion/Matcher/KeywordsMatcher.php |    2 +-
 .../Matcher/MongoClientMatcher.php            |    2 +-
 .../Matcher/MongoDatabaseMatcher.php          |    2 +-
 .../Matcher/ObjectAttributesMatcher.php       |    2 +-
 .../ObjectMethodDefaultParametersMatcher.php  |    2 +-
 .../Matcher/ObjectMethodsMatcher.php          |    2 +-
 .../Matcher/VariablesMatcher.php              |    2 +-
 vendor/psy/psysh/src/Util/Docblock.php        |    7 +-
 vendor/psy/psysh/src/Util/Json.php            |    2 +-
 vendor/psy/psysh/src/Util/Mirror.php          |   75 +-
 vendor/psy/psysh/src/Util/Str.php             |    2 +-
 vendor/psy/psysh/src/VarDumper/Cloner.php     |    2 +-
 vendor/psy/psysh/src/VarDumper/Dumper.php     |    2 +-
 vendor/psy/psysh/src/VarDumper/Presenter.php  |    2 +-
 .../psysh/src/VarDumper/PresenterAware.php    |    2 +-
 .../psy/psysh/src/VersionUpdater/Checker.php  |    2 +-
 .../src/VersionUpdater/GitHubChecker.php      |    2 +-
 .../src/VersionUpdater/IntervalChecker.php    |    2 +-
 .../psysh/src/VersionUpdater/NoopChecker.php  |    2 +-
 vendor/psy/psysh/src/functions.php            |  138 +-
 vendor/psy/psysh/test/ClassWithSecrets.php    |   37 -
 .../CodeCleaner/AbstractClassPassTest.php     |   57 -
 .../AssignThisVariablePassTest.php            |   58 -
 .../CallTimePassByReferencePassTest.php       |   59 -
 .../test/CodeCleaner/CalledClassPassTest.php  |   90 -
 .../test/CodeCleaner/CodeCleanerTestCase.php  |   41 -
 .../psysh/test/CodeCleaner/ExitPassTest.php   |   59 -
 .../test/CodeCleaner/FinalClassPassTest.php   |   65 -
 .../Fixtures/ClassWithCallStatic.php          |   20 -
 .../CodeCleaner/Fixtures/ClassWithStatic.php  |   20 -
 .../CodeCleaner/Fixtures/TraitWithStatic.php  |   20 -
 .../CodeCleaner/FunctionContextPassTest.php   |   56 -
 .../FunctionReturnInWriteContextPassTest.php  |   91 -
 .../CodeCleaner/ImplicitReturnPassTest.php    |  112 -
 .../test/CodeCleaner/InstanceOfPassTest.php   |   72 -
 .../CodeCleaner/LeavePsyshAlonePassTest.php   |   69 -
 .../test/CodeCleaner/LegacyEmptyPassTest.php  |   76 -
 .../psysh/test/CodeCleaner/ListPassTest.php   |  115 -
 .../test/CodeCleaner/LoopContextPassTest.php  |  108 -
 .../CodeCleaner/MagicConstantsPassTest.php    |   39 -
 .../test/CodeCleaner/NamespacePassTest.php    |   59 -
 .../test/CodeCleaner/NoReturnValueTest.php    |   32 -
 .../PassableByReferencePassTest.php           |  104 -
 .../test/CodeCleaner/RequirePassTest.php      |   93 -
 .../test/CodeCleaner/StrictTypesPassTest.php  |   52 -
 .../test/CodeCleaner/UseStatementPassTest.php |  102 -
 .../CodeCleaner/ValidClassNamePassTest.php    |  325 --
 .../CodeCleaner/ValidConstantPassTest.php     |   65 -
 .../CodeCleaner/ValidConstructorPassTest.php  |   93 -
 .../CodeCleaner/ValidFunctionNamePassTest.php |  180 -
 vendor/psy/psysh/test/CodeCleanerTest.php     |  131 -
 .../psysh/test/Command/ExitCommandTest.php    |   29 -
 .../psysh/test/Command/ThrowUpCommandTest.php |   89 -
 .../TimeitCommand/TimeitVisitorTest.php       |   52 -
 vendor/psy/psysh/test/ConfigurationTest.php   |  256 --
 .../psysh/test/ConsoleColorFactoryTest.php    |   51 -
 vendor/psy/psysh/test/ContextTest.php         |  325 --
 .../test/Exception/BreakExceptionTest.php     |   42 -
 .../test/Exception/ErrorExceptionTest.php     |  125 -
 .../Exception/FatalErrorExceptionTest.php     |   51 -
 .../Exception/ParseErrorExceptionTest.php     |   42 -
 .../test/Exception/RuntimeExceptionTest.php   |   30 -
 .../test/Exception/ThrowUpExceptionTest.php   |   66 -
 .../test/Exception/TypeErrorExceptionTest.php |   52 -
 vendor/psy/psysh/test/FakeShell.php           |   29 -
 .../test/Formatter/CodeFormatterTest.php      |  129 -
 .../test/Formatter/DocblockFormatterTest.php  |   63 -
 .../test/Formatter/Fixtures/BoringTrait.php   |   20 -
 .../test/Formatter/Fixtures/SomeClass.php     |   30 -
 .../test/Formatter/SignatureFormatterTest.php |   95 -
 .../psy/psysh/test/Input/CodeArgumentTest.php |   52 -
 .../psysh/test/Input/FilterOptionsTest.php    |  105 -
 .../psy/psysh/test/Input/ShellInputTest.php   |  254 --
 vendor/psy/psysh/test/ParserTestCase.php      |   97 -
 .../psysh/test/Readline/GNUReadlineTest.php   |   80 -
 .../psysh/test/Readline/HoaConsoleTest.php    |   31 -
 .../psy/psysh/test/Readline/LibeditTest.php   |  128 -
 .../psy/psysh/test/Readline/TransientTest.php |   76 -
 .../ReflectionClassConstantTest.php           |   81 -
 .../Reflection/ReflectionConstantBCTest.php   |   26 -
 .../Reflection/ReflectionConstantTest.php     |  114 -
 ...flectionLanguageConstructParameterTest.php |   64 -
 .../ReflectionLanguageConstructTest.php       |  102 -
 vendor/psy/psysh/test/ShellTest.php           |  442 --
 .../psy/psysh/test/Sudo/SudoVisitorTest.php   |  142 -
 vendor/psy/psysh/test/SudoTest.php            |   80 -
 .../test/TabCompletion/AutoCompleterTest.php  |  145 -
 .../psysh/test/TabCompletion/StaticSample.php |   27 -
 vendor/psy/psysh/test/Util/DocblockTest.php   |  100 -
 vendor/psy/psysh/test/Util/MirrorTest.php     |   86 -
 vendor/psy/psysh/test/Util/StrTest.php        |   31 -
 .../test/VersionUpdater/GitHubCheckerTest.php |   82 -
 .../test/VersionUpdater/NoopCheckerTest.php   |   25 -
 vendor/psy/psysh/test/fixtures/config.php     |   20 -
 .../fixtures/default/.config/psysh/config.php |    1 -
 .../default/.config/psysh/psysh_history       |    0
 .../.local/share/psysh/php_manual.sqlite      |    0
 vendor/psy/psysh/test/fixtures/empty.php      |   12 -
 .../psysh/test/fixtures/legacy/.psysh/history |    0
 .../fixtures/legacy/.psysh/php_manual.sqlite  |    0
 .../psysh/test/fixtures/legacy/.psysh/rc.php  |    1 -
 .../test/fixtures/mixed/.psysh/config.php     |    1 -
 .../test/fixtures/mixed/.psysh/psysh_history  |    0
 .../psysh/test/fixtures/mixed/.psysh/rc.php   |    1 -
 .../psysh/test/fixtures/project/.psysh.php    |   17 -
 .../psysh/test/fixtures/unvis_fixtures.json   |    1 -
 .../psysh/test/tools/gen_unvis_fixtures.py    |   94 -
 vendor/psy/psysh/test/tools/vis.py            |  126 -
 vendor/psy/psysh/vendor-bin/box/composer.json |    7 -
 vendor/psy/psysh/vendor-bin/box/composer.lock | 2524 ------------
 vendor/symfony/filesystem/Filesystem.php      |   20 +-
 vendor/symfony/filesystem/LockHandler.php     |    6 +-
 .../filesystem/Tests/FilesystemTest.php       |   50 +-
 .../filesystem/Tests/FilesystemTestCase.php   |    2 +-
 vendor/symfony/filesystem/composer.json       |    7 +-
 vendor/symfony/finder/Finder.php              |   17 +-
 .../Iterator/DepthRangeFilterIterator.php     |    4 +-
 .../ExcludeDirectoryFilterIterator.php        |    2 +-
 .../Iterator/RecursiveDirectoryIterator.php   |    6 +-
 .../finder/Iterator/SortableIterator.php      |   10 +-
 vendor/symfony/finder/LICENSE                 |    2 +-
 vendor/symfony/finder/Tests/FinderTest.php    |   22 +-
 .../Iterator/CustomFilterIteratorTest.php     |    4 +-
 .../Iterator/DepthRangeFilterIteratorTest.php |    4 +-
 .../Tests/Iterator/FilterIteratorTest.php     |    4 +-
 .../Tests/Iterator/IteratorTestCase.php       |   13 +-
 .../Tests/Iterator/SortableIteratorTest.php   |    6 +-
 vendor/symfony/finder/composer.json           |    7 +-
 .../symfony/var-dumper/Caster/AmqpCaster.php  |   36 +-
 vendor/symfony/var-dumper/Caster/Caster.php   |   52 +-
 .../symfony/var-dumper/Caster/DOMCaster.php   |   70 +-
 .../symfony/var-dumper/Caster/DateCaster.php  |   12 +-
 .../var-dumper/Caster/ExceptionCaster.php     |   30 +-
 .../symfony/var-dumper/Caster/MongoCaster.php |    2 +-
 .../symfony/var-dumper/Caster/PgSqlCaster.php |   54 +-
 .../var-dumper/Caster/ReflectionCaster.php    |   12 +-
 .../var-dumper/Caster/ResourceCaster.php      |    5 +
 .../symfony/var-dumper/Caster/SplCaster.php   |   47 +-
 .../var-dumper/Caster/XmlResourceCaster.php   |   44 +-
 .../var-dumper/Cloner/AbstractCloner.php      |   14 +-
 vendor/symfony/var-dumper/Cloner/Data.php     |   26 +-
 .../var-dumper/Cloner/DumperInterface.php     |   18 +-
 vendor/symfony/var-dumper/Cloner/Stub.php     |    2 +-
 .../symfony/var-dumper/Cloner/VarCloner.php   |   44 +-
 .../var-dumper/Dumper/AbstractDumper.php      |   16 +-
 .../symfony/var-dumper/Dumper/CliDumper.php   |   10 +-
 .../symfony/var-dumper/Dumper/HtmlDumper.php  |   14 +-
 vendor/symfony/var-dumper/LICENSE             |    2 +-
 .../var-dumper/Test/VarDumperTestTrait.php    |    9 +-
 .../var-dumper/Tests/Caster/CasterTest.php    |    2 +-
 .../Tests/Caster/DateCasterTest.php           |   43 +-
 .../Tests/Caster/ExceptionCasterTest.php      |    7 +-
 .../var-dumper/Tests/Caster/PdoCasterTest.php |    3 +-
 .../Tests/Caster/ReflectionCasterTest.php     |    6 +-
 .../var-dumper/Tests/Caster/SplCasterTest.php |   43 +-
 .../var-dumper/Tests/Cloner/DataTest.php      |    2 +-
 .../var-dumper/Tests/Cloner/VarClonerTest.php |   78 +-
 .../var-dumper/Tests/Dumper/CliDumperTest.php |   55 +-
 .../var-dumper/Tests/Dumper/FunctionsTest.php |    4 +-
 .../Tests/Dumper/HtmlDumperTest.php           |    4 +-
 .../Tests/Fixtures/DateTimeChild.php          |    8 +
 .../var-dumper/Tests/Fixtures/Php74.php       |   14 +
 vendor/symfony/var-dumper/composer.json       |    7 +-
 vendor/webflo/drupal-finder/.travis.yml       |    1 -
 vendor/webflo/drupal-finder/LICENSE.txt       |  339 ++
 vendor/webflo/drupal-finder/composer.json     |    8 +-
 .../webflo/drupal-finder/src/DrupalFinder.php |    9 +-
 .../drupal-finder/tests/Drupal8FinderTest.php |   56 +
 979 files changed, 27515 insertions(+), 49070 deletions(-)
 create mode 100644 vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/PhpStormMetadata.php
 delete mode 100644 vendor/chi-teck/drupal-code-generator/templates/d8/_project/drush/drush.yml.twig
 create mode 100644 vendor/chi-teck/drupal-code-generator/templates/d8/_project/phpunit.xml.twig
 delete mode 100755 vendor/chi-teck/drupal-code-generator/templates/d8/_project/scripts/composer/create_required_files.php.twig
 delete mode 100644 vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/behat.yml.twig
 delete mode 100644 vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/bootstrap/BaseContext.php.twig
 delete mode 100644 vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/bootstrap/ExampleContext.php.twig
 delete mode 100644 vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/features/example/user_forms.feature.twig
 delete mode 100644 vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/local.behat.yml.twig
 create mode 100644 vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/src/HomePageTest.php.twig
 create mode 100644 vendor/chi-teck/drupal-code-generator/templates/d8/phpstorm-meta.twig
 create mode 100644 vendor/consolidation/annotated-command/.scenarios.lock/finder5/.gitignore
 create mode 100644 vendor/consolidation/annotated-command/.scenarios.lock/finder5/composer.json
 create mode 100644 vendor/consolidation/annotated-command/.scenarios.lock/finder5/composer.lock
 mode change 100644 => 100755 vendor/consolidation/annotated-command/.scenarios.lock/install
 create mode 100644 vendor/consolidation/output-formatters/.scenarios.lock/finder5/.gitignore
 create mode 100644 vendor/consolidation/output-formatters/.scenarios.lock/finder5/composer.json
 create mode 100644 vendor/consolidation/output-formatters/.scenarios.lock/finder5/composer.lock
 mode change 100644 => 100755 vendor/consolidation/output-formatters/.scenarios.lock/install
 create mode 100644 vendor/consolidation/robo/.scenarios.lock/finder5/.gitignore
 create mode 100644 vendor/consolidation/robo/.scenarios.lock/finder5/composer.json
 create mode 100644 vendor/consolidation/robo/.scenarios.lock/finder5/composer.lock
 rename vendor/consolidation/robo/{phpunit.xml => phpunit.xml.dist} (77%)
 create mode 100644 vendor/consolidation/robo/src/Symfony/SymfonyStyleInjector.php
 delete mode 100644 vendor/dnoegel/php-xdg-base-dir/.gitignore
 delete mode 100644 vendor/dnoegel/php-xdg-base-dir/phpunit.xml.dist
 delete mode 100644 vendor/dnoegel/php-xdg-base-dir/tests/XdgTest.php
 delete mode 100644 vendor/jakub-onderka/php-console-color/.gitignore
 delete mode 100644 vendor/jakub-onderka/php-console-color/.travis.yml
 delete mode 100644 vendor/jakub-onderka/php-console-color/LICENSE
 delete mode 100644 vendor/jakub-onderka/php-console-color/README.md
 delete mode 100644 vendor/jakub-onderka/php-console-color/build.xml
 delete mode 100644 vendor/jakub-onderka/php-console-color/composer.json
 delete mode 100644 vendor/jakub-onderka/php-console-color/example.php
 delete mode 100644 vendor/jakub-onderka/php-console-color/phpunit.xml
 delete mode 100644 vendor/jakub-onderka/php-console-color/src/ConsoleColor.php
 delete mode 100644 vendor/jakub-onderka/php-console-color/src/InvalidStyleException.php
 delete mode 100644 vendor/jakub-onderka/php-console-color/tests/ConsoleColorTest.php
 delete mode 100644 vendor/jakub-onderka/php-console-highlighter/.gitignore
 delete mode 100644 vendor/jakub-onderka/php-console-highlighter/.travis.yml
 delete mode 100644 vendor/jakub-onderka/php-console-highlighter/README.md
 delete mode 100644 vendor/jakub-onderka/php-console-highlighter/build.xml
 delete mode 100644 vendor/jakub-onderka/php-console-highlighter/composer.json
 delete mode 100644 vendor/jakub-onderka/php-console-highlighter/examples/snippet.php
 delete mode 100644 vendor/jakub-onderka/php-console-highlighter/examples/whole_file.php
 delete mode 100644 vendor/jakub-onderka/php-console-highlighter/examples/whole_file_line_numbers.php
 delete mode 100644 vendor/jakub-onderka/php-console-highlighter/phpunit.xml
 delete mode 100644 vendor/jakub-onderka/php-console-highlighter/src/Highlighter.php
 delete mode 100644 vendor/jakub-onderka/php-console-highlighter/tests/HigligterTest.php
 delete mode 100644 vendor/nikic/php-parser/.gitignore
 delete mode 100644 vendor/nikic/php-parser/.travis.yml
 delete mode 100644 vendor/nikic/php-parser/CHANGELOG.md
 delete mode 100644 vendor/nikic/php-parser/UPGRADE-1.0.md
 delete mode 100644 vendor/nikic/php-parser/UPGRADE-2.0.md
 delete mode 100644 vendor/nikic/php-parser/UPGRADE-3.0.md
 delete mode 100644 vendor/nikic/php-parser/UPGRADE-4.0.md
 delete mode 100644 vendor/nikic/php-parser/doc/0_Introduction.markdown
 delete mode 100644 vendor/nikic/php-parser/doc/2_Usage_of_basic_components.markdown
 delete mode 100644 vendor/nikic/php-parser/doc/README.md
 delete mode 100644 vendor/nikic/php-parser/doc/component/AST_builders.markdown
 delete mode 100644 vendor/nikic/php-parser/doc/component/Constant_expression_evaluation.markdown
 delete mode 100644 vendor/nikic/php-parser/doc/component/Error_handling.markdown
 delete mode 100644 vendor/nikic/php-parser/doc/component/FAQ.markdown
 delete mode 100644 vendor/nikic/php-parser/doc/component/JSON_representation.markdown
 delete mode 100644 vendor/nikic/php-parser/doc/component/Lexer.markdown
 delete mode 100644 vendor/nikic/php-parser/doc/component/Name_resolution.markdown
 delete mode 100644 vendor/nikic/php-parser/doc/component/Performance.markdown
 delete mode 100644 vendor/nikic/php-parser/doc/component/Pretty_printing.markdown
 delete mode 100644 vendor/nikic/php-parser/doc/component/Walking_the_AST.markdown
 create mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php
 create mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.php
 create mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php
 create mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php
 create mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php
 create mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php
 create mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php
 create mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php
 delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulatorInterface.php
 create mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Attribute.php
 create mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php
 create mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php
 create mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php
 create mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php
 create mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php
 create mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/MatchArm.php
 create mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.php
 create mode 100644 vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php
 create mode 100644 vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php
 delete mode 100644 vendor/nikic/php-parser/phpunit.xml.dist
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/Builder/ClassTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/Builder/FunctionTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/Builder/InterfaceTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/Builder/MethodTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/Builder/NamespaceTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/Builder/ParamTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/Builder/PropertyTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/Builder/TraitTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/Builder/TraitUseAdaptationTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/Builder/TraitUseTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/Builder/UseTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/BuilderFactoryTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/CodeParsingTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/CodeTestAbstract.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/CodeTestParser.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/CommentTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/ConstExprEvaluatorTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/ErrorHandler/CollectingTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/ErrorHandler/ThrowingTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/ErrorTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/Internal/DifferTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/JsonDecoderTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/Lexer/EmulativeTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/LexerTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/NameContextTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/Node/IdentifierTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/Node/NameTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/Node/Scalar/MagicConstTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/Node/Scalar/StringTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/Node/Stmt/ClassConstTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/Node/Stmt/ClassMethodTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/Node/Stmt/ClassTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/Node/Stmt/InterfaceTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/Node/Stmt/PropertyTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/NodeAbstractTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/NodeDumperTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/NodeFinderTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/NodeTraverserTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/NodeVisitor/FindingVisitorTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/NodeVisitor/FirstFindingVisitorTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/NodeVisitor/NameResolverTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/Parser/MultipleTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/Parser/Php5Test.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/Parser/Php7Test.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/ParserFactoryTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/ParserTest.php
 delete mode 100644 vendor/nikic/php-parser/test/PhpParser/PrettyPrinterTest.php
 delete mode 100644 vendor/nikic/php-parser/test/bootstrap.php
 delete mode 100644 vendor/nikic/php-parser/test/code/formatPreservation/addingPropertyType.test
 delete mode 100644 vendor/nikic/php-parser/test/code/formatPreservation/anonClasses.test
 delete mode 100644 vendor/nikic/php-parser/test/code/formatPreservation/array_spread.test
 delete mode 100644 vendor/nikic/php-parser/test/code/formatPreservation/arrow_function.test
 delete mode 100644 vendor/nikic/php-parser/test/code/formatPreservation/basic.test
 delete mode 100644 vendor/nikic/php-parser/test/code/formatPreservation/blockConversion.test
 delete mode 100644 vendor/nikic/php-parser/test/code/formatPreservation/comments.test
 delete mode 100644 vendor/nikic/php-parser/test/code/formatPreservation/emptyListInsertion.test
 delete mode 100644 vendor/nikic/php-parser/test/code/formatPreservation/fixup.test
 delete mode 100644 vendor/nikic/php-parser/test/code/formatPreservation/inlineHtml.test
 delete mode 100644 vendor/nikic/php-parser/test/code/formatPreservation/insertionOfNullable.test
 delete mode 100644 vendor/nikic/php-parser/test/code/formatPreservation/listInsertion.test
 delete mode 100644 vendor/nikic/php-parser/test/code/formatPreservation/listInsertionIndentation.test
 delete mode 100644 vendor/nikic/php-parser/test/code/formatPreservation/listRemoval.test
 delete mode 100644 vendor/nikic/php-parser/test/code/formatPreservation/modifierChange.test
 delete mode 100644 vendor/nikic/php-parser/test/code/formatPreservation/nopCommentAtEnd.test
 delete mode 100644 vendor/nikic/php-parser/test/code/formatPreservation/removalViaNull.test
 delete mode 100644 vendor/nikic/php-parser/test/code/formatPreservation/removingPropertyType.test
 delete mode 100644 vendor/nikic/php-parser/test/code/formatPreservation/traitAlias.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/blockComments.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/commentAtEndOfClass.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/comments.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/errorHandling/eofError.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/errorHandling/lexerErrors.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/errorHandling/recovery.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/arrayDef.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/arrayDestructuring.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/arraySpread.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/arrow_function.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/assign.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/assignNewByRef.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/cast.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/clone.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/closure.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/comparison.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/constant_expr.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/errorSuppress.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/exit.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/args.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/constFetch.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/constantDeref.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/funcCall.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/newDeref.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/objectAccess.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/simpleArrayAccess.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/staticCall.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/staticPropertyFetch.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/includeAndEval.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/issetAndEmpty.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/listReferences.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/listWithKeys.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/logic.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/math.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/new.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/newWithoutClass.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/print.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/shellExec.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/ternaryAndCoalesce.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/trailingCommas.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/uvs/globalNonSimpleVarError.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/uvs/indirectCall.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/uvs/isset.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/uvs/misc.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/uvs/new.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/uvs/staticProperty.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/variable.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/nopPositions.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/scalar/constantString.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/scalar/docString.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/scalar/docStringNewlines.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/scalar/encapsedNegVarOffset.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/scalar/encapsedString.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/scalar/flexibleDocString.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/scalar/flexibleDocStringErrors.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/scalar/float.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/scalar/int.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/scalar/invalidOctal.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/scalar/magicConst.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/scalar/unicodeEscape.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/semiReserved.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/blocklessStatement.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/class/abstract.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/class/anonymous.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/class/conditional.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/class/constModifierErrors.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/class/constModifiers.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/class/final.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/class/implicitPublic.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/class/interface.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/class/modifier.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/class/name.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/class/php4Style.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/class/propertyTypes.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/class/simple.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/class/staticMethod.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/class/trait.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/const.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/controlFlow.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/declare.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/echo.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/function/builtinTypeDeclarations.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/function/byRef.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/function/conditional.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/function/defaultValues.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/function/nullableTypes.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/function/returnTypes.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/function/specialVars.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/function/typeDeclarations.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/function/variadic.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/function/variadicDefaultValue.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/generator/basic.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/generator/yieldPrecedence.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/generator/yieldUnaryPrecedence.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/haltCompiler.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/haltCompilerInvalidSyntax.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/haltCompilerOffset.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/haltCompilerOutermostScope.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/hashbang.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/if.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/inlineHTML.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/loop/do.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/loop/for.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/loop/foreach.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/loop/while.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/multiCatch.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/namespace/alias.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/namespace/braced.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/namespace/commentAfterNamespace.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/namespace/groupUse.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/namespace/groupUseErrors.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/namespace/groupUsePositions.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/namespace/groupUseTrailingComma.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/namespace/invalidName.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/namespace/mix.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/namespace/name.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/namespace/nested.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/namespace/notBraced.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/namespace/nsAfterHashbang.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/namespace/outsideStmt.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/namespace/outsideStmtInvalid.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/switch.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/tryCatch.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/tryWithoutCatch.test
 delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/unset.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/comments.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/commentsInCommaList.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/expr/anonymousClass.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/expr/arrayDestructuring.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/expr/arraySpread.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/expr/arrow_function.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/expr/call.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/expr/closure.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/expr/constant_deref.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/expr/docStrings.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/expr/include.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/expr/intrinsics.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/expr/list.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/expr/literals.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/expr/numbers.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/expr/operators.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/expr/parentheses.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/expr/shortArraySyntax.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/expr/stringEscaping.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/expr/uvs.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/expr/variables.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/expr/yield.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/inlineHTMLandPHPtest.file-test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/nestedInlineHTML.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/onlyInlineHTML.file-test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/onlyPHP.file-test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/stmt/alias.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/stmt/break_continue.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/stmt/class.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/stmt/class_const.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/stmt/const.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/stmt/declare.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/stmt/do_while.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/stmt/for.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/stmt/foreach.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/stmt/function_signatures.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/stmt/global_static_variables.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/stmt/goto.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/stmt/groupUse.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/stmt/haltCompiler.file-test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/stmt/if.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/stmt/multiCatch.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/stmt/namespaces.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/stmt/nullable_types.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/stmt/properties.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/stmt/switch.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/stmt/throw.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/stmt/traitUse.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/stmt/tryCatch.test
 delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/stmt/while.test
 delete mode 100644 vendor/nikic/php-parser/test/updateTests.php
 delete mode 100755 vendor/nikic/php-parser/test_old/run-php-src.sh
 delete mode 100644 vendor/nikic/php-parser/test_old/run.php
 create mode 100644 vendor/oomphinc/composer-installers-extender/.editorconfig
 create mode 100644 vendor/oomphinc/composer-installers-extender/.travis.yml
 create mode 100644 vendor/oomphinc/composer-installers-extender/CHANGELOG.md
 create mode 100644 vendor/oomphinc/composer-installers-extender/LICENSE
 create mode 100644 vendor/oomphinc/composer-installers-extender/phpcs.xml
 create mode 100644 vendor/oomphinc/composer-installers-extender/phpunit.xml
 delete mode 100644 vendor/oomphinc/composer-installers-extender/src/Installer.php
 delete mode 100644 vendor/oomphinc/composer-installers-extender/src/InstallerHelper.php
 create mode 100644 vendor/oomphinc/composer-installers-extender/src/Installers/CustomInstaller.php
 create mode 100644 vendor/oomphinc/composer-installers-extender/src/Installers/Installer.php
 create mode 100644 vendor/oomphinc/composer-installers-extender/tests/src/Installers/CustomInstallerTest.php
 create mode 100644 vendor/oomphinc/composer-installers-extender/tests/src/Installers/InstallerTest.php
 create mode 100644 vendor/oomphinc/composer-installers-extender/tests/src/PluginTest.php
 rename vendor/{jakub-onderka/php-console-highlighter => pantheon-systems/quicksilver-pushback}/LICENSE (96%)
 create mode 100644 vendor/pantheon-systems/quicksilver-pushback/README.md
 create mode 100644 vendor/pantheon-systems/quicksilver-pushback/composer.json
 create mode 100644 vendor/pantheon-systems/quicksilver-pushback/lean-repo-utils.php
 create mode 100644 vendor/pantheon-systems/quicksilver-pushback/push-back-to-github.php
 delete mode 100644 vendor/psy/psysh/.editorconfig
 delete mode 100644 vendor/psy/psysh/.github/CONTRIBUTING.md
 delete mode 100644 vendor/psy/psysh/.gitignore
 delete mode 100644 vendor/psy/psysh/.php_cs
 delete mode 100644 vendor/psy/psysh/.styleci.yml
 delete mode 100644 vendor/psy/psysh/.travis.yml
 delete mode 100644 vendor/psy/psysh/Makefile
 delete mode 100755 vendor/psy/psysh/bin/build-stub
 delete mode 100644 vendor/psy/psysh/box.json.dist
 delete mode 100644 vendor/psy/psysh/phpunit.xml.dist
 create mode 100644 vendor/psy/psysh/src/CodeCleaner/EmptyArrayDimFetchPass.php
 create mode 100644 vendor/psy/psysh/src/CodeCleaner/LabelContextPass.php
 delete mode 100644 vendor/psy/psysh/src/CodeCleaner/LegacyEmptyPass.php
 create mode 100644 vendor/psy/psysh/src/CodeCleaner/ReturnTypePass.php
 delete mode 100644 vendor/psy/psysh/src/Command/ListCommand/InterfaceEnumerator.php
 delete mode 100644 vendor/psy/psysh/src/Command/ListCommand/TraitEnumerator.php
 create mode 100644 vendor/psy/psysh/src/Exception/UnexpectedTargetException.php
 delete mode 100644 vendor/psy/psysh/src/ExecutionLoop.php
 create mode 100644 vendor/psy/psysh/src/Formatter/ReflectorFormatter.php
 create mode 100644 vendor/psy/psysh/src/Formatter/TraceFormatter.php
 create mode 100644 vendor/psy/psysh/src/Reflection/ReflectionNamespace.php
 delete mode 100644 vendor/psy/psysh/test/ClassWithSecrets.php
 delete mode 100644 vendor/psy/psysh/test/CodeCleaner/AbstractClassPassTest.php
 delete mode 100644 vendor/psy/psysh/test/CodeCleaner/AssignThisVariablePassTest.php
 delete mode 100644 vendor/psy/psysh/test/CodeCleaner/CallTimePassByReferencePassTest.php
 delete mode 100644 vendor/psy/psysh/test/CodeCleaner/CalledClassPassTest.php
 delete mode 100644 vendor/psy/psysh/test/CodeCleaner/CodeCleanerTestCase.php
 delete mode 100644 vendor/psy/psysh/test/CodeCleaner/ExitPassTest.php
 delete mode 100644 vendor/psy/psysh/test/CodeCleaner/FinalClassPassTest.php
 delete mode 100644 vendor/psy/psysh/test/CodeCleaner/Fixtures/ClassWithCallStatic.php
 delete mode 100644 vendor/psy/psysh/test/CodeCleaner/Fixtures/ClassWithStatic.php
 delete mode 100644 vendor/psy/psysh/test/CodeCleaner/Fixtures/TraitWithStatic.php
 delete mode 100644 vendor/psy/psysh/test/CodeCleaner/FunctionContextPassTest.php
 delete mode 100644 vendor/psy/psysh/test/CodeCleaner/FunctionReturnInWriteContextPassTest.php
 delete mode 100644 vendor/psy/psysh/test/CodeCleaner/ImplicitReturnPassTest.php
 delete mode 100644 vendor/psy/psysh/test/CodeCleaner/InstanceOfPassTest.php
 delete mode 100644 vendor/psy/psysh/test/CodeCleaner/LeavePsyshAlonePassTest.php
 delete mode 100644 vendor/psy/psysh/test/CodeCleaner/LegacyEmptyPassTest.php
 delete mode 100644 vendor/psy/psysh/test/CodeCleaner/ListPassTest.php
 delete mode 100644 vendor/psy/psysh/test/CodeCleaner/LoopContextPassTest.php
 delete mode 100644 vendor/psy/psysh/test/CodeCleaner/MagicConstantsPassTest.php
 delete mode 100644 vendor/psy/psysh/test/CodeCleaner/NamespacePassTest.php
 delete mode 100644 vendor/psy/psysh/test/CodeCleaner/NoReturnValueTest.php
 delete mode 100644 vendor/psy/psysh/test/CodeCleaner/PassableByReferencePassTest.php
 delete mode 100644 vendor/psy/psysh/test/CodeCleaner/RequirePassTest.php
 delete mode 100644 vendor/psy/psysh/test/CodeCleaner/StrictTypesPassTest.php
 delete mode 100644 vendor/psy/psysh/test/CodeCleaner/UseStatementPassTest.php
 delete mode 100644 vendor/psy/psysh/test/CodeCleaner/ValidClassNamePassTest.php
 delete mode 100644 vendor/psy/psysh/test/CodeCleaner/ValidConstantPassTest.php
 delete mode 100644 vendor/psy/psysh/test/CodeCleaner/ValidConstructorPassTest.php
 delete mode 100644 vendor/psy/psysh/test/CodeCleaner/ValidFunctionNamePassTest.php
 delete mode 100644 vendor/psy/psysh/test/CodeCleanerTest.php
 delete mode 100644 vendor/psy/psysh/test/Command/ExitCommandTest.php
 delete mode 100644 vendor/psy/psysh/test/Command/ThrowUpCommandTest.php
 delete mode 100644 vendor/psy/psysh/test/Command/TimeitCommand/TimeitVisitorTest.php
 delete mode 100644 vendor/psy/psysh/test/ConfigurationTest.php
 delete mode 100644 vendor/psy/psysh/test/ConsoleColorFactoryTest.php
 delete mode 100644 vendor/psy/psysh/test/ContextTest.php
 delete mode 100644 vendor/psy/psysh/test/Exception/BreakExceptionTest.php
 delete mode 100644 vendor/psy/psysh/test/Exception/ErrorExceptionTest.php
 delete mode 100644 vendor/psy/psysh/test/Exception/FatalErrorExceptionTest.php
 delete mode 100644 vendor/psy/psysh/test/Exception/ParseErrorExceptionTest.php
 delete mode 100644 vendor/psy/psysh/test/Exception/RuntimeExceptionTest.php
 delete mode 100644 vendor/psy/psysh/test/Exception/ThrowUpExceptionTest.php
 delete mode 100644 vendor/psy/psysh/test/Exception/TypeErrorExceptionTest.php
 delete mode 100644 vendor/psy/psysh/test/FakeShell.php
 delete mode 100644 vendor/psy/psysh/test/Formatter/CodeFormatterTest.php
 delete mode 100644 vendor/psy/psysh/test/Formatter/DocblockFormatterTest.php
 delete mode 100644 vendor/psy/psysh/test/Formatter/Fixtures/BoringTrait.php
 delete mode 100644 vendor/psy/psysh/test/Formatter/Fixtures/SomeClass.php
 delete mode 100644 vendor/psy/psysh/test/Formatter/SignatureFormatterTest.php
 delete mode 100644 vendor/psy/psysh/test/Input/CodeArgumentTest.php
 delete mode 100644 vendor/psy/psysh/test/Input/FilterOptionsTest.php
 delete mode 100644 vendor/psy/psysh/test/Input/ShellInputTest.php
 delete mode 100644 vendor/psy/psysh/test/ParserTestCase.php
 delete mode 100644 vendor/psy/psysh/test/Readline/GNUReadlineTest.php
 delete mode 100644 vendor/psy/psysh/test/Readline/HoaConsoleTest.php
 delete mode 100644 vendor/psy/psysh/test/Readline/LibeditTest.php
 delete mode 100644 vendor/psy/psysh/test/Readline/TransientTest.php
 delete mode 100644 vendor/psy/psysh/test/Reflection/ReflectionClassConstantTest.php
 delete mode 100644 vendor/psy/psysh/test/Reflection/ReflectionConstantBCTest.php
 delete mode 100644 vendor/psy/psysh/test/Reflection/ReflectionConstantTest.php
 delete mode 100644 vendor/psy/psysh/test/Reflection/ReflectionLanguageConstructParameterTest.php
 delete mode 100644 vendor/psy/psysh/test/Reflection/ReflectionLanguageConstructTest.php
 delete mode 100644 vendor/psy/psysh/test/ShellTest.php
 delete mode 100644 vendor/psy/psysh/test/Sudo/SudoVisitorTest.php
 delete mode 100644 vendor/psy/psysh/test/SudoTest.php
 delete mode 100644 vendor/psy/psysh/test/TabCompletion/AutoCompleterTest.php
 delete mode 100644 vendor/psy/psysh/test/TabCompletion/StaticSample.php
 delete mode 100644 vendor/psy/psysh/test/Util/DocblockTest.php
 delete mode 100644 vendor/psy/psysh/test/Util/MirrorTest.php
 delete mode 100644 vendor/psy/psysh/test/Util/StrTest.php
 delete mode 100644 vendor/psy/psysh/test/VersionUpdater/GitHubCheckerTest.php
 delete mode 100644 vendor/psy/psysh/test/VersionUpdater/NoopCheckerTest.php
 delete mode 100644 vendor/psy/psysh/test/fixtures/config.php
 delete mode 100644 vendor/psy/psysh/test/fixtures/default/.config/psysh/config.php
 delete mode 100644 vendor/psy/psysh/test/fixtures/default/.config/psysh/psysh_history
 delete mode 100644 vendor/psy/psysh/test/fixtures/default/.local/share/psysh/php_manual.sqlite
 delete mode 100644 vendor/psy/psysh/test/fixtures/empty.php
 delete mode 100644 vendor/psy/psysh/test/fixtures/legacy/.psysh/history
 delete mode 100644 vendor/psy/psysh/test/fixtures/legacy/.psysh/php_manual.sqlite
 delete mode 100644 vendor/psy/psysh/test/fixtures/legacy/.psysh/rc.php
 delete mode 100644 vendor/psy/psysh/test/fixtures/mixed/.psysh/config.php
 delete mode 100644 vendor/psy/psysh/test/fixtures/mixed/.psysh/psysh_history
 delete mode 100644 vendor/psy/psysh/test/fixtures/mixed/.psysh/rc.php
 delete mode 100644 vendor/psy/psysh/test/fixtures/project/.psysh.php
 delete mode 100644 vendor/psy/psysh/test/fixtures/unvis_fixtures.json
 delete mode 100755 vendor/psy/psysh/test/tools/gen_unvis_fixtures.py
 delete mode 100644 vendor/psy/psysh/test/tools/vis.py
 delete mode 100644 vendor/psy/psysh/vendor-bin/box/composer.json
 delete mode 100644 vendor/psy/psysh/vendor-bin/box/composer.lock
 create mode 100644 vendor/symfony/var-dumper/Tests/Fixtures/DateTimeChild.php
 create mode 100644 vendor/symfony/var-dumper/Tests/Fixtures/Php74.php
 create mode 100644 vendor/webflo/drupal-finder/LICENSE.txt

diff --git a/composer.json b/composer.json
index ee5ee5f08f..57663a158d 100644
--- a/composer.json
+++ b/composer.json
@@ -81,7 +81,8 @@
         "php": ">=7.3",
         "browserstate/history.js": "1.8",
         "ckeditor/indentblock": "4.8.0",
-        "cweagans/composer-patches": "^1.0",
+        "composer/installers": "^1.9",
+        "cweagans/composer-patches": "^1.7",
         "desandro/imagesloaded": "4.1.4",
         "desandro/masonry": "4.2",
         "dimsemenov/magnific-popup": "1.1",
@@ -186,10 +187,10 @@
         "drupal/webform": "5.19",
         "drupal/webform_views": "5.0-alpha2",
         "drush-ops/behat-drush-endpoint": "0.0.5",
-        "drush/drush": "9.7.1",
+        "drush/drush": "9.7.2",
         "enyo/dropzone": "5.1.1",
         "gdsmith/jquery.easing": "1.4.1",
-        "oomphinc/composer-installers-extender": "1.1.2",
+        "oomphinc/composer-installers-extender": "2.0",
         "pantheon-systems/quicksilver-pushback": "1.0.1",
         "rvtraveller/qs-composer-installer": "1.1",
         "zaporylie/composer-drupal-optimizations": "1.1"
diff --git a/composer.lock b/composer.lock
index 43807b0c60..9a7c89264c 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "4dc33938bdd0ec165eeb79efb4e6d9d3",
+    "content-hash": "dc4b94b862b277119bee8b3d4c29fdf5",
     "packages": [
         {
             "name": "alchemy/zippy",
@@ -134,16 +134,16 @@
         },
         {
             "name": "chi-teck/drupal-code-generator",
-            "version": "1.30.3",
+            "version": "1.32.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/Chi-teck/drupal-code-generator.git",
-                "reference": "1da9f06843b6bf2b0e7d28fea4b6c1d79aead197"
+                "reference": "8abba7131ed4c89c1e8fc6dca0d05a4b6d0b2749"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Chi-teck/drupal-code-generator/zipball/1da9f06843b6bf2b0e7d28fea4b6c1d79aead197",
-                "reference": "1da9f06843b6bf2b0e7d28fea4b6c1d79aead197",
+                "url": "https://api.github.com/repos/Chi-teck/drupal-code-generator/zipball/8abba7131ed4c89c1e8fc6dca0d05a4b6d0b2749",
+                "reference": "8abba7131ed4c89c1e8fc6dca0d05a4b6d0b2749",
                 "shasum": ""
             },
             "require": {
@@ -151,7 +151,7 @@
                 "php": ">=5.5.9",
                 "symfony/console": "^3.4 || ^4.0",
                 "symfony/filesystem": "^2.7 || ^3.4 || ^4.0",
-                "twig/twig": "^1.38.2 || ^2.10"
+                "twig/twig": "^1.41 || ^2.12"
             },
             "bin": [
                 "bin/dcg"
@@ -175,7 +175,7 @@
                 "GPL-2.0-or-later"
             ],
             "description": "Drupal code generator",
-            "time": "2019-06-29T10:29:45+00:00"
+            "time": "2020-07-15T06:08:04+00:00"
         },
         {
             "name": "ckeditor/indentblock",
@@ -485,25 +485,25 @@
         },
         {
             "name": "consolidation/annotated-command",
-            "version": "2.12.0",
+            "version": "2.12.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/annotated-command.git",
-                "reference": "512a2e54c98f3af377589de76c43b24652bcb789"
+                "reference": "0ee361762df2274f360c085e3239784a53f850b5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/512a2e54c98f3af377589de76c43b24652bcb789",
-                "reference": "512a2e54c98f3af377589de76c43b24652bcb789",
+                "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/0ee361762df2274f360c085e3239784a53f850b5",
+                "reference": "0ee361762df2274f360c085e3239784a53f850b5",
                 "shasum": ""
             },
             "require": {
-                "consolidation/output-formatters": "^3.4",
+                "consolidation/output-formatters": "^3.5.1",
                 "php": ">=5.4.5",
                 "psr/log": "^1",
                 "symfony/console": "^2.8|^3|^4",
                 "symfony/event-dispatcher": "^2.5|^3|^4",
-                "symfony/finder": "^2.5|^3|^4"
+                "symfony/finder": "^2.5|^3|^4|^5"
             },
             "require-dev": {
                 "g1a/composer-test-scenarios": "^3",
@@ -514,6 +514,16 @@
             "type": "library",
             "extra": {
                 "scenarios": {
+                    "finder5": {
+                        "require": {
+                            "symfony/finder": "^5"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.2.5"
+                            }
+                        }
+                    },
                     "symfony4": {
                         "require": {
                             "symfony/console": "^4.0"
@@ -577,7 +587,7 @@
                 }
             ],
             "description": "Initialize Symfony Console commands from annotated command class methods.",
-            "time": "2019-03-08T16:55:03+00:00"
+            "time": "2020-10-11T04:30:03+00:00"
         },
         {
             "name": "consolidation/config",
@@ -819,23 +829,23 @@
         },
         {
             "name": "consolidation/output-formatters",
-            "version": "3.5.0",
+            "version": "3.5.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/output-formatters.git",
-                "reference": "99ec998ffb697e0eada5aacf81feebfb13023605"
+                "reference": "0d38f13051ef05c223a2bb8e962d668e24785196"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/99ec998ffb697e0eada5aacf81feebfb13023605",
-                "reference": "99ec998ffb697e0eada5aacf81feebfb13023605",
+                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/0d38f13051ef05c223a2bb8e962d668e24785196",
+                "reference": "0d38f13051ef05c223a2bb8e962d668e24785196",
                 "shasum": ""
             },
             "require": {
                 "dflydev/dot-access-data": "^1.1.0",
                 "php": ">=5.4.0",
                 "symfony/console": "^2.8|^3|^4",
-                "symfony/finder": "^2.5|^3|^4"
+                "symfony/finder": "^2.5|^3|^4|^5"
             },
             "require-dev": {
                 "g1a/composer-test-scenarios": "^3",
@@ -851,6 +861,16 @@
             "type": "library",
             "extra": {
                 "scenarios": {
+                    "finder5": {
+                        "require": {
+                            "symfony/finder": "^5"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.2.5"
+                            }
+                        }
+                    },
                     "symfony4": {
                         "require": {
                             "symfony/console": "^4.0"
@@ -916,54 +936,48 @@
                 }
             ],
             "description": "Format text by applying transformations provided by plug-in formatters.",
-            "time": "2019-05-30T23:16:01+00:00"
+            "time": "2020-10-11T04:15:32+00:00"
         },
         {
             "name": "consolidation/robo",
-            "version": "1.4.9",
+            "version": "1.4.13",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/Robo.git",
-                "reference": "5c6b3840a45afda1cbffbb3bb1f94dd5f9f83345"
+                "reference": "fd28dcca1b935950ece26e63541fbdeeb09f7343"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/Robo/zipball/5c6b3840a45afda1cbffbb3bb1f94dd5f9f83345",
-                "reference": "5c6b3840a45afda1cbffbb3bb1f94dd5f9f83345",
+                "url": "https://api.github.com/repos/consolidation/Robo/zipball/fd28dcca1b935950ece26e63541fbdeeb09f7343",
+                "reference": "fd28dcca1b935950ece26e63541fbdeeb09f7343",
                 "shasum": ""
             },
             "require": {
-                "consolidation/annotated-command": "^2.10.2",
-                "consolidation/config": "^1.2",
-                "consolidation/log": "~1",
-                "consolidation/output-formatters": "^3.1.13",
-                "consolidation/self-update": "^1",
-                "grasmash/yaml-expander": "^1.3",
-                "league/container": "^2.2",
+                "consolidation/annotated-command": "^2.12.1|^4.1",
+                "consolidation/config": "^1.2.1",
+                "consolidation/log": "^1.1.1|^2",
+                "consolidation/output-formatters": "^3.5.1|^4.1",
+                "consolidation/self-update": "^1.1.5",
+                "grasmash/yaml-expander": "^1.4",
+                "league/container": "^2.4.1",
                 "php": ">=5.5.0",
                 "symfony/console": "^2.8|^3|^4",
                 "symfony/event-dispatcher": "^2.5|^3|^4",
                 "symfony/filesystem": "^2.5|^3|^4",
-                "symfony/finder": "^2.5|^3|^4",
+                "symfony/finder": "^2.5|^3|^4|^5",
                 "symfony/process": "^2.5|^3|^4"
             },
             "replace": {
                 "codegyre/robo": "< 1.0"
             },
             "require-dev": {
-                "codeception/aspect-mock": "^1|^2.1.1",
-                "codeception/base": "^2.3.7",
-                "codeception/verify": "^0.3.2",
                 "g1a/composer-test-scenarios": "^3",
-                "goaop/framework": "~2.1.2",
-                "goaop/parser-reflection": "^1.1.0",
                 "natxet/cssmin": "3.0.4",
-                "nikic/php-parser": "^3.1.5",
-                "patchwork/jsqueeze": "~2",
+                "patchwork/jsqueeze": "^2",
                 "pear/archive_tar": "^1.4.4",
                 "php-coveralls/php-coveralls": "^1",
-                "phpunit/php-code-coverage": "~2|~4",
-                "squizlabs/php_codesniffer": "^2.8"
+                "phpunit/phpunit": "^5.7.27",
+                "squizlabs/php_codesniffer": "^3"
             },
             "suggest": {
                 "henrikbjorn/lurker": "For monitoring filesystem changes in taskWatch",
@@ -977,6 +991,16 @@
             "type": "library",
             "extra": {
                 "scenarios": {
+                    "finder5": {
+                        "require": {
+                            "symfony/finder": "^5"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.2.5"
+                            }
+                        }
+                    },
                     "symfony4": {
                         "require": {
                             "symfony/console": "^4"
@@ -991,8 +1015,11 @@
                         "require": {
                             "symfony/console": "^2.8"
                         },
+                        "require-dev": {
+                            "phpunit/phpunit": "^4.8.36"
+                        },
                         "remove": [
-                            "goaop/framework"
+                            "php-coveralls/php-coveralls"
                         ],
                         "config": {
                             "platform": {
@@ -1005,7 +1032,7 @@
                     }
                 },
                 "branch-alias": {
-                    "dev-master": "2.x-dev"
+                    "dev-master": "1.x-dev"
                 }
             },
             "autoload": {
@@ -1024,26 +1051,26 @@
                 }
             ],
             "description": "Modern task runner",
-            "time": "2019-03-19T18:07:19+00:00"
+            "time": "2020-10-11T04:51:34+00:00"
         },
         {
             "name": "consolidation/self-update",
-            "version": "1.1.5",
+            "version": "1.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/self-update.git",
-                "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54"
+                "reference": "dba6b2c0708f20fa3ba8008a2353b637578849b4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/self-update/zipball/a1c273b14ce334789825a09d06d4c87c0a02ad54",
-                "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54",
+                "url": "https://api.github.com/repos/consolidation/self-update/zipball/dba6b2c0708f20fa3ba8008a2353b637578849b4",
+                "reference": "dba6b2c0708f20fa3ba8008a2353b637578849b4",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.5.0",
-                "symfony/console": "^2.8|^3|^4",
-                "symfony/filesystem": "^2.5|^3|^4"
+                "symfony/console": "^2.8|^3|^4|^5",
+                "symfony/filesystem": "^2.5|^3|^4|^5"
             },
             "bin": [
                 "scripts/release"
@@ -1064,46 +1091,45 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Greg Anderson",
-                    "email": "greg.1.anderson@greenknowe.org"
-                },
                 {
                     "name": "Alexander Menk",
                     "email": "menk@mestrona.net"
+                },
+                {
+                    "name": "Greg Anderson",
+                    "email": "greg.1.anderson@greenknowe.org"
                 }
             ],
             "description": "Provides a self:update command for Symfony Console applications.",
-            "time": "2018-10-28T01:52:03+00:00"
+            "time": "2020-04-13T02:49:20+00:00"
         },
         {
             "name": "consolidation/site-alias",
-            "version": "3.0.0",
+            "version": "3.0.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/site-alias.git",
-                "reference": "8cfd3b6ab6d541086fc970bf850864293b284e6f"
+                "reference": "fd40a03f80f8fd4684b10bef8c8c4ec5a9a9bf26"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/site-alias/zipball/8cfd3b6ab6d541086fc970bf850864293b284e6f",
-                "reference": "8cfd3b6ab6d541086fc970bf850864293b284e6f",
+                "url": "https://api.github.com/repos/consolidation/site-alias/zipball/fd40a03f80f8fd4684b10bef8c8c4ec5a9a9bf26",
+                "reference": "fd40a03f80f8fd4684b10bef8c8c4ec5a9a9bf26",
                 "shasum": ""
             },
             "require": {
-                "consolidation/config": "^1.2.1",
+                "consolidation/config": "^1.2.1|^2",
                 "php": ">=5.5.0"
             },
             "require-dev": {
-                "consolidation/robo": "^1.2.3",
+                "consolidation/robo": "^1.2.3|^2",
                 "g1a/composer-test-scenarios": "^3",
                 "knplabs/github-api": "^2.7",
-                "php-coveralls/php-coveralls": "^1",
+                "php-coveralls/php-coveralls": "^2.2",
                 "php-http/guzzle6-adapter": "^1.1",
                 "phpunit/phpunit": "^6",
                 "squizlabs/php_codesniffer": "^2.8",
-                "symfony/console": "^2.8|^3|^4",
-                "symfony/yaml": "~2.3|^3"
+                "symfony/yaml": "~2.3|^3|^4.4|^5"
             },
             "type": "library",
             "extra": {
@@ -1136,30 +1162,30 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Moshe Weitzman",
-                    "email": "weitzman@tejasa.com"
-                },
                 {
                     "name": "Greg Anderson",
                     "email": "greg.1.anderson@greenknowe.org"
+                },
+                {
+                    "name": "Moshe Weitzman",
+                    "email": "weitzman@tejasa.com"
                 }
             ],
             "description": "Manage alias records for local and remote sites.",
-            "time": "2019-03-12T17:31:48+00:00"
+            "time": "2020-05-28T00:33:41+00:00"
         },
         {
             "name": "consolidation/site-process",
-            "version": "2.0.3",
+            "version": "2.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/site-process.git",
-                "reference": "e25265f4a48c13284ebb6f9e0906ecd415d451df"
+                "reference": "f3211fa4c60671c6f068184221f06f932556e443"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/site-process/zipball/e25265f4a48c13284ebb6f9e0906ecd415d451df",
-                "reference": "e25265f4a48c13284ebb6f9e0906ecd415d451df",
+                "url": "https://api.github.com/repos/consolidation/site-process/zipball/f3211fa4c60671c6f068184221f06f932556e443",
+                "reference": "f3211fa4c60671c6f068184221f06f932556e443",
                 "shasum": ""
             },
             "require": {
@@ -1208,17 +1234,17 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Moshe Weitzman",
-                    "email": "weitzman@tejasa.com"
-                },
                 {
                     "name": "Greg Anderson",
                     "email": "greg.1.anderson@greenknowe.org"
+                },
+                {
+                    "name": "Moshe Weitzman",
+                    "email": "weitzman@tejasa.com"
                 }
             ],
             "description": "A thin wrapper around the Symfony Process Component that allows applications to use the Site Alias library to specify the target for a remote call.",
-            "time": "2019-06-04T22:23:52+00:00"
+            "time": "2019-09-10T17:56:24+00:00"
         },
         {
             "name": "container-interop/container-interop",
@@ -1254,24 +1280,24 @@
         },
         {
             "name": "cweagans/composer-patches",
-            "version": "1.6.5",
+            "version": "1.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/cweagans/composer-patches.git",
-                "reference": "2ec4f00ff5fb64de584c8c4aea53bf9053ecb0b3"
+                "reference": "ae02121445ad75f4eaff800cc532b5e6233e2ddf"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/cweagans/composer-patches/zipball/2ec4f00ff5fb64de584c8c4aea53bf9053ecb0b3",
-                "reference": "2ec4f00ff5fb64de584c8c4aea53bf9053ecb0b3",
+                "url": "https://api.github.com/repos/cweagans/composer-patches/zipball/ae02121445ad75f4eaff800cc532b5e6233e2ddf",
+                "reference": "ae02121445ad75f4eaff800cc532b5e6233e2ddf",
                 "shasum": ""
             },
             "require": {
-                "composer-plugin-api": "^1.0",
+                "composer-plugin-api": "^1.0 || ^2.0",
                 "php": ">=5.3.0"
             },
             "require-dev": {
-                "composer/composer": "~1.0",
+                "composer/composer": "~1.0 || ~2.0",
                 "phpunit/phpunit": "~4.6"
             },
             "type": "composer-plugin",
@@ -1294,7 +1320,7 @@
                 }
             ],
             "description": "Provides a way to patch Composer packages.",
-            "time": "2018-05-11T18:00:16+00:00"
+            "time": "2020-09-30T17:56:20+00:00"
         },
         {
             "name": "desandro/imagesloaded",
@@ -1508,25 +1534,25 @@
         },
         {
             "name": "dnoegel/php-xdg-base-dir",
-            "version": "0.1",
+            "version": "v0.1.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/dnoegel/php-xdg-base-dir.git",
-                "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a"
+                "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/265b8593498b997dc2d31e75b89f053b5cc9621a",
-                "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a",
+                "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
+                "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.2"
             },
             "require-dev": {
-                "phpunit/phpunit": "@stable"
+                "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35"
             },
-            "type": "project",
+            "type": "library",
             "autoload": {
                 "psr-4": {
                     "XdgBaseDir\\": "src/"
@@ -1537,7 +1563,7 @@
                 "MIT"
             ],
             "description": "implementation of xdg base directory specification for php",
-            "time": "2014-10-24T07:27:01+00:00"
+            "time": "2019-12-04T15:06:13+00:00"
         },
         {
             "name": "doctrine/annotations",
@@ -8735,16 +8761,16 @@
         },
         {
             "name": "drush/drush",
-            "version": "9.7.1",
+            "version": "9.7.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/drush-ops/drush.git",
-                "reference": "6f9a8d235daec06fd6f47b2d84da675750566479"
+                "reference": "ab5e345a72c9187a7d770486a09691f6526826aa"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/drush-ops/drush/zipball/6f9a8d235daec06fd6f47b2d84da675750566479",
-                "reference": "6f9a8d235daec06fd6f47b2d84da675750566479",
+                "url": "https://api.github.com/repos/drush-ops/drush/zipball/ab5e345a72c9187a7d770486a09691f6526826aa",
+                "reference": "ab5e345a72c9187a7d770486a09691f6526826aa",
                 "shasum": ""
             },
             "require": {
@@ -8764,7 +8790,7 @@
                 "psr/log": "~1.0",
                 "psy/psysh": "~0.6",
                 "symfony/console": "^3.4",
-                "symfony/event-dispatcher": "^3.4",
+                "symfony/event-dispatcher": "^3.4 || ^4.0",
                 "symfony/finder": "^3.4 || ^4.0",
                 "symfony/process": "^3.4",
                 "symfony/var-dumper": "^3.4 || ^4.0",
@@ -8880,7 +8906,7 @@
             ],
             "description": "Drush is a command line shell and scripting interface for Drupal, a veritable Swiss Army knife designed to make life easier for those of us who spend some of our working hours hacking away at the command prompt.",
             "homepage": "http://www.drush.org",
-            "time": "2019-06-30T19:46:39+00:00"
+            "time": "2020-02-09T17:29:51+00:00"
         },
         {
             "name": "easyrdf/easyrdf",
@@ -9642,96 +9668,6 @@
             "abandoned": "simplesamlphp/twig-configurable-i18n",
             "time": "2019-06-07T11:03:28+00:00"
         },
-        {
-            "name": "jakub-onderka/php-console-color",
-            "version": "v0.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/JakubOnderka/PHP-Console-Color.git",
-                "reference": "d5deaecff52a0d61ccb613bb3804088da0307191"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/d5deaecff52a0d61ccb613bb3804088da0307191",
-                "reference": "d5deaecff52a0d61ccb613bb3804088da0307191",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.4.0"
-            },
-            "require-dev": {
-                "jakub-onderka/php-code-style": "1.0",
-                "jakub-onderka/php-parallel-lint": "1.0",
-                "jakub-onderka/php-var-dump-check": "0.*",
-                "phpunit/phpunit": "~4.3",
-                "squizlabs/php_codesniffer": "1.*"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "JakubOnderka\\PhpConsoleColor\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-2-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Jakub Onderka",
-                    "email": "jakub.onderka@gmail.com"
-                }
-            ],
-            "abandoned": "php-parallel-lint/php-console-color",
-            "time": "2018-09-29T17:23:10+00:00"
-        },
-        {
-            "name": "jakub-onderka/php-console-highlighter",
-            "version": "v0.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git",
-                "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/9f7a229a69d52506914b4bc61bfdb199d90c5547",
-                "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547",
-                "shasum": ""
-            },
-            "require": {
-                "ext-tokenizer": "*",
-                "jakub-onderka/php-console-color": "~0.2",
-                "php": ">=5.4.0"
-            },
-            "require-dev": {
-                "jakub-onderka/php-code-style": "~1.0",
-                "jakub-onderka/php-parallel-lint": "~1.0",
-                "jakub-onderka/php-var-dump-check": "~0.1",
-                "phpunit/phpunit": "~4.0",
-                "squizlabs/php_codesniffer": "~1.5"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "JakubOnderka\\PhpConsoleHighlighter\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jakub Onderka",
-                    "email": "acci@acci.cz",
-                    "homepage": "http://www.acci.cz/"
-                }
-            ],
-            "description": "Highlight PHP code in terminal",
-            "abandoned": "php-parallel-lint/php-console-highlighter",
-            "time": "2018-09-29T18:48:56+00:00"
-        },
         {
             "name": "laminas/laminas-diactoros",
             "version": "1.8.7p2",
@@ -10241,16 +10177,16 @@
         },
         {
             "name": "nikic/php-parser",
-            "version": "v4.2.2",
+            "version": "v4.10.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/nikic/PHP-Parser.git",
-                "reference": "1bd73cc04c3843ad8d6b0bfc0956026a151fc420"
+                "reference": "658f1be311a230e0907f5dfe0213742aff0596de"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/1bd73cc04c3843ad8d6b0bfc0956026a151fc420",
-                "reference": "1bd73cc04c3843ad8d6b0bfc0956026a151fc420",
+                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/658f1be311a230e0907f5dfe0213742aff0596de",
+                "reference": "658f1be311a230e0907f5dfe0213742aff0596de",
                 "shasum": ""
             },
             "require": {
@@ -10258,7 +10194,8 @@
                 "php": ">=7.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^6.5 || ^7.0"
+                "ircmaxell/php-yacc": "^0.0.7",
+                "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
             },
             "bin": [
                 "bin/php-parse"
@@ -10266,7 +10203,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.2-dev"
+                    "dev-master": "4.9-dev"
                 }
             },
             "autoload": {
@@ -10288,25 +10225,31 @@
                 "parser",
                 "php"
             ],
-            "time": "2019-05-25T20:07:01+00:00"
+            "time": "2020-09-26T10:30:38+00:00"
         },
         {
             "name": "oomphinc/composer-installers-extender",
-            "version": "v1.1.2",
+            "version": "2.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/oomphinc/composer-installers-extender.git",
-                "reference": "ca1c4b16b0905c81d1e77e608f36a2eff1a56f56"
+                "reference": "8d3fe38a1723e0e91076920c8bb946b1696e28ca"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/oomphinc/composer-installers-extender/zipball/ca1c4b16b0905c81d1e77e608f36a2eff1a56f56",
-                "reference": "ca1c4b16b0905c81d1e77e608f36a2eff1a56f56",
+                "url": "https://api.github.com/repos/oomphinc/composer-installers-extender/zipball/8d3fe38a1723e0e91076920c8bb946b1696e28ca",
+                "reference": "8d3fe38a1723e0e91076920c8bb946b1696e28ca",
                 "shasum": ""
             },
             "require": {
-                "composer-plugin-api": "^1.0",
-                "composer/installers": "^1.0"
+                "composer-plugin-api": "^1.1 || ^2.0",
+                "composer/installers": "^1.0",
+                "php": ">=7.1"
+            },
+            "require-dev": {
+                "composer/composer": "^2.0",
+                "phpunit/phpunit": "^7.2",
+                "squizlabs/php_codesniffer": "^3.3"
             },
             "type": "composer-plugin",
             "extra": {
@@ -10326,11 +10269,16 @@
                     "name": "Stephen Beemsterboer",
                     "email": "stephen@oomphinc.com",
                     "homepage": "https://github.com/balbuf"
+                },
+                {
+                    "name": "Nathan Dentzau",
+                    "email": "nate@oomphinc.com",
+                    "homepage": "http://oomph.is/ndentzau"
                 }
             ],
             "description": "Extend the composer/installers plugin to accept any arbitrary package type.",
             "homepage": "http://www.oomphinc.com/",
-            "time": "2017-03-31T16:57:39+00:00"
+            "time": "2020-08-11T21:06:11+00:00"
         },
         {
             "name": "pantheon-systems/quicksilver-pushback",
@@ -10879,32 +10827,30 @@
         },
         {
             "name": "psy/psysh",
-            "version": "v0.9.9",
+            "version": "v0.10.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/bobthecow/psysh.git",
-                "reference": "9aaf29575bb8293206bb0420c1e1c87ff2ffa94e"
+                "reference": "a8aec1b2981ab66882a01cce36a49b6317dc3560"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/bobthecow/psysh/zipball/9aaf29575bb8293206bb0420c1e1c87ff2ffa94e",
-                "reference": "9aaf29575bb8293206bb0420c1e1c87ff2ffa94e",
+                "url": "https://api.github.com/repos/bobthecow/psysh/zipball/a8aec1b2981ab66882a01cce36a49b6317dc3560",
+                "reference": "a8aec1b2981ab66882a01cce36a49b6317dc3560",
                 "shasum": ""
             },
             "require": {
-                "dnoegel/php-xdg-base-dir": "0.1",
+                "dnoegel/php-xdg-base-dir": "0.1.*",
                 "ext-json": "*",
                 "ext-tokenizer": "*",
-                "jakub-onderka/php-console-highlighter": "0.3.*|0.4.*",
-                "nikic/php-parser": "~1.3|~2.0|~3.0|~4.0",
-                "php": ">=5.4.0",
-                "symfony/console": "~2.3.10|^2.4.2|~3.0|~4.0",
-                "symfony/var-dumper": "~2.7|~3.0|~4.0"
+                "nikic/php-parser": "~4.0|~3.0|~2.0|~1.3",
+                "php": "^8.0 || ^7.0 || ^5.5.9",
+                "symfony/console": "~5.0|~4.0|~3.0|^2.4.2|~2.3.10",
+                "symfony/var-dumper": "~5.0|~4.0|~3.0|~2.7"
             },
             "require-dev": {
                 "bamarni/composer-bin-plugin": "^1.2",
-                "hoa/console": "~2.15|~3.16",
-                "phpunit/phpunit": "~4.8.35|~5.0|~6.0|~7.0"
+                "hoa/console": "3.17.*"
             },
             "suggest": {
                 "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
@@ -10919,7 +10865,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-develop": "0.9.x-dev"
+                    "dev-master": "0.10.x-dev"
                 }
             },
             "autoload": {
@@ -10949,7 +10895,7 @@
                 "interactive",
                 "shell"
             ],
-            "time": "2018-10-13T15:16:03+00:00"
+            "time": "2020-05-03T19:32:03+00:00"
         },
         {
             "name": "ralouphie/getallheaders",
@@ -11865,16 +11811,16 @@
         },
         {
             "name": "symfony/filesystem",
-            "version": "v3.4.42",
+            "version": "v3.4.46",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/filesystem.git",
-                "reference": "0f625d0cb1e59c8c4ba61abb170125175218ff10"
+                "reference": "e58d7841cddfed6e846829040dca2cca0ebbbbb3"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/0f625d0cb1e59c8c4ba61abb170125175218ff10",
-                "reference": "0f625d0cb1e59c8c4ba61abb170125175218ff10",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/e58d7841cddfed6e846829040dca2cca0ebbbbb3",
+                "reference": "e58d7841cddfed6e846829040dca2cca0ebbbbb3",
                 "shasum": ""
             },
             "require": {
@@ -11882,11 +11828,6 @@
                 "symfony/polyfill-ctype": "~1.8"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
                     "Symfony\\Component\\Filesystem\\": ""
@@ -11911,31 +11852,40 @@
             ],
             "description": "Symfony Filesystem Component",
             "homepage": "https://symfony.com",
-            "time": "2020-05-30T17:48:24+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-10-24T10:57:07+00:00"
         },
         {
             "name": "symfony/finder",
-            "version": "v3.4.28",
+            "version": "v3.4.46",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "fa5d962a71f2169dfe1cbae217fa5a2799859f6c"
+                "reference": "4e1da3c110c52d868f8a9153b7de3ebc381fba78"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/fa5d962a71f2169dfe1cbae217fa5a2799859f6c",
-                "reference": "fa5d962a71f2169dfe1cbae217fa5a2799859f6c",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/4e1da3c110c52d868f8a9153b7de3ebc381fba78",
+                "reference": "4e1da3c110c52d868f8a9153b7de3ebc381fba78",
                 "shasum": ""
             },
             "require": {
                 "php": "^5.5.9|>=7.0.8"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
                     "Symfony\\Component\\Finder\\": ""
@@ -11960,7 +11910,21 @@
             ],
             "description": "Symfony Finder Component",
             "homepage": "https://symfony.com",
-            "time": "2019-05-24T12:25:55+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-10-24T10:57:07+00:00"
         },
         {
             "name": "symfony/http-foundation",
@@ -12991,16 +12955,16 @@
         },
         {
             "name": "symfony/var-dumper",
-            "version": "v3.4.28",
+            "version": "v3.4.46",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/var-dumper.git",
-                "reference": "ca5fef348a0440411bbca0f9ec14e9a11625bd6a"
+                "reference": "0719f6cf4633a38b2c1585140998579ce23b4b7d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ca5fef348a0440411bbca0f9ec14e9a11625bd6a",
-                "reference": "ca5fef348a0440411bbca0f9ec14e9a11625bd6a",
+                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0719f6cf4633a38b2c1585140998579ce23b4b7d",
+                "reference": "0719f6cf4633a38b2c1585140998579ce23b4b7d",
                 "shasum": ""
             },
             "require": {
@@ -13020,11 +12984,6 @@
                 "ext-symfony_debug": ""
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
             "autoload": {
                 "files": [
                     "Resources/functions/dump.php"
@@ -13056,7 +13015,21 @@
                 "debug",
                 "dump"
             ],
-            "time": "2019-05-01T09:52:10+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-10-24T10:57:07+00:00"
         },
         {
             "name": "symfony/yaml",
@@ -13289,18 +13262,21 @@
         },
         {
             "name": "webflo/drupal-finder",
-            "version": "1.1.0",
+            "version": "1.2.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/webflo/drupal-finder.git",
-                "reference": "8a7886c575d6eaa67a425dceccc84e735c0b9637"
+                "reference": "c8e5dbe65caef285fec8057a4c718a0d4138d1ee"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webflo/drupal-finder/zipball/8a7886c575d6eaa67a425dceccc84e735c0b9637",
-                "reference": "8a7886c575d6eaa67a425dceccc84e735c0b9637",
+                "url": "https://api.github.com/repos/webflo/drupal-finder/zipball/c8e5dbe65caef285fec8057a4c718a0d4138d1ee",
+                "reference": "c8e5dbe65caef285fec8057a4c718a0d4138d1ee",
                 "shasum": ""
             },
+            "require": {
+                "ext-json": "*"
+            },
             "require-dev": {
                 "mikey179/vfsstream": "^1.6",
                 "phpunit/phpunit": "^4.8"
@@ -13313,7 +13289,7 @@
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "GPL-2.0+"
+                "GPL-2.0-or-later"
             ],
             "authors": [
                 {
@@ -13322,7 +13298,7 @@
                 }
             ],
             "description": "Helper class to locate a Drupal installation from a given path.",
-            "time": "2017-10-24T08:12:11+00:00"
+            "time": "2020-10-27T09:42:17+00:00"
         },
         {
             "name": "webmozart/assert",
diff --git a/vendor/chi-teck/drupal-code-generator/composer.json b/vendor/chi-teck/drupal-code-generator/composer.json
index 07a1cc5e8c..398db7c036 100644
--- a/vendor/chi-teck/drupal-code-generator/composer.json
+++ b/vendor/chi-teck/drupal-code-generator/composer.json
@@ -6,7 +6,7 @@
     "ext-json": "*",
     "symfony/console": "^3.4 || ^4.0",
     "symfony/filesystem": "^2.7 || ^3.4 || ^4.0",
-    "twig/twig": "^1.38.2 || ^2.10"
+    "twig/twig": "^1.41 || ^2.12"
   },
   "bin": [
     "bin/dcg"
diff --git a/vendor/chi-teck/drupal-code-generator/src/ApplicationFactory.php b/vendor/chi-teck/drupal-code-generator/src/ApplicationFactory.php
index 40c3f3f79f..f3160e4753 100644
--- a/vendor/chi-teck/drupal-code-generator/src/ApplicationFactory.php
+++ b/vendor/chi-teck/drupal-code-generator/src/ApplicationFactory.php
@@ -44,12 +44,7 @@ public static function create() {
     $helper_set = new HelperSet([
       new QuestionHelper(),
       new Dumper(new Filesystem()),
-      // We cannot reference the TwigEnvironment class with use statement
-      // because of a PHP bug.
-      // @see https://bugs.php.net/bug.php?id=66773
-      // @codingStandardsIgnoreStart
-      new Renderer(new \DrupalCodeGenerator\Twig\TwigEnvironment(new \Twig_Loader_Filesystem())),
-      // @codingStandardsIgnoreEnd
+      new Renderer(dcg_get_twig_environment(new \Twig_Loader_Filesystem())),
       new InputHandler(),
       new OutputHandler(),
     ]);
diff --git a/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_7/Hook.php b/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_7/Hook.php
index 2739fc32d0..98ad011556 100644
--- a/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_7/Hook.php
+++ b/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_7/Hook.php
@@ -24,7 +24,7 @@ protected function interact(InputInterface $input, OutputInterface $output) {
     $questions['hook_name'] = new Question('Hook name');
     $questions['hook_name']->setValidator(function ($value) {
       if (!in_array($value, $this->getSupportedHooks())) {
-        throw new \UnexpectedValueException('The value is not correct class name.');
+        throw new \UnexpectedValueException('The value is not correct hook name.');
       }
       return $value;
     });
diff --git a/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Hook.php b/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Hook.php
index 64dc1a6672..0d5bbd7782 100644
--- a/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Hook.php
+++ b/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Hook.php
@@ -25,7 +25,7 @@ protected function interact(InputInterface $input, OutputInterface $output) {
     $questions['hook_name'] = new Question('Hook name');
     $questions['hook_name']->setValidator(function ($value) {
       if (!in_array($value, $this->supportedHooks())) {
-        throw new \UnexpectedValueException('The value is not correct class name.');
+        throw new \UnexpectedValueException('The value is not correct hook name.');
       }
       return $value;
     });
diff --git a/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/PhpStormMetadata.php b/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/PhpStormMetadata.php
new file mode 100644
index 0000000000..f7b52125ff
--- /dev/null
+++ b/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/PhpStormMetadata.php
@@ -0,0 +1,72 @@
+<?php
+
+namespace DrupalCodeGenerator\Command\Drupal_8;
+
+use DrupalCodeGenerator\Command\BaseGenerator;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+/**
+ * Implements d8:phpstorm-metadata command.
+ */
+class PhpStormMetadata extends BaseGenerator {
+
+  protected $name = 'd8:phpstorm-metadata';
+  protected $description = 'Generates PhpStorm metadata';
+  protected $label = 'PhpStorm metadata';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function interact(InputInterface $input, OutputInterface $output) {
+
+    if (!class_exists('Drupal') || !\Drupal::hasContainer()) {
+      throw new \RuntimeException('Could not bootstrap Drupal to fetch metadata.');
+    }
+    $container = \Drupal::getContainer();
+
+    $vars = &$this->vars;
+
+    $service_definitions = $container
+      ->get('kernel')
+      ->getCachedContainerDefinition()['services'];
+    $service_definitions = array_map('unserialize', $service_definitions);
+
+    foreach ($service_definitions as $service_id => $service_definition) {
+      if ($service_definition['class']) {
+        $vars['services'][$service_id] = $service_definition['class'];
+      }
+    }
+
+    $entity_type_manager = $container->get('entity_type.manager');
+    $vars['storages'] = [];
+    $vars['view_builders'] = [];
+    $vars['list_builders'] = [];
+    $vars['access_controls'] = [];
+    $vars['entity_classes'] = [];
+    foreach ($entity_type_manager->getDefinitions() as $type => $definition) {
+      /** @var \Drupal\Core\Entity\EntityTypeInterface $definition  */
+      $vars['entity_classes'][] = $definition->getClass();
+      $vars['storages'][$type] = $definition->getStorageClass();
+      $vars['access_controls'][$type] = $definition->getAccessControlClass();
+      if ($definition->hasViewBuilderClass()) {
+        $vars['view_builders'][$type] = $definition->getViewBuilderClass();
+      }
+      if ($definition->hasListBuilderClass()) {
+        $vars['list_builders'][$type] = $definition->getListBuilderClass();
+      }
+    }
+
+    // Some classes does not have leading slash.
+    array_walk_recursive($vars, function (string &$class): void {
+      if ($class[0] != '\\') {
+        $class = '\\' . $class;
+      }
+    });
+
+    $this->addFile()
+      ->path('.phpstorm.meta.php')
+      ->template('d8/phpstorm-meta.twig');
+  }
+
+}
diff --git a/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Project.php b/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Project.php
index 21c59a7f43..6192361b1e 100644
--- a/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Project.php
+++ b/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Project.php
@@ -20,14 +20,33 @@ class Project extends BaseGenerator {
   protected $description = 'Generates a composer project';
   protected $alias = 'project';
 
-  const DRUPAL_DEFAULT_VERSION = '~8.7.0';
+  /**
+   * Array of packages to check versions for.
+   *
+   * The key is package name and the value is allowable major version.
+   */
+  const PACKAGES = [
+    'composer/installers' => '^1.8',
+    'cweagans/composer-patches' => '^1.6',
+    'drupal/core' => '^8.8',
+    'drupal/core-composer-scaffold' => '^8.8',
+    'drush/drush' => '^10.2',
+    'oomphinc/composer-installers-extender' => '^1.1',
+    'symfony/dotenv' => '^4.4',
+    'drupal/core-recommended' => '^8.8',
+    'drupal/core-dev' => '^8.8',
+    'zaporylie/composer-drupal-optimizations' => '^1.1',
+    'weitzman/drupal-test-traits' => '^1.3',
+  ];
 
   /**
    * {@inheritdoc}
    */
   protected function interact(InputInterface $input, OutputInterface $output) {
 
-    $name_validator = function ($value) {
+    $vars = &$this->vars;
+
+    $name_validator = function (?string $value): ?string {
       if (!preg_match('#[^/]+/[^/]+$#i', $value)) {
         throw new \UnexpectedValueException('The value is not correct project name.');
       }
@@ -69,78 +88,38 @@ protected function interact(InputInterface $input, OutputInterface $output) {
       'httpdocs',
       'html',
     ];
-    $questions['document_root'] = new Question('Document root directory, type single dot to use Composer root', 'docroot');
-    $questions['document_root']->setNormalizer(function ($value) {
-      return $value == '.' ? '' : $value;
-    });
+    $questions['document_root'] = new Question('Document root directory', 'docroot');
     $questions['document_root']->setAutocompleterValues($document_roots);
 
     $questions['php'] = new Question('PHP version', '>=' . PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION);
-    $questions['drupal'] = new Question('Drupal version', self::DRUPAL_DEFAULT_VERSION);
-    $questions['drupal_core_strict'] = new ConfirmationQuestion('Would you like to get the same versions of Drupal core\'s dependencies as in Drupal core\'s composer.lock file?', FALSE);
 
-    $this->collectVars($input, $output, $questions);
+    $questions['drupal_core_recommended'] = new ConfirmationQuestion('Would you like to install recommended Drupal core dependencies?', FALSE);
+    $questions['drupal_core_dev'] = new ConfirmationQuestion('Would you like to install Drupal core development dependencies?', FALSE);
 
-    $sections = ['require', 'require-dev'];
+    $questions['drush'] = new ConfirmationQuestion('Would you like to install Drush?');
 
-    $questions['drush'] = new ConfirmationQuestion('Would you like to install Drush?', TRUE);
-    $vars = $this->collectVars($input, $output, $questions);
-    if ($vars['drush']) {
-      $questions['drush_installation'] = new Question('Drush installation (require|require-dev)', 'require');
-      $questions['drush_installation']->setValidator(Utils::getOptionsValidator($sections));
-      $questions['drush_installation']->setAutocompleterValues($sections);
-      $this->collectVars($input, $output, $questions);
-    }
-
-    $questions['drupal_console'] = new ConfirmationQuestion('Would you like to install Drupal Console?', !$vars['drush']);
-    $vars = $this->collectVars($input, $output, $questions);
-    if ($vars['drupal_console']) {
-      $questions['drupal_console_installation'] = new Question('Drupal Console installation (require|require-dev)', 'require-dev');
-      $questions['drupal_console_installation']->setValidator(Utils::getOptionsValidator($sections));
-      $questions['drupal_console_installation']->setAutocompleterValues($sections);
-      $this->collectVars($input, $output, $questions);
-    }
-
-    $questions['composer_patches'] = new ConfirmationQuestion('Would you like to install Composer patches plugin?', TRUE);
-    $questions['composer_merge'] = new ConfirmationQuestion('Would you like to install Composer merge plugin?', FALSE);
-    $questions['behat'] = new ConfirmationQuestion('Would you like to create Behat tests?', FALSE);
+    $questions['composer_patches'] = new ConfirmationQuestion('Would you like to install Composer patches plugin?');
     $questions['env'] = new ConfirmationQuestion('Would you like to load environment variables from .env files?', FALSE);
     $questions['asset_packagist'] = new ConfirmationQuestion('Would you like to add asset-packagist repository?', FALSE);
 
-    $vars = &$this->collectVars($input, $output, $questions);
+    $questions['tests'] = new ConfirmationQuestion('Would you like to create tests?', FALSE);
 
-    $vars['document_root_path'] = $vars['document_root'] ?
-      $vars['document_root'] . '/' : $vars['document_root'];
+    $this->collectVars($input, $output, $questions);
+    $vars['document_root_path'] = $vars['document_root'] . '/';
+    if ($vars['tests']) {
+      // @codingStandardsIgnoreStart
+      [$vendor, $short_name] = explode('/', $vars['name']);
+      $vars['namespace'] = Utils::camelize($vendor == $short_name ? $vendor : $vars['name']);
+      // @codingStandardsIgnoreEnd
+    }
 
-    $this->addFile('composer.json')
-      ->content(self::buildComposerJson($vars));
+    $this->addFile('composer.json')->content($this->buildComposerJson($vars));
 
     $this->addFile('.gitignore')
       ->template('d8/_project/gitignore.twig');
-
     $this->addFile('phpcs.xml')
       ->template('d8/_project/phpcs.xml.twig');
 
-    $this->addFile('scripts/composer/create_required_files.php')
-      ->template('d8/_project/scripts/composer/create_required_files.php.twig');
-
-    if ($vars['behat']) {
-      $this->addFile('tests/behat/behat.yml')
-        ->template('d8/_project/tests/behat/behat.yml.twig');
-
-      $this->addFile('tests/behat/local.behat.yml')
-        ->template('d8/_project/tests/behat/local.behat.yml.twig');
-
-      $this->addFile('tests/behat/bootstrap/BaseContext.php')
-        ->template('d8/_project/tests/behat/bootstrap/BaseContext.php.twig');
-
-      $this->addFile('tests/behat/bootstrap/ExampleContext.php')
-        ->template('d8/_project/tests/behat/bootstrap/ExampleContext.php.twig');
-
-      $this->addFile('tests/behat/features/example/user_forms.feature')
-        ->template('d8/_project/tests/behat/features/example/user_forms.feature.twig');
-    }
-
     if ($vars['env']) {
       $this->addFile('.env.example')
         ->template('d8/_project/env.example.twig');
@@ -153,8 +132,6 @@ protected function interact(InputInterface $input, OutputInterface $output) {
     }
 
     if ($vars['drush']) {
-      $this->addFile('drush/drush.yml')
-        ->template('d8/_project/drush/drush.yml.twig');
       $this->addFile('drush/Commands/PolicyCommands.php')
         ->template('d8/_project/drush/Commands/PolicyCommands.php.twig');
       $this->addFile('drush/sites/self.site.yml')
@@ -164,11 +141,18 @@ protected function interact(InputInterface $input, OutputInterface $output) {
         ->mode(0544);
     }
 
+    if ($vars['tests']) {
+      $this->addFile('phpunit.xml')
+        ->template('d8/_project/phpunit.xml.twig');
+      $this->addFile('tests/src/HomePageTest.php')
+        ->template('d8/_project/tests/src/HomePageTest.php.twig');
+    }
+
     $this->addFile('patches/.keep')->content('');
-    $this->addDirectory($vars['document_root_path'] . 'modules/contrib');
-    $this->addDirectory($vars['document_root_path'] . 'modules/custom');
-    $this->addDirectory($vars['document_root_path'] . 'modules/custom');
-    $this->addDirectory($vars['document_root_path'] . 'libraries');
+    $this->addDirectory('{document_root}/modules/contrib');
+    $this->addDirectory('{document_root}/modules/custom');
+    $this->addDirectory('{document_root}/themes/custom');
+    $this->addDirectory('{document_root}/libraries');
   }
 
   /**
@@ -196,14 +180,14 @@ protected function execute(InputInterface $input, OutputInterface $output) {
    * @return string
    *   Encoded JSON content.
    */
-  protected static function buildComposerJson(array $vars) {
+  protected function buildComposerJson(array $vars) {
 
     $document_root_path = $vars['document_root_path'];
 
     $composer_json = [];
 
     $composer_json['name'] = $vars['name'];
-    $composer_json['description'] = $vars['description'];
+    $composer_json['description'] = (string) $vars['description'];
     $composer_json['type'] = 'project';
     $composer_json['license'] = $vars['license'];
 
@@ -221,48 +205,41 @@ protected static function buildComposerJson(array $vars) {
     $require = [];
     $require_dev = [];
 
-    self::addPackage($require, 'drupal/core');
-    $require['drupal/core'] = $vars['drupal'];
-    self::addPackage($require, 'composer/installers');
-    self::addPackage($require, 'drupal-composer/drupal-scaffold');
-    self::addPackage($require, 'zaporylie/composer-drupal-optimizations');
-    $require_dev['webflo/drupal-core-require-dev'] = $vars['drupal'];
+    $this->addPackage($require, 'drupal/core-composer-scaffold');
+    $this->addPackage($require, 'zaporylie/composer-drupal-optimizations');
 
     if ($vars['asset_packagist']) {
-      self::addPackage($require, 'oomphinc/composer-installers-extender');
+      $this->addPackage($require, 'oomphinc/composer-installers-extender');
     }
 
-    if ($vars['drupal_core_strict']) {
-      $require['webflo/drupal-core-strict'] = $vars['drupal'];
+    if ($vars['drupal_core_recommended']) {
+      $this->addPackage($require, 'drupal/core-recommended');
     }
-
-    if ($vars['drush']) {
-      $vars['drush_installation'] == 'require'
-        ? self::addPackage($require, 'drush/drush')
-        : self::addPackage($require_dev, 'drush/drush');
+    else {
+      $this->addPackage($require, 'drupal/core');
+      $this->addPackage($require, 'composer/installers');
     }
 
-    if ($vars['drupal_console']) {
-      $vars['drupal_console_installation'] == 'require'
-        ? self::addPackage($require, 'drupal/console')
-        : self::addPackage($require_dev, 'drupal/console');
+    if ($vars['drupal_core_dev']) {
+      $this->addPackage($require_dev, 'drupal/core-dev');
     }
 
-    if ($vars['composer_patches']) {
-      self::addPackage($require, 'cweagans/composer-patches');
+    if ($vars['drush']) {
+      $this->addPackage($require, 'drush/drush');
     }
 
-    if ($vars['composer_merge']) {
-      self::addPackage($require, 'wikimedia/composer-merge-plugin');
+    if ($vars['composer_patches']) {
+      $this->addPackage($require, 'cweagans/composer-patches');
     }
 
-    if ($vars['behat']) {
-      // Behat and Mink drivers are Drupal core dev dependencies.
-      self::addPackage($require_dev, 'drupal/drupal-extension');
+    if ($vars['env']) {
+      $this->addPackage($require, 'symfony/dotenv');
+      $composer_json['autoload']['files'][] = 'load.environment.php';
     }
 
-    if ($vars['env']) {
-      self::addPackage($require, 'symfony/dotenv');
+    if ($vars['tests']) {
+      $this->addPackage($require_dev, 'weitzman/drupal-test-traits');
+      $composer_json['autoload-dev']['psr-4'][$vars['namespace'] . '\\Tests\\'] = 'tests/src';
     }
 
     $composer_json['require'] = [
@@ -275,17 +252,9 @@ protected static function buildComposerJson(array $vars) {
     $composer_json['require'] += $require;
 
     ksort($require_dev);
-    $composer_json['require-dev'] = $require_dev;
+    $composer_json['require-dev'] = (object) $require_dev;
 
-    // PHPUnit is core dev dependency.
-    $composer_json['scripts']['phpunit'] = 'phpunit --colors=always --configuration ' . $document_root_path . 'core ' . $document_root_path . 'modules/custom';
-    if ($vars['behat']) {
-      $composer_json['scripts']['behat'] = 'behat --colors --config=tests/behat/local.behat.yml';
-    }
     $composer_json['scripts']['phpcs'] = 'phpcs --standard=phpcs.xml';
-    $composer_json['scripts']['post-install-cmd'][] = '@php ./scripts/composer/create_required_files.php';
-    $composer_json['scripts']['post-update-cmd'][] = '@php ./scripts/composer/create_required_files.php';
-
     $composer_json['minimum-stability'] = 'dev';
     $composer_json['prefer-stable'] = TRUE;
 
@@ -294,14 +263,12 @@ protected static function buildComposerJson(array $vars) {
       'bin-dir' => 'bin',
     ];
 
-    if ($vars['env']) {
-      $composer_json['autoload']['files'][] = 'load.environment.php';
-    }
-
     if ($vars['composer_patches']) {
       $composer_json['extra']['composer-exit-on-patch-failure'] = TRUE;
     }
 
+    $composer_json['extra']['drupal-scaffold']['locations']['web-root'] = $vars['document_root_path'];
+
     if ($vars['asset_packagist']) {
       $composer_json['extra']['installer-types'] = [
         'bower-asset',
@@ -315,45 +282,12 @@ protected static function buildComposerJson(array $vars) {
       $document_root_path . 'themes/{$name}' => ['type:drupal-theme'],
       'drush/{$name}' => ['type:drupal-drush'],
     ];
+
     if ($vars['asset_packagist']) {
       $composer_json['extra']['installer-paths'][$document_root_path . 'libraries/{$name}'][] = 'type:bower-asset';
       $composer_json['extra']['installer-paths'][$document_root_path . 'libraries/{$name}'][] = 'type:npm-asset';
     }
 
-    $composer_json['extra']['drupal-scaffold']['excludes'] = [
-      '.csslintrc',
-      '.editorconfig',
-      '.eslintignore',
-      '.eslintrc.json',
-      '.gitattributes',
-      '.ht.router.php',
-      '.htaccess',
-      'robots.txt',
-      'update.php',
-      'web.config',
-    ];
-    // Initial files are created but never updated.
-    $composer_json['extra']['drupal-scaffold']['initial'] = [
-      '.htaccess' => '.htaccess',
-      'robots.txt' => 'robots.txt',
-    ];
-
-    // Move these files to Composer root.
-    if ($vars['document_root']) {
-      $composer_json['extra']['drupal-scaffold']['initial']['.editorconfig'] = '../.editorconfig';
-      $composer_json['extra']['drupal-scaffold']['initial']['.gitattributes'] = '../.gitattributes';
-    }
-    ksort($composer_json['extra']['drupal-scaffold']['initial']);
-
-    if ($vars['composer_merge']) {
-      $composer_json['extra']['merge-plugin'] = [
-        'include' => [
-          $document_root_path . 'modules/custom/*/composer.json',
-        ],
-        'recurse' => TRUE,
-      ];
-    }
-
     return json_encode($composer_json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\n";
   }
 
@@ -364,26 +298,12 @@ protected static function buildComposerJson(array $vars) {
    *   Section for the package (require|require-dev)
    * @param string $package
    *   A package to be added.
-   *
-   * @todo Find a way to track versions automatically.
    */
-  protected static function addPackage(array &$section, $package) {
-    $versions = [
-      'composer/installers' => '^1.4',
-      'cweagans/composer-patches' => '^1.6',
-      'drupal-composer/drupal-scaffold' => '^2.5',
-      'drupal/console' => '^1.0',
-      'drupal/core' => self::DRUPAL_DEFAULT_VERSION,
-      'drupal/drupal-extension' => '^3.4',
-      'drush/drush' => '^9.6',
-      'oomphinc/composer-installers-extender' => '^1.1',
-      'symfony/dotenv' => '^3.4',
-      'webflo/drupal-core-require-dev' => self::DRUPAL_DEFAULT_VERSION,
-      'webflo/drupal-core-strict' => self::DRUPAL_DEFAULT_VERSION,
-      'wikimedia/composer-merge-plugin' => '^1.4',
-      'zaporylie/composer-drupal-optimizations' => '^1.1',
-    ];
-    $section[$package] = $versions[$package];
+  private function addPackage(array &$section, $package) {
+    if (!array_key_exists($package, self::PACKAGES)) {
+      throw new \InvalidArgumentException("Package $package is unknown.");
+    }
+    $section[$package] = self::PACKAGES[$package];
   }
 
 }
diff --git a/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Service/EventSubscriber.php b/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Service/EventSubscriber.php
index a83ed8016a..3f065576ac 100644
--- a/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Service/EventSubscriber.php
+++ b/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Service/EventSubscriber.php
@@ -6,6 +6,7 @@
 use DrupalCodeGenerator\Utils;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Question\Question;
 
 /**
  * Implements d8:service:event-subscriber command.
@@ -22,8 +23,13 @@ class EventSubscriber extends BaseGenerator {
   protected function interact(InputInterface $input, OutputInterface $output) {
     $questions = Utils::defaultQuestions();
 
-    $vars = &$this->collectVars($input, $output, $questions);
-    $vars['class'] = Utils::camelize($vars['machine_name']) . 'Subscriber';
+    $default_class = function ($vars) {
+      return Utils::camelize($vars['machine_name']) . 'Subscriber';
+    };
+    $questions['class'] = new Question('Class', $default_class);
+    $questions['class']->setValidator([Utils::class, 'validateClassName']);
+
+    $this->collectVars($input, $output, $questions);
 
     $this->addFile()
       ->path('src/EventSubscriber/{class}.php')
diff --git a/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Service/Middleware.php b/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Service/Middleware.php
index c51aac4cd3..efeff42888 100644
--- a/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Service/Middleware.php
+++ b/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Service/Middleware.php
@@ -6,6 +6,7 @@
 use DrupalCodeGenerator\Utils;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Question\Question;
 
 /**
  * Implements d8:service:middleware command.
@@ -20,9 +21,14 @@ class Middleware extends BaseGenerator {
    * {@inheritdoc}
    */
   protected function interact(InputInterface $input, OutputInterface $output) {
-    $questions = Utils::defaultQuestions();
-    $vars = &$this->collectVars($input, $output, $questions);
-    $vars['class'] = Utils::camelize($vars['machine_name']) . 'Middleware';
+    $questions = Utils::moduleQuestions();
+
+    $default_class = function ($vars) {
+      return Utils::camelize($vars['machine_name']) . 'Middleware';
+    };
+    $questions['class'] = new Question('Class', $default_class);
+    $questions['class']->setValidator([Utils::class, 'validateClassName']);
+    $this->collectVars($input, $output, $questions);
 
     $this->addFile()
       ->path('src/{class}.php')
diff --git a/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Service/RouteSubscriber.php b/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Service/RouteSubscriber.php
index 8382b555ec..bb99145d73 100644
--- a/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Service/RouteSubscriber.php
+++ b/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Service/RouteSubscriber.php
@@ -6,6 +6,7 @@
 use DrupalCodeGenerator\Utils;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Question\Question;
 
 /**
  * Implements d8:service:route-subscriber command.
@@ -20,10 +21,15 @@ class RouteSubscriber extends BaseGenerator {
    * {@inheritdoc}
    */
   protected function interact(InputInterface $input, OutputInterface $output) {
-    $questions = Utils::defaultQuestions();
+    $questions = Utils::moduleQuestions();
 
-    $vars = &$this->collectVars($input, $output, $questions);
-    $vars['class'] = Utils::camelize($vars['machine_name']) . 'RouteSubscriber';
+    $default_class = function ($vars) {
+      return Utils::camelize($vars['machine_name']) . 'RouteSubscriber';
+    };
+    $questions['class'] = new Question('Class', $default_class);
+    $questions['class']->setValidator([Utils::class, 'validateClassName']);
+
+    $this->collectVars($input, $output, $questions);
 
     $this->addFile()
       ->path('src/EventSubscriber/{class}.php')
diff --git a/vendor/chi-teck/drupal-code-generator/src/Helper/Renderer.php b/vendor/chi-teck/drupal-code-generator/src/Helper/Renderer.php
index a9256998b1..df81f21e2e 100644
--- a/vendor/chi-teck/drupal-code-generator/src/Helper/Renderer.php
+++ b/vendor/chi-teck/drupal-code-generator/src/Helper/Renderer.php
@@ -3,7 +3,7 @@
 namespace DrupalCodeGenerator\Helper;
 
 use Symfony\Component\Console\Helper\Helper;
-use Twig_Environment;
+use Twig\Environment;
 
 /**
  * Output dumper form generators.
@@ -13,17 +13,17 @@ class Renderer extends Helper {
   /**
    * The twig environment.
    *
-   * @var \Twig_Environment
+   * @var \Twig\Environment
    */
   protected $twig;
 
   /**
    * Constructs a generator command.
    *
-   * @param \Twig_Environment $twig
+   * @param \Twig\Environment $twig
    *   The twig environment.
    */
-  public function __construct(Twig_Environment $twig) {
+  public function __construct(Environment $twig) {
     $this->twig = $twig;
   }
 
diff --git a/vendor/chi-teck/drupal-code-generator/src/bootstrap.php b/vendor/chi-teck/drupal-code-generator/src/bootstrap.php
index 78f0049d8c..0cfb078a11 100644
--- a/vendor/chi-teck/drupal-code-generator/src/bootstrap.php
+++ b/vendor/chi-teck/drupal-code-generator/src/bootstrap.php
@@ -6,6 +6,9 @@
  */
 
 use DrupalCodeGenerator\ApplicationFactory;
+use DrupalCodeGenerator\Twig\Twig1Environment;
+use DrupalCodeGenerator\Twig\Twig2Environment;
+use Twig\Environment;
 
 /**
  * DCG root.
@@ -30,17 +33,40 @@ function dcg_create_application() {
   return ApplicationFactory::create();
 }
 
+/**
+ * Creates an Twig environment.
+ */
+function dcg_get_twig_environment($loader) {
+  switch (Environment::MAJOR_VERSION) {
+    case 1:
+      $environment = new Twig1Environment($loader);
+      break;
+
+    case 2:
+      $environment = new Twig2Environment($loader);
+      break;
+
+    default:
+      throw new \RuntimeException('Unsupported Twig version');
+  }
+  return $environment;
+}
+
 // Determine major Twig version.
-// Twig_Environment::MAJOR_VERSION is not suitable here because of
+// \Twig\Environment::MAJOR_VERSION is not suitable here because of
 // https://github.com/twigphp/Twig/pull/2945
 // Use this workaround as drupal/drupal is locked on Twig 1.38.
-list($twig_major_version) = sscanf(Twig_Environment::VERSION, '%d.%d.%d');
+list($twig_major_version) = sscanf(Environment::VERSION, '%d.%d.%d');
 
-// Twig_Environment::tokenize() signature has been changed in Twig 2, so that
-// it is not possible to maintain the same Twig_Environment sub-class for both
+// \Twig\Environment::tokenize() signature has been changed in Twig 2, so that
+// it is not possible to maintain the same \Twig\Environment sub-class for both
 // Twig versions.
 $twig_environment_class = sprintf('DrupalCodeGenerator\Twig\Twig%dEnvironment', $twig_major_version);
-class_alias($twig_environment_class, 'DrupalCodeGenerator\Twig\TwigEnvironment');
+if (!class_exists('DrupalCodeGenerator\Twig\TwigEnvironment')) {
+  class_alias($twig_environment_class, 'DrupalCodeGenerator\Twig\TwigEnvironment');
+}
 
 // Legacy TwigEnvironment class is still used in Drush.
-class_alias($twig_environment_class, 'DrupalCodeGenerator\TwigEnvironment');
+if (!class_exists('DrupalCodeGenerator\TwigEnvironment')) {
+  class_alias($twig_environment_class, 'DrupalCodeGenerator\TwigEnvironment');
+}
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/_field/type.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/_field/type.twig
index dee8d020d8..b00e5c3090 100644
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/_field/type.twig
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/_field/type.twig
@@ -144,7 +144,7 @@ class {{ type_class }} extends FieldItemBase {
     $constraint_manager = \Drupal::typedDataManager()->getValidationConstraintManager();
     $constraints[] = $constraint_manager->create('ComplexData', $options);
 {% endif %}
-    // @todo Add more constrains here.
+    // @todo Add more constraints here.
     return $constraints;
   }
 
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/drush/Commands/PolicyCommands.php.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/drush/Commands/PolicyCommands.php.twig
index 5d0ace54de..c862f4fe48 100644
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/drush/Commands/PolicyCommands.php.twig
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/drush/Commands/PolicyCommands.php.twig
@@ -19,7 +19,7 @@ class PolicyCommands extends DrushCommands {
   public function sqlSyncValidate(CommandData $commandData) {
     $target = $commandData->input()->getArgument('target');
     if ($target != '@local') {
-      throw new \Exception(dt('Per !file, you may never overwrite the production database.', ['!file' => __FILE__]));
+      throw new \Exception(dt('Per !file, you may never overwrite the remote database.', ['!file' => __FILE__]));
     }
   }
 
@@ -33,7 +33,7 @@ class PolicyCommands extends DrushCommands {
   public function rsyncValidate(CommandData $commandData) {
     $target = $commandData->input()->getArgument('target');
     if (strpos($target, '@prod') == 0) {
-      throw new \Exception(dt('Per !file, you may never rsync to the production site.', ['!file' => __FILE__]));
+      throw new \Exception(dt('Per !file, you may never rsync to the remote site.', ['!file' => __FILE__]));
     }
   }
 
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/drush/drush.yml.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/drush/drush.yml.twig
deleted file mode 100644
index ce1893c956..0000000000
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/drush/drush.yml.twig
+++ /dev/null
@@ -1,3 +0,0 @@
-# Running commands without a pseudo-terminal on remote server is safer.
-ssh:
-  tty: false
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/drush/sites/self.site.yml.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/drush/sites/self.site.yml.twig
index dd4f953d7a..8ce0e0f0b5 100644
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/drush/sites/self.site.yml.twig
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/drush/sites/self.site.yml.twig
@@ -7,7 +7,7 @@ prod:
   uri: http://www.example.com
 
 stage:
-  host: stage.domain.com
+  host: stage.example.com
   user: stage-user
   root: /path/to/drupal
   uri: http://stage.example.com
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/phpunit.xml.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/phpunit.xml.twig
new file mode 100644
index 0000000000..1f3c0a21f8
--- /dev/null
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/phpunit.xml.twig
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- Copy the samples below into your own phpunit.xml file.-->
+
+<!-- Using this project's bootstrap file allows tests in `ExistingSite`,
+    `ExistingSiteSelenium2DriverTest`, and `ExistingSiteWebDriverTest`
+     to run alongside core's test types. -->
+<phpunit bootstrap="vendor/weitzman/drupal-test-traits/src/bootstrap-fast.php">
+    <php>
+        <env name="DTT_BASE_URL" value="http://example.com"/>
+        <env name="DTT_API_URL" value="http://localhost:9222"/>
+        <!-- <env name="DTT_MINK_DRIVER_ARGS" value='["chrome", { "chromeOptions" : { "w3c": false } }, "http://localhost:4444/wd/hub"]'/> -->
+        <env name="DTT_MINK_DRIVER_ARGS" value='["firefox", null, "http://localhost:4444/wd/hub"]'/>
+        <env name="DTT_API_OPTIONS" value='{"socketTimeout": 360, "domWaitTimeout": 3600000}' />
+        <!-- Example BROWSERTEST_OUTPUT_DIRECTORY value: /tmp
+             Specify a temporary directory for storing debug images and html documents.
+             These artifacts get copied to /sites/simpletest/browser_output by BrowserTestBase. -->
+        <env name="BROWSERTEST_OUTPUT_DIRECTORY" value=""/>
+        <!-- To disable deprecation testing completely uncomment the next line. -->
+        <!--<env name="SYMFONY_DEPRECATIONS_HELPER" value="disabled"/>-->
+        <!-- Specify the default directory screenshots should be placed. -->
+        <!--<env name="DTT_SCREENSHOT_REPORT_DIRECTORY" value=""/>-->
+    </php>
+
+    <testsuites>
+        <testsuite name="unit">
+            <directory>./{{ document_root_path }}modules/custom/*/tests/src/Unit</directory>
+            <!--<directory>./web/profiles/custom/*/tests/src/Unit</directory>-->
+        </testsuite>
+        <testsuite name="kernel">
+            <directory>./{{ document_root_path }}modules/custom/*/tests/src/Kernel</directory>
+            <!--<directory>./web/profiles/custom/*/tests/src/Kernel</directory>-->
+        </testsuite>
+        <testsuite name="existing-site">
+            <!-- Assumes tests are namespaced as \Drupal\Tests\custom_foo\ExistingSite. -->
+            <directory>./{{ document_root_path }}modules/custom/*/tests/src/ExistingSite</directory>
+            <!--<directory>./web/profiles/custom/*/tests/src/ExistingSite</directory>-->
+        </testsuite>
+        <testsuite name="existing-site-javascript">
+            <!-- Assumes tests are namespaced as \Drupal\Tests\custom_foo\ExistingSiteJavascript. -->
+            <directory>./{{ document_root_path }}modules/custom/*/tests/src/ExistingSiteJavascript</directory>
+            <!--<directory>./web/profiles/custom/*/tests/src/ExistingSiteJavascript</directory>-->
+        </testsuite>
+    </testsuites>
+</phpunit>
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/scripts/composer/create_required_files.php.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/scripts/composer/create_required_files.php.twig
deleted file mode 100755
index bf718dfead..0000000000
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/scripts/composer/create_required_files.php.twig
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/env php
-<?php
-
-// -- settings.php file.
-$default_settings_file = './{{ document_root_path }}sites/default/default.settings.php';
-$settings_file = './{{ document_root_path }}sites/default/settings.php';
-
-if (!file_exists($settings_file) && file_exists($default_settings_file)) {
-  $content = file_get_contents($default_settings_file);
-
-{% if docrument_root %}
-  // Specify a directory for configuration data.
-  $current_code = '$config_directories = [];';
-  $new_code = <<<'EOS'
-$config_directories = [
-  CONFIG_SYNC_DIRECTORY => DRUPAL_ROOT . '/../config/sync',
-];
-EOS;
-  $content = str_replace($current_code, $new_code, $content);
-
-{% endif %}
-  // Allow local development configuration.
-  $current_code = <<<'EOS'
-#
-# if (file_exists($app_root . '/' . $site_path . '/settings.local.php')) {
-#   include $app_root . '/' . $site_path . '/settings.local.php';
-# }
-EOS;
-  $new_code = str_replace(["#\n", '# '], '', $current_code);
-  $content = str_replace($current_code, $new_code, $content);
-
-  if (!@file_put_contents($settings_file, $content)) {
-    file_put_contents('php://stderr', "Could not create $settings_file file.\n", FILE_APPEND);
-  }
-}
-
-// -- settings.local.php file.
-$example_local_settings_file = './{{ document_root_path }}sites/example.settings.local.php';
-$local_settings_file = './{{ document_root_path }}sites/default/settings.local.php';
-if (!file_exists($local_settings_file) && file_exists($example_local_settings_file)) {
-  if (@copy($example_local_settings_file, $local_settings_file)) {
-    chmod($settings_file, 0666);
-  }
-  else {
-    file_put_contents('php://stderr', "Could not create $local_settings_file file.\n", FILE_APPEND);
-  }
-}
-
-// -- files directory.
-$default_dir = './{{ document_root_path }}sites/default';
-$files_dir = $default_dir . '/files';
-if (file_exists($default_dir) && !file_exists($files_dir)) {
-  $original_umask = umask(0);
-  if (!@mkdir($files_dir, 0777)) {
-    file_put_contents('php://stderr', "Could not create $files_dir directory.\n", FILE_APPEND);
-  }
-  umask($original_umask);
-}
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/scripts/sync-site.sh.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/scripts/sync-site.sh.twig
index 22158b29d3..71093af4e6 100644
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/scripts/sync-site.sh.twig
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/scripts/sync-site.sh.twig
@@ -7,18 +7,18 @@ set -e
 ROOT_DIR=$(dirname "$(readlink -f "$0")")/..
 
 function label {
-  echo -e "\n\e[1;47;44m "$@" \e[0m"
+  echo -e "\n\e[1;47;44m $* \e[0m"
 }
 
 function local_drush {
- $ROOT_DIR/vendor/drush/drush/drush --root $ROOT_DIR/{{ document_root_path }} $@
+ "$ROOT_DIR"/vendor/drush/drush/drush --root "$ROOT_DIR"/{{ document_root_path }} "$@"
 }
 
 SOURCE_ENVIRONMENT=$1
 
 # Source environment from which we copy the database and files.
-if [ -z "$SOURCE_ENVIRONMENT" ]; then
-  read -p "Source environment: " SOURCE_ENVIRONMENT
+if [[ -z $SOURCE_ENVIRONMENT ]]; then
+  read -r -p "Source environment: " SOURCE_ENVIRONMENT
 fi
 
 label 'Empty current database'
@@ -26,11 +26,12 @@ local_drush sql:drop -y
 
 label "Import database from $SOURCE_ENVIRONMENT"
 # @DCG gzip does not make much sense for small databases.
-local_drush @$SOURCE_ENVIRONMENT sql:dump --gzip | gunzip | local_drush sql:cli
+local_drush "@$SOURCE_ENVIRONMENT" sql:dump --gzip | gunzip | local_drush sql:cli
 
 label "Synchronize files with $SOURCE_ENVIRONMENT"
 # @DCG To save time and disk space consider using Stage File Proxy module.
-local_drush core:rsync -y @$SOURCE_ENVIRONMENT:sites/default/files/ $(realpath $ROOT_DIR/{{ document_root_path }}sites/default/files) || true
+TARGET_DIR=$(realpath "$ROOT_DIR"/{{ document_root_path }}sites/default/files)
+local_drush core:rsync -y "@$SOURCE_ENVIRONMENT:sites/default/files/" "$TARGET_DIR" || true
 
 label 'Apply DB updates'
 local_drush updatedb -y
@@ -53,9 +54,9 @@ local_drush watchdog:delete all -y
 label 'Warm cache'
 URL=$(local_drush core:status --field=uri)
 if [[ $URL == *"default"* ]]; then
-  echo -e "\n\e[91m"URL is not set. Skipping."\e[0m" >&2
+  echo -e "\n\e[91mURL is not set. Skipping.\e[0m" >&2
 else
-  curl -s -o /dev/null -w "URL: %{url_effective}\nStatus code: %{http_code}\nTime total: %{time_total} sec.\n" $URL
+  curl -s -o /dev/null -w "URL: %{url_effective}\nStatus code: %{http_code}\nTime total: %{time_total} sec.\n $URL"
 fi
 
 label 'Check site status'
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/behat.yml.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/behat.yml.twig
deleted file mode 100644
index 84d5829dc7..0000000000
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/behat.yml.twig
+++ /dev/null
@@ -1,42 +0,0 @@
-# Default Behat configuration.
-default:
-  autoload:
-    '': '%paths.base%/bootstrap'
-  suites:
-    example:
-      paths:
-        - '%paths.base%/features/example'
-      contexts:
-        - ExampleContext
-        - Drupal\DrupalExtension\Context\DrupalContext
-        - Drupal\DrupalExtension\Context\MessageContext
-      filters:
-        tags: ~@ignore
-  extensions:
-    Behat\MinkExtension:
-      base_url: 'PLACEHOLDER'
-      goutte:
-       # The below is necessary to avoid errors when using self-signed certs.
-        guzzle_parameters:
-          verify: false
-      sessions:
-        default:
-          selenium2:
-            wd_host: http://localhost:4444/wd/hub
-            browser: chrome
-    Drupal\DrupalExtension:
-      blackbox: ~
-      api_driver: 'drupal'
-{% if drush %}
-      drush:
-        alias: 'PLACEHOLDER'
-        binary: '%paths.base%/../../vendor/drush/drush/drush'
-{% endif %}
-      region_map:
-        header: '#header'
-        content: '#content'
-        footer: '#footer'
-      selectors:
-        message_selector: '.messages'
-        error_message_selector: '.messages.messages-error'
-        success_message_selector: '.messages.messages-status'
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/bootstrap/BaseContext.php.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/bootstrap/BaseContext.php.twig
deleted file mode 100644
index f5db0b722a..0000000000
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/bootstrap/BaseContext.php.twig
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-
-use Drupal\DrupalExtension\Context\MinkContext;
-
-/**
- * Base class for Behat contexts.
- *
- * @DCG
- * Put there step definitions and helpers that need to be shared across multiple
- * Behat contexts.
- */
-abstract class BaseContext extends MinkContext {
-
-}
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/bootstrap/ExampleContext.php.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/bootstrap/ExampleContext.php.twig
deleted file mode 100644
index b8f50485e9..0000000000
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/bootstrap/ExampleContext.php.twig
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-
-/**
- * Example context.
- */
-class ExampleContext extends BaseContext {
-
-}
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/features/example/user_forms.feature.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/features/example/user_forms.feature.twig
deleted file mode 100644
index aabe916404..0000000000
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/features/example/user_forms.feature.twig
+++ /dev/null
@@ -1,11 +0,0 @@
-Feature: User forms
-  I need to be able to use the most common areas of the site.
-
-  @javascript
-  Scenario: Registration
-    Given I am on "/user/register"
-    Then I should see "Create new account" in the "content" region
-    Then I fill in "Email address" with "test@example.com"
-    And I fill in "Username" with "test"
-    And I press "Create new account"
-    Then I should see the message "Thank you for applying for an account."
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/local.behat.yml.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/local.behat.yml.twig
deleted file mode 100644
index 930d8d3181..0000000000
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/local.behat.yml.twig
+++ /dev/null
@@ -1,12 +0,0 @@
-# Local overrides of Behat configuration.
-imports:
-  - behat.yml
-default:
-  extensions:
-    Behat\MinkExtension:
-      base_url: 'http://localhost'
-{% if drush %}
-    Drupal\DrupalExtension:
-      drush:
-        alias: 'local'
-{% endif %}
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/src/HomePageTest.php.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/src/HomePageTest.php.twig
new file mode 100644
index 0000000000..934f528f52
--- /dev/null
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/src/HomePageTest.php.twig
@@ -0,0 +1,20 @@
+<?php
+
+namespace {{ namespace }}\Tests;
+
+use weitzman\DrupalTestTraits\ExistingSiteBase;
+
+/**
+ * A test for home page.
+ */
+class HomePageTest extends ExistingSiteBase {
+
+  /**
+   * Test callback.
+   */
+  public function testHomePage() {
+    $this->drupalGet('');
+    $this->assertSession()->pageTextContains('Welcome');
+  }
+
+}
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/module/configuration-entity/model.info.yml.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/module/configuration-entity/model.info.yml.twig
index d5dc3b157a..c26300871b 100644
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/module/configuration-entity/model.info.yml.twig
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/module/configuration-entity/model.info.yml.twig
@@ -3,6 +3,7 @@ type: module
 description: 'Provides {{ entity_type_label|article|lower }} configuration entity.'
 package: {{ package }}
 core: 8.x
+core_version_requirement: ^8 || ^9
 {% if dependencies %}
 dependencies:
 {% for dependency in dependencies %}
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/module/content-entity/model.info.yml.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/module/content-entity/model.info.yml.twig
index ec3a80036f..3e3c8e541d 100644
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/module/content-entity/model.info.yml.twig
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/module/content-entity/model.info.yml.twig
@@ -3,6 +3,7 @@ type: module
 description: 'Provides {{ entity_type_label|article|lower }} entity.'
 package: {{ package }}
 core: 8.x
+core_version_requirement: ^8 || ^9
 {% if dependencies %}
 dependencies:
 {% for dependency in dependencies %}
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/module/content-entity/src/Entity/Example.php.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/module/content-entity/src/Entity/Example.php.twig
index 3f03e5ffc4..7484c58fe5 100644
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/module/content-entity/src/Entity/Example.php.twig
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/module/content-entity/src/Entity/Example.php.twig
@@ -73,7 +73,9 @@ use Drupal\Core\Entity\EntityChangedTrait;
  *   admin_permission = "administer {{ entity_type_label|lower }} types",
 {% elseif fieldable %}
  *   admin_permission = "administer {{ entity_type_label|lower }}",
- {% endif %}
+{% else %}
+ *   admin_permission = "access {{ entity_type_label|lower }} overview",
+{% endif %}
  *   entity_keys = {
  *     "id" = "id",
 {% if revisionable %}
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/phpstorm-meta.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/phpstorm-meta.twig
new file mode 100644
index 0000000000..32dd7b256e
--- /dev/null
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/phpstorm-meta.twig
@@ -0,0 +1,81 @@
+<?php
+
+namespace PHPSTORM_META {
+
+  override(
+    \Drupal::service(0),
+    map([
+{% for service_id, class in services %}
+      '{{ service_id }}' => '{{ class }}',
+{% endfor %}
+    ])
+  );
+
+  override(
+    \Drupal\Core\Entity\EntityTypeManagerInterface::getStorage(0),
+    map([
+{% for entity_type_id, class in storages %}
+      '{{ entity_type_id }}' => '{{ class }}',
+{% endfor %}
+    ])
+  );
+
+  override(
+    \Drupal\Core\Entity\EntityTypeManagerInterface::getViewBuilder(0),
+    map([
+{% for entity_type_id, class in view_builders %}
+      '{{ entity_type_id }}' => '{{ class }}',
+{% endfor %}
+    ])
+  );
+
+  override(
+    \Drupal\Core\Entity\EntityTypeManagerInterface::getListBuilder(0),
+    map([
+{% for entity_type_id, class in list_builders %}
+      '{{ entity_type_id }}' => '{{ class }}',
+{% endfor %}
+    ])
+  );
+
+  override(
+    \Drupal\Core\Entity\EntityTypeManagerInterface::getAccessControlHandler(0),
+    map([
+{% for entity_type_id, class in access_controls %}
+     '{{ entity_type_id }}' => '{{ class }}',
+{% endfor %}
+    ])
+  );
+
+{% for class in entity_classes %}
+{# Using map() to work around PhpStorm bug. #}
+{# @see https://intellij-support.jetbrains.com/hc/en-us/community/posts/360001516519 #}
+  override({{ class }}::loadMultiple(), map(['' => '{{ class }}[]']));
+  override({{ class }}::load(), map(['' => '{{ class }}']));
+  override({{ class }}::create(), map(['' => '{{ class }}']));
+
+{% endfor %}
+  expectedReturnValues(
+    \Drupal\Core\Entity\EntityInterface::save(),
+    \SAVED_NEW,
+    \SAVED_UPDATED
+  );
+
+  expectedArguments(
+    \Drupal\Core\Entity\EntityViewBuilderInterface::view(),
+    2,
+    \Drupal\Core\Language\LanguageInterface::LANGCODE_NOT_SPECIFIED,
+    \Drupal\Core\Language\LanguageInterface::LANGCODE_NOT_APPLICABLE,
+    \Drupal\Core\Language\LanguageInterface::LANGCODE_DEFAULT,
+    \Drupal\Core\Language\LanguageInterface::LANGCODE_SITE_DEFAULT
+  );
+
+  expectedArguments(
+    \Drupal\Core\Messenger\MessengerInterface::addMessage(),
+    1,
+    \Drupal\Core\Messenger\MessengerInterface::TYPE_STATUS,
+    \Drupal\Core\Messenger\MessengerInterface::TYPE_WARNING,
+    \Drupal\Core\Messenger\MessengerInterface::TYPE_ERROR
+  );
+
+}
\ No newline at end of file
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/plugin/_ckeditor/dialog.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/plugin/_ckeditor/dialog.twig
index dfdbdc352d..00e4e1d153 100644
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/plugin/_ckeditor/dialog.twig
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/plugin/_ckeditor/dialog.twig
@@ -2,12 +2,13 @@
  * @file
  * Defines dialog for {{ plugin_label }} CKEditor plugin.
  */
+
 (function (Drupal) {
 
   'use strict';
 
   // Dialog definition.
-  CKEDITOR.dialog.add('{{ command_name }}Dialog', function(editor) {
+  CKEDITOR.dialog.add('{{ command_name }}Dialog', function (editor) {
 
     return {
 
@@ -47,7 +48,7 @@
 
       // This method is invoked once a user clicks the OK button, confirming the
       // dialog.
-      onOk: function() {
+      onOk: function () {
 
         // The context of this function is the dialog object itself.
         // See http://docs.ckeditor.com/#!/api/CKEDITOR.dialog.
@@ -58,7 +59,7 @@
 
         // Set element attribute and text by getting the defined field values.
         abbr.setAttribute('title', dialog.getValueOf('tab-settings', 'title'));
-        abbr.setText( dialog.getValueOf('tab-settings', 'abbr'));
+        abbr.setText(dialog.getValueOf('tab-settings', 'abbr'));
 
         // Finally, insert the element into the editor at the caret position.
         editor.insertElement(abbr);
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/plugin/_ckeditor/plugin.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/plugin/_ckeditor/plugin.twig
index 663f104f72..64fbef46b5 100644
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/plugin/_ckeditor/plugin.twig
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/plugin/_ckeditor/plugin.twig
@@ -8,6 +8,7 @@
  *
  * @see http://docs.ckeditor.com/#!/guide/plugin_sdk_sample_1
  */
+
 (function (Drupal) {
 
   'use strict';
@@ -18,7 +19,7 @@
     icons: '{{ short_plugin_id }}',
 
     // The plugin initialization logic goes inside this method.
-    init: function(editor) {
+    init: function (editor) {
 
       // Define an editor command that opens our dialog window.
       editor.addCommand('{{ command_name }}', new CKEDITOR.dialogCommand('{{ command_name }}Dialog'));
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/plugin/rest-resource.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/plugin/rest-resource.twig
index 6c20fa2403..b4dd3d35d6 100644
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/plugin/rest-resource.twig
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/plugin/rest-resource.twig
@@ -97,18 +97,18 @@ class {{ class }} extends ResourceBase implements DependentPluginInterface {
   /**
    * Responds to POST requests and saves the new record.
    *
-   * @param mixed $record
+   * @param mixed $data
    *   Data to write into the database.
    *
    * @return \Drupal\rest\ModifiedResourceResponse
    *   The HTTP response object.
    */
-  public function post($record) {
+  public function post($data) {
 
-    $this->validate($record);
+    $this->validate($data);
 
     $id = $this->dbConnection->insert('{{ plugin_id }}')
-      ->fields($record)
+      ->fields($data)
       ->execute();
 
     $this->logger->notice('New {{ plugin_label|lower }} record has been created.');
@@ -124,40 +124,15 @@ class {{ class }} extends ResourceBase implements DependentPluginInterface {
    *
    * @param int $id
    *   The ID of the record.
-   * @param mixed $record
+   * @param mixed $data
    *   Data to write into the database.
    *
    * @return \Drupal\rest\ModifiedResourceResponse
    *   The HTTP response object.
    */
-  public function patch($id, $record) {
-    $this->validate($record);
-    return $this->updateRecord($id, $record);
-  }
-
-  /**
-   * Responds to entity PUT requests.
-   *
-   * @param int $id
-   *   The ID of the record.
-   * @param mixed $record
-   *   Data to write into the database.
-   *
-   * @return \Drupal\rest\ModifiedResourceResponse
-   *   The HTTP response object.
-   */
-  public function put($id, $record) {
-
-    $this->validate($record);
-
-    // Provide default values to make sure the record is completely replaced.
-    $record += [
-      'title' => '',
-      'description' => '',
-      'price' => 0,
-    ];
-
-    return $this->updateRecord($id, $record);
+  public function patch($id, $data) {
+    $this->validate($data);
+    return $this->updateRecord($id, $data);
   }
 
   /**
@@ -213,13 +188,6 @@ class {{ class }} extends ResourceBase implements DependentPluginInterface {
   public function routes() {
     $collection = parent::routes();
 
-    // ResourceBase class does not support PUT method by some reason.
-    $definition = $this->getPluginDefinition();
-    $canonical_path = $definition['uri_paths']['canonical'];
-    $route = $this->getBaseRoute($canonical_path, 'PUT');
-    $route->addRequirements(['_content_type_format' => implode('|', $this->serializerFormats)]);
-    $collection->add('{{ plugin_id }}.PUT', $route);
-
     // Take out BC routes added in base class.
     // @see https://www.drupal.org/node/2865645
     // @todo Remove this in Drupal 9.
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/service/logger.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/service/logger.twig
index 0747d11614..526e32ca71 100644
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/service/logger.twig
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/service/logger.twig
@@ -73,11 +73,7 @@ class {{ class }} implements LoggerInterface {
       'uid' => $context['uid'],
     ];
 
-    file_put_contents(
-      $this->config->get('path.temporary') . '/drupal.log',
-      print_r($entry, TRUE),
-      FILE_APPEND
-    );
+    file_put_contents('temporary://drupal.log', print_r($entry, TRUE), FILE_APPEND);
   }
 
 }
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/test/browser.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/test/browser.twig
index 239e41da32..e0b83c93d1 100644
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/test/browser.twig
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/test/browser.twig
@@ -11,6 +11,11 @@ use Drupal\Tests\BrowserTestBase;
  */
 class {{ class }} extends BrowserTestBase {
 
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stable';
+
   /**
    * {@inheritdoc}
    */
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/test/webdriver.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/test/webdriver.twig
index 77e565b5bf..bf8e328603 100644
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/test/webdriver.twig
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/test/webdriver.twig
@@ -11,6 +11,11 @@ use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
  */
 class {{ class }} extends WebDriverTestBase {
 
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stable';
+
   /**
    * {@inheritdoc}
    */
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/yml/module-info.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/yml/module-info.twig
index c4277eb466..7f5b1b3ae7 100644
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/yml/module-info.twig
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/yml/module-info.twig
@@ -3,6 +3,7 @@ type: module
 description: {{ description }}
 package: {{ package }}
 core: 8.x
+core_version_requirement: ^8 || ^9
 {% if dependencies %}
 dependencies:
 {% for dependency in dependencies %}
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/yml/theme-info.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/yml/theme-info.twig
index e11ffdda05..7dbe556bff 100644
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/yml/theme-info.twig
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/yml/theme-info.twig
@@ -4,6 +4,7 @@ base theme: {{ base_theme }}
 description: {{ description }}
 package: {{ package }}
 core: 8.x
+core_version_requirement: ^8 || ^9
 libraries:
   - {{ machine_name }}/global
 regions:
diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php
index 3a07b91759..08c79e186c 100644
--- a/vendor/composer/autoload_classmap.php
+++ b/vendor/composer/autoload_classmap.php
@@ -664,6 +664,7 @@
     'DrupalCodeGenerator\\Command\\Drupal_8\\Module\\ConfigurationEntity' => $vendorDir . '/chi-teck/drupal-code-generator/src/Command/Drupal_8/Module/ConfigurationEntity.php',
     'DrupalCodeGenerator\\Command\\Drupal_8\\Module\\ContentEntity' => $vendorDir . '/chi-teck/drupal-code-generator/src/Command/Drupal_8/Module/ContentEntity.php',
     'DrupalCodeGenerator\\Command\\Drupal_8\\Module\\Standard' => $vendorDir . '/chi-teck/drupal-code-generator/src/Command/Drupal_8/Module/Standard.php',
+    'DrupalCodeGenerator\\Command\\Drupal_8\\PhpStormMetadata' => $vendorDir . '/chi-teck/drupal-code-generator/src/Command/Drupal_8/PhpStormMetadata.php',
     'DrupalCodeGenerator\\Command\\Drupal_8\\PluginManager' => $vendorDir . '/chi-teck/drupal-code-generator/src/Command/Drupal_8/PluginManager.php',
     'DrupalCodeGenerator\\Command\\Drupal_8\\Plugin\\Action' => $vendorDir . '/chi-teck/drupal-code-generator/src/Command/Drupal_8/Plugin/Action.php',
     'DrupalCodeGenerator\\Command\\Drupal_8\\Plugin\\Block' => $vendorDir . '/chi-teck/drupal-code-generator/src/Command/Drupal_8/Plugin/Block.php',
@@ -3259,9 +3260,6 @@
     'JaimePerez\\TwigConfigurableI18n\\Twig\\Extensions\\Extension\\I18n' => $vendorDir . '/jaimeperez/twig-configurable-i18n/src/Twig/Extensions/Extension/I18n.php',
     'JaimePerez\\TwigConfigurableI18n\\Twig\\Extensions\\Node\\Trans' => $vendorDir . '/jaimeperez/twig-configurable-i18n/src/Twig/Extensions/Node/Trans.php',
     'JaimePerez\\TwigConfigurableI18n\\Twig\\Extensions\\TokenParser\\Trans' => $vendorDir . '/jaimeperez/twig-configurable-i18n/src/Twig/Extensions/TokenParser/Trans.php',
-    'JakubOnderka\\PhpConsoleColor\\ConsoleColor' => $vendorDir . '/jakub-onderka/php-console-color/src/ConsoleColor.php',
-    'JakubOnderka\\PhpConsoleColor\\InvalidStyleException' => $vendorDir . '/jakub-onderka/php-console-color/src/InvalidStyleException.php',
-    'JakubOnderka\\PhpConsoleHighlighter\\Highlighter' => $vendorDir . '/jakub-onderka/php-console-highlighter/src/Highlighter.php',
     'Laminas\\Diactoros\\AbstractSerializer' => $vendorDir . '/laminas/laminas-diactoros/src/AbstractSerializer.php',
     'Laminas\\Diactoros\\CallbackStream' => $vendorDir . '/laminas/laminas-diactoros/src/CallbackStream.php',
     'Laminas\\Diactoros\\Exception\\DeprecatedMethodException' => $vendorDir . '/laminas/laminas-diactoros/src/Exception/DeprecatedMethodException.php',
@@ -3518,8 +3516,8 @@
     'Masterminds\\HTML5\\Serializer\\Traverser' => $vendorDir . '/masterminds/html5/src/HTML5/Serializer/Traverser.php',
     'Mobile_Detect' => $vendorDir . '/mobiledetect/mobiledetectlib/Mobile_Detect.php',
     'OS_Guess' => $vendorDir . '/pear/pear-core-minimal/src/OS/Guess.php',
-    'OomphInc\\ComposerInstallersExtender\\Installer' => $vendorDir . '/oomphinc/composer-installers-extender/src/Installer.php',
-    'OomphInc\\ComposerInstallersExtender\\InstallerHelper' => $vendorDir . '/oomphinc/composer-installers-extender/src/InstallerHelper.php',
+    'OomphInc\\ComposerInstallersExtender\\Installers\\CustomInstaller' => $vendorDir . '/oomphinc/composer-installers-extender/src/Installers/CustomInstaller.php',
+    'OomphInc\\ComposerInstallersExtender\\Installers\\Installer' => $vendorDir . '/oomphinc/composer-installers-extender/src/Installers/Installer.php',
     'OomphInc\\ComposerInstallersExtender\\Plugin' => $vendorDir . '/oomphinc/composer-installers-extender/src/Plugin.php',
     'PEAR' => $vendorDir . '/pear/pear-core-minimal/src/PEAR.php',
     'PEAR_Error' => $vendorDir . '/pear/pear-core-minimal/src/PEAR.php',
@@ -3565,9 +3563,16 @@
     'PhpParser\\JsonDecoder' => $vendorDir . '/nikic/php-parser/lib/PhpParser/JsonDecoder.php',
     'PhpParser\\Lexer' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer.php',
     'PhpParser\\Lexer\\Emulative' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php',
+    'PhpParser\\Lexer\\TokenEmulator\\AttributeEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php',
     'PhpParser\\Lexer\\TokenEmulator\\CoaleseEqualTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php',
+    'PhpParser\\Lexer\\TokenEmulator\\FlexibleDocStringEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.php',
     'PhpParser\\Lexer\\TokenEmulator\\FnTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php',
-    'PhpParser\\Lexer\\TokenEmulator\\TokenEmulatorInterface' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulatorInterface.php',
+    'PhpParser\\Lexer\\TokenEmulator\\KeywordEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php',
+    'PhpParser\\Lexer\\TokenEmulator\\MatchTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php',
+    'PhpParser\\Lexer\\TokenEmulator\\NullsafeTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php',
+    'PhpParser\\Lexer\\TokenEmulator\\NumericLiteralSeparatorEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php',
+    'PhpParser\\Lexer\\TokenEmulator\\ReverseEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php',
+    'PhpParser\\Lexer\\TokenEmulator\\TokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php',
     'PhpParser\\NameContext' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NameContext.php',
     'PhpParser\\Node' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node.php',
     'PhpParser\\NodeAbstract' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeAbstract.php',
@@ -3581,7 +3586,11 @@
     'PhpParser\\NodeVisitor\\FindingVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php',
     'PhpParser\\NodeVisitor\\FirstFindingVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php',
     'PhpParser\\NodeVisitor\\NameResolver' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php',
+    'PhpParser\\NodeVisitor\\NodeConnectingVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php',
+    'PhpParser\\NodeVisitor\\ParentConnectingVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php',
     'PhpParser\\Node\\Arg' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Arg.php',
+    'PhpParser\\Node\\Attribute' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Attribute.php',
+    'PhpParser\\Node\\AttributeGroup' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php',
     'PhpParser\\Node\\Const_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Const_.php',
     'PhpParser\\Node\\Expr' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr.php',
     'PhpParser\\Node\\Expr\\ArrayDimFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php',
@@ -3657,8 +3666,11 @@
     'PhpParser\\Node\\Expr\\Instanceof_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php',
     'PhpParser\\Node\\Expr\\Isset_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php',
     'PhpParser\\Node\\Expr\\List_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php',
+    'PhpParser\\Node\\Expr\\Match_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php',
     'PhpParser\\Node\\Expr\\MethodCall' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php',
     'PhpParser\\Node\\Expr\\New_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php',
+    'PhpParser\\Node\\Expr\\NullsafeMethodCall' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php',
+    'PhpParser\\Node\\Expr\\NullsafePropertyFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php',
     'PhpParser\\Node\\Expr\\PostDec' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php',
     'PhpParser\\Node\\Expr\\PostInc' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php',
     'PhpParser\\Node\\Expr\\PreDec' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php',
@@ -3669,6 +3681,7 @@
     'PhpParser\\Node\\Expr\\StaticCall' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php',
     'PhpParser\\Node\\Expr\\StaticPropertyFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php',
     'PhpParser\\Node\\Expr\\Ternary' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php',
+    'PhpParser\\Node\\Expr\\Throw_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php',
     'PhpParser\\Node\\Expr\\UnaryMinus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php',
     'PhpParser\\Node\\Expr\\UnaryPlus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php',
     'PhpParser\\Node\\Expr\\Variable' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php',
@@ -3676,6 +3689,7 @@
     'PhpParser\\Node\\Expr\\Yield_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php',
     'PhpParser\\Node\\FunctionLike' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php',
     'PhpParser\\Node\\Identifier' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Identifier.php',
+    'PhpParser\\Node\\MatchArm' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/MatchArm.php',
     'PhpParser\\Node\\Name' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Name.php',
     'PhpParser\\Node\\Name\\FullyQualified' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php',
     'PhpParser\\Node\\Name\\Relative' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php',
@@ -3744,6 +3758,7 @@
     'PhpParser\\Node\\Stmt\\UseUse' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php',
     'PhpParser\\Node\\Stmt\\Use_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php',
     'PhpParser\\Node\\Stmt\\While_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php',
+    'PhpParser\\Node\\UnionType' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/UnionType.php',
     'PhpParser\\Node\\VarLikeIdentifier' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php',
     'PhpParser\\Parser' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Parser.php',
     'PhpParser\\ParserAbstract' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ParserAbstract.php',
@@ -3781,14 +3796,15 @@
     'Psy\\CodeCleaner\\CallTimePassByReferencePass' => $vendorDir . '/psy/psysh/src/CodeCleaner/CallTimePassByReferencePass.php',
     'Psy\\CodeCleaner\\CalledClassPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/CalledClassPass.php',
     'Psy\\CodeCleaner\\CodeCleanerPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/CodeCleanerPass.php',
+    'Psy\\CodeCleaner\\EmptyArrayDimFetchPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/EmptyArrayDimFetchPass.php',
     'Psy\\CodeCleaner\\ExitPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/ExitPass.php',
     'Psy\\CodeCleaner\\FinalClassPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/FinalClassPass.php',
     'Psy\\CodeCleaner\\FunctionContextPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/FunctionContextPass.php',
     'Psy\\CodeCleaner\\FunctionReturnInWriteContextPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/FunctionReturnInWriteContextPass.php',
     'Psy\\CodeCleaner\\ImplicitReturnPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/ImplicitReturnPass.php',
     'Psy\\CodeCleaner\\InstanceOfPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/InstanceOfPass.php',
+    'Psy\\CodeCleaner\\LabelContextPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/LabelContextPass.php',
     'Psy\\CodeCleaner\\LeavePsyshAlonePass' => $vendorDir . '/psy/psysh/src/CodeCleaner/LeavePsyshAlonePass.php',
-    'Psy\\CodeCleaner\\LegacyEmptyPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/LegacyEmptyPass.php',
     'Psy\\CodeCleaner\\ListPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/ListPass.php',
     'Psy\\CodeCleaner\\LoopContextPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/LoopContextPass.php',
     'Psy\\CodeCleaner\\MagicConstantsPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/MagicConstantsPass.php',
@@ -3797,6 +3813,7 @@
     'Psy\\CodeCleaner\\NoReturnValue' => $vendorDir . '/psy/psysh/src/CodeCleaner/NoReturnValue.php',
     'Psy\\CodeCleaner\\PassableByReferencePass' => $vendorDir . '/psy/psysh/src/CodeCleaner/PassableByReferencePass.php',
     'Psy\\CodeCleaner\\RequirePass' => $vendorDir . '/psy/psysh/src/CodeCleaner/RequirePass.php',
+    'Psy\\CodeCleaner\\ReturnTypePass' => $vendorDir . '/psy/psysh/src/CodeCleaner/ReturnTypePass.php',
     'Psy\\CodeCleaner\\StrictTypesPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/StrictTypesPass.php',
     'Psy\\CodeCleaner\\UseStatementPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/UseStatementPass.php',
     'Psy\\CodeCleaner\\ValidClassNamePass' => $vendorDir . '/psy/psysh/src/CodeCleaner/ValidClassNamePass.php',
@@ -3819,10 +3836,8 @@
     'Psy\\Command\\ListCommand\\Enumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/Enumerator.php',
     'Psy\\Command\\ListCommand\\FunctionEnumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/FunctionEnumerator.php',
     'Psy\\Command\\ListCommand\\GlobalVariableEnumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/GlobalVariableEnumerator.php',
-    'Psy\\Command\\ListCommand\\InterfaceEnumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/InterfaceEnumerator.php',
     'Psy\\Command\\ListCommand\\MethodEnumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/MethodEnumerator.php',
     'Psy\\Command\\ListCommand\\PropertyEnumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/PropertyEnumerator.php',
-    'Psy\\Command\\ListCommand\\TraitEnumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/TraitEnumerator.php',
     'Psy\\Command\\ListCommand\\VariableEnumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/VariableEnumerator.php',
     'Psy\\Command\\ParseCommand' => $vendorDir . '/psy/psysh/src/Command/ParseCommand.php',
     'Psy\\Command\\PsyVersionCommand' => $vendorDir . '/psy/psysh/src/Command/PsyVersionCommand.php',
@@ -3849,8 +3864,8 @@
     'Psy\\Exception\\RuntimeException' => $vendorDir . '/psy/psysh/src/Exception/RuntimeException.php',
     'Psy\\Exception\\ThrowUpException' => $vendorDir . '/psy/psysh/src/Exception/ThrowUpException.php',
     'Psy\\Exception\\TypeErrorException' => $vendorDir . '/psy/psysh/src/Exception/TypeErrorException.php',
+    'Psy\\Exception\\UnexpectedTargetException' => $vendorDir . '/psy/psysh/src/Exception/UnexpectedTargetException.php',
     'Psy\\ExecutionClosure' => $vendorDir . '/psy/psysh/src/ExecutionClosure.php',
-    'Psy\\ExecutionLoop' => $vendorDir . '/psy/psysh/src/ExecutionLoop.php',
     'Psy\\ExecutionLoopClosure' => $vendorDir . '/psy/psysh/src/ExecutionLoopClosure.php',
     'Psy\\ExecutionLoop\\AbstractListener' => $vendorDir . '/psy/psysh/src/ExecutionLoop/AbstractListener.php',
     'Psy\\ExecutionLoop\\Listener' => $vendorDir . '/psy/psysh/src/ExecutionLoop/Listener.php',
@@ -3859,7 +3874,9 @@
     'Psy\\Formatter\\CodeFormatter' => $vendorDir . '/psy/psysh/src/Formatter/CodeFormatter.php',
     'Psy\\Formatter\\DocblockFormatter' => $vendorDir . '/psy/psysh/src/Formatter/DocblockFormatter.php',
     'Psy\\Formatter\\Formatter' => $vendorDir . '/psy/psysh/src/Formatter/Formatter.php',
+    'Psy\\Formatter\\ReflectorFormatter' => $vendorDir . '/psy/psysh/src/Formatter/ReflectorFormatter.php',
     'Psy\\Formatter\\SignatureFormatter' => $vendorDir . '/psy/psysh/src/Formatter/SignatureFormatter.php',
+    'Psy\\Formatter\\TraceFormatter' => $vendorDir . '/psy/psysh/src/Formatter/TraceFormatter.php',
     'Psy\\Input\\CodeArgument' => $vendorDir . '/psy/psysh/src/Input/CodeArgument.php',
     'Psy\\Input\\FilterOptions' => $vendorDir . '/psy/psysh/src/Input/FilterOptions.php',
     'Psy\\Input\\ShellInput' => $vendorDir . '/psy/psysh/src/Input/ShellInput.php',
@@ -3879,6 +3896,7 @@
     'Psy\\Reflection\\ReflectionConstant_' => $vendorDir . '/psy/psysh/src/Reflection/ReflectionConstant_.php',
     'Psy\\Reflection\\ReflectionLanguageConstruct' => $vendorDir . '/psy/psysh/src/Reflection/ReflectionLanguageConstruct.php',
     'Psy\\Reflection\\ReflectionLanguageConstructParameter' => $vendorDir . '/psy/psysh/src/Reflection/ReflectionLanguageConstructParameter.php',
+    'Psy\\Reflection\\ReflectionNamespace' => $vendorDir . '/psy/psysh/src/Reflection/ReflectionNamespace.php',
     'Psy\\Shell' => $vendorDir . '/psy/psysh/src/Shell.php',
     'Psy\\Sudo' => $vendorDir . '/psy/psysh/src/Sudo.php',
     'Psy\\Sudo\\SudoVisitor' => $vendorDir . '/psy/psysh/src/Sudo/SudoVisitor.php',
@@ -3999,6 +4017,7 @@
     'Robo\\State\\Data' => $vendorDir . '/consolidation/robo/src/State/Data.php',
     'Robo\\State\\StateAwareInterface' => $vendorDir . '/consolidation/robo/src/State/StateAwareInterface.php',
     'Robo\\State\\StateAwareTrait' => $vendorDir . '/consolidation/robo/src/State/StateAwareTrait.php',
+    'Robo\\Symfony\\SymfonyStyleInjector' => $vendorDir . '/consolidation/robo/src/Symfony/SymfonyStyleInjector.php',
     'Robo\\TaskAccessor' => $vendorDir . '/consolidation/robo/src/TaskAccessor.php',
     'Robo\\TaskInfo' => $vendorDir . '/consolidation/robo/src/TaskInfo.php',
     'Robo\\Task\\ApiGen\\ApiGen' => $vendorDir . '/consolidation/robo/src/Task/ApiGen/ApiGen.php',
diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php
index af517035da..4ad8fd1499 100644
--- a/vendor/composer/autoload_psr4.php
+++ b/vendor/composer/autoload_psr4.php
@@ -67,8 +67,6 @@
     'Laminas\\Feed\\' => array($vendorDir . '/laminas/laminas-feed/src'),
     'Laminas\\Escaper\\' => array($vendorDir . '/laminas/laminas-escaper/src'),
     'Laminas\\Diactoros\\' => array($vendorDir . '/laminas/laminas-diactoros/src'),
-    'JakubOnderka\\PhpConsoleHighlighter\\' => array($vendorDir . '/jakub-onderka/php-console-highlighter/src'),
-    'JakubOnderka\\PhpConsoleColor\\' => array($vendorDir . '/jakub-onderka/php-console-color/src'),
     'JaimePerez\\TwigConfigurableI18n\\' => array($vendorDir . '/jaimeperez/twig-configurable-i18n/src'),
     'Interop\\Container\\' => array($vendorDir . '/container-interop/container-interop/src/Interop/Container'),
     'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'),
diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php
index cbe52c6266..8540fd5538 100644
--- a/vendor/composer/autoload_static.php
+++ b/vendor/composer/autoload_static.php
@@ -146,8 +146,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         ),
         'J' => 
         array (
-            'JakubOnderka\\PhpConsoleHighlighter\\' => 35,
-            'JakubOnderka\\PhpConsoleColor\\' => 29,
             'JaimePerez\\TwigConfigurableI18n\\' => 32,
         ),
         'I' => 
@@ -453,14 +451,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         array (
             0 => __DIR__ . '/..' . '/laminas/laminas-diactoros/src',
         ),
-        'JakubOnderka\\PhpConsoleHighlighter\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/jakub-onderka/php-console-highlighter/src',
-        ),
-        'JakubOnderka\\PhpConsoleColor\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/jakub-onderka/php-console-color/src',
-        ),
         'JaimePerez\\TwigConfigurableI18n\\' => 
         array (
             0 => __DIR__ . '/..' . '/jaimeperez/twig-configurable-i18n/src',
@@ -1351,6 +1341,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'DrupalCodeGenerator\\Command\\Drupal_8\\Module\\ConfigurationEntity' => __DIR__ . '/..' . '/chi-teck/drupal-code-generator/src/Command/Drupal_8/Module/ConfigurationEntity.php',
         'DrupalCodeGenerator\\Command\\Drupal_8\\Module\\ContentEntity' => __DIR__ . '/..' . '/chi-teck/drupal-code-generator/src/Command/Drupal_8/Module/ContentEntity.php',
         'DrupalCodeGenerator\\Command\\Drupal_8\\Module\\Standard' => __DIR__ . '/..' . '/chi-teck/drupal-code-generator/src/Command/Drupal_8/Module/Standard.php',
+        'DrupalCodeGenerator\\Command\\Drupal_8\\PhpStormMetadata' => __DIR__ . '/..' . '/chi-teck/drupal-code-generator/src/Command/Drupal_8/PhpStormMetadata.php',
         'DrupalCodeGenerator\\Command\\Drupal_8\\PluginManager' => __DIR__ . '/..' . '/chi-teck/drupal-code-generator/src/Command/Drupal_8/PluginManager.php',
         'DrupalCodeGenerator\\Command\\Drupal_8\\Plugin\\Action' => __DIR__ . '/..' . '/chi-teck/drupal-code-generator/src/Command/Drupal_8/Plugin/Action.php',
         'DrupalCodeGenerator\\Command\\Drupal_8\\Plugin\\Block' => __DIR__ . '/..' . '/chi-teck/drupal-code-generator/src/Command/Drupal_8/Plugin/Block.php',
@@ -3946,9 +3937,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'JaimePerez\\TwigConfigurableI18n\\Twig\\Extensions\\Extension\\I18n' => __DIR__ . '/..' . '/jaimeperez/twig-configurable-i18n/src/Twig/Extensions/Extension/I18n.php',
         'JaimePerez\\TwigConfigurableI18n\\Twig\\Extensions\\Node\\Trans' => __DIR__ . '/..' . '/jaimeperez/twig-configurable-i18n/src/Twig/Extensions/Node/Trans.php',
         'JaimePerez\\TwigConfigurableI18n\\Twig\\Extensions\\TokenParser\\Trans' => __DIR__ . '/..' . '/jaimeperez/twig-configurable-i18n/src/Twig/Extensions/TokenParser/Trans.php',
-        'JakubOnderka\\PhpConsoleColor\\ConsoleColor' => __DIR__ . '/..' . '/jakub-onderka/php-console-color/src/ConsoleColor.php',
-        'JakubOnderka\\PhpConsoleColor\\InvalidStyleException' => __DIR__ . '/..' . '/jakub-onderka/php-console-color/src/InvalidStyleException.php',
-        'JakubOnderka\\PhpConsoleHighlighter\\Highlighter' => __DIR__ . '/..' . '/jakub-onderka/php-console-highlighter/src/Highlighter.php',
         'Laminas\\Diactoros\\AbstractSerializer' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/AbstractSerializer.php',
         'Laminas\\Diactoros\\CallbackStream' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/CallbackStream.php',
         'Laminas\\Diactoros\\Exception\\DeprecatedMethodException' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/Exception/DeprecatedMethodException.php',
@@ -4205,8 +4193,8 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Masterminds\\HTML5\\Serializer\\Traverser' => __DIR__ . '/..' . '/masterminds/html5/src/HTML5/Serializer/Traverser.php',
         'Mobile_Detect' => __DIR__ . '/..' . '/mobiledetect/mobiledetectlib/Mobile_Detect.php',
         'OS_Guess' => __DIR__ . '/..' . '/pear/pear-core-minimal/src/OS/Guess.php',
-        'OomphInc\\ComposerInstallersExtender\\Installer' => __DIR__ . '/..' . '/oomphinc/composer-installers-extender/src/Installer.php',
-        'OomphInc\\ComposerInstallersExtender\\InstallerHelper' => __DIR__ . '/..' . '/oomphinc/composer-installers-extender/src/InstallerHelper.php',
+        'OomphInc\\ComposerInstallersExtender\\Installers\\CustomInstaller' => __DIR__ . '/..' . '/oomphinc/composer-installers-extender/src/Installers/CustomInstaller.php',
+        'OomphInc\\ComposerInstallersExtender\\Installers\\Installer' => __DIR__ . '/..' . '/oomphinc/composer-installers-extender/src/Installers/Installer.php',
         'OomphInc\\ComposerInstallersExtender\\Plugin' => __DIR__ . '/..' . '/oomphinc/composer-installers-extender/src/Plugin.php',
         'PEAR' => __DIR__ . '/..' . '/pear/pear-core-minimal/src/PEAR.php',
         'PEAR_Error' => __DIR__ . '/..' . '/pear/pear-core-minimal/src/PEAR.php',
@@ -4252,9 +4240,16 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'PhpParser\\JsonDecoder' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/JsonDecoder.php',
         'PhpParser\\Lexer' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer.php',
         'PhpParser\\Lexer\\Emulative' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php',
+        'PhpParser\\Lexer\\TokenEmulator\\AttributeEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php',
         'PhpParser\\Lexer\\TokenEmulator\\CoaleseEqualTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php',
+        'PhpParser\\Lexer\\TokenEmulator\\FlexibleDocStringEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.php',
         'PhpParser\\Lexer\\TokenEmulator\\FnTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php',
-        'PhpParser\\Lexer\\TokenEmulator\\TokenEmulatorInterface' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulatorInterface.php',
+        'PhpParser\\Lexer\\TokenEmulator\\KeywordEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php',
+        'PhpParser\\Lexer\\TokenEmulator\\MatchTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php',
+        'PhpParser\\Lexer\\TokenEmulator\\NullsafeTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php',
+        'PhpParser\\Lexer\\TokenEmulator\\NumericLiteralSeparatorEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php',
+        'PhpParser\\Lexer\\TokenEmulator\\ReverseEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php',
+        'PhpParser\\Lexer\\TokenEmulator\\TokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php',
         'PhpParser\\NameContext' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NameContext.php',
         'PhpParser\\Node' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node.php',
         'PhpParser\\NodeAbstract' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeAbstract.php',
@@ -4268,7 +4263,11 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'PhpParser\\NodeVisitor\\FindingVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php',
         'PhpParser\\NodeVisitor\\FirstFindingVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php',
         'PhpParser\\NodeVisitor\\NameResolver' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php',
+        'PhpParser\\NodeVisitor\\NodeConnectingVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php',
+        'PhpParser\\NodeVisitor\\ParentConnectingVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php',
         'PhpParser\\Node\\Arg' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Arg.php',
+        'PhpParser\\Node\\Attribute' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Attribute.php',
+        'PhpParser\\Node\\AttributeGroup' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php',
         'PhpParser\\Node\\Const_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Const_.php',
         'PhpParser\\Node\\Expr' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr.php',
         'PhpParser\\Node\\Expr\\ArrayDimFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php',
@@ -4344,8 +4343,11 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'PhpParser\\Node\\Expr\\Instanceof_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php',
         'PhpParser\\Node\\Expr\\Isset_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php',
         'PhpParser\\Node\\Expr\\List_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php',
+        'PhpParser\\Node\\Expr\\Match_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php',
         'PhpParser\\Node\\Expr\\MethodCall' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php',
         'PhpParser\\Node\\Expr\\New_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php',
+        'PhpParser\\Node\\Expr\\NullsafeMethodCall' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php',
+        'PhpParser\\Node\\Expr\\NullsafePropertyFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php',
         'PhpParser\\Node\\Expr\\PostDec' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php',
         'PhpParser\\Node\\Expr\\PostInc' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php',
         'PhpParser\\Node\\Expr\\PreDec' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php',
@@ -4356,6 +4358,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'PhpParser\\Node\\Expr\\StaticCall' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php',
         'PhpParser\\Node\\Expr\\StaticPropertyFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php',
         'PhpParser\\Node\\Expr\\Ternary' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php',
+        'PhpParser\\Node\\Expr\\Throw_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php',
         'PhpParser\\Node\\Expr\\UnaryMinus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php',
         'PhpParser\\Node\\Expr\\UnaryPlus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php',
         'PhpParser\\Node\\Expr\\Variable' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php',
@@ -4363,6 +4366,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'PhpParser\\Node\\Expr\\Yield_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php',
         'PhpParser\\Node\\FunctionLike' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php',
         'PhpParser\\Node\\Identifier' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Identifier.php',
+        'PhpParser\\Node\\MatchArm' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/MatchArm.php',
         'PhpParser\\Node\\Name' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Name.php',
         'PhpParser\\Node\\Name\\FullyQualified' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php',
         'PhpParser\\Node\\Name\\Relative' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php',
@@ -4431,6 +4435,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'PhpParser\\Node\\Stmt\\UseUse' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php',
         'PhpParser\\Node\\Stmt\\Use_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php',
         'PhpParser\\Node\\Stmt\\While_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php',
+        'PhpParser\\Node\\UnionType' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/UnionType.php',
         'PhpParser\\Node\\VarLikeIdentifier' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php',
         'PhpParser\\Parser' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Parser.php',
         'PhpParser\\ParserAbstract' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ParserAbstract.php',
@@ -4468,14 +4473,15 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Psy\\CodeCleaner\\CallTimePassByReferencePass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/CallTimePassByReferencePass.php',
         'Psy\\CodeCleaner\\CalledClassPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/CalledClassPass.php',
         'Psy\\CodeCleaner\\CodeCleanerPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/CodeCleanerPass.php',
+        'Psy\\CodeCleaner\\EmptyArrayDimFetchPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/EmptyArrayDimFetchPass.php',
         'Psy\\CodeCleaner\\ExitPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/ExitPass.php',
         'Psy\\CodeCleaner\\FinalClassPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/FinalClassPass.php',
         'Psy\\CodeCleaner\\FunctionContextPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/FunctionContextPass.php',
         'Psy\\CodeCleaner\\FunctionReturnInWriteContextPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/FunctionReturnInWriteContextPass.php',
         'Psy\\CodeCleaner\\ImplicitReturnPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/ImplicitReturnPass.php',
         'Psy\\CodeCleaner\\InstanceOfPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/InstanceOfPass.php',
+        'Psy\\CodeCleaner\\LabelContextPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/LabelContextPass.php',
         'Psy\\CodeCleaner\\LeavePsyshAlonePass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/LeavePsyshAlonePass.php',
-        'Psy\\CodeCleaner\\LegacyEmptyPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/LegacyEmptyPass.php',
         'Psy\\CodeCleaner\\ListPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/ListPass.php',
         'Psy\\CodeCleaner\\LoopContextPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/LoopContextPass.php',
         'Psy\\CodeCleaner\\MagicConstantsPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/MagicConstantsPass.php',
@@ -4484,6 +4490,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Psy\\CodeCleaner\\NoReturnValue' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/NoReturnValue.php',
         'Psy\\CodeCleaner\\PassableByReferencePass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/PassableByReferencePass.php',
         'Psy\\CodeCleaner\\RequirePass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/RequirePass.php',
+        'Psy\\CodeCleaner\\ReturnTypePass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/ReturnTypePass.php',
         'Psy\\CodeCleaner\\StrictTypesPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/StrictTypesPass.php',
         'Psy\\CodeCleaner\\UseStatementPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/UseStatementPass.php',
         'Psy\\CodeCleaner\\ValidClassNamePass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/ValidClassNamePass.php',
@@ -4506,10 +4513,8 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Psy\\Command\\ListCommand\\Enumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/Enumerator.php',
         'Psy\\Command\\ListCommand\\FunctionEnumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/FunctionEnumerator.php',
         'Psy\\Command\\ListCommand\\GlobalVariableEnumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/GlobalVariableEnumerator.php',
-        'Psy\\Command\\ListCommand\\InterfaceEnumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/InterfaceEnumerator.php',
         'Psy\\Command\\ListCommand\\MethodEnumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/MethodEnumerator.php',
         'Psy\\Command\\ListCommand\\PropertyEnumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/PropertyEnumerator.php',
-        'Psy\\Command\\ListCommand\\TraitEnumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/TraitEnumerator.php',
         'Psy\\Command\\ListCommand\\VariableEnumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/VariableEnumerator.php',
         'Psy\\Command\\ParseCommand' => __DIR__ . '/..' . '/psy/psysh/src/Command/ParseCommand.php',
         'Psy\\Command\\PsyVersionCommand' => __DIR__ . '/..' . '/psy/psysh/src/Command/PsyVersionCommand.php',
@@ -4536,8 +4541,8 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Psy\\Exception\\RuntimeException' => __DIR__ . '/..' . '/psy/psysh/src/Exception/RuntimeException.php',
         'Psy\\Exception\\ThrowUpException' => __DIR__ . '/..' . '/psy/psysh/src/Exception/ThrowUpException.php',
         'Psy\\Exception\\TypeErrorException' => __DIR__ . '/..' . '/psy/psysh/src/Exception/TypeErrorException.php',
+        'Psy\\Exception\\UnexpectedTargetException' => __DIR__ . '/..' . '/psy/psysh/src/Exception/UnexpectedTargetException.php',
         'Psy\\ExecutionClosure' => __DIR__ . '/..' . '/psy/psysh/src/ExecutionClosure.php',
-        'Psy\\ExecutionLoop' => __DIR__ . '/..' . '/psy/psysh/src/ExecutionLoop.php',
         'Psy\\ExecutionLoopClosure' => __DIR__ . '/..' . '/psy/psysh/src/ExecutionLoopClosure.php',
         'Psy\\ExecutionLoop\\AbstractListener' => __DIR__ . '/..' . '/psy/psysh/src/ExecutionLoop/AbstractListener.php',
         'Psy\\ExecutionLoop\\Listener' => __DIR__ . '/..' . '/psy/psysh/src/ExecutionLoop/Listener.php',
@@ -4546,7 +4551,9 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Psy\\Formatter\\CodeFormatter' => __DIR__ . '/..' . '/psy/psysh/src/Formatter/CodeFormatter.php',
         'Psy\\Formatter\\DocblockFormatter' => __DIR__ . '/..' . '/psy/psysh/src/Formatter/DocblockFormatter.php',
         'Psy\\Formatter\\Formatter' => __DIR__ . '/..' . '/psy/psysh/src/Formatter/Formatter.php',
+        'Psy\\Formatter\\ReflectorFormatter' => __DIR__ . '/..' . '/psy/psysh/src/Formatter/ReflectorFormatter.php',
         'Psy\\Formatter\\SignatureFormatter' => __DIR__ . '/..' . '/psy/psysh/src/Formatter/SignatureFormatter.php',
+        'Psy\\Formatter\\TraceFormatter' => __DIR__ . '/..' . '/psy/psysh/src/Formatter/TraceFormatter.php',
         'Psy\\Input\\CodeArgument' => __DIR__ . '/..' . '/psy/psysh/src/Input/CodeArgument.php',
         'Psy\\Input\\FilterOptions' => __DIR__ . '/..' . '/psy/psysh/src/Input/FilterOptions.php',
         'Psy\\Input\\ShellInput' => __DIR__ . '/..' . '/psy/psysh/src/Input/ShellInput.php',
@@ -4566,6 +4573,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Psy\\Reflection\\ReflectionConstant_' => __DIR__ . '/..' . '/psy/psysh/src/Reflection/ReflectionConstant_.php',
         'Psy\\Reflection\\ReflectionLanguageConstruct' => __DIR__ . '/..' . '/psy/psysh/src/Reflection/ReflectionLanguageConstruct.php',
         'Psy\\Reflection\\ReflectionLanguageConstructParameter' => __DIR__ . '/..' . '/psy/psysh/src/Reflection/ReflectionLanguageConstructParameter.php',
+        'Psy\\Reflection\\ReflectionNamespace' => __DIR__ . '/..' . '/psy/psysh/src/Reflection/ReflectionNamespace.php',
         'Psy\\Shell' => __DIR__ . '/..' . '/psy/psysh/src/Shell.php',
         'Psy\\Sudo' => __DIR__ . '/..' . '/psy/psysh/src/Sudo.php',
         'Psy\\Sudo\\SudoVisitor' => __DIR__ . '/..' . '/psy/psysh/src/Sudo/SudoVisitor.php',
@@ -4686,6 +4694,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Robo\\State\\Data' => __DIR__ . '/..' . '/consolidation/robo/src/State/Data.php',
         'Robo\\State\\StateAwareInterface' => __DIR__ . '/..' . '/consolidation/robo/src/State/StateAwareInterface.php',
         'Robo\\State\\StateAwareTrait' => __DIR__ . '/..' . '/consolidation/robo/src/State/StateAwareTrait.php',
+        'Robo\\Symfony\\SymfonyStyleInjector' => __DIR__ . '/..' . '/consolidation/robo/src/Symfony/SymfonyStyleInjector.php',
         'Robo\\TaskAccessor' => __DIR__ . '/..' . '/consolidation/robo/src/TaskAccessor.php',
         'Robo\\TaskInfo' => __DIR__ . '/..' . '/consolidation/robo/src/TaskInfo.php',
         'Robo\\Task\\ApiGen\\ApiGen' => __DIR__ . '/..' . '/consolidation/robo/src/Task/ApiGen/ApiGen.php',
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 1e39a1582f..68ecf487c0 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -133,17 +133,17 @@
     },
     {
         "name": "chi-teck/drupal-code-generator",
-        "version": "1.30.3",
-        "version_normalized": "1.30.3.0",
+        "version": "1.32.1",
+        "version_normalized": "1.32.1.0",
         "source": {
             "type": "git",
             "url": "https://github.com/Chi-teck/drupal-code-generator.git",
-            "reference": "1da9f06843b6bf2b0e7d28fea4b6c1d79aead197"
+            "reference": "8abba7131ed4c89c1e8fc6dca0d05a4b6d0b2749"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/Chi-teck/drupal-code-generator/zipball/1da9f06843b6bf2b0e7d28fea4b6c1d79aead197",
-            "reference": "1da9f06843b6bf2b0e7d28fea4b6c1d79aead197",
+            "url": "https://api.github.com/repos/Chi-teck/drupal-code-generator/zipball/8abba7131ed4c89c1e8fc6dca0d05a4b6d0b2749",
+            "reference": "8abba7131ed4c89c1e8fc6dca0d05a4b6d0b2749",
             "shasum": ""
         },
         "require": {
@@ -151,9 +151,9 @@
             "php": ">=5.5.9",
             "symfony/console": "^3.4 || ^4.0",
             "symfony/filesystem": "^2.7 || ^3.4 || ^4.0",
-            "twig/twig": "^1.38.2 || ^2.10"
+            "twig/twig": "^1.41 || ^2.12"
         },
-        "time": "2019-06-29T10:29:45+00:00",
+        "time": "2020-07-15T06:08:04+00:00",
         "bin": [
             "bin/dcg"
         ],
@@ -496,26 +496,26 @@
     },
     {
         "name": "consolidation/annotated-command",
-        "version": "2.12.0",
-        "version_normalized": "2.12.0.0",
+        "version": "2.12.1",
+        "version_normalized": "2.12.1.0",
         "source": {
             "type": "git",
             "url": "https://github.com/consolidation/annotated-command.git",
-            "reference": "512a2e54c98f3af377589de76c43b24652bcb789"
+            "reference": "0ee361762df2274f360c085e3239784a53f850b5"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/512a2e54c98f3af377589de76c43b24652bcb789",
-            "reference": "512a2e54c98f3af377589de76c43b24652bcb789",
+            "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/0ee361762df2274f360c085e3239784a53f850b5",
+            "reference": "0ee361762df2274f360c085e3239784a53f850b5",
             "shasum": ""
         },
         "require": {
-            "consolidation/output-formatters": "^3.4",
+            "consolidation/output-formatters": "^3.5.1",
             "php": ">=5.4.5",
             "psr/log": "^1",
             "symfony/console": "^2.8|^3|^4",
             "symfony/event-dispatcher": "^2.5|^3|^4",
-            "symfony/finder": "^2.5|^3|^4"
+            "symfony/finder": "^2.5|^3|^4|^5"
         },
         "require-dev": {
             "g1a/composer-test-scenarios": "^3",
@@ -523,10 +523,20 @@
             "phpunit/phpunit": "^6",
             "squizlabs/php_codesniffer": "^2.7"
         },
-        "time": "2019-03-08T16:55:03+00:00",
+        "time": "2020-10-11T04:30:03+00:00",
         "type": "library",
         "extra": {
             "scenarios": {
+                "finder5": {
+                    "require": {
+                        "symfony/finder": "^5"
+                    },
+                    "config": {
+                        "platform": {
+                            "php": "7.2.5"
+                        }
+                    }
+                },
                 "symfony4": {
                     "require": {
                         "symfony/console": "^4.0"
@@ -838,24 +848,24 @@
     },
     {
         "name": "consolidation/output-formatters",
-        "version": "3.5.0",
-        "version_normalized": "3.5.0.0",
+        "version": "3.5.1",
+        "version_normalized": "3.5.1.0",
         "source": {
             "type": "git",
             "url": "https://github.com/consolidation/output-formatters.git",
-            "reference": "99ec998ffb697e0eada5aacf81feebfb13023605"
+            "reference": "0d38f13051ef05c223a2bb8e962d668e24785196"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/99ec998ffb697e0eada5aacf81feebfb13023605",
-            "reference": "99ec998ffb697e0eada5aacf81feebfb13023605",
+            "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/0d38f13051ef05c223a2bb8e962d668e24785196",
+            "reference": "0d38f13051ef05c223a2bb8e962d668e24785196",
             "shasum": ""
         },
         "require": {
             "dflydev/dot-access-data": "^1.1.0",
             "php": ">=5.4.0",
             "symfony/console": "^2.8|^3|^4",
-            "symfony/finder": "^2.5|^3|^4"
+            "symfony/finder": "^2.5|^3|^4|^5"
         },
         "require-dev": {
             "g1a/composer-test-scenarios": "^3",
@@ -868,10 +878,20 @@
         "suggest": {
             "symfony/var-dumper": "For using the var_dump formatter"
         },
-        "time": "2019-05-30T23:16:01+00:00",
+        "time": "2020-10-11T04:15:32+00:00",
         "type": "library",
         "extra": {
             "scenarios": {
+                "finder5": {
+                    "require": {
+                        "symfony/finder": "^5"
+                    },
+                    "config": {
+                        "platform": {
+                            "php": "7.2.5"
+                        }
+                    }
+                },
                 "symfony4": {
                     "require": {
                         "symfony/console": "^4.0"
@@ -941,51 +961,45 @@
     },
     {
         "name": "consolidation/robo",
-        "version": "1.4.9",
-        "version_normalized": "1.4.9.0",
+        "version": "1.4.13",
+        "version_normalized": "1.4.13.0",
         "source": {
             "type": "git",
             "url": "https://github.com/consolidation/Robo.git",
-            "reference": "5c6b3840a45afda1cbffbb3bb1f94dd5f9f83345"
+            "reference": "fd28dcca1b935950ece26e63541fbdeeb09f7343"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/consolidation/Robo/zipball/5c6b3840a45afda1cbffbb3bb1f94dd5f9f83345",
-            "reference": "5c6b3840a45afda1cbffbb3bb1f94dd5f9f83345",
+            "url": "https://api.github.com/repos/consolidation/Robo/zipball/fd28dcca1b935950ece26e63541fbdeeb09f7343",
+            "reference": "fd28dcca1b935950ece26e63541fbdeeb09f7343",
             "shasum": ""
         },
         "require": {
-            "consolidation/annotated-command": "^2.10.2",
-            "consolidation/config": "^1.2",
-            "consolidation/log": "~1",
-            "consolidation/output-formatters": "^3.1.13",
-            "consolidation/self-update": "^1",
-            "grasmash/yaml-expander": "^1.3",
-            "league/container": "^2.2",
+            "consolidation/annotated-command": "^2.12.1|^4.1",
+            "consolidation/config": "^1.2.1",
+            "consolidation/log": "^1.1.1|^2",
+            "consolidation/output-formatters": "^3.5.1|^4.1",
+            "consolidation/self-update": "^1.1.5",
+            "grasmash/yaml-expander": "^1.4",
+            "league/container": "^2.4.1",
             "php": ">=5.5.0",
             "symfony/console": "^2.8|^3|^4",
             "symfony/event-dispatcher": "^2.5|^3|^4",
             "symfony/filesystem": "^2.5|^3|^4",
-            "symfony/finder": "^2.5|^3|^4",
+            "symfony/finder": "^2.5|^3|^4|^5",
             "symfony/process": "^2.5|^3|^4"
         },
         "replace": {
             "codegyre/robo": "< 1.0"
         },
         "require-dev": {
-            "codeception/aspect-mock": "^1|^2.1.1",
-            "codeception/base": "^2.3.7",
-            "codeception/verify": "^0.3.2",
             "g1a/composer-test-scenarios": "^3",
-            "goaop/framework": "~2.1.2",
-            "goaop/parser-reflection": "^1.1.0",
             "natxet/cssmin": "3.0.4",
-            "nikic/php-parser": "^3.1.5",
-            "patchwork/jsqueeze": "~2",
+            "patchwork/jsqueeze": "^2",
             "pear/archive_tar": "^1.4.4",
             "php-coveralls/php-coveralls": "^1",
-            "phpunit/php-code-coverage": "~2|~4",
-            "squizlabs/php_codesniffer": "^2.8"
+            "phpunit/phpunit": "^5.7.27",
+            "squizlabs/php_codesniffer": "^3"
         },
         "suggest": {
             "henrikbjorn/lurker": "For monitoring filesystem changes in taskWatch",
@@ -993,13 +1007,23 @@
             "patchwork/jsqueeze": "For minifying JS files in taskMinify",
             "pear/archive_tar": "Allows tar archives to be created and extracted in taskPack and taskExtract, respectively."
         },
-        "time": "2019-03-19T18:07:19+00:00",
+        "time": "2020-10-11T04:51:34+00:00",
         "bin": [
             "robo"
         ],
         "type": "library",
         "extra": {
             "scenarios": {
+                "finder5": {
+                    "require": {
+                        "symfony/finder": "^5"
+                    },
+                    "config": {
+                        "platform": {
+                            "php": "7.2.5"
+                        }
+                    }
+                },
                 "symfony4": {
                     "require": {
                         "symfony/console": "^4"
@@ -1014,8 +1038,11 @@
                     "require": {
                         "symfony/console": "^2.8"
                     },
+                    "require-dev": {
+                        "phpunit/phpunit": "^4.8.36"
+                    },
                     "remove": [
-                        "goaop/framework"
+                        "php-coveralls/php-coveralls"
                     ],
                     "config": {
                         "platform": {
@@ -1028,7 +1055,7 @@
                 }
             },
             "branch-alias": {
-                "dev-master": "2.x-dev"
+                "dev-master": "1.x-dev"
             }
         },
         "installation-source": "dist",
@@ -1051,25 +1078,25 @@
     },
     {
         "name": "consolidation/self-update",
-        "version": "1.1.5",
-        "version_normalized": "1.1.5.0",
+        "version": "1.2.0",
+        "version_normalized": "1.2.0.0",
         "source": {
             "type": "git",
             "url": "https://github.com/consolidation/self-update.git",
-            "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54"
+            "reference": "dba6b2c0708f20fa3ba8008a2353b637578849b4"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/consolidation/self-update/zipball/a1c273b14ce334789825a09d06d4c87c0a02ad54",
-            "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54",
+            "url": "https://api.github.com/repos/consolidation/self-update/zipball/dba6b2c0708f20fa3ba8008a2353b637578849b4",
+            "reference": "dba6b2c0708f20fa3ba8008a2353b637578849b4",
             "shasum": ""
         },
         "require": {
             "php": ">=5.5.0",
-            "symfony/console": "^2.8|^3|^4",
-            "symfony/filesystem": "^2.5|^3|^4"
+            "symfony/console": "^2.8|^3|^4|^5",
+            "symfony/filesystem": "^2.5|^3|^4|^5"
         },
-        "time": "2018-10-28T01:52:03+00:00",
+        "time": "2020-04-13T02:49:20+00:00",
         "bin": [
             "scripts/release"
         ],
@@ -1090,48 +1117,47 @@
             "MIT"
         ],
         "authors": [
-            {
-                "name": "Greg Anderson",
-                "email": "greg.1.anderson@greenknowe.org"
-            },
             {
                 "name": "Alexander Menk",
                 "email": "menk@mestrona.net"
+            },
+            {
+                "name": "Greg Anderson",
+                "email": "greg.1.anderson@greenknowe.org"
             }
         ],
         "description": "Provides a self:update command for Symfony Console applications."
     },
     {
         "name": "consolidation/site-alias",
-        "version": "3.0.0",
-        "version_normalized": "3.0.0.0",
+        "version": "3.0.1",
+        "version_normalized": "3.0.1.0",
         "source": {
             "type": "git",
             "url": "https://github.com/consolidation/site-alias.git",
-            "reference": "8cfd3b6ab6d541086fc970bf850864293b284e6f"
+            "reference": "fd40a03f80f8fd4684b10bef8c8c4ec5a9a9bf26"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/consolidation/site-alias/zipball/8cfd3b6ab6d541086fc970bf850864293b284e6f",
-            "reference": "8cfd3b6ab6d541086fc970bf850864293b284e6f",
+            "url": "https://api.github.com/repos/consolidation/site-alias/zipball/fd40a03f80f8fd4684b10bef8c8c4ec5a9a9bf26",
+            "reference": "fd40a03f80f8fd4684b10bef8c8c4ec5a9a9bf26",
             "shasum": ""
         },
         "require": {
-            "consolidation/config": "^1.2.1",
+            "consolidation/config": "^1.2.1|^2",
             "php": ">=5.5.0"
         },
         "require-dev": {
-            "consolidation/robo": "^1.2.3",
+            "consolidation/robo": "^1.2.3|^2",
             "g1a/composer-test-scenarios": "^3",
             "knplabs/github-api": "^2.7",
-            "php-coveralls/php-coveralls": "^1",
+            "php-coveralls/php-coveralls": "^2.2",
             "php-http/guzzle6-adapter": "^1.1",
             "phpunit/phpunit": "^6",
             "squizlabs/php_codesniffer": "^2.8",
-            "symfony/console": "^2.8|^3|^4",
-            "symfony/yaml": "~2.3|^3"
+            "symfony/yaml": "~2.3|^3|^4.4|^5"
         },
-        "time": "2019-03-12T17:31:48+00:00",
+        "time": "2020-05-28T00:33:41+00:00",
         "type": "library",
         "extra": {
             "scenarios": {
@@ -1164,30 +1190,30 @@
             "MIT"
         ],
         "authors": [
-            {
-                "name": "Moshe Weitzman",
-                "email": "weitzman@tejasa.com"
-            },
             {
                 "name": "Greg Anderson",
                 "email": "greg.1.anderson@greenknowe.org"
+            },
+            {
+                "name": "Moshe Weitzman",
+                "email": "weitzman@tejasa.com"
             }
         ],
         "description": "Manage alias records for local and remote sites."
     },
     {
         "name": "consolidation/site-process",
-        "version": "2.0.3",
-        "version_normalized": "2.0.3.0",
+        "version": "2.1.0",
+        "version_normalized": "2.1.0.0",
         "source": {
             "type": "git",
             "url": "https://github.com/consolidation/site-process.git",
-            "reference": "e25265f4a48c13284ebb6f9e0906ecd415d451df"
+            "reference": "f3211fa4c60671c6f068184221f06f932556e443"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/consolidation/site-process/zipball/e25265f4a48c13284ebb6f9e0906ecd415d451df",
-            "reference": "e25265f4a48c13284ebb6f9e0906ecd415d451df",
+            "url": "https://api.github.com/repos/consolidation/site-process/zipball/f3211fa4c60671c6f068184221f06f932556e443",
+            "reference": "f3211fa4c60671c6f068184221f06f932556e443",
             "shasum": ""
         },
         "require": {
@@ -1205,7 +1231,7 @@
             "phpunit/phpunit": "^6",
             "squizlabs/php_codesniffer": "^2.8"
         },
-        "time": "2019-06-04T22:23:52+00:00",
+        "time": "2019-09-10T17:56:24+00:00",
         "type": "library",
         "extra": {
             "scenarios": {
@@ -1238,13 +1264,13 @@
             "MIT"
         ],
         "authors": [
-            {
-                "name": "Moshe Weitzman",
-                "email": "weitzman@tejasa.com"
-            },
             {
                 "name": "Greg Anderson",
                 "email": "greg.1.anderson@greenknowe.org"
+            },
+            {
+                "name": "Moshe Weitzman",
+                "email": "weitzman@tejasa.com"
             }
         ],
         "description": "A thin wrapper around the Symfony Process Component that allows applications to use the Site Alias library to specify the target for a remote call."
@@ -1285,28 +1311,28 @@
     },
     {
         "name": "cweagans/composer-patches",
-        "version": "1.6.5",
-        "version_normalized": "1.6.5.0",
+        "version": "1.7.0",
+        "version_normalized": "1.7.0.0",
         "source": {
             "type": "git",
             "url": "https://github.com/cweagans/composer-patches.git",
-            "reference": "2ec4f00ff5fb64de584c8c4aea53bf9053ecb0b3"
+            "reference": "ae02121445ad75f4eaff800cc532b5e6233e2ddf"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/cweagans/composer-patches/zipball/2ec4f00ff5fb64de584c8c4aea53bf9053ecb0b3",
-            "reference": "2ec4f00ff5fb64de584c8c4aea53bf9053ecb0b3",
+            "url": "https://api.github.com/repos/cweagans/composer-patches/zipball/ae02121445ad75f4eaff800cc532b5e6233e2ddf",
+            "reference": "ae02121445ad75f4eaff800cc532b5e6233e2ddf",
             "shasum": ""
         },
         "require": {
-            "composer-plugin-api": "^1.0",
+            "composer-plugin-api": "^1.0 || ^2.0",
             "php": ">=5.3.0"
         },
         "require-dev": {
-            "composer/composer": "~1.0",
+            "composer/composer": "~1.0 || ~2.0",
             "phpunit/phpunit": "~4.6"
         },
-        "time": "2018-05-11T18:00:16+00:00",
+        "time": "2020-09-30T17:56:20+00:00",
         "type": "composer-plugin",
         "extra": {
             "class": "cweagans\\Composer\\Patches"
@@ -1553,27 +1579,27 @@
     },
     {
         "name": "dnoegel/php-xdg-base-dir",
-        "version": "0.1",
-        "version_normalized": "0.1.0.0",
+        "version": "v0.1.1",
+        "version_normalized": "0.1.1.0",
         "source": {
             "type": "git",
             "url": "https://github.com/dnoegel/php-xdg-base-dir.git",
-            "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a"
+            "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/265b8593498b997dc2d31e75b89f053b5cc9621a",
-            "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a",
+            "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
+            "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
             "shasum": ""
         },
         "require": {
             "php": ">=5.3.2"
         },
         "require-dev": {
-            "phpunit/phpunit": "@stable"
+            "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35"
         },
-        "time": "2014-10-24T07:27:01+00:00",
-        "type": "project",
+        "time": "2019-12-04T15:06:13+00:00",
+        "type": "library",
         "installation-source": "dist",
         "autoload": {
             "psr-4": {
@@ -9008,17 +9034,17 @@
     },
     {
         "name": "drush/drush",
-        "version": "9.7.1",
-        "version_normalized": "9.7.1.0",
+        "version": "9.7.2",
+        "version_normalized": "9.7.2.0",
         "source": {
             "type": "git",
             "url": "https://github.com/drush-ops/drush.git",
-            "reference": "6f9a8d235daec06fd6f47b2d84da675750566479"
+            "reference": "ab5e345a72c9187a7d770486a09691f6526826aa"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/drush-ops/drush/zipball/6f9a8d235daec06fd6f47b2d84da675750566479",
-            "reference": "6f9a8d235daec06fd6f47b2d84da675750566479",
+            "url": "https://api.github.com/repos/drush-ops/drush/zipball/ab5e345a72c9187a7d770486a09691f6526826aa",
+            "reference": "ab5e345a72c9187a7d770486a09691f6526826aa",
             "shasum": ""
         },
         "require": {
@@ -9038,7 +9064,7 @@
             "psr/log": "~1.0",
             "psy/psysh": "~0.6",
             "symfony/console": "^3.4",
-            "symfony/event-dispatcher": "^3.4",
+            "symfony/event-dispatcher": "^3.4 || ^4.0",
             "symfony/finder": "^3.4 || ^4.0",
             "symfony/process": "^3.4",
             "symfony/var-dumper": "^3.4 || ^4.0",
@@ -9060,7 +9086,7 @@
             "webflo/drupal-core-require-dev": "8.7.x-dev",
             "webflo/drupal-core-strict": "8.7.x-dev"
         },
-        "time": "2019-06-30T19:46:39+00:00",
+        "time": "2020-02-09T17:29:51+00:00",
         "bin": [
             "drush"
         ],
@@ -9947,100 +9973,6 @@
         ],
         "abandoned": "simplesamlphp/twig-configurable-i18n"
     },
-    {
-        "name": "jakub-onderka/php-console-color",
-        "version": "v0.2",
-        "version_normalized": "0.2.0.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/JakubOnderka/PHP-Console-Color.git",
-            "reference": "d5deaecff52a0d61ccb613bb3804088da0307191"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/d5deaecff52a0d61ccb613bb3804088da0307191",
-            "reference": "d5deaecff52a0d61ccb613bb3804088da0307191",
-            "shasum": ""
-        },
-        "require": {
-            "php": ">=5.4.0"
-        },
-        "require-dev": {
-            "jakub-onderka/php-code-style": "1.0",
-            "jakub-onderka/php-parallel-lint": "1.0",
-            "jakub-onderka/php-var-dump-check": "0.*",
-            "phpunit/phpunit": "~4.3",
-            "squizlabs/php_codesniffer": "1.*"
-        },
-        "time": "2018-09-29T17:23:10+00:00",
-        "type": "library",
-        "installation-source": "dist",
-        "autoload": {
-            "psr-4": {
-                "JakubOnderka\\PhpConsoleColor\\": "src/"
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "BSD-2-Clause"
-        ],
-        "authors": [
-            {
-                "name": "Jakub Onderka",
-                "email": "jakub.onderka@gmail.com"
-            }
-        ],
-        "abandoned": "php-parallel-lint/php-console-color"
-    },
-    {
-        "name": "jakub-onderka/php-console-highlighter",
-        "version": "v0.4",
-        "version_normalized": "0.4.0.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git",
-            "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/9f7a229a69d52506914b4bc61bfdb199d90c5547",
-            "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547",
-            "shasum": ""
-        },
-        "require": {
-            "ext-tokenizer": "*",
-            "jakub-onderka/php-console-color": "~0.2",
-            "php": ">=5.4.0"
-        },
-        "require-dev": {
-            "jakub-onderka/php-code-style": "~1.0",
-            "jakub-onderka/php-parallel-lint": "~1.0",
-            "jakub-onderka/php-var-dump-check": "~0.1",
-            "phpunit/phpunit": "~4.0",
-            "squizlabs/php_codesniffer": "~1.5"
-        },
-        "time": "2018-09-29T18:48:56+00:00",
-        "type": "library",
-        "installation-source": "dist",
-        "autoload": {
-            "psr-4": {
-                "JakubOnderka\\PhpConsoleHighlighter\\": "src/"
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "MIT"
-        ],
-        "authors": [
-            {
-                "name": "Jakub Onderka",
-                "email": "acci@acci.cz",
-                "homepage": "http://www.acci.cz/"
-            }
-        ],
-        "description": "Highlight PHP code in terminal",
-        "abandoned": "php-parallel-lint/php-console-highlighter"
-    },
     {
         "name": "laminas/laminas-diactoros",
         "version": "1.8.7p2",
@@ -10568,17 +10500,17 @@
     },
     {
         "name": "nikic/php-parser",
-        "version": "v4.2.2",
-        "version_normalized": "4.2.2.0",
+        "version": "v4.10.2",
+        "version_normalized": "4.10.2.0",
         "source": {
             "type": "git",
             "url": "https://github.com/nikic/PHP-Parser.git",
-            "reference": "1bd73cc04c3843ad8d6b0bfc0956026a151fc420"
+            "reference": "658f1be311a230e0907f5dfe0213742aff0596de"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/1bd73cc04c3843ad8d6b0bfc0956026a151fc420",
-            "reference": "1bd73cc04c3843ad8d6b0bfc0956026a151fc420",
+            "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/658f1be311a230e0907f5dfe0213742aff0596de",
+            "reference": "658f1be311a230e0907f5dfe0213742aff0596de",
             "shasum": ""
         },
         "require": {
@@ -10586,16 +10518,17 @@
             "php": ">=7.0"
         },
         "require-dev": {
-            "phpunit/phpunit": "^6.5 || ^7.0"
+            "ircmaxell/php-yacc": "^0.0.7",
+            "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
         },
-        "time": "2019-05-25T20:07:01+00:00",
+        "time": "2020-09-26T10:30:38+00:00",
         "bin": [
             "bin/php-parse"
         ],
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "4.2-dev"
+                "dev-master": "4.9-dev"
             }
         },
         "installation-source": "dist",
@@ -10621,24 +10554,30 @@
     },
     {
         "name": "oomphinc/composer-installers-extender",
-        "version": "v1.1.2",
-        "version_normalized": "1.1.2.0",
+        "version": "2.0.0",
+        "version_normalized": "2.0.0.0",
         "source": {
             "type": "git",
             "url": "https://github.com/oomphinc/composer-installers-extender.git",
-            "reference": "ca1c4b16b0905c81d1e77e608f36a2eff1a56f56"
+            "reference": "8d3fe38a1723e0e91076920c8bb946b1696e28ca"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/oomphinc/composer-installers-extender/zipball/ca1c4b16b0905c81d1e77e608f36a2eff1a56f56",
-            "reference": "ca1c4b16b0905c81d1e77e608f36a2eff1a56f56",
+            "url": "https://api.github.com/repos/oomphinc/composer-installers-extender/zipball/8d3fe38a1723e0e91076920c8bb946b1696e28ca",
+            "reference": "8d3fe38a1723e0e91076920c8bb946b1696e28ca",
             "shasum": ""
         },
         "require": {
-            "composer-plugin-api": "^1.0",
-            "composer/installers": "^1.0"
+            "composer-plugin-api": "^1.1 || ^2.0",
+            "composer/installers": "^1.0",
+            "php": ">=7.1"
         },
-        "time": "2017-03-31T16:57:39+00:00",
+        "require-dev": {
+            "composer/composer": "^2.0",
+            "phpunit/phpunit": "^7.2",
+            "squizlabs/php_codesniffer": "^3.3"
+        },
+        "time": "2020-08-11T21:06:11+00:00",
         "type": "composer-plugin",
         "extra": {
             "class": "OomphInc\\ComposerInstallersExtender\\Plugin"
@@ -10658,6 +10597,11 @@
                 "name": "Stephen Beemsterboer",
                 "email": "stephen@oomphinc.com",
                 "homepage": "https://github.com/balbuf"
+            },
+            {
+                "name": "Nathan Dentzau",
+                "email": "nate@oomphinc.com",
+                "homepage": "http://oomph.is/ndentzau"
             }
         ],
         "description": "Extend the composer/installers plugin to accept any arbitrary package type.",
@@ -11232,33 +11176,31 @@
     },
     {
         "name": "psy/psysh",
-        "version": "v0.9.9",
-        "version_normalized": "0.9.9.0",
+        "version": "v0.10.4",
+        "version_normalized": "0.10.4.0",
         "source": {
             "type": "git",
             "url": "https://github.com/bobthecow/psysh.git",
-            "reference": "9aaf29575bb8293206bb0420c1e1c87ff2ffa94e"
+            "reference": "a8aec1b2981ab66882a01cce36a49b6317dc3560"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/bobthecow/psysh/zipball/9aaf29575bb8293206bb0420c1e1c87ff2ffa94e",
-            "reference": "9aaf29575bb8293206bb0420c1e1c87ff2ffa94e",
+            "url": "https://api.github.com/repos/bobthecow/psysh/zipball/a8aec1b2981ab66882a01cce36a49b6317dc3560",
+            "reference": "a8aec1b2981ab66882a01cce36a49b6317dc3560",
             "shasum": ""
         },
         "require": {
-            "dnoegel/php-xdg-base-dir": "0.1",
+            "dnoegel/php-xdg-base-dir": "0.1.*",
             "ext-json": "*",
             "ext-tokenizer": "*",
-            "jakub-onderka/php-console-highlighter": "0.3.*|0.4.*",
-            "nikic/php-parser": "~1.3|~2.0|~3.0|~4.0",
-            "php": ">=5.4.0",
-            "symfony/console": "~2.3.10|^2.4.2|~3.0|~4.0",
-            "symfony/var-dumper": "~2.7|~3.0|~4.0"
+            "nikic/php-parser": "~4.0|~3.0|~2.0|~1.3",
+            "php": "^8.0 || ^7.0 || ^5.5.9",
+            "symfony/console": "~5.0|~4.0|~3.0|^2.4.2|~2.3.10",
+            "symfony/var-dumper": "~5.0|~4.0|~3.0|~2.7"
         },
         "require-dev": {
             "bamarni/composer-bin-plugin": "^1.2",
-            "hoa/console": "~2.15|~3.16",
-            "phpunit/phpunit": "~4.8.35|~5.0|~6.0|~7.0"
+            "hoa/console": "3.17.*"
         },
         "suggest": {
             "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
@@ -11267,14 +11209,14 @@
             "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.",
             "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit."
         },
-        "time": "2018-10-13T15:16:03+00:00",
+        "time": "2020-05-03T19:32:03+00:00",
         "bin": [
             "bin/psysh"
         ],
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-develop": "0.9.x-dev"
+                "dev-master": "0.10.x-dev"
             }
         },
         "installation-source": "dist",
@@ -12252,30 +12194,25 @@
     },
     {
         "name": "symfony/filesystem",
-        "version": "v3.4.42",
-        "version_normalized": "3.4.42.0",
+        "version": "v3.4.46",
+        "version_normalized": "3.4.46.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/filesystem.git",
-            "reference": "0f625d0cb1e59c8c4ba61abb170125175218ff10"
+            "reference": "e58d7841cddfed6e846829040dca2cca0ebbbbb3"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/filesystem/zipball/0f625d0cb1e59c8c4ba61abb170125175218ff10",
-            "reference": "0f625d0cb1e59c8c4ba61abb170125175218ff10",
+            "url": "https://api.github.com/repos/symfony/filesystem/zipball/e58d7841cddfed6e846829040dca2cca0ebbbbb3",
+            "reference": "e58d7841cddfed6e846829040dca2cca0ebbbbb3",
             "shasum": ""
         },
         "require": {
             "php": "^5.5.9|>=7.0.8",
             "symfony/polyfill-ctype": "~1.8"
         },
-        "time": "2020-05-30T17:48:24+00:00",
+        "time": "2020-10-24T10:57:07+00:00",
         "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "3.4-dev"
-            }
-        },
         "installation-source": "dist",
         "autoload": {
             "psr-4": {
@@ -12300,33 +12237,42 @@
             }
         ],
         "description": "Symfony Filesystem Component",
-        "homepage": "https://symfony.com"
+        "homepage": "https://symfony.com",
+        "funding": [
+            {
+                "url": "https://symfony.com/sponsor",
+                "type": "custom"
+            },
+            {
+                "url": "https://github.com/fabpot",
+                "type": "github"
+            },
+            {
+                "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                "type": "tidelift"
+            }
+        ]
     },
     {
         "name": "symfony/finder",
-        "version": "v3.4.28",
-        "version_normalized": "3.4.28.0",
+        "version": "v3.4.46",
+        "version_normalized": "3.4.46.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/finder.git",
-            "reference": "fa5d962a71f2169dfe1cbae217fa5a2799859f6c"
+            "reference": "4e1da3c110c52d868f8a9153b7de3ebc381fba78"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/finder/zipball/fa5d962a71f2169dfe1cbae217fa5a2799859f6c",
-            "reference": "fa5d962a71f2169dfe1cbae217fa5a2799859f6c",
+            "url": "https://api.github.com/repos/symfony/finder/zipball/4e1da3c110c52d868f8a9153b7de3ebc381fba78",
+            "reference": "4e1da3c110c52d868f8a9153b7de3ebc381fba78",
             "shasum": ""
         },
         "require": {
             "php": "^5.5.9|>=7.0.8"
         },
-        "time": "2019-05-24T12:25:55+00:00",
+        "time": "2020-10-24T10:57:07+00:00",
         "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "3.4-dev"
-            }
-        },
         "installation-source": "dist",
         "autoload": {
             "psr-4": {
@@ -12351,7 +12297,21 @@
             }
         ],
         "description": "Symfony Finder Component",
-        "homepage": "https://symfony.com"
+        "homepage": "https://symfony.com",
+        "funding": [
+            {
+                "url": "https://symfony.com/sponsor",
+                "type": "custom"
+            },
+            {
+                "url": "https://github.com/fabpot",
+                "type": "github"
+            },
+            {
+                "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                "type": "tidelift"
+            }
+        ]
     },
     {
         "name": "symfony/http-foundation",
@@ -13414,17 +13374,17 @@
     },
     {
         "name": "symfony/var-dumper",
-        "version": "v3.4.28",
-        "version_normalized": "3.4.28.0",
+        "version": "v3.4.46",
+        "version_normalized": "3.4.46.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/var-dumper.git",
-            "reference": "ca5fef348a0440411bbca0f9ec14e9a11625bd6a"
+            "reference": "0719f6cf4633a38b2c1585140998579ce23b4b7d"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ca5fef348a0440411bbca0f9ec14e9a11625bd6a",
-            "reference": "ca5fef348a0440411bbca0f9ec14e9a11625bd6a",
+            "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0719f6cf4633a38b2c1585140998579ce23b4b7d",
+            "reference": "0719f6cf4633a38b2c1585140998579ce23b4b7d",
             "shasum": ""
         },
         "require": {
@@ -13443,13 +13403,8 @@
             "ext-intl": "To show region name in time zone dump",
             "ext-symfony_debug": ""
         },
-        "time": "2019-05-01T09:52:10+00:00",
+        "time": "2020-10-24T10:57:07+00:00",
         "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "3.4-dev"
-            }
-        },
         "installation-source": "dist",
         "autoload": {
             "files": [
@@ -13481,6 +13436,20 @@
         "keywords": [
             "debug",
             "dump"
+        ],
+        "funding": [
+            {
+                "url": "https://symfony.com/sponsor",
+                "type": "custom"
+            },
+            {
+                "url": "https://github.com/fabpot",
+                "type": "github"
+            },
+            {
+                "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                "type": "tidelift"
+            }
         ]
     },
     {
@@ -13722,24 +13691,27 @@
     },
     {
         "name": "webflo/drupal-finder",
-        "version": "1.1.0",
-        "version_normalized": "1.1.0.0",
+        "version": "1.2.2",
+        "version_normalized": "1.2.2.0",
         "source": {
             "type": "git",
             "url": "https://github.com/webflo/drupal-finder.git",
-            "reference": "8a7886c575d6eaa67a425dceccc84e735c0b9637"
+            "reference": "c8e5dbe65caef285fec8057a4c718a0d4138d1ee"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/webflo/drupal-finder/zipball/8a7886c575d6eaa67a425dceccc84e735c0b9637",
-            "reference": "8a7886c575d6eaa67a425dceccc84e735c0b9637",
+            "url": "https://api.github.com/repos/webflo/drupal-finder/zipball/c8e5dbe65caef285fec8057a4c718a0d4138d1ee",
+            "reference": "c8e5dbe65caef285fec8057a4c718a0d4138d1ee",
             "shasum": ""
         },
+        "require": {
+            "ext-json": "*"
+        },
         "require-dev": {
             "mikey179/vfsstream": "^1.6",
             "phpunit/phpunit": "^4.8"
         },
-        "time": "2017-10-24T08:12:11+00:00",
+        "time": "2020-10-27T09:42:17+00:00",
         "type": "library",
         "installation-source": "dist",
         "autoload": {
@@ -13749,7 +13721,7 @@
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "GPL-2.0+"
+            "GPL-2.0-or-later"
         ],
         "authors": [
             {
diff --git a/vendor/consolidation/annotated-command/.scenarios.lock/finder5/.gitignore b/vendor/consolidation/annotated-command/.scenarios.lock/finder5/.gitignore
new file mode 100644
index 0000000000..5657f6ea7d
--- /dev/null
+++ b/vendor/consolidation/annotated-command/.scenarios.lock/finder5/.gitignore
@@ -0,0 +1 @@
+vendor
\ No newline at end of file
diff --git a/vendor/consolidation/annotated-command/.scenarios.lock/finder5/composer.json b/vendor/consolidation/annotated-command/.scenarios.lock/finder5/composer.json
new file mode 100644
index 0000000000..547e43836e
--- /dev/null
+++ b/vendor/consolidation/annotated-command/.scenarios.lock/finder5/composer.json
@@ -0,0 +1,62 @@
+{
+    "name": "consolidation/annotated-command",
+    "description": "Initialize Symfony Console commands from annotated command class methods.",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Greg Anderson",
+            "email": "greg.1.anderson@greenknowe.org"
+        }
+    ],
+    "autoload": {
+        "psr-4": {
+            "Consolidation\\AnnotatedCommand\\": "../../src"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "Consolidation\\TestUtils\\": "../../tests/src"
+        }
+    },
+    "require": {
+        "symfony/finder": "^5",
+        "php": ">=5.4.5",
+        "consolidation/output-formatters": "^3.5.1",
+        "psr/log": "^1",
+        "symfony/console": "^2.8|^3|^4",
+        "symfony/event-dispatcher": "^2.5|^3|^4"
+    },
+    "require-dev": {
+        "phpunit/phpunit": "^6",
+        "php-coveralls/php-coveralls": "^1",
+        "g1a/composer-test-scenarios": "^3",
+        "squizlabs/php_codesniffer": "^2.7"
+    },
+    "config": {
+        "platform": {
+            "php": "7.2.5"
+        },
+        "optimize-autoloader": true,
+        "sort-packages": true,
+        "vendor-dir": "../../vendor"
+    },
+    "scripts": {
+        "cs": "phpcs --standard=PSR2 -n src",
+        "cbf": "phpcbf --standard=PSR2 -n src",
+        "unit": "SHELL_INTERACTIVE=true phpunit --colors=always",
+        "lint": [
+            "find src -name '*.php' -print0 | xargs -0 -n1 php -l",
+            "find tests/src -name '*.php' -print0 | xargs -0 -n1 php -l"
+        ],
+        "test": [
+            "@lint",
+            "@unit",
+            "@cs"
+        ]
+    },
+    "extra": {
+        "branch-alias": {
+            "dev-master": "2.x-dev"
+        }
+    }
+}
diff --git a/vendor/consolidation/annotated-command/.scenarios.lock/finder5/composer.lock b/vendor/consolidation/annotated-command/.scenarios.lock/finder5/composer.lock
new file mode 100644
index 0000000000..ede601c4ea
--- /dev/null
+++ b/vendor/consolidation/annotated-command/.scenarios.lock/finder5/composer.lock
@@ -0,0 +1,3037 @@
+{
+    "_readme": [
+        "This file locks the dependencies of your project to a known state",
+        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+        "This file is @generated automatically"
+    ],
+    "content-hash": "33b85345d55a3898a6a929558d951f57",
+    "packages": [
+        {
+            "name": "consolidation/output-formatters",
+            "version": "3.5.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/consolidation/output-formatters.git",
+                "reference": "0d38f13051ef05c223a2bb8e962d668e24785196"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/0d38f13051ef05c223a2bb8e962d668e24785196",
+                "reference": "0d38f13051ef05c223a2bb8e962d668e24785196",
+                "shasum": ""
+            },
+            "require": {
+                "dflydev/dot-access-data": "^1.1.0",
+                "php": ">=5.4.0",
+                "symfony/console": "^2.8|^3|^4",
+                "symfony/finder": "^2.5|^3|^4|^5"
+            },
+            "require-dev": {
+                "g1a/composer-test-scenarios": "^3",
+                "php-coveralls/php-coveralls": "^1",
+                "phpunit/phpunit": "^5.7.27",
+                "squizlabs/php_codesniffer": "^2.7",
+                "symfony/var-dumper": "^2.8|^3|^4",
+                "victorjonsson/markdowndocs": "^1.3"
+            },
+            "suggest": {
+                "symfony/var-dumper": "For using the var_dump formatter"
+            },
+            "type": "library",
+            "extra": {
+                "scenarios": {
+                    "finder5": {
+                        "require": {
+                            "symfony/finder": "^5"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.2.5"
+                            }
+                        }
+                    },
+                    "symfony4": {
+                        "require": {
+                            "symfony/console": "^4.0"
+                        },
+                        "require-dev": {
+                            "phpunit/phpunit": "^6"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.1.3"
+                            }
+                        }
+                    },
+                    "symfony3": {
+                        "require": {
+                            "symfony/console": "^3.4",
+                            "symfony/finder": "^3.4",
+                            "symfony/var-dumper": "^3.4"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "5.6.32"
+                            }
+                        }
+                    },
+                    "symfony2": {
+                        "require": {
+                            "symfony/console": "^2.8"
+                        },
+                        "require-dev": {
+                            "phpunit/phpunit": "^4.8.36"
+                        },
+                        "remove": [
+                            "php-coveralls/php-coveralls"
+                        ],
+                        "config": {
+                            "platform": {
+                                "php": "5.4.8"
+                            }
+                        },
+                        "scenario-options": {
+                            "create-lockfile": "false"
+                        }
+                    }
+                },
+                "branch-alias": {
+                    "dev-master": "3.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Consolidation\\OutputFormatters\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Greg Anderson",
+                    "email": "greg.1.anderson@greenknowe.org"
+                }
+            ],
+            "description": "Format text by applying transformations provided by plug-in formatters.",
+            "time": "2020-10-11T04:15:32+00:00"
+        },
+        {
+            "name": "dflydev/dot-access-data",
+            "version": "v1.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/dflydev/dflydev-dot-access-data.git",
+                "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a",
+                "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.2"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Dflydev\\DotAccessData": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Dragonfly Development Inc.",
+                    "email": "info@dflydev.com",
+                    "homepage": "http://dflydev.com"
+                },
+                {
+                    "name": "Beau Simensen",
+                    "email": "beau@dflydev.com",
+                    "homepage": "http://beausimensen.com"
+                },
+                {
+                    "name": "Carlos Frutos",
+                    "email": "carlos@kiwing.it",
+                    "homepage": "https://github.com/cfrutos"
+                }
+            ],
+            "description": "Given a deep data structure, access data by dot notation.",
+            "homepage": "https://github.com/dflydev/dflydev-dot-access-data",
+            "keywords": [
+                "access",
+                "data",
+                "dot",
+                "notation"
+            ],
+            "time": "2017-01-20T21:14:22+00:00"
+        },
+        {
+            "name": "psr/container",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/container.git",
+                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Container\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common Container Interface (PHP FIG PSR-11)",
+            "homepage": "https://github.com/php-fig/container",
+            "keywords": [
+                "PSR-11",
+                "container",
+                "container-interface",
+                "container-interop",
+                "psr"
+            ],
+            "time": "2017-02-14T16:28:37+00:00"
+        },
+        {
+            "name": "psr/log",
+            "version": "1.1.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/log.git",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Log\\": "Psr/Log/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for logging libraries",
+            "homepage": "https://github.com/php-fig/log",
+            "keywords": [
+                "log",
+                "psr",
+                "psr-3"
+            ],
+            "time": "2020-03-23T09:12:05+00:00"
+        },
+        {
+            "name": "symfony/console",
+            "version": "v4.4.15",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/console.git",
+                "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/console/zipball/90933b39c7b312fc3ceaa1ddeac7eb48cb953124",
+                "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/polyfill-php73": "^1.8",
+                "symfony/polyfill-php80": "^1.15",
+                "symfony/service-contracts": "^1.1|^2"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<3.4",
+                "symfony/event-dispatcher": "<4.3|>=5",
+                "symfony/lock": "<4.4",
+                "symfony/process": "<3.3"
+            },
+            "provide": {
+                "psr/log-implementation": "1.0"
+            },
+            "require-dev": {
+                "psr/log": "~1.0",
+                "symfony/config": "^3.4|^4.0|^5.0",
+                "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+                "symfony/event-dispatcher": "^4.3",
+                "symfony/lock": "^4.4|^5.0",
+                "symfony/process": "^3.4|^4.0|^5.0",
+                "symfony/var-dumper": "^4.3|^5.0"
+            },
+            "suggest": {
+                "psr/log": "For using the console logger",
+                "symfony/event-dispatcher": "",
+                "symfony/lock": "",
+                "symfony/process": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Console\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Console Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-15T07:58:55+00:00"
+        },
+        {
+            "name": "symfony/event-dispatcher",
+            "version": "v4.4.15",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/event-dispatcher.git",
+                "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e17bb5e0663dc725f7cdcafc932132735b4725cd",
+                "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "symfony/event-dispatcher-contracts": "^1.1"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<3.4"
+            },
+            "provide": {
+                "psr/event-dispatcher-implementation": "1.0",
+                "symfony/event-dispatcher-implementation": "1.1"
+            },
+            "require-dev": {
+                "psr/log": "~1.0",
+                "symfony/config": "^3.4|^4.0|^5.0",
+                "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+                "symfony/error-handler": "~3.4|~4.4",
+                "symfony/expression-language": "^3.4|^4.0|^5.0",
+                "symfony/http-foundation": "^3.4|^4.0|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/stopwatch": "^3.4|^4.0|^5.0"
+            },
+            "suggest": {
+                "symfony/dependency-injection": "",
+                "symfony/http-kernel": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\EventDispatcher\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony EventDispatcher Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-18T14:07:46+00:00"
+        },
+        {
+            "name": "symfony/event-dispatcher-contracts",
+            "version": "v1.1.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/event-dispatcher-contracts.git",
+                "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7",
+                "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3"
+            },
+            "suggest": {
+                "psr/event-dispatcher": "",
+                "symfony/event-dispatcher-implementation": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.1-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\EventDispatcher\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to dispatching event",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-06T13:19:58+00:00"
+        },
+        {
+            "name": "symfony/finder",
+            "version": "v5.1.7",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/finder.git",
+                "reference": "2c3ba7ad6884e6c4451ce2340e2dc23f6fa3e0d8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/2c3ba7ad6884e6c4451ce2340e2dc23f6fa3e0d8",
+                "reference": "2c3ba7ad6884e6c4451ce2340e2dc23f6fa3e0d8",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Finder\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Finder Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:23:27+00:00"
+        },
+        {
+            "name": "symfony/polyfill-mbstring",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-mbstring.git",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "ext-mbstring": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Mbstring\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for the Mbstring extension",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "mbstring",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php73",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php73.git",
+                "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
+                "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php73\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php80",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php80.git",
+                "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/d87d5766cbf48d72388a9f6b85f280c8ad51f981",
+                "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.0.8"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php80\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Ion Bazan",
+                    "email": "ion.bazan@gmail.com"
+                },
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/service-contracts",
+            "version": "v2.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/service-contracts.git",
+                "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1",
+                "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5",
+                "psr/container": "^1.0"
+            },
+            "suggest": {
+                "symfony/service-implementation": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.2-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\Service\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to writing services",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-07T11:33:47+00:00"
+        }
+    ],
+    "packages-dev": [
+        {
+            "name": "doctrine/instantiator",
+            "version": "1.3.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/instantiator.git",
+                "reference": "f350df0268e904597e3bd9c4685c53e0e333feea"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea",
+                "reference": "f350df0268e904597e3bd9c4685c53e0e333feea",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.1 || ^8.0"
+            },
+            "require-dev": {
+                "doctrine/coding-standard": "^6.0",
+                "ext-pdo": "*",
+                "ext-phar": "*",
+                "phpbench/phpbench": "^0.13",
+                "phpstan/phpstan-phpunit": "^0.11",
+                "phpstan/phpstan-shim": "^0.11",
+                "phpunit/phpunit": "^7.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.2.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Marco Pivetta",
+                    "email": "ocramius@gmail.com",
+                    "homepage": "http://ocramius.github.com/"
+                }
+            ],
+            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+            "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
+            "keywords": [
+                "constructor",
+                "instantiate"
+            ],
+            "funding": [
+                {
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://www.patreon.com/phpdoctrine",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-05-29T17:27:14+00:00"
+        },
+        {
+            "name": "g1a/composer-test-scenarios",
+            "version": "3.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/g1a/composer-test-scenarios.git",
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/e7394206d845fd593d325440507fb940bef8cb62",
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62",
+                "shasum": ""
+            },
+            "require": {
+                "composer-plugin-api": "^1.0.0 || ^2.0.0",
+                "php": ">=5.4"
+            },
+            "require-dev": {
+                "composer/composer": "^1.10.6 || ^2.0@rc",
+                "php-coveralls/php-coveralls": "^1.0",
+                "phpunit/phpunit": "^4.8.36|^6",
+                "squizlabs/php_codesniffer": "^3.5"
+            },
+            "bin": [
+                "scripts/dependency-licenses"
+            ],
+            "type": "composer-plugin",
+            "extra": {
+                "class": "ComposerTestScenarios\\Plugin",
+                "branch-alias": {
+                    "dev-main": "3.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "ComposerTestScenarios\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Greg Anderson",
+                    "email": "greg.1.anderson@greenknowe.org"
+                }
+            ],
+            "description": "Useful scripts for testing multiple sets of Composer dependencies.",
+            "time": "2020-09-28T20:54:35+00:00"
+        },
+        {
+            "name": "guzzle/guzzle",
+            "version": "v3.8.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/guzzle/guzzle.git",
+                "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
+                "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
+                "shasum": ""
+            },
+            "require": {
+                "ext-curl": "*",
+                "php": ">=5.3.3",
+                "symfony/event-dispatcher": ">=2.1"
+            },
+            "replace": {
+                "guzzle/batch": "self.version",
+                "guzzle/cache": "self.version",
+                "guzzle/common": "self.version",
+                "guzzle/http": "self.version",
+                "guzzle/inflection": "self.version",
+                "guzzle/iterator": "self.version",
+                "guzzle/log": "self.version",
+                "guzzle/parser": "self.version",
+                "guzzle/plugin": "self.version",
+                "guzzle/plugin-async": "self.version",
+                "guzzle/plugin-backoff": "self.version",
+                "guzzle/plugin-cache": "self.version",
+                "guzzle/plugin-cookie": "self.version",
+                "guzzle/plugin-curlauth": "self.version",
+                "guzzle/plugin-error-response": "self.version",
+                "guzzle/plugin-history": "self.version",
+                "guzzle/plugin-log": "self.version",
+                "guzzle/plugin-md5": "self.version",
+                "guzzle/plugin-mock": "self.version",
+                "guzzle/plugin-oauth": "self.version",
+                "guzzle/service": "self.version",
+                "guzzle/stream": "self.version"
+            },
+            "require-dev": {
+                "doctrine/cache": "*",
+                "monolog/monolog": "1.*",
+                "phpunit/phpunit": "3.7.*",
+                "psr/log": "1.0.*",
+                "symfony/class-loader": "*",
+                "zendframework/zend-cache": "<2.3",
+                "zendframework/zend-log": "<2.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.8-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Guzzle": "src/",
+                    "Guzzle\\Tests": "tests/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
+                },
+                {
+                    "name": "Guzzle Community",
+                    "homepage": "https://github.com/guzzle/guzzle/contributors"
+                }
+            ],
+            "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients",
+            "homepage": "http://guzzlephp.org/",
+            "keywords": [
+                "client",
+                "curl",
+                "framework",
+                "http",
+                "http client",
+                "rest",
+                "web service"
+            ],
+            "abandoned": "guzzlehttp/guzzle",
+            "time": "2014-01-28T22:29:15+00:00"
+        },
+        {
+            "name": "myclabs/deep-copy",
+            "version": "1.10.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/myclabs/DeepCopy.git",
+                "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
+                "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.1 || ^8.0"
+            },
+            "replace": {
+                "myclabs/deep-copy": "self.version"
+            },
+            "require-dev": {
+                "doctrine/collections": "^1.0",
+                "doctrine/common": "^2.6",
+                "phpunit/phpunit": "^7.1"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "DeepCopy\\": "src/DeepCopy/"
+                },
+                "files": [
+                    "src/DeepCopy/deep_copy.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Create deep copies (clones) of your objects",
+            "keywords": [
+                "clone",
+                "copy",
+                "duplicate",
+                "object",
+                "object graph"
+            ],
+            "funding": [
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-06-29T13:22:24+00:00"
+        },
+        {
+            "name": "phar-io/manifest",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phar-io/manifest.git",
+                "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0",
+                "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0",
+                "shasum": ""
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-phar": "*",
+                "phar-io/version": "^1.0.1",
+                "php": "^5.6 || ^7.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Arne Blankerts",
+                    "email": "arne@blankerts.de",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Sebastian Heuer",
+                    "email": "sebastian@phpeople.de",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
+            "time": "2017-03-05T18:14:27+00:00"
+        },
+        {
+            "name": "phar-io/version",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phar-io/version.git",
+                "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df",
+                "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.6 || ^7.0"
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Arne Blankerts",
+                    "email": "arne@blankerts.de",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Sebastian Heuer",
+                    "email": "sebastian@phpeople.de",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Library for handling version information and constraints",
+            "time": "2017-03-05T17:38:23+00:00"
+        },
+        {
+            "name": "php-coveralls/php-coveralls",
+            "version": "v1.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-coveralls/php-coveralls.git",
+                "reference": "37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad",
+                "reference": "37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad",
+                "shasum": ""
+            },
+            "require": {
+                "ext-json": "*",
+                "ext-simplexml": "*",
+                "guzzle/guzzle": "^2.8 || ^3.0",
+                "php": "^5.3.3 || ^7.0",
+                "psr/log": "^1.0",
+                "symfony/config": "^2.1 || ^3.0 || ^4.0",
+                "symfony/console": "^2.1 || ^3.0 || ^4.0",
+                "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0",
+                "symfony/yaml": "^2.0 || ^3.0 || ^4.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0"
+            },
+            "suggest": {
+                "symfony/http-kernel": "Allows Symfony integration"
+            },
+            "bin": [
+                "bin/coveralls"
+            ],
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Satooshi\\": "src/Satooshi/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Kitamura Satoshi",
+                    "email": "with.no.parachute@gmail.com",
+                    "homepage": "https://www.facebook.com/satooshi.jp"
+                }
+            ],
+            "description": "PHP client library for Coveralls API",
+            "homepage": "https://github.com/php-coveralls/php-coveralls",
+            "keywords": [
+                "ci",
+                "coverage",
+                "github",
+                "test"
+            ],
+            "time": "2017-12-06T23:17:56+00:00"
+        },
+        {
+            "name": "phpdocumentor/reflection-common",
+            "version": "2.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
+                "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+                "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2 || ^8.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-2.x": "2.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "phpDocumentor\\Reflection\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jaap van Otterdijk",
+                    "email": "opensource@ijaap.nl"
+                }
+            ],
+            "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
+            "homepage": "http://www.phpdoc.org",
+            "keywords": [
+                "FQSEN",
+                "phpDocumentor",
+                "phpdoc",
+                "reflection",
+                "static analysis"
+            ],
+            "time": "2020-06-27T09:03:43+00:00"
+        },
+        {
+            "name": "phpdocumentor/reflection-docblock",
+            "version": "5.2.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+                "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556",
+                "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556",
+                "shasum": ""
+            },
+            "require": {
+                "ext-filter": "*",
+                "php": "^7.2 || ^8.0",
+                "phpdocumentor/reflection-common": "^2.2",
+                "phpdocumentor/type-resolver": "^1.3",
+                "webmozart/assert": "^1.9.1"
+            },
+            "require-dev": {
+                "mockery/mockery": "~1.3.2"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "phpDocumentor\\Reflection\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mike van Riel",
+                    "email": "me@mikevanriel.com"
+                },
+                {
+                    "name": "Jaap van Otterdijk",
+                    "email": "account@ijaap.nl"
+                }
+            ],
+            "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
+            "time": "2020-09-03T19:13:55+00:00"
+        },
+        {
+            "name": "phpdocumentor/type-resolver",
+            "version": "1.4.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/TypeResolver.git",
+                "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
+                "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2 || ^8.0",
+                "phpdocumentor/reflection-common": "^2.0"
+            },
+            "require-dev": {
+                "ext-tokenizer": "*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-1.x": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "phpDocumentor\\Reflection\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mike van Riel",
+                    "email": "me@mikevanriel.com"
+                }
+            ],
+            "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
+            "time": "2020-09-17T18:55:26+00:00"
+        },
+        {
+            "name": "phpspec/prophecy",
+            "version": "v1.10.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpspec/prophecy.git",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/instantiator": "^1.0.2",
+                "php": "^5.3|^7.0",
+                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+                "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+                "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
+            },
+            "require-dev": {
+                "phpspec/phpspec": "^2.5 || ^3.2",
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.10.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Prophecy\\": "src/Prophecy"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Konstantin Kudryashov",
+                    "email": "ever.zet@gmail.com",
+                    "homepage": "http://everzet.com"
+                },
+                {
+                    "name": "Marcello Duarte",
+                    "email": "marcello.duarte@gmail.com"
+                }
+            ],
+            "description": "Highly opinionated mocking framework for PHP 5.3+",
+            "homepage": "https://github.com/phpspec/prophecy",
+            "keywords": [
+                "Double",
+                "Dummy",
+                "fake",
+                "mock",
+                "spy",
+                "stub"
+            ],
+            "time": "2020-03-05T15:02:03+00:00"
+        },
+        {
+            "name": "phpunit/php-code-coverage",
+            "version": "5.3.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+                "reference": "c89677919c5dd6d3b3852f230a663118762218ac"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c89677919c5dd6d3b3852f230a663118762218ac",
+                "reference": "c89677919c5dd6d3b3852f230a663118762218ac",
+                "shasum": ""
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-xmlwriter": "*",
+                "php": "^7.0",
+                "phpunit/php-file-iterator": "^1.4.2",
+                "phpunit/php-text-template": "^1.2.1",
+                "phpunit/php-token-stream": "^2.0.1",
+                "sebastian/code-unit-reverse-lookup": "^1.0.1",
+                "sebastian/environment": "^3.0",
+                "sebastian/version": "^2.0.1",
+                "theseer/tokenizer": "^1.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^6.0"
+            },
+            "suggest": {
+                "ext-xdebug": "^2.5.5"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.3.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+            "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+            "keywords": [
+                "coverage",
+                "testing",
+                "xunit"
+            ],
+            "time": "2018-04-06T15:36:58+00:00"
+        },
+        {
+            "name": "phpunit/php-file-iterator",
+            "version": "1.4.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+                "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4",
+                "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+            "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+            "keywords": [
+                "filesystem",
+                "iterator"
+            ],
+            "time": "2017-11-27T13:52:08+00:00"
+        },
+        {
+            "name": "phpunit/php-text-template",
+            "version": "1.2.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-text-template.git",
+                "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+                "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Simple template engine.",
+            "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+            "keywords": [
+                "template"
+            ],
+            "time": "2015-06-21T13:50:34+00:00"
+        },
+        {
+            "name": "phpunit/php-timer",
+            "version": "1.0.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-timer.git",
+                "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
+                "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.3 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Utility class for timing",
+            "homepage": "https://github.com/sebastianbergmann/php-timer/",
+            "keywords": [
+                "timer"
+            ],
+            "time": "2017-02-26T11:10:40+00:00"
+        },
+        {
+            "name": "phpunit/php-token-stream",
+            "version": "2.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-token-stream.git",
+                "reference": "791198a2c6254db10131eecfe8c06670700904db"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db",
+                "reference": "791198a2c6254db10131eecfe8c06670700904db",
+                "shasum": ""
+            },
+            "require": {
+                "ext-tokenizer": "*",
+                "php": "^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^6.2.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Wrapper around PHP's tokenizer extension.",
+            "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
+            "keywords": [
+                "tokenizer"
+            ],
+            "abandoned": true,
+            "time": "2017-11-27T05:48:46+00:00"
+        },
+        {
+            "name": "phpunit/phpunit",
+            "version": "6.5.14",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/phpunit.git",
+                "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bac23fe7ff13dbdb461481f706f0e9fe746334b7",
+                "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7",
+                "shasum": ""
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-json": "*",
+                "ext-libxml": "*",
+                "ext-mbstring": "*",
+                "ext-xml": "*",
+                "myclabs/deep-copy": "^1.6.1",
+                "phar-io/manifest": "^1.0.1",
+                "phar-io/version": "^1.0",
+                "php": "^7.0",
+                "phpspec/prophecy": "^1.7",
+                "phpunit/php-code-coverage": "^5.3",
+                "phpunit/php-file-iterator": "^1.4.3",
+                "phpunit/php-text-template": "^1.2.1",
+                "phpunit/php-timer": "^1.0.9",
+                "phpunit/phpunit-mock-objects": "^5.0.9",
+                "sebastian/comparator": "^2.1",
+                "sebastian/diff": "^2.0",
+                "sebastian/environment": "^3.1",
+                "sebastian/exporter": "^3.1",
+                "sebastian/global-state": "^2.0",
+                "sebastian/object-enumerator": "^3.0.3",
+                "sebastian/resource-operations": "^1.0",
+                "sebastian/version": "^2.0.1"
+            },
+            "conflict": {
+                "phpdocumentor/reflection-docblock": "3.0.2",
+                "phpunit/dbunit": "<3.0"
+            },
+            "require-dev": {
+                "ext-pdo": "*"
+            },
+            "suggest": {
+                "ext-xdebug": "*",
+                "phpunit/php-invoker": "^1.1"
+            },
+            "bin": [
+                "phpunit"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "6.5.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "The PHP Unit Testing framework.",
+            "homepage": "https://phpunit.de/",
+            "keywords": [
+                "phpunit",
+                "testing",
+                "xunit"
+            ],
+            "time": "2019-02-01T05:22:47+00:00"
+        },
+        {
+            "name": "phpunit/phpunit-mock-objects",
+            "version": "5.0.10",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
+                "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/cd1cf05c553ecfec36b170070573e540b67d3f1f",
+                "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/instantiator": "^1.0.5",
+                "php": "^7.0",
+                "phpunit/php-text-template": "^1.2.1",
+                "sebastian/exporter": "^3.1"
+            },
+            "conflict": {
+                "phpunit/phpunit": "<6.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^6.5.11"
+            },
+            "suggest": {
+                "ext-soap": "*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Mock Object library for PHPUnit",
+            "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
+            "keywords": [
+                "mock",
+                "xunit"
+            ],
+            "abandoned": true,
+            "time": "2018-08-09T05:50:03+00:00"
+        },
+        {
+            "name": "sebastian/code-unit-reverse-lookup",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+                "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
+                "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.6 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^5.7 || ^6.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Looks up which function or method a line of code belongs to",
+            "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+            "time": "2017-03-04T06:30:41+00:00"
+        },
+        {
+            "name": "sebastian/comparator",
+            "version": "2.1.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/comparator.git",
+                "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/34369daee48eafb2651bea869b4b15d75ccc35f9",
+                "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.0",
+                "sebastian/diff": "^2.0 || ^3.0",
+                "sebastian/exporter": "^3.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^6.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.1.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Volker Dusch",
+                    "email": "github@wallbash.com"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@2bepublished.at"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Provides the functionality to compare PHP values for equality",
+            "homepage": "https://github.com/sebastianbergmann/comparator",
+            "keywords": [
+                "comparator",
+                "compare",
+                "equality"
+            ],
+            "time": "2018-02-01T13:46:46+00:00"
+        },
+        {
+            "name": "sebastian/diff",
+            "version": "2.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/diff.git",
+                "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd",
+                "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^6.2"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Kore Nordmann",
+                    "email": "mail@kore-nordmann.de"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Diff implementation",
+            "homepage": "https://github.com/sebastianbergmann/diff",
+            "keywords": [
+                "diff"
+            ],
+            "time": "2017-08-03T08:09:46+00:00"
+        },
+        {
+            "name": "sebastian/environment",
+            "version": "3.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/environment.git",
+                "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5",
+                "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^6.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.1.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Provides functionality to handle HHVM/PHP environments",
+            "homepage": "http://www.github.com/sebastianbergmann/environment",
+            "keywords": [
+                "Xdebug",
+                "environment",
+                "hhvm"
+            ],
+            "time": "2017-07-01T08:51:00+00:00"
+        },
+        {
+            "name": "sebastian/exporter",
+            "version": "3.1.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/exporter.git",
+                "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e",
+                "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.0",
+                "sebastian/recursion-context": "^3.0"
+            },
+            "require-dev": {
+                "ext-mbstring": "*",
+                "phpunit/phpunit": "^6.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.1.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Volker Dusch",
+                    "email": "github@wallbash.com"
+                },
+                {
+                    "name": "Adam Harvey",
+                    "email": "aharvey@php.net"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@gmail.com"
+                }
+            ],
+            "description": "Provides the functionality to export PHP variables for visualization",
+            "homepage": "http://www.github.com/sebastianbergmann/exporter",
+            "keywords": [
+                "export",
+                "exporter"
+            ],
+            "time": "2019-09-14T09:02:43+00:00"
+        },
+        {
+            "name": "sebastian/global-state",
+            "version": "2.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/global-state.git",
+                "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4",
+                "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^6.0"
+            },
+            "suggest": {
+                "ext-uopz": "*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Snapshotting of global state",
+            "homepage": "http://www.github.com/sebastianbergmann/global-state",
+            "keywords": [
+                "global state"
+            ],
+            "time": "2017-04-27T15:39:26+00:00"
+        },
+        {
+            "name": "sebastian/object-enumerator",
+            "version": "3.0.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+                "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5",
+                "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.0",
+                "sebastian/object-reflector": "^1.1.1",
+                "sebastian/recursion-context": "^3.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^6.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+            "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+            "time": "2017-08-03T12:35:26+00:00"
+        },
+        {
+            "name": "sebastian/object-reflector",
+            "version": "1.1.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/object-reflector.git",
+                "reference": "773f97c67f28de00d397be301821b06708fca0be"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be",
+                "reference": "773f97c67f28de00d397be301821b06708fca0be",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^6.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.1-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Allows reflection of object attributes, including inherited and non-public ones",
+            "homepage": "https://github.com/sebastianbergmann/object-reflector/",
+            "time": "2017-03-29T09:07:27+00:00"
+        },
+        {
+            "name": "sebastian/recursion-context",
+            "version": "3.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/recursion-context.git",
+                "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8",
+                "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^6.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Adam Harvey",
+                    "email": "aharvey@php.net"
+                }
+            ],
+            "description": "Provides functionality to recursively process PHP variables",
+            "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+            "time": "2017-03-03T06:23:57+00:00"
+        },
+        {
+            "name": "sebastian/resource-operations",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/resource-operations.git",
+                "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
+                "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Provides a list of PHP built-in functions that operate on resources",
+            "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
+            "time": "2015-07-28T20:34:47+00:00"
+        },
+        {
+            "name": "sebastian/version",
+            "version": "2.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/version.git",
+                "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
+                "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+            "homepage": "https://github.com/sebastianbergmann/version",
+            "time": "2016-10-03T07:35:21+00:00"
+        },
+        {
+            "name": "squizlabs/php_codesniffer",
+            "version": "2.9.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
+                "reference": "2acf168de78487db620ab4bc524135a13cfe6745"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/2acf168de78487db620ab4bc524135a13cfe6745",
+                "reference": "2acf168de78487db620ab4bc524135a13cfe6745",
+                "shasum": ""
+            },
+            "require": {
+                "ext-simplexml": "*",
+                "ext-tokenizer": "*",
+                "ext-xmlwriter": "*",
+                "php": ">=5.1.2"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.0"
+            },
+            "bin": [
+                "scripts/phpcs",
+                "scripts/phpcbf"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "CodeSniffer.php",
+                    "CodeSniffer/CLI.php",
+                    "CodeSniffer/Exception.php",
+                    "CodeSniffer/File.php",
+                    "CodeSniffer/Fixer.php",
+                    "CodeSniffer/Report.php",
+                    "CodeSniffer/Reporting.php",
+                    "CodeSniffer/Sniff.php",
+                    "CodeSniffer/Tokens.php",
+                    "CodeSniffer/Reports/",
+                    "CodeSniffer/Tokenizers/",
+                    "CodeSniffer/DocGenerators/",
+                    "CodeSniffer/Standards/AbstractPatternSniff.php",
+                    "CodeSniffer/Standards/AbstractScopeSniff.php",
+                    "CodeSniffer/Standards/AbstractVariableSniff.php",
+                    "CodeSniffer/Standards/IncorrectPatternException.php",
+                    "CodeSniffer/Standards/Generic/Sniffs/",
+                    "CodeSniffer/Standards/MySource/Sniffs/",
+                    "CodeSniffer/Standards/PEAR/Sniffs/",
+                    "CodeSniffer/Standards/PSR1/Sniffs/",
+                    "CodeSniffer/Standards/PSR2/Sniffs/",
+                    "CodeSniffer/Standards/Squiz/Sniffs/",
+                    "CodeSniffer/Standards/Zend/Sniffs/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Greg Sherwood",
+                    "role": "lead"
+                }
+            ],
+            "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
+            "homepage": "http://www.squizlabs.com/php-codesniffer",
+            "keywords": [
+                "phpcs",
+                "standards"
+            ],
+            "time": "2018-11-07T22:31:41+00:00"
+        },
+        {
+            "name": "symfony/config",
+            "version": "v4.4.15",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/config.git",
+                "reference": "7c5a1002178a612787c291a4f515f87b19176b61"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/config/zipball/7c5a1002178a612787c291a4f515f87b19176b61",
+                "reference": "7c5a1002178a612787c291a4f515f87b19176b61",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "symfony/filesystem": "^3.4|^4.0|^5.0",
+                "symfony/polyfill-ctype": "~1.8"
+            },
+            "conflict": {
+                "symfony/finder": "<3.4"
+            },
+            "require-dev": {
+                "symfony/event-dispatcher": "^3.4|^4.0|^5.0",
+                "symfony/finder": "^3.4|^4.0|^5.0",
+                "symfony/messenger": "^4.1|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/yaml": "^3.4|^4.0|^5.0"
+            },
+            "suggest": {
+                "symfony/yaml": "To use the yaml reference dumper"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Config\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Config Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-10-02T07:34:48+00:00"
+        },
+        {
+            "name": "symfony/filesystem",
+            "version": "v5.1.7",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/filesystem.git",
+                "reference": "1a8697545a8d87b9f2f6b1d32414199cc5e20aae"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/1a8697545a8d87b9f2f6b1d32414199cc5e20aae",
+                "reference": "1a8697545a8d87b9f2f6b1d32414199cc5e20aae",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5",
+                "symfony/polyfill-ctype": "~1.8"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Filesystem\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Filesystem Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-27T14:02:37+00:00"
+        },
+        {
+            "name": "symfony/polyfill-ctype",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-ctype.git",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "ext-ctype": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Ctype\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Gert de Pagter",
+                    "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for ctype functions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "ctype",
+                "polyfill",
+                "portable"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/stopwatch",
+            "version": "v4.4.15",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/stopwatch.git",
+                "reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/6f89e19772cf61b3c65bab329fe0e318259fbd91",
+                "reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "symfony/service-contracts": "^1.0|^2"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Stopwatch\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Stopwatch Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:08:58+00:00"
+        },
+        {
+            "name": "symfony/yaml",
+            "version": "v4.4.15",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/yaml.git",
+                "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/c7885964b1eceb70b0981556d0a9b01d2d97c8d1",
+                "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "symfony/polyfill-ctype": "~1.8"
+            },
+            "conflict": {
+                "symfony/console": "<3.4"
+            },
+            "require-dev": {
+                "symfony/console": "^3.4|^4.0|^5.0"
+            },
+            "suggest": {
+                "symfony/console": "For validating YAML files using the lint command"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Yaml\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Yaml Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-27T03:36:23+00:00"
+        },
+        {
+            "name": "theseer/tokenizer",
+            "version": "1.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/theseer/tokenizer.git",
+                "reference": "75a63c33a8577608444246075ea0af0d052e452a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a",
+                "reference": "75a63c33a8577608444246075ea0af0d052e452a",
+                "shasum": ""
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-tokenizer": "*",
+                "ext-xmlwriter": "*",
+                "php": "^7.2 || ^8.0"
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Arne Blankerts",
+                    "email": "arne@blankerts.de",
+                    "role": "Developer"
+                }
+            ],
+            "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
+            "funding": [
+                {
+                    "url": "https://github.com/theseer",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-07-12T23:59:07+00:00"
+        },
+        {
+            "name": "webmozart/assert",
+            "version": "1.9.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/webmozart/assert.git",
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.3 || ^7.0 || ^8.0",
+                "symfony/polyfill-ctype": "^1.8"
+            },
+            "conflict": {
+                "phpstan/phpstan": "<0.12.20",
+                "vimeo/psalm": "<3.9.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.36 || ^7.5.13"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Webmozart\\Assert\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@gmail.com"
+                }
+            ],
+            "description": "Assertions to validate method input/output with nice error messages.",
+            "keywords": [
+                "assert",
+                "check",
+                "validate"
+            ],
+            "time": "2020-07-08T17:02:28+00:00"
+        }
+    ],
+    "aliases": [],
+    "minimum-stability": "stable",
+    "stability-flags": [],
+    "prefer-stable": false,
+    "prefer-lowest": false,
+    "platform": {
+        "php": ">=5.4.5"
+    },
+    "platform-dev": [],
+    "platform-overrides": {
+        "php": "7.2.5"
+    },
+    "plugin-api-version": "1.1.0"
+}
diff --git a/vendor/consolidation/annotated-command/.scenarios.lock/install b/vendor/consolidation/annotated-command/.scenarios.lock/install
old mode 100644
new mode 100755
index 16c69e107c..4d8a777705
--- a/vendor/consolidation/annotated-command/.scenarios.lock/install
+++ b/vendor/consolidation/annotated-command/.scenarios.lock/install
@@ -4,16 +4,16 @@ SCENARIO=$1
 DEPENDENCIES=${2-install}
 
 # Convert the aliases 'highest', 'lowest' and 'lock' to
-# the corresponding composer command to run.
+# the corresponding composer update command to run.
 case $DEPENDENCIES in
   highest)
-    DEPENDENCIES=update
+    UPDATE_COMMAND=update
     ;;
   lowest)
-    DEPENDENCIES='update --prefer-lowest'
+    UPDATE_COMMAND='update --prefer-lowest'
     ;;
   lock|default|"")
-    DEPENDENCIES=install
+    UPDATE_COMMAND=''
     ;;
 esac
 
@@ -48,7 +48,11 @@ echo
 set -ex
 
 composer -n validate --working-dir=$dir --no-check-all --ansi
-composer -n --working-dir=$dir ${DEPENDENCIES} --prefer-dist --no-scripts
+
+if [ ! -z "$UPDATE_COMMAND" ] ; then
+  composer -n --working-dir=$dir ${UPDATE_COMMAND} --prefer-dist --no-scripts
+fi
+composer -n --working-dir=$dir install --prefer-dist
 
 # If called from a CI context, print out some extra information about
 # what we just installed.
diff --git a/vendor/consolidation/annotated-command/.scenarios.lock/phpunit4/composer.json b/vendor/consolidation/annotated-command/.scenarios.lock/phpunit4/composer.json
index 13a0f7a03a..5b5e3597c5 100644
--- a/vendor/consolidation/annotated-command/.scenarios.lock/phpunit4/composer.json
+++ b/vendor/consolidation/annotated-command/.scenarios.lock/phpunit4/composer.json
@@ -20,11 +20,11 @@
     },
     "require": {
         "php": ">=5.4.5",
-        "consolidation/output-formatters": "^3.4",
+        "consolidation/output-formatters": "^3.5.1",
         "psr/log": "^1",
         "symfony/console": "^2.8|^3|^4",
         "symfony/event-dispatcher": "^2.5|^3|^4",
-        "symfony/finder": "^2.5|^3|^4"
+        "symfony/finder": "^2.5|^3|^4|^5"
     },
     "require-dev": {
         "phpunit/phpunit": "^4.8.36",
diff --git a/vendor/consolidation/annotated-command/.scenarios.lock/phpunit4/composer.lock b/vendor/consolidation/annotated-command/.scenarios.lock/phpunit4/composer.lock
index b4dfe0de37..0e162a0782 100644
--- a/vendor/consolidation/annotated-command/.scenarios.lock/phpunit4/composer.lock
+++ b/vendor/consolidation/annotated-command/.scenarios.lock/phpunit4/composer.lock
@@ -4,34 +4,33 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "3bc1df70645d80d8cf1dc2fce04595ed",
+    "content-hash": "d69dc077ee58063a1087d070cb72acc1",
     "packages": [
         {
             "name": "consolidation/output-formatters",
-            "version": "3.4.0",
+            "version": "3.5.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/output-formatters.git",
-                "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19"
+                "reference": "0d38f13051ef05c223a2bb8e962d668e24785196"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/a942680232094c4a5b21c0b7e54c20cce623ae19",
-                "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19",
+                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/0d38f13051ef05c223a2bb8e962d668e24785196",
+                "reference": "0d38f13051ef05c223a2bb8e962d668e24785196",
                 "shasum": ""
             },
             "require": {
                 "dflydev/dot-access-data": "^1.1.0",
                 "php": ">=5.4.0",
                 "symfony/console": "^2.8|^3|^4",
-                "symfony/finder": "^2.5|^3|^4"
+                "symfony/finder": "^2.5|^3|^4|^5"
             },
             "require-dev": {
-                "g1a/composer-test-scenarios": "^2",
+                "g1a/composer-test-scenarios": "^3",
+                "php-coveralls/php-coveralls": "^1",
                 "phpunit/phpunit": "^5.7.27",
-                "satooshi/php-coveralls": "^2",
                 "squizlabs/php_codesniffer": "^2.7",
-                "symfony/console": "3.2.3",
                 "symfony/var-dumper": "^2.8|^3|^4",
                 "victorjonsson/markdowndocs": "^1.3"
             },
@@ -40,6 +39,62 @@
             },
             "type": "library",
             "extra": {
+                "scenarios": {
+                    "finder5": {
+                        "require": {
+                            "symfony/finder": "^5"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.2.5"
+                            }
+                        }
+                    },
+                    "symfony4": {
+                        "require": {
+                            "symfony/console": "^4.0"
+                        },
+                        "require-dev": {
+                            "phpunit/phpunit": "^6"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.1.3"
+                            }
+                        }
+                    },
+                    "symfony3": {
+                        "require": {
+                            "symfony/console": "^3.4",
+                            "symfony/finder": "^3.4",
+                            "symfony/var-dumper": "^3.4"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "5.6.32"
+                            }
+                        }
+                    },
+                    "symfony2": {
+                        "require": {
+                            "symfony/console": "^2.8"
+                        },
+                        "require-dev": {
+                            "phpunit/phpunit": "^4.8.36"
+                        },
+                        "remove": [
+                            "php-coveralls/php-coveralls"
+                        ],
+                        "config": {
+                            "platform": {
+                                "php": "5.4.8"
+                            }
+                        },
+                        "scenario-options": {
+                            "create-lockfile": "false"
+                        }
+                    }
+                },
                 "branch-alias": {
                     "dev-master": "3.x-dev"
                 }
@@ -60,7 +115,7 @@
                 }
             ],
             "description": "Format text by applying transformations provided by plug-in formatters.",
-            "time": "2018-10-19T22:35:38+00:00"
+            "time": "2020-10-11T04:15:32+00:00"
         },
         {
             "name": "dflydev/dot-access-data",
@@ -123,16 +178,16 @@
         },
         {
             "name": "psr/log",
-            "version": "1.1.0",
+            "version": "1.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-fig/log.git",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
                 "shasum": ""
             },
             "require": {
@@ -141,7 +196,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.1.x-dev"
                 }
             },
             "autoload": {
@@ -166,11 +221,11 @@
                 "psr",
                 "psr-3"
             ],
-            "time": "2018-11-20T15:27:04+00:00"
+            "time": "2020-03-23T09:12:05+00:00"
         },
         {
             "name": "symfony/console",
-            "version": "v2.8.49",
+            "version": "v2.8.52",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
@@ -231,7 +286,7 @@
         },
         {
             "name": "symfony/debug",
-            "version": "v2.8.49",
+            "version": "v2.8.52",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/debug.git",
@@ -288,7 +343,7 @@
         },
         {
             "name": "symfony/event-dispatcher",
-            "version": "v2.8.49",
+            "version": "v2.8.52",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/event-dispatcher.git",
@@ -348,7 +403,7 @@
         },
         {
             "name": "symfony/finder",
-            "version": "v2.8.49",
+            "version": "v2.8.52",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
@@ -397,16 +452,16 @@
         },
         {
             "name": "symfony/polyfill-mbstring",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494"
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a",
                 "shasum": ""
             },
             "require": {
@@ -418,7 +473,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -452,7 +511,21 @@
                 "portable",
                 "shim"
             ],
-            "time": "2018-09-21T13:07:52+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         }
     ],
     "packages-dev": [
@@ -512,27 +585,27 @@
         },
         {
             "name": "g1a/composer-test-scenarios",
-            "version": "3.0.1",
+            "version": "3.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/g1a/composer-test-scenarios.git",
-                "reference": "224531e20d13a07942a989a70759f726cd2df9a1"
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/224531e20d13a07942a989a70759f726cd2df9a1",
-                "reference": "224531e20d13a07942a989a70759f726cd2df9a1",
+                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/e7394206d845fd593d325440507fb940bef8cb62",
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62",
                 "shasum": ""
             },
             "require": {
-                "composer-plugin-api": "^1.0.0",
+                "composer-plugin-api": "^1.0.0 || ^2.0.0",
                 "php": ">=5.4"
             },
             "require-dev": {
-                "composer/composer": "^1.7",
+                "composer/composer": "^1.10.6 || ^2.0@rc",
                 "php-coveralls/php-coveralls": "^1.0",
                 "phpunit/phpunit": "^4.8.36|^6",
-                "squizlabs/php_codesniffer": "^2.8"
+                "squizlabs/php_codesniffer": "^3.5"
             },
             "bin": [
                 "scripts/dependency-licenses"
@@ -541,7 +614,7 @@
             "extra": {
                 "class": "ComposerTestScenarios\\Plugin",
                 "branch-alias": {
-                    "dev-master": "3.x-dev"
+                    "dev-main": "3.x-dev"
                 }
             },
             "autoload": {
@@ -560,7 +633,7 @@
                 }
             ],
             "description": "Useful scripts for testing multiple sets of Composer dependencies.",
-            "time": "2018-11-27T05:58:39+00:00"
+            "time": "2020-09-28T20:54:35+00:00"
         },
         {
             "name": "phpdocumentor/reflection-docblock",
@@ -613,38 +686,38 @@
         },
         {
             "name": "phpspec/prophecy",
-            "version": "1.8.0",
+            "version": "v1.10.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06"
+                "reference": "451c3cd1418cf640de218914901e51b064abb093"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093",
                 "shasum": ""
             },
             "require": {
                 "doctrine/instantiator": "^1.0.2",
                 "php": "^5.3|^7.0",
-                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
-                "sebastian/comparator": "^1.1|^2.0|^3.0",
-                "sebastian/recursion-context": "^1.0|^2.0|^3.0"
+                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+                "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+                "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
             },
             "require-dev": {
-                "phpspec/phpspec": "^2.5|^3.2",
+                "phpspec/phpspec": "^2.5 || ^3.2",
                 "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.8.x-dev"
+                    "dev-master": "1.10.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Prophecy\\": "src/"
+                "psr-4": {
+                    "Prophecy\\": "src/Prophecy"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -672,7 +745,7 @@
                 "spy",
                 "stub"
             ],
-            "time": "2018-08-05T17:53:17+00:00"
+            "time": "2020-03-05T15:02:03+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",
@@ -920,6 +993,7 @@
             "keywords": [
                 "tokenizer"
             ],
+            "abandoned": true,
             "time": "2017-12-04T08:55:13+00:00"
         },
         {
@@ -1048,6 +1122,7 @@
                 "mock",
                 "xunit"
             ],
+            "abandoned": true,
             "time": "2015-10-02T06:51:40+00:00"
         },
         {
@@ -1502,16 +1577,16 @@
         },
         {
             "name": "symfony/polyfill-ctype",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19"
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454",
                 "shasum": ""
             },
             "require": {
@@ -1523,7 +1598,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -1539,13 +1618,13 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                },
                 {
                     "name": "Gert de Pagter",
                     "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony polyfill for ctype functions",
@@ -1556,11 +1635,25 @@
                 "polyfill",
                 "portable"
             ],
-            "time": "2018-08-06T14:22:27+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
             "name": "symfony/yaml",
-            "version": "v2.8.49",
+            "version": "v2.8.52",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/yaml.git",
@@ -1620,5 +1713,6 @@
     "platform-dev": [],
     "platform-overrides": {
         "php": "5.4.8"
-    }
+    },
+    "plugin-api-version": "1.1.0"
 }
diff --git a/vendor/consolidation/annotated-command/.scenarios.lock/symfony2/composer.json b/vendor/consolidation/annotated-command/.scenarios.lock/symfony2/composer.json
index 17e581d915..88075ce814 100644
--- a/vendor/consolidation/annotated-command/.scenarios.lock/symfony2/composer.json
+++ b/vendor/consolidation/annotated-command/.scenarios.lock/symfony2/composer.json
@@ -21,10 +21,10 @@
     "require": {
         "symfony/console": "^2.8",
         "php": ">=5.4.5",
-        "consolidation/output-formatters": "^3.4",
+        "consolidation/output-formatters": "^3.5.1",
         "psr/log": "^1",
         "symfony/event-dispatcher": "^2.5|^3|^4",
-        "symfony/finder": "^2.5|^3|^4"
+        "symfony/finder": "^2.5|^3|^4|^5"
     },
     "require-dev": {
         "phpunit/phpunit": "^4.8.36",
diff --git a/vendor/consolidation/annotated-command/.scenarios.lock/symfony4/composer.json b/vendor/consolidation/annotated-command/.scenarios.lock/symfony4/composer.json
index 80f0baaf38..16c40493dd 100644
--- a/vendor/consolidation/annotated-command/.scenarios.lock/symfony4/composer.json
+++ b/vendor/consolidation/annotated-command/.scenarios.lock/symfony4/composer.json
@@ -21,10 +21,10 @@
     "require": {
         "symfony/console": "^4.0",
         "php": ">=5.4.5",
-        "consolidation/output-formatters": "^3.4",
+        "consolidation/output-formatters": "^3.5.1",
         "psr/log": "^1",
         "symfony/event-dispatcher": "^2.5|^3|^4",
-        "symfony/finder": "^2.5|^3|^4"
+        "symfony/finder": "^2.5|^3|^4|^5"
     },
     "require-dev": {
         "phpunit/phpunit": "^6",
diff --git a/vendor/consolidation/annotated-command/.scenarios.lock/symfony4/composer.lock b/vendor/consolidation/annotated-command/.scenarios.lock/symfony4/composer.lock
index 605f4d0d0f..f60852876d 100644
--- a/vendor/consolidation/annotated-command/.scenarios.lock/symfony4/composer.lock
+++ b/vendor/consolidation/annotated-command/.scenarios.lock/symfony4/composer.lock
@@ -4,34 +4,33 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "c6c8cae7d200f377fc58fdc4d46be678",
+    "content-hash": "7e462e9eec4461a4eb39e90d105ea42c",
     "packages": [
         {
             "name": "consolidation/output-formatters",
-            "version": "3.4.0",
+            "version": "3.5.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/output-formatters.git",
-                "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19"
+                "reference": "0d38f13051ef05c223a2bb8e962d668e24785196"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/a942680232094c4a5b21c0b7e54c20cce623ae19",
-                "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19",
+                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/0d38f13051ef05c223a2bb8e962d668e24785196",
+                "reference": "0d38f13051ef05c223a2bb8e962d668e24785196",
                 "shasum": ""
             },
             "require": {
                 "dflydev/dot-access-data": "^1.1.0",
                 "php": ">=5.4.0",
                 "symfony/console": "^2.8|^3|^4",
-                "symfony/finder": "^2.5|^3|^4"
+                "symfony/finder": "^2.5|^3|^4|^5"
             },
             "require-dev": {
-                "g1a/composer-test-scenarios": "^2",
+                "g1a/composer-test-scenarios": "^3",
+                "php-coveralls/php-coveralls": "^1",
                 "phpunit/phpunit": "^5.7.27",
-                "satooshi/php-coveralls": "^2",
                 "squizlabs/php_codesniffer": "^2.7",
-                "symfony/console": "3.2.3",
                 "symfony/var-dumper": "^2.8|^3|^4",
                 "victorjonsson/markdowndocs": "^1.3"
             },
@@ -40,6 +39,62 @@
             },
             "type": "library",
             "extra": {
+                "scenarios": {
+                    "finder5": {
+                        "require": {
+                            "symfony/finder": "^5"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.2.5"
+                            }
+                        }
+                    },
+                    "symfony4": {
+                        "require": {
+                            "symfony/console": "^4.0"
+                        },
+                        "require-dev": {
+                            "phpunit/phpunit": "^6"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.1.3"
+                            }
+                        }
+                    },
+                    "symfony3": {
+                        "require": {
+                            "symfony/console": "^3.4",
+                            "symfony/finder": "^3.4",
+                            "symfony/var-dumper": "^3.4"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "5.6.32"
+                            }
+                        }
+                    },
+                    "symfony2": {
+                        "require": {
+                            "symfony/console": "^2.8"
+                        },
+                        "require-dev": {
+                            "phpunit/phpunit": "^4.8.36"
+                        },
+                        "remove": [
+                            "php-coveralls/php-coveralls"
+                        ],
+                        "config": {
+                            "platform": {
+                                "php": "5.4.8"
+                            }
+                        },
+                        "scenario-options": {
+                            "create-lockfile": "false"
+                        }
+                    }
+                },
                 "branch-alias": {
                     "dev-master": "3.x-dev"
                 }
@@ -60,7 +115,7 @@
                 }
             ],
             "description": "Format text by applying transformations provided by plug-in formatters.",
-            "time": "2018-10-19T22:35:38+00:00"
+            "time": "2020-10-11T04:15:32+00:00"
         },
         {
             "name": "dflydev/dot-access-data",
@@ -121,18 +176,67 @@
             ],
             "time": "2017-01-20T21:14:22+00:00"
         },
+        {
+            "name": "psr/container",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/container.git",
+                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Container\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common Container Interface (PHP FIG PSR-11)",
+            "homepage": "https://github.com/php-fig/container",
+            "keywords": [
+                "PSR-11",
+                "container",
+                "container-interface",
+                "container-interop",
+                "psr"
+            ],
+            "time": "2017-02-14T16:28:37+00:00"
+        },
         {
             "name": "psr/log",
-            "version": "1.1.0",
+            "version": "1.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-fig/log.git",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
                 "shasum": ""
             },
             "require": {
@@ -141,7 +245,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.1.x-dev"
                 }
             },
             "autoload": {
@@ -166,41 +270,49 @@
                 "psr",
                 "psr-3"
             ],
-            "time": "2018-11-20T15:27:04+00:00"
+            "time": "2020-03-23T09:12:05+00:00"
         },
         {
             "name": "symfony/console",
-            "version": "v4.2.2",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "b0a03c1bb0fcbe288629956cf2f1dd3f1dc97522"
+                "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/b0a03c1bb0fcbe288629956cf2f1dd3f1dc97522",
-                "reference": "b0a03c1bb0fcbe288629956cf2f1dd3f1dc97522",
+                "url": "https://api.github.com/repos/symfony/console/zipball/90933b39c7b312fc3ceaa1ddeac7eb48cb953124",
+                "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
-                "symfony/contracts": "^1.0",
-                "symfony/polyfill-mbstring": "~1.0"
+                "php": ">=7.1.3",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/polyfill-php73": "^1.8",
+                "symfony/polyfill-php80": "^1.15",
+                "symfony/service-contracts": "^1.1|^2"
             },
             "conflict": {
                 "symfony/dependency-injection": "<3.4",
+                "symfony/event-dispatcher": "<4.3|>=5",
+                "symfony/lock": "<4.4",
                 "symfony/process": "<3.3"
             },
+            "provide": {
+                "psr/log-implementation": "1.0"
+            },
             "require-dev": {
                 "psr/log": "~1.0",
-                "symfony/config": "~3.4|~4.0",
-                "symfony/dependency-injection": "~3.4|~4.0",
-                "symfony/event-dispatcher": "~3.4|~4.0",
-                "symfony/lock": "~3.4|~4.0",
-                "symfony/process": "~3.4|~4.0"
+                "symfony/config": "^3.4|^4.0|^5.0",
+                "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+                "symfony/event-dispatcher": "^4.3",
+                "symfony/lock": "^4.4|^5.0",
+                "symfony/process": "^3.4|^4.0|^5.0",
+                "symfony/var-dumper": "^4.3|^5.0"
             },
             "suggest": {
-                "psr/log-implementation": "For using the console logger",
+                "psr/log": "For using the console logger",
                 "symfony/event-dispatcher": "",
                 "symfony/lock": "",
                 "symfony/process": ""
@@ -208,7 +320,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.2-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -235,48 +347,73 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-04T15:13:53+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-15T07:58:55+00:00"
         },
         {
-            "name": "symfony/contracts",
-            "version": "v1.0.2",
+            "name": "symfony/event-dispatcher",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/contracts.git",
-                "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf"
+                "url": "https://github.com/symfony/event-dispatcher.git",
+                "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/contracts/zipball/1aa7ab2429c3d594dd70689604b5cf7421254cdf",
-                "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e17bb5e0663dc725f7cdcafc932132735b4725cd",
+                "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3"
+                "php": ">=7.1.3",
+                "symfony/event-dispatcher-contracts": "^1.1"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<3.4"
+            },
+            "provide": {
+                "psr/event-dispatcher-implementation": "1.0",
+                "symfony/event-dispatcher-implementation": "1.1"
             },
             "require-dev": {
-                "psr/cache": "^1.0",
-                "psr/container": "^1.0"
+                "psr/log": "~1.0",
+                "symfony/config": "^3.4|^4.0|^5.0",
+                "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+                "symfony/error-handler": "~3.4|~4.4",
+                "symfony/expression-language": "^3.4|^4.0|^5.0",
+                "symfony/http-foundation": "^3.4|^4.0|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/stopwatch": "^3.4|^4.0|^5.0"
             },
             "suggest": {
-                "psr/cache": "When using the Cache contracts",
-                "psr/container": "When using the Service contracts",
-                "symfony/cache-contracts-implementation": "",
-                "symfony/service-contracts-implementation": "",
-                "symfony/translation-contracts-implementation": ""
+                "symfony/dependency-injection": "",
+                "symfony/http-kernel": ""
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Contracts\\": ""
+                    "Symfony\\Component\\EventDispatcher\\": ""
                 },
                 "exclude-from-classmap": [
-                    "**/Tests/"
+                    "/Tests/"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -285,71 +422,67 @@
             ],
             "authors": [
                 {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
                 },
                 {
                     "name": "Symfony Community",
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "A set of abstractions extracted out of the Symfony components",
+            "description": "Symfony EventDispatcher Component",
             "homepage": "https://symfony.com",
-            "keywords": [
-                "abstractions",
-                "contracts",
-                "decoupling",
-                "interfaces",
-                "interoperability",
-                "standards"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
             ],
-            "time": "2018-12-05T08:06:11+00:00"
+            "time": "2020-09-18T14:07:46+00:00"
         },
         {
-            "name": "symfony/event-dispatcher",
-            "version": "v4.2.2",
+            "name": "symfony/event-dispatcher-contracts",
+            "version": "v1.1.9",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "887de6d34c86cf0cb6cbf910afb170cdb743cb5e"
+                "url": "https://github.com/symfony/event-dispatcher-contracts.git",
+                "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/887de6d34c86cf0cb6cbf910afb170cdb743cb5e",
-                "reference": "887de6d34c86cf0cb6cbf910afb170cdb743cb5e",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7",
+                "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
-                "symfony/contracts": "^1.0"
-            },
-            "conflict": {
-                "symfony/dependency-injection": "<3.4"
-            },
-            "require-dev": {
-                "psr/log": "~1.0",
-                "symfony/config": "~3.4|~4.0",
-                "symfony/dependency-injection": "~3.4|~4.0",
-                "symfony/expression-language": "~3.4|~4.0",
-                "symfony/stopwatch": "~3.4|~4.0"
+                "php": ">=7.1.3"
             },
             "suggest": {
-                "symfony/dependency-injection": "",
-                "symfony/http-kernel": ""
+                "psr/event-dispatcher": "",
+                "symfony/event-dispatcher-implementation": ""
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.2-dev"
+                    "dev-master": "1.1-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\EventDispatcher\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
+                    "Symfony\\Contracts\\EventDispatcher\\": ""
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -357,39 +490,61 @@
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
                 },
                 {
                     "name": "Symfony Community",
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony EventDispatcher Component",
+            "description": "Generic abstractions related to dispatching event",
             "homepage": "https://symfony.com",
-            "time": "2019-01-05T16:37:49+00:00"
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-06T13:19:58+00:00"
         },
         {
             "name": "symfony/finder",
-            "version": "v4.2.2",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "9094d69e8c6ee3fe186a0ec5a4f1401e506071ce"
+                "reference": "60d08560f9aa72997c44077c40d47aa28a963230"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/9094d69e8c6ee3fe186a0ec5a4f1401e506071ce",
-                "reference": "9094d69e8c6ee3fe186a0ec5a4f1401e506071ce",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/60d08560f9aa72997c44077c40d47aa28a963230",
+                "reference": "60d08560f9aa72997c44077c40d47aa28a963230",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3"
+                "php": ">=7.1.3"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.2-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -416,20 +571,34 @@
             ],
             "description": "Symfony Finder Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-03T09:07:35+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-10-02T07:34:48+00:00"
         },
         {
             "name": "symfony/polyfill-mbstring",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494"
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a",
                 "shasum": ""
             },
             "require": {
@@ -441,7 +610,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -475,33 +648,281 @@
                 "portable",
                 "shim"
             ],
-            "time": "2018-09-21T13:07:52+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php73",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php73.git",
+                "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
+                "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php73\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php80",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php80.git",
+                "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/d87d5766cbf48d72388a9f6b85f280c8ad51f981",
+                "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.0.8"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php80\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Ion Bazan",
+                    "email": "ion.bazan@gmail.com"
+                },
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/service-contracts",
+            "version": "v1.1.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/service-contracts.git",
+                "reference": "b776d18b303a39f56c63747bcb977ad4b27aca26"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/b776d18b303a39f56c63747bcb977ad4b27aca26",
+                "reference": "b776d18b303a39f56c63747bcb977ad4b27aca26",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "psr/container": "^1.0"
+            },
+            "suggest": {
+                "symfony/service-implementation": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.1-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\Service\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to writing services",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-06T13:19:58+00:00"
         }
     ],
     "packages-dev": [
         {
             "name": "doctrine/instantiator",
-            "version": "1.1.0",
+            "version": "1.3.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/instantiator.git",
-                "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda"
+                "reference": "f350df0268e904597e3bd9c4685c53e0e333feea"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda",
-                "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda",
+                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea",
+                "reference": "f350df0268e904597e3bd9c4685c53e0e333feea",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1"
+                "php": "^7.1 || ^8.0"
             },
             "require-dev": {
-                "athletic/athletic": "~0.1.8",
+                "doctrine/coding-standard": "^6.0",
                 "ext-pdo": "*",
                 "ext-phar": "*",
-                "phpunit/phpunit": "^6.2.3",
-                "squizlabs/php_codesniffer": "^3.0.2"
+                "phpbench/phpbench": "^0.13",
+                "phpstan/phpstan-phpunit": "^0.11",
+                "phpstan/phpstan-shim": "^0.11",
+                "phpunit/phpunit": "^7.0"
             },
             "type": "library",
             "extra": {
@@ -526,36 +947,50 @@
                 }
             ],
             "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
-            "homepage": "https://github.com/doctrine/instantiator",
+            "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
             "keywords": [
                 "constructor",
                 "instantiate"
             ],
-            "time": "2017-07-22T11:58:36+00:00"
+            "funding": [
+                {
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://www.patreon.com/phpdoctrine",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-05-29T17:27:14+00:00"
         },
         {
             "name": "g1a/composer-test-scenarios",
-            "version": "3.0.1",
+            "version": "3.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/g1a/composer-test-scenarios.git",
-                "reference": "224531e20d13a07942a989a70759f726cd2df9a1"
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/224531e20d13a07942a989a70759f726cd2df9a1",
-                "reference": "224531e20d13a07942a989a70759f726cd2df9a1",
+                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/e7394206d845fd593d325440507fb940bef8cb62",
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62",
                 "shasum": ""
             },
             "require": {
-                "composer-plugin-api": "^1.0.0",
+                "composer-plugin-api": "^1.0.0 || ^2.0.0",
                 "php": ">=5.4"
             },
             "require-dev": {
-                "composer/composer": "^1.7",
+                "composer/composer": "^1.10.6 || ^2.0@rc",
                 "php-coveralls/php-coveralls": "^1.0",
                 "phpunit/phpunit": "^4.8.36|^6",
-                "squizlabs/php_codesniffer": "^2.8"
+                "squizlabs/php_codesniffer": "^3.5"
             },
             "bin": [
                 "scripts/dependency-licenses"
@@ -564,7 +999,7 @@
             "extra": {
                 "class": "ComposerTestScenarios\\Plugin",
                 "branch-alias": {
-                    "dev-master": "3.x-dev"
+                    "dev-main": "3.x-dev"
                 }
             },
             "autoload": {
@@ -583,7 +1018,7 @@
                 }
             ],
             "description": "Useful scripts for testing multiple sets of Composer dependencies.",
-            "time": "2018-11-27T05:58:39+00:00"
+            "time": "2020-09-28T20:54:35+00:00"
         },
         {
             "name": "guzzle/guzzle",
@@ -680,20 +1115,20 @@
         },
         {
             "name": "myclabs/deep-copy",
-            "version": "1.8.1",
+            "version": "1.10.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/myclabs/DeepCopy.git",
-                "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8"
+                "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8",
-                "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8",
+                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
+                "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1"
+                "php": "^7.1 || ^8.0"
             },
             "replace": {
                 "myclabs/deep-copy": "self.version"
@@ -724,7 +1159,13 @@
                 "object",
                 "object graph"
             ],
-            "time": "2018-06-11T23:09:50+00:00"
+            "funding": [
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-06-29T13:22:24+00:00"
         },
         {
             "name": "phar-io/manifest",
@@ -891,35 +1332,30 @@
         },
         {
             "name": "phpdocumentor/reflection-common",
-            "version": "1.0.1",
+            "version": "2.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
-                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6"
+                "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
-                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b",
+                "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.5"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.6"
+                "php": ">=7.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "2.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src"
-                    ]
+                    "phpDocumentor\\Reflection\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -941,31 +1377,32 @@
                 "reflection",
                 "static analysis"
             ],
-            "time": "2017-09-11T18:02:19+00:00"
+            "time": "2020-04-27T09:25:28+00:00"
         },
         {
             "name": "phpdocumentor/reflection-docblock",
-            "version": "4.3.0",
+            "version": "4.3.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "94fd0001232e47129dd3504189fa1c7225010d08"
+                "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08",
-                "reference": "94fd0001232e47129dd3504189fa1c7225010d08",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/da3fd972d6bafd628114f7e7e036f45944b62e9c",
+                "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c",
                 "shasum": ""
             },
             "require": {
                 "php": "^7.0",
-                "phpdocumentor/reflection-common": "^1.0.0",
-                "phpdocumentor/type-resolver": "^0.4.0",
+                "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0",
+                "phpdocumentor/type-resolver": "~0.4 || ^1.0.0",
                 "webmozart/assert": "^1.0"
             },
             "require-dev": {
-                "doctrine/instantiator": "~1.0.5",
+                "doctrine/instantiator": "^1.0.5",
                 "mockery/mockery": "^1.0",
+                "phpdocumentor/type-resolver": "0.4.*",
                 "phpunit/phpunit": "^6.4"
             },
             "type": "library",
@@ -992,41 +1429,40 @@
                 }
             ],
             "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
-            "time": "2017-11-30T07:14:17+00:00"
+            "time": "2019-12-28T18:55:12+00:00"
         },
         {
             "name": "phpdocumentor/type-resolver",
-            "version": "0.4.0",
+            "version": "1.0.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/TypeResolver.git",
-                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7"
+                "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7",
-                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7",
+                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
+                "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5 || ^7.0",
-                "phpdocumentor/reflection-common": "^1.0"
+                "php": "^7.1",
+                "phpdocumentor/reflection-common": "^2.0"
             },
             "require-dev": {
-                "mockery/mockery": "^0.9.4",
-                "phpunit/phpunit": "^5.2||^4.8.24"
+                "ext-tokenizer": "^7.1",
+                "mockery/mockery": "~1",
+                "phpunit/phpunit": "^7.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src/"
-                    ]
+                    "phpDocumentor\\Reflection\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1039,42 +1475,43 @@
                     "email": "me@mikevanriel.com"
                 }
             ],
-            "time": "2017-07-14T14:27:02+00:00"
+            "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
+            "time": "2019-08-22T18:11:29+00:00"
         },
         {
             "name": "phpspec/prophecy",
-            "version": "1.8.0",
+            "version": "v1.10.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06"
+                "reference": "451c3cd1418cf640de218914901e51b064abb093"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093",
                 "shasum": ""
             },
             "require": {
                 "doctrine/instantiator": "^1.0.2",
                 "php": "^5.3|^7.0",
-                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
-                "sebastian/comparator": "^1.1|^2.0|^3.0",
-                "sebastian/recursion-context": "^1.0|^2.0|^3.0"
+                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+                "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+                "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
             },
             "require-dev": {
-                "phpspec/phpspec": "^2.5|^3.2",
+                "phpspec/phpspec": "^2.5 || ^3.2",
                 "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.8.x-dev"
+                    "dev-master": "1.10.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Prophecy\\": "src/"
+                "psr-4": {
+                    "Prophecy\\": "src/Prophecy"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1102,7 +1539,7 @@
                 "spy",
                 "stub"
             ],
-            "time": "2018-08-05T17:53:17+00:00"
+            "time": "2020-03-05T15:02:03+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",
@@ -1351,20 +1788,21 @@
             "keywords": [
                 "tokenizer"
             ],
+            "abandoned": true,
             "time": "2017-11-27T05:48:46+00:00"
         },
         {
             "name": "phpunit/phpunit",
-            "version": "6.5.13",
+            "version": "6.5.14",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "0973426fb012359b2f18d3bd1e90ef1172839693"
+                "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0973426fb012359b2f18d3bd1e90ef1172839693",
-                "reference": "0973426fb012359b2f18d3bd1e90ef1172839693",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bac23fe7ff13dbdb461481f706f0e9fe746334b7",
+                "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7",
                 "shasum": ""
             },
             "require": {
@@ -1435,7 +1873,7 @@
                 "testing",
                 "xunit"
             ],
-            "time": "2018-09-08T15:10:43+00:00"
+            "time": "2019-02-01T05:22:47+00:00"
         },
         {
             "name": "phpunit/phpunit-mock-objects",
@@ -1494,6 +1932,7 @@
                 "mock",
                 "xunit"
             ],
+            "abandoned": true,
             "time": "2018-08-09T05:50:03+00:00"
         },
         {
@@ -1709,16 +2148,16 @@
         },
         {
             "name": "sebastian/exporter",
-            "version": "3.1.0",
+            "version": "3.1.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/exporter.git",
-                "reference": "234199f4528de6d12aaa58b612e98f7d36adb937"
+                "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937",
-                "reference": "234199f4528de6d12aaa58b612e98f7d36adb937",
+                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e",
+                "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e",
                 "shasum": ""
             },
             "require": {
@@ -1745,6 +2184,10 @@
                 "BSD-3-Clause"
             ],
             "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
                 {
                     "name": "Jeff Welch",
                     "email": "whatthejeff@gmail.com"
@@ -1753,17 +2196,13 @@
                     "name": "Volker Dusch",
                     "email": "github@wallbash.com"
                 },
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@2bepublished.at"
-                },
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                },
                 {
                     "name": "Adam Harvey",
                     "email": "aharvey@php.net"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@gmail.com"
                 }
             ],
             "description": "Provides the functionality to export PHP variables for visualization",
@@ -1772,7 +2211,7 @@
                 "export",
                 "exporter"
             ],
-            "time": "2017-04-03T13:19:02+00:00"
+            "time": "2019-09-14T09:02:43+00:00"
         },
         {
             "name": "sebastian/global-state",
@@ -2135,31 +2574,32 @@
         },
         {
             "name": "symfony/config",
-            "version": "v4.2.2",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/config.git",
-                "reference": "a7a7d0a0244cfc82f040729ccf769e6cf55a78fb"
+                "reference": "7c5a1002178a612787c291a4f515f87b19176b61"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/config/zipball/a7a7d0a0244cfc82f040729ccf769e6cf55a78fb",
-                "reference": "a7a7d0a0244cfc82f040729ccf769e6cf55a78fb",
+                "url": "https://api.github.com/repos/symfony/config/zipball/7c5a1002178a612787c291a4f515f87b19176b61",
+                "reference": "7c5a1002178a612787c291a4f515f87b19176b61",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
-                "symfony/filesystem": "~3.4|~4.0",
+                "php": ">=7.1.3",
+                "symfony/filesystem": "^3.4|^4.0|^5.0",
                 "symfony/polyfill-ctype": "~1.8"
             },
             "conflict": {
                 "symfony/finder": "<3.4"
             },
             "require-dev": {
-                "symfony/dependency-injection": "~3.4|~4.0",
-                "symfony/event-dispatcher": "~3.4|~4.0",
-                "symfony/finder": "~3.4|~4.0",
-                "symfony/yaml": "~3.4|~4.0"
+                "symfony/event-dispatcher": "^3.4|^4.0|^5.0",
+                "symfony/finder": "^3.4|^4.0|^5.0",
+                "symfony/messenger": "^4.1|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/yaml": "^3.4|^4.0|^5.0"
             },
             "suggest": {
                 "symfony/yaml": "To use the yaml reference dumper"
@@ -2167,7 +2607,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.2-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -2194,30 +2634,44 @@
             ],
             "description": "Symfony Config Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-03T09:07:35+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-10-02T07:34:48+00:00"
         },
         {
             "name": "symfony/filesystem",
-            "version": "v4.2.2",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/filesystem.git",
-                "reference": "c2ffd9a93f2d6c5be2f68a0aa7953cc229f871f8"
+                "reference": "ebc51494739d3b081ea543ed7c462fa73a4f74db"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/c2ffd9a93f2d6c5be2f68a0aa7953cc229f871f8",
-                "reference": "c2ffd9a93f2d6c5be2f68a0aa7953cc229f871f8",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/ebc51494739d3b081ea543ed7c462fa73a4f74db",
+                "reference": "ebc51494739d3b081ea543ed7c462fa73a4f74db",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
+                "php": ">=7.1.3",
                 "symfony/polyfill-ctype": "~1.8"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.2-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -2244,20 +2698,34 @@
             ],
             "description": "Symfony Filesystem Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-03T09:07:35+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-27T13:54:16+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19"
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454",
                 "shasum": ""
             },
             "require": {
@@ -2269,7 +2737,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -2285,13 +2757,13 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                },
                 {
                     "name": "Gert de Pagter",
                     "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony polyfill for ctype functions",
@@ -2302,30 +2774,44 @@
                 "polyfill",
                 "portable"
             ],
-            "time": "2018-08-06T14:22:27+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
             "name": "symfony/stopwatch",
-            "version": "v4.2.2",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/stopwatch.git",
-                "reference": "af62b35760fc92c8dbdce659b4eebdfe0e6a0472"
+                "reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/af62b35760fc92c8dbdce659b4eebdfe0e6a0472",
-                "reference": "af62b35760fc92c8dbdce659b4eebdfe0e6a0472",
+                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/6f89e19772cf61b3c65bab329fe0e318259fbd91",
+                "reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
-                "symfony/contracts": "^1.0"
+                "php": ">=7.1.3",
+                "symfony/service-contracts": "^1.0|^2"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.2-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -2352,31 +2838,45 @@
             ],
             "description": "Symfony Stopwatch Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-03T09:07:35+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:08:58+00:00"
         },
         {
             "name": "symfony/yaml",
-            "version": "v4.2.2",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/yaml.git",
-                "reference": "d0aa6c0ea484087927b49fd513383a7d36190ca6"
+                "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/d0aa6c0ea484087927b49fd513383a7d36190ca6",
-                "reference": "d0aa6c0ea484087927b49fd513383a7d36190ca6",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/c7885964b1eceb70b0981556d0a9b01d2d97c8d1",
+                "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
+                "php": ">=7.1.3",
                 "symfony/polyfill-ctype": "~1.8"
             },
             "conflict": {
                 "symfony/console": "<3.4"
             },
             "require-dev": {
-                "symfony/console": "~3.4|~4.0"
+                "symfony/console": "^3.4|^4.0|^5.0"
             },
             "suggest": {
                 "symfony/console": "For validating YAML files using the lint command"
@@ -2384,7 +2884,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.2-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -2411,20 +2911,34 @@
             ],
             "description": "Symfony Yaml Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-03T09:07:35+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-27T03:36:23+00:00"
         },
         {
             "name": "theseer/tokenizer",
-            "version": "1.1.0",
+            "version": "1.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/theseer/tokenizer.git",
-                "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b"
+                "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b",
-                "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b",
+                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
+                "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
                 "shasum": ""
             },
             "require": {
@@ -2451,36 +2965,34 @@
                 }
             ],
             "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
-            "time": "2017-04-07T12:08:54+00:00"
+            "time": "2019-06-13T22:48:21+00:00"
         },
         {
             "name": "webmozart/assert",
-            "version": "1.4.0",
+            "version": "1.9.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/webmozart/assert.git",
-                "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9"
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9",
-                "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9",
+                "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.3 || ^7.0",
+                "php": "^5.3.3 || ^7.0 || ^8.0",
                 "symfony/polyfill-ctype": "^1.8"
             },
+            "conflict": {
+                "phpstan/phpstan": "<0.12.20",
+                "vimeo/psalm": "<3.9.1"
+            },
             "require-dev": {
-                "phpunit/phpunit": "^4.6",
-                "sebastian/version": "^1.0.1"
+                "phpunit/phpunit": "^4.8.36 || ^7.5.13"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
                     "Webmozart\\Assert\\": "src/"
@@ -2502,7 +3014,7 @@
                 "check",
                 "validate"
             ],
-            "time": "2018-12-25T11:19:39+00:00"
+            "time": "2020-07-08T17:02:28+00:00"
         }
     ],
     "aliases": [],
@@ -2516,5 +3028,6 @@
     "platform-dev": [],
     "platform-overrides": {
         "php": "7.1.3"
-    }
+    },
+    "plugin-api-version": "1.1.0"
 }
diff --git a/vendor/consolidation/annotated-command/CHANGELOG.md b/vendor/consolidation/annotated-command/CHANGELOG.md
index d7dbfdd59e..f342164401 100644
--- a/vendor/consolidation/annotated-command/CHANGELOG.md
+++ b/vendor/consolidation/annotated-command/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Change Log
 
+### 2.12.1 - 10 Oct 2020
+
+- Allow symfony/finder 5 (#213)
+
 ### 2.12.0 - 8 Mar 2019
 
 - Allow annotated args and options to specify their default values in their descriptions. (#186)
diff --git a/vendor/consolidation/annotated-command/LICENSE b/vendor/consolidation/annotated-command/LICENSE
index 7c4d73fd8f..8bea4b7726 100644
--- a/vendor/consolidation/annotated-command/LICENSE
+++ b/vendor/consolidation/annotated-command/LICENSE
@@ -1,6 +1,6 @@
 The MIT License (MIT)
 
-Copyright (c) 2016-2019 Consolidation Org Developers
+Copyright (c) 2016-2020 Consolidation Org Developers
 
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
@@ -12,11 +12,11 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
 DEPENDENCY LICENSES:
 
 Name                             Version  License
-consolidation/output-formatters  3.4.0    MIT
+consolidation/output-formatters  3.5.1    MIT
 dflydev/dot-access-data          v1.1.0   MIT
-psr/log                          1.1.0    MIT
-symfony/console                  v2.8.49  MIT
-symfony/debug                    v2.8.49  MIT
-symfony/event-dispatcher         v2.8.49  MIT
-symfony/finder                   v2.8.49  MIT
-symfony/polyfill-mbstring        v1.10.0  MIT
\ No newline at end of file
+psr/log                          1.1.3    MIT
+symfony/console                  v2.8.52  MIT
+symfony/debug                    v2.8.52  MIT
+symfony/event-dispatcher         v2.8.52  MIT
+symfony/finder                   v2.8.52  MIT
+symfony/polyfill-mbstring        v1.18.1  MIT
\ No newline at end of file
diff --git a/vendor/consolidation/annotated-command/README.md b/vendor/consolidation/annotated-command/README.md
index efcba14b44..dc1e378f68 100644
--- a/vendor/consolidation/annotated-command/README.md
+++ b/vendor/consolidation/annotated-command/README.md
@@ -131,7 +131,7 @@ There are ten types of hooks in the command processing request flow:
 - [Command](#command-hook)
    - @pre-command
    - @command
-   - @command-init
+   - @post-command
 - [Process](#process-hook)
    - @pre-process
    - @process
diff --git a/vendor/consolidation/annotated-command/composer.json b/vendor/consolidation/annotated-command/composer.json
index 27e7f7e6cf..3181527ed3 100644
--- a/vendor/consolidation/annotated-command/composer.json
+++ b/vendor/consolidation/annotated-command/composer.json
@@ -20,11 +20,11 @@
     },
     "require": {
         "php": ">=5.4.5",
-        "consolidation/output-formatters": "^3.4",
+        "consolidation/output-formatters": "^3.5.1",
         "psr/log": "^1",
         "symfony/console": "^2.8|^3|^4",
         "symfony/event-dispatcher": "^2.5|^3|^4",
-        "symfony/finder": "^2.5|^3|^4"
+        "symfony/finder": "^2.5|^3|^4|^5"
     },
     "require-dev": {
         "phpunit/phpunit": "^6",
@@ -55,6 +55,16 @@
     },
     "extra": {
         "scenarios": {
+            "finder5": {
+                "require": {
+                    "symfony/finder": "^5"
+                },
+                "config": {
+                    "platform": {
+                        "php": "7.2.5"
+                    }
+                }                
+            },
             "symfony4": {
                 "require": {
                     "symfony/console": "^4.0"
diff --git a/vendor/consolidation/annotated-command/composer.lock b/vendor/consolidation/annotated-command/composer.lock
index 6cac1772cd..2f4632ea7d 100644
--- a/vendor/consolidation/annotated-command/composer.lock
+++ b/vendor/consolidation/annotated-command/composer.lock
@@ -4,34 +4,33 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "24232be7f7d45a8b43acde7b26f7f144",
+    "content-hash": "254144594976df901ad0eaa5e3b04d3a",
     "packages": [
         {
             "name": "consolidation/output-formatters",
-            "version": "3.4.0",
+            "version": "3.5.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/output-formatters.git",
-                "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19"
+                "reference": "0d38f13051ef05c223a2bb8e962d668e24785196"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/a942680232094c4a5b21c0b7e54c20cce623ae19",
-                "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19",
+                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/0d38f13051ef05c223a2bb8e962d668e24785196",
+                "reference": "0d38f13051ef05c223a2bb8e962d668e24785196",
                 "shasum": ""
             },
             "require": {
                 "dflydev/dot-access-data": "^1.1.0",
                 "php": ">=5.4.0",
                 "symfony/console": "^2.8|^3|^4",
-                "symfony/finder": "^2.5|^3|^4"
+                "symfony/finder": "^2.5|^3|^4|^5"
             },
             "require-dev": {
-                "g1a/composer-test-scenarios": "^2",
+                "g1a/composer-test-scenarios": "^3",
+                "php-coveralls/php-coveralls": "^1",
                 "phpunit/phpunit": "^5.7.27",
-                "satooshi/php-coveralls": "^2",
                 "squizlabs/php_codesniffer": "^2.7",
-                "symfony/console": "3.2.3",
                 "symfony/var-dumper": "^2.8|^3|^4",
                 "victorjonsson/markdowndocs": "^1.3"
             },
@@ -40,6 +39,62 @@
             },
             "type": "library",
             "extra": {
+                "scenarios": {
+                    "finder5": {
+                        "require": {
+                            "symfony/finder": "^5"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.2.5"
+                            }
+                        }
+                    },
+                    "symfony4": {
+                        "require": {
+                            "symfony/console": "^4.0"
+                        },
+                        "require-dev": {
+                            "phpunit/phpunit": "^6"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.1.3"
+                            }
+                        }
+                    },
+                    "symfony3": {
+                        "require": {
+                            "symfony/console": "^3.4",
+                            "symfony/finder": "^3.4",
+                            "symfony/var-dumper": "^3.4"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "5.6.32"
+                            }
+                        }
+                    },
+                    "symfony2": {
+                        "require": {
+                            "symfony/console": "^2.8"
+                        },
+                        "require-dev": {
+                            "phpunit/phpunit": "^4.8.36"
+                        },
+                        "remove": [
+                            "php-coveralls/php-coveralls"
+                        ],
+                        "config": {
+                            "platform": {
+                                "php": "5.4.8"
+                            }
+                        },
+                        "scenario-options": {
+                            "create-lockfile": "false"
+                        }
+                    }
+                },
                 "branch-alias": {
                     "dev-master": "3.x-dev"
                 }
@@ -60,7 +115,7 @@
                 }
             ],
             "description": "Format text by applying transformations provided by plug-in formatters.",
-            "time": "2018-10-19T22:35:38+00:00"
+            "time": "2020-10-11T04:15:32+00:00"
         },
         {
             "name": "dflydev/dot-access-data",
@@ -123,16 +178,16 @@
         },
         {
             "name": "psr/log",
-            "version": "1.1.0",
+            "version": "1.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-fig/log.git",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
                 "shasum": ""
             },
             "require": {
@@ -141,7 +196,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.1.x-dev"
                 }
             },
             "autoload": {
@@ -166,20 +221,20 @@
                 "psr",
                 "psr-3"
             ],
-            "time": "2018-11-20T15:27:04+00:00"
+            "time": "2020-03-23T09:12:05+00:00"
         },
         {
             "name": "symfony/console",
-            "version": "v3.4.21",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "a700b874d3692bc8342199adfb6d3b99f62cc61a"
+                "reference": "b28996bc0a3b08914b2a8609163ec35b36b30685"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/a700b874d3692bc8342199adfb6d3b99f62cc61a",
-                "reference": "a700b874d3692bc8342199adfb6d3b99f62cc61a",
+                "url": "https://api.github.com/repos/symfony/console/zipball/b28996bc0a3b08914b2a8609163ec35b36b30685",
+                "reference": "b28996bc0a3b08914b2a8609163ec35b36b30685",
                 "shasum": ""
             },
             "require": {
@@ -191,6 +246,9 @@
                 "symfony/dependency-injection": "<3.4",
                 "symfony/process": "<3.3"
             },
+            "provide": {
+                "psr/log-implementation": "1.0"
+            },
             "require-dev": {
                 "psr/log": "~1.0",
                 "symfony/config": "~3.3|~4.0",
@@ -200,7 +258,7 @@
                 "symfony/process": "~3.3|~4.0"
             },
             "suggest": {
-                "psr/log-implementation": "For using the console logger",
+                "psr/log": "For using the console logger",
                 "symfony/event-dispatcher": "",
                 "symfony/lock": "",
                 "symfony/process": ""
@@ -235,20 +293,34 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-04T04:42:43+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-09T05:09:37+00:00"
         },
         {
             "name": "symfony/debug",
-            "version": "v3.4.21",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/debug.git",
-                "reference": "26d7f23b9bd0b93bee5583e4d6ca5cb1ab31b186"
+                "reference": "9109e4414e684d0b75276ae203883467476d25d0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/debug/zipball/26d7f23b9bd0b93bee5583e4d6ca5cb1ab31b186",
-                "reference": "26d7f23b9bd0b93bee5583e4d6ca5cb1ab31b186",
+                "url": "https://api.github.com/repos/symfony/debug/zipball/9109e4414e684d0b75276ae203883467476d25d0",
+                "reference": "9109e4414e684d0b75276ae203883467476d25d0",
                 "shasum": ""
             },
             "require": {
@@ -291,20 +363,34 @@
             ],
             "description": "Symfony Debug Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-01T13:45:19+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-08T22:19:14+00:00"
         },
         {
             "name": "symfony/event-dispatcher",
-            "version": "v3.4.21",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "d1cdd46c53c264a2bd42505bd0e8ce21423bd0e2"
+                "reference": "0bb9ea263b39fce3a12ac9f78ef576bdd80dacb8"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d1cdd46c53c264a2bd42505bd0e8ce21423bd0e2",
-                "reference": "d1cdd46c53c264a2bd42505bd0e8ce21423bd0e2",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/0bb9ea263b39fce3a12ac9f78ef576bdd80dacb8",
+                "reference": "0bb9ea263b39fce3a12ac9f78ef576bdd80dacb8",
                 "shasum": ""
             },
             "require": {
@@ -316,6 +402,7 @@
             "require-dev": {
                 "psr/log": "~1.0",
                 "symfony/config": "~2.8|~3.0|~4.0",
+                "symfony/debug": "~3.4|~4.4",
                 "symfony/dependency-injection": "~3.3|~4.0",
                 "symfony/expression-language": "~2.8|~3.0|~4.0",
                 "symfony/stopwatch": "~2.8|~3.0|~4.0"
@@ -354,20 +441,34 @@
             ],
             "description": "Symfony EventDispatcher Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-01T18:08:36+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-18T12:06:50+00:00"
         },
         {
             "name": "symfony/finder",
-            "version": "v3.4.21",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "3f2a2ab6315dd7682d4c16dcae1e7b95c8b8555e"
+                "reference": "52140652ed31cee3dabd0c481b5577201fa769b4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/3f2a2ab6315dd7682d4c16dcae1e7b95c8b8555e",
-                "reference": "3f2a2ab6315dd7682d4c16dcae1e7b95c8b8555e",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/52140652ed31cee3dabd0c481b5577201fa769b4",
+                "reference": "52140652ed31cee3dabd0c481b5577201fa769b4",
                 "shasum": ""
             },
             "require": {
@@ -403,20 +504,34 @@
             ],
             "description": "Symfony Finder Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-01T13:45:19+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:06:40+00:00"
         },
         {
             "name": "symfony/polyfill-mbstring",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494"
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a",
                 "shasum": ""
             },
             "require": {
@@ -428,7 +543,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -462,7 +581,21 @@
                 "portable",
                 "shim"
             ],
-            "time": "2018-09-21T13:07:52+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         }
     ],
     "packages-dev": [
@@ -522,27 +655,27 @@
         },
         {
             "name": "g1a/composer-test-scenarios",
-            "version": "3.0.1",
+            "version": "3.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/g1a/composer-test-scenarios.git",
-                "reference": "224531e20d13a07942a989a70759f726cd2df9a1"
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/224531e20d13a07942a989a70759f726cd2df9a1",
-                "reference": "224531e20d13a07942a989a70759f726cd2df9a1",
+                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/e7394206d845fd593d325440507fb940bef8cb62",
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62",
                 "shasum": ""
             },
             "require": {
-                "composer-plugin-api": "^1.0.0",
+                "composer-plugin-api": "^1.0.0 || ^2.0.0",
                 "php": ">=5.4"
             },
             "require-dev": {
-                "composer/composer": "^1.7",
+                "composer/composer": "^1.10.6 || ^2.0@rc",
                 "php-coveralls/php-coveralls": "^1.0",
                 "phpunit/phpunit": "^4.8.36|^6",
-                "squizlabs/php_codesniffer": "^2.8"
+                "squizlabs/php_codesniffer": "^3.5"
             },
             "bin": [
                 "scripts/dependency-licenses"
@@ -551,7 +684,7 @@
             "extra": {
                 "class": "ComposerTestScenarios\\Plugin",
                 "branch-alias": {
-                    "dev-master": "3.x-dev"
+                    "dev-main": "3.x-dev"
                 }
             },
             "autoload": {
@@ -570,7 +703,7 @@
                 }
             ],
             "description": "Useful scripts for testing multiple sets of Composer dependencies.",
-            "time": "2018-11-27T05:58:39+00:00"
+            "time": "2020-09-28T20:54:35+00:00"
         },
         {
             "name": "guzzle/guzzle",
@@ -929,27 +1062,28 @@
         },
         {
             "name": "phpdocumentor/reflection-docblock",
-            "version": "4.3.0",
+            "version": "4.3.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "94fd0001232e47129dd3504189fa1c7225010d08"
+                "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08",
-                "reference": "94fd0001232e47129dd3504189fa1c7225010d08",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/da3fd972d6bafd628114f7e7e036f45944b62e9c",
+                "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c",
                 "shasum": ""
             },
             "require": {
                 "php": "^7.0",
-                "phpdocumentor/reflection-common": "^1.0.0",
-                "phpdocumentor/type-resolver": "^0.4.0",
+                "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0",
+                "phpdocumentor/type-resolver": "~0.4 || ^1.0.0",
                 "webmozart/assert": "^1.0"
             },
             "require-dev": {
-                "doctrine/instantiator": "~1.0.5",
+                "doctrine/instantiator": "^1.0.5",
                 "mockery/mockery": "^1.0",
+                "phpdocumentor/type-resolver": "0.4.*",
                 "phpunit/phpunit": "^6.4"
             },
             "type": "library",
@@ -976,29 +1110,29 @@
                 }
             ],
             "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
-            "time": "2017-11-30T07:14:17+00:00"
+            "time": "2019-12-28T18:55:12+00:00"
         },
         {
             "name": "phpdocumentor/type-resolver",
-            "version": "0.4.0",
+            "version": "0.5.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/TypeResolver.git",
-                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7"
+                "reference": "cf842904952e64e703800d094cdf34e715a8a3ae"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7",
-                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7",
+                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/cf842904952e64e703800d094cdf34e715a8a3ae",
+                "reference": "cf842904952e64e703800d094cdf34e715a8a3ae",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5 || ^7.0",
+                "php": "^7.0",
                 "phpdocumentor/reflection-common": "^1.0"
             },
             "require-dev": {
-                "mockery/mockery": "^0.9.4",
-                "phpunit/phpunit": "^5.2||^4.8.24"
+                "mockery/mockery": "^1.0",
+                "phpunit/phpunit": "^6.4"
             },
             "type": "library",
             "extra": {
@@ -1008,9 +1142,7 @@
             },
             "autoload": {
                 "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src/"
-                    ]
+                    "phpDocumentor\\Reflection\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1023,42 +1155,42 @@
                     "email": "me@mikevanriel.com"
                 }
             ],
-            "time": "2017-07-14T14:27:02+00:00"
+            "time": "2017-12-30T13:23:38+00:00"
         },
         {
             "name": "phpspec/prophecy",
-            "version": "1.8.0",
+            "version": "v1.10.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06"
+                "reference": "451c3cd1418cf640de218914901e51b064abb093"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093",
                 "shasum": ""
             },
             "require": {
                 "doctrine/instantiator": "^1.0.2",
                 "php": "^5.3|^7.0",
-                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
-                "sebastian/comparator": "^1.1|^2.0|^3.0",
-                "sebastian/recursion-context": "^1.0|^2.0|^3.0"
+                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+                "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+                "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
             },
             "require-dev": {
-                "phpspec/phpspec": "^2.5|^3.2",
+                "phpspec/phpspec": "^2.5 || ^3.2",
                 "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.8.x-dev"
+                    "dev-master": "1.10.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Prophecy\\": "src/"
+                "psr-4": {
+                    "Prophecy\\": "src/Prophecy"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1086,7 +1218,7 @@
                 "spy",
                 "stub"
             ],
-            "time": "2018-08-05T17:53:17+00:00"
+            "time": "2020-03-05T15:02:03+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",
@@ -1335,20 +1467,21 @@
             "keywords": [
                 "tokenizer"
             ],
+            "abandoned": true,
             "time": "2017-11-27T05:48:46+00:00"
         },
         {
             "name": "phpunit/phpunit",
-            "version": "6.5.13",
+            "version": "6.5.14",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "0973426fb012359b2f18d3bd1e90ef1172839693"
+                "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0973426fb012359b2f18d3bd1e90ef1172839693",
-                "reference": "0973426fb012359b2f18d3bd1e90ef1172839693",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bac23fe7ff13dbdb461481f706f0e9fe746334b7",
+                "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7",
                 "shasum": ""
             },
             "require": {
@@ -1419,7 +1552,7 @@
                 "testing",
                 "xunit"
             ],
-            "time": "2018-09-08T15:10:43+00:00"
+            "time": "2019-02-01T05:22:47+00:00"
         },
         {
             "name": "phpunit/phpunit-mock-objects",
@@ -1478,6 +1611,7 @@
                 "mock",
                 "xunit"
             ],
+            "abandoned": true,
             "time": "2018-08-09T05:50:03+00:00"
         },
         {
@@ -1693,16 +1827,16 @@
         },
         {
             "name": "sebastian/exporter",
-            "version": "3.1.0",
+            "version": "3.1.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/exporter.git",
-                "reference": "234199f4528de6d12aaa58b612e98f7d36adb937"
+                "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937",
-                "reference": "234199f4528de6d12aaa58b612e98f7d36adb937",
+                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e",
+                "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e",
                 "shasum": ""
             },
             "require": {
@@ -1729,6 +1863,10 @@
                 "BSD-3-Clause"
             ],
             "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
                 {
                     "name": "Jeff Welch",
                     "email": "whatthejeff@gmail.com"
@@ -1737,17 +1875,13 @@
                     "name": "Volker Dusch",
                     "email": "github@wallbash.com"
                 },
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@2bepublished.at"
-                },
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                },
                 {
                     "name": "Adam Harvey",
                     "email": "aharvey@php.net"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@gmail.com"
                 }
             ],
             "description": "Provides the functionality to export PHP variables for visualization",
@@ -1756,7 +1890,7 @@
                 "export",
                 "exporter"
             ],
-            "time": "2017-04-03T13:19:02+00:00"
+            "time": "2019-09-14T09:02:43+00:00"
         },
         {
             "name": "sebastian/global-state",
@@ -2119,16 +2253,16 @@
         },
         {
             "name": "symfony/config",
-            "version": "v3.4.21",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/config.git",
-                "reference": "17c5d8941eb75a03d19bc76a43757738632d87b3"
+                "reference": "d061a451ff6bc170c5454f4ac9b41ad2179e3960"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/config/zipball/17c5d8941eb75a03d19bc76a43757738632d87b3",
-                "reference": "17c5d8941eb75a03d19bc76a43757738632d87b3",
+                "url": "https://api.github.com/repos/symfony/config/zipball/d061a451ff6bc170c5454f4ac9b41ad2179e3960",
+                "reference": "d061a451ff6bc170c5454f4ac9b41ad2179e3960",
                 "shasum": ""
             },
             "require": {
@@ -2179,20 +2313,34 @@
             ],
             "description": "Symfony Config Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-01T13:45:19+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:06:40+00:00"
         },
         {
             "name": "symfony/filesystem",
-            "version": "v3.4.21",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/filesystem.git",
-                "reference": "c24ce3d18ccc9bb9d7e1d6ce9330fcc6061cafde"
+                "reference": "495646f13d051cc5a8f77a68b68313dc854080aa"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/c24ce3d18ccc9bb9d7e1d6ce9330fcc6061cafde",
-                "reference": "c24ce3d18ccc9bb9d7e1d6ce9330fcc6061cafde",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/495646f13d051cc5a8f77a68b68313dc854080aa",
+                "reference": "495646f13d051cc5a8f77a68b68313dc854080aa",
                 "shasum": ""
             },
             "require": {
@@ -2229,20 +2377,34 @@
             ],
             "description": "Symfony Filesystem Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-01T13:45:19+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:06:40+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19"
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454",
                 "shasum": ""
             },
             "require": {
@@ -2254,7 +2416,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -2270,13 +2436,13 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                },
                 {
                     "name": "Gert de Pagter",
                     "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony polyfill for ctype functions",
@@ -2287,20 +2453,34 @@
                 "polyfill",
                 "portable"
             ],
-            "time": "2018-08-06T14:22:27+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
             "name": "symfony/stopwatch",
-            "version": "v3.4.21",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/stopwatch.git",
-                "reference": "af55d31cb58c5452d2c160655fa1968b872a8084"
+                "reference": "a7a98f40dcc382a332c3729a6d04b298ffbb8f1f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/af55d31cb58c5452d2c160655fa1968b872a8084",
-                "reference": "af55d31cb58c5452d2c160655fa1968b872a8084",
+                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/a7a98f40dcc382a332c3729a6d04b298ffbb8f1f",
+                "reference": "a7a98f40dcc382a332c3729a6d04b298ffbb8f1f",
                 "shasum": ""
             },
             "require": {
@@ -2336,20 +2516,34 @@
             ],
             "description": "Symfony Stopwatch Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-01T13:45:19+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-03-15T09:38:08+00:00"
         },
         {
             "name": "symfony/yaml",
-            "version": "v3.4.21",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/yaml.git",
-                "reference": "554a59a1ccbaac238a89b19c8e551a556fd0e2ea"
+                "reference": "ec3c2ac4d881a4684c1f0317d2107f1a4152bad9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/554a59a1ccbaac238a89b19c8e551a556fd0e2ea",
-                "reference": "554a59a1ccbaac238a89b19c8e551a556fd0e2ea",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/ec3c2ac4d881a4684c1f0317d2107f1a4152bad9",
+                "reference": "ec3c2ac4d881a4684c1f0317d2107f1a4152bad9",
                 "shasum": ""
             },
             "require": {
@@ -2395,20 +2589,34 @@
             ],
             "description": "Symfony Yaml Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-01T13:45:19+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-18T15:58:55+00:00"
         },
         {
             "name": "theseer/tokenizer",
-            "version": "1.1.0",
+            "version": "1.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/theseer/tokenizer.git",
-                "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b"
+                "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b",
-                "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b",
+                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
+                "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
                 "shasum": ""
             },
             "require": {
@@ -2435,36 +2643,34 @@
                 }
             ],
             "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
-            "time": "2017-04-07T12:08:54+00:00"
+            "time": "2019-06-13T22:48:21+00:00"
         },
         {
             "name": "webmozart/assert",
-            "version": "1.4.0",
+            "version": "1.9.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/webmozart/assert.git",
-                "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9"
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9",
-                "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9",
+                "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.3 || ^7.0",
+                "php": "^5.3.3 || ^7.0 || ^8.0",
                 "symfony/polyfill-ctype": "^1.8"
             },
+            "conflict": {
+                "phpstan/phpstan": "<0.12.20",
+                "vimeo/psalm": "<3.9.1"
+            },
             "require-dev": {
-                "phpunit/phpunit": "^4.6",
-                "sebastian/version": "^1.0.1"
+                "phpunit/phpunit": "^4.8.36 || ^7.5.13"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
                     "Webmozart\\Assert\\": "src/"
@@ -2486,7 +2692,7 @@
                 "check",
                 "validate"
             ],
-            "time": "2018-12-25T11:19:39+00:00"
+            "time": "2020-07-08T17:02:28+00:00"
         }
     ],
     "aliases": [],
@@ -2500,5 +2706,6 @@
     "platform-dev": [],
     "platform-overrides": {
         "php": "7.0.8"
-    }
+    },
+    "plugin-api-version": "1.1.0"
 }
diff --git a/vendor/consolidation/output-formatters/.scenarios.lock/finder5/.gitignore b/vendor/consolidation/output-formatters/.scenarios.lock/finder5/.gitignore
new file mode 100644
index 0000000000..5657f6ea7d
--- /dev/null
+++ b/vendor/consolidation/output-formatters/.scenarios.lock/finder5/.gitignore
@@ -0,0 +1 @@
+vendor
\ No newline at end of file
diff --git a/vendor/consolidation/output-formatters/.scenarios.lock/finder5/composer.json b/vendor/consolidation/output-formatters/.scenarios.lock/finder5/composer.json
new file mode 100644
index 0000000000..16c532a0c1
--- /dev/null
+++ b/vendor/consolidation/output-formatters/.scenarios.lock/finder5/composer.json
@@ -0,0 +1,66 @@
+{
+    "name": "consolidation/output-formatters",
+    "description": "Format text by applying transformations provided by plug-in formatters.",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Greg Anderson",
+            "email": "greg.1.anderson@greenknowe.org"
+        }
+    ],
+    "autoload": {
+        "psr-4": {
+            "Consolidation\\OutputFormatters\\": "../../src"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "Consolidation\\TestUtils\\": "../../tests/src"
+        }
+    },
+    "require": {
+        "symfony/finder": "^5",
+        "php": ">=5.4.0",
+        "dflydev/dot-access-data": "^1.1.0",
+        "symfony/console": "^2.8|^3|^4"
+    },
+    "require-dev": {
+        "g1a/composer-test-scenarios": "^3",
+        "php-coveralls/php-coveralls": "^1",
+        "phpunit/phpunit": "^5.7.27",
+        "squizlabs/php_codesniffer": "^2.7",
+        "symfony/var-dumper": "^2.8|^3|^4",
+        "victorjonsson/markdowndocs": "^1.3"
+    },
+    "suggest": {
+        "symfony/var-dumper": "For using the var_dump formatter"
+    },
+    "config": {
+        "platform": {
+            "php": "7.2.5"
+        },
+        "optimize-autoloader": true,
+        "sort-packages": true,
+        "vendor-dir": "../../vendor"
+    },
+    "scripts": {
+        "api": "phpdoc-md generate src > docs/api.md",
+        "cs": "phpcs --standard=PSR2 -n src",
+        "cbf": "phpcbf --standard=PSR2 -n src",
+        "unit": "phpunit --colors=always",
+        "lint": [
+            "find src -name '*.php' -print0 | xargs -0 -n1 php -l",
+            "find tests/src -name '*.php' -print0 | xargs -0 -n1 php -l"
+        ],
+        "test": [
+            "@lint",
+            "@unit",
+            "@cs"
+        ]
+    },
+    "extra": {
+        "branch-alias": {
+            "dev-master": "3.x-dev"
+        }
+    }
+}
diff --git a/vendor/consolidation/output-formatters/.scenarios.lock/finder5/composer.lock b/vendor/consolidation/output-formatters/.scenarios.lock/finder5/composer.lock
new file mode 100644
index 0000000000..ed32d49a20
--- /dev/null
+++ b/vendor/consolidation/output-formatters/.scenarios.lock/finder5/composer.lock
@@ -0,0 +1,2938 @@
+{
+    "_readme": [
+        "This file locks the dependencies of your project to a known state",
+        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+        "This file is @generated automatically"
+    ],
+    "content-hash": "332b2dcb257e6b06110fe52b229c3f16",
+    "packages": [
+        {
+            "name": "dflydev/dot-access-data",
+            "version": "v1.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/dflydev/dflydev-dot-access-data.git",
+                "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a",
+                "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.2"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Dflydev\\DotAccessData": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Dragonfly Development Inc.",
+                    "email": "info@dflydev.com",
+                    "homepage": "http://dflydev.com"
+                },
+                {
+                    "name": "Beau Simensen",
+                    "email": "beau@dflydev.com",
+                    "homepage": "http://beausimensen.com"
+                },
+                {
+                    "name": "Carlos Frutos",
+                    "email": "carlos@kiwing.it",
+                    "homepage": "https://github.com/cfrutos"
+                }
+            ],
+            "description": "Given a deep data structure, access data by dot notation.",
+            "homepage": "https://github.com/dflydev/dflydev-dot-access-data",
+            "keywords": [
+                "access",
+                "data",
+                "dot",
+                "notation"
+            ],
+            "time": "2017-01-20T21:14:22+00:00"
+        },
+        {
+            "name": "psr/container",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/container.git",
+                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Container\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common Container Interface (PHP FIG PSR-11)",
+            "homepage": "https://github.com/php-fig/container",
+            "keywords": [
+                "PSR-11",
+                "container",
+                "container-interface",
+                "container-interop",
+                "psr"
+            ],
+            "time": "2017-02-14T16:28:37+00:00"
+        },
+        {
+            "name": "symfony/console",
+            "version": "v4.4.15",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/console.git",
+                "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/console/zipball/90933b39c7b312fc3ceaa1ddeac7eb48cb953124",
+                "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/polyfill-php73": "^1.8",
+                "symfony/polyfill-php80": "^1.15",
+                "symfony/service-contracts": "^1.1|^2"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<3.4",
+                "symfony/event-dispatcher": "<4.3|>=5",
+                "symfony/lock": "<4.4",
+                "symfony/process": "<3.3"
+            },
+            "provide": {
+                "psr/log-implementation": "1.0"
+            },
+            "require-dev": {
+                "psr/log": "~1.0",
+                "symfony/config": "^3.4|^4.0|^5.0",
+                "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+                "symfony/event-dispatcher": "^4.3",
+                "symfony/lock": "^4.4|^5.0",
+                "symfony/process": "^3.4|^4.0|^5.0",
+                "symfony/var-dumper": "^4.3|^5.0"
+            },
+            "suggest": {
+                "psr/log": "For using the console logger",
+                "symfony/event-dispatcher": "",
+                "symfony/lock": "",
+                "symfony/process": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Console\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Console Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-15T07:58:55+00:00"
+        },
+        {
+            "name": "symfony/finder",
+            "version": "v5.1.7",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/finder.git",
+                "reference": "2c3ba7ad6884e6c4451ce2340e2dc23f6fa3e0d8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/2c3ba7ad6884e6c4451ce2340e2dc23f6fa3e0d8",
+                "reference": "2c3ba7ad6884e6c4451ce2340e2dc23f6fa3e0d8",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Finder\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Finder Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:23:27+00:00"
+        },
+        {
+            "name": "symfony/polyfill-mbstring",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-mbstring.git",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "ext-mbstring": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Mbstring\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for the Mbstring extension",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "mbstring",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php73",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php73.git",
+                "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
+                "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php73\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php80",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php80.git",
+                "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/d87d5766cbf48d72388a9f6b85f280c8ad51f981",
+                "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.0.8"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php80\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Ion Bazan",
+                    "email": "ion.bazan@gmail.com"
+                },
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/service-contracts",
+            "version": "v2.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/service-contracts.git",
+                "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1",
+                "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5",
+                "psr/container": "^1.0"
+            },
+            "suggest": {
+                "symfony/service-implementation": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.2-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\Service\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to writing services",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-07T11:33:47+00:00"
+        }
+    ],
+    "packages-dev": [
+        {
+            "name": "doctrine/instantiator",
+            "version": "1.3.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/instantiator.git",
+                "reference": "f350df0268e904597e3bd9c4685c53e0e333feea"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea",
+                "reference": "f350df0268e904597e3bd9c4685c53e0e333feea",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.1 || ^8.0"
+            },
+            "require-dev": {
+                "doctrine/coding-standard": "^6.0",
+                "ext-pdo": "*",
+                "ext-phar": "*",
+                "phpbench/phpbench": "^0.13",
+                "phpstan/phpstan-phpunit": "^0.11",
+                "phpstan/phpstan-shim": "^0.11",
+                "phpunit/phpunit": "^7.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.2.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Marco Pivetta",
+                    "email": "ocramius@gmail.com",
+                    "homepage": "http://ocramius.github.com/"
+                }
+            ],
+            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+            "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
+            "keywords": [
+                "constructor",
+                "instantiate"
+            ],
+            "funding": [
+                {
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://www.patreon.com/phpdoctrine",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-05-29T17:27:14+00:00"
+        },
+        {
+            "name": "g1a/composer-test-scenarios",
+            "version": "3.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/g1a/composer-test-scenarios.git",
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/e7394206d845fd593d325440507fb940bef8cb62",
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62",
+                "shasum": ""
+            },
+            "require": {
+                "composer-plugin-api": "^1.0.0 || ^2.0.0",
+                "php": ">=5.4"
+            },
+            "require-dev": {
+                "composer/composer": "^1.10.6 || ^2.0@rc",
+                "php-coveralls/php-coveralls": "^1.0",
+                "phpunit/phpunit": "^4.8.36|^6",
+                "squizlabs/php_codesniffer": "^3.5"
+            },
+            "bin": [
+                "scripts/dependency-licenses"
+            ],
+            "type": "composer-plugin",
+            "extra": {
+                "class": "ComposerTestScenarios\\Plugin",
+                "branch-alias": {
+                    "dev-main": "3.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "ComposerTestScenarios\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Greg Anderson",
+                    "email": "greg.1.anderson@greenknowe.org"
+                }
+            ],
+            "description": "Useful scripts for testing multiple sets of Composer dependencies.",
+            "time": "2020-09-28T20:54:35+00:00"
+        },
+        {
+            "name": "guzzle/guzzle",
+            "version": "v3.8.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/guzzle/guzzle.git",
+                "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
+                "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
+                "shasum": ""
+            },
+            "require": {
+                "ext-curl": "*",
+                "php": ">=5.3.3",
+                "symfony/event-dispatcher": ">=2.1"
+            },
+            "replace": {
+                "guzzle/batch": "self.version",
+                "guzzle/cache": "self.version",
+                "guzzle/common": "self.version",
+                "guzzle/http": "self.version",
+                "guzzle/inflection": "self.version",
+                "guzzle/iterator": "self.version",
+                "guzzle/log": "self.version",
+                "guzzle/parser": "self.version",
+                "guzzle/plugin": "self.version",
+                "guzzle/plugin-async": "self.version",
+                "guzzle/plugin-backoff": "self.version",
+                "guzzle/plugin-cache": "self.version",
+                "guzzle/plugin-cookie": "self.version",
+                "guzzle/plugin-curlauth": "self.version",
+                "guzzle/plugin-error-response": "self.version",
+                "guzzle/plugin-history": "self.version",
+                "guzzle/plugin-log": "self.version",
+                "guzzle/plugin-md5": "self.version",
+                "guzzle/plugin-mock": "self.version",
+                "guzzle/plugin-oauth": "self.version",
+                "guzzle/service": "self.version",
+                "guzzle/stream": "self.version"
+            },
+            "require-dev": {
+                "doctrine/cache": "*",
+                "monolog/monolog": "1.*",
+                "phpunit/phpunit": "3.7.*",
+                "psr/log": "1.0.*",
+                "symfony/class-loader": "*",
+                "zendframework/zend-cache": "<2.3",
+                "zendframework/zend-log": "<2.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.8-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Guzzle": "src/",
+                    "Guzzle\\Tests": "tests/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
+                },
+                {
+                    "name": "Guzzle Community",
+                    "homepage": "https://github.com/guzzle/guzzle/contributors"
+                }
+            ],
+            "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients",
+            "homepage": "http://guzzlephp.org/",
+            "keywords": [
+                "client",
+                "curl",
+                "framework",
+                "http",
+                "http client",
+                "rest",
+                "web service"
+            ],
+            "abandoned": "guzzlehttp/guzzle",
+            "time": "2014-01-28T22:29:15+00:00"
+        },
+        {
+            "name": "myclabs/deep-copy",
+            "version": "1.10.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/myclabs/DeepCopy.git",
+                "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
+                "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.1 || ^8.0"
+            },
+            "replace": {
+                "myclabs/deep-copy": "self.version"
+            },
+            "require-dev": {
+                "doctrine/collections": "^1.0",
+                "doctrine/common": "^2.6",
+                "phpunit/phpunit": "^7.1"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "DeepCopy\\": "src/DeepCopy/"
+                },
+                "files": [
+                    "src/DeepCopy/deep_copy.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Create deep copies (clones) of your objects",
+            "keywords": [
+                "clone",
+                "copy",
+                "duplicate",
+                "object",
+                "object graph"
+            ],
+            "funding": [
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-06-29T13:22:24+00:00"
+        },
+        {
+            "name": "php-coveralls/php-coveralls",
+            "version": "v1.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-coveralls/php-coveralls.git",
+                "reference": "37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad",
+                "reference": "37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad",
+                "shasum": ""
+            },
+            "require": {
+                "ext-json": "*",
+                "ext-simplexml": "*",
+                "guzzle/guzzle": "^2.8 || ^3.0",
+                "php": "^5.3.3 || ^7.0",
+                "psr/log": "^1.0",
+                "symfony/config": "^2.1 || ^3.0 || ^4.0",
+                "symfony/console": "^2.1 || ^3.0 || ^4.0",
+                "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0",
+                "symfony/yaml": "^2.0 || ^3.0 || ^4.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0"
+            },
+            "suggest": {
+                "symfony/http-kernel": "Allows Symfony integration"
+            },
+            "bin": [
+                "bin/coveralls"
+            ],
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Satooshi\\": "src/Satooshi/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Kitamura Satoshi",
+                    "email": "with.no.parachute@gmail.com",
+                    "homepage": "https://www.facebook.com/satooshi.jp"
+                }
+            ],
+            "description": "PHP client library for Coveralls API",
+            "homepage": "https://github.com/php-coveralls/php-coveralls",
+            "keywords": [
+                "ci",
+                "coverage",
+                "github",
+                "test"
+            ],
+            "time": "2017-12-06T23:17:56+00:00"
+        },
+        {
+            "name": "phpdocumentor/reflection-common",
+            "version": "2.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
+                "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+                "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2 || ^8.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-2.x": "2.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "phpDocumentor\\Reflection\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jaap van Otterdijk",
+                    "email": "opensource@ijaap.nl"
+                }
+            ],
+            "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
+            "homepage": "http://www.phpdoc.org",
+            "keywords": [
+                "FQSEN",
+                "phpDocumentor",
+                "phpdoc",
+                "reflection",
+                "static analysis"
+            ],
+            "time": "2020-06-27T09:03:43+00:00"
+        },
+        {
+            "name": "phpdocumentor/reflection-docblock",
+            "version": "5.2.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+                "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556",
+                "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556",
+                "shasum": ""
+            },
+            "require": {
+                "ext-filter": "*",
+                "php": "^7.2 || ^8.0",
+                "phpdocumentor/reflection-common": "^2.2",
+                "phpdocumentor/type-resolver": "^1.3",
+                "webmozart/assert": "^1.9.1"
+            },
+            "require-dev": {
+                "mockery/mockery": "~1.3.2"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "phpDocumentor\\Reflection\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mike van Riel",
+                    "email": "me@mikevanriel.com"
+                },
+                {
+                    "name": "Jaap van Otterdijk",
+                    "email": "account@ijaap.nl"
+                }
+            ],
+            "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
+            "time": "2020-09-03T19:13:55+00:00"
+        },
+        {
+            "name": "phpdocumentor/type-resolver",
+            "version": "1.4.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/TypeResolver.git",
+                "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
+                "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2 || ^8.0",
+                "phpdocumentor/reflection-common": "^2.0"
+            },
+            "require-dev": {
+                "ext-tokenizer": "*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-1.x": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "phpDocumentor\\Reflection\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mike van Riel",
+                    "email": "me@mikevanriel.com"
+                }
+            ],
+            "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
+            "time": "2020-09-17T18:55:26+00:00"
+        },
+        {
+            "name": "phpspec/prophecy",
+            "version": "v1.10.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpspec/prophecy.git",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/instantiator": "^1.0.2",
+                "php": "^5.3|^7.0",
+                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+                "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+                "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
+            },
+            "require-dev": {
+                "phpspec/phpspec": "^2.5 || ^3.2",
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.10.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Prophecy\\": "src/Prophecy"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Konstantin Kudryashov",
+                    "email": "ever.zet@gmail.com",
+                    "homepage": "http://everzet.com"
+                },
+                {
+                    "name": "Marcello Duarte",
+                    "email": "marcello.duarte@gmail.com"
+                }
+            ],
+            "description": "Highly opinionated mocking framework for PHP 5.3+",
+            "homepage": "https://github.com/phpspec/prophecy",
+            "keywords": [
+                "Double",
+                "Dummy",
+                "fake",
+                "mock",
+                "spy",
+                "stub"
+            ],
+            "time": "2020-03-05T15:02:03+00:00"
+        },
+        {
+            "name": "phpunit/php-code-coverage",
+            "version": "4.0.8",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+                "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef7b2f56815df854e66ceaee8ebe9393ae36a40d",
+                "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d",
+                "shasum": ""
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-xmlwriter": "*",
+                "php": "^5.6 || ^7.0",
+                "phpunit/php-file-iterator": "^1.3",
+                "phpunit/php-text-template": "^1.2",
+                "phpunit/php-token-stream": "^1.4.2 || ^2.0",
+                "sebastian/code-unit-reverse-lookup": "^1.0",
+                "sebastian/environment": "^1.3.2 || ^2.0",
+                "sebastian/version": "^1.0 || ^2.0"
+            },
+            "require-dev": {
+                "ext-xdebug": "^2.1.4",
+                "phpunit/phpunit": "^5.7"
+            },
+            "suggest": {
+                "ext-xdebug": "^2.5.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+            "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+            "keywords": [
+                "coverage",
+                "testing",
+                "xunit"
+            ],
+            "time": "2017-04-02T07:44:40+00:00"
+        },
+        {
+            "name": "phpunit/php-file-iterator",
+            "version": "1.4.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+                "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4",
+                "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+            "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+            "keywords": [
+                "filesystem",
+                "iterator"
+            ],
+            "time": "2017-11-27T13:52:08+00:00"
+        },
+        {
+            "name": "phpunit/php-text-template",
+            "version": "1.2.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-text-template.git",
+                "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+                "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Simple template engine.",
+            "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+            "keywords": [
+                "template"
+            ],
+            "time": "2015-06-21T13:50:34+00:00"
+        },
+        {
+            "name": "phpunit/php-timer",
+            "version": "1.0.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-timer.git",
+                "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
+                "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.3 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Utility class for timing",
+            "homepage": "https://github.com/sebastianbergmann/php-timer/",
+            "keywords": [
+                "timer"
+            ],
+            "time": "2017-02-26T11:10:40+00:00"
+        },
+        {
+            "name": "phpunit/php-token-stream",
+            "version": "2.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-token-stream.git",
+                "reference": "791198a2c6254db10131eecfe8c06670700904db"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db",
+                "reference": "791198a2c6254db10131eecfe8c06670700904db",
+                "shasum": ""
+            },
+            "require": {
+                "ext-tokenizer": "*",
+                "php": "^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^6.2.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Wrapper around PHP's tokenizer extension.",
+            "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
+            "keywords": [
+                "tokenizer"
+            ],
+            "abandoned": true,
+            "time": "2017-11-27T05:48:46+00:00"
+        },
+        {
+            "name": "phpunit/phpunit",
+            "version": "5.7.27",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/phpunit.git",
+                "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c",
+                "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c",
+                "shasum": ""
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-json": "*",
+                "ext-libxml": "*",
+                "ext-mbstring": "*",
+                "ext-xml": "*",
+                "myclabs/deep-copy": "~1.3",
+                "php": "^5.6 || ^7.0",
+                "phpspec/prophecy": "^1.6.2",
+                "phpunit/php-code-coverage": "^4.0.4",
+                "phpunit/php-file-iterator": "~1.4",
+                "phpunit/php-text-template": "~1.2",
+                "phpunit/php-timer": "^1.0.6",
+                "phpunit/phpunit-mock-objects": "^3.2",
+                "sebastian/comparator": "^1.2.4",
+                "sebastian/diff": "^1.4.3",
+                "sebastian/environment": "^1.3.4 || ^2.0",
+                "sebastian/exporter": "~2.0",
+                "sebastian/global-state": "^1.1",
+                "sebastian/object-enumerator": "~2.0",
+                "sebastian/resource-operations": "~1.0",
+                "sebastian/version": "^1.0.6|^2.0.1",
+                "symfony/yaml": "~2.1|~3.0|~4.0"
+            },
+            "conflict": {
+                "phpdocumentor/reflection-docblock": "3.0.2"
+            },
+            "require-dev": {
+                "ext-pdo": "*"
+            },
+            "suggest": {
+                "ext-xdebug": "*",
+                "phpunit/php-invoker": "~1.1"
+            },
+            "bin": [
+                "phpunit"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.7.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "The PHP Unit Testing framework.",
+            "homepage": "https://phpunit.de/",
+            "keywords": [
+                "phpunit",
+                "testing",
+                "xunit"
+            ],
+            "time": "2018-02-01T05:50:59+00:00"
+        },
+        {
+            "name": "phpunit/phpunit-mock-objects",
+            "version": "3.4.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
+                "reference": "a23b761686d50a560cc56233b9ecf49597cc9118"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/a23b761686d50a560cc56233b9ecf49597cc9118",
+                "reference": "a23b761686d50a560cc56233b9ecf49597cc9118",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/instantiator": "^1.0.2",
+                "php": "^5.6 || ^7.0",
+                "phpunit/php-text-template": "^1.2",
+                "sebastian/exporter": "^1.2 || ^2.0"
+            },
+            "conflict": {
+                "phpunit/phpunit": "<5.4.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^5.4"
+            },
+            "suggest": {
+                "ext-soap": "*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.2.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Mock Object library for PHPUnit",
+            "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
+            "keywords": [
+                "mock",
+                "xunit"
+            ],
+            "abandoned": true,
+            "time": "2017-06-30T09:13:00+00:00"
+        },
+        {
+            "name": "psr/log",
+            "version": "1.1.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/log.git",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Log\\": "Psr/Log/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for logging libraries",
+            "homepage": "https://github.com/php-fig/log",
+            "keywords": [
+                "log",
+                "psr",
+                "psr-3"
+            ],
+            "time": "2020-03-23T09:12:05+00:00"
+        },
+        {
+            "name": "sebastian/code-unit-reverse-lookup",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+                "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
+                "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.6 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^5.7 || ^6.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Looks up which function or method a line of code belongs to",
+            "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+            "time": "2017-03-04T06:30:41+00:00"
+        },
+        {
+            "name": "sebastian/comparator",
+            "version": "1.2.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/comparator.git",
+                "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
+                "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "sebastian/diff": "~1.2",
+                "sebastian/exporter": "~1.2 || ~2.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.2.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Volker Dusch",
+                    "email": "github@wallbash.com"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@2bepublished.at"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Provides the functionality to compare PHP values for equality",
+            "homepage": "http://www.github.com/sebastianbergmann/comparator",
+            "keywords": [
+                "comparator",
+                "compare",
+                "equality"
+            ],
+            "time": "2017-01-29T09:50:25+00:00"
+        },
+        {
+            "name": "sebastian/diff",
+            "version": "1.4.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/diff.git",
+                "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4",
+                "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.3 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Kore Nordmann",
+                    "email": "mail@kore-nordmann.de"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Diff implementation",
+            "homepage": "https://github.com/sebastianbergmann/diff",
+            "keywords": [
+                "diff"
+            ],
+            "time": "2017-05-22T07:24:03+00:00"
+        },
+        {
+            "name": "sebastian/environment",
+            "version": "2.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/environment.git",
+                "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac",
+                "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.6 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^5.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Provides functionality to handle HHVM/PHP environments",
+            "homepage": "http://www.github.com/sebastianbergmann/environment",
+            "keywords": [
+                "Xdebug",
+                "environment",
+                "hhvm"
+            ],
+            "time": "2016-11-26T07:53:53+00:00"
+        },
+        {
+            "name": "sebastian/exporter",
+            "version": "2.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/exporter.git",
+                "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4",
+                "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "sebastian/recursion-context": "~2.0"
+            },
+            "require-dev": {
+                "ext-mbstring": "*",
+                "phpunit/phpunit": "~4.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Volker Dusch",
+                    "email": "github@wallbash.com"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@2bepublished.at"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Adam Harvey",
+                    "email": "aharvey@php.net"
+                }
+            ],
+            "description": "Provides the functionality to export PHP variables for visualization",
+            "homepage": "http://www.github.com/sebastianbergmann/exporter",
+            "keywords": [
+                "export",
+                "exporter"
+            ],
+            "time": "2016-11-19T08:54:04+00:00"
+        },
+        {
+            "name": "sebastian/global-state",
+            "version": "1.1.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/global-state.git",
+                "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4",
+                "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.2"
+            },
+            "suggest": {
+                "ext-uopz": "*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Snapshotting of global state",
+            "homepage": "http://www.github.com/sebastianbergmann/global-state",
+            "keywords": [
+                "global state"
+            ],
+            "time": "2015-10-12T03:26:01+00:00"
+        },
+        {
+            "name": "sebastian/object-enumerator",
+            "version": "2.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+                "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7",
+                "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "sebastian/recursion-context": "~2.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+            "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+            "time": "2017-02-18T15:18:39+00:00"
+        },
+        {
+            "name": "sebastian/recursion-context",
+            "version": "2.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/recursion-context.git",
+                "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a",
+                "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Adam Harvey",
+                    "email": "aharvey@php.net"
+                }
+            ],
+            "description": "Provides functionality to recursively process PHP variables",
+            "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+            "time": "2016-11-19T07:33:16+00:00"
+        },
+        {
+            "name": "sebastian/resource-operations",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/resource-operations.git",
+                "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
+                "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Provides a list of PHP built-in functions that operate on resources",
+            "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
+            "time": "2015-07-28T20:34:47+00:00"
+        },
+        {
+            "name": "sebastian/version",
+            "version": "2.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/version.git",
+                "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
+                "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+            "homepage": "https://github.com/sebastianbergmann/version",
+            "time": "2016-10-03T07:35:21+00:00"
+        },
+        {
+            "name": "squizlabs/php_codesniffer",
+            "version": "2.9.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
+                "reference": "2acf168de78487db620ab4bc524135a13cfe6745"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/2acf168de78487db620ab4bc524135a13cfe6745",
+                "reference": "2acf168de78487db620ab4bc524135a13cfe6745",
+                "shasum": ""
+            },
+            "require": {
+                "ext-simplexml": "*",
+                "ext-tokenizer": "*",
+                "ext-xmlwriter": "*",
+                "php": ">=5.1.2"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.0"
+            },
+            "bin": [
+                "scripts/phpcs",
+                "scripts/phpcbf"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "CodeSniffer.php",
+                    "CodeSniffer/CLI.php",
+                    "CodeSniffer/Exception.php",
+                    "CodeSniffer/File.php",
+                    "CodeSniffer/Fixer.php",
+                    "CodeSniffer/Report.php",
+                    "CodeSniffer/Reporting.php",
+                    "CodeSniffer/Sniff.php",
+                    "CodeSniffer/Tokens.php",
+                    "CodeSniffer/Reports/",
+                    "CodeSniffer/Tokenizers/",
+                    "CodeSniffer/DocGenerators/",
+                    "CodeSniffer/Standards/AbstractPatternSniff.php",
+                    "CodeSniffer/Standards/AbstractScopeSniff.php",
+                    "CodeSniffer/Standards/AbstractVariableSniff.php",
+                    "CodeSniffer/Standards/IncorrectPatternException.php",
+                    "CodeSniffer/Standards/Generic/Sniffs/",
+                    "CodeSniffer/Standards/MySource/Sniffs/",
+                    "CodeSniffer/Standards/PEAR/Sniffs/",
+                    "CodeSniffer/Standards/PSR1/Sniffs/",
+                    "CodeSniffer/Standards/PSR2/Sniffs/",
+                    "CodeSniffer/Standards/Squiz/Sniffs/",
+                    "CodeSniffer/Standards/Zend/Sniffs/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Greg Sherwood",
+                    "role": "lead"
+                }
+            ],
+            "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
+            "homepage": "http://www.squizlabs.com/php-codesniffer",
+            "keywords": [
+                "phpcs",
+                "standards"
+            ],
+            "time": "2018-11-07T22:31:41+00:00"
+        },
+        {
+            "name": "symfony/config",
+            "version": "v4.4.15",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/config.git",
+                "reference": "7c5a1002178a612787c291a4f515f87b19176b61"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/config/zipball/7c5a1002178a612787c291a4f515f87b19176b61",
+                "reference": "7c5a1002178a612787c291a4f515f87b19176b61",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "symfony/filesystem": "^3.4|^4.0|^5.0",
+                "symfony/polyfill-ctype": "~1.8"
+            },
+            "conflict": {
+                "symfony/finder": "<3.4"
+            },
+            "require-dev": {
+                "symfony/event-dispatcher": "^3.4|^4.0|^5.0",
+                "symfony/finder": "^3.4|^4.0|^5.0",
+                "symfony/messenger": "^4.1|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/yaml": "^3.4|^4.0|^5.0"
+            },
+            "suggest": {
+                "symfony/yaml": "To use the yaml reference dumper"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Config\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Config Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-10-02T07:34:48+00:00"
+        },
+        {
+            "name": "symfony/event-dispatcher",
+            "version": "v4.4.15",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/event-dispatcher.git",
+                "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e17bb5e0663dc725f7cdcafc932132735b4725cd",
+                "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "symfony/event-dispatcher-contracts": "^1.1"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<3.4"
+            },
+            "provide": {
+                "psr/event-dispatcher-implementation": "1.0",
+                "symfony/event-dispatcher-implementation": "1.1"
+            },
+            "require-dev": {
+                "psr/log": "~1.0",
+                "symfony/config": "^3.4|^4.0|^5.0",
+                "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+                "symfony/error-handler": "~3.4|~4.4",
+                "symfony/expression-language": "^3.4|^4.0|^5.0",
+                "symfony/http-foundation": "^3.4|^4.0|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/stopwatch": "^3.4|^4.0|^5.0"
+            },
+            "suggest": {
+                "symfony/dependency-injection": "",
+                "symfony/http-kernel": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\EventDispatcher\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony EventDispatcher Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-18T14:07:46+00:00"
+        },
+        {
+            "name": "symfony/event-dispatcher-contracts",
+            "version": "v1.1.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/event-dispatcher-contracts.git",
+                "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7",
+                "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3"
+            },
+            "suggest": {
+                "psr/event-dispatcher": "",
+                "symfony/event-dispatcher-implementation": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.1-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\EventDispatcher\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to dispatching event",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-06T13:19:58+00:00"
+        },
+        {
+            "name": "symfony/filesystem",
+            "version": "v5.1.7",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/filesystem.git",
+                "reference": "1a8697545a8d87b9f2f6b1d32414199cc5e20aae"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/1a8697545a8d87b9f2f6b1d32414199cc5e20aae",
+                "reference": "1a8697545a8d87b9f2f6b1d32414199cc5e20aae",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5",
+                "symfony/polyfill-ctype": "~1.8"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Filesystem\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Filesystem Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-27T14:02:37+00:00"
+        },
+        {
+            "name": "symfony/polyfill-ctype",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-ctype.git",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "ext-ctype": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Ctype\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Gert de Pagter",
+                    "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for ctype functions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "ctype",
+                "polyfill",
+                "portable"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php72",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php72.git",
+                "reference": "639447d008615574653fb3bc60d1986d7172eaae"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/639447d008615574653fb3bc60d1986d7172eaae",
+                "reference": "639447d008615574653fb3bc60d1986d7172eaae",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php72\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/stopwatch",
+            "version": "v4.4.15",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/stopwatch.git",
+                "reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/6f89e19772cf61b3c65bab329fe0e318259fbd91",
+                "reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "symfony/service-contracts": "^1.0|^2"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Stopwatch\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Stopwatch Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:08:58+00:00"
+        },
+        {
+            "name": "symfony/var-dumper",
+            "version": "v4.4.15",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/var-dumper.git",
+                "reference": "0dc22bdf9d1197467bb04d505355180b6f20bcca"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0dc22bdf9d1197467bb04d505355180b6f20bcca",
+                "reference": "0dc22bdf9d1197467bb04d505355180b6f20bcca",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/polyfill-php72": "~1.5",
+                "symfony/polyfill-php80": "^1.15"
+            },
+            "conflict": {
+                "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0",
+                "symfony/console": "<3.4"
+            },
+            "require-dev": {
+                "ext-iconv": "*",
+                "symfony/console": "^3.4|^4.0|^5.0",
+                "symfony/process": "^4.4|^5.0",
+                "twig/twig": "^1.34|^2.4|^3.0"
+            },
+            "suggest": {
+                "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
+                "ext-intl": "To show region name in time zone dump",
+                "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
+            },
+            "bin": [
+                "Resources/bin/var-dump-server"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.4-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "Resources/functions/dump.php"
+                ],
+                "psr-4": {
+                    "Symfony\\Component\\VarDumper\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony mechanism for exploring and dumping PHP variables",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "debug",
+                "dump"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-18T08:35:10+00:00"
+        },
+        {
+            "name": "symfony/yaml",
+            "version": "v4.4.15",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/yaml.git",
+                "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/c7885964b1eceb70b0981556d0a9b01d2d97c8d1",
+                "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "symfony/polyfill-ctype": "~1.8"
+            },
+            "conflict": {
+                "symfony/console": "<3.4"
+            },
+            "require-dev": {
+                "symfony/console": "^3.4|^4.0|^5.0"
+            },
+            "suggest": {
+                "symfony/console": "For validating YAML files using the lint command"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Yaml\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Yaml Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-27T03:36:23+00:00"
+        },
+        {
+            "name": "victorjonsson/markdowndocs",
+            "version": "1.3.8",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator.git",
+                "reference": "c5eb16ff5bd15ee60223883ddacba0ab8797268d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/victorjonsson/PHP-Markdown-Documentation-Generator/zipball/c5eb16ff5bd15ee60223883ddacba0ab8797268d",
+                "reference": "c5eb16ff5bd15ee60223883ddacba0ab8797268d",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.5.0",
+                "symfony/console": ">=2.6"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "3.7.23"
+            },
+            "bin": [
+                "bin/phpdoc-md"
+            ],
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "PHPDocsMD": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Victor Jonsson",
+                    "email": "kontakt@victorjonsson.se"
+                }
+            ],
+            "description": "Command line tool for generating markdown-formatted class documentation",
+            "homepage": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator",
+            "time": "2017-04-20T09:52:47+00:00"
+        },
+        {
+            "name": "webmozart/assert",
+            "version": "1.9.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/webmozart/assert.git",
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.3 || ^7.0 || ^8.0",
+                "symfony/polyfill-ctype": "^1.8"
+            },
+            "conflict": {
+                "phpstan/phpstan": "<0.12.20",
+                "vimeo/psalm": "<3.9.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.36 || ^7.5.13"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Webmozart\\Assert\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@gmail.com"
+                }
+            ],
+            "description": "Assertions to validate method input/output with nice error messages.",
+            "keywords": [
+                "assert",
+                "check",
+                "validate"
+            ],
+            "time": "2020-07-08T17:02:28+00:00"
+        }
+    ],
+    "aliases": [],
+    "minimum-stability": "stable",
+    "stability-flags": [],
+    "prefer-stable": false,
+    "prefer-lowest": false,
+    "platform": {
+        "php": ">=5.4.0"
+    },
+    "platform-dev": [],
+    "platform-overrides": {
+        "php": "7.2.5"
+    },
+    "plugin-api-version": "1.1.0"
+}
diff --git a/vendor/consolidation/output-formatters/.scenarios.lock/install b/vendor/consolidation/output-formatters/.scenarios.lock/install
old mode 100644
new mode 100755
index 16c69e107c..4d8a777705
--- a/vendor/consolidation/output-formatters/.scenarios.lock/install
+++ b/vendor/consolidation/output-formatters/.scenarios.lock/install
@@ -4,16 +4,16 @@ SCENARIO=$1
 DEPENDENCIES=${2-install}
 
 # Convert the aliases 'highest', 'lowest' and 'lock' to
-# the corresponding composer command to run.
+# the corresponding composer update command to run.
 case $DEPENDENCIES in
   highest)
-    DEPENDENCIES=update
+    UPDATE_COMMAND=update
     ;;
   lowest)
-    DEPENDENCIES='update --prefer-lowest'
+    UPDATE_COMMAND='update --prefer-lowest'
     ;;
   lock|default|"")
-    DEPENDENCIES=install
+    UPDATE_COMMAND=''
     ;;
 esac
 
@@ -48,7 +48,11 @@ echo
 set -ex
 
 composer -n validate --working-dir=$dir --no-check-all --ansi
-composer -n --working-dir=$dir ${DEPENDENCIES} --prefer-dist --no-scripts
+
+if [ ! -z "$UPDATE_COMMAND" ] ; then
+  composer -n --working-dir=$dir ${UPDATE_COMMAND} --prefer-dist --no-scripts
+fi
+composer -n --working-dir=$dir install --prefer-dist
 
 # If called from a CI context, print out some extra information about
 # what we just installed.
diff --git a/vendor/consolidation/output-formatters/.scenarios.lock/symfony2/composer.json b/vendor/consolidation/output-formatters/.scenarios.lock/symfony2/composer.json
index 338f4265fc..b003dce2e0 100644
--- a/vendor/consolidation/output-formatters/.scenarios.lock/symfony2/composer.json
+++ b/vendor/consolidation/output-formatters/.scenarios.lock/symfony2/composer.json
@@ -22,7 +22,7 @@
         "symfony/console": "^2.8",
         "php": ">=5.4.0",
         "dflydev/dot-access-data": "^1.1.0",
-        "symfony/finder": "^2.5|^3|^4"
+        "symfony/finder": "^2.5|^3|^4|^5"
     },
     "require-dev": {
         "phpunit/phpunit": "^4.8.36",
diff --git a/vendor/consolidation/output-formatters/.scenarios.lock/symfony3/composer.lock b/vendor/consolidation/output-formatters/.scenarios.lock/symfony3/composer.lock
index 1e19004172..816a884d2c 100644
--- a/vendor/consolidation/output-formatters/.scenarios.lock/symfony3/composer.lock
+++ b/vendor/consolidation/output-formatters/.scenarios.lock/symfony3/composer.lock
@@ -67,16 +67,16 @@
         },
         {
             "name": "psr/log",
-            "version": "1.1.0",
+            "version": "1.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-fig/log.git",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
                 "shasum": ""
             },
             "require": {
@@ -85,7 +85,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.1.x-dev"
                 }
             },
             "autoload": {
@@ -110,20 +110,20 @@
                 "psr",
                 "psr-3"
             ],
-            "time": "2018-11-20T15:27:04+00:00"
+            "time": "2020-03-23T09:12:05+00:00"
         },
         {
             "name": "symfony/console",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "1d228fb4602047d7b26a0554e0d3efd567da5803"
+                "reference": "b28996bc0a3b08914b2a8609163ec35b36b30685"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/1d228fb4602047d7b26a0554e0d3efd567da5803",
-                "reference": "1d228fb4602047d7b26a0554e0d3efd567da5803",
+                "url": "https://api.github.com/repos/symfony/console/zipball/b28996bc0a3b08914b2a8609163ec35b36b30685",
+                "reference": "b28996bc0a3b08914b2a8609163ec35b36b30685",
                 "shasum": ""
             },
             "require": {
@@ -135,6 +135,9 @@
                 "symfony/dependency-injection": "<3.4",
                 "symfony/process": "<3.3"
             },
+            "provide": {
+                "psr/log-implementation": "1.0"
+            },
             "require-dev": {
                 "psr/log": "~1.0",
                 "symfony/config": "~3.3|~4.0",
@@ -144,7 +147,7 @@
                 "symfony/process": "~3.3|~4.0"
             },
             "suggest": {
-                "psr/log-implementation": "For using the console logger",
+                "psr/log": "For using the console logger",
                 "symfony/event-dispatcher": "",
                 "symfony/lock": "",
                 "symfony/process": ""
@@ -179,20 +182,34 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-30T16:50:50+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-09T05:09:37+00:00"
         },
         {
             "name": "symfony/debug",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/debug.git",
-                "reference": "fe9793af008b651c5441bdeab21ede8172dab097"
+                "reference": "9109e4414e684d0b75276ae203883467476d25d0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/debug/zipball/fe9793af008b651c5441bdeab21ede8172dab097",
-                "reference": "fe9793af008b651c5441bdeab21ede8172dab097",
+                "url": "https://api.github.com/repos/symfony/debug/zipball/9109e4414e684d0b75276ae203883467476d25d0",
+                "reference": "9109e4414e684d0b75276ae203883467476d25d0",
                 "shasum": ""
             },
             "require": {
@@ -235,20 +252,34 @@
             ],
             "description": "Symfony Debug Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-31T09:06:03+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-08T22:19:14+00:00"
         },
         {
             "name": "symfony/finder",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "54ba444dddc5bd5708a34bd095ea67c6eb54644d"
+                "reference": "52140652ed31cee3dabd0c481b5577201fa769b4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/54ba444dddc5bd5708a34bd095ea67c6eb54644d",
-                "reference": "54ba444dddc5bd5708a34bd095ea67c6eb54644d",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/52140652ed31cee3dabd0c481b5577201fa769b4",
+                "reference": "52140652ed31cee3dabd0c481b5577201fa769b4",
                 "shasum": ""
             },
             "require": {
@@ -284,20 +315,34 @@
             ],
             "description": "Symfony Finder Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-03T08:46:40+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:06:40+00:00"
         },
         {
             "name": "symfony/polyfill-mbstring",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494"
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a",
                 "shasum": ""
             },
             "require": {
@@ -309,7 +354,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -343,20 +392,34 @@
                 "portable",
                 "shim"
             ],
-            "time": "2018-09-21T13:07:52+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
             "name": "symfony/var-dumper",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/var-dumper.git",
-                "reference": "ff8ac19e97e5c7c3979236b584719a1190f84181"
+                "reference": "df8fe9c1c5dc3eb968db32ffa6b699d89fee2606"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ff8ac19e97e5c7c3979236b584719a1190f84181",
-                "reference": "ff8ac19e97e5c7c3979236b584719a1190f84181",
+                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/df8fe9c1c5dc3eb968db32ffa6b699d89fee2606",
+                "reference": "df8fe9c1c5dc3eb968db32ffa6b699d89fee2606",
                 "shasum": ""
             },
             "require": {
@@ -412,7 +475,21 @@
                 "debug",
                 "dump"
             ],
-            "time": "2018-10-02T16:33:53+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-18T08:10:16+00:00"
         }
     ],
     "packages-dev": [
@@ -472,27 +549,27 @@
         },
         {
             "name": "g1a/composer-test-scenarios",
-            "version": "3.0.0",
+            "version": "3.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/g1a/composer-test-scenarios.git",
-                "reference": "2a7156f1572898888ea50ad1d48a6b4d3f9fbf78"
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/2a7156f1572898888ea50ad1d48a6b4d3f9fbf78",
-                "reference": "2a7156f1572898888ea50ad1d48a6b4d3f9fbf78",
+                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/e7394206d845fd593d325440507fb940bef8cb62",
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62",
                 "shasum": ""
             },
             "require": {
-                "composer-plugin-api": "^1.0.0",
+                "composer-plugin-api": "^1.0.0 || ^2.0.0",
                 "php": ">=5.4"
             },
             "require-dev": {
-                "composer/composer": "^1.7",
+                "composer/composer": "^1.10.6 || ^2.0@rc",
                 "php-coveralls/php-coveralls": "^1.0",
                 "phpunit/phpunit": "^4.8.36|^6",
-                "squizlabs/php_codesniffer": "^2.8"
+                "squizlabs/php_codesniffer": "^3.5"
             },
             "bin": [
                 "scripts/dependency-licenses"
@@ -501,7 +578,7 @@
             "extra": {
                 "class": "ComposerTestScenarios\\Plugin",
                 "branch-alias": {
-                    "dev-master": "3.x-dev"
+                    "dev-main": "3.x-dev"
                 }
             },
             "autoload": {
@@ -520,7 +597,7 @@
                 }
             ],
             "description": "Useful scripts for testing multiple sets of Composer dependencies.",
-            "time": "2018-11-22T05:10:20+00:00"
+            "time": "2020-09-28T20:54:35+00:00"
         },
         {
             "name": "guzzle/guzzle",
@@ -872,38 +949,38 @@
         },
         {
             "name": "phpspec/prophecy",
-            "version": "1.8.0",
+            "version": "v1.10.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06"
+                "reference": "451c3cd1418cf640de218914901e51b064abb093"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093",
                 "shasum": ""
             },
             "require": {
                 "doctrine/instantiator": "^1.0.2",
                 "php": "^5.3|^7.0",
-                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
-                "sebastian/comparator": "^1.1|^2.0|^3.0",
-                "sebastian/recursion-context": "^1.0|^2.0|^3.0"
+                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+                "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+                "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
             },
             "require-dev": {
-                "phpspec/phpspec": "^2.5|^3.2",
+                "phpspec/phpspec": "^2.5 || ^3.2",
                 "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.8.x-dev"
+                    "dev-master": "1.10.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Prophecy\\": "src/"
+                "psr-4": {
+                    "Prophecy\\": "src/Prophecy"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -931,7 +1008,7 @@
                 "spy",
                 "stub"
             ],
-            "time": "2018-08-05T17:53:17+00:00"
+            "time": "2020-03-05T15:02:03+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",
@@ -1180,6 +1257,7 @@
             "keywords": [
                 "tokenizer"
             ],
+            "abandoned": true,
             "time": "2017-12-04T08:55:13+00:00"
         },
         {
@@ -1321,6 +1399,7 @@
                 "mock",
                 "xunit"
             ],
+            "abandoned": true,
             "time": "2017-06-30T09:13:00+00:00"
         },
         {
@@ -1916,16 +1995,16 @@
         },
         {
             "name": "symfony/config",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/config.git",
-                "reference": "99b2fa8acc244e656cdf324ff419fbe6fd300a4d"
+                "reference": "d061a451ff6bc170c5454f4ac9b41ad2179e3960"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/config/zipball/99b2fa8acc244e656cdf324ff419fbe6fd300a4d",
-                "reference": "99b2fa8acc244e656cdf324ff419fbe6fd300a4d",
+                "url": "https://api.github.com/repos/symfony/config/zipball/d061a451ff6bc170c5454f4ac9b41ad2179e3960",
+                "reference": "d061a451ff6bc170c5454f4ac9b41ad2179e3960",
                 "shasum": ""
             },
             "require": {
@@ -1976,20 +2055,34 @@
             ],
             "description": "Symfony Config Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-31T09:06:03+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:06:40+00:00"
         },
         {
             "name": "symfony/event-dispatcher",
-            "version": "v2.8.47",
+            "version": "v2.8.52",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "76494bc38ff38d90d01913d23b5271acd4d78dd3"
+                "reference": "a77e974a5fecb4398833b0709210e3d5e334ffb0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/76494bc38ff38d90d01913d23b5271acd4d78dd3",
-                "reference": "76494bc38ff38d90d01913d23b5271acd4d78dd3",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a77e974a5fecb4398833b0709210e3d5e334ffb0",
+                "reference": "a77e974a5fecb4398833b0709210e3d5e334ffb0",
                 "shasum": ""
             },
             "require": {
@@ -2036,20 +2129,20 @@
             ],
             "description": "Symfony EventDispatcher Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-20T23:16:31+00:00"
+            "time": "2018-11-21T14:20:20+00:00"
         },
         {
             "name": "symfony/filesystem",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/filesystem.git",
-                "reference": "d69930fc337d767607267d57c20a7403d0a822a4"
+                "reference": "495646f13d051cc5a8f77a68b68313dc854080aa"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/d69930fc337d767607267d57c20a7403d0a822a4",
-                "reference": "d69930fc337d767607267d57c20a7403d0a822a4",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/495646f13d051cc5a8f77a68b68313dc854080aa",
+                "reference": "495646f13d051cc5a8f77a68b68313dc854080aa",
                 "shasum": ""
             },
             "require": {
@@ -2086,20 +2179,34 @@
             ],
             "description": "Symfony Filesystem Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-02T12:28:39+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:06:40+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19"
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454",
                 "shasum": ""
             },
             "require": {
@@ -2111,7 +2218,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -2127,13 +2238,13 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                },
                 {
                     "name": "Gert de Pagter",
                     "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony polyfill for ctype functions",
@@ -2144,20 +2255,34 @@
                 "polyfill",
                 "portable"
             ],
-            "time": "2018-08-06T14:22:27+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
             "name": "symfony/stopwatch",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/stopwatch.git",
-                "reference": "05e52a39de52ba690aebaed462b2bc8a9649f0a4"
+                "reference": "a7a98f40dcc382a332c3729a6d04b298ffbb8f1f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/05e52a39de52ba690aebaed462b2bc8a9649f0a4",
-                "reference": "05e52a39de52ba690aebaed462b2bc8a9649f0a4",
+                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/a7a98f40dcc382a332c3729a6d04b298ffbb8f1f",
+                "reference": "a7a98f40dcc382a332c3729a6d04b298ffbb8f1f",
                 "shasum": ""
             },
             "require": {
@@ -2193,20 +2318,34 @@
             ],
             "description": "Symfony Stopwatch Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-02T12:28:39+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-03-15T09:38:08+00:00"
         },
         {
             "name": "symfony/yaml",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/yaml.git",
-                "reference": "640b6c27fed4066d64b64d5903a86043f4a4de7f"
+                "reference": "ec3c2ac4d881a4684c1f0317d2107f1a4152bad9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/640b6c27fed4066d64b64d5903a86043f4a4de7f",
-                "reference": "640b6c27fed4066d64b64d5903a86043f4a4de7f",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/ec3c2ac4d881a4684c1f0317d2107f1a4152bad9",
+                "reference": "ec3c2ac4d881a4684c1f0317d2107f1a4152bad9",
                 "shasum": ""
             },
             "require": {
@@ -2252,7 +2391,21 @@
             ],
             "description": "Symfony Yaml Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-02T16:33:53+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-18T15:58:55+00:00"
         },
         {
             "name": "victorjonsson/markdowndocs",
@@ -2300,31 +2453,30 @@
         },
         {
             "name": "webmozart/assert",
-            "version": "1.3.0",
+            "version": "1.9.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/webmozart/assert.git",
-                "reference": "0df1908962e7a3071564e857d86874dad1ef204a"
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a",
-                "reference": "0df1908962e7a3071564e857d86874dad1ef204a",
+                "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.3 || ^7.0"
+                "php": "^5.3.3 || ^7.0 || ^8.0",
+                "symfony/polyfill-ctype": "^1.8"
+            },
+            "conflict": {
+                "phpstan/phpstan": "<0.12.20",
+                "vimeo/psalm": "<3.9.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^4.6",
-                "sebastian/version": "^1.0.1"
+                "phpunit/phpunit": "^4.8.36 || ^7.5.13"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
                     "Webmozart\\Assert\\": "src/"
@@ -2346,7 +2498,7 @@
                 "check",
                 "validate"
             ],
-            "time": "2018-01-29T19:49:41+00:00"
+            "time": "2020-07-08T17:02:28+00:00"
         }
     ],
     "aliases": [],
@@ -2360,5 +2512,6 @@
     "platform-dev": [],
     "platform-overrides": {
         "php": "5.6.32"
-    }
+    },
+    "plugin-api-version": "1.1.0"
 }
diff --git a/vendor/consolidation/output-formatters/.scenarios.lock/symfony4/composer.json b/vendor/consolidation/output-formatters/.scenarios.lock/symfony4/composer.json
index 1767205715..7368e472a3 100644
--- a/vendor/consolidation/output-formatters/.scenarios.lock/symfony4/composer.json
+++ b/vendor/consolidation/output-formatters/.scenarios.lock/symfony4/composer.json
@@ -22,7 +22,7 @@
         "symfony/console": "^4.0",
         "php": ">=5.4.0",
         "dflydev/dot-access-data": "^1.1.0",
-        "symfony/finder": "^2.5|^3|^4"
+        "symfony/finder": "^2.5|^3|^4|^5"
     },
     "require-dev": {
         "phpunit/phpunit": "^6",
diff --git a/vendor/consolidation/output-formatters/.scenarios.lock/symfony4/composer.lock b/vendor/consolidation/output-formatters/.scenarios.lock/symfony4/composer.lock
index c43421e24c..4982bda580 100644
--- a/vendor/consolidation/output-formatters/.scenarios.lock/symfony4/composer.lock
+++ b/vendor/consolidation/output-formatters/.scenarios.lock/symfony4/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "8be5eb98a4ffa6ddd6a6c8f27bf99e5a",
+    "content-hash": "a2c830502baaa91f8f4c59cc4815fb06",
     "packages": [
         {
             "name": "dflydev/dot-access-data",
@@ -65,38 +65,96 @@
             ],
             "time": "2017-01-20T21:14:22+00:00"
         },
+        {
+            "name": "psr/container",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/container.git",
+                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Container\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common Container Interface (PHP FIG PSR-11)",
+            "homepage": "https://github.com/php-fig/container",
+            "keywords": [
+                "PSR-11",
+                "container",
+                "container-interface",
+                "container-interop",
+                "psr"
+            ],
+            "time": "2017-02-14T16:28:37+00:00"
+        },
         {
             "name": "symfony/console",
-            "version": "v4.1.7",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "432122af37d8cd52fba1b294b11976e0d20df595"
+                "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/432122af37d8cd52fba1b294b11976e0d20df595",
-                "reference": "432122af37d8cd52fba1b294b11976e0d20df595",
+                "url": "https://api.github.com/repos/symfony/console/zipball/90933b39c7b312fc3ceaa1ddeac7eb48cb953124",
+                "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
-                "symfony/polyfill-mbstring": "~1.0"
+                "php": ">=7.1.3",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/polyfill-php73": "^1.8",
+                "symfony/polyfill-php80": "^1.15",
+                "symfony/service-contracts": "^1.1|^2"
             },
             "conflict": {
                 "symfony/dependency-injection": "<3.4",
+                "symfony/event-dispatcher": "<4.3|>=5",
+                "symfony/lock": "<4.4",
                 "symfony/process": "<3.3"
             },
+            "provide": {
+                "psr/log-implementation": "1.0"
+            },
             "require-dev": {
                 "psr/log": "~1.0",
-                "symfony/config": "~3.4|~4.0",
-                "symfony/dependency-injection": "~3.4|~4.0",
-                "symfony/event-dispatcher": "~3.4|~4.0",
-                "symfony/lock": "~3.4|~4.0",
-                "symfony/process": "~3.4|~4.0"
+                "symfony/config": "^3.4|^4.0|^5.0",
+                "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+                "symfony/event-dispatcher": "^4.3",
+                "symfony/lock": "^4.4|^5.0",
+                "symfony/process": "^3.4|^4.0|^5.0",
+                "symfony/var-dumper": "^4.3|^5.0"
             },
             "suggest": {
-                "psr/log-implementation": "For using the console logger",
+                "psr/log": "For using the console logger",
                 "symfony/event-dispatcher": "",
                 "symfony/lock": "",
                 "symfony/process": ""
@@ -104,7 +162,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.1-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -131,29 +189,43 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-31T09:30:44+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-15T07:58:55+00:00"
         },
         {
             "name": "symfony/finder",
-            "version": "v4.1.7",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "1f17195b44543017a9c9b2d437c670627e96ad06"
+                "reference": "60d08560f9aa72997c44077c40d47aa28a963230"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/1f17195b44543017a9c9b2d437c670627e96ad06",
-                "reference": "1f17195b44543017a9c9b2d437c670627e96ad06",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/60d08560f9aa72997c44077c40d47aa28a963230",
+                "reference": "60d08560f9aa72997c44077c40d47aa28a963230",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3"
+                "php": ">=7.1.3"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.1-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -180,20 +252,34 @@
             ],
             "description": "Symfony Finder Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-03T08:47:56+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-10-02T07:34:48+00:00"
         },
         {
             "name": "symfony/polyfill-mbstring",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494"
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a",
                 "shasum": ""
             },
             "require": {
@@ -205,7 +291,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -239,33 +329,281 @@
                 "portable",
                 "shim"
             ],
-            "time": "2018-09-21T13:07:52+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php73",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php73.git",
+                "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
+                "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php73\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php80",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php80.git",
+                "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/d87d5766cbf48d72388a9f6b85f280c8ad51f981",
+                "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.0.8"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php80\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Ion Bazan",
+                    "email": "ion.bazan@gmail.com"
+                },
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/service-contracts",
+            "version": "v1.1.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/service-contracts.git",
+                "reference": "b776d18b303a39f56c63747bcb977ad4b27aca26"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/b776d18b303a39f56c63747bcb977ad4b27aca26",
+                "reference": "b776d18b303a39f56c63747bcb977ad4b27aca26",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "psr/container": "^1.0"
+            },
+            "suggest": {
+                "symfony/service-implementation": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.1-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\Service\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to writing services",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-06T13:19:58+00:00"
         }
     ],
     "packages-dev": [
         {
             "name": "doctrine/instantiator",
-            "version": "1.1.0",
+            "version": "1.3.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/instantiator.git",
-                "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda"
+                "reference": "f350df0268e904597e3bd9c4685c53e0e333feea"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda",
-                "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda",
+                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea",
+                "reference": "f350df0268e904597e3bd9c4685c53e0e333feea",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1"
+                "php": "^7.1 || ^8.0"
             },
             "require-dev": {
-                "athletic/athletic": "~0.1.8",
+                "doctrine/coding-standard": "^6.0",
                 "ext-pdo": "*",
                 "ext-phar": "*",
-                "phpunit/phpunit": "^6.2.3",
-                "squizlabs/php_codesniffer": "^3.0.2"
+                "phpbench/phpbench": "^0.13",
+                "phpstan/phpstan-phpunit": "^0.11",
+                "phpstan/phpstan-shim": "^0.11",
+                "phpunit/phpunit": "^7.0"
             },
             "type": "library",
             "extra": {
@@ -290,36 +628,50 @@
                 }
             ],
             "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
-            "homepage": "https://github.com/doctrine/instantiator",
+            "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
             "keywords": [
                 "constructor",
                 "instantiate"
             ],
-            "time": "2017-07-22T11:58:36+00:00"
+            "funding": [
+                {
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://www.patreon.com/phpdoctrine",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-05-29T17:27:14+00:00"
         },
         {
             "name": "g1a/composer-test-scenarios",
-            "version": "3.0.0",
+            "version": "3.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/g1a/composer-test-scenarios.git",
-                "reference": "2a7156f1572898888ea50ad1d48a6b4d3f9fbf78"
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/2a7156f1572898888ea50ad1d48a6b4d3f9fbf78",
-                "reference": "2a7156f1572898888ea50ad1d48a6b4d3f9fbf78",
+                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/e7394206d845fd593d325440507fb940bef8cb62",
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62",
                 "shasum": ""
             },
             "require": {
-                "composer-plugin-api": "^1.0.0",
+                "composer-plugin-api": "^1.0.0 || ^2.0.0",
                 "php": ">=5.4"
             },
             "require-dev": {
-                "composer/composer": "^1.7",
+                "composer/composer": "^1.10.6 || ^2.0@rc",
                 "php-coveralls/php-coveralls": "^1.0",
                 "phpunit/phpunit": "^4.8.36|^6",
-                "squizlabs/php_codesniffer": "^2.8"
+                "squizlabs/php_codesniffer": "^3.5"
             },
             "bin": [
                 "scripts/dependency-licenses"
@@ -328,7 +680,7 @@
             "extra": {
                 "class": "ComposerTestScenarios\\Plugin",
                 "branch-alias": {
-                    "dev-master": "3.x-dev"
+                    "dev-main": "3.x-dev"
                 }
             },
             "autoload": {
@@ -347,26 +699,26 @@
                 }
             ],
             "description": "Useful scripts for testing multiple sets of Composer dependencies.",
-            "time": "2018-11-22T05:10:20+00:00"
+            "time": "2020-09-28T20:54:35+00:00"
         },
         {
             "name": "guzzle/guzzle",
-            "version": "v3.9.3",
+            "version": "v3.8.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/guzzle/guzzle3.git",
-                "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9"
+                "url": "https://github.com/guzzle/guzzle.git",
+                "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/guzzle3/zipball/0645b70d953bc1c067bbc8d5bc53194706b628d9",
-                "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
+                "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
                 "shasum": ""
             },
             "require": {
                 "ext-curl": "*",
                 "php": ">=5.3.3",
-                "symfony/event-dispatcher": "~2.1"
+                "symfony/event-dispatcher": ">=2.1"
             },
             "replace": {
                 "guzzle/batch": "self.version",
@@ -393,21 +745,18 @@
                 "guzzle/stream": "self.version"
             },
             "require-dev": {
-                "doctrine/cache": "~1.3",
-                "monolog/monolog": "~1.0",
+                "doctrine/cache": "*",
+                "monolog/monolog": "1.*",
                 "phpunit/phpunit": "3.7.*",
-                "psr/log": "~1.0",
-                "symfony/class-loader": "~2.1",
-                "zendframework/zend-cache": "2.*,<2.3",
-                "zendframework/zend-log": "2.*,<2.3"
-            },
-            "suggest": {
-                "guzzlehttp/guzzle": "Guzzle 5 has moved to a new package name. The package you have installed, Guzzle 3, is deprecated."
+                "psr/log": "1.0.*",
+                "symfony/class-loader": "*",
+                "zendframework/zend-cache": "<2.3",
+                "zendframework/zend-log": "<2.3"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.9-dev"
+                    "dev-master": "3.8-dev"
                 }
             },
             "autoload": {
@@ -431,7 +780,7 @@
                     "homepage": "https://github.com/guzzle/guzzle/contributors"
                 }
             ],
-            "description": "PHP HTTP client. This library is deprecated in favor of https://packagist.org/packages/guzzlehttp/guzzle",
+            "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients",
             "homepage": "http://guzzlephp.org/",
             "keywords": [
                 "client",
@@ -443,24 +792,24 @@
                 "web service"
             ],
             "abandoned": "guzzlehttp/guzzle",
-            "time": "2015-03-18T18:23:50+00:00"
+            "time": "2014-01-28T22:29:15+00:00"
         },
         {
             "name": "myclabs/deep-copy",
-            "version": "1.8.1",
+            "version": "1.10.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/myclabs/DeepCopy.git",
-                "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8"
+                "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8",
-                "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8",
+                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
+                "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1"
+                "php": "^7.1 || ^8.0"
             },
             "replace": {
                 "myclabs/deep-copy": "self.version"
@@ -491,7 +840,13 @@
                 "object",
                 "object graph"
             ],
-            "time": "2018-06-11T23:09:50+00:00"
+            "funding": [
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-06-29T13:22:24+00:00"
         },
         {
             "name": "phar-io/manifest",
@@ -658,35 +1013,30 @@
         },
         {
             "name": "phpdocumentor/reflection-common",
-            "version": "1.0.1",
+            "version": "2.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
-                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6"
+                "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
-                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b",
+                "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.5"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.6"
+                "php": ">=7.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "2.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src"
-                    ]
+                    "phpDocumentor\\Reflection\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -708,31 +1058,32 @@
                 "reflection",
                 "static analysis"
             ],
-            "time": "2017-09-11T18:02:19+00:00"
+            "time": "2020-04-27T09:25:28+00:00"
         },
         {
             "name": "phpdocumentor/reflection-docblock",
-            "version": "4.3.0",
+            "version": "4.3.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "94fd0001232e47129dd3504189fa1c7225010d08"
+                "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08",
-                "reference": "94fd0001232e47129dd3504189fa1c7225010d08",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/da3fd972d6bafd628114f7e7e036f45944b62e9c",
+                "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c",
                 "shasum": ""
             },
             "require": {
                 "php": "^7.0",
-                "phpdocumentor/reflection-common": "^1.0.0",
-                "phpdocumentor/type-resolver": "^0.4.0",
+                "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0",
+                "phpdocumentor/type-resolver": "~0.4 || ^1.0.0",
                 "webmozart/assert": "^1.0"
             },
             "require-dev": {
-                "doctrine/instantiator": "~1.0.5",
+                "doctrine/instantiator": "^1.0.5",
                 "mockery/mockery": "^1.0",
+                "phpdocumentor/type-resolver": "0.4.*",
                 "phpunit/phpunit": "^6.4"
             },
             "type": "library",
@@ -759,41 +1110,40 @@
                 }
             ],
             "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
-            "time": "2017-11-30T07:14:17+00:00"
+            "time": "2019-12-28T18:55:12+00:00"
         },
         {
             "name": "phpdocumentor/type-resolver",
-            "version": "0.4.0",
+            "version": "1.0.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/TypeResolver.git",
-                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7"
+                "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7",
-                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7",
+                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
+                "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5 || ^7.0",
-                "phpdocumentor/reflection-common": "^1.0"
+                "php": "^7.1",
+                "phpdocumentor/reflection-common": "^2.0"
             },
             "require-dev": {
-                "mockery/mockery": "^0.9.4",
-                "phpunit/phpunit": "^5.2||^4.8.24"
+                "ext-tokenizer": "^7.1",
+                "mockery/mockery": "~1",
+                "phpunit/phpunit": "^7.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src/"
-                    ]
+                    "phpDocumentor\\Reflection\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -806,42 +1156,43 @@
                     "email": "me@mikevanriel.com"
                 }
             ],
-            "time": "2017-07-14T14:27:02+00:00"
+            "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
+            "time": "2019-08-22T18:11:29+00:00"
         },
         {
             "name": "phpspec/prophecy",
-            "version": "1.8.0",
+            "version": "v1.10.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06"
+                "reference": "451c3cd1418cf640de218914901e51b064abb093"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093",
                 "shasum": ""
             },
             "require": {
                 "doctrine/instantiator": "^1.0.2",
                 "php": "^5.3|^7.0",
-                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
-                "sebastian/comparator": "^1.1|^2.0|^3.0",
-                "sebastian/recursion-context": "^1.0|^2.0|^3.0"
+                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+                "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+                "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
             },
             "require-dev": {
-                "phpspec/phpspec": "^2.5|^3.2",
+                "phpspec/phpspec": "^2.5 || ^3.2",
                 "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.8.x-dev"
+                    "dev-master": "1.10.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Prophecy\\": "src/"
+                "psr-4": {
+                    "Prophecy\\": "src/Prophecy"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -869,7 +1220,7 @@
                 "spy",
                 "stub"
             ],
-            "time": "2018-08-05T17:53:17+00:00"
+            "time": "2020-03-05T15:02:03+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",
@@ -1118,20 +1469,21 @@
             "keywords": [
                 "tokenizer"
             ],
+            "abandoned": true,
             "time": "2017-11-27T05:48:46+00:00"
         },
         {
             "name": "phpunit/phpunit",
-            "version": "6.5.13",
+            "version": "6.5.14",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "0973426fb012359b2f18d3bd1e90ef1172839693"
+                "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0973426fb012359b2f18d3bd1e90ef1172839693",
-                "reference": "0973426fb012359b2f18d3bd1e90ef1172839693",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bac23fe7ff13dbdb461481f706f0e9fe746334b7",
+                "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7",
                 "shasum": ""
             },
             "require": {
@@ -1202,7 +1554,7 @@
                 "testing",
                 "xunit"
             ],
-            "time": "2018-09-08T15:10:43+00:00"
+            "time": "2019-02-01T05:22:47+00:00"
         },
         {
             "name": "phpunit/phpunit-mock-objects",
@@ -1261,20 +1613,21 @@
                 "mock",
                 "xunit"
             ],
+            "abandoned": true,
             "time": "2018-08-09T05:50:03+00:00"
         },
         {
             "name": "psr/log",
-            "version": "1.1.0",
+            "version": "1.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-fig/log.git",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
                 "shasum": ""
             },
             "require": {
@@ -1283,7 +1636,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.1.x-dev"
                 }
             },
             "autoload": {
@@ -1308,7 +1661,7 @@
                 "psr",
                 "psr-3"
             ],
-            "time": "2018-11-20T15:27:04+00:00"
+            "time": "2020-03-23T09:12:05+00:00"
         },
         {
             "name": "sebastian/code-unit-reverse-lookup",
@@ -1523,16 +1876,16 @@
         },
         {
             "name": "sebastian/exporter",
-            "version": "3.1.0",
+            "version": "3.1.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/exporter.git",
-                "reference": "234199f4528de6d12aaa58b612e98f7d36adb937"
+                "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937",
-                "reference": "234199f4528de6d12aaa58b612e98f7d36adb937",
+                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e",
+                "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e",
                 "shasum": ""
             },
             "require": {
@@ -1559,6 +1912,10 @@
                 "BSD-3-Clause"
             ],
             "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
                 {
                     "name": "Jeff Welch",
                     "email": "whatthejeff@gmail.com"
@@ -1567,17 +1924,13 @@
                     "name": "Volker Dusch",
                     "email": "github@wallbash.com"
                 },
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@2bepublished.at"
-                },
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                },
                 {
                     "name": "Adam Harvey",
                     "email": "aharvey@php.net"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@gmail.com"
                 }
             ],
             "description": "Provides the functionality to export PHP variables for visualization",
@@ -1586,7 +1939,7 @@
                 "export",
                 "exporter"
             ],
-            "time": "2017-04-03T13:19:02+00:00"
+            "time": "2019-09-14T09:02:43+00:00"
         },
         {
             "name": "sebastian/global-state",
@@ -1949,31 +2302,32 @@
         },
         {
             "name": "symfony/config",
-            "version": "v4.1.7",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/config.git",
-                "reference": "991fec8bbe77367fc8b48ecbaa8a4bd6e905a238"
+                "reference": "7c5a1002178a612787c291a4f515f87b19176b61"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/config/zipball/991fec8bbe77367fc8b48ecbaa8a4bd6e905a238",
-                "reference": "991fec8bbe77367fc8b48ecbaa8a4bd6e905a238",
+                "url": "https://api.github.com/repos/symfony/config/zipball/7c5a1002178a612787c291a4f515f87b19176b61",
+                "reference": "7c5a1002178a612787c291a4f515f87b19176b61",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
-                "symfony/filesystem": "~3.4|~4.0",
+                "php": ">=7.1.3",
+                "symfony/filesystem": "^3.4|^4.0|^5.0",
                 "symfony/polyfill-ctype": "~1.8"
             },
             "conflict": {
                 "symfony/finder": "<3.4"
             },
             "require-dev": {
-                "symfony/dependency-injection": "~3.4|~4.0",
-                "symfony/event-dispatcher": "~3.4|~4.0",
-                "symfony/finder": "~3.4|~4.0",
-                "symfony/yaml": "~3.4|~4.0"
+                "symfony/event-dispatcher": "^3.4|^4.0|^5.0",
+                "symfony/finder": "^3.4|^4.0|^5.0",
+                "symfony/messenger": "^4.1|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/yaml": "^3.4|^4.0|^5.0"
             },
             "suggest": {
                 "symfony/yaml": "To use the yaml reference dumper"
@@ -1981,7 +2335,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.1-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -2008,31 +2362,56 @@
             ],
             "description": "Symfony Config Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-31T09:09:42+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-10-02T07:34:48+00:00"
         },
         {
             "name": "symfony/event-dispatcher",
-            "version": "v2.8.47",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "76494bc38ff38d90d01913d23b5271acd4d78dd3"
+                "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/76494bc38ff38d90d01913d23b5271acd4d78dd3",
-                "reference": "76494bc38ff38d90d01913d23b5271acd4d78dd3",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e17bb5e0663dc725f7cdcafc932132735b4725cd",
+                "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.9"
+                "php": ">=7.1.3",
+                "symfony/event-dispatcher-contracts": "^1.1"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<3.4"
+            },
+            "provide": {
+                "psr/event-dispatcher-implementation": "1.0",
+                "symfony/event-dispatcher-implementation": "1.1"
             },
             "require-dev": {
                 "psr/log": "~1.0",
-                "symfony/config": "^2.0.5|~3.0.0",
-                "symfony/dependency-injection": "~2.6|~3.0.0",
-                "symfony/expression-language": "~2.6|~3.0.0",
-                "symfony/stopwatch": "~2.3|~3.0.0"
+                "symfony/config": "^3.4|^4.0|^5.0",
+                "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+                "symfony/error-handler": "~3.4|~4.4",
+                "symfony/expression-language": "^3.4|^4.0|^5.0",
+                "symfony/http-foundation": "^3.4|^4.0|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/stopwatch": "^3.4|^4.0|^5.0"
             },
             "suggest": {
                 "symfony/dependency-injection": "",
@@ -2041,7 +2420,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.8-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -2068,30 +2447,120 @@
             ],
             "description": "Symfony EventDispatcher Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-20T23:16:31+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-18T14:07:46+00:00"
+        },
+        {
+            "name": "symfony/event-dispatcher-contracts",
+            "version": "v1.1.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/event-dispatcher-contracts.git",
+                "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7",
+                "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3"
+            },
+            "suggest": {
+                "psr/event-dispatcher": "",
+                "symfony/event-dispatcher-implementation": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.1-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\EventDispatcher\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to dispatching event",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-06T13:19:58+00:00"
         },
         {
             "name": "symfony/filesystem",
-            "version": "v4.1.7",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/filesystem.git",
-                "reference": "fd7bd6535beb1f0a0a9e3ee960666d0598546981"
+                "reference": "ebc51494739d3b081ea543ed7c462fa73a4f74db"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/fd7bd6535beb1f0a0a9e3ee960666d0598546981",
-                "reference": "fd7bd6535beb1f0a0a9e3ee960666d0598546981",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/ebc51494739d3b081ea543ed7c462fa73a4f74db",
+                "reference": "ebc51494739d3b081ea543ed7c462fa73a4f74db",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
+                "php": ">=7.1.3",
                 "symfony/polyfill-ctype": "~1.8"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.1-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -2118,20 +2587,34 @@
             ],
             "description": "Symfony Filesystem Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-30T13:18:25+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-27T13:54:16+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19"
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454",
                 "shasum": ""
             },
             "require": {
@@ -2143,7 +2626,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -2159,13 +2646,13 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                },
                 {
                     "name": "Gert de Pagter",
                     "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony polyfill for ctype functions",
@@ -2176,20 +2663,34 @@
                 "polyfill",
                 "portable"
             ],
-            "time": "2018-08-06T14:22:27+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
             "name": "symfony/polyfill-php72",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-php72.git",
-                "reference": "9050816e2ca34a8e916c3a0ae8b9c2fccf68b631"
+                "reference": "639447d008615574653fb3bc60d1986d7172eaae"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9050816e2ca34a8e916c3a0ae8b9c2fccf68b631",
-                "reference": "9050816e2ca34a8e916c3a0ae8b9c2fccf68b631",
+                "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/639447d008615574653fb3bc60d1986d7172eaae",
+                "reference": "639447d008615574653fb3bc60d1986d7172eaae",
                 "shasum": ""
             },
             "require": {
@@ -2198,7 +2699,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -2231,29 +2736,44 @@
                 "portable",
                 "shim"
             ],
-            "time": "2018-09-21T13:07:52+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
             "name": "symfony/stopwatch",
-            "version": "v4.1.7",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/stopwatch.git",
-                "reference": "5bfc064125b73ff81229e19381ce1c34d3416f4b"
+                "reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5bfc064125b73ff81229e19381ce1c34d3416f4b",
-                "reference": "5bfc064125b73ff81229e19381ce1c34d3416f4b",
+                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/6f89e19772cf61b3c65bab329fe0e318259fbd91",
+                "reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3"
+                "php": ">=7.1.3",
+                "symfony/service-contracts": "^1.0|^2"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.1-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -2280,26 +2800,41 @@
             ],
             "description": "Symfony Stopwatch Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-02T12:40:59+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:08:58+00:00"
         },
         {
             "name": "symfony/var-dumper",
-            "version": "v4.1.7",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/var-dumper.git",
-                "reference": "60319b45653580b0cdacca499344577d87732f16"
+                "reference": "0dc22bdf9d1197467bb04d505355180b6f20bcca"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/60319b45653580b0cdacca499344577d87732f16",
-                "reference": "60319b45653580b0cdacca499344577d87732f16",
+                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0dc22bdf9d1197467bb04d505355180b6f20bcca",
+                "reference": "0dc22bdf9d1197467bb04d505355180b6f20bcca",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
+                "php": ">=7.1.3",
                 "symfony/polyfill-mbstring": "~1.0",
-                "symfony/polyfill-php72": "~1.5"
+                "symfony/polyfill-php72": "~1.5",
+                "symfony/polyfill-php80": "^1.15"
             },
             "conflict": {
                 "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0",
@@ -2307,8 +2842,9 @@
             },
             "require-dev": {
                 "ext-iconv": "*",
-                "symfony/process": "~3.4|~4.0",
-                "twig/twig": "~1.34|~2.4"
+                "symfony/console": "^3.4|^4.0|^5.0",
+                "symfony/process": "^4.4|^5.0",
+                "twig/twig": "^1.34|^2.4|^3.0"
             },
             "suggest": {
                 "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
@@ -2321,7 +2857,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.1-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -2355,31 +2891,45 @@
                 "debug",
                 "dump"
             ],
-            "time": "2018-10-02T16:36:10+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-18T08:35:10+00:00"
         },
         {
             "name": "symfony/yaml",
-            "version": "v4.1.7",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/yaml.git",
-                "reference": "367e689b2fdc19965be435337b50bc8adf2746c9"
+                "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/367e689b2fdc19965be435337b50bc8adf2746c9",
-                "reference": "367e689b2fdc19965be435337b50bc8adf2746c9",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/c7885964b1eceb70b0981556d0a9b01d2d97c8d1",
+                "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
+                "php": ">=7.1.3",
                 "symfony/polyfill-ctype": "~1.8"
             },
             "conflict": {
                 "symfony/console": "<3.4"
             },
             "require-dev": {
-                "symfony/console": "~3.4|~4.0"
+                "symfony/console": "^3.4|^4.0|^5.0"
             },
             "suggest": {
                 "symfony/console": "For validating YAML files using the lint command"
@@ -2387,7 +2937,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.1-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -2414,20 +2964,34 @@
             ],
             "description": "Symfony Yaml Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-02T16:36:10+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-27T03:36:23+00:00"
         },
         {
             "name": "theseer/tokenizer",
-            "version": "1.1.0",
+            "version": "1.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/theseer/tokenizer.git",
-                "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b"
+                "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b",
-                "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b",
+                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
+                "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
                 "shasum": ""
             },
             "require": {
@@ -2454,7 +3018,7 @@
                 }
             ],
             "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
-            "time": "2017-04-07T12:08:54+00:00"
+            "time": "2019-06-13T22:48:21+00:00"
         },
         {
             "name": "victorjonsson/markdowndocs",
@@ -2502,31 +3066,30 @@
         },
         {
             "name": "webmozart/assert",
-            "version": "1.3.0",
+            "version": "1.9.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/webmozart/assert.git",
-                "reference": "0df1908962e7a3071564e857d86874dad1ef204a"
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a",
-                "reference": "0df1908962e7a3071564e857d86874dad1ef204a",
+                "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.3 || ^7.0"
+                "php": "^5.3.3 || ^7.0 || ^8.0",
+                "symfony/polyfill-ctype": "^1.8"
+            },
+            "conflict": {
+                "phpstan/phpstan": "<0.12.20",
+                "vimeo/psalm": "<3.9.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^4.6",
-                "sebastian/version": "^1.0.1"
+                "phpunit/phpunit": "^4.8.36 || ^7.5.13"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
                     "Webmozart\\Assert\\": "src/"
@@ -2548,7 +3111,7 @@
                 "check",
                 "validate"
             ],
-            "time": "2018-01-29T19:49:41+00:00"
+            "time": "2020-07-08T17:02:28+00:00"
         }
     ],
     "aliases": [],
@@ -2562,5 +3125,6 @@
     "platform-dev": [],
     "platform-overrides": {
         "php": "7.1.3"
-    }
+    },
+    "plugin-api-version": "1.1.0"
 }
diff --git a/vendor/consolidation/output-formatters/CHANGELOG.md b/vendor/consolidation/output-formatters/CHANGELOG.md
index c7dfff53f0..87d0ac93d6 100644
--- a/vendor/consolidation/output-formatters/CHANGELOG.md
+++ b/vendor/consolidation/output-formatters/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Change Log
 
+### 3.5.1 - 10 October 2020
+
+- Allow symfony/finder ^5 in output-formatters 3.x. (#87)
+
 ### 3.5.0 - 30 May 2019
 
 - Add `@default-table-fields` to specify the fields to use with the table formatter and other "human readable" output formats.
diff --git a/vendor/consolidation/output-formatters/LICENSE b/vendor/consolidation/output-formatters/LICENSE
index 5f6b7d1744..3ce4262e0e 100644
--- a/vendor/consolidation/output-formatters/LICENSE
+++ b/vendor/consolidation/output-formatters/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2016-2018 Consolidation Org Developers
+Copyright (c) 2016-2020 Consolidation Org Developers
 
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
@@ -11,8 +11,8 @@ DEPENDENCY LICENSES:
 
 Name                       Version  License
 dflydev/dot-access-data    v1.1.0   MIT
-psr/log                    1.1.0    MIT
-symfony/console            v3.4.18  MIT
-symfony/debug              v3.4.18  MIT
-symfony/finder             v3.4.18  MIT
-symfony/polyfill-mbstring  v1.10.0  MIT
\ No newline at end of file
+psr/log                    1.1.3    MIT
+symfony/console            v3.4.45  MIT
+symfony/debug              v3.4.45  MIT
+symfony/finder             v3.4.45  MIT
+symfony/polyfill-mbstring  v1.18.1  MIT
\ No newline at end of file
diff --git a/vendor/consolidation/output-formatters/composer.json b/vendor/consolidation/output-formatters/composer.json
index e8d9a04436..e3d6e8cd4e 100644
--- a/vendor/consolidation/output-formatters/composer.json
+++ b/vendor/consolidation/output-formatters/composer.json
@@ -22,7 +22,7 @@
         "php": ">=5.4.0",
         "dflydev/dot-access-data": "^1.1.0",
         "symfony/console": "^2.8|^3|^4",
-        "symfony/finder": "^2.5|^3|^4"
+        "symfony/finder": "^2.5|^3|^4|^5"
     },
     "require-dev": {
         "g1a/composer-test-scenarios": "^3",
@@ -59,6 +59,16 @@
     },
     "extra": {
         "scenarios": {
+            "finder5": {
+                "require": {
+                    "symfony/finder": "^5"
+                },
+                "config": {
+                    "platform": {
+                        "php": "7.2.5"
+                    }
+                }                
+            },
             "symfony4": {
                 "require": {
                     "symfony/console": "^4.0"
diff --git a/vendor/consolidation/output-formatters/composer.lock b/vendor/consolidation/output-formatters/composer.lock
index 2dfee91f87..d432b0d74e 100644
--- a/vendor/consolidation/output-formatters/composer.lock
+++ b/vendor/consolidation/output-formatters/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "ee70f32509f8c43ebd69a87705e29cad",
+    "content-hash": "067804939d9b5ba5a90e64c9fe3cc29e",
     "packages": [
         {
             "name": "dflydev/dot-access-data",
@@ -67,16 +67,16 @@
         },
         {
             "name": "psr/log",
-            "version": "1.1.0",
+            "version": "1.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-fig/log.git",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
                 "shasum": ""
             },
             "require": {
@@ -85,7 +85,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.1.x-dev"
                 }
             },
             "autoload": {
@@ -110,20 +110,20 @@
                 "psr",
                 "psr-3"
             ],
-            "time": "2018-11-20T15:27:04+00:00"
+            "time": "2020-03-23T09:12:05+00:00"
         },
         {
             "name": "symfony/console",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "1d228fb4602047d7b26a0554e0d3efd567da5803"
+                "reference": "b28996bc0a3b08914b2a8609163ec35b36b30685"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/1d228fb4602047d7b26a0554e0d3efd567da5803",
-                "reference": "1d228fb4602047d7b26a0554e0d3efd567da5803",
+                "url": "https://api.github.com/repos/symfony/console/zipball/b28996bc0a3b08914b2a8609163ec35b36b30685",
+                "reference": "b28996bc0a3b08914b2a8609163ec35b36b30685",
                 "shasum": ""
             },
             "require": {
@@ -135,6 +135,9 @@
                 "symfony/dependency-injection": "<3.4",
                 "symfony/process": "<3.3"
             },
+            "provide": {
+                "psr/log-implementation": "1.0"
+            },
             "require-dev": {
                 "psr/log": "~1.0",
                 "symfony/config": "~3.3|~4.0",
@@ -144,7 +147,7 @@
                 "symfony/process": "~3.3|~4.0"
             },
             "suggest": {
-                "psr/log-implementation": "For using the console logger",
+                "psr/log": "For using the console logger",
                 "symfony/event-dispatcher": "",
                 "symfony/lock": "",
                 "symfony/process": ""
@@ -179,20 +182,34 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-30T16:50:50+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-09T05:09:37+00:00"
         },
         {
             "name": "symfony/debug",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/debug.git",
-                "reference": "fe9793af008b651c5441bdeab21ede8172dab097"
+                "reference": "9109e4414e684d0b75276ae203883467476d25d0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/debug/zipball/fe9793af008b651c5441bdeab21ede8172dab097",
-                "reference": "fe9793af008b651c5441bdeab21ede8172dab097",
+                "url": "https://api.github.com/repos/symfony/debug/zipball/9109e4414e684d0b75276ae203883467476d25d0",
+                "reference": "9109e4414e684d0b75276ae203883467476d25d0",
                 "shasum": ""
             },
             "require": {
@@ -235,20 +252,34 @@
             ],
             "description": "Symfony Debug Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-31T09:06:03+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-08T22:19:14+00:00"
         },
         {
             "name": "symfony/finder",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "54ba444dddc5bd5708a34bd095ea67c6eb54644d"
+                "reference": "52140652ed31cee3dabd0c481b5577201fa769b4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/54ba444dddc5bd5708a34bd095ea67c6eb54644d",
-                "reference": "54ba444dddc5bd5708a34bd095ea67c6eb54644d",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/52140652ed31cee3dabd0c481b5577201fa769b4",
+                "reference": "52140652ed31cee3dabd0c481b5577201fa769b4",
                 "shasum": ""
             },
             "require": {
@@ -284,20 +315,34 @@
             ],
             "description": "Symfony Finder Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-03T08:46:40+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:06:40+00:00"
         },
         {
             "name": "symfony/polyfill-mbstring",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494"
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a",
                 "shasum": ""
             },
             "require": {
@@ -309,7 +354,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -343,7 +392,21 @@
                 "portable",
                 "shim"
             ],
-            "time": "2018-09-21T13:07:52+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         }
     ],
     "packages-dev": [
@@ -403,27 +466,27 @@
         },
         {
             "name": "g1a/composer-test-scenarios",
-            "version": "3.0.0",
+            "version": "3.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/g1a/composer-test-scenarios.git",
-                "reference": "2a7156f1572898888ea50ad1d48a6b4d3f9fbf78"
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/2a7156f1572898888ea50ad1d48a6b4d3f9fbf78",
-                "reference": "2a7156f1572898888ea50ad1d48a6b4d3f9fbf78",
+                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/e7394206d845fd593d325440507fb940bef8cb62",
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62",
                 "shasum": ""
             },
             "require": {
-                "composer-plugin-api": "^1.0.0",
+                "composer-plugin-api": "^1.0.0 || ^2.0.0",
                 "php": ">=5.4"
             },
             "require-dev": {
-                "composer/composer": "^1.7",
+                "composer/composer": "^1.10.6 || ^2.0@rc",
                 "php-coveralls/php-coveralls": "^1.0",
                 "phpunit/phpunit": "^4.8.36|^6",
-                "squizlabs/php_codesniffer": "^2.8"
+                "squizlabs/php_codesniffer": "^3.5"
             },
             "bin": [
                 "scripts/dependency-licenses"
@@ -432,7 +495,7 @@
             "extra": {
                 "class": "ComposerTestScenarios\\Plugin",
                 "branch-alias": {
-                    "dev-master": "3.x-dev"
+                    "dev-main": "3.x-dev"
                 }
             },
             "autoload": {
@@ -451,7 +514,7 @@
                 }
             ],
             "description": "Useful scripts for testing multiple sets of Composer dependencies.",
-            "time": "2018-11-22T05:10:20+00:00"
+            "time": "2020-09-28T20:54:35+00:00"
         },
         {
             "name": "guzzle/guzzle",
@@ -803,38 +866,38 @@
         },
         {
             "name": "phpspec/prophecy",
-            "version": "1.8.0",
+            "version": "v1.10.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06"
+                "reference": "451c3cd1418cf640de218914901e51b064abb093"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093",
                 "shasum": ""
             },
             "require": {
                 "doctrine/instantiator": "^1.0.2",
                 "php": "^5.3|^7.0",
-                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
-                "sebastian/comparator": "^1.1|^2.0|^3.0",
-                "sebastian/recursion-context": "^1.0|^2.0|^3.0"
+                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+                "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+                "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
             },
             "require-dev": {
-                "phpspec/phpspec": "^2.5|^3.2",
+                "phpspec/phpspec": "^2.5 || ^3.2",
                 "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.8.x-dev"
+                    "dev-master": "1.10.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Prophecy\\": "src/"
+                "psr-4": {
+                    "Prophecy\\": "src/Prophecy"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -862,7 +925,7 @@
                 "spy",
                 "stub"
             ],
-            "time": "2018-08-05T17:53:17+00:00"
+            "time": "2020-03-05T15:02:03+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",
@@ -1111,6 +1174,7 @@
             "keywords": [
                 "tokenizer"
             ],
+            "abandoned": true,
             "time": "2017-12-04T08:55:13+00:00"
         },
         {
@@ -1252,6 +1316,7 @@
                 "mock",
                 "xunit"
             ],
+            "abandoned": true,
             "time": "2017-06-30T09:13:00+00:00"
         },
         {
@@ -1847,16 +1912,16 @@
         },
         {
             "name": "symfony/config",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/config.git",
-                "reference": "99b2fa8acc244e656cdf324ff419fbe6fd300a4d"
+                "reference": "d061a451ff6bc170c5454f4ac9b41ad2179e3960"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/config/zipball/99b2fa8acc244e656cdf324ff419fbe6fd300a4d",
-                "reference": "99b2fa8acc244e656cdf324ff419fbe6fd300a4d",
+                "url": "https://api.github.com/repos/symfony/config/zipball/d061a451ff6bc170c5454f4ac9b41ad2179e3960",
+                "reference": "d061a451ff6bc170c5454f4ac9b41ad2179e3960",
                 "shasum": ""
             },
             "require": {
@@ -1907,20 +1972,34 @@
             ],
             "description": "Symfony Config Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-31T09:06:03+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:06:40+00:00"
         },
         {
             "name": "symfony/event-dispatcher",
-            "version": "v2.8.47",
+            "version": "v2.8.52",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "76494bc38ff38d90d01913d23b5271acd4d78dd3"
+                "reference": "a77e974a5fecb4398833b0709210e3d5e334ffb0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/76494bc38ff38d90d01913d23b5271acd4d78dd3",
-                "reference": "76494bc38ff38d90d01913d23b5271acd4d78dd3",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a77e974a5fecb4398833b0709210e3d5e334ffb0",
+                "reference": "a77e974a5fecb4398833b0709210e3d5e334ffb0",
                 "shasum": ""
             },
             "require": {
@@ -1967,20 +2046,20 @@
             ],
             "description": "Symfony EventDispatcher Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-20T23:16:31+00:00"
+            "time": "2018-11-21T14:20:20+00:00"
         },
         {
             "name": "symfony/filesystem",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/filesystem.git",
-                "reference": "d69930fc337d767607267d57c20a7403d0a822a4"
+                "reference": "495646f13d051cc5a8f77a68b68313dc854080aa"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/d69930fc337d767607267d57c20a7403d0a822a4",
-                "reference": "d69930fc337d767607267d57c20a7403d0a822a4",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/495646f13d051cc5a8f77a68b68313dc854080aa",
+                "reference": "495646f13d051cc5a8f77a68b68313dc854080aa",
                 "shasum": ""
             },
             "require": {
@@ -2017,20 +2096,34 @@
             ],
             "description": "Symfony Filesystem Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-02T12:28:39+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:06:40+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19"
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454",
                 "shasum": ""
             },
             "require": {
@@ -2042,7 +2135,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -2058,13 +2155,13 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                },
                 {
                     "name": "Gert de Pagter",
                     "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony polyfill for ctype functions",
@@ -2075,20 +2172,34 @@
                 "polyfill",
                 "portable"
             ],
-            "time": "2018-08-06T14:22:27+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
             "name": "symfony/stopwatch",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/stopwatch.git",
-                "reference": "05e52a39de52ba690aebaed462b2bc8a9649f0a4"
+                "reference": "a7a98f40dcc382a332c3729a6d04b298ffbb8f1f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/05e52a39de52ba690aebaed462b2bc8a9649f0a4",
-                "reference": "05e52a39de52ba690aebaed462b2bc8a9649f0a4",
+                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/a7a98f40dcc382a332c3729a6d04b298ffbb8f1f",
+                "reference": "a7a98f40dcc382a332c3729a6d04b298ffbb8f1f",
                 "shasum": ""
             },
             "require": {
@@ -2124,20 +2235,34 @@
             ],
             "description": "Symfony Stopwatch Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-02T12:28:39+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-03-15T09:38:08+00:00"
         },
         {
             "name": "symfony/var-dumper",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/var-dumper.git",
-                "reference": "ff8ac19e97e5c7c3979236b584719a1190f84181"
+                "reference": "df8fe9c1c5dc3eb968db32ffa6b699d89fee2606"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ff8ac19e97e5c7c3979236b584719a1190f84181",
-                "reference": "ff8ac19e97e5c7c3979236b584719a1190f84181",
+                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/df8fe9c1c5dc3eb968db32ffa6b699d89fee2606",
+                "reference": "df8fe9c1c5dc3eb968db32ffa6b699d89fee2606",
                 "shasum": ""
             },
             "require": {
@@ -2193,20 +2318,34 @@
                 "debug",
                 "dump"
             ],
-            "time": "2018-10-02T16:33:53+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-18T08:10:16+00:00"
         },
         {
             "name": "symfony/yaml",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/yaml.git",
-                "reference": "640b6c27fed4066d64b64d5903a86043f4a4de7f"
+                "reference": "ec3c2ac4d881a4684c1f0317d2107f1a4152bad9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/640b6c27fed4066d64b64d5903a86043f4a4de7f",
-                "reference": "640b6c27fed4066d64b64d5903a86043f4a4de7f",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/ec3c2ac4d881a4684c1f0317d2107f1a4152bad9",
+                "reference": "ec3c2ac4d881a4684c1f0317d2107f1a4152bad9",
                 "shasum": ""
             },
             "require": {
@@ -2252,7 +2391,21 @@
             ],
             "description": "Symfony Yaml Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-02T16:33:53+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-18T15:58:55+00:00"
         },
         {
             "name": "victorjonsson/markdowndocs",
@@ -2300,31 +2453,30 @@
         },
         {
             "name": "webmozart/assert",
-            "version": "1.3.0",
+            "version": "1.9.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/webmozart/assert.git",
-                "reference": "0df1908962e7a3071564e857d86874dad1ef204a"
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a",
-                "reference": "0df1908962e7a3071564e857d86874dad1ef204a",
+                "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.3 || ^7.0"
+                "php": "^5.3.3 || ^7.0 || ^8.0",
+                "symfony/polyfill-ctype": "^1.8"
+            },
+            "conflict": {
+                "phpstan/phpstan": "<0.12.20",
+                "vimeo/psalm": "<3.9.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^4.6",
-                "sebastian/version": "^1.0.1"
+                "phpunit/phpunit": "^4.8.36 || ^7.5.13"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
                     "Webmozart\\Assert\\": "src/"
@@ -2346,7 +2498,7 @@
                 "check",
                 "validate"
             ],
-            "time": "2018-01-29T19:49:41+00:00"
+            "time": "2020-07-08T17:02:28+00:00"
         }
     ],
     "aliases": [],
@@ -2360,5 +2512,6 @@
     "platform-dev": [],
     "platform-overrides": {
         "php": "5.6.32"
-    }
+    },
+    "plugin-api-version": "1.1.0"
 }
diff --git a/vendor/consolidation/robo/.scenarios.lock/finder5/.gitignore b/vendor/consolidation/robo/.scenarios.lock/finder5/.gitignore
new file mode 100644
index 0000000000..5657f6ea7d
--- /dev/null
+++ b/vendor/consolidation/robo/.scenarios.lock/finder5/.gitignore
@@ -0,0 +1 @@
+vendor
\ No newline at end of file
diff --git a/vendor/consolidation/robo/.scenarios.lock/finder5/composer.json b/vendor/consolidation/robo/.scenarios.lock/finder5/composer.json
new file mode 100644
index 0000000000..e9a1241f19
--- /dev/null
+++ b/vendor/consolidation/robo/.scenarios.lock/finder5/composer.json
@@ -0,0 +1,87 @@
+{
+    "name": "consolidation/robo",
+    "description": "Modern task runner",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Davert",
+            "email": "davert.php@resend.cc"
+        }
+    ],
+    "autoload": {
+        "psr-4": {
+            "Robo\\": "../../src"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "Robo\\": "../../tests/src",
+            "RoboExample\\": "../../examples/src"
+        }
+    },
+    "bin": [
+        "robo"
+    ],
+    "require": {
+        "symfony/finder": "^5",
+        "php": ">=5.5.0",
+        "consolidation/annotated-command": "^2.12.1|^4.1",
+        "consolidation/config": "^1.2.1",
+        "consolidation/log": "^1.1.1|^2",
+        "consolidation/output-formatters": "^3.5.1|^4.1",
+        "consolidation/self-update": "^1.1.5",
+        "grasmash/yaml-expander": "^1.4",
+        "league/container": "^2.4.1",
+        "symfony/console": "^2.8|^3|^4",
+        "symfony/event-dispatcher": "^2.5|^3|^4",
+        "symfony/filesystem": "^2.5|^3|^4",
+        "symfony/process": "^2.5|^3|^4"
+    },
+    "require-dev": {
+        "g1a/composer-test-scenarios": "^3",
+        "natxet/cssmin": "3.0.4",
+        "patchwork/jsqueeze": "^2",
+        "pear/archive_tar": "^1.4.4",
+        "php-coveralls/php-coveralls": "^1",
+        "phpunit/phpunit": "^5.7.27",
+        "squizlabs/php_codesniffer": "^3"
+    },
+    "scripts": {
+        "cs": "./robo sniff",
+        "unit": "phpunit",
+        "lint": [
+            "find src -name '*.php' -print0 | xargs -0 -n1 php -l",
+            "find tests/src -name '*.php' -print0 | xargs -0 -n1 php -l"
+        ],
+        "test": [
+            "@lint",
+            "@unit",
+            "@cs"
+        ],
+        "pre-install-cmd": [
+            "Robo\\composer\\ScriptHandler::checkDependencies"
+        ]
+    },
+    "config": {
+        "platform": {
+            "php": "7.2.5"
+        },
+        "optimize-autoloader": true,
+        "sort-packages": true,
+        "vendor-dir": "../../vendor"
+    },
+    "extra": {
+        "branch-alias": {
+            "dev-master": "1.x-dev"
+        }
+    },
+    "suggest": {
+        "pear/archive_tar": "Allows tar archives to be created and extracted in taskPack and taskExtract, respectively.",
+        "henrikbjorn/lurker": "For monitoring filesystem changes in taskWatch",
+        "patchwork/jsqueeze": "For minifying JS files in taskMinify",
+        "natxet/CssMin": "For minifying CSS files in taskMinify"
+    },
+    "replace": {
+        "codegyre/robo": "< 1.0"
+    }
+}
diff --git a/vendor/consolidation/robo/.scenarios.lock/finder5/composer.lock b/vendor/consolidation/robo/.scenarios.lock/finder5/composer.lock
new file mode 100644
index 0000000000..19bde45faf
--- /dev/null
+++ b/vendor/consolidation/robo/.scenarios.lock/finder5/composer.lock
@@ -0,0 +1,3588 @@
+{
+    "_readme": [
+        "This file locks the dependencies of your project to a known state",
+        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+        "This file is @generated automatically"
+    ],
+    "content-hash": "5e862565f20b2a2701ae2f8bb2f8e724",
+    "packages": [
+        {
+            "name": "consolidation/annotated-command",
+            "version": "4.2.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/consolidation/annotated-command.git",
+                "reference": "4b596872f24c39d9c04d7b3adb6bc51baa1f2fd5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/4b596872f24c39d9c04d7b3adb6bc51baa1f2fd5",
+                "reference": "4b596872f24c39d9c04d7b3adb6bc51baa1f2fd5",
+                "shasum": ""
+            },
+            "require": {
+                "consolidation/output-formatters": "^4.1.1",
+                "php": ">=7.1.3",
+                "psr/log": "^1|^2",
+                "symfony/console": "^4.4.8|^5",
+                "symfony/event-dispatcher": "^4.4.8|^5",
+                "symfony/finder": "^4.4.8|^5"
+            },
+            "require-dev": {
+                "g1a/composer-test-scenarios": "^3",
+                "php-coveralls/php-coveralls": "^2.2",
+                "phpunit/phpunit": "^6",
+                "squizlabs/php_codesniffer": "^3"
+            },
+            "type": "library",
+            "extra": {
+                "scenarios": {
+                    "symfony4": {
+                        "require": {
+                            "symfony/console": "^4.0"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.1.3"
+                            }
+                        }
+                    }
+                },
+                "branch-alias": {
+                    "dev-main": "4.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Consolidation\\AnnotatedCommand\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Greg Anderson",
+                    "email": "greg.1.anderson@greenknowe.org"
+                }
+            ],
+            "description": "Initialize Symfony Console commands from annotated command class methods.",
+            "time": "2020-10-03T14:28:42+00:00"
+        },
+        {
+            "name": "consolidation/config",
+            "version": "1.2.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/consolidation/config.git",
+                "reference": "cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/consolidation/config/zipball/cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1",
+                "reference": "cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1",
+                "shasum": ""
+            },
+            "require": {
+                "dflydev/dot-access-data": "^1.1.0",
+                "grasmash/expander": "^1",
+                "php": ">=5.4.0"
+            },
+            "require-dev": {
+                "g1a/composer-test-scenarios": "^3",
+                "php-coveralls/php-coveralls": "^1",
+                "phpunit/phpunit": "^5",
+                "squizlabs/php_codesniffer": "2.*",
+                "symfony/console": "^2.5|^3|^4",
+                "symfony/yaml": "^2.8.11|^3|^4"
+            },
+            "suggest": {
+                "symfony/yaml": "Required to use Consolidation\\Config\\Loader\\YamlConfigLoader"
+            },
+            "type": "library",
+            "extra": {
+                "scenarios": {
+                    "symfony4": {
+                        "require-dev": {
+                            "symfony/console": "^4.0"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.1.3"
+                            }
+                        }
+                    },
+                    "symfony2": {
+                        "require-dev": {
+                            "symfony/console": "^2.8",
+                            "symfony/event-dispatcher": "^2.8",
+                            "phpunit/phpunit": "^4.8.36"
+                        },
+                        "remove": [
+                            "php-coveralls/php-coveralls"
+                        ],
+                        "config": {
+                            "platform": {
+                                "php": "5.4.8"
+                            }
+                        }
+                    }
+                },
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Consolidation\\Config\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Greg Anderson",
+                    "email": "greg.1.anderson@greenknowe.org"
+                }
+            ],
+            "description": "Provide configuration services for a commandline tool.",
+            "time": "2019-03-03T19:37:04+00:00"
+        },
+        {
+            "name": "consolidation/log",
+            "version": "2.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/consolidation/log.git",
+                "reference": "ba0bf6af1fbd09ed4dc18fc2f27b12ceff487cbf"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/consolidation/log/zipball/ba0bf6af1fbd09ed4dc18fc2f27b12ceff487cbf",
+                "reference": "ba0bf6af1fbd09ed4dc18fc2f27b12ceff487cbf",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "psr/log": "^1.0",
+                "symfony/console": "^4|^5"
+            },
+            "require-dev": {
+                "g1a/composer-test-scenarios": "^3",
+                "php-coveralls/php-coveralls": "^2.2",
+                "phpunit/phpunit": "^6",
+                "squizlabs/php_codesniffer": "^3"
+            },
+            "type": "library",
+            "extra": {
+                "scenarios": {
+                    "symfony4": {
+                        "require-dev": {
+                            "symfony/console": "^4"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.1.3"
+                            }
+                        }
+                    }
+                },
+                "branch-alias": {
+                    "dev-master": "2.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Consolidation\\Log\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Greg Anderson",
+                    "email": "greg.1.anderson@greenknowe.org"
+                }
+            ],
+            "description": "Improved Psr-3 / Psr\\Log logger based on Symfony Console components.",
+            "time": "2020-05-27T17:06:13+00:00"
+        },
+        {
+            "name": "consolidation/output-formatters",
+            "version": "4.1.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/consolidation/output-formatters.git",
+                "reference": "9deeddd6a916d0a756b216a8b40ce1016e17c0b9"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/9deeddd6a916d0a756b216a8b40ce1016e17c0b9",
+                "reference": "9deeddd6a916d0a756b216a8b40ce1016e17c0b9",
+                "shasum": ""
+            },
+            "require": {
+                "dflydev/dot-access-data": "^1.1.0",
+                "php": ">=7.1.3",
+                "symfony/console": "^4|^5",
+                "symfony/finder": "^4|^5"
+            },
+            "require-dev": {
+                "g1a/composer-test-scenarios": "^3",
+                "php-coveralls/php-coveralls": "^2.2",
+                "phpunit/phpunit": "^6",
+                "squizlabs/php_codesniffer": "^3",
+                "symfony/var-dumper": "^4",
+                "symfony/yaml": "^4"
+            },
+            "suggest": {
+                "symfony/var-dumper": "For using the var_dump formatter"
+            },
+            "type": "library",
+            "extra": {
+                "scenarios": {
+                    "symfony4": {
+                        "require": {
+                            "symfony/console": "^4.0"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.1.3"
+                            }
+                        }
+                    }
+                },
+                "branch-alias": {
+                    "dev-master": "4.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Consolidation\\OutputFormatters\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Greg Anderson",
+                    "email": "greg.1.anderson@greenknowe.org"
+                }
+            ],
+            "description": "Format text by applying transformations provided by plug-in formatters.",
+            "time": "2020-05-27T20:51:17+00:00"
+        },
+        {
+            "name": "consolidation/self-update",
+            "version": "1.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/consolidation/self-update.git",
+                "reference": "dba6b2c0708f20fa3ba8008a2353b637578849b4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/consolidation/self-update/zipball/dba6b2c0708f20fa3ba8008a2353b637578849b4",
+                "reference": "dba6b2c0708f20fa3ba8008a2353b637578849b4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.5.0",
+                "symfony/console": "^2.8|^3|^4|^5",
+                "symfony/filesystem": "^2.5|^3|^4|^5"
+            },
+            "bin": [
+                "scripts/release"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "SelfUpdate\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Alexander Menk",
+                    "email": "menk@mestrona.net"
+                },
+                {
+                    "name": "Greg Anderson",
+                    "email": "greg.1.anderson@greenknowe.org"
+                }
+            ],
+            "description": "Provides a self:update command for Symfony Console applications.",
+            "time": "2020-04-13T02:49:20+00:00"
+        },
+        {
+            "name": "container-interop/container-interop",
+            "version": "1.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/container-interop/container-interop.git",
+                "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8",
+                "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8",
+                "shasum": ""
+            },
+            "require": {
+                "psr/container": "^1.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Interop\\Container\\": "src/Interop/Container/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
+            "homepage": "https://github.com/container-interop/container-interop",
+            "abandoned": "psr/container",
+            "time": "2017-02-14T19:40:03+00:00"
+        },
+        {
+            "name": "dflydev/dot-access-data",
+            "version": "v1.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/dflydev/dflydev-dot-access-data.git",
+                "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a",
+                "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.2"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Dflydev\\DotAccessData": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Dragonfly Development Inc.",
+                    "email": "info@dflydev.com",
+                    "homepage": "http://dflydev.com"
+                },
+                {
+                    "name": "Beau Simensen",
+                    "email": "beau@dflydev.com",
+                    "homepage": "http://beausimensen.com"
+                },
+                {
+                    "name": "Carlos Frutos",
+                    "email": "carlos@kiwing.it",
+                    "homepage": "https://github.com/cfrutos"
+                }
+            ],
+            "description": "Given a deep data structure, access data by dot notation.",
+            "homepage": "https://github.com/dflydev/dflydev-dot-access-data",
+            "keywords": [
+                "access",
+                "data",
+                "dot",
+                "notation"
+            ],
+            "time": "2017-01-20T21:14:22+00:00"
+        },
+        {
+            "name": "grasmash/expander",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/grasmash/expander.git",
+                "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/grasmash/expander/zipball/95d6037344a4be1dd5f8e0b0b2571a28c397578f",
+                "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f",
+                "shasum": ""
+            },
+            "require": {
+                "dflydev/dot-access-data": "^1.1.0",
+                "php": ">=5.4"
+            },
+            "require-dev": {
+                "greg-1-anderson/composer-test-scenarios": "^1",
+                "phpunit/phpunit": "^4|^5.5.4",
+                "satooshi/php-coveralls": "^1.0.2|dev-master",
+                "squizlabs/php_codesniffer": "^2.7"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Grasmash\\Expander\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Matthew Grasmick"
+                }
+            ],
+            "description": "Expands internal property references in PHP arrays file.",
+            "time": "2017-12-21T22:14:55+00:00"
+        },
+        {
+            "name": "grasmash/yaml-expander",
+            "version": "1.4.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/grasmash/yaml-expander.git",
+                "reference": "3f0f6001ae707a24f4d9733958d77d92bf9693b1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/grasmash/yaml-expander/zipball/3f0f6001ae707a24f4d9733958d77d92bf9693b1",
+                "reference": "3f0f6001ae707a24f4d9733958d77d92bf9693b1",
+                "shasum": ""
+            },
+            "require": {
+                "dflydev/dot-access-data": "^1.1.0",
+                "php": ">=5.4",
+                "symfony/yaml": "^2.8.11|^3|^4"
+            },
+            "require-dev": {
+                "greg-1-anderson/composer-test-scenarios": "^1",
+                "phpunit/phpunit": "^4.8|^5.5.4",
+                "satooshi/php-coveralls": "^1.0.2|dev-master",
+                "squizlabs/php_codesniffer": "^2.7"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Grasmash\\YamlExpander\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Matthew Grasmick"
+                }
+            ],
+            "description": "Expands internal property references in a yaml file.",
+            "time": "2017-12-16T16:06:03+00:00"
+        },
+        {
+            "name": "league/container",
+            "version": "2.4.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/thephpleague/container.git",
+                "reference": "43f35abd03a12977a60ffd7095efd6a7808488c0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/thephpleague/container/zipball/43f35abd03a12977a60ffd7095efd6a7808488c0",
+                "reference": "43f35abd03a12977a60ffd7095efd6a7808488c0",
+                "shasum": ""
+            },
+            "require": {
+                "container-interop/container-interop": "^1.2",
+                "php": "^5.4.0 || ^7.0"
+            },
+            "provide": {
+                "container-interop/container-interop-implementation": "^1.2",
+                "psr/container-implementation": "^1.0"
+            },
+            "replace": {
+                "orno/di": "~2.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "4.*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-2.x": "2.x-dev",
+                    "dev-1.x": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "League\\Container\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Phil Bennett",
+                    "email": "philipobenito@gmail.com",
+                    "homepage": "http://www.philipobenito.com",
+                    "role": "Developer"
+                }
+            ],
+            "description": "A fast and intuitive dependency injection container.",
+            "homepage": "https://github.com/thephpleague/container",
+            "keywords": [
+                "container",
+                "dependency",
+                "di",
+                "injection",
+                "league",
+                "provider",
+                "service"
+            ],
+            "time": "2017-05-10T09:20:27+00:00"
+        },
+        {
+            "name": "psr/container",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/container.git",
+                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Container\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common Container Interface (PHP FIG PSR-11)",
+            "homepage": "https://github.com/php-fig/container",
+            "keywords": [
+                "PSR-11",
+                "container",
+                "container-interface",
+                "container-interop",
+                "psr"
+            ],
+            "time": "2017-02-14T16:28:37+00:00"
+        },
+        {
+            "name": "psr/log",
+            "version": "1.1.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/log.git",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Log\\": "Psr/Log/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for logging libraries",
+            "homepage": "https://github.com/php-fig/log",
+            "keywords": [
+                "log",
+                "psr",
+                "psr-3"
+            ],
+            "time": "2020-03-23T09:12:05+00:00"
+        },
+        {
+            "name": "symfony/console",
+            "version": "v4.4.15",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/console.git",
+                "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/console/zipball/90933b39c7b312fc3ceaa1ddeac7eb48cb953124",
+                "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/polyfill-php73": "^1.8",
+                "symfony/polyfill-php80": "^1.15",
+                "symfony/service-contracts": "^1.1|^2"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<3.4",
+                "symfony/event-dispatcher": "<4.3|>=5",
+                "symfony/lock": "<4.4",
+                "symfony/process": "<3.3"
+            },
+            "provide": {
+                "psr/log-implementation": "1.0"
+            },
+            "require-dev": {
+                "psr/log": "~1.0",
+                "symfony/config": "^3.4|^4.0|^5.0",
+                "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+                "symfony/event-dispatcher": "^4.3",
+                "symfony/lock": "^4.4|^5.0",
+                "symfony/process": "^3.4|^4.0|^5.0",
+                "symfony/var-dumper": "^4.3|^5.0"
+            },
+            "suggest": {
+                "psr/log": "For using the console logger",
+                "symfony/event-dispatcher": "",
+                "symfony/lock": "",
+                "symfony/process": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Console\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Console Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-15T07:58:55+00:00"
+        },
+        {
+            "name": "symfony/event-dispatcher",
+            "version": "v4.4.15",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/event-dispatcher.git",
+                "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e17bb5e0663dc725f7cdcafc932132735b4725cd",
+                "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "symfony/event-dispatcher-contracts": "^1.1"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<3.4"
+            },
+            "provide": {
+                "psr/event-dispatcher-implementation": "1.0",
+                "symfony/event-dispatcher-implementation": "1.1"
+            },
+            "require-dev": {
+                "psr/log": "~1.0",
+                "symfony/config": "^3.4|^4.0|^5.0",
+                "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+                "symfony/error-handler": "~3.4|~4.4",
+                "symfony/expression-language": "^3.4|^4.0|^5.0",
+                "symfony/http-foundation": "^3.4|^4.0|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/stopwatch": "^3.4|^4.0|^5.0"
+            },
+            "suggest": {
+                "symfony/dependency-injection": "",
+                "symfony/http-kernel": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\EventDispatcher\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony EventDispatcher Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-18T14:07:46+00:00"
+        },
+        {
+            "name": "symfony/event-dispatcher-contracts",
+            "version": "v1.1.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/event-dispatcher-contracts.git",
+                "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7",
+                "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3"
+            },
+            "suggest": {
+                "psr/event-dispatcher": "",
+                "symfony/event-dispatcher-implementation": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.1-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\EventDispatcher\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to dispatching event",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-06T13:19:58+00:00"
+        },
+        {
+            "name": "symfony/filesystem",
+            "version": "v4.4.15",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/filesystem.git",
+                "reference": "ebc51494739d3b081ea543ed7c462fa73a4f74db"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/ebc51494739d3b081ea543ed7c462fa73a4f74db",
+                "reference": "ebc51494739d3b081ea543ed7c462fa73a4f74db",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "symfony/polyfill-ctype": "~1.8"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Filesystem\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Filesystem Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-27T13:54:16+00:00"
+        },
+        {
+            "name": "symfony/finder",
+            "version": "v5.1.7",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/finder.git",
+                "reference": "2c3ba7ad6884e6c4451ce2340e2dc23f6fa3e0d8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/2c3ba7ad6884e6c4451ce2340e2dc23f6fa3e0d8",
+                "reference": "2c3ba7ad6884e6c4451ce2340e2dc23f6fa3e0d8",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Finder\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Finder Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:23:27+00:00"
+        },
+        {
+            "name": "symfony/polyfill-ctype",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-ctype.git",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "ext-ctype": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Ctype\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Gert de Pagter",
+                    "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for ctype functions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "ctype",
+                "polyfill",
+                "portable"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-mbstring",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-mbstring.git",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "ext-mbstring": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Mbstring\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for the Mbstring extension",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "mbstring",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php73",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php73.git",
+                "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
+                "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php73\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php80",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php80.git",
+                "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/d87d5766cbf48d72388a9f6b85f280c8ad51f981",
+                "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.0.8"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php80\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Ion Bazan",
+                    "email": "ion.bazan@gmail.com"
+                },
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/process",
+            "version": "v4.4.15",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/process.git",
+                "reference": "9b887acc522935f77555ae8813495958c7771ba7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/process/zipball/9b887acc522935f77555ae8813495958c7771ba7",
+                "reference": "9b887acc522935f77555ae8813495958c7771ba7",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Process\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Process Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:08:58+00:00"
+        },
+        {
+            "name": "symfony/service-contracts",
+            "version": "v2.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/service-contracts.git",
+                "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1",
+                "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5",
+                "psr/container": "^1.0"
+            },
+            "suggest": {
+                "symfony/service-implementation": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.2-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\Service\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to writing services",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-07T11:33:47+00:00"
+        },
+        {
+            "name": "symfony/yaml",
+            "version": "v4.4.15",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/yaml.git",
+                "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/c7885964b1eceb70b0981556d0a9b01d2d97c8d1",
+                "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "symfony/polyfill-ctype": "~1.8"
+            },
+            "conflict": {
+                "symfony/console": "<3.4"
+            },
+            "require-dev": {
+                "symfony/console": "^3.4|^4.0|^5.0"
+            },
+            "suggest": {
+                "symfony/console": "For validating YAML files using the lint command"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Yaml\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Yaml Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-27T03:36:23+00:00"
+        }
+    ],
+    "packages-dev": [
+        {
+            "name": "doctrine/instantiator",
+            "version": "1.3.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/instantiator.git",
+                "reference": "f350df0268e904597e3bd9c4685c53e0e333feea"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea",
+                "reference": "f350df0268e904597e3bd9c4685c53e0e333feea",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.1 || ^8.0"
+            },
+            "require-dev": {
+                "doctrine/coding-standard": "^6.0",
+                "ext-pdo": "*",
+                "ext-phar": "*",
+                "phpbench/phpbench": "^0.13",
+                "phpstan/phpstan-phpunit": "^0.11",
+                "phpstan/phpstan-shim": "^0.11",
+                "phpunit/phpunit": "^7.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.2.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Marco Pivetta",
+                    "email": "ocramius@gmail.com",
+                    "homepage": "http://ocramius.github.com/"
+                }
+            ],
+            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+            "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
+            "keywords": [
+                "constructor",
+                "instantiate"
+            ],
+            "funding": [
+                {
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://www.patreon.com/phpdoctrine",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-05-29T17:27:14+00:00"
+        },
+        {
+            "name": "g1a/composer-test-scenarios",
+            "version": "3.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/g1a/composer-test-scenarios.git",
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/e7394206d845fd593d325440507fb940bef8cb62",
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62",
+                "shasum": ""
+            },
+            "require": {
+                "composer-plugin-api": "^1.0.0 || ^2.0.0",
+                "php": ">=5.4"
+            },
+            "require-dev": {
+                "composer/composer": "^1.10.6 || ^2.0@rc",
+                "php-coveralls/php-coveralls": "^1.0",
+                "phpunit/phpunit": "^4.8.36|^6",
+                "squizlabs/php_codesniffer": "^3.5"
+            },
+            "bin": [
+                "scripts/dependency-licenses"
+            ],
+            "type": "composer-plugin",
+            "extra": {
+                "class": "ComposerTestScenarios\\Plugin",
+                "branch-alias": {
+                    "dev-main": "3.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "ComposerTestScenarios\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Greg Anderson",
+                    "email": "greg.1.anderson@greenknowe.org"
+                }
+            ],
+            "description": "Useful scripts for testing multiple sets of Composer dependencies.",
+            "time": "2020-09-28T20:54:35+00:00"
+        },
+        {
+            "name": "guzzle/guzzle",
+            "version": "v3.8.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/guzzle/guzzle.git",
+                "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
+                "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
+                "shasum": ""
+            },
+            "require": {
+                "ext-curl": "*",
+                "php": ">=5.3.3",
+                "symfony/event-dispatcher": ">=2.1"
+            },
+            "replace": {
+                "guzzle/batch": "self.version",
+                "guzzle/cache": "self.version",
+                "guzzle/common": "self.version",
+                "guzzle/http": "self.version",
+                "guzzle/inflection": "self.version",
+                "guzzle/iterator": "self.version",
+                "guzzle/log": "self.version",
+                "guzzle/parser": "self.version",
+                "guzzle/plugin": "self.version",
+                "guzzle/plugin-async": "self.version",
+                "guzzle/plugin-backoff": "self.version",
+                "guzzle/plugin-cache": "self.version",
+                "guzzle/plugin-cookie": "self.version",
+                "guzzle/plugin-curlauth": "self.version",
+                "guzzle/plugin-error-response": "self.version",
+                "guzzle/plugin-history": "self.version",
+                "guzzle/plugin-log": "self.version",
+                "guzzle/plugin-md5": "self.version",
+                "guzzle/plugin-mock": "self.version",
+                "guzzle/plugin-oauth": "self.version",
+                "guzzle/service": "self.version",
+                "guzzle/stream": "self.version"
+            },
+            "require-dev": {
+                "doctrine/cache": "*",
+                "monolog/monolog": "1.*",
+                "phpunit/phpunit": "3.7.*",
+                "psr/log": "1.0.*",
+                "symfony/class-loader": "*",
+                "zendframework/zend-cache": "<2.3",
+                "zendframework/zend-log": "<2.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.8-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Guzzle": "src/",
+                    "Guzzle\\Tests": "tests/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
+                },
+                {
+                    "name": "Guzzle Community",
+                    "homepage": "https://github.com/guzzle/guzzle/contributors"
+                }
+            ],
+            "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients",
+            "homepage": "http://guzzlephp.org/",
+            "keywords": [
+                "client",
+                "curl",
+                "framework",
+                "http",
+                "http client",
+                "rest",
+                "web service"
+            ],
+            "abandoned": "guzzlehttp/guzzle",
+            "time": "2014-01-28T22:29:15+00:00"
+        },
+        {
+            "name": "myclabs/deep-copy",
+            "version": "1.10.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/myclabs/DeepCopy.git",
+                "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
+                "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.1 || ^8.0"
+            },
+            "replace": {
+                "myclabs/deep-copy": "self.version"
+            },
+            "require-dev": {
+                "doctrine/collections": "^1.0",
+                "doctrine/common": "^2.6",
+                "phpunit/phpunit": "^7.1"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "DeepCopy\\": "src/DeepCopy/"
+                },
+                "files": [
+                    "src/DeepCopy/deep_copy.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Create deep copies (clones) of your objects",
+            "keywords": [
+                "clone",
+                "copy",
+                "duplicate",
+                "object",
+                "object graph"
+            ],
+            "funding": [
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-06-29T13:22:24+00:00"
+        },
+        {
+            "name": "natxet/cssmin",
+            "version": "v3.0.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/natxet/CssMin.git",
+                "reference": "92de3fe3ccb4f8298d31952490ef7d5395855c39"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/natxet/CssMin/zipball/92de3fe3ccb4f8298d31952490ef7d5395855c39",
+                "reference": "92de3fe3ccb4f8298d31952490ef7d5395855c39",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Joe Scylla",
+                    "email": "joe.scylla@gmail.com",
+                    "homepage": "https://profiles.google.com/joe.scylla"
+                }
+            ],
+            "description": "Minifying CSS",
+            "homepage": "http://code.google.com/p/cssmin/",
+            "keywords": [
+                "css",
+                "minify"
+            ],
+            "time": "2015-09-25T11:13:11+00:00"
+        },
+        {
+            "name": "patchwork/jsqueeze",
+            "version": "v2.0.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/tchwork/jsqueeze.git",
+                "reference": "693d64850eab2ce6a7c8f7cf547e1ab46e69d542"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/tchwork/jsqueeze/zipball/693d64850eab2ce6a7c8f7cf547e1ab46e69d542",
+                "reference": "693d64850eab2ce6a7c8f7cf547e1ab46e69d542",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Patchwork\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "(Apache-2.0 or GPL-2.0)"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                }
+            ],
+            "description": "Efficient JavaScript minification in PHP",
+            "homepage": "https://github.com/tchwork/jsqueeze",
+            "keywords": [
+                "compression",
+                "javascript",
+                "minification"
+            ],
+            "abandoned": true,
+            "time": "2016-04-19T09:28:22+00:00"
+        },
+        {
+            "name": "pear/archive_tar",
+            "version": "1.4.10",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/pear/Archive_Tar.git",
+                "reference": "bbb4f10f71a1da2715ec6d9a683f4f23c507a49b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/bbb4f10f71a1da2715ec6d9a683f4f23c507a49b",
+                "reference": "bbb4f10f71a1da2715ec6d9a683f4f23c507a49b",
+                "shasum": ""
+            },
+            "require": {
+                "pear/pear-core-minimal": "^1.10.0alpha2",
+                "php": ">=5.2.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "*"
+            },
+            "suggest": {
+                "ext-bz2": "Bz2 compression support.",
+                "ext-xz": "Lzma2 compression support.",
+                "ext-zlib": "Gzip compression support."
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Archive_Tar": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                "./"
+            ],
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Vincent Blavet",
+                    "email": "vincent@phpconcept.net"
+                },
+                {
+                    "name": "Greg Beaver",
+                    "email": "greg@chiaraquartet.net"
+                },
+                {
+                    "name": "Michiel Rook",
+                    "email": "mrook@php.net"
+                }
+            ],
+            "description": "Tar file management class with compression support (gzip, bzip2, lzma2)",
+            "homepage": "https://github.com/pear/Archive_Tar",
+            "keywords": [
+                "archive",
+                "tar"
+            ],
+            "time": "2020-09-15T14:13:23+00:00"
+        },
+        {
+            "name": "pear/console_getopt",
+            "version": "v1.4.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/pear/Console_Getopt.git",
+                "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/a41f8d3e668987609178c7c4a9fe48fecac53fa0",
+                "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0",
+                "shasum": ""
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "Console": "./"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                "./"
+            ],
+            "license": [
+                "BSD-2-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Andrei Zmievski",
+                    "email": "andrei@php.net",
+                    "role": "Lead"
+                },
+                {
+                    "name": "Stig Bakken",
+                    "email": "stig@php.net",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Greg Beaver",
+                    "email": "cellog@php.net",
+                    "role": "Helper"
+                }
+            ],
+            "description": "More info available on: http://pear.php.net/package/Console_Getopt",
+            "time": "2019-11-20T18:27:48+00:00"
+        },
+        {
+            "name": "pear/pear-core-minimal",
+            "version": "v1.10.10",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/pear/pear-core-minimal.git",
+                "reference": "625a3c429d9b2c1546438679074cac1b089116a7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/625a3c429d9b2c1546438679074cac1b089116a7",
+                "reference": "625a3c429d9b2c1546438679074cac1b089116a7",
+                "shasum": ""
+            },
+            "require": {
+                "pear/console_getopt": "~1.4",
+                "pear/pear_exception": "~1.0"
+            },
+            "replace": {
+                "rsky/pear-core-min": "self.version"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                "src/"
+            ],
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Christian Weiske",
+                    "email": "cweiske@php.net",
+                    "role": "Lead"
+                }
+            ],
+            "description": "Minimal set of PEAR core files to be used as composer dependency",
+            "time": "2019-11-19T19:00:24+00:00"
+        },
+        {
+            "name": "pear/pear_exception",
+            "version": "v1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/pear/PEAR_Exception.git",
+                "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7",
+                "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=4.4.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "*"
+            },
+            "type": "class",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "PEAR/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                "."
+            ],
+            "license": [
+                "BSD-2-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Helgi Thormar",
+                    "email": "dufuz@php.net"
+                },
+                {
+                    "name": "Greg Beaver",
+                    "email": "cellog@php.net"
+                }
+            ],
+            "description": "The PEAR Exception base class.",
+            "homepage": "https://github.com/pear/PEAR_Exception",
+            "keywords": [
+                "exception"
+            ],
+            "time": "2019-12-10T10:24:42+00:00"
+        },
+        {
+            "name": "php-coveralls/php-coveralls",
+            "version": "v1.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-coveralls/php-coveralls.git",
+                "reference": "37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad",
+                "reference": "37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad",
+                "shasum": ""
+            },
+            "require": {
+                "ext-json": "*",
+                "ext-simplexml": "*",
+                "guzzle/guzzle": "^2.8 || ^3.0",
+                "php": "^5.3.3 || ^7.0",
+                "psr/log": "^1.0",
+                "symfony/config": "^2.1 || ^3.0 || ^4.0",
+                "symfony/console": "^2.1 || ^3.0 || ^4.0",
+                "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0",
+                "symfony/yaml": "^2.0 || ^3.0 || ^4.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0"
+            },
+            "suggest": {
+                "symfony/http-kernel": "Allows Symfony integration"
+            },
+            "bin": [
+                "bin/coveralls"
+            ],
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Satooshi\\": "src/Satooshi/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Kitamura Satoshi",
+                    "email": "with.no.parachute@gmail.com",
+                    "homepage": "https://www.facebook.com/satooshi.jp"
+                }
+            ],
+            "description": "PHP client library for Coveralls API",
+            "homepage": "https://github.com/php-coveralls/php-coveralls",
+            "keywords": [
+                "ci",
+                "coverage",
+                "github",
+                "test"
+            ],
+            "time": "2017-12-06T23:17:56+00:00"
+        },
+        {
+            "name": "phpdocumentor/reflection-common",
+            "version": "2.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
+                "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+                "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2 || ^8.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-2.x": "2.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "phpDocumentor\\Reflection\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jaap van Otterdijk",
+                    "email": "opensource@ijaap.nl"
+                }
+            ],
+            "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
+            "homepage": "http://www.phpdoc.org",
+            "keywords": [
+                "FQSEN",
+                "phpDocumentor",
+                "phpdoc",
+                "reflection",
+                "static analysis"
+            ],
+            "time": "2020-06-27T09:03:43+00:00"
+        },
+        {
+            "name": "phpdocumentor/reflection-docblock",
+            "version": "5.2.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+                "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556",
+                "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556",
+                "shasum": ""
+            },
+            "require": {
+                "ext-filter": "*",
+                "php": "^7.2 || ^8.0",
+                "phpdocumentor/reflection-common": "^2.2",
+                "phpdocumentor/type-resolver": "^1.3",
+                "webmozart/assert": "^1.9.1"
+            },
+            "require-dev": {
+                "mockery/mockery": "~1.3.2"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "phpDocumentor\\Reflection\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mike van Riel",
+                    "email": "me@mikevanriel.com"
+                },
+                {
+                    "name": "Jaap van Otterdijk",
+                    "email": "account@ijaap.nl"
+                }
+            ],
+            "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
+            "time": "2020-09-03T19:13:55+00:00"
+        },
+        {
+            "name": "phpdocumentor/type-resolver",
+            "version": "1.4.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/TypeResolver.git",
+                "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
+                "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2 || ^8.0",
+                "phpdocumentor/reflection-common": "^2.0"
+            },
+            "require-dev": {
+                "ext-tokenizer": "*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-1.x": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "phpDocumentor\\Reflection\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mike van Riel",
+                    "email": "me@mikevanriel.com"
+                }
+            ],
+            "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
+            "time": "2020-09-17T18:55:26+00:00"
+        },
+        {
+            "name": "phpspec/prophecy",
+            "version": "v1.10.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpspec/prophecy.git",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/instantiator": "^1.0.2",
+                "php": "^5.3|^7.0",
+                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+                "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+                "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
+            },
+            "require-dev": {
+                "phpspec/phpspec": "^2.5 || ^3.2",
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.10.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Prophecy\\": "src/Prophecy"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Konstantin Kudryashov",
+                    "email": "ever.zet@gmail.com",
+                    "homepage": "http://everzet.com"
+                },
+                {
+                    "name": "Marcello Duarte",
+                    "email": "marcello.duarte@gmail.com"
+                }
+            ],
+            "description": "Highly opinionated mocking framework for PHP 5.3+",
+            "homepage": "https://github.com/phpspec/prophecy",
+            "keywords": [
+                "Double",
+                "Dummy",
+                "fake",
+                "mock",
+                "spy",
+                "stub"
+            ],
+            "time": "2020-03-05T15:02:03+00:00"
+        },
+        {
+            "name": "phpunit/php-code-coverage",
+            "version": "4.0.8",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+                "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef7b2f56815df854e66ceaee8ebe9393ae36a40d",
+                "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d",
+                "shasum": ""
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-xmlwriter": "*",
+                "php": "^5.6 || ^7.0",
+                "phpunit/php-file-iterator": "^1.3",
+                "phpunit/php-text-template": "^1.2",
+                "phpunit/php-token-stream": "^1.4.2 || ^2.0",
+                "sebastian/code-unit-reverse-lookup": "^1.0",
+                "sebastian/environment": "^1.3.2 || ^2.0",
+                "sebastian/version": "^1.0 || ^2.0"
+            },
+            "require-dev": {
+                "ext-xdebug": "^2.1.4",
+                "phpunit/phpunit": "^5.7"
+            },
+            "suggest": {
+                "ext-xdebug": "^2.5.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+            "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+            "keywords": [
+                "coverage",
+                "testing",
+                "xunit"
+            ],
+            "time": "2017-04-02T07:44:40+00:00"
+        },
+        {
+            "name": "phpunit/php-file-iterator",
+            "version": "1.4.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+                "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4",
+                "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+            "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+            "keywords": [
+                "filesystem",
+                "iterator"
+            ],
+            "time": "2017-11-27T13:52:08+00:00"
+        },
+        {
+            "name": "phpunit/php-text-template",
+            "version": "1.2.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-text-template.git",
+                "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+                "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Simple template engine.",
+            "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+            "keywords": [
+                "template"
+            ],
+            "time": "2015-06-21T13:50:34+00:00"
+        },
+        {
+            "name": "phpunit/php-timer",
+            "version": "1.0.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-timer.git",
+                "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
+                "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.3 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Utility class for timing",
+            "homepage": "https://github.com/sebastianbergmann/php-timer/",
+            "keywords": [
+                "timer"
+            ],
+            "time": "2017-02-26T11:10:40+00:00"
+        },
+        {
+            "name": "phpunit/php-token-stream",
+            "version": "2.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-token-stream.git",
+                "reference": "791198a2c6254db10131eecfe8c06670700904db"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db",
+                "reference": "791198a2c6254db10131eecfe8c06670700904db",
+                "shasum": ""
+            },
+            "require": {
+                "ext-tokenizer": "*",
+                "php": "^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^6.2.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Wrapper around PHP's tokenizer extension.",
+            "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
+            "keywords": [
+                "tokenizer"
+            ],
+            "abandoned": true,
+            "time": "2017-11-27T05:48:46+00:00"
+        },
+        {
+            "name": "phpunit/phpunit",
+            "version": "5.7.27",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/phpunit.git",
+                "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c",
+                "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c",
+                "shasum": ""
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-json": "*",
+                "ext-libxml": "*",
+                "ext-mbstring": "*",
+                "ext-xml": "*",
+                "myclabs/deep-copy": "~1.3",
+                "php": "^5.6 || ^7.0",
+                "phpspec/prophecy": "^1.6.2",
+                "phpunit/php-code-coverage": "^4.0.4",
+                "phpunit/php-file-iterator": "~1.4",
+                "phpunit/php-text-template": "~1.2",
+                "phpunit/php-timer": "^1.0.6",
+                "phpunit/phpunit-mock-objects": "^3.2",
+                "sebastian/comparator": "^1.2.4",
+                "sebastian/diff": "^1.4.3",
+                "sebastian/environment": "^1.3.4 || ^2.0",
+                "sebastian/exporter": "~2.0",
+                "sebastian/global-state": "^1.1",
+                "sebastian/object-enumerator": "~2.0",
+                "sebastian/resource-operations": "~1.0",
+                "sebastian/version": "^1.0.6|^2.0.1",
+                "symfony/yaml": "~2.1|~3.0|~4.0"
+            },
+            "conflict": {
+                "phpdocumentor/reflection-docblock": "3.0.2"
+            },
+            "require-dev": {
+                "ext-pdo": "*"
+            },
+            "suggest": {
+                "ext-xdebug": "*",
+                "phpunit/php-invoker": "~1.1"
+            },
+            "bin": [
+                "phpunit"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.7.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "The PHP Unit Testing framework.",
+            "homepage": "https://phpunit.de/",
+            "keywords": [
+                "phpunit",
+                "testing",
+                "xunit"
+            ],
+            "time": "2018-02-01T05:50:59+00:00"
+        },
+        {
+            "name": "phpunit/phpunit-mock-objects",
+            "version": "3.4.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
+                "reference": "a23b761686d50a560cc56233b9ecf49597cc9118"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/a23b761686d50a560cc56233b9ecf49597cc9118",
+                "reference": "a23b761686d50a560cc56233b9ecf49597cc9118",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/instantiator": "^1.0.2",
+                "php": "^5.6 || ^7.0",
+                "phpunit/php-text-template": "^1.2",
+                "sebastian/exporter": "^1.2 || ^2.0"
+            },
+            "conflict": {
+                "phpunit/phpunit": "<5.4.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^5.4"
+            },
+            "suggest": {
+                "ext-soap": "*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.2.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Mock Object library for PHPUnit",
+            "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
+            "keywords": [
+                "mock",
+                "xunit"
+            ],
+            "abandoned": true,
+            "time": "2017-06-30T09:13:00+00:00"
+        },
+        {
+            "name": "sebastian/code-unit-reverse-lookup",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+                "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
+                "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.6 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^5.7 || ^6.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Looks up which function or method a line of code belongs to",
+            "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+            "time": "2017-03-04T06:30:41+00:00"
+        },
+        {
+            "name": "sebastian/comparator",
+            "version": "1.2.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/comparator.git",
+                "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
+                "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "sebastian/diff": "~1.2",
+                "sebastian/exporter": "~1.2 || ~2.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.2.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Volker Dusch",
+                    "email": "github@wallbash.com"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@2bepublished.at"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Provides the functionality to compare PHP values for equality",
+            "homepage": "http://www.github.com/sebastianbergmann/comparator",
+            "keywords": [
+                "comparator",
+                "compare",
+                "equality"
+            ],
+            "time": "2017-01-29T09:50:25+00:00"
+        },
+        {
+            "name": "sebastian/diff",
+            "version": "1.4.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/diff.git",
+                "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4",
+                "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.3 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Kore Nordmann",
+                    "email": "mail@kore-nordmann.de"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Diff implementation",
+            "homepage": "https://github.com/sebastianbergmann/diff",
+            "keywords": [
+                "diff"
+            ],
+            "time": "2017-05-22T07:24:03+00:00"
+        },
+        {
+            "name": "sebastian/environment",
+            "version": "2.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/environment.git",
+                "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac",
+                "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.6 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^5.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Provides functionality to handle HHVM/PHP environments",
+            "homepage": "http://www.github.com/sebastianbergmann/environment",
+            "keywords": [
+                "Xdebug",
+                "environment",
+                "hhvm"
+            ],
+            "time": "2016-11-26T07:53:53+00:00"
+        },
+        {
+            "name": "sebastian/exporter",
+            "version": "2.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/exporter.git",
+                "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4",
+                "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "sebastian/recursion-context": "~2.0"
+            },
+            "require-dev": {
+                "ext-mbstring": "*",
+                "phpunit/phpunit": "~4.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Volker Dusch",
+                    "email": "github@wallbash.com"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@2bepublished.at"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Adam Harvey",
+                    "email": "aharvey@php.net"
+                }
+            ],
+            "description": "Provides the functionality to export PHP variables for visualization",
+            "homepage": "http://www.github.com/sebastianbergmann/exporter",
+            "keywords": [
+                "export",
+                "exporter"
+            ],
+            "time": "2016-11-19T08:54:04+00:00"
+        },
+        {
+            "name": "sebastian/global-state",
+            "version": "1.1.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/global-state.git",
+                "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4",
+                "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.2"
+            },
+            "suggest": {
+                "ext-uopz": "*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Snapshotting of global state",
+            "homepage": "http://www.github.com/sebastianbergmann/global-state",
+            "keywords": [
+                "global state"
+            ],
+            "time": "2015-10-12T03:26:01+00:00"
+        },
+        {
+            "name": "sebastian/object-enumerator",
+            "version": "2.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+                "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7",
+                "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "sebastian/recursion-context": "~2.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+            "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+            "time": "2017-02-18T15:18:39+00:00"
+        },
+        {
+            "name": "sebastian/recursion-context",
+            "version": "2.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/recursion-context.git",
+                "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a",
+                "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Adam Harvey",
+                    "email": "aharvey@php.net"
+                }
+            ],
+            "description": "Provides functionality to recursively process PHP variables",
+            "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+            "time": "2016-11-19T07:33:16+00:00"
+        },
+        {
+            "name": "sebastian/resource-operations",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/resource-operations.git",
+                "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
+                "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Provides a list of PHP built-in functions that operate on resources",
+            "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
+            "time": "2015-07-28T20:34:47+00:00"
+        },
+        {
+            "name": "sebastian/version",
+            "version": "2.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/version.git",
+                "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
+                "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+            "homepage": "https://github.com/sebastianbergmann/version",
+            "time": "2016-10-03T07:35:21+00:00"
+        },
+        {
+            "name": "squizlabs/php_codesniffer",
+            "version": "3.5.6",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
+                "reference": "e97627871a7eab2f70e59166072a6b767d5834e0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/e97627871a7eab2f70e59166072a6b767d5834e0",
+                "reference": "e97627871a7eab2f70e59166072a6b767d5834e0",
+                "shasum": ""
+            },
+            "require": {
+                "ext-simplexml": "*",
+                "ext-tokenizer": "*",
+                "ext-xmlwriter": "*",
+                "php": ">=5.4.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
+            },
+            "bin": [
+                "bin/phpcs",
+                "bin/phpcbf"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.x-dev"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Greg Sherwood",
+                    "role": "lead"
+                }
+            ],
+            "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
+            "homepage": "https://github.com/squizlabs/PHP_CodeSniffer",
+            "keywords": [
+                "phpcs",
+                "standards"
+            ],
+            "time": "2020-08-10T04:50:15+00:00"
+        },
+        {
+            "name": "symfony/config",
+            "version": "v4.4.15",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/config.git",
+                "reference": "7c5a1002178a612787c291a4f515f87b19176b61"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/config/zipball/7c5a1002178a612787c291a4f515f87b19176b61",
+                "reference": "7c5a1002178a612787c291a4f515f87b19176b61",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "symfony/filesystem": "^3.4|^4.0|^5.0",
+                "symfony/polyfill-ctype": "~1.8"
+            },
+            "conflict": {
+                "symfony/finder": "<3.4"
+            },
+            "require-dev": {
+                "symfony/event-dispatcher": "^3.4|^4.0|^5.0",
+                "symfony/finder": "^3.4|^4.0|^5.0",
+                "symfony/messenger": "^4.1|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/yaml": "^3.4|^4.0|^5.0"
+            },
+            "suggest": {
+                "symfony/yaml": "To use the yaml reference dumper"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Config\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Config Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-10-02T07:34:48+00:00"
+        },
+        {
+            "name": "symfony/stopwatch",
+            "version": "v4.4.15",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/stopwatch.git",
+                "reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/6f89e19772cf61b3c65bab329fe0e318259fbd91",
+                "reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "symfony/service-contracts": "^1.0|^2"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Stopwatch\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Stopwatch Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:08:58+00:00"
+        },
+        {
+            "name": "webmozart/assert",
+            "version": "1.9.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/webmozart/assert.git",
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.3 || ^7.0 || ^8.0",
+                "symfony/polyfill-ctype": "^1.8"
+            },
+            "conflict": {
+                "phpstan/phpstan": "<0.12.20",
+                "vimeo/psalm": "<3.9.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.36 || ^7.5.13"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Webmozart\\Assert\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@gmail.com"
+                }
+            ],
+            "description": "Assertions to validate method input/output with nice error messages.",
+            "keywords": [
+                "assert",
+                "check",
+                "validate"
+            ],
+            "time": "2020-07-08T17:02:28+00:00"
+        }
+    ],
+    "aliases": [],
+    "minimum-stability": "stable",
+    "stability-flags": [],
+    "prefer-stable": false,
+    "prefer-lowest": false,
+    "platform": {
+        "php": ">=5.5.0"
+    },
+    "platform-dev": [],
+    "platform-overrides": {
+        "php": "7.2.5"
+    },
+    "plugin-api-version": "1.1.0"
+}
diff --git a/vendor/consolidation/robo/.scenarios.lock/install b/vendor/consolidation/robo/.scenarios.lock/install
index 16c69e107c..4d8a777705 100755
--- a/vendor/consolidation/robo/.scenarios.lock/install
+++ b/vendor/consolidation/robo/.scenarios.lock/install
@@ -4,16 +4,16 @@ SCENARIO=$1
 DEPENDENCIES=${2-install}
 
 # Convert the aliases 'highest', 'lowest' and 'lock' to
-# the corresponding composer command to run.
+# the corresponding composer update command to run.
 case $DEPENDENCIES in
   highest)
-    DEPENDENCIES=update
+    UPDATE_COMMAND=update
     ;;
   lowest)
-    DEPENDENCIES='update --prefer-lowest'
+    UPDATE_COMMAND='update --prefer-lowest'
     ;;
   lock|default|"")
-    DEPENDENCIES=install
+    UPDATE_COMMAND=''
     ;;
 esac
 
@@ -48,7 +48,11 @@ echo
 set -ex
 
 composer -n validate --working-dir=$dir --no-check-all --ansi
-composer -n --working-dir=$dir ${DEPENDENCIES} --prefer-dist --no-scripts
+
+if [ ! -z "$UPDATE_COMMAND" ] ; then
+  composer -n --working-dir=$dir ${UPDATE_COMMAND} --prefer-dist --no-scripts
+fi
+composer -n --working-dir=$dir install --prefer-dist
 
 # If called from a CI context, print out some extra information about
 # what we just installed.
diff --git a/vendor/consolidation/robo/.scenarios.lock/symfony2/composer.json b/vendor/consolidation/robo/.scenarios.lock/symfony2/composer.json
index d11ea0fadc..0acc7d2cea 100644
--- a/vendor/consolidation/robo/.scenarios.lock/symfony2/composer.json
+++ b/vendor/consolidation/robo/.scenarios.lock/symfony2/composer.json
@@ -25,35 +25,29 @@
     "require": {
         "symfony/console": "^2.8",
         "php": ">=5.5.0",
-        "league/container": "^2.2",
-        "consolidation/log": "~1",
-        "consolidation/config": "^1.2",
-        "consolidation/annotated-command": "^2.10.2",
-        "consolidation/output-formatters": "^3.1.13",
-        "consolidation/self-update": "^1",
-        "grasmash/yaml-expander": "^1.3",
-        "symfony/finder": "^2.5|^3|^4",
-        "symfony/process": "^2.5|^3|^4",
+        "consolidation/annotated-command": "^2.12.1|^4.1",
+        "consolidation/config": "^1.2.1",
+        "consolidation/log": "^1.1.1|^2",
+        "consolidation/output-formatters": "^3.5.1|^4.1",
+        "consolidation/self-update": "^1.1.5",
+        "grasmash/yaml-expander": "^1.4",
+        "league/container": "^2.4.1",
+        "symfony/event-dispatcher": "^2.5|^3|^4",
         "symfony/filesystem": "^2.5|^3|^4",
-        "symfony/event-dispatcher": "^2.5|^3|^4"
+        "symfony/finder": "^2.5|^3|^4|^5",
+        "symfony/process": "^2.5|^3|^4"
     },
     "require-dev": {
+        "phpunit/phpunit": "^4.8.36",
         "g1a/composer-test-scenarios": "^3",
-        "patchwork/jsqueeze": "~2",
-        "natxet/CssMin": "3.0.4",
+        "natxet/cssmin": "3.0.4",
+        "patchwork/jsqueeze": "^2",
         "pear/archive_tar": "^1.4.4",
-        "codeception/base": "^2.3.7",
-        "codeception/verify": "^0.3.2",
-        "codeception/aspect-mock": "^1|^2.1.1",
-        "goaop/parser-reflection": "^1.1.0",
-        "nikic/php-parser": "^3.1.5",
-        "php-coveralls/php-coveralls": "^1",
-        "phpunit/php-code-coverage": "~2|~4",
-        "squizlabs/php_codesniffer": "^2.8"
+        "squizlabs/php_codesniffer": "^3"
     },
     "scripts": {
         "cs": "./robo sniff",
-        "unit": "./robo test --coverage",
+        "unit": "phpunit",
         "lint": [
             "find src -name '*.php' -print0 | xargs -0 -n1 php -l",
             "find tests/src -name '*.php' -print0 | xargs -0 -n1 php -l"
@@ -77,7 +71,7 @@
     },
     "extra": {
         "branch-alias": {
-            "dev-master": "2.x-dev"
+            "dev-master": "1.x-dev"
         }
     },
     "suggest": {
diff --git a/vendor/consolidation/robo/.scenarios.lock/symfony4/composer.json b/vendor/consolidation/robo/.scenarios.lock/symfony4/composer.json
index e09d66c9c3..afd02904f5 100644
--- a/vendor/consolidation/robo/.scenarios.lock/symfony4/composer.json
+++ b/vendor/consolidation/robo/.scenarios.lock/symfony4/composer.json
@@ -25,36 +25,30 @@
     "require": {
         "symfony/console": "^4",
         "php": ">=5.5.0",
-        "league/container": "^2.2",
-        "consolidation/log": "~1",
-        "consolidation/config": "^1.2",
-        "consolidation/annotated-command": "^2.10.2",
-        "consolidation/output-formatters": "^3.1.13",
-        "consolidation/self-update": "^1",
-        "grasmash/yaml-expander": "^1.3",
-        "symfony/finder": "^2.5|^3|^4",
-        "symfony/process": "^2.5|^3|^4",
+        "consolidation/annotated-command": "^2.12.1|^4.1",
+        "consolidation/config": "^1.2.1",
+        "consolidation/log": "^1.1.1|^2",
+        "consolidation/output-formatters": "^3.5.1|^4.1",
+        "consolidation/self-update": "^1.1.5",
+        "grasmash/yaml-expander": "^1.4",
+        "league/container": "^2.4.1",
+        "symfony/event-dispatcher": "^2.5|^3|^4",
         "symfony/filesystem": "^2.5|^3|^4",
-        "symfony/event-dispatcher": "^2.5|^3|^4"
+        "symfony/finder": "^2.5|^3|^4|^5",
+        "symfony/process": "^2.5|^3|^4"
     },
     "require-dev": {
         "g1a/composer-test-scenarios": "^3",
-        "patchwork/jsqueeze": "~2",
-        "natxet/CssMin": "3.0.4",
+        "natxet/cssmin": "3.0.4",
+        "patchwork/jsqueeze": "^2",
         "pear/archive_tar": "^1.4.4",
-        "codeception/base": "^2.3.7",
-        "goaop/framework": "~2.1.2",
-        "codeception/verify": "^0.3.2",
-        "codeception/aspect-mock": "^1|^2.1.1",
-        "goaop/parser-reflection": "^1.1.0",
-        "nikic/php-parser": "^3.1.5",
         "php-coveralls/php-coveralls": "^1",
-        "phpunit/php-code-coverage": "~2|~4",
-        "squizlabs/php_codesniffer": "^2.8"
+        "phpunit/phpunit": "^5.7.27",
+        "squizlabs/php_codesniffer": "^3"
     },
     "scripts": {
         "cs": "./robo sniff",
-        "unit": "./robo test --coverage",
+        "unit": "phpunit",
         "lint": [
             "find src -name '*.php' -print0 | xargs -0 -n1 php -l",
             "find tests/src -name '*.php' -print0 | xargs -0 -n1 php -l"
@@ -78,7 +72,7 @@
     },
     "extra": {
         "branch-alias": {
-            "dev-master": "2.x-dev"
+            "dev-master": "1.x-dev"
         }
     },
     "suggest": {
diff --git a/vendor/consolidation/robo/.scenarios.lock/symfony4/composer.lock b/vendor/consolidation/robo/.scenarios.lock/symfony4/composer.lock
index 1e19800b3f..a3341115b2 100644
--- a/vendor/consolidation/robo/.scenarios.lock/symfony4/composer.lock
+++ b/vendor/consolidation/robo/.scenarios.lock/symfony4/composer.lock
@@ -4,35 +4,35 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "1a613bb086d612b492b42f2bc2a3b56a",
+    "content-hash": "112ff582ad73faeb2172d29338e7d237",
     "packages": [
         {
             "name": "consolidation/annotated-command",
-            "version": "2.11.2",
+            "version": "4.2.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/annotated-command.git",
-                "reference": "004af26391cd7d1cd04b0ac736dc1324d1b4f572"
+                "reference": "4b596872f24c39d9c04d7b3adb6bc51baa1f2fd5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/004af26391cd7d1cd04b0ac736dc1324d1b4f572",
-                "reference": "004af26391cd7d1cd04b0ac736dc1324d1b4f572",
+                "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/4b596872f24c39d9c04d7b3adb6bc51baa1f2fd5",
+                "reference": "4b596872f24c39d9c04d7b3adb6bc51baa1f2fd5",
                 "shasum": ""
             },
             "require": {
-                "consolidation/output-formatters": "^3.4",
-                "php": ">=5.4.5",
-                "psr/log": "^1",
-                "symfony/console": "^2.8|^3|^4",
-                "symfony/event-dispatcher": "^2.5|^3|^4",
-                "symfony/finder": "^2.5|^3|^4"
+                "consolidation/output-formatters": "^4.1.1",
+                "php": ">=7.1.3",
+                "psr/log": "^1|^2",
+                "symfony/console": "^4.4.8|^5",
+                "symfony/event-dispatcher": "^4.4.8|^5",
+                "symfony/finder": "^4.4.8|^5"
             },
             "require-dev": {
                 "g1a/composer-test-scenarios": "^3",
-                "php-coveralls/php-coveralls": "^1",
+                "php-coveralls/php-coveralls": "^2.2",
                 "phpunit/phpunit": "^6",
-                "squizlabs/php_codesniffer": "^2.7"
+                "squizlabs/php_codesniffer": "^3"
             },
             "type": "library",
             "extra": {
@@ -46,42 +46,10 @@
                                 "php": "7.1.3"
                             }
                         }
-                    },
-                    "symfony2": {
-                        "require": {
-                            "symfony/console": "^2.8"
-                        },
-                        "require-dev": {
-                            "phpunit/phpunit": "^4.8.36"
-                        },
-                        "remove": [
-                            "php-coveralls/php-coveralls"
-                        ],
-                        "config": {
-                            "platform": {
-                                "php": "5.4.8"
-                            }
-                        },
-                        "scenario-options": {
-                            "create-lockfile": "false"
-                        }
-                    },
-                    "phpunit4": {
-                        "require-dev": {
-                            "phpunit/phpunit": "^4.8.36"
-                        },
-                        "remove": [
-                            "php-coveralls/php-coveralls"
-                        ],
-                        "config": {
-                            "platform": {
-                                "php": "5.4.8"
-                            }
-                        }
                     }
                 },
                 "branch-alias": {
-                    "dev-master": "2.x-dev"
+                    "dev-main": "4.x-dev"
                 }
             },
             "autoload": {
@@ -100,20 +68,20 @@
                 }
             ],
             "description": "Initialize Symfony Console commands from annotated command class methods.",
-            "time": "2019-02-02T02:29:53+00:00"
+            "time": "2020-10-03T14:28:42+00:00"
         },
         {
             "name": "consolidation/config",
-            "version": "1.2.0",
+            "version": "1.2.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/config.git",
-                "reference": "11ab7ecd19131ce084390171b9c070eedecf7dab"
+                "reference": "cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/config/zipball/11ab7ecd19131ce084390171b9c070eedecf7dab",
-                "reference": "11ab7ecd19131ce084390171b9c070eedecf7dab",
+                "url": "https://api.github.com/repos/consolidation/config/zipball/cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1",
+                "reference": "cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1",
                 "shasum": ""
             },
             "require": {
@@ -181,78 +149,49 @@
                 }
             ],
             "description": "Provide configuration services for a commandline tool.",
-            "time": "2019-02-16T01:18:47+00:00"
+            "time": "2019-03-03T19:37:04+00:00"
         },
         {
             "name": "consolidation/log",
-            "version": "1.1.1",
+            "version": "2.0.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/log.git",
-                "reference": "b2e887325ee90abc96b0a8b7b474cd9e7c896e3a"
+                "reference": "ba0bf6af1fbd09ed4dc18fc2f27b12ceff487cbf"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/log/zipball/b2e887325ee90abc96b0a8b7b474cd9e7c896e3a",
-                "reference": "b2e887325ee90abc96b0a8b7b474cd9e7c896e3a",
+                "url": "https://api.github.com/repos/consolidation/log/zipball/ba0bf6af1fbd09ed4dc18fc2f27b12ceff487cbf",
+                "reference": "ba0bf6af1fbd09ed4dc18fc2f27b12ceff487cbf",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.4.5",
+                "php": ">=7.1.3",
                 "psr/log": "^1.0",
-                "symfony/console": "^2.8|^3|^4"
+                "symfony/console": "^4|^5"
             },
             "require-dev": {
                 "g1a/composer-test-scenarios": "^3",
-                "php-coveralls/php-coveralls": "^1",
+                "php-coveralls/php-coveralls": "^2.2",
                 "phpunit/phpunit": "^6",
-                "squizlabs/php_codesniffer": "^2"
+                "squizlabs/php_codesniffer": "^3"
             },
             "type": "library",
             "extra": {
                 "scenarios": {
                     "symfony4": {
-                        "require": {
-                            "symfony/console": "^4.0"
-                        },
-                        "config": {
-                            "platform": {
-                                "php": "7.1.3"
-                            }
-                        }
-                    },
-                    "symfony2": {
-                        "require": {
-                            "symfony/console": "^2.8"
-                        },
                         "require-dev": {
-                            "phpunit/phpunit": "^4.8.36"
-                        },
-                        "remove": [
-                            "php-coveralls/php-coveralls"
-                        ],
-                        "config": {
-                            "platform": {
-                                "php": "5.4.8"
-                            }
-                        }
-                    },
-                    "phpunit4": {
-                        "require-dev": {
-                            "phpunit/phpunit": "^4.8.36"
+                            "symfony/console": "^4"
                         },
-                        "remove": [
-                            "php-coveralls/php-coveralls"
-                        ],
                         "config": {
                             "platform": {
-                                "php": "5.4.8"
+                                "php": "7.1.3"
                             }
                         }
                     }
                 },
                 "branch-alias": {
-                    "dev-master": "1.x-dev"
+                    "dev-master": "2.x-dev"
                 }
             },
             "autoload": {
@@ -271,44 +210,55 @@
                 }
             ],
             "description": "Improved Psr-3 / Psr\\Log logger based on Symfony Console components.",
-            "time": "2019-01-01T17:30:51+00:00"
+            "time": "2020-05-27T17:06:13+00:00"
         },
         {
             "name": "consolidation/output-formatters",
-            "version": "3.4.0",
+            "version": "4.1.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/output-formatters.git",
-                "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19"
+                "reference": "9deeddd6a916d0a756b216a8b40ce1016e17c0b9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/a942680232094c4a5b21c0b7e54c20cce623ae19",
-                "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19",
+                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/9deeddd6a916d0a756b216a8b40ce1016e17c0b9",
+                "reference": "9deeddd6a916d0a756b216a8b40ce1016e17c0b9",
                 "shasum": ""
             },
             "require": {
                 "dflydev/dot-access-data": "^1.1.0",
-                "php": ">=5.4.0",
-                "symfony/console": "^2.8|^3|^4",
-                "symfony/finder": "^2.5|^3|^4"
+                "php": ">=7.1.3",
+                "symfony/console": "^4|^5",
+                "symfony/finder": "^4|^5"
             },
             "require-dev": {
-                "g1a/composer-test-scenarios": "^2",
-                "phpunit/phpunit": "^5.7.27",
-                "satooshi/php-coveralls": "^2",
-                "squizlabs/php_codesniffer": "^2.7",
-                "symfony/console": "3.2.3",
-                "symfony/var-dumper": "^2.8|^3|^4",
-                "victorjonsson/markdowndocs": "^1.3"
+                "g1a/composer-test-scenarios": "^3",
+                "php-coveralls/php-coveralls": "^2.2",
+                "phpunit/phpunit": "^6",
+                "squizlabs/php_codesniffer": "^3",
+                "symfony/var-dumper": "^4",
+                "symfony/yaml": "^4"
             },
             "suggest": {
                 "symfony/var-dumper": "For using the var_dump formatter"
             },
             "type": "library",
             "extra": {
+                "scenarios": {
+                    "symfony4": {
+                        "require": {
+                            "symfony/console": "^4.0"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.1.3"
+                            }
+                        }
+                    }
+                },
                 "branch-alias": {
-                    "dev-master": "3.x-dev"
+                    "dev-master": "4.x-dev"
                 }
             },
             "autoload": {
@@ -327,26 +277,26 @@
                 }
             ],
             "description": "Format text by applying transformations provided by plug-in formatters.",
-            "time": "2018-10-19T22:35:38+00:00"
+            "time": "2020-05-27T20:51:17+00:00"
         },
         {
             "name": "consolidation/self-update",
-            "version": "1.1.5",
+            "version": "1.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/self-update.git",
-                "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54"
+                "reference": "dba6b2c0708f20fa3ba8008a2353b637578849b4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/self-update/zipball/a1c273b14ce334789825a09d06d4c87c0a02ad54",
-                "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54",
+                "url": "https://api.github.com/repos/consolidation/self-update/zipball/dba6b2c0708f20fa3ba8008a2353b637578849b4",
+                "reference": "dba6b2c0708f20fa3ba8008a2353b637578849b4",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.5.0",
-                "symfony/console": "^2.8|^3|^4",
-                "symfony/filesystem": "^2.5|^3|^4"
+                "symfony/console": "^2.8|^3|^4|^5",
+                "symfony/filesystem": "^2.5|^3|^4|^5"
             },
             "bin": [
                 "scripts/release"
@@ -367,17 +317,17 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Greg Anderson",
-                    "email": "greg.1.anderson@greenknowe.org"
-                },
                 {
                     "name": "Alexander Menk",
                     "email": "menk@mestrona.net"
+                },
+                {
+                    "name": "Greg Anderson",
+                    "email": "greg.1.anderson@greenknowe.org"
                 }
             ],
             "description": "Provides a self:update command for Symfony Console applications.",
-            "time": "2018-10-28T01:52:03+00:00"
+            "time": "2020-04-13T02:49:20+00:00"
         },
         {
             "name": "container-interop/container-interop",
@@ -408,6 +358,7 @@
             ],
             "description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
             "homepage": "https://github.com/container-interop/container-interop",
+            "abandoned": "psr/container",
             "time": "2017-02-14T19:40:03+00:00"
         },
         {
@@ -680,16 +631,16 @@
         },
         {
             "name": "psr/log",
-            "version": "1.1.0",
+            "version": "1.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-fig/log.git",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
                 "shasum": ""
             },
             "require": {
@@ -698,7 +649,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.1.x-dev"
                 }
             },
             "autoload": {
@@ -723,29 +674,33 @@
                 "psr",
                 "psr-3"
             ],
-            "time": "2018-11-20T15:27:04+00:00"
+            "time": "2020-03-23T09:12:05+00:00"
         },
         {
             "name": "symfony/console",
-            "version": "v4.2.3",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "1f0ad51dfde4da8a6070f06adc58b4e37cbb37a4"
+                "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/1f0ad51dfde4da8a6070f06adc58b4e37cbb37a4",
-                "reference": "1f0ad51dfde4da8a6070f06adc58b4e37cbb37a4",
+                "url": "https://api.github.com/repos/symfony/console/zipball/90933b39c7b312fc3ceaa1ddeac7eb48cb953124",
+                "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
-                "symfony/contracts": "^1.0",
-                "symfony/polyfill-mbstring": "~1.0"
+                "php": ">=7.1.3",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/polyfill-php73": "^1.8",
+                "symfony/polyfill-php80": "^1.15",
+                "symfony/service-contracts": "^1.1|^2"
             },
             "conflict": {
                 "symfony/dependency-injection": "<3.4",
+                "symfony/event-dispatcher": "<4.3|>=5",
+                "symfony/lock": "<4.4",
                 "symfony/process": "<3.3"
             },
             "provide": {
@@ -753,11 +708,12 @@
             },
             "require-dev": {
                 "psr/log": "~1.0",
-                "symfony/config": "~3.4|~4.0",
-                "symfony/dependency-injection": "~3.4|~4.0",
-                "symfony/event-dispatcher": "~3.4|~4.0",
-                "symfony/lock": "~3.4|~4.0",
-                "symfony/process": "~3.4|~4.0"
+                "symfony/config": "^3.4|^4.0|^5.0",
+                "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+                "symfony/event-dispatcher": "^4.3",
+                "symfony/lock": "^4.4|^5.0",
+                "symfony/process": "^3.4|^4.0|^5.0",
+                "symfony/var-dumper": "^4.3|^5.0"
             },
             "suggest": {
                 "psr/log": "For using the console logger",
@@ -768,7 +724,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.2-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -795,48 +751,73 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-25T14:35:16+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-15T07:58:55+00:00"
         },
         {
-            "name": "symfony/contracts",
-            "version": "v1.0.2",
+            "name": "symfony/event-dispatcher",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/contracts.git",
-                "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf"
+                "url": "https://github.com/symfony/event-dispatcher.git",
+                "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/contracts/zipball/1aa7ab2429c3d594dd70689604b5cf7421254cdf",
-                "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e17bb5e0663dc725f7cdcafc932132735b4725cd",
+                "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3"
+                "php": ">=7.1.3",
+                "symfony/event-dispatcher-contracts": "^1.1"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<3.4"
+            },
+            "provide": {
+                "psr/event-dispatcher-implementation": "1.0",
+                "symfony/event-dispatcher-implementation": "1.1"
             },
             "require-dev": {
-                "psr/cache": "^1.0",
-                "psr/container": "^1.0"
+                "psr/log": "~1.0",
+                "symfony/config": "^3.4|^4.0|^5.0",
+                "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+                "symfony/error-handler": "~3.4|~4.4",
+                "symfony/expression-language": "^3.4|^4.0|^5.0",
+                "symfony/http-foundation": "^3.4|^4.0|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/stopwatch": "^3.4|^4.0|^5.0"
             },
             "suggest": {
-                "psr/cache": "When using the Cache contracts",
-                "psr/container": "When using the Service contracts",
-                "symfony/cache-contracts-implementation": "",
-                "symfony/service-contracts-implementation": "",
-                "symfony/translation-contracts-implementation": ""
+                "symfony/dependency-injection": "",
+                "symfony/http-kernel": ""
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Contracts\\": ""
+                    "Symfony\\Component\\EventDispatcher\\": ""
                 },
                 "exclude-from-classmap": [
-                    "**/Tests/"
+                    "/Tests/"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -845,71 +826,67 @@
             ],
             "authors": [
                 {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
                 },
                 {
                     "name": "Symfony Community",
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "A set of abstractions extracted out of the Symfony components",
+            "description": "Symfony EventDispatcher Component",
             "homepage": "https://symfony.com",
-            "keywords": [
-                "abstractions",
-                "contracts",
-                "decoupling",
-                "interfaces",
-                "interoperability",
-                "standards"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
             ],
-            "time": "2018-12-05T08:06:11+00:00"
+            "time": "2020-09-18T14:07:46+00:00"
         },
         {
-            "name": "symfony/event-dispatcher",
-            "version": "v4.2.3",
+            "name": "symfony/event-dispatcher-contracts",
+            "version": "v1.1.9",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "bd09ad265cd50b2b9d09d65ce6aba2d29bc81fe1"
+                "url": "https://github.com/symfony/event-dispatcher-contracts.git",
+                "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/bd09ad265cd50b2b9d09d65ce6aba2d29bc81fe1",
-                "reference": "bd09ad265cd50b2b9d09d65ce6aba2d29bc81fe1",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7",
+                "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
-                "symfony/contracts": "^1.0"
-            },
-            "conflict": {
-                "symfony/dependency-injection": "<3.4"
-            },
-            "require-dev": {
-                "psr/log": "~1.0",
-                "symfony/config": "~3.4|~4.0",
-                "symfony/dependency-injection": "~3.4|~4.0",
-                "symfony/expression-language": "~3.4|~4.0",
-                "symfony/stopwatch": "~3.4|~4.0"
+                "php": ">=7.1.3"
             },
             "suggest": {
-                "symfony/dependency-injection": "",
-                "symfony/http-kernel": ""
+                "psr/event-dispatcher": "",
+                "symfony/event-dispatcher-implementation": ""
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.2-dev"
+                    "dev-master": "1.1-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\EventDispatcher\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
+                    "Symfony\\Contracts\\EventDispatcher\\": ""
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -917,40 +894,62 @@
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
                 },
                 {
                     "name": "Symfony Community",
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony EventDispatcher Component",
+            "description": "Generic abstractions related to dispatching event",
             "homepage": "https://symfony.com",
-            "time": "2019-01-16T20:35:37+00:00"
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-06T13:19:58+00:00"
         },
         {
             "name": "symfony/filesystem",
-            "version": "v4.2.3",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/filesystem.git",
-                "reference": "7c16ebc2629827d4ec915a52ac809768d060a4ee"
+                "reference": "ebc51494739d3b081ea543ed7c462fa73a4f74db"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/7c16ebc2629827d4ec915a52ac809768d060a4ee",
-                "reference": "7c16ebc2629827d4ec915a52ac809768d060a4ee",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/ebc51494739d3b081ea543ed7c462fa73a4f74db",
+                "reference": "ebc51494739d3b081ea543ed7c462fa73a4f74db",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
+                "php": ">=7.1.3",
                 "symfony/polyfill-ctype": "~1.8"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.2-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -977,29 +976,43 @@
             ],
             "description": "Symfony Filesystem Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-16T20:35:37+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-27T13:54:16+00:00"
         },
         {
             "name": "symfony/finder",
-            "version": "v3.4.22",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "7c0c627220308928e958a87c293108e5891cde1d"
+                "reference": "60d08560f9aa72997c44077c40d47aa28a963230"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/7c0c627220308928e958a87c293108e5891cde1d",
-                "reference": "7c0c627220308928e958a87c293108e5891cde1d",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/60d08560f9aa72997c44077c40d47aa28a963230",
+                "reference": "60d08560f9aa72997c44077c40d47aa28a963230",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8"
+                "php": ">=7.1.3"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -1026,20 +1039,34 @@
             ],
             "description": "Symfony Finder Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-16T13:43:35+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-10-02T07:34:48+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19"
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454",
                 "shasum": ""
             },
             "require": {
@@ -1051,7 +1078,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -1067,13 +1098,13 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                },
                 {
                     "name": "Gert de Pagter",
                     "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony polyfill for ctype functions",
@@ -1084,20 +1115,34 @@
                 "polyfill",
                 "portable"
             ],
-            "time": "2018-08-06T14:22:27+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
             "name": "symfony/polyfill-mbstring",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494"
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a",
                 "shasum": ""
             },
             "require": {
@@ -1109,7 +1154,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -1143,37 +1192,58 @@
                 "portable",
                 "shim"
             ],
-            "time": "2018-09-21T13:07:52+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
-            "name": "symfony/process",
-            "version": "v4.2.3",
+            "name": "symfony/polyfill-php73",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/process.git",
-                "reference": "6c05edb11fbeff9e2b324b4270ecb17911a8b7ad"
+                "url": "https://github.com/symfony/polyfill-php73.git",
+                "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/6c05edb11fbeff9e2b324b4270ecb17911a8b7ad",
-                "reference": "6c05edb11fbeff9e2b324b4270ecb17911a8b7ad",
+                "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
+                "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3"
+                "php": ">=5.3.3"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.2-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\Process\\": ""
+                    "Symfony\\Polyfill\\Php73\\": ""
                 },
-                "exclude-from-classmap": [
-                    "/Tests/"
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1182,57 +1252,74 @@
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
                 },
                 {
                     "name": "Symfony Community",
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony Process Component",
+            "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
             "homepage": "https://symfony.com",
-            "time": "2019-01-24T22:05:03+00:00"
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
-            "name": "symfony/yaml",
-            "version": "v4.2.3",
+            "name": "symfony/polyfill-php80",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/yaml.git",
-                "reference": "d461670ee145092b7e2a56c1da7118f19cadadb0"
+                "url": "https://github.com/symfony/polyfill-php80.git",
+                "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/d461670ee145092b7e2a56c1da7118f19cadadb0",
-                "reference": "d461670ee145092b7e2a56c1da7118f19cadadb0",
+                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/d87d5766cbf48d72388a9f6b85f280c8ad51f981",
+                "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
-                "symfony/polyfill-ctype": "~1.8"
-            },
-            "conflict": {
-                "symfony/console": "<3.4"
-            },
-            "require-dev": {
-                "symfony/console": "~3.4|~4.0"
-            },
-            "suggest": {
-                "symfony/console": "For validating YAML files using the lint command"
+                "php": ">=7.0.8"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.2-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\Yaml\\": ""
+                    "Symfony\\Polyfill\\Php80\\": ""
                 },
-                "exclude-from-classmap": [
-                    "/Tests/"
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1241,44 +1328,58 @@
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "name": "Ion Bazan",
+                    "email": "ion.bazan@gmail.com"
+                },
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
                 },
                 {
                     "name": "Symfony Community",
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony Yaml Component",
+            "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
             "homepage": "https://symfony.com",
-            "time": "2019-01-16T20:35:37+00:00"
-        }
-    ],
-    "packages-dev": [
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
         {
-            "name": "behat/gherkin",
-            "version": "v4.6.0",
+            "name": "symfony/process",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
-                "url": "https://github.com/Behat/Gherkin.git",
-                "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07"
+                "url": "https://github.com/symfony/process.git",
+                "reference": "9b887acc522935f77555ae8813495958c7771ba7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Behat/Gherkin/zipball/ab0a02ea14893860bca00f225f5621d351a3ad07",
-                "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07",
+                "url": "https://api.github.com/repos/symfony/process/zipball/9b887acc522935f77555ae8813495958c7771ba7",
+                "reference": "9b887acc522935f77555ae8813495958c7771ba7",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.1"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.5|~5",
-                "symfony/phpunit-bridge": "~2.7|~3|~4",
-                "symfony/yaml": "~2.3|~3|~4"
-            },
-            "suggest": {
-                "symfony/yaml": "If you want to parse features, represented in YAML files"
+                "php": ">=7.1.3"
             },
             "type": "library",
             "extra": {
@@ -1287,9 +1388,12 @@
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Behat\\Gherkin": "src/"
-                }
+                "psr-4": {
+                    "Symfony\\Component\\Process\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -1297,132 +1401,66 @@
             ],
             "authors": [
                 {
-                    "name": "Konstantin Kudryashov",
-                    "email": "ever.zet@gmail.com",
-                    "homepage": "http://everzet.com"
-                }
-            ],
-            "description": "Gherkin DSL parser for PHP 5.3",
-            "homepage": "http://behat.org/",
-            "keywords": [
-                "BDD",
-                "Behat",
-                "Cucumber",
-                "DSL",
-                "gherkin",
-                "parser"
-            ],
-            "time": "2019-01-16T14:22:17+00:00"
-        },
-        {
-            "name": "codeception/aspect-mock",
-            "version": "2.1.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Codeception/AspectMock.git",
-                "reference": "bf3c000599c0dc75ecb52e19dee2b8ed294cf7ba"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Codeception/AspectMock/zipball/bf3c000599c0dc75ecb52e19dee2b8ed294cf7ba",
-                "reference": "bf3c000599c0dc75ecb52e19dee2b8ed294cf7ba",
-                "shasum": ""
-            },
-            "require": {
-                "goaop/framework": "^2.0.0",
-                "php": ">=5.6.0",
-                "symfony/finder": "~2.4|~3.0"
-            },
-            "require-dev": {
-                "codeception/base": "~2.1",
-                "codeception/specify": "~0.3",
-                "codeception/verify": "~0.2"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-0": {
-                    "AspectMock": "src/"
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
             ],
-            "authors": [
+            "description": "Symfony Process Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
                 {
-                    "name": "Michael Bodnarchuk",
-                    "email": "davert@codeception.com"
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
                 }
             ],
-            "description": "Experimental Mocking Framework powered by Aspects",
-            "time": "2017-10-24T10:20:17+00:00"
+            "time": "2020-09-02T16:08:58+00:00"
         },
         {
-            "name": "codeception/base",
-            "version": "2.5.3",
+            "name": "symfony/service-contracts",
+            "version": "v1.1.9",
             "source": {
                 "type": "git",
-                "url": "https://github.com/Codeception/base.git",
-                "reference": "ceff0b4fee4846b6bd8b5a37abbbb1acd6e78f58"
+                "url": "https://github.com/symfony/service-contracts.git",
+                "reference": "b776d18b303a39f56c63747bcb977ad4b27aca26"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Codeception/base/zipball/ceff0b4fee4846b6bd8b5a37abbbb1acd6e78f58",
-                "reference": "ceff0b4fee4846b6bd8b5a37abbbb1acd6e78f58",
+                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/b776d18b303a39f56c63747bcb977ad4b27aca26",
+                "reference": "b776d18b303a39f56c63747bcb977ad4b27aca26",
                 "shasum": ""
             },
             "require": {
-                "behat/gherkin": "^4.4.0",
-                "codeception/phpunit-wrapper": "^6.0.9|^7.0.6",
-                "codeception/stub": "^2.0",
-                "ext-curl": "*",
-                "ext-json": "*",
-                "ext-mbstring": "*",
-                "guzzlehttp/psr7": "~1.0",
-                "php": ">=5.6.0 <8.0",
-                "symfony/browser-kit": ">=2.7 <5.0",
-                "symfony/console": ">=2.7 <5.0",
-                "symfony/css-selector": ">=2.7 <5.0",
-                "symfony/dom-crawler": ">=2.7 <5.0",
-                "symfony/event-dispatcher": ">=2.7 <5.0",
-                "symfony/finder": ">=2.7 <5.0",
-                "symfony/yaml": ">=2.7 <5.0"
-            },
-            "require-dev": {
-                "codeception/specify": "~0.3",
-                "facebook/graph-sdk": "~5.3",
-                "flow/jsonpath": "~0.2",
-                "monolog/monolog": "~1.8",
-                "pda/pheanstalk": "~3.0",
-                "php-amqplib/php-amqplib": "~2.4",
-                "predis/predis": "^1.0",
-                "squizlabs/php_codesniffer": "~2.0",
-                "symfony/process": ">=2.7 <5.0",
-                "vlucas/phpdotenv": "^3.0"
+                "php": ">=7.1.3",
+                "psr/container": "^1.0"
             },
             "suggest": {
-                "aws/aws-sdk-php": "For using AWS Auth in REST module and Queue module",
-                "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests",
-                "codeception/specify": "BDD-style code blocks",
-                "codeception/verify": "BDD-style assertions",
-                "flow/jsonpath": "For using JSONPath in REST module",
-                "league/factory-muffin": "For DataFactory module",
-                "league/factory-muffin-faker": "For Faker support in DataFactory module",
-                "phpseclib/phpseclib": "for SFTP option in FTP Module",
-                "stecman/symfony-console-completion": "For BASH autocompletion",
-                "symfony/phpunit-bridge": "For phpunit-bridge support"
+                "symfony/service-implementation": ""
             },
-            "bin": [
-                "codecept"
-            ],
             "type": "library",
             "extra": {
-                "branch-alias": []
+                "branch-alias": {
+                    "dev-master": "1.1-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
+                }
             },
             "autoload": {
                 "psr-4": {
-                    "Codeception\\": "src/Codeception",
-                    "Codeception\\Extension\\": "ext"
+                    "Symfony\\Contracts\\Service\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1431,166 +1469,80 @@
             ],
             "authors": [
                 {
-                    "name": "Michael Bodnarchuk",
-                    "email": "davert@mail.ua",
-                    "homepage": "http://codegyre.com"
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "BDD-style testing framework",
-            "homepage": "http://codeception.com/",
+            "description": "Generic abstractions related to writing services",
+            "homepage": "https://symfony.com",
             "keywords": [
-                "BDD",
-                "TDD",
-                "acceptance testing",
-                "functional testing",
-                "unit testing"
-            ],
-            "time": "2019-02-02T16:29:38+00:00"
-        },
-        {
-            "name": "codeception/phpunit-wrapper",
-            "version": "6.0.14",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Codeception/phpunit-wrapper.git",
-                "reference": "3b64beb0af3e63145af982e64718ab80d2417739"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/3b64beb0af3e63145af982e64718ab80d2417739",
-                "reference": "3b64beb0af3e63145af982e64718ab80d2417739",
-                "shasum": ""
-            },
-            "require": {
-                "phpunit/php-code-coverage": ">=4.0.4 <6.0",
-                "phpunit/phpunit": ">=5.7.27 <6.5.13",
-                "sebastian/comparator": ">=1.2.4 <3.0",
-                "sebastian/diff": ">=1.4 <4.0"
-            },
-            "replace": {
-                "codeception/phpunit-wrapper": "*"
-            },
-            "require-dev": {
-                "codeception/specify": "*",
-                "vlucas/phpdotenv": "^2.4"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Codeception\\PHPUnit\\": "src\\"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
             ],
-            "authors": [
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
                 {
-                    "name": "Davert",
-                    "email": "davert.php@resend.cc"
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
                 }
             ],
-            "description": "PHPUnit classes used by Codeception",
-            "time": "2019-01-13T10:35:17+00:00"
+            "time": "2020-07-06T13:19:58+00:00"
         },
         {
-            "name": "codeception/stub",
-            "version": "2.0.4",
+            "name": "symfony/yaml",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
-                "url": "https://github.com/Codeception/Stub.git",
-                "reference": "f50bc271f392a2836ff80690ce0c058efe1ae03e"
+                "url": "https://github.com/symfony/yaml.git",
+                "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Codeception/Stub/zipball/f50bc271f392a2836ff80690ce0c058efe1ae03e",
-                "reference": "f50bc271f392a2836ff80690ce0c058efe1ae03e",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/c7885964b1eceb70b0981556d0a9b01d2d97c8d1",
+                "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1",
                 "shasum": ""
             },
             "require": {
-                "phpunit/phpunit": ">=4.8 <8.0"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Codeception\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "Flexible Stub wrapper for PHPUnit's Mock Builder",
-            "time": "2018-07-26T11:55:37+00:00"
-        },
-        {
-            "name": "codeception/verify",
-            "version": "0.3.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Codeception/Verify.git",
-                "reference": "5d649dda453cd814dadc4bb053060cd2c6bb4b4c"
+                "php": ">=7.1.3",
+                "symfony/polyfill-ctype": "~1.8"
             },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Codeception/Verify/zipball/5d649dda453cd814dadc4bb053060cd2c6bb4b4c",
-                "reference": "5d649dda453cd814dadc4bb053060cd2c6bb4b4c",
-                "shasum": ""
+            "conflict": {
+                "symfony/console": "<3.4"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.0"
-            },
-            "type": "library",
-            "autoload": {
-                "files": [
-                    "src/Codeception/function.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Michael Bodnarchuk",
-                    "email": "davert.php@mailican.com"
-                }
-            ],
-            "description": "BDD assertion library for PHPUnit",
-            "time": "2017-01-09T10:58:51+00:00"
-        },
-        {
-            "name": "doctrine/annotations",
-            "version": "v1.6.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/annotations.git",
-                "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5"
+                "symfony/console": "^3.4|^4.0|^5.0"
             },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/annotations/zipball/c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5",
-                "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/lexer": "1.*",
-                "php": "^7.1"
-            },
-            "require-dev": {
-                "doctrine/cache": "1.*",
-                "phpunit/phpunit": "^6.4"
+            "suggest": {
+                "symfony/console": "For validating YAML files using the lint command"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.6.x-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
-                }
+                    "Symfony\\Component\\Yaml\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -1598,58 +1550,59 @@
             ],
             "authors": [
                 {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
                 },
                 {
-                    "name": "Benjamin Eberlei",
-                    "email": "kontakt@beberlei.de"
-                },
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Yaml Component",
+            "homepage": "https://symfony.com",
+            "funding": [
                 {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
                 },
                 {
-                    "name": "Jonathan Wage",
-                    "email": "jonwage@gmail.com"
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
                 },
                 {
-                    "name": "Johannes Schmitt",
-                    "email": "schmittjoh@gmail.com"
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
                 }
             ],
-            "description": "Docblock Annotations Parser",
-            "homepage": "http://www.doctrine-project.org",
-            "keywords": [
-                "annotations",
-                "docblock",
-                "parser"
-            ],
-            "time": "2017-12-06T07:11:42+00:00"
-        },
+            "time": "2020-09-27T03:36:23+00:00"
+        }
+    ],
+    "packages-dev": [
         {
             "name": "doctrine/instantiator",
-            "version": "1.1.0",
+            "version": "1.3.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/instantiator.git",
-                "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda"
+                "reference": "f350df0268e904597e3bd9c4685c53e0e333feea"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda",
-                "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda",
+                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea",
+                "reference": "f350df0268e904597e3bd9c4685c53e0e333feea",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1"
+                "php": "^7.1 || ^8.0"
             },
             "require-dev": {
-                "athletic/athletic": "~0.1.8",
+                "doctrine/coding-standard": "^6.0",
                 "ext-pdo": "*",
                 "ext-phar": "*",
-                "phpunit/phpunit": "^6.2.3",
-                "squizlabs/php_codesniffer": "^3.0.2"
+                "phpbench/phpbench": "^0.13",
+                "phpstan/phpstan-phpunit": "^0.11",
+                "phpstan/phpstan-shim": "^0.11",
+                "phpunit/phpunit": "^7.0"
             },
             "type": "library",
             "extra": {
@@ -1674,90 +1627,50 @@
                 }
             ],
             "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
-            "homepage": "https://github.com/doctrine/instantiator",
+            "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
             "keywords": [
                 "constructor",
                 "instantiate"
             ],
-            "time": "2017-07-22T11:58:36+00:00"
-        },
-        {
-            "name": "doctrine/lexer",
-            "version": "v1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/lexer.git",
-                "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c",
-                "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.2"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Doctrine\\Common\\Lexer\\": "lib/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
+            "funding": [
                 {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
+                    "type": "custom"
                 },
                 {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
+                    "url": "https://www.patreon.com/phpdoctrine",
+                    "type": "patreon"
                 },
                 {
-                    "name": "Johannes Schmitt",
-                    "email": "schmittjoh@gmail.com"
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
+                    "type": "tidelift"
                 }
             ],
-            "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.",
-            "homepage": "http://www.doctrine-project.org",
-            "keywords": [
-                "lexer",
-                "parser"
-            ],
-            "time": "2014-09-09T13:34:57+00:00"
+            "time": "2020-05-29T17:27:14+00:00"
         },
         {
             "name": "g1a/composer-test-scenarios",
-            "version": "3.0.2",
+            "version": "3.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/g1a/composer-test-scenarios.git",
-                "reference": "28f932580981e912ab8f01d15788f1dee06550c8"
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/28f932580981e912ab8f01d15788f1dee06550c8",
-                "reference": "28f932580981e912ab8f01d15788f1dee06550c8",
+                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/e7394206d845fd593d325440507fb940bef8cb62",
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62",
                 "shasum": ""
             },
             "require": {
-                "composer-plugin-api": "^1.0.0",
+                "composer-plugin-api": "^1.0.0 || ^2.0.0",
                 "php": ">=5.4"
             },
             "require-dev": {
-                "composer/composer": "^1.7",
+                "composer/composer": "^1.10.6 || ^2.0@rc",
                 "php-coveralls/php-coveralls": "^1.0",
                 "phpunit/phpunit": "^4.8.36|^6",
-                "squizlabs/php_codesniffer": "^2.8"
+                "squizlabs/php_codesniffer": "^3.5"
             },
             "bin": [
                 "scripts/dependency-licenses"
@@ -1766,7 +1679,7 @@
             "extra": {
                 "class": "ComposerTestScenarios\\Plugin",
                 "branch-alias": {
-                    "dev-master": "3.x-dev"
+                    "dev-main": "3.x-dev"
                 }
             },
             "autoload": {
@@ -1785,121 +1698,7 @@
                 }
             ],
             "description": "Useful scripts for testing multiple sets of Composer dependencies.",
-            "time": "2019-02-11T20:22:44+00:00"
-        },
-        {
-            "name": "goaop/framework",
-            "version": "2.1.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/goaop/framework.git",
-                "reference": "6e2a0fe13c1943db02a67588cfd27692bddaffa5"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/goaop/framework/zipball/6e2a0fe13c1943db02a67588cfd27692bddaffa5",
-                "reference": "6e2a0fe13c1943db02a67588cfd27692bddaffa5",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/annotations": "~1.0",
-                "goaop/parser-reflection": "~1.2",
-                "jakubledl/dissect": "~1.0",
-                "php": ">=5.6.0"
-            },
-            "require-dev": {
-                "adlawson/vfs": "^0.12",
-                "doctrine/orm": "^2.5",
-                "phpunit/phpunit": "^4.8",
-                "symfony/console": "^2.7|^3.0"
-            },
-            "suggest": {
-                "symfony/console": "Enables the usage of the command-line tool."
-            },
-            "bin": [
-                "bin/aspect"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Go\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Lisachenko Alexander",
-                    "homepage": "https://github.com/lisachenko"
-                }
-            ],
-            "description": "Framework for aspect-oriented programming in PHP.",
-            "homepage": "http://go.aopphp.com/",
-            "keywords": [
-                "aop",
-                "aspect",
-                "library",
-                "php"
-            ],
-            "time": "2017-07-12T11:46:25+00:00"
-        },
-        {
-            "name": "goaop/parser-reflection",
-            "version": "1.4.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/goaop/parser-reflection.git",
-                "reference": "d9c1dcc7ce4a5284fe3530e011faf9c9c10e1166"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/goaop/parser-reflection/zipball/d9c1dcc7ce4a5284fe3530e011faf9c9c10e1166",
-                "reference": "d9c1dcc7ce4a5284fe3530e011faf9c9c10e1166",
-                "shasum": ""
-            },
-            "require": {
-                "nikic/php-parser": "^1.2|^2.0|^3.0",
-                "php": ">=5.6.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Go\\ParserReflection\\": "src"
-                },
-                "files": [
-                    "src/bootstrap.php"
-                ],
-                "exclude-from-classmap": [
-                    "/tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Alexander Lisachenko",
-                    "email": "lisachenko.it@gmail.com"
-                }
-            ],
-            "description": "Provides reflection information, based on raw source",
-            "time": "2018-03-19T15:57:41+00:00"
+            "time": "2020-09-28T20:54:35+00:00"
         },
         {
             "name": "guzzle/guzzle",
@@ -1994,144 +1793,22 @@
             "abandoned": "guzzlehttp/guzzle",
             "time": "2014-01-28T22:29:15+00:00"
         },
-        {
-            "name": "guzzlehttp/psr7",
-            "version": "1.5.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/guzzle/psr7.git",
-                "reference": "9f83dded91781a01c63574e387eaa769be769115"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115",
-                "reference": "9f83dded91781a01c63574e387eaa769be769115",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.4.0",
-                "psr/http-message": "~1.0",
-                "ralouphie/getallheaders": "^2.0.5"
-            },
-            "provide": {
-                "psr/http-message-implementation": "1.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.5-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "GuzzleHttp\\Psr7\\": "src/"
-                },
-                "files": [
-                    "src/functions_include.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Michael Dowling",
-                    "email": "mtdowling@gmail.com",
-                    "homepage": "https://github.com/mtdowling"
-                },
-                {
-                    "name": "Tobias Schultze",
-                    "homepage": "https://github.com/Tobion"
-                }
-            ],
-            "description": "PSR-7 message implementation that also provides common utility methods",
-            "keywords": [
-                "http",
-                "message",
-                "psr-7",
-                "request",
-                "response",
-                "stream",
-                "uri",
-                "url"
-            ],
-            "time": "2018-12-04T20:46:45+00:00"
-        },
-        {
-            "name": "jakubledl/dissect",
-            "version": "v1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/jakubledl/dissect.git",
-                "reference": "d3a391de31e45a247e95cef6cf58a91c05af67c4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/jakubledl/dissect/zipball/d3a391de31e45a247e95cef6cf58a91c05af67c4",
-                "reference": "d3a391de31e45a247e95cef6cf58a91c05af67c4",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "symfony/console": "~2.1"
-            },
-            "suggest": {
-                "symfony/console": "for the command-line tool"
-            },
-            "bin": [
-                "bin/dissect.php",
-                "bin/dissect"
-            ],
-            "type": "library",
-            "autoload": {
-                "psr-0": {
-                    "Dissect": [
-                        "src/"
-                    ]
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "unlicense"
-            ],
-            "authors": [
-                {
-                    "name": "Jakub Lédl",
-                    "email": "jakubledl@gmail.com"
-                }
-            ],
-            "description": "Lexing and parsing in pure PHP",
-            "homepage": "https://github.com/jakubledl/dissect",
-            "keywords": [
-                "ast",
-                "lexing",
-                "parser",
-                "parsing"
-            ],
-            "time": "2013-01-29T21:29:14+00:00"
-        },
         {
             "name": "myclabs/deep-copy",
-            "version": "1.8.1",
+            "version": "1.10.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/myclabs/DeepCopy.git",
-                "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8"
+                "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8",
-                "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8",
+                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
+                "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1"
+                "php": "^7.1 || ^8.0"
             },
             "replace": {
                 "myclabs/deep-copy": "self.version"
@@ -2162,79 +1839,31 @@
                 "object",
                 "object graph"
             ],
-            "time": "2018-06-11T23:09:50+00:00"
-        },
-        {
-            "name": "natxet/CssMin",
-            "version": "v3.0.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/natxet/CssMin.git",
-                "reference": "92de3fe3ccb4f8298d31952490ef7d5395855c39"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/natxet/CssMin/zipball/92de3fe3ccb4f8298d31952490ef7d5395855c39",
-                "reference": "92de3fe3ccb4f8298d31952490ef7d5395855c39",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
+            "funding": [
                 {
-                    "name": "Joe Scylla",
-                    "email": "joe.scylla@gmail.com",
-                    "homepage": "https://profiles.google.com/joe.scylla"
+                    "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+                    "type": "tidelift"
                 }
             ],
-            "description": "Minifying CSS",
-            "homepage": "http://code.google.com/p/cssmin/",
-            "keywords": [
-                "css",
-                "minify"
-            ],
-            "time": "2015-09-25T11:13:11+00:00"
+            "time": "2020-06-29T13:22:24+00:00"
         },
         {
-            "name": "nikic/php-parser",
-            "version": "v3.1.5",
+            "name": "natxet/cssmin",
+            "version": "v3.0.4",
             "source": {
                 "type": "git",
-                "url": "https://github.com/nikic/PHP-Parser.git",
-                "reference": "bb87e28e7d7b8d9a7fda231d37457c9210faf6ce"
+                "url": "https://github.com/natxet/CssMin.git",
+                "reference": "92de3fe3ccb4f8298d31952490ef7d5395855c39"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/bb87e28e7d7b8d9a7fda231d37457c9210faf6ce",
-                "reference": "bb87e28e7d7b8d9a7fda231d37457c9210faf6ce",
+                "url": "https://api.github.com/repos/natxet/CssMin/zipball/92de3fe3ccb4f8298d31952490ef7d5395855c39",
+                "reference": "92de3fe3ccb4f8298d31952490ef7d5395855c39",
                 "shasum": ""
             },
             "require": {
-                "ext-tokenizer": "*",
-                "php": ">=5.5"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.0|~5.0"
+                "php": ">=5.0"
             },
-            "bin": [
-                "bin/php-parse"
-            ],
             "type": "library",
             "extra": {
                 "branch-alias": {
@@ -2242,25 +1871,28 @@
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "PhpParser\\": "lib/PhpParser"
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Nikita Popov"
+                    "name": "Joe Scylla",
+                    "email": "joe.scylla@gmail.com",
+                    "homepage": "https://profiles.google.com/joe.scylla"
                 }
             ],
-            "description": "A PHP parser written in PHP",
+            "description": "Minifying CSS",
+            "homepage": "http://code.google.com/p/cssmin/",
             "keywords": [
-                "parser",
-                "php"
+                "css",
+                "minify"
             ],
-            "time": "2018-02-28T20:30:58+00:00"
+            "time": "2015-09-25T11:13:11+00:00"
         },
         {
             "name": "patchwork/jsqueeze",
@@ -2307,20 +1939,21 @@
                 "javascript",
                 "minification"
             ],
+            "abandoned": true,
             "time": "2016-04-19T09:28:22+00:00"
         },
         {
             "name": "pear/archive_tar",
-            "version": "1.4.6",
+            "version": "1.4.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/pear/Archive_Tar.git",
-                "reference": "b8e33f9063a7cd1d20f079014f8382b3a7aee47e"
+                "reference": "bbb4f10f71a1da2715ec6d9a683f4f23c507a49b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/b8e33f9063a7cd1d20f079014f8382b3a7aee47e",
-                "reference": "b8e33f9063a7cd1d20f079014f8382b3a7aee47e",
+                "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/bbb4f10f71a1da2715ec6d9a683f4f23c507a49b",
+                "reference": "bbb4f10f71a1da2715ec6d9a683f4f23c507a49b",
                 "shasum": ""
             },
             "require": {
@@ -2373,20 +2006,20 @@
                 "archive",
                 "tar"
             ],
-            "time": "2019-02-01T11:10:38+00:00"
+            "time": "2020-09-15T14:13:23+00:00"
         },
         {
             "name": "pear/console_getopt",
-            "version": "v1.4.2",
+            "version": "v1.4.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/pear/Console_Getopt.git",
-                "reference": "6c77aeb625b32bd752e89ee17972d103588b90c0"
+                "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/6c77aeb625b32bd752e89ee17972d103588b90c0",
-                "reference": "6c77aeb625b32bd752e89ee17972d103588b90c0",
+                "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/a41f8d3e668987609178c7c4a9fe48fecac53fa0",
+                "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0",
                 "shasum": ""
             },
             "type": "library",
@@ -2403,11 +2036,6 @@
                 "BSD-2-Clause"
             ],
             "authors": [
-                {
-                    "name": "Greg Beaver",
-                    "email": "cellog@php.net",
-                    "role": "Helper"
-                },
                 {
                     "name": "Andrei Zmievski",
                     "email": "andrei@php.net",
@@ -2417,23 +2045,28 @@
                     "name": "Stig Bakken",
                     "email": "stig@php.net",
                     "role": "Developer"
+                },
+                {
+                    "name": "Greg Beaver",
+                    "email": "cellog@php.net",
+                    "role": "Helper"
                 }
             ],
             "description": "More info available on: http://pear.php.net/package/Console_Getopt",
-            "time": "2019-02-06T16:52:33+00:00"
+            "time": "2019-11-20T18:27:48+00:00"
         },
         {
             "name": "pear/pear-core-minimal",
-            "version": "v1.10.7",
+            "version": "v1.10.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/pear/pear-core-minimal.git",
-                "reference": "19a3e0fcd50492c4357372f623f55f1b144346da"
+                "reference": "625a3c429d9b2c1546438679074cac1b089116a7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/19a3e0fcd50492c4357372f623f55f1b144346da",
-                "reference": "19a3e0fcd50492c4357372f623f55f1b144346da",
+                "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/625a3c429d9b2c1546438679074cac1b089116a7",
+                "reference": "625a3c429d9b2c1546438679074cac1b089116a7",
                 "shasum": ""
             },
             "require": {
@@ -2464,20 +2097,20 @@
                 }
             ],
             "description": "Minimal set of PEAR core files to be used as composer dependency",
-            "time": "2018-12-05T20:03:52+00:00"
+            "time": "2019-11-19T19:00:24+00:00"
         },
         {
             "name": "pear/pear_exception",
-            "version": "v1.0.0",
+            "version": "v1.0.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/pear/PEAR_Exception.git",
-                "reference": "8c18719fdae000b690e3912be401c76e406dd13b"
+                "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/8c18719fdae000b690e3912be401c76e406dd13b",
-                "reference": "8c18719fdae000b690e3912be401c76e406dd13b",
+                "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7",
+                "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7",
                 "shasum": ""
             },
             "require": {
@@ -2493,9 +2126,9 @@
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "PEAR": ""
-                }
+                "classmap": [
+                    "PEAR/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "include-path": [
@@ -2519,7 +2152,7 @@
             "keywords": [
                 "exception"
             ],
-            "time": "2015-02-10T20:07:52+00:00"
+            "time": "2019-12-10T10:24:42+00:00"
         },
         {
             "name": "php-coveralls/php-coveralls",
@@ -2584,35 +2217,30 @@
         },
         {
             "name": "phpdocumentor/reflection-common",
-            "version": "1.0.1",
+            "version": "2.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
-                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6"
+                "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
-                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b",
+                "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.5"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.6"
+                "php": ">=7.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "2.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src"
-                    ]
+                    "phpDocumentor\\Reflection\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -2634,31 +2262,32 @@
                 "reflection",
                 "static analysis"
             ],
-            "time": "2017-09-11T18:02:19+00:00"
+            "time": "2020-04-27T09:25:28+00:00"
         },
         {
             "name": "phpdocumentor/reflection-docblock",
-            "version": "4.3.0",
+            "version": "4.3.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "94fd0001232e47129dd3504189fa1c7225010d08"
+                "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08",
-                "reference": "94fd0001232e47129dd3504189fa1c7225010d08",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/da3fd972d6bafd628114f7e7e036f45944b62e9c",
+                "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c",
                 "shasum": ""
             },
             "require": {
                 "php": "^7.0",
-                "phpdocumentor/reflection-common": "^1.0.0",
-                "phpdocumentor/type-resolver": "^0.4.0",
+                "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0",
+                "phpdocumentor/type-resolver": "~0.4 || ^1.0.0",
                 "webmozart/assert": "^1.0"
             },
             "require-dev": {
-                "doctrine/instantiator": "~1.0.5",
+                "doctrine/instantiator": "^1.0.5",
                 "mockery/mockery": "^1.0",
+                "phpdocumentor/type-resolver": "0.4.*",
                 "phpunit/phpunit": "^6.4"
             },
             "type": "library",
@@ -2685,41 +2314,40 @@
                 }
             ],
             "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
-            "time": "2017-11-30T07:14:17+00:00"
+            "time": "2019-12-28T18:55:12+00:00"
         },
         {
             "name": "phpdocumentor/type-resolver",
-            "version": "0.4.0",
+            "version": "1.0.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/TypeResolver.git",
-                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7"
+                "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7",
-                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7",
+                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
+                "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5 || ^7.0",
-                "phpdocumentor/reflection-common": "^1.0"
+                "php": "^7.1",
+                "phpdocumentor/reflection-common": "^2.0"
             },
             "require-dev": {
-                "mockery/mockery": "^0.9.4",
-                "phpunit/phpunit": "^5.2||^4.8.24"
+                "ext-tokenizer": "^7.1",
+                "mockery/mockery": "~1",
+                "phpunit/phpunit": "^7.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src/"
-                    ]
+                    "phpDocumentor\\Reflection\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -2732,42 +2360,43 @@
                     "email": "me@mikevanriel.com"
                 }
             ],
-            "time": "2017-07-14T14:27:02+00:00"
+            "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
+            "time": "2019-08-22T18:11:29+00:00"
         },
         {
             "name": "phpspec/prophecy",
-            "version": "1.8.0",
+            "version": "v1.10.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06"
+                "reference": "451c3cd1418cf640de218914901e51b064abb093"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093",
                 "shasum": ""
             },
             "require": {
                 "doctrine/instantiator": "^1.0.2",
                 "php": "^5.3|^7.0",
-                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
-                "sebastian/comparator": "^1.1|^2.0|^3.0",
-                "sebastian/recursion-context": "^1.0|^2.0|^3.0"
+                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+                "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+                "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
             },
             "require-dev": {
-                "phpspec/phpspec": "^2.5|^3.2",
+                "phpspec/phpspec": "^2.5 || ^3.2",
                 "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.8.x-dev"
+                    "dev-master": "1.10.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Prophecy\\": "src/"
+                "psr-4": {
+                    "Prophecy\\": "src/Prophecy"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -2795,7 +2424,7 @@
                 "spy",
                 "stub"
             ],
-            "time": "2018-08-05T17:53:17+00:00"
+            "time": "2020-03-05T15:02:03+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",
@@ -3044,6 +2673,7 @@
             "keywords": [
                 "tokenizer"
             ],
+            "abandoned": true,
             "time": "2017-11-27T05:48:46+00:00"
         },
         {
@@ -3185,98 +2815,9 @@
                 "mock",
                 "xunit"
             ],
+            "abandoned": true,
             "time": "2017-06-30T09:13:00+00:00"
         },
-        {
-            "name": "psr/http-message",
-            "version": "1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/http-message.git",
-                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
-                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Psr\\Http\\Message\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "http://www.php-fig.org/"
-                }
-            ],
-            "description": "Common interface for HTTP messages",
-            "homepage": "https://github.com/php-fig/http-message",
-            "keywords": [
-                "http",
-                "http-message",
-                "psr",
-                "psr-7",
-                "request",
-                "response"
-            ],
-            "time": "2016-08-06T14:39:51+00:00"
-        },
-        {
-            "name": "ralouphie/getallheaders",
-            "version": "2.0.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/ralouphie/getallheaders.git",
-                "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/5601c8a83fbba7ef674a7369456d12f1e0d0eafa",
-                "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~3.7.0",
-                "satooshi/php-coveralls": ">=1.0"
-            },
-            "type": "library",
-            "autoload": {
-                "files": [
-                    "src/getallheaders.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Ralph Khattar",
-                    "email": "ralph.khattar@gmail.com"
-                }
-            ],
-            "description": "A polyfill for getallheaders.",
-            "time": "2016-02-11T07:05:27+00:00"
-        },
         {
             "name": "sebastian/code-unit-reverse-lookup",
             "version": "1.0.1",
@@ -3792,64 +3333,37 @@
         },
         {
             "name": "squizlabs/php_codesniffer",
-            "version": "2.9.2",
+            "version": "3.5.6",
             "source": {
                 "type": "git",
                 "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
-                "reference": "2acf168de78487db620ab4bc524135a13cfe6745"
+                "reference": "e97627871a7eab2f70e59166072a6b767d5834e0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/2acf168de78487db620ab4bc524135a13cfe6745",
-                "reference": "2acf168de78487db620ab4bc524135a13cfe6745",
+                "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/e97627871a7eab2f70e59166072a6b767d5834e0",
+                "reference": "e97627871a7eab2f70e59166072a6b767d5834e0",
                 "shasum": ""
             },
             "require": {
                 "ext-simplexml": "*",
                 "ext-tokenizer": "*",
                 "ext-xmlwriter": "*",
-                "php": ">=5.1.2"
+                "php": ">=5.4.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.0"
+                "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
             },
             "bin": [
-                "scripts/phpcs",
-                "scripts/phpcbf"
+                "bin/phpcs",
+                "bin/phpcbf"
             ],
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.x-dev"
+                    "dev-master": "3.x-dev"
                 }
             },
-            "autoload": {
-                "classmap": [
-                    "CodeSniffer.php",
-                    "CodeSniffer/CLI.php",
-                    "CodeSniffer/Exception.php",
-                    "CodeSniffer/File.php",
-                    "CodeSniffer/Fixer.php",
-                    "CodeSniffer/Report.php",
-                    "CodeSniffer/Reporting.php",
-                    "CodeSniffer/Sniff.php",
-                    "CodeSniffer/Tokens.php",
-                    "CodeSniffer/Reports/",
-                    "CodeSniffer/Tokenizers/",
-                    "CodeSniffer/DocGenerators/",
-                    "CodeSniffer/Standards/AbstractPatternSniff.php",
-                    "CodeSniffer/Standards/AbstractScopeSniff.php",
-                    "CodeSniffer/Standards/AbstractVariableSniff.php",
-                    "CodeSniffer/Standards/IncorrectPatternException.php",
-                    "CodeSniffer/Standards/Generic/Sniffs/",
-                    "CodeSniffer/Standards/MySource/Sniffs/",
-                    "CodeSniffer/Standards/PEAR/Sniffs/",
-                    "CodeSniffer/Standards/PSR1/Sniffs/",
-                    "CodeSniffer/Standards/PSR2/Sniffs/",
-                    "CodeSniffer/Standards/Squiz/Sniffs/",
-                    "CodeSniffer/Standards/Zend/Sniffs/"
-                ]
-            },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "BSD-3-Clause"
@@ -3861,97 +3375,41 @@
                 }
             ],
             "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
-            "homepage": "http://www.squizlabs.com/php-codesniffer",
+            "homepage": "https://github.com/squizlabs/PHP_CodeSniffer",
             "keywords": [
                 "phpcs",
                 "standards"
             ],
-            "time": "2018-11-07T22:31:41+00:00"
-        },
-        {
-            "name": "symfony/browser-kit",
-            "version": "v4.2.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/browser-kit.git",
-                "reference": "ee4462581eb54bf34b746e4a5d522a4f21620160"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/browser-kit/zipball/ee4462581eb54bf34b746e4a5d522a4f21620160",
-                "reference": "ee4462581eb54bf34b746e4a5d522a4f21620160",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.1.3",
-                "symfony/dom-crawler": "~3.4|~4.0"
-            },
-            "require-dev": {
-                "symfony/css-selector": "~3.4|~4.0",
-                "symfony/process": "~3.4|~4.0"
-            },
-            "suggest": {
-                "symfony/process": ""
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.2-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\BrowserKit\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony BrowserKit Component",
-            "homepage": "https://symfony.com",
-            "time": "2019-01-16T21:31:25+00:00"
+            "time": "2020-08-10T04:50:15+00:00"
         },
         {
             "name": "symfony/config",
-            "version": "v4.2.3",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/config.git",
-                "reference": "25a2e7abe0d97e70282537292e3df45cf6da7b98"
+                "reference": "7c5a1002178a612787c291a4f515f87b19176b61"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/config/zipball/25a2e7abe0d97e70282537292e3df45cf6da7b98",
-                "reference": "25a2e7abe0d97e70282537292e3df45cf6da7b98",
+                "url": "https://api.github.com/repos/symfony/config/zipball/7c5a1002178a612787c291a4f515f87b19176b61",
+                "reference": "7c5a1002178a612787c291a4f515f87b19176b61",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
-                "symfony/filesystem": "~3.4|~4.0",
+                "php": ">=7.1.3",
+                "symfony/filesystem": "^3.4|^4.0|^5.0",
                 "symfony/polyfill-ctype": "~1.8"
             },
             "conflict": {
                 "symfony/finder": "<3.4"
             },
             "require-dev": {
-                "symfony/dependency-injection": "~3.4|~4.0",
-                "symfony/event-dispatcher": "~3.4|~4.0",
-                "symfony/finder": "~3.4|~4.0",
-                "symfony/yaml": "~3.4|~4.0"
+                "symfony/event-dispatcher": "^3.4|^4.0|^5.0",
+                "symfony/finder": "^3.4|^4.0|^5.0",
+                "symfony/messenger": "^4.1|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/yaml": "^3.4|^4.0|^5.0"
             },
             "suggest": {
                 "symfony/yaml": "To use the yaml reference dumper"
@@ -3959,7 +3417,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.2-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -3986,95 +3444,49 @@
             ],
             "description": "Symfony Config Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-30T11:44:30+00:00"
-        },
-        {
-            "name": "symfony/css-selector",
-            "version": "v4.2.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/css-selector.git",
-                "reference": "48eddf66950fa57996e1be4a55916d65c10c604a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/css-selector/zipball/48eddf66950fa57996e1be4a55916d65c10c604a",
-                "reference": "48eddf66950fa57996e1be4a55916d65c10c604a",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.1.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.2-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\CssSelector\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
+            "funding": [
                 {
-                    "name": "Jean-François Simon",
-                    "email": "jeanfrancois.simon@sensiolabs.com"
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
                 },
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
                 },
                 {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
                 }
             ],
-            "description": "Symfony CssSelector Component",
-            "homepage": "https://symfony.com",
-            "time": "2019-01-16T20:31:39+00:00"
+            "time": "2020-10-02T07:34:48+00:00"
         },
         {
-            "name": "symfony/dom-crawler",
-            "version": "v4.2.3",
+            "name": "symfony/stopwatch",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/dom-crawler.git",
-                "reference": "d8476760b04cdf7b499c8718aa437c20a9155103"
+                "url": "https://github.com/symfony/stopwatch.git",
+                "reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/d8476760b04cdf7b499c8718aa437c20a9155103",
-                "reference": "d8476760b04cdf7b499c8718aa437c20a9155103",
+                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/6f89e19772cf61b3c65bab329fe0e318259fbd91",
+                "reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
-                "symfony/polyfill-ctype": "~1.8",
-                "symfony/polyfill-mbstring": "~1.0"
-            },
-            "require-dev": {
-                "symfony/css-selector": "~3.4|~4.0"
-            },
-            "suggest": {
-                "symfony/css-selector": ""
+                "php": ">=7.1.3",
+                "symfony/service-contracts": "^1.0|^2"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.2-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\DomCrawler\\": ""
+                    "Symfony\\Component\\Stopwatch\\": ""
                 },
                 "exclude-from-classmap": [
                     "/Tests/"
@@ -4094,88 +3506,50 @@
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony DomCrawler Component",
+            "description": "Symfony Stopwatch Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-16T20:35:37+00:00"
-        },
-        {
-            "name": "symfony/stopwatch",
-            "version": "v4.2.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/stopwatch.git",
-                "reference": "b1a5f646d56a3290230dbc8edf2a0d62cda23f67"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/b1a5f646d56a3290230dbc8edf2a0d62cda23f67",
-                "reference": "b1a5f646d56a3290230dbc8edf2a0d62cda23f67",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.1.3",
-                "symfony/contracts": "^1.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.2-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Stopwatch\\": ""
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
                 },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
                 },
                 {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
                 }
             ],
-            "description": "Symfony Stopwatch Component",
-            "homepage": "https://symfony.com",
-            "time": "2019-01-16T20:31:39+00:00"
+            "time": "2020-09-02T16:08:58+00:00"
         },
         {
             "name": "webmozart/assert",
-            "version": "1.4.0",
+            "version": "1.9.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/webmozart/assert.git",
-                "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9"
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9",
-                "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9",
+                "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.3 || ^7.0",
+                "php": "^5.3.3 || ^7.0 || ^8.0",
                 "symfony/polyfill-ctype": "^1.8"
             },
+            "conflict": {
+                "phpstan/phpstan": "<0.12.20",
+                "vimeo/psalm": "<3.9.1"
+            },
             "require-dev": {
-                "phpunit/phpunit": "^4.6",
-                "sebastian/version": "^1.0.1"
+                "phpunit/phpunit": "^4.8.36 || ^7.5.13"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
                     "Webmozart\\Assert\\": "src/"
@@ -4197,7 +3571,7 @@
                 "check",
                 "validate"
             ],
-            "time": "2018-12-25T11:19:39+00:00"
+            "time": "2020-07-08T17:02:28+00:00"
         }
     ],
     "aliases": [],
@@ -4211,5 +3585,6 @@
     "platform-dev": [],
     "platform-overrides": {
         "php": "7.1.3"
-    }
+    },
+    "plugin-api-version": "1.1.0"
 }
diff --git a/vendor/consolidation/robo/CHANGELOG.md b/vendor/consolidation/robo/CHANGELOG.md
index 9352dddef4..283520e34f 100644
--- a/vendor/consolidation/robo/CHANGELOG.md
+++ b/vendor/consolidation/robo/CHANGELOG.md
@@ -1,6 +1,40 @@
 # Changelog
 
-### 1.4.7 - 1.4.8 2/19/2019
+### 1.4.13 - 10/10/2020
+
+- Allow symfony/finder ^5 (#992)
+- Fix #981: PHP 7.3 compatibility fixes (#982)
+
+### 1.4.12 2/18/2020
+
+- Fixed #922: PHP 7.4 compatibility. (#923) (#928)
+- Test on PHP 7.4. Backport removal of Codeception to 1.x branch. (#925)
+- Copy branches documentation to the 1.x branch.
+- Fix incosistent white space formatting in code example. (#916)
+- Viktor Szépe extract() is not our friend (#903)
+- Viktor Szépe Old variables in ImageMinify (#904)
+- Viktor Szépe RuntimeException used realtively (#905)
+
+### 1.4.11 10/29/2019
+
+- Deprecate $this->io() and provide style injector instead. (#910)
+- Jordon Replogle Changed leafo to scssphp as leafo is archived (#900)
+- Patrick Kollitsch Add missing code formatting to sample code (#861)
+- Patrick Kollitsch Adding documentation as option to pull_request_template.md (#862)
+- RTLcoil Tiny formatting fix in README (#874)
+- Tal Ater Updated README with command for initiating a RoboFile (#875)
+
+### 1.4.10 7/29/2019
+
+* Allow default argument for confirm() questions by Dane Powell (#850)
+* Allow command classes to end in Commands or Command by Jelle Sebreghts (#878)
+* ImageMinify: Prevent undefined variable error by Dan (#852) (#854)
+* Add sample with changed file handling to Base/Watch documentation by Patrick Kollitsch (#847)
+* Clearer explanation of --load-from option by Jordan Koplowicz (#872)
+* Fix PHPDoc @param and @return type hints by Andor (#886)
+* Update PHPDoc mismatch by Filippo Tessarotto (#883)
+
+### 1.4.7 - 1.4.9 2/19/2019
 
 * Re-release 1.4.6 to remove artifacts inadvertantly added to tagged release.
 
diff --git a/vendor/consolidation/robo/CONTRIBUTING.md b/vendor/consolidation/robo/CONTRIBUTING.md
index 438681469f..189f18987a 100644
--- a/vendor/consolidation/robo/CONTRIBUTING.md
+++ b/vendor/consolidation/robo/CONTRIBUTING.md
@@ -12,4 +12,8 @@ robo sniff src/Foo.php --autofix
 ```
 The above will run the PHP Codesniffer on the `src/Foo.php` file and automatically correct variances from the PSR-2 standard. Please ensure all contributions are compliant _before_ submitting a pull request.
 
+## Tests
 
+Note that in the past, Robo used Codeception / Aspect Mock etc. in its unit tests. These components proved to be difficult to maintain when testing on mutiple PHP versions, so they were removed. The tests formerly in tests/cli were all ported to straight phpunit tests in the tests/integration directory. Some of the unit tests from tests/unit were ported to tests/phpunit; however, a number of tests that still use AspectMock still exist in tests/unit, although these are not currently being used.
+
+Pull requests that touch parts of the code formerly tested by these disabled tests must also convert the AspectMock test to Prophecy or some other mocking system. Alternately, getting AspectMock working again on the master and 1.x branches is another option, if someone wants to stand up to do that work.
diff --git a/vendor/consolidation/robo/LICENSE b/vendor/consolidation/robo/LICENSE
index d1fc34655a..738df1d9fe 100644
--- a/vendor/consolidation/robo/LICENSE
+++ b/vendor/consolidation/robo/LICENSE
@@ -1,6 +1,6 @@
 The MIT License (MIT)
 
-Copyright (c) 2014-2019 Codegyre Developers Team, Consolidation Team
+Copyright (c) 2014-2020 Codegyre Developers Team, Consolidation Team
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of
 this software and associated documentation files (the "Software"), to deal in
@@ -22,23 +22,23 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 DEPENDENCY LICENSES:
 
 Name                                 Version  License
-consolidation/annotated-command      2.11.2   MIT
-consolidation/config                 1.2.0    MIT
-consolidation/log                    1.1.1    MIT
-consolidation/output-formatters      3.4.0    MIT
-consolidation/self-update            1.1.5    MIT
+consolidation/annotated-command      4.2.3    MIT
+consolidation/config                 1.2.1    MIT
+consolidation/log                    2.0.1    MIT
+consolidation/output-formatters      4.1.1    MIT
+consolidation/self-update            1.2.0    MIT
 container-interop/container-interop  1.2.0    MIT
 dflydev/dot-access-data              v1.1.0   MIT
 grasmash/expander                    1.0.0    MIT
 grasmash/yaml-expander               1.4.0    MIT
 league/container                     2.4.1    MIT
 psr/container                        1.0.0    MIT
-psr/log                              1.1.0    MIT
-symfony/console                      v4.2.3   MIT
-symfony/event-dispatcher             v4.2.3   MIT
-symfony/filesystem                   v4.2.3   MIT
-symfony/finder                       v3.4.22  MIT
-symfony/polyfill-ctype               v1.10.0  MIT
-symfony/polyfill-mbstring            v1.10.0  MIT
-symfony/process                      v4.2.3   MIT
-symfony/yaml                         v4.2.3   MIT
\ No newline at end of file
+psr/log                              1.1.3    MIT
+symfony/console                      v4.4.15  MIT
+symfony/event-dispatcher             v4.4.15  MIT
+symfony/filesystem                   v4.4.15  MIT
+symfony/finder                       v4.4.15  MIT
+symfony/polyfill-ctype               v1.18.1  MIT
+symfony/polyfill-mbstring            v1.18.1  MIT
+symfony/process                      v4.4.15  MIT
+symfony/yaml                         v4.4.15  MIT
\ No newline at end of file
diff --git a/vendor/consolidation/robo/README.md b/vendor/consolidation/robo/README.md
index 73a8feb22b..5a77b7a17b 100644
--- a/vendor/consolidation/robo/README.md
+++ b/vendor/consolidation/robo/README.md
@@ -1,20 +1,17 @@
 # RoboTask
 
-_This is the 1.x (stable) branch of the Robo task runner. Development for Robo 2.x (future) is happening on the [master](https://github.com/consolidation/Robo/tree/master) branch._
-
 **Modern and simple PHP task runner** inspired by Gulp and Rake aimed to automate common tasks:
 
 [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/consolidation/Robo?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) 
 [![Latest Stable Version](https://poser.pugx.org/consolidation/robo/v/stable.png)](https://packagist.org/packages/consolidation/robo) 
 [![Latest Unstable Version](https://poser.pugx.org/consolidation/robo/v/unstable.png)](https://packagist.org/packages/consolidation/robo) 
 [![Total Downloads](https://poser.pugx.org/consolidation/robo/downloads.png)](https://packagist.org/packages/consolidation/robo) 
-[![PHP 7 ready](http://php7ready.timesplinter.ch/consolidation/Robo/badge.svg)](https://travis-ci.org/consolidation/Robo)
-[![License](https://poser.pugx.org/consolidation/robo/license.png)](https://www.versioneye.com/user/projects/57c4a6fe968d64004d97620a?child=57c4a6fe968d64004d97620a#tab-licenses)
+[![PHP 5 supported](https://img.shields.io/badge/PHP%205-supported-92a9ed)](https://travis-ci.org/consolidation/Robo)
 
 [![Build Status](https://travis-ci.org/consolidation/Robo.svg?branch=master)](https://travis-ci.org/consolidation/Robo) 
 [![Windows CI](https://ci.appveyor.com/api/projects/status/0823hnh06pw8ir4d?svg=true)](https://ci.appveyor.com/project/greg-1-anderson/robo)
 [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/consolidation/Robo/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/consolidation/Robo/?branch=master)
-[![Dependency Status](https://www.versioneye.com/user/projects/57c4a6fe968d64004d97620a/badge.svg?style=flat-square)](https://www.versioneye.com/user/projects/57c4a6fe968d64004d97620a)
+[![License](https://img.shields.io/badge/license-MIT-408677.svg)](LICENSE)
 
 * writing cross-platform scripts
 * processing assets (less, sass, minification)
@@ -23,6 +20,15 @@ _This is the 1.x (stable) branch of the Robo task runner. Development for Robo 2
 * watching filesystem changes
 * deployment with sftp/ssh/docker
 
+## Branches
+
+| Branch | Symfony Versions | PHP Versions |
+| ------ | ---------------- | ------------ |
+| [master](https://github.com/consolidation/robo)      | 4 only    | [![PHP 7 only](https://img.shields.io/badge/PHP%207-only-92a9ed)](https://travis-ci.org/consolidation/Robo) |
+| [1.x](https://github.com/consolidation/robotree/1.x) | 2, 3 or 4 | [![PHP 5 supported](https://img.shields.io/badge/PHP%205-supported-408677)](https://travis-ci.org/consolidation/Robo) |
+
+Robo versions 2.x and 1.x are largely compatible; however, Robo 2.x supports fewer versions of PHP and Symfony. This is to make ongoing maintenance easier; Robo 1.x will be supported less and less over time. Projects should update to Robo ^2 if possible.
+
 ## Installing
 
 ### Phar
@@ -53,13 +59,13 @@ Now you can use it just like `robo`.
 
 ## Usage
 
-All tasks are defined as **public methods** in `RoboFile.php`. It can be created by running `robo`.
+All tasks are defined as **public methods** in `RoboFile.php`. It can be created by running `robo init`.
 All protected methods in traits that start with `task` prefix are tasks and can be configured and executed in your tasks.
 
 ## Examples
 
 The best way to learn Robo by example is to take a look into [its own RoboFile](https://github.com/consolidation/Robo/blob/master/RoboFile.php)
- or [RoboFile of Codeception project](https://github.com/Codeception/Codeception/blob/2.4/RoboFile.php). There are also some basic example commands in examples/RoboFile.php.
+ or [RoboFile of Codeception project](https://github.com/Codeception/Codeception/blob/2.4/RoboFile.php). There are also some basic example commands in `examples/RoboFile.php`.
 
 Here are some snippets from them:
 
@@ -83,12 +89,12 @@ class RoboFile extends \Robo\Tasks
             ->run();
 
        // running Selenium server in background
-        $this->taskExec('java -jar ' . $seleniumPath)
+       $this->taskExec('java -jar ' . $seleniumPath)
             ->background()
             ->run();
 
-        // loading Symfony Command and running with passed argument
-        $this->taskSymfonyCommand(new \Codeception\Command\Run('run'))
+       // loading Symfony Command and running with passed argument
+       $this->taskSymfonyCommand(new \Codeception\Command\Run('run'))
             ->arg('suite','acceptance')
             ->run();
     }
diff --git a/vendor/consolidation/robo/RoboFile.php b/vendor/consolidation/robo/RoboFile.php
index 2dcb09cd14..a35502a479 100644
--- a/vendor/consolidation/robo/RoboFile.php
+++ b/vendor/consolidation/robo/RoboFile.php
@@ -5,6 +5,10 @@ class RoboFile extends \Robo\Tasks
 {
     /**
      * Run the Robo unit tests.
+     *
+     * n.b. The CI jobs use `composer unit` rather than this function
+     * to run the tests. This command also runs the remaining Codeception
+     * tests. You must re-add Codeception to the project to use this.
      */
     public function test(array $args, $options =
         [
@@ -12,7 +16,11 @@ public function test(array $args, $options =
             'coverage' => false
         ])
     {
-        $taskCodecept = $this->taskCodecept()
+        $collection = $this->collectionBuilder();
+
+        $taskPHPUnit = $collection->taskPHPUnit();
+
+        $taskCodecept = $collection->taskCodecept()
             ->args($args);
 
         if ($options['coverage']) {
@@ -22,7 +30,7 @@ public function test(array $args, $options =
             $taskCodecept->coverageHtml('../../build/logs/coverage');
         }
 
-        return $taskCodecept->run();
+        return $collection;
      }
 
     /**
@@ -59,8 +67,9 @@ public function sniff(
     /**
      * Generate a new Robo task that wraps an existing utility class.
      *
-     * @param $className The name of the existing utility class to wrap.
-     * @param $wrapperClassName The name of the wrapper class to create. Optional.
+     * @param string $className The name of the existing utility class to wrap.
+     * @param string $wrapperClassName The name of the wrapper class to create. Optional.
+     *
      * @usage generate:task 'Symfony\Component\Filesystem\Filesystem' FilesystemStack
      */
     public function generateTask($className, $wrapperClassName = "")
diff --git a/vendor/consolidation/robo/codeception.yml b/vendor/consolidation/robo/codeception.yml
index 09763ea714..793adae8ea 100644
--- a/vendor/consolidation/robo/codeception.yml
+++ b/vendor/consolidation/robo/codeception.yml
@@ -4,8 +4,8 @@ paths:
     log: tests/_log
     data: tests/_data
     helpers: tests/_helpers
+bootstrap: _bootstrap.php
 settings:
-    bootstrap: _bootstrap.php
     colors: true
     memory_limit: 1024M
 modules:
diff --git a/vendor/consolidation/robo/composer.json b/vendor/consolidation/robo/composer.json
index 8ff6524445..75606d437a 100644
--- a/vendor/consolidation/robo/composer.json
+++ b/vendor/consolidation/robo/composer.json
@@ -22,37 +22,31 @@
     "bin":["robo"],
     "require": {
         "php": ">=5.5.0",
-        "league/container": "^2.2",
-        "consolidation/log": "~1",
-        "consolidation/config": "^1.2",
-        "consolidation/annotated-command": "^2.10.2",
-        "consolidation/output-formatters": "^3.1.13",
-        "consolidation/self-update": "^1",
-        "grasmash/yaml-expander": "^1.3",
-        "symfony/finder": "^2.5|^3|^4",
+        "consolidation/annotated-command": "^2.12.1|^4.1",
+        "consolidation/config": "^1.2.1",
+        "consolidation/log": "^1.1.1|^2",
+        "consolidation/output-formatters": "^3.5.1|^4.1",
+        "consolidation/self-update": "^1.1.5",
+        "grasmash/yaml-expander": "^1.4",
+        "league/container": "^2.4.1",
         "symfony/console": "^2.8|^3|^4",
-        "symfony/process": "^2.5|^3|^4",
+        "symfony/event-dispatcher": "^2.5|^3|^4",
         "symfony/filesystem": "^2.5|^3|^4",
-        "symfony/event-dispatcher": "^2.5|^3|^4"
+        "symfony/finder": "^2.5|^3|^4|^5",
+        "symfony/process": "^2.5|^3|^4"
     },
     "require-dev": {
         "g1a/composer-test-scenarios": "^3",
-        "patchwork/jsqueeze": "~2",
-        "natxet/CssMin": "3.0.4",
+        "natxet/cssmin": "3.0.4",
+        "patchwork/jsqueeze": "^2",
         "pear/archive_tar": "^1.4.4",
-        "codeception/base": "^2.3.7",
-        "goaop/framework": "~2.1.2",
-        "codeception/verify": "^0.3.2",
-        "codeception/aspect-mock": "^1|^2.1.1",
-        "goaop/parser-reflection": "^1.1.0",
-        "nikic/php-parser": "^3.1.5",
         "php-coveralls/php-coveralls": "^1",
-        "phpunit/php-code-coverage": "~2|~4",
-        "squizlabs/php_codesniffer": "^2.8"
+        "phpunit/phpunit": "^5.7.27",
+        "squizlabs/php_codesniffer": "^3"
     },
     "scripts": {
         "cs": "./robo sniff",
-        "unit": "./robo test --coverage",
+        "unit": "phpunit",
         "lint": [
             "find src -name '*.php' -print0 | xargs -0 -n1 php -l",
             "find tests/src -name '*.php' -print0 | xargs -0 -n1 php -l"
@@ -75,6 +69,16 @@
     },
     "extra": {
         "scenarios": {
+            "finder5": {
+                "require": {
+                    "symfony/finder": "^5"
+                },
+                "config": {
+                    "platform": {
+                        "php": "7.2.5"
+                    }
+                }                
+            },
             "symfony4": {
                 "require": {
                     "symfony/console": "^4"
@@ -89,8 +93,11 @@
                 "require": {
                     "symfony/console": "^2.8"
                 },
+                "require-dev": {
+                    "phpunit/phpunit": "^4.8.36"
+                },
                 "remove": [
-                    "goaop/framework"
+                    "php-coveralls/php-coveralls"
                 ],
                 "config": {
                     "platform": {
@@ -103,7 +110,7 @@
             }
         },
         "branch-alias": {
-            "dev-master": "2.x-dev"
+            "dev-master": "1.x-dev"
         }
     },
     "suggest": {
diff --git a/vendor/consolidation/robo/composer.lock b/vendor/consolidation/robo/composer.lock
index 3a709f76bb..871c4ea5de 100644
--- a/vendor/consolidation/robo/composer.lock
+++ b/vendor/consolidation/robo/composer.lock
@@ -4,29 +4,29 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "90d835cb3183287ad1fb46b4c4b32c7b",
+    "content-hash": "2a1b2eeb6baa01fec984c8b922282930",
     "packages": [
         {
             "name": "consolidation/annotated-command",
-            "version": "2.11.2",
+            "version": "2.12.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/annotated-command.git",
-                "reference": "004af26391cd7d1cd04b0ac736dc1324d1b4f572"
+                "reference": "0ee361762df2274f360c085e3239784a53f850b5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/004af26391cd7d1cd04b0ac736dc1324d1b4f572",
-                "reference": "004af26391cd7d1cd04b0ac736dc1324d1b4f572",
+                "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/0ee361762df2274f360c085e3239784a53f850b5",
+                "reference": "0ee361762df2274f360c085e3239784a53f850b5",
                 "shasum": ""
             },
             "require": {
-                "consolidation/output-formatters": "^3.4",
+                "consolidation/output-formatters": "^3.5.1",
                 "php": ">=5.4.5",
                 "psr/log": "^1",
                 "symfony/console": "^2.8|^3|^4",
                 "symfony/event-dispatcher": "^2.5|^3|^4",
-                "symfony/finder": "^2.5|^3|^4"
+                "symfony/finder": "^2.5|^3|^4|^5"
             },
             "require-dev": {
                 "g1a/composer-test-scenarios": "^3",
@@ -37,6 +37,16 @@
             "type": "library",
             "extra": {
                 "scenarios": {
+                    "finder5": {
+                        "require": {
+                            "symfony/finder": "^5"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.2.5"
+                            }
+                        }
+                    },
                     "symfony4": {
                         "require": {
                             "symfony/console": "^4.0"
@@ -100,20 +110,20 @@
                 }
             ],
             "description": "Initialize Symfony Console commands from annotated command class methods.",
-            "time": "2019-02-02T02:29:53+00:00"
+            "time": "2020-10-11T04:30:03+00:00"
         },
         {
             "name": "consolidation/config",
-            "version": "1.2.0",
+            "version": "1.2.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/config.git",
-                "reference": "11ab7ecd19131ce084390171b9c070eedecf7dab"
+                "reference": "cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/config/zipball/11ab7ecd19131ce084390171b9c070eedecf7dab",
-                "reference": "11ab7ecd19131ce084390171b9c070eedecf7dab",
+                "url": "https://api.github.com/repos/consolidation/config/zipball/cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1",
+                "reference": "cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1",
                 "shasum": ""
             },
             "require": {
@@ -181,7 +191,7 @@
                 }
             ],
             "description": "Provide configuration services for a commandline tool.",
-            "time": "2019-02-16T01:18:47+00:00"
+            "time": "2019-03-03T19:37:04+00:00"
         },
         {
             "name": "consolidation/log",
@@ -275,30 +285,29 @@
         },
         {
             "name": "consolidation/output-formatters",
-            "version": "3.4.0",
+            "version": "3.5.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/output-formatters.git",
-                "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19"
+                "reference": "0d38f13051ef05c223a2bb8e962d668e24785196"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/a942680232094c4a5b21c0b7e54c20cce623ae19",
-                "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19",
+                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/0d38f13051ef05c223a2bb8e962d668e24785196",
+                "reference": "0d38f13051ef05c223a2bb8e962d668e24785196",
                 "shasum": ""
             },
             "require": {
                 "dflydev/dot-access-data": "^1.1.0",
                 "php": ">=5.4.0",
                 "symfony/console": "^2.8|^3|^4",
-                "symfony/finder": "^2.5|^3|^4"
+                "symfony/finder": "^2.5|^3|^4|^5"
             },
             "require-dev": {
-                "g1a/composer-test-scenarios": "^2",
+                "g1a/composer-test-scenarios": "^3",
+                "php-coveralls/php-coveralls": "^1",
                 "phpunit/phpunit": "^5.7.27",
-                "satooshi/php-coveralls": "^2",
                 "squizlabs/php_codesniffer": "^2.7",
-                "symfony/console": "3.2.3",
                 "symfony/var-dumper": "^2.8|^3|^4",
                 "victorjonsson/markdowndocs": "^1.3"
             },
@@ -307,6 +316,62 @@
             },
             "type": "library",
             "extra": {
+                "scenarios": {
+                    "finder5": {
+                        "require": {
+                            "symfony/finder": "^5"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.2.5"
+                            }
+                        }
+                    },
+                    "symfony4": {
+                        "require": {
+                            "symfony/console": "^4.0"
+                        },
+                        "require-dev": {
+                            "phpunit/phpunit": "^6"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.1.3"
+                            }
+                        }
+                    },
+                    "symfony3": {
+                        "require": {
+                            "symfony/console": "^3.4",
+                            "symfony/finder": "^3.4",
+                            "symfony/var-dumper": "^3.4"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "5.6.32"
+                            }
+                        }
+                    },
+                    "symfony2": {
+                        "require": {
+                            "symfony/console": "^2.8"
+                        },
+                        "require-dev": {
+                            "phpunit/phpunit": "^4.8.36"
+                        },
+                        "remove": [
+                            "php-coveralls/php-coveralls"
+                        ],
+                        "config": {
+                            "platform": {
+                                "php": "5.4.8"
+                            }
+                        },
+                        "scenario-options": {
+                            "create-lockfile": "false"
+                        }
+                    }
+                },
                 "branch-alias": {
                     "dev-master": "3.x-dev"
                 }
@@ -327,26 +392,26 @@
                 }
             ],
             "description": "Format text by applying transformations provided by plug-in formatters.",
-            "time": "2018-10-19T22:35:38+00:00"
+            "time": "2020-10-11T04:15:32+00:00"
         },
         {
             "name": "consolidation/self-update",
-            "version": "1.1.5",
+            "version": "1.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/self-update.git",
-                "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54"
+                "reference": "dba6b2c0708f20fa3ba8008a2353b637578849b4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/self-update/zipball/a1c273b14ce334789825a09d06d4c87c0a02ad54",
-                "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54",
+                "url": "https://api.github.com/repos/consolidation/self-update/zipball/dba6b2c0708f20fa3ba8008a2353b637578849b4",
+                "reference": "dba6b2c0708f20fa3ba8008a2353b637578849b4",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.5.0",
-                "symfony/console": "^2.8|^3|^4",
-                "symfony/filesystem": "^2.5|^3|^4"
+                "symfony/console": "^2.8|^3|^4|^5",
+                "symfony/filesystem": "^2.5|^3|^4|^5"
             },
             "bin": [
                 "scripts/release"
@@ -367,17 +432,17 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Greg Anderson",
-                    "email": "greg.1.anderson@greenknowe.org"
-                },
                 {
                     "name": "Alexander Menk",
                     "email": "menk@mestrona.net"
+                },
+                {
+                    "name": "Greg Anderson",
+                    "email": "greg.1.anderson@greenknowe.org"
                 }
             ],
             "description": "Provides a self:update command for Symfony Console applications.",
-            "time": "2018-10-28T01:52:03+00:00"
+            "time": "2020-04-13T02:49:20+00:00"
         },
         {
             "name": "container-interop/container-interop",
@@ -408,6 +473,7 @@
             ],
             "description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
             "homepage": "https://github.com/container-interop/container-interop",
+            "abandoned": "psr/container",
             "time": "2017-02-14T19:40:03+00:00"
         },
         {
@@ -680,16 +746,16 @@
         },
         {
             "name": "psr/log",
-            "version": "1.1.0",
+            "version": "1.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-fig/log.git",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
                 "shasum": ""
             },
             "require": {
@@ -698,7 +764,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.1.x-dev"
                 }
             },
             "autoload": {
@@ -723,20 +789,20 @@
                 "psr",
                 "psr-3"
             ],
-            "time": "2018-11-20T15:27:04+00:00"
+            "time": "2020-03-23T09:12:05+00:00"
         },
         {
             "name": "symfony/console",
-            "version": "v3.4.22",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "069bf3f0e8f871a2169a06e43d9f3f03f355e9be"
+                "reference": "b28996bc0a3b08914b2a8609163ec35b36b30685"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/069bf3f0e8f871a2169a06e43d9f3f03f355e9be",
-                "reference": "069bf3f0e8f871a2169a06e43d9f3f03f355e9be",
+                "url": "https://api.github.com/repos/symfony/console/zipball/b28996bc0a3b08914b2a8609163ec35b36b30685",
+                "reference": "b28996bc0a3b08914b2a8609163ec35b36b30685",
                 "shasum": ""
             },
             "require": {
@@ -795,20 +861,34 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-25T10:42:12+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-09T05:09:37+00:00"
         },
         {
             "name": "symfony/debug",
-            "version": "v3.4.22",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/debug.git",
-                "reference": "667a26c4dd6bc75c67f06bc9bcd015bdecc7cbb8"
+                "reference": "9109e4414e684d0b75276ae203883467476d25d0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/debug/zipball/667a26c4dd6bc75c67f06bc9bcd015bdecc7cbb8",
-                "reference": "667a26c4dd6bc75c67f06bc9bcd015bdecc7cbb8",
+                "url": "https://api.github.com/repos/symfony/debug/zipball/9109e4414e684d0b75276ae203883467476d25d0",
+                "reference": "9109e4414e684d0b75276ae203883467476d25d0",
                 "shasum": ""
             },
             "require": {
@@ -851,20 +931,34 @@
             ],
             "description": "Symfony Debug Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-25T10:19:25+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-08T22:19:14+00:00"
         },
         {
             "name": "symfony/event-dispatcher",
-            "version": "v3.4.22",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "ed5be1663fa66623b3a7004d5d51a14c4045399b"
+                "reference": "0bb9ea263b39fce3a12ac9f78ef576bdd80dacb8"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ed5be1663fa66623b3a7004d5d51a14c4045399b",
-                "reference": "ed5be1663fa66623b3a7004d5d51a14c4045399b",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/0bb9ea263b39fce3a12ac9f78ef576bdd80dacb8",
+                "reference": "0bb9ea263b39fce3a12ac9f78ef576bdd80dacb8",
                 "shasum": ""
             },
             "require": {
@@ -876,6 +970,7 @@
             "require-dev": {
                 "psr/log": "~1.0",
                 "symfony/config": "~2.8|~3.0|~4.0",
+                "symfony/debug": "~3.4|~4.4",
                 "symfony/dependency-injection": "~3.3|~4.0",
                 "symfony/expression-language": "~2.8|~3.0|~4.0",
                 "symfony/stopwatch": "~2.8|~3.0|~4.0"
@@ -914,20 +1009,34 @@
             ],
             "description": "Symfony EventDispatcher Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-16T13:27:11+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-18T12:06:50+00:00"
         },
         {
             "name": "symfony/filesystem",
-            "version": "v3.4.22",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/filesystem.git",
-                "reference": "b52454ec66fe5082b7a66a491339d1f1da9a5a0d"
+                "reference": "495646f13d051cc5a8f77a68b68313dc854080aa"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/b52454ec66fe5082b7a66a491339d1f1da9a5a0d",
-                "reference": "b52454ec66fe5082b7a66a491339d1f1da9a5a0d",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/495646f13d051cc5a8f77a68b68313dc854080aa",
+                "reference": "495646f13d051cc5a8f77a68b68313dc854080aa",
                 "shasum": ""
             },
             "require": {
@@ -964,20 +1073,34 @@
             ],
             "description": "Symfony Filesystem Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-16T13:27:11+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:06:40+00:00"
         },
         {
             "name": "symfony/finder",
-            "version": "v3.4.22",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "7c0c627220308928e958a87c293108e5891cde1d"
+                "reference": "52140652ed31cee3dabd0c481b5577201fa769b4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/7c0c627220308928e958a87c293108e5891cde1d",
-                "reference": "7c0c627220308928e958a87c293108e5891cde1d",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/52140652ed31cee3dabd0c481b5577201fa769b4",
+                "reference": "52140652ed31cee3dabd0c481b5577201fa769b4",
                 "shasum": ""
             },
             "require": {
@@ -1013,20 +1136,34 @@
             ],
             "description": "Symfony Finder Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-16T13:43:35+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:06:40+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19"
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454",
                 "shasum": ""
             },
             "require": {
@@ -1038,7 +1175,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -1054,13 +1195,13 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                },
                 {
                     "name": "Gert de Pagter",
                     "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony polyfill for ctype functions",
@@ -1071,20 +1212,34 @@
                 "polyfill",
                 "portable"
             ],
-            "time": "2018-08-06T14:22:27+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
             "name": "symfony/polyfill-mbstring",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494"
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a",
                 "shasum": ""
             },
             "require": {
@@ -1096,7 +1251,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -1130,20 +1289,34 @@
                 "portable",
                 "shim"
             ],
-            "time": "2018-09-21T13:07:52+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
             "name": "symfony/process",
-            "version": "v3.4.22",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/process.git",
-                "reference": "009f8dda80930e89e8344a4e310b08f9ff07dd2e"
+                "reference": "46a862d0f334e51c1ed831b49cbe12863ffd5475"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/009f8dda80930e89e8344a4e310b08f9ff07dd2e",
-                "reference": "009f8dda80930e89e8344a4e310b08f9ff07dd2e",
+                "url": "https://api.github.com/repos/symfony/process/zipball/46a862d0f334e51c1ed831b49cbe12863ffd5475",
+                "reference": "46a862d0f334e51c1ed831b49cbe12863ffd5475",
                 "shasum": ""
             },
             "require": {
@@ -1179,20 +1352,34 @@
             ],
             "description": "Symfony Process Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-16T13:27:11+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:06:40+00:00"
         },
         {
             "name": "symfony/yaml",
-            "version": "v3.4.22",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/yaml.git",
-                "reference": "ba11776e9e6c15ad5759a07bffb15899bac75c2d"
+                "reference": "ec3c2ac4d881a4684c1f0317d2107f1a4152bad9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/ba11776e9e6c15ad5759a07bffb15899bac75c2d",
-                "reference": "ba11776e9e6c15ad5759a07bffb15899bac75c2d",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/ec3c2ac4d881a4684c1f0317d2107f1a4152bad9",
+                "reference": "ec3c2ac4d881a4684c1f0317d2107f1a4152bad9",
                 "shasum": ""
             },
             "require": {
@@ -1238,44 +1425,57 @@
             ],
             "description": "Symfony Yaml Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-16T10:59:17+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-18T15:58:55+00:00"
         }
     ],
     "packages-dev": [
         {
-            "name": "behat/gherkin",
-            "version": "v4.6.0",
+            "name": "doctrine/instantiator",
+            "version": "1.0.5",
             "source": {
                 "type": "git",
-                "url": "https://github.com/Behat/Gherkin.git",
-                "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07"
+                "url": "https://github.com/doctrine/instantiator.git",
+                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Behat/Gherkin/zipball/ab0a02ea14893860bca00f225f5621d351a3ad07",
-                "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07",
+                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
+                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.1"
+                "php": ">=5.3,<8.0-DEV"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.5|~5",
-                "symfony/phpunit-bridge": "~2.7|~3|~4",
-                "symfony/yaml": "~2.3|~3|~4"
-            },
-            "suggest": {
-                "symfony/yaml": "If you want to parse features, represented in YAML files"
+                "athletic/athletic": "~0.1.8",
+                "ext-pdo": "*",
+                "ext-phar": "*",
+                "phpunit/phpunit": "~4.0",
+                "squizlabs/php_codesniffer": "~2.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.4-dev"
+                    "dev-master": "1.0.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Behat\\Gherkin": "src/"
+                "psr-4": {
+                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1284,51 +1484,56 @@
             ],
             "authors": [
                 {
-                    "name": "Konstantin Kudryashov",
-                    "email": "ever.zet@gmail.com",
-                    "homepage": "http://everzet.com"
+                    "name": "Marco Pivetta",
+                    "email": "ocramius@gmail.com",
+                    "homepage": "http://ocramius.github.com/"
                 }
             ],
-            "description": "Gherkin DSL parser for PHP 5.3",
-            "homepage": "http://behat.org/",
+            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+            "homepage": "https://github.com/doctrine/instantiator",
             "keywords": [
-                "BDD",
-                "Behat",
-                "Cucumber",
-                "DSL",
-                "gherkin",
-                "parser"
-            ],
-            "time": "2019-01-16T14:22:17+00:00"
+                "constructor",
+                "instantiate"
+            ],
+            "time": "2015-06-14T21:17:01+00:00"
         },
         {
-            "name": "codeception/aspect-mock",
-            "version": "2.1.1",
+            "name": "g1a/composer-test-scenarios",
+            "version": "3.2.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/Codeception/AspectMock.git",
-                "reference": "bf3c000599c0dc75ecb52e19dee2b8ed294cf7ba"
+                "url": "https://github.com/g1a/composer-test-scenarios.git",
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Codeception/AspectMock/zipball/bf3c000599c0dc75ecb52e19dee2b8ed294cf7ba",
-                "reference": "bf3c000599c0dc75ecb52e19dee2b8ed294cf7ba",
+                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/e7394206d845fd593d325440507fb940bef8cb62",
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62",
                 "shasum": ""
             },
             "require": {
-                "goaop/framework": "^2.0.0",
-                "php": ">=5.6.0",
-                "symfony/finder": "~2.4|~3.0"
+                "composer-plugin-api": "^1.0.0 || ^2.0.0",
+                "php": ">=5.4"
             },
             "require-dev": {
-                "codeception/base": "~2.1",
-                "codeception/specify": "~0.3",
-                "codeception/verify": "~0.2"
+                "composer/composer": "^1.10.6 || ^2.0@rc",
+                "php-coveralls/php-coveralls": "^1.0",
+                "phpunit/phpunit": "^4.8.36|^6",
+                "squizlabs/php_codesniffer": "^3.5"
+            },
+            "bin": [
+                "scripts/dependency-licenses"
+            ],
+            "type": "composer-plugin",
+            "extra": {
+                "class": "ComposerTestScenarios\\Plugin",
+                "branch-alias": {
+                    "dev-main": "3.x-dev"
+                }
             },
-            "type": "library",
             "autoload": {
-                "psr-0": {
-                    "AspectMock": "src/"
+                "psr-4": {
+                    "ComposerTestScenarios\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1337,79 +1542,75 @@
             ],
             "authors": [
                 {
-                    "name": "Michael Bodnarchuk",
-                    "email": "davert@codeception.com"
+                    "name": "Greg Anderson",
+                    "email": "greg.1.anderson@greenknowe.org"
                 }
             ],
-            "description": "Experimental Mocking Framework powered by Aspects",
-            "time": "2017-10-24T10:20:17+00:00"
+            "description": "Useful scripts for testing multiple sets of Composer dependencies.",
+            "time": "2020-09-28T20:54:35+00:00"
         },
         {
-            "name": "codeception/base",
-            "version": "2.5.3",
+            "name": "guzzle/guzzle",
+            "version": "v3.8.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/Codeception/base.git",
-                "reference": "ceff0b4fee4846b6bd8b5a37abbbb1acd6e78f58"
+                "url": "https://github.com/guzzle/guzzle.git",
+                "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Codeception/base/zipball/ceff0b4fee4846b6bd8b5a37abbbb1acd6e78f58",
-                "reference": "ceff0b4fee4846b6bd8b5a37abbbb1acd6e78f58",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
+                "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
                 "shasum": ""
             },
             "require": {
-                "behat/gherkin": "^4.4.0",
-                "codeception/phpunit-wrapper": "^6.0.9|^7.0.6",
-                "codeception/stub": "^2.0",
                 "ext-curl": "*",
-                "ext-json": "*",
-                "ext-mbstring": "*",
-                "guzzlehttp/psr7": "~1.0",
-                "php": ">=5.6.0 <8.0",
-                "symfony/browser-kit": ">=2.7 <5.0",
-                "symfony/console": ">=2.7 <5.0",
-                "symfony/css-selector": ">=2.7 <5.0",
-                "symfony/dom-crawler": ">=2.7 <5.0",
-                "symfony/event-dispatcher": ">=2.7 <5.0",
-                "symfony/finder": ">=2.7 <5.0",
-                "symfony/yaml": ">=2.7 <5.0"
+                "php": ">=5.3.3",
+                "symfony/event-dispatcher": ">=2.1"
             },
-            "require-dev": {
-                "codeception/specify": "~0.3",
-                "facebook/graph-sdk": "~5.3",
-                "flow/jsonpath": "~0.2",
-                "monolog/monolog": "~1.8",
-                "pda/pheanstalk": "~3.0",
-                "php-amqplib/php-amqplib": "~2.4",
-                "predis/predis": "^1.0",
-                "squizlabs/php_codesniffer": "~2.0",
-                "symfony/process": ">=2.7 <5.0",
-                "vlucas/phpdotenv": "^3.0"
+            "replace": {
+                "guzzle/batch": "self.version",
+                "guzzle/cache": "self.version",
+                "guzzle/common": "self.version",
+                "guzzle/http": "self.version",
+                "guzzle/inflection": "self.version",
+                "guzzle/iterator": "self.version",
+                "guzzle/log": "self.version",
+                "guzzle/parser": "self.version",
+                "guzzle/plugin": "self.version",
+                "guzzle/plugin-async": "self.version",
+                "guzzle/plugin-backoff": "self.version",
+                "guzzle/plugin-cache": "self.version",
+                "guzzle/plugin-cookie": "self.version",
+                "guzzle/plugin-curlauth": "self.version",
+                "guzzle/plugin-error-response": "self.version",
+                "guzzle/plugin-history": "self.version",
+                "guzzle/plugin-log": "self.version",
+                "guzzle/plugin-md5": "self.version",
+                "guzzle/plugin-mock": "self.version",
+                "guzzle/plugin-oauth": "self.version",
+                "guzzle/service": "self.version",
+                "guzzle/stream": "self.version"
             },
-            "suggest": {
-                "aws/aws-sdk-php": "For using AWS Auth in REST module and Queue module",
-                "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests",
-                "codeception/specify": "BDD-style code blocks",
-                "codeception/verify": "BDD-style assertions",
-                "flow/jsonpath": "For using JSONPath in REST module",
-                "league/factory-muffin": "For DataFactory module",
-                "league/factory-muffin-faker": "For Faker support in DataFactory module",
-                "phpseclib/phpseclib": "for SFTP option in FTP Module",
-                "stecman/symfony-console-completion": "For BASH autocompletion",
-                "symfony/phpunit-bridge": "For phpunit-bridge support"
+            "require-dev": {
+                "doctrine/cache": "*",
+                "monolog/monolog": "1.*",
+                "phpunit/phpunit": "3.7.*",
+                "psr/log": "1.0.*",
+                "symfony/class-loader": "*",
+                "zendframework/zend-cache": "<2.3",
+                "zendframework/zend-log": "<2.3"
             },
-            "bin": [
-                "codecept"
-            ],
             "type": "library",
             "extra": {
-                "branch-alias": []
+                "branch-alias": {
+                    "dev-master": "3.8-dev"
+                }
             },
             "autoload": {
-                "psr-4": {
-                    "Codeception\\": "src/Codeception",
-                    "Codeception\\Extension\\": "ext"
+                "psr-0": {
+                    "Guzzle": "src/",
+                    "Guzzle\\Tests": "tests/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1418,557 +1619,17 @@
             ],
             "authors": [
                 {
-                    "name": "Michael Bodnarchuk",
-                    "email": "davert@mail.ua",
-                    "homepage": "http://codegyre.com"
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
+                },
+                {
+                    "name": "Guzzle Community",
+                    "homepage": "https://github.com/guzzle/guzzle/contributors"
                 }
             ],
-            "description": "BDD-style testing framework",
-            "homepage": "http://codeception.com/",
-            "keywords": [
-                "BDD",
-                "TDD",
-                "acceptance testing",
-                "functional testing",
-                "unit testing"
-            ],
-            "time": "2019-02-02T16:29:38+00:00"
-        },
-        {
-            "name": "codeception/phpunit-wrapper",
-            "version": "6.0.14",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Codeception/phpunit-wrapper.git",
-                "reference": "3b64beb0af3e63145af982e64718ab80d2417739"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/3b64beb0af3e63145af982e64718ab80d2417739",
-                "reference": "3b64beb0af3e63145af982e64718ab80d2417739",
-                "shasum": ""
-            },
-            "require": {
-                "phpunit/php-code-coverage": ">=4.0.4 <6.0",
-                "phpunit/phpunit": ">=5.7.27 <6.5.13",
-                "sebastian/comparator": ">=1.2.4 <3.0",
-                "sebastian/diff": ">=1.4 <4.0"
-            },
-            "replace": {
-                "codeception/phpunit-wrapper": "*"
-            },
-            "require-dev": {
-                "codeception/specify": "*",
-                "vlucas/phpdotenv": "^2.4"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Codeception\\PHPUnit\\": "src\\"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Davert",
-                    "email": "davert.php@resend.cc"
-                }
-            ],
-            "description": "PHPUnit classes used by Codeception",
-            "time": "2019-01-13T10:35:17+00:00"
-        },
-        {
-            "name": "codeception/stub",
-            "version": "2.0.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Codeception/Stub.git",
-                "reference": "f50bc271f392a2836ff80690ce0c058efe1ae03e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Codeception/Stub/zipball/f50bc271f392a2836ff80690ce0c058efe1ae03e",
-                "reference": "f50bc271f392a2836ff80690ce0c058efe1ae03e",
-                "shasum": ""
-            },
-            "require": {
-                "phpunit/phpunit": ">=4.8 <8.0"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Codeception\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "Flexible Stub wrapper for PHPUnit's Mock Builder",
-            "time": "2018-07-26T11:55:37+00:00"
-        },
-        {
-            "name": "codeception/verify",
-            "version": "0.3.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Codeception/Verify.git",
-                "reference": "5d649dda453cd814dadc4bb053060cd2c6bb4b4c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Codeception/Verify/zipball/5d649dda453cd814dadc4bb053060cd2c6bb4b4c",
-                "reference": "5d649dda453cd814dadc4bb053060cd2c6bb4b4c",
-                "shasum": ""
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.0"
-            },
-            "type": "library",
-            "autoload": {
-                "files": [
-                    "src/Codeception/function.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Michael Bodnarchuk",
-                    "email": "davert.php@mailican.com"
-                }
-            ],
-            "description": "BDD assertion library for PHPUnit",
-            "time": "2017-01-09T10:58:51+00:00"
-        },
-        {
-            "name": "doctrine/annotations",
-            "version": "v1.4.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/annotations.git",
-                "reference": "54cacc9b81758b14e3ce750f205a393d52339e97"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/annotations/zipball/54cacc9b81758b14e3ce750f205a393d52339e97",
-                "reference": "54cacc9b81758b14e3ce750f205a393d52339e97",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/lexer": "1.*",
-                "php": "^5.6 || ^7.0"
-            },
-            "require-dev": {
-                "doctrine/cache": "1.*",
-                "phpunit/phpunit": "^5.7"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.4.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
-                },
-                {
-                    "name": "Benjamin Eberlei",
-                    "email": "kontakt@beberlei.de"
-                },
-                {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
-                },
-                {
-                    "name": "Jonathan Wage",
-                    "email": "jonwage@gmail.com"
-                },
-                {
-                    "name": "Johannes Schmitt",
-                    "email": "schmittjoh@gmail.com"
-                }
-            ],
-            "description": "Docblock Annotations Parser",
-            "homepage": "http://www.doctrine-project.org",
-            "keywords": [
-                "annotations",
-                "docblock",
-                "parser"
-            ],
-            "time": "2017-02-24T16:22:25+00:00"
-        },
-        {
-            "name": "doctrine/instantiator",
-            "version": "1.0.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/instantiator.git",
-                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
-                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3,<8.0-DEV"
-            },
-            "require-dev": {
-                "athletic/athletic": "~0.1.8",
-                "ext-pdo": "*",
-                "ext-phar": "*",
-                "phpunit/phpunit": "~4.0",
-                "squizlabs/php_codesniffer": "~2.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Marco Pivetta",
-                    "email": "ocramius@gmail.com",
-                    "homepage": "http://ocramius.github.com/"
-                }
-            ],
-            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
-            "homepage": "https://github.com/doctrine/instantiator",
-            "keywords": [
-                "constructor",
-                "instantiate"
-            ],
-            "time": "2015-06-14T21:17:01+00:00"
-        },
-        {
-            "name": "doctrine/lexer",
-            "version": "v1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/lexer.git",
-                "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c",
-                "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.2"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Doctrine\\Common\\Lexer\\": "lib/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
-                },
-                {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
-                },
-                {
-                    "name": "Johannes Schmitt",
-                    "email": "schmittjoh@gmail.com"
-                }
-            ],
-            "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.",
-            "homepage": "http://www.doctrine-project.org",
-            "keywords": [
-                "lexer",
-                "parser"
-            ],
-            "time": "2014-09-09T13:34:57+00:00"
-        },
-        {
-            "name": "g1a/composer-test-scenarios",
-            "version": "3.0.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/g1a/composer-test-scenarios.git",
-                "reference": "28f932580981e912ab8f01d15788f1dee06550c8"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/28f932580981e912ab8f01d15788f1dee06550c8",
-                "reference": "28f932580981e912ab8f01d15788f1dee06550c8",
-                "shasum": ""
-            },
-            "require": {
-                "composer-plugin-api": "^1.0.0",
-                "php": ">=5.4"
-            },
-            "require-dev": {
-                "composer/composer": "^1.7",
-                "php-coveralls/php-coveralls": "^1.0",
-                "phpunit/phpunit": "^4.8.36|^6",
-                "squizlabs/php_codesniffer": "^2.8"
-            },
-            "bin": [
-                "scripts/dependency-licenses"
-            ],
-            "type": "composer-plugin",
-            "extra": {
-                "class": "ComposerTestScenarios\\Plugin",
-                "branch-alias": {
-                    "dev-master": "3.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "ComposerTestScenarios\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Greg Anderson",
-                    "email": "greg.1.anderson@greenknowe.org"
-                }
-            ],
-            "description": "Useful scripts for testing multiple sets of Composer dependencies.",
-            "time": "2019-02-11T20:22:44+00:00"
-        },
-        {
-            "name": "goaop/framework",
-            "version": "2.1.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/goaop/framework.git",
-                "reference": "6e2a0fe13c1943db02a67588cfd27692bddaffa5"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/goaop/framework/zipball/6e2a0fe13c1943db02a67588cfd27692bddaffa5",
-                "reference": "6e2a0fe13c1943db02a67588cfd27692bddaffa5",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/annotations": "~1.0",
-                "goaop/parser-reflection": "~1.2",
-                "jakubledl/dissect": "~1.0",
-                "php": ">=5.6.0"
-            },
-            "require-dev": {
-                "adlawson/vfs": "^0.12",
-                "doctrine/orm": "^2.5",
-                "phpunit/phpunit": "^4.8",
-                "symfony/console": "^2.7|^3.0"
-            },
-            "suggest": {
-                "symfony/console": "Enables the usage of the command-line tool."
-            },
-            "bin": [
-                "bin/aspect"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Go\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Lisachenko Alexander",
-                    "homepage": "https://github.com/lisachenko"
-                }
-            ],
-            "description": "Framework for aspect-oriented programming in PHP.",
-            "homepage": "http://go.aopphp.com/",
-            "keywords": [
-                "aop",
-                "aspect",
-                "library",
-                "php"
-            ],
-            "time": "2017-07-12T11:46:25+00:00"
-        },
-        {
-            "name": "goaop/parser-reflection",
-            "version": "1.4.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/goaop/parser-reflection.git",
-                "reference": "d9c1dcc7ce4a5284fe3530e011faf9c9c10e1166"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/goaop/parser-reflection/zipball/d9c1dcc7ce4a5284fe3530e011faf9c9c10e1166",
-                "reference": "d9c1dcc7ce4a5284fe3530e011faf9c9c10e1166",
-                "shasum": ""
-            },
-            "require": {
-                "nikic/php-parser": "^1.2|^2.0|^3.0",
-                "php": ">=5.6.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Go\\ParserReflection\\": "src"
-                },
-                "files": [
-                    "src/bootstrap.php"
-                ],
-                "exclude-from-classmap": [
-                    "/tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Alexander Lisachenko",
-                    "email": "lisachenko.it@gmail.com"
-                }
-            ],
-            "description": "Provides reflection information, based on raw source",
-            "time": "2018-03-19T15:57:41+00:00"
-        },
-        {
-            "name": "guzzle/guzzle",
-            "version": "v3.8.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/guzzle/guzzle.git",
-                "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
-                "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
-                "shasum": ""
-            },
-            "require": {
-                "ext-curl": "*",
-                "php": ">=5.3.3",
-                "symfony/event-dispatcher": ">=2.1"
-            },
-            "replace": {
-                "guzzle/batch": "self.version",
-                "guzzle/cache": "self.version",
-                "guzzle/common": "self.version",
-                "guzzle/http": "self.version",
-                "guzzle/inflection": "self.version",
-                "guzzle/iterator": "self.version",
-                "guzzle/log": "self.version",
-                "guzzle/parser": "self.version",
-                "guzzle/plugin": "self.version",
-                "guzzle/plugin-async": "self.version",
-                "guzzle/plugin-backoff": "self.version",
-                "guzzle/plugin-cache": "self.version",
-                "guzzle/plugin-cookie": "self.version",
-                "guzzle/plugin-curlauth": "self.version",
-                "guzzle/plugin-error-response": "self.version",
-                "guzzle/plugin-history": "self.version",
-                "guzzle/plugin-log": "self.version",
-                "guzzle/plugin-md5": "self.version",
-                "guzzle/plugin-mock": "self.version",
-                "guzzle/plugin-oauth": "self.version",
-                "guzzle/service": "self.version",
-                "guzzle/stream": "self.version"
-            },
-            "require-dev": {
-                "doctrine/cache": "*",
-                "monolog/monolog": "1.*",
-                "phpunit/phpunit": "3.7.*",
-                "psr/log": "1.0.*",
-                "symfony/class-loader": "*",
-                "zendframework/zend-cache": "<2.3",
-                "zendframework/zend-log": "<2.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.8-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Guzzle": "src/",
-                    "Guzzle\\Tests": "tests/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Michael Dowling",
-                    "email": "mtdowling@gmail.com",
-                    "homepage": "https://github.com/mtdowling"
-                },
-                {
-                    "name": "Guzzle Community",
-                    "homepage": "https://github.com/guzzle/guzzle/contributors"
-                }
-            ],
-            "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients",
-            "homepage": "http://guzzlephp.org/",
+            "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients",
+            "homepage": "http://guzzlephp.org/",
             "keywords": [
                 "client",
                 "curl",
@@ -1981,128 +1642,6 @@
             "abandoned": "guzzlehttp/guzzle",
             "time": "2014-01-28T22:29:15+00:00"
         },
-        {
-            "name": "guzzlehttp/psr7",
-            "version": "1.5.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/guzzle/psr7.git",
-                "reference": "9f83dded91781a01c63574e387eaa769be769115"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115",
-                "reference": "9f83dded91781a01c63574e387eaa769be769115",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.4.0",
-                "psr/http-message": "~1.0",
-                "ralouphie/getallheaders": "^2.0.5"
-            },
-            "provide": {
-                "psr/http-message-implementation": "1.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.5-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "GuzzleHttp\\Psr7\\": "src/"
-                },
-                "files": [
-                    "src/functions_include.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Michael Dowling",
-                    "email": "mtdowling@gmail.com",
-                    "homepage": "https://github.com/mtdowling"
-                },
-                {
-                    "name": "Tobias Schultze",
-                    "homepage": "https://github.com/Tobion"
-                }
-            ],
-            "description": "PSR-7 message implementation that also provides common utility methods",
-            "keywords": [
-                "http",
-                "message",
-                "psr-7",
-                "request",
-                "response",
-                "stream",
-                "uri",
-                "url"
-            ],
-            "time": "2018-12-04T20:46:45+00:00"
-        },
-        {
-            "name": "jakubledl/dissect",
-            "version": "v1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/jakubledl/dissect.git",
-                "reference": "d3a391de31e45a247e95cef6cf58a91c05af67c4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/jakubledl/dissect/zipball/d3a391de31e45a247e95cef6cf58a91c05af67c4",
-                "reference": "d3a391de31e45a247e95cef6cf58a91c05af67c4",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "symfony/console": "~2.1"
-            },
-            "suggest": {
-                "symfony/console": "for the command-line tool"
-            },
-            "bin": [
-                "bin/dissect.php",
-                "bin/dissect"
-            ],
-            "type": "library",
-            "autoload": {
-                "psr-0": {
-                    "Dissect": [
-                        "src/"
-                    ]
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "unlicense"
-            ],
-            "authors": [
-                {
-                    "name": "Jakub Lédl",
-                    "email": "jakubledl@gmail.com"
-                }
-            ],
-            "description": "Lexing and parsing in pure PHP",
-            "homepage": "https://github.com/jakubledl/dissect",
-            "keywords": [
-                "ast",
-                "lexing",
-                "parser",
-                "parsing"
-            ],
-            "time": "2013-01-29T21:29:14+00:00"
-        },
         {
             "name": "myclabs/deep-copy",
             "version": "1.7.0",
@@ -2144,81 +1683,27 @@
                 "copy",
                 "duplicate",
                 "object",
-                "object graph"
-            ],
-            "time": "2017-10-19T19:58:43+00:00"
-        },
-        {
-            "name": "natxet/CssMin",
-            "version": "v3.0.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/natxet/CssMin.git",
-                "reference": "92de3fe3ccb4f8298d31952490ef7d5395855c39"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/natxet/CssMin/zipball/92de3fe3ccb4f8298d31952490ef7d5395855c39",
-                "reference": "92de3fe3ccb4f8298d31952490ef7d5395855c39",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Joe Scylla",
-                    "email": "joe.scylla@gmail.com",
-                    "homepage": "https://profiles.google.com/joe.scylla"
-                }
-            ],
-            "description": "Minifying CSS",
-            "homepage": "http://code.google.com/p/cssmin/",
-            "keywords": [
-                "css",
-                "minify"
+                "object graph"
             ],
-            "time": "2015-09-25T11:13:11+00:00"
+            "time": "2017-10-19T19:58:43+00:00"
         },
         {
-            "name": "nikic/php-parser",
-            "version": "v3.1.5",
+            "name": "natxet/cssmin",
+            "version": "v3.0.4",
             "source": {
                 "type": "git",
-                "url": "https://github.com/nikic/PHP-Parser.git",
-                "reference": "bb87e28e7d7b8d9a7fda231d37457c9210faf6ce"
+                "url": "https://github.com/natxet/CssMin.git",
+                "reference": "92de3fe3ccb4f8298d31952490ef7d5395855c39"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/bb87e28e7d7b8d9a7fda231d37457c9210faf6ce",
-                "reference": "bb87e28e7d7b8d9a7fda231d37457c9210faf6ce",
+                "url": "https://api.github.com/repos/natxet/CssMin/zipball/92de3fe3ccb4f8298d31952490ef7d5395855c39",
+                "reference": "92de3fe3ccb4f8298d31952490ef7d5395855c39",
                 "shasum": ""
             },
             "require": {
-                "ext-tokenizer": "*",
-                "php": ">=5.5"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.0|~5.0"
+                "php": ">=5.0"
             },
-            "bin": [
-                "bin/php-parse"
-            ],
             "type": "library",
             "extra": {
                 "branch-alias": {
@@ -2226,25 +1711,28 @@
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "PhpParser\\": "lib/PhpParser"
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Nikita Popov"
+                    "name": "Joe Scylla",
+                    "email": "joe.scylla@gmail.com",
+                    "homepage": "https://profiles.google.com/joe.scylla"
                 }
             ],
-            "description": "A PHP parser written in PHP",
+            "description": "Minifying CSS",
+            "homepage": "http://code.google.com/p/cssmin/",
             "keywords": [
-                "parser",
-                "php"
+                "css",
+                "minify"
             ],
-            "time": "2018-02-28T20:30:58+00:00"
+            "time": "2015-09-25T11:13:11+00:00"
         },
         {
             "name": "patchwork/jsqueeze",
@@ -2291,20 +1779,21 @@
                 "javascript",
                 "minification"
             ],
+            "abandoned": true,
             "time": "2016-04-19T09:28:22+00:00"
         },
         {
             "name": "pear/archive_tar",
-            "version": "1.4.6",
+            "version": "1.4.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/pear/Archive_Tar.git",
-                "reference": "b8e33f9063a7cd1d20f079014f8382b3a7aee47e"
+                "reference": "bbb4f10f71a1da2715ec6d9a683f4f23c507a49b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/b8e33f9063a7cd1d20f079014f8382b3a7aee47e",
-                "reference": "b8e33f9063a7cd1d20f079014f8382b3a7aee47e",
+                "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/bbb4f10f71a1da2715ec6d9a683f4f23c507a49b",
+                "reference": "bbb4f10f71a1da2715ec6d9a683f4f23c507a49b",
                 "shasum": ""
             },
             "require": {
@@ -2357,20 +1846,20 @@
                 "archive",
                 "tar"
             ],
-            "time": "2019-02-01T11:10:38+00:00"
+            "time": "2020-09-15T14:13:23+00:00"
         },
         {
             "name": "pear/console_getopt",
-            "version": "v1.4.2",
+            "version": "v1.4.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/pear/Console_Getopt.git",
-                "reference": "6c77aeb625b32bd752e89ee17972d103588b90c0"
+                "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/6c77aeb625b32bd752e89ee17972d103588b90c0",
-                "reference": "6c77aeb625b32bd752e89ee17972d103588b90c0",
+                "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/a41f8d3e668987609178c7c4a9fe48fecac53fa0",
+                "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0",
                 "shasum": ""
             },
             "type": "library",
@@ -2387,11 +1876,6 @@
                 "BSD-2-Clause"
             ],
             "authors": [
-                {
-                    "name": "Greg Beaver",
-                    "email": "cellog@php.net",
-                    "role": "Helper"
-                },
                 {
                     "name": "Andrei Zmievski",
                     "email": "andrei@php.net",
@@ -2401,23 +1885,28 @@
                     "name": "Stig Bakken",
                     "email": "stig@php.net",
                     "role": "Developer"
+                },
+                {
+                    "name": "Greg Beaver",
+                    "email": "cellog@php.net",
+                    "role": "Helper"
                 }
             ],
             "description": "More info available on: http://pear.php.net/package/Console_Getopt",
-            "time": "2019-02-06T16:52:33+00:00"
+            "time": "2019-11-20T18:27:48+00:00"
         },
         {
             "name": "pear/pear-core-minimal",
-            "version": "v1.10.7",
+            "version": "v1.10.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/pear/pear-core-minimal.git",
-                "reference": "19a3e0fcd50492c4357372f623f55f1b144346da"
+                "reference": "625a3c429d9b2c1546438679074cac1b089116a7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/19a3e0fcd50492c4357372f623f55f1b144346da",
-                "reference": "19a3e0fcd50492c4357372f623f55f1b144346da",
+                "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/625a3c429d9b2c1546438679074cac1b089116a7",
+                "reference": "625a3c429d9b2c1546438679074cac1b089116a7",
                 "shasum": ""
             },
             "require": {
@@ -2448,20 +1937,20 @@
                 }
             ],
             "description": "Minimal set of PEAR core files to be used as composer dependency",
-            "time": "2018-12-05T20:03:52+00:00"
+            "time": "2019-11-19T19:00:24+00:00"
         },
         {
             "name": "pear/pear_exception",
-            "version": "v1.0.0",
+            "version": "v1.0.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/pear/PEAR_Exception.git",
-                "reference": "8c18719fdae000b690e3912be401c76e406dd13b"
+                "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/8c18719fdae000b690e3912be401c76e406dd13b",
-                "reference": "8c18719fdae000b690e3912be401c76e406dd13b",
+                "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7",
+                "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7",
                 "shasum": ""
             },
             "require": {
@@ -2477,9 +1966,9 @@
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "PEAR": ""
-                }
+                "classmap": [
+                    "PEAR/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "include-path": [
@@ -2503,7 +1992,7 @@
             "keywords": [
                 "exception"
             ],
-            "time": "2015-02-10T20:07:52+00:00"
+            "time": "2019-12-10T10:24:42+00:00"
         },
         {
             "name": "php-coveralls/php-coveralls",
@@ -2714,38 +2203,38 @@
         },
         {
             "name": "phpspec/prophecy",
-            "version": "1.8.0",
+            "version": "v1.10.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06"
+                "reference": "451c3cd1418cf640de218914901e51b064abb093"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093",
                 "shasum": ""
             },
             "require": {
                 "doctrine/instantiator": "^1.0.2",
                 "php": "^5.3|^7.0",
-                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
-                "sebastian/comparator": "^1.1|^2.0|^3.0",
-                "sebastian/recursion-context": "^1.0|^2.0|^3.0"
+                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+                "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+                "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
             },
             "require-dev": {
-                "phpspec/phpspec": "^2.5|^3.2",
+                "phpspec/phpspec": "^2.5 || ^3.2",
                 "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.8.x-dev"
+                    "dev-master": "1.10.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Prophecy\\": "src/"
+                "psr-4": {
+                    "Prophecy\\": "src/Prophecy"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -2773,7 +2262,7 @@
                 "spy",
                 "stub"
             ],
-            "time": "2018-08-05T17:53:17+00:00"
+            "time": "2020-03-05T15:02:03+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",
@@ -3022,6 +2511,7 @@
             "keywords": [
                 "tokenizer"
             ],
+            "abandoned": true,
             "time": "2017-12-04T08:55:13+00:00"
         },
         {
@@ -3163,98 +2653,9 @@
                 "mock",
                 "xunit"
             ],
+            "abandoned": true,
             "time": "2017-06-30T09:13:00+00:00"
         },
-        {
-            "name": "psr/http-message",
-            "version": "1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/http-message.git",
-                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
-                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Psr\\Http\\Message\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "http://www.php-fig.org/"
-                }
-            ],
-            "description": "Common interface for HTTP messages",
-            "homepage": "https://github.com/php-fig/http-message",
-            "keywords": [
-                "http",
-                "http-message",
-                "psr",
-                "psr-7",
-                "request",
-                "response"
-            ],
-            "time": "2016-08-06T14:39:51+00:00"
-        },
-        {
-            "name": "ralouphie/getallheaders",
-            "version": "2.0.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/ralouphie/getallheaders.git",
-                "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/5601c8a83fbba7ef674a7369456d12f1e0d0eafa",
-                "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~3.7.0",
-                "satooshi/php-coveralls": ">=1.0"
-            },
-            "type": "library",
-            "autoload": {
-                "files": [
-                    "src/getallheaders.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Ralph Khattar",
-                    "email": "ralph.khattar@gmail.com"
-                }
-            ],
-            "description": "A polyfill for getallheaders.",
-            "time": "2016-02-11T07:05:27+00:00"
-        },
         {
             "name": "sebastian/code-unit-reverse-lookup",
             "version": "1.0.1",
@@ -3770,64 +3171,37 @@
         },
         {
             "name": "squizlabs/php_codesniffer",
-            "version": "2.9.2",
+            "version": "3.5.6",
             "source": {
                 "type": "git",
                 "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
-                "reference": "2acf168de78487db620ab4bc524135a13cfe6745"
+                "reference": "e97627871a7eab2f70e59166072a6b767d5834e0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/2acf168de78487db620ab4bc524135a13cfe6745",
-                "reference": "2acf168de78487db620ab4bc524135a13cfe6745",
+                "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/e97627871a7eab2f70e59166072a6b767d5834e0",
+                "reference": "e97627871a7eab2f70e59166072a6b767d5834e0",
                 "shasum": ""
             },
             "require": {
                 "ext-simplexml": "*",
                 "ext-tokenizer": "*",
                 "ext-xmlwriter": "*",
-                "php": ">=5.1.2"
+                "php": ">=5.4.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.0"
+                "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
             },
             "bin": [
-                "scripts/phpcs",
-                "scripts/phpcbf"
+                "bin/phpcs",
+                "bin/phpcbf"
             ],
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.x-dev"
+                    "dev-master": "3.x-dev"
                 }
             },
-            "autoload": {
-                "classmap": [
-                    "CodeSniffer.php",
-                    "CodeSniffer/CLI.php",
-                    "CodeSniffer/Exception.php",
-                    "CodeSniffer/File.php",
-                    "CodeSniffer/Fixer.php",
-                    "CodeSniffer/Report.php",
-                    "CodeSniffer/Reporting.php",
-                    "CodeSniffer/Sniff.php",
-                    "CodeSniffer/Tokens.php",
-                    "CodeSniffer/Reports/",
-                    "CodeSniffer/Tokenizers/",
-                    "CodeSniffer/DocGenerators/",
-                    "CodeSniffer/Standards/AbstractPatternSniff.php",
-                    "CodeSniffer/Standards/AbstractScopeSniff.php",
-                    "CodeSniffer/Standards/AbstractVariableSniff.php",
-                    "CodeSniffer/Standards/IncorrectPatternException.php",
-                    "CodeSniffer/Standards/Generic/Sniffs/",
-                    "CodeSniffer/Standards/MySource/Sniffs/",
-                    "CodeSniffer/Standards/PEAR/Sniffs/",
-                    "CodeSniffer/Standards/PSR1/Sniffs/",
-                    "CodeSniffer/Standards/PSR2/Sniffs/",
-                    "CodeSniffer/Standards/Squiz/Sniffs/",
-                    "CodeSniffer/Standards/Zend/Sniffs/"
-                ]
-            },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "BSD-3-Clause"
@@ -3839,82 +3213,25 @@
                 }
             ],
             "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
-            "homepage": "http://www.squizlabs.com/php-codesniffer",
+            "homepage": "https://github.com/squizlabs/PHP_CodeSniffer",
             "keywords": [
                 "phpcs",
                 "standards"
             ],
-            "time": "2018-11-07T22:31:41+00:00"
-        },
-        {
-            "name": "symfony/browser-kit",
-            "version": "v3.4.22",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/browser-kit.git",
-                "reference": "884689e5d29fc3c48498a0038e96d60e4f91b471"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/browser-kit/zipball/884689e5d29fc3c48498a0038e96d60e4f91b471",
-                "reference": "884689e5d29fc3c48498a0038e96d60e4f91b471",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/dom-crawler": "~2.8|~3.0|~4.0"
-            },
-            "require-dev": {
-                "symfony/css-selector": "~2.8|~3.0|~4.0",
-                "symfony/process": "~2.8|~3.0|~4.0"
-            },
-            "suggest": {
-                "symfony/process": ""
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\BrowserKit\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony BrowserKit Component",
-            "homepage": "https://symfony.com",
-            "time": "2019-01-16T09:39:14+00:00"
+            "time": "2020-08-10T04:50:15+00:00"
         },
         {
             "name": "symfony/config",
-            "version": "v3.4.22",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/config.git",
-                "reference": "c9bc510c217075d42d4a927e285917d0c2001cf4"
+                "reference": "d061a451ff6bc170c5454f4ac9b41ad2179e3960"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/config/zipball/c9bc510c217075d42d4a927e285917d0c2001cf4",
-                "reference": "c9bc510c217075d42d4a927e285917d0c2001cf4",
+                "url": "https://api.github.com/repos/symfony/config/zipball/d061a451ff6bc170c5454f4ac9b41ad2179e3960",
+                "reference": "d061a451ff6bc170c5454f4ac9b41ad2179e3960",
                 "shasum": ""
             },
             "require": {
@@ -3965,85 +3282,38 @@
             ],
             "description": "Symfony Config Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-30T11:33:42+00:00"
-        },
-        {
-            "name": "symfony/css-selector",
-            "version": "v3.4.22",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/css-selector.git",
-                "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/css-selector/zipball/8ca29297c29b64fb3a1a135e71cb25f67f9fdccf",
-                "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.5.9|>=7.0.8"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\CssSelector\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
+            "funding": [
                 {
-                    "name": "Jean-François Simon",
-                    "email": "jeanfrancois.simon@sensiolabs.com"
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
                 },
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
                 },
                 {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
                 }
             ],
-            "description": "Symfony CssSelector Component",
-            "homepage": "https://symfony.com",
-            "time": "2019-01-16T09:39:14+00:00"
+            "time": "2020-09-02T16:06:40+00:00"
         },
         {
-            "name": "symfony/dom-crawler",
-            "version": "v3.4.22",
+            "name": "symfony/stopwatch",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/dom-crawler.git",
-                "reference": "32cb577c07bd900ee883a9d4b55d4098aa02e422"
+                "url": "https://github.com/symfony/stopwatch.git",
+                "reference": "a7a98f40dcc382a332c3729a6d04b298ffbb8f1f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/32cb577c07bd900ee883a9d4b55d4098aa02e422",
-                "reference": "32cb577c07bd900ee883a9d4b55d4098aa02e422",
+                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/a7a98f40dcc382a332c3729a6d04b298ffbb8f1f",
+                "reference": "a7a98f40dcc382a332c3729a6d04b298ffbb8f1f",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/polyfill-ctype": "~1.8",
-                "symfony/polyfill-mbstring": "~1.0"
-            },
-            "require-dev": {
-                "symfony/css-selector": "~2.8|~3.0|~4.0"
-            },
-            "suggest": {
-                "symfony/css-selector": ""
+                "php": "^5.5.9|>=7.0.8"
             },
             "type": "library",
             "extra": {
@@ -4053,7 +3323,7 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\DomCrawler\\": ""
+                    "Symfony\\Component\\Stopwatch\\": ""
                 },
                 "exclude-from-classmap": [
                     "/Tests/"
@@ -4073,87 +3343,50 @@
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony DomCrawler Component",
+            "description": "Symfony Stopwatch Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-16T13:27:11+00:00"
-        },
-        {
-            "name": "symfony/stopwatch",
-            "version": "v3.4.22",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/stopwatch.git",
-                "reference": "2a651c2645c10bbedd21170771f122d935e0dd58"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/2a651c2645c10bbedd21170771f122d935e0dd58",
-                "reference": "2a651c2645c10bbedd21170771f122d935e0dd58",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.5.9|>=7.0.8"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Stopwatch\\": ""
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
                 },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
                 },
                 {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
                 }
             ],
-            "description": "Symfony Stopwatch Component",
-            "homepage": "https://symfony.com",
-            "time": "2019-01-16T09:39:14+00:00"
+            "time": "2020-03-15T09:38:08+00:00"
         },
         {
             "name": "webmozart/assert",
-            "version": "1.4.0",
+            "version": "1.9.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/webmozart/assert.git",
-                "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9"
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9",
-                "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9",
+                "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.3 || ^7.0",
+                "php": "^5.3.3 || ^7.0 || ^8.0",
                 "symfony/polyfill-ctype": "^1.8"
             },
+            "conflict": {
+                "phpstan/phpstan": "<0.12.20",
+                "vimeo/psalm": "<3.9.1"
+            },
             "require-dev": {
-                "phpunit/phpunit": "^4.6",
-                "sebastian/version": "^1.0.1"
+                "phpunit/phpunit": "^4.8.36 || ^7.5.13"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
                     "Webmozart\\Assert\\": "src/"
@@ -4175,7 +3408,7 @@
                 "check",
                 "validate"
             ],
-            "time": "2018-12-25T11:19:39+00:00"
+            "time": "2020-07-08T17:02:28+00:00"
         }
     ],
     "aliases": [],
@@ -4189,5 +3422,6 @@
     "platform-dev": [],
     "platform-overrides": {
         "php": "5.6.3"
-    }
+    },
+    "plugin-api-version": "1.1.0"
 }
diff --git a/vendor/consolidation/robo/phpunit.xml b/vendor/consolidation/robo/phpunit.xml.dist
similarity index 77%
rename from vendor/consolidation/robo/phpunit.xml
rename to vendor/consolidation/robo/phpunit.xml.dist
index b2d8394aa3..f7925d2dc7 100644
--- a/vendor/consolidation/robo/phpunit.xml
+++ b/vendor/consolidation/robo/phpunit.xml.dist
@@ -24,6 +24,15 @@
         <ini name="error_reporting" value="E_ALL" />
     </php>
 
+    <testsuites>
+        <testsuite name="integration">
+            <directory prefix="" suffix="Test.php">tests/integration</directory>
+        </testsuite>
+        <testsuite name="unit">
+            <directory prefix="" suffix="Test.php">tests/phpunit</directory>
+        </testsuite>
+    </testsuites>
+
     <filter>
         <whitelist processUncoveredFilesFromWhitelist="true">
             <directory suffix=".php">./src</directory>
diff --git a/vendor/consolidation/robo/src/Application.php b/vendor/consolidation/robo/src/Application.php
index 6e9bc0dcd8..388f1512f5 100644
--- a/vendor/consolidation/robo/src/Application.php
+++ b/vendor/consolidation/robo/src/Application.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo;
 
 use SelfUpdate\SelfUpdateCommand;
@@ -42,7 +43,7 @@ public function addInitRoboFileCommand($roboFile, $roboClass)
         $createRoboFile->setCode(function () use ($roboClass, $roboFile) {
             $output = Robo::output();
             $output->writeln("<comment>  ~~~ Welcome to Robo! ~~~~ </comment>");
-            $output->writeln("<comment>  ". basename($roboFile) ." will be created in the current directory </comment>");
+            $output->writeln("<comment>  " . basename($roboFile) . " will be created in the current directory </comment>");
             file_put_contents(
                 $roboFile,
                 '<?php'
@@ -61,7 +62,8 @@ public function addInitRoboFileCommand($roboFile, $roboClass)
     /**
      * Add self update command, do nothing if null is provided
      *
-     * @param string $repository GitHub Repository for self update
+     * @param string $repository
+     *   GitHub Repository for self update.
      */
     public function addSelfUpdateCommand($repository = null)
     {
diff --git a/vendor/consolidation/robo/src/ClassDiscovery/ClassDiscoveryInterface.php b/vendor/consolidation/robo/src/ClassDiscovery/ClassDiscoveryInterface.php
index ebbb672728..31c1f6ca78 100644
--- a/vendor/consolidation/robo/src/ClassDiscovery/ClassDiscoveryInterface.php
+++ b/vendor/consolidation/robo/src/ClassDiscovery/ClassDiscoveryInterface.php
@@ -10,7 +10,7 @@
 interface ClassDiscoveryInterface
 {
     /**
-     * @param $searchPattern
+     * @param string $searchPattern
      *
      * @return $this
      */
@@ -22,7 +22,7 @@ public function setSearchPattern($searchPattern);
     public function getClasses();
 
     /**
-     * @param $class
+     * @param string $class
      *
      * @return string|null
      */
diff --git a/vendor/consolidation/robo/src/ClassDiscovery/RelativeNamespaceDiscovery.php b/vendor/consolidation/robo/src/ClassDiscovery/RelativeNamespaceDiscovery.php
index 766de3a4d7..762dcf1aa9 100644
--- a/vendor/consolidation/robo/src/ClassDiscovery/RelativeNamespaceDiscovery.php
+++ b/vendor/consolidation/robo/src/ClassDiscovery/RelativeNamespaceDiscovery.php
@@ -35,7 +35,7 @@ public function __construct(ClassLoader $classLoader)
     /**
      * @param string $relativeNamespace
      *
-     * @return RelativeNamespaceDiscovery
+     * @return $this
      */
     public function setRelativeNamespace($relativeNamespace)
     {
@@ -45,7 +45,7 @@ public function setRelativeNamespace($relativeNamespace)
     }
 
     /**
-     * @inheritDoc
+     * {@inheritDoc}
      */
     public function getClasses()
     {
@@ -54,13 +54,13 @@ public function getClasses()
 
         foreach ($this->classLoader->getPrefixesPsr4() as $baseNamespace => $directories) {
             $directories = array_filter(array_map(function ($directory) use ($relativePath) {
-                return $directory.$relativePath;
+                return $directory . $relativePath;
             }, $directories), 'is_dir');
 
             if ($directories) {
                 foreach ($this->search($directories, $this->searchPattern) as $file) {
                     $relativePathName = $file->getRelativePathname();
-                    $classes[] = $baseNamespace.$this->convertPathToNamespace($relativePath.'/'.$relativePathName);
+                    $classes[] = $baseNamespace . $this->convertPathToNamespace($relativePath . '/' . $relativePathName);
                 }
             }
         }
@@ -77,8 +77,8 @@ public function getFile($class)
     }
 
     /**
-     * @param $directories
-     * @param $pattern
+     * @param string|array $directories
+     * @param string $pattern
      *
      * @return \Symfony\Component\Finder\Finder
      */
@@ -93,9 +93,9 @@ protected function search($directories, $pattern)
     }
 
     /**
-     * @param $path
+     * @param string $path
      *
-     * @return mixed
+     * @return string
      */
     protected function convertPathToNamespace($path)
     {
@@ -103,10 +103,12 @@ protected function convertPathToNamespace($path)
     }
 
     /**
+     * @param string $namespace
+     *
      * @return string
      */
     public function convertNamespaceToPath($namespace)
     {
-        return '/'.str_replace("\\", '/', trim($namespace, '\\'));
+        return '/' . str_replace("\\", '/', trim($namespace, '\\'));
     }
 }
diff --git a/vendor/consolidation/robo/src/Collection/CallableTask.php b/vendor/consolidation/robo/src/Collection/CallableTask.php
index ae9c54fc51..6d511501e6 100644
--- a/vendor/consolidation/robo/src/Collection/CallableTask.php
+++ b/vendor/consolidation/robo/src/Collection/CallableTask.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Collection;
 
 use Robo\Result;
@@ -32,7 +33,7 @@ public function __construct(callable $fn, TaskInterface $reference)
     }
 
     /**
-     * @return \Robo\Result
+     * {@inheritdoc}
      */
     public function run()
     {
@@ -52,6 +53,9 @@ public function run()
         return $result;
     }
 
+    /**
+     * @return \Robo\State\Data
+     */
     public function getState()
     {
         if ($this->reference instanceof StateAwareInterface) {
diff --git a/vendor/consolidation/robo/src/Collection/Collection.php b/vendor/consolidation/robo/src/Collection/Collection.php
index e3e34796b9..17a699b4a5 100644
--- a/vendor/consolidation/robo/src/Collection/Collection.php
+++ b/vendor/consolidation/robo/src/Collection/Collection.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Collection;
 
 use Robo\Exception\AbortTasksException;
@@ -13,7 +14,6 @@
 use Robo\Exception\TaskException;
 use Robo\Exception\TaskExitException;
 use Robo\Contract\CommandInterface;
-
 use Robo\Contract\InflectionInterface;
 use Robo\State\StateAwareInterface;
 use Robo\State\StateAwareTrait;
@@ -42,17 +42,17 @@ class Collection extends BaseTask implements CollectionInterface, CommandInterfa
     protected $taskList = [];
 
     /**
-     * @var TaskInterface[]
+     * @var \Robo\Contract\TaskInterface[]
      */
     protected $rollbackStack = [];
 
     /**
-     * @var TaskInterface[]
+     * @var \Robo\Contract\TaskInterface[]
      */
     protected $completionStack = [];
 
     /**
-     * @var CollectionInterface
+     * @var \Robo\Collection\CollectionInterface
      */
     protected $parentCollection;
 
@@ -74,6 +74,9 @@ public function __construct()
         $this->resetState();
     }
 
+    /**
+     * @param int $interval
+     */
     public function setProgressBarAutoDisplayInterval($interval)
     {
         if (!$this->progressIndicator) {
@@ -209,7 +212,7 @@ function () use ($collection, $rollbackTask) {
      *
      * @param string $method
      * @param string $name
-     * @param callable|TaskInterface $task
+     * @param callable|\Robo\Contract\TaskInterface $task
      * @param string $nameOfTaskToAdd
      *
      * @return $this
@@ -280,7 +283,7 @@ public function ignoreErrorsCodeWrapper(callable $task)
     /**
      * Return the list of task names added to this collection.
      *
-     * @return array
+     * @return string[]
      */
     public function taskNames()
     {
@@ -308,7 +311,7 @@ public function hasTask($name)
      * @param string $name
      *   The name of the task to insert before.  The named task MUST exist.
      *
-     * @return Element
+     * @return \Robo\Collection\Element
      *   The task group for the named task. Generally this is only
      *   used to call 'before()' and 'after()'.
      */
@@ -323,7 +326,7 @@ protected function namedTask($name)
     /**
      * Add a list of tasks to our task collection.
      *
-     * @param TaskInterface[] $tasks
+     * @param \Robo\Contract\TaskInterface[] $tasks
      *   An array of tasks to run with rollback protection
      *
      * @return $this
@@ -342,7 +345,7 @@ public function addTaskList(array $tasks)
      * @param string $name
      * @param \Robo\Contract\TaskInterface $task
      *
-     * @return \Robo\Collection\Collection
+     * @return $this
      */
     protected function addToTaskList($name, TaskInterface $task)
     {
@@ -392,7 +395,7 @@ public function setParentCollection(NestedCollectionInterface $parentCollection)
     /**
      * Get the appropriate parent collection to use
      *
-     * @return CollectionInterface
+     * @return \Robo\Collection\CollectionInterface|$this
      */
     public function getParentCollection()
     {
@@ -413,8 +416,10 @@ public function getParentCollection()
      * function directly is to add a task that sends notification
      * when a task fails.
      *
-     * @param TaskInterface $rollbackTask
+     * @param \Robo\Contract\TaskInterface $rollbackTask
      *   The rollback task to run on failure.
+     *
+     * @return null
      */
     public function registerRollback(TaskInterface $rollbackTask)
     {
@@ -441,8 +446,10 @@ public function registerRollback(TaskInterface $rollbackTask)
      * the nested task completes; they are not deferred to the end of
      * the containing collection's execution.
      *
-     * @param TaskInterface $completionTask
+     * @param \Robo\Contract\TaskInterface $completionTask
      *   The completion task to run at the end of all other operations.
+     *
+     * @return null
      */
     public function registerCompletion(TaskInterface $completionTask)
     {
@@ -547,7 +554,7 @@ private function runWithoutCompletion()
      * Return the failing result, or success if all tasks run.
      *
      * @param string $name
-     * @param TaskInterface[] $taskList
+     * @param \Robo\Contract\TaskInterface[] $taskList
      * @param \Robo\Result $result
      *
      * @return \Robo\Result
@@ -641,7 +648,7 @@ protected function runRollbackTasks()
     }
 
     /**
-     * @param TaskInterface|NestedCollectionInterface|WrappedTaskInterface $task
+     * @param \Robo\Contract\TaskInterface|\Robo\Collection\NestedCollectionInterface|\Robo\Contract\WrappedTaskInterface $task
      *
      * @return \Robo\Result
      */
@@ -662,6 +669,10 @@ protected function runSubtask($task)
         return $taskResult;
     }
 
+    /**
+     * @param \Robo\Contract\TaskInterface $task
+     * @param \Robo\State\Data $taskResult
+     */
     protected function doStateUpdates($task, Data $taskResult)
     {
         $this->updateState($taskResult);
@@ -674,6 +685,13 @@ protected function doStateUpdates($task, Data $taskResult)
         }
     }
 
+    /**
+     * @param \Robo\Contract\TaskInterface $task
+     * @param string $key
+     * @param string $source
+     *
+     * @return $this
+     */
     public function storeState($task, $key, $source = '')
     {
         $this->messageStoreKeys[spl_object_hash($task)] = [$key, $source];
@@ -681,6 +699,13 @@ public function storeState($task, $key, $source = '')
         return $this;
     }
 
+    /**
+     * @param \Robo\Contract\TaskInterface $task
+     * @param string $functionName
+     * @param string $stateKey
+     *
+     * @return $this
+     */
     public function deferTaskConfiguration($task, $functionName, $stateKey)
     {
         return $this->defer(
@@ -698,6 +723,11 @@ function ($task, $state) use ($functionName, $stateKey) {
      * runs. Use this time to provide more settings for the task, e.g. from
      * the collection's shared state, which is populated with the results
      * of previous test runs.
+     *
+     * @param \Robo\Contract\TaskInterface $task
+     * @param callable $callback
+     *
+     * @return $this
      */
     public function defer($task, $callback)
     {
@@ -706,6 +736,9 @@ public function defer($task, $callback)
         return $this;
     }
 
+    /**
+     * @param \Robo\Contract\TaskInterface $task
+     */
     protected function doDeferredInitialization($task)
     {
         // If the task is a state consumer, then call its receiveState method
@@ -727,7 +760,7 @@ protected function doDeferredInitialization($task)
 
     /**
      * @param TaskInterface|NestedCollectionInterface|WrappedTaskInterface $task
-     * @param $parentCollection
+     * @param \Robo\Collection\CollectionInterface $parentCollection
      */
     protected function setParentCollectionForTask($task, $parentCollection)
     {
@@ -744,7 +777,7 @@ protected function setParentCollectionForTask($task, $parentCollection)
      *
      * This is used to roll back or complete.
      *
-     * @param TaskInterface[] $taskList
+     * @param \Robo\Contract\TaskInterface[] $taskList
      */
     protected function runTaskListIgnoringFailures(array $taskList)
     {
@@ -766,7 +799,7 @@ protected function runTaskListIgnoringFailures(array $taskList)
     /**
      * Give all of our tasks to the provided collection builder.
      *
-     * @param CollectionBuilder $builder
+     * @param \Robo\Collection\CollectionBuilder $builder
      */
     public function transferTasks($builder)
     {
diff --git a/vendor/consolidation/robo/src/Collection/CollectionBuilder.php b/vendor/consolidation/robo/src/Collection/CollectionBuilder.php
index 3e037b01e9..5b4ecde8ff 100644
--- a/vendor/consolidation/robo/src/Collection/CollectionBuilder.php
+++ b/vendor/consolidation/robo/src/Collection/CollectionBuilder.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Collection;
 
 use Consolidation\Config\Inject\ConfigForSetters;
@@ -55,12 +56,12 @@ class CollectionBuilder extends BaseTask implements NestedCollectionInterface, W
     protected $commandFile;
 
     /**
-     * @var CollectionInterface
+     * @var \Robo\Collection\CollectionInterface
      */
     protected $collection;
 
     /**
-     * @var TaskInterface
+     * @var \Robo\Contract\TaskInterface
      */
     protected $currentTask;
 
@@ -78,6 +79,12 @@ public function __construct($commandFile)
         $this->resetState();
     }
 
+    /**
+     * @param \League\Container\ContainerInterface $container
+     * @param \Robo\Tasks $commandFile
+     *
+     * @return static
+     */
     public static function create($container, $commandFile)
     {
         $builder = new self($commandFile);
@@ -141,8 +148,9 @@ public function tmpDir($prefix = 'tmp', $base = '', $includeRandomPart = true)
      * any results already in place will be moved out of the way and
      * then deleted.
      *
-     * @param string $finalDestination The path where the working directory
-     *   will be moved once the task collection completes.
+     * @param string $finalDestination
+     *   The path where the working directory will be moved once the task
+     *   collection completes.
      *
      * @return string
      */
@@ -152,6 +160,9 @@ public function workDir($finalDestination)
         return $this->taskWorkDir($finalDestination)->getPath();
     }
 
+    /**
+     * @return $this
+     */
     public function addTask(TaskInterface $task)
     {
         $this->getCollection()->add($task);
@@ -165,6 +176,7 @@ public function addTask(TaskInterface $task)
    *
    * @param callable $code
    * @param int|string $name
+   *
    * @return $this
    */
     public function addCode(callable $code, $name = \Robo\Collection\CollectionInterface::UNNAMEDTASK)
@@ -176,7 +188,7 @@ public function addCode(callable $code, $name = \Robo\Collection\CollectionInter
     /**
      * Add a list of tasks to our task collection.
      *
-     * @param TaskInterface[] $tasks
+     * @param \Robo\Contract\TaskInterface[] $tasks
      *   An array of tasks to run with rollback protection
      *
      * @return $this
@@ -187,6 +199,9 @@ public function addTaskList(array $tasks)
         return $this;
     }
 
+    /**
+     * @return $this
+     */
     public function rollback(TaskInterface $task)
     {
         // Ensure that we have a collection if we are going to add
@@ -195,18 +210,27 @@ public function rollback(TaskInterface $task)
         return $this;
     }
 
+    /**
+     * @return $this
+     */
     public function rollbackCode(callable $rollbackCode)
     {
         $this->getCollection()->rollbackCode($rollbackCode);
         return $this;
     }
 
+    /**
+     * @return $this
+     */
     public function completion(TaskInterface $task)
     {
         $this->getCollection()->completion($task);
         return $this;
     }
 
+    /**
+     * @return $this
+     */
     public function completionCode(callable $completionCode)
     {
         $this->getCollection()->completionCode($completionCode);
@@ -227,8 +251,6 @@ public function progressMessage($text, $context = [], $level = LogLevel::NOTICE)
     }
 
     /**
-     * @param \Robo\Collection\NestedCollectionInterface $parentCollection
-     *
      * @return $this
      */
     public function setParentCollection(NestedCollectionInterface $parentCollection)
@@ -243,7 +265,7 @@ public function setParentCollection(NestedCollectionInterface $parentCollection)
      *
      * TODO: protected
      *
-     * @param TaskInterface $task
+     * @param \Robo\Contract\TaskInterface $task
      *
      * @return $this
      */
@@ -265,28 +287,54 @@ public function addTaskToCollection($task)
         return $this;
     }
 
+    /**
+     * @return \Robo\State\Data
+     */
     public function getState()
     {
         $collection = $this->getCollection();
         return $collection->getState();
     }
 
+    /**
+     * @param int|string $key
+     * @param mixed $source
+     *
+     * @return $this
+     */
     public function storeState($key, $source = '')
     {
-        return $this->callCollectionStateFuntion(__FUNCTION__, func_get_args());
+        return $this->callCollectionStateFunction(__FUNCTION__, func_get_args());
     }
 
+    /**
+     * @param string $functionName
+     * @param int|string $stateKey
+     *
+     * @return $this
+     */
     public function deferTaskConfiguration($functionName, $stateKey)
     {
-        return $this->callCollectionStateFuntion(__FUNCTION__, func_get_args());
+        return $this->callCollectionStateFunction(__FUNCTION__, func_get_args());
     }
 
+    /**
+     * @param callable$callback
+     *
+     * @return $this
+     */
     public function defer($callback)
     {
-        return $this->callCollectionStateFuntion(__FUNCTION__, func_get_args());
+        return $this->callCollectionStateFunction(__FUNCTION__, func_get_args());
     }
 
-    protected function callCollectionStateFuntion($functionName, $args)
+    /**
+     * @param string $functionName
+     * @param array $args
+     *
+     * @return $this
+     */
+    protected function callCollectionStateFunction($functionName, $args)
     {
         $currentTask = ($this->currentTask instanceof WrappedTaskInterface) ? $this->currentTask->original() : $this->currentTask;
 
@@ -298,6 +346,24 @@ protected function callCollectionStateFuntion($functionName, $args)
         return $this;
     }
 
+    /**
+     * @param string $functionName
+     * @param array $args
+     *
+     * @return $this
+     *
+     * @deprecated Use ::callCollectionStateFunction() instead.
+     */
+    protected function callCollectionStateFuntion($functionName, $args)
+    {
+        return $this->callCollectionStateFunction($functionName, $args);
+    }
+
+    /**
+     * @param int $verbosityThreshold
+     *
+     * @return $this
+     */
     public function setVerbosityThreshold($verbosityThreshold)
     {
         $currentTask = ($this->currentTask instanceof WrappedTaskInterface) ? $this->currentTask->original() : $this->currentTask;
@@ -324,7 +390,7 @@ public function getCollectionBuilderCurrentTask()
     /**
      * Create a new builder with its own task collection
      *
-     * @return CollectionBuilder
+     * @return \Robo\Collection\CollectionBuilder
      */
     public function newBuilder()
     {
@@ -413,14 +479,14 @@ public function __call($fn, $args)
      * @param string|object $name
      * @param array $args
      *
-     * @return \Robo\Collection\CollectionBuilder
+     * @return $this
      */
     public function build($name, $args)
     {
         $reflection = new ReflectionClass($name);
         $task = $reflection->newInstanceArgs($args);
         if (!$task) {
-            throw new RuntimeException("Can not construct task $name");
+            throw new \RuntimeException("Can not construct task $name");
         }
         $task = $this->fixTask($task, $args);
         $this->configureTask($name, $task);
@@ -428,7 +494,7 @@ public function build($name, $args)
     }
 
     /**
-     * @param InflectionInterface $task
+     * @param \Robo\Contract\TaskInterface $task
      * @param array $args
      *
      * @return \Robo\Collection\CompletionWrapper|\Robo\Task\Simulator
@@ -479,6 +545,9 @@ protected function fixTask($task, $args)
     /**
      * Check to see if there are any setter methods defined in configuration
      * for this task.
+     *
+     * @param string $taskClass
+     * @param \Robo\Contract\TaskInterface $task
      */
     protected function configureTask($taskClass, $task)
     {
@@ -526,7 +595,7 @@ protected function runTasks()
     }
 
     /**
-     * @return string
+     * {@inheritdoc}
      */
     public function getCommand()
     {
@@ -542,7 +611,7 @@ public function getCommand()
     }
 
     /**
-     * @return \Robo\Collection\Collection
+     * @return \Robo\Collection\CollectionInterface
      */
     public function original()
     {
@@ -552,7 +621,7 @@ public function original()
     /**
      * Return the collection of tasks associated with this builder.
      *
-     * @return CollectionInterface
+     * @return \Robo\Collection\CollectionInterface
      */
     public function getCollection()
     {
diff --git a/vendor/consolidation/robo/src/Collection/CollectionInterface.php b/vendor/consolidation/robo/src/Collection/CollectionInterface.php
index 173ca169cc..5bed6f3aa7 100644
--- a/vendor/consolidation/robo/src/Collection/CollectionInterface.php
+++ b/vendor/consolidation/robo/src/Collection/CollectionInterface.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Collection;
 
 use Psr\Log\LogLevel;
@@ -23,20 +24,21 @@ interface CollectionInterface extends NestedCollectionInterface
      * method ONLY if its 'run()' method completes successfully, and some
      * task added after it fails.
      *
-     * @param TaskInterface $task
+     * @param \Robo\Contract\TaskInterface $task
      *   The task to add to our collection.
      * @param int|string $name
      *   An optional name for the task -- missing or UNNAMEDTASK for unnamed tasks.
      *   Names are used for positioning before and after tasks.
      *
-     * @return CollectionInterface
+     * @return $this
      */
     public function add(TaskInterface $task, $name = self::UNNAMEDTASK);
 
     /**
      * Add arbitrary code to execute as a task.
      *
-     * @param callable $code Code to execute as a task
+     * @param callable $code
+     *   Code to execute as a task
      * @param int|string $name
      *   An optional name for the task -- missing or UNNAMEDTASK for unnamed tasks.
      *   Names are used for positioning before and after tasks.
@@ -51,8 +53,10 @@ public function addCode(callable $code, $name = self::UNNAMEDTASK);
      * provided callback is a TaskInterface or Collection, then it will be
      * executed.
      *
-     * @param CollectionInterface|array $iterable A collection of things to iterate
-     * @param $code $code A callback function to call for each item in the collection.
+     * @param static|array $iterable
+     *   A collection of things to iterate.
+     * @param callable $code
+     *   A callback function to call for each item in the collection.
      *
      * @return $this
      */
@@ -63,7 +67,7 @@ public function addIterable($iterable, callable $code);
      * will execute ONLY if all of the tasks added before it complete
      * successfully, AND some task added after it fails.
      *
-     * @param TaskInterface $rollbackTask
+     * @param \Robo\Contract\TaskInterface $rollbackTask
      *   The rollback task to add.  Note that the 'run()' method of the
      *   task executes, not its 'rollback()' method.  To use the 'rollback()'
      *   method, add the task via 'Collection::add()' instead.
@@ -75,7 +79,8 @@ public function rollback(TaskInterface $rollbackTask);
     /**
      * Add arbitrary code to execute as a rollback.
      *
-     * @param callable $rollbackTask Code to execute during rollback processing
+     * @param callable $rollbackTask
+     *   Code to execute during rollback processing.
      *
      * @return $this
      */
@@ -87,7 +92,7 @@ public function rollbackCode(callable $rollbackTask);
      * any task fails.  Completion tasks never cause errors to be returned
      * from Collection::run(), even if they fail.
      *
-     * @param TaskInterface $completionTask
+     * @param \Robo\Contract\TaskInterface $completionTask
      *   The completion task to add.  Note that the 'run()' method of the
      *   task executes, just as if the task was added normally.
      *
@@ -98,7 +103,8 @@ public function completion(TaskInterface $completionTask);
     /**
      * Add arbitrary code to execute as a completion.
      *
-     * @param callable $completionTask Code to execute after collection completes
+     * @param callable $completionTask
+     *   Code to execute after collection completes
      *
      * @return $this
      */
@@ -109,7 +115,7 @@ public function completionCode(callable $completionTask);
      *
      * @param string $name
      *   The name of the task to insert before.  The named task MUST exist.
-     * @param callable|TaskInterface $task
+     * @param callable|\Robo\Contract\TaskInterface $task
      *   The task to add.
      * @param int|string $nameOfTaskToAdd
      *   The name of the task to add. If not provided, will be associated
@@ -124,7 +130,7 @@ public function before($name, $task, $nameOfTaskToAdd = self::UNNAMEDTASK);
      *
      * @param string $name
      *   The name of the task to insert before.  The named task MUST exist.
-     * @param callable|TaskInterface $task
+     * @param callable|\Robo\Contract\TaskInterface $task
      *   The task to add.
      * @param int|string $nameOfTaskToAdd
      *   The name of the task to add. If not provided, will be associated
@@ -140,10 +146,13 @@ public function after($name, $task, $nameOfTaskToAdd = self::UNNAMEDTASK);
      * method was called. If one of the previous tasks fail, then this
      * message will not be printed.
      *
-     * @param string $text Message to print.
-     * @param array $context Extra context data for use by the logger. Note
+     * @param string $text
+     *   Message to print.
+     * @param array $context
+     *   Extra context data for use by the logger. Note
      *   that the data from the collection state is merged with the provided context.
-     * @param \Psr\Log\LogLevel|string $level The log level to print the information at. Default is NOTICE.
+     * @param \Psr\Log\LogLevel|string $level
+     *   The log level to print the information at. Default is NOTICE.
      *
      * @return $this
      */
diff --git a/vendor/consolidation/robo/src/Collection/CollectionProcessHook.php b/vendor/consolidation/robo/src/Collection/CollectionProcessHook.php
index 91efde7471..e30a5a2c92 100644
--- a/vendor/consolidation/robo/src/Collection/CollectionProcessHook.php
+++ b/vendor/consolidation/robo/src/Collection/CollectionProcessHook.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Collection;
 
 use Consolidation\AnnotatedCommand\Hooks\ProcessResultInterface;
@@ -17,7 +18,7 @@
 class CollectionProcessHook implements ProcessResultInterface
 {
     /**
-     * @param \Robo\Result|\Robo\Contract\TaskInterface $result
+     * @param \Robo\Contract\TaskInterface|mixed $result
      * @param \Consolidation\AnnotatedCommand\CommandData $commandData
      *
      * @return null|\Robo\Result
diff --git a/vendor/consolidation/robo/src/Collection/CompletionWrapper.php b/vendor/consolidation/robo/src/Collection/CompletionWrapper.php
index 3e81bd91cb..d19a789879 100644
--- a/vendor/consolidation/robo/src/Collection/CompletionWrapper.php
+++ b/vendor/consolidation/robo/src/Collection/CompletionWrapper.php
@@ -52,7 +52,7 @@ class CompletionWrapper extends BaseTask implements WrappedTaskInterface
      *
      * @param \Robo\Collection\Collection $collection
      * @param \Robo\Contract\TaskInterface $task
-     * @param \Robo\Contract\TaskInterface|NULL $rollbackTask
+     * @param \Robo\Contract\TaskInterface|null $rollbackTask
      */
     public function __construct(Collection $collection, TaskInterface $task, TaskInterface $rollbackTask = null)
     {
diff --git a/vendor/consolidation/robo/src/Collection/Element.php b/vendor/consolidation/robo/src/Collection/Element.php
index b67b56bbd0..074c05636c 100644
--- a/vendor/consolidation/robo/src/Collection/Element.php
+++ b/vendor/consolidation/robo/src/Collection/Element.php
@@ -20,12 +20,12 @@ class Element
     protected $task;
 
     /**
-     * @var array
+     * @var \Robo\Contract\TaskInterface[]|callable[]
      */
     protected $before = [];
 
     /**
-     * @var array
+     * @var \Robo\Contract\TaskInterface[]|callable[]
      */
     protected $after = [];
 
@@ -35,7 +35,7 @@ public function __construct(TaskInterface $task)
     }
 
     /**
-     * @param mixed $before
+     * @param \Robo\Contract\TaskInterface|callable $before
      * @param string $name
      */
     public function before($before, $name)
@@ -48,7 +48,7 @@ public function before($before, $name)
     }
 
     /**
-     * @param mixed $after
+     * @param \Robo\Contract\TaskInterface|callable $after
      * @param string $name
      */
     public function after($after, $name)
@@ -61,7 +61,7 @@ public function after($after, $name)
     }
 
     /**
-     * @return array
+     * @return \Robo\Contract\TaskInterface[]|callable[]
      */
     public function getBefore()
     {
@@ -69,7 +69,7 @@ public function getBefore()
     }
 
     /**
-     * @return array
+     * @return \Robo\Contract\TaskInterface[]|callable[]
      */
     public function getAfter()
     {
@@ -85,7 +85,7 @@ public function getTask()
     }
 
     /**
-     * @return array
+     * @return \Robo\Contract\TaskInterface[]|callable[]
      */
     public function getTaskList()
     {
diff --git a/vendor/consolidation/robo/src/Collection/NestedCollectionInterface.php b/vendor/consolidation/robo/src/Collection/NestedCollectionInterface.php
index 5e32cf37ab..dad29888fd 100644
--- a/vendor/consolidation/robo/src/Collection/NestedCollectionInterface.php
+++ b/vendor/consolidation/robo/src/Collection/NestedCollectionInterface.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Collection;
 
 interface NestedCollectionInterface
diff --git a/vendor/consolidation/robo/src/Collection/TaskForEach.php b/vendor/consolidation/robo/src/Collection/TaskForEach.php
index 030e50890b..a7396b46a1 100644
--- a/vendor/consolidation/robo/src/Collection/TaskForEach.php
+++ b/vendor/consolidation/robo/src/Collection/TaskForEach.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Collection;
 
 use Robo\Result;
@@ -110,7 +111,7 @@ public function withEachKeyValueCall(callable $fn)
     /**
      * @param callable $fn
      *
-     * @return \Robo\Collection\TaskForEach
+     * @return $this
      */
     public function call(callable $fn)
     {
@@ -124,7 +125,7 @@ function ($key, $value) use ($fn) {
     /**
      * @param callable $fn
      *
-     * @return \Robo\Collection\TaskForEach
+     * @return $this
      */
     public function withBuilder(callable $fn)
     {
diff --git a/vendor/consolidation/robo/src/Collection/Temporary.php b/vendor/consolidation/robo/src/Collection/Temporary.php
index dad25e34ce..9b1352a3dc 100644
--- a/vendor/consolidation/robo/src/Collection/Temporary.php
+++ b/vendor/consolidation/robo/src/Collection/Temporary.php
@@ -25,10 +25,16 @@
  */
 class Temporary
 {
+
+    /**
+     * @var \Robo\Collection\Collection
+     */
     private static $collection;
 
     /**
      * Provides direct access to the collection of temporaries, if necessary.
+     *
+     * @return \Robo\Collection\Collection
      */
     public static function getCollection()
     {
diff --git a/vendor/consolidation/robo/src/Collection/loadTasks.php b/vendor/consolidation/robo/src/Collection/loadTasks.php
index 63a872990e..19d5dd841e 100644
--- a/vendor/consolidation/robo/src/Collection/loadTasks.php
+++ b/vendor/consolidation/robo/src/Collection/loadTasks.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Collection;
 
 trait loadTasks
diff --git a/vendor/consolidation/robo/src/Common/CommandArguments.php b/vendor/consolidation/robo/src/Common/CommandArguments.php
index 12c2e89fd2..276b82b083 100644
--- a/vendor/consolidation/robo/src/Common/CommandArguments.php
+++ b/vendor/consolidation/robo/src/Common/CommandArguments.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Common;
 
 use Robo\Common\ProcessUtils;
@@ -35,8 +36,9 @@ public function arg($arg)
      */
     public function args($args)
     {
+        $func_args = func_get_args();
         if (!is_array($args)) {
-            $args = func_get_args();
+            $args = $func_args;
         }
         $this->arguments .= ' ' . implode(' ', array_map('static::escape', $args));
         return $this;
@@ -96,6 +98,11 @@ public function option($option, $value = null, $separator = ' ')
      * Pass multiple options to executable. The associative array contains
      * the key:value pairs that become `--key value`, for each item in the array.
      * Values are automatically escaped.
+     *
+     * @param array $options
+     * @param string $separator
+     *
+     * @return $this
      */
     public function options(array $options, $separator = ' ')
     {
diff --git a/vendor/consolidation/robo/src/Common/CommandReceiver.php b/vendor/consolidation/robo/src/Common/CommandReceiver.php
index 03b20fced1..091aa6c5cf 100644
--- a/vendor/consolidation/robo/src/Common/CommandReceiver.php
+++ b/vendor/consolidation/robo/src/Common/CommandReceiver.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Common;
 
 use Robo\Contract\CommandInterface;
diff --git a/vendor/consolidation/robo/src/Common/ConfigAwareTrait.php b/vendor/consolidation/robo/src/Common/ConfigAwareTrait.php
index 74b48f073b..c70d1581fa 100644
--- a/vendor/consolidation/robo/src/Common/ConfigAwareTrait.php
+++ b/vendor/consolidation/robo/src/Common/ConfigAwareTrait.php
@@ -8,14 +8,14 @@
 trait ConfigAwareTrait
 {
     /**
-     * @var ConfigInterface
+     * @var \Consolidation\Config\ConfigInterface
      */
     protected $config;
 
     /**
      * Set the config management object.
      *
-     * @param ConfigInterface $config
+     * @param \Consolidation\Config\ConfigInterface $config
      *
      * @return $this
      */
@@ -29,7 +29,7 @@ public function setConfig(ConfigInterface $config)
     /**
      * Get the config management object.
      *
-     * @return \Robo\Config\Config
+     * @return \Consolidation\Config\ConfigInterface
      */
     public function getConfig()
     {
@@ -79,7 +79,7 @@ private static function getClassKey($key)
     /**
      * @param string $key
      * @param mixed $value
-     * @param Config|null $config
+     * @param \Consolidation\Config\ConfigInterface|null $config
      */
     public static function configure($key, $value, $config = null)
     {
diff --git a/vendor/consolidation/robo/src/Common/DynamicParams.php b/vendor/consolidation/robo/src/Common/DynamicParams.php
index 28a1d150f9..dfee6f91e6 100644
--- a/vendor/consolidation/robo/src/Common/DynamicParams.php
+++ b/vendor/consolidation/robo/src/Common/DynamicParams.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Common;
 
 /**
@@ -20,7 +21,7 @@ trait DynamicParams
     public function __call($property, $args)
     {
         if (!property_exists($this, $property)) {
-            throw new \RuntimeException("Property $property in task ".get_class($this).' does not exists');
+            throw new \RuntimeException("Property $property in task " . get_class($this) . ' does not exists');
         }
 
         // toggle boolean values
diff --git a/vendor/consolidation/robo/src/Common/ExecCommand.php b/vendor/consolidation/robo/src/Common/ExecCommand.php
index c3e6c3af63..aec7587bc3 100644
--- a/vendor/consolidation/robo/src/Common/ExecCommand.php
+++ b/vendor/consolidation/robo/src/Common/ExecCommand.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Common;
 
 use Robo\Result;
@@ -124,6 +125,9 @@ protected function useCallOnWindows($cmd)
         return $cmd;
     }
 
+    /**
+     * {@inheritdoc}
+     */
     protected function getCommandDescription()
     {
         return $this->process->getCommandLine();
diff --git a/vendor/consolidation/robo/src/Common/ExecOneCommand.php b/vendor/consolidation/robo/src/Common/ExecOneCommand.php
index 6013751497..7a908fc256 100644
--- a/vendor/consolidation/robo/src/Common/ExecOneCommand.php
+++ b/vendor/consolidation/robo/src/Common/ExecOneCommand.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Common;
 
 /**
diff --git a/vendor/consolidation/robo/src/Common/ExecTrait.php b/vendor/consolidation/robo/src/Common/ExecTrait.php
index 85a9f4c9d5..5c6bc54a9b 100644
--- a/vendor/consolidation/robo/src/Common/ExecTrait.php
+++ b/vendor/consolidation/robo/src/Common/ExecTrait.php
@@ -66,22 +66,60 @@ trait ExecTrait
      */
     abstract public function getCommandDescription();
 
-    /** Typically provided by Timer trait via ProgressIndicatorAwareTrait. */
-    abstract public function startTimer();
-    abstract public function stopTimer();
-    abstract public function getExecutionTime();
+    /**
+     * @see \Robo\Common\ProgressIndicatorAwareTrait
+     * @see \Robo\Common\Timer
+     */
+    abstract protected function startTimer();
+
+    /**
+     * @see \Robo\Common\ProgressIndicatorAwareTrait
+     * @see \Robo\Common\Timer
+     */
+    abstract protected function stopTimer();
+
+    /**
+     * @return null|float
+     *
+     * @see \Robo\Common\ProgressIndicatorAwareTrait
+     * @see \Robo\Common\Timer
+     */
+    abstract protected function getExecutionTime();
+
+    /**
+     * @return bool
+     *
+     * @see \Robo\Common\TaskIO
+     */
+    abstract protected function hideTaskProgress();
+
+    /**
+     * @param bool $inProgress
+     *
+     * @see \Robo\Common\TaskIO
+     */
+    abstract protected function showTaskProgress($inProgress);
 
     /**
-     * Typically provided by TaskIO Trait.
+     * @param string $text
+     * @param null|array $context
+     *
+     * @see \Robo\Common\TaskIO
      */
-    abstract public function hideTaskProgress();
-    abstract public function showTaskProgress($inProgress);
-    abstract public function printTaskInfo($text, $context = null);
+    abstract protected function printTaskInfo($text, $context = null);
 
     /**
-     * Typically provided by VerbosityThresholdTrait.
+     * @return bool
+     *
+     * @see \Robo\Common\VerbosityThresholdTrait
      */
     abstract public function verbosityMeetsThreshold();
+
+    /**
+     * @param string $message
+     *
+     * @see \Robo\Common\VerbosityThresholdTrait
+     */
     abstract public function writeMessage($message);
 
     /**
@@ -105,6 +143,8 @@ public function detectInteractive()
     /**
      * Executes command in background mode (asynchronously)
      *
+     * @param bool $arg
+     *
      * @return $this
      */
     public function background($arg = true)
@@ -141,6 +181,11 @@ public function idleTimeout($timeout)
 
     /**
      * Set a single environment variable, or multiple.
+     *
+     * @param string|array $env
+     * @param bool|string $value
+     *
+     * @return $this
      */
     public function env($env, $value = null)
     {
@@ -179,7 +224,7 @@ public function setInput($input)
     /**
      * Attach tty to process for interactive input
      *
-     * @param $interactive bool
+     * @param bool $interactive
      *
      * @return $this
      */
@@ -275,7 +320,7 @@ public function printMetadata($arg)
     }
 
     /**
-     * @param Process $process
+     * @param \Symfony\Component\Process\Process $process
      * @param callable $output_callback
      *
      * @return \Robo\ResultData
@@ -354,9 +399,6 @@ protected function execute($process, $output_callback = null)
         return new ResultData($this->process->getExitCode());
     }
 
-    /**
-     *
-     */
     protected function stop()
     {
         if ($this->background && isset($this->process) && $this->process->isRunning()) {
@@ -384,9 +426,9 @@ protected function printAction($context = [])
     }
 
     /**
-     * @param $command
+     * @param string $command
      *
-     * @return mixed
+     * @return string
      */
     protected function formatCommandDisplay($command)
     {
diff --git a/vendor/consolidation/robo/src/Common/IO.php b/vendor/consolidation/robo/src/Common/IO.php
index d6c77bff8d..9f0a9955ee 100644
--- a/vendor/consolidation/robo/src/Common/IO.php
+++ b/vendor/consolidation/robo/src/Common/IO.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Common;
 
 use Symfony\Component\Console\Helper\QuestionHelper;
@@ -19,7 +20,9 @@ trait IO
     /**
      * Provide access to SymfonyStyle object.
      *
-     * @return SymfonyStyle
+     * @deprecated Use a style injector instead
+     *
+     * @return \Symfony\Component\Console\Style\SymfonyStyle
      *
      * @see http://symfony.com/blog/new-in-symfony-2-8-console-style-guide
      */
@@ -125,12 +128,13 @@ protected function askDefault($question, $default)
 
     /**
      * @param string $question
+     * @param bool $default
      *
      * @return string
      */
-    protected function confirm($question)
+    protected function confirm($question, $default = false)
     {
-        return $this->doAsk(new ConfirmationQuestion($this->formatQuestion($question . ' (y/n)'), false));
+        return $this->doAsk(new ConfirmationQuestion($this->formatQuestion($question . ' (y/n)'), $default));
     }
 
     /**
diff --git a/vendor/consolidation/robo/src/Common/InflectionTrait.php b/vendor/consolidation/robo/src/Common/InflectionTrait.php
index 8bc4e831c3..0dec2aa629 100644
--- a/vendor/consolidation/robo/src/Common/InflectionTrait.php
+++ b/vendor/consolidation/robo/src/Common/InflectionTrait.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Common;
 
 use Robo\Contract\InflectionInterface;
diff --git a/vendor/consolidation/robo/src/Common/OutputAdapter.php b/vendor/consolidation/robo/src/Common/OutputAdapter.php
index b8e795f23c..556a2fe800 100644
--- a/vendor/consolidation/robo/src/Common/OutputAdapter.php
+++ b/vendor/consolidation/robo/src/Common/OutputAdapter.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Common;
 
 use Robo\Contract\OutputAdapterInterface;
@@ -13,6 +14,9 @@ class OutputAdapter implements OutputAdapterInterface, OutputAwareInterface
 {
     use OutputAwareTrait;
 
+    /**
+     * @var int[]
+     */
     protected $verbosityMap = [
         VerbosityThresholdInterface::VERBOSITY_NORMAL => OutputInterface::VERBOSITY_NORMAL,
         VerbosityThresholdInterface::VERBOSITY_VERBOSE => OutputInterface::VERBOSITY_VERBOSE,
@@ -20,6 +24,9 @@ class OutputAdapter implements OutputAdapterInterface, OutputAwareInterface
         VerbosityThresholdInterface::VERBOSITY_DEBUG => OutputInterface::VERBOSITY_DEBUG,
     ];
 
+    /**
+     * {@inheritdoc}
+     */
     public function verbosityMeetsThreshold($verbosityThreshold)
     {
         if (!isset($this->verbosityMap[$verbosityThreshold])) {
@@ -31,6 +38,9 @@ public function verbosityMeetsThreshold($verbosityThreshold)
         return $verbosity >= $verbosityThreshold;
     }
 
+    /**
+     * {@inheritdoc}
+     */
     public function writeMessage($message)
     {
         $this->output()->write($message);
diff --git a/vendor/consolidation/robo/src/Common/ProcessExecutor.php b/vendor/consolidation/robo/src/Common/ProcessExecutor.php
index f78a477521..a8629780b0 100644
--- a/vendor/consolidation/robo/src/Common/ProcessExecutor.php
+++ b/vendor/consolidation/robo/src/Common/ProcessExecutor.php
@@ -16,14 +16,19 @@ class ProcessExecutor implements ConfigAwareInterface, LoggerAwareInterface, Out
     use OutputAwareTrait;
 
     /**
-     * @param Process $process
-     * @return type
+     * @param \Symfony\Component\Process\Process $process
      */
     public function __construct(Process $process)
     {
         $this->process = $process;
     }
 
+    /**
+     * @param \League\Container\ContainerInterface $container
+     * @param \Symfony\Component\Process\Process $process
+     *
+     * @return static
+     */
     public static function create($container, $process)
     {
         $processExecutor = new self($process);
@@ -37,7 +42,7 @@ public static function create($container, $process)
     }
 
     /**
-     * @return string
+     * {@inheritdoc}
      */
     protected function getCommandDescription()
     {
diff --git a/vendor/consolidation/robo/src/Common/ProcessUtils.php b/vendor/consolidation/robo/src/Common/ProcessUtils.php
index 7dc4e55317..5dcb3e70ca 100644
--- a/vendor/consolidation/robo/src/Common/ProcessUtils.php
+++ b/vendor/consolidation/robo/src/Common/ProcessUtils.php
@@ -26,15 +26,17 @@ private function __construct()
     /**
      * Escapes a string to be used as a shell argument.
      *
-     * @param string $argument The argument that will be escaped
+     * @param string $argument
+     *   The argument that will be escaped.
      *
-     * @return string The escaped argument
+     * @return string
+     *   The escaped argument.
      *
      * @deprecated since version 3.3, to be removed in 4.0. Use a command line array or give env vars to the `Process::start/run()` method instead.
      */
     public static function escapeArgument($argument)
     {
-        @trigger_error('The '.__METHOD__.'() method is a copy of a method that was deprecated by Symfony 3.3 and removed in Symfony 4; it will be removed in Robo 2.0.', E_USER_DEPRECATED);
+        @trigger_error('The ' . __METHOD__ . '() method is a copy of a method that was deprecated by Symfony 3.3 and removed in Symfony 4; it will be removed in Robo 2.0.', E_USER_DEPRECATED);
 
         //Fix for PHP bug #43784 escapeshellarg removes % from given string
         //Fix for PHP bug #49446 escapeshellarg doesn't work on Windows
@@ -52,7 +54,7 @@ public static function escapeArgument($argument)
                     $escapedArgument .= '\\"';
                 } elseif (self::isSurroundedBy($part, '%')) {
                     // Avoid environment variable expansion
-                    $escapedArgument .= '^%"'.substr($part, 1, -1).'"^%';
+                    $escapedArgument .= '^%"' . substr($part, 1, -1) . '"^%';
                 } else {
                     // escape trailing backslash
                     if ('\\' === substr($part, -1)) {
@@ -63,13 +65,13 @@ public static function escapeArgument($argument)
                 }
             }
             if ($quote) {
-                $escapedArgument = '"'.$escapedArgument.'"';
+                $escapedArgument = '"' . $escapedArgument . '"';
             }
 
             return $escapedArgument;
         }
 
-        return "'".str_replace("'", "'\\''", $argument)."'";
+        return "'" . str_replace("'", "'\\''", $argument) . "'";
     }
 
     private static function isSurroundedBy($arg, $char)
diff --git a/vendor/consolidation/robo/src/Common/ProgressIndicator.php b/vendor/consolidation/robo/src/Common/ProgressIndicator.php
index fe6c9298ee..1da42a6df7 100644
--- a/vendor/consolidation/robo/src/Common/ProgressIndicator.php
+++ b/vendor/consolidation/robo/src/Common/ProgressIndicator.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Common;
 
 /**
diff --git a/vendor/consolidation/robo/src/Common/ProgressIndicatorAwareTrait.php b/vendor/consolidation/robo/src/Common/ProgressIndicatorAwareTrait.php
index 060e039a18..544ecd234b 100644
--- a/vendor/consolidation/robo/src/Common/ProgressIndicatorAwareTrait.php
+++ b/vendor/consolidation/robo/src/Common/ProgressIndicatorAwareTrait.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Common;
 
 use Robo\Contract\ProgressIndicatorAwareInterface;
@@ -24,7 +25,7 @@ public function progressIndicatorSteps()
     /**
      * @param null|\Robo\Common\ProgressIndicator $progressIndicator
      *
-     * @return ProgressIndicatorAwareInterface
+     * @return $this
      */
     public function setProgressIndicator($progressIndicator)
     {
@@ -78,7 +79,8 @@ protected function startProgressIndicator()
     {
         $this->startTimer();
         if ($this instanceof VerbosityThresholdInterface
-            && !$this->verbosityMeetsThreshold()) {
+            && !$this->verbosityMeetsThreshold()
+        ) {
             return;
         }
         if (!$this->progressIndicator) {
diff --git a/vendor/consolidation/robo/src/Common/ResourceExistenceChecker.php b/vendor/consolidation/robo/src/Common/ResourceExistenceChecker.php
index 233f90a9b7..ad0a614a7f 100644
--- a/vendor/consolidation/robo/src/Common/ResourceExistenceChecker.php
+++ b/vendor/consolidation/robo/src/Common/ResourceExistenceChecker.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Common;
 
 trait ResourceExistenceChecker
@@ -7,9 +8,11 @@ trait ResourceExistenceChecker
      * Checks if the given input is a file or folder.
      *
      * @param string|string[] $resources
-     * @param string $type "file", "dir", "fileAndDir"
+     * @param string $type
+     *   Allowed values: "file", "dir", "fileAndDir"
      *
-     * @return bool True if no errors were encountered otherwise false.
+     * @return bool
+     *   True if no errors were encountered otherwise false.
      */
     protected function checkResources($resources, $type = 'fileAndDir')
     {
@@ -41,8 +44,10 @@ protected function checkResources($resources, $type = 'fileAndDir')
      *
      * It will print an error as well on the console.
      *
-     * @param string $resource File or folder.
-     * @param string $type "file", "dir", "fileAndDir"
+     * @param string $resource
+     *   File or folder.
+     * @param string $type
+     *   Allowed values: "file", "dir", "fileAndDir".
      *
      * @return bool
      */
diff --git a/vendor/consolidation/robo/src/Common/TaskIO.php b/vendor/consolidation/robo/src/Common/TaskIO.php
index 49b5ccd86c..297982a50e 100644
--- a/vendor/consolidation/robo/src/Common/TaskIO.php
+++ b/vendor/consolidation/robo/src/Common/TaskIO.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Common;
 
 use Robo\Robo;
@@ -22,7 +23,7 @@ trait TaskIO
     use VerbosityThresholdTrait;
 
     /**
-     * @return mixed|null|\Psr\Log\LoggerInterface
+     * @return null|\Psr\Log\LoggerInterface
      */
     public function logger()
     {
@@ -169,7 +170,7 @@ protected function hideTaskProgress()
     }
 
     /**
-     * @param $inProgress
+     * @param bool $inProgress
      */
     protected function showTaskProgress($inProgress)
     {
@@ -218,7 +219,8 @@ protected function getPrintedTaskName($task = null)
     /**
      * @param null|array $context
      *
-     * @return array with context information
+     * @return array
+     *   Context information.
      */
     protected function getTaskContext($context = null)
     {
diff --git a/vendor/consolidation/robo/src/Common/TimeKeeper.php b/vendor/consolidation/robo/src/Common/TimeKeeper.php
index 1cd3e33444..a57881e604 100644
--- a/vendor/consolidation/robo/src/Common/TimeKeeper.php
+++ b/vendor/consolidation/robo/src/Common/TimeKeeper.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Common;
 
 class TimeKeeper
@@ -44,9 +45,10 @@ public function elapsed()
     }
 
     /**
-     * Format a duration into a human-readable time
+     * Format a duration into a human-readable time.
      *
-     * @param float $duration Duration in seconds, with fractional component
+     * @param float $duration
+     *   Duration in seconds, with fractional component.
      *
      * @return string
      */
@@ -64,6 +66,6 @@ public static function formatDuration($duration)
         if ($duration > self::MINUTE) {
             return gmdate("i:s", $duration);
         }
-        return round($duration, 3).'s';
+        return round($duration, 3) . 's';
     }
 }
diff --git a/vendor/consolidation/robo/src/Common/Timer.php b/vendor/consolidation/robo/src/Common/Timer.php
index 955eb5bb3b..dfa8b14cfc 100644
--- a/vendor/consolidation/robo/src/Common/Timer.php
+++ b/vendor/consolidation/robo/src/Common/Timer.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Common;
 
 trait Timer
diff --git a/vendor/consolidation/robo/src/Common/VerbosityThresholdTrait.php b/vendor/consolidation/robo/src/Common/VerbosityThresholdTrait.php
index 2fc51c22b7..afdeff5c5c 100644
--- a/vendor/consolidation/robo/src/Common/VerbosityThresholdTrait.php
+++ b/vendor/consolidation/robo/src/Common/VerbosityThresholdTrait.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Common;
 
 use Robo\Robo;
@@ -20,13 +21,23 @@
  */
 trait VerbosityThresholdTrait
 {
-    /** var OutputAdapterInterface */
+    /**
+     * @var \Robo\Contract\OutputAdapterInterface
+     */
     protected $outputAdapter;
+
+    /**
+     * @var int
+     */
     protected $verbosityThreshold = 0;
 
     /**
-     * Required verbocity level before any TaskIO output will be produced.
+     * Required verbosity level before any TaskIO output will be produced.
      * e.g. OutputInterface::VERBOSITY_VERBOSE
+     *
+     * @param int $verbosityThreshold
+     *
+     * @return $this
      */
     public function setVerbosityThreshold($verbosityThreshold)
     {
@@ -34,6 +45,9 @@ public function setVerbosityThreshold($verbosityThreshold)
         return $this;
     }
 
+    /**
+     * @return int
+     */
     public function verbosityThreshold()
     {
         return $this->verbosityThreshold;
@@ -45,18 +59,24 @@ public function setOutputAdapter(OutputAdapterInterface $outputAdapter)
     }
 
     /**
-     * @return OutputAdapterInterface
+     * @return \Robo\Contract\OutputAdapterInterface
      */
     public function outputAdapter()
     {
         return $this->outputAdapter;
     }
 
+    /**
+     * @return bool
+     */
     public function hasOutputAdapter()
     {
         return isset($this->outputAdapter);
     }
 
+    /**
+     * @return bool
+     */
     public function verbosityMeetsThreshold()
     {
         if ($this->hasOutputAdapter()) {
@@ -67,7 +87,9 @@ public function verbosityMeetsThreshold()
 
     /**
      * Print a message if the selected verbosity level is over this task's
-     * verbosity threshhold.
+     * verbosity threshold.
+     *
+     * @param string $message
      */
     public function writeMessage($message)
     {
diff --git a/vendor/consolidation/robo/src/Config.php b/vendor/consolidation/robo/src/Config.php
index 9e9370d811..e1b328a631 100644
--- a/vendor/consolidation/robo/src/Config.php
+++ b/vendor/consolidation/robo/src/Config.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo;
 
 /**
diff --git a/vendor/consolidation/robo/src/Config/Config.php b/vendor/consolidation/robo/src/Config/Config.php
index 78b135a32a..7f2186e94c 100644
--- a/vendor/consolidation/robo/src/Config/Config.php
+++ b/vendor/consolidation/robo/src/Config/Config.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Config;
 
 use Consolidation\Config\Util\ConfigOverlay;
@@ -70,6 +71,10 @@ public function getGlobalOptionDefaultValues()
 
     /**
      * Remove the 'options.' prefix from the global options list.
+     *
+     * @param array $globalOptions
+     *
+     * @return array
      */
     protected function trimPrefixFromGlobalOptions($globalOptions)
     {
diff --git a/vendor/consolidation/robo/src/Config/GlobalOptionDefaultValuesInterface.php b/vendor/consolidation/robo/src/Config/GlobalOptionDefaultValuesInterface.php
index f763945548..313494f730 100644
--- a/vendor/consolidation/robo/src/Config/GlobalOptionDefaultValuesInterface.php
+++ b/vendor/consolidation/robo/src/Config/GlobalOptionDefaultValuesInterface.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Config;
 
 /**
diff --git a/vendor/consolidation/robo/src/Contract/CommandInterface.php b/vendor/consolidation/robo/src/Contract/CommandInterface.php
index e5099b043c..4d8cccecfd 100644
--- a/vendor/consolidation/robo/src/Contract/CommandInterface.php
+++ b/vendor/consolidation/robo/src/Contract/CommandInterface.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Contract;
 
 /**
diff --git a/vendor/consolidation/robo/src/Contract/CompletionInterface.php b/vendor/consolidation/robo/src/Contract/CompletionInterface.php
index a3b1c4e8da..8521ff3025 100644
--- a/vendor/consolidation/robo/src/Contract/CompletionInterface.php
+++ b/vendor/consolidation/robo/src/Contract/CompletionInterface.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Contract;
 
 /**
diff --git a/vendor/consolidation/robo/src/Contract/IOAwareInterface.php b/vendor/consolidation/robo/src/Contract/IOAwareInterface.php
index 2daa5fb64c..d5d8b32dc3 100644
--- a/vendor/consolidation/robo/src/Contract/IOAwareInterface.php
+++ b/vendor/consolidation/robo/src/Contract/IOAwareInterface.php
@@ -6,7 +6,7 @@
 
 namespace Robo\Contract;
 
-use \Symfony\Component\Console\Input\InputAwareInterface;
+use Symfony\Component\Console\Input\InputAwareInterface;
 
 interface IOAwareInterface extends OutputAwareInterface, InputAwareInterface
 {
diff --git a/vendor/consolidation/robo/src/Contract/InflectionInterface.php b/vendor/consolidation/robo/src/Contract/InflectionInterface.php
index 449cecfecb..a15680c61e 100644
--- a/vendor/consolidation/robo/src/Contract/InflectionInterface.php
+++ b/vendor/consolidation/robo/src/Contract/InflectionInterface.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Contract;
 
 interface InflectionInterface
diff --git a/vendor/consolidation/robo/src/Contract/OutputAdapterInterface.php b/vendor/consolidation/robo/src/Contract/OutputAdapterInterface.php
index 948d384cba..7002579262 100644
--- a/vendor/consolidation/robo/src/Contract/OutputAdapterInterface.php
+++ b/vendor/consolidation/robo/src/Contract/OutputAdapterInterface.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Contract;
 
 /**
@@ -6,6 +7,15 @@
  */
 interface OutputAdapterInterface
 {
+    /**
+     * @param int $verbosityThreshold
+     *
+     * @return bool
+     */
     public function verbosityMeetsThreshold($verbosityThreshold);
+
+    /**
+     * @param string $message
+     */
     public function writeMessage($message);
 }
diff --git a/vendor/consolidation/robo/src/Contract/PrintedInterface.php b/vendor/consolidation/robo/src/Contract/PrintedInterface.php
index d380643ba1..3cf4edfa26 100644
--- a/vendor/consolidation/robo/src/Contract/PrintedInterface.php
+++ b/vendor/consolidation/robo/src/Contract/PrintedInterface.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Contract;
 
 /**
diff --git a/vendor/consolidation/robo/src/Contract/ProgressIndicatorAwareInterface.php b/vendor/consolidation/robo/src/Contract/ProgressIndicatorAwareInterface.php
index 47cede9ce0..7bc8243532 100644
--- a/vendor/consolidation/robo/src/Contract/ProgressIndicatorAwareInterface.php
+++ b/vendor/consolidation/robo/src/Contract/ProgressIndicatorAwareInterface.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Contract;
 
 /**
diff --git a/vendor/consolidation/robo/src/Contract/RollbackInterface.php b/vendor/consolidation/robo/src/Contract/RollbackInterface.php
index 394822cd45..947544e4c2 100644
--- a/vendor/consolidation/robo/src/Contract/RollbackInterface.php
+++ b/vendor/consolidation/robo/src/Contract/RollbackInterface.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Contract;
 
 /**
diff --git a/vendor/consolidation/robo/src/Contract/SimulatedInterface.php b/vendor/consolidation/robo/src/Contract/SimulatedInterface.php
index 826f4b96c2..f98f9a84da 100644
--- a/vendor/consolidation/robo/src/Contract/SimulatedInterface.php
+++ b/vendor/consolidation/robo/src/Contract/SimulatedInterface.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Contract;
 
 /**
diff --git a/vendor/consolidation/robo/src/Contract/TaskInterface.php b/vendor/consolidation/robo/src/Contract/TaskInterface.php
index c477d16cfa..82366d8407 100644
--- a/vendor/consolidation/robo/src/Contract/TaskInterface.php
+++ b/vendor/consolidation/robo/src/Contract/TaskInterface.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Contract;
 
 /**
diff --git a/vendor/consolidation/robo/src/Contract/VerbosityThresholdInterface.php b/vendor/consolidation/robo/src/Contract/VerbosityThresholdInterface.php
index e63a1f7044..23bd29c29c 100644
--- a/vendor/consolidation/robo/src/Contract/VerbosityThresholdInterface.php
+++ b/vendor/consolidation/robo/src/Contract/VerbosityThresholdInterface.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Contract;
 
 use Robo\Contract\OutputAdapterInterface;
@@ -14,11 +15,40 @@ interface VerbosityThresholdInterface
     const VERBOSITY_VERY_VERBOSE = 3;
     const VERBOSITY_DEBUG = 4;
 
+    /**
+     * @param int $verbosityThreshold
+     *
+     * @return $this
+     */
     public function setVerbosityThreshold($verbosityThreshold);
+
+    /**
+     * @return int
+     */
     public function verbosityThreshold();
+
+    /**
+     * @param \Robo\Contract\OutputAdapterInterface $outputAdapter
+     */
     public function setOutputAdapter(OutputAdapterInterface $outputAdapter);
+
+    /**
+     * @return \Robo\Contract\OutputAdapterInterface
+     */
     public function outputAdapter();
+
+    /**
+     * @return bool
+     */
     public function hasOutputAdapter();
+
+    /**
+     * @return int
+     */
     public function verbosityMeetsThreshold();
+
+    /**
+     * @param string $message
+     */
     public function writeMessage($message);
 }
diff --git a/vendor/consolidation/robo/src/Contract/WrappedTaskInterface.php b/vendor/consolidation/robo/src/Contract/WrappedTaskInterface.php
index 65028769fa..d164c6a317 100644
--- a/vendor/consolidation/robo/src/Contract/WrappedTaskInterface.php
+++ b/vendor/consolidation/robo/src/Contract/WrappedTaskInterface.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Contract;
 
 interface WrappedTaskInterface extends TaskInterface
diff --git a/vendor/consolidation/robo/src/Exception/AbortTasksException.php b/vendor/consolidation/robo/src/Exception/AbortTasksException.php
index 120451f0ae..118907574b 100644
--- a/vendor/consolidation/robo/src/Exception/AbortTasksException.php
+++ b/vendor/consolidation/robo/src/Exception/AbortTasksException.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Exception;
 
 /**
diff --git a/vendor/consolidation/robo/src/Exception/TaskException.php b/vendor/consolidation/robo/src/Exception/TaskException.php
index fdc84a5e4b..3b6a48497c 100644
--- a/vendor/consolidation/robo/src/Exception/TaskException.php
+++ b/vendor/consolidation/robo/src/Exception/TaskException.php
@@ -1,8 +1,16 @@
 <?php
+
 namespace Robo\Exception;
 
 class TaskException extends \Exception
 {
+
+    /**
+     * TaskException constructor.
+     *
+     * @param string|object $class
+     * @param string $message
+     */
     public function __construct($class, $message)
     {
         if (is_object($class)) {
diff --git a/vendor/consolidation/robo/src/Exception/TaskExitException.php b/vendor/consolidation/robo/src/Exception/TaskExitException.php
index 9db5329ab6..6f1a627b34 100644
--- a/vendor/consolidation/robo/src/Exception/TaskExitException.php
+++ b/vendor/consolidation/robo/src/Exception/TaskExitException.php
@@ -1,8 +1,17 @@
 <?php
+
 namespace Robo\Exception;
 
 class TaskExitException extends \Exception
 {
+
+    /**
+     * TaskExitException constructor.
+     *
+     * @param string|object $class
+     * @param string $message
+     * @param int $status
+     */
     public function __construct($class, $message, $status)
     {
         if (is_object($class)) {
diff --git a/vendor/consolidation/robo/src/GlobalOptionsEventListener.php b/vendor/consolidation/robo/src/GlobalOptionsEventListener.php
index b26d10cd0e..b32cb25857 100644
--- a/vendor/consolidation/robo/src/GlobalOptionsEventListener.php
+++ b/vendor/consolidation/robo/src/GlobalOptionsEventListener.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo;
 
 use Symfony\Component\Console\ConsoleEvents;
@@ -12,10 +13,14 @@ class GlobalOptionsEventListener implements EventSubscriberInterface, ConfigAwar
 {
     use ConfigAwareTrait;
 
-    /** @var Application */
+    /**
+     * @var \Robo\Application
+     */
     protected $application;
 
-    /** @var string */
+    /**
+     * @var string
+     */
     protected $prefix;
 
     /**
@@ -28,6 +33,10 @@ public function __construct()
 
     /**
      * Add a reference to the Symfony Console application object.
+     *
+     * @param \Robo\Application $application
+     *
+     * @return $this
      */
     public function setApplication($application)
     {
@@ -37,7 +46,10 @@ public function setApplication($application)
 
     /**
      * Stipulate the prefix to use for option injection.
+     *
      * @param string $prefix
+     *
+     * @return $this
      */
     public function setGlobalOptionsPrefix($prefix)
     {
@@ -118,6 +130,7 @@ public function setConfigurationValues(ConsoleCommandEvent $event)
      * the input string contains no '=' character, then the value will be 'true'.
      *
      * @param string $value
+     *
      * @return array
      */
     protected function splitConfigKeyValue($value)
@@ -130,6 +143,8 @@ protected function splitConfigKeyValue($value)
     /**
      * Get default option values from the Symfony Console application, if
      * it is available.
+     *
+     * @return array
      */
     protected function applicationOptionDefaultValues()
     {
diff --git a/vendor/consolidation/robo/src/LoadAllTasks.php b/vendor/consolidation/robo/src/LoadAllTasks.php
index 3183d5b6a3..6a6b9cbf38 100644
--- a/vendor/consolidation/robo/src/LoadAllTasks.php
+++ b/vendor/consolidation/robo/src/LoadAllTasks.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo;
 
 trait LoadAllTasks
diff --git a/vendor/consolidation/robo/src/Log/ResultPrinter.php b/vendor/consolidation/robo/src/Log/ResultPrinter.php
index a6f166a093..6e0dfd83f4 100644
--- a/vendor/consolidation/robo/src/Log/ResultPrinter.php
+++ b/vendor/consolidation/robo/src/Log/ResultPrinter.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Log;
 
 use Robo\Result;
@@ -6,7 +7,6 @@
 use Robo\Contract\ProgressIndicatorAwareInterface;
 use Robo\Contract\VerbosityThresholdInterface;
 use Robo\Common\ProgressIndicatorAwareTrait;
-
 use Psr\Log\LogLevel;
 use Psr\Log\LoggerAwareInterface;
 use Psr\Log\LoggerAwareTrait;
@@ -27,7 +27,7 @@ class ResultPrinter implements LoggerAwareInterface, ProgressIndicatorAwareInter
      *
      * @param \Robo\Result $result
      *
-     * @return bool
+     * @return null|bool
      */
     public function printResult(Result $result)
     {
diff --git a/vendor/consolidation/robo/src/Log/RoboLogLevel.php b/vendor/consolidation/robo/src/Log/RoboLogLevel.php
index d7d5eb0a6e..7a710b08b9 100644
--- a/vendor/consolidation/robo/src/Log/RoboLogLevel.php
+++ b/vendor/consolidation/robo/src/Log/RoboLogLevel.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Log;
 
 class RoboLogLevel extends \Consolidation\Log\ConsoleLogLevel
diff --git a/vendor/consolidation/robo/src/Log/RoboLogStyle.php b/vendor/consolidation/robo/src/Log/RoboLogStyle.php
index e4999a8793..2c1b71ee82 100644
--- a/vendor/consolidation/robo/src/Log/RoboLogStyle.php
+++ b/vendor/consolidation/robo/src/Log/RoboLogStyle.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Log;
 
 use Robo\Common\TimeKeeper;
diff --git a/vendor/consolidation/robo/src/Log/RoboLogger.php b/vendor/consolidation/robo/src/Log/RoboLogger.php
index 75cf23f7cc..2ff3b384bc 100644
--- a/vendor/consolidation/robo/src/Log/RoboLogger.php
+++ b/vendor/consolidation/robo/src/Log/RoboLogger.php
@@ -1,8 +1,8 @@
 <?php
+
 namespace Robo\Log;
 
 use Consolidation\Log\Logger;
-
 use Psr\Log\LogLevel;
 use Symfony\Component\Console\Output\OutputInterface;
 
diff --git a/vendor/consolidation/robo/src/Result.php b/vendor/consolidation/robo/src/Result.php
index 7d77935209..b343b8c565 100644
--- a/vendor/consolidation/robo/src/Result.php
+++ b/vendor/consolidation/robo/src/Result.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo;
 
 use Robo\Contract\TaskInterface;
@@ -19,7 +20,7 @@ class Result extends ResultData
 
     /**
      * @param \Robo\Contract\TaskInterface $task
-     * @param string $exitCode
+     * @param int $exitCode
      * @param string $message
      * @param array $data
      */
@@ -37,6 +38,11 @@ public function __construct(TaskInterface $task, $exitCode, $message = '', $data
     /**
      * Tasks should always return a Result. However, they are also
      * allowed to return NULL or an array to indicate success.
+     *
+     * @param \Robo\Contract\TaskInterface $task
+     * @param \Robo\Result|\Robo\State\Data|\Robo\ResultData|array|null
+     *
+     * @return static
      */
     public static function ensureResult($task, $result)
     {
@@ -79,7 +85,7 @@ protected function printResult()
      * @param string $extension
      * @param string $service
      *
-     * @return \Robo\Result
+     * @return static
      */
     public static function errorMissingExtension(TaskInterface $task, $extension, $service)
     {
@@ -94,7 +100,7 @@ public static function errorMissingExtension(TaskInterface $task, $extension, $s
      * @param string $class
      * @param string $package
      *
-     * @return \Robo\Result
+     * @return static
      */
     public static function errorMissingPackage(TaskInterface $task, $class, $package)
     {
@@ -109,7 +115,7 @@ public static function errorMissingPackage(TaskInterface $task, $class, $package
      * @param string $message
      * @param array $data
      *
-     * @return \Robo\Result
+     * @return static
      */
     public static function error(TaskInterface $task, $message, $data = [])
     {
@@ -121,7 +127,7 @@ public static function error(TaskInterface $task, $message, $data = [])
      * @param \Exception $e
      * @param array $data
      *
-     * @return \Robo\Result
+     * @return static
      */
     public static function fromException(TaskInterface $task, \Exception $e, $data = [])
     {
@@ -137,7 +143,7 @@ public static function fromException(TaskInterface $task, \Exception $e, $data =
      * @param string $message
      * @param array $data
      *
-     * @return \Robo\Result
+     * @return static
      */
     public static function success(TaskInterface $task, $message = '', $data = [])
     {
diff --git a/vendor/consolidation/robo/src/ResultData.php b/vendor/consolidation/robo/src/ResultData.php
index 90baf6e924..bf064d6509 100644
--- a/vendor/consolidation/robo/src/ResultData.php
+++ b/vendor/consolidation/robo/src/ResultData.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo;
 
 use Consolidation\AnnotatedCommand\ExitCodeInterface;
@@ -40,7 +41,7 @@ public function __construct($exitCode = self::EXITCODE_OK, $message = '', $data
      * @param string $message
      * @param array $data
      *
-     * @return \Robo\ResultData
+     * @return static
      */
     public static function message($message, $data = [])
     {
@@ -51,7 +52,7 @@ public static function message($message, $data = [])
      * @param string $message
      * @param array $data
      *
-     * @return \Robo\ResultData
+     * @return static
      */
     public static function cancelled($message = '', $data = [])
     {
diff --git a/vendor/consolidation/robo/src/Robo.php b/vendor/consolidation/robo/src/Robo.php
index 0b39a0794d..46f48dc281 100644
--- a/vendor/consolidation/robo/src/Robo.php
+++ b/vendor/consolidation/robo/src/Robo.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo;
 
 use Composer\Autoload\ClassLoader;
@@ -20,12 +21,12 @@
 class Robo
 {
     const APPLICATION_NAME = 'Robo';
-    const VERSION = '1.4.9';
+    const VERSION = '1.4.13';
 
     /**
      * The currently active container object, or NULL if not initialized yet.
      *
-     * @var ContainerInterface|null
+     * @var \League\Container\ContainerInterface|null
      */
     protected static $container;
 
@@ -37,6 +38,7 @@ class Robo
      * @param null|string $appName
      * @param null|string $appVersion
      * @param null|\Symfony\Component\Console\Output\OutputInterface $output
+     * @param null|string $repository
      *
      * @return int
      */
@@ -51,7 +53,7 @@ public static function run($argv, $commandClasses, $appName = null, $appVersion
     /**
      * Sets a new global container.
      *
-     * @param ContainerInterface $container
+     * @param \League\Container\ContainerInterface $container
      *   A new container instance to replace the current.
      */
     public static function setContainer(ContainerInterface $container)
@@ -94,6 +96,10 @@ public static function hasContainer()
 
     /**
      * Create a config object and load it from the provided paths.
+     *
+     * @param string[] $paths
+     *
+     * @return \Consolidation\Config\ConfigInterface
      */
     public static function createConfiguration($paths)
     {
@@ -104,6 +110,9 @@ public static function createConfiguration($paths)
 
     /**
      * Use a simple config loader to load configuration values from specified paths
+     *
+     * @param string[] $paths
+     * @param null|\Consolidation\Config\ConfigInterface $config
      */
     public static function loadConfiguration($paths, $config = null)
     {
@@ -127,7 +136,7 @@ public static function loadConfiguration($paths, $config = null)
      * @param null|\Symfony\Component\Console\Input\InputInterface $input
      * @param null|\Symfony\Component\Console\Output\OutputInterface $output
      * @param null|\Robo\Application $app
-     * @param null|ConfigInterface $config
+     * @param null|\Consolidation\Config\ConfigInterface $config
      * @param null|\Composer\Autoload\ClassLoader $classLoader
      *
      * @return \League\Container\Container|\League\Container\ContainerInterface
@@ -174,7 +183,7 @@ public static function createDefaultContainer($input = null, $output = null, $ap
      *
      * @param \League\Container\ContainerInterface $container
      * @param \Symfony\Component\Console\Application $app
-     * @param ConfigInterface $config
+     * @param \Consolidation\Config\ConfigInterface $config
      * @param null|\Symfony\Component\Console\Input\InputInterface $input
      * @param null|\Symfony\Component\Console\Output\OutputInterface $output
      * @param null|\Composer\Autoload\ClassLoader $classLoader
@@ -237,10 +246,14 @@ public static function configureContainer(ContainerInterface $container, Symfony
             ->withMethodCall('addDefaultSimplifiers', []);
         $container->share('prepareTerminalWidthOption', \Consolidation\AnnotatedCommand\Options\PrepareTerminalWidthOption::class)
             ->withMethodCall('setApplication', ['application']);
+        $container->share('symfonyStyleInjector', \Robo\Symfony\SymfonyStyleInjector::class);
+        $container->share('parameterInjection', \Consolidation\AnnotatedCommand\ParameterInjection::class)
+            ->withMethodCall('register', ['Symfony\Component\Console\Style\SymfonyStyle', 'symfonyStyleInjector']);
         $container->share('commandProcessor', \Consolidation\AnnotatedCommand\CommandProcessor::class)
             ->withArgument('hookManager')
             ->withMethodCall('setFormatterManager', ['formatterManager'])
             ->withMethodCall('addPrepareFormatter', ['prepareTerminalWidthOption'])
+            ->withMethodCall('setParameterInjection', ['parameterInjection'])
             ->withMethodCall(
                 'setDisplayErrorFunction',
                 [
@@ -356,7 +369,7 @@ public static function resultPrinter()
     }
 
     /**
-     * @return ConfigInterface
+     * @return \Consolidation\Config\ConfigInterface
      */
     public static function config()
     {
@@ -399,6 +412,9 @@ public static function input()
         return static::service('input');
     }
 
+    /**
+     * @return \Robo\Common\ProcessExecutor
+     */
     public static function process(Process $process)
     {
         return ProcessExecutor::create(static::getContainer(), $process);
diff --git a/vendor/consolidation/robo/src/Runner.php b/vendor/consolidation/robo/src/Runner.php
index 026ac871bc..eb786b5ebd 100644
--- a/vendor/consolidation/robo/src/Runner.php
+++ b/vendor/consolidation/robo/src/Runner.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo;
 
 use Composer\Autoload\ClassLoader;
@@ -14,12 +15,12 @@
 
 class Runner implements ContainerAwareInterface
 {
-    const ROBOCLASS = 'RoboFile';
-    const ROBOFILE = 'RoboFile.php';
-
     use IO;
     use ContainerAwareTrait;
 
+    const ROBOCLASS = 'RoboFile';
+    const ROBOFILE = 'RoboFile.php';
+
     /**
      * @var string
      */
@@ -31,7 +32,9 @@ class Runner implements ContainerAwareInterface
     protected $roboFile;
 
     /**
-     * @var string working dir of Robo
+     * Working dir of Robo.
+     *
+     * @var string
      */
     protected $dir;
 
@@ -41,12 +44,16 @@ class Runner implements ContainerAwareInterface
     protected $errorConditions = [];
 
     /**
-     * @var string GitHub Repo for SelfUpdate
+     * GitHub Repo for SelfUpdate.
+     *
+     * @var string
      */
     protected $selfUpdateRepository = null;
 
     /**
-     * @var string filename to load configuration from (set to 'robo.yml' for RoboFiles)
+     * Filename to load configuration from (set to 'robo.yml' for RoboFiles).
+     *
+     * @var string
      */
     protected $configFilename = 'conf.yml';
 
@@ -56,7 +63,7 @@ class Runner implements ContainerAwareInterface
     protected $envConfigPrefix = false;
 
     /**
-     * @var \Composer\Autoload\ClassLoader
+     * @var null|\Composer\Autoload\ClassLoader
      */
     protected $classLoader = null;
 
@@ -79,6 +86,10 @@ public function __construct($roboClass = null, $roboFile = null)
         $this->dir = getcwd();
     }
 
+    /**
+     * @param string $msg
+     * @param string $errorType
+     */
     protected function errorCondition($msg, $errorType)
     {
         $this->errorConditions[$msg] = $errorType;
@@ -147,6 +158,9 @@ public function execute($argv, $appName = null, $appVersion = null, $output = nu
 
     /**
      * Get a list of locations where config files may be loaded
+     *
+     * @param string $userConfig
+     *
      * @return string[]
      */
     protected function getConfigFilePaths($userConfig)
@@ -258,16 +272,16 @@ public function registerCommandClasses($app, $commandClasses)
     }
 
     /**
-     * @param $relativeNamespace
+     * @param string $relativeNamespace
      *
-     * @return array|string[]
+     * @return string[]
      */
     protected function discoverCommandClasses($relativeNamespace)
     {
         /** @var \Robo\ClassDiscovery\RelativeNamespaceDiscovery $discovery */
         $discovery = Robo::service('relativeNamespaceDiscovery');
-        $discovery->setRelativeNamespace($relativeNamespace.'\Commands')
-            ->setSearchPattern('*Commands.php');
+        $discovery->setRelativeNamespace($relativeNamespace . '\Commands')
+            ->setSearchPattern('/.*Commands?\.php$/');
         return $discovery->getClasses();
     }
 
@@ -275,7 +289,7 @@ protected function discoverCommandClasses($relativeNamespace)
      * @param \Robo\Application $app
      * @param string|BuilderAwareInterface|ContainerAwareInterface $commandClass
      *
-     * @return mixed|void
+     * @return null|object
      */
     public function registerCommandClass($app, $commandClass)
     {
@@ -295,7 +309,7 @@ public function registerCommandClass($app, $commandClass)
     }
 
     /**
-     * @param string|BuilderAwareInterface|ContainerAwareInterface  $commandClass
+     * @param string|\Robo\Contract\BuilderAwareInterface|\League\Container\ContainerAwareInterface $commandClass
      *
      * @return null|object
      */
@@ -344,7 +358,8 @@ public function installRoboHandlers()
      *
      * @param array $args
      *
-     * @return array $args with shebang script removed
+     * @return array $args
+     *   With shebang script removed.
      */
     protected function shebang($args)
     {
@@ -371,9 +386,11 @@ protected function shebang($args)
      * Determine if the specified argument is a path to a shebang script.
      * If so, load it.
      *
-     * @param string $filepath file to check
+     * @param string $filepath
+     *   File to check.
      *
-     * @return bool Returns TRUE if shebang script was processed
+     * @return bool
+     *   Returns TRUE if shebang script was processed.
      */
     protected function isShebangFile($filepath)
     {
@@ -444,9 +461,9 @@ protected function processRoboOptions($argv)
 
         if (substr($argv[$pos], 0, 12) == '--load-from=') {
             $this->dir = substr($argv[$pos], 12);
-        } elseif (isset($argv[$pos +1])) {
-            $this->dir = $argv[$pos +1];
-            unset($argv[$pos +1]);
+        } elseif (isset($argv[$pos + 1])) {
+            $this->dir = $argv[$pos + 1];
+            unset($argv[$pos + 1]);
         }
         unset($argv[$pos]);
         // Make adjustments if '--load-from' points at a file.
diff --git a/vendor/consolidation/robo/src/State/Consumer.php b/vendor/consolidation/robo/src/State/Consumer.php
index ab9c0e2778..f2527a117b 100644
--- a/vendor/consolidation/robo/src/State/Consumer.php
+++ b/vendor/consolidation/robo/src/State/Consumer.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\State;
 
 use Robo\State\Data;
@@ -6,7 +7,7 @@
 interface Consumer
 {
     /**
-     * @return Data
+     * @return \Robo\State\Data
      */
     public function receiveState(Data $state);
 }
diff --git a/vendor/consolidation/robo/src/State/Data.php b/vendor/consolidation/robo/src/State/Data.php
index 34cb5c761a..e6027d9735 100644
--- a/vendor/consolidation/robo/src/State/Data.php
+++ b/vendor/consolidation/robo/src/State/Data.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\State;
 
 /**
@@ -40,7 +41,7 @@ public function getMessage()
     }
 
     /**
-     * @param string message
+     * @param string $message
      */
     public function setMessage($message)
     {
@@ -52,7 +53,7 @@ public function setMessage($message)
      * existing in this result takes precedence over the
      * data in the Result being merged.
      *
-     * @param \Robo\ResultData $result
+     * @param \Robo\State\Data $result
      *
      * @return $this
      */
@@ -123,6 +124,10 @@ public function getExecutionTime()
 
     /**
      * Accumulate execution time
+     *
+     * @param array|float $duration
+     *
+     * @return null|float
      */
     public function accumulateExecutionTime($duration)
     {
@@ -136,6 +141,10 @@ public function accumulateExecutionTime($duration)
 
     /**
      * Accumulate the message.
+     *
+     * @param string $message
+     *
+     * @return string
      */
     public function accumulateMessage($message)
     {
diff --git a/vendor/consolidation/robo/src/State/StateAwareInterface.php b/vendor/consolidation/robo/src/State/StateAwareInterface.php
index f86bccb87f..95bb823c28 100644
--- a/vendor/consolidation/robo/src/State/StateAwareInterface.php
+++ b/vendor/consolidation/robo/src/State/StateAwareInterface.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\State;
 
 use Robo\State\Data;
@@ -6,23 +7,24 @@
 interface StateAwareInterface
 {
     /**
-     * @return Data
+     * @return \Robo\State\Data
      */
     public function getState();
 
     /**
-     * @param Data state
+     * @param \Robo\State\Data $state
      */
     public function setState(Data $state);
 
     /**
-     * @param $key
-     * @param value
+     * @param int|string $key
+     * @param mixed $value
      */
     public function setStateValue($key, $value);
 
     /**
-     * @param Data update state takes precedence over current state.
+     * @param \Robo\State\Data
+     *   Update state takes precedence over current state.
      */
     public function updateState(Data $update);
 
diff --git a/vendor/consolidation/robo/src/State/StateAwareTrait.php b/vendor/consolidation/robo/src/State/StateAwareTrait.php
index a1de1f15c6..da0101028b 100644
--- a/vendor/consolidation/robo/src/State/StateAwareTrait.php
+++ b/vendor/consolidation/robo/src/State/StateAwareTrait.php
@@ -1,47 +1,46 @@
 <?php
+
 namespace Robo\State;
 
 use Robo\State\Data;
 
+/**
+ * @see \Robo\State\StateAwareInterface
+ */
 trait StateAwareTrait
 {
+    /**
+     * @var \Robo\State\Data
+     */
     protected $state;
 
     /**
-     * {@inheritdoc}
+     * @return \Robo\State\Data
      */
     public function getState()
     {
         return $this->state;
     }
 
-    /**
-     * {@inheritdoc}
-     */
     public function setState(Data $state)
     {
         $this->state = $state;
     }
 
     /**
-     * {@inheritdoc}
+     * @param int|string $key
+     * @param mixed $value
      */
     public function setStateValue($key, $value)
     {
         $this->state[$key] = $value;
     }
 
-    /**
-     * {@inheritdoc}
-     */
     public function updateState(Data $update)
     {
         $this->state->update($update);
     }
 
-    /**
-     * {@inheritdoc}
-     */
     public function resetState()
     {
         $this->state = new Data();
diff --git a/vendor/consolidation/robo/src/Symfony/SymfonyStyleInjector.php b/vendor/consolidation/robo/src/Symfony/SymfonyStyleInjector.php
new file mode 100644
index 0000000000..b6149ac34c
--- /dev/null
+++ b/vendor/consolidation/robo/src/Symfony/SymfonyStyleInjector.php
@@ -0,0 +1,16 @@
+<?php
+
+namespace Robo\Symfony;
+
+use Consolidation\AnnotatedCommand\CommandData;
+use Consolidation\AnnotatedCommand\CommandProcessor;
+use Consolidation\AnnotatedCommand\ParameterInjector;
+use Symfony\Component\Console\Style\SymfonyStyle;
+
+class SymfonyStyleInjector implements ParameterInjector
+{
+    public function get(CommandData $commandData, $interfaceName)
+    {
+        return new SymfonyStyle($commandData->input(), $commandData->output());
+    }
+}
diff --git a/vendor/consolidation/robo/src/Task/ApiGen/ApiGen.php b/vendor/consolidation/robo/src/Task/ApiGen/ApiGen.php
index 11ff764c21..73c98fa5a1 100644
--- a/vendor/consolidation/robo/src/Task/ApiGen/ApiGen.php
+++ b/vendor/consolidation/robo/src/Task/ApiGen/ApiGen.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\ApiGen;
 
 use Robo\Contract\CommandInterface;
@@ -31,6 +32,10 @@ class ApiGen extends BaseTask implements CommandInterface
      * @var string
      */
     protected $command;
+
+    /**
+     * @var string
+     */
     protected $operation = 'generate';
 
     /**
@@ -68,8 +73,9 @@ public function __construct($pathToApiGen = null)
      */
     public function args($args)
     {
+        $func_args = func_get_args();
         if (!is_array($args)) {
-            $args = func_get_args();
+            $args = $func_args;
         }
         $args = array_map(function ($arg) {
             if (preg_match('/^\w+$/', trim($arg)) === 1) {
@@ -84,10 +90,12 @@ public function args($args)
     }
 
     /**
-     * @param array|Traversable|string $arg a single object or something traversable
+     * @param array|\Traversable|string $arg
+     *   A single object or something traversable.
      *
-     * @return array|Traversable the provided argument if it was already traversable, or the given
-     *                           argument returned as a one-element array
+     * @return array|\Traversable
+     *   The provided argument if it was already traversable, or the given
+     *   argument returned as a one-element array.
      */
     protected static function forceTraversable($arg)
     {
@@ -99,10 +107,12 @@ protected static function forceTraversable($arg)
     }
 
     /**
-     * @param array|string $arg a single argument or an array of multiple string values
+     * @param array|string $arg
+     *   A single argument or an array of multiple string values.
      *
-     * @return string a comma-separated string of all of the provided arguments, suitable
-     *                as a command-line "list" type argument for ApiGen
+     * @return string
+     *   A comma-separated string of all of the provided arguments, suitable as
+     *   a command-line "list" type argument for ApiGen.
      */
     protected static function asList($arg)
     {
@@ -111,13 +121,15 @@ protected static function asList($arg)
     }
 
     /**
-     * @param bool|string $val an argument to be normalized
-     * @param string $default one of self::BOOL_YES or self::BOOK_NO if the provided
-     *               value could not deterministically be converted to a
-     *               yes or no value
+     * @param bool|string $val
+     *   An argument to be normalized.
+     * @param string $default
+     *   One of self::BOOL_YES or self::BOOK_NO if the provided value could not
+     *   deterministically be converted to a yes or no value.
      *
-     * @return string the given value as a command-line "yes|no" type of argument for ApiGen,
-     *                or the default value if none could be determined
+     * @return string
+     *   The given value as a command-line "yes|no" type of argument for ApiGen,
+     *   or the default value if none could be determined.
      */
     protected static function asTextBool($val, $default)
     {
@@ -155,7 +167,8 @@ public function config($config)
     }
 
     /**
-     * @param array|string|Traversable $src one or more source values
+     * @param array|string|\Traversable $src
+     *   One or more source values.
      *
      * @return $this
      */
@@ -179,7 +192,8 @@ public function destination($dest)
     }
 
     /**
-     * @param array|string $exts one or more extensions
+     * @param array|string $exts
+     *   One or more extensions.
      *
      * @return $this
      */
@@ -190,7 +204,8 @@ public function extensions($exts)
     }
 
     /**
-     * @param array|string $exclude one or more exclusions
+     * @param array|string $exclude
+     *   One or more exclusions.
      *
      * @return $this
      */
@@ -203,7 +218,8 @@ public function exclude($exclude)
     }
 
     /**
-     * @param array|string|Traversable $path one or more skip-doc-path values
+     * @param array|string|\Traversable $path
+     *   One or more skip-doc-path values.
      *
      * @return $this
      */
@@ -216,7 +232,8 @@ public function skipDocPath($path)
     }
 
     /**
-     * @param array|string|Traversable $prefix one or more skip-doc-prefix values
+     * @param array|string|\Traversable $prefix
+     *   One or more skip-doc-prefix values.
      *
      * @return $this
      */
@@ -229,7 +246,8 @@ public function skipDocPrefix($prefix)
     }
 
     /**
-     * @param array|string $charset one or more charsets
+     * @param array|string $charset
+     *   One or more charsets.
      *
      * @return $this
      */
@@ -306,7 +324,8 @@ public function templateConfig($templateConfig)
     }
 
     /**
-     * @param array|string $tags one or more supported html tags
+     * @param array|string $tags
+     *   One or more supported html tags.
      *
      * @return $this
      */
@@ -328,7 +347,8 @@ public function groups($groups)
     }
 
     /**
-     * @param array|string $types or more supported autocomplete types
+     * @param array|string $types
+     *   One or more supported autocomplete types.
      *
      * @return $this
      */
@@ -339,7 +359,8 @@ public function autocomplete($types)
     }
 
     /**
-     * @param array|string $levels one or more access levels
+     * @param array|string $levels
+     *   One or more access levels.
      *
      * @return $this
      */
@@ -350,7 +371,8 @@ public function accessLevels($levels)
     }
 
     /**
-     * @param boolean|string $internal 'yes' or true if internal, 'no' or false if not
+     * @param boolean|string $internal
+     *   'yes' or true if internal, 'no' or false if not.
      *
      * @return $this
      */
@@ -361,8 +383,9 @@ public function internal($internal)
     }
 
     /**
-     * @param boolean|string $php 'yes' or true to generate documentation for internal php classes,
-     *                            'no' or false otherwise
+     * @param bool|string $php
+     *   'yes' or true to generate documentation for internal php classes, 'no'
+     *   or false otherwise.
      *
      * @return $this
      */
@@ -373,7 +396,9 @@ public function php($php)
     }
 
     /**
-     * @param bool|string $tree 'yes' or true to generate a tree view of classes, 'no' or false otherwise
+     * @param bool|string $tree
+     *   'yes' or true to generate a tree view of classes, 'no' or false
+     *   otherwise.
      *
      * @return $this
      */
@@ -384,7 +409,9 @@ public function tree($tree)
     }
 
     /**
-     * @param bool|string $dep 'yes' or true to generate documentation for deprecated classes, 'no' or false otherwise
+     * @param bool|string $dep
+     *   'yes' or true to generate documentation for deprecated classes, 'no' or
+     *   false otherwise.
      *
      * @return $this
      */
@@ -395,7 +422,8 @@ public function deprecated($dep)
     }
 
     /**
-     * @param bool|string $todo 'yes' or true to document tasks, 'no' or false otherwise
+     * @param bool|string $todo
+     *   'yes' or true to document tasks, 'no' or false otherwise.
      *
      * @return $this
      */
@@ -406,7 +434,9 @@ public function todo($todo)
     }
 
     /**
-     * @param bool|string $src 'yes' or true to generate highlighted source code, 'no' or false otherwise
+     * @param bool|string $src
+     *   'yes' or true to generate highlighted source code, 'no' or false
+     *   otherwise.
      *
      * @return $this
      */
@@ -417,7 +447,9 @@ public function sourceCode($src)
     }
 
     /**
-     * @param bool|string $zipped 'yes' or true to generate downloadable documentation, 'no' or false otherwise
+     * @param bool|string $zipped
+     *   'yes' or true to generate downloadable documentation, 'no' or false
+     *   otherwise.
      *
      * @return $this
      */
@@ -427,6 +459,11 @@ public function download($zipped)
         return $this;
     }
 
+    /**
+     * @param string $path
+     *
+     * @return $this
+     */
     public function report($path)
     {
         $this->option('report', $path);
@@ -434,7 +471,9 @@ public function report($path)
     }
 
     /**
-     * @param bool|string $wipeout 'yes' or true to clear out the destination directory, 'no' or false otherwise
+     * @param bool|string $wipeout
+     *   'yes' or true to clear out the destination directory, 'no' or false
+     *   otherwise.
      *
      * @return $this
      */
@@ -445,7 +484,8 @@ public function wipeout($wipeout)
     }
 
     /**
-     * @param bool|string $quiet 'yes' or true for quiet, 'no' or false otherwise
+     * @param bool|string $quiet
+     *   'yes' or true for quiet, 'no' or false otherwise.
      *
      * @return $this
      */
@@ -456,7 +496,8 @@ public function quiet($quiet)
     }
 
     /**
-     * @param bool|string $bar 'yes' or true to display a progress bar, 'no' or false otherwise
+     * @param bool|string $bar
+     *   'yes' or true to display a progress bar, 'no' or false otherwise.
      *
      * @return $this
      */
@@ -467,7 +508,8 @@ public function progressbar($bar)
     }
 
     /**
-     * @param bool|string $colors 'yes' or true colorize the output, 'no' or false otherwise
+     * @param bool|string $colors
+     *   'yes' or true colorize the output, 'no' or false otherwise.
      *
      * @return $this
      */
@@ -478,7 +520,8 @@ public function colors($colors)
     }
 
     /**
-     * @param bool|string $check 'yes' or true to check for updates, 'no' or false otherwise
+     * @param bool|string $check
+     *   'yes' or true to check for updates, 'no' or false otherwise.
      *
      * @return $this
      */
@@ -489,7 +532,8 @@ public function updateCheck($check)
     }
 
     /**
-     * @param bool|string $debug 'yes' or true to enable debug mode, 'no' or false otherwise
+     * @param bool|string $debug
+     *   'yes' or true to enable debug mode, 'no' or false otherwise.
      *
      * @return $this
      */
diff --git a/vendor/consolidation/robo/src/Task/ApiGen/loadTasks.php b/vendor/consolidation/robo/src/Task/ApiGen/loadTasks.php
index e8cd372af3..62b59311de 100644
--- a/vendor/consolidation/robo/src/Task/ApiGen/loadTasks.php
+++ b/vendor/consolidation/robo/src/Task/ApiGen/loadTasks.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\ApiGen;
 
 trait loadTasks
@@ -6,7 +7,7 @@ trait loadTasks
     /**
      * @param null|string $pathToApiGen
      *
-     * @return \Robo\Task\ApiGen\ApiGen
+     * @return \Robo\Task\ApiGen\ApiGen|\Robo\Collection\CollectionBuilder
      */
     protected function taskApiGen($pathToApiGen = null)
     {
diff --git a/vendor/consolidation/robo/src/Task/Archive/Extract.php b/vendor/consolidation/robo/src/Task/Archive/Extract.php
index a00a0baf86..72d708bac7 100644
--- a/vendor/consolidation/robo/src/Task/Archive/Extract.php
+++ b/vendor/consolidation/robo/src/Task/Archive/Extract.php
@@ -274,6 +274,6 @@ protected static function archiveType($filename)
      */
     protected static function getTmpDir()
     {
-        return getcwd().'/tmp'.rand().time();
+        return getcwd() . '/tmp' . rand() . time();
     }
 }
diff --git a/vendor/consolidation/robo/src/Task/Archive/Pack.php b/vendor/consolidation/robo/src/Task/Archive/Pack.php
index 0970f8e88e..90db1a94a2 100644
--- a/vendor/consolidation/robo/src/Task/Archive/Pack.php
+++ b/vendor/consolidation/robo/src/Task/Archive/Pack.php
@@ -40,7 +40,8 @@ class Pack extends BaseTask implements PrintedInterface
     /**
      * Construct the class.
      *
-     * @param string $archiveFile The full path and name of the archive file to create.
+     * @param string $archiveFile
+     *   The full path and name of the archive file to create.
      *
      * @since   1.0
      */
@@ -52,7 +53,8 @@ public function __construct($archiveFile)
     /**
      * Satisfy the parent requirement.
      *
-     * @return bool Always returns true.
+     * @return bool
+     *   Always returns true.
      *
      * @since   1.0
      */
@@ -76,10 +78,10 @@ public function archiveFile($archiveFile)
      * Add an item to the archive. Like file_exists(), the parameter
      * may be a file or a directory.
      *
-     * @var string
-     *             Relative path and name of item to store in archive
-     * @var string
-     *             Absolute or relative path to file or directory's location in filesystem
+     * @param string $placementLocation
+     *   Relative path and name of item to store in archive.
+     * @param string $filesystemLocation
+     *   Absolute or relative path to file or directory's location in filesystem.
      *
      * @return $this
      */
@@ -94,10 +96,10 @@ public function addFile($placementLocation, $filesystemLocation)
      * Alias for addFile, in case anyone has angst about using
      * addFile with a directory.
      *
-     * @var string
-     *             Relative path and name of directory to store in archive
-     * @var string
-     *             Absolute or relative path to directory or directory's location in filesystem
+     * @param string $placementLocation
+     *   Relative path and name of directory to store in archive.
+     * @param string $filesystemLocation
+     *   Absolute or relative path to directory or directory's location in filesystem.
      *
      * @return $this
      */
@@ -111,13 +113,14 @@ public function addDir($placementLocation, $filesystemLocation)
     /**
      * Add a file or directory, or list of same to the archive.
      *
-     * @var string|array
-     *                   If given a string, should contain the relative filesystem path to the
-     *                   the item to store in archive; this will also be used as the item's
-     *                   path in the archive, so absolute paths should not be used here.
-     *                   If given an array, the key of each item should be the path to store
-     *                   in the archive, and the value should be the filesystem path to the
-     *                   item to store.
+     * @param string|array $item
+     *   If given a string, should contain the relative filesystem path to the
+     *   the item to store in archive; this will also be used as the item's
+     *   path in the archive, so absolute paths should not be used here.
+     *   If given an array, the key of each item should be the path to store
+     *   in the archive, and the value should be the filesystem path to the
+     *   item to store.
+     *
      * @return $this
      */
     public function add($item)
@@ -208,7 +211,7 @@ protected function archiveTar($archiveFile, $items)
      */
     protected function archiveZip($archiveFile, $items)
     {
-        if (!extension_loaded('zlib')) {
+        if (!extension_loaded('zlib') || !class_exists(\ZipArchive::class)) {
             return Result::errorMissingExtension($this, 'zlib', 'zip packing');
         }
 
diff --git a/vendor/consolidation/robo/src/Task/Archive/loadTasks.php b/vendor/consolidation/robo/src/Task/Archive/loadTasks.php
index cf846fdf82..0e30852a76 100644
--- a/vendor/consolidation/robo/src/Task/Archive/loadTasks.php
+++ b/vendor/consolidation/robo/src/Task/Archive/loadTasks.php
@@ -1,12 +1,13 @@
 <?php
+
 namespace Robo\Task\Archive;
 
 trait loadTasks
 {
     /**
-     * @param $filename
+     * @param string $filename
      *
-     * @return Pack
+     * @return \Robo\Task\Archive\Pack|\Robo\Collection\CollectionBuilder
      */
     protected function taskPack($filename)
     {
@@ -14,9 +15,9 @@ protected function taskPack($filename)
     }
 
     /**
-     * @param $filename
+     * @param string $filename
      *
-     * @return Extract
+     * @return \Robo\Task\Archive\Extract|\Robo\Collection\CollectionBuilder
      */
     protected function taskExtract($filename)
     {
diff --git a/vendor/consolidation/robo/src/Task/Assets/ImageMinify.php b/vendor/consolidation/robo/src/Task/Assets/ImageMinify.php
index 1aa625932f..ef61eb3aa8 100644
--- a/vendor/consolidation/robo/src/Task/Assets/ImageMinify.php
+++ b/vendor/consolidation/robo/src/Task/Assets/ImageMinify.php
@@ -150,7 +150,7 @@ class ImageMinify extends BaseTask
      *
      * @link https://github.com/imagemin
      *
-     * @var array
+     * @var string[]
      */
     protected $imageminRepos = [
         // PNG
@@ -171,6 +171,9 @@ class ImageMinify extends BaseTask
         'cwebp' => 'https://github.com/imagemin/cwebp-bin', // note: we do not support this minifier because it creates WebP from non-WebP files
     ];
 
+    /**
+     * @param string|string[] $dirs
+     */
     public function __construct($dirs)
     {
         is_array($dirs)
@@ -182,12 +185,12 @@ public function __construct($dirs)
         // guess the best path for the executables based on __DIR__
         if (($pos = strpos(__DIR__, 'consolidation/robo')) !== false) {
             // the executables should be stored in vendor/bin
-            $this->executableTargetDir = substr(__DIR__, 0, $pos).'bin';
+            $this->executableTargetDir = substr(__DIR__, 0, $pos) . 'bin';
         }
 
         // check if the executables are already available
         foreach ($this->imageminRepos as $exec => $url) {
-            $path = $this->executableTargetDir.'/'.$exec;
+            $path = $this->executableTargetDir . '/' . $exec;
             // if this is Windows add a .exe extension
             if (substr($this->getOS(), 0, 3) == 'win') {
                 $path .= '.exe';
@@ -257,7 +260,7 @@ public function minifier($minifier, array $options = [])
     }
 
     /**
-     * @param array $dirs
+     * @param string[] $dirs
      *
      * @return array|\Robo\Result
      *
@@ -289,7 +292,7 @@ protected function findFiles($dirs)
             } catch (\InvalidArgumentException $e) {
                 // if finder cannot handle it, try with in()->name()
                 if (strpos($dir, '/') === false) {
-                    $dir = './'.$dir;
+                    $dir = './' . $dir;
                 }
                 $parts = explode('/', $dir);
                 $new_dir = implode('/', array_slice($parts, 0, -1));
@@ -319,13 +322,13 @@ protected function findFiles($dirs)
      */
     protected function getTarget($file, $to)
     {
-        $target = $to.'/'.basename($file);
+        $target = $to . '/' . basename($file);
 
         return $target;
     }
 
     /**
-     * @param array $files
+     * @param string[] $files
      *
      * @return \Robo\Result
      */
@@ -339,6 +342,8 @@ protected function minify($files)
 
         // loop through the files
         foreach ($files as $from => $to) {
+            $minifier = '';
+
             if (!isset($this->minifier)) {
                 // check filetype based on the extension
                 $extension = strtolower(pathinfo($from, PATHINFO_EXTENSION));
@@ -399,7 +404,7 @@ protected function minify($files)
                             $this->printTaskSuccess($result->getMessage());
                             // retry the conversion with the downloaded executable
                             if (is_callable($minifier)) {
-                                $command = call_user_func($minifier, $from, $to, $minifierOptions);
+                                $command = call_user_func($minifier, $from, $to, $this->minifierOptions);
                             } elseif (method_exists($this, $minifier)) {
                                 $command = $this->{$minifier}($from, $to);
                             }
@@ -432,7 +437,7 @@ protected function minify($files)
     protected function getOS()
     {
         $os = php_uname('s');
-        $os .= '/'.php_uname('m');
+        $os .= '/' . php_uname('m');
         // replace x86_64 to x64, because the imagemin repo uses that
         $os = str_replace('x86_64', 'x64', $os);
         // replace i386, i686, etc to x86, because of imagemin
@@ -492,10 +497,10 @@ protected function installFromImagemin($executable)
         $this->printTaskInfo('Downloading the {executable} executable from the imagemin repository', ['executable' => $executable]);
 
         $os = $this->getOS();
-        $url = $this->imageminRepos[$executable].'/blob/master/vendor/'.$os.'/'.$executable.'?raw=true';
+        $url = $this->imageminRepos[$executable] . '/blob/master/vendor/' . $os . '/' . $executable . '?raw=true';
         if (substr($os, 0, 3) == 'win') {
             // if it is win, add a .exe extension
-            $url = $this->imageminRepos[$executable].'/blob/master/vendor/'.$os.'/'.$executable.'.exe?raw=true';
+            $url = $this->imageminRepos[$executable] . '/blob/master/vendor/' . $os . '/' . $executable . '.exe?raw=true';
         }
         $data = @file_get_contents($url, false, null);
         if ($data === false) {
@@ -525,14 +530,14 @@ protected function installFromImagemin($executable)
             mkdir($this->executableTargetDir);
         }
         // save the executable into the target dir
-        $path = $this->executableTargetDir.'/'.$executable;
+        $path = $this->executableTargetDir . '/' . $executable;
         if (substr($os, 0, 3) == 'win') {
             // if it is win, add a .exe extension
-            $path = $this->executableTargetDir.'/'.$executable.'.exe';
+            $path = $this->executableTargetDir . '/' . $executable . '.exe';
         }
         $result = file_put_contents($path, $data);
         if ($result === false) {
-            $message = sprintf('Could not copy the executable <info>%s</info> to %s', $executable, $target_dir);
+            $message = sprintf('Could not copy the executable <info>%s</info> to %s', $executable, $path);
 
             return Result::error($this, $message);
         }
@@ -540,7 +545,7 @@ protected function installFromImagemin($executable)
         chmod($path, 0755);
 
         // if everything successful, store the executable path
-        $this->executablePaths[$executable] = $this->executableTargetDir.'/'.$executable;
+        $this->executablePaths[$executable] = $this->executableTargetDir . '/' . $executable;
         // if it is win, add a .exe extension
         if (substr($os, 0, 3) == 'win') {
             $this->executablePaths[$executable] .= '.exe';
@@ -582,6 +587,12 @@ protected function jpegtran($from, $to)
         return $command;
     }
 
+    /**
+     * @param string $from
+     * @param string $to
+     *
+     * @return string
+     */
     protected function gifsicle($from, $to)
     {
         $command = sprintf('gifsicle -o "%s" "%s"', $to, $from);
diff --git a/vendor/consolidation/robo/src/Task/Assets/Less.php b/vendor/consolidation/robo/src/Task/Assets/Less.php
index 4cfa097802..ca8aa08df3 100644
--- a/vendor/consolidation/robo/src/Task/Assets/Less.php
+++ b/vendor/consolidation/robo/src/Task/Assets/Less.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Assets;
 
 use Robo\Result;
diff --git a/vendor/consolidation/robo/src/Task/Assets/Minify.php b/vendor/consolidation/robo/src/Task/Assets/Minify.php
index 3187714ecc..4c9798e458 100644
--- a/vendor/consolidation/robo/src/Task/Assets/Minify.php
+++ b/vendor/consolidation/robo/src/Task/Assets/Minify.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Assets;
 
 use Robo\Result;
@@ -23,7 +24,7 @@
 class Minify extends BaseTask
 {
     /**
-     * @var array
+     * @var string[]
      */
     protected $types = ['css', 'js'];
 
@@ -43,7 +44,7 @@ class Minify extends BaseTask
     protected $type;
 
     /**
-     * @var array
+     * @var bool[]
      */
     protected $squeezeOptions = [
         'singleLine' => true,
@@ -87,7 +88,8 @@ public function to($dst)
     /**
      * Sets type with validation.
      *
-     * @param string $type css|js
+     * @param string $type
+     *   Allowed values: "css", "js".
      *
      * @return $this
      */
@@ -217,11 +219,11 @@ public function keepImportantComments($keepImportantComments)
     }
 
     /**
-     * specialVarRx option for the JS minimisation.
+     * Set specialVarRx option for the JS minimisation.
      *
      * @param bool $specialVarRx
      *
-     * @return $this ;
+     * @return $this
      */
     public function specialVarRx($specialVarRx)
     {
diff --git a/vendor/consolidation/robo/src/Task/Assets/Scss.php b/vendor/consolidation/robo/src/Task/Assets/Scss.php
index ffd39345a0..999604b1ab 100644
--- a/vendor/consolidation/robo/src/Task/Assets/Scss.php
+++ b/vendor/consolidation/robo/src/Task/Assets/Scss.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Assets;
 
 use Robo\Result;
@@ -19,7 +20,7 @@
  * Use the following scss compiler in your project:
  *
  * ```
- * "leafo/scssphp": "~0.1",
+ * "scssphp/scssphp ": "~1.0.0",
  * ```
  *
  * You can implement additional compilers by extending this task and adding a
@@ -34,12 +35,12 @@ class Scss extends CssPreprocessor
      * @var string[]
      */
     protected $compilers = [
-        'scssphp', // https://github.com/leafo/scssphp
+        'scssphp', // https://github.com/scssphp/scssphp
     ];
 
     /**
      * scssphp compiler
-     * @link https://github.com/leafo/scssphp
+     * @link https://github.com/scssphp/scssphp
      *
      * @param string $file
      *
@@ -47,12 +48,12 @@ class Scss extends CssPreprocessor
      */
     protected function scssphp($file)
     {
-        if (!class_exists('\Leafo\ScssPhp\Compiler')) {
-            return Result::errorMissingPackage($this, 'scssphp', 'leafo/scssphp');
+        if (!class_exists('\ScssPhp\ScssPhp\Compiler')) {
+            return Result::errorMissingPackage($this, 'scssphp', 'scssphp/scssphp');
         }
 
         $scssCode = file_get_contents($file);
-        $scss = new \Leafo\ScssPhp\Compiler();
+        $scss = new \ScssPhp\ScssPhp\Compiler();
 
         // set options for the scssphp compiler
         if (isset($this->compilerOptions['importDirs'])) {
@@ -71,16 +72,16 @@ protected function scssphp($file)
      *
      * The method setFormatter($formatterName) sets the current formatter to $formatterName,
      * the name of a class as a string that implements the formatting interface. See the source
-     * for Leafo\ScssPhp\Formatter\Expanded for an example.
+     * for ScssPhp\ScssPhp\Formatter\Expanded for an example.
      *
-     * Five formatters are included with leafo/scssphp:
-     * - Leafo\ScssPhp\Formatter\Expanded
-     * - Leafo\ScssPhp\Formatter\Nested (default)
-     * - Leafo\ScssPhp\Formatter\Compressed
-     * - Leafo\ScssPhp\Formatter\Compact
-     * - Leafo\ScssPhp\Formatter\Crunched
+     * Five formatters are included with scssphp/scssphp:
+     * - ScssPhp\ScssPhp\Formatter\Expanded
+     * - ScssPhp\ScssPhp\Formatter\Nested (default)
+     * - ScssPhp\ScssPhp\Formatter\Compressed
+     * - ScssPhp\ScssPhp\Formatter\Compact
+     * - ScssPhp\ScssPhp\Formatter\Crunched
      *
-     * @link http://leafo.github.io/scssphp/docs/#output-formatting
+     * @link https://scssphp.github.io/scssphp/docs/#output-formatting
      *
      * @param string $formatterName
      *
diff --git a/vendor/consolidation/robo/src/Task/Assets/loadTasks.php b/vendor/consolidation/robo/src/Task/Assets/loadTasks.php
index 12192dd804..8b63765f89 100644
--- a/vendor/consolidation/robo/src/Task/Assets/loadTasks.php
+++ b/vendor/consolidation/robo/src/Task/Assets/loadTasks.php
@@ -1,13 +1,14 @@
 <?php
+
 namespace Robo\Task\Assets;
 
 trait loadTasks
 {
     /**
-    * @param string $input
-    *
-     * @return \Robo\Task\Assets\Minify
-    */
+     * @param string $input
+     *
+     * @return \Robo\Task\Assets\Minify|\Robo\Collection\CollectionBuilder
+     */
     protected function taskMinify($input)
     {
         return $this->task(Minify::class, $input);
@@ -16,7 +17,7 @@ protected function taskMinify($input)
     /**
      * @param string|string[] $input
      *
-     * @return \Robo\Task\Assets\ImageMinify
+     * @return \Robo\Task\Assets\ImageMinify|\Robo\Collection\CollectionBuilder
      */
     protected function taskImageMinify($input)
     {
@@ -26,7 +27,7 @@ protected function taskImageMinify($input)
    /**
     * @param array $input
     *
-    * @return \Robo\Task\Assets\Less
+    * @return \Robo\Task\Assets\Less|\Robo\Collection\CollectionBuilder
     */
     protected function taskLess($input)
     {
@@ -36,7 +37,7 @@ protected function taskLess($input)
     /**
      * @param array $input
      *
-     * @return \Robo\Task\Assets\Scss
+     * @return \Robo\Task\Assets\Scss|\Robo\Collection\CollectionBuilder
      */
     protected function taskScss($input)
     {
diff --git a/vendor/consolidation/robo/src/Task/Base/Exec.php b/vendor/consolidation/robo/src/Task/Base/Exec.php
index 057c86a9bd..6dd3752792 100644
--- a/vendor/consolidation/robo/src/Task/Base/Exec.php
+++ b/vendor/consolidation/robo/src/Task/Base/Exec.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Base;
 
 use Robo\Common\ExecTrait;
@@ -50,9 +51,6 @@ public function __construct($command)
         $this->command = $this->receiveCommand($command);
     }
 
-    /**
-     *
-     */
     public function __destruct()
     {
         $this->stop();
@@ -61,6 +59,8 @@ public function __destruct()
     /**
      * Executes command in background mode (asynchronously)
      *
+     * @param bool $arg
+     *
      * @return $this
      */
     public function background($arg = true)
diff --git a/vendor/consolidation/robo/src/Task/Base/ExecStack.php b/vendor/consolidation/robo/src/Task/Base/ExecStack.php
index 51b39ef1d3..221e736fc0 100644
--- a/vendor/consolidation/robo/src/Task/Base/ExecStack.php
+++ b/vendor/consolidation/robo/src/Task/Base/ExecStack.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Base;
 
 use Robo\Task\CommandStack;
diff --git a/vendor/consolidation/robo/src/Task/Base/ParallelExec.php b/vendor/consolidation/robo/src/Task/Base/ParallelExec.php
index c98b784196..51c5a39913 100644
--- a/vendor/consolidation/robo/src/Task/Base/ParallelExec.php
+++ b/vendor/consolidation/robo/src/Task/Base/ParallelExec.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Base;
 
 use Robo\Contract\CommandInterface;
@@ -187,7 +188,7 @@ public function run()
             if ($p->getExitCode() === 0) {
                 continue;
             }
-            $errorMessage .= "'" . $p->getCommandLine() . "' exited with code ". $p->getExitCode()." \n";
+            $errorMessage .= "'" . $p->getCommandLine() . "' exited with code " . $p->getExitCode() . " \n";
             $exitCode = max($exitCode, $p->getExitCode());
         }
         if (!$errorMessage) {
diff --git a/vendor/consolidation/robo/src/Task/Base/SymfonyCommand.php b/vendor/consolidation/robo/src/Task/Base/SymfonyCommand.php
index 708ea84512..ea8907bf21 100644
--- a/vendor/consolidation/robo/src/Task/Base/SymfonyCommand.php
+++ b/vendor/consolidation/robo/src/Task/Base/SymfonyCommand.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Base;
 
 use Robo\Robo;
diff --git a/vendor/consolidation/robo/src/Task/Base/Watch.php b/vendor/consolidation/robo/src/Task/Base/Watch.php
index 3b2152d96f..7e1c210abc 100644
--- a/vendor/consolidation/robo/src/Task/Base/Watch.php
+++ b/vendor/consolidation/robo/src/Task/Base/Watch.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Base;
 
 use Lurker\ResourceWatcher;
@@ -37,6 +38,24 @@
  *      )->run();
  * ?>
  * ```
+ *
+ * Pass through the changed file to the callable function
+ *
+ * ```
+ * $this
+ *  ->taskWatch()
+ *  ->monitor(
+ *      'filename',
+ *      function ($event) {
+ *          $resource = $event->getResource();
+ *          ... do something with (string)$resource ...
+ *      },
+ *      FilesystemEvent::ALL
+ *  )
+ *  ->run();
+ * ```
+ *
+ * The $event parameter is a [standard Symfony file resource object](https://api.symfony.com/3.1/Symfony/Component/Config/Resource/FileResource.html)
  */
 class Watch extends BaseTask
 {
diff --git a/vendor/consolidation/robo/src/Task/Base/loadShortcuts.php b/vendor/consolidation/robo/src/Task/Base/loadShortcuts.php
index dba0af6610..f06ec9f820 100644
--- a/vendor/consolidation/robo/src/Task/Base/loadShortcuts.php
+++ b/vendor/consolidation/robo/src/Task/Base/loadShortcuts.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Base;
 
 trait loadShortcuts
diff --git a/vendor/consolidation/robo/src/Task/Base/loadTasks.php b/vendor/consolidation/robo/src/Task/Base/loadTasks.php
index ab5301bbe9..01e04059d5 100644
--- a/vendor/consolidation/robo/src/Task/Base/loadTasks.php
+++ b/vendor/consolidation/robo/src/Task/Base/loadTasks.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Base;
 
 trait loadTasks
@@ -6,7 +7,7 @@ trait loadTasks
     /**
      * @param string|\Robo\Contract\CommandInterface $command
      *
-     * @return Exec
+     * @return \Robo\Task\Base\Exec|\Robo\Collection\CollectionBuilder
      */
     protected function taskExec($command)
     {
@@ -14,7 +15,7 @@ protected function taskExec($command)
     }
 
     /**
-     * @return ExecStack
+     * @return \Robo\Task\Base\ExecStack|\Robo\Collection\CollectionBuilder
      */
     protected function taskExecStack()
     {
@@ -22,7 +23,7 @@ protected function taskExecStack()
     }
 
     /**
-     * @return ParallelExec
+     * @return \Robo\Task\Base\ParallelExec|\Robo\Collection\CollectionBuilder
      */
     protected function taskParallelExec()
     {
@@ -30,8 +31,9 @@ protected function taskParallelExec()
     }
 
     /**
-     * @param $command
-     * @return SymfonyCommand
+     * @param \Symfony\Component\Console\Command\Command $command
+     *
+     * @return \Robo\Task\Base\SymfonyCommand|\Robo\Collection\CollectionBuilder
      */
     protected function taskSymfonyCommand($command)
     {
@@ -39,7 +41,7 @@ protected function taskSymfonyCommand($command)
     }
 
     /**
-     * @return Watch
+     * @return \Robo\Task\Base\Watch|\Robo\Collection\CollectionBuilder
      */
     protected function taskWatch()
     {
diff --git a/vendor/consolidation/robo/src/Task/BaseTask.php b/vendor/consolidation/robo/src/Task/BaseTask.php
index 66155c0932..4085853246 100644
--- a/vendor/consolidation/robo/src/Task/BaseTask.php
+++ b/vendor/consolidation/robo/src/Task/BaseTask.php
@@ -1,9 +1,9 @@
 <?php
+
 namespace Robo\Task;
 
 use Robo\Common\InflectionTrait;
 use Robo\Contract\InflectionInterface;
-
 use Robo\Common\TaskIO;
 use Robo\Contract\TaskInterface;
 use Robo\Contract\ProgressIndicatorAwareInterface;
@@ -23,6 +23,8 @@ abstract class BaseTask implements TaskInterface, LoggerAwareInterface, Verbosit
      * ConfigAwareInterface uses this to decide where configuration
      * items come from. Default is this prefix + class name + key,
      * e.g. `task.Remote.Ssh.remoteDir`.
+     *
+     * @return string
      */
     protected static function configPrefix()
     {
@@ -33,6 +35,8 @@ protected static function configPrefix()
      * ConfigAwareInterface uses this to decide where configuration
      * items come from. Default is this prefix + class name + key,
      * e.g. `task.Ssh.remoteDir`.
+     *
+     * @return string
      */
     protected static function configPostfix()
     {
diff --git a/vendor/consolidation/robo/src/Task/Bower/Base.php b/vendor/consolidation/robo/src/Task/Bower/Base.php
index 9bc614c632..cdaee7c4ca 100644
--- a/vendor/consolidation/robo/src/Task/Bower/Base.php
+++ b/vendor/consolidation/robo/src/Task/Bower/Base.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Bower;
 
 use Robo\Task\BaseTask;
@@ -8,7 +9,14 @@ abstract class Base extends BaseTask
 {
     use \Robo\Common\ExecOneCommand;
 
+    /**
+     * @var array
+     */
     protected $opts = [];
+
+    /**
+     * @var string
+     */
     protected $action = '';
 
     /**
diff --git a/vendor/consolidation/robo/src/Task/Bower/Install.php b/vendor/consolidation/robo/src/Task/Bower/Install.php
index c3c0ce7559..8e66562062 100644
--- a/vendor/consolidation/robo/src/Task/Bower/Install.php
+++ b/vendor/consolidation/robo/src/Task/Bower/Install.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Bower;
 
 use Robo\Contract\CommandInterface;
diff --git a/vendor/consolidation/robo/src/Task/Bower/Update.php b/vendor/consolidation/robo/src/Task/Bower/Update.php
index f0dfa94e35..b548aceabd 100644
--- a/vendor/consolidation/robo/src/Task/Bower/Update.php
+++ b/vendor/consolidation/robo/src/Task/Bower/Update.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Bower;
 
 /**
diff --git a/vendor/consolidation/robo/src/Task/Bower/loadTasks.php b/vendor/consolidation/robo/src/Task/Bower/loadTasks.php
index 6e33f8acf9..5d522d347e 100644
--- a/vendor/consolidation/robo/src/Task/Bower/loadTasks.php
+++ b/vendor/consolidation/robo/src/Task/Bower/loadTasks.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Bower;
 
 trait loadTasks
@@ -6,7 +7,7 @@ trait loadTasks
     /**
      * @param null|string $pathToBower
      *
-     * @return Install
+     * @return \Robo\Task\Bower\Install|\Robo\Collection\CollectionBuilder
      */
     protected function taskBowerInstall($pathToBower = null)
     {
@@ -16,7 +17,7 @@ protected function taskBowerInstall($pathToBower = null)
     /**
      * @param null|string $pathToBower
      *
-     * @return Update
+     * @return \Robo\Task\Bower\Update|\Robo\Collection\CollectionBuilder
      */
     protected function taskBowerUpdate($pathToBower = null)
     {
diff --git a/vendor/consolidation/robo/src/Task/CommandStack.php b/vendor/consolidation/robo/src/Task/CommandStack.php
index 43fbd7ccfe..9114ebbed5 100644
--- a/vendor/consolidation/robo/src/Task/CommandStack.php
+++ b/vendor/consolidation/robo/src/Task/CommandStack.php
@@ -18,6 +18,9 @@ abstract class CommandStack extends BaseTask implements CommandInterface, Printe
      */
     protected $executable;
 
+    /**
+     * @var \Robo\Result
+     */
     protected $result;
 
     /**
@@ -69,9 +72,9 @@ public function exec($command)
             $command = $this->executable . ' ' . $this->stripExecutableFromCommand($command);
             $command = trim($command);
         }
-        
+
         $this->exec[] = $command;
-        
+
         return $this;
     }
 
diff --git a/vendor/consolidation/robo/src/Task/Composer/Base.php b/vendor/consolidation/robo/src/Task/Composer/Base.php
index de3fe2174c..edd93a32ce 100644
--- a/vendor/consolidation/robo/src/Task/Composer/Base.php
+++ b/vendor/consolidation/robo/src/Task/Composer/Base.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Composer;
 
 use Robo\Contract\CommandInterface;
@@ -15,7 +16,7 @@ abstract class Base extends BaseTask implements CommandInterface
     protected $command = '';
 
     /**
-     * @var boolena
+     * @var bool
      */
     protected $built = false;
 
@@ -65,6 +66,8 @@ public function __construct($pathToComposer = null)
     /**
      * adds `prefer-dist` option to composer
      *
+     * @param bool $preferDist
+     *
      * @return $this
      */
     public function preferDist($preferDist = true)
@@ -90,6 +93,8 @@ public function preferSource()
     /**
      * adds `dev` option to composer
      *
+     * @param bool $dev
+     *
      * @return $this
      */
     public function dev($dev = true)
@@ -115,6 +120,8 @@ public function noDev()
     /**
      * adds `ansi` option to composer
      *
+     * @param bool $ansi
+     *
      * @return $this
      */
     public function ansi($ansi = true)
@@ -137,6 +144,11 @@ public function noAnsi()
         return $this;
     }
 
+    /**
+     * @param bool $interaction
+     *
+     * @return $this
+     */
     public function interaction($interaction = true)
     {
         if (!$interaction) {
@@ -159,6 +171,8 @@ public function noInteraction()
     /**
      * adds `optimize-autoloader` option to composer
      *
+     * @param bool $optimize
+     *
      * @return $this
      */
     public function optimizeAutoloader($optimize = true)
@@ -172,6 +186,8 @@ public function optimizeAutoloader($optimize = true)
     /**
      * adds `ignore-platform-reqs` option to composer
      *
+     * @param bool $ignore
+     *
      * @return $this
      */
     public function ignorePlatformRequirements($ignore = true)
@@ -183,6 +199,8 @@ public function ignorePlatformRequirements($ignore = true)
     /**
      * disable plugins
      *
+     * @param bool $disable
+     *
      * @return $this
      */
     public function disablePlugins($disable = true)
@@ -196,6 +214,8 @@ public function disablePlugins($disable = true)
     /**
      * skip scripts
      *
+     * @param bool $disable
+     *
      * @return $this
      */
     public function noScripts($disable = true)
@@ -209,6 +229,8 @@ public function noScripts($disable = true)
     /**
      * adds `--working-dir $dir` option to composer
      *
+     * @param string $dir
+     *
      * @return $this
      */
     public function workingDir($dir)
diff --git a/vendor/consolidation/robo/src/Task/Composer/Config.php b/vendor/consolidation/robo/src/Task/Composer/Config.php
index b5a6bbff97..990fe2789e 100644
--- a/vendor/consolidation/robo/src/Task/Composer/Config.php
+++ b/vendor/consolidation/robo/src/Task/Composer/Config.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Composer;
 
 /**
@@ -19,7 +20,11 @@ class Config extends Base
     protected $action = 'config';
 
     /**
-     * Set a configuration value
+     * Set a configuration value.
+     *
+     * @param string $key
+     * @param string $value
+     *
      * @return $this
      */
     public function set($key, $value)
@@ -31,6 +36,9 @@ public function set($key, $value)
 
     /**
      * Operate on the global repository
+     *
+     * @param bool $useGlobal
+     *
      * @return $this
      */
     public function useGlobal($useGlobal = true)
@@ -42,6 +50,10 @@ public function useGlobal($useGlobal = true)
     }
 
     /**
+     * @param string $id
+     * @param string $uri
+     * @param string $repoType
+     *
      * @return $this
      */
     public function repository($id, $uri, $repoType = 'vcs')
@@ -53,6 +65,8 @@ public function repository($id, $uri, $repoType = 'vcs')
     }
 
     /**
+     * @param string $id
+     *
      * @return $this
      */
     public function removeRepository($id)
@@ -62,6 +76,8 @@ public function removeRepository($id)
     }
 
     /**
+     * @param string $id
+     *
      * @return $this
      */
     public function disableRepository($id)
@@ -72,6 +88,8 @@ public function disableRepository($id)
     }
 
     /**
+     * @param string $id
+     *
      * @return $this
      */
     public function enableRepository($id)
diff --git a/vendor/consolidation/robo/src/Task/Composer/CreateProject.php b/vendor/consolidation/robo/src/Task/Composer/CreateProject.php
index 5f979a646c..e833ebac23 100644
--- a/vendor/consolidation/robo/src/Task/Composer/CreateProject.php
+++ b/vendor/consolidation/robo/src/Task/Composer/CreateProject.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Composer;
 
 /**
@@ -18,11 +19,24 @@ class CreateProject extends Base
      */
     protected $action = 'create-project';
 
+    /**
+     * @var
+     */
     protected $source;
+
+    /**
+     * @var string
+     */
     protected $target = '';
+
+    /**
+     * @var string
+     */
     protected $version = '';
 
     /**
+     * @param string $source
+     *
      * @return $this
      */
     public function source($source)
@@ -32,6 +46,8 @@ public function source($source)
     }
 
     /**
+     * @param string $target
+     *
      * @return $this
      */
     public function target($target)
@@ -41,6 +57,8 @@ public function target($target)
     }
 
     /**
+     * @param string $version
+     *
      * @return $this
      */
     public function version($version)
@@ -49,6 +67,11 @@ public function version($version)
         return $this;
     }
 
+    /**
+     * @param bool $keep
+     *
+     * @return $this
+     */
     public function keepVcs($keep = true)
     {
         if ($keep) {
@@ -57,6 +80,11 @@ public function keepVcs($keep = true)
         return $this;
     }
 
+    /**
+     * @param bool $noInstall
+     *
+     * @return $this
+     */
     public function noInstall($noInstall = true)
     {
         if ($noInstall) {
@@ -66,6 +94,8 @@ public function noInstall($noInstall = true)
     }
 
     /**
+     * @param string $repository
+     *
      * @return $this
      */
     public function repository($repository)
@@ -77,6 +107,8 @@ public function repository($repository)
     }
 
     /**
+     * @param string $stability
+     *
      * @return $this
      */
     public function stability($stability)
@@ -87,6 +119,9 @@ public function stability($stability)
         return $this;
     }
 
+    /**
+     * {@inheritdoc}
+     */
     public function buildCommand()
     {
         $this->arg($this->source);
diff --git a/vendor/consolidation/robo/src/Task/Composer/DumpAutoload.php b/vendor/consolidation/robo/src/Task/Composer/DumpAutoload.php
index 55b1ea00e4..8fbdd8cd91 100644
--- a/vendor/consolidation/robo/src/Task/Composer/DumpAutoload.php
+++ b/vendor/consolidation/robo/src/Task/Composer/DumpAutoload.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Composer;
 
 /**
@@ -40,6 +41,8 @@ class DumpAutoload extends Base
     protected $optimize;
 
     /**
+     * @param bool $optimize
+     *
      * @return $this
      */
     public function optimize($optimize = true)
diff --git a/vendor/consolidation/robo/src/Task/Composer/Init.php b/vendor/consolidation/robo/src/Task/Composer/Init.php
index c841299ddb..ab7c44b52b 100644
--- a/vendor/consolidation/robo/src/Task/Composer/Init.php
+++ b/vendor/consolidation/robo/src/Task/Composer/Init.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Composer;
 
 /**
@@ -19,6 +20,8 @@ class Init extends Base
     protected $action = 'init';
 
     /**
+     * @param string $projectName
+     *
      * @return $this
      */
     public function projectName($projectName)
@@ -28,6 +31,8 @@ public function projectName($projectName)
     }
 
     /**
+     * @param string $description
+     *
      * @return $this
      */
     public function description($description)
@@ -37,6 +42,8 @@ public function description($description)
     }
 
     /**
+     * @param string $author
+     *
      * @return $this
      */
     public function author($author)
@@ -46,6 +53,8 @@ public function author($author)
     }
 
     /**
+     * @param string $type
+     *
      * @return $this
      */
     public function projectType($type)
@@ -55,6 +64,8 @@ public function projectType($type)
     }
 
     /**
+     * @param string $homepage
+     *
      * @return $this
      */
     public function homepage($homepage)
@@ -65,6 +76,10 @@ public function homepage($homepage)
 
     /**
      * 'require' is a keyword, so it cannot be a method name.
+     *
+     * @param string $project
+     * @param null|string $version
+     *
      * @return $this
      */
     public function dependency($project, $version = null)
@@ -77,6 +92,8 @@ public function dependency($project, $version = null)
     }
 
     /**
+     * @param string $stability
+     *
      * @return $this
      */
     public function stability($stability)
@@ -86,6 +103,8 @@ public function stability($stability)
     }
 
     /**
+     * @param string $license
+     *
      * @return $this
      */
     public function license($license)
@@ -95,6 +114,8 @@ public function license($license)
     }
 
     /**
+     * @param string $repository
+     *
      * @return $this
      */
     public function repository($repository)
diff --git a/vendor/consolidation/robo/src/Task/Composer/Install.php b/vendor/consolidation/robo/src/Task/Composer/Install.php
index 76cb9861f6..9231287a7f 100644
--- a/vendor/consolidation/robo/src/Task/Composer/Install.php
+++ b/vendor/consolidation/robo/src/Task/Composer/Install.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Composer;
 
 /**
diff --git a/vendor/consolidation/robo/src/Task/Composer/Remove.php b/vendor/consolidation/robo/src/Task/Composer/Remove.php
index b0316f0514..29f5c19c11 100644
--- a/vendor/consolidation/robo/src/Task/Composer/Remove.php
+++ b/vendor/consolidation/robo/src/Task/Composer/Remove.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Composer;
 
 /**
@@ -19,6 +20,8 @@ class Remove extends Base
     protected $action = 'remove';
 
     /**
+     * @param bool $dev
+     *
      * @return $this
      */
     public function dev($dev = true)
@@ -30,6 +33,8 @@ public function dev($dev = true)
     }
 
     /**
+     * @param bool $noProgress
+     *
      * @return $this
      */
     public function noProgress($noProgress = true)
@@ -41,6 +46,8 @@ public function noProgress($noProgress = true)
     }
 
     /**
+     * @param bool $noUpdate
+     *
      * @return $this
      */
     public function noUpdate($noUpdate = true)
@@ -52,6 +59,8 @@ public function noUpdate($noUpdate = true)
     }
 
     /**
+     * @param bool $updateNoDev
+     *
      * @return $this
      */
     public function updateNoDev($updateNoDev = true)
@@ -63,6 +72,8 @@ public function updateNoDev($updateNoDev = true)
     }
 
     /**
+     * @param bool $updateWithDependencies
+     *
      * @return $this
      */
     public function noUpdateWithDependencies($updateWithDependencies = true)
diff --git a/vendor/consolidation/robo/src/Task/Composer/RequireDependency.php b/vendor/consolidation/robo/src/Task/Composer/RequireDependency.php
index 6cdbf61391..3ad74970e5 100644
--- a/vendor/consolidation/robo/src/Task/Composer/RequireDependency.php
+++ b/vendor/consolidation/robo/src/Task/Composer/RequireDependency.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Composer;
 
 /**
@@ -20,6 +21,10 @@ class RequireDependency extends Base
 
     /**
      * 'require' is a keyword, so it cannot be a method name.
+     *
+     * @param string $project
+     * @param null|string $version
+     *
      * @return $this
      */
     public function dependency($project, $version = null)
diff --git a/vendor/consolidation/robo/src/Task/Composer/Update.php b/vendor/consolidation/robo/src/Task/Composer/Update.php
index 3a0a64afcb..b3f2c7a285 100644
--- a/vendor/consolidation/robo/src/Task/Composer/Update.php
+++ b/vendor/consolidation/robo/src/Task/Composer/Update.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Composer;
 
 /**
diff --git a/vendor/consolidation/robo/src/Task/Composer/Validate.php b/vendor/consolidation/robo/src/Task/Composer/Validate.php
index adb1585430..0b17e1e2ff 100644
--- a/vendor/consolidation/robo/src/Task/Composer/Validate.php
+++ b/vendor/consolidation/robo/src/Task/Composer/Validate.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Composer;
 
 /**
@@ -19,6 +20,8 @@ class Validate extends Base
     protected $action = 'validate';
 
     /**
+     * @param bool $noCheckAll
+     *
      * @return $this
      */
     public function noCheckAll($noCheckAll = true)
@@ -30,6 +33,8 @@ public function noCheckAll($noCheckAll = true)
     }
 
     /**
+     * @param bool $noCheckLock
+     *
      * @return $this
      */
     public function noCheckLock($noCheckLock = true)
@@ -41,6 +46,8 @@ public function noCheckLock($noCheckLock = true)
     }
 
     /**
+     * @param bool $noCheckPublish
+     *
      * @return $this
      */
     public function noCheckPublish($noCheckPublish = true)
@@ -52,6 +59,8 @@ public function noCheckPublish($noCheckPublish = true)
     }
 
     /**
+     * @param bool $withDependencies
+     *
      * @return $this
      */
     public function withDependencies($withDependencies = true)
@@ -63,6 +72,8 @@ public function withDependencies($withDependencies = true)
     }
 
     /**
+     * @param bool $strict
+     *
      * @return $this
      */
     public function strict($strict = true)
diff --git a/vendor/consolidation/robo/src/Task/Composer/loadTasks.php b/vendor/consolidation/robo/src/Task/Composer/loadTasks.php
index a7149f8a2d..c4e77894e3 100644
--- a/vendor/consolidation/robo/src/Task/Composer/loadTasks.php
+++ b/vendor/consolidation/robo/src/Task/Composer/loadTasks.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Composer;
 
 trait loadTasks
@@ -6,7 +7,7 @@ trait loadTasks
     /**
      * @param null|string $pathToComposer
      *
-     * @return Install
+     * @return \Robo\Task\Composer\Install|\Robo\Collection\CollectionBuilder
      */
     protected function taskComposerInstall($pathToComposer = null)
     {
@@ -16,7 +17,7 @@ protected function taskComposerInstall($pathToComposer = null)
     /**
      * @param null|string $pathToComposer
      *
-     * @return Update
+     * @return \Robo\Task\Composer\Update|\Robo\Collection\CollectionBuilder
      */
     protected function taskComposerUpdate($pathToComposer = null)
     {
@@ -26,7 +27,7 @@ protected function taskComposerUpdate($pathToComposer = null)
     /**
      * @param null|string $pathToComposer
      *
-     * @return DumpAutoload
+     * @return \Robo\Task\Composer\DumpAutoload|\Robo\Collection\CollectionBuilder
      */
     protected function taskComposerDumpAutoload($pathToComposer = null)
     {
@@ -36,7 +37,7 @@ protected function taskComposerDumpAutoload($pathToComposer = null)
     /**
      * @param null|string $pathToComposer
      *
-     * @return Init
+     * @return \Robo\Task\Composer\Init|\Robo\Collection\CollectionBuilder
      */
     protected function taskComposerInit($pathToComposer = null)
     {
@@ -46,7 +47,7 @@ protected function taskComposerInit($pathToComposer = null)
     /**
      * @param null|string $pathToComposer
      *
-     * @return Config
+     * @return \Robo\Task\Composer\Config|\Robo\Collection\CollectionBuilder
      */
     protected function taskComposerConfig($pathToComposer = null)
     {
@@ -56,7 +57,7 @@ protected function taskComposerConfig($pathToComposer = null)
     /**
      * @param null|string $pathToComposer
      *
-     * @return Validate
+     * @return \Robo\Task\Composer\Validate|\Robo\Collection\CollectionBuilder
      */
     protected function taskComposerValidate($pathToComposer = null)
     {
@@ -66,7 +67,7 @@ protected function taskComposerValidate($pathToComposer = null)
     /**
      * @param null|string $pathToComposer
      *
-     * @return Remove
+     * @return \Robo\Task\Composer\Remove|\Robo\Collection\CollectionBuilder
      */
     protected function taskComposerRemove($pathToComposer = null)
     {
@@ -76,7 +77,7 @@ protected function taskComposerRemove($pathToComposer = null)
     /**
      * @param null|string $pathToComposer
      *
-     * @return RequireDependency
+     * @return \Robo\Task\Composer\RequireDependency|\Robo\Collection\CollectionBuilder
      */
     protected function taskComposerRequire($pathToComposer = null)
     {
@@ -86,7 +87,7 @@ protected function taskComposerRequire($pathToComposer = null)
     /**
      * @param null|string $pathToComposer
      *
-     * @return CreateProject
+     * @return \Robo\Task\Composer\CreateProject|\Robo\Collection\CollectionBuilder
      */
     protected function taskComposerCreateProject($pathToComposer = null)
     {
diff --git a/vendor/consolidation/robo/src/Task/Development/Changelog.php b/vendor/consolidation/robo/src/Task/Development/Changelog.php
index 44af6d8202..2496a15837 100644
--- a/vendor/consolidation/robo/src/Task/Development/Changelog.php
+++ b/vendor/consolidation/robo/src/Task/Development/Changelog.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Development;
 
 use Robo\Task\BaseTask;
@@ -216,7 +217,7 @@ public function run()
     }
 
     /**
-     * @return \Robo\Result|string
+     * @return string
      */
     protected function generateBody()
     {
@@ -235,7 +236,7 @@ protected function generateHeader()
     }
 
     /**
-     * @param $i
+     * @param string $i
      *
      * @return string
      */
diff --git a/vendor/consolidation/robo/src/Task/Development/GenerateMarkdownDoc.php b/vendor/consolidation/robo/src/Task/Development/GenerateMarkdownDoc.php
index 490aef31fe..053ba6ab4c 100644
--- a/vendor/consolidation/robo/src/Task/Development/GenerateMarkdownDoc.php
+++ b/vendor/consolidation/robo/src/Task/Development/GenerateMarkdownDoc.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Development;
 
 use Robo\Task\BaseTask;
@@ -506,7 +507,7 @@ protected function documentClass($class)
 
         $methods = array_filter($methods);
 
-        $doc .= implode("\n", $methods)."\n";
+        $doc .= implode("\n", $methods) . "\n";
 
         return $doc;
     }
diff --git a/vendor/consolidation/robo/src/Task/Development/GenerateTask.php b/vendor/consolidation/robo/src/Task/Development/GenerateTask.php
index 9d7a698e9c..2ea5ca01a9 100644
--- a/vendor/consolidation/robo/src/Task/Development/GenerateTask.php
+++ b/vendor/consolidation/robo/src/Task/Development/GenerateTask.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Development;
 
 use Robo\Task\BaseTask;
diff --git a/vendor/consolidation/robo/src/Task/Development/GitHub.php b/vendor/consolidation/robo/src/Task/Development/GitHub.php
index 9fc9909d42..04d28e5067 100644
--- a/vendor/consolidation/robo/src/Task/Development/GitHub.php
+++ b/vendor/consolidation/robo/src/Task/Development/GitHub.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Development;
 
 use Robo\Exception\TaskException;
@@ -86,7 +87,7 @@ public function user($user)
     }
 
     /**
-     * @param $password
+     * @param string $password
      *
      * @return $this
      */
@@ -97,7 +98,7 @@ public function password($password)
     }
 
     /**
-     * @param $accessToken
+     * @param string $token
      *
      * @return $this
      */
diff --git a/vendor/consolidation/robo/src/Task/Development/GitHubRelease.php b/vendor/consolidation/robo/src/Task/Development/GitHubRelease.php
index bf7a4889e5..f9d218cd58 100644
--- a/vendor/consolidation/robo/src/Task/Development/GitHubRelease.php
+++ b/vendor/consolidation/robo/src/Task/Development/GitHubRelease.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Development;
 
 use Robo\Result;
diff --git a/vendor/consolidation/robo/src/Task/Development/OpenBrowser.php b/vendor/consolidation/robo/src/Task/Development/OpenBrowser.php
index ea01b326d8..ac3840bada 100644
--- a/vendor/consolidation/robo/src/Task/Development/OpenBrowser.php
+++ b/vendor/consolidation/robo/src/Task/Development/OpenBrowser.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Development;
 
 use Robo\Task\BaseTask;
@@ -31,7 +32,7 @@ class OpenBrowser extends BaseTask
     protected $urls = [];
 
     /**
-     * @param string|array $url
+     * @param string|string[] $url
      */
     public function __construct($url)
     {
diff --git a/vendor/consolidation/robo/src/Task/Development/PackPhar.php b/vendor/consolidation/robo/src/Task/Development/PackPhar.php
index 6d0a04d72a..edcab5680a 100644
--- a/vendor/consolidation/robo/src/Task/Development/PackPhar.php
+++ b/vendor/consolidation/robo/src/Task/Development/PackPhar.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Development;
 
 use Robo\Contract\ProgressIndicatorAwareInterface;
@@ -129,7 +130,7 @@ public function progressIndicatorSteps()
     {
         // run() will call advanceProgressIndicator() once for each
         // file, one after calling stopBuffering, and again after compression.
-        return count($this->files)+2;
+        return count($this->files) + 2;
     }
 
     /**
diff --git a/vendor/consolidation/robo/src/Task/Development/PhpServer.php b/vendor/consolidation/robo/src/Task/Development/PhpServer.php
index 6dd36680a7..c274d8c30d 100644
--- a/vendor/consolidation/robo/src/Task/Development/PhpServer.php
+++ b/vendor/consolidation/robo/src/Task/Development/PhpServer.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Development;
 
 use Robo\Task\Base\Exec;
diff --git a/vendor/consolidation/robo/src/Task/Development/SemVer.php b/vendor/consolidation/robo/src/Task/Development/SemVer.php
index 639c15323a..1c021baf8e 100644
--- a/vendor/consolidation/robo/src/Task/Development/SemVer.php
+++ b/vendor/consolidation/robo/src/Task/Development/SemVer.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Development;
 
 use Robo\Result;
@@ -88,6 +89,11 @@ public function __toString()
         return str_replace($search, $replace, $this->format);
     }
 
+    /**
+     * @param string $version
+     *
+     * @return $this
+     */
     public function version($version)
     {
         $this->parseString($version);
@@ -220,14 +226,25 @@ protected function dump()
         if (empty($this->path)) {
             return true;
         }
-        extract($this->version);
-        $semver = sprintf(self::SEMVER, $major, $minor, $patch, $special, $metadata);
+        $semver = sprintf(
+            self::SEMVER,
+            $this->version['major'],
+            $this->version['minor'],
+            $this->version['patch'],
+            $this->version['special'],
+            $this->version['metadata']
+        );
         if (is_writeable($this->path) === false || file_put_contents($this->path, $semver) === false) {
             throw new TaskException($this, 'Failed to write semver file.');
         }
         return true;
     }
 
+    /**
+     * @param string $semverString
+     *
+     * @throws \Robo\Exception\TaskException
+     */
     protected function parseString($semverString)
     {
         if (!preg_match_all(self::REGEX_STRING, $semverString, $matches)) {
@@ -241,6 +258,8 @@ protected function parseString($semverString)
     }
 
     /**
+     * @param string $semverFileContents
+     *
      * @throws \Robo\Exception\TaskException
      */
     protected function parseFile($semverFileContents)
diff --git a/vendor/consolidation/robo/src/Task/Development/loadTasks.php b/vendor/consolidation/robo/src/Task/Development/loadTasks.php
index e3dc49a39d..63f36bd2f3 100644
--- a/vendor/consolidation/robo/src/Task/Development/loadTasks.php
+++ b/vendor/consolidation/robo/src/Task/Development/loadTasks.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Development;
 
 trait loadTasks
@@ -6,7 +7,7 @@ trait loadTasks
     /**
      * @param string $filename
      *
-     * @return Changelog
+     * @return \Robo\Task\Development\Changelog|\Robo\Collection\CollectionBuilder
      */
     protected function taskChangelog($filename = 'CHANGELOG.md')
     {
@@ -16,7 +17,7 @@ protected function taskChangelog($filename = 'CHANGELOG.md')
     /**
      * @param string $filename
      *
-     * @return GenerateMarkdownDoc
+     * @return \Robo\Task\Development\GenerateMarkdownDoc|\Robo\Collection\CollectionBuilder
      */
     protected function taskGenDoc($filename)
     {
@@ -27,7 +28,7 @@ protected function taskGenDoc($filename)
      * @param string $className
      * @param string $wrapperClassName
      *
-     * @return \Robo\Task\Development\GenerateTask
+     * @return \Robo\Task\Development\GenerateTask|\Robo\Collection\CollectionBuilder
      */
     protected function taskGenTask($className, $wrapperClassName = '')
     {
@@ -37,7 +38,7 @@ protected function taskGenTask($className, $wrapperClassName = '')
     /**
      * @param string $pathToSemVer
      *
-     * @return SemVer
+     * @return \Robo\Task\Development\SemVer|\Robo\Collection\CollectionBuilder
      */
     protected function taskSemVer($pathToSemVer = '.semver')
     {
@@ -47,7 +48,7 @@ protected function taskSemVer($pathToSemVer = '.semver')
     /**
      * @param int $port
      *
-     * @return PhpServer
+     * @return \Robo\Task\Development\PhpServer|\Robo\Collection\CollectionBuilder
      */
     protected function taskServer($port = 8000)
     {
@@ -57,7 +58,7 @@ protected function taskServer($port = 8000)
     /**
      * @param string $filename
      *
-     * @return PackPhar
+     * @return \Robo\Task\Development\PackPhar|\Robo\Collection\CollectionBuilder
      */
     protected function taskPackPhar($filename)
     {
@@ -67,7 +68,7 @@ protected function taskPackPhar($filename)
     /**
      * @param string $tag
      *
-     * @return GitHubRelease
+     * @return \Robo\Task\Development\GitHubRelease|\Robo\Collection\CollectionBuilder
      */
     protected function taskGitHubRelease($tag)
     {
@@ -77,7 +78,7 @@ protected function taskGitHubRelease($tag)
     /**
      * @param string|array $url
      *
-     * @return OpenBrowser
+     * @return \Robo\Task\Development\OpenBrowser|\Robo\Collection\CollectionBuilder
      */
     protected function taskOpenBrowser($url)
     {
diff --git a/vendor/consolidation/robo/src/Task/Docker/Base.php b/vendor/consolidation/robo/src/Task/Docker/Base.php
index 135f39e7a5..dc7cc3fd09 100644
--- a/vendor/consolidation/robo/src/Task/Docker/Base.php
+++ b/vendor/consolidation/robo/src/Task/Docker/Base.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Docker;
 
 use Robo\Common\ExecOneCommand;
diff --git a/vendor/consolidation/robo/src/Task/Docker/Build.php b/vendor/consolidation/robo/src/Task/Docker/Build.php
index 11eb92ab49..448a204bef 100644
--- a/vendor/consolidation/robo/src/Task/Docker/Build.php
+++ b/vendor/consolidation/robo/src/Task/Docker/Build.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Docker;
 
 /**
diff --git a/vendor/consolidation/robo/src/Task/Docker/Commit.php b/vendor/consolidation/robo/src/Task/Docker/Commit.php
index 302f1920ed..1660a492ea 100644
--- a/vendor/consolidation/robo/src/Task/Docker/Commit.php
+++ b/vendor/consolidation/robo/src/Task/Docker/Commit.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Docker;
 
 /**
@@ -54,7 +55,7 @@ public function getCommand()
     }
 
     /**
-     * @param $name
+     * @param string $name
      *
      * @return $this
      */
diff --git a/vendor/consolidation/robo/src/Task/Docker/Exec.php b/vendor/consolidation/robo/src/Task/Docker/Exec.php
index fa67c8da0e..078ed60d4b 100644
--- a/vendor/consolidation/robo/src/Task/Docker/Exec.php
+++ b/vendor/consolidation/robo/src/Task/Docker/Exec.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Docker;
 
 use Robo\Common\CommandReceiver;
@@ -64,7 +65,7 @@ public function detached()
     }
 
     /**
-     * {@inheritdoc)}
+     * {@inheritdoc}
      */
     public function interactive($interactive = true)
     {
@@ -90,6 +91,6 @@ public function exec($command)
      */
     public function getCommand()
     {
-        return $this->command . ' ' . $this->arguments . ' ' . $this->cid.' '.$this->run;
+        return $this->command . ' ' . $this->arguments . ' ' . $this->cid . ' ' . $this->run;
     }
 }
diff --git a/vendor/consolidation/robo/src/Task/Docker/Pull.php b/vendor/consolidation/robo/src/Task/Docker/Pull.php
index 32ba5b40f8..36c812ca5e 100644
--- a/vendor/consolidation/robo/src/Task/Docker/Pull.php
+++ b/vendor/consolidation/robo/src/Task/Docker/Pull.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Docker;
 
 /**
diff --git a/vendor/consolidation/robo/src/Task/Docker/Remove.php b/vendor/consolidation/robo/src/Task/Docker/Remove.php
index 0a8c0ac619..0aecca9154 100644
--- a/vendor/consolidation/robo/src/Task/Docker/Remove.php
+++ b/vendor/consolidation/robo/src/Task/Docker/Remove.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Docker;
 
 /**
diff --git a/vendor/consolidation/robo/src/Task/Docker/Result.php b/vendor/consolidation/robo/src/Task/Docker/Result.php
index 0533159a87..c6fde9f124 100644
--- a/vendor/consolidation/robo/src/Task/Docker/Result.php
+++ b/vendor/consolidation/robo/src/Task/Docker/Result.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Docker;
 
 class Result extends \Robo\Result
diff --git a/vendor/consolidation/robo/src/Task/Docker/Run.php b/vendor/consolidation/robo/src/Task/Docker/Run.php
index a02ea76f63..9af7d51c38 100644
--- a/vendor/consolidation/robo/src/Task/Docker/Run.php
+++ b/vendor/consolidation/robo/src/Task/Docker/Run.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Docker;
 
 use Robo\Common\CommandReceiver;
@@ -115,7 +116,7 @@ public function detached()
     }
 
     /**
-     * {@inheritdoc)}
+     * {@inheritdoc}
      */
     public function interactive($interactive = true)
     {
@@ -155,7 +156,8 @@ public function volume($from, $to = null)
      * inherited from ExecTrait.
      *
      * @param array $env
-     * @return type
+     *
+     * @return $this
      */
     public function envVars(array $env)
     {
diff --git a/vendor/consolidation/robo/src/Task/Docker/Start.php b/vendor/consolidation/robo/src/Task/Docker/Start.php
index ef19d74d14..3c76a17a65 100644
--- a/vendor/consolidation/robo/src/Task/Docker/Start.php
+++ b/vendor/consolidation/robo/src/Task/Docker/Start.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Docker;
 
 /**
diff --git a/vendor/consolidation/robo/src/Task/Docker/Stop.php b/vendor/consolidation/robo/src/Task/Docker/Stop.php
index 4d0d436d3f..25debaa07d 100644
--- a/vendor/consolidation/robo/src/Task/Docker/Stop.php
+++ b/vendor/consolidation/robo/src/Task/Docker/Stop.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Docker;
 
 /**
diff --git a/vendor/consolidation/robo/src/Task/Docker/loadTasks.php b/vendor/consolidation/robo/src/Task/Docker/loadTasks.php
index e58f5ef0c5..6a5eab4325 100644
--- a/vendor/consolidation/robo/src/Task/Docker/loadTasks.php
+++ b/vendor/consolidation/robo/src/Task/Docker/loadTasks.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Docker;
 
 trait loadTasks
@@ -6,7 +7,7 @@ trait loadTasks
     /**
      * @param string $image
      *
-     * @return \Robo\Task\Docker\Run
+     * @return \Robo\Task\Docker\Run|\Robo\Collection\CollectionBuilder
      */
     protected function taskDockerRun($image)
     {
@@ -16,7 +17,7 @@ protected function taskDockerRun($image)
     /**
      * @param string $image
      *
-     * @return \Robo\Task\Docker\Pull
+     * @return \Robo\Task\Docker\Pull|\Robo\Collection\CollectionBuilder
      */
     protected function taskDockerPull($image)
     {
@@ -26,7 +27,7 @@ protected function taskDockerPull($image)
     /**
      * @param string $path
      *
-     * @return \Robo\Task\Docker\Build
+     * @return \Robo\Task\Docker\Build|\Robo\Collection\CollectionBuilder
      */
     protected function taskDockerBuild($path = '.')
     {
@@ -36,7 +37,7 @@ protected function taskDockerBuild($path = '.')
     /**
      * @param string|\Robo\Task\Docker\Result $cidOrResult
      *
-     * @return \Robo\Task\Docker\Stop
+     * @return \Robo\Task\Docker\Stop|\Robo\Collection\CollectionBuilder
      */
     protected function taskDockerStop($cidOrResult)
     {
@@ -46,7 +47,7 @@ protected function taskDockerStop($cidOrResult)
     /**
      * @param string|\Robo\Task\Docker\Result $cidOrResult
      *
-     * @return \Robo\Task\Docker\Commit
+     * @return \Robo\Task\Docker\Commit|\Robo\Collection\CollectionBuilder
      */
     protected function taskDockerCommit($cidOrResult)
     {
@@ -56,7 +57,7 @@ protected function taskDockerCommit($cidOrResult)
     /**
      * @param string|\Robo\Task\Docker\Result $cidOrResult
      *
-     * @return \Robo\Task\Docker\Start
+     * @return \Robo\Task\Docker\Start|\Robo\Collection\CollectionBuilder
      */
     protected function taskDockerStart($cidOrResult)
     {
@@ -66,7 +67,7 @@ protected function taskDockerStart($cidOrResult)
     /**
      * @param string|\Robo\Task\Docker\Result $cidOrResult
      *
-     * @return \Robo\Task\Docker\Remove
+     * @return \Robo\Task\Docker\Remove|\Robo\Collection\CollectionBuilder
      */
     protected function taskDockerRemove($cidOrResult)
     {
@@ -76,7 +77,7 @@ protected function taskDockerRemove($cidOrResult)
     /**
      * @param string|\Robo\Task\Docker\Result $cidOrResult
      *
-     * @return \Robo\Task\Docker\Exec
+     * @return \Robo\Task\Docker\Exec|\Robo\Collection\CollectionBuilder
      */
     protected function taskDockerExec($cidOrResult)
     {
diff --git a/vendor/consolidation/robo/src/Task/File/Concat.php b/vendor/consolidation/robo/src/Task/File/Concat.php
index 12b1eca00f..43fd2fdba6 100644
--- a/vendor/consolidation/robo/src/Task/File/Concat.php
+++ b/vendor/consolidation/robo/src/Task/File/Concat.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\File;
 
 use Iterator;
@@ -26,7 +27,7 @@ class Concat extends BaseTask
     use ResourceExistenceChecker;
 
     /**
-     * @var array|Iterator
+     * @var array|\Iterator
      */
     protected $files;
 
@@ -38,7 +39,7 @@ class Concat extends BaseTask
     /**
      * Constructor.
      *
-     * @param array|Iterator $files
+     * @param array|\Iterator $files
      */
     public function __construct($files)
     {
diff --git a/vendor/consolidation/robo/src/Task/File/Replace.php b/vendor/consolidation/robo/src/Task/File/Replace.php
index 0107df13c3..7b4cd49d6a 100644
--- a/vendor/consolidation/robo/src/Task/File/Replace.php
+++ b/vendor/consolidation/robo/src/Task/File/Replace.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\File;
 
 use Robo\Result;
diff --git a/vendor/consolidation/robo/src/Task/File/Write.php b/vendor/consolidation/robo/src/Task/File/Write.php
index dc2199f927..d2b1e6a6b4 100644
--- a/vendor/consolidation/robo/src/Task/File/Write.php
+++ b/vendor/consolidation/robo/src/Task/File/Write.php
@@ -75,7 +75,8 @@ public function append($append = true)
      *
      * @param string $line
      *
-     * @return $this The current instance
+     * @return $this
+     *   The current instance.
      */
     public function line($line)
     {
@@ -88,7 +89,8 @@ public function line($line)
      *
      * @param array $lines
      *
-     * @return $this The current instance
+     * @return $this
+     *   The current instance.
      */
     public function lines(array $lines)
     {
@@ -101,7 +103,8 @@ public function lines(array $lines)
      *
      * @param string $text
      *
-     * @return $this The current instance
+     * @return $this
+     *   The current instance.
      */
     public function text($text)
     {
@@ -120,7 +123,8 @@ public function text($text)
      *
      * @param string $filename
      *
-     * @return $this The current instance
+     * @return $this
+     *   The current instance.
      */
     public function textFromFile($filename)
     {
@@ -134,11 +138,12 @@ public function textFromFile($filename)
      * @param string $name
      * @param string $val
      *
-     * @return $this The current instance
+     * @return $this
+     *   The current instance.
      */
     public function place($name, $val)
     {
-        $this->replace('{'.$name.'}', $val);
+        $this->replace('{' . $name . '}', $val);
 
         return $this;
     }
@@ -149,7 +154,8 @@ public function place($name, $val)
      * @param string $string
      * @param string $replacement
      *
-     * @return $this The current instance
+     * @return $this
+     *   The current instance.
      */
     public function replace($string, $replacement)
     {
@@ -163,7 +169,8 @@ public function replace($string, $replacement)
      * @param string $pattern
      * @param string $replacement
      *
-     * @return $this The current instance
+     * @return $this
+     *   The current instance.
      */
     public function regexReplace($pattern, $replacement)
     {
@@ -202,8 +209,8 @@ public function appendUnlessMatches($pattern, $text)
     }
 
     /**
-     * @param $contents string
-     * @param $filename string
+     * @param string $contents
+     * @param string $filename
      *
      * @return string
      */
diff --git a/vendor/consolidation/robo/src/Task/File/loadTasks.php b/vendor/consolidation/robo/src/Task/File/loadTasks.php
index c5f39c9500..210fb40cdd 100644
--- a/vendor/consolidation/robo/src/Task/File/loadTasks.php
+++ b/vendor/consolidation/robo/src/Task/File/loadTasks.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\File;
 
 trait loadTasks
@@ -6,7 +7,7 @@ trait loadTasks
     /**
      * @param array|\Iterator $files
      *
-     * @return \Robo\Task\File\Concat
+     * @return \Robo\Task\File\Concat|\Robo\Collection\CollectionBuilder
      */
     protected function taskConcat($files)
     {
@@ -16,7 +17,7 @@ protected function taskConcat($files)
     /**
      * @param string $file
      *
-     * @return \Robo\Task\File\Replace
+     * @return \Robo\Task\File\Replace|\Robo\Collection\CollectionBuilder
      */
     protected function taskReplaceInFile($file)
     {
@@ -26,7 +27,7 @@ protected function taskReplaceInFile($file)
     /**
      * @param string $file
      *
-     * @return \Robo\Task\File\Write
+     * @return \Robo\Task\File\Write|\Robo\Collection\CollectionBuilder
      */
     protected function taskWriteToFile($file)
     {
@@ -39,7 +40,7 @@ protected function taskWriteToFile($file)
      * @param string $baseDir
      * @param bool $includeRandomPart
      *
-     * @return \Robo\Task\File\TmpFile
+     * @return \Robo\Task\File\TmpFile|\Robo\Collection\CollectionBuilder
      */
     protected function taskTmpFile($filename = 'tmp', $extension = '', $baseDir = '', $includeRandomPart = true)
     {
diff --git a/vendor/consolidation/robo/src/Task/Filesystem/BaseDir.php b/vendor/consolidation/robo/src/Task/Filesystem/BaseDir.php
index 434334d797..b8146851fc 100644
--- a/vendor/consolidation/robo/src/Task/Filesystem/BaseDir.php
+++ b/vendor/consolidation/robo/src/Task/Filesystem/BaseDir.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Filesystem;
 
 use Robo\Task\BaseTask;
diff --git a/vendor/consolidation/robo/src/Task/Filesystem/CleanDir.php b/vendor/consolidation/robo/src/Task/Filesystem/CleanDir.php
index 762f855096..cfd8ad4899 100644
--- a/vendor/consolidation/robo/src/Task/Filesystem/CleanDir.php
+++ b/vendor/consolidation/robo/src/Task/Filesystem/CleanDir.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Filesystem;
 
 use Robo\Common\ResourceExistenceChecker;
diff --git a/vendor/consolidation/robo/src/Task/Filesystem/CopyDir.php b/vendor/consolidation/robo/src/Task/Filesystem/CopyDir.php
index 084822229b..a14c7371e9 100644
--- a/vendor/consolidation/robo/src/Task/Filesystem/CopyDir.php
+++ b/vendor/consolidation/robo/src/Task/Filesystem/CopyDir.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Filesystem;
 
 use Robo\Common\ResourceExistenceChecker;
@@ -23,6 +24,8 @@ class CopyDir extends BaseDir
     /**
      * Explicitly declare our consturctor, so that
      * our copyDir() method does not look like a php4 constructor.
+     *
+     * @param string|string[] $dirs
      */
     public function __construct($dirs)
     {
@@ -140,6 +143,12 @@ protected function copyDir($src, $dst, $parent = '')
 
     /**
      * Check to see if the current item is excluded.
+     *
+     * @param string $file
+     * @param string $src
+     * @param string $parent
+     *
+     * @return bool
      */
     protected function excluded($file, $src, $parent)
     {
@@ -154,6 +163,10 @@ protected function excluded($file, $src, $parent)
     /**
      * Avoid problems comparing paths on Windows that may have a
      * combination of DIRECTORY_SEPARATOR and /.
+     *
+     * @param string$item
+     *
+     * @return string
      */
     protected function simplifyForCompare($item)
     {
diff --git a/vendor/consolidation/robo/src/Task/Filesystem/DeleteDir.php b/vendor/consolidation/robo/src/Task/Filesystem/DeleteDir.php
index 25cf007b59..eb1015a8f2 100644
--- a/vendor/consolidation/robo/src/Task/Filesystem/DeleteDir.php
+++ b/vendor/consolidation/robo/src/Task/Filesystem/DeleteDir.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Filesystem;
 
 use Robo\Common\ResourceExistenceChecker;
diff --git a/vendor/consolidation/robo/src/Task/Filesystem/FilesystemStack.php b/vendor/consolidation/robo/src/Task/Filesystem/FilesystemStack.php
index 8663e245d3..5dbb5a78a2 100644
--- a/vendor/consolidation/robo/src/Task/Filesystem/FilesystemStack.php
+++ b/vendor/consolidation/robo/src/Task/Filesystem/FilesystemStack.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Filesystem;
 
 use Robo\Task\StackBasedTask;
diff --git a/vendor/consolidation/robo/src/Task/Filesystem/FlattenDir.php b/vendor/consolidation/robo/src/Task/Filesystem/FlattenDir.php
index 6e885112e0..c06a6bbbe1 100644
--- a/vendor/consolidation/robo/src/Task/Filesystem/FlattenDir.php
+++ b/vendor/consolidation/robo/src/Task/Filesystem/FlattenDir.php
@@ -176,7 +176,7 @@ public function parentDir($dir)
     {
         if (!$this->fs->isAbsolutePath($dir)) {
             // attach the relative path to current working directory
-            $dir = getcwd().'/'.$dir;
+            $dir = getcwd() . '/' . $dir;
         }
         $this->parentDir = $dir;
 
@@ -230,7 +230,7 @@ protected function findFiles($dirs)
             } catch (\InvalidArgumentException $e) {
                 // if finder cannot handle it, try with in()->name()
                 if (strpos($dir, '/') === false) {
-                    $dir = './'.$dir;
+                    $dir = './' . $dir;
                 }
                 $parts = explode('/', $dir);
                 $new_dir = implode('/', array_slice($parts, 0, -1));
@@ -260,7 +260,7 @@ protected function findFiles($dirs)
      */
     protected function getTarget($file, $to)
     {
-        $target = $to.'/'.basename($file);
+        $target = $to . '/' . basename($file);
         if ($this->parents !== array(0, 0)) {
             // if the parent is set, create additional directories inside target
             // get relative path to parentDir
@@ -268,10 +268,10 @@ protected function getTarget($file, $to)
             // get top parents and bottom parents
             $parts = explode('/', rtrim($rel_path, '/'));
             $prefix_dir = '';
-            $prefix_dir .= ($this->parents[0] > 0 ? implode('/', array_slice($parts, 0, $this->parents[0])).'/' : '');
+            $prefix_dir .= ($this->parents[0] > 0 ? implode('/', array_slice($parts, 0, $this->parents[0])) . '/' : '');
             $prefix_dir .= ($this->parents[1] > 0 ? implode('/', array_slice($parts, (0 - $this->parents[1]), $this->parents[1])) : '');
             $prefix_dir = rtrim($prefix_dir, '/');
-            $target = $to.'/'.$prefix_dir.'/'.basename($file);
+            $target = $to . '/' . $prefix_dir . '/' . basename($file);
         }
 
         return $target;
diff --git a/vendor/consolidation/robo/src/Task/Filesystem/MirrorDir.php b/vendor/consolidation/robo/src/Task/Filesystem/MirrorDir.php
index 4eda9097be..a581d0c229 100644
--- a/vendor/consolidation/robo/src/Task/Filesystem/MirrorDir.php
+++ b/vendor/consolidation/robo/src/Task/Filesystem/MirrorDir.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Filesystem;
 
 use Robo\Result;
diff --git a/vendor/consolidation/robo/src/Task/Filesystem/loadShortcuts.php b/vendor/consolidation/robo/src/Task/Filesystem/loadShortcuts.php
index fe72ce5a43..0863ca8049 100644
--- a/vendor/consolidation/robo/src/Task/Filesystem/loadShortcuts.php
+++ b/vendor/consolidation/robo/src/Task/Filesystem/loadShortcuts.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Filesystem;
 
 trait loadShortcuts
diff --git a/vendor/consolidation/robo/src/Task/Filesystem/loadTasks.php b/vendor/consolidation/robo/src/Task/Filesystem/loadTasks.php
index 8fecaafff7..577193020b 100644
--- a/vendor/consolidation/robo/src/Task/Filesystem/loadTasks.php
+++ b/vendor/consolidation/robo/src/Task/Filesystem/loadTasks.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Filesystem;
 
 trait loadTasks
@@ -6,7 +7,7 @@ trait loadTasks
     /**
      * @param string|string[] $dirs
      *
-     * @return \Robo\Task\Filesystem\CleanDir
+     * @return \Robo\Task\Filesystem\CleanDir|\Robo\Collection\CollectionBuilder
      */
     protected function taskCleanDir($dirs)
     {
@@ -16,7 +17,7 @@ protected function taskCleanDir($dirs)
     /**
      * @param string|string[] $dirs
      *
-     * @return \Robo\Task\Filesystem\DeleteDir
+     * @return \Robo\Task\Filesystem\DeleteDir|\Robo\Collection\CollectionBuilder
      */
     protected function taskDeleteDir($dirs)
     {
@@ -28,7 +29,7 @@ protected function taskDeleteDir($dirs)
      * @param string $base
      * @param bool $includeRandomPart
      *
-     * @return \Robo\Task\Filesystem\WorkDir
+     * @return \Robo\Task\Filesystem\WorkDir|\Robo\Collection\CollectionBuilder
      */
     protected function taskTmpDir($prefix = 'tmp', $base = '', $includeRandomPart = true)
     {
@@ -38,7 +39,7 @@ protected function taskTmpDir($prefix = 'tmp', $base = '', $includeRandomPart =
     /**
      * @param string $finalDestination
      *
-     * @return \Robo\Task\Filesystem\TmpDir
+     * @return \Robo\Task\Filesystem\TmpDir|\Robo\Collection\CollectionBuilder
      */
     protected function taskWorkDir($finalDestination)
     {
@@ -48,7 +49,7 @@ protected function taskWorkDir($finalDestination)
     /**
      * @param string|string[] $dirs
      *
-     * @return \Robo\Task\Filesystem\CopyDir
+     * @return \Robo\Task\Filesystem\CopyDir|\Robo\Collection\CollectionBuilder
      */
     protected function taskCopyDir($dirs)
     {
@@ -58,7 +59,7 @@ protected function taskCopyDir($dirs)
     /**
      * @param string|string[] $dirs
      *
-     * @return \Robo\Task\Filesystem\MirrorDir
+     * @return \Robo\Task\Filesystem\MirrorDir|\Robo\Collection\CollectionBuilder
      */
     protected function taskMirrorDir($dirs)
     {
@@ -68,7 +69,7 @@ protected function taskMirrorDir($dirs)
     /**
      * @param string|string[] $dirs
      *
-     * @return \Robo\Task\Filesystem\FlattenDir
+     * @return \Robo\Task\Filesystem\FlattenDir|\Robo\Collection\CollectionBuilder
      */
     protected function taskFlattenDir($dirs)
     {
@@ -76,7 +77,7 @@ protected function taskFlattenDir($dirs)
     }
 
     /**
-     * @return \Robo\Task\Filesystem\FilesystemStack
+     * @return \Robo\Task\Filesystem\FilesystemStack|\Robo\Collection\CollectionBuilder
      */
     protected function taskFilesystemStack()
     {
diff --git a/vendor/consolidation/robo/src/Task/Gulp/Run.php b/vendor/consolidation/robo/src/Task/Gulp/Run.php
index 8f2077b573..84a2506ab1 100644
--- a/vendor/consolidation/robo/src/Task/Gulp/Run.php
+++ b/vendor/consolidation/robo/src/Task/Gulp/Run.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Gulp;
 
 use Robo\Contract\CommandInterface;
diff --git a/vendor/consolidation/robo/src/Task/Gulp/loadTasks.php b/vendor/consolidation/robo/src/Task/Gulp/loadTasks.php
index 6fdc6ca70a..a29e405efc 100644
--- a/vendor/consolidation/robo/src/Task/Gulp/loadTasks.php
+++ b/vendor/consolidation/robo/src/Task/Gulp/loadTasks.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Gulp;
 
 trait loadTasks
@@ -7,7 +8,7 @@ trait loadTasks
      * @param string $task
      * @param null|string $pathToGulp
      *
-     * @return \Robo\Task\Gulp\Run
+     * @return \Robo\Task\Gulp\Run|\Robo\Collection\CollectionBuilder
      */
     protected function taskGulpRun($task = 'default', $pathToGulp = null)
     {
diff --git a/vendor/consolidation/robo/src/Task/Npm/Base.php b/vendor/consolidation/robo/src/Task/Npm/Base.php
index 35ff9c48f4..00b291f299 100644
--- a/vendor/consolidation/robo/src/Task/Npm/Base.php
+++ b/vendor/consolidation/robo/src/Task/Npm/Base.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Npm;
 
 use Robo\Task\BaseTask;
diff --git a/vendor/consolidation/robo/src/Task/Npm/Install.php b/vendor/consolidation/robo/src/Task/Npm/Install.php
index 65cbe61897..c43a5befbf 100644
--- a/vendor/consolidation/robo/src/Task/Npm/Install.php
+++ b/vendor/consolidation/robo/src/Task/Npm/Install.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Npm;
 
 use Robo\Contract\CommandInterface;
@@ -21,7 +22,7 @@
 class Install extends Base implements CommandInterface
 {
     /**
-     * @var string
+     * {@inheritdoc}
      */
     protected $action = 'install';
 
diff --git a/vendor/consolidation/robo/src/Task/Npm/Update.php b/vendor/consolidation/robo/src/Task/Npm/Update.php
index 75421b307c..1321e4711b 100644
--- a/vendor/consolidation/robo/src/Task/Npm/Update.php
+++ b/vendor/consolidation/robo/src/Task/Npm/Update.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Npm;
 
 /**
@@ -19,7 +20,7 @@
 class Update extends Base
 {
     /**
-     * @var string
+     * {@inheritdoc}
      */
     protected $action = 'update';
 
diff --git a/vendor/consolidation/robo/src/Task/Npm/loadTasks.php b/vendor/consolidation/robo/src/Task/Npm/loadTasks.php
index 4d9a26eb3b..dd8d13767a 100644
--- a/vendor/consolidation/robo/src/Task/Npm/loadTasks.php
+++ b/vendor/consolidation/robo/src/Task/Npm/loadTasks.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Npm;
 
 trait loadTasks
@@ -6,7 +7,7 @@ trait loadTasks
     /**
      * @param null|string $pathToNpm
      *
-     * @return \Robo\Task\Npm\Install
+     * @return \Robo\Task\Npm\Install|\Robo\Collection\CollectionBuilder
      */
     protected function taskNpmInstall($pathToNpm = null)
     {
@@ -16,7 +17,7 @@ protected function taskNpmInstall($pathToNpm = null)
     /**
      * @param null|string $pathToNpm
      *
-     * @return \Robo\Task\Npm\Update
+     * @return \Robo\Task\Npm\Update|\Robo\Collection\CollectionBuilder
      */
     protected function taskNpmUpdate($pathToNpm = null)
     {
diff --git a/vendor/consolidation/robo/src/Task/Remote/Rsync.php b/vendor/consolidation/robo/src/Task/Remote/Rsync.php
index 324a8d9a55..dc9404c473 100644
--- a/vendor/consolidation/robo/src/Task/Remote/Rsync.php
+++ b/vendor/consolidation/robo/src/Task/Remote/Rsync.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Remote;
 
 use Robo\Contract\CommandInterface;
@@ -447,6 +448,8 @@ public function getCommand()
     }
 
     /**
+     * @param string $from
+     *
      * @return string
      */
     protected function getFromPathSpec($from)
diff --git a/vendor/consolidation/robo/src/Task/Remote/loadTasks.php b/vendor/consolidation/robo/src/Task/Remote/loadTasks.php
index 092d2a5547..0506d681c3 100644
--- a/vendor/consolidation/robo/src/Task/Remote/loadTasks.php
+++ b/vendor/consolidation/robo/src/Task/Remote/loadTasks.php
@@ -1,10 +1,11 @@
 <?php
+
 namespace Robo\Task\Remote;
 
 trait loadTasks
 {
     /**
-     * @return \Robo\Task\Remote\Rsync
+     * @return \Robo\Task\Remote\Rsync|\Robo\Collection\CollectionBuilder
      */
     protected function taskRsync()
     {
@@ -15,7 +16,7 @@ protected function taskRsync()
      * @param null|string $hostname
      * @param null|string $user
      *
-     * @return \Robo\Task\Remote\Ssh
+     * @return \Robo\Task\Remote\Ssh|\Robo\Collection\CollectionBuilder
      */
     protected function taskSshExec($hostname = null, $user = null)
     {
diff --git a/vendor/consolidation/robo/src/Task/Simulator.php b/vendor/consolidation/robo/src/Task/Simulator.php
index e69d23fa39..d4d9b2e144 100644
--- a/vendor/consolidation/robo/src/Task/Simulator.php
+++ b/vendor/consolidation/robo/src/Task/Simulator.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task;
 
 use Robo\Contract\WrappedTaskInterface;
@@ -43,7 +44,7 @@ public function __construct(TaskInterface $task, $constructorParameters)
      * @param string $function
      * @param array $args
      *
-     * @return \Robo\Result|\Robo\Task\Simulator
+     * @return \Robo\Result|$this
      */
     public function __call($function, $args)
     {
@@ -109,7 +110,7 @@ public function getCommand()
     }
 
     /**
-     * @param string $action
+     * @param array $action
      *
      * @return string
      */
@@ -133,7 +134,7 @@ protected function convertParameter($item)
             return $this->shortenParameter(var_export($item, true));
         }
         if (is_object($item)) {
-            return '[' . get_class($item). ' object]';
+            return '[' . get_class($item) . ' object]';
         }
         if (is_string($item)) {
             return $this->shortenParameter("'$item'");
diff --git a/vendor/consolidation/robo/src/Task/StackBasedTask.php b/vendor/consolidation/robo/src/Task/StackBasedTask.php
index 91659f33a6..2e72182d8c 100644
--- a/vendor/consolidation/robo/src/Task/StackBasedTask.php
+++ b/vendor/consolidation/robo/src/Task/StackBasedTask.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task;
 
 use Robo\Result;
@@ -85,7 +86,7 @@ public function stopOnFail($stop = true)
      * this class.  Calling one of the delegate's methods will defer
      * execution until the run() method is called.
      *
-     * @return null
+     * @return null|object
      */
     protected function getDelegate()
     {
@@ -219,7 +220,7 @@ public function run()
      * Execute one task method
      *
      * @param string $command
-     * @param string $action
+     * @param array $action
      *
      * @return \Robo\Result
      */
diff --git a/vendor/consolidation/robo/src/Task/Testing/Atoum.php b/vendor/consolidation/robo/src/Task/Testing/Atoum.php
index 56b47d84f3..fbf478988e 100644
--- a/vendor/consolidation/robo/src/Task/Testing/Atoum.php
+++ b/vendor/consolidation/robo/src/Task/Testing/Atoum.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Testing;
 
 use Robo\Contract\CommandInterface;
@@ -48,7 +49,7 @@ public function __construct($pathToAtoum = null)
     /**
      * Tag or Tags to filter.
      *
-     * @param string|array $tags
+     * @param string|string[] $tags
      *
      * @return $this
      */
@@ -124,7 +125,7 @@ public function debug()
     /**
      * Test file or test files to run.
      *
-     * @param string|array
+     * @param string|string[]
      *
      * @return $this
      */
@@ -136,7 +137,8 @@ public function files($files)
     /**
      * Test directory or directories to run.
      *
-     * @param string|array A single directory or a list of directories.
+     * @param string|string[]
+     *   A single directory or a list of directories.
      *
      * @return $this
      */
@@ -147,7 +149,7 @@ public function directories($directories)
 
     /**
      * @param string $option
-     * @param string|array $values
+     * @param string|string[] $values
      *
      * @return $this
      */
diff --git a/vendor/consolidation/robo/src/Task/Testing/Behat.php b/vendor/consolidation/robo/src/Task/Testing/Behat.php
index 7e4f1d41a5..c5e1f33c51 100644
--- a/vendor/consolidation/robo/src/Task/Testing/Behat.php
+++ b/vendor/consolidation/robo/src/Task/Testing/Behat.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Testing;
 
 use Robo\Contract\CommandInterface;
@@ -74,7 +75,7 @@ public function noInteraction()
     }
 
     /**
-     * @param $config_file
+     * @param string $config_file
      *
      * @return $this
      */
@@ -142,10 +143,7 @@ public function format($formater)
     }
 
     /**
-     * Returns command that can be executed.
-     * This method is used to pass generated command from one task to another.
-     *
-     * @return string
+     * {@inheritdoc}
      */
     public function getCommand()
     {
diff --git a/vendor/consolidation/robo/src/Task/Testing/Codecept.php b/vendor/consolidation/robo/src/Task/Testing/Codecept.php
index 1f8cce7034..da68ca2eda 100644
--- a/vendor/consolidation/robo/src/Task/Testing/Codecept.php
+++ b/vendor/consolidation/robo/src/Task/Testing/Codecept.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Testing;
 
 use Robo\Contract\PrintedInterface;
@@ -28,7 +29,7 @@
 class Codecept extends BaseTask implements CommandInterface, PrintedInterface
 {
     use \Robo\Common\ExecOneCommand;
-    
+
     /**
      * @var string
      */
diff --git a/vendor/consolidation/robo/src/Task/Testing/PHPUnit.php b/vendor/consolidation/robo/src/Task/Testing/PHPUnit.php
index df67e1c75c..bbb87b6cf5 100644
--- a/vendor/consolidation/robo/src/Task/Testing/PHPUnit.php
+++ b/vendor/consolidation/robo/src/Task/Testing/PHPUnit.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Testing;
 
 use Robo\Contract\CommandInterface;
@@ -35,6 +36,13 @@ class PHPUnit extends BaseTask implements CommandInterface, PrintedInterface
      */
     protected $files = '';
 
+    /**
+     * PHPUnit constructor.
+     *
+     * @param null|string $pathToPhpUnit
+     *
+     * @throws \Robo\Exception\TaskException
+     */
     public function __construct($pathToPhpUnit = null)
     {
         $this->command = $pathToPhpUnit;
@@ -150,7 +158,8 @@ public function debug()
     /**
      * Directory of test files or single test file to run.
      *
-     * @param string $files A single test file or a directory containing test files.
+     * @param string $files
+     *   A single test file or a directory containing test files.
      *
      * @return $this
      *
@@ -171,7 +180,8 @@ public function files($files)
     /**
      * Test the provided file.
      *
-     * @param string $file path to file to test
+     * @param string $file
+     *   Path to file to test.
      *
      * @return $this
      */
diff --git a/vendor/consolidation/robo/src/Task/Testing/Phpspec.php b/vendor/consolidation/robo/src/Task/Testing/Phpspec.php
index dd6a5ae77c..9d8a343301 100644
--- a/vendor/consolidation/robo/src/Task/Testing/Phpspec.php
+++ b/vendor/consolidation/robo/src/Task/Testing/Phpspec.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Testing;
 
 use Robo\Contract\PrintedInterface;
@@ -28,15 +29,24 @@ class Phpspec extends BaseTask implements CommandInterface, PrintedInterface
     protected $command;
 
     /**
-     * @var string[] $formaters available formaters for format option
+     * @var string[] $formaters
+     *   Available formaters for format option.
      */
     protected $formaters = ['progress', 'html', 'pretty', 'junit', 'dot', 'tap'];
 
     /**
-     * @var array $verbose_levels available verbose levels
+     * @var array $verbose_levels
+     *   Available verbose levels.
      */
     protected $verbose_levels = ['v', 'vv', 'vvv'];
 
+    /**
+     * Phpspec constructor.
+     *
+     * @param null|string $pathToPhpspec
+     *
+     * @throws \Robo\Exception\TaskException
+     */
     public function __construct($pathToPhpspec = null)
     {
         $this->command = $pathToPhpspec;
@@ -67,6 +77,11 @@ public function quiet()
         return $this;
     }
 
+    /**
+     * @param string $level
+     *
+     * @return $this
+     */
     public function verbose($level = 'v')
     {
         if (!in_array($level, $this->verbose_levels)) {
@@ -76,24 +91,40 @@ public function verbose($level = 'v')
         return $this;
     }
 
+    /**
+     * @return $this
+     */
     public function noAnsi()
     {
         $this->option('no-ansi');
         return $this;
     }
 
+    /**
+     * @return $this
+     */
     public function noInteraction()
     {
         $this->option('no-interaction');
         return $this;
     }
 
+    /**
+     * @param string $config_file
+     *
+     * @return $this
+     */
     public function config($config_file)
     {
         $this->option('config', $config_file);
         return $this;
     }
 
+    /**
+     * @param string $formater
+     *
+     * @return $this
+     */
     public function format($formater)
     {
         if (!in_array($formater, $this->formaters)) {
@@ -103,11 +134,17 @@ public function format($formater)
         return $this;
     }
 
+    /**
+     * {@inheritdoc}
+     */
     public function getCommand()
     {
         return $this->command . $this->arguments;
     }
 
+    /**
+     * {@inheritdoc}
+     */
     public function run()
     {
         $this->printTaskInfo('Running phpspec {arguments}', ['arguments' => $this->arguments]);
diff --git a/vendor/consolidation/robo/src/Task/Testing/loadTasks.php b/vendor/consolidation/robo/src/Task/Testing/loadTasks.php
index 43145b9b60..f864b1fb55 100644
--- a/vendor/consolidation/robo/src/Task/Testing/loadTasks.php
+++ b/vendor/consolidation/robo/src/Task/Testing/loadTasks.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Testing;
 
 trait loadTasks
@@ -6,7 +7,7 @@ trait loadTasks
     /**
      * @param null|string $pathToCodeception
      *
-     * @return \Robo\Task\Testing\Codecept
+     * @return \Robo\Task\Testing\Codecept|\Robo\Collection\CollectionBuilder
      */
     protected function taskCodecept($pathToCodeception = null)
     {
@@ -16,7 +17,7 @@ protected function taskCodecept($pathToCodeception = null)
     /**
      * @param null|string $pathToPhpUnit
      *
-     * @return \Robo\Task\Testing\PHPUnit
+     * @return \Robo\Task\Testing\PHPUnit|\Robo\Collection\CollectionBuilder
      */
     protected function taskPhpUnit($pathToPhpUnit = null)
     {
@@ -24,9 +25,9 @@ protected function taskPhpUnit($pathToPhpUnit = null)
     }
 
     /**
-     * @param null $pathToPhpspec
+     * @param null|string $pathToPhpspec
      *
-     * @return \Robo\Task\Testing\Phpspec
+     * @return \Robo\Task\Testing\Phpspec|\Robo\Collection\CollectionBuilder
      */
     protected function taskPhpspec($pathToPhpspec = null)
     {
@@ -34,9 +35,9 @@ protected function taskPhpspec($pathToPhpspec = null)
     }
 
     /**
-     * @param null $pathToAtoum
+     * @param null|string $pathToAtoum
      *
-     * @return \Robo\Task\Testing\Atoum
+     * @return \Robo\Task\Testing\Atoum|\Robo\Collection\CollectionBuilder
      */
     protected function taskAtoum($pathToAtoum = null)
     {
@@ -44,9 +45,9 @@ protected function taskAtoum($pathToAtoum = null)
     }
 
     /**
-     * @param null $pathToBehat
+     * @param null|string $pathToBehat
      *
-     * @return \Robo\Task\Testing\Behat
+     * @return \Robo\Task\Testing\Behat|\Robo\Collection\CollectionBuilder
      */
     protected function taskBehat($pathToBehat = null)
     {
diff --git a/vendor/consolidation/robo/src/Task/Vcs/GitStack.php b/vendor/consolidation/robo/src/Task/Vcs/GitStack.php
index 6cb1783f04..a72df6cc6e 100644
--- a/vendor/consolidation/robo/src/Task/Vcs/GitStack.php
+++ b/vendor/consolidation/robo/src/Task/Vcs/GitStack.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Vcs;
 
 use Robo\Task\CommandStack;
@@ -42,6 +43,7 @@ public function __construct($pathToGit = 'git')
      *
      * @param string $repo
      * @param string $to
+     * @param string $branch
      *
      * @return $this
      */
diff --git a/vendor/consolidation/robo/src/Task/Vcs/HgStack.php b/vendor/consolidation/robo/src/Task/Vcs/HgStack.php
index 71cc0ca9c1..76d32bdc6d 100644
--- a/vendor/consolidation/robo/src/Task/Vcs/HgStack.php
+++ b/vendor/consolidation/robo/src/Task/Vcs/HgStack.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Vcs;
 
 use Robo\Task\CommandStack;
diff --git a/vendor/consolidation/robo/src/Task/Vcs/SvnStack.php b/vendor/consolidation/robo/src/Task/Vcs/SvnStack.php
index ec719b538b..bae13f5492 100644
--- a/vendor/consolidation/robo/src/Task/Vcs/SvnStack.php
+++ b/vendor/consolidation/robo/src/Task/Vcs/SvnStack.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Vcs;
 
 use Robo\Contract\CommandInterface;
@@ -34,7 +35,7 @@ class SvnStack extends CommandStack implements CommandInterface
     protected $stopOnFail = false;
 
     /**
-     * @var \Robo\Result
+     * {@inheritdoc}
      */
     protected $result;
 
@@ -60,7 +61,7 @@ public function __construct($username = '', $password = '', $pathToSvn = 'svn')
      *
      * @param string $path
      *
-     * @return $this;
+     * @return $this
      */
     public function update($path = '')
     {
diff --git a/vendor/consolidation/robo/src/Task/Vcs/loadShortcuts.php b/vendor/consolidation/robo/src/Task/Vcs/loadShortcuts.php
index 7d64ab58c3..7aeaa0ff3c 100644
--- a/vendor/consolidation/robo/src/Task/Vcs/loadShortcuts.php
+++ b/vendor/consolidation/robo/src/Task/Vcs/loadShortcuts.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Vcs;
 
 trait loadShortcuts
diff --git a/vendor/consolidation/robo/src/Task/Vcs/loadTasks.php b/vendor/consolidation/robo/src/Task/Vcs/loadTasks.php
index 6dd06228a1..7b58392fcf 100644
--- a/vendor/consolidation/robo/src/Task/Vcs/loadTasks.php
+++ b/vendor/consolidation/robo/src/Task/Vcs/loadTasks.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Vcs;
 
 trait loadTasks
@@ -8,7 +9,7 @@ trait loadTasks
      * @param string $password
      * @param string $pathToSvn
      *
-     * @return \Robo\Task\Vcs\SvnStack
+     * @return \Robo\Task\Vcs\SvnStack|\Robo\Collection\CollectionBuilder
      */
     protected function taskSvnStack($username = '', $password = '', $pathToSvn = 'svn')
     {
@@ -18,7 +19,7 @@ protected function taskSvnStack($username = '', $password = '', $pathToSvn = 'sv
     /**
      * @param string $pathToGit
      *
-     * @return \Robo\Task\Vcs\GitStack
+     * @return \Robo\Task\Vcs\GitStack|\Robo\Collection\CollectionBuilder
      */
     protected function taskGitStack($pathToGit = 'git')
     {
@@ -28,7 +29,7 @@ protected function taskGitStack($pathToGit = 'git')
     /**
      * @param string $pathToHg
      *
-     * @return \Robo\Task\Vcs\HgStack
+     * @return \Robo\Task\Vcs\HgStack|\Robo\Collection\CollectionBuilder
      */
     protected function taskHgStack($pathToHg = 'hg')
     {
diff --git a/vendor/consolidation/robo/src/TaskAccessor.php b/vendor/consolidation/robo/src/TaskAccessor.php
index e65cd3eb36..ac5e9bf23f 100644
--- a/vendor/consolidation/robo/src/TaskAccessor.php
+++ b/vendor/consolidation/robo/src/TaskAccessor.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo;
 
 use Robo\Common\BuilderAwareTrait;
diff --git a/vendor/consolidation/robo/src/TaskInfo.php b/vendor/consolidation/robo/src/TaskInfo.php
index ce59c2d556..05015016fd 100644
--- a/vendor/consolidation/robo/src/TaskInfo.php
+++ b/vendor/consolidation/robo/src/TaskInfo.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo;
 
 class TaskInfo
diff --git a/vendor/consolidation/robo/src/Tasks.php b/vendor/consolidation/robo/src/Tasks.php
index 2822d7d506..14ff0b82ed 100644
--- a/vendor/consolidation/robo/src/Tasks.php
+++ b/vendor/consolidation/robo/src/Tasks.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo;
 
 use Robo\Common\IO;
diff --git a/vendor/consolidation/self-update/VERSION b/vendor/consolidation/self-update/VERSION
index e25d8d9f35..25b6557de3 100644
--- a/vendor/consolidation/self-update/VERSION
+++ b/vendor/consolidation/self-update/VERSION
@@ -1 +1 @@
-1.1.5
+1.1.6-dev
diff --git a/vendor/consolidation/self-update/composer.json b/vendor/consolidation/self-update/composer.json
index 3125a65f60..ccb04cb075 100644
--- a/vendor/consolidation/self-update/composer.json
+++ b/vendor/consolidation/self-update/composer.json
@@ -19,8 +19,8 @@
     },
     "require": {
         "php": ">=5.5.0",
-        "symfony/console": "^2.8|^3|^4",
-        "symfony/filesystem": "^2.5|^3|^4"
+        "symfony/console": "^2.8|^3|^4|^5",
+        "symfony/filesystem": "^2.5|^3|^4|^5"
     },
     "bin": [
         "scripts/release"
@@ -30,10 +30,7 @@
     },
     "config": {
         "optimize-autoloader": true,
-        "sort-packages": true,
-        "platform": {
-            "php": "5.6.3"
-        }
+        "sort-packages": true
     },
     "extra": {
         "branch-alias": {
diff --git a/vendor/consolidation/self-update/composer.lock b/vendor/consolidation/self-update/composer.lock
index af14184c81..c092bd6f23 100644
--- a/vendor/consolidation/self-update/composer.lock
+++ b/vendor/consolidation/self-update/composer.lock
@@ -4,20 +4,20 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "3c87d0a607c776a773e52613a1ae51a9",
+    "content-hash": "52c2d7f576aaa24ebd91400d895ccd5d",
     "packages": [
         {
-            "name": "psr/log",
-            "version": "1.0.2",
+            "name": "psr/container",
+            "version": "1.0.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/php-fig/log.git",
-                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
+                "url": "https://github.com/php-fig/container.git",
+                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
-                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
+                "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
                 "shasum": ""
             },
             "require": {
@@ -31,7 +31,7 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Psr\\Log\\": "Psr/Log/"
+                    "Psr\\Container\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -44,48 +44,57 @@
                     "homepage": "http://www.php-fig.org/"
                 }
             ],
-            "description": "Common interface for logging libraries",
-            "homepage": "https://github.com/php-fig/log",
+            "description": "Common Container Interface (PHP FIG PSR-11)",
+            "homepage": "https://github.com/php-fig/container",
             "keywords": [
-                "log",
-                "psr",
-                "psr-3"
+                "PSR-11",
+                "container",
+                "container-interface",
+                "container-interop",
+                "psr"
             ],
-            "time": "2016-10-10T12:19:37+00:00"
+            "time": "2017-02-14T16:28:37+00:00"
         },
         {
             "name": "symfony/console",
-            "version": "v3.4.14",
+            "version": "v5.0.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "6b217594552b9323bcdcfc14f8a0ce126e84cd73"
+                "reference": "5fa1caadc8cdaa17bcfb25219f3b53fe294a9935"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/6b217594552b9323bcdcfc14f8a0ce126e84cd73",
-                "reference": "6b217594552b9323bcdcfc14f8a0ce126e84cd73",
+                "url": "https://api.github.com/repos/symfony/console/zipball/5fa1caadc8cdaa17bcfb25219f3b53fe294a9935",
+                "reference": "5fa1caadc8cdaa17bcfb25219f3b53fe294a9935",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/debug": "~2.8|~3.0|~4.0",
-                "symfony/polyfill-mbstring": "~1.0"
+                "php": "^7.2.5",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/polyfill-php73": "^1.8",
+                "symfony/service-contracts": "^1.1|^2"
             },
             "conflict": {
-                "symfony/dependency-injection": "<3.4",
-                "symfony/process": "<3.3"
+                "symfony/dependency-injection": "<4.4",
+                "symfony/event-dispatcher": "<4.4",
+                "symfony/lock": "<4.4",
+                "symfony/process": "<4.4"
+            },
+            "provide": {
+                "psr/log-implementation": "1.0"
             },
             "require-dev": {
                 "psr/log": "~1.0",
-                "symfony/config": "~3.3|~4.0",
-                "symfony/dependency-injection": "~3.4|~4.0",
-                "symfony/event-dispatcher": "~2.8|~3.0|~4.0",
-                "symfony/lock": "~3.4|~4.0",
-                "symfony/process": "~3.3|~4.0"
+                "symfony/config": "^4.4|^5.0",
+                "symfony/dependency-injection": "^4.4|^5.0",
+                "symfony/event-dispatcher": "^4.4|^5.0",
+                "symfony/lock": "^4.4|^5.0",
+                "symfony/process": "^4.4|^5.0",
+                "symfony/var-dumper": "^4.4|^5.0"
             },
             "suggest": {
-                "psr/log-implementation": "For using the console logger",
+                "psr/log": "For using the console logger",
                 "symfony/event-dispatcher": "",
                 "symfony/lock": "",
                 "symfony/process": ""
@@ -93,7 +102,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "5.0-dev"
                 }
             },
             "autoload": {
@@ -120,41 +129,35 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "https://symfony.com",
-            "time": "2018-07-26T11:19:56+00:00"
+            "time": "2020-03-30T11:42:42+00:00"
         },
         {
-            "name": "symfony/debug",
-            "version": "v3.4.14",
+            "name": "symfony/filesystem",
+            "version": "v5.0.7",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/debug.git",
-                "reference": "d5a058ff6ecad26b30c1ba452241306ea34c65cc"
+                "url": "https://github.com/symfony/filesystem.git",
+                "reference": "ca3b87dd09fff9b771731637f5379965fbfab420"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/debug/zipball/d5a058ff6ecad26b30c1ba452241306ea34c65cc",
-                "reference": "d5a058ff6ecad26b30c1ba452241306ea34c65cc",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/ca3b87dd09fff9b771731637f5379965fbfab420",
+                "reference": "ca3b87dd09fff9b771731637f5379965fbfab420",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "psr/log": "~1.0"
-            },
-            "conflict": {
-                "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
-            },
-            "require-dev": {
-                "symfony/http-kernel": "~2.8|~3.0|~4.0"
+                "php": "^7.2.5",
+                "symfony/polyfill-ctype": "~1.8"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "5.0-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\Debug\\": ""
+                    "Symfony\\Component\\Filesystem\\": ""
                 },
                 "exclude-from-classmap": [
                     "/Tests/"
@@ -174,40 +177,42 @@
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony Debug Component",
+            "description": "Symfony Filesystem Component",
             "homepage": "https://symfony.com",
-            "time": "2018-07-26T11:19:56+00:00"
+            "time": "2020-03-27T16:56:45+00:00"
         },
         {
-            "name": "symfony/filesystem",
-            "version": "v3.4.14",
+            "name": "symfony/polyfill-ctype",
+            "version": "v1.15.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/filesystem.git",
-                "reference": "a59f917e3c5d82332514cb4538387638f5bde2d6"
+                "url": "https://github.com/symfony/polyfill-ctype.git",
+                "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/a59f917e3c5d82332514cb4538387638f5bde2d6",
-                "reference": "a59f917e3c5d82332514cb4538387638f5bde2d6",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/4719fa9c18b0464d399f1a63bf624b42b6fa8d14",
+                "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/polyfill-ctype": "~1.8"
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "ext-ctype": "For best performance"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "1.15-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\Filesystem\\": ""
+                    "Symfony\\Polyfill\\Ctype\\": ""
                 },
-                "exclude-from-classmap": [
-                    "/Tests/"
+                "files": [
+                    "bootstrap.php"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -216,47 +221,67 @@
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "name": "Gert de Pagter",
+                    "email": "BackEndTea@gmail.com"
                 },
                 {
                     "name": "Symfony Community",
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony Filesystem Component",
+            "description": "Symfony polyfill for ctype functions",
             "homepage": "https://symfony.com",
-            "time": "2018-07-26T11:19:56+00:00"
+            "keywords": [
+                "compatibility",
+                "ctype",
+                "polyfill",
+                "portable"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-02-27T09:26:54+00:00"
         },
         {
-            "name": "symfony/polyfill-ctype",
-            "version": "v1.9.0",
+            "name": "symfony/polyfill-mbstring",
+            "version": "v1.15.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19"
+                "url": "https://github.com/symfony/polyfill-mbstring.git",
+                "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/81ffd3a9c6d707be22e3012b827de1c9775fc5ac",
+                "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3"
             },
             "suggest": {
-                "ext-ctype": "For best performance"
+                "ext-mbstring": "For best performance"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.15-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Polyfill\\Ctype\\": ""
+                    "Symfony\\Polyfill\\Mbstring\\": ""
                 },
                 "files": [
                     "bootstrap.php"
@@ -268,56 +293,71 @@
             ],
             "authors": [
                 {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
                 },
                 {
-                    "name": "Gert de Pagter",
-                    "email": "BackEndTea@gmail.com"
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony polyfill for ctype functions",
+            "description": "Symfony polyfill for the Mbstring extension",
             "homepage": "https://symfony.com",
             "keywords": [
                 "compatibility",
-                "ctype",
+                "mbstring",
                 "polyfill",
-                "portable"
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
             ],
-            "time": "2018-08-06T14:22:27+00:00"
+            "time": "2020-03-09T19:04:49+00:00"
         },
         {
-            "name": "symfony/polyfill-mbstring",
-            "version": "v1.9.0",
+            "name": "symfony/polyfill-php73",
+            "version": "v1.15.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8"
+                "url": "https://github.com/symfony/polyfill-php73.git",
+                "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d0cd638f4634c16d8df4508e847f14e9e43168b8",
-                "reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8",
+                "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7",
+                "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3"
             },
-            "suggest": {
-                "ext-mbstring": "For best performance"
-            },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.15-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Polyfill\\Mbstring\\": ""
+                    "Symfony\\Polyfill\\Php73\\": ""
                 },
                 "files": [
                     "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -334,16 +374,87 @@
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony polyfill for the Mbstring extension",
+            "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
             "homepage": "https://symfony.com",
             "keywords": [
                 "compatibility",
-                "mbstring",
                 "polyfill",
                 "portable",
                 "shim"
             ],
-            "time": "2018-08-06T14:22:27+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-02-27T09:26:54+00:00"
+        },
+        {
+            "name": "symfony/service-contracts",
+            "version": "v2.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/service-contracts.git",
+                "reference": "144c5e51266b281231e947b51223ba14acf1a749"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/144c5e51266b281231e947b51223ba14acf1a749",
+                "reference": "144c5e51266b281231e947b51223ba14acf1a749",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2.5",
+                "psr/container": "^1.0"
+            },
+            "suggest": {
+                "symfony/service-implementation": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\Service\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to writing services",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "time": "2019-11-18T17:27:11+00:00"
         }
     ],
     "packages-dev": [],
@@ -356,7 +467,5 @@
         "php": ">=5.5.0"
     },
     "platform-dev": [],
-    "platform-overrides": {
-        "php": "5.6.3"
-    }
+    "plugin-api-version": "1.1.0"
 }
diff --git a/vendor/consolidation/site-alias/.scenarios.lock/install b/vendor/consolidation/site-alias/.scenarios.lock/install
index 16c69e107c..4d8a777705 100755
--- a/vendor/consolidation/site-alias/.scenarios.lock/install
+++ b/vendor/consolidation/site-alias/.scenarios.lock/install
@@ -4,16 +4,16 @@ SCENARIO=$1
 DEPENDENCIES=${2-install}
 
 # Convert the aliases 'highest', 'lowest' and 'lock' to
-# the corresponding composer command to run.
+# the corresponding composer update command to run.
 case $DEPENDENCIES in
   highest)
-    DEPENDENCIES=update
+    UPDATE_COMMAND=update
     ;;
   lowest)
-    DEPENDENCIES='update --prefer-lowest'
+    UPDATE_COMMAND='update --prefer-lowest'
     ;;
   lock|default|"")
-    DEPENDENCIES=install
+    UPDATE_COMMAND=''
     ;;
 esac
 
@@ -48,7 +48,11 @@ echo
 set -ex
 
 composer -n validate --working-dir=$dir --no-check-all --ansi
-composer -n --working-dir=$dir ${DEPENDENCIES} --prefer-dist --no-scripts
+
+if [ ! -z "$UPDATE_COMMAND" ] ; then
+  composer -n --working-dir=$dir ${UPDATE_COMMAND} --prefer-dist --no-scripts
+fi
+composer -n --working-dir=$dir install --prefer-dist
 
 # If called from a CI context, print out some extra information about
 # what we just installed.
diff --git a/vendor/consolidation/site-alias/.scenarios.lock/phpunit5/composer.json b/vendor/consolidation/site-alias/.scenarios.lock/phpunit5/composer.json
index 9df0d140f8..bc673b4fee 100644
--- a/vendor/consolidation/site-alias/.scenarios.lock/phpunit5/composer.json
+++ b/vendor/consolidation/site-alias/.scenarios.lock/phpunit5/composer.json
@@ -24,13 +24,12 @@
     },
     "require": {
         "php": ">=5.5.0",
-        "consolidation/config": "^1.2.1"
+        "consolidation/config": "^1.2.1|^2"
     },
     "require-dev": {
         "phpunit/phpunit": "^5.7.27",
-        "symfony/yaml": "~2.3|^3",
-        "consolidation/Robo": "^1.2.3",
-        "symfony/console": "^2.8|^3|^4",
+        "symfony/yaml": "~2.3|^3|^4.4|^5",
+        "consolidation/robo": "^1.2.3|^2",
         "knplabs/github-api": "^2.7",
         "php-http/guzzle6-adapter": "^1.1",
         "g1a/composer-test-scenarios": "^3",
diff --git a/vendor/consolidation/site-alias/.scenarios.lock/phpunit5/composer.lock b/vendor/consolidation/site-alias/.scenarios.lock/phpunit5/composer.lock
index a42788f476..096f6338d4 100644
--- a/vendor/consolidation/site-alias/.scenarios.lock/phpunit5/composer.lock
+++ b/vendor/consolidation/site-alias/.scenarios.lock/phpunit5/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "d7b07f5eeac1fc1152ef12b7f00abfdb",
+    "content-hash": "06283d1fe5e0c31a2d5ab2fa7dbf8ff0",
     "packages": [
         {
             "name": "consolidation/config",
@@ -197,16 +197,16 @@
     "packages-dev": [
         {
             "name": "clue/stream-filter",
-            "version": "v1.4.0",
+            "version": "v1.4.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/clue/php-stream-filter.git",
-                "reference": "d80fdee9b3a7e0d16fc330a22f41f3ad0eeb09d0"
+                "reference": "5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/clue/php-stream-filter/zipball/d80fdee9b3a7e0d16fc330a22f41f3ad0eeb09d0",
-                "reference": "d80fdee9b3a7e0d16fc330a22f41f3ad0eeb09d0",
+                "url": "https://api.github.com/repos/clue/php-stream-filter/zipball/5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71",
+                "reference": "5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71",
                 "shasum": ""
             },
             "require": {
@@ -221,7 +221,7 @@
                     "Clue\\StreamFilter\\": "src/"
                 },
                 "files": [
-                    "src/functions.php"
+                    "src/functions_include.php"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -245,7 +245,7 @@
                 "stream_filter_append",
                 "stream_filter_register"
             ],
-            "time": "2017-08-18T09:54:01+00:00"
+            "time": "2019-04-09T12:31:48+00:00"
         },
         {
             "name": "consolidation/annotated-command",
@@ -435,16 +435,16 @@
         },
         {
             "name": "consolidation/output-formatters",
-            "version": "3.4.0",
+            "version": "3.5.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/output-formatters.git",
-                "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19"
+                "reference": "99ec998ffb697e0eada5aacf81feebfb13023605"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/a942680232094c4a5b21c0b7e54c20cce623ae19",
-                "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19",
+                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/99ec998ffb697e0eada5aacf81feebfb13023605",
+                "reference": "99ec998ffb697e0eada5aacf81feebfb13023605",
                 "shasum": ""
             },
             "require": {
@@ -454,11 +454,10 @@
                 "symfony/finder": "^2.5|^3|^4"
             },
             "require-dev": {
-                "g1a/composer-test-scenarios": "^2",
+                "g1a/composer-test-scenarios": "^3",
+                "php-coveralls/php-coveralls": "^1",
                 "phpunit/phpunit": "^5.7.27",
-                "satooshi/php-coveralls": "^2",
                 "squizlabs/php_codesniffer": "^2.7",
-                "symfony/console": "3.2.3",
                 "symfony/var-dumper": "^2.8|^3|^4",
                 "victorjonsson/markdowndocs": "^1.3"
             },
@@ -467,6 +466,52 @@
             },
             "type": "library",
             "extra": {
+                "scenarios": {
+                    "symfony4": {
+                        "require": {
+                            "symfony/console": "^4.0"
+                        },
+                        "require-dev": {
+                            "phpunit/phpunit": "^6"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.1.3"
+                            }
+                        }
+                    },
+                    "symfony3": {
+                        "require": {
+                            "symfony/console": "^3.4",
+                            "symfony/finder": "^3.4",
+                            "symfony/var-dumper": "^3.4"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "5.6.32"
+                            }
+                        }
+                    },
+                    "symfony2": {
+                        "require": {
+                            "symfony/console": "^2.8"
+                        },
+                        "require-dev": {
+                            "phpunit/phpunit": "^4.8.36"
+                        },
+                        "remove": [
+                            "php-coveralls/php-coveralls"
+                        ],
+                        "config": {
+                            "platform": {
+                                "php": "5.4.8"
+                            }
+                        },
+                        "scenario-options": {
+                            "create-lockfile": "false"
+                        }
+                    }
+                },
                 "branch-alias": {
                     "dev-master": "3.x-dev"
                 }
@@ -487,30 +532,30 @@
                 }
             ],
             "description": "Format text by applying transformations provided by plug-in formatters.",
-            "time": "2018-10-19T22:35:38+00:00"
+            "time": "2019-05-30T23:16:01+00:00"
         },
         {
             "name": "consolidation/robo",
-            "version": "1.4.6",
+            "version": "1.4.12",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/Robo.git",
-                "reference": "d4805a1abbc730e9a6d64ede2eba56f91a2b4eb3"
+                "reference": "eb45606f498b3426b9a98b7c85e300666a968e51"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/Robo/zipball/d4805a1abbc730e9a6d64ede2eba56f91a2b4eb3",
-                "reference": "d4805a1abbc730e9a6d64ede2eba56f91a2b4eb3",
+                "url": "https://api.github.com/repos/consolidation/Robo/zipball/eb45606f498b3426b9a98b7c85e300666a968e51",
+                "reference": "eb45606f498b3426b9a98b7c85e300666a968e51",
                 "shasum": ""
             },
             "require": {
-                "consolidation/annotated-command": "^2.10.2",
-                "consolidation/config": "^1.0.10",
-                "consolidation/log": "~1",
-                "consolidation/output-formatters": "^3.1.13",
-                "consolidation/self-update": "^1",
-                "grasmash/yaml-expander": "^1.3",
-                "league/container": "^2.2",
+                "consolidation/annotated-command": "^2.11.0|^4.1",
+                "consolidation/config": "^1.2.1",
+                "consolidation/log": "^1.1.1|^2",
+                "consolidation/output-formatters": "^3.1.13|^4.1",
+                "consolidation/self-update": "^1.1.5",
+                "grasmash/yaml-expander": "^1.4",
+                "league/container": "^2.4.1",
                 "php": ">=5.5.0",
                 "symfony/console": "^2.8|^3|^4",
                 "symfony/event-dispatcher": "^2.5|^3|^4",
@@ -522,19 +567,13 @@
                 "codegyre/robo": "< 1.0"
             },
             "require-dev": {
-                "codeception/aspect-mock": "^1|^2.1.1",
-                "codeception/base": "^2.3.7",
-                "codeception/verify": "^0.3.2",
                 "g1a/composer-test-scenarios": "^3",
-                "goaop/framework": "~2.1.2",
-                "goaop/parser-reflection": "^1.1.0",
                 "natxet/cssmin": "3.0.4",
-                "nikic/php-parser": "^3.1.5",
-                "patchwork/jsqueeze": "~2",
+                "patchwork/jsqueeze": "^2",
                 "pear/archive_tar": "^1.4.4",
                 "php-coveralls/php-coveralls": "^1",
-                "phpunit/php-code-coverage": "~2|~4",
-                "squizlabs/php_codesniffer": "^2.8"
+                "phpunit/phpunit": "^5.7.27",
+                "squizlabs/php_codesniffer": "^3"
             },
             "suggest": {
                 "henrikbjorn/lurker": "For monitoring filesystem changes in taskWatch",
@@ -562,8 +601,11 @@
                         "require": {
                             "symfony/console": "^2.8"
                         },
+                        "require-dev": {
+                            "phpunit/phpunit": "^4.8.36"
+                        },
                         "remove": [
-                            "goaop/framework"
+                            "php-coveralls/php-coveralls"
                         ],
                         "config": {
                             "platform": {
@@ -576,7 +618,7 @@
                     }
                 },
                 "branch-alias": {
-                    "dev-master": "2.x-dev"
+                    "dev-master": "1.x-dev"
                 }
             },
             "autoload": {
@@ -595,26 +637,26 @@
                 }
             ],
             "description": "Modern task runner",
-            "time": "2019-02-17T05:32:27+00:00"
+            "time": "2020-02-18T17:31:26+00:00"
         },
         {
             "name": "consolidation/self-update",
-            "version": "1.1.5",
+            "version": "1.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/self-update.git",
-                "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54"
+                "reference": "dba6b2c0708f20fa3ba8008a2353b637578849b4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/self-update/zipball/a1c273b14ce334789825a09d06d4c87c0a02ad54",
-                "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54",
+                "url": "https://api.github.com/repos/consolidation/self-update/zipball/dba6b2c0708f20fa3ba8008a2353b637578849b4",
+                "reference": "dba6b2c0708f20fa3ba8008a2353b637578849b4",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.5.0",
-                "symfony/console": "^2.8|^3|^4",
-                "symfony/filesystem": "^2.5|^3|^4"
+                "symfony/console": "^2.8|^3|^4|^5",
+                "symfony/filesystem": "^2.5|^3|^4|^5"
             },
             "bin": [
                 "scripts/release"
@@ -635,17 +677,17 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Greg Anderson",
-                    "email": "greg.1.anderson@greenknowe.org"
-                },
                 {
                     "name": "Alexander Menk",
                     "email": "menk@mestrona.net"
+                },
+                {
+                    "name": "Greg Anderson",
+                    "email": "greg.1.anderson@greenknowe.org"
                 }
             ],
             "description": "Provides a self:update command for Symfony Console applications.",
-            "time": "2018-10-28T01:52:03+00:00"
+            "time": "2020-04-13T02:49:20+00:00"
         },
         {
             "name": "container-interop/container-interop",
@@ -676,6 +718,7 @@
             ],
             "description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
             "homepage": "https://github.com/container-interop/container-interop",
+            "abandoned": "psr/container",
             "time": "2017-02-14T19:40:03+00:00"
         },
         {
@@ -734,16 +777,16 @@
         },
         {
             "name": "g1a/composer-test-scenarios",
-            "version": "3.0.2",
+            "version": "3.0.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/g1a/composer-test-scenarios.git",
-                "reference": "28f932580981e912ab8f01d15788f1dee06550c8"
+                "reference": "78225430d4a5caf8e06b87d04149f8a9ace9368c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/28f932580981e912ab8f01d15788f1dee06550c8",
-                "reference": "28f932580981e912ab8f01d15788f1dee06550c8",
+                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/78225430d4a5caf8e06b87d04149f8a9ace9368c",
+                "reference": "78225430d4a5caf8e06b87d04149f8a9ace9368c",
                 "shasum": ""
             },
             "require": {
@@ -782,7 +825,7 @@
                 }
             ],
             "description": "Useful scripts for testing multiple sets of Composer dependencies.",
-            "time": "2019-02-11T20:22:44+00:00"
+            "time": "2019-09-13T01:24:52+00:00"
         },
         {
             "name": "grasmash/yaml-expander",
@@ -834,27 +877,29 @@
         },
         {
             "name": "guzzlehttp/guzzle",
-            "version": "6.3.3",
+            "version": "6.5.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/guzzle.git",
-                "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba"
+                "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba",
-                "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a4a1b6930528a8f7ee03518e6442ec7a44155d9d",
+                "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d",
                 "shasum": ""
             },
             "require": {
+                "ext-json": "*",
                 "guzzlehttp/promises": "^1.0",
-                "guzzlehttp/psr7": "^1.4",
-                "php": ">=5.5"
+                "guzzlehttp/psr7": "^1.6.1",
+                "php": ">=5.5",
+                "symfony/polyfill-intl-idn": "1.17.0"
             },
             "require-dev": {
                 "ext-curl": "*",
                 "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
-                "psr/log": "^1.0"
+                "psr/log": "^1.1"
             },
             "suggest": {
                 "psr/log": "Required for using the Log middleware"
@@ -862,16 +907,16 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "6.3-dev"
+                    "dev-master": "6.5-dev"
                 }
             },
             "autoload": {
-                "files": [
-                    "src/functions_include.php"
-                ],
                 "psr-4": {
                     "GuzzleHttp\\": "src/"
-                }
+                },
+                "files": [
+                    "src/functions_include.php"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -895,7 +940,7 @@
                 "rest",
                 "web service"
             ],
-            "time": "2018-04-22T15:46:56+00:00"
+            "time": "2020-05-25T19:35:05+00:00"
         },
         {
             "name": "guzzlehttp/promises",
@@ -950,33 +995,37 @@
         },
         {
             "name": "guzzlehttp/psr7",
-            "version": "1.5.2",
+            "version": "1.6.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/psr7.git",
-                "reference": "9f83dded91781a01c63574e387eaa769be769115"
+                "reference": "239400de7a173fe9901b9ac7c06497751f00727a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115",
-                "reference": "9f83dded91781a01c63574e387eaa769be769115",
+                "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a",
+                "reference": "239400de7a173fe9901b9ac7c06497751f00727a",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.4.0",
                 "psr/http-message": "~1.0",
-                "ralouphie/getallheaders": "^2.0.5"
+                "ralouphie/getallheaders": "^2.0.5 || ^3.0.0"
             },
             "provide": {
                 "psr/http-message-implementation": "1.0"
             },
             "require-dev": {
+                "ext-zlib": "*",
                 "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
             },
+            "suggest": {
+                "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses"
+            },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.5-dev"
+                    "dev-master": "1.6-dev"
                 }
             },
             "autoload": {
@@ -1013,7 +1062,7 @@
                 "uri",
                 "url"
             ],
-            "time": "2018-12-04T20:46:45+00:00"
+            "time": "2019-07-01T23:21:34+00:00"
         },
         {
             "name": "knplabs/github-api",
@@ -1250,16 +1299,16 @@
         },
         {
             "name": "php-http/client-common",
-            "version": "1.9.1",
+            "version": "1.10.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-http/client-common.git",
-                "reference": "0e156a12cc3e46f590c73bf57592a2252fc3dc48"
+                "reference": "c0390ae3c8f2ae9d50901feef0127fb9e396f6b4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-http/client-common/zipball/0e156a12cc3e46f590c73bf57592a2252fc3dc48",
-                "reference": "0e156a12cc3e46f590c73bf57592a2252fc3dc48",
+                "url": "https://api.github.com/repos/php-http/client-common/zipball/c0390ae3c8f2ae9d50901feef0127fb9e396f6b4",
+                "reference": "c0390ae3c8f2ae9d50901feef0127fb9e396f6b4",
                 "shasum": ""
             },
             "require": {
@@ -1267,7 +1316,7 @@
                 "php-http/httplug": "^1.1",
                 "php-http/message": "^1.6",
                 "php-http/message-factory": "^1.0",
-                "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0"
+                "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0 || ^5.0"
             },
             "require-dev": {
                 "guzzlehttp/psr7": "^1.4",
@@ -1281,7 +1330,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9.x-dev"
+                    "dev-master": "1.10.x-dev"
                 }
             },
             "autoload": {
@@ -1307,7 +1356,7 @@
                 "http",
                 "httplug"
             ],
-            "time": "2019-02-02T07:03:15+00:00"
+            "time": "2019-11-18T08:54:36+00:00"
         },
         {
             "name": "php-http/discovery",
@@ -1809,38 +1858,38 @@
         },
         {
             "name": "phpspec/prophecy",
-            "version": "1.8.0",
+            "version": "v1.10.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06"
+                "reference": "451c3cd1418cf640de218914901e51b064abb093"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093",
                 "shasum": ""
             },
             "require": {
                 "doctrine/instantiator": "^1.0.2",
                 "php": "^5.3|^7.0",
-                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
-                "sebastian/comparator": "^1.1|^2.0|^3.0",
-                "sebastian/recursion-context": "^1.0|^2.0|^3.0"
+                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+                "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+                "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
             },
             "require-dev": {
-                "phpspec/phpspec": "^2.5|^3.2",
+                "phpspec/phpspec": "^2.5 || ^3.2",
                 "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.8.x-dev"
+                    "dev-master": "1.10.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Prophecy\\": "src/"
+                "psr-4": {
+                    "Prophecy\\": "src/Prophecy"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1868,7 +1917,7 @@
                 "spy",
                 "stub"
             ],
-            "time": "2018-08-05T17:53:17+00:00"
+            "time": "2020-03-05T15:02:03+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",
@@ -2408,16 +2457,16 @@
         },
         {
             "name": "psr/log",
-            "version": "1.1.0",
+            "version": "1.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-fig/log.git",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
                 "shasum": ""
             },
             "require": {
@@ -2426,7 +2475,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.1.x-dev"
                 }
             },
             "autoload": {
@@ -2451,28 +2500,28 @@
                 "psr",
                 "psr-3"
             ],
-            "time": "2018-11-20T15:27:04+00:00"
+            "time": "2020-03-23T09:12:05+00:00"
         },
         {
             "name": "ralouphie/getallheaders",
-            "version": "2.0.5",
+            "version": "3.0.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/ralouphie/getallheaders.git",
-                "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa"
+                "reference": "120b605dfeb996808c31b6477290a714d356e822"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/5601c8a83fbba7ef674a7369456d12f1e0d0eafa",
-                "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa",
+                "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
+                "reference": "120b605dfeb996808c31b6477290a714d356e822",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3"
+                "php": ">=5.6"
             },
             "require-dev": {
-                "phpunit/phpunit": "~3.7.0",
-                "satooshi/php-coveralls": ">=1.0"
+                "php-coveralls/php-coveralls": "^2.1",
+                "phpunit/phpunit": "^5 || ^6.5"
             },
             "type": "library",
             "autoload": {
@@ -2491,7 +2540,7 @@
                 }
             ],
             "description": "A polyfill for getallheaders.",
-            "time": "2016-02-11T07:05:27+00:00"
+            "time": "2019-03-08T08:55:37+00:00"
         },
         {
             "name": "sebastian/code-unit-reverse-lookup",
@@ -3086,16 +3135,16 @@
         },
         {
             "name": "symfony/console",
-            "version": "v3.4.23",
+            "version": "v3.4.40",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "71ce77f37af0c5ffb9590e43cc4f70e426945c5e"
+                "reference": "bf60d5e606cd595391c5f82bf6b570d9573fa120"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/71ce77f37af0c5ffb9590e43cc4f70e426945c5e",
-                "reference": "71ce77f37af0c5ffb9590e43cc4f70e426945c5e",
+                "url": "https://api.github.com/repos/symfony/console/zipball/bf60d5e606cd595391c5f82bf6b570d9573fa120",
+                "reference": "bf60d5e606cd595391c5f82bf6b570d9573fa120",
                 "shasum": ""
             },
             "require": {
@@ -3154,20 +3203,20 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "https://symfony.com",
-            "time": "2019-02-23T15:06:07+00:00"
+            "time": "2020-03-27T17:07:22+00:00"
         },
         {
             "name": "symfony/debug",
-            "version": "v3.4.23",
+            "version": "v3.4.40",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/debug.git",
-                "reference": "8d8a9e877b3fcdc50ddecf8dcea146059753f782"
+                "reference": "ce9f3b5e8e1c50f849fded59b3a1b6bc3562ec29"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/debug/zipball/8d8a9e877b3fcdc50ddecf8dcea146059753f782",
-                "reference": "8d8a9e877b3fcdc50ddecf8dcea146059753f782",
+                "url": "https://api.github.com/repos/symfony/debug/zipball/ce9f3b5e8e1c50f849fded59b3a1b6bc3562ec29",
+                "reference": "ce9f3b5e8e1c50f849fded59b3a1b6bc3562ec29",
                 "shasum": ""
             },
             "require": {
@@ -3210,20 +3259,20 @@
             ],
             "description": "Symfony Debug Component",
             "homepage": "https://symfony.com",
-            "time": "2019-02-24T15:45:11+00:00"
+            "time": "2020-03-23T10:22:40+00:00"
         },
         {
             "name": "symfony/event-dispatcher",
-            "version": "v3.4.23",
+            "version": "v3.4.40",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "ec625e2fff7f584eeb91754821807317b2e79236"
+                "reference": "9d4e22943b73acc1ba50595b7de1a01fe9dbad48"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ec625e2fff7f584eeb91754821807317b2e79236",
-                "reference": "ec625e2fff7f584eeb91754821807317b2e79236",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9d4e22943b73acc1ba50595b7de1a01fe9dbad48",
+                "reference": "9d4e22943b73acc1ba50595b7de1a01fe9dbad48",
                 "shasum": ""
             },
             "require": {
@@ -3273,20 +3322,20 @@
             ],
             "description": "Symfony EventDispatcher Component",
             "homepage": "https://symfony.com",
-            "time": "2019-02-23T15:06:07+00:00"
+            "time": "2020-03-15T09:38:08+00:00"
         },
         {
             "name": "symfony/filesystem",
-            "version": "v3.4.23",
+            "version": "v3.4.40",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/filesystem.git",
-                "reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb"
+                "reference": "78a93e5606a19d0fb490afc3c4a9b7ecd86e1515"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/acf99758b1df8e9295e6b85aa69f294565c9fedb",
-                "reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/78a93e5606a19d0fb490afc3c4a9b7ecd86e1515",
+                "reference": "78a93e5606a19d0fb490afc3c4a9b7ecd86e1515",
                 "shasum": ""
             },
             "require": {
@@ -3323,20 +3372,20 @@
             ],
             "description": "Symfony Filesystem Component",
             "homepage": "https://symfony.com",
-            "time": "2019-02-04T21:34:32+00:00"
+            "time": "2020-04-12T16:54:01+00:00"
         },
         {
             "name": "symfony/finder",
-            "version": "v3.4.23",
+            "version": "v3.4.40",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "fcdde4aa38f48190ce70d782c166f23930084f9b"
+                "reference": "5ec813ccafa8164ef21757e8c725d3a57da59200"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/fcdde4aa38f48190ce70d782c166f23930084f9b",
-                "reference": "fcdde4aa38f48190ce70d782c166f23930084f9b",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/5ec813ccafa8164ef21757e8c725d3a57da59200",
+                "reference": "5ec813ccafa8164ef21757e8c725d3a57da59200",
                 "shasum": ""
             },
             "require": {
@@ -3372,20 +3421,20 @@
             ],
             "description": "Symfony Finder Component",
             "homepage": "https://symfony.com",
-            "time": "2019-02-22T14:44:53+00:00"
+            "time": "2020-02-14T07:34:21+00:00"
         },
         {
             "name": "symfony/options-resolver",
-            "version": "v3.4.23",
+            "version": "v3.4.40",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/options-resolver.git",
-                "reference": "926e3b797e6bb66c0e4d7da7eff3a174f7378bcf"
+                "reference": "79701529391f802604ec92080364d617f029974b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/options-resolver/zipball/926e3b797e6bb66c0e4d7da7eff3a174f7378bcf",
-                "reference": "926e3b797e6bb66c0e4d7da7eff3a174f7378bcf",
+                "url": "https://api.github.com/repos/symfony/options-resolver/zipball/79701529391f802604ec92080364d617f029974b",
+                "reference": "79701529391f802604ec92080364d617f029974b",
                 "shasum": ""
             },
             "require": {
@@ -3426,20 +3475,20 @@
                 "configuration",
                 "options"
             ],
-            "time": "2019-02-23T15:06:07+00:00"
+            "time": "2020-04-06T08:30:32+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
-            "version": "v1.10.0",
+            "version": "v1.17.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19"
+                "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e94c8b1bbe2bc77507a1056cdb06451c75b427f9",
+                "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9",
                 "shasum": ""
             },
             "require": {
@@ -3451,7 +3500,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.17-dev"
                 }
             },
             "autoload": {
@@ -3467,13 +3516,13 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                },
                 {
                     "name": "Gert de Pagter",
                     "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony polyfill for ctype functions",
@@ -3484,20 +3533,82 @@
                 "polyfill",
                 "portable"
             ],
-            "time": "2018-08-06T14:22:27+00:00"
+            "time": "2020-05-12T16:14:59+00:00"
+        },
+        {
+            "name": "symfony/polyfill-intl-idn",
+            "version": "v1.17.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-intl-idn.git",
+                "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3bff59ea7047e925be6b7f2059d60af31bb46d6a",
+                "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "symfony/polyfill-mbstring": "^1.3",
+                "symfony/polyfill-php72": "^1.10"
+            },
+            "suggest": {
+                "ext-intl": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.17-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Intl\\Idn\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Laurent Bassin",
+                    "email": "laurent@bassin.info"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "idn",
+                "intl",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "time": "2020-05-12T16:47:27+00:00"
         },
         {
             "name": "symfony/polyfill-mbstring",
-            "version": "v1.10.0",
+            "version": "v1.17.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494"
+                "reference": "fa79b11539418b02fc5e1897267673ba2c19419c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c",
+                "reference": "fa79b11539418b02fc5e1897267673ba2c19419c",
                 "shasum": ""
             },
             "require": {
@@ -3509,7 +3620,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.17-dev"
                 }
             },
             "autoload": {
@@ -3543,20 +3654,75 @@
                 "portable",
                 "shim"
             ],
-            "time": "2018-09-21T13:07:52+00:00"
+            "time": "2020-05-12T16:47:27+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php72",
+            "version": "v1.17.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php72.git",
+                "reference": "f048e612a3905f34931127360bdd2def19a5e582"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582",
+                "reference": "f048e612a3905f34931127360bdd2def19a5e582",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.17-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php72\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "time": "2020-05-12T16:47:27+00:00"
         },
         {
             "name": "symfony/process",
-            "version": "v3.4.23",
+            "version": "v3.4.40",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/process.git",
-                "reference": "009f8dda80930e89e8344a4e310b08f9ff07dd2e"
+                "reference": "f5104c9dcbc2cfad45d01d5150c1da9836967271"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/009f8dda80930e89e8344a4e310b08f9ff07dd2e",
-                "reference": "009f8dda80930e89e8344a4e310b08f9ff07dd2e",
+                "url": "https://api.github.com/repos/symfony/process/zipball/f5104c9dcbc2cfad45d01d5150c1da9836967271",
+                "reference": "f5104c9dcbc2cfad45d01d5150c1da9836967271",
                 "shasum": ""
             },
             "require": {
@@ -3592,20 +3758,20 @@
             ],
             "description": "Symfony Process Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-16T13:27:11+00:00"
+            "time": "2020-04-12T14:33:46+00:00"
         },
         {
             "name": "symfony/yaml",
-            "version": "v3.4.23",
+            "version": "v3.4.40",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/yaml.git",
-                "reference": "57f1ce82c997f5a8701b89ef970e36bb657fd09c"
+                "reference": "8fef49ac1357f4e05c997a1f139467ccb186bffa"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/57f1ce82c997f5a8701b89ef970e36bb657fd09c",
-                "reference": "57f1ce82c997f5a8701b89ef970e36bb657fd09c",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/8fef49ac1357f4e05c997a1f139467ccb186bffa",
+                "reference": "8fef49ac1357f4e05c997a1f139467ccb186bffa",
                 "shasum": ""
             },
             "require": {
@@ -3651,36 +3817,33 @@
             ],
             "description": "Symfony Yaml Component",
             "homepage": "https://symfony.com",
-            "time": "2019-02-23T15:06:07+00:00"
+            "time": "2020-04-24T10:16:04+00:00"
         },
         {
             "name": "webmozart/assert",
-            "version": "1.4.0",
+            "version": "1.8.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/webmozart/assert.git",
-                "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9"
+                "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9",
-                "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9",
+                "url": "https://api.github.com/repos/webmozart/assert/zipball/ab2cb0b3b559010b75981b1bdce728da3ee90ad6",
+                "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6",
                 "shasum": ""
             },
             "require": {
                 "php": "^5.3.3 || ^7.0",
                 "symfony/polyfill-ctype": "^1.8"
             },
+            "conflict": {
+                "vimeo/psalm": "<3.9.1"
+            },
             "require-dev": {
-                "phpunit/phpunit": "^4.6",
-                "sebastian/version": "^1.0.1"
+                "phpunit/phpunit": "^4.8.36 || ^7.5.13"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
                     "Webmozart\\Assert\\": "src/"
@@ -3702,7 +3865,7 @@
                 "check",
                 "validate"
             ],
-            "time": "2018-12-25T11:19:39+00:00"
+            "time": "2020-04-18T12:12:48+00:00"
         }
     ],
     "aliases": [],
diff --git a/vendor/consolidation/site-alias/.travis.yml b/vendor/consolidation/site-alias/.travis.yml
index d9203d63e1..597af7fa3a 100644
--- a/vendor/consolidation/site-alias/.travis.yml
+++ b/vendor/consolidation/site-alias/.travis.yml
@@ -7,11 +7,15 @@ branches:
 matrix:
   fast_finish: true
   include:
-  - php: 7.2
+  - php: 7.4
     env: DEPENCENCIES=highest
+  - php: 7.4
+  - php: 7.3
   - php: 7.2
   - php: 7.1
+    env: SCENARIO=phpunit5
   - php: 7.0.11
+    env: SCENARIO=phpunit5
   - php: 5.6
     env: SCENARIO=phpunit5
   - php: 5.6
diff --git a/vendor/consolidation/site-alias/CHANGELOG.md b/vendor/consolidation/site-alias/CHANGELOG.md
index 66203faddf..bffb89ef06 100644
--- a/vendor/consolidation/site-alias/CHANGELOG.md
+++ b/vendor/consolidation/site-alias/CHANGELOG.md
@@ -1,5 +1,10 @@
 # Changelog
 
+### 3.0.1 2020-05-27
+
+* Symfony 5 support
+* Remove 'experimental' designation from wildcard environments.
+
 ### 3.0.0 2019-03-12
 
 * Make self.site.yml more discoverable. (#33)
diff --git a/vendor/consolidation/site-alias/LICENSE b/vendor/consolidation/site-alias/LICENSE
index 3565b38f75..a342cabe78 100644
--- a/vendor/consolidation/site-alias/LICENSE
+++ b/vendor/consolidation/site-alias/LICENSE
@@ -1,6 +1,6 @@
 The MIT License (MIT)
 
-Copyright (c) 2018-2019 Greg Anderson
+Copyright (c) 2018-2020 Greg Anderson
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of
 this software and associated documentation files (the "Software"), to deal in
diff --git a/vendor/consolidation/site-alias/README.md b/vendor/consolidation/site-alias/README.md
index 55dee4d287..c5ce14c63d 100644
--- a/vendor/consolidation/site-alias/README.md
+++ b/vendor/consolidation/site-alias/README.md
@@ -63,7 +63,7 @@ dev:
   user: www-data
 ```
 
-### Wildcard environments (Experimental)
+### Wildcard environments
 
 It is also possible to define "wildcard" environments that will match any provided environment name. This is only possible to do in instances where the contents of the wildcard aliases are all the same, except for places where the environment name appears. To substitute the name of the environment into a wildcard domain, use the variable replacement string `${env-name}`. For example, a wildcard alias that will match any multisite in a Drupal site might look something like the following example:
 ```
diff --git a/vendor/consolidation/site-alias/VERSION b/vendor/consolidation/site-alias/VERSION
index 56fea8a08d..13d683ccbf 100644
--- a/vendor/consolidation/site-alias/VERSION
+++ b/vendor/consolidation/site-alias/VERSION
@@ -1 +1 @@
-3.0.0
\ No newline at end of file
+3.0.1
\ No newline at end of file
diff --git a/vendor/consolidation/site-alias/appveyor.yml b/vendor/consolidation/site-alias/appveyor.yml
index 0483b24f86..65a69cc66d 100644
--- a/vendor/consolidation/site-alias/appveyor.yml
+++ b/vendor/consolidation/site-alias/appveyor.yml
@@ -26,7 +26,7 @@ install:
   - SET PATH=C:\Program Files\MySql\MySQL Server 5.7\bin\;%PATH%
   #Install PHP per https://blog.wyrihaximus.net/2016/11/running-php-unit-tests-on-windows-using-appveyor-and-chocolatey/
   - ps: appveyor-retry cinst --ignore-checksums -y php --version ((choco search php --exact --all-versions -r | select-string -pattern $Env:php_ver_target | Select-Object -first 1) -replace '[php|]','')
-  - cd c:\tools\php70
+  - cd c:\tools\php74
   - copy php.ini-production php.ini
 
   - echo extension_dir=ext >> php.ini
@@ -43,7 +43,7 @@ install:
   - echo extension=php_pdo_sqlite.dll >> php.ini
   - echo extension=php_pgsql.dll >> php.ini
   - echo extension=php_gd2.dll >> php.ini
-  - SET PATH=C:\tools\php70;%PATH%
+  - SET PATH=C:\tools\php74;%PATH%
   #Install Composer
   - cd %APPVEYOR_BUILD_FOLDER%
   #- appveyor DownloadFile https://getcomposer.org/composer.phar
@@ -60,4 +60,4 @@ test_script:
 # environment variables
 environment:
   global:
-      php_ver_target: 7.0
+      php_ver_target: 7.4
diff --git a/vendor/consolidation/site-alias/composer.json b/vendor/consolidation/site-alias/composer.json
index f06b866ada..6f07d171ab 100644
--- a/vendor/consolidation/site-alias/composer.json
+++ b/vendor/consolidation/site-alias/composer.json
@@ -24,17 +24,16 @@
     },
     "require": {
         "php": ">=5.5.0",
-        "consolidation/config": "^1.2.1"
+        "consolidation/config": "^1.2.1|^2"
     },
     "require-dev": {
-        "symfony/yaml": "~2.3|^3",
-        "consolidation/Robo": "^1.2.3",
-        "symfony/console": "^2.8|^3|^4",
+        "symfony/yaml": "~2.3|^3|^4.4|^5",
+        "consolidation/robo": "^1.2.3|^2",
         "knplabs/github-api": "^2.7",
         "php-http/guzzle6-adapter": "^1.1",
         "phpunit/phpunit": "^6",
         "g1a/composer-test-scenarios": "^3",
-        "php-coveralls/php-coveralls": "^1",
+        "php-coveralls/php-coveralls": "^2.2",
         "squizlabs/php_codesniffer": "^2.8"
     },
     "scripts": {
@@ -63,7 +62,7 @@
         "optimize-autoloader": true,
         "sort-packages": true,
         "platform": {
-            "php": "7.0.8"
+            "php": "7.2.28"
         }
     },
     "extra": {
diff --git a/vendor/consolidation/site-alias/composer.lock b/vendor/consolidation/site-alias/composer.lock
index a890357107..dcd2243d4d 100644
--- a/vendor/consolidation/site-alias/composer.lock
+++ b/vendor/consolidation/site-alias/composer.lock
@@ -4,34 +4,35 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "a8b7be6cbb24c26532b63db0ae0c3e39",
+    "content-hash": "644a67af42ce50b3a579fd1ac507163e",
     "packages": [
         {
             "name": "consolidation/config",
-            "version": "1.2.1",
+            "version": "2.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/config.git",
-                "reference": "cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1"
+                "reference": "9842670aad3406dbc8df3069fd680a9f8cd6edd7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/config/zipball/cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1",
-                "reference": "cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1",
+                "url": "https://api.github.com/repos/consolidation/config/zipball/9842670aad3406dbc8df3069fd680a9f8cd6edd7",
+                "reference": "9842670aad3406dbc8df3069fd680a9f8cd6edd7",
                 "shasum": ""
             },
             "require": {
                 "dflydev/dot-access-data": "^1.1.0",
                 "grasmash/expander": "^1",
-                "php": ">=5.4.0"
+                "php": ">=7.1.3"
             },
             "require-dev": {
                 "g1a/composer-test-scenarios": "^3",
-                "php-coveralls/php-coveralls": "^1",
-                "phpunit/phpunit": "^5",
-                "squizlabs/php_codesniffer": "2.*",
-                "symfony/console": "^2.5|^3|^4",
-                "symfony/yaml": "^2.8.11|^3|^4"
+                "php-coveralls/php-coveralls": "^2.2",
+                "phpunit/phpunit": "^6",
+                "squizlabs/php_codesniffer": "^3",
+                "symfony/console": "^4|^5",
+                "symfony/event-dispatcher": "^4|^5",
+                "symfony/yaml": "^4|^5"
             },
             "suggest": {
                 "symfony/yaml": "Required to use Consolidation\\Config\\Loader\\YamlConfigLoader"
@@ -41,32 +42,17 @@
                 "scenarios": {
                     "symfony4": {
                         "require-dev": {
-                            "symfony/console": "^4.0"
+                            "symfony/console": "^4"
                         },
                         "config": {
                             "platform": {
                                 "php": "7.1.3"
                             }
                         }
-                    },
-                    "symfony2": {
-                        "require-dev": {
-                            "symfony/console": "^2.8",
-                            "symfony/event-dispatcher": "^2.8",
-                            "phpunit/phpunit": "^4.8.36"
-                        },
-                        "remove": [
-                            "php-coveralls/php-coveralls"
-                        ],
-                        "config": {
-                            "platform": {
-                                "php": "5.4.8"
-                            }
-                        }
                     }
                 },
                 "branch-alias": {
-                    "dev-master": "1.x-dev"
+                    "dev-master": "2.x-dev"
                 }
             },
             "autoload": {
@@ -85,7 +71,7 @@
                 }
             ],
             "description": "Provide configuration services for a commandline tool.",
-            "time": "2019-03-03T19:37:04+00:00"
+            "time": "2020-05-27T17:11:23+00:00"
         },
         {
             "name": "dflydev/dot-access-data",
@@ -197,16 +183,16 @@
     "packages-dev": [
         {
             "name": "clue/stream-filter",
-            "version": "v1.4.0",
+            "version": "v1.4.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/clue/php-stream-filter.git",
-                "reference": "d80fdee9b3a7e0d16fc330a22f41f3ad0eeb09d0"
+                "reference": "5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/clue/php-stream-filter/zipball/d80fdee9b3a7e0d16fc330a22f41f3ad0eeb09d0",
-                "reference": "d80fdee9b3a7e0d16fc330a22f41f3ad0eeb09d0",
+                "url": "https://api.github.com/repos/clue/php-stream-filter/zipball/5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71",
+                "reference": "5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71",
                 "shasum": ""
             },
             "require": {
@@ -221,7 +207,7 @@
                     "Clue\\StreamFilter\\": "src/"
                 },
                 "files": [
-                    "src/functions.php"
+                    "src/functions_include.php"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -245,35 +231,35 @@
                 "stream_filter_append",
                 "stream_filter_register"
             ],
-            "time": "2017-08-18T09:54:01+00:00"
+            "time": "2019-04-09T12:31:48+00:00"
         },
         {
             "name": "consolidation/annotated-command",
-            "version": "2.12.0",
+            "version": "4.1.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/annotated-command.git",
-                "reference": "512a2e54c98f3af377589de76c43b24652bcb789"
+                "reference": "efc58dc0f34a45539787c5190b41b5d2a50a08da"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/512a2e54c98f3af377589de76c43b24652bcb789",
-                "reference": "512a2e54c98f3af377589de76c43b24652bcb789",
+                "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/efc58dc0f34a45539787c5190b41b5d2a50a08da",
+                "reference": "efc58dc0f34a45539787c5190b41b5d2a50a08da",
                 "shasum": ""
             },
             "require": {
-                "consolidation/output-formatters": "^3.4",
-                "php": ">=5.4.5",
-                "psr/log": "^1",
-                "symfony/console": "^2.8|^3|^4",
-                "symfony/event-dispatcher": "^2.5|^3|^4",
-                "symfony/finder": "^2.5|^3|^4"
+                "consolidation/output-formatters": "^4.1.1",
+                "php": ">=7.1.3",
+                "psr/log": "^1|^2",
+                "symfony/console": "^4.4.8|^5",
+                "symfony/event-dispatcher": "^4.4.8|^5",
+                "symfony/finder": "^4.4.8|^5"
             },
             "require-dev": {
                 "g1a/composer-test-scenarios": "^3",
-                "php-coveralls/php-coveralls": "^1",
+                "php-coveralls/php-coveralls": "^2.2",
                 "phpunit/phpunit": "^6",
-                "squizlabs/php_codesniffer": "^2.7"
+                "squizlabs/php_codesniffer": "^3"
             },
             "type": "library",
             "extra": {
@@ -287,42 +273,10 @@
                                 "php": "7.1.3"
                             }
                         }
-                    },
-                    "symfony2": {
-                        "require": {
-                            "symfony/console": "^2.8"
-                        },
-                        "require-dev": {
-                            "phpunit/phpunit": "^4.8.36"
-                        },
-                        "remove": [
-                            "php-coveralls/php-coveralls"
-                        ],
-                        "config": {
-                            "platform": {
-                                "php": "5.4.8"
-                            }
-                        },
-                        "scenario-options": {
-                            "create-lockfile": "false"
-                        }
-                    },
-                    "phpunit4": {
-                        "require-dev": {
-                            "phpunit/phpunit": "^4.8.36"
-                        },
-                        "remove": [
-                            "php-coveralls/php-coveralls"
-                        ],
-                        "config": {
-                            "platform": {
-                                "php": "5.4.8"
-                            }
-                        }
                     }
                 },
                 "branch-alias": {
-                    "dev-master": "2.x-dev"
+                    "dev-master": "4.x-dev"
                 }
             },
             "autoload": {
@@ -341,78 +295,49 @@
                 }
             ],
             "description": "Initialize Symfony Console commands from annotated command class methods.",
-            "time": "2019-03-08T16:55:03+00:00"
+            "time": "2020-05-27T21:11:36+00:00"
         },
         {
             "name": "consolidation/log",
-            "version": "1.1.1",
+            "version": "2.0.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/log.git",
-                "reference": "b2e887325ee90abc96b0a8b7b474cd9e7c896e3a"
+                "reference": "ba0bf6af1fbd09ed4dc18fc2f27b12ceff487cbf"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/log/zipball/b2e887325ee90abc96b0a8b7b474cd9e7c896e3a",
-                "reference": "b2e887325ee90abc96b0a8b7b474cd9e7c896e3a",
+                "url": "https://api.github.com/repos/consolidation/log/zipball/ba0bf6af1fbd09ed4dc18fc2f27b12ceff487cbf",
+                "reference": "ba0bf6af1fbd09ed4dc18fc2f27b12ceff487cbf",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.4.5",
+                "php": ">=7.1.3",
                 "psr/log": "^1.0",
-                "symfony/console": "^2.8|^3|^4"
+                "symfony/console": "^4|^5"
             },
             "require-dev": {
                 "g1a/composer-test-scenarios": "^3",
-                "php-coveralls/php-coveralls": "^1",
+                "php-coveralls/php-coveralls": "^2.2",
                 "phpunit/phpunit": "^6",
-                "squizlabs/php_codesniffer": "^2"
+                "squizlabs/php_codesniffer": "^3"
             },
             "type": "library",
             "extra": {
                 "scenarios": {
                     "symfony4": {
-                        "require": {
-                            "symfony/console": "^4.0"
-                        },
-                        "config": {
-                            "platform": {
-                                "php": "7.1.3"
-                            }
-                        }
-                    },
-                    "symfony2": {
-                        "require": {
-                            "symfony/console": "^2.8"
-                        },
-                        "require-dev": {
-                            "phpunit/phpunit": "^4.8.36"
-                        },
-                        "remove": [
-                            "php-coveralls/php-coveralls"
-                        ],
-                        "config": {
-                            "platform": {
-                                "php": "5.4.8"
-                            }
-                        }
-                    },
-                    "phpunit4": {
                         "require-dev": {
-                            "phpunit/phpunit": "^4.8.36"
+                            "symfony/console": "^4"
                         },
-                        "remove": [
-                            "php-coveralls/php-coveralls"
-                        ],
                         "config": {
                             "platform": {
-                                "php": "5.4.8"
+                                "php": "7.1.3"
                             }
                         }
                     }
                 },
                 "branch-alias": {
-                    "dev-master": "1.x-dev"
+                    "dev-master": "2.x-dev"
                 }
             },
             "autoload": {
@@ -431,44 +356,55 @@
                 }
             ],
             "description": "Improved Psr-3 / Psr\\Log logger based on Symfony Console components.",
-            "time": "2019-01-01T17:30:51+00:00"
+            "time": "2020-05-27T17:06:13+00:00"
         },
         {
             "name": "consolidation/output-formatters",
-            "version": "3.4.0",
+            "version": "4.1.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/output-formatters.git",
-                "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19"
+                "reference": "9deeddd6a916d0a756b216a8b40ce1016e17c0b9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/a942680232094c4a5b21c0b7e54c20cce623ae19",
-                "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19",
+                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/9deeddd6a916d0a756b216a8b40ce1016e17c0b9",
+                "reference": "9deeddd6a916d0a756b216a8b40ce1016e17c0b9",
                 "shasum": ""
             },
             "require": {
                 "dflydev/dot-access-data": "^1.1.0",
-                "php": ">=5.4.0",
-                "symfony/console": "^2.8|^3|^4",
-                "symfony/finder": "^2.5|^3|^4"
+                "php": ">=7.1.3",
+                "symfony/console": "^4|^5",
+                "symfony/finder": "^4|^5"
             },
             "require-dev": {
-                "g1a/composer-test-scenarios": "^2",
-                "phpunit/phpunit": "^5.7.27",
-                "satooshi/php-coveralls": "^2",
-                "squizlabs/php_codesniffer": "^2.7",
-                "symfony/console": "3.2.3",
-                "symfony/var-dumper": "^2.8|^3|^4",
-                "victorjonsson/markdowndocs": "^1.3"
+                "g1a/composer-test-scenarios": "^3",
+                "php-coveralls/php-coveralls": "^2.2",
+                "phpunit/phpunit": "^6",
+                "squizlabs/php_codesniffer": "^3",
+                "symfony/var-dumper": "^4",
+                "symfony/yaml": "^4"
             },
             "suggest": {
                 "symfony/var-dumper": "For using the var_dump formatter"
             },
             "type": "library",
             "extra": {
+                "scenarios": {
+                    "symfony4": {
+                        "require": {
+                            "symfony/console": "^4.0"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.1.3"
+                            }
+                        }
+                    }
+                },
                 "branch-alias": {
-                    "dev-master": "3.x-dev"
+                    "dev-master": "4.x-dev"
                 }
             },
             "autoload": {
@@ -487,58 +423,53 @@
                 }
             ],
             "description": "Format text by applying transformations provided by plug-in formatters.",
-            "time": "2018-10-19T22:35:38+00:00"
+            "time": "2020-05-27T20:51:17+00:00"
         },
         {
             "name": "consolidation/robo",
-            "version": "1.4.6",
+            "version": "2.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/Robo.git",
-                "reference": "d4805a1abbc730e9a6d64ede2eba56f91a2b4eb3"
+                "reference": "a0415a2663f6d9426d3cb9013446d3f00225d76d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/Robo/zipball/d4805a1abbc730e9a6d64ede2eba56f91a2b4eb3",
-                "reference": "d4805a1abbc730e9a6d64ede2eba56f91a2b4eb3",
+                "url": "https://api.github.com/repos/consolidation/Robo/zipball/a0415a2663f6d9426d3cb9013446d3f00225d76d",
+                "reference": "a0415a2663f6d9426d3cb9013446d3f00225d76d",
                 "shasum": ""
             },
             "require": {
-                "consolidation/annotated-command": "^2.10.2",
-                "consolidation/config": "^1.0.10",
-                "consolidation/log": "~1",
-                "consolidation/output-formatters": "^3.1.13",
-                "consolidation/self-update": "^1",
-                "grasmash/yaml-expander": "^1.3",
-                "league/container": "^2.2",
-                "php": ">=5.5.0",
-                "symfony/console": "^2.8|^3|^4",
-                "symfony/event-dispatcher": "^2.5|^3|^4",
-                "symfony/filesystem": "^2.5|^3|^4",
-                "symfony/finder": "^2.5|^3|^4",
-                "symfony/process": "^2.5|^3|^4"
+                "consolidation/annotated-command": "^4.1.1",
+                "consolidation/config": "^1.2.1|^2",
+                "consolidation/log": "^1.1.1|^2.0.1",
+                "consolidation/output-formatters": "^4.1.1",
+                "consolidation/self-update": "^1.2",
+                "grasmash/yaml-expander": "^1.4",
+                "league/container": "^2.4.1",
+                "php": ">=7.1.3",
+                "symfony/console": "^4.4.8|^5",
+                "symfony/event-dispatcher": "^4.4.8|^5",
+                "symfony/filesystem": "^4.4.8|^5",
+                "symfony/finder": "^4.4.8|^5",
+                "symfony/process": "^4.4.8|^5"
             },
-            "replace": {
-                "codegyre/robo": "< 1.0"
+            "conflict": {
+                "codegyre/robo": "*"
             },
             "require-dev": {
-                "codeception/aspect-mock": "^1|^2.1.1",
-                "codeception/base": "^2.3.7",
-                "codeception/verify": "^0.3.2",
                 "g1a/composer-test-scenarios": "^3",
-                "goaop/framework": "~2.1.2",
-                "goaop/parser-reflection": "^1.1.0",
                 "natxet/cssmin": "3.0.4",
-                "nikic/php-parser": "^3.1.5",
-                "patchwork/jsqueeze": "~2",
+                "patchwork/jsqueeze": "^2",
                 "pear/archive_tar": "^1.4.4",
-                "php-coveralls/php-coveralls": "^1",
-                "phpunit/php-code-coverage": "~2|~4",
-                "squizlabs/php_codesniffer": "^2.8"
+                "php-coveralls/php-coveralls": "^2.2",
+                "phpdocumentor/reflection-docblock": "^4.3.2",
+                "phpunit/phpunit": "^6.5.14",
+                "squizlabs/php_codesniffer": "^3"
             },
             "suggest": {
                 "henrikbjorn/lurker": "For monitoring filesystem changes in taskWatch",
-                "natxet/CssMin": "For minifying CSS files in taskMinify",
+                "natxet/cssmin": "For minifying CSS files in taskMinify",
                 "patchwork/jsqueeze": "For minifying JS files in taskMinify",
                 "pear/archive_tar": "Allows tar archives to be created and extracted in taskPack and taskExtract, respectively."
             },
@@ -550,28 +481,21 @@
                 "scenarios": {
                     "symfony4": {
                         "require": {
-                            "symfony/console": "^4"
-                        },
-                        "config": {
-                            "platform": {
-                                "php": "7.1.3"
-                            }
-                        }
-                    },
-                    "symfony2": {
-                        "require": {
-                            "symfony/console": "^2.8"
+                            "symfony/console": "^4.4.8",
+                            "symfony/event-dispatcher": "^4.4.8",
+                            "symfony/filesystem": "^4.4.8",
+                            "symfony/finder": "^4.4.8",
+                            "symfony/process": "^4.4.8",
+                            "phpunit/phpunit": "^6",
+                            "nikic/php-parser": "^2"
                         },
                         "remove": [
-                            "goaop/framework"
+                            "codeception/phpunit-wrapper"
                         ],
                         "config": {
                             "platform": {
-                                "php": "5.5.9"
+                                "php": "7.1.3"
                             }
-                        },
-                        "scenario-options": {
-                            "create-lockfile": "false"
                         }
                     }
                 },
@@ -595,26 +519,26 @@
                 }
             ],
             "description": "Modern task runner",
-            "time": "2019-02-17T05:32:27+00:00"
+            "time": "2020-05-27T22:03:57+00:00"
         },
         {
             "name": "consolidation/self-update",
-            "version": "1.1.5",
+            "version": "1.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/self-update.git",
-                "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54"
+                "reference": "dba6b2c0708f20fa3ba8008a2353b637578849b4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/self-update/zipball/a1c273b14ce334789825a09d06d4c87c0a02ad54",
-                "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54",
+                "url": "https://api.github.com/repos/consolidation/self-update/zipball/dba6b2c0708f20fa3ba8008a2353b637578849b4",
+                "reference": "dba6b2c0708f20fa3ba8008a2353b637578849b4",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.5.0",
-                "symfony/console": "^2.8|^3|^4",
-                "symfony/filesystem": "^2.5|^3|^4"
+                "symfony/console": "^2.8|^3|^4|^5",
+                "symfony/filesystem": "^2.5|^3|^4|^5"
             },
             "bin": [
                 "scripts/release"
@@ -635,17 +559,17 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Greg Anderson",
-                    "email": "greg.1.anderson@greenknowe.org"
-                },
                 {
                     "name": "Alexander Menk",
                     "email": "menk@mestrona.net"
+                },
+                {
+                    "name": "Greg Anderson",
+                    "email": "greg.1.anderson@greenknowe.org"
                 }
             ],
             "description": "Provides a self:update command for Symfony Console applications.",
-            "time": "2018-10-28T01:52:03+00:00"
+            "time": "2020-04-13T02:49:20+00:00"
         },
         {
             "name": "container-interop/container-interop",
@@ -676,36 +600,39 @@
             ],
             "description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
             "homepage": "https://github.com/container-interop/container-interop",
+            "abandoned": "psr/container",
             "time": "2017-02-14T19:40:03+00:00"
         },
         {
             "name": "doctrine/instantiator",
-            "version": "1.0.5",
+            "version": "1.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/instantiator.git",
-                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
+                "reference": "ae466f726242e637cebdd526a7d991b9433bacf1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
-                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
+                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1",
+                "reference": "ae466f726242e637cebdd526a7d991b9433bacf1",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3,<8.0-DEV"
+                "php": "^7.1"
             },
             "require-dev": {
-                "athletic/athletic": "~0.1.8",
+                "doctrine/coding-standard": "^6.0",
                 "ext-pdo": "*",
                 "ext-phar": "*",
-                "phpunit/phpunit": "~4.0",
-                "squizlabs/php_codesniffer": "~2.0"
+                "phpbench/phpbench": "^0.13",
+                "phpstan/phpstan-phpunit": "^0.11",
+                "phpstan/phpstan-shim": "^0.11",
+                "phpunit/phpunit": "^7.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.2.x-dev"
                 }
             },
             "autoload": {
@@ -725,25 +652,25 @@
                 }
             ],
             "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
-            "homepage": "https://github.com/doctrine/instantiator",
+            "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
             "keywords": [
                 "constructor",
                 "instantiate"
             ],
-            "time": "2015-06-14T21:17:01+00:00"
+            "time": "2019-10-21T16:45:58+00:00"
         },
         {
             "name": "g1a/composer-test-scenarios",
-            "version": "3.0.2",
+            "version": "3.0.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/g1a/composer-test-scenarios.git",
-                "reference": "28f932580981e912ab8f01d15788f1dee06550c8"
+                "reference": "78225430d4a5caf8e06b87d04149f8a9ace9368c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/28f932580981e912ab8f01d15788f1dee06550c8",
-                "reference": "28f932580981e912ab8f01d15788f1dee06550c8",
+                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/78225430d4a5caf8e06b87d04149f8a9ace9368c",
+                "reference": "78225430d4a5caf8e06b87d04149f8a9ace9368c",
                 "shasum": ""
             },
             "require": {
@@ -782,7 +709,7 @@
                 }
             ],
             "description": "Useful scripts for testing multiple sets of Composer dependencies.",
-            "time": "2019-02-11T20:22:44+00:00"
+            "time": "2019-09-13T01:24:52+00:00"
         },
         {
             "name": "grasmash/yaml-expander",
@@ -832,122 +759,31 @@
             "description": "Expands internal property references in a yaml file.",
             "time": "2017-12-16T16:06:03+00:00"
         },
-        {
-            "name": "guzzle/guzzle",
-            "version": "v3.8.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/guzzle/guzzle.git",
-                "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
-                "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
-                "shasum": ""
-            },
-            "require": {
-                "ext-curl": "*",
-                "php": ">=5.3.3",
-                "symfony/event-dispatcher": ">=2.1"
-            },
-            "replace": {
-                "guzzle/batch": "self.version",
-                "guzzle/cache": "self.version",
-                "guzzle/common": "self.version",
-                "guzzle/http": "self.version",
-                "guzzle/inflection": "self.version",
-                "guzzle/iterator": "self.version",
-                "guzzle/log": "self.version",
-                "guzzle/parser": "self.version",
-                "guzzle/plugin": "self.version",
-                "guzzle/plugin-async": "self.version",
-                "guzzle/plugin-backoff": "self.version",
-                "guzzle/plugin-cache": "self.version",
-                "guzzle/plugin-cookie": "self.version",
-                "guzzle/plugin-curlauth": "self.version",
-                "guzzle/plugin-error-response": "self.version",
-                "guzzle/plugin-history": "self.version",
-                "guzzle/plugin-log": "self.version",
-                "guzzle/plugin-md5": "self.version",
-                "guzzle/plugin-mock": "self.version",
-                "guzzle/plugin-oauth": "self.version",
-                "guzzle/service": "self.version",
-                "guzzle/stream": "self.version"
-            },
-            "require-dev": {
-                "doctrine/cache": "*",
-                "monolog/monolog": "1.*",
-                "phpunit/phpunit": "3.7.*",
-                "psr/log": "1.0.*",
-                "symfony/class-loader": "*",
-                "zendframework/zend-cache": "<2.3",
-                "zendframework/zend-log": "<2.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.8-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Guzzle": "src/",
-                    "Guzzle\\Tests": "tests/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Michael Dowling",
-                    "email": "mtdowling@gmail.com",
-                    "homepage": "https://github.com/mtdowling"
-                },
-                {
-                    "name": "Guzzle Community",
-                    "homepage": "https://github.com/guzzle/guzzle/contributors"
-                }
-            ],
-            "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients",
-            "homepage": "http://guzzlephp.org/",
-            "keywords": [
-                "client",
-                "curl",
-                "framework",
-                "http",
-                "http client",
-                "rest",
-                "web service"
-            ],
-            "abandoned": "guzzlehttp/guzzle",
-            "time": "2014-01-28T22:29:15+00:00"
-        },
         {
             "name": "guzzlehttp/guzzle",
-            "version": "6.3.3",
+            "version": "6.5.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/guzzle.git",
-                "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba"
+                "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba",
-                "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a4a1b6930528a8f7ee03518e6442ec7a44155d9d",
+                "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d",
                 "shasum": ""
             },
             "require": {
+                "ext-json": "*",
                 "guzzlehttp/promises": "^1.0",
-                "guzzlehttp/psr7": "^1.4",
-                "php": ">=5.5"
+                "guzzlehttp/psr7": "^1.6.1",
+                "php": ">=5.5",
+                "symfony/polyfill-intl-idn": "1.17.0"
             },
             "require-dev": {
                 "ext-curl": "*",
                 "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
-                "psr/log": "^1.0"
+                "psr/log": "^1.1"
             },
             "suggest": {
                 "psr/log": "Required for using the Log middleware"
@@ -955,16 +791,16 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "6.3-dev"
+                    "dev-master": "6.5-dev"
                 }
             },
             "autoload": {
-                "files": [
-                    "src/functions_include.php"
-                ],
                 "psr-4": {
                     "GuzzleHttp\\": "src/"
-                }
+                },
+                "files": [
+                    "src/functions_include.php"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -988,7 +824,7 @@
                 "rest",
                 "web service"
             ],
-            "time": "2018-04-22T15:46:56+00:00"
+            "time": "2020-05-25T19:35:05+00:00"
         },
         {
             "name": "guzzlehttp/promises",
@@ -1043,33 +879,37 @@
         },
         {
             "name": "guzzlehttp/psr7",
-            "version": "1.5.2",
+            "version": "1.6.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/psr7.git",
-                "reference": "9f83dded91781a01c63574e387eaa769be769115"
+                "reference": "239400de7a173fe9901b9ac7c06497751f00727a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115",
-                "reference": "9f83dded91781a01c63574e387eaa769be769115",
+                "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a",
+                "reference": "239400de7a173fe9901b9ac7c06497751f00727a",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.4.0",
                 "psr/http-message": "~1.0",
-                "ralouphie/getallheaders": "^2.0.5"
+                "ralouphie/getallheaders": "^2.0.5 || ^3.0.0"
             },
             "provide": {
                 "psr/http-message-implementation": "1.0"
             },
             "require-dev": {
+                "ext-zlib": "*",
                 "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
             },
+            "suggest": {
+                "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses"
+            },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.5-dev"
+                    "dev-master": "1.6-dev"
                 }
             },
             "autoload": {
@@ -1106,43 +946,43 @@
                 "uri",
                 "url"
             ],
-            "time": "2018-12-04T20:46:45+00:00"
+            "time": "2019-07-01T23:21:34+00:00"
         },
         {
             "name": "knplabs/github-api",
-            "version": "2.11.0",
+            "version": "v2.14.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/KnpLabs/php-github-api.git",
-                "reference": "7e67b4ccf9ef62fbd6321a314c61d3202c07b855"
+                "reference": "953c9b453d3258a97755ec3557d112f271176f74"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/KnpLabs/php-github-api/zipball/7e67b4ccf9ef62fbd6321a314c61d3202c07b855",
-                "reference": "7e67b4ccf9ef62fbd6321a314c61d3202c07b855",
+                "url": "https://api.github.com/repos/KnpLabs/php-github-api/zipball/953c9b453d3258a97755ec3557d112f271176f74",
+                "reference": "953c9b453d3258a97755ec3557d112f271176f74",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.6 || ^7.0",
+                "php": "^7.1",
                 "php-http/cache-plugin": "^1.4",
-                "php-http/client-common": "^1.6",
+                "php-http/client-common": "^1.6 || ^2.0",
                 "php-http/client-implementation": "^1.0",
                 "php-http/discovery": "^1.0",
-                "php-http/httplug": "^1.1",
+                "php-http/httplug": "^1.1 || ^2.0",
                 "psr/cache": "^1.0",
                 "psr/http-message": "^1.0"
             },
             "require-dev": {
                 "cache/array-adapter": "^0.4",
                 "guzzlehttp/psr7": "^1.2",
-                "php-http/guzzle6-adapter": "^1.0",
-                "php-http/mock-client": "^1.0",
-                "phpunit/phpunit": "^5.5 || ^6.0"
+                "php-http/guzzle6-adapter": "^1.0 || ^2.0",
+                "php-http/mock-client": "^1.2",
+                "phpunit/phpunit": "^7.0 || ^8.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.11.x-dev"
+                    "dev-master": "2.14.x-dev"
                 }
             },
             "autoload": {
@@ -1155,14 +995,14 @@
                 "MIT"
             ],
             "authors": [
+                {
+                    "name": "KnpLabs Team",
+                    "homepage": "http://knplabs.com"
+                },
                 {
                     "name": "Thibault Duplessis",
                     "email": "thibault.duplessis@gmail.com",
                     "homepage": "http://ornicar.github.com"
-                },
-                {
-                    "name": "KnpLabs Team",
-                    "homepage": "http://knplabs.com"
                 }
             ],
             "description": "GitHub API v3 client",
@@ -1173,7 +1013,7 @@
                 "gist",
                 "github"
             ],
-            "time": "2019-01-28T19:31:35+00:00"
+            "time": "2020-04-25T20:36:03+00:00"
         },
         {
             "name": "league/container",
@@ -1242,25 +1082,28 @@
         },
         {
             "name": "myclabs/deep-copy",
-            "version": "1.7.0",
+            "version": "1.9.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/myclabs/DeepCopy.git",
-                "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e"
+                "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e",
-                "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e",
+                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/b2c28789e80a97badd14145fda39b545d83ca3ef",
+                "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.6 || ^7.0"
+                "php": "^7.1"
+            },
+            "replace": {
+                "myclabs/deep-copy": "self.version"
             },
             "require-dev": {
                 "doctrine/collections": "^1.0",
                 "doctrine/common": "^2.6",
-                "phpunit/phpunit": "^4.1"
+                "phpunit/phpunit": "^7.1"
             },
             "type": "library",
             "autoload": {
@@ -1283,7 +1126,7 @@
                 "object",
                 "object graph"
             ],
-            "time": "2017-10-19T19:58:43+00:00"
+            "time": "2020-01-17T21:11:47+00:00"
         },
         {
             "name": "phar-io/manifest",
@@ -1389,28 +1232,28 @@
         },
         {
             "name": "php-coveralls/php-coveralls",
-            "version": "v1.1.0",
+            "version": "v2.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-coveralls/php-coveralls.git",
-                "reference": "37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad"
+                "reference": "3e6420fa666ef7bae5e750ddeac903153e193bae"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad",
-                "reference": "37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad",
+                "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/3e6420fa666ef7bae5e750ddeac903153e193bae",
+                "reference": "3e6420fa666ef7bae5e750ddeac903153e193bae",
                 "shasum": ""
             },
             "require": {
                 "ext-json": "*",
                 "ext-simplexml": "*",
-                "guzzle/guzzle": "^2.8 || ^3.0",
-                "php": "^5.3.3 || ^7.0",
+                "guzzlehttp/guzzle": "^6.0",
+                "php": "^5.5 || ^7.0",
                 "psr/log": "^1.0",
-                "symfony/config": "^2.1 || ^3.0 || ^4.0",
-                "symfony/console": "^2.1 || ^3.0 || ^4.0",
-                "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0",
-                "symfony/yaml": "^2.0 || ^3.0 || ^4.0"
+                "symfony/config": "^2.1 || ^3.0 || ^4.0 || ^5.0",
+                "symfony/console": "^2.1 || ^3.0 || ^4.0 || ^5.0",
+                "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0 || ^5.0",
+                "symfony/yaml": "^2.0.5 || ^3.0 || ^4.0 || ^5.0"
             },
             "require-dev": {
                 "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0"
@@ -1419,12 +1262,17 @@
                 "symfony/http-kernel": "Allows Symfony integration"
             },
             "bin": [
-                "bin/coveralls"
+                "bin/php-coveralls"
             ],
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.2-dev"
+                }
+            },
             "autoload": {
                 "psr-4": {
-                    "Satooshi\\": "src/Satooshi/"
+                    "PhpCoveralls\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1435,7 +1283,24 @@
                 {
                     "name": "Kitamura Satoshi",
                     "email": "with.no.parachute@gmail.com",
-                    "homepage": "https://www.facebook.com/satooshi.jp"
+                    "homepage": "https://www.facebook.com/satooshi.jp",
+                    "role": "Original creator"
+                },
+                {
+                    "name": "Takashi Matsuo",
+                    "email": "tmatsuo@google.com"
+                },
+                {
+                    "name": "Google Inc"
+                },
+                {
+                    "name": "Dariusz Ruminski",
+                    "email": "dariusz.ruminski@gmail.com",
+                    "homepage": "https://github.com/keradus"
+                },
+                {
+                    "name": "Contributors",
+                    "homepage": "https://github.com/php-coveralls/php-coveralls/graphs/contributors"
                 }
             ],
             "description": "PHP client library for Coveralls API",
@@ -1446,28 +1311,28 @@
                 "github",
                 "test"
             ],
-            "time": "2017-12-06T23:17:56+00:00"
+            "time": "2019-11-20T16:29:20+00:00"
         },
         {
             "name": "php-http/cache-plugin",
-            "version": "1.6.0",
+            "version": "1.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-http/cache-plugin.git",
-                "reference": "8e2505d2090316fac7cce637b39b6bbb5249c5a8"
+                "reference": "d137d46523343297e340cef697747381b6caeb66"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-http/cache-plugin/zipball/8e2505d2090316fac7cce637b39b6bbb5249c5a8",
-                "reference": "8e2505d2090316fac7cce637b39b6bbb5249c5a8",
+                "url": "https://api.github.com/repos/php-http/cache-plugin/zipball/d137d46523343297e340cef697747381b6caeb66",
+                "reference": "d137d46523343297e340cef697747381b6caeb66",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.4 || ^7.0",
+                "php": "^7.1",
                 "php-http/client-common": "^1.9 || ^2.0",
                 "php-http/message-factory": "^1.0",
                 "psr/cache": "^1.0",
-                "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0"
+                "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0 || ^5.0"
             },
             "require-dev": {
                 "henrikbjorn/phpspec-code-coverage": "^1.0",
@@ -1502,20 +1367,20 @@
                 "httplug",
                 "plugin"
             ],
-            "time": "2019-01-23T16:51:58+00:00"
+            "time": "2019-12-26T16:14:58+00:00"
         },
         {
             "name": "php-http/client-common",
-            "version": "1.9.1",
+            "version": "1.10.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-http/client-common.git",
-                "reference": "0e156a12cc3e46f590c73bf57592a2252fc3dc48"
+                "reference": "c0390ae3c8f2ae9d50901feef0127fb9e396f6b4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-http/client-common/zipball/0e156a12cc3e46f590c73bf57592a2252fc3dc48",
-                "reference": "0e156a12cc3e46f590c73bf57592a2252fc3dc48",
+                "url": "https://api.github.com/repos/php-http/client-common/zipball/c0390ae3c8f2ae9d50901feef0127fb9e396f6b4",
+                "reference": "c0390ae3c8f2ae9d50901feef0127fb9e396f6b4",
                 "shasum": ""
             },
             "require": {
@@ -1523,7 +1388,7 @@
                 "php-http/httplug": "^1.1",
                 "php-http/message": "^1.6",
                 "php-http/message-factory": "^1.0",
-                "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0"
+                "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0 || ^5.0"
             },
             "require-dev": {
                 "guzzlehttp/psr7": "^1.4",
@@ -1537,7 +1402,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9.x-dev"
+                    "dev-master": "1.10.x-dev"
                 }
             },
             "autoload": {
@@ -1563,32 +1428,33 @@
                 "http",
                 "httplug"
             ],
-            "time": "2019-02-02T07:03:15+00:00"
+            "time": "2019-11-18T08:54:36+00:00"
         },
         {
             "name": "php-http/discovery",
-            "version": "1.6.1",
+            "version": "1.7.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-http/discovery.git",
-                "reference": "684855f2c2e9d0a61868b8f8d6bd0295c8a4b651"
+                "reference": "82dbef649ccffd8e4f22e1953c3a5265992b83c0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-http/discovery/zipball/684855f2c2e9d0a61868b8f8d6bd0295c8a4b651",
-                "reference": "684855f2c2e9d0a61868b8f8d6bd0295c8a4b651",
+                "url": "https://api.github.com/repos/php-http/discovery/zipball/82dbef649ccffd8e4f22e1953c3a5265992b83c0",
+                "reference": "82dbef649ccffd8e4f22e1953c3a5265992b83c0",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5 || ^7.0"
+                "php": "^7.1"
             },
             "conflict": {
                 "nyholm/psr7": "<1.0"
             },
             "require-dev": {
+                "akeneo/phpspec-skip-example-extension": "^4.0",
                 "php-http/httplug": "^1.0 || ^2.0",
                 "php-http/message-factory": "^1.0",
-                "phpspec/phpspec": "^2.4",
+                "phpspec/phpspec": "^5.1",
                 "puli/composer-plugin": "1.0.0-beta10"
             },
             "suggest": {
@@ -1598,7 +1464,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.5-dev"
+                    "dev-master": "1.7-dev"
                 }
             },
             "autoload": {
@@ -1627,7 +1493,7 @@
                 "message",
                 "psr7"
             ],
-            "time": "2019-02-23T07:42:53+00:00"
+            "time": "2020-01-03T11:25:47+00:00"
         },
         {
             "name": "php-http/guzzle6-adapter",
@@ -1747,21 +1613,21 @@
         },
         {
             "name": "php-http/message",
-            "version": "1.7.2",
+            "version": "1.8.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-http/message.git",
-                "reference": "b159ffe570dffd335e22ef0b91a946eacb182fa1"
+                "reference": "ce8f43ac1e294b54aabf5808515c3554a19c1e1c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-http/message/zipball/b159ffe570dffd335e22ef0b91a946eacb182fa1",
-                "reference": "b159ffe570dffd335e22ef0b91a946eacb182fa1",
+                "url": "https://api.github.com/repos/php-http/message/zipball/ce8f43ac1e294b54aabf5808515c3554a19c1e1c",
+                "reference": "ce8f43ac1e294b54aabf5808515c3554a19c1e1c",
                 "shasum": ""
             },
             "require": {
                 "clue/stream-filter": "^1.4",
-                "php": "^5.4 || ^7.0",
+                "php": "^7.1",
                 "php-http/message-factory": "^1.0.2",
                 "psr/http-message": "^1.0"
             },
@@ -1787,7 +1653,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.6-dev"
+                    "dev-master": "1.8-dev"
                 }
             },
             "autoload": {
@@ -1815,7 +1681,7 @@
                 "message",
                 "psr-7"
             ],
-            "time": "2018-11-01T09:32:41+00:00"
+            "time": "2019-08-05T06:55:08+00:00"
         },
         {
             "name": "php-http/message-factory",
@@ -1919,35 +1785,30 @@
         },
         {
             "name": "phpdocumentor/reflection-common",
-            "version": "1.0.1",
+            "version": "2.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
-                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6"
+                "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
-                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b",
+                "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.5"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.6"
+                "php": ">=7.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "2.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src"
-                    ]
+                    "phpDocumentor\\Reflection\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1969,44 +1830,42 @@
                 "reflection",
                 "static analysis"
             ],
-            "time": "2017-09-11T18:02:19+00:00"
+            "time": "2020-04-27T09:25:28+00:00"
         },
         {
             "name": "phpdocumentor/reflection-docblock",
-            "version": "4.3.0",
+            "version": "5.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "94fd0001232e47129dd3504189fa1c7225010d08"
+                "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08",
-                "reference": "94fd0001232e47129dd3504189fa1c7225010d08",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e",
+                "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.0",
-                "phpdocumentor/reflection-common": "^1.0.0",
-                "phpdocumentor/type-resolver": "^0.4.0",
-                "webmozart/assert": "^1.0"
+                "ext-filter": "^7.1",
+                "php": "^7.2",
+                "phpdocumentor/reflection-common": "^2.0",
+                "phpdocumentor/type-resolver": "^1.0",
+                "webmozart/assert": "^1"
             },
             "require-dev": {
-                "doctrine/instantiator": "~1.0.5",
-                "mockery/mockery": "^1.0",
-                "phpunit/phpunit": "^6.4"
+                "doctrine/instantiator": "^1",
+                "mockery/mockery": "^1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.x-dev"
+                    "dev-master": "5.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src/"
-                    ]
+                    "phpDocumentor\\Reflection\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -2017,44 +1876,46 @@
                 {
                     "name": "Mike van Riel",
                     "email": "me@mikevanriel.com"
+                },
+                {
+                    "name": "Jaap van Otterdijk",
+                    "email": "account@ijaap.nl"
                 }
             ],
             "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
-            "time": "2017-11-30T07:14:17+00:00"
+            "time": "2020-02-22T12:28:44+00:00"
         },
         {
             "name": "phpdocumentor/type-resolver",
-            "version": "0.4.0",
+            "version": "1.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/TypeResolver.git",
-                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7"
+                "reference": "7462d5f123dfc080dfdf26897032a6513644fc95"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7",
-                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7",
+                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/7462d5f123dfc080dfdf26897032a6513644fc95",
+                "reference": "7462d5f123dfc080dfdf26897032a6513644fc95",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5 || ^7.0",
-                "phpdocumentor/reflection-common": "^1.0"
+                "php": "^7.2",
+                "phpdocumentor/reflection-common": "^2.0"
             },
             "require-dev": {
-                "mockery/mockery": "^0.9.4",
-                "phpunit/phpunit": "^5.2||^4.8.24"
+                "ext-tokenizer": "^7.2",
+                "mockery/mockery": "~1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src/"
-                    ]
+                    "phpDocumentor\\Reflection\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -2067,42 +1928,43 @@
                     "email": "me@mikevanriel.com"
                 }
             ],
-            "time": "2017-07-14T14:27:02+00:00"
+            "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
+            "time": "2020-02-18T18:59:58+00:00"
         },
         {
             "name": "phpspec/prophecy",
-            "version": "1.8.0",
+            "version": "v1.10.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06"
+                "reference": "451c3cd1418cf640de218914901e51b064abb093"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093",
                 "shasum": ""
             },
             "require": {
                 "doctrine/instantiator": "^1.0.2",
                 "php": "^5.3|^7.0",
-                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
-                "sebastian/comparator": "^1.1|^2.0|^3.0",
-                "sebastian/recursion-context": "^1.0|^2.0|^3.0"
+                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+                "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+                "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
             },
             "require-dev": {
-                "phpspec/phpspec": "^2.5|^3.2",
+                "phpspec/phpspec": "^2.5 || ^3.2",
                 "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.8.x-dev"
+                    "dev-master": "1.10.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Prophecy\\": "src/"
+                "psr-4": {
+                    "Prophecy\\": "src/Prophecy"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -2130,7 +1992,7 @@
                 "spy",
                 "stub"
             ],
-            "time": "2018-08-05T17:53:17+00:00"
+            "time": "2020-03-05T15:02:03+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",
@@ -2621,21 +2483,21 @@
             "time": "2017-02-14T16:28:37+00:00"
         },
         {
-            "name": "psr/http-message",
-            "version": "1.0.1",
+            "name": "psr/event-dispatcher",
+            "version": "1.0.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/php-fig/http-message.git",
-                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
+                "url": "https://github.com/php-fig/event-dispatcher.git",
+                "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
-                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
+                "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0",
+                "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.0"
+                "php": ">=7.2.0"
             },
             "type": "library",
             "extra": {
@@ -2645,7 +2507,7 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Psr\\Http\\Message\\": "src/"
+                    "Psr\\EventDispatcher\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -2658,30 +2520,26 @@
                     "homepage": "http://www.php-fig.org/"
                 }
             ],
-            "description": "Common interface for HTTP messages",
-            "homepage": "https://github.com/php-fig/http-message",
+            "description": "Standard interfaces for event handling.",
             "keywords": [
-                "http",
-                "http-message",
+                "events",
                 "psr",
-                "psr-7",
-                "request",
-                "response"
+                "psr-14"
             ],
-            "time": "2016-08-06T14:39:51+00:00"
+            "time": "2019-01-08T18:20:26+00:00"
         },
         {
-            "name": "psr/log",
-            "version": "1.1.0",
+            "name": "psr/http-message",
+            "version": "1.0.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/php-fig/log.git",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
+                "url": "https://github.com/php-fig/http-message.git",
+                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
+                "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
+                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
                 "shasum": ""
             },
             "require": {
@@ -2695,7 +2553,7 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Psr\\Log\\": "Psr/Log/"
+                    "Psr\\Http\\Message\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -2708,35 +2566,85 @@
                     "homepage": "http://www.php-fig.org/"
                 }
             ],
-            "description": "Common interface for logging libraries",
-            "homepage": "https://github.com/php-fig/log",
-            "keywords": [
+            "description": "Common interface for HTTP messages",
+            "homepage": "https://github.com/php-fig/http-message",
+            "keywords": [
+                "http",
+                "http-message",
+                "psr",
+                "psr-7",
+                "request",
+                "response"
+            ],
+            "time": "2016-08-06T14:39:51+00:00"
+        },
+        {
+            "name": "psr/log",
+            "version": "1.1.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/log.git",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Log\\": "Psr/Log/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for logging libraries",
+            "homepage": "https://github.com/php-fig/log",
+            "keywords": [
                 "log",
                 "psr",
                 "psr-3"
             ],
-            "time": "2018-11-20T15:27:04+00:00"
+            "time": "2020-03-23T09:12:05+00:00"
         },
         {
             "name": "ralouphie/getallheaders",
-            "version": "2.0.5",
+            "version": "3.0.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/ralouphie/getallheaders.git",
-                "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa"
+                "reference": "120b605dfeb996808c31b6477290a714d356e822"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/5601c8a83fbba7ef674a7369456d12f1e0d0eafa",
-                "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa",
+                "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
+                "reference": "120b605dfeb996808c31b6477290a714d356e822",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3"
+                "php": ">=5.6"
             },
             "require-dev": {
-                "phpunit/phpunit": "~3.7.0",
-                "satooshi/php-coveralls": ">=1.0"
+                "php-coveralls/php-coveralls": "^2.1",
+                "phpunit/phpunit": "^5 || ^6.5"
             },
             "type": "library",
             "autoload": {
@@ -2755,7 +2663,7 @@
                 }
             ],
             "description": "A polyfill for getallheaders.",
-            "time": "2016-02-11T07:05:27+00:00"
+            "time": "2019-03-08T08:55:37+00:00"
         },
         {
             "name": "sebastian/code-unit-reverse-lookup",
@@ -2970,16 +2878,16 @@
         },
         {
             "name": "sebastian/exporter",
-            "version": "3.1.0",
+            "version": "3.1.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/exporter.git",
-                "reference": "234199f4528de6d12aaa58b612e98f7d36adb937"
+                "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937",
-                "reference": "234199f4528de6d12aaa58b612e98f7d36adb937",
+                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e",
+                "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e",
                 "shasum": ""
             },
             "require": {
@@ -3006,6 +2914,10 @@
                 "BSD-3-Clause"
             ],
             "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
                 {
                     "name": "Jeff Welch",
                     "email": "whatthejeff@gmail.com"
@@ -3014,17 +2926,13 @@
                     "name": "Volker Dusch",
                     "email": "github@wallbash.com"
                 },
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@2bepublished.at"
-                },
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                },
                 {
                     "name": "Adam Harvey",
                     "email": "aharvey@php.net"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@gmail.com"
                 }
             ],
             "description": "Provides the functionality to export PHP variables for visualization",
@@ -3033,7 +2941,7 @@
                 "export",
                 "exporter"
             ],
-            "time": "2017-04-03T13:19:02+00:00"
+            "time": "2019-09-14T09:02:43+00:00"
         },
         {
             "name": "sebastian/global-state",
@@ -3396,32 +3304,32 @@
         },
         {
             "name": "symfony/config",
-            "version": "v3.4.23",
+            "version": "v5.0.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/config.git",
-                "reference": "177a276c01575253c95cefe0866e3d1b57637fe0"
+                "reference": "db1674e1a261148429f123871f30d211992294e7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/config/zipball/177a276c01575253c95cefe0866e3d1b57637fe0",
-                "reference": "177a276c01575253c95cefe0866e3d1b57637fe0",
+                "url": "https://api.github.com/repos/symfony/config/zipball/db1674e1a261148429f123871f30d211992294e7",
+                "reference": "db1674e1a261148429f123871f30d211992294e7",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/filesystem": "~2.8|~3.0|~4.0",
+                "php": "^7.2.5",
+                "symfony/filesystem": "^4.4|^5.0",
                 "symfony/polyfill-ctype": "~1.8"
             },
             "conflict": {
-                "symfony/dependency-injection": "<3.3",
-                "symfony/finder": "<3.3"
+                "symfony/finder": "<4.4"
             },
             "require-dev": {
-                "symfony/dependency-injection": "~3.3|~4.0",
-                "symfony/event-dispatcher": "~3.3|~4.0",
-                "symfony/finder": "~3.3|~4.0",
-                "symfony/yaml": "~3.0|~4.0"
+                "symfony/event-dispatcher": "^4.4|^5.0",
+                "symfony/finder": "^4.4|^5.0",
+                "symfony/messenger": "^4.4|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/yaml": "^4.4|^5.0"
             },
             "suggest": {
                 "symfony/yaml": "To use the yaml reference dumper"
@@ -3429,7 +3337,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "5.0-dev"
                 }
             },
             "autoload": {
@@ -3456,41 +3364,45 @@
             ],
             "description": "Symfony Config Component",
             "homepage": "https://symfony.com",
-            "time": "2019-02-23T15:06:07+00:00"
+            "time": "2020-04-15T15:59:10+00:00"
         },
         {
             "name": "symfony/console",
-            "version": "v3.4.23",
+            "version": "v5.0.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "71ce77f37af0c5ffb9590e43cc4f70e426945c5e"
+                "reference": "5fa1caadc8cdaa17bcfb25219f3b53fe294a9935"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/71ce77f37af0c5ffb9590e43cc4f70e426945c5e",
-                "reference": "71ce77f37af0c5ffb9590e43cc4f70e426945c5e",
+                "url": "https://api.github.com/repos/symfony/console/zipball/5fa1caadc8cdaa17bcfb25219f3b53fe294a9935",
+                "reference": "5fa1caadc8cdaa17bcfb25219f3b53fe294a9935",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/debug": "~2.8|~3.0|~4.0",
-                "symfony/polyfill-mbstring": "~1.0"
+                "php": "^7.2.5",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/polyfill-php73": "^1.8",
+                "symfony/service-contracts": "^1.1|^2"
             },
             "conflict": {
-                "symfony/dependency-injection": "<3.4",
-                "symfony/process": "<3.3"
+                "symfony/dependency-injection": "<4.4",
+                "symfony/event-dispatcher": "<4.4",
+                "symfony/lock": "<4.4",
+                "symfony/process": "<4.4"
             },
             "provide": {
                 "psr/log-implementation": "1.0"
             },
             "require-dev": {
                 "psr/log": "~1.0",
-                "symfony/config": "~3.3|~4.0",
-                "symfony/dependency-injection": "~3.4|~4.0",
-                "symfony/event-dispatcher": "~2.8|~3.0|~4.0",
-                "symfony/lock": "~3.4|~4.0",
-                "symfony/process": "~3.3|~4.0"
+                "symfony/config": "^4.4|^5.0",
+                "symfony/dependency-injection": "^4.4|^5.0",
+                "symfony/event-dispatcher": "^4.4|^5.0",
+                "symfony/lock": "^4.4|^5.0",
+                "symfony/process": "^4.4|^5.0",
+                "symfony/var-dumper": "^4.4|^5.0"
             },
             "suggest": {
                 "psr/log": "For using the console logger",
@@ -3501,7 +3413,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "5.0-dev"
                 }
             },
             "autoload": {
@@ -3528,41 +3440,55 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "https://symfony.com",
-            "time": "2019-02-23T15:06:07+00:00"
+            "time": "2020-03-30T11:42:42+00:00"
         },
         {
-            "name": "symfony/debug",
-            "version": "v3.4.23",
+            "name": "symfony/event-dispatcher",
+            "version": "v5.0.8",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/debug.git",
-                "reference": "8d8a9e877b3fcdc50ddecf8dcea146059753f782"
+                "url": "https://github.com/symfony/event-dispatcher.git",
+                "reference": "24f40d95385774ed5c71dbf014edd047e2f2f3dc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/debug/zipball/8d8a9e877b3fcdc50ddecf8dcea146059753f782",
-                "reference": "8d8a9e877b3fcdc50ddecf8dcea146059753f782",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/24f40d95385774ed5c71dbf014edd047e2f2f3dc",
+                "reference": "24f40d95385774ed5c71dbf014edd047e2f2f3dc",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "psr/log": "~1.0"
+                "php": "^7.2.5",
+                "symfony/event-dispatcher-contracts": "^2"
             },
             "conflict": {
-                "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
+                "symfony/dependency-injection": "<4.4"
+            },
+            "provide": {
+                "psr/event-dispatcher-implementation": "1.0",
+                "symfony/event-dispatcher-implementation": "2.0"
             },
             "require-dev": {
-                "symfony/http-kernel": "~2.8|~3.0|~4.0"
+                "psr/log": "~1.0",
+                "symfony/config": "^4.4|^5.0",
+                "symfony/dependency-injection": "^4.4|^5.0",
+                "symfony/expression-language": "^4.4|^5.0",
+                "symfony/http-foundation": "^4.4|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/stopwatch": "^4.4|^5.0"
+            },
+            "suggest": {
+                "symfony/dependency-injection": "",
+                "symfony/http-kernel": ""
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "5.0-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\Debug\\": ""
+                    "Symfony\\Component\\EventDispatcher\\": ""
                 },
                 "exclude-from-classmap": [
                     "/Tests/"
@@ -3582,54 +3508,41 @@
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony Debug Component",
+            "description": "Symfony EventDispatcher Component",
             "homepage": "https://symfony.com",
-            "time": "2019-02-24T15:45:11+00:00"
+            "time": "2020-03-27T16:56:45+00:00"
         },
         {
-            "name": "symfony/event-dispatcher",
-            "version": "v3.4.23",
+            "name": "symfony/event-dispatcher-contracts",
+            "version": "v2.0.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "ec625e2fff7f584eeb91754821807317b2e79236"
+                "url": "https://github.com/symfony/event-dispatcher-contracts.git",
+                "reference": "af23c2584d4577d54661c434446fb8fbed6025dd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ec625e2fff7f584eeb91754821807317b2e79236",
-                "reference": "ec625e2fff7f584eeb91754821807317b2e79236",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/af23c2584d4577d54661c434446fb8fbed6025dd",
+                "reference": "af23c2584d4577d54661c434446fb8fbed6025dd",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8"
-            },
-            "conflict": {
-                "symfony/dependency-injection": "<3.3"
-            },
-            "require-dev": {
-                "psr/log": "~1.0",
-                "symfony/config": "~2.8|~3.0|~4.0",
-                "symfony/dependency-injection": "~3.3|~4.0",
-                "symfony/expression-language": "~2.8|~3.0|~4.0",
-                "symfony/stopwatch": "~2.8|~3.0|~4.0"
+                "php": "^7.2.5",
+                "psr/event-dispatcher": "^1"
             },
             "suggest": {
-                "symfony/dependency-injection": "",
-                "symfony/http-kernel": ""
+                "symfony/event-dispatcher-implementation": ""
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "2.0-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\EventDispatcher\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
+                    "Symfony\\Contracts\\EventDispatcher\\": ""
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -3637,40 +3550,48 @@
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
                 },
                 {
                     "name": "Symfony Community",
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony EventDispatcher Component",
+            "description": "Generic abstractions related to dispatching event",
             "homepage": "https://symfony.com",
-            "time": "2019-02-23T15:06:07+00:00"
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "time": "2019-11-18T17:27:11+00:00"
         },
         {
             "name": "symfony/filesystem",
-            "version": "v3.4.23",
+            "version": "v5.0.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/filesystem.git",
-                "reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb"
+                "reference": "7cd0dafc4353a0f62e307df90b48466379c8cc91"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/acf99758b1df8e9295e6b85aa69f294565c9fedb",
-                "reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/7cd0dafc4353a0f62e307df90b48466379c8cc91",
+                "reference": "7cd0dafc4353a0f62e307df90b48466379c8cc91",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
+                "php": "^7.2.5",
                 "symfony/polyfill-ctype": "~1.8"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "5.0-dev"
                 }
             },
             "autoload": {
@@ -3697,29 +3618,29 @@
             ],
             "description": "Symfony Filesystem Component",
             "homepage": "https://symfony.com",
-            "time": "2019-02-04T21:34:32+00:00"
+            "time": "2020-04-12T14:40:17+00:00"
         },
         {
             "name": "symfony/finder",
-            "version": "v3.4.23",
+            "version": "v5.0.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "fcdde4aa38f48190ce70d782c166f23930084f9b"
+                "reference": "600a52c29afc0d1caa74acbec8d3095ca7e9910d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/fcdde4aa38f48190ce70d782c166f23930084f9b",
-                "reference": "fcdde4aa38f48190ce70d782c166f23930084f9b",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/600a52c29afc0d1caa74acbec8d3095ca7e9910d",
+                "reference": "600a52c29afc0d1caa74acbec8d3095ca7e9910d",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8"
+                "php": "^7.2.5"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "5.0-dev"
                 }
             },
             "autoload": {
@@ -3746,29 +3667,29 @@
             ],
             "description": "Symfony Finder Component",
             "homepage": "https://symfony.com",
-            "time": "2019-02-22T14:44:53+00:00"
+            "time": "2020-03-27T16:56:45+00:00"
         },
         {
             "name": "symfony/options-resolver",
-            "version": "v3.4.23",
+            "version": "v5.0.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/options-resolver.git",
-                "reference": "926e3b797e6bb66c0e4d7da7eff3a174f7378bcf"
+                "reference": "3707e3caeff2b797c0bfaadd5eba723dd44e6bf1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/options-resolver/zipball/926e3b797e6bb66c0e4d7da7eff3a174f7378bcf",
-                "reference": "926e3b797e6bb66c0e4d7da7eff3a174f7378bcf",
+                "url": "https://api.github.com/repos/symfony/options-resolver/zipball/3707e3caeff2b797c0bfaadd5eba723dd44e6bf1",
+                "reference": "3707e3caeff2b797c0bfaadd5eba723dd44e6bf1",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8"
+                "php": "^7.2.5"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "5.0-dev"
                 }
             },
             "autoload": {
@@ -3800,20 +3721,20 @@
                 "configuration",
                 "options"
             ],
-            "time": "2019-02-23T15:06:07+00:00"
+            "time": "2020-04-06T10:40:56+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
-            "version": "v1.10.0",
+            "version": "v1.17.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19"
+                "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e94c8b1bbe2bc77507a1056cdb06451c75b427f9",
+                "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9",
                 "shasum": ""
             },
             "require": {
@@ -3825,7 +3746,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.17-dev"
                 }
             },
             "autoload": {
@@ -3841,13 +3762,13 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                },
                 {
                     "name": "Gert de Pagter",
                     "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony polyfill for ctype functions",
@@ -3858,20 +3779,82 @@
                 "polyfill",
                 "portable"
             ],
-            "time": "2018-08-06T14:22:27+00:00"
+            "time": "2020-05-12T16:14:59+00:00"
+        },
+        {
+            "name": "symfony/polyfill-intl-idn",
+            "version": "v1.17.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-intl-idn.git",
+                "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3bff59ea7047e925be6b7f2059d60af31bb46d6a",
+                "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "symfony/polyfill-mbstring": "^1.3",
+                "symfony/polyfill-php72": "^1.10"
+            },
+            "suggest": {
+                "ext-intl": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.17-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Intl\\Idn\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Laurent Bassin",
+                    "email": "laurent@bassin.info"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "idn",
+                "intl",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "time": "2020-05-12T16:47:27+00:00"
         },
         {
             "name": "symfony/polyfill-mbstring",
-            "version": "v1.10.0",
+            "version": "v1.17.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494"
+                "reference": "fa79b11539418b02fc5e1897267673ba2c19419c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c",
+                "reference": "fa79b11539418b02fc5e1897267673ba2c19419c",
                 "shasum": ""
             },
             "require": {
@@ -3883,7 +3866,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.17-dev"
                 }
             },
             "autoload": {
@@ -3917,29 +3900,142 @@
                 "portable",
                 "shim"
             ],
-            "time": "2018-09-21T13:07:52+00:00"
+            "time": "2020-05-12T16:47:27+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php72",
+            "version": "v1.17.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php72.git",
+                "reference": "f048e612a3905f34931127360bdd2def19a5e582"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582",
+                "reference": "f048e612a3905f34931127360bdd2def19a5e582",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.17-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php72\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "time": "2020-05-12T16:47:27+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php73",
+            "version": "v1.17.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php73.git",
+                "reference": "a760d8964ff79ab9bf057613a5808284ec852ccc"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a760d8964ff79ab9bf057613a5808284ec852ccc",
+                "reference": "a760d8964ff79ab9bf057613a5808284ec852ccc",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.17-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php73\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "time": "2020-05-12T16:47:27+00:00"
         },
         {
             "name": "symfony/process",
-            "version": "v3.4.23",
+            "version": "v5.0.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/process.git",
-                "reference": "009f8dda80930e89e8344a4e310b08f9ff07dd2e"
+                "reference": "3179f68dff5bad14d38c4114a1dab98030801fd7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/009f8dda80930e89e8344a4e310b08f9ff07dd2e",
-                "reference": "009f8dda80930e89e8344a4e310b08f9ff07dd2e",
+                "url": "https://api.github.com/repos/symfony/process/zipball/3179f68dff5bad14d38c4114a1dab98030801fd7",
+                "reference": "3179f68dff5bad14d38c4114a1dab98030801fd7",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8"
+                "php": "^7.2.5"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "5.0-dev"
                 }
             },
             "autoload": {
@@ -3966,29 +4062,88 @@
             ],
             "description": "Symfony Process Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-16T13:27:11+00:00"
+            "time": "2020-04-15T15:59:10+00:00"
+        },
+        {
+            "name": "symfony/service-contracts",
+            "version": "v2.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/service-contracts.git",
+                "reference": "144c5e51266b281231e947b51223ba14acf1a749"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/144c5e51266b281231e947b51223ba14acf1a749",
+                "reference": "144c5e51266b281231e947b51223ba14acf1a749",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2.5",
+                "psr/container": "^1.0"
+            },
+            "suggest": {
+                "symfony/service-implementation": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\Service\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to writing services",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "time": "2019-11-18T17:27:11+00:00"
         },
         {
             "name": "symfony/stopwatch",
-            "version": "v3.4.23",
+            "version": "v5.0.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/stopwatch.git",
-                "reference": "2a651c2645c10bbedd21170771f122d935e0dd58"
+                "reference": "a1d86d30d4522423afc998f32404efa34fcf5a73"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/2a651c2645c10bbedd21170771f122d935e0dd58",
-                "reference": "2a651c2645c10bbedd21170771f122d935e0dd58",
+                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/a1d86d30d4522423afc998f32404efa34fcf5a73",
+                "reference": "a1d86d30d4522423afc998f32404efa34fcf5a73",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8"
+                "php": "^7.2.5",
+                "symfony/service-contracts": "^1.0|^2"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "5.0-dev"
                 }
             },
             "autoload": {
@@ -4015,31 +4170,31 @@
             ],
             "description": "Symfony Stopwatch Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-16T09:39:14+00:00"
+            "time": "2020-03-27T16:56:45+00:00"
         },
         {
             "name": "symfony/yaml",
-            "version": "v3.4.23",
+            "version": "v4.4.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/yaml.git",
-                "reference": "57f1ce82c997f5a8701b89ef970e36bb657fd09c"
+                "reference": "b385dce1c0e9f839b384af90188638819433e252"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/57f1ce82c997f5a8701b89ef970e36bb657fd09c",
-                "reference": "57f1ce82c997f5a8701b89ef970e36bb657fd09c",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/b385dce1c0e9f839b384af90188638819433e252",
+                "reference": "b385dce1c0e9f839b384af90188638819433e252",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
+                "php": "^7.1.3",
                 "symfony/polyfill-ctype": "~1.8"
             },
             "conflict": {
                 "symfony/console": "<3.4"
             },
             "require-dev": {
-                "symfony/console": "~3.4|~4.0"
+                "symfony/console": "^3.4|^4.0|^5.0"
             },
             "suggest": {
                 "symfony/console": "For validating YAML files using the lint command"
@@ -4047,7 +4202,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -4074,20 +4229,20 @@
             ],
             "description": "Symfony Yaml Component",
             "homepage": "https://symfony.com",
-            "time": "2019-02-23T15:06:07+00:00"
+            "time": "2020-04-28T17:55:16+00:00"
         },
         {
             "name": "theseer/tokenizer",
-            "version": "1.1.0",
+            "version": "1.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/theseer/tokenizer.git",
-                "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b"
+                "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b",
-                "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b",
+                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
+                "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
                 "shasum": ""
             },
             "require": {
@@ -4114,36 +4269,33 @@
                 }
             ],
             "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
-            "time": "2017-04-07T12:08:54+00:00"
+            "time": "2019-06-13T22:48:21+00:00"
         },
         {
             "name": "webmozart/assert",
-            "version": "1.4.0",
+            "version": "1.8.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/webmozart/assert.git",
-                "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9"
+                "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9",
-                "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9",
+                "url": "https://api.github.com/repos/webmozart/assert/zipball/ab2cb0b3b559010b75981b1bdce728da3ee90ad6",
+                "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6",
                 "shasum": ""
             },
             "require": {
                 "php": "^5.3.3 || ^7.0",
                 "symfony/polyfill-ctype": "^1.8"
             },
+            "conflict": {
+                "vimeo/psalm": "<3.9.1"
+            },
             "require-dev": {
-                "phpunit/phpunit": "^4.6",
-                "sebastian/version": "^1.0.1"
+                "phpunit/phpunit": "^4.8.36 || ^7.5.13"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
                     "Webmozart\\Assert\\": "src/"
@@ -4165,7 +4317,7 @@
                 "check",
                 "validate"
             ],
-            "time": "2018-12-25T11:19:39+00:00"
+            "time": "2020-04-18T12:12:48+00:00"
         }
     ],
     "aliases": [],
@@ -4178,6 +4330,6 @@
     },
     "platform-dev": [],
     "platform-overrides": {
-        "php": "7.0.8"
+        "php": "7.2.28"
     }
 }
diff --git a/vendor/consolidation/site-process/CHANGELOG.md b/vendor/consolidation/site-process/CHANGELOG.md
index 7ca3bc0169..9219b057ea 100644
--- a/vendor/consolidation/site-process/CHANGELOG.md
+++ b/vendor/consolidation/site-process/CHANGELOG.md
@@ -1,5 +1,13 @@
 # Changelog
 
+### 2.1.0 - 2019/Sep/10
+
+* Added environment variables in aliases (#47)
+
+### 2.0.4 - 2019/Aug/12
+
+* Bugfix: Better error reporting when json output fails to parse. (#46)
+
 ### 2.0.3 - 2019/Jun/4
 
 * Bugfix: Use posix_isatty when available. (#43)
diff --git a/vendor/consolidation/site-process/README.md b/vendor/consolidation/site-process/README.md
index 19d4316850..9ee69d3e2d 100644
--- a/vendor/consolidation/site-process/README.md
+++ b/vendor/consolidation/site-process/README.md
@@ -13,7 +13,7 @@ A thin wrapper around the Symfony Process Component that allows applications to
 
 Site Process is a thin wrapper around the [Symfony Process Component](https://symfony.com/doc/3.4/components/process) that allows applications to use the [Site Alias library](https://github.com/consolidation/site-alias) to specify the target for a remote call.
 
-For comparison purposes, the `Process` obejct may be created to run an application on the local system using the standard Symfony Process Component API like so:
+For comparison purposes, the `Process` object may be created to run an application on the local system using the standard Symfony Process Component API like so:
 ```
 $process = new Process(['ls', '-lsa']);
 ```
diff --git a/vendor/consolidation/site-process/VERSION b/vendor/consolidation/site-process/VERSION
index 6acdb44289..7ec1d6db40 100644
--- a/vendor/consolidation/site-process/VERSION
+++ b/vendor/consolidation/site-process/VERSION
@@ -1 +1 @@
-2.0.3
\ No newline at end of file
+2.1.0
diff --git a/vendor/consolidation/site-process/appveyor.yml b/vendor/consolidation/site-process/appveyor.yml
index c19202f9be..e22a006c51 100644
--- a/vendor/consolidation/site-process/appveyor.yml
+++ b/vendor/consolidation/site-process/appveyor.yml
@@ -24,10 +24,11 @@ install:
   - git clone -q https://github.com/acquia/DevDesktopCommon.git #For tar, cksum, ...
   - SET PATH=%APPVEYOR_BUILD_FOLDER%/DevDesktopCommon/bintools-win/msys/bin;%PATH%
   - SET PATH=C:\Program Files\MySql\MySQL Server 5.7\bin\;%PATH%
+  - choco search php --exact --all-versions -r
   #Install PHP per https://blog.wyrihaximus.net/2016/11/running-php-unit-tests-on-windows-using-appveyor-and-chocolatey/
   - ps: Set-Service wuauserv -StartupType Manual
   - ps: appveyor-retry cinst --ignore-checksums -y php --version ((choco search php --exact --all-versions -r | select-string -pattern $Env:php_ver_target | Select-Object -first 1) -replace '[php|]','')
-  - cd c:\tools\php71
+  - cd c:\tools\php73
   - copy php.ini-production php.ini
 
   - echo extension_dir=ext >> php.ini
@@ -44,7 +45,7 @@ install:
   - echo extension=php_pdo_sqlite.dll >> php.ini
   - echo extension=php_pgsql.dll >> php.ini
   - echo extension=php_gd2.dll >> php.ini
-  - SET PATH=C:\tools\php71;%PATH%
+  - SET PATH=C:\tools\php73;%PATH%
   #Install Composer
   - cd %APPVEYOR_BUILD_FOLDER%
   #- appveyor DownloadFile https://getcomposer.org/composer.phar
@@ -61,4 +62,4 @@ test_script:
 # environment variables
 environment:
   global:
-      php_ver_target: 7.1
+      php_ver_target: 7.3
diff --git a/vendor/consolidation/site-process/src/ProcessBase.php b/vendor/consolidation/site-process/src/ProcessBase.php
index e4725c05bf..4db598f659 100644
--- a/vendor/consolidation/site-process/src/ProcessBase.php
+++ b/vendor/consolidation/site-process/src/ProcessBase.php
@@ -178,10 +178,14 @@ public function getOutputAsJson()
             // Revert of doubled backslashes.
             $output = preg_replace('#\\\\{2}#', '\\', $output);
         }
-        $output = $this->removeNonJsonJunk($output);
-        $json = json_decode($output, true);
+        $sanitizedOutput = $this->removeNonJsonJunk($output);
+        $json = json_decode($sanitizedOutput, true);
         if (!isset($json)) {
-            throw new \InvalidArgumentException('Unable to decode output into JSON.');
+            $msg = 'Unable to decode output into JSON: ' . json_last_error_msg();
+            if (json_last_error() == JSON_ERROR_SYNTAX) {
+                $msg .= "\n\n$output";
+            }
+            throw new \InvalidArgumentException($msg);
         }
         return $json;
     }
diff --git a/vendor/consolidation/site-process/src/SiteProcess.php b/vendor/consolidation/site-process/src/SiteProcess.php
index e54270ecc0..88ec35a4fe 100644
--- a/vendor/consolidation/site-process/src/SiteProcess.php
+++ b/vendor/consolidation/site-process/src/SiteProcess.php
@@ -8,6 +8,7 @@
 use Consolidation\SiteProcess\Transport\SshTransport;
 use Consolidation\SiteProcess\Transport\TransportInterface;
 use Consolidation\Config\Util\Interpolator;
+use Consolidation\SiteProcess\Util\Shell;
 use Consolidation\SiteProcess\Util\ShellOperatorInterface;
 use Consolidation\SiteProcess\Util\Escape;
 
@@ -125,6 +126,11 @@ protected function processArgs()
             $this->optionsPassedAsArgs
         );
 
+        // Set environment variables if needed.
+        if ($this->siteAlias->has('env-vars')) {
+            $selectedArgs = $this->addEnvVars($this->siteAlias->get('env-vars'), $selectedArgs);
+        }
+
         // Ask the transport to drop in a 'cd' if needed.
         if ($this->getWorkingDirectory()) {
             $selectedArgs = $transport->addChdir($this->getWorkingDirectory(), $selectedArgs);
@@ -138,6 +144,21 @@ protected function processArgs()
         return $transport->wrap($processedArgs);
     }
 
+    /**
+     * Wrap the command/args in an env call.
+     * @todo Check if this needs to depend on linux/win.
+     * @todo Check if this needs to be delegated to transport.
+     */
+    public function addEnvVars($envVars, $args)
+    {
+        $envArgs = ['env'];
+        foreach ($envVars as $key => $value) {
+            $envArgs[] = Escape::forSite($this->siteAlias, $key) . '='
+            . Escape::forSite($this->siteAlias, $value);
+        }
+        return array_merge($envArgs, $args);
+    }
+
     public function setTransport($transport)
     {
         $this->transport = $transport;
diff --git a/vendor/consolidation/site-process/tests/SiteProcessTest.php b/vendor/consolidation/site-process/tests/SiteProcessTest.php
index 04228223bc..a207d8e86d 100644
--- a/vendor/consolidation/site-process/tests/SiteProcessTest.php
+++ b/vendor/consolidation/site-process/tests/SiteProcessTest.php
@@ -179,6 +179,17 @@ public function siteProcessTestValues()
                 ['exclude' => 'vendor'],
                 NULL,
             ],
+
+            [
+                "env foo=bar baz=zong drush status",
+                false,
+                false,
+                ['env-vars' => ['foo' => 'bar', 'baz' => 'zong']],
+                ['drush', 'status'],
+                [],
+                [],
+                NULL,
+            ],
         ];
     }
 
@@ -227,7 +238,7 @@ public function siteProcessJsonTestValues()
                 'LINUX',
             ],
             [
-                'Unable to decode output into JSON.',
+                "Unable to decode output into JSON: Syntax error\n\nNo json data here",
                 'No json data here',
                 NULL,
             ],
diff --git a/vendor/cweagans/composer-patches/README.md b/vendor/cweagans/composer-patches/README.md
index ff09eb60e0..972694028d 100644
--- a/vendor/cweagans/composer-patches/README.md
+++ b/vendor/cweagans/composer-patches/README.md
@@ -66,7 +66,7 @@ Then your `composer.patches.json` should look like this:
 
 ## Allowing patches to be applied from dependencies
 
-If you want your project to accept patches from dependencies, you must have the following in your composer file:
+If your project doesn't supply any patches of its own, but you still want to accept patches from dependencies, you must have the following in your composer file:
 
 ```json
 {
@@ -79,6 +79,8 @@ If you want your project to accept patches from dependencies, you must have the
 }
 ```
 
+If you do have a `patches` section in your composer file that defines your own set of patches then the `enable-patching` setting will be ignored and patches from dependencies will always be applied.
+
 ## Ignoring patches
 
 There may be situations in which you want to ignore a patch supplied by a dependency. For example:
@@ -115,6 +117,21 @@ There may be situations in which you want to ignore a patch supplied by a depend
 }
 ```
 
+## Allowing to force the patch level (-pX)
+
+Some situations require to force the patchLevel used to apply patches on a particular package.
+Its useful for packages like drupal/core which packages only a subdir of the original upstream project on which patches are based.
+
+```json
+{
+  "extra": {
+    "patchLevel": {
+      "drupal/core": "-p2"
+    }
+  }
+}
+```
+
 ## Using patches from HTTP URLs
 
 Composer [blocks](https://getcomposer.org/doc/06-config.md#secure-http) you from downloading anything from HTTP URLs, you can disable this for your project by adding a `secure-http` setting in the config section of your `composer.json`. Note that the `config` section should be under the root of your `composer.json`.
diff --git a/vendor/cweagans/composer-patches/composer.json b/vendor/cweagans/composer-patches/composer.json
index 1cdcd76625..1565b02f5c 100644
--- a/vendor/cweagans/composer-patches/composer.json
+++ b/vendor/cweagans/composer-patches/composer.json
@@ -15,10 +15,10 @@
   ],
   "require": {
     "php": ">=5.3.0",
-    "composer-plugin-api": "^1.0"
+    "composer-plugin-api": "^1.0 || ^2.0"
   },
   "require-dev": {
-    "composer/composer": "~1.0",
+    "composer/composer": "~1.0 || ~2.0",
     "phpunit/phpunit": "~4.6"
   },
   "autoload": {
diff --git a/vendor/cweagans/composer-patches/composer.lock b/vendor/cweagans/composer-patches/composer.lock
index 2ca41b42d1..d5fe1777cc 100644
--- a/vendor/cweagans/composer-patches/composer.lock
+++ b/vendor/cweagans/composer-patches/composer.lock
@@ -1,47 +1,116 @@
 {
     "_readme": [
         "This file locks the dependencies of your project to a known state",
-        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
+        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "hash": "a2cd6826c202b7ebefe3050efc2a7b7f",
-    "content-hash": "0ed9361502c0f5f22a5b440c16640193",
+    "content-hash": "4a5c841252204815536a37cad51d347b",
     "packages": [],
     "packages-dev": [
+        {
+            "name": "composer/ca-bundle",
+            "version": "dev-master",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/composer/ca-bundle.git",
+                "reference": "95c63ab2117a72f48f5a55da9740a3273d45b7fd"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/composer/ca-bundle/zipball/95c63ab2117a72f48f5a55da9740a3273d45b7fd",
+                "reference": "95c63ab2117a72f48f5a55da9740a3273d45b7fd",
+                "shasum": ""
+            },
+            "require": {
+                "ext-openssl": "*",
+                "ext-pcre": "*",
+                "php": "^5.3.2 || ^7.0 || ^8.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8",
+                "psr/log": "^1.0",
+                "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Composer\\CaBundle\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be",
+                    "homepage": "http://seld.be"
+                }
+            ],
+            "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
+            "keywords": [
+                "cabundle",
+                "cacert",
+                "certificate",
+                "ssl",
+                "tls"
+            ],
+            "funding": [
+                {
+                    "url": "https://packagist.com",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-04-08T08:27:21+00:00"
+        },
         {
             "name": "composer/composer",
             "version": "dev-master",
             "source": {
                 "type": "git",
                 "url": "https://github.com/composer/composer.git",
-                "reference": "a54f84f05f915c6d42bed94de0cdcb4406a4707b"
+                "reference": "870fdc59dfcffe0bd2d43ca2de4235761d0dec7a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/composer/zipball/f2d606ae0c705907d8bfa1c6f884bced1255b827",
-                "reference": "a54f84f05f915c6d42bed94de0cdcb4406a4707b",
+                "url": "https://api.github.com/repos/composer/composer/zipball/870fdc59dfcffe0bd2d43ca2de4235761d0dec7a",
+                "reference": "870fdc59dfcffe0bd2d43ca2de4235761d0dec7a",
                 "shasum": ""
             },
             "require": {
-                "composer/semver": "^1.0",
-                "composer/spdx-licenses": "^1.0",
-                "justinrainbow/json-schema": "^1.4.4",
-                "php": ">=5.3.2",
-                "seld/cli-prompt": "~1.0",
-                "seld/jsonlint": "~1.0",
-                "seld/phar-utils": "~1.0",
-                "symfony/console": "~2.5",
-                "symfony/filesystem": "~2.5",
-                "symfony/finder": "~2.2",
-                "symfony/process": "~2.1"
+                "composer/ca-bundle": "^1.0",
+                "composer/semver": "^3.0",
+                "composer/spdx-licenses": "^1.2",
+                "composer/xdebug-handler": "^1.1",
+                "justinrainbow/json-schema": "^5.2.10",
+                "php": "^5.3.2 || ^7.0 || ^8.0",
+                "psr/log": "^1.0",
+                "react/promise": "^1.2 || ^2.7",
+                "seld/jsonlint": "^1.4",
+                "seld/phar-utils": "^1.0",
+                "symfony/console": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0",
+                "symfony/filesystem": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0",
+                "symfony/finder": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0",
+                "symfony/process": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.5|^5.0.5",
-                "phpunit/phpunit-mock-objects": "2.3.0|~3.0"
+                "phpspec/prophecy": "^1.10",
+                "symfony/phpunit-bridge": "^4.2 || ^5.0"
             },
             "suggest": {
                 "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
-                "ext-zip": "Enabling the zip extension allows you to unzip archives, and allows gzip compression of all internet traffic"
+                "ext-zip": "Enabling the zip extension allows you to unzip archives",
+                "ext-zlib": "Allow gzip compression of HTTP requests"
             },
             "bin": [
                 "bin/composer"
@@ -49,12 +118,12 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0-dev"
+                    "dev-master": "2.0-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Composer": "src/"
+                "psr-4": {
+                    "Composer\\": "src/Composer"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -65,48 +134,62 @@
                 {
                     "name": "Nils Adermann",
                     "email": "naderman@naderman.de",
-                    "homepage": "http://www.naderman.de"
+                    "homepage": "https://www.naderman.de"
                 },
                 {
                     "name": "Jordi Boggiano",
                     "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
+                    "homepage": "https://seld.be"
                 }
             ],
-            "description": "Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere.",
+            "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.",
             "homepage": "https://getcomposer.org/",
             "keywords": [
                 "autoload",
                 "dependency",
                 "package"
             ],
-            "time": "2015-10-13 13:09:04"
+            "funding": [
+                {
+                    "url": "https://packagist.com",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/composer",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-15T15:02:16+00:00"
         },
         {
             "name": "composer/semver",
-            "version": "1.0.0",
+            "version": "dev-master",
             "source": {
                 "type": "git",
                 "url": "https://github.com/composer/semver.git",
-                "reference": "d0e1ccc6d44ab318b758d709e19176037da6b1ba"
+                "reference": "00915994bb1de62e750ae279669c9c5a57379957"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/semver/zipball/d0e1ccc6d44ab318b758d709e19176037da6b1ba",
-                "reference": "d0e1ccc6d44ab318b758d709e19176037da6b1ba",
+                "url": "https://api.github.com/repos/composer/semver/zipball/00915994bb1de62e750ae279669c9c5a57379957",
+                "reference": "00915994bb1de62e750ae279669c9c5a57379957",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.2"
+                "php": "^5.3.2 || ^7.0 || ^8.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.5",
-                "phpunit/phpunit-mock-objects": "~2.3"
+                "phpstan/phpstan": "^0.12.19",
+                "symfony/phpunit-bridge": "^4.2 || ^5"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "0.1-dev"
+                    "dev-master": "3.x-dev"
                 }
             },
             "autoload": {
@@ -119,10 +202,6 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Rob Bast",
-                    "email": "rob.bast@gmail.com"
-                },
                 {
                     "name": "Nils Adermann",
                     "email": "naderman@naderman.de",
@@ -132,6 +211,11 @@
                     "name": "Jordi Boggiano",
                     "email": "j.boggiano@seld.be",
                     "homepage": "http://seld.be"
+                },
+                {
+                    "name": "Rob Bast",
+                    "email": "rob.bast@gmail.com",
+                    "homepage": "http://robbast.nl"
                 }
             ],
             "description": "Semver library that offers utilities, version constraint parsing and validation.",
@@ -141,7 +225,21 @@
                 "validation",
                 "versioning"
             ],
-            "time": "2015-09-21 09:42:36"
+            "funding": [
+                {
+                    "url": "https://packagist.com",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/composer",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-05-31T11:44:06+00:00"
         },
         {
             "name": "composer/spdx-licenses",
@@ -149,20 +247,19 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/composer/spdx-licenses.git",
-                "reference": "b2dbc76d1c3f81f33857cdd49c0be6ce7b87897d"
+                "reference": "6946f785871e2314c60b4524851f3702ea4f2223"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/022fc25ca664f612b1e7007e0d87642ef489f000",
-                "reference": "b2dbc76d1c3f81f33857cdd49c0be6ce7b87897d",
+                "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/6946f785871e2314c60b4524851f3702ea4f2223",
+                "reference": "6946f785871e2314c60b4524851f3702ea4f2223",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.2"
+                "php": "^5.3.2 || ^7.0 || ^8.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.5",
-                "phpunit/phpunit-mock-objects": "~2.3"
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 7"
             },
             "type": "library",
             "extra": {
@@ -202,7 +299,79 @@
                 "spdx",
                 "validator"
             ],
-            "time": "2015-10-05 11:33:06"
+            "funding": [
+                {
+                    "url": "https://packagist.com",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/composer",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-15T15:35:07+00:00"
+        },
+        {
+            "name": "composer/xdebug-handler",
+            "version": "1.4.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/composer/xdebug-handler.git",
+                "reference": "fa2aaf99e2087f013a14f7432c1cd2dd7d8f1f51"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/fa2aaf99e2087f013a14f7432c1cd2dd7d8f1f51",
+                "reference": "fa2aaf99e2087f013a14f7432c1cd2dd7d8f1f51",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.2 || ^7.0 || ^8.0",
+                "psr/log": "^1.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Composer\\XdebugHandler\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "John Stevenson",
+                    "email": "john-stevenson@blueyonder.co.uk"
+                }
+            ],
+            "description": "Restarts a process without Xdebug.",
+            "keywords": [
+                "Xdebug",
+                "performance"
+            ],
+            "funding": [
+                {
+                    "url": "https://packagist.com",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/composer",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-06-04T11:16:35+00:00"
         },
         {
             "name": "doctrine/instantiator",
@@ -256,29 +425,29 @@
                 "constructor",
                 "instantiate"
             ],
-            "time": "2015-06-14 21:17:01"
+            "time": "2015-06-14T21:17:01+00:00"
         },
         {
             "name": "justinrainbow/json-schema",
-            "version": "1.5.0",
+            "version": "5.x-dev",
             "source": {
                 "type": "git",
                 "url": "https://github.com/justinrainbow/json-schema.git",
-                "reference": "a4bee9f4b344b66e0a0d96c7afae1e92edf385fe"
+                "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/a4bee9f4b344b66e0a0d96c7afae1e92edf385fe",
-                "reference": "a4bee9f4b344b66e0a0d96c7afae1e92edf385fe",
+                "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b",
+                "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.2"
+                "php": ">=5.3.3"
             },
             "require-dev": {
-                "json-schema/json-schema-test-suite": "1.1.0",
-                "phpdocumentor/phpdocumentor": "~2",
-                "phpunit/phpunit": "~3.7"
+                "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1",
+                "json-schema/json-schema-test-suite": "1.2.0",
+                "phpunit/phpunit": "^4.8.35"
             },
             "bin": [
                 "bin/validate-json"
@@ -286,7 +455,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.4.x-dev"
+                    "dev-master": "5.0.x-dev"
                 }
             },
             "autoload": {
@@ -296,7 +465,7 @@
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
@@ -322,7 +491,7 @@
                 "json",
                 "schema"
             ],
-            "time": "2015-09-08 22:28:04"
+            "time": "2020-05-27T16:41:55+00:00"
         },
         {
             "name": "phpdocumentor/reflection-docblock",
@@ -371,7 +540,7 @@
                     "email": "mike.vanriel@naenius.com"
                 }
             ],
-            "time": "2015-02-03 12:10:50"
+            "time": "2015-02-03T12:10:50+00:00"
         },
         {
             "name": "phpspec/prophecy",
@@ -383,7 +552,7 @@
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/b02221e42163be673f9b44a0bc92a8b4907a7c6d",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4f9b1eaf0a7da77c362f8d91cbc68ab1f4718d62",
                 "reference": "4f9b1eaf0a7da77c362f8d91cbc68ab1f4718d62",
                 "shasum": ""
             },
@@ -431,7 +600,7 @@
                 "spy",
                 "stub"
             ],
-            "time": "2015-09-22 14:49:23"
+            "time": "2015-09-22T14:49:23+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",
@@ -493,7 +662,7 @@
                 "testing",
                 "xunit"
             ],
-            "time": "2015-10-06 15:47:00"
+            "time": "2015-10-06T15:47:00+00:00"
         },
         {
             "name": "phpunit/php-file-iterator",
@@ -540,7 +709,7 @@
                 "filesystem",
                 "iterator"
             ],
-            "time": "2015-06-21 13:08:43"
+            "time": "2015-06-21T13:08:43+00:00"
         },
         {
             "name": "phpunit/php-text-template",
@@ -581,7 +750,7 @@
             "keywords": [
                 "template"
             ],
-            "time": "2015-06-21 13:50:34"
+            "time": "2015-06-21T13:50:34+00:00"
         },
         {
             "name": "phpunit/php-timer",
@@ -622,7 +791,7 @@
             "keywords": [
                 "timer"
             ],
-            "time": "2015-06-21 08:01:12"
+            "time": "2015-06-21T08:01:12+00:00"
         },
         {
             "name": "phpunit/php-token-stream",
@@ -671,7 +840,7 @@
             "keywords": [
                 "tokenizer"
             ],
-            "time": "2015-09-23 14:46:55"
+            "time": "2015-09-23T14:46:55+00:00"
         },
         {
             "name": "phpunit/phpunit",
@@ -743,7 +912,7 @@
                 "testing",
                 "xunit"
             ],
-            "time": "2015-10-14 13:49:40"
+            "time": "2015-10-14T13:49:40+00:00"
         },
         {
             "name": "phpunit/phpunit-mock-objects",
@@ -799,7 +968,150 @@
                 "mock",
                 "xunit"
             ],
-            "time": "2015-10-02 06:51:40"
+            "abandoned": true,
+            "time": "2015-10-02T06:51:40+00:00"
+        },
+        {
+            "name": "psr/container",
+            "version": "dev-master",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/container.git",
+                "reference": "fc1bc363ecf887921e3897c7b1dad3587ae154eb"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/container/zipball/fc1bc363ecf887921e3897c7b1dad3587ae154eb",
+                "reference": "fc1bc363ecf887921e3897c7b1dad3587ae154eb",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Container\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common Container Interface (PHP FIG PSR-11)",
+            "homepage": "https://github.com/php-fig/container",
+            "keywords": [
+                "PSR-11",
+                "container",
+                "container-interface",
+                "container-interop",
+                "psr"
+            ],
+            "time": "2019-10-04T14:07:35+00:00"
+        },
+        {
+            "name": "psr/log",
+            "version": "dev-master",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/log.git",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Log\\": "Psr/Log/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for logging libraries",
+            "homepage": "https://github.com/php-fig/log",
+            "keywords": [
+                "log",
+                "psr",
+                "psr-3"
+            ],
+            "time": "2020-03-23T09:12:05+00:00"
+        },
+        {
+            "name": "react/promise",
+            "version": "2.x-dev",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/reactphp/promise.git",
+                "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/reactphp/promise/zipball/f3cff96a19736714524ca0dd1d4130de73dbbbc4",
+                "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.4.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^7.0 || ^6.5 || ^5.7 || ^4.8.36"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "React\\Promise\\": "src/"
+                },
+                "files": [
+                    "src/functions_include.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jan Sorgalla",
+                    "email": "jsorgalla@gmail.com"
+                }
+            ],
+            "description": "A lightweight implementation of CommonJS Promises/A for PHP",
+            "keywords": [
+                "promise",
+                "promises"
+            ],
+            "time": "2020-05-12T15:16:56+00:00"
         },
         {
             "name": "sebastian/comparator",
@@ -863,7 +1175,7 @@
                 "compare",
                 "equality"
             ],
-            "time": "2015-07-26 15:48:44"
+            "time": "2015-07-26T15:48:44+00:00"
         },
         {
             "name": "sebastian/diff",
@@ -875,7 +1187,7 @@
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e",
+                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/6899b3e33bfbd386d88b5eea5f65f563e8793051",
                 "reference": "6899b3e33bfbd386d88b5eea5f65f563e8793051",
                 "shasum": ""
             },
@@ -915,7 +1227,7 @@
             "keywords": [
                 "diff"
             ],
-            "time": "2015-06-22 14:15:55"
+            "time": "2015-06-22T14:15:55+00:00"
         },
         {
             "name": "sebastian/environment",
@@ -965,7 +1277,7 @@
                 "environment",
                 "hhvm"
             ],
-            "time": "2015-08-03 06:14:51"
+            "time": "2015-08-03T06:14:51+00:00"
         },
         {
             "name": "sebastian/exporter",
@@ -1032,7 +1344,7 @@
                 "export",
                 "exporter"
             ],
-            "time": "2015-08-09 04:23:41"
+            "time": "2015-08-09T04:23:41+00:00"
         },
         {
             "name": "sebastian/global-state",
@@ -1083,7 +1395,7 @@
             "keywords": [
                 "global state"
             ],
-            "time": "2015-10-12 03:26:01"
+            "time": "2015-10-12T03:26:01+00:00"
         },
         {
             "name": "sebastian/recursion-context",
@@ -1095,7 +1407,7 @@
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/7ff5b1b3dcc55b8ab8ae61ef99d4730940856ee7",
+                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/994d4a811bafe801fb06dccbee797863ba2792ba",
                 "reference": "994d4a811bafe801fb06dccbee797863ba2792ba",
                 "shasum": ""
             },
@@ -1136,7 +1448,7 @@
             ],
             "description": "Provides functionality to recursively process PHP variables",
             "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
-            "time": "2015-06-21 08:04:50"
+            "time": "2015-06-21T08:04:50+00:00"
         },
         {
             "name": "sebastian/version",
@@ -1171,72 +1483,27 @@
             ],
             "description": "Library that helps with managing the version number of Git-hosted PHP projects",
             "homepage": "https://github.com/sebastianbergmann/version",
-            "time": "2015-06-21 13:59:46"
-        },
-        {
-            "name": "seld/cli-prompt",
-            "version": "dev-master",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Seldaek/cli-prompt.git",
-                "reference": "fe114c7a6ac5cb0ce76932ae4017024d9842a49c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/cli-prompt/zipball/b27db1514f7d7bb7a366ad95d4eb2b17140a0691",
-                "reference": "fe114c7a6ac5cb0ce76932ae4017024d9842a49c",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Seld\\CliPrompt\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be"
-                }
-            ],
-            "description": "Allows you to prompt for user input on the command line, and optionally hide the characters they type",
-            "keywords": [
-                "cli",
-                "console",
-                "hidden",
-                "input",
-                "prompt"
-            ],
-            "time": "2015-04-30 20:24:49"
+            "time": "2015-06-21T13:59:46+00:00"
         },
         {
             "name": "seld/jsonlint",
-            "version": "1.3.1",
+            "version": "1.8.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/Seldaek/jsonlint.git",
-                "reference": "863ae85c6d3ef60ca49cb12bd051c4a0648c40c4"
+                "reference": "ff2aa5420bfbc296cf6a0bc785fa5b35736de7c1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/863ae85c6d3ef60ca49cb12bd051c4a0648c40c4",
-                "reference": "863ae85c6d3ef60ca49cb12bd051c4a0648c40c4",
+                "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/ff2aa5420bfbc296cf6a0bc785fa5b35736de7c1",
+                "reference": "ff2aa5420bfbc296cf6a0bc785fa5b35736de7c1",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.0"
+                "php": "^5.3 || ^7.0 || ^8.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
             },
             "bin": [
                 "bin/jsonlint"
@@ -1265,20 +1532,30 @@
                 "parser",
                 "validator"
             ],
-            "time": "2015-01-04 21:18:15"
-        },
-        {
-            "name": "seld/phar-utils",
-            "version": "dev-master",
+            "funding": [
+                {
+                    "url": "https://github.com/Seldaek",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-04-30T19:05:18+00:00"
+        },
+        {
+            "name": "seld/phar-utils",
+            "version": "dev-master",
             "source": {
                 "type": "git",
                 "url": "https://github.com/Seldaek/phar-utils.git",
-                "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a"
+                "reference": "8674b1d84ffb47cc59a101f5d5a3b61e87d23796"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/7009b5139491975ef6486545a39f3e6dad5ac30a",
-                "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a",
+                "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/8674b1d84ffb47cc59a101f5d5a3b61e87d23796",
+                "reference": "8674b1d84ffb47cc59a101f5d5a3b61e87d23796",
                 "shasum": ""
             },
             "require": {
@@ -1307,47 +1584,70 @@
             ],
             "description": "PHAR file format utilities, for when PHP phars you up",
             "keywords": [
-                "phra"
+                "phar"
             ],
-            "time": "2015-10-13 18:44:15"
+            "time": "2020-07-07T18:42:57+00:00"
         },
         {
             "name": "symfony/console",
-            "version": "2.8.x-dev",
+            "version": "dev-master",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "89a795226477f66745e8ea10415e769304114920"
+                "reference": "e4a70bd8c5a4382630197b7b87910b3fc0e6b526"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/56cc5caf051189720b8de974e4746090aaa10d44",
-                "reference": "89a795226477f66745e8ea10415e769304114920",
+                "url": "https://api.github.com/repos/symfony/console/zipball/e4a70bd8c5a4382630197b7b87910b3fc0e6b526",
+                "reference": "e4a70bd8c5a4382630197b7b87910b3fc0e6b526",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.9"
+                "php": ">=7.2.5",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/polyfill-php73": "^1.8",
+                "symfony/polyfill-php80": "^1.15",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/string": "^5.1"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<4.4",
+                "symfony/dotenv": "<5.1",
+                "symfony/event-dispatcher": "<4.4",
+                "symfony/lock": "<4.4",
+                "symfony/process": "<4.4"
+            },
+            "provide": {
+                "psr/log-implementation": "1.0"
             },
             "require-dev": {
                 "psr/log": "~1.0",
-                "symfony/event-dispatcher": "~2.1|~3.0.0",
-                "symfony/process": "~2.1|~3.0.0"
+                "symfony/config": "^4.4|^5.0",
+                "symfony/dependency-injection": "^4.4|^5.0",
+                "symfony/event-dispatcher": "^4.4|^5.0",
+                "symfony/lock": "^4.4|^5.0",
+                "symfony/process": "^4.4|^5.0",
+                "symfony/var-dumper": "^4.4|^5.0"
             },
             "suggest": {
                 "psr/log": "For using the console logger",
                 "symfony/event-dispatcher": "",
+                "symfony/lock": "",
                 "symfony/process": ""
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.8-dev"
+                    "dev-master": "5.2-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
                     "Symfony\\Component\\Console\\": ""
-                }
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -1365,35 +1665,59 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "https://symfony.com",
-            "time": "2015-10-12 10:31:17"
+            "keywords": [
+                "cli",
+                "command line",
+                "console",
+                "terminal"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-06T13:25:45+00:00"
         },
         {
             "name": "symfony/filesystem",
-            "version": "2.8.x-dev",
+            "version": "dev-master",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/filesystem.git",
-                "reference": "fc3fe52fef85e1f3e7775ffad92539e16c20e0af"
+                "reference": "e7550993849f986f01a9161b302d4aed8d4aab0a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/65cb36b6539b1d446527d60457248f30d045464d",
-                "reference": "fc3fe52fef85e1f3e7775ffad92539e16c20e0af",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/e7550993849f986f01a9161b302d4aed8d4aab0a",
+                "reference": "e7550993849f986f01a9161b302d4aed8d4aab0a",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.9"
+                "php": ">=7.2.5",
+                "symfony/polyfill-ctype": "~1.8"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.8-dev"
+                    "dev-master": "5.2-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
                     "Symfony\\Component\\Filesystem\\": ""
-                }
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -1411,35 +1735,52 @@
             ],
             "description": "Symfony Filesystem Component",
             "homepage": "https://symfony.com",
-            "time": "2015-10-11 08:29:26"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-05-30T20:38:10+00:00"
         },
         {
             "name": "symfony/finder",
-            "version": "2.8.x-dev",
+            "version": "dev-master",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "dcd5aaba34ca332abb7f33ec554ebd4d829cb202"
+                "reference": "2a63a45741144325f84d28ea1e67bc1b669b1748"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/877bb4b16ea573cc8c024e9590888fcf7eb7e0f7",
-                "reference": "dcd5aaba34ca332abb7f33ec554ebd4d829cb202",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/2a63a45741144325f84d28ea1e67bc1b669b1748",
+                "reference": "2a63a45741144325f84d28ea1e67bc1b669b1748",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.9"
+                "php": ">=7.2.5"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.8-dev"
+                    "dev-master": "5.2-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
                     "Symfony\\Component\\Finder\\": ""
-                }
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -1457,35 +1798,521 @@
             ],
             "description": "Symfony Finder Component",
             "homepage": "https://symfony.com",
-            "time": "2015-10-11 08:29:26"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-05-20T17:44:07+00:00"
+        },
+        {
+            "name": "symfony/polyfill-ctype",
+            "version": "dev-master",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-ctype.git",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "ext-ctype": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Ctype\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Gert de Pagter",
+                    "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for ctype functions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "ctype",
+                "polyfill",
+                "portable"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-intl-grapheme",
+            "version": "dev-master",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
+                "reference": "b740103edbdcc39602239ee8860f0f45a8eb9aa5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b740103edbdcc39602239ee8860f0f45a8eb9aa5",
+                "reference": "b740103edbdcc39602239ee8860f0f45a8eb9aa5",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "ext-intl": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for intl's grapheme_* functions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "grapheme",
+                "intl",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-intl-normalizer",
+            "version": "dev-master",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
+                "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e",
+                "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "ext-intl": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for intl's Normalizer class and related functions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "intl",
+                "normalizer",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-mbstring",
+            "version": "dev-master",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-mbstring.git",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "ext-mbstring": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Mbstring\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for the Mbstring extension",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "mbstring",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php73",
+            "version": "dev-master",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php73.git",
+                "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
+                "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php73\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php80",
+            "version": "dev-master",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php80.git",
+                "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/d87d5766cbf48d72388a9f6b85f280c8ad51f981",
+                "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.0.8"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php80\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Ion Bazan",
+                    "email": "ion.bazan@gmail.com"
+                },
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
             "name": "symfony/process",
-            "version": "2.8.x-dev",
+            "version": "dev-master",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/process.git",
-                "reference": "4e1daf58b375ea7c506d525dc7801df1c9a6ebbd"
+                "reference": "d158a452d952049e0e55b7cfe5f360c973edc57c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/7dedd5b60550f33dca16dd7e94ef8aca8b67bbfe",
-                "reference": "4e1daf58b375ea7c506d525dc7801df1c9a6ebbd",
+                "url": "https://api.github.com/repos/symfony/process/zipball/d158a452d952049e0e55b7cfe5f360c973edc57c",
+                "reference": "d158a452d952049e0e55b7cfe5f360c973edc57c",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.9"
+                "php": ">=7.2.5",
+                "symfony/polyfill-php80": "^1.15"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.8-dev"
+                    "dev-master": "5.2-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
                     "Symfony\\Component\\Process\\": ""
-                }
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -1503,7 +2330,182 @@
             ],
             "description": "Symfony Process Component",
             "homepage": "https://symfony.com",
-            "time": "2015-10-11 08:29:26"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-06T13:25:45+00:00"
+        },
+        {
+            "name": "symfony/service-contracts",
+            "version": "dev-master",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/service-contracts.git",
+                "reference": "58c7475e5457c5492c26cc740cc0ad7464be9442"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/58c7475e5457c5492c26cc740cc0ad7464be9442",
+                "reference": "58c7475e5457c5492c26cc740cc0ad7464be9442",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5",
+                "psr/container": "^1.0"
+            },
+            "suggest": {
+                "symfony/service-implementation": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.1-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\Service\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to writing services",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-06T13:23:11+00:00"
+        },
+        {
+            "name": "symfony/string",
+            "version": "dev-master",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/string.git",
+                "reference": "b7914561c03f8d78f83eec3ec4502adbdc343c48"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/string/zipball/b7914561c03f8d78f83eec3ec4502adbdc343c48",
+                "reference": "b7914561c03f8d78f83eec3ec4502adbdc343c48",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5",
+                "symfony/polyfill-ctype": "~1.8",
+                "symfony/polyfill-intl-grapheme": "~1.0",
+                "symfony/polyfill-intl-normalizer": "~1.0",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/polyfill-php80": "~1.15"
+            },
+            "require-dev": {
+                "symfony/error-handler": "^4.4|^5.0",
+                "symfony/http-client": "^4.4|^5.0",
+                "symfony/translation-contracts": "^1.1|^2",
+                "symfony/var-exporter": "^4.4|^5.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.2-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\String\\": ""
+                },
+                "files": [
+                    "Resources/functions.php"
+                ],
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony String component",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "grapheme",
+                "i18n",
+                "string",
+                "unicode",
+                "utf-8",
+                "utf8"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-08T08:28:10+00:00"
         },
         {
             "name": "symfony/yaml",
@@ -1549,7 +2551,7 @@
             ],
             "description": "Symfony Yaml Component",
             "homepage": "https://symfony.com",
-            "time": "2015-10-13 16:01:35"
+            "time": "2015-10-13T16:01:35+00:00"
         }
     ],
     "aliases": [],
@@ -1558,7 +2560,9 @@
     "prefer-stable": false,
     "prefer-lowest": false,
     "platform": {
-        "php": ">=5.3.0"
+        "php": ">=5.3.0",
+        "composer-plugin-api": "^1.0 || ^2.0"
     },
-    "platform-dev": []
+    "platform-dev": [],
+    "plugin-api-version": "1.1.0"
 }
diff --git a/vendor/cweagans/composer-patches/src/Patches.php b/vendor/cweagans/composer-patches/src/Patches.php
index 70c5b83421..0e36c7ff35 100644
--- a/vendor/cweagans/composer-patches/src/Patches.php
+++ b/vendor/cweagans/composer-patches/src/Patches.php
@@ -115,7 +115,7 @@ public function checkPatches(Event $event) {
           $this->installedPatches[$package->getName()] = $extra['patches'];
         }
         $patches = isset($extra['patches']) ? $extra['patches'] : array();
-        $tmp_patches = array_merge_recursive($tmp_patches, $patches);
+        $tmp_patches = $this->arrayMergeRecursiveDistinct($tmp_patches, $patches);
       }
 
       if ($tmp_patches == FALSE) {
@@ -129,7 +129,7 @@ public function checkPatches(Event $event) {
           $package_name = $package->getName();
           $extra = $package->getExtra();
           $has_patches = isset($tmp_patches[$package_name]);
-          $has_applied_patches = isset($extra['patches_applied']);
+          $has_applied_patches = isset($extra['patches_applied']) && count($extra['patches_applied']) > 0;
           if (($has_patches && !$has_applied_patches)
             || (!$has_patches && $has_applied_patches)
             || ($has_patches && $has_applied_patches && $tmp_patches[$package_name] !== $extra['patches_applied'])) {
@@ -176,7 +176,7 @@ public function gatherPatches(PackageEvent $event) {
     $operations = $event->getOperations();
     $this->io->write('<info>Gathering patches for dependencies. This might take a minute.</info>');
     foreach ($operations as $operation) {
-      if ($operation->getJobType() == 'install' || $operation->getJobType() == 'update') {
+      if ($operation instanceof InstallOperation || $operation instanceof UpdateOperation) {
         $package = $this->getPackageFromOperation($operation);
         $extra = $package->getExtra();
         if (isset($extra['patches'])) {
@@ -198,7 +198,7 @@ public function gatherPatches(PackageEvent $event) {
 
     // Merge installed patches from dependencies that did not receive an update.
     foreach ($this->installedPatches as $patches) {
-      $this->patches = array_merge_recursive($this->patches, $patches);
+      $this->patches = $this->arrayMergeRecursiveDistinct($this->patches, $patches);
     }
 
     // If we're in verbose mode, list the projects we're going to patch.
@@ -369,7 +369,14 @@ protected function getAndApplyPatch(RemoteFilesystem $downloader, $install_path,
 
       // Download file from remote filesystem to this location.
       $hostname = parse_url($patch_url, PHP_URL_HOST);
-      $downloader->copy($hostname, $patch_url, $filename, FALSE);
+
+      try {
+        $downloader->copy($hostname, $patch_url, $filename, false);
+      } catch (\Exception $e) {
+        // In case of an exception, retry once as the download might
+        // have failed due to intermittent network issues.
+        $downloader->copy($hostname, $patch_url, $filename, false);
+      }
     }
 
     // The order here is intentional. p1 is most likely to apply with git apply.
@@ -378,8 +385,9 @@ protected function getAndApplyPatch(RemoteFilesystem $downloader, $install_path,
     $patch_levels = array('-p1', '-p0', '-p2', '-p4');
 
     // Check for specified patch level for this package.
-    if (!empty($this->composer->getPackage()->getExtra()['patchLevel'][$package->getName()])){
-      $patch_levels = array($this->composer->getPackage()->getExtra()['patchLevel'][$package->getName()]);
+    $extra = $this->composer->getPackage()->getExtra();
+    if (!empty($extra['patchLevel'][$package->getName()])){
+      $patch_levels = array($extra['patchLevel'][$package->getName()]);
     }
     // Attempt to apply with git apply.
     $patched = $this->applyPatchWithGit($install_path, $patch_levels, $filename);
@@ -547,4 +555,18 @@ protected function applyPatchWithGit($install_path, $patch_levels, $filename) {
     return $patched;
   }
 
+    /**
+     * {@inheritDoc}
+     */
+    public function deactivate(Composer $composer, IOInterface $io)
+    {
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function uninstall(Composer $composer, IOInterface $io)
+    {
+    }
+
 }
diff --git a/vendor/dnoegel/php-xdg-base-dir/.gitignore b/vendor/dnoegel/php-xdg-base-dir/.gitignore
deleted file mode 100644
index 57872d0f1e..0000000000
--- a/vendor/dnoegel/php-xdg-base-dir/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/vendor/
diff --git a/vendor/dnoegel/php-xdg-base-dir/README.md b/vendor/dnoegel/php-xdg-base-dir/README.md
index 9e51bbb5b5..ee06b2d646 100644
--- a/vendor/dnoegel/php-xdg-base-dir/README.md
+++ b/vendor/dnoegel/php-xdg-base-dir/README.md
@@ -1,6 +1,9 @@
 # XDG Base Directory
 
+[![Latest Stable Version](https://img.shields.io/packagist/v/dnoegel/php-xdg-base-dir.svg?style=flat-square)](https://packagist.org/packages/dnoegel/php-xdg-base-dir)
+[![Total Downloads](https://img.shields.io/packagist/dt/dnoegel/php-xdg-base-dir.svg?style=flat-square)](https://packagist.org/packages/dnoegel/php-xdg-base-dir)
 [![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](LICENSE.md)
+[![Build Status](https://img.shields.io/travis/dnoegel/php-xdg-base-dir/master.svg?style=flat-square)](https://travis-ci.org/dnoegel/php-xdg-base-dir)
 
 Implementation of XDG Base Directory  specification for php
 
@@ -15,16 +18,16 @@ $ composer require dnoegel/php-xdg-base-dir
 ## Usage
 
 ``` php
-$xdg = \XdgBaseDir\Xdg();
+$xdg = new \XdgBaseDir\Xdg();
 
 echo $xdg->getHomeDir();
-echo $xdg->getHomeConfigDir()
-echo $xdg->getHomeDataDir()
-echo $xdg->getHomeCacheDir()
-echo $xdg->getRuntimeDir()
+echo $xdg->getHomeConfigDir();
+echo $xdg->getHomeDataDir();
+echo $xdg->getHomeCacheDir();
+echo $xdg->getRuntimeDir();
 
-$xdg->getDataDirs() // returns array
-$xdg->getConfigDirs() // returns array
+print_r($xdg->getDataDirs()); // returns array
+print_r($xdg->getConfigDirs()); // returns array
 ```
 
 ## Testing
diff --git a/vendor/dnoegel/php-xdg-base-dir/composer.json b/vendor/dnoegel/php-xdg-base-dir/composer.json
index f6caf31a29..94c463745b 100644
--- a/vendor/dnoegel/php-xdg-base-dir/composer.json
+++ b/vendor/dnoegel/php-xdg-base-dir/composer.json
@@ -1,13 +1,13 @@
 {
     "name": "dnoegel/php-xdg-base-dir",
     "description": "implementation of xdg base directory specification for php",
-    "type": "project",
+    "type": "library",
     "license": "MIT",
     "require": {
         "php": ">=5.3.2"
     },
     "require-dev": {
-        "phpunit/phpunit": "@stable"
+        "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35"
     },
     "autoload": {
         "psr-4": {
diff --git a/vendor/dnoegel/php-xdg-base-dir/phpunit.xml.dist b/vendor/dnoegel/php-xdg-base-dir/phpunit.xml.dist
deleted file mode 100644
index 4000c012dc..0000000000
--- a/vendor/dnoegel/php-xdg-base-dir/phpunit.xml.dist
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit colors="true"
-         convertErrorsToExceptions="true"
-         convertNoticesToExceptions="true"
-         convertWarningsToExceptions="true"
-         processIsolation="false"
-         stopOnFailure="false"
-         syntaxCheck="false"
-         bootstrap="vendor/autoload.php"
-        >
-
-    <testsuites>
-        <testsuite name="php-xdg-base-dir unit tests">
-            <directory>./tests/</directory>
-        </testsuite>
-    </testsuites>
-
-    <filter>
-        <whitelist>
-            <directory>./src/</directory>
-        </whitelist>
-    </filter>
-</phpunit>
diff --git a/vendor/dnoegel/php-xdg-base-dir/src/Xdg.php b/vendor/dnoegel/php-xdg-base-dir/src/Xdg.php
index e2acda19d0..2dd314d0bc 100644
--- a/vendor/dnoegel/php-xdg-base-dir/src/Xdg.php
+++ b/vendor/dnoegel/php-xdg-base-dir/src/Xdg.php
@@ -6,9 +6,6 @@
  * Simple implementation of the XDG standard http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
  *
  * Based on the python implementation https://github.com/takluyver/pyxdg/blob/master/xdg/BaseDirectory.py
- *
- * Class Xdg
- * @package ShopwareCli\Application
  */
 class Xdg
 {
@@ -30,7 +27,13 @@ public function getHomeDir()
      */
     public function getHomeConfigDir()
     {
-        $path = getenv('XDG_CONFIG_HOME') ?: $this->getHomeDir() . DIRECTORY_SEPARATOR . '.config';
+        if ($path = getenv('XDG_CONFIG_HOME')) {
+            return $path;
+        }
+
+        $homeDir = $this->getHomeDir();
+
+        $path = DIRECTORY_SEPARATOR === $homeDir ? $homeDir.'.config' : $homeDir . DIRECTORY_SEPARATOR . '.config';
 
         return $path;
     }
@@ -104,7 +107,7 @@ public function getRuntimeDir($strict=true)
         if (!$st['mode'] & self::S_IFDIR) {
             rmdir($fallback);
             $create = true;
-        } elseif ($st['uid'] != getmyuid() ||
+        } elseif ($st['uid'] != $this->getUid() ||
             $st['mode'] & (self::S_IRWXG | self::S_IRWXO)
         ) {
             rmdir($fallback);
@@ -118,4 +121,12 @@ public function getRuntimeDir($strict=true)
         return $fallback;
     }
 
+    private function getUid()
+    {
+        if (function_exists('posix_getuid')) {
+            return posix_getuid();
+        }
+
+        return getmyuid();
+    }
 }
diff --git a/vendor/dnoegel/php-xdg-base-dir/tests/XdgTest.php b/vendor/dnoegel/php-xdg-base-dir/tests/XdgTest.php
deleted file mode 100644
index 92c2e07ed4..0000000000
--- a/vendor/dnoegel/php-xdg-base-dir/tests/XdgTest.php
+++ /dev/null
@@ -1,116 +0,0 @@
-<?php
-
-class XdgTest extends PHPUnit_Framework_TestCase
-{
-    /**
-     * @return \XdgBaseDir\Xdg
-     */
-    public function getXdg()
-    {
-        return new \XdgBaseDir\Xdg();
-    }
-
-    public function testGetHomeDir()
-    {
-         putenv('HOME=/fake-dir');
-         $this->assertEquals('/fake-dir', $this->getXdg()->getHomeDir());
-    }
-
-    public function testGetFallbackHomeDir()
-    {
-        putenv('HOME=');
-        putenv('HOMEDRIVE=C:');
-        putenv('HOMEPATH=fake-dir');
-        $this->assertEquals('C:/fake-dir', $this->getXdg()->getHomeDir());
-    }
-
-    public function testXdgPutCache()
-    {
-        putenv('XDG_DATA_HOME=tmp/');
-        putenv('XDG_CONFIG_HOME=tmp/');
-        putenv('XDG_CACHE_HOME=tmp/');
-        $this->assertEquals('tmp/', $this->getXdg()->getHomeCacheDir());
-    }
-
-    public function testXdgPutData()
-    {
-        putenv('XDG_DATA_HOME=tmp/');
-        $this->assertEquals('tmp/', $this->getXdg()->getHomeDataDir());
-    }
-
-    public function testXdgPutConfig()
-    {
-        putenv('XDG_CONFIG_HOME=tmp/');
-        $this->assertEquals('tmp/', $this->getXdg()->getHomeConfigDir());
-    }
-
-    public function testXdgDataDirsShouldIncludeHomeDataDir()
-    {
-        putenv('XDG_DATA_HOME=tmp/');
-        putenv('XDG_CONFIG_HOME=tmp/');
-
-        $this->assertArrayHasKey('tmp/', array_flip($this->getXdg()->getDataDirs()));
-    }
-
-    public function testXdgConfigDirsShouldIncludeHomeConfigDir()
-    {
-        putenv('XDG_CONFIG_HOME=tmp/');
-
-        $this->assertArrayHasKey('tmp/', array_flip($this->getXdg()->getConfigDirs()));
-    }
-
-    /**
-     * If XDG_RUNTIME_DIR is set, it should be returned
-     */
-    public function testGetRuntimeDir()
-    {
-        putenv('XDG_RUNTIME_DIR=/tmp/');
-        $runtimeDir = $this->getXdg()->getRuntimeDir();
-
-        $this->assertEquals(is_dir($runtimeDir), true);
-    }
-
-    /**
-     * In strict mode, an exception should be shown if XDG_RUNTIME_DIR does not exist
-     *
-     * @expectedException \RuntimeException
-     */
-    public function testGetRuntimeDirShouldThrowException()
-    {
-        putenv('XDG_RUNTIME_DIR=');
-        $this->getXdg()->getRuntimeDir(true);
-    }
-
-    /**
-     * In fallback mode a directory should be created
-     */
-    public function testGetRuntimeDirShouldCreateDirectory()
-    {
-        putenv('XDG_RUNTIME_DIR=');
-        $dir = $this->getXdg()->getRuntimeDir(false);
-        $permission = decoct(fileperms($dir) & 0777);
-        $this->assertEquals(700, $permission);
-    }
-
-    /**
-     * Ensure, that the fallback directories are created with correct permission
-     */
-    public function testGetRuntimeShouldDeleteDirsWithWrongPermission()
-    {
-        $runtimeDir = sys_get_temp_dir() . DIRECTORY_SEPARATOR . XdgBaseDir\Xdg::RUNTIME_DIR_FALLBACK . getenv('USER');
-
-        rmdir($runtimeDir);
-        mkdir($runtimeDir, 0764, true);
-
-        // Permission should be wrong now
-        $permission = decoct(fileperms($runtimeDir) & 0777);
-        $this->assertEquals(764, $permission);
-
-        putenv('XDG_RUNTIME_DIR=');
-        $dir = $this->getXdg()->getRuntimeDir(false);
-
-        // Permission should be fixed
-        $permission = decoct(fileperms($dir) & 0777);
-        $this->assertEquals(700, $permission);
-    }
-}
diff --git a/vendor/drush/drush/.scenarios.lock/php5/composer.json b/vendor/drush/drush/.scenarios.lock/php5/composer.json
index 65c4379781..a72af60b86 100644
--- a/vendor/drush/drush/.scenarios.lock/php5/composer.json
+++ b/vendor/drush/drush/.scenarios.lock/php5/composer.json
@@ -70,7 +70,7 @@
         "psr/log": "~1.0",
         "psy/psysh": "~0.6",
         "symfony/console": "^3.4",
-        "symfony/event-dispatcher": "^3.4",
+        "symfony/event-dispatcher": "^3.4 || ^4.0",
         "symfony/finder": "^3.4 || ^4.0",
         "symfony/process": "^3.4",
         "symfony/var-dumper": "^3.4 || ^4.0",
diff --git a/vendor/drush/drush/.scenarios.lock/php5/composer.lock b/vendor/drush/drush/.scenarios.lock/php5/composer.lock
index 7d9fd00588..c375fa418e 100644
--- a/vendor/drush/drush/.scenarios.lock/php5/composer.lock
+++ b/vendor/drush/drush/.scenarios.lock/php5/composer.lock
@@ -4,20 +4,20 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "8266db40dd17b66e6932589b0401b424",
+    "content-hash": "591724784b2d04a184cc2b0de5e83fd2",
     "packages": [
         {
             "name": "chi-teck/drupal-code-generator",
-            "version": "1.29.2",
+            "version": "1.30.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/Chi-teck/drupal-code-generator.git",
-                "reference": "0d2cb5299e5b1361bab6c8b9ee6531e95d68df95"
+                "reference": "1da9f06843b6bf2b0e7d28fea4b6c1d79aead197"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Chi-teck/drupal-code-generator/zipball/0d2cb5299e5b1361bab6c8b9ee6531e95d68df95",
-                "reference": "0d2cb5299e5b1361bab6c8b9ee6531e95d68df95",
+                "url": "https://api.github.com/repos/Chi-teck/drupal-code-generator/zipball/1da9f06843b6bf2b0e7d28fea4b6c1d79aead197",
+                "reference": "1da9f06843b6bf2b0e7d28fea4b6c1d79aead197",
                 "shasum": ""
             },
             "require": {
@@ -25,7 +25,7 @@
                 "php": ">=5.5.9",
                 "symfony/console": "^3.4 || ^4.0",
                 "symfony/filesystem": "^2.7 || ^3.4 || ^4.0",
-                "twig/twig": "^1.35"
+                "twig/twig": "^1.38.2 || ^2.10"
             },
             "bin": [
                 "bin/dcg"
@@ -49,7 +49,7 @@
                 "GPL-2.0-or-later"
             ],
             "description": "Drupal code generator",
-            "time": "2019-06-02T07:36:18+00:00"
+            "time": "2019-06-29T10:29:45+00:00"
         },
         {
             "name": "composer/semver",
@@ -550,16 +550,16 @@
         },
         {
             "name": "consolidation/robo",
-            "version": "1.4.9",
+            "version": "1.4.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/Robo.git",
-                "reference": "5c6b3840a45afda1cbffbb3bb1f94dd5f9f83345"
+                "reference": "e5a6ca64cf1324151873672e484aceb21f365681"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/Robo/zipball/5c6b3840a45afda1cbffbb3bb1f94dd5f9f83345",
-                "reference": "5c6b3840a45afda1cbffbb3bb1f94dd5f9f83345",
+                "url": "https://api.github.com/repos/consolidation/Robo/zipball/e5a6ca64cf1324151873672e484aceb21f365681",
+                "reference": "e5a6ca64cf1324151873672e484aceb21f365681",
                 "shasum": ""
             },
             "require": {
@@ -654,7 +654,7 @@
                 }
             ],
             "description": "Modern task runner",
-            "time": "2019-03-19T18:07:19+00:00"
+            "time": "2019-07-29T15:40:50+00:00"
         },
         {
             "name": "consolidation/self-update",
@@ -780,16 +780,16 @@
         },
         {
             "name": "consolidation/site-process",
-            "version": "2.0.3",
+            "version": "2.0.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/site-process.git",
-                "reference": "e25265f4a48c13284ebb6f9e0906ecd415d451df"
+                "reference": "e159f849abce696c2f5081c149a1f8ec8717dd97"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/site-process/zipball/e25265f4a48c13284ebb6f9e0906ecd415d451df",
-                "reference": "e25265f4a48c13284ebb6f9e0906ecd415d451df",
+                "url": "https://api.github.com/repos/consolidation/site-process/zipball/e159f849abce696c2f5081c149a1f8ec8717dd97",
+                "reference": "e159f849abce696c2f5081c149a1f8ec8717dd97",
                 "shasum": ""
             },
             "require": {
@@ -838,17 +838,17 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Moshe Weitzman",
-                    "email": "weitzman@tejasa.com"
-                },
                 {
                     "name": "Greg Anderson",
                     "email": "greg.1.anderson@greenknowe.org"
+                },
+                {
+                    "name": "Moshe Weitzman",
+                    "email": "weitzman@tejasa.com"
                 }
             ],
             "description": "A thin wrapper around the Symfony Process Component that allows applications to use the Site Alias library to specify the target for a remote call.",
-            "time": "2019-06-04T22:23:52+00:00"
+            "time": "2019-08-12T23:10:26+00:00"
         },
         {
             "name": "container-interop/container-interop",
@@ -1632,16 +1632,16 @@
         },
         {
             "name": "symfony/filesystem",
-            "version": "v3.4.28",
+            "version": "v3.4.30",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/filesystem.git",
-                "reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb"
+                "reference": "70adda061ef83bb7def63a17953dc41f203308a7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/acf99758b1df8e9295e6b85aa69f294565c9fedb",
-                "reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/70adda061ef83bb7def63a17953dc41f203308a7",
+                "reference": "70adda061ef83bb7def63a17953dc41f203308a7",
                 "shasum": ""
             },
             "require": {
@@ -1678,20 +1678,20 @@
             ],
             "description": "Symfony Filesystem Component",
             "homepage": "https://symfony.com",
-            "time": "2019-02-04T21:34:32+00:00"
+            "time": "2019-06-23T09:29:17+00:00"
         },
         {
             "name": "symfony/finder",
-            "version": "v3.4.28",
+            "version": "v3.4.30",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "fa5d962a71f2169dfe1cbae217fa5a2799859f6c"
+                "reference": "1e762fdf73ace6ceb42ba5a6ca280be86082364a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/fa5d962a71f2169dfe1cbae217fa5a2799859f6c",
-                "reference": "fa5d962a71f2169dfe1cbae217fa5a2799859f6c",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/1e762fdf73ace6ceb42ba5a6ca280be86082364a",
+                "reference": "1e762fdf73ace6ceb42ba5a6ca280be86082364a",
                 "shasum": ""
             },
             "require": {
@@ -1727,7 +1727,7 @@
             ],
             "description": "Symfony Finder Component",
             "homepage": "https://symfony.com",
-            "time": "2019-05-24T12:25:55+00:00"
+            "time": "2019-06-28T08:02:59+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
@@ -1897,16 +1897,16 @@
         },
         {
             "name": "symfony/var-dumper",
-            "version": "v3.4.28",
+            "version": "v3.4.30",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/var-dumper.git",
-                "reference": "ca5fef348a0440411bbca0f9ec14e9a11625bd6a"
+                "reference": "b6a45abfe961183a4c26fad98a6112c487e983bf"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ca5fef348a0440411bbca0f9ec14e9a11625bd6a",
-                "reference": "ca5fef348a0440411bbca0f9ec14e9a11625bd6a",
+                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/b6a45abfe961183a4c26fad98a6112c487e983bf",
+                "reference": "b6a45abfe961183a4c26fad98a6112c487e983bf",
                 "shasum": ""
             },
             "require": {
@@ -1962,7 +1962,7 @@
                 "debug",
                 "dump"
             ],
-            "time": "2019-05-01T09:52:10+00:00"
+            "time": "2019-07-26T11:29:23+00:00"
         },
         {
             "name": "symfony/yaml",
@@ -2067,19 +2067,19 @@
             "authors": [
                 {
                     "name": "Fabien Potencier",
+                    "role": "Lead Developer",
                     "email": "fabien@symfony.com",
-                    "homepage": "http://fabien.potencier.org",
-                    "role": "Lead Developer"
+                    "homepage": "http://fabien.potencier.org"
                 },
                 {
                     "name": "Armin Ronacher",
-                    "email": "armin.ronacher@active-4.com",
-                    "role": "Project Founder"
+                    "role": "Project Founder",
+                    "email": "armin.ronacher@active-4.com"
                 },
                 {
                     "name": "Twig Team",
-                    "homepage": "https://twig.symfony.com/contributors",
-                    "role": "Contributors"
+                    "role": "Contributors",
+                    "homepage": "https://twig.symfony.com/contributors"
                 }
             ],
             "description": "Twig, the flexible, fast, and secure template language for PHP",
@@ -2091,18 +2091,21 @@
         },
         {
             "name": "webflo/drupal-finder",
-            "version": "1.1.0",
+            "version": "1.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/webflo/drupal-finder.git",
-                "reference": "8a7886c575d6eaa67a425dceccc84e735c0b9637"
+                "reference": "123e248e14ee8dd3fbe89fb5a733a6cf91f5820e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webflo/drupal-finder/zipball/8a7886c575d6eaa67a425dceccc84e735c0b9637",
-                "reference": "8a7886c575d6eaa67a425dceccc84e735c0b9637",
+                "url": "https://api.github.com/repos/webflo/drupal-finder/zipball/123e248e14ee8dd3fbe89fb5a733a6cf91f5820e",
+                "reference": "123e248e14ee8dd3fbe89fb5a733a6cf91f5820e",
                 "shasum": ""
             },
+            "require": {
+                "ext-json": "*"
+            },
             "require-dev": {
                 "mikey179/vfsstream": "^1.6",
                 "phpunit/phpunit": "^4.8"
@@ -2124,7 +2127,7 @@
                 }
             ],
             "description": "Helper class to locate a Drupal installation from a given path.",
-            "time": "2017-10-24T08:12:11+00:00"
+            "time": "2019-08-02T08:06:18+00:00"
         },
         {
             "name": "webmozart/assert",
@@ -2283,12 +2286,12 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/minkphp/Mink.git",
-                "reference": "6d637f7af4816c26ad8a943da2e3f7eef1231bea"
+                "reference": "a534fe7dac9525e8e10ca68e737c3d7e5058ec83"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/minkphp/Mink/zipball/6d637f7af4816c26ad8a943da2e3f7eef1231bea",
-                "reference": "6d637f7af4816c26ad8a943da2e3f7eef1231bea",
+                "url": "https://api.github.com/repos/minkphp/Mink/zipball/a534fe7dac9525e8e10ca68e737c3d7e5058ec83",
+                "reference": "a534fe7dac9525e8e10ca68e737c3d7e5058ec83",
                 "shasum": ""
             },
             "require": {
@@ -2296,7 +2299,7 @@
                 "symfony/css-selector": "^2.7|^3.0|^4.0"
             },
             "require-dev": {
-                "symfony/phpunit-bridge": "^3.3|^4.0"
+                "symfony/phpunit-bridge": "^4.2"
             },
             "suggest": {
                 "behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)",
@@ -2334,7 +2337,7 @@
                 "testing",
                 "web"
             ],
-            "time": "2019-05-14T09:56:49+00:00"
+            "time": "2019-07-15T12:45:29+00:00"
         },
         {
             "name": "behat/mink-browserkit-driver",
@@ -3238,11 +3241,11 @@
         },
         {
             "name": "drupal/coder",
-            "version": "8.3.5",
+            "version": "8.3.6",
             "source": {
                 "type": "git",
-                "url": "https://git.drupal.org/project/coder.git",
-                "reference": "35277fc8675b6a2cbb194f8880145a9c85c845c4"
+                "url": "https://git.drupalcode.org/project/coder.git",
+                "reference": "4337ddf58d28dbdee4e1367bf71ee13393ab9820"
             },
             "require": {
                 "ext-mbstring": "*",
@@ -3271,7 +3274,7 @@
                 "phpcs",
                 "standards"
             ],
-            "time": "2019-06-14T15:06:06+00:00"
+            "time": "2019-08-09T09:27:26+00:00"
         },
         {
             "name": "drupal/core",
@@ -4329,24 +4332,24 @@
             "time": "2017-09-04T12:26:28+00:00"
         },
         {
-            "name": "mikey179/vfsStream",
-            "version": "v1.6.6",
+            "name": "mikey179/vfsstream",
+            "version": "v1.6.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/bovigo/vfsStream.git",
-                "reference": "095238a0711c974ae5b4ebf4c4534a23f3f6c99d"
+                "reference": "2b544ac3a21bcc4dde5d90c4ae8d06f4319055fb"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/bovigo/vfsStream/zipball/095238a0711c974ae5b4ebf4c4534a23f3f6c99d",
-                "reference": "095238a0711c974ae5b4ebf4c4534a23f3f6c99d",
+                "url": "https://api.github.com/repos/bovigo/vfsStream/zipball/2b544ac3a21bcc4dde5d90c4ae8d06f4319055fb",
+                "reference": "2b544ac3a21bcc4dde5d90c4ae8d06f4319055fb",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.5"
+                "phpunit/phpunit": "^4.5|^5.0"
             },
             "type": "library",
             "extra": {
@@ -4366,13 +4369,13 @@
             "authors": [
                 {
                     "name": "Frank Kleine",
-                    "homepage": "http://frankkleine.de/",
-                    "role": "Developer"
+                    "role": "Developer",
+                    "homepage": "http://frankkleine.de/"
                 }
             ],
             "description": "Virtual file system to mock the real file system in unit tests.",
             "homepage": "http://vfs.bovigo.org/",
-            "time": "2019-04-08T13:54:32+00:00"
+            "time": "2019-08-01T01:38:37+00:00"
         },
         {
             "name": "paragonie/random_compat",
@@ -4681,8 +4684,8 @@
             "authors": [
                 {
                     "name": "Sebastian Bergmann",
-                    "email": "sb@sebastian-bergmann.de",
-                    "role": "lead"
+                    "role": "lead",
+                    "email": "sb@sebastian-bergmann.de"
                 }
             ],
             "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
@@ -4939,8 +4942,8 @@
             "authors": [
                 {
                     "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
+                    "role": "lead",
+                    "email": "sebastian@phpunit.de"
                 }
             ],
             "description": "The PHP Unit Testing framework.",
@@ -5423,8 +5426,8 @@
             "authors": [
                 {
                     "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
+                    "role": "lead",
+                    "email": "sebastian@phpunit.de"
                 }
             ],
             "description": "Library that helps with managing the version number of Git-hosted PHP projects",
@@ -5592,16 +5595,16 @@
         },
         {
             "name": "symfony/browser-kit",
-            "version": "v3.4.28",
+            "version": "v3.4.30",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/browser-kit.git",
-                "reference": "7f2b0843d5045468225f9a9b27a0cb171ae81828"
+                "reference": "53266c9a1536e2dc673eb1efb6a6142ef84c6282"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/browser-kit/zipball/7f2b0843d5045468225f9a9b27a0cb171ae81828",
-                "reference": "7f2b0843d5045468225f9a9b27a0cb171ae81828",
+                "url": "https://api.github.com/repos/symfony/browser-kit/zipball/53266c9a1536e2dc673eb1efb6a6142ef84c6282",
+                "reference": "53266c9a1536e2dc673eb1efb6a6142ef84c6282",
                 "shasum": ""
             },
             "require": {
@@ -5645,7 +5648,7 @@
             ],
             "description": "Symfony BrowserKit Component",
             "homepage": "https://symfony.com",
-            "time": "2019-04-06T19:33:58+00:00"
+            "time": "2019-06-09T14:27:26+00:00"
         },
         {
             "name": "symfony/class-loader",
@@ -5705,7 +5708,7 @@
         },
         {
             "name": "symfony/css-selector",
-            "version": "v3.4.28",
+            "version": "v3.4.30",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/css-selector.git",
@@ -5739,14 +5742,14 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Jean-François Simon",
-                    "email": "jeanfrancois.simon@sensiolabs.com"
-                },
                 {
                     "name": "Fabien Potencier",
                     "email": "fabien@symfony.com"
                 },
+                {
+                    "name": "Jean-François Simon",
+                    "email": "jeanfrancois.simon@sensiolabs.com"
+                },
                 {
                     "name": "Symfony Community",
                     "homepage": "https://symfony.com/contributors"
@@ -5829,16 +5832,16 @@
         },
         {
             "name": "symfony/dom-crawler",
-            "version": "v3.4.28",
+            "version": "v3.4.30",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/dom-crawler.git",
-                "reference": "d40023c057393fb25f7ca80af2a56ed948c45a09"
+                "reference": "adb96e63af6fb0cc721cc69861001d60d0133d0c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/d40023c057393fb25f7ca80af2a56ed948c45a09",
-                "reference": "d40023c057393fb25f7ca80af2a56ed948c45a09",
+                "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/adb96e63af6fb0cc721cc69861001d60d0133d0c",
+                "reference": "adb96e63af6fb0cc721cc69861001d60d0133d0c",
                 "shasum": ""
             },
             "require": {
@@ -5882,7 +5885,7 @@
             ],
             "description": "Symfony DomCrawler Component",
             "homepage": "https://symfony.com",
-            "time": "2019-02-23T15:06:07+00:00"
+            "time": "2019-05-30T15:47:52+00:00"
         },
         {
             "name": "symfony/http-foundation",
@@ -6029,16 +6032,16 @@
         },
         {
             "name": "symfony/phpunit-bridge",
-            "version": "v3.4.28",
+            "version": "v3.4.30",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/phpunit-bridge.git",
-                "reference": "a43a2f6c465a2d99635fea0addbebddc3864ad97"
+                "reference": "8f1f27c186496128b861810809c27d956d342417"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/a43a2f6c465a2d99635fea0addbebddc3864ad97",
-                "reference": "a43a2f6c465a2d99635fea0addbebddc3864ad97",
+                "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/8f1f27c186496128b861810809c27d956d342417",
+                "reference": "8f1f27c186496128b861810809c27d956d342417",
                 "shasum": ""
             },
             "require": {
@@ -6090,7 +6093,7 @@
             ],
             "description": "Symfony PHPUnit Bridge",
             "homepage": "https://symfony.com",
-            "time": "2019-04-16T09:03:16+00:00"
+            "time": "2019-07-05T06:33:19+00:00"
         },
         {
             "name": "symfony/polyfill-iconv",
diff --git a/vendor/drush/drush/.travis.yml b/vendor/drush/drush/.travis.yml
index 3b88416f57..0aa8df0a6b 100644
--- a/vendor/drush/drush/.travis.yml
+++ b/vendor/drush/drush/.travis.yml
@@ -2,6 +2,7 @@
 branches:
   only:
     - master
+    - 9.x
     - 8.x
     - 7.x
     - 6.x
diff --git a/vendor/drush/drush/composer.json b/vendor/drush/drush/composer.json
index d560da1e54..6762905e03 100644
--- a/vendor/drush/drush/composer.json
+++ b/vendor/drush/drush/composer.json
@@ -46,7 +46,7 @@
     "psr/log": "~1.0",
     "psy/psysh": "~0.6",
     "symfony/console": "^3.4",
-    "symfony/event-dispatcher": "^3.4",
+    "symfony/event-dispatcher": "^3.4 || ^4.0",
     "symfony/finder": "^3.4 || ^4.0",
     "symfony/process": "^3.4",
     "symfony/var-dumper": "^3.4 || ^4.0",
diff --git a/vendor/drush/drush/composer.lock b/vendor/drush/drush/composer.lock
index 45b1460fca..e7bf2d9540 100644
--- a/vendor/drush/drush/composer.lock
+++ b/vendor/drush/drush/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "69702ffaac43e1fe89a91880704d07f6",
+    "content-hash": "a65aaf0ce53f8027c91fc0bc277d1b55",
     "packages": [
         {
             "name": "chi-teck/drupal-code-generator",
@@ -3244,7 +3244,7 @@
             "version": "8.3.3",
             "source": {
                 "type": "git",
-                "url": "https://git.drupal.org/project/coder.git",
+                "url": "https://git.drupalcode.org/project/coder.git",
                 "reference": "a33d3388fb2e1d94bd2aee36a8ff79186e9d8f43"
             },
             "require": {
@@ -4408,7 +4408,7 @@
             "time": "2017-09-04T12:26:28+00:00"
         },
         {
-            "name": "mikey179/vfsStream",
+            "name": "mikey179/vfsstream",
             "version": "v1.6.6",
             "source": {
                 "type": "git",
@@ -4445,8 +4445,8 @@
             "authors": [
                 {
                     "name": "Frank Kleine",
-                    "homepage": "http://frankkleine.de/",
-                    "role": "Developer"
+                    "role": "Developer",
+                    "homepage": "http://frankkleine.de/"
                 }
             ],
             "description": "Virtual file system to mock the real file system in unit tests.",
@@ -7263,8 +7263,8 @@
             "authors": [
                 {
                     "name": "Arne Blankerts",
-                    "email": "arne@blankerts.de",
-                    "role": "Developer"
+                    "role": "Developer",
+                    "email": "arne@blankerts.de"
                 }
             ],
             "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
diff --git a/vendor/drush/drush/drush.info b/vendor/drush/drush/drush.info
index f5951dedb9..4c73b42b8a 100644
--- a/vendor/drush/drush/drush.info
+++ b/vendor/drush/drush/drush.info
@@ -1 +1 @@
-drush_version=9.7.1
+drush_version=9.7.2
diff --git a/vendor/drush/drush/examples/Commands/SiteAliasAlterCommands.php b/vendor/drush/drush/examples/Commands/SiteAliasAlterCommands.php
index 28ebdcdc26..a0f0c7e96b 100644
--- a/vendor/drush/drush/examples/Commands/SiteAliasAlterCommands.php
+++ b/vendor/drush/drush/examples/Commands/SiteAliasAlterCommands.php
@@ -34,6 +34,19 @@ public function alter(InputInterface $input, AnnotationData $annotationData)
 
             // Change the SSH user.
             $input->setOption('remote-user', 'mw2');
+
+            // Test to see if specific environment really exists in wildcard
+            // aliases, but only if the target is a specific host.
+            $host = $self->get('host');
+            if (preg_match('#\.myserver.com$#', $host)) {
+                $ip = gethostbyname($host);
+                // If the return value of gethostbyname equals its input parameter,
+                // that indicates failure.
+                if ($host == $ip) {
+                    $aliasName = $self->name();
+                    throw new \Exception("The alias $aliasName refers to an environment that does not exist.");
+                }
+            }
         }
     }
 }
diff --git a/vendor/drush/drush/examples/Commands/art/sandwich.txt b/vendor/drush/drush/examples/Commands/art/sandwich.txt
index dac8ca02e4..6c4c3097bf 100644
--- a/vendor/drush/drush/examples/Commands/art/sandwich.txt
+++ b/vendor/drush/drush/examples/Commands/art/sandwich.txt
@@ -1,24 +1,24 @@
- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
- . . .  . . . . . . . .:8 ;t;;t;;;;:..:;%SX888@X%t;.. . . . 
- . .  .. . . . . . .%t%;%@%%%%%%%%%%X@8888XS%t;...:;ttt%X. .
- . . .  . . . . . .X:8%X%%%XS%%%%%%%XS%%%%%@%%%%X%%%@%S88 . 
- . . . . . .  .  . X@ @%%%X8X%%%88%%%8X%%%%%%%%%XXt@8@88@. .
- . . . . .  . . .t@tS;%%8XSX%@XSX%@XSS%8@@88X@888X8SS S;S.  
- . . . . . . .@%XS%%%%%S8@X%@8%XXSSXX%S@SSSX888.;@ 888@ . . 
- . . . . . :.8:S%%%XS8X@@X%S@SSSS8SXSXXX%X88X:;@8@:S  88S. .
- . . .  .8%S8%%%%%%8@SSSXXXSXSXSXSXSSS8S888 :@%:%XX:%8%:X:  
- . .  .:8 %%%%@%%8@S%%XXSXSSSS8S@X%XSXX88 ;@X;SX88X8;%X88t. 
- . . 88S%S%%%%8XSSXSX@@S@%XS8@SS%@S%888 88@S:8. .;.@%X:@8;. 
- . .  88.8888888@XX   888888%X%@XX 88SS8@@;S@8.%;8@S%%:8   .
- . .  S%:8 @SSSS8 @@8@8 8 88888888@%S:8:S8 @..%S SXX8888;. .
- . . %:8S8888@88SXS S S::X@.8.8 X%S%8X:X88..% @@.S.%% .;. . 
- .    .XX8@8;;%%t;;;;:@X@888888@888888.88S;8:8  ...    . . .
- . . 8.;;@8@8:%%%%%t.8@%ttX@8@@@S8%8 X8S;X:@; :... . . . . .
- . tS:8@;88.;:8888X8S:.tX88888X88  S8tStS88 :.. . . . . . . 
- .:X;;:t%;tt%888S@8XS888@8.:tt@;88.tXXX8:::... . . . . . . .
- .:X8St:8SXS XS8@X 8.8%888%X8@@X88tXS8t; . . . . . . .  . . 
- .    :8888.88888888X@@X @ X X%S%;88;8t .. . .  . . . . .  .
- ... ..: .    .@@888%St    @ @ 8SS 8:; . . . . . . . . . . .
-   .  .  .      ..::. ..:;;::::. ... . . . . . . . . . . . .
- .. . . .     . .. . .  .  .  .. . . . . . .  . . . . . . . 
+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
+ . . .  . . . . . . . .:8 ;t;;t;;;;:..:;%SX888@X%t;.. . . . 
+ . .  .. . . . . . .%t%;%@%%%%%%%%%%X@8888XS%t;...:;ttt%X. .
+ . . .  . . . . . .X:8%X%%%XS%%%%%%%XS%%%%%@%%%%X%%%@%S88 . 
+ . . . . . .  .  . X@ @%%%X8X%%%88%%%8X%%%%%%%%%XXt@8@88@. .
+ . . . . .  . . .t@tS;%%8XSX%@XSX%@XSS%8@@88X@888X8SS S;S.  
+ . . . . . . .@%XS%%%%%S8@X%@8%XXSSXX%S@SSSX888.;@ 888@ . . 
+ . . . . . :.8:S%%%XS8X@@X%S@SSSS8SXSXXX%X88X:;@8@:S  88S. .
+ . . .  .8%S8%%%%%%8@SSSXXXSXSXSXSXSSS8S888 :@%:%XX:%8%:X:  
+ . .  .:8 %%%%@%%8@S%%XXSXSSSS8S@X%XSXX88 ;@X;SX88X8;%X88t. 
+ . . 88S%S%%%%8XSSXSX@@S@%XS8@SS%@S%888 88@S:8. .;.@%X:@8;. 
+ . .  88.8888888@XX   888888%X%@XX 88SS8@@;S@8.%;8@S%%:8   .
+ . .  S%:8 @SSSS8 @@8@8 8 88888888@%S:8:S8 @..%S SXX8888;. .
+ . . %:8S8888@88SXS S S::X@.8.8 X%S%8X:X88..% @@.S.%% .;. . 
+ .    .XX8@8;;%%t;;;;:@X@888888@888888.88S;8:8  ...    . . .
+ . . 8.;;@8@8:%%%%%t.8@%ttX@8@@@S8%8 X8S;X:@; :... . . . . .
+ . tS:8@;88.;:8888X8S:.tX88888X88  S8tStS88 :.. . . . . . . 
+ .:X;;:t%;tt%888S@8XS888@8.:tt@;88.tXXX8:::... . . . . . . .
+ .:X8St:8SXS XS8@X 8.8%888%X8@@X88tXS8t; . . . . . . .  . . 
+ .    :8888.88888888X@@X @ X X%S%;88;8t .. . .  . . . . .  .
+ ... ..: .    .@@888%St    @ @ 8SS 8:; . . . . . . . . . . .
+   .  .  .      ..::. ..:;;::::. ... . . . . . . . . . . . .
+ .. . . .     . .. . .  .  .  .. . . . . . .  . . . . . . . 
diff --git a/vendor/drush/drush/examples/example.drush.yml b/vendor/drush/drush/examples/example.drush.yml
index 0138224fec..26c1d19b71 100644
--- a/vendor/drush/drush/examples/example.drush.yml
+++ b/vendor/drush/drush/examples/example.drush.yml
@@ -32,7 +32,7 @@
 
 # Environment variables
 #
-# Your Drush config file may reference environment variables using a syntax like ${env.home}.
+# Your Drush config file may reference environment variables using a syntax like ${env.HOME}.
 # For example see the drush.paths examples below.
 #
 # An alternative way to populate Drush configuration is to define environment variables that
@@ -46,7 +46,7 @@ drush:
     # Specify config files to load.
     config:
       # Load any personal config files. Is silently skipped if not found. Filename must be drush.yml
-      - ${env.home}/.drush/config/drush.yml
+      - ${env.HOME}/.drush/config/drush.yml
 
 
     # Specify folders to search for Drush command files.  These locations
@@ -63,7 +63,7 @@ drush:
     #  include:
     #    'Commands/example_drush_extension': '${env.PWD}'
     include:
-      - '${env.home}/.drush/commands'
+      - '${env.HOME}/.drush/commands'
       - /usr/share/drush/commands
 
     # Specify the folders to search for Drush alias files (*.site.yml). These
@@ -74,7 +74,7 @@ drush:
     # Drush 8 and earlier did a deep search in ~/.drush and /etc/drush when
     # loading alias files.
     alias-path:
-      - '${env.home}/.drush/sites'
+      - '${env.HOME}/.drush/sites'
       - /etc/drush/sites
 
     # Specify a folder where Drush should store its file based caches. If unspecified, defaults to $HOME/.drush.
diff --git a/vendor/drush/drush/examples/example.site.yml b/vendor/drush/drush/examples/example.site.yml
index f759fe76b2..aa536ad49e 100644
--- a/vendor/drush/drush/examples/example.site.yml
+++ b/vendor/drush/drush/examples/example.site.yml
@@ -78,7 +78,7 @@
 # drush:
 #   paths:
 #     alias-path:
-#       - '${env.home}/.drush/sites'
+#       - '${env.HOME}/.drush/sites'
 #       - /etc/drush/sites
 # @endcode
 #
@@ -194,14 +194,14 @@
 # There are a number of service providers that manage Drupal sites as a
 # service. Drush allows service providers to create collections of site alias
 # files to reference all of the sites available to a single user. In order
-# to so this, a new location must be defined in your Drush configuration
+# to do this, a new location must be defined in your Drush configuration
 # file:
 #
 # @code
 # drush:
 #   paths:
 #     alias-path:
-#       - '${env.home}/.drush/sites/provider-name'
+#       - '${env.HOME}/.drush/sites/provider-name'
 # @endcode
 #
 # Site aliases stored in this directory may then be referenced by its
@@ -222,6 +222,35 @@
 # Add the option `--format=list` to show only the names of each site and
 # environment without also showing the values in each alias record.
 
+# Wildcard Aliases for Service Providers
+#
+# Some service providers that manage Drupal sites allow customers to create
+# multiple "environments" for a site. It is common for these providers to
+# also have a feature to automatically create Drush aliases for all of a
+# user's sites. Rather than write one record for every environment in that
+# site, it is also possible to write a single "wildcard" alias that represents
+# all possible environments. This is possible if the contents of each
+# environment alias are identical save for the name of the environment in
+# one or more values. The variable `${env-name}` will be substituted with the
+# environment name wherever it appears.
+#
+# Example wildcard record:
+#
+# @code
+# # File: remote-example.site.yml
+# '*':
+#   host: ${env-name}.server.domain.com
+#   user: www-admin
+#   root: /path/to/${env-name}
+#   uri: http://${env-name}.remote-example.com
+# @endcode
+#
+# With a wildcard record, any environment name may be used, and will always
+# match. This is not desirable in instances where the specified environment
+# does not exist (e.g. if the user made a typo). An alias alter hook in a
+# policy file may be used to catch these mistakes and report an error.
+# @see SiteAliasAlterCommands for an example on how to do this.
+
 # Developer Information
 #
 # See https://github.com/consolidation/site-alias for more developer
diff --git a/vendor/drush/drush/includes/drush.inc b/vendor/drush/drush/includes/drush.inc
index 1e7f59cf43..a8f356ff8d 100644
--- a/vendor/drush/drush/includes/drush.inc
+++ b/vendor/drush/drush/includes/drush.inc
@@ -696,7 +696,7 @@ function drush_errors_on($errors = null) {
 function drush_memory_limit() {
   $value = trim(ini_get('memory_limit'));
   $last = strtolower($value[strlen($value)-1]);
-  $size = (int) substr($value, 0, -1);
+  $size = (int) rtrim($value, 'GgMmKk');
   switch ($last) {
     case 'g':
       $size *= DRUSH_KILOBYTE;
diff --git a/vendor/drush/drush/src/Boot/DrupalBoot8.php b/vendor/drush/drush/src/Boot/DrupalBoot8.php
index 472ed86eba..d2b6ef541e 100644
--- a/vendor/drush/drush/src/Boot/DrupalBoot8.php
+++ b/vendor/drush/drush/src/Boot/DrupalBoot8.php
@@ -235,7 +235,7 @@ public function bootstrapDrupalFull(BootstrapManager $manager)
     {
         $this->logger->debug(dt('Start bootstrap of the Drupal Kernel.'));
         $this->kernel->boot();
-        $this->kernel->prepareLegacyRequest($this->getRequest());
+        $this->kernel->preHandle($this->getRequest());
         $this->logger->debug(dt('Finished bootstrap of the Drupal Kernel.'));
 
         parent::bootstrapDrupalFull($manager);
diff --git a/vendor/drush/drush/src/Commands/core/EditCommands.php b/vendor/drush/drush/src/Commands/core/EditCommands.php
index bb3be30952..fced23a9e9 100644
--- a/vendor/drush/drush/src/Commands/core/EditCommands.php
+++ b/vendor/drush/drush/src/Commands/core/EditCommands.php
@@ -132,7 +132,7 @@ public static function phpIniFiles()
         return $ini_files;
     }
 
-    public static function bashFiles()
+    public function bashFiles()
     {
         $bashFiles = [];
         $home = $this->getConfig()->home();
diff --git a/vendor/drush/drush/src/Commands/core/LoginCommands.php b/vendor/drush/drush/src/Commands/core/LoginCommands.php
index 98c7840d68..370732bd10 100644
--- a/vendor/drush/drush/src/Commands/core/LoginCommands.php
+++ b/vendor/drush/drush/src/Commands/core/LoginCommands.php
@@ -7,6 +7,7 @@
 use Drush\Exec\ExecTrait;
 use Consolidation\SiteAlias\SiteAliasManagerAwareInterface;
 use Consolidation\SiteAlias\SiteAliasManagerAwareTrait;
+use Drupal\Core\Url;
 
 class LoginCommands extends DrushCommands implements SiteAliasManagerAwareInterface
 {
@@ -71,10 +72,20 @@ public function login($path = '', $options = ['name' => null, 'uid' => null, 'ma
                 $account = User::load(1);
             }
 
-            $link = user_pass_reset_url($account). '/login';
-            if ($path) {
-                $link .= '?destination=' . $path;
-            }
+            $timestamp = \Drupal::time()->getRequestTime();
+            $link = Url::fromRoute(
+                'user.reset.login',
+                [
+                  'uid' => $account->id(),
+                  'timestamp' => $timestamp,
+                  'hash' => user_pass_rehash($account, $timestamp),
+                ],
+                [
+                  'absolute' => true,
+                  'query' => $path ? ['destination' => $path] : [],
+                  'language' => \Drupal::languageManager()->getLanguage($account->getPreferredLangcode()),
+                ]
+            )->toString();
         }
         $port = $options['redirect-port'];
         $this->startBrowser($link, false, $port, $options['browser']);
diff --git a/vendor/drush/drush/src/Commands/core/RsyncCommands.php b/vendor/drush/drush/src/Commands/core/RsyncCommands.php
index e7bf12b1b7..5529fde729 100644
--- a/vendor/drush/drush/src/Commands/core/RsyncCommands.php
+++ b/vendor/drush/drush/src/Commands/core/RsyncCommands.php
@@ -3,6 +3,7 @@
 
 use Consolidation\AnnotatedCommand\CommandData;
 use Consolidation\SiteProcess\ProcessBase;
+use Consolidation\SiteProcess\Util\Escape;
 use Drush\Commands\DrushCommands;
 use Drush\Drush;
 use Drush\Exceptions\UserAbortException;
@@ -62,15 +63,15 @@ public function rsync($source, $target, array $extra, $options = ['exclude-paths
         // Prompt for confirmation. This is destructive.
         if (!$this->getConfig()->simulate()) {
             $replacements = ['!source' => $this->sourceEvaluatedPath->fullyQualifiedPathPreservingTrailingSlash(), '!target' => $this->targetEvaluatedPath->fullyQualifiedPath()];
-            if (!$this->io()->confirm(dt("Replace files in !target with !source?", $replacements))) {
+            if (!$this->io()->confirm(dt("Copy new and override existing files at !target. The source is !source?", $replacements))) {
                 throw new UserAbortException();
             }
         }
 
         $rsync_options = $this->rsyncOptions($options);
         $parameters = array_merge([$rsync_options], $extra);
-        $parameters[] = $this->sourceEvaluatedPath->fullyQualifiedPathPreservingTrailingSlash();
-        $parameters[] = $this->targetEvaluatedPath->fullyQualifiedPath();
+        $parameters[] = Escape::shellArg($this->sourceEvaluatedPath->fullyQualifiedPathPreservingTrailingSlash());
+        $parameters[] = Escape::shellArg($this->targetEvaluatedPath->fullyQualifiedPath());
 
         $ssh_options = $this->getConfig()->get('ssh.options', '');
         $exec = "rsync -e 'ssh $ssh_options'". ' '. implode(' ', array_filter($parameters));
diff --git a/vendor/drush/drush/src/Commands/core/SiteInstallCommands.php b/vendor/drush/drush/src/Commands/core/SiteInstallCommands.php
index 3ddc7ce95e..56c35dee4e 100644
--- a/vendor/drush/drush/src/Commands/core/SiteInstallCommands.php
+++ b/vendor/drush/drush/src/Commands/core/SiteInstallCommands.php
@@ -390,7 +390,7 @@ protected function getSitesSubdirFromUri($root, $uri)
         if (file_exists($sites_file)) {
             include $sites_file;
             /** @var array $sites */
-            if (array_key_exists($uri, $sites)) {
+            if (isset($sites) && array_key_exists($uri, $sites)) {
                 return $sites[$uri];
             }
         }
diff --git a/vendor/drush/drush/src/Commands/core/SshCommands.php b/vendor/drush/drush/src/Commands/core/SshCommands.php
index c7036ab8e3..2e8d012822 100644
--- a/vendor/drush/drush/src/Commands/core/SshCommands.php
+++ b/vendor/drush/drush/src/Commands/core/SshCommands.php
@@ -11,7 +11,8 @@ class SshCommands extends DrushCommands implements SiteAliasManagerAwareInterfac
     use SiteAliasManagerAwareTrait;
 
     /**
-     * Connect to a Drupal site's server via SSH.
+     * Connect to a Drupal site's server via SSH, and optionally run a shell
+     * command.
      *
      * @command site:ssh
      * @option cd Directory to change to. Defaults to Drupal root.
@@ -23,15 +24,14 @@ class SshCommands extends DrushCommands implements SiteAliasManagerAwareInterfac
      *   Run "ls /tmp" on @prod site.
      * @usage drush @prod ssh git pull
      *   Run "git pull" on the Drupal root directory on the @prod site.
+     * @usage drush ssh git pull
+     *   Run "git pull" on the local Drupal root directory.
      * @aliases ssh,site-ssh
      * @topics docs:aliases
      */
     public function ssh(array $args, $options = ['cd' => self::REQ, 'tty' => false])
     {
         $alias = $this->siteAliasManager()->getSelf();
-        if ($alias->isNone()) {
-            throw new \Exception('A site alias is required. The way you call ssh command has changed to `drush @alias ssh`.');
-        }
 
         if (empty($args)) {
             $args[] = 'bash';
diff --git a/vendor/drush/drush/src/Commands/sql/SqlSyncCommands.php b/vendor/drush/drush/src/Commands/sql/SqlSyncCommands.php
index 4c7e556519..24b3f40e37 100644
--- a/vendor/drush/drush/src/Commands/sql/SqlSyncCommands.php
+++ b/vendor/drush/drush/src/Commands/sql/SqlSyncCommands.php
@@ -37,8 +37,6 @@ class SqlSyncCommands extends DrushCommands implements SiteAliasManagerAwareInte
      *   Copy the database from the local site to the site with the alias 'target'.
      * @usage drush sql:sync #prod #dev
      *   Copy the database from the site in /sites/prod to the site in /sites/dev (multisite installation).
-     * @usage drush sql:sync @source @self --database=foo --strict=0
-     *   Copy a secondary database whose $databases key is named 'foo'. Additional options to sql:dump may also be passed.
      * @topics docs:aliases,docs:policy,docs:configuration,docs:example-sync-via-http
      * @throws \Exception
      */
@@ -221,7 +219,7 @@ public function rsync($options, SiteAlias $sourceRecord, SiteAlias $targetRecord
                 $runner = $targetRecord;
             }
             $this->logger()->notice(dt('Copying dump file from source to target.'));
-            $process = $this->processManager()->drush($runner, 'core-rsync', [$sourceRecord->name() . ":$source_dump_path", $targetRecord->name() . ":$target_dump_path"], [], $double_dash_options);
+            $process = $this->processManager()->drush($runner, 'core-rsync', [$sourceRecord->name() . ":$source_dump_path", $targetRecord->name() . ":$target_dump_path"], ['yes' => true], $double_dash_options);
             $process->mustRun($process->showRealtime());
         }
         return $target_dump_path;
diff --git a/vendor/drush/drush/src/Drupal/Commands/core/DrupalCommands.php b/vendor/drush/drush/src/Drupal/Commands/core/DrupalCommands.php
index e1a4486acd..1c93d6bbb1 100644
--- a/vendor/drush/drush/src/Drupal/Commands/core/DrupalCommands.php
+++ b/vendor/drush/drush/src/Drupal/Commands/core/DrupalCommands.php
@@ -56,10 +56,7 @@ public function __construct(CronInterface $cron, ModuleHandlerInterface $moduleH
      */
     public function cron()
     {
-        $result = $this->getCron()->run();
-        if (!$result) {
-            throw new \Exception(dt('Cron run failed.'));
-        }
+        $this->getCron()->run();
     }
 
     /**
diff --git a/vendor/drush/drush/src/Drupal/Commands/core/QueueCommands.php b/vendor/drush/drush/src/Drupal/Commands/core/QueueCommands.php
index 3bf4b514d2..c63c8c58e6 100644
--- a/vendor/drush/drush/src/Drupal/Commands/core/QueueCommands.php
+++ b/vendor/drush/drush/src/Drupal/Commands/core/QueueCommands.php
@@ -57,17 +57,19 @@ public function getQueueService()
      * @param string $name The name of the queue to run, as defined in either hook_queue_info or hook_cron_queue_info.
      * @validate-queue name
      * @option time-limit The maximum number of seconds allowed to run the queue
+     * @option items-limit The maximum number of items allowed to run the queue
      */
-    public function run($name, $options = ['time-limit' => self::REQ])
+    public function run($name, $options = ['time-limit' => self::REQ, 'items-limit' => self::OPT])
     {
         $time_limit = (int) $options['time-limit'];
+        $items_limit = (int) $options['items-limit'];
         $start = microtime(true);
         $worker = $this->getWorkerManager()->createInstance($name);
         $end = time() + $time_limit;
         $queue = $this->getQueue($name);
         $count = 0;
 
-        while ((!$time_limit || time() < $end) && ($item = $queue->claimItem())) {
+        while ((!$time_limit || time() < $end) && (!$items_limit || $count < $items_limit) && ($item = $queue->claimItem())) {
             try {
                 $this->logger()->info(dt('Processing item @id from @name queue.', ['@name' => $name, '@id' => $item->item_id]));
                 $worker->processItem($item->data);
diff --git a/vendor/drush/drush/src/Runtime/ShutdownHandler.php b/vendor/drush/drush/src/Runtime/ShutdownHandler.php
index feb1e17c87..1c40d2a765 100644
--- a/vendor/drush/drush/src/Runtime/ShutdownHandler.php
+++ b/vendor/drush/drush/src/Runtime/ShutdownHandler.php
@@ -42,7 +42,7 @@ public function shutdownHandler()
         }
 
         if (!Drush::config()->get(Runtime::DRUSH_RUNTIME_COMPLETED_NAMESPACE)) {
-            Drush::logger()->warning('Drush command terminated abnormally. Check for an exit() in your Drupal site.');
+            Drush::logger()->warning('Drush command terminated abnormally.');
             // Make sure that we will return an error code when we exit,
             // even if the code that got us here did not.
             if (!Runtime::exitCode()) {
diff --git a/vendor/jakub-onderka/php-console-color/.gitignore b/vendor/jakub-onderka/php-console-color/.gitignore
deleted file mode 100644
index 05ab16b84f..0000000000
--- a/vendor/jakub-onderka/php-console-color/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-build
-vendor
-composer.lock
diff --git a/vendor/jakub-onderka/php-console-color/.travis.yml b/vendor/jakub-onderka/php-console-color/.travis.yml
deleted file mode 100644
index 49175a9969..0000000000
--- a/vendor/jakub-onderka/php-console-color/.travis.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-language: php
-
-php:
-  - 5.4
-  - 5.5
-  - 5.6
-  - 7.0
-  - 7.1
-  - 7.2
-
-sudo: false
-
-cache:
-  directories:
-    - vendor
-    - $HOME/.composer/cache
-
-before_script:
-  - composer install --no-interaction --prefer-source
-
-script:
-  - ant phplint
-  - ant phpcs
-  - ant phpunit
diff --git a/vendor/jakub-onderka/php-console-color/LICENSE b/vendor/jakub-onderka/php-console-color/LICENSE
deleted file mode 100644
index 0954fc941f..0000000000
--- a/vendor/jakub-onderka/php-console-color/LICENSE
+++ /dev/null
@@ -1,27 +0,0 @@
-Copyright (c) 2014-2018, Jakub Onderka
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-  * Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-
-  * Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/jakub-onderka/php-console-color/README.md b/vendor/jakub-onderka/php-console-color/README.md
deleted file mode 100644
index 39e55d9255..0000000000
--- a/vendor/jakub-onderka/php-console-color/README.md
+++ /dev/null
@@ -1,10 +0,0 @@
-PHP Console Color
-=================
-
-[![Build Status](https://travis-ci.org/JakubOnderka/PHP-Console-Color.svg?branch=master)](https://travis-ci.org/JakubOnderka/PHP-Console-Color)
-
-Simple library for creating colored console ouput.
-
-See `example.php` how to use this library.
-
-![Example from Windows 10](https://user-images.githubusercontent.com/89590/40762008-687f909a-646c-11e8-88d6-e268a064be4c.png)
\ No newline at end of file
diff --git a/vendor/jakub-onderka/php-console-color/build.xml b/vendor/jakub-onderka/php-console-color/build.xml
deleted file mode 100644
index bb4ba66d8f..0000000000
--- a/vendor/jakub-onderka/php-console-color/build.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project default="build">
-    <!-- Set executables according to OS -->
-    <condition property="phpunit" value="${basedir}/vendor/bin/phpunit.bat" else="${basedir}/vendor/bin/phpunit">
-        <os family="windows" />
-    </condition>
-
-    <condition property="phpcs" value="${basedir}/vendor/bin/phpcs.bat" else="${basedir}/vendor/bin/phpcs">
-        <os family="windows" />
-    </condition>
-
-    <condition property="parallel-lint" value="${basedir}/vendor/bin/parallel-lint.bat" else="${basedir}/vendor/bin/parallel-lint">
-        <os family="windows" />
-    </condition>
-
-    <condition property="var-dump-check" value="${basedir}/vendor/bin/var-dump-check.bat" else="${basedir}/vendor/bin/var-dump-check">
-        <os family="windows"/>
-    </condition>
-
-    <!-- Use colors in output can be disabled when calling ant with -Duse-colors=false -->
-    <property name="use-colors" value="true" />
-
-    <condition property="colors-arg.color" value="--colors" else="">
-        <equals arg1="${use-colors}" arg2="true" />
-    </condition>
-
-    <condition property="colors-arg.no-colors" value="" else="--no-colors">
-        <equals arg1="${use-colors}" arg2="true" />
-    </condition>
-
-    <!-- Targets -->
-    <target name="prepare" description="Create build directory">
-        <mkdir dir="${basedir}/build/logs" />
-    </target>
-
-    <target name="phplint" description="Check syntax errors in PHP files">
-        <exec executable="${parallel-lint}" failonerror="true">
-            <arg line='--exclude ${basedir}/vendor/' />
-            <arg line='${colors-arg.no-colors}' />
-            <arg line='${basedir}' />
-        </exec>
-    </target>
-
-    <target name="var-dump-check" description="Check PHP files for forgotten variable dumps">
-        <exec executable="${var-dump-check}" failonerror="true">
-            <arg line='--exclude ${basedir}/vendor/' />
-            <arg line='${colors-arg.no-colors}' />
-            <arg line='${basedir}' />
-        </exec>
-    </target>
-
-    <target name="phpcs" depends="prepare" description="Check PHP code style">
-        <delete file="${basedir}/build/logs/checkstyle.xml" quiet="true" />
-
-        <exec executable="${phpcs}">
-            <arg line='--extensions=php' />
-            <arg line='--standard="${basedir}/vendor/jakub-onderka/php-code-style/ruleset.xml"' />
-            <arg line='--report-checkstyle="${basedir}/build/logs/checkstyle.xml"' />
-            <arg line='--report-full' />
-            <arg line='"${basedir}/src"' />
-        </exec>
-    </target>
-
-    <target name="phpunit" depends="prepare" description="PHP unit">
-        <delete file="${basedir}/build/logs/phpunit.xml" quiet="true" />
-
-        <exec executable="${phpunit}">
-            <arg line='--configuration ${basedir}/phpunit.xml' />
-            <arg line='-d memory_limit=256M' />
-            <arg line='--log-junit "${basedir}/build/logs/phpunit.xml"' />
-            <arg line='${colors-arg.color}' />
-        </exec>
-    </target>
-
-    <target name="phpunit-coverage" depends="prepare" description="PHP unit with code coverage">
-        <delete file="${basedir}/build/logs/phpunit.xml" quiet="true" />
-        <delete file="${basedir}/build/logs/clover.xml" quiet="true" />
-        <delete dir="${basedir}/build/coverage" quiet="true" />
-        <mkdir dir="${basedir}/build/coverage" />
-
-        <exec executable="${phpunit}">
-            <arg line='--configuration ${basedir}/phpunit.xml' />
-            <arg line='-d memory_limit=256M' />
-            <arg line='--log-junit "${basedir}/build/logs/phpunit.xml"' />
-            <arg line='--coverage-clover "${basedir}/build/logs/clover.xml"' />
-            <arg line='--coverage-html "${basedir}/build/coverage/"' />
-            <arg line='${colors-arg.color}' />
-        </exec>
-    </target>
-
-    <target name="build" depends="phplint,var-dump-check,phpcs,phpunit" />
-
-</project>
\ No newline at end of file
diff --git a/vendor/jakub-onderka/php-console-color/composer.json b/vendor/jakub-onderka/php-console-color/composer.json
deleted file mode 100644
index 6481cb51d0..0000000000
--- a/vendor/jakub-onderka/php-console-color/composer.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
-    "name": "jakub-onderka/php-console-color",
-    "license": "BSD-2-Clause",
-    "authors": [
-        {
-            "name": "Jakub Onderka",
-            "email": "jakub.onderka@gmail.com"
-        }
-    ],
-    "autoload": {
-        "psr-4": {"JakubOnderka\\PhpConsoleColor\\": "src/"}
-    },
-    "require": {
-        "php": ">=5.4.0"
-    },
-    "require-dev": {
-        "phpunit/phpunit": "~4.3",
-        "jakub-onderka/php-parallel-lint": "1.0",
-        "jakub-onderka/php-var-dump-check": "0.*",
-        "squizlabs/php_codesniffer": "1.*",
-        "jakub-onderka/php-code-style": "1.0"
-    }
-}
diff --git a/vendor/jakub-onderka/php-console-color/example.php b/vendor/jakub-onderka/php-console-color/example.php
deleted file mode 100644
index 5e698a24ec..0000000000
--- a/vendor/jakub-onderka/php-console-color/example.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-$loader = require_once __DIR__ . '/vendor/autoload.php';
-
-$consoleColor = new JakubOnderka\PhpConsoleColor\ConsoleColor();
-
-echo "Colors are supported: " . ($consoleColor->isSupported() ? 'Yes' : 'No') . "\n";
-echo "256 colors are supported: " . ($consoleColor->are256ColorsSupported() ? 'Yes' : 'No') . "\n\n";
-
-if ($consoleColor->isSupported()) {
-    foreach ($consoleColor->getPossibleStyles() as $style) {
-        echo $consoleColor->apply($style, $style) . "\n";
-    }
-}
-
-echo "\n";
-
-if ($consoleColor->are256ColorsSupported()) {
-    echo "Foreground colors:\n";
-    for ($i = 1; $i <= 255; $i++) {
-        echo $consoleColor->apply("color_$i", str_pad($i, 6, ' ', STR_PAD_BOTH));
-
-        if ($i % 15 === 0) {
-            echo "\n";
-        }
-    }
-
-    echo "\nBackground colors:\n";
-
-    for ($i = 1; $i <= 255; $i++) {
-        echo $consoleColor->apply("bg_color_$i", str_pad($i, 6, ' ', STR_PAD_BOTH));
-
-        if ($i % 15 === 0) {
-            echo "\n";
-        }
-    }
-
-    echo "\n";
-}
diff --git a/vendor/jakub-onderka/php-console-color/phpunit.xml b/vendor/jakub-onderka/php-console-color/phpunit.xml
deleted file mode 100644
index f1105cc4e2..0000000000
--- a/vendor/jakub-onderka/php-console-color/phpunit.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<phpunit
-    bootstrap="./vendor/autoload.php">
-    <testsuites>
-        <testsuite>
-            <directory suffix="Test.php">tests</directory>
-        </testsuite>
-    </testsuites>
-
-    <!-- Ignore vendor folder for code coverage -->
-    <filter>
-        <blacklist>
-            <directory>vendor</directory>
-        </blacklist>
-    </filter>
-</phpunit>
diff --git a/vendor/jakub-onderka/php-console-color/src/ConsoleColor.php b/vendor/jakub-onderka/php-console-color/src/ConsoleColor.php
deleted file mode 100644
index 90fd125286..0000000000
--- a/vendor/jakub-onderka/php-console-color/src/ConsoleColor.php
+++ /dev/null
@@ -1,287 +0,0 @@
-<?php
-namespace JakubOnderka\PhpConsoleColor;
-
-class ConsoleColor
-{
-    const FOREGROUND = 38,
-        BACKGROUND = 48;
-
-    const COLOR256_REGEXP = '~^(bg_)?color_([0-9]{1,3})$~';
-
-    const RESET_STYLE = 0;
-
-    /** @var bool */
-    private $isSupported;
-
-    /** @var bool */
-    private $forceStyle = false;
-
-    /** @var array */
-    private $styles = array(
-        'none' => null,
-        'bold' => '1',
-        'dark' => '2',
-        'italic' => '3',
-        'underline' => '4',
-        'blink' => '5',
-        'reverse' => '7',
-        'concealed' => '8',
-
-        'default' => '39',
-        'black' => '30',
-        'red' => '31',
-        'green' => '32',
-        'yellow' => '33',
-        'blue' => '34',
-        'magenta' => '35',
-        'cyan' => '36',
-        'light_gray' => '37',
-
-        'dark_gray' => '90',
-        'light_red' => '91',
-        'light_green' => '92',
-        'light_yellow' => '93',
-        'light_blue' => '94',
-        'light_magenta' => '95',
-        'light_cyan' => '96',
-        'white' => '97',
-
-        'bg_default' => '49',
-        'bg_black' => '40',
-        'bg_red' => '41',
-        'bg_green' => '42',
-        'bg_yellow' => '43',
-        'bg_blue' => '44',
-        'bg_magenta' => '45',
-        'bg_cyan' => '46',
-        'bg_light_gray' => '47',
-
-        'bg_dark_gray' => '100',
-        'bg_light_red' => '101',
-        'bg_light_green' => '102',
-        'bg_light_yellow' => '103',
-        'bg_light_blue' => '104',
-        'bg_light_magenta' => '105',
-        'bg_light_cyan' => '106',
-        'bg_white' => '107',
-    );
-
-    /** @var array */
-    private $themes = array();
-
-    public function __construct()
-    {
-        $this->isSupported = $this->isSupported();
-    }
-
-    /**
-     * @param string|array $style
-     * @param string $text
-     * @return string
-     * @throws InvalidStyleException
-     * @throws \InvalidArgumentException
-     */
-    public function apply($style, $text)
-    {
-        if (!$this->isStyleForced() && !$this->isSupported()) {
-            return $text;
-        }
-
-        if (is_string($style)) {
-            $style = array($style);
-        }
-        if (!is_array($style)) {
-            throw new \InvalidArgumentException("Style must be string or array.");
-        }
-
-        $sequences = array();
-
-        foreach ($style as $s) {
-            if (isset($this->themes[$s])) {
-                $sequences = array_merge($sequences, $this->themeSequence($s));
-            } else if ($this->isValidStyle($s)) {
-                $sequences[] = $this->styleSequence($s);
-            } else {
-                throw new InvalidStyleException($s);
-            }
-        }
-
-        $sequences = array_filter($sequences, function ($val) {
-            return $val !== null;
-        });
-
-        if (empty($sequences)) {
-            return $text;
-        }
-
-        return $this->escSequence(implode(';', $sequences)) . $text . $this->escSequence(self::RESET_STYLE);
-    }
-
-    /**
-     * @param bool $forceStyle
-     */
-    public function setForceStyle($forceStyle)
-    {
-        $this->forceStyle = (bool) $forceStyle;
-    }
-
-    /**
-     * @return bool
-     */
-    public function isStyleForced()
-    {
-        return $this->forceStyle;
-    }
-
-    /**
-     * @param array $themes
-     * @throws InvalidStyleException
-     * @throws \InvalidArgumentException
-     */
-    public function setThemes(array $themes)
-    {
-        $this->themes = array();
-        foreach ($themes as $name => $styles) {
-            $this->addTheme($name, $styles);
-        }
-    }
-
-    /**
-     * @param string $name
-     * @param array|string $styles
-     * @throws \InvalidArgumentException
-     * @throws InvalidStyleException
-     */
-    public function addTheme($name, $styles)
-    {
-        if (is_string($styles)) {
-            $styles = array($styles);
-        }
-        if (!is_array($styles)) {
-            throw new \InvalidArgumentException("Style must be string or array.");
-        }
-
-        foreach ($styles as $style) {
-            if (!$this->isValidStyle($style)) {
-                throw new InvalidStyleException($style);
-            }
-        }
-
-        $this->themes[$name] = $styles;
-    }
-
-    /**
-     * @return array
-     */
-    public function getThemes()
-    {
-        return $this->themes;
-    }
-
-    /**
-     * @param string $name
-     * @return bool
-     */
-    public function hasTheme($name)
-    {
-        return isset($this->themes[$name]);
-    }
-
-    /**
-     * @param string $name
-     */
-    public function removeTheme($name)
-    {
-        unset($this->themes[$name]);
-    }
-
-    /**
-     * @return bool
-     */
-    public function isSupported()
-    {
-        if (DIRECTORY_SEPARATOR === '\\') {
-            if (function_exists('sapi_windows_vt100_support') && @sapi_windows_vt100_support(STDOUT)) {
-                return true;
-            } elseif (getenv('ANSICON') !== false || getenv('ConEmuANSI') === 'ON') {
-                return true;
-            }
-            return false;
-        } else {
-            return function_exists('posix_isatty') && @posix_isatty(STDOUT);
-        }
-    }
-
-    /**
-     * @return bool
-     */
-    public function are256ColorsSupported()
-    {
-        if (DIRECTORY_SEPARATOR === '\\') {
-            return function_exists('sapi_windows_vt100_support') && @sapi_windows_vt100_support(STDOUT);
-        } else {
-            return strpos(getenv('TERM'), '256color') !== false;
-        }
-    }
-
-    /**
-     * @return array
-     */
-    public function getPossibleStyles()
-    {
-        return array_keys($this->styles);
-    }
-
-    /**
-     * @param string $name
-     * @return string[]
-     */
-    private function themeSequence($name)
-    {
-        $sequences = array();
-        foreach ($this->themes[$name] as $style) {
-            $sequences[] = $this->styleSequence($style);
-        }
-        return $sequences;
-    }
-
-    /**
-     * @param string $style
-     * @return string
-     */
-    private function styleSequence($style)
-    {
-        if (array_key_exists($style, $this->styles)) {
-            return $this->styles[$style];
-        }
-
-        if (!$this->are256ColorsSupported()) {
-            return null;
-        }
-
-        preg_match(self::COLOR256_REGEXP, $style, $matches);
-
-        $type = $matches[1] === 'bg_' ? self::BACKGROUND : self::FOREGROUND;
-        $value = $matches[2];
-
-        return "$type;5;$value";
-    }
-
-    /**
-     * @param string $style
-     * @return bool
-     */
-    private function isValidStyle($style)
-    {
-        return array_key_exists($style, $this->styles) || preg_match(self::COLOR256_REGEXP, $style);
-    }
-
-    /**
-     * @param string|int $value
-     * @return string
-     */
-    private function escSequence($value)
-    {
-        return "\033[{$value}m";
-    }
-}
diff --git a/vendor/jakub-onderka/php-console-color/src/InvalidStyleException.php b/vendor/jakub-onderka/php-console-color/src/InvalidStyleException.php
deleted file mode 100644
index 6f1586f62e..0000000000
--- a/vendor/jakub-onderka/php-console-color/src/InvalidStyleException.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-namespace JakubOnderka\PhpConsoleColor;
-
-class InvalidStyleException extends \Exception
-{
-    public function __construct($styleName)
-    {
-        parent::__construct("Invalid style $styleName.");
-    }
-}
\ No newline at end of file
diff --git a/vendor/jakub-onderka/php-console-color/tests/ConsoleColorTest.php b/vendor/jakub-onderka/php-console-color/tests/ConsoleColorTest.php
deleted file mode 100644
index aaa1a224a3..0000000000
--- a/vendor/jakub-onderka/php-console-color/tests/ConsoleColorTest.php
+++ /dev/null
@@ -1,184 +0,0 @@
-<?php
-use JakubOnderka\PhpConsoleColor\ConsoleColor;
-
-class ConsoleColorWithForceSupport extends ConsoleColor
-{
-    private $isSupportedForce = true;
-
-    private $are256ColorsSupportedForce = true;
-
-    public function setIsSupported($isSupported)
-    {
-        $this->isSupportedForce = $isSupported;
-    }
-
-    public function isSupported()
-    {
-        return $this->isSupportedForce;
-    }
-
-    public function setAre256ColorsSupported($are256ColorsSupported)
-    {
-        $this->are256ColorsSupportedForce = $are256ColorsSupported;
-    }
-
-    public function are256ColorsSupported()
-    {
-        return $this->are256ColorsSupportedForce;
-    }
-}
-
-class ConsoleColorTest extends \PHPUnit_Framework_TestCase
-{
-    /** @var ConsoleColorWithForceSupport */
-    private $uut;
-
-    protected function setUp()
-    {
-        $this->uut = new ConsoleColorWithForceSupport();
-    }
-
-    public function testNone()
-    {
-        $output = $this->uut->apply('none', 'text');
-        $this->assertEquals("text", $output);
-    }
-
-    public function testBold()
-    {
-        $output = $this->uut->apply('bold', 'text');
-        $this->assertEquals("\033[1mtext\033[0m", $output);
-    }
-
-    public function testBoldColorsAreNotSupported()
-    {
-        $this->uut->setIsSupported(false);
-
-        $output = $this->uut->apply('bold', 'text');
-        $this->assertEquals("text", $output);
-    }
-
-    public function testBoldColorsAreNotSupportedButAreForced()
-    {
-        $this->uut->setIsSupported(false);
-        $this->uut->setForceStyle(true);
-
-        $output = $this->uut->apply('bold', 'text');
-        $this->assertEquals("\033[1mtext\033[0m", $output);
-    }
-
-    public function testDark()
-    {
-        $output = $this->uut->apply('dark', 'text');
-        $this->assertEquals("\033[2mtext\033[0m", $output);
-    }
-
-    public function testBoldAndDark()
-    {
-        $output = $this->uut->apply(array('bold', 'dark'), 'text');
-        $this->assertEquals("\033[1;2mtext\033[0m", $output);
-    }
-
-    public function test256ColorForeground()
-    {
-        $output = $this->uut->apply('color_255', 'text');
-        $this->assertEquals("\033[38;5;255mtext\033[0m", $output);
-    }
-
-    public function test256ColorWithoutSupport()
-    {
-        $this->uut->setAre256ColorsSupported(false);
-
-        $output = $this->uut->apply('color_255', 'text');
-        $this->assertEquals("text", $output);
-    }
-
-    public function test256ColorBackground()
-    {
-        $output = $this->uut->apply('bg_color_255', 'text');
-        $this->assertEquals("\033[48;5;255mtext\033[0m", $output);
-    }
-
-    public function test256ColorForegroundAndBackground()
-    {
-        $output = $this->uut->apply(array('color_200', 'bg_color_255'), 'text');
-        $this->assertEquals("\033[38;5;200;48;5;255mtext\033[0m", $output);
-    }
-
-    public function testSetOwnTheme()
-    {
-        $this->uut->setThemes(array('bold_dark' => array('bold', 'dark')));
-        $output = $this->uut->apply(array('bold_dark'), 'text');
-        $this->assertEquals("\033[1;2mtext\033[0m", $output);
-    }
-
-    public function testAddOwnTheme()
-    {
-        $this->uut->addTheme('bold_own', 'bold');
-        $output = $this->uut->apply(array('bold_own'), 'text');
-        $this->assertEquals("\033[1mtext\033[0m", $output);
-    }
-
-    public function testAddOwnThemeArray()
-    {
-        $this->uut->addTheme('bold_dark', array('bold', 'dark'));
-        $output = $this->uut->apply(array('bold_dark'), 'text');
-        $this->assertEquals("\033[1;2mtext\033[0m", $output);
-    }
-
-    public function testOwnWithStyle()
-    {
-        $this->uut->addTheme('bold_dark', array('bold', 'dark'));
-        $output = $this->uut->apply(array('bold_dark', 'italic'), 'text');
-        $this->assertEquals("\033[1;2;3mtext\033[0m", $output);
-    }
-
-    public function testHasAndRemoveTheme()
-    {
-        $this->assertFalse($this->uut->hasTheme('bold_dark'));
-
-        $this->uut->addTheme('bold_dark', array('bold', 'dark'));
-        $this->assertTrue($this->uut->hasTheme('bold_dark'));
-
-        $this->uut->removeTheme('bold_dark');
-        $this->assertFalse($this->uut->hasTheme('bold_dark'));
-    }
-
-    public function testApplyInvalidArgument()
-    {
-        $this->setExpectedException('\InvalidArgumentException');
-        $this->uut->apply(new stdClass(), 'text');
-    }
-
-    public function testApplyInvalidStyleName()
-    {
-        $this->setExpectedException('\JakubOnderka\PhpConsoleColor\InvalidStyleException');
-        $this->uut->apply('invalid', 'text');
-    }
-
-    public function testApplyInvalid256Color()
-    {
-        $this->setExpectedException('\JakubOnderka\PhpConsoleColor\InvalidStyleException');
-        $this->uut->apply('color_2134', 'text');
-    }
-
-    public function testThemeInvalidStyle()
-    {
-        $this->setExpectedException('\JakubOnderka\PhpConsoleColor\InvalidStyleException');
-        $this->uut->addTheme('invalid', array('invalid'));
-    }
-
-    public function testForceStyle()
-    {
-        $this->assertFalse($this->uut->isStyleForced());
-        $this->uut->setForceStyle(true);
-        $this->assertTrue($this->uut->isStyleForced());
-    }
-
-    public function testGetPossibleStyles()
-    {
-        $this->assertInternalType('array', $this->uut->getPossibleStyles());
-        $this->assertNotEmpty($this->uut->getPossibleStyles());
-    }
-}
-
diff --git a/vendor/jakub-onderka/php-console-highlighter/.gitignore b/vendor/jakub-onderka/php-console-highlighter/.gitignore
deleted file mode 100644
index 70f6ec0695..0000000000
--- a/vendor/jakub-onderka/php-console-highlighter/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-/.idea/
-/build/
-/vendor/
-/composer.lock
\ No newline at end of file
diff --git a/vendor/jakub-onderka/php-console-highlighter/.travis.yml b/vendor/jakub-onderka/php-console-highlighter/.travis.yml
deleted file mode 100644
index c88c4ec9d4..0000000000
--- a/vendor/jakub-onderka/php-console-highlighter/.travis.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-language: php
-
-php:
-  - 5.4
-  - 5.5
-  - 5.6
-  - 7.0
-  - 7.1
-  - 7.2
-  
-sudo: false
-
-cache:
-  directories:
-    - vendor
-    - $HOME/.composer/cache
-
-before_script:
-  - composer install --no-interaction --prefer-source
-
-script:
-  - ant
diff --git a/vendor/jakub-onderka/php-console-highlighter/README.md b/vendor/jakub-onderka/php-console-highlighter/README.md
deleted file mode 100644
index 1ef3d1340d..0000000000
--- a/vendor/jakub-onderka/php-console-highlighter/README.md
+++ /dev/null
@@ -1,42 +0,0 @@
-PHP Console Highlighter
-=======================
-
-Highlight PHP code in console (terminal).
-
-Example
--------
-![Example](http://jakubonderka.github.io/php-console-highlight-example.png)
-
-Install
--------
-
-Just create a `composer.json` file and run the `php composer.phar install` command to install it:
-
-```json
-{
-    "require": {
-        "jakub-onderka/php-console-highlighter": "0.*"
-    }
-}
-```
-
-Usage
--------
-```php
-<?php
-use JakubOnderka\PhpConsoleColor\ConsoleColor;
-use JakubOnderka\PhpConsoleHighlighter\Highlighter;
-
-require __DIR__ . '/vendor/autoload.php';
-
-$highlighter = new Highlighter(new ConsoleColor());
-
-$fileContent = file_get_contents(__FILE__);
-echo $highlighter->getWholeFile($fileContent);
-```
-
-------
-
-[![Downloads this Month](https://img.shields.io/packagist/dm/jakub-onderka/php-console-highlighter.svg)](https://packagist.org/packages/jakub-onderka/php-console-highlighter)
-[![Build Status](https://travis-ci.org/JakubOnderka/PHP-Console-Highlighter.svg?branch=master)](https://travis-ci.org/JakubOnderka/PHP-Console-Highlighter)
-[![License](https://poser.pugx.org/jakub-onderka/php-console-highlighter/license.svg)](https://packagist.org/packages/jakub-onderka/php-console-highlighter)
diff --git a/vendor/jakub-onderka/php-console-highlighter/build.xml b/vendor/jakub-onderka/php-console-highlighter/build.xml
deleted file mode 100644
index d656ea9d4b..0000000000
--- a/vendor/jakub-onderka/php-console-highlighter/build.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project default="build">
-    <!-- Set executables according to OS -->
-    <condition property="phpunit" value="${basedir}/vendor/bin/phpunit.bat" else="${basedir}/vendor/bin/phpunit">
-        <os family="windows" />
-    </condition>
-
-    <condition property="phpcs" value="${basedir}/vendor/bin/phpcs.bat" else="${basedir}/vendor/bin/phpcs">
-        <os family="windows" />
-    </condition>
-
-    <condition property="parallel-lint" value="${basedir}/vendor/bin/parallel-lint.bat" else="${basedir}/vendor/bin/parallel-lint">
-        <os family="windows" />
-    </condition>
-
-    <condition property="var-dump-check" value="${basedir}/vendor/bin/var-dump-check.bat" else="${basedir}/vendor/bin/var-dump-check">
-        <os family="windows"/>
-    </condition>
-
-    <!-- Use colors in output can be disabled when calling ant with -Duse-colors=false -->
-    <property name="use-colors" value="true" />
-
-    <condition property="colors-arg.color" value="--colors" else="">
-        <equals arg1="${use-colors}" arg2="true" />
-    </condition>
-
-    <condition property="colors-arg.no-colors" value="" else="--no-colors">
-        <equals arg1="${use-colors}" arg2="true" />
-    </condition>
-
-    <!-- Targets -->
-    <target name="prepare" description="Create build directory">
-        <mkdir dir="${basedir}/build/logs" />
-    </target>
-
-    <target name="phplint" description="Check syntax errors in PHP files">
-        <exec executable="${parallel-lint}" failonerror="true">
-            <arg line='--exclude ${basedir}/vendor/' />
-            <arg line='${colors-arg.no-colors}' />
-            <arg line='${basedir}' />
-        </exec>
-    </target>
-
-    <target name="var-dump-check" description="Check PHP files for forgotten variable dumps">
-        <exec executable="${var-dump-check}" failonerror="true">
-            <arg line='--exclude ${basedir}/vendor/' />
-            <arg line='${colors-arg.no-colors}' />
-            <arg line='${basedir}' />
-        </exec>
-    </target>
-
-    <target name="phpcs" depends="prepare" description="Check PHP code style">
-        <delete file="${basedir}/build/logs/checkstyle.xml" quiet="true" />
-
-        <exec executable="${phpcs}">
-            <arg line='--extensions=php' />
-            <arg line='--standard="${basedir}/vendor/jakub-onderka/php-code-style/ruleset.xml"' />
-            <arg line='--report-checkstyle="${basedir}/build/logs/checkstyle.xml"' />
-            <arg line='--report-full' />
-            <arg line='"${basedir}/src"' />
-        </exec>
-    </target>
-
-    <target name="phpunit" depends="prepare" description="PHP unit">
-        <delete file="${basedir}/build/logs/phpunit.xml" quiet="true" />
-
-        <exec executable="${phpunit}">
-            <arg line='--configuration ${basedir}/phpunit.xml' />
-            <arg line='-d memory_limit=256M' />
-            <arg line='--log-junit "${basedir}/build/logs/phpunit.xml"' />
-            <arg line='${colors-arg.color}' />
-        </exec>
-    </target>
-
-    <target name="phpunit-coverage" depends="prepare" description="PHP unit with code coverage">
-        <delete file="${basedir}/build/logs/phpunit.xml" quiet="true" />
-        <delete file="${basedir}/build/logs/clover.xml" quiet="true" />
-        <delete dir="${basedir}/build/coverage" quiet="true" />
-        <mkdir dir="${basedir}/build/coverage" />
-
-        <exec executable="${phpunit}" failonerror="true">
-            <arg line='--configuration ${basedir}/phpunit.xml' />
-            <arg line='-d memory_limit=256M' />
-            <arg line='--log-junit "${basedir}/build/logs/phpunit.xml"' />
-            <arg line='--coverage-clover "${basedir}/build/logs/clover.xml"' />
-            <arg line='--coverage-html "${basedir}/build/coverage/"' />
-            <arg line='${colors-arg.color}' />
-        </exec>
-    </target>
-
-    <target name="build" depends="phplint,var-dump-check,phpcs,phpunit" />
-
-</project>
\ No newline at end of file
diff --git a/vendor/jakub-onderka/php-console-highlighter/composer.json b/vendor/jakub-onderka/php-console-highlighter/composer.json
deleted file mode 100644
index 21c29f710a..0000000000
--- a/vendor/jakub-onderka/php-console-highlighter/composer.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-    "name": "jakub-onderka/php-console-highlighter",
-    "description": "Highlight PHP code in terminal",
-    "type": "library",
-    "license": "MIT",
-    "authors": [
-        {
-            "name": "Jakub Onderka",
-            "email": "acci@acci.cz",
-            "homepage": "http://www.acci.cz/"
-        }
-    ],
-    "autoload": {
-        "psr-4": {"JakubOnderka\\PhpConsoleHighlighter\\": "src/"}
-    },
-    "require": {
-        "php": ">=5.4.0",
-        "ext-tokenizer": "*",
-        "jakub-onderka/php-console-color": "~0.2"
-    },
-    "require-dev": {
-        "phpunit/phpunit": "~4.0",
-        "jakub-onderka/php-parallel-lint": "~1.0",
-        "jakub-onderka/php-var-dump-check": "~0.1",
-        "squizlabs/php_codesniffer": "~1.5",
-        "jakub-onderka/php-code-style": "~1.0"
-    }
-}
diff --git a/vendor/jakub-onderka/php-console-highlighter/examples/snippet.php b/vendor/jakub-onderka/php-console-highlighter/examples/snippet.php
deleted file mode 100644
index 1bf6ac3bd7..0000000000
--- a/vendor/jakub-onderka/php-console-highlighter/examples/snippet.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-use JakubOnderka\PhpConsoleColor\ConsoleColor;
-use JakubOnderka\PhpConsoleHighlighter\Highlighter;
-
-require __DIR__ . '/../vendor/autoload.php';
-
-$highlighter = new Highlighter(new ConsoleColor());
-
-$fileContent = file_get_contents(__FILE__);
-echo $highlighter->getCodeSnippet($fileContent, 3);
\ No newline at end of file
diff --git a/vendor/jakub-onderka/php-console-highlighter/examples/whole_file.php b/vendor/jakub-onderka/php-console-highlighter/examples/whole_file.php
deleted file mode 100644
index 2a023d80ab..0000000000
--- a/vendor/jakub-onderka/php-console-highlighter/examples/whole_file.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-use JakubOnderka\PhpConsoleColor\ConsoleColor;
-use JakubOnderka\PhpConsoleHighlighter\Highlighter;
-
-require __DIR__ . '/../vendor/autoload.php';
-
-$highlighter = new Highlighter(new ConsoleColor());
-
-$fileContent = file_get_contents(__FILE__);
-echo $highlighter->getWholeFile($fileContent);
\ No newline at end of file
diff --git a/vendor/jakub-onderka/php-console-highlighter/examples/whole_file_line_numbers.php b/vendor/jakub-onderka/php-console-highlighter/examples/whole_file_line_numbers.php
deleted file mode 100644
index f9178f2d13..0000000000
--- a/vendor/jakub-onderka/php-console-highlighter/examples/whole_file_line_numbers.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-use JakubOnderka\PhpConsoleColor\ConsoleColor;
-use JakubOnderka\PhpConsoleHighlighter\Highlighter;
-
-require __DIR__ . '/../vendor/autoload.php';
-
-$highlighter = new Highlighter(new ConsoleColor());
-
-$fileContent = file_get_contents(__FILE__);
-echo $highlighter->getWholeFileWithLineNumbers($fileContent);
\ No newline at end of file
diff --git a/vendor/jakub-onderka/php-console-highlighter/phpunit.xml b/vendor/jakub-onderka/php-console-highlighter/phpunit.xml
deleted file mode 100644
index 9c653a680a..0000000000
--- a/vendor/jakub-onderka/php-console-highlighter/phpunit.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<phpunit bootstrap="./vendor/autoload.php">
-    <testsuites>
-        <testsuite>
-            <directory suffix="Test.php">tests</directory>
-        </testsuite>
-    </testsuites>
-
-    <!-- Ignore vendor folder for code coverage -->
-    <filter>
-        <blacklist>
-            <directory>vendor</directory>
-        </blacklist>
-    </filter>
-</phpunit>
diff --git a/vendor/jakub-onderka/php-console-highlighter/src/Highlighter.php b/vendor/jakub-onderka/php-console-highlighter/src/Highlighter.php
deleted file mode 100644
index 47ce30d2c0..0000000000
--- a/vendor/jakub-onderka/php-console-highlighter/src/Highlighter.php
+++ /dev/null
@@ -1,263 +0,0 @@
-<?php
-namespace JakubOnderka\PhpConsoleHighlighter;
-
-use JakubOnderka\PhpConsoleColor\ConsoleColor;
-
-class Highlighter
-{
-    const TOKEN_DEFAULT = 'token_default',
-        TOKEN_COMMENT = 'token_comment',
-        TOKEN_STRING = 'token_string',
-        TOKEN_HTML = 'token_html',
-        TOKEN_KEYWORD = 'token_keyword';
-
-    const ACTUAL_LINE_MARK = 'actual_line_mark',
-        LINE_NUMBER = 'line_number';
-
-    /** @var ConsoleColor */
-    private $color;
-
-    /** @var array */
-    private $defaultTheme = array(
-        self::TOKEN_STRING => 'red',
-        self::TOKEN_COMMENT => 'yellow',
-        self::TOKEN_KEYWORD => 'green',
-        self::TOKEN_DEFAULT => 'default',
-        self::TOKEN_HTML => 'cyan',
-
-        self::ACTUAL_LINE_MARK  => 'red',
-        self::LINE_NUMBER => 'dark_gray',
-    );
-
-    /**
-     * @param ConsoleColor $color
-     * @throws \JakubOnderka\PhpConsoleColor\InvalidStyleException
-     */
-    public function __construct(ConsoleColor $color)
-    {
-        $this->color = $color;
-
-        foreach ($this->defaultTheme as $name => $styles) {
-            if (!$this->color->hasTheme($name)) {
-                $this->color->addTheme($name, $styles);
-            }
-        }
-    }
-
-    /**
-     * @param string $source
-     * @param int $lineNumber
-     * @param int $linesBefore
-     * @param int $linesAfter
-     * @return string
-     * @throws \JakubOnderka\PhpConsoleColor\InvalidStyleException
-     * @throws \InvalidArgumentException
-     */
-    public function getCodeSnippet($source, $lineNumber, $linesBefore = 2, $linesAfter = 2)
-    {
-        $tokenLines = $this->getHighlightedLines($source);
-
-        $offset = $lineNumber - $linesBefore - 1;
-        $offset = max($offset, 0);
-        $length = $linesAfter + $linesBefore + 1;
-        $tokenLines = array_slice($tokenLines, $offset, $length, $preserveKeys = true);
-
-        $lines = $this->colorLines($tokenLines);
-
-        return $this->lineNumbers($lines, $lineNumber);
-    }
-
-    /**
-     * @param string $source
-     * @return string
-     * @throws \JakubOnderka\PhpConsoleColor\InvalidStyleException
-     * @throws \InvalidArgumentException
-     */
-    public function getWholeFile($source)
-    {
-        $tokenLines = $this->getHighlightedLines($source);
-        $lines = $this->colorLines($tokenLines);
-        return implode(PHP_EOL, $lines);
-    }
-
-    /**
-     * @param string $source
-     * @return string
-     * @throws \JakubOnderka\PhpConsoleColor\InvalidStyleException
-     * @throws \InvalidArgumentException
-     */
-    public function getWholeFileWithLineNumbers($source)
-    {
-        $tokenLines = $this->getHighlightedLines($source);
-        $lines = $this->colorLines($tokenLines);
-        return $this->lineNumbers($lines);
-    }
-
-    /**
-     * @param string $source
-     * @return array
-     */
-    private function getHighlightedLines($source)
-    {
-        $source = str_replace(array("\r\n", "\r"), "\n", $source);
-        $tokens = $this->tokenize($source);
-        return $this->splitToLines($tokens);
-    }
-
-    /**
-     * @param string $source
-     * @return array
-     */
-    private function tokenize($source)
-    {
-        $tokens = token_get_all($source);
-
-        $output = array();
-        $currentType = null;
-        $buffer = '';
-
-        foreach ($tokens as $token) {
-            if (is_array($token)) {
-                switch ($token[0]) {
-                    case T_WHITESPACE:
-                        break;
-
-                    case T_OPEN_TAG:
-                    case T_OPEN_TAG_WITH_ECHO:
-                    case T_CLOSE_TAG:
-                    case T_STRING:
-                    case T_VARIABLE:
-
-                    // Constants
-                    case T_DIR:
-                    case T_FILE:
-                    case T_METHOD_C:
-                    case T_DNUMBER:
-                    case T_LNUMBER:
-                    case T_NS_C:
-                    case T_LINE:
-                    case T_CLASS_C:
-                    case T_FUNC_C:
-                    case T_TRAIT_C:
-                        $newType = self::TOKEN_DEFAULT;
-                        break;
-
-                    case T_COMMENT:
-                    case T_DOC_COMMENT:
-                        $newType = self::TOKEN_COMMENT;
-                        break;
-
-                    case T_ENCAPSED_AND_WHITESPACE:
-                    case T_CONSTANT_ENCAPSED_STRING:
-                        $newType = self::TOKEN_STRING;
-                        break;
-
-                    case T_INLINE_HTML:
-                        $newType = self::TOKEN_HTML;
-                        break;
-
-                    default:
-                        $newType = self::TOKEN_KEYWORD;
-                }
-            } else {
-                $newType = $token === '"' ? self::TOKEN_STRING : self::TOKEN_KEYWORD;
-            }
-
-            if ($currentType === null) {
-                $currentType = $newType;
-            }
-
-            if ($currentType !== $newType) {
-                $output[] = array($currentType, $buffer);
-                $buffer = '';
-                $currentType = $newType;
-            }
-
-            $buffer .= is_array($token) ? $token[1] : $token;
-        }
-
-        if (isset($newType)) {
-            $output[] = array($newType, $buffer);
-        }
-
-        return $output;
-    }
-
-    /**
-     * @param array $tokens
-     * @return array
-     */
-    private function splitToLines(array $tokens)
-    {
-        $lines = array();
-
-        $line = array();
-        foreach ($tokens as $token) {
-            foreach (explode("\n", $token[1]) as $count => $tokenLine) {
-                if ($count > 0) {
-                    $lines[] = $line;
-                    $line = array();
-                }
-
-                if ($tokenLine === '') {
-                    continue;
-                }
-
-                $line[] = array($token[0], $tokenLine);
-            }
-        }
-
-        $lines[] = $line;
-
-        return $lines;
-    }
-
-    /**
-     * @param array $tokenLines
-     * @return array
-     * @throws \JakubOnderka\PhpConsoleColor\InvalidStyleException
-     * @throws \InvalidArgumentException
-     */
-    private function colorLines(array $tokenLines)
-    {
-        $lines = array();
-        foreach ($tokenLines as $lineCount => $tokenLine) {
-            $line = '';
-            foreach ($tokenLine as $token) {
-                list($tokenType, $tokenValue) = $token;
-                if ($this->color->hasTheme($tokenType)) {
-                    $line .= $this->color->apply($tokenType, $tokenValue);
-                } else {
-                    $line .= $tokenValue;
-                }
-            }
-            $lines[$lineCount] = $line;
-        }
-
-        return $lines;
-    }
-
-    /**
-     * @param array $lines
-     * @param null|int $markLine
-     * @return string
-     * @throws \JakubOnderka\PhpConsoleColor\InvalidStyleException
-     */
-    private function lineNumbers(array $lines, $markLine = null)
-    {
-        end($lines);
-        $lineStrlen = strlen(key($lines) + 1);
-
-        $snippet = '';
-        foreach ($lines as $i => $line) {
-            if ($markLine !== null) {
-                $snippet .= ($markLine === $i + 1 ? $this->color->apply(self::ACTUAL_LINE_MARK, '  > ') : '    ');
-            }
-
-            $snippet .= $this->color->apply(self::LINE_NUMBER, str_pad($i + 1, $lineStrlen, ' ', STR_PAD_LEFT) . '| ');
-            $snippet .= $line . PHP_EOL;
-        }
-
-        return $snippet;
-    }
-}
\ No newline at end of file
diff --git a/vendor/jakub-onderka/php-console-highlighter/tests/HigligterTest.php b/vendor/jakub-onderka/php-console-highlighter/tests/HigligterTest.php
deleted file mode 100644
index 187beb67bb..0000000000
--- a/vendor/jakub-onderka/php-console-highlighter/tests/HigligterTest.php
+++ /dev/null
@@ -1,274 +0,0 @@
-<?php
-namespace JakubOnderka\PhpConsoleHighlighter;
-
-class HighlighterTest extends \PHPUnit_Framework_TestCase
-{
-    /** @var Highlighter */
-    private $uut;
-
-    protected function getConsoleColorMock()
-    {
-        $mock = method_exists($this, 'createMock')
-            ? $this->createMock('\JakubOnderka\PhpConsoleColor\ConsoleColor')
-            : $this->getMock('\JakubOnderka\PhpConsoleColor\ConsoleColor');
-
-        $mock->expects($this->any())
-            ->method('apply')
-            ->will($this->returnCallback(function ($style, $text) {
-                return "<$style>$text</$style>";
-            }));
-
-        $mock->expects($this->any())
-            ->method('hasTheme')
-            ->will($this->returnValue(true));
-
-        return $mock;
-    }
-
-    protected function setUp()
-    {
-        $this->uut = new Highlighter($this->getConsoleColorMock());
-    }
-
-    protected function compare($original, $expected)
-    {
-        $output = $this->uut->getWholeFile($original);
-        $this->assertEquals($expected, $output);
-    }
-
-    public function testVariable()
-    {
-        $this->compare(
-            <<<EOL
-<?php
-echo \$a;
-EOL
-            ,
-            <<<EOL
-<token_default><?php</token_default>
-<token_keyword>echo </token_keyword><token_default>\$a</token_default><token_keyword>;</token_keyword>
-EOL
-        );
-    }
-
-    public function testInteger()
-    {
-        $this->compare(
-            <<<EOL
-<?php
-echo 43;
-EOL
-            ,
-            <<<EOL
-<token_default><?php</token_default>
-<token_keyword>echo </token_keyword><token_default>43</token_default><token_keyword>;</token_keyword>
-EOL
-        );
-    }
-
-    public function testFloat()
-    {
-        $this->compare(
-            <<<EOL
-<?php
-echo 43.3;
-EOL
-            ,
-            <<<EOL
-<token_default><?php</token_default>
-<token_keyword>echo </token_keyword><token_default>43.3</token_default><token_keyword>;</token_keyword>
-EOL
-        );
-    }
-
-    public function testHex()
-    {
-        $this->compare(
-            <<<EOL
-<?php
-echo 0x43;
-EOL
-            ,
-            <<<EOL
-<token_default><?php</token_default>
-<token_keyword>echo </token_keyword><token_default>0x43</token_default><token_keyword>;</token_keyword>
-EOL
-        );
-    }
-
-    public function testBasicFunction()
-    {
-        $this->compare(
-            <<<EOL
-<?php
-function plus(\$a, \$b) {
-    return \$a + \$b;
-}
-EOL
-            ,
-            <<<EOL
-<token_default><?php</token_default>
-<token_keyword>function </token_keyword><token_default>plus</token_default><token_keyword>(</token_keyword><token_default>\$a</token_default><token_keyword>, </token_keyword><token_default>\$b</token_default><token_keyword>) {</token_keyword>
-<token_keyword>    return </token_keyword><token_default>\$a </token_default><token_keyword>+ </token_keyword><token_default>\$b</token_default><token_keyword>;</token_keyword>
-<token_keyword>}</token_keyword>
-EOL
-        );
-    }
-
-    public function testStringNormal()
-    {
-        $this->compare(
-            <<<EOL
-<?php
-echo 'Ahoj světe';
-EOL
-            ,
-            <<<EOL
-<token_default><?php</token_default>
-<token_keyword>echo </token_keyword><token_string>'Ahoj světe'</token_string><token_keyword>;</token_keyword>
-EOL
-        );
-    }
-
-    public function testStringDouble()
-    {
-        $this->compare(
-            <<<EOL
-<?php
-echo "Ahoj světe";
-EOL
-            ,
-            <<<EOL
-<token_default><?php</token_default>
-<token_keyword>echo </token_keyword><token_string>"Ahoj světe"</token_string><token_keyword>;</token_keyword>
-EOL
-        );
-    }
-
-    public function testInstanceof()
-    {
-        $this->compare(
-            <<<EOL
-<?php
-\$a instanceof stdClass;
-EOL
-            ,
-            <<<EOL
-<token_default><?php</token_default>
-<token_default>\$a </token_default><token_keyword>instanceof </token_keyword><token_default>stdClass</token_default><token_keyword>;</token_keyword>
-EOL
-        );
-    }
-
-    /*
-     * Constants
-     */
-    public function testConstant()
-    {
-        $constants = array(
-            '__FILE__',
-            '__LINE__',
-            '__CLASS__',
-            '__FUNCTION__',
-            '__METHOD__',
-            '__TRAIT__',
-            '__DIR__',
-            '__NAMESPACE__'
-        );
-
-        foreach ($constants as $constant) {
-            $this->compare(
-                <<<EOL
-<?php
-$constant;
-EOL
-                ,
-                <<<EOL
-<token_default><?php</token_default>
-<token_default>$constant</token_default><token_keyword>;</token_keyword>
-EOL
-            );
-        }
-    }
-
-    /*
-     * Comments
-     */
-    public function testComment()
-    {
-        $this->compare(
-            <<<EOL
-<?php
-/* Ahoj */
-EOL
-            ,
-            <<<EOL
-<token_default><?php</token_default>
-<token_comment>/* Ahoj */</token_comment>
-EOL
-        );
-    }
-
-    public function testDocComment()
-    {
-        $this->compare(
-            <<<EOL
-<?php
-/** Ahoj */
-EOL
-            ,
-            <<<EOL
-<token_default><?php</token_default>
-<token_comment>/** Ahoj */</token_comment>
-EOL
-        );
-    }
-
-    public function testInlineComment()
-    {
-        $this->compare(
-            <<<EOL
-<?php
-// Ahoj
-EOL
-            ,
-            <<<EOL
-<token_default><?php</token_default>
-<token_comment>// Ahoj</token_comment>
-EOL
-        );
-    }
-
-    public function testHashComment()
-    {
-        $this->compare(
-            <<<EOL
-<?php
-# Ahoj
-EOL
-            ,
-            <<<EOL
-<token_default><?php</token_default>
-<token_comment># Ahoj</token_comment>
-EOL
-        );
-    }
-
-    public function testEmpty()
-    {
-        $this->compare(
-            ''
-            ,
-            ''
-        );
-    }
-
-    public function testWhitespace()
-    {
-        $this->compare(
-            ' '
-            ,
-            '<token_html> </token_html>'
-        );
-    }
-}
diff --git a/vendor/nikic/php-parser/.gitignore b/vendor/nikic/php-parser/.gitignore
deleted file mode 100644
index 8c7db2a6ef..0000000000
--- a/vendor/nikic/php-parser/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-vendor/
-composer.lock
-grammar/kmyacc.exe
-grammar/y.output
diff --git a/vendor/nikic/php-parser/.travis.yml b/vendor/nikic/php-parser/.travis.yml
deleted file mode 100644
index d33d7a8b50..0000000000
--- a/vendor/nikic/php-parser/.travis.yml
+++ /dev/null
@@ -1,31 +0,0 @@
-language: php
-dist: xenial
-sudo: false
-
-cache:
-  directories:
-    - $HOME/.composer/cache
-
-php:
-  - 7.0
-  - 7.1
-  - 7.2
-  - 7.3
-  - 7.4snapshot
-  - nightly
-
-install:
-  - if [ $TRAVIS_PHP_VERSION = '7.0' ]; then composer require satooshi/php-coveralls '~1.0'; fi
-  - composer install --prefer-dist --ignore-platform-reqs
-
-matrix:
-  allow_failures:
-    - php: nightly
-  fast_finish: true
-
-script:
-  - if [ $TRAVIS_PHP_VERSION = '7.0' ]; then vendor/bin/phpunit --coverage-clover build/logs/clover.xml; else vendor/bin/phpunit; fi
-  - if [ $TRAVIS_PHP_VERSION = '7.2' ]; then test_old/run-php-src.sh; fi
-
-after_success:
-  - if [ $TRAVIS_PHP_VERSION = '7.0' ]; then php vendor/bin/coveralls; fi
diff --git a/vendor/nikic/php-parser/CHANGELOG.md b/vendor/nikic/php-parser/CHANGELOG.md
deleted file mode 100644
index c3045d91c1..0000000000
--- a/vendor/nikic/php-parser/CHANGELOG.md
+++ /dev/null
@@ -1,659 +0,0 @@
-Version 4.2.3-dev
------------------
-
-Nothing yet.
-
-Version 4.2.2 (2019-05-25)
---------------------------
-
-### Added
-
-* [PHP 7.4] Add support for arrow functions using a new `Expr\ArrowFunction` node. (#602)
-* [PHP 7.4] Add support for array spreads, using a new `unpack` subnode on `ArrayItem`. (#609)
-* Added support for inserting into empty list nodes in the formatting preserving pretty printer.
-
-### Changed
-
-* `php-parse` will now print messages to stderr, so that stdout only contains the actual result of
-  the operation (such as a JSON dump). (#605)
-
-### Fixed
-
-* Fixed attribute assignment for zero-length nop statements, and a related assertion failure in
-  the formatting-preserving pretty printer. (#589)
-
-Version 4.2.1 (2019-02-16)
---------------------------
-
-### Added
-
-* [PHP 7.4] Add support for `??=` operator through a new `AssignOp\Coalesce` node. (#575)
-
-Version 4.2.0 (2019-01-12)
---------------------------
-
-### Added
-
-* [PHP 7.4] Add support for typed properties through a new `type` subnode of `Stmt\Property`.
-  Additionally `Builder\Property` now has a `setType()` method. (#567)
-* Add `kind` attribute to `Cast\Double_`, which allows to distinguish between `(float)`,
-  `(double)` and `(real)`. The form of the cast will be preserved by the pretty printer. (#565)
-
-### Fixed
-
-* Remove assertion when pretty printing anonymous class with a name (#554).
-
-Version 4.1.1 (2018-12-26)
---------------------------
-
-### Fixed
-
-* Fix "undefined offset" notice when parsing specific malformed code (#551).
-
-### Added
-
-* Support error recovery for missing return type (`function foo() : {}`) (#544).
-
-Version 4.1.0 (2018-10-10)
---------------------------
-
-### Added
-
-* Added support for PHP 7.3 flexible heredoc/nowdoc strings, completing support for PHP 7.3. There
-  are two caveats for this feature:
-   * In some rare, pathological cases flexible heredoc/nowdoc strings change the interpretation of
-     existing doc strings. PHP-Parser will now use the new interpretation.
-   * Flexible heredoc/nowdoc strings require special support from the lexer. Because this is not
-     available on PHP versions before 7.3, support has to be emulated. This emulation is not perfect
-     and some cases which we do not expect to occur in practice (such as flexible doc strings being
-     nested within each other through abuse of variable-variable interpolation syntax) may not be
-     recognized correctly.
-* Added `DONT_TRAVERSE_CURRENT_AND_CHILDREN` to `NodeTraverser` to skip both traversal of child
-  nodes, and prevent subsequent visitors from visiting the current node.
-
-Version 4.0.4 (2018-09-18)
---------------------------
-
-### Added
-
-* The following methods have been added to `BuilderFactory`:
-  * `useTrait()` (fluent builder)
-  * `traitUseAdaptation()` (fluent builder)
-  * `useFunction()` (fluent builder)
-  * `useConst()` (fluent builder)
-  * `var()`
-  * `propertyFetch()`
-  
-### Deprecated
-
-* `Builder\Param::setTypeHint()` has been deprecated in favor of the newly introduced
-  `Builder\Param::setType()`.
-
-Version 4.0.3 (2018-07-15)
---------------------------
-
-### Fixed
-
-* Fixed possible undefined offset notice in formatting-preserving printer. (#513)
-
-### Added
-
-* Improved error recovery inside arrays.
-* Preserve trailing comment inside classes. **Note:** This change is possibly BC breaking if your
-  code validates that classes can only contain certain statement types. After this change, classes
-  can also contain Nop statements, while this was not previously possible. (#509)
-
-Version 4.0.2 (2018-06-03)
---------------------------
-
-### Added
-
-* Improved error recovery inside classes.
-* Support error recovery for `foreach` without `as`.
-* Support error recovery for parameters without variable (`function (Type ) {}`).
-* Support error recovery for functions without body (`function ($foo)`).
-
-Version 4.0.1 (2018-03-25)
---------------------------
-
-### Added
-
-* [PHP 7.3] Added support for trailing commas in function calls.
-* [PHP 7.3] Added support for by-reference array destructuring. 
-* Added checks to node traverser to prevent replacing a statement with an expression or vice versa.
-  This should prevent common mistakes in the implementation of node visitors.
-* Added the following methods to `BuilderFactory`, to simplify creation of expressions:
-  * `funcCall()`
-  * `methodCall()`
-  * `staticCall()`
-  * `new()`
-  * `constFetch()`
-  * `classConstFetch()`
-
-Version 4.0.0 (2018-02-28)
---------------------------
-
-* No significant code changes since the beta 1 release.
-
-Version 4.0.0-beta1 (2018-01-27)
---------------------------------
-
-### Fixed
-
-* In formatting-preserving pretty printer: Fixed indentation when inserting into lists. (#466)
-
-### Added
-
-* In formatting-preserving pretty printer: Improved formatting of elements inserted into multi-line
-  arrays.
-
-### Removed
-
-* The `Autoloader` class has been removed. It is now required to use the Composer autoloader.
-
-Version 4.0.0-alpha3 (2017-12-26)
----------------------------------
-
-### Fixed
-
-* In the formatting-preserving pretty printer:
-  * Fixed comment indentation.
-  * Fixed handling of inline HTML in the fallback case.
-  * Fixed insertion into list nodes that require creation of a code block.
-
-### Added
-
-* Added support for inserting at the start of list nodes in formatting-preserving pretty printer.
-
-Version 4.0.0-alpha2 (2017-11-10)
----------------------------------
-
-### Added
-
-* In the formatting-preserving pretty printer:
-  * Added support for changing modifiers.
-  * Added support for anonymous classes.
-  * Added support for removing from list nodes.
-  * Improved support for changing comments.
-* Added start token offsets to comments.
-
-Version 4.0.0-alpha1 (2017-10-18)
----------------------------------
-
-### Added
-
-* Added experimental support for format-preserving pretty-printing. In this mode formatting will be
-  preserved for parts of the code which have not been modified.
-* Added `replaceNodes` option to `NameResolver`, defaulting to true. If this option is disabled,
-  resolved names will be added as `resolvedName` attributes, instead of replacing the original
-  names.
-* Added `NodeFinder` class, which can be used to find nodes based on a callback or class name. This
-  is a utility to avoid custom node visitor implementations for simple search operations.
-* Added `ClassMethod::isMagic()` method.
-* Added `BuilderFactory` methods: `val()` method for creating an AST for a simple value, `concat()`
-  for creating concatenation trees, `args()` for preparing function arguments.
-* Added `NameContext` class, which encapsulates the `NameResolver` logic independently of the actual
-  AST traversal. This facilitates use in other context, such as class names in doc comments.
-  Additionally it provides an API for getting the shortest representation of a name.
-* Added `Node::setAttributes()` method.
-* Added `JsonDecoder`. This allows conversion JSON back into an AST.
-* Added `Name` methods `toLowerString()` and `isSpecialClassName()`.
-* Added `Identifier` and `VarLikeIdentifier` nodes, which are used in place of simple strings in
-  many places.
-* Added `getComments()`, `getStartLine()`, `getEndLine()`, `getStartTokenPos()`, `getEndTokenPos()`,
-  `getStartFilePos()` and `getEndFilePos()` methods to `Node`. These provide a more obvious access
-  point for the already existing attributes of the same name.
-* Added `ConstExprEvaluator` to evaluate constant expressions to PHP values.
-* Added `Expr\BinaryOp::getOperatorSigil()`, returning `+` for `Expr\BinaryOp\Plus`, etc.
-
-### Changed
-
-* Many subnodes that previously held simple strings now use `Identifier` (or `VarLikeIdentifier`)
-  nodes. Please see the UPGRADE-4.0 file for an exhaustive list of affected nodes and some notes on
-  possible impact.
-* Expression statements (`expr;`) are now represented using a `Stmt\Expression` node. Previously
-  these statements were directly represented as their constituent expression.
-* The `name` subnode of `Param` has been renamed to `var` and now contains a `Variable` rather than
-  a plain string.
-* The `name` subnode of `StaticVar` has been renamed to `var` and now contains a `Variable` rather
-  than a plain string.
-* The `var` subnode of `ClosureUse` now contains a `Variable` rather than a plain string.
-* The `var` subnode of `Catch` now contains a `Variable` rather than a plain string.
-* The `alias` subnode of `UseUse` is now `null` if no explicit alias is given. As such,
-  `use Foo\Bar` and `use Foo\Bar as Bar` are now represented differently. The `getAlias()` method
-  can be used to get the effective alias, even if it is not explicitly given.
-
-### Removed
-
-* Support for running on PHP 5 and HHVM has been removed. You can however still parse code of old
-  PHP versions (such as PHP 5.2), while running on PHP 7.
-* Removed `type` subnode on `Class`, `ClassMethod` and `Property` nodes. Use `flags` instead.
-* The `ClassConst::isStatic()` method has been removed. Constants cannot have a static modifier.
-* The `NodeTraverser` no longer accepts `false` as a return value from a `leaveNode()` method.
-  `NodeTraverser::REMOVE_NODE` should be returned instead.
-* The `Node::setLine()` method has been removed. If you really need to, you can use `setAttribute()`
-  instead.
-* The misspelled `Class_::VISIBILITY_MODIFER_MASK` constant has been dropped in favor of
-  `Class_::VISIBILITY_MODIFIER_MASK`.
-* The XML serializer has been removed. As such, the classes `Serializer\XML`, and
-  `Unserializer\XML`, as well as the interfaces `Serializer` and `Unserializer` no longer exist.
-* The `BuilderAbstract` class has been removed. It's functionality is moved into `BuilderHelpers`.
-  However, this is an internal class and should not be used directly.
-
-Version 3.1.5 (2018-02-28)
---------------------------
-
-### Fixed
-
-* Fixed duplicate comment assignment in switch statements. (#469)
-* Improve compatibility with PHP-Scoper. (#477)
-
-Version 3.1.4 (2018-01-25)
---------------------------
-
-### Fixed
-
-* Fixed pretty printing of `-(-$x)` and `+(+$x)`. (#459)
-
-Version 3.1.3 (2017-12-26)
---------------------------
-
-### Fixed
-
-* Improve compatibility with php-scoper, by supporting prefixed namespaces in
-  `NodeAbstract::getType()`.
-
-Version 3.1.2 (2017-11-04)
---------------------------
-
-### Fixed
-
-* Comments on empty blocks are now preserved on a `Stmt\Nop` node. (#382)
-
-### Added
-
-* Added `kind` attribute for `Stmt\Namespace_` node, which is one of `KIND_SEMICOLON` or
-  `KIND_BRACED`. (#417)
-* Added `setDocComment()` method to namespace builder. (#437)
-
-Version 3.1.1 (2017-09-02)
---------------------------
-
-### Fixed
-
-* Fixed syntax error on comment after brace-style namespace declaration. (#412)
-* Added support for TraitUse statements in trait builder. (#413)
-
-Version 3.1.0 (2017-07-28)
---------------------------
-
-### Added
-
-* [PHP 7.2] Added support for trailing comma in group use statements.
-* [PHP 7.2] Added support for `object` type. This means `object` types will now be represented as a
-  builtin type (a simple `"object"` string), rather than a class `Name`.
-
-### Fixed
-
-* Floating-point numbers are now printed correctly if the LC_NUMERIC locale uses a comma as decimal
-  separator.
-
-### Changed
-
-* `Name::$parts` is no longer deprecated.
-
-Version 3.0.6 (2017-06-28)
---------------------------
-
-### Fixed
-
-* Fixed the spelling of `Class_::VISIBILITY_MODIFIER_MASK`. The previous spelling of
-  `Class_::VISIBILITY_MODIFER_MASK` is preserved for backwards compatibility.
-* The pretty printing will now preserve comments inside array literals and function calls by
-  printing the array items / function arguments on separate lines. Array literals and functions that
-  do not contain comments are not affected.
-
-### Added
-
-* Added `Builder\Param::makeVariadic()`.
-
-### Deprecated
-
-* The `Node::setLine()` method has been deprecated.
-
-Version 3.0.5 (2017-03-05)
---------------------------
-
-### Fixed
-
-* Name resolution of `NullableType`s is now performed earlier, so that a fully resolved signature is
-  available when a function is entered. (#360)
-* `Error` nodes are now considered empty, while previously they extended until the token where the
-  error occurred. This made some nodes larger than expected. (#359)
-* Fixed notices being thrown during error recovery in some situations. (#362)
-
-Version 3.0.4 (2017-02-10)
---------------------------
-
-### Fixed
-
-* Fixed some extensibility issues in pretty printer (`pUseType()` is now public and `pPrec()` calls
-  into `p()`, instead of directly dispatching to the type-specific printing method).
-* Fixed notice in `bin/php-parse` script.
-
-### Added
-
-* Error recovery from missing semicolons is now supported in more cases.
-* Error recovery from trailing commas in positions where PHP does not support them is now supported.
-
-Version 3.0.3 (2017-02-03)
---------------------------
-
-### Fixed
-
-* In `"$foo[0]"` the `0` is now parsed as an `LNumber` rather than `String`. (#325)
-* Ensure integers and floats are always pretty printed preserving semantics, even if the particular
-  value can only be manually constructed.
-* Throw a `LogicException` when trying to pretty-print an `Error` node. Previously this resulted in
-  an undefined method exception or fatal error.
-
-### Added
-
-* [PHP 7.1] Added support for negative interpolated offsets: `"$foo[-1]"`
-* Added `preserveOriginalNames` option to `NameResolver`. If this option is enabled, an
-  `originalName` attribute, containing the unresolved name, will be added to each resolved name.
-* Added `php-parse --with-positions` option, which dumps nodes with position information.
-
-### Deprecated
-
-* The XML serializer has been deprecated. In particular, the classes `Serializer\XML`,
-  `Unserializer\XML`, as well as the interfaces `Serializer` and `Unserializer` are deprecated.
-
-Version 3.0.2 (2016-12-06)
---------------------------
-
-### Fixed
-
-* Fixed name resolution of nullable types. (#324)
-* Fixed pretty-printing of nullable types.
-
-Version 3.0.1 (2016-12-01)
---------------------------
-
-### Fixed
-
-* Fixed handling of nested `list()`s: If the nested list was unkeyed, it was directly included in
-  the list items. If it was keyed, it was wrapped in `ArrayItem`. Now nested `List_` nodes are
-  always wrapped in `ArrayItem`s. (#321)
-
-Version 3.0.0 (2016-11-30)
---------------------------
-
-### Added
-
-* Added support for dumping node positions in the NodeDumper through the `dumpPositions` option.
-* Added error recovery support for `$`, `new`, `Foo::`.
-
-Version 3.0.0-beta2 (2016-10-29)
---------------------------------
-
-This release primarily improves our support for error recovery.
-
-### Added
-
-* Added `Node::setDocComment()` method.
-* Added `Error::getMessageWithColumnInfo()` method.
-* Added support for recovery from lexer errors.
-* Added support for recovering from "special" errors (i.e. non-syntax parse errors).
-* Added precise location information for lexer errors.
-* Added `ErrorHandler` interface, and `ErrorHandler\Throwing` and `ErrorHandler\Collecting` as
-  specific implementations. These provide a general mechanism for handling error recovery.
-* Added optional `ErrorHandler` argument to `Parser::parse()`, `Lexer::startLexing()` and
-  `NameResolver::__construct()`.
-* The `NameResolver` now adds a `namespacedName` attribute on name nodes that cannot be statically
-  resolved (unqualified unaliased function or constant names in namespaces).
-
-### Fixed
-
-* Fixed attribute assignment for `GroupUse` prefix and variables in interpolated strings.
-
-### Changed
-
-* The constants on `NameTraverserInterface` have been moved into the `NameTraverser` class.
-* Due to the error handling changes, the `Parser` interface and `Lexer` API have changed.
-* The emulative lexer now directly postprocesses tokens, instead of using `~__EMU__~` sequences.
-  This changes the protected API of the lexer.
-* The `Name::slice()` method now returns `null` for empty slices, previously `new Name([])` was
-  used. `Name::concat()` now also supports concatenation with `null`.
-
-### Removed
-
-* Removed `Name::append()` and `Name::prepend()`. These mutable methods have been superseded by
-  the immutable `Name::concat()`.
-* Removed `Error::getRawLine()` and `Error::setRawLine()`. These methods have been superseded by
-  `Error::getStartLine()` and `Error::setStartLine()`.
-* Removed support for node cloning in the `NodeTraverser`.
-* Removed `$separator` argument from `Name::toString()`.
-* Removed `throw_on_error` parser option and `Parser::getErrors()` method. Use the `ErrorHandler`
-  mechanism instead.
-
-Version 3.0.0-beta1 (2016-09-16)
---------------------------------
-
-### Added
-
-* [7.1] Function/method and parameter builders now support PHP 7.1 type hints (void, iterable and
-  nullable types).
-* Nodes and Comments now implement `JsonSerializable`. The node kind is stored in a `nodeType`
-  property.
-* The `InlineHTML` node now has an `hasLeadingNewline` attribute, that specifies whether the
-  preceding closing tag contained a newline. The pretty printer honors this attribute.
-* Partial parsing of `$obj->` (with missing property name) is now supported in error recovery mode.
-* The error recovery mode is now exposed in the `php-parse` script through the `--with-recovery`
-  or `-r` flags.
-
-The following changes are also part of PHP-Parser 2.1.1:
-
-* The PHP 7 parser will now generate a parse error for `$var =& new Obj` assignments.
-* Comments on free-standing code blocks will now be retained as comments on the first statement in
-  the code block.
-
-Version 3.0.0-alpha1 (2016-07-25)
----------------------------------
-
-### Added
-
-* [7.1] Added support for `void` and `iterable` types. These will now be represented as strings
-  (instead of `Name` instances) similar to other builtin types.
-* [7.1] Added support for class constant visibility. The `ClassConst` node now has a `flags` subnode
-  holding the visibility modifier, as well as `isPublic()`, `isProtected()` and `isPrivate()`
-  methods. The constructor changed to accept the additional subnode.
-* [7.1] Added support for nullable types. These are represented using a new `NullableType` node
-  with a single `type` subnode.
-* [7.1] Added support for short array destructuring syntax. This means that `Array` nodes may now
-  appear as the left-hand-side of assignments and foreach value targets. Additionally the array
-  items may now contain `null` values if elements are skipped.
-* [7.1] Added support for keys in list() destructuring. The `List` subnode `vars` has been renamed
-  to `items` and now contains `ArrayItem`s instead of plain variables.
-* [7.1] Added support for multi-catch. The `Catch` subnode `type` has been renamed to `types` and
-  is now an array of `Name`s.
-* `Name::slice()` now supports lengths and negative offsets. This brings it in line with
-  `array_slice()` functionality.
-
-### Changed
-
-Due to PHP 7.1 support additions described above, the node structure changed as follows:
-
-* `void` and `iterable` types are now stored as strings if the PHP 7 parser is used.
-* The `ClassConst` constructor changed to accept an additional `flags` subnode.
-* The `Array` subnode `items` may now contain `null` elements (destructuring).
-* The `List` subnode `vars` has been renamed to `items` and now contains `ArrayItem`s instead of
-  plain variables.
-* The `Catch` subnode `type` has been renamed to `types` and is now an array of `Name`s.
-
-Additionally the following changes were made:
-
-* The `type` subnode on `Class`, `ClassMethod` and `Property` has been renamed to `flags`. The
-  `type` subnode has retained for backwards compatibility and is populated to the same value as
-  `flags`. However, writes to `type` will not update `flags`.
-* The `TryCatch` subnode `finallyStmts` has been replaced with a `finally` subnode that holds an
-  explicit `Finally` node. This allows for more accurate attribute assignment.
-* The `Trait` constructor now has the same form as the `Class` and `Interface` constructors: It
-  takes an array of subnodes. Unlike classes/interfaces, traits can only have a `stmts` subnode.
-* The `NodeDumper` now prints class/method/property/constant modifiers, as well as the include and
-  use type in a textual representation, instead of only showing the number.
-* All methods on `PrettyPrinter\Standard` are now protected. Previously most of them were public.
-
-### Removed
-
-* Removed support for running on PHP 5.4. It is however still possible to parse PHP 5.2-5.4 code
-  while running on a newer version.
-* The deprecated `Comment::setLine()` and `Comment::setText()` methods have been removed.
-* The deprecated `Name::set()`, `Name::setFirst()` and `Name::setLast()` methods have been removed.
-
-Version 2.1.1 (2016-09-16)
---------------------------
-
-### Changed
-
-* The pretty printer will now escape all control characters in the range `\x00-\x1F` inside double
-  quoted strings. If no special escape sequence is available, an octal escape will be used.
-* The quality of the error recovery has been improved. In particular unterminated expressions should
-  be handled more gracefully.
-* The PHP 7 parser will now generate a parse error for `$var =& new Obj` assignments.
-* Comments on free-standing code blocks will no be retained as comments on the first statement in
-  the code block.
-
-Version 2.1.0 (2016-04-19)
---------------------------
-
-### Fixed
-
-* Properly support `B""` strings (with uppercase `B`) in a number of places.
-* Fixed reformatting of indented parts in a certain non-standard comment style.
-
-### Added
-
-* Added `dumpComments` option to node dumper, to enable dumping of comments associated with nodes.
-* Added `Stmt\Nop` node, that is used to collect comments located at the end of a block or at the
-  end of a file (without a following node with which they could otherwise be associated).
-* Added `kind` attribute to `Expr\Exit` to distinguish between `exit` and `die`.
-* Added `kind` attribute to `Scalar\LNumber` to distinguish between decimal, binary, octal and
-  hexadecimal numbers.
-* Added `kind` attribute to `Expr\Array` to distinguish between `array()` and `[]`.
-* Added `kind` attribute to `Scalar\String` and `Scalar\Encapsed` to distinguish between
-  single-quoted, double-quoted, heredoc and nowdoc string.
-* Added `docLabel` attribute to `Scalar\String` and `Scalar\Encapsed`, if it is a heredoc or
-  nowdoc string.
-* Added start file offset information to `Comment` nodes.
-* Added `setReturnType()` method to function and method builders.
-* Added `-h` and `--help` options to `php-parse` script.
-
-### Changed
-
-* Invalid octal literals now throw a parse error in PHP 7 mode.
-* The pretty printer takes all the new attributes mentioned in the previous section into account.
-* The protected `AbstractPrettyPrinter::pComments()` method no longer returns a trailing newline.
-* The bundled autoloader supports library files being stored in a different directory than
-  `PhpParser` for easier downstream distribution.
-
-### Deprecated
-
-* The `Comment::setLine()` and `Comment::setText()` methods have been deprecated. Construct new
-  objects instead.
-
-### Removed
-
-* The internal (but public) method `Scalar\LNumber::parse()` has been removed. A non-internal
-  `LNumber::fromString()` method has been added instead.
-
-Version 2.0.1 (2016-02-28)
---------------------------
-
-### Fixed
-
-* `declare() {}` and `declare();` are not semantically equivalent and will now result in different
-  ASTs. The format case will have an empty `stmts` array, while the latter will set `stmts` to
-  `null`.
-* Magic constants are now supported as semi-reserved keywords.
-* A shebang line like `#!/usr/bin/env php` is now allowed at the start of a namespaced file.
-  Previously this generated an exception.
-* The `prettyPrintFile()` method will not strip a trailing `?>` from the raw data that follows a
-  `__halt_compiler()` statement.
-* The `prettyPrintFile()` method will not strip an opening `<?php` if the file starts with a
-  comment followed by InlineHTML.
-
-Version 2.0.0 (2015-12-04)
---------------------------
-
-### Changed
-
-* String parts of encapsed strings are now represented using `Scalar\EncapsStringPart` nodes.
-  Previously raw strings were used. This affects the `parts` child of `Scalar\Encaps` and
-  `Expr\ShellExec`. The change has been done to allow assignment of attributes to encapsed string
-  parts.
-
-Version 2.0.0-beta1 (2015-10-21)
---------------------------------
-
-### Fixed
-
-* Fixed issue with too many newlines being stripped at the end of heredoc/nowdoc strings in some
-  cases. (#227)
-
-### Changed
-
-* Update group use support to be in line with recent PHP 7.0 builds.
-* Renamed `php-parse.php` to `php-parse` and registered it as a composer bin.
-* Use composer PSR-4 autoloader instead of custom autoloader.
-* Specify phpunit as a dev dependency.
-
-### Added
-
-* Added `shortArraySyntax` option to pretty printer, to print all arrays using short syntax.
-
-Version 2.0.0-alpha1 (2015-07-14)
----------------------------------
-
-A more detailed description of backwards incompatible changes can be found in the
-[upgrading guide](UPGRADE-2.0.md).
-
-### Removed
-
-* Removed support for running on PHP 5.3. It is however still possible to parse PHP 5.2 and PHP 5.3
-  code while running on a newer version.
-* Removed legacy class name aliases. This includes the old non-namespaced class names and the old
-  names for classes that were renamed for PHP 7 compatibility.
-* Removed support for legacy node format. All nodes must have a `getSubNodeNames()` method now.
-
-### Added
-
-* Added support for remaining PHP 7 features that were not present in 1.x:
-  * Group use declarations. These are represented using `Stmt\GroupUse` nodes. Furthermore a `type`
-    attribute was added to `Stmt\UseUse` to handle mixed group use declarations.
-  * Uniform variable syntax.
-  * Generalized yield operator.
-  * Scalar type declarations. These are presented using `'bool'`, `'int'`, `'float'` and `'string'`
-    as the type. The PHP 5 parser also accepts these, however they'll be `Name` instances there.
-  * Unicode escape sequences.
-* Added `PhpParser\ParserFactory` class, which should be used to create parser instances.
-* Added `Name::concat()` which concatenates two names.
-* Added `Name->slice()` which takes a subslice of a name.
-
-### Changed
-
-* `PhpParser\Parser` is now an interface, implemented by `Parser\Php5`, `Parser\Php7` and
-  `Parser\Multiple`. The `Multiple` parser will try multiple parsers, until one succeeds.
-* Token constants are now defined on `PhpParser\Parser\Tokens` rather than `PhpParser\Parser`.
-* The `Name->set()`, `Name->append()`, `Name->prepend()` and `Name->setFirst()` methods are
-  deprecated in favor of `Name::concat()` and `Name->slice()`.
-* The `NodeTraverser` no longer clones nodes by default. The old behavior can be restored by
-  passing `true` to the constructor.
-* The constructor for `Scalar` nodes no longer has a default value. E.g. `new LNumber()` should now
-  be written as `new LNumber(0)`.
-
----
-
-**This changelog only includes changes from the 2.0 series. For older changes see the
-[1.x series changelog](https://github.com/nikic/PHP-Parser/blob/1.x/CHANGELOG.md) and the
-[0.9 series changelog](https://github.com/nikic/PHP-Parser/blob/0.9/CHANGELOG.md).**
diff --git a/vendor/nikic/php-parser/LICENSE b/vendor/nikic/php-parser/LICENSE
index 920cc5b1f4..2e56718358 100644
--- a/vendor/nikic/php-parser/LICENSE
+++ b/vendor/nikic/php-parser/LICENSE
@@ -1,31 +1,29 @@
-Copyright (c) 2011-2018 by Nikita Popov.
+BSD 3-Clause License
 
-Some rights reserved.
+Copyright (c) 2011, Nikita Popov
+All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
+modification, are permitted provided that the following conditions are met:
 
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
+1. Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
 
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
+2. Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
 
-    * The names of the contributors may not be used to endorse or
-      promote products derived from this software without specific
-      prior written permission.
+3. Neither the name of the copyright holder nor the names of its
+   contributors may be used to endorse or promote products derived from
+   this software without specific prior written permission.
 
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/nikic/php-parser/README.md b/vendor/nikic/php-parser/README.md
index e62748eb1c..f1dd929d7f 100644
--- a/vendor/nikic/php-parser/README.md
+++ b/vendor/nikic/php-parser/README.md
@@ -3,10 +3,10 @@ PHP Parser
 
 [![Build Status](https://travis-ci.org/nikic/PHP-Parser.svg?branch=master)](https://travis-ci.org/nikic/PHP-Parser) [![Coverage Status](https://coveralls.io/repos/github/nikic/PHP-Parser/badge.svg?branch=master)](https://coveralls.io/github/nikic/PHP-Parser?branch=master)
 
-This is a PHP 5.2 to PHP 7.3 parser written in PHP. Its purpose is to simplify static code analysis and
+This is a PHP 5.2 to PHP 7.4 parser written in PHP. Its purpose is to simplify static code analysis and
 manipulation.
 
-[**Documentation for version 4.x**][doc_master] (stable; for running on PHP >= 7.0; for parsing PHP 5.2 to PHP 7.3).
+[**Documentation for version 4.x**][doc_master] (stable; for running on PHP >= 7.0; for parsing PHP 5.2 to PHP 7.4).
 
 [Documentation for version 3.x][doc_3_x] (unsupported; for running on PHP >= 5.5; for parsing PHP 5.2 to PHP 7.2).
 
diff --git a/vendor/nikic/php-parser/UPGRADE-1.0.md b/vendor/nikic/php-parser/UPGRADE-1.0.md
deleted file mode 100644
index 6a9ee2622b..0000000000
--- a/vendor/nikic/php-parser/UPGRADE-1.0.md
+++ /dev/null
@@ -1,121 +0,0 @@
-Upgrading from PHP-Parser 0.9 to 1.0
-====================================
-
-### PHP version requirements
-
-PHP-Parser now requires PHP 5.3 or newer to run. It is however still possible to *parse* PHP 5.2 source code, while
-running on a newer version.
-
-### Move to namespaced names
-
-The library has been moved to use namespaces with the `PhpParser` vendor prefix. However, the old names using
-underscores are still available as aliases, as such most code should continue running on the new version without
-further changes.
-
-Old (still works, but discouraged):
-
-```php
-$parser = new \PHPParser_Parser(new \PHPParser_Lexer_Emulative);
-$prettyPrinter = new \PHPParser_PrettyPrinter_Default;
-```
-
-New:
-
-```php
-$parser = new \PhpParser\Parser(new PhpParser\Lexer\Emulative);
-$prettyPrinter = new \PhpParser\PrettyPrinter\Standard;
-```
-
-Note that the `PHPParser` prefix was changed to `PhpParser`. While PHP class names are technically case-insensitive,
-the autoloader will not be able to load `PHPParser\Parser` or other case variants.
-
-Due to conflicts with reserved keywords, some class names now end with an underscore, e.g. `PHPParser_Node_Stmt_Class`
-is now `PhpParser\Node\Stmt\Class_`. (But as usual, the old name is still available.)
-
-### Changes to `Node::getType()`
-
-The `Node::getType()` method continues to return names using underscores instead of namespace separators and also does
-not contain the trailing underscore that may be present in the class name. As such its output will not change in many
-cases.
-
-However, some node classes have been moved to a different namespace or renamed, which will result in a different
-`Node::getType()` output:
-
-```
-Expr_AssignBitwiseAnd => Expr_AssignOp_BitwiseAnd
-Expr_AssignBitwiseOr  => Expr_AssignOp_BitwiseOr
-Expr_AssignBitwiseXor => Expr_AssignOp_BitwiseXor
-Expr_AssignConcat     => Expr_AssignOp_Concat
-Expr_AssignDiv        => Expr_AssignOp_Div
-Expr_AssignMinus      => Expr_AssignOp_Minus
-Expr_AssignMod        => Expr_AssignOp_Mod
-Expr_AssignMul        => Expr_AssignOp_Mul
-Expr_AssignPlus       => Expr_AssignOp_Plus
-Expr_AssignShiftLeft  => Expr_AssignOp_ShiftLeft
-Expr_AssignShiftRight => Expr_AssignOp_ShiftRight
-
-Expr_BitwiseAnd       => Expr_BinaryOp_BitwiseAnd
-Expr_BitwiseOr        => Expr_BinaryOp_BitwiseOr
-Expr_BitwiseXor       => Expr_BinaryOp_BitwiseXor
-Expr_BooleanAnd       => Expr_BinaryOp_BooleanAnd
-Expr_BooleanOr        => Expr_BinaryOp_BooleanOr
-Expr_Concat           => Expr_BinaryOp_Concat
-Expr_Div              => Expr_BinaryOp_Div
-Expr_Equal            => Expr_BinaryOp_Equal
-Expr_Greater          => Expr_BinaryOp_Greater
-Expr_GreaterOrEqual   => Expr_BinaryOp_GreaterOrEqual
-Expr_Identical        => Expr_BinaryOp_Identical
-Expr_LogicalAnd       => Expr_BinaryOp_LogicalAnd
-Expr_LogicalOr        => Expr_BinaryOp_LogicalOr
-Expr_LogicalXor       => Expr_BinaryOp_LogicalXor
-Expr_Minus            => Expr_BinaryOp_Minus
-Expr_Mod              => Expr_BinaryOp_Mod
-Expr_Mul              => Expr_BinaryOp_Mul
-Expr_NotEqual         => Expr_BinaryOp_NotEqual
-Expr_NotIdentical     => Expr_BinaryOp_NotIdentical
-Expr_Plus             => Expr_BinaryOp_Plus
-Expr_ShiftLeft        => Expr_BinaryOp_ShiftLeft
-Expr_ShiftRight       => Expr_BinaryOp_ShiftRight
-Expr_Smaller          => Expr_BinaryOp_Smaller
-Expr_SmallerOrEqual   => Expr_BinaryOp_SmallerOrEqual
-
-Scalar_ClassConst     => Scalar_MagicConst_Class
-Scalar_DirConst       => Scalar_MagicConst_Dir
-Scalar_FileConst      => Scalar_MagicConst_File
-Scalar_FuncConst      => Scalar_MagicConst_Function
-Scalar_LineConst      => Scalar_MagicConst_Line
-Scalar_MethodConst    => Scalar_MagicConst_Method
-Scalar_NSConst        => Scalar_MagicConst_Namespace
-Scalar_TraitConst     => Scalar_MagicConst_Trait
-```
-
-These changes may affect custom pretty printers and code comparing the return value of `Node::getType()` to specific
-strings.
-
-### Miscellaneous
-
-  * The classes `Template` and `TemplateLoader` have been removed. You should use some other [code generation][code_gen]
-    project built on top of PHP-Parser instead.
-
-  * The `PrettyPrinterAbstract::pStmts()` method now emits a leading newline if the statement list is not empty.
-    Custom pretty printers should remove the explicit newline before `pStmts()` calls.
-
-    Old:
-
-    ```php
-    public function pStmt_Trait(PHPParser_Node_Stmt_Trait $node) {
-        return 'trait ' . $node->name
-             . "\n" . '{' . "\n" . $this->pStmts($node->stmts) . "\n" . '}';
-    }
-    ```
-
-    New:
-
-    ```php
-    public function pStmt_Trait(Stmt\Trait_ $node) {
-        return 'trait ' . $node->name
-             . "\n" . '{' . $this->pStmts($node->stmts) . "\n" . '}';
-    }
-    ```
-
-  [code_gen]: https://github.com/nikic/PHP-Parser/wiki/Projects-using-the-PHP-Parser#code-generation
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/UPGRADE-2.0.md b/vendor/nikic/php-parser/UPGRADE-2.0.md
deleted file mode 100644
index 1c61de54fb..0000000000
--- a/vendor/nikic/php-parser/UPGRADE-2.0.md
+++ /dev/null
@@ -1,74 +0,0 @@
-Upgrading from PHP-Parser 1.x to 2.0
-====================================
-
-### PHP version requirements
-
-PHP-Parser now requires PHP 5.4 or newer to run. It is however still possible to *parse* PHP 5.2 and
-PHP 5.3 source code, while running on a newer version.
-
-### Creating a parser instance
-
-Parser instances should now be created through the `ParserFactory`. Old direct instantiation code
-will not work, because the parser class was renamed.
-
-Old:
-
-```php
-use PhpParser\Parser, PhpParser\Lexer;
-$parser = new Parser(new Lexer\Emulative);
-```
-
-New:
-
-```php
-use PhpParser\ParserFactory;
-$parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);
-```
-
-The first argument to `ParserFactory` determines how different PHP versions are handled. The
-possible values are:
-
- * `ParserFactory::PREFER_PHP7`: Try to parse code as PHP 7. If this fails, try to parse it as PHP 5.
- * `ParserFactory::PREFER_PHP5`: Try to parse code as PHP 5. If this fails, try to parse it as PHP 7.
- * `ParserFactory::ONLY_PHP7`: Parse code as PHP 7.
- * `ParserFactory::ONLY_PHP5`: Parse code as PHP 5.
-
-For most practical purposes the difference between `PREFER_PHP7` and `PREFER_PHP5` is mainly whether
-a scalar type hint like `string` will be stored as `'string'` (PHP 7) or as `new Name('string')`
-(PHP 5).
-
-To use a custom lexer, pass it as the second argument to the `create()` method:
-
-```php
-use PhpParser\ParserFactory;
-$lexer = new MyLexer;
-$parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7, $lexer);
-```
-
-### Rename of the `PhpParser\Parser` class
-
-`PhpParser\Parser` is now an interface, which is implemented by `Parser\Php5`, `Parser\Php7` and
-`Parser\Multiple`. Parser tokens are now defined in `Parser\Tokens`. If you use the `ParserFactory`
-described above to create your parser instance, these changes should have no further impact on you.
-
-### Removal of legacy aliases
-
-All legacy aliases for classes have been removed. This includes the old non-namespaced `PHPParser_`
-classes, as well as the classes that had to be renamed for PHP 7 support.
-
-### Deprecations
-
-The `set()`, `setFirst()`, `append()` and `prepend()` methods of the `Node\Name` class have been
-deprecated. Instead `Name::concat()` and `Name->slice()` should be used.
-
-### Miscellaneous
-
-* The `NodeTraverser` no longer clones nodes by default. If you want to restore the old behavior,
-  pass `true` to the constructor.
-* The legacy node format has been removed. If you use custom nodes, they are now expected to
-  implement a `getSubNodeNames()` method.
-* The default value for `Scalar` node constructors was removed. This means that something like
-  `new LNumber()` should be replaced by `new LNumber(0)`.
-* String parts of encapsed strings are now represented using `Scalar\EncapsStringPart` nodes, while
-  previously raw strings were used. This affects the `parts` child of `Scalar\Encaps` and
-  `Expr\ShellExec`.
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/UPGRADE-3.0.md b/vendor/nikic/php-parser/UPGRADE-3.0.md
deleted file mode 100644
index 9a2895f426..0000000000
--- a/vendor/nikic/php-parser/UPGRADE-3.0.md
+++ /dev/null
@@ -1,160 +0,0 @@
-Upgrading from PHP-Parser 2.x to 3.0
-====================================
-
-The backwards-incompatible changes in this release may be summarized as follows:
-
- * The specific details of the node representation have changed in some cases, primarily to
-   accommodate new PHP 7.1 features.
- * There have been significant changes to the error recovery implementation. This may affect you,
-   if you used the error recovery mode or have a custom lexer implementation.
- * A number of deprecated methods were removed.
-
-### PHP version requirements
-
-PHP-Parser now requires PHP 5.5 or newer to run. It is however still possible to *parse* PHP 5.2,
-5.3 and 5.4 source code, while running on a newer version.
-
-### Changes to the node structure
-
-The following changes are likely to require code changes if the respective nodes are used:
-
- * The `List` subnode `vars` has been renamed to `items` and now contains `ArrayItem`s instead of
-   plain variables.
- * The `Catch` subnode `type` has been renamed to `types` and is now an array of `Name`s.
- * The `TryCatch` subnode `finallyStmts` has been replaced with a `finally` subnode that holds an
-   explicit `Finally` node.
- * The `type` subnode on `Class`, `ClassMethod` and `Property` has been renamed to `flags`. The
-   `type` subnode has retained for backwards compatibility and is populated to the same value as
-   `flags`. However, writes to `type` will not update `flags` and use of `type` is discouraged.
-
-The following changes are unlikely to require code changes:
-
- * The `ClassConst` constructor changed to accept an additional `flags` subnode.
- * The `Trait` constructor now has the same form as the `Class` and `Interface` constructors: It
-   takes an array of subnodes. Unlike classes/interfaces, traits can only have a `stmts` subnode.
- * The `Array` subnode `items` may now contain `null` elements (due to destructuring).
- * `void` and `iterable` types are now stored as strings if the PHP 7 parser is used. Previously
-   these would have been represented as `Name` instances.
-
-### Changes to error recovery mode
-
-Previously, error recovery mode was enabled by setting the `throwOnError` option to `false` when
-creating the parser, while collected errors were retrieved using the `getErrors()` method:
-
-```php
-$lexer = ...;
-$parser = (new ParserFactory)->create(ParserFactor::ONLY_PHP7, $lexer, [
-    'throwOnError' => true,
-]);
-
-$stmts = $parser->parse($code);
-$errors = $parser->getErrors();
-if ($errors) {
-    handleErrors($errors);
-}
-processAst($stmts);
-```
-
-Both the `throwOnError` option and the `getErrors()` method have been removed in PHP-Parser 3.0.
-Instead an instance of `ErrorHandler\Collecting` should be passed to the `parse()` method:
-
-```php
-$lexer = ...;
-$parser = (new ParserFactory)->create(ParserFactor::ONLY_PHP7, $lexer);
-
-$errorHandler = new ErrorHandler\Collecting;
-$stmts = $parser->parse($code, $errorHandler);
-if ($errorHandler->hasErrors()) {
-    handleErrors($errorHandler->getErrors());
-}
-processAst($stmts);
-```
-
-#### Multiple parser fallback in error recovery mode
-
-As a result of this change, if a `Multiple` parser is used (e.g. through the `ParserFactory` using
-`PREFER_PHP7` or `PREFER_PHP5`), it will now return the result of the first *non-throwing* parse. As
-parsing never throws in error recovery mode, the result from the first parser will always be
-returned.
-
-The PHP 7 parser is a superset of the PHP 5 parser, with the exceptions that `=& new` and
-`global $$foo->bar` are not supported (other differences are in representation only). The PHP 7
-parser will be able to recover from the error in both cases. For this reason, this change will
-likely pass unnoticed if you do not specifically test for this syntax.
-
-It is possible to restore the precise previous behavior with the following code:
-
-```php
-$lexer = ...;
-$parser7 = new Parser\Php7($lexer);
-$parser5 = new Parser\Php5($lexer);
-
-$errors7 = new ErrorHandler\Collecting();
-$stmts7 = $parser7->parse($code, $errors7);
-if ($errors7->hasErrors()) {
-    $errors5 = new ErrorHandler\Collecting();
-    $stmts5 = $parser5->parse($code, $errors5);
-    if (!$errors5->hasErrors()) {
-        // If PHP 7 parse has errors but PHP 5 parse has no errors, use PHP 5 result
-        return [$stmts5, $errors5];
-    }
-}
-// If PHP 7 succeeds or both fail use PHP 7 result
-return [$stmts7, $errors7];
-```
-
-#### Error handling in the lexer
-
-In order to support recovery from lexer errors, the signature of the `startLexing()` method changed
-to optionally accept an `ErrorHandler`:
-
-```php
-// OLD
-public function startLexing($code);
-// NEW
-public function startLexing($code, ErrorHandler $errorHandler = null);
-```
-
-If you use a custom lexer with overridden `startLexing()` method, it needs to be changed to accept
-the extra parameter. The value should be passed on to the parent method.
-
-#### Error checks in node constructors
-
-The constructors of certain nodes used to contain additional checks for semantic errors, such as
-creating a try block without either catch or finally. These checks have been moved from the node
-constructors into the parser. This allows recovery from such errors, as well as representing the
-resulting (invalid) AST.
-
-This means that certain error conditions are no longer checked for manually constructed nodes.
-
-### Removed methods, arguments, options
-
-The following methods, arguments or options have been removed:
-
- * `Comment::setLine()`, `Comment::setText()`: Create new `Comment` instances instead.
- * `Name::set()`, `Name::setFirst()`, `Name::setLast()`, `Name::append()`, `Name::prepend()`:
-    Use `Name::concat()` in combination with `Name::slice()` instead.
- * `Error::getRawLine()`, `Error::setRawLine()`. Use `Error::getStartLine()` and
-   `Error::setStartLine()` instead.
- * `Parser::getErrors()`. Use `ErrorHandler\Collecting` instead.
- * `$separator` argument of `Name::toString()`. Use `strtr()` instead, if you really need it.
- * `$cloneNodes` argument of `NodeTraverser::__construct()`. Explicitly clone nodes in the visitor
-   instead.
- * `throwOnError` parser option. Use `ErrorHandler\Collecting` instead.
-
-### Miscellaneous
-
- * The `NameResolver` will now resolve unqualified function and constant names in the global
-   namespace into fully qualified names. For example `foo()` in the global namespace resolves to
-   `\foo()`. For names where no static resolution is possible, a `namespacedName` attribute is
-   added now, containing the namespaced variant of the name.
- * All methods on `PrettyPrinter\Standard` are now protected. Previously most of them were public.
-   The pretty printer should only be invoked using the `prettyPrint()`, `prettyPrintFile()` and
-   `prettyPrintExpr()` methods.
- * The node dumper now prints numeric values that act as enums/flags in a string representation.
-   If node dumper results are used in tests, updates may be needed to account for this.
- * The constants on `NameTraverserInterface` have been moved into the `NameTraverser` class.
- * The emulative lexer now directly postprocesses tokens, instead of using `~__EMU__~` sequences.
-   This changes the protected API of the emulative lexer.
- * The `Name::slice()` method now returns `null` for empty slices, previously `new Name([])` was
-   used. `Name::concat()` now also supports concatenation with `null`.
diff --git a/vendor/nikic/php-parser/UPGRADE-4.0.md b/vendor/nikic/php-parser/UPGRADE-4.0.md
deleted file mode 100644
index 628bdbdc58..0000000000
--- a/vendor/nikic/php-parser/UPGRADE-4.0.md
+++ /dev/null
@@ -1,77 +0,0 @@
-Upgrading from PHP-Parser 3.x to 4.0
-====================================
-
-### PHP version requirements
-
-PHP-Parser now requires PHP 7.0 or newer to run. It is however still possible to *parse* PHP 5.2-5.6
-source code, while running on a newer version.
-
-HHVM is no longer actively supported.
-
-### Changes to the node structure
-
-* Many subnodes that previously held simple strings now store `Identifier` nodes instead (or
-  `VarLikeIdentifier` nodes if they have form `$ident`). The constructors of the affected nodes will
-  automatically convert strings to `Identifier`s and `Identifier`s implement `__toString()`. As such
-  some code continues to work without changes, but anything using `is_string()`, type-strict
-  comparisons or strict-mode may require adjustment. The following is an exhaustive list of all
-  affected subnodes:
-
-   * `Const_::$name`
-   * `NullableType::$type` (for simple types)
-   * `Param::$type` (for simple types)
-   * `Expr\ClassConstFetch::$name`
-   * `Expr\Closure::$returnType` (for simple types)
-   * `Expr\MethodCall::$name`
-   * `Expr\PropertyFetch::$name`
-   * `Expr\StaticCall::$name`
-   * `Expr\StaticPropertyFetch::$name` (uses `VarLikeIdentifier`)
-   * `Stmt\Class_::$name`
-   * `Stmt\ClassMethod::$name`
-   * `Stmt\ClassMethod::$returnType` (for simple types)
-   * `Stmt\Function_::$name`
-   * `Stmt\Function_::$returnType` (for simple types)
-   * `Stmt\Goto_::$name`
-   * `Stmt\Interface_::$name`
-   * `Stmt\Label::$name`
-   * `Stmt\PropertyProperty::$name` (uses `VarLikeIdentifier`)
-   * `Stmt\TraitUseAdaptation\Alias::$method`
-   * `Stmt\TraitUseAdaptation\Alias::$newName`
-   * `Stmt\TraitUseAdaptation\Precedence::$method`
-   * `Stmt\Trait_::$name`
-   * `Stmt\UseUse::$alias`
-
-* Expression statements (`expr;`) are now represented using a `Stmt\Expression` node. Previously
-  these statements were directly represented as their constituent expression.
-* The `name` subnode of `Param` has been renamed to `var` and now contains a `Variable` rather than
-  a plain string.
-* The `name` subnode of `StaticVar` has been renamed to `var` and now contains a `Variable` rather
-  than a plain string.
-* The `var` subnode of `ClosureUse` now contains a `Variable` rather than a plain string.
-* The `var` subnode of `Catch_` now contains a `Variable` rather than a plain string.
-* The `alias` subnode of `UseUse` is now `null` if no explicit alias is given. As such,
-  `use Foo\Bar` and `use Foo\Bar as Bar` are now represented differently. The `getAlias()` method
-  can be used to get the effective alias, even if it is not explicitly given.
-
-### Miscellaneous
-
-* The indentation handling in the pretty printer has been changed (this is only relevant if you
-  extend the pretty printer). Previously indentation was automatic, and parts were excluded using
-  `pNoindent()`. Now no-indent is the default and newlines that require indentation should use
-  `$this->nl`.
-
-### Removed functionality
-
-* Removed `type` subnode on `Class_`, `ClassMethod` and `Property` nodes. Use `flags` instead.
-* The `ClassConst::isStatic()` method has been removed. Constants cannot have a static modifier.
-* The `NodeTraverser` no longer accepts `false` as a return value from a `leaveNode()` method.
-  `NodeTraverser::REMOVE_NODE` should be returned instead.
-* The `Node::setLine()` method has been removed. If you really need to, you can use `setAttribute()`
-  instead.
-* The misspelled `Class_::VISIBILITY_MODIFER_MASK` constant has been dropped in favor of
-  `Class_::VISIBILITY_MODIFIER_MASK`.
-* The XML serializer has been removed. As such, the classes `Serializer\XML`, and
-  `Unserializer\XML`, as well as the interfaces `Serializer` and `Unserializer` no longer exist.
-* The `BuilderAbstract` class has been removed. It's functionality is moved into `BuilderHelpers`.
-  However, this is an internal class and should not be used directly.
-* The `Autoloader` class has been removed in favor of relying on the Composer autoloader.
diff --git a/vendor/nikic/php-parser/composer.json b/vendor/nikic/php-parser/composer.json
index 9742853927..2fd064a212 100644
--- a/vendor/nikic/php-parser/composer.json
+++ b/vendor/nikic/php-parser/composer.json
@@ -17,11 +17,12 @@
         "ext-tokenizer": "*"
     },
     "require-dev": {
-        "phpunit/phpunit": "^6.5 || ^7.0"
+        "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0",
+        "ircmaxell/php-yacc": "^0.0.7"
     },
     "extra": {
         "branch-alias": {
-            "dev-master": "4.2-dev"
+            "dev-master": "4.9-dev"
         }
     },
     "autoload": {
diff --git a/vendor/nikic/php-parser/doc/0_Introduction.markdown b/vendor/nikic/php-parser/doc/0_Introduction.markdown
deleted file mode 100644
index abc40f2bb8..0000000000
--- a/vendor/nikic/php-parser/doc/0_Introduction.markdown
+++ /dev/null
@@ -1,80 +0,0 @@
-Introduction
-============
-
-This project is a PHP 5.2 to PHP 7.3 parser **written in PHP itself**.
-
-What is this for?
------------------
-
-A parser is useful for [static analysis][0], manipulation of code and basically any other
-application dealing with code programmatically. A parser constructs an [Abstract Syntax Tree][1]
-(AST) of the code and thus allows dealing with it in an abstract and robust way.
-
-There are other ways of processing source code. One that PHP supports natively is using the
-token stream generated by [`token_get_all`][2]. The token stream is much more low level than
-the AST and thus has different applications: It allows to also analyze the exact formatting of
-a file. On the other hand the token stream is much harder to deal with for more complex analysis.
-For example, an AST abstracts away the fact that, in PHP, variables can be written as `$foo`, but also
-as `$$bar`, `${'foobar'}` or even `${!${''}=barfoo()}`. You don't have to worry about recognizing
-all the different syntaxes from a stream of tokens.
-
-Another question is: Why would I want to have a PHP parser *written in PHP*? Well, PHP might not be
-a language especially suited for fast parsing, but processing the AST is much easier in PHP than it
-would be in other, faster languages like C. Furthermore the people most probably wanting to do
-programmatic PHP code analysis are incidentally PHP developers, not C developers.
-
-What can it parse?
-------------------
-
-The parser supports parsing PHP 5.2-7.3.
-
-As the parser is based on the tokens returned by `token_get_all` (which is only able to lex the PHP
-version it runs on), additionally a wrapper for emulating tokens from newer versions is provided.
-This allows to parse PHP 7.3 source code running on PHP 7.0, for example. This emulation is somewhat
-hacky and not perfect, but it should work well on any sane code.
-
-What output does it produce?
-----------------------------
-
-The parser produces an [Abstract Syntax Tree][1] (AST) also known as a node tree. How this looks
-can best be seen in an example. The program `<?php echo 'Hi', 'World';` will give you a node tree
-roughly looking like this:
-
-```
-array(
-    0: Stmt_Echo(
-        exprs: array(
-            0: Scalar_String(
-                value: Hi
-            )
-            1: Scalar_String(
-                value: World
-            )
-        )
-    )
-)
-```
-
-This matches the structure of the code: An echo statement, which takes two strings as expressions,
-with the values `Hi` and `World!`.
-
-You can also see that the AST does not contain any whitespace information (but most comments are saved).
-So using it for formatting analysis is not possible.
-
-What else can it do?
---------------------
-
-Apart from the parser itself this package also bundles support for some other, related features:
-
- * Support for pretty printing, which is the act of converting an AST into PHP code. Please note
-   that "pretty printing" does not imply that the output is especially pretty. It's just how it's
-   called ;)
- * Support for serializing and unserializing the node tree to JSON
- * Support for dumping the node tree in a human readable form (see the section above for an
-   example of how the output looks like)
- * Infrastructure for traversing and changing the AST (node traverser and node visitors)
- * A node visitor for resolving namespaced names
-
- [0]: http://en.wikipedia.org/wiki/Static_program_analysis
- [1]: http://en.wikipedia.org/wiki/Abstract_syntax_tree
- [2]: http://php.net/token_get_all
diff --git a/vendor/nikic/php-parser/doc/2_Usage_of_basic_components.markdown b/vendor/nikic/php-parser/doc/2_Usage_of_basic_components.markdown
deleted file mode 100644
index 9a809ec8e6..0000000000
--- a/vendor/nikic/php-parser/doc/2_Usage_of_basic_components.markdown
+++ /dev/null
@@ -1,516 +0,0 @@
-Usage of basic components
-=========================
-
-This document explains how to use the parser, the pretty printer and the node traverser.
-
-Bootstrapping
--------------
-
-To bootstrap the library, include the autoloader generated by composer:
-
-```php
-require 'path/to/vendor/autoload.php';
-```
-
-Additionally you may want to set the `xdebug.max_nesting_level` ini option to a higher value:
-
-```php
-ini_set('xdebug.max_nesting_level', 3000);
-```
-
-This ensures that there will be no errors when traversing highly nested node trees. However, it is
-preferable to disable XDebug completely, as it can easily make this library more than five times
-slower.
-
-Parsing
--------
-
-In order to parse code, you first have to create a parser instance:
-
-```php
-use PhpParser\ParserFactory;
-$parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);
-```
-
-The factory accepts a kind argument, that determines how different PHP versions are treated:
-
-Kind | Behavior
------|---------
-`ParserFactory::PREFER_PHP7` | Try to parse code as PHP 7. If this fails, try to parse it as PHP 5.
-`ParserFactory::PREFER_PHP5` | Try to parse code as PHP 5. If this fails, try to parse it as PHP 7.
-`ParserFactory::ONLY_PHP7` | Parse code as PHP 7.
-`ParserFactory::ONLY_PHP5` | Parse code as PHP 5.
-
-Unless you have a strong reason to use something else, `PREFER_PHP7` is a reasonable default.
-
-The `create()` method optionally accepts a `Lexer` instance as the second argument. Some use cases
-that require customized lexers are discussed in the [lexer documentation](component/Lexer.markdown).
-
-Subsequently you can pass PHP code (including the opening `<?php` tag) to the `parse` method in order to
-create a syntax tree. If a syntax error is encountered, an `PhpParser\Error` exception will be thrown:
-
-```php
-<?php
-use PhpParser\Error;
-use PhpParser\ParserFactory;
-
-$code = <<<'CODE'
-<?php
-function printLine($msg) {
-    echo $msg, "\n";
-}
-printLine('Hello World!!!');
-CODE;
-
-$parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);
-
-try {
-    $stmts = $parser->parse($code);
-    // $stmts is an array of statement nodes
-} catch (Error $e) {
-    echo 'Parse Error: ', $e->getMessage();
-}
-```
-
-A parser instance can be reused to parse multiple files.
-
-Node dumping
-------------
-
-To dump the abstact syntax tree in human readable form, a `NodeDumper` can be used:
-
-```php
-<?php
-use PhpParser\NodeDumper;
-
-$nodeDumper = new NodeDumper;
-echo $nodeDumper->dump($stmts), "\n";
-```
-
-For the sample code from the previous section, this will produce the following output:
-
-```
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: printLine
-        )
-        params: array(
-            0: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: msg
-                )
-                default: null
-            )
-        )
-        returnType: null
-        stmts: array(
-            0: Stmt_Echo(
-                exprs: array(
-                    0: Expr_Variable(
-                        name: msg
-                    )
-                    1: Scalar_String(
-                        value:
-
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: printLine
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Scalar_String(
-                        value: Hello World!!!
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-)
-```
-
-You can also use the `php-parse` script to obtain such a node dump by calling it either with a file
-name or code string:
-
-```sh
-vendor/bin/php-parse file.php
-vendor/bin/php-parse "<?php foo();"
-```
-
-This can be very helpful if you want to quickly check how certain syntax is represented in the AST.
-
-Node tree structure
--------------------
-
-Looking at the node dump above, you can see that `$stmts` for this example code is an array of two
-nodes, a `Stmt_Function` and a `Stmt_Expression`. The corresponding class names are:
-
- * `Stmt_Function -> PhpParser\Node\Stmt\Function_`
- * `Stmt_Expression -> PhpParser\Node\Stmt\Expression`
-
-The additional `_` at the end of the first class name is necessary, because `Function` is a
-reserved keyword. Many node class names in this library have a trailing `_` to avoid clashing with
-a keyword.
-
-As PHP is a large language there are approximately 140 different nodes. In order to make working
-with them easier they are grouped into three categories:
-
- * `PhpParser\Node\Stmt`s are statement nodes, i.e. language constructs that do not return
-   a value and can not occur in an expression. For example a class definition is a statement.
-   It doesn't return a value and you can't write something like `func(class A {});`.
- * `PhpParser\Node\Expr`s are expression nodes, i.e. language constructs that return a value
-   and thus can occur in other expressions. Examples of expressions are `$var`
-   (`PhpParser\Node\Expr\Variable`) and `func()` (`PhpParser\Node\Expr\FuncCall`).
- * `PhpParser\Node\Scalar`s are nodes representing scalar values, like `'string'`
-   (`PhpParser\Node\Scalar\String_`), `0` (`PhpParser\Node\Scalar\LNumber`) or magic constants
-   like `__FILE__` (`PhpParser\Node\Scalar\MagicConst\File`). All `PhpParser\Node\Scalar`s extend
-   `PhpParser\Node\Expr`, as scalars are expressions, too.
- * There are some nodes not in either of these groups, for example names (`PhpParser\Node\Name`)
-   and call arguments (`PhpParser\Node\Arg`).
-
-The `Node\Stmt\Expression` node is somewhat confusing in that it contains both the terms "statement"
-and "expression". This node distinguishes `expr`, which is a `Node\Expr`, from `expr;`, which is
-an "expression statement" represented by `Node\Stmt\Expression` and containing `expr` as a sub-node.
-
-Every node has a (possibly zero) number of subnodes. You can access subnodes by writing
-`$node->subNodeName`. The `Stmt\Echo_` node has only one subnode `exprs`. So in order to access it
-in the above example you would write `$stmts[0]->exprs`. If you wanted to access the name of the function
-call, you would write `$stmts[0]->exprs[1]->name`.
-
-All nodes also define a `getType()` method that returns the node type. The type is the class name
-without the `PhpParser\Node\` prefix and `\` replaced with `_`. It also does not contain a trailing
-`_` for reserved-keyword class names.
-
-It is possible to associate custom metadata with a node using the `setAttribute()` method. This data
-can then be retrieved using `hasAttribute()`, `getAttribute()` and `getAttributes()`.
-
-By default the lexer adds the `startLine`, `endLine` and `comments` attributes. `comments` is an array
-of `PhpParser\Comment[\Doc]` instances.
-
-The start line can also be accessed using `getLine()`/`setLine()` (instead of `getAttribute('startLine')`).
-The last doc comment from the `comments` attribute can be obtained using `getDocComment()`.
-
-Pretty printer
---------------
-
-The pretty printer component compiles the AST back to PHP code. As the parser does not retain formatting
-information the formatting is done using a specified scheme. Currently there is only one scheme available,
-namely `PhpParser\PrettyPrinter\Standard`.
-
-```php
-use PhpParser\Error;
-use PhpParser\ParserFactory;
-use PhpParser\PrettyPrinter;
-
-$code = "<?php echo 'Hi ', hi\\getTarget();";
-
-$parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);
-$prettyPrinter = new PrettyPrinter\Standard;
-
-try {
-    // parse
-    $stmts = $parser->parse($code);
-
-    // change
-    $stmts[0]         // the echo statement
-          ->exprs     // sub expressions
-          [0]         // the first of them (the string node)
-          ->value     // it's value, i.e. 'Hi '
-          = 'Hello '; // change to 'Hello '
-
-    // pretty print
-    $code = $prettyPrinter->prettyPrint($stmts);
-
-    echo $code;
-} catch (Error $e) {
-    echo 'Parse Error: ', $e->getMessage();
-}
-```
-
-The above code will output:
-
-    echo 'Hello ', hi\getTarget();
-
-As you can see the source code was first parsed using `PhpParser\Parser->parse()`, then changed and then
-again converted to code using `PhpParser\PrettyPrinter\Standard->prettyPrint()`.
-
-The `prettyPrint()` method pretty prints a statements array. It is also possible to pretty print only a
-single expression using `prettyPrintExpr()`.
-
-The `prettyPrintFile()` method can be used to print an entire file. This will include the opening `<?php` tag
-and handle inline HTML as the first/last statement more gracefully.
-
-> Read more: [Pretty printing documentation](component/Pretty_printing.markdown)
-
-Node traversation
------------------
-
-The above pretty printing example used the fact that the source code was known and thus it was easy to
-write code that accesses a certain part of a node tree and changes it. Normally this is not the case.
-Usually you want to change / analyze code in a generic way, where you don't know how the node tree is
-going to look like.
-
-For this purpose the parser provides a component for traversing and visiting the node tree. The basic
-structure of a program using this `PhpParser\NodeTraverser` looks like this:
-
-```php
-use PhpParser\NodeTraverser;
-use PhpParser\ParserFactory;
-use PhpParser\PrettyPrinter;
-
-$parser        = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);
-$traverser     = new NodeTraverser;
-$prettyPrinter = new PrettyPrinter\Standard;
-
-// add your visitor
-$traverser->addVisitor(new MyNodeVisitor);
-
-try {
-    $code = file_get_contents($fileName);
-
-    // parse
-    $stmts = $parser->parse($code);
-
-    // traverse
-    $stmts = $traverser->traverse($stmts);
-
-    // pretty print
-    $code = $prettyPrinter->prettyPrintFile($stmts);
-
-    echo $code;
-} catch (PhpParser\Error $e) {
-    echo 'Parse Error: ', $e->getMessage();
-}
-```
-
-The corresponding node visitor might look like this:
-
-```php
-use PhpParser\Node;
-use PhpParser\NodeVisitorAbstract;
-
-class MyNodeVisitor extends NodeVisitorAbstract
-{
-    public function leaveNode(Node $node) {
-        if ($node instanceof Node\Scalar\String_) {
-            $node->value = 'foo';
-        }
-    }
-}
-```
-
-The above node visitor would change all string literals in the program to `'foo'`.
-
-All visitors must implement the `PhpParser\NodeVisitor` interface, which defines the following four
-methods:
-
-```php
-public function beforeTraverse(array $nodes);
-public function enterNode(\PhpParser\Node $node);
-public function leaveNode(\PhpParser\Node $node);
-public function afterTraverse(array $nodes);
-```
-
-The `beforeTraverse()` method is called once before the traversal begins and is passed the nodes the
-traverser was called with. This method can be used for resetting values before traversation or
-preparing the tree for traversal.
-
-The `afterTraverse()` method is similar to the `beforeTraverse()` method, with the only difference that
-it is called once after the traversal.
-
-The `enterNode()` and `leaveNode()` methods are called on every node, the former when it is entered,
-i.e. before its subnodes are traversed, the latter when it is left.
-
-All four methods can either return the changed node or not return at all (i.e. `null`) in which
-case the current node is not changed.
-
-The `enterNode()` method can additionally return the value `NodeTraverser::DONT_TRAVERSE_CHILDREN`,
-which instructs the traverser to skip all children of the current node. To furthermore prevent subsequent
-visitors from visiting the current node, `NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN` can be used instead.
-
-The `leaveNode()` method can additionally return the value `NodeTraverser::REMOVE_NODE`, in which
-case the current node will be removed from the parent array. Furthermore it is possible to return
-an array of nodes, which will be merged into the parent array at the offset of the current node.
-I.e. if in `array(A, B, C)` the node `B` should be replaced with `array(X, Y, Z)` the result will
-be `array(A, X, Y, Z, C)`.
-
-Instead of manually implementing the `NodeVisitor` interface you can also extend the `NodeVisitorAbstract`
-class, which will define empty default implementations for all the above methods.
-
-> Read more: [Walking the AST](component/Walking_the_AST.markdown)
-
-The NameResolver node visitor
------------------------------
-
-One visitor that is already bundled with the package is `PhpParser\NodeVisitor\NameResolver`. This visitor
-helps you work with namespaced code by trying to resolve most names to fully qualified ones.
-
-For example, consider the following code:
-
-    use A as B;
-    new B\C();
-
-In order to know that `B\C` really is `A\C` you would need to track aliases and namespaces yourself.
-The `NameResolver` takes care of that and resolves names as far as possible.
-
-After running it, most names will be fully qualified. The only names that will stay unqualified are
-unqualified function and constant names. These are resolved at runtime and thus the visitor can't
-know which function they are referring to. In most cases this is a non-issue as the global functions
-are meant.
-
-Also the `NameResolver` adds a `namespacedName` subnode to class, function and constant declarations
-that contains the namespaced name instead of only the shortname that is available via `name`.
-
-> Read more: [Name resolution documentation](component/Name_resolution.markdown)
-
-Example: Converting namespaced code to pseudo namespaces
---------------------------------------------------------
-
-A small example to understand the concept: We want to convert namespaced code to pseudo namespaces
-so it works on 5.2, i.e. names like `A\\B` should be converted to `A_B`. Note that such conversions
-are fairly complicated if you take PHP's dynamic features into account, so our conversion will
-assume that no dynamic features are used.
-
-We start off with the following base code:
-
-```php
-use PhpParser\ParserFactory;
-use PhpParser\PrettyPrinter;
-use PhpParser\NodeTraverser;
-use PhpParser\NodeVisitor\NameResolver;
-
-$inDir  = '/some/path';
-$outDir = '/some/other/path';
-
-$parser        = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);
-$traverser     = new NodeTraverser;
-$prettyPrinter = new PrettyPrinter\Standard;
-
-$traverser->addVisitor(new NameResolver); // we will need resolved names
-$traverser->addVisitor(new NamespaceConverter); // our own node visitor
-
-// iterate over all .php files in the directory
-$files = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($inDir));
-$files = new \RegexIterator($files, '/\.php$/');
-
-foreach ($files as $file) {
-    try {
-        // read the file that should be converted
-        $code = file_get_contents($file->getPathName());
-
-        // parse
-        $stmts = $parser->parse($code);
-
-        // traverse
-        $stmts = $traverser->traverse($stmts);
-
-        // pretty print
-        $code = $prettyPrinter->prettyPrintFile($stmts);
-
-        // write the converted file to the target directory
-        file_put_contents(
-            substr_replace($file->getPathname(), $outDir, 0, strlen($inDir)),
-            $code
-        );
-    } catch (PhpParser\Error $e) {
-        echo 'Parse Error: ', $e->getMessage();
-    }
-}
-```
-
-Now lets start with the main code, the `NodeVisitor\NamespaceConverter`. One thing it needs to do
-is convert `A\\B` style names to `A_B` style ones.
-
-```php
-use PhpParser\Node;
-
-class NamespaceConverter extends \PhpParser\NodeVisitorAbstract
-{
-    public function leaveNode(Node $node) {
-        if ($node instanceof Node\Name) {
-            return new Node\Name(str_replace('\\', '_', $node->toString()));
-        }
-    }
-}
-```
-
-The above code profits from the fact that the `NameResolver` already resolved all names as far as
-possible, so we don't need to do that. We only need to create a string with the name parts separated
-by underscores instead of backslashes. This is what `str_replace('\\', '_', $node->toString())` does. (If you want to
-create a name with backslashes either write `$node->toString()` or `(string) $node`.) Then we create
-a new name from the string and return it. Returning a new node replaces the old node.
-
-Another thing we need to do is change the class/function/const declarations. Currently they contain
-only the shortname (i.e. the last part of the name), but they need to contain the complete name including
-the namespace prefix:
-
-```php
-use PhpParser\Node;
-use PhpParser\Node\Stmt;
-
-class NodeVisitor_NamespaceConverter extends \PhpParser\NodeVisitorAbstract
-{
-    public function leaveNode(Node $node) {
-        if ($node instanceof Node\Name) {
-            return new Node\Name(str_replace('\\', '_', $node->toString()));
-        } elseif ($node instanceof Stmt\Class_
-                  || $node instanceof Stmt\Interface_
-                  || $node instanceof Stmt\Function_) {
-            $node->name = str_replace('\\', '_', $node->namespacedName->toString());
-        } elseif ($node instanceof Stmt\Const_) {
-            foreach ($node->consts as $const) {
-                $const->name = str_replace('\\', '_', $const->namespacedName->toString());
-            }
-        }
-    }
-}
-```
-
-There is not much more to it than converting the namespaced name to string with `_` as separator.
-
-The last thing we need to do is remove the `namespace` and `use` statements:
-
-```php
-use PhpParser\Node;
-use PhpParser\Node\Stmt;
-use PhpParser\NodeTraverser;
-
-class NodeVisitor_NamespaceConverter extends \PhpParser\NodeVisitorAbstract
-{
-    public function leaveNode(Node $node) {
-        if ($node instanceof Node\Name) {
-            return new Node\Name(str_replace('\\', '_', $node->toString()));
-        } elseif ($node instanceof Stmt\Class_
-                  || $node instanceof Stmt\Interface_
-                  || $node instanceof Stmt\Function_) {
-            $node->name = str_replace('\\', '_', $node->namespacedName->toString();
-        } elseif ($node instanceof Stmt\Const_) {
-            foreach ($node->consts as $const) {
-                $const->name = str_replace('\\', '_', $const->namespacedName->toString());
-            }
-        } elseif ($node instanceof Stmt\Namespace_) {
-            // returning an array merges is into the parent array
-            return $node->stmts;
-        } elseif ($node instanceof Stmt\Use_) {
-            // remove use nodes altogether
-            return NodeTraverser::REMOVE_NODE;
-        }
-    }
-}
-```
-
-That's all.
diff --git a/vendor/nikic/php-parser/doc/README.md b/vendor/nikic/php-parser/doc/README.md
deleted file mode 100644
index 3b8cd76563..0000000000
--- a/vendor/nikic/php-parser/doc/README.md
+++ /dev/null
@@ -1,46 +0,0 @@
-Table of Contents
-=================
-
-Guide
------
-
-  1. [Introduction](0_Introduction.markdown)
-  2. [Usage of basic components](2_Usage_of_basic_components.markdown)
-
-Component documentation
------------------------
-
-  * [Walking the AST](component/Walking_the_AST.markdown)
-    * Node visitors
-    * Modifying the AST from a visitor
-    * Short-circuiting traversals
-    * Interleaved visitors
-    * Simple node finding API
-    * Parent and sibling references
-  * [Name resolution](component/Name_resolution.markdown)
-    * Name resolver options
-    * Name resolution context
-  * [Pretty printing](component/Pretty_printing.markdown)
-    * Converting AST back to PHP code
-    * Customizing formatting
-    * Formatting-preserving code transformations
-  * [AST builders](component/AST_builders.markdown)
-    * Fluent builders for AST nodes
-  * [Lexer](component/Lexer.markdown)
-    * Lexer options
-    * Token and file positions for nodes
-    * Custom attributes
-  * [Error handling](component/Error_handling.markdown)
-    * Column information for errors
-    * Error recovery (parsing of syntactically incorrect code)
-  * [Constant expression evaluation](component/Constant_expression_evaluation.markdown)
-    * Evaluating constant/property/etc initializers
-    * Handling errors and unsupported expressions
-  * [JSON representation](component/JSON_representation.markdown)
-    * JSON encoding and decoding of ASTs
-  * [Performance](component/Performance.markdown)
-    * Disabling XDebug
-    * Reusing objects
-    * Garbage collection impact
-  * [Frequently asked questions](component/FAQ.markdown)
-    * Parent and sibling references
diff --git a/vendor/nikic/php-parser/doc/component/AST_builders.markdown b/vendor/nikic/php-parser/doc/component/AST_builders.markdown
deleted file mode 100644
index 60ae0192df..0000000000
--- a/vendor/nikic/php-parser/doc/component/AST_builders.markdown
+++ /dev/null
@@ -1,138 +0,0 @@
-AST builders
-============
-
-When PHP-Parser is used to generate (or modify) code by first creating an Abstract Syntax Tree and
-then using the [pretty printer](Pretty_printing.markdown) to convert it to PHP code, it can often
-be tedious to manually construct AST nodes. The project provides a number of utilities to simplify
-the construction of common AST nodes.
-
-Fluent builders
----------------
-
-The library comes with a number of builders, which allow creating node trees using a fluent
-interface. Builders are created using the `BuilderFactory` and the final constructed node is
-accessed through `getNode()`. Fluent builders are available for
-the following syntactic elements:
-
- * namespaces and use statements
- * classes, interfaces and traits
- * methods, functions and parameters
- * properties
-
-Here is an example:
-
-```php
-use PhpParser\BuilderFactory;
-use PhpParser\PrettyPrinter;
-use PhpParser\Node;
-
-$factory = new BuilderFactory;
-$node = $factory->namespace('Name\Space')
-    ->addStmt($factory->use('Some\Other\Thingy')->as('SomeClass'))
-    ->addStmt($factory->useFunction('strlen'))
-    ->addStmt($factory->useConst('PHP_VERSION'))
-    ->addStmt($factory->class('SomeOtherClass')
-        ->extend('SomeClass')
-        ->implement('A\Few', '\Interfaces')
-        ->makeAbstract() // ->makeFinal()
-
-        ->addStmt($factory->useTrait('FirstTrait'))
-
-        ->addStmt($factory->useTrait('SecondTrait', 'ThirdTrait')
-            ->and('AnotherTrait')
-            ->with($factory->traitUseAdaptation('foo')->as('bar'))
-            ->with($factory->traitUseAdaptation('AnotherTrait', 'baz')->as('test'))
-            ->with($factory->traitUseAdaptation('AnotherTrait', 'func')->insteadof('SecondTrait')))
-
-        ->addStmt($factory->method('someMethod')
-            ->makePublic()
-            ->makeAbstract() // ->makeFinal()
-            ->setReturnType('bool') // ->makeReturnByRef()
-            ->addParam($factory->param('someParam')->setType('SomeClass'))
-            ->setDocComment('/**
-                              * This method does something.
-                              *
-                              * @param SomeClass And takes a parameter
-                              */')
-        )
-
-        ->addStmt($factory->method('anotherMethod')
-            ->makeProtected() // ->makePublic() [default], ->makePrivate()
-            ->addParam($factory->param('someParam')->setDefault('test'))
-            // it is possible to add manually created nodes
-            ->addStmt(new Node\Expr\Print_(new Node\Expr\Variable('someParam')))
-        )
-
-        // properties will be correctly reordered above the methods
-        ->addStmt($factory->property('someProperty')->makeProtected())
-        ->addStmt($factory->property('anotherProperty')->makePrivate()->setDefault(array(1, 2, 3)))
-    )
-
-    ->getNode()
-;
-
-$stmts = array($node);
-$prettyPrinter = new PrettyPrinter\Standard();
-echo $prettyPrinter->prettyPrintFile($stmts);
-```
-
-This will produce the following output with the standard pretty printer:
-
-```php
-<?php
-
-namespace Name\Space;
-
-use Some\Other\Thingy as SomeClass;
-use function strlen;
-use const PHP_VERSION;
-abstract class SomeOtherClass extends SomeClass implements A\Few, \Interfaces
-{
-    use FirstTrait;
-    use SecondTrait, ThirdTrait, AnotherTrait {
-        foo as bar;
-        AnotherTrait::baz as test;
-        AnotherTrait::func insteadof SecondTrait;
-    }
-    protected $someProperty;
-    private $anotherProperty = array(1, 2, 3);
-    /**
-     * This method does something.
-     *
-     * @param SomeClass And takes a parameter
-     */
-    public abstract function someMethod(SomeClass $someParam) : bool;
-    protected function anotherMethod($someParam = 'test')
-    {
-        print $someParam;
-    }
-}
-```
-
-Additional helper methods
--------------------------
-
-The `BuilderFactory` also provides a number of additional helper methods, which directly return
-nodes. The following methods are currently available:
-
- * `val($value)`: Creates an AST node for a literal value like `42` or `[1, 2, 3]`.
- * `var($name)`: Creates variable node.
- * `args(array $args)`: Creates an array of function/method arguments, including the required `Arg`
-   wrappers. Also converts literals to AST nodes.
- * `funcCall($name, array $args = [])`: Create a function call node. Converts `$name` to a `Name`
-   node and normalizes arguments.
- * `methodCall(Expr $var, $name, array $args = [])`: Create a method call node. Converts `$name` to
-   an `Identifier` node and normalizes arguments.
- * `staticCall($class, $name, array $args = [])`: Create a static method call node. Converts
-   `$class` to a `Name` node, `$name` to an `Identifier` node and normalizes arguments.
- * `new($class, array $args = [])`: Create a "new" (object creation) node. Converts `$class` to a
-   `Name` node.
- * `constFetch($name)`: Create a constant fetch node. Converts `$name` to a `Name` node.
- * `classConstFetch($class, $name)`: Create a class constant fetch node. Converts `$class` to a
-   `Name` node and `$name` to an `Identifier` node.
- * `propertyFetch($var, $name)`: Creates a property fetch node. Converts `$name` to an `Identifier`
-   node.
- * `concat(...$exprs)`: Create a tree of `BinaryOp\Concat` nodes for the given expressions.
-
-These methods may be expanded on an as-needed basis. Please open an issue or PR if a common
-operation is missing.
diff --git a/vendor/nikic/php-parser/doc/component/Constant_expression_evaluation.markdown b/vendor/nikic/php-parser/doc/component/Constant_expression_evaluation.markdown
deleted file mode 100644
index 9ab4f5c395..0000000000
--- a/vendor/nikic/php-parser/doc/component/Constant_expression_evaluation.markdown
+++ /dev/null
@@ -1,115 +0,0 @@
-Constant expression evaluation
-==============================
-
-Initializers for constants, properties, parameters, etc. have limited support for expressions. For
-example:
-
-```php
-<?php
-class Test {
-    const SECONDS_IN_HOUR = 60 * 60;
-    const SECONDS_IN_DAY = 24 * self::SECONDS_IN_HOUR;
-}
-```
-
-PHP-Parser supports evaluation of such constant expressions through the `ConstExprEvaluator` class:
-
-```php
-<?php
-
-use PhpParser\{ConstExprEvaluator, ConstExprEvaluationException};
-
-$evalutator = new ConstExprEvaluator();
-try {
-    $value = $evalutator->evaluateSilently($someExpr);
-} catch (ConstExprEvaluationException $e) {
-    // Either the expression contains unsupported expression types,
-    // or an error occurred during evaluation
-}
-```
-
-Error handling
---------------
-
-The constant evaluator provides two methods, `evaluateDirectly()` and `evaluateSilently()`, which
-differ in error behavior. `evaluateDirectly()` will evaluate the expression as PHP would, including
-any generated warnings or Errors. `evaluateSilently()` will instead convert warnings and Errors into
-a `ConstExprEvaluationException`. For example:
-
-```php
-<?php
-
-use PhpParser\{ConstExprEvaluator, ConstExprEvaluationException};
-use PhpParser\Node\{Expr, Scalar};
-
-$evaluator = new ConstExprEvaluator();
-
-// 10 / 0
-$expr = new Expr\BinaryOp\Div(new Scalar\LNumber(10), new Scalar\LNumber(0));
-
-var_dump($evaluator->evaluateDirectly($expr)); // float(INF)
-// Warning: Division by zero
-
-try {
-    $evaluator->evaluateSilently($expr);
-} catch (ConstExprEvaluationException $e) {
-    var_dump($e->getPrevious()->getMessage()); // Division by zero
-}
-```
-
-For the purposes of static analysis, you will likely want to use `evaluateSilently()` and leave
-erroring expressions unevaluated.
-
-Unsupported expressions and evaluator fallback
-----------------------------------------------
-
-The constant expression evaluator supports all expression types that are permitted in constant
-expressions, apart from the following:
-
- * `Scalar\MagicConst\*`
- * `Expr\ConstFetch` (only null/false/true are handled)
- * `Expr\ClassConstFetch`
-
-Handling these expression types requires non-local information, such as which global constants are
-defined. By default, the evaluator will throw a `ConstExprEvaluationException` when it encounters
-an unsupported expression type.
-
-It is possible to override this behavior and support resolution for these expression types by
-specifying an evaluation fallback function:
-
-```php
-<?php
-
-use PhpParser\{ConstExprEvaluator, ConstExprEvaluationException};
-use PhpParser\Node\Expr;
-
-$evalutator = new ConstExprEvaluator(function(Expr $expr) {
-    if ($expr instanceof Expr\ConstFetch) {
-        return fetchConstantSomehow($expr);
-    }
-    if ($expr instanceof Expr\ClassConstFetch) {
-        return fetchClassConstantSomehow($expr);
-    }
-    // etc.
-    throw new ConstExprEvaluationException(
-        "Expression of type {$expr->getType()} cannot be evaluated");
-});
-
-try {
-    $evalutator->evaluateSilently($someExpr);
-} catch (ConstExprEvaluationException $e) {
-    // Handle exception
-}
-```
-
-Implementers are advised to ensure that evaluation of indirect constant references cannot lead to
-infinite recursion. For example, the following code could lead to infinite recursion if constant
-lookup is implemented naively.
-
-```php
-<?php
-class Test {
-    const A = self::B;
-    const B = self::A;
-}
-```
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/doc/component/Error_handling.markdown b/vendor/nikic/php-parser/doc/component/Error_handling.markdown
deleted file mode 100644
index 55bb5153b7..0000000000
--- a/vendor/nikic/php-parser/doc/component/Error_handling.markdown
+++ /dev/null
@@ -1,75 +0,0 @@
-Error handling
-==============
-
-Errors during parsing or analysis are represented using the `PhpParser\Error` exception class. In addition to an error
-message, an error can also store additional information about the location the error occurred at.
-
-How much location information is available depends on the origin of the error and how many lexer attributes have been
-enabled. At a minimum the start line of the error is usually available.
-
-Column information
-------------------
-
-In order to receive information about not only the line, but also the column span an error occurred at, the file
-position attributes in the lexer need to be enabled:
-
-```php
-$lexer = new PhpParser\Lexer(array(
-    'usedAttributes' => array('comments', 'startLine', 'endLine', 'startFilePos', 'endFilePos'),
-));
-$parser = (new PhpParser\ParserFactory)->create(PhpParser\ParserFactory::PREFER_PHP7, $lexer);
-
-try {
-    $stmts = $parser->parse($code);
-    // ...
-} catch (PhpParser\Error $e) {
-    // ...
-}
-```
-
-Before using column information, its availability needs to be checked with `$e->hasColumnInfo()`, as the precise
-location of an error cannot always be determined. The methods for retrieving column information also have to be passed
-the source code of the parsed file. An example for printing an error:
-
-```php
-if ($e->hasColumnInfo()) {
-    echo $e->getRawMessage() . ' from ' . $e->getStartLine() . ':' . $e->getStartColumn($code)
-        . ' to ' . $e->getEndLine() . ':' . $e->getEndColumn($code);
-    // or:
-    echo $e->getMessageWithColumnInfo();
-} else {
-    echo $e->getMessage();
-}
-```
-
-Both line numbers and column numbers are 1-based. EOF errors will be located at the position one past the end of the
-file.
-
-Error recovery
---------------
-
-The error behavior of the parser (and other components) is controlled by an `ErrorHandler`. Whenever an error is
-encountered, `ErrorHandler::handleError()` is invoked. The default error handling strategy is `ErrorHandler\Throwing`,
-which will immediately throw when an error is encountered.
-
-To instead collect all encountered errors into an array, while trying to continue parsing the rest of the source code,
-an instance of `ErrorHandler\Collecting` can be passed to the `Parser::parse()` method. A usage example:
-
-```php
-$parser = (new PhpParser\ParserFactory)->create(PhpParser\ParserFactory::ONLY_PHP7);
-$errorHandler = new PhpParser\ErrorHandler\Collecting;
-
-$stmts = $parser->parse($code, $errorHandler);
-
-if ($errorHandler->hasErrors()) {
-    foreach ($errorHandler->getErrors() as $error) {
-        // $error is an ordinary PhpParser\Error
-    }
-}
-
-if (null !== $stmts) {
-    // $stmts is a best-effort partial AST
-}
-```
-
-The `NameResolver` visitor also accepts an `ErrorHandler` as a constructor argument.
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/doc/component/FAQ.markdown b/vendor/nikic/php-parser/doc/component/FAQ.markdown
deleted file mode 100644
index b8bf834b66..0000000000
--- a/vendor/nikic/php-parser/doc/component/FAQ.markdown
+++ /dev/null
@@ -1,68 +0,0 @@
-Frequently Asked Questions
-==========================
-
- * [How can the parent of a node be obtained?](#how-can-the-parent-of-a-node-be-obtained)
- * [How can the next/previous sibling of a node be obtained?](#how-can-the-nextprevious-sibling-of-a-node-be-obtained)
-
-How can the parent of a node be obtained?
------
-
-The AST does not store parent nodes by default. However, it is easy to add a custom parent node
-attribute using a custom node visitor:
-
-```php
-use PhpParser\Node;
-use PhpParser\NodeVisitorAbstract;
-
-class ParentConnector extends NodeVisitorAbstract {
-    private $stack;
-    public function beforeTraverse(array $nodes) {
-        $this->stack = [];
-    }
-    public function enterNode(Node $node) {
-        if (!empty($this->stack)) {
-            $node->setAttribute('parent', $this->stack[count($this->stack)-1]);
-        }
-        $this->stack[] = $node;
-    }
-    public function leaveNode(Node $node) {
-        array_pop($this->stack);
-    }
-}
-```
-
-After running this visitor, the parent node can be obtained through `$node->getAttribute('parent')`.
-
-How can the next/previous sibling of a node be obtained?
------
-
-Again, siblings are not stored by default, but the visitor from the previous entry can be easily
-extended to store the previous / next node with a common parent as well:
-
-```php
-use PhpParser\Node;
-use PhpParser\NodeVisitorAbstract;
-
-class NodeConnector extends NodeVisitorAbstract {
-    private $stack;
-    private $prev;
-    public function beforeTraverse(array $nodes) {
-        $this->stack = [];
-        $this->prev = null;
-    }
-    public function enterNode(Node $node) {
-        if (!empty($this->stack)) {
-            $node->setAttribute('parent', $this->stack[count($this->stack)-1]);
-        }
-        if ($this->prev && $this->prev->getAttribute('parent') == $node->getAttribute('parent')) {
-            $node->setAttribute('prev', $this->prev);
-            $this->prev->setAttribute('next', $node);
-        }
-        $this->stack[] = $node;
-    }
-    public function leaveNode(Node $node) {
-        $this->prev = $node;
-        array_pop($this->stack);
-    }
-}
-```
diff --git a/vendor/nikic/php-parser/doc/component/JSON_representation.markdown b/vendor/nikic/php-parser/doc/component/JSON_representation.markdown
deleted file mode 100644
index 47c3429c07..0000000000
--- a/vendor/nikic/php-parser/doc/component/JSON_representation.markdown
+++ /dev/null
@@ -1,131 +0,0 @@
-JSON representation
-===================
-
-Nodes (and comments) implement the `JsonSerializable` interface. As such, it is possible to JSON
-encode the AST directly using `json_encode()`:
-
-```php
-<?php
-
-use PhpParser\ParserFactory;
-
-$code = <<<'CODE'
-<?php
-
-/** @param string $msg */
-function printLine($msg) {
-    echo $msg, "\n";
-}
-CODE;
-
-$parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);
-
-try {
-    $stmts = $parser->parse($code);
-
-    echo json_encode($stmts, JSON_PRETTY_PRINT), "\n";
-} catch (PhpParser\Error $e) {
-    echo 'Parse Error: ', $e->getMessage();
-}
-```
-
-This will result in the following output (which includes attributes):
-
-```json
-[
-    {
-        "nodeType": "Stmt_Function",
-        "byRef": false,
-        "name": {
-            "nodeType": "Identifier",
-            "name": "printLine",
-            "attributes": {
-                "startLine": 4,
-                "endLine": 4
-            }
-        },
-        "params": [
-            {
-                "nodeType": "Param",
-                "type": null,
-                "byRef": false,
-                "variadic": false,
-                "var": {
-                    "nodeType": "Expr_Variable",
-                    "name": "msg",
-                    "attributes": {
-                        "startLine": 4,
-                        "endLine": 4
-                    }
-                },
-                "default": null,
-                "attributes": {
-                    "startLine": 4,
-                    "endLine": 4
-                }
-            }
-        ],
-        "returnType": null,
-        "stmts": [
-            {
-                "nodeType": "Stmt_Echo",
-                "exprs": [
-                    {
-                        "nodeType": "Expr_Variable",
-                        "name": "msg",
-                        "attributes": {
-                            "startLine": 5,
-                            "endLine": 5
-                        }
-                    },
-                    {
-                        "nodeType": "Scalar_String",
-                        "value": "\n",
-                        "attributes": {
-                            "startLine": 5,
-                            "endLine": 5,
-                            "kind": 2
-                        }
-                    }
-                ],
-                "attributes": {
-                    "startLine": 5,
-                    "endLine": 5
-                }
-            }
-        ],
-        "attributes": {
-            "startLine": 4,
-            "comments": [
-                {
-                    "nodeType": "Comment_Doc",
-                    "text": "\/** @param string $msg *\/",
-                    "line": 3,
-                    "filePos": 9,
-                    "tokenPos": 2
-                }
-            ],
-            "endLine": 6
-        }
-    }
-]
-```
-
-The JSON representation may be converted back into an AST using the `JsonDecoder`:
-
-```php
-<?php
-
-$jsonDecoder = new PhpParser\JsonDecoder();
-$ast = $jsonDecoder->decode($json);
-```
-
-Note that not all ASTs can be represented using JSON. In particular:
-
- * JSON only supports UTF-8 strings.
- * JSON does not support non-finite floating-point numbers. This can occur if the original source
-   code contains non-representable floating-pointing literals such as `1e1000`.
-
-If the node tree is not representable in JSON, the initial `json_encode()` call will fail.
-
-From the command line, a JSON dump can be obtained using `vendor/bin/php-parse -j file.php`.
diff --git a/vendor/nikic/php-parser/doc/component/Lexer.markdown b/vendor/nikic/php-parser/doc/component/Lexer.markdown
deleted file mode 100644
index be26e381e5..0000000000
--- a/vendor/nikic/php-parser/doc/component/Lexer.markdown
+++ /dev/null
@@ -1,159 +0,0 @@
-Lexer component documentation
-=============================
-
-The lexer is responsible for providing tokens to the parser. The project comes with two lexers: `PhpParser\Lexer` and
-`PhpParser\Lexer\Emulative`. The latter is an extension of the former, which adds the ability to emulate tokens of
-newer PHP versions and thus allows parsing of new code on older versions.
-
-This documentation discusses options available for the default lexers and explains how lexers can be extended.
-
-Lexer options
--------------
-
-The two default lexers accept an `$options` array in the constructor. Currently only the `'usedAttributes'` option is
-supported, which allows you to specify which attributes will be added to the AST nodes. The attributes can then be
-accessed using `$node->getAttribute()`, `$node->setAttribute()`, `$node->hasAttribute()` and `$node->getAttributes()`
-methods. A sample options array:
-
-```php
-$lexer = new PhpParser\Lexer(array(
-    'usedAttributes' => array(
-        'comments', 'startLine', 'endLine'
-    )
-));
-```
-
-The attributes used in this example match the default behavior of the lexer. The following attributes are supported:
-
- * `comments`: Array of `PhpParser\Comment` or `PhpParser\Comment\Doc` instances, representing all comments that occurred
-   between the previous non-discarded token and the current one. Use of this attribute is required for the
-   `$node->getComments()` and `$node->getDocComment()` methods to work. The attribute is also needed if you wish the pretty
-   printer to retain comments present in the original code.
- * `startLine`: Line in which the node starts. This attribute is required for the `$node->getLine()` to work. It is also
-   required if syntax errors should contain line number information.
- * `endLine`: Line in which the node ends. Required for `$node->getEndLine()`.
- * `startTokenPos`: Offset into the token array of the first token in the node. Required for `$node->getStartTokenPos()`.
- * `endTokenPos`: Offset into the token array of the last token in the node. Required for `$node->getEndTokenPos()`.
- * `startFilePos`: Offset into the code string of the first character that is part of the node. Required for `$node->getStartFilePos()`.
- * `endFilePos`: Offset into the code string of the last character that is part of the node. Required for `$node->getEndFilePos()`.
-
-### Using token positions
-
-> **Note:** The example in this section is outdated in that this information is directly available in the AST: While
-> `$property->isPublic()` does not distinguish between `public` and `var`, directly checking `$property->flags` for
-> the `$property->flags & Class_::VISIBILITY_MODIFIER_MASK) === 0` allows making this distinction without resorting to
-> tokens. However the general idea behind the example still applies in other cases.
-
-The token offset information is useful if you wish to examine the exact formatting used for a node. For example the AST
-does not distinguish whether a property was declared using `public` or using `var`, but you can retrieve this
-information based on the token position:
-
-```php
-function isDeclaredUsingVar(array $tokens, PhpParser\Node\Stmt\Property $prop) {
-    $i = $prop->getAttribute('startTokenPos');
-    return $tokens[$i][0] === T_VAR;
-}
-```
-
-In order to make use of this function, you will have to provide the tokens from the lexer to your node visitor using
-code similar to the following:
-
-```php
-class MyNodeVisitor extends PhpParser\NodeVisitorAbstract {
-    private $tokens;
-    public function setTokens(array $tokens) {
-        $this->tokens = $tokens;
-    }
-
-    public function leaveNode(PhpParser\Node $node) {
-        if ($node instanceof PhpParser\Node\Stmt\Property) {
-            var_dump(isDeclaredUsingVar($this->tokens, $node));
-        }
-    }
-}
-
-$lexer = new PhpParser\Lexer(array(
-    'usedAttributes' => array(
-        'comments', 'startLine', 'endLine', 'startTokenPos', 'endTokenPos'
-    )
-));
-$parser = (new PhpParser\ParserFactory)->create(PhpParser\ParserFactory::ONLY_PHP7, $lexer);
-
-$visitor = new MyNodeVisitor();
-$traverser = new PhpParser\NodeTraverser();
-$traverser->addVisitor($visitor);
-
-try {
-    $stmts = $parser->parse($code);
-    $visitor->setTokens($lexer->getTokens());
-    $stmts = $traverser->traverse($stmts);
-} catch (PhpParser\Error $e) {
-    echo 'Parse Error: ', $e->getMessage();
-}
-```
-
-The same approach can also be used to perform specific modifications in the code, without changing the formatting in
-other places (which is the case when using the pretty printer).
-
-Lexer extension
----------------
-
-A lexer has to define the following public interface:
-
-```php
-function startLexing(string $code, ErrorHandler $errorHandler = null): void;
-function getTokens(): array;
-function handleHaltCompiler(): string;
-function getNextToken(string &$value = null, array &$startAttributes = null, array &$endAttributes = null): int;
-```
-
-The `startLexing()` method is invoked whenever the `parse()` method of the parser is called and is passed the source
-code that is to be lexed (including the opening tag). It can be used to reset state or preprocess the source code or tokens. The
-passed `ErrorHandler` should be used to report lexing errors.
-
-The `getTokens()` method returns the current token array, in the usual `token_get_all()` format. This method is not
-used by the parser (which uses `getNextToken()`), but is useful in combination with the token position attributes.
-
-The `handleHaltCompiler()` method is called whenever a `T_HALT_COMPILER` token is encountered. It has to return the
-remaining string after the construct (not including `();`).
-
-The `getNextToken()` method returns the ID of the next token (as defined by the `Parser::T_*` constants). If no more
-tokens are available it must return `0`, which is the ID of the `EOF` token. Furthermore the string content of the
-token should be written into the by-reference `$value` parameter (which will then be available as `$n` in the parser).
-
-### Attribute handling
-
-The other two by-ref variables `$startAttributes` and `$endAttributes` define which attributes will eventually be
-assigned to the generated nodes: The parser will take the `$startAttributes` from the first token which is part of the
-node and the `$endAttributes` from the last token that is part of the node.
-
-E.g. if the tokens `T_FUNCTION T_STRING ... '{' ... '}'` constitute a node, then the `$startAttributes` from the
-`T_FUNCTION` token will be taken and the `$endAttributes` from the `'}'` token.
-
-An application of custom attributes is storing the exact original formatting of literals: While the parser does retain
-some information about the formatting of integers (like decimal vs. hexadecimal) or strings (like used quote type), it
-does not preserve the exact original formatting (e.g. leading zeros for integers or escape sequences in strings). This
-can be remedied by storing the original value in an attribute:
-
-```php
-use PhpParser\Lexer;
-use PhpParser\Parser\Tokens;
-
-class KeepOriginalValueLexer extends Lexer // or Lexer\Emulative
-{
-    public function getNextToken(&$value = null, &$startAttributes = null, &$endAttributes = null) {
-        $tokenId = parent::getNextToken($value, $startAttributes, $endAttributes);
-
-        if ($tokenId == Tokens::T_CONSTANT_ENCAPSED_STRING   // non-interpolated string
-            || $tokenId == Tokens::T_ENCAPSED_AND_WHITESPACE // interpolated string
-            || $tokenId == Tokens::T_LNUMBER                 // integer
-            || $tokenId == Tokens::T_DNUMBER                 // floating point number
-        ) {
-            // could also use $startAttributes, doesn't really matter here
-            $endAttributes['originalValue'] = $value;
-        }
-
-        return $tokenId;
-    }
-}
-```
diff --git a/vendor/nikic/php-parser/doc/component/Name_resolution.markdown b/vendor/nikic/php-parser/doc/component/Name_resolution.markdown
deleted file mode 100644
index 2a7eb603a9..0000000000
--- a/vendor/nikic/php-parser/doc/component/Name_resolution.markdown
+++ /dev/null
@@ -1,87 +0,0 @@
-Name resolution
-===============
-
-Since the introduction of namespaces in PHP 5.3, literal names in PHP code are subject to a
-relatively complex name resolution process, which is based on the current namespace, the current
-import table state, as well the type of the referenced symbol. PHP-Parser implements name
-resolution and related functionality, both as reusable logic (NameContext), as well as a node
-visitor (NameResolver) based on it.
-
-The NameResolver visitor
-------------------------
-
-The `NameResolver` visitor can (and for nearly all uses of the AST, is) be applied to resolve names
-to their fully-qualified form, to the degree that this is possible.
-
-```php
-$nameResolver = new PhpParser\NodeVisitor\NameResolver;
-$nodeTraverser = new PhpParser\NodeTraverser;
-$nodeTraverser->addVisitor($nameResolver);
-
-// Resolve names
-$stmts = $nodeTraverser->traverse($stmts);
-```
-
-In the default configuration, the name resolver will perform three actions:
-
- * Declarations of functions, classes, interfaces, traits and global constants will have a
-   `namespacedName` property added, which contains the function/class/etc name including the
-   namespace prefix. For historic reasons this is a **property** rather than an attribute.
- * Names will be replaced by fully qualified resolved names, which are instances of
-   `Node\Name\FullyQualified`.
- * Unqualified function and constant names inside a namespace cannot be statically resolved. Inside
-   a namespace `Foo`, a call to `strlen()` may either refer to the namespaced `\Foo\strlen()`, or
-   the global `\strlen()`. Because PHP-Parser does not have the necessary context to decide this,
-   such names are left unresolved. Additionally a `namespacedName` **attribute** is added to the
-   name node.
-
-The name resolver accepts an option array as the second argument, with the following default values:
-
-```php
-$nameResolver = new PhpParser\NodeVisitor\NameResolver(null, [
-    'preserveOriginalNames' => false,
-    'replaceNodes' => true,
-]);
-```
-
-If the `preserveOriginalNames` option is enabled, then the resolved (fully qualified) name will have
-an `originalName` attribute, which contains the unresolved name.
-
-If the `replaceNodes` option is disabled, then names will no longer be resolved in-place. Instead a
-`resolvedName` attribute will be added to each name, which contains the resolved (fully qualified)
-name. Once again, if an unqualified function or constant name cannot be resolved, then the
-`resolvedName` attribute will not be present, and instead a `namespacedName` attribute is added.
-
-The `replaceNodes` attribute is useful if you wish to perform modifications on the AST, as you
-probably do not wish the resoluting code to have fully resolved names as a side-effect.
-
-The NameContext
----------------
-
-The actual name resolution logic is implemented in the `NameContext` class, which has the following
-public API:
-
-```php
-class NameContext {
-    public function __construct(ErrorHandler $errorHandler);
-    public function startNamespace(Name $namespace = null);
-    public function addAlias(Name $name, string $aliasName, int $type, array $errorAttrs = []);
-
-    public function getNamespace();
-    public function getResolvedName(Name $name, int $type);
-    public function getResolvedClassName(Name $name) : Name;
-    public function getPossibleNames(string $name, int $type) : array;
-    public function getShortName(string $name, int $type) : Name;
-}
-```
-
-The `$type` parameters accept on of the `Stmt\Use_::TYPE_*` constants, which represent the three
-basic symbol types in PHP (functions, constants and everything else).
-
-Next to name resolution, the `NameContext` also supports the reverse operation of finding a short
-representation of a name given the current name resolution environment.
-
-The name context is intended to be used for name resolution operations outside the AST itself, such
-as class names inside doc comments. A visitor running in parallel with the name resolver can access
-the name context using `$nameResolver->getNameContext()`. Alternatively a visitor can use an
-independent context and explicitly feed `Namespace` and `Use` nodes to it.
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/doc/component/Performance.markdown b/vendor/nikic/php-parser/doc/component/Performance.markdown
deleted file mode 100644
index 4281ce8cbe..0000000000
--- a/vendor/nikic/php-parser/doc/component/Performance.markdown
+++ /dev/null
@@ -1,65 +0,0 @@
-Performance
-===========
-
-Parsing is computationally expensive task, to which the PHP language is not very well suited.
-Nonetheless, there are a few things you can do to improve the performance of this library, which are
-described in the following.
-
-Xdebug
-------
-
-Running PHP with XDebug adds a lot of overhead, especially for code that performs many method calls.
-Just by loading XDebug (without enabling profiling or other more intrusive XDebug features), you
-can expect that code using PHP-Parser will be approximately *five times slower*.
-
-As such, you should make sure that XDebug is not loaded when using this library. Note that setting
-the `xdebug.default_enable=0` ini option does *not* disable XDebug. The *only* way to disable
-XDebug is to not load the extension in the first place.
-
-If you are building a command-line utility for use by developers (who often have XDebug enabled),
-you may want to consider automatically restarting PHP with XDebug unloaded. The
-[composer/xdebug-handler](https://github.com/composer/xdebug-handler) package can be used to do
-this.
-
-If you do run with XDebug, you may need to increase the `xdebug.max_nesting_level` option to a
-higher level, such as 3000. While the parser itself is recursion free, most other code working on
-the AST uses recursion and will generate an error if the value of this option is too low.
-
-Assertions
-----------
-
-Assertions should be disabled in a production context by setting `zend.assertions=-1` (or
-`zend.assertions=0` if set at runtime). The library currently doesn't make heavy use of assertions,
-but they are used in an increasing number of places.
-
-Object reuse
-------------
-
-Many objects in this project are designed for reuse. For example, one `Parser` object can be used to
-parse multiple files.
-
-When possible, objects should be reused rather than being newly instantiated for every use. Some
-objects have expensive initialization procedures, which will be unnecessarily repeated if the object
-is not reused. (Currently two objects with particularly expensive setup are lexers and pretty
-printers, though the details might change between versions of this library.)
-
-Garbage collection
-------------------
-
-A limitation in PHP's cyclic garbage collector may lead to major performance degradation when the
-active working set exceeds 10000 objects (or arrays). Especially when parsing very large files this
-limit is significantly exceeded and PHP will spend the majority of time performing unnecessary
-garbage collection attempts.
-
-Without GC, parsing time is roughly linear in the input size. With GC, this degenerates to quadratic
-runtime for large files. While the specifics may differ, as a rough guideline you may expect a 2.5x
-GC overhead for 500KB files and a 5x overhead for 1MB files.
-
-Because this a limitation in PHP's implementation, there is no easy way to work around this. If
-possible, you should avoid parsing very large files, as they will impact overall execution time
-disproportionally (and are usually generated anyway).
-
-Of course, you can also try to (temporarily) disable GC. By design the AST generated by PHP-Parser
-is cycle-free, so the AST itself will never cause leaks with GC disabled. However, other code
-(including for example the parser object itself) may hold cycles, so disabling of GC should be
-approached with care.
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/doc/component/Pretty_printing.markdown b/vendor/nikic/php-parser/doc/component/Pretty_printing.markdown
deleted file mode 100644
index d6198e315f..0000000000
--- a/vendor/nikic/php-parser/doc/component/Pretty_printing.markdown
+++ /dev/null
@@ -1,96 +0,0 @@
-Pretty printing
-===============
-
-Pretty printing is the process of converting a syntax tree back to PHP code. In its basic mode of
-operation the pretty printer provided by this library will print the AST using a certain predefined
-code style and will discard (nearly) all formatting of the original code. Because programmers tend
-to be rather picky about their code formatting, this mode of operation is not very suitable for
-refactoring code, but can be used for automatically generated code, which is usually only read for
-debugging purposes.
-
-Basic usage
------------
-
-```php
-$stmts = $parser->parse($code);
-
-// MODIFY $stmts here
-
-$prettyPrinter = new PhpParser\PrettyPrinter\Standard;
-$newCode = $prettyPrinter->prettyPrintFile($stmts);
-```
-
-The pretty printer has three basic printing methods: `prettyPrint()`, `prettyPrintFile()` and
-`prettyPrintExpr()`. The one that is most commonly useful is `prettyPrintFile()`, which takes an
-array of statements and produces a full PHP file, including opening `<?php`.
-
-`prettyPrint()` also takes a statement array, but produces code which is valid inside an already
-open `<?php` context. Lastly, `prettyPrintExpr()` takes an `Expr` node and prints only a single
-expression.
-
-Customizing the formatting
---------------------------
-
-Apart from an `shortArraySyntax` option, the default pretty printer does not provide any
-functionality to customize the formatting of the generated code. The pretty printer does respect a
-number of `kind` attributes used by some notes (e.g., whether an integer should be printed as
-decimal, hexadecimal, etc), but there are no options to control brace placement or similar.
-
-If you want to make minor changes to the formatting, the easiest way is to extend the pretty printer
-and override the methods responsible for the node types you are interested in.
-
-If you want to have more fine-grained formatting control, the recommended method is to combine the
-default pretty printer with an existing library for code reformatting, such as
-[PHP-CS-Fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer).
-
-Formatting-preserving pretty printing
--------------------------------------
-
-> **Note:** This functionality is **experimental** and not yet complete.
-
-For automated code refactoring, migration and similar, you will usually only want to modify a small
-portion of the code and leave the remainder alone. The basic pretty printer is not suitable for
-this, because it will also reformat parts of the code which have not been modified.
-
-Since PHP-Parser 4.0, an experimental formatting-preserving pretty-printing mode is available, which
-attempts to preserve the formatting of code (those AST nodes that have not changed) and only reformat
-code which has been modified or newly inserted.
-
-Use of the formatting-preservation functionality requires some additional preparatory steps:
-
-```php
-use PhpParser\{Lexer, NodeTraverser, NodeVisitor, Parser, PrettyPrinter};
-
-$lexer = new Lexer\Emulative([
-    'usedAttributes' => [
-        'comments',
-        'startLine', 'endLine',
-        'startTokenPos', 'endTokenPos',
-    ],
-]);
-$parser = new Parser\Php7($lexer);
-
-$traverser = new NodeTraverser();
-$traverser->addVisitor(new NodeVisitor\CloningVisitor());
-
-$printer = new PrettyPrinter\Standard();
-
-$oldStmts = $parser->parse($code);
-$oldTokens = $lexer->getTokens();
-
-$newStmts = $traverser->traverse($oldStmts);
-
-// MODIFY $newStmts HERE
-
-$newCode = $printer->printFormatPreserving($newStmts, $oldStmts, $oldTokens);
-```
-
-If you make use of the name resolution functionality, you will likely want to disable the
-`replaceNodes` option. This will add resolved names as attributes, instead of directlying modifying
-the AST and causing spurious changes to the pretty printed code. For more information, see the
-[name resolution documentation](Name_resolution.markdown).
-
-This functionality is experimental and not yet fully implemented. It should not provide incorrect
-code, but it may sometimes reformat more code than necessary. Open issues are tracked in
-[issue #344](https://github.com/nikic/PHP-Parser/issues/344). If you encounter problems while using
-this functionality, please open an issue, so we know what to prioritize.
diff --git a/vendor/nikic/php-parser/doc/component/Walking_the_AST.markdown b/vendor/nikic/php-parser/doc/component/Walking_the_AST.markdown
deleted file mode 100644
index 69af1e832f..0000000000
--- a/vendor/nikic/php-parser/doc/component/Walking_the_AST.markdown
+++ /dev/null
@@ -1,337 +0,0 @@
-Walking the AST
-===============
-
-The most common way to work with the AST is by using a node traverser and one or more node visitors.
-As a basic example, the following code changes all literal integers in the AST into strings (e.g.,
-`42` becomes `'42'`.)
-
-```php
-use PhpParser\{Node, NodeTraverser, NodeVisitorAbstract};
-
-$traverser = new NodeTraverser;
-$traverser->addVisitor(new class extends NodeVisitorAbstract {
-    public function leaveNode(Node $node) {
-        if ($node instanceof Node\Scalar\LNumber) {
-            return new Node\Scalar\String_((string) $node->value);
-        }
-    }
-});
-
-$stmts = ...;
-$modifiedStmts = $traverser->traverse($stmts);
-```
-
-Node visitors
--------------
-
-Each node visitor implements an interface with following four methods:
-
-```php
-interface NodeVisitor {
-    public function beforeTraverse(array $nodes);
-    public function enterNode(Node $node);
-    public function leaveNode(Node $node);
-    public function afterTraverse(array $nodes);
-}
-```
-
-The `beforeTraverse()` and `afterTraverse()` methods are called before and after the traversal
-respectively, and are passed the entire AST. They can be used to perform any necessary state
-setup or cleanup.
-
-The `enterNode()` method is called when a node is first encountered, before its children are
-processed ("preorder"). The `leaveNode()` method is called after all children have been visited
-("postorder").
-
-For example, if we have the following excerpt of an AST
-
-```
-Expr_FuncCall(
-    name: Name(
-        parts: array(
-            0: printLine
-        )
-    )
-    args: array(
-        0: Arg(
-            value: Scalar_String(
-                value: Hello World!!!
-            )
-            byRef: false
-            unpack: false
-        )
-    )
-)
-```
-
-then the enter/leave methods will be called in the following order:
-
-```
-enterNode(Expr_FuncCall)
-enterNode(Name)
-leaveNode(Name)
-enterNode(Arg)
-enterNode(Scalar_String)
-leaveNode(Scalar_String)
-leaveNode(Arg)
-leaveNode(Expr_FuncCall)
-```
-
-A common pattern is that `enterNode` is used to collect some information and then `leaveNode`
-performs modifications based on that. At the time when `leaveNode` is called, all the code inside
-the node will have already been visited and necessary information collected.
-
-As you usually do not want to implement all four methods, it is recommended that you extend
-`NodeVisitorAbstract` instead of implementing the interface directly. The abstract class provides
-empty default implementations.
-
-Modifying the AST
------------------
-
-There are a number of ways in which the AST can be modified from inside a node visitor. The first
-and simplest is to simply change AST properties inside the visitor:
-
-```php
-public function leaveNode(Node $node) {
-    if ($node instanceof Node\Scalar\LNumber) {
-        // increment all integer literals
-        $node->value++;
-    }
-}
-```
-
-The second is to replace a node entirely by returning a new node:
-
-```php
-public function leaveNode(Node $node) {
-    if ($node instanceof Node\Expr\BinaryOp\BooleanAnd) {
-        // Convert all $a && $b expressions into !($a && $b)
-        return new Node\Expr\BooleanNot($node);
-    }
-}
-```
-
-Doing this is supported both inside enterNode and leaveNode. However, you have to be mindful about
-where you perform the replacement: If a node is replaced in enterNode, then the recursive traversal
-will also consider the children of the new node. If you aren't careful, this can lead to infinite
-recursion. For example, let's take the previous code sample and use enterNode instead:
-
-```php
-public function enterNode(Node $node) {
-    if ($node instanceof Node\Expr\BinaryOp\BooleanAnd) {
-        // Convert all $a && $b expressions into !($a && $b)
-        return new Node\Expr\BooleanNot($node);
-    }
-}
-```
-
-Now `$a && $b` will be replaced by `!($a && $b)`. Then the traverser will go into the first (and
-only) child of `!($a && $b)`, which is `$a && $b`. The transformation applies again and we end up
-with `!!($a && $b)`. This will continue until PHP hits the memory limit.
-
-Finally, two special replacement types are supported only by leaveNode. The first is removal of a
-node:
-
-```php
-public function leaveNode(Node $node) {
-    if ($node instanceof Node\Stmt\Return_) {
-        // Remove all return statements
-        return NodeTraverser::REMOVE_NODE;
-    }
-}
-```
-
-Node removal only works if the parent structure is an array. This means that usually it only makes
-sense to remove nodes of type `Node\Stmt`, as they always occur inside statement lists (and a few
-more node types like `Arg` or `Expr\ArrayItem`, which are also always part of lists).
-
-On the other hand, removing a `Node\Expr` does not make sense: If you have `$a * $b`, there is no
-meaningful way in which the `$a` part could be removed. If you want to remove an expression, you
-generally want to remove it together with a surrounding expression statement:
-
-```php
-public function leaveNode(Node $node) {
-    if ($node instanceof Node\Stmt\Expression
-        && $node->expr instanceof Node\Expr\FuncCall
-        && $node->expr->name instanceof Node\Name
-        && $node->expr->name->toString() === 'var_dump'
-    ) {
-        return NodeTraverser::REMOVE_NODE;
-    }
-}
-```
-
-This example will remove all calls to `var_dump()` which occur as expression statements. This means
-that `var_dump($a);` will be removed, but `if (var_dump($a))` will not be removed (and there is no
-obvious way in which it can be removed).
-
-Next to removing nodes, it is also possible to replace one node with multiple nodes. Again, this
-only works inside leaveNode and only if the parent structure is an array.
-
-```php
-public function leaveNode(Node $node) {
-    if ($node instanceof Node\Stmt\Return_ && $node->expr !== null) {
-        // Convert "return foo();" into "$retval = foo(); return $retval;"
-        $var = new Node\Expr\Variable('retval');
-        return [
-            new Node\Stmt\Expression(new Node\Expr\Assign($var, $node->expr)),
-            new Node\Stmt\Return_($var),
-        ];
-    }
-}
-```
-
-Short-circuiting traversal
---------------------------
-
-An AST can easily contain thousands of nodes, and traversing over all of them may be slow,
-especially if you have more than one visitor. In some cases, it is possible to avoid a full
-traversal.
-
-If you are looking for all class declarations in a file (and assuming you're not interested in
-anonymous classes), you know that once you've seen a class declaration, there is no point in also
-checking all it's child nodes, because PHP does not allow nesting classes. In this case, you can
-instruct the traverser to not recurse into the class node:
-
-```
-private $classes = [];
-public function enterNode(Node $node) {
-    if ($node instanceof Node\Stmt\Class_) {
-        $this->classes[] = $node;
-        return NodeTraverser::DONT_TRAVERSE_CHILDREN;
-    }
-}
-```
-
-Of course, this option is only available in enterNode, because it's already too late by the time
-leaveNode is reached.
-
-If you are only looking for one specific node, it is also possible to abort the traversal entirely
-after finding it. For example, if you are looking for the node of a class with a certain name (and
-discounting exotic cases like conditionally defining a class two times), you can stop traversal
-once you found it:
-
-```
-private $class = null;
-public function enterNode(Node $node) {
-    if ($node instanceof Node\Stmt\Class_ &&
-        $node->namespacedName->toString() === 'Foo\Bar\Baz'
-    ) {
-        $this->class = $node;
-        return NodeTraverser::STOP_TRAVERSAL;
-    }
-}
-```
-
-This works both in enterNode and leaveNode. Note that this particular case can also be more easily
-handled using a NodeFinder, which will be introduced below.
-
-Multiple visitors
------------------
-
-A single traverser can be used with multiple visitors:
-
-```php
-$traverser = new NodeTraverser;
-$traverser->addVisitor($visitorA);
-$traverser->addVisitor($visitorB);
-$stmts = $traverser->traverse($stmts);
-```
-
-It is important to understand that if a traverser is run with multiple visitors, the visitors will
-be interleaved. Given the following AST excerpt
-
-```
-Stmt_Return(
-    expr: Expr_Variable(
-        name: foobar
-    )
-)
-```
-
-the following method calls will be performed:
-
-```
-$visitorA->enterNode(Stmt_Return)
-$visitorB->enterNode(Stmt_Return)
-$visitorA->enterNode(Expr_Variable)
-$visitorB->enterNode(Expr_Variable)
-$visitorA->leaveNode(Expr_Variable)
-$visitorB->leaveNode(Expr_Variable)
-$visitorA->leaveNode(Stmt_Return)
-$visitorB->leaveNode(Stmt_Return)
-```
-
-That is, when visiting a node, enterNode and leaveNode will always be called for all visitors.
-Running multiple visitors in parallel improves performance, as the AST only has to be traversed
-once. However, it is not always possible to write visitors in a way that allows interleaved
-execution. In this case, you can always fall back to performing multiple traversals:
-
-```php
-$traverserA = new NodeTraverser;
-$traverserA->addVisitor($visitorA);
-$traverserB = new NodeTraverser;
-$traverserB->addVisitor($visitorB);
-$stmts = $traverserA->traverser($stmts);
-$stmts = $traverserB->traverser($stmts);
-```
-
-When using multiple visitors, it is important to understand how they interact with the various
-special enterNode/leaveNode return values:
-
- * If *any* visitor returns `DONT_TRAVERSE_CHILDREN`, the children will be skipped for *all*
-   visitors.
- * If *any* visitor returns `DONT_TRAVERSE_CURRENT_AND_CHILDREN`, the children will be skipped for *all*
-   visitors, and all *subsequent* visitors will not visit the current node.
- * If *any* visitor returns `STOP_TRAVERSAL`, traversal is stopped for *all* visitors.
- * If a visitor returns a replacement node, subsequent visitors will be passed the replacement node,
-   not the original one.
- * If a visitor returns `REMOVE_NODE`, subsequent visitors will not see this node.
- * If a visitor returns an array of replacement nodes, subsequent visitors will see neither the node
-   that was replaced, nor the replacement nodes.
-
-Simple node finding
--------------------
-
-While the node visitor mechanism is very flexible, creating a node visitor can be overly cumbersome
-for minor tasks. For this reason a `NodeFinder` is provided, which can find AST nodes that either
-satisfy a certain callback, or which are instanced of a certain node type. A couple of examples are
-shown in the following:
-
-```php
-use PhpParser\{Node, NodeFinder};
-
-$nodeFinder = new NodeFinder;
-
-// Find all class nodes.
-$classes = $nodeFinder->findInstanceOf($stmts, Node\Stmt\Class_::class);
-
-// Find all classes that extend another class
-$extendingClasses = $nodeFinder->find($stmts, function(Node $node) {
-    return $node instanceof Node\Stmt\Class_
-        && $node->extends !== null;
-});
-
-// Find first class occuring in the AST. Returns null if no class exists.
-$class = $nodeFinder->findFirstInstanceOf($stmts, Node\Stmt\Class_::class);
-
-// Find first class that has name $name
-$class = $nodeFinder->findFirst($stmts, function(Node $node) use ($name) {
-    return $node instanceof Node\Stmt\Class_
-        && $node->resolvedName->toString() === $name;
-});
-```
-
-Internally, the `NodeFinder` also uses a node traverser. It only simplifies the interface for a
-common use case.
-
-Parent and sibling references
------------------------------
-
-The node visitor mechanism is somewhat rigid, in that it prescribes an order in which nodes should
-be accessed: From parents to children. However, it can often be convenient to operate in the
-reverse direction: When working on a node, you might want to check if the parent node satisfies a
-certain property.
-
-PHP-Parser does not add parent (or sibling) references to nodes by itself, but you can easily
-emulate this with a visitor. See the [FAQ](FAQ.markdown) for more information.
diff --git a/vendor/nikic/php-parser/grammar/README.md b/vendor/nikic/php-parser/grammar/README.md
index 90988cf444..4bae11d826 100644
--- a/vendor/nikic/php-parser/grammar/README.md
+++ b/vendor/nikic/php-parser/grammar/README.md
@@ -21,8 +21,10 @@ applied to it:
 Building the parser
 ===================
 
-In order to rebuild the parser, you need [moriyoshi's fork of kmyacc](https://github.com/moriyoshi/kmyacc-forked).
-After you compiled/installed it, run the `rebuildParsers.php` script.
+Run `php grammar/rebuildParsers.php` to rebuild the parsers. Additional options:
 
-By default only the `Parser.php` is built. If you want to additionally emit debug symbols and create `y.output`, run the
-script with `--debug`. If you want to retain the preprocessed grammar pass `--keep-tmp-grammar`.
+ * The `KMYACC` environment variable can be used to specify an alternative `kmyacc` binary.
+   By default the `phpyacc` dev dependency will be used. To use the original `kmyacc`, you
+   need to compile [moriyoshi's fork](https://github.com/moriyoshi/kmyacc-forked).
+ * The `--debug` option enables emission of debug symbols and creates the `y.output` file.
+ * The `--keep-tmp-grammar` option preserves the preprocessed grammar file.
diff --git a/vendor/nikic/php-parser/grammar/php5.y b/vendor/nikic/php-parser/grammar/php5.y
index e775f2cab7..c7d245dc78 100644
--- a/vendor/nikic/php-parser/grammar/php5.y
+++ b/vendor/nikic/php-parser/grammar/php5.y
@@ -28,6 +28,7 @@ reserved_non_modifiers:
     | T_FUNCTION | T_CONST | T_RETURN | T_PRINT | T_YIELD | T_LIST | T_SWITCH | T_ENDSWITCH | T_CASE | T_DEFAULT
     | T_BREAK | T_ARRAY | T_CALLABLE | T_EXTENDS | T_IMPLEMENTS | T_NAMESPACE | T_TRAIT | T_INTERFACE | T_CLASS
     | T_CLASS_C | T_TRAIT_C | T_FUNC_C | T_METHOD_C | T_LINE | T_FILE | T_DIR | T_NS_C | T_HALT_COMPILER | T_FN
+    | T_MATCH
 ;
 
 semi_reserved:
@@ -48,13 +49,14 @@ reserved_non_modifiers_identifier:
       reserved_non_modifiers                                { $$ = Node\Identifier[$1]; }
 ;
 
-namespace_name_parts:
-      T_STRING                                              { init($1); }
-    | namespace_name_parts T_NS_SEPARATOR T_STRING          { push($1, $3); }
+namespace_name:
+      T_STRING                                              { $$ = Name[$1]; }
+    | T_NAME_QUALIFIED                                      { $$ = Name[$1]; }
 ;
 
-namespace_name:
-      namespace_name_parts                                  { $$ = Name[$1]; }
+legacy_namespace_name:
+      namespace_name                                        { $$ = $1; }
+    | T_NAME_FULLY_QUALIFIED                                { $$ = Name[substr($1, 1)]; }
 ;
 
 plain_variable:
@@ -90,16 +92,11 @@ use_type:
     | T_CONST                                               { $$ = Stmt\Use_::TYPE_CONSTANT; }
 ;
 
-/* Using namespace_name_parts here to avoid s/r conflict on T_NS_SEPARATOR */
 group_use_declaration:
-      T_USE use_type namespace_name_parts T_NS_SEPARATOR '{' unprefixed_use_declarations '}'
-          { $$ = Stmt\GroupUse[new Name($3, stackAttributes(#3)), $6, $2]; }
-    | T_USE use_type T_NS_SEPARATOR namespace_name_parts T_NS_SEPARATOR '{' unprefixed_use_declarations '}'
-          { $$ = Stmt\GroupUse[new Name($4, stackAttributes(#4)), $7, $2]; }
-    | T_USE namespace_name_parts T_NS_SEPARATOR '{' inline_use_declarations '}'
-          { $$ = Stmt\GroupUse[new Name($2, stackAttributes(#2)), $5, Stmt\Use_::TYPE_UNKNOWN]; }
-    | T_USE T_NS_SEPARATOR namespace_name_parts T_NS_SEPARATOR '{' inline_use_declarations '}'
-          { $$ = Stmt\GroupUse[new Name($3, stackAttributes(#3)), $6, Stmt\Use_::TYPE_UNKNOWN]; }
+      T_USE use_type legacy_namespace_name T_NS_SEPARATOR '{' unprefixed_use_declarations '}'
+          { $$ = Stmt\GroupUse[$3, $6, $2]; }
+    | T_USE legacy_namespace_name T_NS_SEPARATOR '{' inline_use_declarations '}'
+          { $$ = Stmt\GroupUse[$2, $5, Stmt\Use_::TYPE_UNKNOWN]; }
 ;
 
 unprefixed_use_declarations:
@@ -126,8 +123,10 @@ unprefixed_use_declaration:
 ;
 
 use_declaration:
-      unprefixed_use_declaration                            { $$ = $1; }
-    | T_NS_SEPARATOR unprefixed_use_declaration             { $$ = $2; }
+      legacy_namespace_name
+          { $$ = Stmt\UseUse[$1, null, Stmt\Use_::TYPE_UNKNOWN]; $this->checkUseUse($$, #1); }
+    | legacy_namespace_name T_AS identifier
+          { $$ = Stmt\UseUse[$1, $3, Stmt\Use_::TYPE_UNKNOWN]; $this->checkUseUse($$, #3); }
 ;
 
 inline_use_declaration:
@@ -733,9 +732,10 @@ class_name:
 ;
 
 name:
-      namespace_name_parts                                  { $$ = Name[$1]; }
-    | T_NS_SEPARATOR namespace_name_parts                   { $$ = Name\FullyQualified[$2]; }
-    | T_NAMESPACE T_NS_SEPARATOR namespace_name_parts       { $$ = Name\Relative[$3]; }
+      T_STRING                                              { $$ = Name[$1]; }
+    | T_NAME_QUALIFIED                                      { $$ = Name[$1]; }
+    | T_NAME_FULLY_QUALIFIED                                { $$ = Name\FullyQualified[substr($1, 1)]; }
+    | T_NAME_RELATIVE                                       { $$ = Name\Relative[substr($1, 10)]; }
 ;
 
 class_name_reference:
diff --git a/vendor/nikic/php-parser/grammar/php7.y b/vendor/nikic/php-parser/grammar/php7.y
index 23b193bbba..8add783387 100644
--- a/vendor/nikic/php-parser/grammar/php7.y
+++ b/vendor/nikic/php-parser/grammar/php7.y
@@ -28,6 +28,7 @@ reserved_non_modifiers:
     | T_FUNCTION | T_CONST | T_RETURN | T_PRINT | T_YIELD | T_LIST | T_SWITCH | T_ENDSWITCH | T_CASE | T_DEFAULT
     | T_BREAK | T_ARRAY | T_CALLABLE | T_EXTENDS | T_IMPLEMENTS | T_NAMESPACE | T_TRAIT | T_INTERFACE | T_CLASS
     | T_CLASS_C | T_TRAIT_C | T_FUNC_C | T_METHOD_C | T_LINE | T_FILE | T_DIR | T_NS_C | T_HALT_COMPILER | T_FN
+    | T_MATCH
 ;
 
 semi_reserved:
@@ -48,13 +49,20 @@ reserved_non_modifiers_identifier:
       reserved_non_modifiers                                { $$ = Node\Identifier[$1]; }
 ;
 
-namespace_name_parts:
-      T_STRING                                              { init($1); }
-    | namespace_name_parts T_NS_SEPARATOR T_STRING          { push($1, $3); }
+namespace_declaration_name:
+      T_STRING                                              { $$ = Name[$1]; }
+    | semi_reserved                                         { $$ = Name[$1]; }
+    | T_NAME_QUALIFIED                                      { $$ = Name[$1]; }
 ;
 
 namespace_name:
-      namespace_name_parts                                  { $$ = Name[$1]; }
+      T_STRING                                              { $$ = Name[$1]; }
+    | T_NAME_QUALIFIED                                      { $$ = Name[$1]; }
+;
+
+legacy_namespace_name:
+      namespace_name                                        { $$ = $1; }
+    | T_NAME_FULLY_QUALIFIED                                { $$ = Name[substr($1, 1)]; }
 ;
 
 plain_variable:
@@ -74,6 +82,31 @@ no_comma:
 optional_comma:
       /* empty */
     | ','
+;
+
+attribute_decl:
+      class_name                                            { $$ = Node\Attribute[$1, []]; }
+    | class_name argument_list                              { $$ = Node\Attribute[$1, $2]; }
+;
+
+attribute_group:
+      attribute_decl                                        { init($1); }
+    | attribute_group ',' attribute_decl                    { push($1, $3); }
+;
+
+attribute:
+      T_ATTRIBUTE attribute_group optional_comma ']'        { $$ = Node\AttributeGroup[$2]; }
+;
+
+attributes:
+      attribute                                             { init($1); }
+    | attributes attribute                                  { push($1, $2); }
+;
+
+optional_attributes:
+      /* empty */                                           { $$ = []; }
+    | attributes                                            { $$ = $1; }
+;
 
 top_statement:
       statement                                             { $$ = $1; }
@@ -81,11 +114,11 @@ top_statement:
     | class_declaration_statement                           { $$ = $1; }
     | T_HALT_COMPILER
           { $$ = Stmt\HaltCompiler[$this->lexer->handleHaltCompiler()]; }
-    | T_NAMESPACE namespace_name semi
+    | T_NAMESPACE namespace_declaration_name semi
           { $$ = Stmt\Namespace_[$2, null];
             $$->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON);
             $this->checkNamespace($$); }
-    | T_NAMESPACE namespace_name '{' top_statement_list '}'
+    | T_NAMESPACE namespace_declaration_name '{' top_statement_list '}'
           { $$ = Stmt\Namespace_[$2, $4];
             $$->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
             $this->checkNamespace($$); }
@@ -104,16 +137,11 @@ use_type:
     | T_CONST                                               { $$ = Stmt\Use_::TYPE_CONSTANT; }
 ;
 
-/* Using namespace_name_parts here to avoid s/r conflict on T_NS_SEPARATOR */
 group_use_declaration:
-      T_USE use_type namespace_name_parts T_NS_SEPARATOR '{' unprefixed_use_declarations '}'
-          { $$ = Stmt\GroupUse[new Name($3, stackAttributes(#3)), $6, $2]; }
-    | T_USE use_type T_NS_SEPARATOR namespace_name_parts T_NS_SEPARATOR '{' unprefixed_use_declarations '}'
-          { $$ = Stmt\GroupUse[new Name($4, stackAttributes(#4)), $7, $2]; }
-    | T_USE namespace_name_parts T_NS_SEPARATOR '{' inline_use_declarations '}'
-          { $$ = Stmt\GroupUse[new Name($2, stackAttributes(#2)), $5, Stmt\Use_::TYPE_UNKNOWN]; }
-    | T_USE T_NS_SEPARATOR namespace_name_parts T_NS_SEPARATOR '{' inline_use_declarations '}'
-          { $$ = Stmt\GroupUse[new Name($3, stackAttributes(#3)), $6, Stmt\Use_::TYPE_UNKNOWN]; }
+      T_USE use_type legacy_namespace_name T_NS_SEPARATOR '{' unprefixed_use_declarations '}'
+          { $$ = Stmt\GroupUse[$3, $6, $2]; }
+    | T_USE legacy_namespace_name T_NS_SEPARATOR '{' inline_use_declarations '}'
+          { $$ = Stmt\GroupUse[$2, $5, Stmt\Use_::TYPE_UNKNOWN]; }
 ;
 
 unprefixed_use_declarations:
@@ -153,8 +181,10 @@ unprefixed_use_declaration:
 ;
 
 use_declaration:
-      unprefixed_use_declaration                            { $$ = $1; }
-    | T_NS_SEPARATOR unprefixed_use_declaration             { $$ = $2; }
+      legacy_namespace_name
+          { $$ = Stmt\UseUse[$1, null, Stmt\Use_::TYPE_UNKNOWN]; $this->checkUseUse($$, #1); }
+    | legacy_namespace_name T_AS identifier
+          { $$ = Stmt\UseUse[$1, $3, Stmt\Use_::TYPE_UNKNOWN]; $this->checkUseUse($$, #3); }
 ;
 
 inline_use_declaration:
@@ -232,9 +262,18 @@ non_empty_statement:
     | T_RETURN optional_expr semi                           { $$ = Stmt\Return_[$2]; }
     | T_GLOBAL global_var_list semi                         { $$ = Stmt\Global_[$2]; }
     | T_STATIC static_var_list semi                         { $$ = Stmt\Static_[$2]; }
-    | T_ECHO expr_list semi                                 { $$ = Stmt\Echo_[$2]; }
+    | T_ECHO expr_list_forbid_comma semi                    { $$ = Stmt\Echo_[$2]; }
     | T_INLINE_HTML                                         { $$ = Stmt\InlineHTML[$1]; }
-    | expr semi                                             { $$ = Stmt\Expression[$1]; }
+    | expr semi {
+        $e = $1;
+        if ($e instanceof Expr\Throw_) {
+            // For backwards-compatibility reasons, convert throw in statement position into
+            // Stmt\Throw_ rather than Stmt\Expression(Expr\Throw_).
+            $$ = Stmt\Throw_[$e->expr];
+        } else {
+            $$ = Stmt\Expression[$e];
+        }
+    }
     | T_UNSET '(' variables_list ')' semi                   { $$ = Stmt\Unset_[$3]; }
     | T_FOREACH '(' expr T_AS foreach_variable ')' foreach_statement
           { $$ = Stmt\Foreach_[$3, $5[0], ['keyVar' => null, 'byRef' => $5[1], 'stmts' => $7]]; }
@@ -245,7 +284,6 @@ non_empty_statement:
     | T_DECLARE '(' declare_list ')' declare_statement      { $$ = Stmt\Declare_[$3, $5]; }
     | T_TRY '{' inner_statement_list '}' catches optional_finally
           { $$ = Stmt\TryCatch[$3, $5, $6]; $this->checkTryCatch($$); }
-    | T_THROW expr semi                                     { $$ = Stmt\Throw_[$2]; }
     | T_GOTO identifier semi                                { $$ = Stmt\Goto_[$2]; }
     | identifier ':'                                        { $$ = Stmt\Label[$1]; }
     | error                                                 { $$ = array(); /* means: no statement */ }
@@ -269,7 +307,7 @@ name_union:
 ;
 
 catch:
-    T_CATCH '(' name_union plain_variable ')' '{' inner_statement_list '}'
+    T_CATCH '(' name_union optional_plain_variable ')' '{' inner_statement_list '}'
         { $$ = Stmt\Catch_[$3, $4, $7]; }
 ;
 
@@ -303,19 +341,24 @@ block_or_error:
 ;
 
 function_declaration_statement:
-    T_FUNCTION optional_ref identifier '(' parameter_list ')' optional_return_type block_or_error
-        { $$ = Stmt\Function_[$3, ['byRef' => $2, 'params' => $5, 'returnType' => $7, 'stmts' => $8]]; }
+      T_FUNCTION optional_ref identifier '(' parameter_list ')' optional_return_type block_or_error
+          { $$ = Stmt\Function_[$3, ['byRef' => $2, 'params' => $5, 'returnType' => $7, 'stmts' => $8, 'attrGroups' => []]]; }
+    | attributes T_FUNCTION optional_ref identifier '(' parameter_list ')' optional_return_type block_or_error
+          { $$ = Stmt\Function_[$4, ['byRef' => $3, 'params' => $6, 'returnType' => $8, 'stmts' => $9, 'attrGroups' => $1]]; }
 ;
 
 class_declaration_statement:
       class_entry_type identifier extends_from implements_list '{' class_statement_list '}'
-          { $$ = Stmt\Class_[$2, ['type' => $1, 'extends' => $3, 'implements' => $4, 'stmts' => $6]];
+          { $$ = Stmt\Class_[$2, ['type' => $1, 'extends' => $3, 'implements' => $4, 'stmts' => $6, 'attrGroups' => []]];
             $this->checkClass($$, #2); }
-    | T_INTERFACE identifier interface_extends_list '{' class_statement_list '}'
-          { $$ = Stmt\Interface_[$2, ['extends' => $3, 'stmts' => $5]];
-            $this->checkInterface($$, #2); }
-    | T_TRAIT identifier '{' class_statement_list '}'
-          { $$ = Stmt\Trait_[$2, ['stmts' => $4]]; }
+    | attributes class_entry_type identifier extends_from implements_list '{' class_statement_list '}'
+          { $$ = Stmt\Class_[$3, ['type' => $2, 'extends' => $4, 'implements' => $5, 'stmts' => $7, 'attrGroups' => $1]];
+            $this->checkClass($$, #3); }
+    | optional_attributes T_INTERFACE identifier interface_extends_list '{' class_statement_list '}'
+          { $$ = Stmt\Interface_[$3, ['extends' => $4, 'stmts' => $6, 'attrGroups' => $1]];
+            $this->checkInterface($$, #3); }
+    | optional_attributes T_TRAIT identifier '{' class_statement_list '}'
+          { $$ = Stmt\Trait_[$3, ['stmts' => $5, 'attrGroups' => $1]]; }
 ;
 
 class_entry_type:
@@ -399,6 +442,25 @@ case_separator:
     | ';'
 ;
 
+match:
+      T_MATCH '(' expr ')' '{' match_arm_list '}'           { $$ = Expr\Match_[$3, $6]; }
+;
+
+match_arm_list:
+      /* empty */                                           { $$ = []; }
+    | non_empty_match_arm_list optional_comma               { $$ = $1; }
+;
+
+non_empty_match_arm_list:
+      match_arm                                             { init($1); }
+    | non_empty_match_arm_list ',' match_arm                { push($1, $3); }
+;
+
+match_arm:
+      expr_list_allow_comma T_DOUBLE_ARROW expr             { $$ = Node\MatchArm[$1, $3]; }
+    | T_DEFAULT optional_comma T_DOUBLE_ARROW expr          { $$ = Node\MatchArm[null, $4]; }
+;
+
 while_statement:
       statement                                             { $$ = toArray($1); }
     | ':' inner_statement_list T_ENDWHILE ';'               { $$ = $2; }
@@ -440,7 +502,7 @@ foreach_variable:
 ;
 
 parameter_list:
-      non_empty_parameter_list no_comma                     { $$ = $1; }
+      non_empty_parameter_list optional_comma               { $$ = $1; }
     | /* empty */                                           { $$ = array(); }
 ;
 
@@ -449,29 +511,60 @@ non_empty_parameter_list:
     | non_empty_parameter_list ',' parameter                { push($1, $3); }
 ;
 
+optional_visibility_modifier:
+      /* empty */               { $$ = 0; }
+    | T_PUBLIC                  { $$ = Stmt\Class_::MODIFIER_PUBLIC; }
+    | T_PROTECTED               { $$ = Stmt\Class_::MODIFIER_PROTECTED; }
+    | T_PRIVATE                 { $$ = Stmt\Class_::MODIFIER_PRIVATE; }
+;
+
 parameter:
-      optional_type optional_ref optional_ellipsis plain_variable
-          { $$ = Node\Param[$4, null, $1, $2, $3]; $this->checkParam($$); }
-    | optional_type optional_ref optional_ellipsis plain_variable '=' expr
-          { $$ = Node\Param[$4, $6, $1, $2, $3]; $this->checkParam($$); }
-    | optional_type optional_ref optional_ellipsis error
-          { $$ = Node\Param[Expr\Error[], null, $1, $2, $3]; }
+      optional_attributes optional_visibility_modifier optional_type_without_static optional_ref optional_ellipsis plain_variable
+          { $$ = new Node\Param($6, null, $3, $4, $5, attributes(), $2, $1);
+            $this->checkParam($$); }
+    | optional_attributes optional_visibility_modifier optional_type_without_static optional_ref optional_ellipsis plain_variable '=' expr
+          { $$ = new Node\Param($6, $8, $3, $4, $5, attributes(), $2, $1);
+            $this->checkParam($$); }
+    | optional_attributes optional_visibility_modifier optional_type_without_static optional_ref optional_ellipsis error
+          { $$ = new Node\Param(Expr\Error[], null, $3, $4, $5, attributes(), $2, $1); }
 ;
 
 type_expr:
       type                                                  { $$ = $1; }
     | '?' type                                              { $$ = Node\NullableType[$2]; }
+    | union_type                                            { $$ = Node\UnionType[$1]; }
 ;
 
 type:
+      type_without_static                                   { $$ = $1; }
+    | T_STATIC                                              { $$ = Node\Name['static']; }
+;
+
+type_without_static:
       name                                                  { $$ = $this->handleBuiltinTypes($1); }
     | T_ARRAY                                               { $$ = Node\Identifier['array']; }
     | T_CALLABLE                                            { $$ = Node\Identifier['callable']; }
 ;
 
-optional_type:
+union_type:
+      type '|' type                                         { init($1, $3); }
+    | union_type '|' type                                   { push($1, $3); }
+;
+
+union_type_without_static:
+      type_without_static '|' type_without_static           { init($1, $3); }
+    | union_type_without_static '|' type_without_static     { push($1, $3); }
+;
+
+type_expr_without_static:
+      type_without_static                                   { $$ = $1; }
+    | '?' type_without_static                               { $$ = Node\NullableType[$2]; }
+    | union_type_without_static                             { $$ = Node\UnionType[$1]; }
+;
+
+optional_type_without_static:
       /* empty */                                           { $$ = null; }
-    | type_expr                                             { $$ = $1; }
+    | type_expr_without_static                              { $$ = $1; }
 ;
 
 optional_return_type:
@@ -494,6 +587,8 @@ argument:
       expr                                                  { $$ = Node\Arg[$1, false, false]; }
     | '&' variable                                          { $$ = Node\Arg[$2, true, false]; }
     | T_ELLIPSIS expr                                       { $$ = Node\Arg[$2, false, true]; }
+    | identifier_ex ':' expr
+          { $$ = new Node\Arg($3, false, false, attributes(), $1); }
 ;
 
 global_var_list:
@@ -535,14 +630,15 @@ class_statement_list:
 ;
 
 class_statement:
-      variable_modifiers optional_type property_declaration_list ';'
-          { $attrs = attributes();
-            $$ = new Stmt\Property($1, $3, $attrs, $2); $this->checkProperty($$, #1); }
-    | method_modifiers T_CONST class_const_list ';'
-          { $$ = Stmt\ClassConst[$3, $1]; $this->checkClassConst($$, #1); }
-    | method_modifiers T_FUNCTION optional_ref identifier_ex '(' parameter_list ')' optional_return_type method_body
-          { $$ = Stmt\ClassMethod[$4, ['type' => $1, 'byRef' => $3, 'params' => $6, 'returnType' => $8, 'stmts' => $9]];
-            $this->checkClassMethod($$, #1); }
+      optional_attributes variable_modifiers optional_type_without_static property_declaration_list semi
+          { $$ = new Stmt\Property($2, $4, attributes(), $3, $1);
+            $this->checkProperty($$, #2); }
+    | optional_attributes method_modifiers T_CONST class_const_list semi
+          { $$ = new Stmt\ClassConst($4, $2, attributes(), $1);
+            $this->checkClassConst($$, #2); }
+    | optional_attributes method_modifiers T_FUNCTION optional_ref identifier_ex '(' parameter_list ')' optional_return_type method_body
+          { $$ = Stmt\ClassMethod[$5, ['type' => $2, 'byRef' => $4, 'params' => $7, 'returnType' => $9, 'stmts' => $10, 'attrGroups' => $1]];
+            $this->checkClassMethod($$, #2); }
     | T_USE class_name_list trait_adaptations               { $$ = Stmt\TraitUse[$2, $3]; }
     | error                                                 { $$ = null; /* will be skipped */ }
 ;
@@ -626,10 +722,14 @@ property_declaration:
     | property_decl_name '=' expr                           { $$ = Stmt\PropertyProperty[$1, $3]; }
 ;
 
-expr_list:
+expr_list_forbid_comma:
       non_empty_expr_list no_comma                          { $$ = $1; }
 ;
 
+expr_list_allow_comma:
+      non_empty_expr_list optional_comma                    { $$ = $1; }
+;
+
 non_empty_expr_list:
       non_empty_expr_list ',' expr                          { push($1, $3); }
     | expr                                                  { init($1); }
@@ -637,7 +737,7 @@ non_empty_expr_list:
 
 for_expr:
       /* empty */                                           { $$ = array(); }
-    | expr_list                                             { $$ = $1; }
+    | expr_list_forbid_comma                                { $$ = $1; }
 ;
 
 expr:
@@ -647,6 +747,7 @@ expr:
     | variable '=' expr                                     { $$ = Expr\Assign[$1, $3]; }
     | variable '=' '&' variable                             { $$ = Expr\AssignRef[$1, $4]; }
     | new_expr                                              { $$ = $1; }
+    | match                                                 { $$ = $1; }
     | T_CLONE expr                                          { $$ = Expr\Clone_[$2]; }
     | variable T_PLUS_EQUAL expr                            { $$ = Expr\AssignOp\Plus      [$1, $3]; }
     | variable T_MINUS_EQUAL expr                           { $$ = Expr\AssignOp\Minus     [$1, $3]; }
@@ -700,7 +801,7 @@ expr:
     | expr '?' expr ':' expr                                { $$ = Expr\Ternary[$1, $3,   $5]; }
     | expr '?' ':' expr                                     { $$ = Expr\Ternary[$1, null, $4]; }
     | expr T_COALESCE expr                                  { $$ = Expr\BinaryOp\Coalesce[$1, $3]; }
-    | T_ISSET '(' variables_list ')'                        { $$ = Expr\Isset_[$3]; }
+    | T_ISSET '(' expr_list_allow_comma ')'                 { $$ = Expr\Isset_[$3]; }
     | T_EMPTY '(' expr ')'                                  { $$ = Expr\Empty_[$3]; }
     | T_INCLUDE expr                                        { $$ = Expr\Include_[$2, Expr\Include_::TYPE_INCLUDE]; }
     | T_INCLUDE_ONCE expr                                   { $$ = Expr\Include_[$2, Expr\Include_::TYPE_INCLUDE_ONCE]; }
@@ -729,23 +830,30 @@ expr:
     | T_YIELD expr                                          { $$ = Expr\Yield_[$2, null]; }
     | T_YIELD expr T_DOUBLE_ARROW expr                      { $$ = Expr\Yield_[$4, $2]; }
     | T_YIELD_FROM expr                                     { $$ = Expr\YieldFrom[$2]; }
+    | T_THROW expr                                          { $$ = Expr\Throw_[$2]; }
 
     | T_FN optional_ref '(' parameter_list ')' optional_return_type T_DOUBLE_ARROW expr
-          { $$ = Expr\ArrowFunction[['static' => false, 'byRef' => $2, 'params' => $4, 'returnType' => $6, 'expr' => $8]]; }
+          { $$ = Expr\ArrowFunction[['static' => false, 'byRef' => $2, 'params' => $4, 'returnType' => $6, 'expr' => $8, 'attrGroups' => []]]; }
     | T_STATIC T_FN optional_ref '(' parameter_list ')' optional_return_type T_DOUBLE_ARROW expr
-          { $$ = Expr\ArrowFunction[['static' => true, 'byRef' => $3, 'params' => $5, 'returnType' => $7, 'expr' => $9]]; }
-
-    | T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars optional_return_type
-      block_or_error
-          { $$ = Expr\Closure[['static' => false, 'byRef' => $2, 'params' => $4, 'uses' => $6, 'returnType' => $7, 'stmts' => $8]]; }
-    | T_STATIC T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars optional_return_type
-      block_or_error
-          { $$ = Expr\Closure[['static' => true, 'byRef' => $3, 'params' => $5, 'uses' => $7, 'returnType' => $8, 'stmts' => $9]]; }
+          { $$ = Expr\ArrowFunction[['static' => true, 'byRef' => $3, 'params' => $5, 'returnType' => $7, 'expr' => $9, 'attrGroups' => []]]; }
+    | T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars optional_return_type block_or_error
+          { $$ = Expr\Closure[['static' => false, 'byRef' => $2, 'params' => $4, 'uses' => $6, 'returnType' => $7, 'stmts' => $8, 'attrGroups' => []]]; }
+    | T_STATIC T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars optional_return_type       block_or_error
+          { $$ = Expr\Closure[['static' => true, 'byRef' => $3, 'params' => $5, 'uses' => $7, 'returnType' => $8, 'stmts' => $9, 'attrGroups' => []]]; }
+
+    | attributes T_FN optional_ref '(' parameter_list ')' optional_return_type T_DOUBLE_ARROW expr
+          { $$ = Expr\ArrowFunction[['static' => false, 'byRef' => $3, 'params' => $5, 'returnType' => $7, 'expr' => $9, 'attrGroups' => $1]]; }
+    | attributes T_STATIC T_FN optional_ref '(' parameter_list ')' optional_return_type T_DOUBLE_ARROW expr
+          { $$ = Expr\ArrowFunction[['static' => true, 'byRef' => $4, 'params' => $6, 'returnType' => $8, 'expr' => $10, 'attrGroups' => $1]]; }
+    | attributes T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars optional_return_type block_or_error
+          { $$ = Expr\Closure[['static' => false, 'byRef' => $3, 'params' => $5, 'uses' => $7, 'returnType' => $8, 'stmts' => $9, 'attrGroups' => $1]]; }
+    | attributes T_STATIC T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars optional_return_type       block_or_error
+          { $$ = Expr\Closure[['static' => true, 'byRef' => $4, 'params' => $6, 'uses' => $8, 'returnType' => $9, 'stmts' => $10, 'attrGroups' => $1]]; }
 ;
 
 anonymous_class:
-      T_CLASS ctor_arguments extends_from implements_list '{' class_statement_list '}'
-          { $$ = array(Stmt\Class_[null, ['type' => 0, 'extends' => $3, 'implements' => $4, 'stmts' => $6]], $2);
+      optional_attributes T_CLASS ctor_arguments extends_from implements_list '{' class_statement_list '}'
+          { $$ = array(Stmt\Class_[null, ['type' => 0, 'extends' => $4, 'implements' => $5, 'stmts' => $7, 'attrGroups' => $1]], $3);
             $this->checkClass($$[0], -1); }
 ;
 
@@ -761,7 +869,7 @@ lexical_vars:
 ;
 
 lexical_var_list:
-      non_empty_lexical_var_list no_comma                   { $$ = $1; }
+      non_empty_lexical_var_list optional_comma             { $$ = $1; }
 ;
 
 non_empty_lexical_var_list:
@@ -786,20 +894,22 @@ class_name:
 ;
 
 name:
-      namespace_name_parts                                  { $$ = Name[$1]; }
-    | T_NS_SEPARATOR namespace_name_parts                   { $$ = Name\FullyQualified[$2]; }
-    | T_NAMESPACE T_NS_SEPARATOR namespace_name_parts       { $$ = Name\Relative[$3]; }
+      T_STRING                                              { $$ = Name[$1]; }
+    | T_NAME_QUALIFIED                                      { $$ = Name[$1]; }
+    | T_NAME_FULLY_QUALIFIED                                { $$ = Name\FullyQualified[substr($1, 1)]; }
+    | T_NAME_RELATIVE                                       { $$ = Name\Relative[substr($1, 10)]; }
 ;
 
 class_name_reference:
       class_name                                            { $$ = $1; }
     | new_variable                                          { $$ = $1; }
+    | '(' expr ')'                                          { $$ = $2; }
     | error                                                 { $$ = Expr\Error[]; $this->errorState = 2; }
 ;
 
 class_name_or_var:
       class_name                                            { $$ = $1; }
-    | dereferencable                                        { $$ = $1; }
+    | fully_dereferencable                                  { $$ = $1; }
 ;
 
 exit_expr:
@@ -821,9 +931,20 @@ ctor_arguments:
 
 constant:
       name                                                  { $$ = Expr\ConstFetch[$1]; }
-    | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM identifier_ex
+    | T_LINE                                                { $$ = Scalar\MagicConst\Line[]; }
+    | T_FILE                                                { $$ = Scalar\MagicConst\File[]; }
+    | T_DIR                                                 { $$ = Scalar\MagicConst\Dir[]; }
+    | T_CLASS_C                                             { $$ = Scalar\MagicConst\Class_[]; }
+    | T_TRAIT_C                                             { $$ = Scalar\MagicConst\Trait_[]; }
+    | T_METHOD_C                                            { $$ = Scalar\MagicConst\Method[]; }
+    | T_FUNC_C                                              { $$ = Scalar\MagicConst\Function_[]; }
+    | T_NS_C                                                { $$ = Scalar\MagicConst\Namespace_[]; }
+;
+
+class_constant:
+      class_name_or_var T_PAAMAYIM_NEKUDOTAYIM identifier_ex
           { $$ = Expr\ClassConstFetch[$1, $3]; }
-    /* We interpret and isolated FOO:: as an unfinished class constant fetch. It could also be
+    /* We interpret an isolated FOO:: as an unfinished class constant fetch. It could also be
        an unfinished static property fetch or unfinished scoped call. */
     | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM error
           { $$ = Expr\ClassConstFetch[$1, new Expr\Error(stackAttributes(#3))]; $this->errorState = 2; }
@@ -843,28 +964,21 @@ dereferencable_scalar:
     | T_CONSTANT_ENCAPSED_STRING
           { $attrs = attributes(); $attrs['kind'] = strKind($1);
             $$ = new Scalar\String_(Scalar\String_::parse($1), $attrs); }
+    | '"' encaps_list '"'
+          { $attrs = attributes(); $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED;
+            parseEncapsed($2, '"', true); $$ = new Scalar\Encapsed($2, $attrs); }
 ;
 
 scalar:
       T_LNUMBER                                             { $$ = $this->parseLNumber($1, attributes()); }
     | T_DNUMBER                                             { $$ = Scalar\DNumber[Scalar\DNumber::parse($1)]; }
-    | T_LINE                                                { $$ = Scalar\MagicConst\Line[]; }
-    | T_FILE                                                { $$ = Scalar\MagicConst\File[]; }
-    | T_DIR                                                 { $$ = Scalar\MagicConst\Dir[]; }
-    | T_CLASS_C                                             { $$ = Scalar\MagicConst\Class_[]; }
-    | T_TRAIT_C                                             { $$ = Scalar\MagicConst\Trait_[]; }
-    | T_METHOD_C                                            { $$ = Scalar\MagicConst\Method[]; }
-    | T_FUNC_C                                              { $$ = Scalar\MagicConst\Function_[]; }
-    | T_NS_C                                                { $$ = Scalar\MagicConst\Namespace_[]; }
     | dereferencable_scalar                                 { $$ = $1; }
     | constant                                              { $$ = $1; }
+    | class_constant                                        { $$ = $1; }
     | T_START_HEREDOC T_ENCAPSED_AND_WHITESPACE T_END_HEREDOC
           { $$ = $this->parseDocString($1, $2, $3, attributes(), stackAttributes(#3), true); }
     | T_START_HEREDOC T_END_HEREDOC
           { $$ = $this->parseDocString($1, '', $2, attributes(), stackAttributes(#2), true); }
-    | '"' encaps_list '"'
-          { $attrs = attributes(); $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED;
-            parseEncapsed($2, '"', true); $$ = new Scalar\Encapsed($2, $attrs); }
     | T_START_HEREDOC encaps_list T_END_HEREDOC
           { $$ = $this->parseDocString($1, $2, $3, attributes(), stackAttributes(#3), true); }
 ;
@@ -874,10 +988,16 @@ optional_expr:
     | expr                                                  { $$ = $1; }
 ;
 
-dereferencable:
+fully_dereferencable:
       variable                                              { $$ = $1; }
     | '(' expr ')'                                          { $$ = $2; }
     | dereferencable_scalar                                 { $$ = $1; }
+    | class_constant                                        { $$ = $1; }
+;
+
+array_object_dereferencable:
+      fully_dereferencable                                  { $$ = $1; }
+    | constant                                              { $$ = $1; }
 ;
 
 callable_expr:
@@ -888,18 +1008,27 @@ callable_expr:
 
 callable_variable:
       simple_variable                                       { $$ = Expr\Variable[$1]; }
-    | dereferencable '[' optional_expr ']'                  { $$ = Expr\ArrayDimFetch[$1, $3]; }
-    | constant '[' optional_expr ']'                        { $$ = Expr\ArrayDimFetch[$1, $3]; }
-    | dereferencable '{' expr '}'                           { $$ = Expr\ArrayDimFetch[$1, $3]; }
+    | array_object_dereferencable '[' optional_expr ']'     { $$ = Expr\ArrayDimFetch[$1, $3]; }
+    | array_object_dereferencable '{' expr '}'              { $$ = Expr\ArrayDimFetch[$1, $3]; }
     | function_call                                         { $$ = $1; }
-    | dereferencable T_OBJECT_OPERATOR property_name argument_list
+    | array_object_dereferencable T_OBJECT_OPERATOR property_name argument_list
           { $$ = Expr\MethodCall[$1, $3, $4]; }
+    | array_object_dereferencable T_NULLSAFE_OBJECT_OPERATOR property_name argument_list
+          { $$ = Expr\NullsafeMethodCall[$1, $3, $4]; }
+;
+
+optional_plain_variable:
+      /* empty */                                           { $$ = null; }
+    | plain_variable                                        { $$ = $1; }
 ;
 
 variable:
       callable_variable                                     { $$ = $1; }
     | static_member                                         { $$ = $1; }
-    | dereferencable T_OBJECT_OPERATOR property_name        { $$ = Expr\PropertyFetch[$1, $3]; }
+    | array_object_dereferencable T_OBJECT_OPERATOR property_name
+          { $$ = Expr\PropertyFetch[$1, $3]; }
+    | array_object_dereferencable T_NULLSAFE_OBJECT_OPERATOR property_name
+          { $$ = Expr\NullsafePropertyFetch[$1, $3]; }
 ;
 
 simple_variable:
@@ -924,6 +1053,7 @@ new_variable:
     | new_variable '[' optional_expr ']'                    { $$ = Expr\ArrayDimFetch[$1, $3]; }
     | new_variable '{' expr '}'                             { $$ = Expr\ArrayDimFetch[$1, $3]; }
     | new_variable T_OBJECT_OPERATOR property_name          { $$ = Expr\PropertyFetch[$1, $3]; }
+    | new_variable T_NULLSAFE_OBJECT_OPERATOR property_name { $$ = Expr\NullsafePropertyFetch[$1, $3]; }
     | class_name T_PAAMAYIM_NEKUDOTAYIM static_member_prop_name
           { $$ = Expr\StaticPropertyFetch[$1, $3]; }
     | new_variable T_PAAMAYIM_NEKUDOTAYIM static_member_prop_name
@@ -932,34 +1062,19 @@ new_variable:
 
 member_name:
       identifier_ex                                         { $$ = $1; }
-    | '{' expr '}'	                                        { $$ = $2; }
-    | simple_variable	                                    { $$ = Expr\Variable[$1]; }
+    | '{' expr '}'                                          { $$ = $2; }
+    | simple_variable                                       { $$ = Expr\Variable[$1]; }
 ;
 
 property_name:
       identifier                                            { $$ = $1; }
-    | '{' expr '}'	                                        { $$ = $2; }
-    | simple_variable	                                    { $$ = Expr\Variable[$1]; }
+    | '{' expr '}'                                          { $$ = $2; }
+    | simple_variable                                       { $$ = Expr\Variable[$1]; }
     | error                                                 { $$ = Expr\Error[]; $this->errorState = 2; }
 ;
 
 list_expr:
-      T_LIST '(' list_expr_elements ')'                     { $$ = Expr\List_[$3]; }
-;
-
-list_expr_elements:
-      list_expr_elements ',' list_expr_element              { push($1, $3); }
-    | list_expr_element                                     { init($1); }
-;
-
-list_expr_element:
-      variable                                              { $$ = Expr\ArrayItem[$1, null, false]; }
-    | '&' variable                                          { $$ = Expr\ArrayItem[$2, null, true]; }
-    | list_expr                                             { $$ = Expr\ArrayItem[$1, null, false]; }
-    | expr T_DOUBLE_ARROW variable                          { $$ = Expr\ArrayItem[$3, $1, false]; }
-    | expr T_DOUBLE_ARROW '&' variable                      { $$ = Expr\ArrayItem[$4, $1, true]; }
-    | expr T_DOUBLE_ARROW list_expr                         { $$ = Expr\ArrayItem[$3, $1, false]; }
-    | /* empty */                                           { $$ = null; }
+      T_LIST '(' inner_array_pair_list ')'                  { $$ = Expr\List_[$3]; }
 ;
 
 array_pair_list:
@@ -979,10 +1094,12 @@ inner_array_pair_list:
 ;
 
 array_pair:
-      expr T_DOUBLE_ARROW expr                              { $$ = Expr\ArrayItem[$3, $1,   false]; }
-    | expr                                                  { $$ = Expr\ArrayItem[$1, null, false]; }
-    | expr T_DOUBLE_ARROW '&' variable                      { $$ = Expr\ArrayItem[$4, $1,   true]; }
+      expr                                                  { $$ = Expr\ArrayItem[$1, null, false]; }
     | '&' variable                                          { $$ = Expr\ArrayItem[$2, null, true]; }
+    | list_expr                                             { $$ = Expr\ArrayItem[$1, null, false]; }
+    | expr T_DOUBLE_ARROW expr                              { $$ = Expr\ArrayItem[$3, $1,   false]; }
+    | expr T_DOUBLE_ARROW '&' variable                      { $$ = Expr\ArrayItem[$4, $1,   true]; }
+    | expr T_DOUBLE_ARROW list_expr                         { $$ = Expr\ArrayItem[$3, $1,   false]; }
     | T_ELLIPSIS expr                                       { $$ = Expr\ArrayItem[$2, null, false, attributes(), true]; }
     | /* empty */                                           { $$ = null; }
 ;
@@ -1006,6 +1123,7 @@ encaps_var:
       plain_variable                                        { $$ = $1; }
     | plain_variable '[' encaps_var_offset ']'              { $$ = Expr\ArrayDimFetch[$1, $3]; }
     | plain_variable T_OBJECT_OPERATOR identifier           { $$ = Expr\PropertyFetch[$1, $3]; }
+    | plain_variable T_NULLSAFE_OBJECT_OPERATOR identifier  { $$ = Expr\NullsafePropertyFetch[$1, $3]; }
     | T_DOLLAR_OPEN_CURLY_BRACES expr '}'                   { $$ = Expr\Variable[$2]; }
     | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '}'       { $$ = Expr\Variable[$2]; }
     | T_DOLLAR_OPEN_CURLY_BRACES encaps_str_varname '[' expr ']' '}'
diff --git a/vendor/nikic/php-parser/grammar/rebuildParsers.php b/vendor/nikic/php-parser/grammar/rebuildParsers.php
index b913cdacaf..88a53f1334 100644
--- a/vendor/nikic/php-parser/grammar/rebuildParsers.php
+++ b/vendor/nikic/php-parser/grammar/rebuildParsers.php
@@ -13,13 +13,10 @@
 $resultDir = __DIR__ . '/../lib/PhpParser/Parser';
 $tokensResultsFile = $resultDir . '/Tokens.php';
 
-// check for kmyacc binary in this directory, otherwise fall back to global name
-if (file_exists(__DIR__ . '/kmyacc.exe')) {
-    $kmyacc = __DIR__ . '/kmyacc.exe';
-} else if (file_exists(__DIR__ . '/kmyacc')) {
-    $kmyacc = __DIR__ . '/kmyacc';
-} else {
-    $kmyacc = 'kmyacc';
+$kmyacc = getenv('KMYACC');
+if (!$kmyacc) {
+    // Use phpyacc from dev dependencies by default.
+    $kmyacc = __DIR__ . '/../vendor/bin/phpyacc';
 }
 
 $options = array_flip($argv);
@@ -62,8 +59,7 @@
     $additionalArgs = $optionDebug ? '-t -v' : '';
 
     echo "Building $name parser.\n";
-    $output = trim(shell_exec("$kmyacc $additionalArgs -l -m $skeletonFile -p $name $tmpGrammarFile 2>&1"));
-    echo "Output: \"$output\"\n";
+    $output = execCmd("$kmyacc $additionalArgs -m $skeletonFile -p $name $tmpGrammarFile");
 
     $resultCode = file_get_contents($tmpResultFile);
     $resultCode = removeTrailingWhitespace($resultCode);
@@ -73,8 +69,7 @@
     unlink($tmpResultFile);
 
     echo "Building token definition.\n";
-    $output = trim(shell_exec("$kmyacc -l -m $tokensTemplate $tmpGrammarFile 2>&1"));
-    assert($output === '');
+    $output = execCmd("$kmyacc -m $tokensTemplate $tmpGrammarFile");
     rename($tmpResultFile, $tokensResultsFile);
 
     if (!$optionKeepTmpGrammar) {
@@ -122,28 +117,28 @@ function($matches) {
                 $matches['args']
             );
 
-            if ('attributes' == $name) {
+            if ('attributes' === $name) {
                 assertArgs(0, $args, $name);
                 return '$this->startAttributeStack[#1] + $this->endAttributes';
             }
 
-            if ('stackAttributes' == $name) {
+            if ('stackAttributes' === $name) {
                 assertArgs(1, $args, $name);
                 return '$this->startAttributeStack[' . $args[0] . ']'
                      . ' + $this->endAttributeStack[' . $args[0] . ']';
             }
 
-            if ('init' == $name) {
+            if ('init' === $name) {
                 return '$$ = array(' . implode(', ', $args) . ')';
             }
 
-            if ('push' == $name) {
+            if ('push' === $name) {
                 assertArgs(2, $args, $name);
 
                 return $args[0] . '[] = ' . $args[1] . '; $$ = ' . $args[0];
             }
 
-            if ('pushNormalizing' == $name) {
+            if ('pushNormalizing' === $name) {
                 assertArgs(2, $args, $name);
 
                 return 'if (is_array(' . $args[1] . ')) { $$ = array_merge(' . $args[0] . ', ' . $args[1] . '); }'
@@ -156,20 +151,20 @@ function($matches) {
                 return 'is_array(' . $args[0] . ') ? ' . $args[0] . ' : array(' . $args[0] . ')';
             }
 
-            if ('parseVar' == $name) {
+            if ('parseVar' === $name) {
                 assertArgs(1, $args, $name);
 
                 return 'substr(' . $args[0] . ', 1)';
             }
 
-            if ('parseEncapsed' == $name) {
+            if ('parseEncapsed' === $name) {
                 assertArgs(3, $args, $name);
 
                 return 'foreach (' . $args[0] . ' as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) {'
                      . ' $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, ' . $args[1] . ', ' . $args[2] . '); } }';
             }
 
-            if ('makeNop' == $name) {
+            if ('makeNop' === $name) {
                 assertArgs(3, $args, $name);
 
                 return '$startAttributes = ' . $args[1] . ';'
@@ -183,11 +178,11 @@ function($matches) {
 
                 return '$startAttributes = ' . $args[1] . ';'
                     . ' if (isset($startAttributes[\'comments\']))'
-                    . ' { ' . $args[0] . ' = new Stmt\Nop($this->createZeroLengthAttributes($startAttributes)); }'
+                    . ' { ' . $args[0] . ' = new Stmt\Nop($this->createCommentNopAttributes($startAttributes[\'comments\'])); }'
                     . ' else { ' . $args[0] . ' = null; }';
             }
 
-            if ('strKind' == $name) {
+            if ('strKind' === $name) {
                 assertArgs(1, $args, $name);
 
                 return '(' . $args[0] . '[0] === "\'" || (' . $args[0] . '[1] === "\'" && '
@@ -195,7 +190,7 @@ function($matches) {
                      . '? Scalar\String_::KIND_SINGLE_QUOTED : Scalar\String_::KIND_DOUBLE_QUOTED)';
             }
 
-            if ('prependLeadingComments' == $name) {
+            if ('prependLeadingComments' === $name) {
                 assertArgs(1, $args, $name);
 
                 return '$attrs = $this->startAttributeStack[#1]; $stmts = ' . $args[0] . '; '
@@ -234,6 +229,15 @@ function ensureDirExists($dir) {
     }
 }
 
+function execCmd($cmd) {
+    $output = trim(shell_exec("$cmd 2>&1"));
+    if ($output !== "") {
+        echo "> " . $cmd . "\n";
+        echo $output;
+    }
+    return $output;
+}
+
 //////////////////////////////
 /// Regex helper functions ///
 //////////////////////////////
diff --git a/vendor/nikic/php-parser/grammar/tokens.y b/vendor/nikic/php-parser/grammar/tokens.y
index dd83a6f83d..b0b0360cd2 100644
--- a/vendor/nikic/php-parser/grammar/tokens.y
+++ b/vendor/nikic/php-parser/grammar/tokens.y
@@ -1,6 +1,7 @@
 /* We currently rely on the token ID mapping to be the same between PHP 5 and PHP 7 - so the same lexer can be used for
  * both. This is enforced by sharing this token file. */
 
+%right T_THROW
 %left T_INCLUDE T_INCLUDE_ONCE T_EVAL T_REQUIRE T_REQUIRE_ONCE
 %left ','
 %left T_LOGICAL_OR
@@ -41,8 +42,6 @@
 %token T_VARIABLE
 %token T_NUM_STRING
 %token T_INLINE_HTML
-%token T_CHARACTER
-%token T_BAD_CHARACTER
 %token T_ENCAPSED_AND_WHITESPACE
 %token T_CONSTANT_ENCAPSED_STRING
 %token T_ECHO
@@ -57,6 +56,7 @@
 %token T_ENDDECLARE
 %token T_AS
 %token T_SWITCH
+%token T_MATCH
 %token T_ENDSWITCH
 %token T_CASE
 %token T_DEFAULT
@@ -86,6 +86,7 @@
 %token T_EXTENDS
 %token T_IMPLEMENTS
 %token T_OBJECT_OPERATOR
+%token T_NULLSAFE_OBJECT_OPERATOR
 %token T_DOUBLE_ARROW
 %token T_LIST
 %token T_ARRAY
@@ -96,12 +97,6 @@
 %token T_FUNC_C
 %token T_LINE
 %token T_FILE
-%token T_COMMENT
-%token T_DOC_COMMENT
-%token T_OPEN_TAG
-%token T_OPEN_TAG_WITH_ECHO
-%token T_CLOSE_TAG
-%token T_WHITESPACE
 %token T_START_HEREDOC
 %token T_END_HEREDOC
 %token T_DOLLAR_OPEN_CURLY_BRACES
@@ -112,3 +107,7 @@
 %token T_DIR
 %token T_NS_SEPARATOR
 %token T_ELLIPSIS
+%token T_NAME_FULLY_QUALIFIED
+%token T_NAME_QUALIFIED
+%token T_NAME_RELATIVE
+%token T_ATTRIBUTE
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php
index 184813a657..c6491786e3 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php
@@ -12,7 +12,7 @@ class Param implements PhpParser\Builder
 
     protected $default = null;
 
-    /** @var string|Node\Name|Node\NullableType|null */
+    /** @var Node\Identifier|Node\Name|Node\NullableType|null */
     protected $type = null;
 
     protected $byRef = false;
@@ -44,7 +44,7 @@ public function setDefault($value) {
     /**
      * Sets type for the parameter.
      *
-     * @param string|Node\Name|Node\NullableType $type Parameter type
+     * @param string|Node\Name|Node\NullableType|Node\UnionType $type Parameter type
      *
      * @return $this The builder instance (for fluid interface)
      */
@@ -60,7 +60,7 @@ public function setType($type) {
     /**
      * Sets type for the parameter.
      *
-     * @param string|Node\Name|Node\NullableType $type Parameter type
+     * @param string|Node\Name|Node\NullableType|Node\UnionType $type Parameter type
      *
      * @return $this The builder instance (for fluid interface)
      *
diff --git a/vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php b/vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php
index 790e8877eb..180bf35d0e 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php
@@ -8,6 +8,7 @@
 use PhpParser\Node\NullableType;
 use PhpParser\Node\Scalar;
 use PhpParser\Node\Stmt;
+use PhpParser\Node\UnionType;
 
 /**
  * This class defines helpers used in the implementation of builders. Don't use it directly.
@@ -158,16 +159,19 @@ private static function normalizeNameCommon($name, bool $allowExpr) {
      * In particular, builtin types become Identifiers, custom types become Names and nullables
      * are wrapped in NullableType nodes.
      *
-     * @param string|Name|Identifier|NullableType $type The type to normalize
+     * @param string|Name|Identifier|NullableType|UnionType $type The type to normalize
      *
-     * @return Name|Identifier|NullableType The normalized type
+     * @return Name|Identifier|NullableType|UnionType The normalized type
      */
     public static function normalizeType($type) {
         if (!is_string($type)) {
-            if (!$type instanceof Name && !$type instanceof Identifier
-                    && !$type instanceof NullableType) {
+            if (
+                !$type instanceof Name && !$type instanceof Identifier &&
+                !$type instanceof NullableType && !$type instanceof UnionType
+            ) {
                 throw new \LogicException(
-                    'Type must be a string, or an instance of Name, Identifier or NullableType');
+                    'Type must be a string, or an instance of Name, Identifier, NullableType or UnionType'
+                );
             }
             return $type;
         }
@@ -179,7 +183,7 @@ public static function normalizeType($type) {
         }
 
         $builtinTypes = [
-            'array', 'callable', 'string', 'int', 'float', 'bool', 'iterable', 'void', 'object'
+            'array', 'callable', 'string', 'int', 'float', 'bool', 'iterable', 'void', 'object', 'mixed'
         ];
 
         $lowerType = strtolower($type);
@@ -193,7 +197,11 @@ public static function normalizeType($type) {
             throw new \LogicException('void type cannot be nullable');
         }
 
-        return $nullable ? new Node\NullableType($type) : $type;
+        if ($nullable && (string) $type === 'mixed') {
+            throw new \LogicException('mixed type cannot be nullable');
+        }
+
+        return $nullable ? new NullableType($type) : $type;
     }
 
     /**
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Comment.php b/vendor/nikic/php-parser/lib/PhpParser/Comment.php
index 5da8420958..61e98d3dca 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Comment.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Comment.php
@@ -5,9 +5,12 @@
 class Comment implements \JsonSerializable
 {
     protected $text;
-    protected $line;
-    protected $filePos;
-    protected $tokenPos;
+    protected $startLine;
+    protected $startFilePos;
+    protected $startTokenPos;
+    protected $endLine;
+    protected $endFilePos;
+    protected $endTokenPos;
 
     /**
      * Constructs a comment node.
@@ -18,12 +21,17 @@ class Comment implements \JsonSerializable
      * @param int    $startTokenPos Token offset the comment started on
      */
     public function __construct(
-        string $text, int $startLine = -1, int $startFilePos = -1, int $startTokenPos = -1
+        string $text,
+        int $startLine = -1, int $startFilePos = -1, int $startTokenPos = -1,
+        int $endLine = -1, int $endFilePos = -1, int $endTokenPos = -1
     ) {
         $this->text = $text;
-        $this->line = $startLine;
-        $this->filePos = $startFilePos;
-        $this->tokenPos = $startTokenPos;
+        $this->startLine = $startLine;
+        $this->startFilePos = $startFilePos;
+        $this->startTokenPos = $startTokenPos;
+        $this->endLine = $endLine;
+        $this->endFilePos = $endFilePos;
+        $this->endTokenPos = $endTokenPos;
     }
 
     /**
@@ -38,28 +46,88 @@ public function getText() : string {
     /**
      * Gets the line number the comment started on.
      *
+     * @return int Line number (or -1 if not available)
+     */
+    public function getStartLine() : int {
+        return $this->startLine;
+    }
+
+    /**
+     * Gets the file offset the comment started on.
+     *
+     * @return int File offset (or -1 if not available)
+     */
+    public function getStartFilePos() : int {
+        return $this->startFilePos;
+    }
+
+    /**
+     * Gets the token offset the comment started on.
+     *
+     * @return int Token offset (or -1 if not available)
+     */
+    public function getStartTokenPos() : int {
+        return $this->startTokenPos;
+    }
+
+    /**
+     * Gets the line number the comment ends on.
+     *
+     * @return int Line number (or -1 if not available)
+     */
+    public function getEndLine() : int {
+        return $this->endLine;
+    }
+
+    /**
+     * Gets the file offset the comment ends on.
+     *
+     * @return int File offset (or -1 if not available)
+     */
+    public function getEndFilePos() : int {
+        return $this->endFilePos;
+    }
+
+    /**
+     * Gets the token offset the comment ends on.
+     *
+     * @return int Token offset (or -1 if not available)
+     */
+    public function getEndTokenPos() : int {
+        return $this->endTokenPos;
+    }
+
+    /**
+     * Gets the line number the comment started on.
+     *
+     * @deprecated Use getStartLine() instead
+     *
      * @return int Line number
      */
     public function getLine() : int {
-        return $this->line;
+        return $this->startLine;
     }
 
     /**
      * Gets the file offset the comment started on.
      *
+     * @deprecated Use getStartFilePos() instead
+     *
      * @return int File offset
      */
     public function getFilePos() : int {
-        return $this->filePos;
+        return $this->startFilePos;
     }
 
     /**
      * Gets the token offset the comment started on.
      *
+     * @deprecated Use getStartTokenPos() instead
+     *
      * @return int Token offset
      */
     public function getTokenPos() : int {
-        return $this->tokenPos;
+        return $this->startTokenPos;
     }
 
     /**
@@ -159,9 +227,13 @@ public function jsonSerialize() : array {
         return [
             'nodeType' => $type,
             'text' => $this->text,
-            'line' => $this->line,
-            'filePos' => $this->filePos,
-            'tokenPos' => $this->tokenPos,
+            // TODO: Rename these to include "start".
+            'line' => $this->startLine,
+            'filePos' => $this->startFilePos,
+            'tokenPos' => $this->startTokenPos,
+            'endLine' => $this->endLine,
+            'endFilePos' => $this->endFilePos,
+            'endTokenPos' => $this->endTokenPos,
         ];
     }
 }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php b/vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php
index 7b019db812..3eeac04a41 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php
@@ -17,6 +17,8 @@
  */
 class PrintableNewAnonClassNode extends Expr
 {
+    /** @var Node\AttributeGroup[] PHP attribute groups */
+    public $attrGroups;
     /** @var Node\Arg[] Arguments */
     public $args;
     /** @var null|Node\Name Name of extended class */
@@ -27,9 +29,11 @@ class PrintableNewAnonClassNode extends Expr
     public $stmts;
 
     public function __construct(
-        array $args, Node\Name $extends = null, array $implements, array $stmts, array $attributes
+        array $attrGroups, array $args, Node\Name $extends = null, array $implements,
+        array $stmts, array $attributes
     ) {
         parent::__construct($attributes);
+        $this->attrGroups = $attrGroups;
         $this->args = $args;
         $this->extends = $extends;
         $this->implements = $implements;
@@ -42,7 +46,7 @@ public static function fromNewNode(Expr\New_ $newNode) {
         // We don't assert that $class->name is null here, to allow consumers to assign unique names
         // to anonymous classes for their own purposes. We simplify ignore the name here.
         return new self(
-            $newNode->args, $class->extends, $class->implements,
+            $class->attrGroups, $newNode->args, $class->extends, $class->implements,
             $class->stmts, $newNode->getAttributes()
         );
     }
@@ -52,6 +56,6 @@ public function getType() : string {
     }
 
     public function getSubNodeNames() : array {
-        return ['args', 'extends', 'implements', 'stmts'];
+        return ['attrGroups', 'args', 'extends', 'implements', 'stmts'];
     }
 }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php b/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php
index cf9e00abf3..39308ae629 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php
@@ -33,7 +33,7 @@ public function __construct(array $tokens) {
      * @return bool
      */
     public function haveParens(int $startPos, int $endPos) : bool {
-        return $this->haveTokenImmediativelyBefore($startPos, '(')
+        return $this->haveTokenImmediatelyBefore($startPos, '(')
             && $this->haveTokenImmediatelyAfter($endPos, ')');
     }
 
@@ -46,7 +46,7 @@ public function haveParens(int $startPos, int $endPos) : bool {
      * @return bool
      */
     public function haveBraces(int $startPos, int $endPos) : bool {
-        return $this->haveTokenImmediativelyBefore($startPos, '{')
+        return $this->haveTokenImmediatelyBefore($startPos, '{')
             && $this->haveTokenImmediatelyAfter($endPos, '}');
     }
 
@@ -60,7 +60,7 @@ public function haveBraces(int $startPos, int $endPos) : bool {
      *
      * @return bool Whether the expected token was found
      */
-    public function haveTokenImmediativelyBefore(int $pos, $expectedTokenType) : bool {
+    public function haveTokenImmediatelyBefore(int $pos, $expectedTokenType) : bool {
         $tokens = $this->tokens;
         $pos--;
         for (; $pos >= 0; $pos--) {
@@ -170,7 +170,7 @@ public function skipRightWhitespace(int $pos) {
         return $pos;
     }
 
-    public function findRight($pos, $findTokenType) {
+    public function findRight(int $pos, $findTokenType) {
         $tokens = $this->tokens;
         for ($count = \count($tokens); $pos < $count; $pos++) {
             $type = $tokens[$pos][0];
@@ -181,6 +181,29 @@ public function findRight($pos, $findTokenType) {
         return -1;
     }
 
+    /**
+     * Whether the given position range contains a certain token type.
+     *
+     * @param int $startPos Starting position (inclusive)
+     * @param int $endPos Ending position (exclusive)
+     * @param int|string $tokenType Token type to look for
+     * @return bool Whether the token occurs in the given range
+     */
+    public function haveTokenInRange(int $startPos, int $endPos, $tokenType) {
+        $tokens = $this->tokens;
+        for ($pos = $startPos; $pos < $endPos; $pos++) {
+            if ($tokens[$pos][0] === $tokenType) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public function haveBracesInRange(int $startPos, int $endPos) {
+        return $this->haveTokenInRange($startPos, $endPos, '{')
+            || $this->haveTokenInRange($startPos, $endPos, '}');
+    }
+
     /**
      * Get indentation before token position.
      *
diff --git a/vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php b/vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php
index 25d1c6abee..47d2003d4b 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php
@@ -73,7 +73,9 @@ private function decodeComment(array $value) : Comment {
         }
 
         return new $className(
-            $value['text'], $value['line'] ?? -1, $value['filePos'] ?? -1, $value['tokenPos'] ?? -1
+            $value['text'],
+            $value['line'] ?? -1, $value['filePos'] ?? -1, $value['tokenPos'] ?? -1,
+            $value['endLine'] ?? -1, $value['endFilePos'] ?? -1, $value['endTokenPos'] ?? -1
         );
     }
 
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer.php
index dc5e5332c2..b0c21ead26 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Lexer.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer.php
@@ -15,6 +15,7 @@ class Lexer
 
     protected $tokenMap;
     protected $dropTokens;
+    protected $identifierTokens;
 
     private $attributeStartLineUsed;
     private $attributeEndLineUsed;
@@ -34,13 +35,15 @@ class Lexer
      *                       first three. For more info see getNextToken() docs.
      */
     public function __construct(array $options = []) {
-        // map from internal tokens to PhpParser tokens
+        // Create Map from internal tokens to PhpParser tokens.
+        $this->defineCompatibilityTokens();
         $this->tokenMap = $this->createTokenMap();
+        $this->identifierTokens = $this->createIdentifierTokenMap();
 
         // map of tokens to drop while lexing (the map is only used for isset lookup,
         // that's why the value is simply set to 1; the value is never actually used.)
         $this->dropTokens = array_fill_keys(
-            [\T_WHITESPACE, \T_OPEN_TAG, \T_COMMENT, \T_DOC_COMMENT], 1
+            [\T_WHITESPACE, \T_OPEN_TAG, \T_COMMENT, \T_DOC_COMMENT, \T_BAD_CHARACTER], 1
         );
 
         $defaultAttributes = ['comments', 'startLine', 'endLine'];
@@ -84,7 +87,7 @@ public function startLexing(string $code, ErrorHandler $errorHandler = null) {
 
         error_clear_last();
         $this->tokens = @token_get_all($code);
-        $this->handleErrors($errorHandler);
+        $this->postprocessTokens($errorHandler);
 
         if (false !== $scream) {
             ini_set('xdebug.scream', $scream);
@@ -92,13 +95,9 @@ public function startLexing(string $code, ErrorHandler $errorHandler = null) {
     }
 
     private function handleInvalidCharacterRange($start, $end, $line, ErrorHandler $errorHandler) {
+        $tokens = [];
         for ($i = $start; $i < $end; $i++) {
             $chr = $this->code[$i];
-            if ($chr === 'b' || $chr === 'B') {
-                // HHVM does not treat b" tokens correctly, so ignore these
-                continue;
-            }
-
             if ($chr === "\0") {
                 // PHP cuts error message after null byte, so need special case
                 $errorMsg = 'Unexpected null byte';
@@ -108,6 +107,7 @@ private function handleInvalidCharacterRange($start, $end, $line, ErrorHandler $
                 );
             }
 
+            $tokens[] = [\T_BAD_CHARACTER, $chr, $line];
             $errorHandler->handleError(new Error($errorMsg, [
                 'startLine' => $line,
                 'endLine' => $line,
@@ -115,6 +115,7 @@ private function handleInvalidCharacterRange($start, $end, $line, ErrorHandler $
                 'endFilePos' => $i,
             ]));
         }
+        return $tokens;
     }
 
     /**
@@ -128,43 +129,99 @@ private function isUnterminatedComment($token) : bool {
             && substr($token[1], -2) !== '*/';
     }
 
-    /**
-     * Check whether an error *may* have occurred during tokenization.
-     *
-     * @return bool
-     */
-    private function errorMayHaveOccurred() : bool {
-        if (defined('HHVM_VERSION')) {
-            // In HHVM token_get_all() does not throw warnings, so we need to conservatively
-            // assume that an error occurred
-            return true;
-        }
-
-        return null !== error_get_last();
-    }
-
-    protected function handleErrors(ErrorHandler $errorHandler) {
-        if (!$this->errorMayHaveOccurred()) {
-            return;
-        }
-
+    protected function postprocessTokens(ErrorHandler $errorHandler) {
         // PHP's error handling for token_get_all() is rather bad, so if we want detailed
         // error information we need to compute it ourselves. Invalid character errors are
         // detected by finding "gaps" in the token array. Unterminated comments are detected
         // by checking if a trailing comment has a "*/" at the end.
+        //
+        // Additionally, we canonicalize to the PHP 8 comment format here, which does not include
+        // the trailing whitespace anymore.
+        //
+        // We also canonicalize to the PHP 8 T_NAME_* tokens.
 
         $filePos = 0;
         $line = 1;
-        foreach ($this->tokens as $token) {
+        $numTokens = \count($this->tokens);
+        for ($i = 0; $i < $numTokens; $i++) {
+            $token = $this->tokens[$i];
+
+            // Since PHP 7.4 invalid characters are represented by a T_BAD_CHARACTER token.
+            // In this case we only need to emit an error.
+            if ($token[0] === \T_BAD_CHARACTER) {
+                $this->handleInvalidCharacterRange($filePos, $filePos + 1, $line, $errorHandler);
+            }
+
+            if ($token[0] === \T_COMMENT && substr($token[1], 0, 2) !== '/*'
+                    && preg_match('/(\r\n|\n|\r)$/D', $token[1], $matches)) {
+                $trailingNewline = $matches[0];
+                $token[1] = substr($token[1], 0, -strlen($trailingNewline));
+                $this->tokens[$i] = $token;
+                if (isset($this->tokens[$i + 1]) && $this->tokens[$i + 1][0] === \T_WHITESPACE) {
+                    // Move trailing newline into following T_WHITESPACE token, if it already exists.
+                    $this->tokens[$i + 1][1] = $trailingNewline . $this->tokens[$i + 1][1];
+                    $this->tokens[$i + 1][2]--;
+                } else {
+                    // Otherwise, we need to create a new T_WHITESPACE token.
+                    array_splice($this->tokens, $i + 1, 0, [
+                        [\T_WHITESPACE, $trailingNewline, $line],
+                    ]);
+                    $numTokens++;
+                }
+            }
+
+            // Emulate PHP 8 T_NAME_* tokens, by combining sequences of T_NS_SEPARATOR and T_STRING
+            // into a single token.
+            if (\is_array($token)
+                    && ($token[0] === \T_NS_SEPARATOR || isset($this->identifierTokens[$token[0]]))) {
+                $lastWasSeparator = $token[0] === \T_NS_SEPARATOR;
+                $text = $token[1];
+                for ($j = $i + 1; isset($this->tokens[$j]); $j++) {
+                    if ($lastWasSeparator) {
+                        if (!isset($this->identifierTokens[$this->tokens[$j][0]])) {
+                            break;
+                        }
+                        $lastWasSeparator = false;
+                    } else {
+                        if ($this->tokens[$j][0] !== \T_NS_SEPARATOR) {
+                            break;
+                        }
+                        $lastWasSeparator = true;
+                    }
+                    $text .= $this->tokens[$j][1];
+                }
+                if ($lastWasSeparator) {
+                    // Trailing separator is not part of the name.
+                    $j--;
+                    $text = substr($text, 0, -1);
+                }
+                if ($j > $i + 1) {
+                    if ($token[0] === \T_NS_SEPARATOR) {
+                        $type = \T_NAME_FULLY_QUALIFIED;
+                    } else if ($token[0] === \T_NAMESPACE) {
+                        $type = \T_NAME_RELATIVE;
+                    } else {
+                        $type = \T_NAME_QUALIFIED;
+                    }
+                    $token = [$type, $text, $line];
+                    array_splice($this->tokens, $i, $j - $i, [$token]);
+                    $numTokens -= $j - $i - 1;
+                }
+            }
+
             $tokenValue = \is_string($token) ? $token : $token[1];
             $tokenLen = \strlen($tokenValue);
 
             if (substr($this->code, $filePos, $tokenLen) !== $tokenValue) {
                 // Something is missing, must be an invalid character
                 $nextFilePos = strpos($this->code, $tokenValue, $filePos);
-                $this->handleInvalidCharacterRange(
+                $badCharTokens = $this->handleInvalidCharacterRange(
                     $filePos, $nextFilePos, $line, $errorHandler);
                 $filePos = (int) $nextFilePos;
+
+                array_splice($this->tokens, $i, 0, $badCharTokens);
+                $numTokens += \count($badCharTokens);
+                $i += \count($badCharTokens);
             }
 
             $filePos += $tokenLen;
@@ -187,8 +244,9 @@ protected function handleErrors(ErrorHandler $errorHandler) {
                 $this->tokens[] = [$isDocComment ? \T_DOC_COMMENT : \T_COMMENT, $comment, $line];
             } else {
                 // Invalid characters at the end of the input
-                $this->handleInvalidCharacterRange(
+                $badCharTokens = $this->handleInvalidCharacterRange(
                     $filePos, \strlen($this->code), $line, $errorHandler);
+                $this->tokens = array_merge($this->tokens, $badCharTokens);
             }
             return;
         }
@@ -273,17 +331,23 @@ public function getNextToken(&$value = null, &$startAttributes = null, &$endAttr
                 $this->line += substr_count($value, "\n");
                 $this->filePos += \strlen($value);
             } else {
+                $origLine = $this->line;
+                $origFilePos = $this->filePos;
+                $this->line += substr_count($token[1], "\n");
+                $this->filePos += \strlen($token[1]);
+
                 if (\T_COMMENT === $token[0] || \T_DOC_COMMENT === $token[0]) {
                     if ($this->attributeCommentsUsed) {
                         $comment = \T_DOC_COMMENT === $token[0]
-                            ? new Comment\Doc($token[1], $this->line, $this->filePos, $this->pos)
-                            : new Comment($token[1], $this->line, $this->filePos, $this->pos);
+                            ? new Comment\Doc($token[1],
+                                $origLine, $origFilePos, $this->pos,
+                                $this->line, $this->filePos - 1, $this->pos)
+                            : new Comment($token[1],
+                                $origLine, $origFilePos, $this->pos,
+                                $this->line, $this->filePos - 1, $this->pos);
                         $startAttributes['comments'][] = $comment;
                     }
                 }
-
-                $this->line += substr_count($token[1], "\n");
-                $this->filePos += \strlen($token[1]);
                 continue;
             }
 
@@ -340,6 +404,61 @@ public function handleHaltCompiler() : string {
         return substr($textAfter, strlen($matches[0]));
     }
 
+    private function defineCompatibilityTokens() {
+        static $compatTokensDefined = false;
+        if ($compatTokensDefined) {
+            return;
+        }
+
+        $compatTokens = [
+            // PHP 7.4
+            'T_BAD_CHARACTER',
+            'T_FN',
+            'T_COALESCE_EQUAL',
+            // PHP 8.0
+            'T_NAME_QUALIFIED',
+            'T_NAME_FULLY_QUALIFIED',
+            'T_NAME_RELATIVE',
+            'T_MATCH',
+            'T_NULLSAFE_OBJECT_OPERATOR',
+            'T_ATTRIBUTE',
+        ];
+
+        // PHP-Parser might be used together with another library that also emulates some or all
+        // of these tokens. Perform a sanity-check that all already defined tokens have been
+        // assigned a unique ID.
+        $usedTokenIds = [];
+        foreach ($compatTokens as $token) {
+            if (\defined($token)) {
+                $tokenId = \constant($token);
+                $clashingToken = $usedTokenIds[$tokenId] ?? null;
+                if ($clashingToken !== null) {
+                    throw new \Error(sprintf(
+                        'Token %s has same ID as token %s, ' .
+                        'you may be using a library with broken token emulation',
+                        $token, $clashingToken
+                    ));
+                }
+                $usedTokenIds[$tokenId] = $token;
+            }
+        }
+
+        // Now define any tokens that have not yet been emulated. Try to assign IDs from -1
+        // downwards, but skip any IDs that may already be in use.
+        $newTokenId = -1;
+        foreach ($compatTokens as $token) {
+            if (!\defined($token)) {
+                while (isset($usedTokenIds[$newTokenId])) {
+                    $newTokenId--;
+                }
+                \define($token, $newTokenId);
+                $newTokenId--;
+            }
+        }
+
+        $compatTokensDefined = true;
+    }
+
     /**
      * Creates the token map.
      *
@@ -384,6 +503,32 @@ protected function createTokenMap() : array {
             $tokenMap[\T_COMPILER_HALT_OFFSET] = Tokens::T_STRING;
         }
 
+        // Assign tokens for which we define compatibility constants, as token_name() does not know them.
+        $tokenMap[\T_FN] = Tokens::T_FN;
+        $tokenMap[\T_COALESCE_EQUAL] = Tokens::T_COALESCE_EQUAL;
+        $tokenMap[\T_NAME_QUALIFIED] = Tokens::T_NAME_QUALIFIED;
+        $tokenMap[\T_NAME_FULLY_QUALIFIED] = Tokens::T_NAME_FULLY_QUALIFIED;
+        $tokenMap[\T_NAME_RELATIVE] = Tokens::T_NAME_RELATIVE;
+        $tokenMap[\T_MATCH] = Tokens::T_MATCH;
+        $tokenMap[\T_NULLSAFE_OBJECT_OPERATOR] = Tokens::T_NULLSAFE_OBJECT_OPERATOR;
+        $tokenMap[\T_ATTRIBUTE] = Tokens::T_ATTRIBUTE;
+
         return $tokenMap;
     }
+
+    private function createIdentifierTokenMap(): array {
+        // Based on semi_reserved production.
+        return array_fill_keys([
+            \T_STRING,
+            \T_STATIC, \T_ABSTRACT, \T_FINAL, \T_PRIVATE, \T_PROTECTED, \T_PUBLIC,
+            \T_INCLUDE, \T_INCLUDE_ONCE, \T_EVAL, \T_REQUIRE, \T_REQUIRE_ONCE, \T_LOGICAL_OR, \T_LOGICAL_XOR, \T_LOGICAL_AND,
+            \T_INSTANCEOF, \T_NEW, \T_CLONE, \T_EXIT, \T_IF, \T_ELSEIF, \T_ELSE, \T_ENDIF, \T_ECHO, \T_DO, \T_WHILE,
+            \T_ENDWHILE, \T_FOR, \T_ENDFOR, \T_FOREACH, \T_ENDFOREACH, \T_DECLARE, \T_ENDDECLARE, \T_AS, \T_TRY, \T_CATCH,
+            \T_FINALLY, \T_THROW, \T_USE, \T_INSTEADOF, \T_GLOBAL, \T_VAR, \T_UNSET, \T_ISSET, \T_EMPTY, \T_CONTINUE, \T_GOTO,
+            \T_FUNCTION, \T_CONST, \T_RETURN, \T_PRINT, \T_YIELD, \T_LIST, \T_SWITCH, \T_ENDSWITCH, \T_CASE, \T_DEFAULT,
+            \T_BREAK, \T_ARRAY, \T_CALLABLE, \T_EXTENDS, \T_IMPLEMENTS, \T_NAMESPACE, \T_TRAIT, \T_INTERFACE, \T_CLASS,
+            \T_CLASS_C, \T_TRAIT_C, \T_FUNC_C, \T_METHOD_C, \T_LINE, \T_FILE, \T_DIR, \T_NS_C, \T_HALT_COMPILER, \T_FN,
+            \T_MATCH,
+        ], true);
+    }
 }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php
index 5d10b9af64..cf1f8e5a95 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php
@@ -5,66 +5,85 @@
 use PhpParser\Error;
 use PhpParser\ErrorHandler;
 use PhpParser\Lexer;
+use PhpParser\Lexer\TokenEmulator\AttributeEmulator;
 use PhpParser\Lexer\TokenEmulator\CoaleseEqualTokenEmulator;
+use PhpParser\Lexer\TokenEmulator\FlexibleDocStringEmulator;
 use PhpParser\Lexer\TokenEmulator\FnTokenEmulator;
-use PhpParser\Lexer\TokenEmulator\TokenEmulatorInterface;
+use PhpParser\Lexer\TokenEmulator\MatchTokenEmulator;
+use PhpParser\Lexer\TokenEmulator\NullsafeTokenEmulator;
+use PhpParser\Lexer\TokenEmulator\NumericLiteralSeparatorEmulator;
+use PhpParser\Lexer\TokenEmulator\ReverseEmulator;
+use PhpParser\Lexer\TokenEmulator\TokenEmulator;
+use PhpParser\Parser\Tokens;
 
 class Emulative extends Lexer
 {
-    const PHP_7_3 = '7.3.0dev';
-    const PHP_7_4 = '7.4.0dev';
-
-    const FLEXIBLE_DOC_STRING_REGEX = <<<'REGEX'
-/<<<[ \t]*(['"]?)([a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*)\1\r?\n
-(?:.*\r?\n)*?
-(?<indentation>\h*)\2(?![a-zA-Z_\x80-\xff])(?<separator>(?:;?[\r\n])?)/x
-REGEX;
+    const PHP_7_3 = '7.3dev';
+    const PHP_7_4 = '7.4dev';
+    const PHP_8_0 = '8.0dev';
 
     /** @var mixed[] Patches used to reverse changes introduced in the code */
     private $patches = [];
 
-    /** @var TokenEmulatorInterface[] */
-    private $tokenEmulators = [];
+    /** @var TokenEmulator[] */
+    private $emulators = [];
+
+    /** @var string */
+    private $targetPhpVersion;
 
     /**
-     * @param mixed[] $options
+     * @param mixed[] $options Lexer options. In addition to the usual options,
+     *                         accepts a 'phpVersion' string that specifies the
+     *                         version to emulated. Defaults to newest supported.
      */
     public function __construct(array $options = [])
     {
-        parent::__construct($options);
+        $this->targetPhpVersion = $options['phpVersion'] ?? Emulative::PHP_8_0;
+        unset($options['phpVersion']);
 
-        // prepare token emulators
-        $this->tokenEmulators[] = new FnTokenEmulator();
-        $this->tokenEmulators[] = new CoaleseEqualTokenEmulator();
+        parent::__construct($options);
 
-        // add emulated tokens here
-        foreach ($this->tokenEmulators as $emulativeToken) {
-            $this->tokenMap[$emulativeToken->getTokenId()] = $emulativeToken->getParserTokenId();
+        $emulators = [
+            new FlexibleDocStringEmulator(),
+            new FnTokenEmulator(),
+            new MatchTokenEmulator(),
+            new CoaleseEqualTokenEmulator(),
+            new NumericLiteralSeparatorEmulator(),
+            new NullsafeTokenEmulator(),
+            new AttributeEmulator(),
+        ];
+
+        // Collect emulators that are relevant for the PHP version we're running
+        // and the PHP version we're targeting for emulation.
+        foreach ($emulators as $emulator) {
+            $emulatorPhpVersion = $emulator->getPhpVersion();
+            if ($this->isForwardEmulationNeeded($emulatorPhpVersion)) {
+                $this->emulators[] = $emulator;
+            } else if ($this->isReverseEmulationNeeded($emulatorPhpVersion)) {
+                $this->emulators[] = new ReverseEmulator($emulator);
+            }
         }
     }
 
     public function startLexing(string $code, ErrorHandler $errorHandler = null) {
-        $this->patches = [];
+        $emulators = array_filter($this->emulators, function($emulator) use($code) {
+            return $emulator->isEmulationNeeded($code);
+        });
 
-        if ($this->isEmulationNeeded($code) === false) {
+        if (empty($emulators)) {
             // Nothing to emulate, yay
             parent::startLexing($code, $errorHandler);
             return;
         }
 
-        $collector = new ErrorHandler\Collecting();
-
-        // 1. emulation of heredoc and nowdoc new syntax
-        $preparedCode = $this->processHeredocNowdoc($code);
-        parent::startLexing($preparedCode, $collector);
-
-        // add token emulation
-        foreach ($this->tokenEmulators as $emulativeToken) {
-            if ($emulativeToken->isEmulationNeeded($code)) {
-                $this->tokens = $emulativeToken->emulate($code, $this->tokens);
-            }
+        $this->patches = [];
+        foreach ($emulators as $emulator) {
+            $code = $emulator->preprocessCode($code, $this->patches);
         }
 
+        $collector = new ErrorHandler\Collecting();
+        parent::startLexing($code, $collector);
+        $this->sortPatches();
         $this->fixupTokens();
 
         $errors = $collector->getErrors();
@@ -74,72 +93,29 @@ public function startLexing(string $code, ErrorHandler $errorHandler = null) {
                 $errorHandler->handleError($error);
             }
         }
-    }
 
-    private function isHeredocNowdocEmulationNeeded(string $code): bool
-    {
-        // skip version where this works without emulation
-        if (version_compare(\PHP_VERSION, self::PHP_7_3, '>=')) {
-            return false;
+        foreach ($emulators as $emulator) {
+            $this->tokens = $emulator->emulate($code, $this->tokens);
         }
-
-        return strpos($code, '<<<') !== false;
     }
 
-    private function processHeredocNowdoc(string $code): string
-    {
-        if ($this->isHeredocNowdocEmulationNeeded($code) === false) {
-            return $code;
-        }
-
-        if (!preg_match_all(self::FLEXIBLE_DOC_STRING_REGEX, $code, $matches, PREG_SET_ORDER|PREG_OFFSET_CAPTURE)) {
-            // No heredoc/nowdoc found
-            return $code;
-        }
-
-        // Keep track of how much we need to adjust string offsets due to the modifications we
-        // already made
-        $posDelta = 0;
-        foreach ($matches as $match) {
-            $indentation = $match['indentation'][0];
-            $indentationStart = $match['indentation'][1];
-
-            $separator = $match['separator'][0];
-            $separatorStart = $match['separator'][1];
-
-            if ($indentation === '' && $separator !== '') {
-                // Ordinary heredoc/nowdoc
-                continue;
-            }
-
-            if ($indentation !== '') {
-                // Remove indentation
-                $indentationLen = strlen($indentation);
-                $code = substr_replace($code, '', $indentationStart + $posDelta, $indentationLen);
-                $this->patches[] = [$indentationStart + $posDelta, 'add', $indentation];
-                $posDelta -= $indentationLen;
-            }
-
-            if ($separator === '') {
-                // Insert newline as separator
-                $code = substr_replace($code, "\n", $separatorStart + $posDelta, 0);
-                $this->patches[] = [$separatorStart + $posDelta, 'remove', "\n"];
-                $posDelta += 1;
-            }
-        }
+    private function isForwardEmulationNeeded(string $emulatorPhpVersion): bool {
+        return version_compare(\PHP_VERSION, $emulatorPhpVersion, '<')
+            && version_compare($this->targetPhpVersion, $emulatorPhpVersion, '>=');
+    }
 
-        return $code;
+    private function isReverseEmulationNeeded(string $emulatorPhpVersion): bool {
+        return version_compare(\PHP_VERSION, $emulatorPhpVersion, '>=')
+            && version_compare($this->targetPhpVersion, $emulatorPhpVersion, '<');
     }
 
-    private function isEmulationNeeded(string $code): bool
+    private function sortPatches()
     {
-        foreach ($this->tokenEmulators as $emulativeToken) {
-            if ($emulativeToken->isEmulationNeeded($code)) {
-                return true;
-            }
-        }
-
-        return $this->isHeredocNowdocEmulationNeeded($code);
+        // Patches may be contributed by different emulators.
+        // Make sure they are sorted by increasing patch position.
+        usort($this->patches, function($p1, $p2) {
+            return $p1[0] <=> $p2[0];
+        });
     }
 
     private function fixupTokens()
@@ -158,7 +134,20 @@ private function fixupTokens()
         for ($i = 0, $c = \count($this->tokens); $i < $c; $i++) {
             $token = $this->tokens[$i];
             if (\is_string($token)) {
-                // We assume that patches don't apply to string tokens
+                if ($patchPos === $pos) {
+                    // Only support replacement for string tokens.
+                    assert($patchType === 'replace');
+                    $this->tokens[$i] = $patchText;
+
+                    // Fetch the next patch
+                    $patchIdx++;
+                    if ($patchIdx >= \count($this->patches)) {
+                        // No more patches, we're done
+                        return;
+                    }
+                    list($patchPos, $patchType, $patchText) = $this->patches[$patchIdx];
+                }
+
                 $pos += \strlen($token);
                 continue;
             }
@@ -186,6 +175,11 @@ private function fixupTokens()
                         $token[1], $patchText, $patchPos - $pos + $posDelta, 0
                     );
                     $posDelta += $patchTextLen;
+                } else if ($patchType === 'replace') {
+                    // Replace inside the token string
+                    $this->tokens[$i][1] = substr_replace(
+                        $token[1], $patchText, $patchPos - $pos + $posDelta, $patchTextLen
+                    );
                 } else {
                     assert(false);
                 }
@@ -232,7 +226,7 @@ private function fixupErrors(array $errors) {
                 if ($patchType === 'add') {
                     $posDelta += strlen($patchText);
                     $lineDelta += substr_count($patchText, "\n");
-                } else {
+                } else if ($patchType === 'remove') {
                     $posDelta -= strlen($patchText);
                     $lineDelta -= substr_count($patchText, "\n");
                 }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php
new file mode 100644
index 0000000000..6776a51975
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php
@@ -0,0 +1,56 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Lexer\TokenEmulator;
+
+use PhpParser\Lexer\Emulative;
+
+final class AttributeEmulator extends TokenEmulator
+{
+    public function getPhpVersion(): string
+    {
+        return Emulative::PHP_8_0;
+    }
+
+    public function isEmulationNeeded(string $code) : bool
+    {
+        return strpos($code, '#[') !== false;
+    }
+
+    public function emulate(string $code, array $tokens): array
+    {
+        // We need to manually iterate and manage a count because we'll change
+        // the tokens array on the way.
+        $line = 1;
+        for ($i = 0, $c = count($tokens); $i < $c; ++$i) {
+            if ($tokens[$i] === '#' && isset($tokens[$i + 1]) && $tokens[$i + 1] === '[') {
+                array_splice($tokens, $i, 2, [
+                    [\T_ATTRIBUTE, '#[', $line]
+                ]);
+                $c--;
+                continue;
+            }
+            if (\is_array($tokens[$i])) {
+                $line += substr_count($tokens[$i][1], "\n");
+            }
+        }
+
+        return $tokens;
+    }
+
+    public function reverseEmulate(string $code, array $tokens): array
+    {
+        // TODO
+        return $tokens;
+    }
+
+    public function preprocessCode(string $code, array &$patches): string {
+        $pos = 0;
+        while (false !== $pos = strpos($code, '#[', $pos)) {
+            // Replace #[ with %[
+            $code[$pos] = '%';
+            $patches[] = [$pos, 'replace', '#'];
+            $pos += 2;
+        }
+        return $code;
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php
index ca6cf13400..d91da92143 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php
@@ -3,29 +3,16 @@
 namespace PhpParser\Lexer\TokenEmulator;
 
 use PhpParser\Lexer\Emulative;
-use PhpParser\Parser\Tokens;
 
-final class CoaleseEqualTokenEmulator implements TokenEmulatorInterface
+final class CoaleseEqualTokenEmulator extends TokenEmulator
 {
-    const T_COALESCE_EQUAL = 1007;
-
-    public function getTokenId(): int
+    public function getPhpVersion(): string
     {
-        return self::T_COALESCE_EQUAL;
+        return Emulative::PHP_7_4;
     }
 
-    public function getParserTokenId(): int
+    public function isEmulationNeeded(string $code): bool
     {
-        return Tokens::T_COALESCE_EQUAL;
-    }
-
-    public function isEmulationNeeded(string $code) : bool
-    {
-        // skip version where this is supported
-        if (version_compare(\PHP_VERSION, Emulative::PHP_7_4, '>=')) {
-            return false;
-        }
-
         return strpos($code, '??=') !== false;
     }
 
@@ -38,7 +25,7 @@ public function emulate(string $code, array $tokens): array
             if (isset($tokens[$i + 1])) {
                 if ($tokens[$i][0] === T_COALESCE && $tokens[$i + 1] === '=') {
                     array_splice($tokens, $i, 2, [
-                        [self::T_COALESCE_EQUAL, '??=', $line]
+                        [\T_COALESCE_EQUAL, '??=', $line]
                     ]);
                     $c--;
                     continue;
@@ -51,4 +38,10 @@ public function emulate(string $code, array $tokens): array
 
         return $tokens;
     }
+
+    public function reverseEmulate(string $code, array $tokens): array
+    {
+        // ??= was not valid code previously, don't bother.
+        return $tokens;
+    }
 }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.php
new file mode 100644
index 0000000000..c15d6271fc
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.php
@@ -0,0 +1,76 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Lexer\TokenEmulator;
+
+use PhpParser\Lexer\Emulative;
+
+final class FlexibleDocStringEmulator extends TokenEmulator
+{
+    const FLEXIBLE_DOC_STRING_REGEX = <<<'REGEX'
+/<<<[ \t]*(['"]?)([a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*)\1\r?\n
+(?:.*\r?\n)*?
+(?<indentation>\h*)\2(?![a-zA-Z0-9_\x80-\xff])(?<separator>(?:;?[\r\n])?)/x
+REGEX;
+
+    public function getPhpVersion(): string
+    {
+        return Emulative::PHP_7_3;
+    }
+
+    public function isEmulationNeeded(string $code) : bool
+    {
+        return strpos($code, '<<<') !== false;
+    }
+
+    public function emulate(string $code, array $tokens): array
+    {
+        // Handled by preprocessing + fixup.
+        return $tokens;
+    }
+
+    public function reverseEmulate(string $code, array $tokens): array
+    {
+        // Not supported.
+        return $tokens;
+    }
+
+    public function preprocessCode(string $code, array &$patches): string {
+        if (!preg_match_all(self::FLEXIBLE_DOC_STRING_REGEX, $code, $matches, PREG_SET_ORDER|PREG_OFFSET_CAPTURE)) {
+            // No heredoc/nowdoc found
+            return $code;
+        }
+
+        // Keep track of how much we need to adjust string offsets due to the modifications we
+        // already made
+        $posDelta = 0;
+        foreach ($matches as $match) {
+            $indentation = $match['indentation'][0];
+            $indentationStart = $match['indentation'][1];
+
+            $separator = $match['separator'][0];
+            $separatorStart = $match['separator'][1];
+
+            if ($indentation === '' && $separator !== '') {
+                // Ordinary heredoc/nowdoc
+                continue;
+            }
+
+            if ($indentation !== '') {
+                // Remove indentation
+                $indentationLen = strlen($indentation);
+                $code = substr_replace($code, '', $indentationStart + $posDelta, $indentationLen);
+                $patches[] = [$indentationStart + $posDelta, 'add', $indentation];
+                $posDelta -= $indentationLen;
+            }
+
+            if ($separator === '') {
+                // Insert newline as separator
+                $code = substr_replace($code, "\n", $separatorStart + $posDelta, 0);
+                $patches[] = [$separatorStart + $posDelta, 'remove', "\n"];
+                $posDelta += 1;
+            }
+        }
+
+        return $code;
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php
index 2059693ae1..eb7e49634a 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php
@@ -3,64 +3,21 @@
 namespace PhpParser\Lexer\TokenEmulator;
 
 use PhpParser\Lexer\Emulative;
-use PhpParser\Parser\Tokens;
 
-final class FnTokenEmulator implements TokenEmulatorInterface
+final class FnTokenEmulator extends KeywordEmulator
 {
-    const T_FN = 1008;
-
-    public function getTokenId(): int
-    {
-        return self::T_FN;
-    }
-
-    public function getParserTokenId(): int
-    {
-        return Tokens::T_FN;
-    }
-
-    public function isEmulationNeeded(string $code) : bool
+    public function getPhpVersion(): string
     {
-        // skip version where this is supported
-        if (version_compare(\PHP_VERSION, Emulative::PHP_7_4, '>=')) {
-            return false;
-        }
-
-        return strpos($code, 'fn') !== false;
+        return Emulative::PHP_7_4;
     }
 
-    public function emulate(string $code, array $tokens): array
+    public function getKeywordString(): string
     {
-        // We need to manually iterate and manage a count because we'll change
-        // the tokens array on the way
-        foreach ($tokens as $i => $token) {
-            if ($token[0] === T_STRING && $token[1] === 'fn') {
-                $previousNonSpaceToken = $this->getPreviousNonSpaceToken($tokens, $i);
-                if ($previousNonSpaceToken !== null && $previousNonSpaceToken[0] === T_OBJECT_OPERATOR) {
-                    continue;
-                }
-
-                $tokens[$i][0] = self::T_FN;
-            }
-        }
-
-        return $tokens;
+        return 'fn';
     }
 
-    /**
-     * @param mixed[] $tokens
-     * @return mixed[]|null
-     */
-    private function getPreviousNonSpaceToken(array $tokens, int $start)
+    public function getKeywordToken(): int
     {
-        for ($i = $start - 1; $i >= 0; --$i) {
-            if ($tokens[$i][0] === T_WHITESPACE) {
-                continue;
-            }
-
-            return $tokens[$i];
-        }
-
-        return null;
+        return \T_FN;
     }
-}
+}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php
new file mode 100644
index 0000000000..e7c0512bd7
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php
@@ -0,0 +1,60 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Lexer\TokenEmulator;
+
+abstract class KeywordEmulator extends TokenEmulator
+{
+    abstract function getKeywordString(): string;
+    abstract function getKeywordToken(): int;
+
+    public function isEmulationNeeded(string $code): bool
+    {
+        return strpos(strtolower($code), $this->getKeywordString()) !== false;
+    }
+
+    public function emulate(string $code, array $tokens): array
+    {
+        $keywordString = $this->getKeywordString();
+        foreach ($tokens as $i => $token) {
+            if ($token[0] === T_STRING && strtolower($token[1]) === $keywordString) {
+                $previousNonSpaceToken = $this->getPreviousNonSpaceToken($tokens, $i);
+                if ($previousNonSpaceToken !== null && $previousNonSpaceToken[0] === \T_OBJECT_OPERATOR) {
+                    continue;
+                }
+
+                $tokens[$i][0] = $this->getKeywordToken();
+            }
+        }
+
+        return $tokens;
+    }
+
+    /**
+     * @param mixed[] $tokens
+     * @return mixed[]|null
+     */
+    private function getPreviousNonSpaceToken(array $tokens, int $start)
+    {
+        for ($i = $start - 1; $i >= 0; --$i) {
+            if ($tokens[$i][0] === T_WHITESPACE) {
+                continue;
+            }
+
+            return $tokens[$i];
+        }
+
+        return null;
+    }
+
+    public function reverseEmulate(string $code, array $tokens): array
+    {
+        $keywordToken = $this->getKeywordToken();
+        foreach ($tokens as $i => $token) {
+            if ($token[0] === $keywordToken) {
+                $tokens[$i][0] = \T_STRING;
+            }
+        }
+
+        return $tokens;
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php
new file mode 100644
index 0000000000..902a46dfcb
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php
@@ -0,0 +1,23 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Lexer\TokenEmulator;
+
+use PhpParser\Lexer\Emulative;
+
+final class MatchTokenEmulator extends KeywordEmulator
+{
+    public function getPhpVersion(): string
+    {
+        return Emulative::PHP_8_0;
+    }
+
+    public function getKeywordString(): string
+    {
+        return 'match';
+    }
+
+    public function getKeywordToken(): int
+    {
+        return \T_MATCH;
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php
new file mode 100644
index 0000000000..1a29c676e4
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php
@@ -0,0 +1,67 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Lexer\TokenEmulator;
+
+use PhpParser\Lexer\Emulative;
+
+final class NullsafeTokenEmulator extends TokenEmulator
+{
+    public function getPhpVersion(): string
+    {
+        return Emulative::PHP_8_0;
+    }
+
+    public function isEmulationNeeded(string $code): bool
+    {
+        return strpos($code, '?->') !== false;
+    }
+
+    public function emulate(string $code, array $tokens): array
+    {
+        // We need to manually iterate and manage a count because we'll change
+        // the tokens array on the way
+        $line = 1;
+        for ($i = 0, $c = count($tokens); $i < $c; ++$i) {
+            if ($tokens[$i] === '?' && isset($tokens[$i + 1]) && $tokens[$i + 1][0] === \T_OBJECT_OPERATOR) {
+                array_splice($tokens, $i, 2, [
+                    [\T_NULLSAFE_OBJECT_OPERATOR, '?->', $line]
+                ]);
+                $c--;
+                continue;
+            }
+
+            // Handle ?-> inside encapsed string.
+            if ($tokens[$i][0] === \T_ENCAPSED_AND_WHITESPACE && isset($tokens[$i - 1])
+                && $tokens[$i - 1][0] === \T_VARIABLE
+                && preg_match('/^\?->([a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*)/', $tokens[$i][1], $matches)
+            ) {
+                $replacement = [
+                    [\T_NULLSAFE_OBJECT_OPERATOR, '?->', $line],
+                    [\T_STRING, $matches[1], $line],
+                ];
+                if (\strlen($matches[0]) !== \strlen($tokens[$i][1])) {
+                    $replacement[] = [
+                        \T_ENCAPSED_AND_WHITESPACE,
+                        \substr($tokens[$i][1], \strlen($matches[0])),
+                        $line
+                    ];
+                }
+                array_splice($tokens, $i, 1, $replacement);
+                $c += \count($replacement) - 1;
+                continue;
+            }
+
+            if (\is_array($tokens[$i])) {
+                $line += substr_count($tokens[$i][1], "\n");
+            }
+        }
+
+        return $tokens;
+    }
+
+    public function reverseEmulate(string $code, array $tokens): array
+    {
+        // ?-> was not valid code previously, don't bother.
+        return $tokens;
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php
new file mode 100644
index 0000000000..cdf793e46e
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php
@@ -0,0 +1,105 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Lexer\TokenEmulator;
+
+use PhpParser\Lexer\Emulative;
+
+final class NumericLiteralSeparatorEmulator extends TokenEmulator
+{
+    const BIN = '(?:0b[01]+(?:_[01]+)*)';
+    const HEX = '(?:0x[0-9a-f]+(?:_[0-9a-f]+)*)';
+    const DEC = '(?:[0-9]+(?:_[0-9]+)*)';
+    const SIMPLE_FLOAT = '(?:' . self::DEC . '\.' . self::DEC . '?|\.' . self::DEC . ')';
+    const EXP = '(?:e[+-]?' . self::DEC . ')';
+    const FLOAT = '(?:' . self::SIMPLE_FLOAT . self::EXP . '?|' . self::DEC . self::EXP . ')';
+    const NUMBER = '~' . self::FLOAT . '|' . self::BIN . '|' . self::HEX . '|' . self::DEC . '~iA';
+
+    public function getPhpVersion(): string
+    {
+        return Emulative::PHP_7_4;
+    }
+
+    public function isEmulationNeeded(string $code) : bool
+    {
+        return preg_match('~[0-9]_[0-9]~', $code)
+            || preg_match('~0x[0-9a-f]+_[0-9a-f]~i', $code);
+    }
+
+    public function emulate(string $code, array $tokens): array
+    {
+        // We need to manually iterate and manage a count because we'll change
+        // the tokens array on the way
+        $codeOffset = 0;
+        for ($i = 0, $c = count($tokens); $i < $c; ++$i) {
+            $token = $tokens[$i];
+            $tokenLen = \strlen(\is_array($token) ? $token[1] : $token);
+
+            if ($token[0] !== T_LNUMBER && $token[0] !== T_DNUMBER) {
+                $codeOffset += $tokenLen;
+                continue;
+            }
+
+            $res = preg_match(self::NUMBER, $code, $matches, 0, $codeOffset);
+            assert($res, "No number at number token position");
+
+            $match = $matches[0];
+            $matchLen = \strlen($match);
+            if ($matchLen === $tokenLen) {
+                // Original token already holds the full number.
+                $codeOffset += $tokenLen;
+                continue;
+            }
+
+            $tokenKind = $this->resolveIntegerOrFloatToken($match);
+            $newTokens = [[$tokenKind, $match, $token[2]]];
+
+            $numTokens = 1;
+            $len = $tokenLen;
+            while ($matchLen > $len) {
+                $nextToken = $tokens[$i + $numTokens];
+                $nextTokenText = \is_array($nextToken) ? $nextToken[1] : $nextToken;
+                $nextTokenLen = \strlen($nextTokenText);
+
+                $numTokens++;
+                if ($matchLen < $len + $nextTokenLen) {
+                    // Split trailing characters into a partial token.
+                    assert(is_array($nextToken), "Partial token should be an array token");
+                    $partialText = substr($nextTokenText, $matchLen - $len);
+                    $newTokens[] = [$nextToken[0], $partialText, $nextToken[2]];
+                    break;
+                }
+
+                $len += $nextTokenLen;
+            }
+
+            array_splice($tokens, $i, $numTokens, $newTokens);
+            $c -= $numTokens - \count($newTokens);
+            $codeOffset += $matchLen;
+        }
+
+        return $tokens;
+    }
+
+    private function resolveIntegerOrFloatToken(string $str): int
+    {
+        $str = str_replace('_', '', $str);
+
+        if (stripos($str, '0b') === 0) {
+            $num = bindec($str);
+        } elseif (stripos($str, '0x') === 0) {
+            $num = hexdec($str);
+        } elseif (stripos($str, '0') === 0 && ctype_digit($str)) {
+            $num = octdec($str);
+        } else {
+            $num = +$str;
+        }
+
+        return is_float($num) ? T_DNUMBER : T_LNUMBER;
+    }
+
+    public function reverseEmulate(string $code, array $tokens): array
+    {
+        // Numeric separators were not legal code previously, don't bother.
+        return $tokens;
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php
new file mode 100644
index 0000000000..90093f66b2
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php
@@ -0,0 +1,36 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Lexer\TokenEmulator;
+
+/**
+ * Reverses emulation direction of the inner emulator.
+ */
+final class ReverseEmulator extends TokenEmulator
+{
+    /** @var TokenEmulator Inner emulator */
+    private $emulator;
+
+    public function __construct(TokenEmulator $emulator) {
+        $this->emulator = $emulator;
+    }
+
+    public function getPhpVersion(): string {
+        return $this->emulator->getPhpVersion();
+    }
+
+    public function isEmulationNeeded(string $code): bool {
+        return $this->emulator->isEmulationNeeded($code);
+    }
+
+    public function emulate(string $code, array $tokens): array {
+        return $this->emulator->reverseEmulate($code, $tokens);
+    }
+
+    public function reverseEmulate(string $code, array $tokens): array {
+        return $this->emulator->emulate($code, $tokens);
+    }
+
+    public function preprocessCode(string $code, array &$patches): string {
+        return $code;
+    }
+}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php
new file mode 100644
index 0000000000..a020bc0ff4
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php
@@ -0,0 +1,25 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Lexer\TokenEmulator;
+
+/** @internal */
+abstract class TokenEmulator
+{
+    abstract public function getPhpVersion(): string;
+
+    abstract public function isEmulationNeeded(string $code): bool;
+
+    /**
+     * @return array Modified Tokens
+     */
+    abstract public function emulate(string $code, array $tokens): array;
+
+    /**
+     * @return array Modified Tokens
+     */
+    abstract public function reverseEmulate(string $code, array $tokens): array;
+
+    public function preprocessCode(string $code, array &$patches): string {
+        return $code;
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulatorInterface.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulatorInterface.php
deleted file mode 100644
index 6ef5b9d068..0000000000
--- a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulatorInterface.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Lexer\TokenEmulator;
-
-interface TokenEmulatorInterface
-{
-    public function getTokenId(): int;
-
-    public function getParserTokenId(): int;
-
-    public function isEmulationNeeded(string $code): bool;
-
-    /**
-     * @return array Modified Tokens
-     */
-    public function emulate(string $code, array $tokens): array;
-}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node.php b/vendor/nikic/php-parser/lib/PhpParser/Node.php
index 7f04c3432c..befb256504 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node.php
@@ -95,8 +95,6 @@ public function getComments() : array;
     /**
      * Gets the doc comment of the node.
      *
-     * The doc comment has to be the last comment associated with the node.
-     *
      * @return null|Comment\Doc Doc comment object or null
      */
     public function getDocComment();
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php
index a585ddc3be..b25b0904a2 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php
@@ -6,6 +6,8 @@
 
 class Arg extends NodeAbstract
 {
+    /** @var Identifier|null Parameter name (for named parameters) */
+    public $name;
     /** @var Expr Value to pass */
     public $value;
     /** @var bool Whether to pass by ref */
@@ -20,16 +22,21 @@ class Arg extends NodeAbstract
      * @param bool  $byRef      Whether to pass by ref
      * @param bool  $unpack     Whether to unpack the argument
      * @param array $attributes Additional attributes
+     * @param Identifier|null $name Parameter name (for named parameters)
      */
-    public function __construct(Expr $value, bool $byRef = false, bool $unpack = false, array $attributes = []) {
+    public function __construct(
+        Expr $value, bool $byRef = false, bool $unpack = false, array $attributes = [],
+        Identifier $name = null
+    ) {
         $this->attributes = $attributes;
+        $this->name = $name;
         $this->value = $value;
         $this->byRef = $byRef;
         $this->unpack = $unpack;
     }
 
     public function getSubNodeNames() : array {
-        return ['value', 'byRef', 'unpack'];
+        return ['name', 'value', 'byRef', 'unpack'];
     }
     
     public function getType() : string {
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Attribute.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Attribute.php
new file mode 100644
index 0000000000..c96f66e514
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Attribute.php
@@ -0,0 +1,34 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Node;
+
+use PhpParser\Node;
+use PhpParser\NodeAbstract;
+
+class Attribute extends NodeAbstract
+{
+    /** @var Name Attribute name */
+    public $name;
+
+    /** @var Arg[] Attribute arguments */
+    public $args;
+
+    /**
+     * @param Node\Name $name       Attribute name
+     * @param Arg[]     $args       Attribute arguments
+     * @param array     $attributes Additional node attributes
+     */
+    public function __construct(Name $name, array $args = [], array $attributes = []) {
+        $this->attributes = $attributes;
+        $this->name = $name;
+        $this->args = $args;
+    }
+
+    public function getSubNodeNames() : array {
+        return ['name', 'args'];
+    }
+
+    public function getType() : string {
+        return 'Attribute';
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php b/vendor/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php
new file mode 100644
index 0000000000..613bfc4134
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php
@@ -0,0 +1,29 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Node;
+
+use PhpParser\Node;
+use PhpParser\NodeAbstract;
+
+class AttributeGroup extends NodeAbstract
+{
+    /** @var Attribute[] Attributes */
+    public $attrs;
+
+    /**
+     * @param Attribute[] $attrs PHP attributes
+     * @param array $attributes Additional node attributes
+     */
+    public function __construct(array $attrs, array $attributes = []) {
+        $this->attributes = $attributes;
+        $this->attrs = $attrs;
+    }
+
+    public function getSubNodeNames() : array {
+        return ['attrs'];
+    }
+
+    public function getType() : string {
+        return 'AttributeGroup';
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Const_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Const_.php
index 4094a653dc..789a426552 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Const_.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Const_.php
@@ -5,7 +5,7 @@
 use PhpParser\NodeAbstract;
 
 /**
- * @property Name $namespacedName Namespaced name (for class constants, if using NameResolver)
+ * @property Name $namespacedName Namespaced name (for global constants, if using NameResolver)
  */
 class Const_ extends NodeAbstract
 {
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php
index fbe207ee30..e6eaa2834d 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php
@@ -10,13 +10,13 @@ class Array_ extends Expr
     const KIND_LONG = 1;  // array() syntax
     const KIND_SHORT = 2; // [] syntax
 
-    /** @var ArrayItem[] Items */
+    /** @var (ArrayItem|null)[] Items */
     public $items;
 
     /**
      * Constructs an array node.
      *
-     * @param ArrayItem[] $items      Items of the array
+     * @param (ArrayItem|null)[] $items      Items of the array
      * @param array       $attributes Additional attributes
      */
     public function __construct(array $items = [], array $attributes = []) {
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php
index b4b816f622..d293f0ae41 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php
@@ -17,11 +17,13 @@ class ArrowFunction extends Expr implements FunctionLike
     /** @var Node\Param[] */
     public $params = [];
 
-    /** @var null|Node\Identifier|Node\Name|Node\NullableType */
+    /** @var null|Node\Identifier|Node\Name|Node\NullableType|Node\UnionType */
     public $returnType;
 
     /** @var Expr */
     public $expr;
+    /** @var Node\AttributeGroup[] */
+    public $attrGroups;
 
     /**
      * @param array $subNodes   Array of the following optional subnodes:
@@ -30,6 +32,7 @@ class ArrowFunction extends Expr implements FunctionLike
      *                          'params'     => array() : Parameters
      *                          'returnType' => null    : Return type
      *                          'expr'       => Expr    : Expression body
+     *                          'attrGroups' => array() : PHP attribute groups
      * @param array $attributes Additional attributes
      */
     public function __construct(array $subNodes = [], array $attributes = []) {
@@ -40,10 +43,11 @@ public function __construct(array $subNodes = [], array $attributes = []) {
         $returnType = $subNodes['returnType'] ?? null;
         $this->returnType = \is_string($returnType) ? new Node\Identifier($returnType) : $returnType;
         $this->expr = $subNodes['expr'] ?? null;
+        $this->attrGroups = $subNodes['attrGroups'] ?? [];
     }
 
     public function getSubNodeNames() : array {
-        return ['static', 'byRef', 'params', 'returnType', 'expr'];
+        return ['attrGroups', 'static', 'byRef', 'params', 'returnType', 'expr'];
     }
 
     public function returnsByRef() : bool {
@@ -58,6 +62,10 @@ public function getReturnType() {
         return $this->returnType;
     }
 
+    public function getAttrGroups() : array {
+        return $this->attrGroups;
+    }
+
     /**
      * @return Node\Stmt\Return_[]
      */
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php
index dfda88a7a9..56e621f252 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php
@@ -16,10 +16,12 @@ class Closure extends Expr implements FunctionLike
     public $params;
     /** @var ClosureUse[] use()s */
     public $uses;
-    /** @var null|Node\Identifier|Node\Name|Node\NullableType Return type */
+    /** @var null|Node\Identifier|Node\Name|Node\NullableType|Node\UnionType Return type */
     public $returnType;
     /** @var Node\Stmt[] Statements */
     public $stmts;
+    /** @var Node\AttributeGroup[] PHP attribute groups */
+    public $attrGroups;
 
     /**
      * Constructs a lambda function node.
@@ -31,6 +33,7 @@ class Closure extends Expr implements FunctionLike
      *                          'uses'       => array(): use()s
      *                          'returnType' => null   : Return type
      *                          'stmts'      => array(): Statements
+     *                          'attrGroups' => array(): PHP attributes groups
      * @param array $attributes Additional attributes
      */
     public function __construct(array $subNodes = [], array $attributes = []) {
@@ -42,10 +45,11 @@ public function __construct(array $subNodes = [], array $attributes = []) {
         $returnType = $subNodes['returnType'] ?? null;
         $this->returnType = \is_string($returnType) ? new Node\Identifier($returnType) : $returnType;
         $this->stmts = $subNodes['stmts'] ?? [];
+        $this->attrGroups = $subNodes['attrGroups'] ?? [];
     }
 
     public function getSubNodeNames() : array {
-        return ['static', 'byRef', 'params', 'uses', 'returnType', 'stmts'];
+        return ['attrGroups', 'static', 'byRef', 'params', 'uses', 'returnType', 'stmts'];
     }
 
     public function returnsByRef() : bool {
@@ -64,7 +68,11 @@ public function getReturnType() {
     public function getStmts() : array {
         return $this->stmts;
     }
-    
+
+    public function getAttrGroups() : array {
+        return $this->attrGroups;
+    }
+
     public function getType() : string {
         return 'Expr_Closure';
     }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php
new file mode 100644
index 0000000000..2455a30264
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php
@@ -0,0 +1,31 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Node\Expr;
+
+use PhpParser\Node;
+use PhpParser\Node\MatchArm;
+
+class Match_ extends Node\Expr
+{
+    /** @var Node\Expr */
+    public $cond;
+    /** @var MatchArm[] */
+    public $arms;
+
+    /**
+     * @param MatchArm[] $arms
+     */
+    public function __construct(Node\Expr $cond, array $arms = [], array $attributes = []) {
+        $this->attributes = $attributes;
+        $this->cond = $cond;
+        $this->arms = $arms;
+    }
+
+    public function getSubNodeNames() : array {
+        return ['cond', 'arms'];
+    }
+
+    public function getType() : string {
+        return 'Expr_Match';
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php
new file mode 100644
index 0000000000..361e446227
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php
@@ -0,0 +1,40 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Node\Expr;
+
+use PhpParser\Node\Arg;
+use PhpParser\Node\Expr;
+use PhpParser\Node\Identifier;
+
+class NullsafeMethodCall extends Expr
+{
+    /** @var Expr Variable holding object */
+    public $var;
+    /** @var Identifier|Expr Method name */
+    public $name;
+    /** @var Arg[] Arguments */
+    public $args;
+
+    /**
+     * Constructs a nullsafe method call node.
+     *
+     * @param Expr                   $var        Variable holding object
+     * @param string|Identifier|Expr $name       Method name
+     * @param Arg[]                  $args       Arguments
+     * @param array                  $attributes Additional attributes
+     */
+    public function __construct(Expr $var, $name, array $args = [], array $attributes = []) {
+        $this->attributes = $attributes;
+        $this->var = $var;
+        $this->name = \is_string($name) ? new Identifier($name) : $name;
+        $this->args = $args;
+    }
+
+    public function getSubNodeNames() : array {
+        return ['var', 'name', 'args'];
+    }
+    
+    public function getType() : string {
+        return 'Expr_NullsafeMethodCall';
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php
new file mode 100644
index 0000000000..9317eb3b91
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php
@@ -0,0 +1,35 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Node\Expr;
+
+use PhpParser\Node\Expr;
+use PhpParser\Node\Identifier;
+
+class NullsafePropertyFetch extends Expr
+{
+    /** @var Expr Variable holding object */
+    public $var;
+    /** @var Identifier|Expr Property name */
+    public $name;
+
+    /**
+     * Constructs a nullsafe property fetch node.
+     *
+     * @param Expr                   $var        Variable holding object
+     * @param string|Identifier|Expr $name       Property name
+     * @param array                  $attributes Additional attributes
+     */
+    public function __construct(Expr $var, $name, array $attributes = []) {
+        $this->attributes = $attributes;
+        $this->var = $var;
+        $this->name = \is_string($name) ? new Identifier($name) : $name;
+    }
+
+    public function getSubNodeNames() : array {
+        return ['var', 'name'];
+    }
+    
+    public function getType() : string {
+        return 'Expr_NullsafePropertyFetch';
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php
new file mode 100644
index 0000000000..5c97f0e2b4
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php
@@ -0,0 +1,30 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Node\Expr;
+
+use PhpParser\Node;
+
+class Throw_ extends Node\Expr
+{
+    /** @var Node\Expr Expression */
+    public $expr;
+
+    /**
+     * Constructs a throw expression node.
+     *
+     * @param Node\Expr $expr       Expression
+     * @param array     $attributes Additional attributes
+     */
+    public function __construct(Node\Expr $expr, array $attributes = []) {
+        $this->attributes = $attributes;
+        $this->expr = $expr;
+    }
+
+    public function getSubNodeNames() : array {
+        return ['expr'];
+    }
+
+    public function getType() : string {
+        return 'Expr_Throw';
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php b/vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php
index d574e02082..bbcf53e55f 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php
@@ -16,21 +16,28 @@ public function returnsByRef() : bool;
     /**
      * List of parameters
      *
-     * @return Node\Param[]
+     * @return Param[]
      */
     public function getParams() : array;
 
     /**
      * Get the declared return type or null
      *
-     * @return null|Identifier|Node\Name|Node\NullableType
+     * @return null|Identifier|Name|NullableType|UnionType
      */
     public function getReturnType();
 
     /**
      * The function body
      *
-     * @return Node\Stmt[]|null
+     * @return Stmt[]|null
      */
     public function getStmts();
+
+    /**
+     * Get PHP attribute groups.
+     *
+     * @return AttributeGroup[]
+     */
+    public function getAttrGroups() : array;
 }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/MatchArm.php b/vendor/nikic/php-parser/lib/PhpParser/Node/MatchArm.php
new file mode 100644
index 0000000000..2ae1c86b85
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/MatchArm.php
@@ -0,0 +1,31 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Node;
+
+use PhpParser\Node;
+use PhpParser\NodeAbstract;
+
+class MatchArm extends NodeAbstract
+{
+    /** @var null|Node\Expr[] */
+    public $conds;
+    /** @var Node\Expr */
+    public $body;
+
+    /**
+     * @param null|Node\Expr[] $conds
+     */
+    public function __construct($conds, Node\Expr $body, array $attributes = []) {
+        $this->conds = $conds;
+        $this->body = $body;
+        $this->attributes = $attributes;
+    }
+
+    public function getSubNodeNames() : array {
+        return ['conds', 'body'];
+    }
+
+    public function getType() : string {
+        return 'MatchArm';
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Name.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Name.php
index 7ebdd579cf..6b1cc9f8ed 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Name.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Name.php
@@ -85,7 +85,7 @@ public function isRelative() : bool {
     }
 
     /**
-     * Returns a string representation of the name itself, without taking taking the name type into
+     * Returns a string representation of the name itself, without taking the name type into
      * account (e.g., not including a leading backslash for fully qualified names).
      *
      * @return string String representation
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Param.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Param.php
index 5bc8a1cb88..315b5f24f6 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Param.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Param.php
@@ -6,7 +6,7 @@
 
 class Param extends NodeAbstract
 {
-    /** @var null|Identifier|Name|NullableType Type declaration */
+    /** @var null|Identifier|Name|NullableType|UnionType Type declaration */
     public $type;
     /** @var bool Whether parameter is passed by reference */
     public $byRef;
@@ -16,20 +16,29 @@ class Param extends NodeAbstract
     public $var;
     /** @var null|Expr Default value */
     public $default;
+    /** @var int */
+    public $flags;
+    /** @var AttributeGroup[] PHP attribute groups */
+    public $attrGroups;
 
     /**
      * Constructs a parameter node.
      *
-     * @param Expr\Variable|Expr\Error                 $var        Parameter variable
-     * @param null|Expr                                $default    Default value
-     * @param null|string|Identifier|Name|NullableType $type       Type declaration
-     * @param bool                                     $byRef      Whether is passed by reference
-     * @param bool                                     $variadic   Whether this is a variadic argument
-     * @param array                                    $attributes Additional attributes
+     * @param Expr\Variable|Expr\Error                           $var        Parameter variable
+     * @param null|Expr                                          $default    Default value
+     * @param null|string|Identifier|Name|NullableType|UnionType $type       Type declaration
+     * @param bool                                               $byRef      Whether is passed by reference
+     * @param bool                                               $variadic   Whether this is a variadic argument
+     * @param array                                              $attributes Additional attributes
+     * @param int                                                $flags      Optional visibility flags
+     * @param AttributeGroup[]                                   $attrGroups PHP attribute groups
      */
     public function __construct(
         $var, Expr $default = null, $type = null,
-        bool $byRef = false, bool $variadic = false, array $attributes = []
+        bool $byRef = false, bool $variadic = false,
+        array $attributes = [],
+        int $flags = 0,
+        array $attrGroups = []
     ) {
         $this->attributes = $attributes;
         $this->type = \is_string($type) ? new Identifier($type) : $type;
@@ -37,10 +46,12 @@ public function __construct(
         $this->variadic = $variadic;
         $this->var = $var;
         $this->default = $default;
+        $this->flags = $flags;
+        $this->attrGroups = $attrGroups;
     }
 
     public function getSubNodeNames() : array {
-        return ['type', 'byRef', 'variadic', 'var', 'default'];
+        return ['attrGroups', 'flags', 'type', 'byRef', 'variadic', 'var', 'default'];
     }
 
     public function getType() : string {
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php
index 7b7ae378d7..29ce0dd401 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php
@@ -34,6 +34,8 @@ public function getSubNodeNames() : array {
      * @return float The parsed number
      */
     public static function parse(string $str) : float {
+        $str = str_replace('_', '', $str);
+
         // if string contains any of .eE just cast it to float
         if (false !== strpbrk($str, '.eE')) {
             return (float) $str;
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php
index 5c5aca3f79..b33943547e 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php
@@ -41,6 +41,8 @@ public function getSubNodeNames() : array {
      * @return LNumber The constructed LNumber, including kind attribute
      */
     public static function fromString(string $str, array $attributes = [], bool $allowInvalidOctal = false) : LNumber {
+        $str = str_replace('_', '', $str);
+
         if ('0' !== $str[0] || '0' === $str) {
             $attributes['kind'] = LNumber::KIND_DEC;
             return new LNumber((int) $str, $attributes);
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php
index de6318d053..8a6d93a474 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php
@@ -100,7 +100,7 @@ function($matches) {
                 if (isset(self::$replacements[$str])) {
                     return self::$replacements[$str];
                 } elseif ('x' === $str[0] || 'X' === $str[0]) {
-                    return chr(hexdec($str));
+                    return chr(hexdec(substr($str, 1)));
                 } elseif ('u' === $str[0]) {
                     return self::codePointToUtf8(hexdec($matches[2]));
                 } else {
@@ -134,7 +134,7 @@ private static function codePointToUtf8(int $num) : string {
         }
         throw new Error('Invalid UTF-8 codepoint escape sequence: Codepoint too large');
     }
-    
+
     public function getType() : string {
         return 'Scalar_String';
     }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php
index 7d4a7034be..9b9c094782 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php
@@ -9,7 +9,7 @@ class Catch_ extends Node\Stmt
 {
     /** @var Node\Name[] Types of exceptions to catch */
     public $types;
-    /** @var Expr\Variable Variable for exception */
+    /** @var Expr\Variable|null Variable for exception */
     public $var;
     /** @var Node\Stmt[] Statements */
     public $stmts;
@@ -17,13 +17,13 @@ class Catch_ extends Node\Stmt
     /**
      * Constructs a catch node.
      *
-     * @param Node\Name[]   $types      Types of exceptions to catch
-     * @param Expr\Variable $var        Variable for exception
-     * @param Node\Stmt[]   $stmts      Statements
-     * @param array         $attributes Additional attributes
+     * @param Node\Name[]           $types      Types of exceptions to catch
+     * @param Expr\Variable|null    $var        Variable for exception
+     * @param Node\Stmt[]           $stmts      Statements
+     * @param array                 $attributes Additional attributes
      */
     public function __construct(
-        array $types, Expr\Variable $var, array $stmts = [], array $attributes = []
+        array $types, Expr\Variable $var = null, array $stmts = [], array $attributes = []
     ) {
         $this->attributes = $attributes;
         $this->types = $types;
@@ -34,7 +34,7 @@ public function __construct(
     public function getSubNodeNames() : array {
         return ['types', 'var', 'stmts'];
     }
-    
+
     public function getType() : string {
         return 'Stmt_Catch';
     }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php
index 73a5010309..c459acb152 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php
@@ -10,22 +10,31 @@ class ClassConst extends Node\Stmt
     public $flags;
     /** @var Node\Const_[] Constant declarations */
     public $consts;
+    /** @var Node\AttributeGroup[] */
+    public $attrGroups;
 
     /**
      * Constructs a class const list node.
      *
-     * @param Node\Const_[] $consts     Constant declarations
-     * @param int           $flags      Modifiers
-     * @param array         $attributes Additional attributes
+     * @param Node\Const_[]         $consts     Constant declarations
+     * @param int                   $flags      Modifiers
+     * @param array                 $attributes Additional attributes
+     * @param Node\AttributeGroup[] $attrGroups PHP attribute groups
      */
-    public function __construct(array $consts, int $flags = 0, array $attributes = []) {
+    public function __construct(
+        array $consts,
+        int $flags = 0,
+        array $attributes = [],
+        array $attrGroups = []
+    ) {
         $this->attributes = $attributes;
         $this->flags = $flags;
         $this->consts = $consts;
+        $this->attrGroups = $attrGroups;
     }
 
     public function getSubNodeNames() : array {
-        return ['flags', 'consts'];
+        return ['attrGroups', 'flags', 'consts'];
     }
 
     /**
@@ -55,7 +64,7 @@ public function isProtected() : bool {
     public function isPrivate() : bool {
         return (bool) ($this->flags & Class_::MODIFIER_PRIVATE);
     }
-    
+
     public function getType() : string {
         return 'Stmt_ClassConst';
     }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php
index 31cd66ac95..840c4f67ec 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php
@@ -13,6 +13,67 @@ abstract class ClassLike extends Node\Stmt
     public $name;
     /** @var Node\Stmt[] Statements */
     public $stmts;
+    /** @var Node\AttributeGroup[] PHP attribute groups */
+    public $attrGroups;
+
+    /**
+     * @return TraitUse[]
+     */
+    public function getTraitUses() : array {
+        $traitUses = [];
+        foreach ($this->stmts as $stmt) {
+            if ($stmt instanceof TraitUse) {
+                $traitUses[] = $stmt;
+            }
+        }
+        return $traitUses;
+    }
+
+    /**
+     * @return ClassConst[]
+     */
+    public function getConstants() : array {
+        $constants = [];
+        foreach ($this->stmts as $stmt) {
+            if ($stmt instanceof ClassConst) {
+                $constants[] = $stmt;
+            }
+        }
+        return $constants;
+    }
+
+    /**
+     * @return Property[]
+     */
+    public function getProperties() : array {
+        $properties = [];
+        foreach ($this->stmts as $stmt) {
+            if ($stmt instanceof Property) {
+                $properties[] = $stmt;
+            }
+        }
+        return $properties;
+    }
+
+    /**
+     * Gets property with the given name defined directly in this class/interface/trait.
+     *
+     * @param string $name Name of the property
+     *
+     * @return Property|null Property node or null if the property does not exist
+     */
+    public function getProperty(string $name) {
+        foreach ($this->stmts as $stmt) {
+            if ($stmt instanceof Property) {
+                foreach ($stmt->props as $prop) {
+                    if ($prop instanceof PropertyProperty && $name === $prop->name->toString()) {
+                        return $stmt;
+                    }
+                }
+            }
+        }
+        return null;
+    }
 
     /**
      * Gets all methods defined directly in this class/interface/trait
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php
index 881dcd7ff5..92157fab26 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php
@@ -15,10 +15,12 @@ class ClassMethod extends Node\Stmt implements FunctionLike
     public $name;
     /** @var Node\Param[] Parameters */
     public $params;
-    /** @var null|Node\Identifier|Node\Name|Node\NullableType Return type */
+    /** @var null|Node\Identifier|Node\Name|Node\NullableType|Node\UnionType Return type */
     public $returnType;
     /** @var Node\Stmt[]|null Statements */
     public $stmts;
+    /** @var Node\AttributeGroup[] PHP attribute groups */
+    public $attrGroups;
 
     private static $magicNames = [
         '__construct'  => true,
@@ -48,6 +50,7 @@ class ClassMethod extends Node\Stmt implements FunctionLike
      *                          'params'     => array()        : Parameters
      *                          'returnType' => null           : Return type
      *                          'stmts'      => array()        : Statements
+     *                          'attrGroups' => array()        : PHP attribute groups
      * @param array $attributes Additional attributes
      */
     public function __construct($name, array $subNodes = [], array $attributes = []) {
@@ -59,10 +62,11 @@ public function __construct($name, array $subNodes = [], array $attributes = [])
         $returnType = $subNodes['returnType'] ?? null;
         $this->returnType = \is_string($returnType) ? new Node\Identifier($returnType) : $returnType;
         $this->stmts = array_key_exists('stmts', $subNodes) ? $subNodes['stmts'] : [];
+        $this->attrGroups = $subNodes['attrGroups'] ?? [];
     }
 
     public function getSubNodeNames() : array {
-        return ['flags', 'byRef', 'name', 'params', 'returnType', 'stmts'];
+        return ['attrGroups', 'flags', 'byRef', 'name', 'params', 'returnType', 'stmts'];
     }
 
     public function returnsByRef() : bool {
@@ -81,6 +85,10 @@ public function getStmts() {
         return $this->stmts;
     }
 
+    public function getAttrGroups() : array {
+        return $this->attrGroups;
+    }
+
     /**
      * Whether the method is explicitly or implicitly public.
      *
@@ -120,7 +128,7 @@ public function isAbstract() : bool {
 
     /**
      * Whether the method is final.
-     * 
+     *
      * @return bool
      */
     public function isFinal() : bool {
@@ -144,7 +152,7 @@ public function isStatic() : bool {
     public function isMagic() : bool {
         return isset(self::$magicNames[$this->name->toLowerString()]);
     }
-    
+
     public function getType() : string {
         return 'Stmt_ClassMethod';
     }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php
index a97c3f4ae8..ace266f74b 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php
@@ -28,10 +28,11 @@ class Class_ extends ClassLike
      *
      * @param string|Node\Identifier|null $name Name
      * @param array       $subNodes   Array of the following optional subnodes:
-     *                                'flags'      => 0      : Flags
-     *                                'extends'    => null   : Name of extended class
-     *                                'implements' => array(): Names of implemented interfaces
-     *                                'stmts'      => array(): Statements
+     *                                'flags'       => 0      : Flags
+     *                                'extends'     => null   : Name of extended class
+     *                                'implements'  => array(): Names of implemented interfaces
+     *                                'stmts'       => array(): Statements
+     *                                '$attrGroups' => array(): PHP attribute groups
      * @param array       $attributes Additional attributes
      */
     public function __construct($name, array $subNodes = [], array $attributes = []) {
@@ -41,10 +42,11 @@ public function __construct($name, array $subNodes = [], array $attributes = [])
         $this->extends = $subNodes['extends'] ?? null;
         $this->implements = $subNodes['implements'] ?? [];
         $this->stmts = $subNodes['stmts'] ?? [];
+        $this->attrGroups = $subNodes['attrGroups'] ?? [];
     }
 
     public function getSubNodeNames() : array {
-        return ['flags', 'name', 'extends', 'implements', 'stmts'];
+        return ['attrGroups', 'flags', 'name', 'extends', 'implements', 'stmts'];
     }
 
     /**
@@ -98,7 +100,7 @@ public static function verifyModifier($a, $b) {
             throw new Error('Cannot use the final modifier on an abstract class member');
         }
     }
-    
+
     public function getType() : string {
         return 'Stmt_Class';
     }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php
index d11a4df9d3..f08481fae1 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php
@@ -16,10 +16,12 @@ class Function_ extends Node\Stmt implements FunctionLike
     public $name;
     /** @var Node\Param[] Parameters */
     public $params;
-    /** @var null|Node\Identifier|Node\Name|Node\NullableType Return type */
+    /** @var null|Node\Identifier|Node\Name|Node\NullableType|Node\UnionType Return type */
     public $returnType;
     /** @var Node\Stmt[] Statements */
     public $stmts;
+    /** @var Node\AttributeGroup[] PHP attribute groups */
+    public $attrGroups;
 
     /**
      * Constructs a function node.
@@ -30,6 +32,7 @@ class Function_ extends Node\Stmt implements FunctionLike
      *                           'params'     => array(): Parameters
      *                           'returnType' => null   : Return type
      *                           'stmts'      => array(): Statements
+     *                           'attrGroups' => array(): PHP attribute groups
      * @param array  $attributes Additional attributes
      */
     public function __construct($name, array $subNodes = [], array $attributes = []) {
@@ -40,10 +43,11 @@ public function __construct($name, array $subNodes = [], array $attributes = [])
         $returnType = $subNodes['returnType'] ?? null;
         $this->returnType = \is_string($returnType) ? new Node\Identifier($returnType) : $returnType;
         $this->stmts = $subNodes['stmts'] ?? [];
+        $this->attrGroups = $subNodes['attrGroups'] ?? [];
     }
 
     public function getSubNodeNames() : array {
-        return ['byRef', 'name', 'params', 'returnType', 'stmts'];
+        return ['attrGroups', 'byRef', 'name', 'params', 'returnType', 'stmts'];
     }
 
     public function returnsByRef() : bool {
@@ -58,11 +62,15 @@ public function getReturnType() {
         return $this->returnType;
     }
 
+    public function getAttrGroups() : array {
+        return $this->attrGroups;
+    }
+
     /** @return Node\Stmt[] */
     public function getStmts() : array {
         return $this->stmts;
     }
-    
+
     public function getType() : string {
         return 'Stmt_Function';
     }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php
index 052558113d..4d587dd484 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php
@@ -14,8 +14,9 @@ class Interface_ extends ClassLike
      *
      * @param string|Node\Identifier $name Name
      * @param array  $subNodes   Array of the following optional subnodes:
-     *                           'extends' => array(): Name of extended interfaces
-     *                           'stmts'   => array(): Statements
+     *                           'extends'    => array(): Name of extended interfaces
+     *                           'stmts'      => array(): Statements
+     *                           'attrGroups' => array(): PHP attribute groups
      * @param array  $attributes Additional attributes
      */
     public function __construct($name, array $subNodes = [], array $attributes = []) {
@@ -23,12 +24,13 @@ public function __construct($name, array $subNodes = [], array $attributes = [])
         $this->name = \is_string($name) ? new Node\Identifier($name) : $name;
         $this->extends = $subNodes['extends'] ?? [];
         $this->stmts = $subNodes['stmts'] ?? [];
+        $this->attrGroups = $subNodes['attrGroups'] ?? [];
     }
 
     public function getSubNodeNames() : array {
-        return ['name', 'extends', 'stmts'];
+        return ['attrGroups', 'name', 'extends', 'stmts'];
     }
-    
+
     public function getType() : string {
         return 'Stmt_Interface';
     }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php
index 849b8b44e9..324345b85f 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php
@@ -6,6 +6,7 @@
 use PhpParser\Node\Identifier;
 use PhpParser\Node\Name;
 use PhpParser\Node\NullableType;
+use PhpParser\Node\UnionType;
 
 class Property extends Node\Stmt
 {
@@ -13,26 +14,30 @@ class Property extends Node\Stmt
     public $flags;
     /** @var PropertyProperty[] Properties */
     public $props;
-    /** @var null|Identifier|Name|NullableType Type declaration */
+    /** @var null|Identifier|Name|NullableType|UnionType Type declaration */
     public $type;
+    /** @var Node\AttributeGroup[] PHP attribute groups */
+    public $attrGroups;
 
     /**
      * Constructs a class property list node.
      *
-     * @param int                                      $flags      Modifiers
-     * @param PropertyProperty[]                       $props      Properties
-     * @param array                                    $attributes Additional attributes
-     * @param null|string|Identifier|Name|NullableType $type       Type declaration
+     * @param int                                                $flags      Modifiers
+     * @param PropertyProperty[]                                 $props      Properties
+     * @param array                                              $attributes Additional attributes
+     * @param null|string|Identifier|Name|NullableType|UnionType $type       Type declaration
+     * @param Node\AttributeGroup[]                              $attrGroups PHP attribute groups
      */
-    public function __construct(int $flags, array $props, array $attributes = [], $type = null) {
+    public function __construct(int $flags, array $props, array $attributes = [], $type = null, array $attrGroups = []) {
         $this->attributes = $attributes;
         $this->flags = $flags;
         $this->props = $props;
         $this->type = \is_string($type) ? new Identifier($type) : $type;
+        $this->attrGroups = $attrGroups;
     }
 
     public function getSubNodeNames() : array {
-        return ['flags', 'type', 'props'];
+        return ['attrGroups', 'flags', 'type', 'props'];
     }
 
     /**
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.php
index f97f56718a..a34e2b3624 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.php
@@ -10,7 +10,7 @@ class Throw_ extends Node\Stmt
     public $expr;
 
     /**
-     * Constructs a throw node.
+     * Constructs a legacy throw statement node.
      *
      * @param Node\Expr $expr       Expression
      * @param array     $attributes Additional attributes
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php
index 1ffa664e7e..0cec203ac7 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php
@@ -11,19 +11,21 @@ class Trait_ extends ClassLike
      *
      * @param string|Node\Identifier $name Name
      * @param array  $subNodes   Array of the following optional subnodes:
-     *                           'stmts' => array(): Statements
+     *                           'stmts'      => array(): Statements
+     *                           'attrGroups' => array(): PHP attribute groups
      * @param array  $attributes Additional attributes
      */
     public function __construct($name, array $subNodes = [], array $attributes = []) {
         $this->attributes = $attributes;
         $this->name = \is_string($name) ? new Node\Identifier($name) : $name;
         $this->stmts = $subNodes['stmts'] ?? [];
+        $this->attrGroups = $subNodes['attrGroups'] ?? [];
     }
 
     public function getSubNodeNames() : array {
-        return ['name', 'stmts'];
+        return ['attrGroups', 'name', 'stmts'];
     }
-    
+
     public function getType() : string {
         return 'Stmt_Trait';
     }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php
index 47b9aae74d..7fc158c570 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php
@@ -18,7 +18,7 @@ class TryCatch extends Node\Stmt
      *
      * @param Node\Stmt[]   $stmts      Statements
      * @param Catch_[]      $catches    Catches
-     * @param null|Finally_ $finally    Optionaly finally node
+     * @param null|Finally_ $finally    Optional finally node
      * @param array         $attributes Additional attributes
      */
     public function __construct(array $stmts, array $catches, Finally_ $finally = null, array $attributes = []) {
@@ -31,7 +31,7 @@ public function __construct(array $stmts, array $catches, Finally_ $finally = nu
     public function getSubNodeNames() : array {
         return ['stmts', 'catches', 'finally'];
     }
-    
+
     public function getType() : string {
         return 'Stmt_TryCatch';
     }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.php b/vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.php
new file mode 100644
index 0000000000..c8f45235d6
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.php
@@ -0,0 +1,30 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Node;
+
+use PhpParser\NodeAbstract;
+
+class UnionType extends NodeAbstract
+{
+    /** @var (Identifier|Name)[] Types */
+    public $types;
+
+    /**
+     * Constructs a union type.
+     *
+     * @param (Identifier|Name)[] $types      Types
+     * @param array               $attributes Additional attributes
+     */
+    public function __construct(array $types, array $attributes = []) {
+        $this->attributes = $attributes;
+        $this->types = $types;
+    }
+
+    public function getSubNodeNames() : array {
+        return ['types'];
+    }
+    
+    public function getType() : string {
+        return 'UnionType';
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php b/vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php
index fda595994d..04514da116 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php
@@ -108,22 +108,18 @@ public function getComments() : array {
     /**
      * Gets the doc comment of the node.
      *
-     * The doc comment has to be the last comment associated with the node.
-     *
      * @return null|Comment\Doc Doc comment object or null
      */
     public function getDocComment() {
         $comments = $this->getComments();
-        if (!$comments) {
-            return null;
-        }
-
-        $lastComment = $comments[count($comments) - 1];
-        if (!$lastComment instanceof Comment\Doc) {
-            return null;
+        for ($i = count($comments) - 1; $i >= 0; $i--) {
+            $comment = $comments[$i];
+            if ($comment instanceof Comment\Doc) {
+                return $comment;
+            }
         }
 
-        return $lastComment;
+        return null;
     }
 
     /**
@@ -135,16 +131,17 @@ public function getDocComment() {
      */
     public function setDocComment(Comment\Doc $docComment) {
         $comments = $this->getComments();
-
-        $numComments = count($comments);
-        if ($numComments > 0 && $comments[$numComments - 1] instanceof Comment\Doc) {
-            // Replace existing doc comment
-            $comments[$numComments - 1] = $docComment;
-        } else {
-            // Append new comment
-            $comments[] = $docComment;
+        for ($i = count($comments) - 1; $i >= 0; $i--) {
+            if ($comments[$i] instanceof Comment\Doc) {
+                // Replace existing doc comment.
+                $comments[$i] = $docComment;
+                $this->setAttribute('comments', $comments);
+                return;
+            }
         }
 
+        // Append new doc comment.
+        $comments[] = $docComment;
         $this->setAttribute('comments', $comments);
     }
 
diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php
index cfe8ce7643..c55532a5ea 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php
@@ -75,6 +75,7 @@ public function enterNode(Node $node) {
                 $interface = $this->resolveClassName($interface);
             }
 
+            $this->resolveAttrGroups($node);
             if (null !== $node->name) {
                 $this->addNamespacedName($node);
             }
@@ -83,24 +84,32 @@ public function enterNode(Node $node) {
                 $interface = $this->resolveClassName($interface);
             }
 
+            $this->resolveAttrGroups($node);
             $this->addNamespacedName($node);
         } elseif ($node instanceof Stmt\Trait_) {
+            $this->resolveAttrGroups($node);
             $this->addNamespacedName($node);
         } elseif ($node instanceof Stmt\Function_) {
-            $this->addNamespacedName($node);
             $this->resolveSignature($node);
+            $this->resolveAttrGroups($node);
+            $this->addNamespacedName($node);
         } elseif ($node instanceof Stmt\ClassMethod
                   || $node instanceof Expr\Closure
+                  || $node instanceof Expr\ArrowFunction
         ) {
             $this->resolveSignature($node);
+            $this->resolveAttrGroups($node);
         } elseif ($node instanceof Stmt\Property) {
             if (null !== $node->type) {
                 $node->type = $this->resolveType($node->type);
             }
+            $this->resolveAttrGroups($node);
         } elseif ($node instanceof Stmt\Const_) {
             foreach ($node->consts as $const) {
                 $this->addNamespacedName($const);
             }
+        } else if ($node instanceof Stmt\ClassConst) {
+            $this->resolveAttrGroups($node);
         } elseif ($node instanceof Expr\StaticCall
                   || $node instanceof Expr\StaticPropertyFetch
                   || $node instanceof Expr\ClassConstFetch
@@ -156,17 +165,24 @@ private function addAlias(Stmt\UseUse $use, $type, Name $prefix = null) {
     private function resolveSignature($node) {
         foreach ($node->params as $param) {
             $param->type = $this->resolveType($param->type);
+            $this->resolveAttrGroups($param);
         }
         $node->returnType = $this->resolveType($node->returnType);
     }
 
     private function resolveType($node) {
+        if ($node instanceof Name) {
+            return $this->resolveClassName($node);
+        }
         if ($node instanceof Node\NullableType) {
             $node->type = $this->resolveType($node->type);
             return $node;
         }
-        if ($node instanceof Name) {
-            return $this->resolveClassName($node);
+        if ($node instanceof Node\UnionType) {
+            foreach ($node->types as &$type) {
+                $type = $this->resolveType($type);
+            }
+            return $node;
         }
         return $node;
     }
@@ -218,4 +234,13 @@ protected function addNamespacedName(Node $node) {
         $node->namespacedName = Name::concat(
             $this->nameContext->getNamespace(), (string) $node->name);
     }
+
+    protected function resolveAttrGroups(Node $node)
+    {
+        foreach ($node->attrGroups as $attrGroup) {
+            foreach ($attrGroup->attrs as $attr) {
+                $attr->name = $this->resolveClassName($attr->name);
+            }
+        }
+    }
 }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php
new file mode 100644
index 0000000000..ea372e5b99
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php
@@ -0,0 +1,52 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\NodeVisitor;
+
+use PhpParser\Node;
+use PhpParser\NodeVisitorAbstract;
+
+/**
+ * Visitor that connects a child node to its parent node
+ * as well as its sibling nodes.
+ *
+ * On the child node, the parent node can be accessed through
+ * <code>$node->getAttribute('parent')</code>, the previous
+ * node can be accessed through <code>$node->getAttribute('previous')</code>,
+ * and the next node can be accessed through <code>$node->getAttribute('next')</code>.
+ */
+final class NodeConnectingVisitor extends NodeVisitorAbstract
+{
+    /**
+     * @var Node[]
+     */
+    private $stack = [];
+
+    /**
+     * @var ?Node
+     */
+    private $previous;
+
+    public function beforeTraverse(array $nodes) {
+        $this->stack    = [];
+        $this->previous = null;
+    }
+
+    public function enterNode(Node $node) {
+        if (!empty($this->stack)) {
+            $node->setAttribute('parent', $this->stack[count($this->stack) - 1]);
+        }
+
+        if ($this->previous !== null && $this->previous->getAttribute('parent') === $node->getAttribute('parent')) {
+            $node->setAttribute('previous', $this->previous);
+            $this->previous->setAttribute('next', $node);
+        }
+
+        $this->stack[] = $node;
+    }
+
+    public function leaveNode(Node $node) {
+        $this->previous = $node;
+
+        array_pop($this->stack);
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php
new file mode 100644
index 0000000000..b98d2bfa6f
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php
@@ -0,0 +1,41 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\NodeVisitor;
+
+use function array_pop;
+use function count;
+use PhpParser\Node;
+use PhpParser\NodeVisitorAbstract;
+
+/**
+ * Visitor that connects a child node to its parent node.
+ *
+ * On the child node, the parent node can be accessed through
+ * <code>$node->getAttribute('parent')</code>.
+ */
+final class ParentConnectingVisitor extends NodeVisitorAbstract
+{
+    /**
+     * @var Node[]
+     */
+    private $stack = [];
+
+    public function beforeTraverse(array $nodes)
+    {
+        $this->stack = [];
+    }
+
+    public function enterNode(Node $node)
+    {
+        if (!empty($this->stack)) {
+            $node->setAttribute('parent', $this->stack[count($this->stack) - 1]);
+        }
+
+        $this->stack[] = $node;
+    }
+
+    public function leaveNode(Node $node)
+    {
+        array_pop($this->stack);
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Parser/Php5.php b/vendor/nikic/php-parser/lib/PhpParser/Parser/Php5.php
index a558d28b78..c67a5e707a 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Parser/Php5.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Parser/Php5.php
@@ -17,21 +17,22 @@
  */
 class Php5 extends \PhpParser\ParserAbstract
 {
-    protected $tokenToSymbolMapSize = 394;
-    protected $actionTableSize = 1079;
-    protected $gotoTableSize = 650;
+    protected $tokenToSymbolMapSize = 392;
+    protected $actionTableSize = 1069;
+    protected $gotoTableSize = 580;
 
-    protected $invalidSymbol = 159;
+    protected $invalidSymbol = 165;
     protected $errorSymbol = 1;
     protected $defaultAction = -32766;
     protected $unexpectedTokenRule = 32767;
 
-    protected $YY2TBLSTATE = 407;
-    protected $numNonLeafStates = 676;
+    protected $YY2TBLSTATE = 405;
+    protected $numNonLeafStates = 658;
 
     protected $symbolToName = array(
         "EOF",
         "error",
+        "T_THROW",
         "T_INCLUDE",
         "T_INCLUDE_ONCE",
         "T_EVAL",
@@ -127,6 +128,7 @@ class Php5 extends \PhpParser\ParserAbstract
         "T_ENDDECLARE",
         "T_AS",
         "T_SWITCH",
+        "T_MATCH",
         "T_ENDSWITCH",
         "T_CASE",
         "T_DEFAULT",
@@ -140,7 +142,6 @@ class Php5 extends \PhpParser\ParserAbstract
         "T_TRY",
         "T_CATCH",
         "T_FINALLY",
-        "T_THROW",
         "T_USE",
         "T_INSTEADOF",
         "T_GLOBAL",
@@ -180,6 +181,9 @@ class Php5 extends \PhpParser\ParserAbstract
         "T_DIR",
         "T_NS_SEPARATOR",
         "T_ELLIPSIS",
+        "T_NAME_FULLY_QUALIFIED",
+        "T_NAME_QUALIFIED",
+        "T_NAME_RELATIVE",
         "';'",
         "'{'",
         "'}'",
@@ -188,348 +192,346 @@ class Php5 extends \PhpParser\ParserAbstract
         "'$'",
         "'`'",
         "']'",
-        "'\"'"
+        "'\"'",
+        "T_NULLSAFE_OBJECT_OPERATOR",
+        "T_ATTRIBUTE"
     );
 
     protected $tokenToSymbol = array(
-            0,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,   54,  158,  159,  155,   53,   36,  159,
-          153,  154,   51,   48,    7,   49,   50,   52,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,   30,  150,
-           42,   15,   44,   29,   66,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,   68,  159,  157,   35,  159,  156,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  151,   34,  152,   56,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,    1,    2,    3,    4,
-            5,    6,    8,    9,   10,   11,   12,   13,   14,   16,
+            0,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,   55,  162,  165,  159,   54,   37,  165,
+          157,  158,   52,   49,    8,   50,   51,   53,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,   31,  154,
+           43,   16,   45,   30,   67,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,   69,  165,  161,   36,  165,  160,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  155,   35,  156,   57,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,    1,    2,    3,    4,
+            5,    6,    7,    9,   10,   11,   12,   13,   14,   15,
            17,   18,   19,   20,   21,   22,   23,   24,   25,   26,
-           27,   28,   31,   32,   33,   37,   38,   39,   40,   41,
-           43,   45,   46,   47,   55,   57,   58,   59,   60,   61,
-           62,   63,   64,   65,   67,   69,   70,   71,   72,   73,
-           74,   75,   76,   77,   78,   79,   80,   81,   82,  159,
-          159,   83,   84,   85,   86,   87,   88,   89,   90,   91,
-           92,   93,   94,   95,   96,   97,   98,   99,  100,  101,
-          102,  103,  104,  105,  106,  107,  108,  109,  110,  111,
-          112,  113,  114,  115,  116,  117,  118,  119,  120,  121,
-          122,  123,  124,  125,  126,  127,  128,  129,  130,  131,
-          132,  133,  134,  135,  136,  137,  138,  139,  159,  159,
-          159,  159,  159,  159,  140,  141,  142,  143,  144,  145,
-          146,  147,  148,  149
+           27,   28,   29,   32,   33,   34,   38,   39,   40,   41,
+           42,   44,   46,   47,   48,   56,   58,   59,   60,   61,
+           62,   63,   64,   65,   66,   68,   70,   71,   72,   73,
+           74,   75,   76,   77,   78,   79,   80,   81,   82,   83,
+           84,   85,   86,   87,   88,   89,   90,   91,   92,   93,
+           94,   95,   96,   97,   98,   99,  100,  101,  102,  103,
+          104,  105,  106,  107,  108,  109,  110,  111,  112,  113,
+          114,  115,  116,  117,  118,  119,  120,  121,  122,  123,
+          124,  125,  126,  127,  128,  129,  130,  131,  163,  132,
+          133,  134,  135,  136,  137,  138,  139,  140,  141,  142,
+          143,  144,  145,  146,  147,  148,  149,  150,  151,  152,
+          153,  164
     );
 
     protected $action = array(
-          681,  682,  683,  684,  685,  283,  686,  687,  688,  724,
-          725,  222,  223,  224,  225,  226,  227,  228,  229,  230,
-            0,  231,  232,  233,  234,  235,  236,  237,  238,  239,
-          240,  241,  242,-32766,-32766,-32766,-32766,-32766,-32766,-32766,
-        -32766,-32767,-32767,-32767,-32767, 1052,  243,  244,-32766,-32766,
-        -32766,-32766,-32766,  689,-32766,-32766,-32766,-32766,-32766,-32766,
-        -32766,-32766,-32767,-32767,-32767,-32767,-32767,  690,  691,  692,
-          693,  694,  695,  696,  834,   27,  757,  959,  960,  961,
-          958,  957,  956,  697,  698,  699,  700,  701,  702,  703,
-          704,  705,  706,  707,  727,  728,  729,  730,  731,  719,
-          720,  721,  749,  722,  723,  708,  709,  710,  711,  712,
-          713,  714,  751,  752,  753,  754,  755,  756,  715,  716,
-          717,  718,  748,  739,  737,  738,  734,  735, 1188,  726,
-          732,  733,  740,  741,  743,  742,  744,  745,   54,   55,
-          426,   56,   57,  736,  747,  746, -220,   58,   59,  419,
-           60,-32766,-32766,-32766,-32766,-32766,-32766,-32766,-32766,-32766,
-           28,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,   97,
-           98,   99,  100,  101,    9,  906,  907,-32766, 1202,  761,
-          328,  764, 1188,  814,   61,   62,   52,  285,  500,  951,
-           63,  434,   64,  294,  295,   65,   66,   67,   68,   69,
-           70,   71,   72,  340,   25,  302,   73,  418,-32766,-32766,
-        -32766,  882, 1103, 1104,  761, 1080,  764,-32766,-32766,-32766,
-          475, -255,  298,  825,  835,  759,  219,  220,  221,-32766,
-           36,-32766,-32766,-32766,-32766,-32766,-32766,  125,-32766,  438,
-        -32766,-32766,-32766,-32766,-32766, 1052,  500,  206,  310,  434,
-          499,  423, 1052,  129,  439,  759,  336,  340,  483,  484,
-           10,  959,  960,  961,  958,  957,  956,  485,  486,  124,
-         1109, 1110, 1111, 1112, 1106, 1107,  313,-32766,-32766,-32766,
-        -32766,  500, 1113, 1108,  434,  219,  220,  221,  425,   41,
-          764,  336,  324, 1222,  325,  427, -126, -126, -126,   -4,
-          835,  474,-32766,-32766,-32766,  823,  206,  913,   40,   21,
-          428, -126,  476, -126,  477, -126,  478, -126,  123,  429,
-          219,  220,  221,   31,   32,  430,  431,  354,  130,   33,
-          479,  883,  336,   74, 1203,  128,  352,  353,  480,  481,
-          912,  206,  247,  301,  482,  210, 1052,  806,  853,  432,
-          433,  312,   30,  297,   35,  106,  107,  108,  109,  110,
-          111,  112,  113,  114,  115,  116,  117,  118,  421, 1052,
-          296,  427, 1154,  837,  647, -126,  835,  474,  102,  103,
-          104,  823,  304,  816,   40,   21,  428,  332,  476,  632,
-          477,  422,  478,  298,  105,  429,  991,  993,   20,   31,
-           32,  430,  431,  933,  409,   33,  479,  220,  221,   74,
-          323,-32766,  352,  353,  480,  481,-32766,-32766,-32766,  424,
-          482, 1052,  448,  768,  853,  432,  433,  206,-32766,-32766,
-        -32766,   48,  906,  907, 1153, 1070,  339,-32766,  485,-32766,
-        -32766,-32766,-32766, 1231,  337,  500, 1232,  427,  434,  837,
-          647,   -4,  835,  474, -224, 1052,  633,  823,   49,  434,
-           40,   21,  428,  937,  476,  776,  477,  777,  478, -504,
-          820,  429, -205, -205, -205,   31,   32,  430,  431,-32766,
-        -32766,   33,  479,   75,-32766,   74,-32766,  594,  352,  353,
-          480,  481,-32766,-32766,-32766,  119,  482,  526,  451,  806,
-          853,  432,  433,  240,  241,  242,  128,-32766,-32766,-32766,
-          411,  775,   51,-32766,  120,-32766,-32766,-32766,  500,  243,
-          244,  434,  552,  427,  417,  837,  647, -205,-32766,  474,
-        -32766,-32766, 1052,  823,  821,  351,   40,   21,  428, 1052,
-          476,  121,  477,  449,  478, 1115,  211,  429, -204, -204,
-         -204,   31,   32,  430,  431, 1115,  286,   33,  479,  818,
-          835,   74,  932,  299,  352,  353,  480,  481,  212,  219,
-          220,  221,  482,  335,  245,  806,  853,  432,  433,-32766,
-        -32766,-32766,  213,   79,   80,   81,   99,  100,  101,  650,
-          206,  237,  238,  239,  444,  122,  776,  649,  777,  300,
-        -32766,  837,  647, -204,   34,  248,   82,   83,   84,   85,
-           86,   87,   88,   89,   90,   91,   92,   93,   94,   95,
-           96,   97,   98,   99,  100,  101,  102,  103,  104, 1052,
-          304,  427,  221,  249,  835,  250,   78,  474,  206,  133,
-          336,  823,  105,  585,   40,   21,  428,  127,  476,  -83,
-          477,  206,  478,-32766,-32766,  429,  219,  220,  221,   31,
-           32,  430,  316,  651,  658,   33,  479,  835,  661,   74,
-          243,  244,  352,  353,  458,   22,  833,  206,  463,  601,
-          482,  134,  362,  132,  608,  609,  769,  653,-32766,  948,
-          667,  936,  675,  846,  304,  105,  655,   43,   44,   45,
-          616,  761,  759,   46,   47,  427,  302, -274,   50,  837,
-          647,  474,   53,  131,  588,  823,  442,  468,   40,   21,
-          428,  762,  476,  606,  477,-32766,  478,  764,  447,  429,
-          964,  854,  532,   31,   32,  430,  855,  327,  427,   33,
-          479,  835,  641,   74,  474,  620,  352,  353,  823,  -81,
-          628,   40,   21,  428,  482,  476,   11,  477,  450,  478,
-          282,  591,  429,  375,  605,  848,   31,   32,  430,    0,
-          659,  329,   33,  479,  835,    0,   74,    0,    0,  352,
-          353,    0,    0,  837,  647, -504,    0,  482,  326,    0,
-          331,    0,    0,    0,    0,    0,    0,    0,  309,  311,
-         -505,    0,  485,  664,    0,    0,    0,    0,    0,    0,
-            0,    0,  427, 1114, 1160,    0,  869,  647,  474, -413,
-         -405,  835,  823,    5,    6,   40,   21,  428,   12,  476,
-           14,  477,  361,  478, -414,  386,  429,  387,   24,  395,
-           31,   32,  430,  444,  534,  427,   33,  479,  412,  413,
-           74,  474,   38,  352,  353,  823,   39,  670,   40,   21,
-          428,  482,  476,  671,  477,  774,  478,  824,  832,  429,
-          811,  826,  885,   31,   32,  430,  876,  877,  809,   33,
-          479,  870,  867,   74,  865,  943,  352,  353,  944,  941,
-          837,  647,  427,  815,  482,  817,  819,  831,  474,  822,
-          940,  772,  823,  773,  942,   40,   21,  428,   78,  476,
-          648,  477,  652,  478,  654,  656,  429,  657,  246,  660,
-           31,   32,  430,  837,  647,  662,   33,  479,  663,  665,
-           74,  666,  126,  352,  353,  333,  214,  215,  334,  407,
-          408,  482,  216,  672,  217,  807, 1228, 1230,  771,  852,
-          770,  851, 1229,  850, 1066,  842,  208, 1054,  849, 1055,
-          840,  214,  215,  949, 1103, 1104,  874,  216,-32766,  217,
-          837,  647, 1105,  875,  462, 1227, 1196, 1194, 1179, 1192,
-         1094,  208,  924, 1200, 1190,  780,  781,  778,  779, 1103,
-         1104,   26,   29,-32766,   37,   42,   76, 1105,   77,  209,
-          284,  292,  293,  305,  306,  307,  308,  341,  410,  416,
-        -32766,    0, -221, -220,   16,   17,   18,  380,  459,  466,
-          573,  467, 1109, 1110, 1111, 1112, 1106, 1107,  385,  472,
-          567,  638, 1057, 1060, 1113, 1108,  914, 1119, 1056, 1032,
-          577,  218,  287,-32766, 1031,  573, 1096, 1109, 1110, 1111,
-         1112, 1106, 1107,  385, -423, 1050,    0, 1061, 1063, 1113,
-         1108, 1062, 1065, 1064, 1079, 1193,  218, 1178,-32766, 1174,
-            0, 1191, 1093, 1225, 1120, 1173,  612,    0, 1159
+          693,  663,  664,  665,  666,  667,  282,  668,  669,  670,
+          706,  707,  221,  222,  223,  224,  225,  226,  227,  228,
+          229,    0,  230,  231,  232,  233,  234,  235,  236,  237,
+          238,  239,  240,  241,-32766,-32766,-32766,-32766,-32766,-32766,
+        -32766,-32766,-32767,-32767,-32767,-32767,   27,  242,  243,-32766,
+        -32766,-32766,-32766,-32766,  671,-32766,  333,-32766,-32766,-32766,
+        -32766,-32766,-32766,-32767,-32767,-32767,-32767,-32767,  672,  673,
+          674,  675,  676,  677,  678, 1034,  816,  740,  941,  942,
+          943,  940,  939,  938,  679,  680,  681,  682,  683,  684,
+          685,  686,  687,  688,  689,  709,  732,  710,  711,  712,
+          713,  701,  702,  703,  731,  704,  705,  690,  691,  692,
+          694,  695,  696,  734,  735,  736,  737,  738,  739,  697,
+          698,  699,  700,  730,  721,  719,  720,  716,  717,  437,
+          708,  714,  715,  722,  723,  725,  724,  726,  727,   55,
+           56,  417,   57,   58,  718,  729,  728,   28,   59,   60,
+         -220,   61,-32766,-32766,-32766,-32766,-32766,-32766,-32766,-32766,
+        -32766,   36,-32767,-32767,-32767,-32767, 1034,   35,  106,  107,
+          108,  109,  110,  111,  112,  113,  114,  115,  116,  117,
+          118,-32766,-32766,-32766,-32766,   62,   63, 1034,  125,  285,
+          292,   64,  748,   65,  290,  291,   66,   67,   68,   69,
+           70,   71,   72,   73,  763,   25,  298,   74,  409,  973,
+          975,  294,  294, 1086, 1087, 1064,  796,  748,  218,  219,
+          220,  465,-32766,-32766,-32766,  742,  864,  817,   54,  807,
+            9,-32766,-32766,-32766,  760,  320,  761,  410,   10,  202,
+          246,  428,  209,-32766,  933,-32766,-32766,-32766,-32766,-32766,
+        -32766,  488,-32766,  438,-32766,-32766,-32766,-32766,-32766,  473,
+          474,  941,  942,  943,  940,  939,  938,-32766,  475,  476,
+          337, 1092, 1093, 1094, 1095, 1089, 1090,  315, 1214, -255,
+          747, 1215, -505, 1096, 1091,  888,  889, 1066, 1065, 1067,
+          218,  219,  220,   41,  414,  337,  330,  895,  332,  418,
+         -126, -126, -126,   75,   52,  464,   -4,  817,   54,  805,
+         -224,  202,   40,   21,  419, -126,  466, -126,  467, -126,
+          468, -126,  359,  420,  128,  128,  748, 1171,   31,   32,
+          421,  422, 1034,  894,   33,  469,-32766,-32766,-32766, 1186,
+          351,  352,  470,  471,-32766,-32766,-32766,  309,  472,  865,
+          323,  788,  835,  423,  424,-32767,-32767,-32767,-32767,   97,
+           98,   99,  100,  101,  615,-32766,  313,-32766,-32766,-32766,
+        -32766,  354, 1185, 1171,  218,  219,  220,  475,  748,  418,
+          819,  629, -126,  297,  915,  464,  817,   54,-32766,  805,
+          124,  748,   40,   21,  419,  202,  466,   48,  467,  534,
+          468,  129,  429,  420,  337,  341,  888,  889,   31,   32,
+          421,  422,  416,  405,   33,  469,-32766,-32766,  311,  298,
+          351,  352,  470,  471,-32766,-32766,-32766,  748,  472,  412,
+          748,  752,  835,  423,  424,  338, 1066, 1065, 1067,  219,
+          220,  919, 1136,  296,   20,-32766,  576,-32766,-32766,-32766,
+          742,  341,  342,  413,  429, 1064,  337,  512,  418,  202,
+          819,  629,   -4, 1034,  464,  817,   54,   49,  805,  337,
+          762,   40,   21,  419,   51,  466, 1034,  467,  475,  468,
+          340,  748,  420,  120, -205, -205, -205,   31,   32,  421,
+          422, 1062,-32766,   33,  469,-32766,-32766,-32766,  744,  351,
+          352,  470,  471,  429, 1098,  337,  429,  472,  337, 1034,
+          788,  835,  423,  424,  415, 1098,-32766,  802,-32766,-32766,
+          102,  103,  104, 1137,  303,  202,  130, 1066, 1065, 1067,
+          337,  123,  239,  240,  241,  748,  105,  418, 1205,  819,
+          629, -205,  440,  464,-32766,-32766,-32766,  805,  242,  243,
+           40,   21,  419,  121,  466,  126,  467,  429,  468,  337,
+          122,  420, 1052, -204, -204, -204,   31,   32,  421,  422,
+         1034,  745,   33,  469,  220,  759,  817,   54,  351,  352,
+          470,  471,  218,  219,  220,  119,  472,  244,  127,  788,
+          835,  423,  424,  202,-32766,-32766,-32766,   30,  293,  803,
+           79,   80,   81,  202,  798,  210,  632,   99,  100,  101,
+          236,  237,  238,  817,   54,-32766,  211,  800,  819,  629,
+         -204,   34, 1034,   82,   83,   84,   85,   86,   87,   88,
+           89,   90,   91,   92,   93,   94,   95,   96,   97,   98,
+           99,  100,  101,  102,  103,  104,  286,  303,  418, 1034,
+          817,   54,-32766,-32766,  464,  218,  219,  220,  805,  105,
+          914,   40,   21,  419,   78,  466,  212,  467,  337,  468,
+          133,  247,  420,  295,  567,  248,  202,   31,   32,  421,
+          633,  242,  243,   33,  469,  418,  249,  817,   54,  351,
+          352,  464,  760,  -84,  761,  805,  310,  472,   40,   21,
+          419,-32766,  466,  640,  467,  643,  468,  447,   22,  420,
+          815,  452,  584,  132,   31,   32,  421,  637,  134,  364,
+           33,  469,  418,  303,  817,   54,  351,  352,  464,  819,
+          629,  828,  805,   43,  472,   40,   21,  419,   44,  466,
+           45,  467,   46,  468,  591,  592,  420,  753,  635,  930,
+          649,   31,   32,  421,  641,  918,  657,   33,  469,  418,
+          105,  817,   54,  351,  352,  464,  819,  629,   47,  805,
+           50,  472,   40,   21,  419,   53,  466,  131,  467,  298,
+          468,  599,  742,  420,-32766, -274,  516,  570,   31,   32,
+          421,  646,  748,  946,   33,  469,  418,  589,  436,-32766,
+          351,  352,  464,  819,  629,  623,  805,  836,  472,   40,
+           21,  419,  611,  466,  -82,  467,  603,  468,   11,  573,
+          420,  439,  456,  281,  318,   31,   32,  421,  588,  432,
+          321,   33,  469,  418, -414,  458,  322,  351,  352,  464,
+          851,  629,  837,  805, -505,  472,   40,   21,  419,  654,
+          466,   38,  467,   24,  468,    0,    0,  420,  319,    0,
+         -405,    0,   31,   32,  421,  245,  312,  314,   33,  469,
+         -506,    0,    0, 1097,  351,  352, 1143,  819,  629,    0,
+            0,  527,  472,  213,  214,    6,    7,   12,   14,  215,
+          363,  216, -415,  558,  789, -221,  830,    0,    0,  747,
+            0,    0,    0,  207,   39,  652,  653,  758,  806,  814,
+          793, 1086, 1087,  808,  819,  629,  213,  214,  867, 1088,
+          858,  859,  215,  791,  216,  852,  849,  847,  925,  926,
+          923,  813,  797,  799,  801,  804,  207,  922,  756,  757,
+          924,  287,   78,  331, 1086, 1087,  353,  630,  634,  636,
+          638,  639, 1088,  642,  644,  645,  647,  648,  631, 1142,
+         1211, 1213,  755,  834,  754,  833, 1212,  554,  832, 1092,
+         1093, 1094, 1095, 1089, 1090,  388, 1048,  824, 1036,  831,
+         1037, 1096, 1091,  822,  931,  856,  857,  451, 1210, 1179,
+            0,  217, 1177, 1162, 1175, 1077,  906, 1183, 1173,    0,
+          554,   26, 1092, 1093, 1094, 1095, 1089, 1090,  388,   29,
+           37,   42,   76,   77, 1096, 1091,  208,  284,  288,  289,
+          304,  305,  306,  307,  217,  335,  406,  408,    0, -220,
+           16,   17,   18,  383,  448,  455,  457,  462,  548,  620,
+         1039, 1042,  896, 1102, 1038, 1014,  559, 1013, 1079,    0,
+            0, -424, 1032,    0, 1043, 1045, 1044, 1047, 1046, 1061,
+         1176, 1161, 1157, 1174, 1076, 1208, 1103, 1156,  595
     );
 
     protected $actionCheck = array(
-            2,    3,    4,    5,    6,   13,    8,    9,   10,   11,
-           12,   32,   33,   34,   35,   36,   37,   38,   39,   40,
-            0,   42,   43,   44,   45,   46,   47,   48,   49,   50,
-           51,   52,   53,    8,    9,   10,   32,   33,   34,   35,
-           36,   37,   38,   39,   40,   12,   67,   68,   32,   33,
-           34,   35,   36,   55,   29,    8,   31,   32,   33,   34,
-           35,   36,   37,   38,   39,   40,   41,   69,   70,   71,
-           72,   73,   74,   75,    1,    7,   78,  114,  115,  116,
-          117,  118,  119,   85,   86,   87,   88,   89,   90,   91,
+            2,    3,    4,    5,    6,    7,   14,    9,   10,   11,
+           12,   13,   33,   34,   35,   36,   37,   38,   39,   40,
+           41,    0,   43,   44,   45,   46,   47,   48,   49,   50,
+           51,   52,   53,   54,    9,   10,   11,   33,   34,   35,
+           36,   37,   38,   39,   40,   41,    8,   68,   69,   33,
+           34,   35,   36,   37,   56,   30,    8,   32,   33,   34,
+           35,   36,   37,   38,   39,   40,   41,   42,   70,   71,
+           72,   73,   74,   75,   76,   13,    1,   79,  115,  116,
+          117,  118,  119,  120,   86,   87,   88,   89,   90,   91,
            92,   93,   94,   95,   96,   97,   98,   99,  100,  101,
           102,  103,  104,  105,  106,  107,  108,  109,  110,  111,
           112,  113,  114,  115,  116,  117,  118,  119,  120,  121,
-          122,  123,  124,  125,  126,  127,  128,  129,   80,  131,
-          132,  133,  134,  135,  136,  137,  138,  139,    2,    3,
-            4,    5,    6,  145,  146,  147,  154,   11,   12,  125,
-           14,   32,   33,   34,   35,   36,   37,   38,   39,   40,
-            7,   42,   43,   44,   45,   42,   43,   44,   45,   46,
-           47,   48,   49,   50,  105,  132,  133,  153,    1,   78,
-          111,   80,   80,  150,   48,   49,   68,    7,  145,  120,
-           54,  148,   56,   57,   58,   59,   60,   61,   62,   63,
-           64,   65,   66,  155,   68,   69,   70,   71,    8,    9,
-           10,   30,   76,   77,   78,  114,   80,    8,    9,   10,
-           84,  152,   36,  150,    1,   78,    8,    9,   10,   29,
-           13,   31,   32,   33,   34,   35,   36,    7,   29,  103,
-           31,   32,   33,   34,   35,   12,  145,   29,  130,  148,
-          114,    7,   12,  151,  153,   78,  155,  155,  122,  123,
-            7,  114,  115,  116,  117,  118,  119,  131,  132,  151,
-          134,  135,  136,  137,  138,  139,  140,   32,   33,   34,
-           35,  145,  146,  147,  148,    8,    9,   10,    7,  153,
-           80,  155,  156,   83,  158,   72,   73,   74,   75,    0,
-            1,   78,    8,    9,   10,   82,   29,  154,   85,   86,
-           87,   88,   89,   90,   91,   92,   93,   94,   13,   96,
-            8,    9,   10,  100,  101,  102,  103,    7,  151,  106,
-          107,  150,  155,  110,  154,  149,  113,  114,  115,  116,
-          154,   29,   30,   36,  121,    7,   12,  124,  125,  126,
-          127,    7,  142,  143,   15,   16,   17,   18,   19,   20,
-           21,   22,   23,   24,   25,   26,   27,   28,    7,   12,
-           36,   72,  154,  150,  151,  152,    1,   78,   51,   52,
-           53,   82,   55,  150,   85,   86,   87,    7,   89,   78,
-           91,    7,   93,   36,   67,   96,   57,   58,  154,  100,
-          101,  102,  103,  150,  105,  106,  107,    9,   10,  110,
-          111,   80,  113,  114,  115,  116,    8,    9,   10,    7,
-          121,   12,   30,  124,  125,  126,  127,   29,   32,   33,
-           34,   68,  132,  133,  157,  154,   68,   29,  131,   31,
-           32,   33,   34,   78,  145,  145,   81,   72,  148,  150,
-          151,  152,    1,   78,  154,   12,  145,   82,   68,  148,
-           85,   86,   87,  152,   89,  103,   91,  105,   93,  130,
-          150,   96,   97,   98,   99,  100,  101,  102,  103,    8,
-            9,  106,  107,  149,  153,  110,  155,   83,  113,  114,
-          115,  116,    8,    9,   10,   15,  121,   83,  130,  124,
-          125,  126,  127,   51,   52,   53,  149,    8,    9,   10,
-          148,  150,   68,   29,  151,   31,   32,   33,  145,   67,
-           68,  148,   79,   72,    7,  150,  151,  152,   29,   78,
-           31,   32,   12,   82,  150,    7,   85,   86,   87,   12,
-           89,  151,   91,  151,   93,  141,   15,   96,   97,   98,
-           99,  100,  101,  102,  103,  141,   36,  106,  107,  150,
-            1,  110,  150,   36,  113,  114,  115,  116,   15,    8,
-            9,   10,  121,    7,   13,  124,  125,  126,  127,    8,
-            9,   10,   15,    8,    9,   10,   48,   49,   50,   30,
-           29,   48,   49,   50,  148,  151,  103,  151,  105,    7,
-           29,  150,  151,  152,   29,   15,   31,   32,   33,   34,
-           35,   36,   37,   38,   39,   40,   41,   42,   43,   44,
-           45,   46,   47,   48,   49,   50,   51,   52,   53,   12,
-           55,   72,   10,   15,    1,   15,  151,   78,   29,  151,
-          155,   82,   67,  155,   85,   86,   87,   30,   89,   30,
-           91,   29,   93,   32,   33,   96,    8,    9,   10,  100,
-          101,  102,   30,   30,   30,  106,  107,    1,   30,  110,
-           67,   68,  113,  114,   73,   74,   30,   29,   73,   74,
-          121,   98,   99,   30,  108,  109,  150,  151,   32,  150,
-          151,  150,  151,   36,   55,   67,   30,   68,   68,   68,
-           75,   78,   78,   68,   68,   72,   69,   80,   68,  150,
-          151,   78,   68,   68,   88,   82,  103,  103,   85,   86,
-           87,   78,   89,  111,   91,   83,   93,   80,   87,   96,
-           80,  125,   83,  100,  101,  102,  125,  129,   72,  106,
-          107,    1,   90,  110,   78,   94,  113,  114,   82,   95,
-           92,   85,   86,   87,  121,   89,   95,   91,   95,   93,
-           95,   97,   96,  148,   97,  149,  100,  101,  102,   -1,
-           30,  112,  106,  107,    1,   -1,  110,   -1,   -1,  113,
-          114,   -1,   -1,  150,  151,  130,   -1,  121,  128,   -1,
-          128,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  130,  130,
-          130,   -1,  131,   30,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   72,  141,  141,   -1,  150,  151,   78,  144,
-          144,    1,   82,  144,  144,   85,   86,   87,  144,   89,
-          144,   91,  144,   93,  144,  148,   96,  148,  153,  148,
-          100,  101,  102,  148,  148,   72,  106,  107,  148,  148,
-          110,   78,  150,  113,  114,   82,  150,  150,   85,   86,
-           87,  121,   89,  150,   91,  150,   93,  150,  150,   96,
-          150,  150,  150,  100,  101,  102,  150,  150,  150,  106,
-          107,  150,  150,  110,  150,  150,  113,  114,  150,  150,
-          150,  151,   72,  150,  121,  150,  150,  150,   78,  150,
-          150,  150,   82,  150,  150,   85,   86,   87,  151,   89,
-          151,   91,  151,   93,  151,  151,   96,  151,   30,  151,
-          100,  101,  102,  150,  151,  151,  106,  107,  151,  151,
-          110,  151,  151,  113,  114,  151,   48,   49,  151,  151,
-          151,  121,   54,  152,   56,  152,  152,  152,  152,  152,
-          152,  152,  152,  152,  152,  152,   68,  152,  152,  152,
-          152,   48,   49,  152,   76,   77,  152,   54,   80,   56,
-          150,  151,   84,  152,  152,  152,  152,  152,  152,  152,
-          152,   68,  152,  152,  152,  152,  152,  152,  152,   76,
-           77,  153,  153,   80,  153,  153,  153,   84,  153,  153,
-          153,  153,  153,  153,  153,  153,  153,  153,  153,  153,
-          153,   -1,  154,  154,  154,  154,  154,  154,  154,  154,
-          132,  154,  134,  135,  136,  137,  138,  139,  140,  154,
-          154,  154,  154,  154,  146,  147,  154,  154,  154,  154,
-          154,  153,  155,  155,  154,  132,  154,  134,  135,  136,
-          137,  138,  139,  140,  156,  156,   -1,  157,  157,  146,
-          147,  157,  157,  157,  157,  157,  153,  157,  155,  157,
-           -1,  157,  157,  157,  157,  157,  157,   -1,  158
+          122,  123,  124,  125,  126,  127,  128,  129,  130,   31,
+          132,  133,  134,  135,  136,  137,  138,  139,  140,    3,
+            4,    5,    6,    7,  146,  147,  148,    8,   12,   13,
+          158,   15,   33,   34,   35,   36,   37,   38,   39,   40,
+           41,   14,   43,   44,   45,   46,   13,   16,   17,   18,
+           19,   20,   21,   22,   23,   24,   25,   26,   27,   28,
+           29,   33,   34,   35,   36,   49,   50,   13,    8,    8,
+           37,   55,   81,   57,   58,   59,   60,   61,   62,   63,
+           64,   65,   66,   67,  156,   69,   70,   71,   72,   58,
+           59,   37,   37,   77,   78,   79,  154,   81,    9,   10,
+           11,   85,    9,   10,   11,   79,   31,    1,    2,  154,
+          107,    9,   10,   11,  105,  112,  107,  126,    8,   30,
+           31,  105,    8,   30,  121,   32,   33,   34,   35,   36,
+           37,  115,   30,  155,   32,   33,   34,   35,   36,  123,
+          124,  115,  116,  117,  118,  119,  120,  115,  132,  133,
+          159,  135,  136,  137,  138,  139,  140,  141,   79,  156,
+          151,   82,  131,  147,  148,  133,  134,  151,  152,  153,
+            9,   10,   11,  157,    8,  159,  160,  158,  162,   73,
+           74,   75,   76,  150,   69,   79,    0,    1,    2,   83,
+          158,   30,   86,   87,   88,   89,   90,   91,   92,   93,
+           94,   95,    8,   97,  150,  150,   81,   81,  102,  103,
+          104,  105,   13,  158,  108,  109,    9,   10,   11,  158,
+          114,  115,  116,  117,    9,   10,   11,    8,  122,  154,
+            8,  125,  126,  127,  128,   43,   44,   45,   46,   47,
+           48,   49,   50,   51,   79,   30,  131,   32,   33,   34,
+           35,    8,    1,   81,    9,   10,   11,  132,   81,   73,
+          154,  155,  156,   37,  154,   79,    1,    2,  115,   83,
+          155,   81,   86,   87,   88,   30,   90,   69,   92,   80,
+           94,  155,  157,   97,  159,  159,  133,  134,  102,  103,
+          104,  105,    8,  107,  108,  109,    9,   10,  112,   70,
+          114,  115,  116,  117,    9,   10,   11,   81,  122,    8,
+           81,  125,  126,  127,  128,    8,  151,  152,  153,   10,
+           11,  156,  161,    8,  158,   30,   84,   32,   33,   34,
+           79,  159,  146,    8,  157,   79,  159,   84,   73,   30,
+          154,  155,  156,   13,   79,    1,    2,   69,   83,  159,
+          156,   86,   87,   88,   69,   90,   13,   92,  132,   94,
+           69,   81,   97,  155,   99,  100,  101,  102,  103,  104,
+          105,  115,    9,  108,  109,    9,   10,   11,   79,  114,
+          115,  116,  117,  157,  142,  159,  157,  122,  159,   13,
+          125,  126,  127,  128,    8,  142,   30,  154,   32,   33,
+           52,   53,   54,  158,   56,   30,  155,  151,  152,  153,
+          159,   14,   52,   53,   54,   81,   68,   73,   84,  154,
+          155,  156,  131,   79,   33,   34,   35,   83,   68,   69,
+           86,   87,   88,  155,   90,  155,   92,  157,   94,  159,
+          155,   97,  158,   99,  100,  101,  102,  103,  104,  105,
+           13,  152,  108,  109,   11,  154,    1,    2,  114,  115,
+          116,  117,    9,   10,   11,   16,  122,   14,   31,  125,
+          126,  127,  128,   30,    9,   10,   11,  143,  144,  154,
+            9,   10,   11,   30,  154,   16,   31,   49,   50,   51,
+           49,   50,   51,    1,    2,   30,   16,  154,  154,  155,
+          156,   30,   13,   32,   33,   34,   35,   36,   37,   38,
+           39,   40,   41,   42,   43,   44,   45,   46,   47,   48,
+           49,   50,   51,   52,   53,   54,   37,   56,   73,   13,
+            1,    2,   33,   34,   79,    9,   10,   11,   83,   68,
+          154,   86,   87,   88,  155,   90,   16,   92,  159,   94,
+          155,   16,   97,   37,  159,   16,   30,  102,  103,  104,
+           31,   68,   69,  108,  109,   73,   16,    1,    2,  114,
+          115,   79,  105,   31,  107,   83,   31,  122,   86,   87,
+           88,   33,   90,   31,   92,   31,   94,   74,   75,   97,
+           31,   74,   75,   31,  102,  103,  104,   31,  100,  101,
+          108,  109,   73,   56,    1,    2,  114,  115,   79,  154,
+          155,   37,   83,   69,  122,   86,   87,   88,   69,   90,
+           69,   92,   69,   94,  110,  111,   97,  154,  155,  154,
+          155,  102,  103,  104,   31,  154,  155,  108,  109,   73,
+           68,    1,    2,  114,  115,   79,  154,  155,   69,   83,
+           69,  122,   86,   87,   88,   69,   90,   69,   92,   70,
+           94,   76,   79,   97,   84,   81,   84,   89,  102,  103,
+          104,   31,   81,   81,  108,  109,   73,  112,   88,  115,
+          114,  115,   79,  154,  155,   91,   83,  126,  122,   86,
+           87,   88,   93,   90,   96,   92,   95,   94,   96,   99,
+           97,   96,   96,   96,  129,  102,  103,  104,   99,  105,
+          113,  108,  109,   73,  145,  105,  129,  114,  115,   79,
+          154,  155,  126,   83,  131,  122,   86,   87,   88,  156,
+           90,  154,   92,  157,   94,   -1,   -1,   97,  130,   -1,
+          145,   -1,  102,  103,  104,   31,  131,  131,  108,  109,
+          131,   -1,   -1,  142,  114,  115,  142,  154,  155,   -1,
+           -1,  149,  122,   49,   50,  145,  145,  145,  145,   55,
+          145,   57,  145,  149,  156,  158,  150,   -1,   -1,  151,
+           -1,   -1,   -1,   69,  154,  154,  154,  154,  154,  154,
+          154,   77,   78,  154,  154,  155,   49,   50,  154,   85,
+          154,  154,   55,  154,   57,  154,  154,  154,  154,  154,
+          154,  154,  154,  154,  154,  154,   69,  154,  154,  154,
+          154,  159,  155,  155,   77,   78,  155,  155,  155,  155,
+          155,  155,   85,  155,  155,  155,  155,  155,  155,  162,
+          156,  156,  156,  156,  156,  156,  156,  133,  156,  135,
+          136,  137,  138,  139,  140,  141,  156,  156,  156,  156,
+          156,  147,  148,  156,  156,  156,  156,  156,  156,  156,
+           -1,  157,  156,  156,  156,  156,  156,  156,  156,   -1,
+          133,  157,  135,  136,  137,  138,  139,  140,  141,  157,
+          157,  157,  157,  157,  147,  148,  157,  157,  157,  157,
+          157,  157,  157,  157,  157,  157,  157,  157,   -1,  158,
+          158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+          158,  158,  158,  158,  158,  158,  158,  158,  158,   -1,
+           -1,  160,  160,   -1,  161,  161,  161,  161,  161,  161,
+          161,  161,  161,  161,  161,  161,  161,  161,  161
     );
 
     protected $actionBase = array(
-            0,  223,  299,  375,  451,  102,  102,  311,  754,   -2,
-           -2,  147,   -2,   -2,   -2,  633,  740,  773,  740,  559,
-          666,  820,  820,  820,  186,  334,  334,  334,  357,  892,
-          443,   33,  233,  409,  617,  520,  527,  240,  240,  240,
-          240,  136,  136,  240,  240,  240,  240,  240,  240,  240,
-          240,  240,  240,  240,  240,  240,  240,  240,  240,  240,
-          240,  240,  240,  240,  240,  240,  240,  240,  240,  240,
-          240,  240,  240,  240,  240,  240,  240,  240,  240,  240,
-          240,  240,  240,  240,  240,  240,  240,  240,  240,  240,
-          240,  240,  240,  240,  240,  240,  240,  240,  240,  240,
-          240,  240,  240,  240,  240,  240,  240,  240,  240,  240,
-          240,  240,  240,  240,  240,  240,  240,  240,  240,  240,
-          240,  240,  240,  240,  240,  240,  240,  240,  240,  240,
-          240,  240,  240,  240,  240,  181,   73,  305,  217,  743,
-          745,  746,  747,  884,  665,  885,  823,  824,  653,  825,
-          826,  827,  828,  830,  822,  831,  919,  832,  575,  575,
-          575,  575,  575,  575,  575,  575,  575,  575,  575,  575,
-           47,  561,  218,  312,  277,  471,  648,  648,  648,  648,
-          648,  648,  648,  294,  294,  294,  294,  294,  294,  294,
-          294,  294,  294,  294,  294,  294,  294,  294,  294,  294,
-          294,  398,  571,  571,  571,  622,  888,  609,  913,  913,
-          913,  913,  913,  913,  913,  913,  913,  913,  913,  913,
-          913,  913,  913,  913,  913,  913,  913,  913,  913,  913,
-          913,  913,  913,  913,  913,  913,  913,  913,  913,  913,
-          913,  913,  913,  913,  913,  913,  913,  913,  913,  913,
-          913,  499,  -21,  -21,  484,  656,  408,  621,  209,  396,
-          200,   25,   25,   25,   25,   25,  245,   16,    4,    4,
-            4,    4,  339,  123,  123,  123,  123,  119,  119,  119,
-          119,   69,  307,  307,  671,  671,  637,  781,  538,  538,
-          543,  543,  101,  101,  101,  101,  101,  101,  101,  101,
-          101,  101,   24,  627,  857,  300,  300,  300,  300,  177,
-          177,  177,   43,  414,  673,  920,   43,  327,  327,  327,
-          452,  452,  452,  362,  649,  210,  331,  331,  331,  331,
-          210,  331,  331,  493,  493,  493,  485,  446,  642,  365,
-          488,  373,  390,  664,  814,  667,  821,  541,  690,  118,
-          700,  701,  887,  613,  887,  601,  605,  576,  676,  392,
-          850,   48,  181,  539,  444,  639,  749,  361,  751,  320,
-          384,  368,  536,  363,  244,  784,  753,  886,  890,  180,
-          670,  639,  639,  639,  153,  404,  787,  788,  363,   -8,
-          603,  603,  603,  603,  833,  789,  603,  603,  603,  603,
-          834,  835,  253,  412,  836,  281,  750,  623,  623,  624,
-          624,  623,  623,  623,  623,  650,  657,  623,  839,  685,
-          685,  624,  647,  624,  650,  657,  842,  842,  842,  842,
-          624,  657,  624,  624,  623,  624,  685,  685,  657,  637,
-          685,   68,  657,  660,  623,  662,  662,  842,  707,  713,
-          624,  624,  608,  685,  685,  685,  608,  657,  842,  612,
-          616,  338,  685,  842,  632,  647,  632,  612,  657,  632,
-          647,  647,  632,   20,  619,  629,  841,  843,  855,  759,
-          606,  611,  848,  849,  845,  847,  838,  646,  696,  715,
-          717,  480,  630,  631,  635,  636,  679,  640,  668,  613,
-          695,  628,  628,  628,  655,  680,  655,  628,  628,  628,
-          628,  628,  628,  628,  628,  900,  675,  688,  669,  641,
-          718,  531,  615,  663,  553,  761,  672,  696,  696,  793,
-          878,  863,  898,  899,  643,  850,  876,  655,  901,  702,
-          230,  567,  851,  791,  687,  689,  655,  852,  655,  763,
-          655,  879,  794,  645,  795,  696,  796,  628,  882,  904,
-          905,  906,  907,  908,  910,  912,  914,  644,  915,  720,
-          626,  864,  344,  846,  676,  684,  691,  721,  797,  380,
-          916,  798,  655,  655,  764,  757,  655,  766,  722,  706,
-          860,  726,  865,  917,  672,  867,  655,  614,  799,  918,
-          380,  634,  625,  858,  651,  727,  856,  883,  854,  768,
-          590,  618,  800,  801,  802,  638,  728,  861,  862,  859,
-          731,  774,  620,  777,  658,  803,  778,  853,  732,  805,
-          806,  877,  654,  695,  686,  659,  661,  652,  780,  807,
-          875,  734,  735,  738,  808,  739,  811,    0,    0,    0,
+            0,  226,  306,  385,  464,  285,  246,  246,  786,   -2,
+           -2,  146,   -2,   -2,   -2,  649,  723,  760,  723,  575,
+          686,  612,  612,  612,  175,  153,  153,  153,  174,  890,
+          319,   62,  450,  463,  557,  609,  636,  496,  496,  496,
+          496,  136,  136,  496,  496,  496,  496,  496,  496,  496,
+          496,  496,  496,  496,  496,  496,  496,  496,  496,  496,
+          496,  496,  496,  496,  496,  496,  496,  496,  496,  496,
+          496,  496,  496,  496,  496,  496,  496,  496,  496,  496,
+          496,  496,  496,  496,  496,  496,  496,  496,  496,  496,
+          496,  496,  496,  496,  496,  496,  496,  496,  496,  496,
+          496,  496,  496,  496,  496,  496,  496,  496,  496,  496,
+          496,  496,  496,  496,  496,  496,  496,  496,  496,  496,
+          496,  496,  496,  496,  496,  496,  496,  496,  496,  496,
+          496,  496,  496,  496,  496,  195,   75,  777,  517,  147,
+          778,  779,  780,  886,  727,  887,  832,  833,  682,  836,
+          837,  838,  839,  840,  831,  841,  907,  842,  591,  591,
+          591,  591,  591,  591,  591,  591,  591,  591,  591,  591,
+          483,  573,  365,  209,  281,  407,  646,  646,  646,  646,
+          646,  646,  646,  327,  327,  327,  327,  327,  327,  327,
+          327,  327,  327,  327,  327,  327,  327,  327,  327,  327,
+          327,  429,  834,  585,  585,  585,  563,  867,  867,  867,
+          867,  867,  867,  867,  867,  867,  867,  867,  867,  867,
+          867,  867,  867,  867,  867,  867,  867,  867,  867,  867,
+          867,  867,  867,  867,  867,  867,  867,  867,  867,  867,
+          867,  867,  867,  867,  867,  867,  867,  867,  867,  867,
+          495,  486,  -21,  -21,  415,  668,  335,  619,  222,  511,
+          213,   25,   25,   25,   25,   25,  148,   16,    4,    4,
+            4,    4,  151,  312,  312,  312,  312,  119,  119,  119,
+          119,  346,  346,  123,  245,  245,  349,  400,  297,  297,
+          297,  297,  297,  297,  297,  297,  297,  297,  111,  558,
+          558,  561,  561,  310,  152,  152,  152,  152,  704,  273,
+          273,  129,  371,  371,  371,  373,  734,  797,  376,  376,
+          376,  376,  376,  376,  468,  468,  468,  480,  480,  480,
+          702,  587,  454,  587,  454,  684,  748,  509,  748,  700,
+          199,  515,  803,  398,  720,  829,  729,  830,  601,  747,
+          235,  782,  724,  419,  782,  633,  637,  634,  419,  419,
+          715,   98,  863,  292,  195,  595,  405,  667,  781,  421,
+          732,  784,  363,  445,  411,  593,  328,  286,  744,  785,
+          888,  889,  181,  739,  667,  667,  667,  139,  362,  328,
+           -8,  613,  613,  613,  613,   48,  613,  613,  613,  613,
+          314,  230,  506,  404,  783,  703,  703,  712,  694,  852,
+          696,  696,  703,  711,  703,  712,  694,  854,  854,  854,
+          854,  703,  694,  703,  703,  703,  696,  696,  694,  709,
+          696,   38,  694,  695,  707,  707,  854,  751,  752,  703,
+          703,  728,  696,  696,  696,  728,  694,  854,  685,  746,
+          234,  696,  854,  665,  711,  665,  703,  685,  694,  665,
+          711,  711,  665,   21,  662,  664,  853,  855,  869,  792,
+          681,  716,  861,  862,  856,  860,  844,  679,  753,  754,
+          569,  669,  671,  673,  699,  740,  701,  735,  724,  692,
+          692,  692,  713,  741,  713,  692,  692,  692,  692,  692,
+          692,  692,  692,  893,  689,  745,  736,  710,  755,  589,
+          600,  793,  731,  738,  882,  875,  891,  892,  863,  880,
+          713,  894,  697,  180,  650,  864,  693,  788,  713,  865,
+          713,  794,  713,  883,  804,  708,  805,  806,  692,  884,
+          895,  896,  897,  898,  899,  900,  901,  902,  706,  903,
+          756,  698,  876,  339,  859,  715,  742,  725,  791,  759,
+          807,  342,  904,  808,  713,  713,  795,  787,  713,  796,
+          764,  750,  872,  766,  877,  905,  731,  726,  878,  713,
+          730,  809,  906,  342,  672,  705,  737,  721,  767,  870,
+          885,  868,  798,  655,  659,  810,  812,  820,  674,  769,
+          873,  874,  871,  771,  799,  670,  800,  719,  821,  801,
+          866,  772,  822,  823,  881,  718,  743,  717,  722,  714,
+          802,  824,  879,  773,  774,  775,  827,  776,  828,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,  136,  136,  136,
-          136,   -2,   -2,   -2,   -2,    0,    0,   -2,    0,    0,
-            0,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,    0,    0,  136,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,  136,
+          136,  136,  136,   -2,   -2,   -2,   -2,    0,    0,   -2,
+            0,    0,    0,  136,  136,  136,  136,  136,  136,  136,
           136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
+          136,  136,  136,  136,  136,  136,  136,  136,  136,    0,
+            0,  136,  136,  136,  136,  136,  136,  136,  136,  136,
           136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
           136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
           136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
@@ -538,173 +540,164 @@ class Php5 extends \PhpParser\ParserAbstract
           136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
           136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
           136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  575,  575,  575,  575,  575,  575,  575,  575,  575,
-          575,  575,  575,  575,  575,  575,  575,  575,  575,  575,
-          575,  575,  575,  575,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,  575,  -21,  -21,  -21,
-          -21,  575,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  575,
-          575,  575,  575,  575,  575,  575,  575,  575,  575,  575,
-          575,  575,  575,  575,  575,  575,  575,  -21,  575,  575,
-          575,  -21,  101,  -21,  101,  101,  101,  101,  101,  101,
-          101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-          101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-          101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-          101,  101,  101,  101,  101,  101,  101,  575,    0,    0,
-          575,  -21,  575,  -21,  575,  -21,  575,  575,  575,  575,
-          575,  575,  -21,  -21,  -21,  -21,  -21,  -21,    0,  327,
-          327,  327,  327,  -21,  -21,  -21,  -21,  -37,  101,  101,
-          101,  101,  101,  101,  327,  327,  452,  452,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,  101,  -37,
-          101,  623,  623,  623,  623,  647,  647,  647,  623,  210,
-          210,  210,  623,    0,    0,    0,    0,    0,    0,  623,
-          210,    0,  101,  101,  101,  101,    0,  101,  101,  623,
-          623,  623,  647,  623,  210,  647,  647,  623,  685,  583,
-          583,  583,  583,  380,  363,    0,  623,  623,  647,  647,
-          647,    0,    0,    0,  685,    0,  624,    0,    0,    0,
-            0,  628,  230,    0,  528,    0,    0,    0,    0,    0,
-            0,  643,  528,  592,  592,    0,  644,  628,  628,  628,
-            0,    0,  643,  643,    0,    0,    0,    0,    0,    0,
-          566,  643,    0,    0,    0,    0,  566,  517,    0,    0,
-          517,    0,  380
+          136,  136,  136,  591,  591,  591,  591,  591,  591,  591,
+          591,  591,  591,  591,  591,  591,  591,  591,  591,  591,
+          591,  591,  591,  591,  591,  591,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,  591,  -21,
+          -21,  -21,  -21,  591,  -21,  -21,  -21,  -21,  -21,  -21,
+          -21,  591,  591,  591,  591,  591,  591,  591,  591,  591,
+          591,  591,  591,  591,  591,  591,  591,  591,  591,  -21,
+          376,  591,  591,  591,  -21,  376,  376,  376,  376,  376,
+          376,  376,  376,  376,  376,  376,  376,  376,  376,  376,
+          376,  376,  376,  376,  376,  376,  376,  376,  376,  376,
+          376,  376,  376,  376,  376,  376,  376,  376,  376,  376,
+          376,  376,  376,  376,  376,  376,  376,  376,  -21,  591,
+            0,    0,  591,  -21,  591,  -21,  591,  -21,  591,  591,
+          591,  591,  591,  591,  -21,  -21,  -21,  -21,  -21,  -21,
+            0,  468,  468,  468,  468,  -21,  -21,  -21,  -21,  376,
+          376,  -37,  376,  376,  376,  376,  376,  376,  376,  376,
+          376,  376,  376,  376,  376,  376,  376,  468,  468,  480,
+          480,  376,  376,  376,  376,  376,  -37,  376,  376,  419,
+          711,  711,  711,  454,  454,  454,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,  454,  419,
+            0,  419,    0,  376,  419,  711,  419,  454,  711,  711,
+          419,  696,  618,  618,  618,  618,  342,  328,    0,  711,
+          711,    0,  711,    0,    0,    0,    0,    0,  696,    0,
+          703,    0,    0,    0,    0,  692,  180,    0,  725,  427,
+            0,    0,    0,    0,    0,    0,  725,  427,  435,  435,
+            0,  706,  692,  692,  692,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,  342
     );
 
     protected $actionDefault = array(
             3,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,  533,  533,  488,32767,32767,
+        32767,32767,32767,32767,32767,  534,  534,  489,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,  293,  293,  293,
-        32767,32767,32767,  521,  521,  521,  521,  521,  521,  521,
-          521,  521,  521,  521,32767,32767,32767,32767,32767,  376,
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,  522,  522,  522,  522,  522,  522,  522,
+          522,  522,  522,  522,32767,32767,32767,32767,32767,32767,
+          376,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,  382,  538,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,  382,  539,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,  357,  358,
-          360,  361,  292,  541,  522,  241,  383,  537,  291,  243,
-          321,  492,32767,32767,32767,  323,  120,  252,  197,  491,
+          360,  361,  292,  542,  523,  241,  383,  538,  291,  243,
+          321,  493,32767,32767,32767,  323,  120,  252,  197,  492,
           123,  290,  228,  375,  377,  322,  297,  302,  303,  304,
           305,  306,  307,  308,  309,  310,  311,  312,  313,  314,
-          296,  448,  354,  353,  352,  450,32767,  449,  485,  485,
-          488,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+          296,  449,32767,  354,  353,  352,  451,  486,  486,  489,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,  319,  476,  475,  320,  446,  324,  447,  326,  451,
-          325,  342,  343,  340,  341,  344,  453,  452,  469,  470,
-          467,  468,  295,  345,  346,  347,  348,  471,  472,  473,
-          474,  276,32767,32767,  532,  532,32767,32767,  333,  334,
-          460,  461,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,  277,32767,  232,  232,  232,  232,32767,
-        32767,32767,  232,32767,32767,32767,32767,  328,  329,  327,
-          455,  456,  454,32767,  422,32767,32767,32767,32767,32767,
-          424,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,  493,32767,32767,32767,32767,32767,  506,  411,
-        32767,32767,32767,  404,32767,  216,  218,  165,  479,32767,
-        32767,32767,32767,32767,  511,  338,32767,32767,32767,32767,
-        32767,  548,32767,  506,32767,32767,32767,32767,32767,32767,
-          351,  330,  331,  332,32767,32767,32767,32767,  510,  504,
-          463,  464,  465,  466,32767,32767,  457,  458,  459,  462,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,  169,32767,  419,  425,
-          425,32767,32767,32767,32767,  169,32767,32767,32767,32767,
-        32767,  169,32767,32767,32767,32767,  509,  508,  169,32767,
-          405,  487,  169,  182,32767,  180,  180,32767,  202,  202,
-        32767,32767,  184,  480,  499,32767,  184,  169,32767,  393,
-          171,  487,32767,32767,  234,32767,  234,  393,  169,  234,
-        32767,32767,  234,32767,   85,  429,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,  406,32767,
-        32767,32767,  372,  373,  482,  495,32767,  496,32767,  404,
-        32767,  336,  337,  339,  316,32767,  318,  362,  363,  364,
-          365,  366,  367,  368,  370,32767,  409,32767,  412,32767,
-        32767,32767,   87,  112,  251,32767,  546,   87,  407,32767,
-        32767,  300,  546,32767,32767,32767,32767,  540,32767,32767,
-          294,32767,32767,32767,   87,   87,  247,32767,  167,32767,
-          530,32767,  547,32767,  504,  408,32767,  335,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,  505,32767,32767,
-        32767,32767,  223,32767,  442,32767,   87,32767,32767,  183,
-        32767,32767,  298,  242,32767,32767,  539,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,  168,32767,32767,32767,
-          185,32767,32767,  504,32767,32767,32767,32767,32767,32767,
-        32767,  289,32767,32767,32767,32767,32767,32767,32767,  504,
-        32767,32767,  227,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,   85,   60,32767,  270,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,  125,  125,    3,
-          125,  125,  254,    3,  254,  125,  254,  254,  125,  125,
-          125,  125,  125,  125,  125,  125,  125,  125,  210,  213,
-          202,  202,  162,  125,  125,  262
+          450,  319,  477,  476,  320,  447,  324,  448,  326,  452,
+          325,  342,  343,  340,  341,  344,  454,  453,  470,  471,
+          468,  469,  295,  345,  346,  347,  348,  472,  473,  474,
+          475,32767,32767,  276,  533,  533,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,32767,  333,
+          334,  461,  462,32767,  232,  232,  232,  232,  277,  232,
+        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,  328,  329,  327,  456,  457,  455,
+          423,32767,32767,32767,  425,32767,32767,32767,32767,32767,
+        32767,32767,32767,  494,32767,32767,32767,32767,32767,  507,
+          412,32767,  404,32767,32767,  216,  218,  165,32767,32767,
+          480,32767,32767,32767,32767,32767,  512,  338,32767,32767,
+          114,32767,32767,32767,  549,32767,  507,32767,  114,32767,
+        32767,32767,32767,  351,  330,  331,  332,32767,32767,  511,
+          505,  464,  465,  466,  467,32767,  458,  459,  460,  463,
+        32767,32767,32767,32767,32767,32767,32767,32767,  169,  420,
+          426,  426,32767,32767,32767,32767,  169,32767,32767,32767,
+        32767,32767,  169,32767,32767,32767,  510,  509,  169,32767,
+          405,  488,  169,  182,  180,  180,32767,  202,  202,32767,
+        32767,  184,  481,  500,32767,  184,  169,32767,  393,  171,
+          488,32767,32767,  234,32767,  234,32767,  393,  169,  234,
+        32767,32767,  234,32767,  406,  430,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+        32767,  372,  373,  483,  496,32767,  497,32767,  404,  336,
+          337,  339,  316,32767,  318,  362,  363,  364,  365,  366,
+          367,  368,  370,32767,  410,32767,  413,32767,32767,32767,
+          251,32767,  547,32767,32767,  300,  547,32767,32767,32767,
+          541,32767,32767,  294,32767,32767,32767,32767,  247,32767,
+          167,32767,  531,32767,  548,32767,  505,32767,  335,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,  506,32767,
+        32767,32767,32767,  223,32767,  443,32767,  114,32767,32767,
+        32767,  183,32767,32767,  298,  242,32767,32767,  540,32767,
+        32767,32767,32767,32767,32767,32767,32767,  112,32767,  168,
+        32767,32767,32767,  185,32767,32767,  505,32767,32767,32767,
+        32767,32767,32767,32767,  289,32767,32767,32767,32767,32767,
+        32767,32767,  505,32767,32767,  227,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,  406,32767,  270,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,32767,  125,
+          125,    3,  125,  125,  254,    3,  254,  125,  254,  254,
+          125,  125,  125,  125,  125,  125,  125,  125,  125,  125,
+          210,  213,  202,  202,  162,  125,  125,  262
     );
 
     protected $goto = array(
-          165,  138,  138,  138,  165,  143,  146,  139,  140,  141,
+          165,  139,  139,  139,  165,  143,  146,  140,  141,  142,
           148,  186,  167,  162,  162,  162,  162,  143,  143,  164,
           164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
-          158,  159,  160,  161,  183,  137,  184,  501,  502,  365,
-          503,  507,  508,  509,  510,  511,  512,  513,  514,  977,
-          142,  163,  144,  145,  147,  170,  175,  185,  202,  251,
+          137,  158,  159,  160,  161,  183,  138,  184,  489,  490,
+          367,  491,  495,  496,  497,  498,  499,  500,  501,  502,
+          959,  163,  144,  145,  147,  170,  175,  185,  203,  251,
           254,  256,  258,  260,  261,  262,  263,  264,  265,  273,
-          274,  275,  276,  288,  289,  317,  318,  319,  381,  382,
-          383,  557,  187,  188,  189,  190,  191,  192,  193,  194,
+          274,  275,  276,  299,  300,  324,  325,  326,  384,  385,
+          386,  538,  187,  188,  189,  190,  191,  192,  193,  194,
           195,  196,  197,  198,  199,  200,  149,  150,  151,  166,
-          152,  168,  153,  203,  169,  154,  155,  156,  204,  157,
-          135,  634,  575,  760,  575,  575,  575,  575,  575,  575,
-          575,  575,  575,  575,  575,  575,  575,  575,  575,  575,
-          575,  575,  575,  575,  575,  575,  575,  575,  575,  575,
-          575,  575,  575,  575,  575,  575,  575,  575,  575,  575,
-          575,  575,  575,  575,  575,  575,  575, 1116,  766, 1116,
-         1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
-         1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
-         1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
-         1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
-         1116, 1116,  505,  505,  505,  505,  505,  505,  516,  642,
-          516,  767,  505,  505,  505,  505,  505,  505,  505,  505,
-          505,  505,  517,  797,  517,  898,  898, 1207, 1207,  531,
-          589,  617,  862,  862,  862,  862,  173,  857,  863, 1092,
-         1091,  176,  177,  178,  390,  391,  392,  393,  172,  201,
-          205,  207,  255,  257,  259,  266,  267,  268,  269,  270,
-          271,  277,  278,  279,  280,  290,  291,  320,  321,  322,
-          396,  397,  398,  399,  174,  179,  252,  253,  180,  181,
-          182,  389,  619,  550,  550,  582,  546,  598,  765,  613,
-          614,  548,  548,  504,  506,  537,  554,  583,  586,  596,
-          603,  884,  866,  864,  866,  668,  828,  519,  893,  888,
-          574,  344,  574,  574,  574,  574,  574,  574,  574,  574,
-          574,  574,  574,  574,  574,  574,  574,  574,  574,  574,
-          574,  574,  574,  574,  574,  574,  574,  574,  574,  574,
-          574,  574,  574,  574,  574,  574,  574,  574,  574,  574,
-          574,  574,  574,  574,  574,  559,  560,  561,  562,  563,
-          564,  565,  566,  568,  599,  522,  558,  330,  315, 1219,
-         1219,  530,  592,  595,  640,  527,  527,  527,  868,  527,
-          600,  347,  406,  530,  530, 1219,  440,  440,  440,  440,
-          440,  440,  545,  527,  551,  954,  440,  440,  440,  440,
-          440,  440,  440,  440,  440,  440, 1081, 1211, 1081,  905,
-          905,  905,  905,    3,    4,  623,  905,  955,  626,  556,
-          905,  363, 1185,  581, 1185,  916,  371,  371,  371,  366,
-         1081, 1081, 1081, 1081,  790, 1081, 1081,  371,  371, 1184,
-          607, 1184, 1177,  371, 1165,  471, 1201, 1201, 1201,  527,
-          527,  371, 1233,  544,  576,  527,  527,  618, 1074,  527,
-         1204,  790,  790,  378, 1025,  922,  524,  922,  518,  902,
-          518,  911,  350, 1183,  975,  400,  528,  543,  786,  669,
-          570,  372,  376,  920,  604,  784,  555,  895,  624,  625,
-          891,  629,  630,  637,  639,  644,  646,  453,  455,  947,
-          645,  673, 1097,  404, 1117,  627,  945, 1199, 1199, 1199,
-         1035,   19,   15,  359, 1218, 1218, 1067,  872,  783,  783,
-          794,  963,  791,  791,  791,  793, 1072,  925,  782,  456,
-         1218,  569,  345,  346,  360,  524, 1077, 1078, 1221, 1162,
-         1074,  535,   23,  587,  469,  547,    0,  615,  373,  373,
-          373,    0,    0, 1075, 1176, 1075,    0,    0,  542,    0,
-          460,    0, 1076,    0,    0,    0,    0,    0,    0,    0,
-            0,   13,    0,    0,    0,  373,    0,    0,  622,  388,
-            0,    0,    0, 1073,  631,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,  521,  541,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,  521,
-            0,  541,    0,    0,    0,    0,    0,  536,  520,    0,
-          525,  443,    0,  445,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,  789, 1226
+          152,  168,  153,  204,  169,  154,  155,  156,  205,  157,
+          135,  616,  556,  574,  578,  622,  624,  556,  556,  556,
+          556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
+          556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
+          556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
+          556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
+         1099,  515,  345,  571,  600, 1099, 1099, 1099, 1099, 1099,
+         1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099,
+         1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099,
+         1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099,
+         1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099,  504, 1202,
+         1202, 1075, 1074,  504,  540,  541,  542,  543,  544,  545,
+          546,  547,  549,  582,    3,    4,  173, 1202,  844,  844,
+          844,  844,  839,  845,  176,  177,  178,  391,  392,  393,
+          394,  172,  201,  206,  250,  255,  257,  259,  266,  267,
+          268,  269,  270,  271,  277,  278,  279,  280,  301,  302,
+          327,  328,  329,  396,  397,  398,  399,  174,  179,  252,
+          253,  180,  181,  182,  493,  493,  750,  493,  493,  493,
+          493,  493,  493,  493,  493,  493,  493,  493,  493,  493,
+          493,  505,  929,  442,  444,  627,  505,  751,  779, 1100,
+          610,  927,  880,  880,  765, 1190, 1190, 1168,  555,  775,
+          764,  743, 1168,  555,  555,  555,  555,  555,  555,  555,
+          555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
+          555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
+          555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
+          555,  555,  555,  555,  555,  555,  390,  602,  746,  532,
+          532,  564,  528,  530,  530,  492,  494,  520,  536,  565,
+          568,  579,  586,  810,  606,  506,  346,  347,  609,  850,
+          506,  365,  537,  746,  533,  746,  563,  430,  430,  375,
+          430,  430,  430,  430,  430,  430,  430,  430,  430,  430,
+          430,  430,  430,  430, 1063,  581,  957,  596,  597, 1063,
+          887,  887,  887,  887, 1160,  887,  887, 1182, 1182, 1182,
+          376,  376,  376,  749, 1063, 1063, 1063, 1063, 1063, 1063,
+          334, 1056,  317,  374,  374,  374,  866,  848,  846,  848,
+          650,  461,  507,  875,  870,  376, 1194,  368,  374,  389,
+          374,  898,  374, 1080,  583,  348,  404,  374, 1216,  590,
+          601, 1017,   19,   15,  361, 1148, 1187,  525,  936,  904,
+          510,  526,  904,  651,  551,  381, 1201, 1201,  587, 1007,
+          550,  877,  607,  608,  873,  612,  613,  619,  621,  626,
+          628,   23,  884,  937, 1201,  336,  598, 1059, 1060, 1204,
+          378, 1056,  557,  539,  893,  768,  766,  379,  514,  902,
+          509,  524,  655, 1057, 1159, 1057,  776,  509, 1167,  524,
+          514,  514, 1058, 1167, 1049,  907,  508, 1054,  511,  433,
+          434,  510, 1184, 1184, 1184,  854,  445,  945,  569, 1145,
+          459,  362,    0,    0,  773, 1209,    0,  518,    0,  519,
+            0,  529,    0,    0,    0,    0,    0, 1166,    0,    0,
+            0,  771,    0,    0,    0,  449,    0,    0,    0,    0,
+            0,    0,  605,    0,    0,    0,    0,   13, 1055,  614
     );
 
     protected $gotoCheck = array(
@@ -719,96 +712,89 @@ class Php5 extends \PhpParser\ParserAbstract
            42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
            42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
            42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-           42,   56,   66,    5,   66,   66,   66,   66,   66,   66,
+           42,   56,   66,   59,   59,   59,    8,   66,   66,   66,
            66,   66,   66,   66,   66,   66,   66,   66,   66,   66,
            66,   66,   66,   66,   66,   66,   66,   66,   66,   66,
            66,   66,   66,   66,   66,   66,   66,   66,   66,   66,
-           66,   66,   66,   66,   66,   66,   66,  124,   14,  124,
-          124,  124,  124,  124,  124,  124,  124,  124,  124,  124,
+           66,   66,   66,   66,   66,   66,   66,   66,   66,   66,
+          124,   99,   69,   39,   39,  124,  124,  124,  124,  124,
           124,  124,  124,  124,  124,  124,  124,  124,  124,  124,
           124,  124,  124,  124,  124,  124,  124,  124,  124,  124,
           124,  124,  124,  124,  124,  124,  124,  124,  124,  124,
-          124,  124,  115,  115,  115,  115,  115,  115,   66,    8,
-           66,   15,  115,  115,  115,  115,  115,  115,  115,  115,
-          115,  115,  115,   28,  115,   74,   74,   74,   74,   99,
-           39,   39,   66,   66,   66,   66,   26,   66,   66,  122,
-          122,   26,   26,   26,   26,   26,   26,   26,   26,   26,
+          124,  124,  124,  124,  124,  124,  124,  124,   66,  140,
+          140,  122,  122,   66,  108,  108,  108,  108,  108,  108,
+          108,  108,  108,  108,   29,   29,   26,  140,   66,   66,
+           66,   66,   66,   66,   26,   26,   26,   26,   26,   26,
            26,   26,   26,   26,   26,   26,   26,   26,   26,   26,
            26,   26,   26,   26,   26,   26,   26,   26,   26,   26,
            26,   26,   26,   26,   26,   26,   26,   26,   26,   26,
-           26,   50,   50,   50,   50,   50,   50,   64,   13,   64,
-           64,   50,   50,   50,   50,   50,   50,   50,   50,   50,
-           50,   13,   13,   13,   13,   13,   49,   13,   13,   13,
-           56,   69,   56,   56,   56,   56,   56,   56,   56,   56,
+           26,   26,   26,   26,  115,  115,   14,  115,  115,  115,
+          115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+          115,  115,    7,    7,    7,    7,  115,   15,   28,    7,
+            7,    7,   74,   74,   22,   74,   74,  116,   56,   22,
+           22,    5,  116,   56,   56,   56,   56,   56,   56,   56,
            56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
            56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
            56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
-           56,   56,   56,   56,   56,  108,  108,  108,  108,  108,
-          108,  108,  108,  108,  108,   10,   46,  123,  123,  140,
-          140,   46,   59,   59,   59,   10,   10,   10,   32,   10,
-           67,   67,   67,   46,   46,  140,   56,   56,   56,   56,
-           56,   56,   10,   10,  107,   95,   56,   56,   56,   56,
-           56,   56,   56,   56,   56,   56,   56,  138,   56,   56,
-           56,   56,   56,   29,   29,   60,   56,   95,   60,    2,
-           56,   60,  116,    2,  116,   81,   12,   12,   12,   45,
-           56,   56,   56,   56,   22,   56,   56,   12,   12,  117,
-          125,  117,   79,   12,  129,   56,  117,  117,  117,   10,
-           10,   12,   12,   10,   10,   10,   10,   48,   79,   10,
-          136,   22,   22,   47,  100,   12,   12,   12,  120,   76,
-          120,   78,   17,  117,   99,   21,   10,   31,   24,   31,
-           31,   11,   16,   82,   31,   23,   10,   31,   31,   31,
-           31,   31,   31,   31,   31,   31,   31,    7,    7,    7,
-            7,   71,   33,   20,    7,    7,    7,    8,    8,    8,
-           33,   33,   33,   33,  139,  139,  111,   68,   22,   22,
-           25,   97,   22,   22,   22,   22,  113,   83,   22,   62,
-          139,   33,   69,   69,   57,   12,   79,   79,  139,  128,
-           79,   57,   33,   63,  106,   57,   -1,   33,  121,  121,
-          121,   -1,   -1,   79,   79,   79,   -1,   -1,    8,   -1,
-           57,   -1,   79,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   57,   -1,   -1,   -1,  121,   -1,   -1,   12,  121,
-           -1,   -1,   -1,   12,   12,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,    8,    8,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,    8,
-           -1,    8,   -1,   -1,   -1,   -1,   -1,   99,    8,   -1,
-            8,    8,   -1,    8,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,    8,    8
+           56,   56,   56,   56,   56,   56,   50,   50,   10,   50,
+           50,   50,   50,   50,   50,   50,   50,   50,   50,   50,
+           50,   50,   50,   49,   60,  120,   69,   69,   60,   32,
+          120,   60,    2,   10,  107,   10,    2,   56,   56,   10,
+           56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
+           56,   56,   56,   56,   56,   64,   99,   64,   64,   56,
+           56,   56,   56,   56,   79,   56,   56,    8,    8,    8,
+          121,  121,  121,   13,   56,   56,   56,   56,   56,   56,
+          123,   79,  123,   12,   12,   12,   13,   13,   13,   13,
+           13,   56,   13,   13,   13,  121,  138,   45,   12,  121,
+           12,   81,   12,   33,   67,   67,   67,   12,   12,  125,
+           48,   33,   33,   33,   33,  129,  136,    8,   95,   12,
+           12,   31,   12,   31,   31,   47,  139,  139,   31,  100,
+           33,   31,   31,   31,   31,   31,   31,   31,   31,   31,
+           31,   33,   76,   95,  139,   17,   33,   79,   79,  139,
+           11,   79,   11,   46,   78,   24,   23,   16,   46,   82,
+            8,    8,   71,   79,   79,   79,   25,    8,  117,    8,
+           46,   46,   79,  117,  111,   83,    8,  113,    8,    8,
+            8,   12,  117,  117,  117,   68,   62,   97,   63,  128,
+          106,   57,   -1,   -1,    8,    8,   -1,   57,   -1,   99,
+           -1,   57,   -1,   -1,   -1,   -1,   -1,  117,   -1,   -1,
+           -1,    8,   -1,   -1,   -1,   57,   -1,   -1,   -1,   -1,
+           -1,   -1,   12,   -1,   -1,   -1,   -1,   57,   12,   12
     );
 
     protected $gotoBase = array(
-            0,    0, -230,    0,    0,  102,    0,  492,  198,    0,
-           42,  144,  113,  286,  156,  209,  132,  149,    0,    0,
-           95,  141,  111,  134,  143,   99,   30,    0,  213, -260,
-            0, -171,  358,   84,    0,    0,    0,    0,    0,  192,
-            0,    0,  -24,    0,    0,  389,  342,  170,  174,  288,
-           -1,    0,    0,    0,    0,    0,  104,  103,    0,   66,
-          -51,    0,   83,   87, -367,    0,  -94,   53,   94, -138,
-            0,  139,    0,    0,  -57,    0,  157,    0,  155,  100,
-            0,  397,  129,  105,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,  114,    0,   97,    0,  188,
-          160,    0,    0,    0,    0,    0,   77,  368,  311,    0,
-            0,   96,    0,  101,    0,  -80,  120,  137,    0,    0,
-          166,  239,  -71,   43,  -49,  231,    0,    0,   78,  234,
-            0,    0,    0,    0,    0,    0,  175,    0,  380,  200,
-           55,    0,    0
+            0,    0, -249,    0,    0,  300,    0,  287,  105,    0,
+           47,  164,  118,  421,  274,  295,  171,  184,    0,    0,
+            0,    0,  -49,  168,  172,  104,   24,    0,  288, -431,
+            0, -159,  359,   44,    0,    0,    0,    0,    0,  125,
+            0,    0,  -24,    0,    0,  407,  479,  186,  178,  355,
+           75,    0,    0,    0,    0,    0,  106,  119,    0, -192,
+          -81,    0,  101,   93, -231,    0,  -90,  135,  121, -276,
+            0,  148,    0,    0,   21,    0,  183,    0,  194,   71,
+            0,  423,  155,  112,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,  185,    0,  122,    0,  120,
+          176,    0,    0,    0,    0,    0,   83,  358,  170,    0,
+            0,  113,    0,  111,    0,   -7,    9,  220,    0,    0,
+           77,  108, -102,  100,  -42,  251,    0,    0,   89,  256,
+            0,    0,    0,    0,    0,    0,  181,    0,  419,  160,
+         -107,    0,    0
     );
 
     protected $gotoDefault = array(
-        -32768,  473,  677,    2,  678,  750,  758,  610,  487,  643,
-          488,  523, 1195,  803,  804,  805,  368,  414,  489,  367,
-          401,  394,  792,  785,  787,  795,  171,  402,  798,    1,
-          800,  529,  836, 1026,  355,  808,  356,  602,  810,  539,
-          812,  813,  136,  369,  370,  540,  490,  377,  590,  827,
-          272,  374,  829,  357,  830,  839,  358,  470,  465,  571,
-          621,  435,  452,  584,  578,  549, 1089,  579,  871,  343,
-          879,  674,  887,  890,  491,  572,  901,  457,  909, 1102,
-          384,  915,  921,  926,  281,  929,  415,  403,  597,  934,
-          935,    7,  939,  635,  636,    8,  303,  962,  611,  976,
-          420, 1045, 1047,  492,  493,  533,  464,  515,  538,  494,
-         1068,  446,  405, 1071,  495,  496,  436,  437, 1086,  349,
-         1170,  348,  454,  314, 1157,  593, 1121,  461, 1210, 1166,
-          342,  497,  498,  364, 1189,  379, 1205,  441, 1212, 1220,
-          338,  553,  580
+        -32768,  463,  659,    2,  660,  733,  741,  593,  477,  625,
+          577,  370, 1178,  785,  786,  787,  371,  358,  478,  369,
+          400,  395,  774,  767,  769,  777,  171,  401,  780,    1,
+          782,  513,  818, 1008,  355,  790,  356,  585,  792,  522,
+          794,  795,  136,  372,  373,  523,  479,  380,  572,  809,
+          272,  377,  811,  357,  812,  821,  360,  460,  454,  552,
+          604,  425,  441,  566,  560,  531, 1072,  561,  853,  344,
+          861,  656,  869,  872,  480,  553,  883,  446,  891, 1085,
+          387,  897,  903,  908,  283,  911,  407,  402,  580,  916,
+          917,    5,  921,  617,  618,    8,  308,  944,  594,  958,
+          411, 1027, 1029,  481,  482,  517,  453,  503,  521,  483,
+         1050,  435,  403, 1053,  484,  485,  426,  427, 1069,  350,
+         1153,  349,  443,  316, 1140,  575, 1104,  450, 1193, 1149,
+          343,  486,  487,  366, 1172,  382, 1188,  431, 1195, 1203,
+          339,  535,  562
     );
 
     protected $ruleToNonTerminal = array(
@@ -819,10 +805,10 @@ class Php5 extends \PhpParser\ParserAbstract
             5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
             5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
             5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-            5,    5,    5,    5,    6,    6,    6,    6,    6,    6,
-            6,    7,    7,    8,    9,   10,   10,   11,   12,    4,
-            4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
-           17,   17,   18,   18,   18,   18,   20,   20,   16,   16,
+            5,    5,    5,    5,    5,    6,    6,    6,    6,    6,
+            6,    6,    7,    7,    8,    9,   10,   10,   11,   11,
+           12,    4,    4,    4,    4,    4,    4,    4,    4,    4,
+            4,    4,   17,   17,   18,   18,   20,   20,   16,   16,
            21,   21,   22,   22,   23,   23,   24,   24,   19,   19,
            25,   27,   27,   28,   29,   29,   31,   30,   30,   30,
            30,   32,   32,   32,   32,   32,   32,   32,   32,   32,
@@ -852,22 +838,22 @@ class Php5 extends \PhpParser\ParserAbstract
            42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
            33,   33,   46,   46,  103,  103,  104,  104,  104,  104,
           110,   99,   99,  106,  106,  112,  112,  113,  114,  114,
-          114,  114,  114,  114,   66,   66,   56,   56,   56,  100,
-          100,  118,  118,  115,  115,  119,  119,  119,  119,  101,
-          101,  101,  105,  105,  105,  111,  111,  124,  124,  124,
+          114,  114,  114,  114,   66,   66,   56,   56,   56,   56,
+          100,  100,  118,  118,  115,  115,  119,  119,  119,  119,
+          101,  101,  101,  105,  105,  105,  111,  111,  124,  124,
           124,  124,  124,  124,  124,  124,  124,  124,  124,  124,
-           26,   26,   26,   26,   26,   26,  126,  126,  126,  126,
+          124,   26,   26,   26,   26,   26,   26,  126,  126,  126,
+          126,  126,  126,  126,  126,  126,  126,  126,  126,  126,
           126,  126,  126,  126,  126,  126,  126,  126,  126,  126,
           126,  126,  126,  126,  126,  126,  126,  126,  126,  126,
-          126,  126,  126,  126,  126,  126,  126,  126,  126,  109,
-          109,  102,  102,  102,  102,  125,  125,  128,  128,  127,
-          127,  129,  129,   50,   50,   50,   50,  131,  131,  130,
-          130,  130,  130,  130,  132,  132,  117,  117,  120,  120,
-          116,  116,  134,  133,  133,  133,  133,  121,  121,  121,
-          121,  108,  108,  122,  122,  122,  122,   74,  135,  135,
-          136,  136,  136,  107,  107,  137,  137,  138,  138,  138,
-          138,  138,  123,  123,  123,  123,  140,  141,  139,  139,
-          139,  139,  139,  139,  139,  142,  142,  142
+          109,  109,  102,  102,  102,  102,  125,  125,  128,  128,
+          127,  127,  129,  129,   50,   50,   50,   50,  131,  131,
+          130,  130,  130,  130,  130,  132,  132,  117,  117,  120,
+          120,  116,  116,  134,  133,  133,  133,  133,  121,  121,
+          121,  121,  108,  108,  122,  122,  122,  122,   74,  135,
+          135,  136,  136,  136,  107,  107,  137,  137,  138,  138,
+          138,  138,  138,  123,  123,  123,  123,  140,  141,  139,
+          139,  139,  139,  139,  139,  139,  142,  142,  142
     );
 
     protected $ruleToLength = array(
@@ -879,10 +865,10 @@ class Php5 extends \PhpParser\ParserAbstract
             1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
             1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
             1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-            1,    1,    1,    1,    1,    1,    3,    1,    1,    1,
-            1,    1,    1,    3,    5,    4,    3,    4,    2,    3,
-            1,    1,    7,    8,    6,    7,    3,    1,    3,    1,
-            3,    1,    1,    3,    1,    2,    1,    2,    3,    1,
+            1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+            1,    1,    1,    1,    1,    3,    5,    4,    3,    4,
+            2,    3,    1,    1,    7,    6,    3,    1,    3,    1,
+            3,    1,    1,    3,    1,    3,    1,    2,    3,    1,
             3,    3,    1,    3,    2,    0,    1,    1,    1,    1,
             1,    3,    5,    8,    3,    5,    9,    3,    2,    3,
             2,    3,    2,    3,    3,    3,    3,    1,    2,    2,
@@ -911,22 +897,22 @@ class Php5 extends \PhpParser\ParserAbstract
             2,    1,    1,    1,    3,    2,    1,    2,   10,   11,
             3,    3,    2,    4,    4,    3,    4,    4,    4,    4,
             7,    3,    2,    0,    4,    1,    3,    2,    2,    4,
-            6,    2,    2,    4,    1,    1,    1,    2,    3,    1,
-            1,    1,    1,    1,    1,    3,    3,    4,    4,    0,
-            2,    1,    0,    1,    1,    0,    1,    1,    1,    1,
-            1,    1,    1,    1,    1,    1,    1,    1,    3,    2,
-            1,    3,    1,    4,    3,    1,    3,    3,    3,    3,
+            6,    2,    2,    4,    1,    1,    1,    1,    1,    1,
+            1,    1,    1,    1,    1,    1,    3,    3,    4,    4,
+            0,    2,    1,    0,    1,    1,    0,    1,    1,    1,
+            1,    1,    1,    1,    1,    1,    1,    1,    1,    3,
+            2,    1,    3,    1,    4,    3,    1,    3,    3,    3,
             3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-            3,    3,    3,    2,    2,    2,    2,    3,    3,    3,
-            3,    3,    3,    3,    3,    5,    4,    4,    3,    1,
-            3,    1,    1,    3,    3,    0,    2,    0,    1,    3,
-            1,    3,    1,    1,    1,    1,    1,    6,    4,    3,
-            4,    2,    4,    4,    1,    3,    1,    2,    1,    1,
-            4,    1,    1,    3,    6,    4,    4,    4,    4,    1,
-            4,    0,    1,    1,    3,    1,    1,    4,    3,    1,
-            1,    1,    0,    0,    2,    3,    1,    3,    1,    4,
-            2,    2,    2,    2,    1,    2,    1,    1,    1,    4,
-            3,    3,    3,    6,    3,    1,    1,    1
+            3,    3,    3,    3,    2,    2,    2,    2,    3,    3,
+            3,    3,    3,    3,    3,    3,    5,    4,    4,    3,
+            1,    3,    1,    1,    3,    3,    0,    2,    0,    1,
+            3,    1,    3,    1,    1,    1,    1,    1,    6,    4,
+            3,    4,    2,    4,    4,    1,    3,    1,    2,    1,
+            1,    4,    1,    1,    3,    6,    4,    4,    4,    4,
+            1,    4,    0,    1,    1,    3,    1,    1,    4,    3,
+            1,    1,    1,    0,    0,    2,    3,    1,    3,    1,
+            4,    2,    2,    2,    2,    1,    2,    1,    1,    1,
+            4,    3,    3,    3,    6,    3,    1,    1,    1
     );
 
     protected function initReduceCallbacks() {
@@ -944,7 +930,7 @@ protected function initReduceCallbacks() {
                  $this->semValue = array();
             },
             4 => function ($stackPos) {
-                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createZeroLengthAttributes($startAttributes)); } else { $nop = null; };
+                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; };
             if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             5 => function ($stackPos) {
@@ -1176,7 +1162,7 @@ protected function initReduceCallbacks() {
                 $this->semValue = $this->semStack[$stackPos];
             },
             81 => function ($stackPos) {
-                 $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                $this->semValue = $this->semStack[$stackPos];
             },
             82 => function ($stackPos) {
                  $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
@@ -1188,73 +1174,73 @@ protected function initReduceCallbacks() {
                  $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             85 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             86 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             87 => function ($stackPos) {
                  $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             88 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             89 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Name(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             90 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\Variable(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             91 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             92 => function ($stackPos) {
-                 $this->semValue = new Stmt\HaltCompiler($this->lexer->handleHaltCompiler(), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             93 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+            },
+            94 => function ($stackPos) {
+                 $this->semValue = new Stmt\HaltCompiler($this->lexer->handleHaltCompiler(), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            95 => function ($stackPos) {
                  $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos-(3-2)], null, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON);
             $this->checkNamespace($this->semValue);
             },
-            94 => function ($stackPos) {
+            96 => function ($stackPos) {
                  $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos-(5-2)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
             $this->checkNamespace($this->semValue);
             },
-            95 => function ($stackPos) {
+            97 => function ($stackPos) {
                  $this->semValue = new Stmt\Namespace_(null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
             $this->checkNamespace($this->semValue);
             },
-            96 => function ($stackPos) {
-                 $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(3-2)], Stmt\Use_::TYPE_NORMAL, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
-            },
-            97 => function ($stackPos) {
-                 $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
-            },
             98 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(3-2)], Stmt\Use_::TYPE_NORMAL, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             99 => function ($stackPos) {
-                 $this->semValue = new Stmt\Const_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             100 => function ($stackPos) {
-                 $this->semValue = Stmt\Use_::TYPE_FUNCTION;
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             101 => function ($stackPos) {
-                 $this->semValue = Stmt\Use_::TYPE_CONSTANT;
+                 $this->semValue = new Stmt\Const_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             102 => function ($stackPos) {
-                 $this->semValue = new Stmt\GroupUse(new Name($this->semStack[$stackPos-(7-3)], $this->startAttributeStack[$stackPos-(7-3)] + $this->endAttributeStack[$stackPos-(7-3)]), $this->semStack[$stackPos-(7-6)], $this->semStack[$stackPos-(7-2)], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
+                 $this->semValue = Stmt\Use_::TYPE_FUNCTION;
             },
             103 => function ($stackPos) {
-                 $this->semValue = new Stmt\GroupUse(new Name($this->semStack[$stackPos-(8-4)], $this->startAttributeStack[$stackPos-(8-4)] + $this->endAttributeStack[$stackPos-(8-4)]), $this->semStack[$stackPos-(8-7)], $this->semStack[$stackPos-(8-2)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
+                 $this->semValue = Stmt\Use_::TYPE_CONSTANT;
             },
             104 => function ($stackPos) {
-                 $this->semValue = new Stmt\GroupUse(new Name($this->semStack[$stackPos-(6-2)], $this->startAttributeStack[$stackPos-(6-2)] + $this->endAttributeStack[$stackPos-(6-2)]), $this->semStack[$stackPos-(6-5)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-6)], $this->semStack[$stackPos-(7-2)], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
             },
             105 => function ($stackPos) {
-                 $this->semValue = new Stmt\GroupUse(new Name($this->semStack[$stackPos-(7-3)], $this->startAttributeStack[$stackPos-(7-3)] + $this->endAttributeStack[$stackPos-(7-3)]), $this->semStack[$stackPos-(7-6)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-5)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
             },
             106 => function ($stackPos) {
                  $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
@@ -1281,10 +1267,10 @@ protected function initReduceCallbacks() {
                  $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(3-3));
             },
             114 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(1-1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(1-1));
             },
             115 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(3-3));
             },
             116 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)]; $this->semValue->type = Stmt\Use_::TYPE_NORMAL;
@@ -1317,7 +1303,7 @@ protected function initReduceCallbacks() {
                  $this->semValue = array();
             },
             126 => function ($stackPos) {
-                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createZeroLengthAttributes($startAttributes)); } else { $nop = null; };
+                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; };
             if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             127 => function ($stackPos) {
@@ -1715,7 +1701,7 @@ protected function initReduceCallbacks() {
                  $this->semValue = array();
             },
             255 => function ($stackPos) {
-                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createZeroLengthAttributes($startAttributes)); } else { $nop = null; };
+                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; };
             if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             256 => function ($stackPos) {
@@ -2181,13 +2167,13 @@ protected function initReduceCallbacks() {
                  $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             407 => function ($stackPos) {
-                 $this->semValue = new Name\FullyQualified($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             408 => function ($stackPos) {
-                 $this->semValue = new Name\Relative($this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Name\FullyQualified(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             409 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Name\Relative(substr($this->semStack[$stackPos-(1-1)], 10), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             410 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
@@ -2205,243 +2191,243 @@ protected function initReduceCallbacks() {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             415 => function ($stackPos) {
-                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             416 => function ($stackPos) {
                  $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             417 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             418 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             419 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             420 => function ($stackPos) {
                  $this->semValue = null;
             },
             421 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = null;
             },
             422 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             423 => function ($stackPos) {
-                 $this->semValue = array(new Scalar\EncapsedStringPart(Scalar\String_::parseEscapeSequences($this->semStack[$stackPos-(1-1)], '`', false), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes));
+                 $this->semValue = array();
             },
             424 => function ($stackPos) {
-                 foreach ($this->semStack[$stackPos-(1-1)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', false); } }; $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = array(new Scalar\EncapsedStringPart(Scalar\String_::parseEscapeSequences($this->semStack[$stackPos-(1-1)], '`', false), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes));
             },
             425 => function ($stackPos) {
-                 $this->semValue = array();
+                 foreach ($this->semStack[$stackPos-(1-1)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', false); } }; $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             426 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = array();
             },
             427 => function ($stackPos) {
-                 $this->semValue = $this->parseLNumber($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes, true);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             428 => function ($stackPos) {
-                 $this->semValue = new Scalar\DNumber(Scalar\DNumber::parse($this->semStack[$stackPos-(1-1)]), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->parseLNumber($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes, true);
             },
             429 => function ($stackPos) {
-                 $attrs = $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes; $attrs['kind'] = ($this->semStack[$stackPos-(1-1)][0] === "'" || ($this->semStack[$stackPos-(1-1)][1] === "'" && ($this->semStack[$stackPos-(1-1)][0] === 'b' || $this->semStack[$stackPos-(1-1)][0] === 'B')) ? Scalar\String_::KIND_SINGLE_QUOTED : Scalar\String_::KIND_DOUBLE_QUOTED);
-            $this->semValue = new Scalar\String_(Scalar\String_::parse($this->semStack[$stackPos-(1-1)], false), $attrs);
+                 $this->semValue = new Scalar\DNumber(Scalar\DNumber::parse($this->semStack[$stackPos-(1-1)]), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             430 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Line($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $attrs = $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes; $attrs['kind'] = ($this->semStack[$stackPos-(1-1)][0] === "'" || ($this->semStack[$stackPos-(1-1)][1] === "'" && ($this->semStack[$stackPos-(1-1)][0] === 'b' || $this->semStack[$stackPos-(1-1)][0] === 'B')) ? Scalar\String_::KIND_SINGLE_QUOTED : Scalar\String_::KIND_DOUBLE_QUOTED);
+            $this->semValue = new Scalar\String_(Scalar\String_::parse($this->semStack[$stackPos-(1-1)], false), $attrs);
             },
             431 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\File($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Line($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             432 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Dir($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\File($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             433 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Class_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Dir($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             434 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Trait_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Class_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             435 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Method($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Trait_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             436 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Function_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Method($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             437 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Namespace_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Function_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             438 => function ($stackPos) {
-                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], false);
+                 $this->semValue = new Scalar\MagicConst\Namespace_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             439 => function ($stackPos) {
-                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(2-1)], '', $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(2-2)] + $this->endAttributeStack[$stackPos-(2-2)], false);
+                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], false);
             },
             440 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(2-1)], '', $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(2-2)] + $this->endAttributeStack[$stackPos-(2-2)], false);
             },
             441 => function ($stackPos) {
-                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             442 => function ($stackPos) {
-                 $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             443 => function ($stackPos) {
-                 $this->semValue = new Expr\Array_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             444 => function ($stackPos) {
-                 $this->semValue = new Expr\Array_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Array_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             445 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\Array_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             446 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             447 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             448 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             449 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             450 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             451 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             452 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             453 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             454 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             455 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             456 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             457 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             458 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             459 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             460 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             461 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             462 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             463 => function ($stackPos) {
-                 $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             464 => function ($stackPos) {
-                 $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             465 => function ($stackPos) {
-                 $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             466 => function ($stackPos) {
-                 $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             467 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             468 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             469 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             470 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             471 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             472 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             473 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             474 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             475 => function ($stackPos) {
-                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(5-1)], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             476 => function ($stackPos) {
-                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(4-1)], null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(5-1)], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
             477 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(4-1)], null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             478 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             479 => function ($stackPos) {
-                 $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             480 => function ($stackPos) {
-                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             481 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             482 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             483 => function ($stackPos) {
-                 $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED;
-            foreach ($this->semStack[$stackPos-(3-2)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', true); } }; $this->semValue = new Scalar\Encapsed($this->semStack[$stackPos-(3-2)], $attrs);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             484 => function ($stackPos) {
-                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], true);
+                 $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED;
+            foreach ($this->semStack[$stackPos-(3-2)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', true); } }; $this->semValue = new Scalar\Encapsed($this->semStack[$stackPos-(3-2)], $attrs);
             },
             485 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], true);
             },
             486 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = array();
             },
             487 => function ($stackPos) {
-                $this->semValue = $this->semStack[$stackPos];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             488 => function ($stackPos) {
                 $this->semValue = $this->semStack[$stackPos];
             },
             489 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                $this->semValue = $this->semStack[$stackPos];
             },
             490 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             491 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             492 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             493 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             494 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
@@ -2453,61 +2439,61 @@ protected function initReduceCallbacks() {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             497 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             498 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
             },
             499 => function ($stackPos) {
-                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             500 => function ($stackPos) {
-                 $this->semValue = new Expr\MethodCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             501 => function ($stackPos) {
-                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\MethodCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             502 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             503 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             504 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             505 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             506 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             507 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             508 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             509 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             510 => function ($stackPos) {
-                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             511 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             512 => function ($stackPos) {
-                 $var = substr($this->semStack[$stackPos-(1-1)], 1); $this->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes) : $var;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             513 => function ($stackPos) {
-                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $var = substr($this->semStack[$stackPos-(1-1)], 1); $this->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes) : $var;
             },
             514 => function ($stackPos) {
-                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(6-1)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             515 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(6-1)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
             },
             516 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
@@ -2519,120 +2505,123 @@ protected function initReduceCallbacks() {
                  $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             519 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             520 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             521 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             522 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = null;
             },
             523 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             524 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             525 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             526 => function ($stackPos) {
-                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             527 => function ($stackPos) {
-                 $this->semValue = new Expr\List_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
             },
             528 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Expr\List_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             529 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             530 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             531 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             532 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             533 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = null;
             },
             534 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = array();
             },
             535 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             536 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             537 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             538 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             539 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-1)], true, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             540 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-1)], true, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             541 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             542 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             543 => function ($stackPos) {
                  $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             544 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             545 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             546 => function ($stackPos) {
-                 $this->semValue = new Scalar\EncapsedStringPart($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]);
             },
             547 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\EncapsedStringPart($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             548 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             549 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             550 => function ($stackPos) {
-                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             551 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             552 => function ($stackPos) {
                  $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             553 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-4)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             554 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-4)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
             },
             555 => function ($stackPos) {
-                 $this->semValue = new Scalar\String_($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             556 => function ($stackPos) {
-                 $this->semValue = $this->parseNumString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\String_($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             557 => function ($stackPos) {
+                 $this->semValue = $this->parseNumString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            558 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
         ];
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php b/vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php
index 75c8305fa0..cbfbd34aa2 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php
@@ -17,21 +17,22 @@
  */
 class Php7 extends \PhpParser\ParserAbstract
 {
-    protected $tokenToSymbolMapSize = 394;
-    protected $actionTableSize = 964;
-    protected $gotoTableSize = 508;
+    protected $tokenToSymbolMapSize = 392;
+    protected $actionTableSize = 1162;
+    protected $gotoTableSize = 611;
 
-    protected $invalidSymbol = 159;
+    protected $invalidSymbol = 165;
     protected $errorSymbol = 1;
     protected $defaultAction = -32766;
     protected $unexpectedTokenRule = 32767;
 
-    protected $YY2TBLSTATE = 348;
-    protected $numNonLeafStates = 602;
+    protected $YY2TBLSTATE = 397;
+    protected $numNonLeafStates = 694;
 
     protected $symbolToName = array(
         "EOF",
         "error",
+        "T_THROW",
         "T_INCLUDE",
         "T_INCLUDE_ONCE",
         "T_EVAL",
@@ -127,6 +128,7 @@ class Php7 extends \PhpParser\ParserAbstract
         "T_ENDDECLARE",
         "T_AS",
         "T_SWITCH",
+        "T_MATCH",
         "T_ENDSWITCH",
         "T_CASE",
         "T_DEFAULT",
@@ -140,7 +142,6 @@ class Php7 extends \PhpParser\ParserAbstract
         "T_TRY",
         "T_CATCH",
         "T_FINALLY",
-        "T_THROW",
         "T_USE",
         "T_INSTEADOF",
         "T_GLOBAL",
@@ -161,6 +162,7 @@ class Php7 extends \PhpParser\ParserAbstract
         "T_EXTENDS",
         "T_IMPLEMENTS",
         "T_OBJECT_OPERATOR",
+        "T_NULLSAFE_OBJECT_OPERATOR",
         "T_LIST",
         "T_ARRAY",
         "T_CALLABLE",
@@ -180,566 +182,658 @@ class Php7 extends \PhpParser\ParserAbstract
         "T_DIR",
         "T_NS_SEPARATOR",
         "T_ELLIPSIS",
+        "T_NAME_FULLY_QUALIFIED",
+        "T_NAME_QUALIFIED",
+        "T_NAME_RELATIVE",
+        "T_ATTRIBUTE",
         "';'",
+        "']'",
         "'{'",
         "'}'",
         "'('",
         "')'",
         "'`'",
-        "']'",
         "'\"'",
         "'$'"
     );
 
     protected $tokenToSymbol = array(
-            0,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,   54,  157,  159,  158,   53,   36,  159,
-          153,  154,   51,   48,    7,   49,   50,   52,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,   30,  150,
-           42,   15,   44,   29,   66,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,   68,  159,  156,   35,  159,  155,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  151,   34,  152,   56,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,    1,    2,    3,    4,
-            5,    6,    8,    9,   10,   11,   12,   13,   14,   16,
+            0,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,   55,  163,  165,  164,   54,   37,  165,
+          160,  161,   52,   49,    8,   50,   51,   53,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,   31,  156,
+           43,   16,   45,   30,   67,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,   69,  165,  157,   36,  165,  162,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  158,   35,  159,   57,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,    1,    2,    3,    4,
+            5,    6,    7,    9,   10,   11,   12,   13,   14,   15,
            17,   18,   19,   20,   21,   22,   23,   24,   25,   26,
-           27,   28,   31,   32,   33,   37,   38,   39,   40,   41,
-           43,   45,   46,   47,   55,   57,   58,   59,   60,   61,
-           62,   63,   64,   65,   67,   69,   70,   71,   72,   73,
-           74,   75,   76,   77,   78,   79,   80,   81,   82,  159,
-          159,   83,   84,   85,   86,   87,   88,   89,   90,   91,
-           92,   93,   94,   95,   96,   97,   98,   99,  100,  101,
-          102,  103,  104,  105,  106,  107,  108,  109,  110,  111,
-          112,  113,  114,  115,  116,  117,  118,  119,  120,  121,
-          122,  123,  124,  125,  126,  127,  128,  129,  130,  131,
-          132,  133,  134,  135,  136,  137,  138,  139,  159,  159,
-          159,  159,  159,  159,  140,  141,  142,  143,  144,  145,
-          146,  147,  148,  149
+           27,   28,   29,   32,   33,   34,   38,   39,   40,   41,
+           42,   44,   46,   47,   48,   56,   58,   59,   60,   61,
+           62,   63,   64,   65,   66,   68,   70,   71,   72,   73,
+           74,   75,   76,   77,   78,   79,   80,   81,   82,   83,
+           84,   85,   86,   87,   88,   89,   90,   91,   92,   93,
+           94,   95,   96,   97,   98,   99,  100,  101,  102,  103,
+          104,  105,  106,  107,  108,  109,  110,  111,  112,  113,
+          114,  115,  116,  117,  118,  119,  120,  121,  122,  123,
+          124,  125,  126,  127,  128,  129,  130,  131,  132,  133,
+          134,  135,  136,  137,  138,  139,  140,  141,  142,  143,
+          144,  145,  146,  147,  148,  149,  150,  151,  152,  153,
+          154,  155
     );
 
     protected $action = array(
-          607,  608,  609,  610,  611,  685,  612,  613,  614,  650,
-          651,    0,   32,  103,  104,  105,  106,  107,  108,  109,
-          110,  111,  112,  113,  114,  115,-32767,-32767,-32767,-32767,
-           94,   95,   96,   97,   98,-32766,-32766,-32766,  687,  491,
-         -497,  904,  905,  906,  903,  902,  901,  904,  905,  906,
-          903,  902,  901,  615,  938,  940,-32766,    9,-32766,-32766,
-        -32766,-32766,-32766,-32766,-32766,-32766,-32766,  616,  617,  618,
-          619,  620,  621,  622,  333, 1104,  683,-32766,-32766,-32766,
-          846, 1103,  119,  623,  624,  625,  626,  627,  628,  629,
-          630,  631,  632,  633,  653,  654,  655,  656,  657,  645,
-          646,  647,  675,  648,  649,  634,  635,  636,  637,  638,
-          639,  640,  677,  678,  679,  680,  681,  682,  641,  642,
-          643,  644,  674,  665,  663,  664,  660,  661,  402,  652,
-          658,  659,  666,  667,  669,  668,  670,  671,   45,   46,
-          421,   47,   48,  662,  673,  672,   27,   49,   50,  233,
-           51,-32766,-32766,-32766,   96,   97,   98,   24,-32766,-32766,
-        -32766, -458,  261,  121, 1023,-32766,-32766,-32766, 1091, 1073,
-        -32766,-32766,-32766, 1039,-32766,-32766,-32766,-32766,-32766,-32766,
-         -496,-32766,-32766,-32766,   52,   53,-32766, -497,-32766,-32766,
-           54,  687,   55,  231,  232,   56,   57,   58,   59,   60,
-           61,   62,   63, 1016,   24,  242,   64,  369,-32766,-32766,
-        -32766,  226, 1040, 1041,  423, 1076, 1073, -493,  880,  508,
-         1039,  436, 1023, -458,  768, 1073,  239,  333, -500,-32766,
-         -500,-32766,-32766,-32766,-32766,  856,  253, -458,  276,  378,
-          372,  786,   68, 1073, -458,  685, -461,  278, 1126,  403,
-          289, 1127,  288,   99,  100,  101,  303,  252,  433,  434,
-          822,-32766,   69,  261,  237,  850,  851,  435,  436,  102,
-         1045, 1046, 1047, 1048, 1042, 1043,  256, 1016, -456, -456,
-          306,  444, 1049, 1044,  375,  133,  561, -239,  363,   66,
-          237,  268,  692,  273,  278,  422, -137, -137, -137,   -4,
-          768, 1073,  310,  278, 1035,  757,  687,  362,   37,   20,
-          424, -137,  425, -137,  426, -137,  427, -137,  127,  428,
-         -295,  278, -295,   38,   39,  370,  371, -496,  271,   40,
-          429,  277,  687,   65,  261, 1016,  302,  896,  430,  431,
-         -456, -456,  333, -494,  432,   44,   42,  743,  791,  373,
-          374, -457, -234,  562, -456, -456,  375,-32766,-32766,-32766,
-          882, -456, -456,  124, -493,   75,  850,  851,  333, -273,
-         -260,  422,  768,  770,  576, -137,  261,  125,-32766,  278,
-          823,  757,  857, 1073,   37,   20,  424,  240,  425, -178,
-          426,  589,  427,  393,  503,  428,  687,  235,  241,   38,
-           39,  370,  371,  125,  354,   40,  429,  260,  259,   65,
-          267,  687,  302, -457,  430,  431, -296, -177, -296,   24,
-          432,  305,  365,  700,  791,  373,  374, -457,  120,  118,
-           24, 1073,   30,  366, -457, 1039, -460,  850,  851,  687,
-          367,  691, 1073,  422,  291,  768, 1039,  333,  -83,  770,
-          576,   -4,  467,  757,  126,  368,   37,   20,  424,  -92,
-          425,  278,  426,  444,  427, 1016,  375,  428, -219, -219,
-         -219,   38,   39,  370,  371,  333, 1016,   40,  429,  850,
-          851,   65,  435,  436,  302,  236,  430,  431,  225,  708,
-         -494,  709,  432,  435,  436,  743,  791,  373,  374,  690,
-          387,  136, 1117,  578,   68,  413,  238,    8,   33,  278,
-         1053,  227,  708,  687,  709,   68,  422, -260,  535,   21,
-          278,  770,  576, -219,  550,  551,  757,  687,  116,   37,
-           20,  424,  117,  425,  358,  426, -178,  427,  132,  328,
-          428, -218, -218, -218,   38,   39,  370,  371,  687,  333,
-           40,  429,  122,  768,   65,  383,  384,  302,  123,  430,
-          431,   29,  234,  333, -177,  432,  528,  529,  743,  791,
-          373,  374,  129,  850,  851,  135,   76,   77,   78, 1092,
-          881,  599,  582,  254,  333,  137,  138,  782,  590,  593,
-          293,  767,  131,  252,  770,  576, -218,   31,  102,   79,
-           80,   81,   82,   83,   84,   85,   86,   87,   88,   89,
-           90,   91,   92,   93,   94,   95,   96,   97,   98,   99,
-          100,  101,   43,  252,  422,  558,  768,  687,  690,-32766,
-          471,  130,  476,  685,  757,  102,  553,   37,   20,  424,
-          526,  425,  688,  426,  272,  427,  910, 1016,  428,  792,
-         1128,  793,   38,   39,  370,  583,  269,  570,   40,  429,
-          536, 1052,   65,  275, 1055,  302, -415,  541,  270,  -81,
-           10,  391,  768,  432,  542,  554,  784,  594,    5,    0,
-           12,  577,    0,    0,  304,    0,    0,    0,    0,  336,
-          342,    0,    0,    0,    0,    0,    0,  422,    0,    0,
-            0,  584,  770,  576,    0,    0,    0,  757,    0,    0,
-           37,   20,  424,  343,  425,    0,  426,    0,  427,  768,
-            0,  428,    0,    0,    0,   38,   39,  370,  347,  387,
-          473,   40,  429,  359,  360,   65,  744,   35,  302,   36,
-          597,  598,  748,  422,  825,  809,  432,  816,  587,  876,
-          877,  806,  817,  757,  746,  804,   37,   20,  424,  885,
-          425,  888,  426,  889,  427,  768,  886,  428,  887,  893,
-         -485,   38,   39,  370,  579,  770,  576,   40,  429,  581,
-          585,   65,  586,  588,  302,  592,  286,  287,  352,  353,
-          422,  580,  432, 1123,  591, 1125,  703,  790,  702,  712,
-          757,  789,  713,   37,   20,  424,  710,  425, 1124,  426,
-          788,  427,  768, 1004,  428,  711,  777,  785,   38,   39,
-          370,  808,  576, -483,   40,  429,  775,  814,   65,  815,
-         1122,  302, 1074, 1067, 1081, 1086,  422, 1089, -237,  432,
-         -461, -460, -459,   23,   25,   28,  757,   34,   41,   37,
-           20,  424,   67,  425,   70,  426,   71,  427,   72,   73,
-          428,   74,  128,  134,   38,   39,  370,  139,  770,  576,
-           40,  429,  229,  230,   65,  246,  247,  302,  248,  249,
-          250,  251,  290,  422,  355,  432,  357, -427, -235, -234,
-           14,   15,   16,  757,   17,   19,   37,   20,  424,  325,
-          425,  404,  426,  406,  427,  409,  411,  428,  412,  419,
-          567,   38,   39,  370,  770,  576, 1027,   40,  429,  977,
-         1037,   65,  858, 1008,  302,-32766,-32766,-32766,  -92,   13,
-           18,   22,  432,  263,  324,  501,  522,  569,  981,  978,
-            0,  994,    0, 1036, 1065, 1066,-32766, 1080,-32766,-32766,
-        -32766,-32766,-32766,-32766,-32767,-32767,-32767,-32767,-32767, 1120,
-          532,  770,  576, 1054
+          130,  131,  132,  555,  133,  134,-32766,  704,  705,  706,
+          135,   36, -543, -552,  455,-32766, -543,-32766,-32766,-32766,
+         -552, 1152,  778,  927, -549,  969,  970,    0,-32766,-32766,
+        -32766, -549,-32766, 1219,-32766,  245,-32766,  962,-32766,-32766,
+        -32766,-32766,-32766,  461,-32766,-32766,-32766,-32766,-32766,-32766,
+        -32766,-32766,  124, -331,  707, -331,-32766,  388, 1031, 1032,
+         1033, 1030, 1029, 1028,-32766,  435,  430,    2,  261,  136,
+          371,  711,  712,  713,  714,  391,  789,  397, 1031, 1032,
+         1033, 1030, 1029, 1028,  715,  716,  717,  718,  719,  720,
+          721,  722,  723,  724,  725,  745,  556,  746,  747,  748,
+          749,  737,  738,  372,  373,  740,  741,  726,  727,  728,
+          730,  731,  732,  332,  771,  772,  773,  774,  775,  733,
+          734,  557,  558,  766,  757,  755,  756,  752,  753, -294,
+         -189,  559,  560,  751,  561,  562,  563,  564,  565,  566,
+         1235,  456,  783, -503,  889,  754,  567,  568,  928,  137,
+        -32766,-32766,-32766,  130,  131,  132,  555,  133,  134,  983,
+          704,  705,  706,  135,   36,-32766,-32766,-32766,-32766, -552,
+        -32766,-32766,-32766, -552, 1152,  547,  101,  102,  103,  583,
+         -549,-32766,-32766,-32766, -549,-32766,-32766,-32766,  245,-32766,
+           80,-32766,-32766,-32766,-32766,-32766,-32766,-32766,-32766,-32766,
+          959,  958,  957,-32766,-32766, -503, -503,  707, 1264,-32766,
+          388, 1265,-32766,-32766,-32766,  235,  784,-32766,  778,   19,
+         -503,  261,  136,  371,  711,  712,  713,  714,-32766,-32766,
+          397,  788, -503,-32766, -509,-32766,-32766,  715,  716,  717,
+          718,  719,  720,  721,  722,  723,  724,  725,  745,  556,
+          746,  747,  748,  749,  737,  738,  372,  373,  740,  741,
+          726,  727,  728,  730,  731,  732,  332,  771,  772,  773,
+          774,  775,  733,  734,  557,  558,  766,  757,  755,  756,
+          752,  753, -294, -189,  559,  560,  751,  561,  562,  563,
+          564,  565,  566,  309,   81,   82,   83,  139,  754,  567,
+          568,  681,  137,  729,  699,  700,  701,  702,  703, 1239,
+          704,  705,  706,  742,  743,   33, 1238,   84,   85,   86,
+           87,   88,   89,   90,   91,   92,   93,   94,   95,   96,
+           97,   98,   99,  100,  101,  102,  103,  104,  105,  106,
+           31,  263,-32766,-32766,-32766,  104,  105,  106,  577,  263,
+         1216,  126, -188,  107,  142,  440,  441,  707,-32766,-32766,
+        -32766,  107, -254,-32766,  247,-32766,-32766,-32766,-32766,-32766,
+        -32766,  708,  709,  710,  711,  712,  713,  714,  293,-32766,
+          776,-32766,-32766,-32766,-32766,-32766,  295,  715,  716,  717,
+          718,  719,  720,  721,  722,  723,  724,  725,  745,  768,
+          746,  747,  748,  749,  737,  738,  739,  767,  740,  741,
+          726,  727,  728,  730,  731,  732,  770,  771,  772,  773,
+          774,  775,  733,  734,  735,  736,  766,  757,  755,  756,
+          752,  753,  529,  311,  744,  750,  751,  758,  759,  761,
+          760,  762,  763,  234,-32766,-32766,-32766,  307,  754,  765,
+          764,   48,   49,   50,  486,   51,   52,  481,  397,   18,
+          321,   53,   54,  345,   55,-32766,  982,-32766,-32766,-32766,
+        -32766,-32766,-32766,-32767,-32767,-32767,-32767,-32767,  349,-32767,
+        -32767,-32767,-32767,   99,  100,  101,  102,  103,  814,  354,
+          815, 1191,  356, 1152,  871,  271,  408,  871,   56,   57,
+          409,  814,  410,  815,   58, -188,   59,  240,  241,   60,
+           61,   62,   63,   64,   65,   66,   67,-32766,   26,  262,
+           68,  412,  487,  411,  672,  967, 1185, 1186,  488, 1150,
+         1216, 1154, 1153, 1155, 1183,   40,   23,  489, 1009,  490,
+          -82,  491,  147,  492,  969,  970,  493,  494,  786,  429,
+          430,   42,   43,  413,  418,  415,  871,   44,  495,  391,
+          496,  497,  248,  344,  320, 1159, 1154, 1153, 1155,  793,
+          896,  498,  499,  500,  148, 1008,  861,  692,  787,  861,
+          967, 1254,  501,  502,  150, 1173, 1174, 1175, 1176, 1170,
+         1171,  281,  624,   24,   26,  -14,  151, 1177, 1172,  969,
+          970, 1154, 1153, 1155,  282,  -82, 1216, -502,  152,   69,
+         1183,  305,  306,  311,   34,  108,  109,  110,  111,  112,
+          113,  114,  115,  116,  117,  118,  119,  120,  154, -149,
+         -149, -149,  639,  640,  146,  376, 1159, 1159,  861,  615,
+          616,   32,  243,   35, -149, 1216, -149,  121, -149,  873,
+         -149,  667,  873,  122,  667,  242, 1067, 1069,  501,  502,
+          414, 1173, 1174, 1175, 1176, 1170, 1171, -501,  127, -502,
+         -502,  496,  497, 1177, 1172, -504,  128,  871,  424,  425,
+          847,  896, -107, -107, -502,   71,  442,  443,  306,  311,
+         -107,-32766,  432,  433,  -49,  141, -502, 1152, -508,  155,
+          156,  780,  157,  -84,-32766,-32766,-32766,  673,-32766,  -76,
+        -32766,  873,-32766,  667, -149,-32766, 1216, 1216, 1179,  282,
+        -32766,-32766,-32766,  -73,   73,  -71,-32766,-32766,  311, -501,
+         -501,  129,-32766,  388,  -70,  -69,-32766, -504, -504,  -68,
+        -32766,  -67, 1152,  -66, -501,  -65,  871,  -64,  275,-32766,
+        -32766,-32766, -504,-32766,  -45,-32766, -501,-32766,  -16,  861,
+        -32766,  145, -107,  264, -504,-32766,-32766,-32766,  682,   72,
+          244,-32766,-32766,-32766,  685,  782,  674,-32766,  388, 1152,
+          669,  871, -501,  870,  144,-32766,-32766,-32766,-32766,  272,
+        -32766,  282,-32766,  273,-32766,   73,   73,-32766, 1216,  311,
+          311,  276,-32766,-32766,-32766,  885,-32766,  246,-32766,-32766,
+          277,  677, 1152,  314,-32766,  388,   -4,  871,  263,-32766,
+        -32766,-32766,-32766,-32766,  107,-32766,  143,-32766,  861,  778,
+        -32766,  871,  873,-32766,  667,-32766,-32766,-32766,  625,  647,
+          871,-32766,-32766,-32766, -501, -501,  787,-32766,  388, 1152,
+         1037,-32766,  969,  970, 1266,-32766,-32766,-32766,-32766, -501,
+        -32766,  531,-32766,  861,-32766,  660,  871,-32766,  630,  535,
+          683, -501,-32766,-32766,-32766,  138,-32766,  642,-32766,-32766,
+         1023,  311, 1152,   20,-32766,  388,  437,  466,  631,-32766,
+        -32766,-32766,-32766,-32766,  643,-32766,  286,-32766, -506,  861,
+        -32766,  913,  407,  667,  613,-32766,-32766,-32766,-32766,  284,
+         -467,-32766,-32766,  861,   46,  283,  282,-32766,  388,  686,
+          897,  414,  861,  402,  898,-32766,  294,   38,  280, -232,
+         -232, -232,  496,  497, 1007,  414,  873,   26,  667, 1190,
+          786,  806,  896, -107, -107, 1192,  496,  497,  861, 1216,
+           47, -457,    8, 1183,   22,  847,  896, -107, -107,  347,
+         -506, -506,  541,    9, -231, -231, -231,  581, 1180,  887,
+          414,   39,  873,  848,  667,   -4,  289,  290,  689,  690,
+          852,  496,  497,  937,  914, 1261,  873, -506,  667, -232,
+          847,  896, -107, -107,  921,  873,  911,  667,  922,  850,
+          909, -537,  502,  123, 1173, 1174, 1175, 1176, 1170, 1171,
+         1012, 1015,  291,  292, 1016, 1013, 1177, 1172, 1014, 1020,
+         1263,  873,   30,  667, -231,  304,  798,  348,   71, 1205,
+         1223,  306,  311, 1257,  618, -535,  346,  668, -107,  125,
+         -107,  671,  675,  676,  678,  285,  679,  680, -107, -107,
+         -107, -107, -107, -107, -107,  684,  670, -257,  809,  808,
+          817,  895,  929,  816, 1262,  894,  892,  893, 1138,  880,
+          888,  878,  919,  920, 1260, 1217, 1206, 1224, 1230, 1233,
+            0, -509, -508, -507,    1,   27,   28,   37,   41,   45,
+           70,   74, -308, -255,   75,   76,   77,   78,   79,  140,
+          149,  153,  239,  310,  333,  334,  335,  336,  337,  338,
+          339,  340,  341,  342,  343,  403,  404,    0, -254,   12,
+           13,   14,   15,   17,  375,  457,  458,  465,  468,  469,
+          470,  471,  475,  476,  477,  484,  654, 1163, 1106, 1181,
+          984, 1142, -259,  -99,   11,   16,   25,  279,  374,  574,
+          578,  605,  659, 1110, 1158, 1107, 1236,    0, -471, 1123,
+            0, 1184
     );
 
     protected $actionCheck = array(
-            2,    3,    4,    5,    6,   78,    8,    9,   10,   11,
-           12,    0,   15,   16,   17,   18,   19,   20,   21,   22,
-           23,   24,   25,   26,   27,   28,   42,   43,   44,   45,
-           46,   47,   48,   49,   50,    8,    9,   10,   78,   79,
-            7,  114,  115,  116,  117,  118,  119,  114,  115,  116,
-          117,  118,  119,   55,   57,   58,   29,    7,   31,   32,
-           33,   34,   35,   36,    8,    9,   10,   69,   70,   71,
-           72,   73,   74,   75,  114,    1,   78,    8,    9,   10,
-            1,    7,   13,   85,   86,   87,   88,   89,   90,   91,
+            2,    3,    4,    5,    6,    7,  115,    9,   10,   11,
+           12,   13,  157,    1,   31,   73,  161,    9,   10,   11,
+            8,   79,   79,   31,    1,  134,  135,    0,   86,   87,
+           88,    8,   90,    1,   92,   37,   94,    1,   30,   97,
+           32,   33,   34,  101,  102,  103,  104,    9,   10,   11,
+          108,  109,   14,  105,   56,  107,  114,  115,  115,  116,
+          117,  118,  119,  120,  122,  105,  106,    8,   70,   71,
+           72,   73,   74,   75,   76,  115,    1,   79,  115,  116,
+          117,  118,  119,  120,   86,   87,   88,   89,   90,   91,
            92,   93,   94,   95,   96,   97,   98,   99,  100,  101,
           102,  103,  104,  105,  106,  107,  108,  109,  110,  111,
           112,  113,  114,  115,  116,  117,  118,  119,  120,  121,
-          122,  123,  124,  125,  126,  127,  128,  129,   30,  131,
-          132,  133,  134,  135,  136,  137,  138,  139,    2,    3,
-            4,    5,    6,  145,  146,  147,    7,   11,   12,   36,
-           14,    8,    9,   10,   48,   49,   50,   68,    8,    9,
-           10,   68,   29,    7,    1,    8,    9,   10,    1,   80,
-            8,    9,   29,   84,   31,   32,   33,   34,   35,   29,
-            7,   31,   32,   33,   48,   49,   29,  154,   31,   32,
-           54,   78,   56,   57,   58,   59,   60,   61,   62,   63,
-           64,   65,   66,  114,   68,   69,   70,   71,    8,    9,
-           10,   13,   76,   77,   78,    1,   80,    7,    1,   49,
-           84,  132,    1,  130,    1,   80,    7,  114,  154,   29,
-          156,   31,   32,   33,   34,    1,    7,  144,    7,  103,
-          104,    1,  153,   80,  151,   78,  153,  158,   78,  151,
-          114,   81,    7,   51,   52,   53,    7,   55,  122,  123,
-           30,    8,  149,   29,   36,  132,  133,  131,  132,   67,
-          134,  135,  136,  137,  138,  139,  140,  114,   68,   68,
-            7,  145,  146,  147,  148,   13,   78,  154,  125,  153,
-           36,  155,    1,  157,  158,   72,   73,   74,   75,    0,
-            1,   80,    7,  158,    1,   82,   78,    7,   85,   86,
-           87,   88,   89,   90,   91,   92,   93,   94,  151,   96,
-          103,  158,  105,  100,  101,  102,  103,  154,  111,  106,
-          107,   68,   78,  110,   29,  114,  113,  120,  115,  116,
-          130,  130,  114,    7,  121,   68,   68,  124,  125,  126,
-          127,   68,  154,  145,  144,  144,  148,    8,    9,   10,
-          152,  151,  151,   30,  154,  151,  132,  133,  114,  152,
-            7,   72,    1,  150,  151,  152,   29,  149,   29,  158,
-          150,   82,  154,   80,   85,   86,   87,   36,   89,    7,
-           91,  151,   93,  130,    1,   96,   78,   36,   36,  100,
-          101,  102,  103,  149,  105,  106,  107,  130,  130,  110,
-          111,   78,  113,  130,  115,  116,  103,    7,  105,   68,
-          121,  144,    7,  124,  125,  126,  127,  144,  151,  151,
-           68,   80,    7,    7,  151,   84,  153,  132,  133,   78,
-            7,  150,   80,   72,  145,    1,   84,  114,   30,  150,
-          151,  152,   83,   82,  151,    7,   85,   86,   87,  154,
-           89,  158,   91,  145,   93,  114,  148,   96,   97,   98,
-           99,  100,  101,  102,  103,  114,  114,  106,  107,  132,
-          133,  110,  131,  132,  113,   36,  115,  116,   95,  103,
-          154,  105,  121,  131,  132,  124,  125,  126,  127,   80,
-          148,   13,   83,  151,  153,  103,   36,  105,   13,  158,
-          141,   13,  103,   78,  105,  153,   72,  154,   73,   74,
-          158,  150,  151,  152,   73,   74,   82,   78,   15,   85,
-           86,   87,   15,   89,  148,   91,  154,   93,   98,   99,
-           96,   97,   98,   99,  100,  101,  102,  103,   78,  114,
-          106,  107,   15,    1,  110,  103,  104,  113,   15,  115,
-          116,  142,  143,  114,  154,  121,  108,  109,  124,  125,
-          126,  127,   15,  132,  133,   15,    8,    9,   10,  154,
-          150,  151,   30,   30,  114,   15,   15,   36,   30,   30,
-           34,   30,   30,   55,  150,  151,  152,   29,   67,   31,
-           32,   33,   34,   35,   36,   37,   38,   39,   40,   41,
-           42,   43,   44,   45,   46,   47,   48,   49,   50,   51,
-           52,   53,   68,   55,   72,   75,    1,   78,   80,   83,
-           83,   68,   87,   78,   82,   67,   92,   85,   86,   87,
-          111,   89,   78,   91,  112,   93,   80,  114,   96,  125,
-           81,  125,  100,  101,  102,   30,  128,   90,  106,  107,
-           88,  141,  110,  128,  141,  113,  144,   94,  129,   95,
-           95,   95,    1,  121,   97,   97,  149,  152,  144,   -1,
-          144,  151,   -1,   -1,  144,   -1,   -1,   -1,   -1,  148,
-          148,   -1,   -1,   -1,   -1,   -1,   -1,   72,   -1,   -1,
-           -1,   30,  150,  151,   -1,   -1,   -1,   82,   -1,   -1,
-           85,   86,   87,  148,   89,   -1,   91,   -1,   93,    1,
-           -1,   96,   -1,   -1,   -1,  100,  101,  102,  148,  148,
-          148,  106,  107,  148,  148,  110,  152,  150,  113,  150,
-          150,  150,  150,   72,  150,  150,  121,  150,   30,  150,
-          150,  150,  150,   82,  150,  150,   85,   86,   87,  150,
-           89,  150,   91,  150,   93,    1,  150,   96,  150,  150,
-          153,  100,  101,  102,  151,  150,  151,  106,  107,  151,
-          151,  110,  151,  151,  113,  151,  151,  151,  151,  151,
-           72,  151,  121,  152,   30,  152,  152,  152,  152,  152,
-           82,  152,  152,   85,   86,   87,  152,   89,  152,   91,
-          152,   93,    1,  152,   96,  152,  152,  152,  100,  101,
-          102,  150,  151,  153,  106,  107,  152,  152,  110,  152,
-          152,  113,  152,  152,  152,  152,   72,  152,  154,  121,
-          153,  153,  153,  153,  153,  153,   82,  153,  153,   85,
-           86,   87,  153,   89,  153,   91,  153,   93,  153,  153,
-           96,  153,  153,  153,  100,  101,  102,  153,  150,  151,
-          106,  107,  153,  153,  110,  153,  153,  113,  153,  153,
-          153,  153,  153,   72,  153,  121,  153,  155,  154,  154,
-          154,  154,  154,   82,  154,  154,   85,   86,   87,  154,
-           89,  154,   91,  154,   93,  154,  154,   96,  154,  154,
-          154,  100,  101,  102,  150,  151,  154,  106,  107,  154,
-          154,  110,  154,  154,  113,    8,    9,   10,  154,  154,
-          154,  154,  121,  154,  154,  154,  154,  154,  154,  154,
-           -1,  155,   -1,  156,  156,  156,   29,  156,   31,   32,
-           33,   34,   35,   36,   37,   38,   39,   40,   41,  156,
-          156,  150,  151,  157
+          122,  123,  124,  125,  126,  127,  128,  129,  130,    8,
+            8,  133,  134,  135,  136,  137,  138,  139,  140,  141,
+            1,  158,   79,   69,    1,  147,  148,  149,  156,  151,
+            9,   10,   11,    2,    3,    4,    5,    6,    7,  161,
+            9,   10,   11,   12,   13,    9,   10,   11,   73,  157,
+            9,   10,   11,  161,   79,   80,   49,   50,   51,   50,
+          157,   86,   87,   88,  161,   90,   30,   92,   37,   94,
+          158,   30,   97,   32,   33,   34,   35,  102,  103,  104,
+          118,  119,  120,  108,  109,  131,  132,   56,   79,  114,
+          115,   82,    9,   10,   11,   14,  153,  122,   79,    8,
+          146,   70,   71,   72,   73,   74,   75,   76,    9,   10,
+           79,  156,  158,   30,  160,   32,   33,   86,   87,   88,
+           89,   90,   91,   92,   93,   94,   95,   96,   97,   98,
+           99,  100,  101,  102,  103,  104,  105,  106,  107,  108,
+          109,  110,  111,  112,  113,  114,  115,  116,  117,  118,
+          119,  120,  121,  122,  123,  124,  125,  126,  127,  128,
+          129,  130,  161,  161,  133,  134,  135,  136,  137,  138,
+          139,  140,  141,   69,    9,   10,   11,  158,  147,  148,
+          149,  158,  151,    2,    3,    4,    5,    6,    7,    1,
+            9,   10,   11,   12,   13,   30,    8,   32,   33,   34,
+           35,   36,   37,   38,   39,   40,   41,   42,   43,   44,
+           45,   46,   47,   48,   49,   50,   51,   52,   53,   54,
+            8,   56,    9,   10,   11,   52,   53,   54,    1,   56,
+           81,    8,    8,   68,    8,  131,  132,   56,    9,   10,
+           11,   68,  161,   30,    8,   32,   33,   34,   35,   36,
+           37,   70,   71,   72,   73,   74,   75,   76,    8,   30,
+           79,   32,   33,   34,   35,   36,    8,   86,   87,   88,
+           89,   90,   91,   92,   93,   94,   95,   96,   97,   98,
+           99,  100,  101,  102,  103,  104,  105,  106,  107,  108,
+          109,  110,  111,  112,  113,  114,  115,  116,  117,  118,
+          119,  120,  121,  122,  123,  124,  125,  126,  127,  128,
+          129,  130,   84,  164,  133,  134,  135,  136,  137,  138,
+          139,  140,  141,   96,    9,   10,   11,    8,  147,  148,
+          149,    2,    3,    4,    5,    6,    7,  105,   79,  107,
+            8,   12,   13,    8,   15,   30,    1,   32,   33,   34,
+           35,   36,   37,   38,   39,   40,   41,   42,    8,   43,
+           44,   45,   46,   47,   48,   49,   50,   51,  105,    8,
+          107,  143,    8,   79,    1,   30,    8,    1,   49,   50,
+            8,  105,    8,  107,   55,  161,   57,   58,   59,   60,
+           61,   62,   63,   64,   65,   66,   67,    9,   69,   70,
+           71,   72,   73,    8,   31,  115,   77,   78,   79,  115,
+           81,  152,  153,  154,   85,   86,   87,   88,  159,   90,
+           31,   92,   14,   94,  134,  135,   97,   98,  152,  105,
+          106,  102,  103,  104,  105,  106,    1,  108,  109,  115,
+          116,  117,   37,  114,  115,    1,  152,  153,  154,    8,
+          126,  122,  123,  124,   14,  156,   83,  158,   81,   83,
+          115,   84,  133,  134,   14,  136,  137,  138,  139,  140,
+          141,  142,   74,   75,   69,   31,   14,  148,  149,  134,
+          135,  152,  153,  154,  155,   96,   81,   69,   14,  160,
+           85,  162,  163,  164,   16,   17,   18,   19,   20,   21,
+           22,   23,   24,   25,   26,   27,   28,   29,   14,   74,
+           75,   76,   74,   75,  100,  101,    1,    1,   83,  110,
+          111,  144,  145,   14,   89,   81,   91,   16,   93,  156,
+           95,  158,  156,   16,  158,   37,   58,   59,  133,  134,
+          105,  136,  137,  138,  139,  140,  141,   69,   16,  131,
+          132,  116,  117,  148,  149,   69,   16,    1,  105,  106,
+          125,  126,  127,  128,  146,  160,  105,  106,  163,  164,
+          126,   73,  127,  128,   31,   16,  158,   79,  160,   16,
+           16,   79,   16,   31,   86,   87,   88,   31,   90,   31,
+           92,  156,   94,  158,  159,   97,   81,   81,    1,  155,
+          102,  103,  104,   31,  160,   31,  108,  109,  164,  131,
+          132,   31,  114,  115,   31,   31,   73,  131,  132,   31,
+          122,   31,   79,   31,  146,   31,    1,   31,   30,   86,
+           87,   88,  146,   90,   31,   92,  158,   94,   31,   83,
+           97,   31,  126,   31,  158,  102,  103,  104,   31,  151,
+           37,  108,  109,   73,   31,  153,   31,  114,  115,   79,
+          158,    1,   69,   31,   31,  122,   86,   87,   88,   35,
+           90,  155,   92,   35,   94,  160,  160,   97,   81,  164,
+          164,   35,  102,  103,  104,   37,   73,   37,  108,  109,
+           35,   31,   79,   35,  114,  115,    0,    1,   56,   86,
+           87,   88,  122,   90,   68,   92,   69,   94,   83,   79,
+           97,    1,  156,  115,  158,  102,  103,  104,   89,   76,
+            1,  108,  109,   73,  131,  132,   81,  114,  115,   79,
+           81,   84,  134,  135,   82,  122,   86,   87,   88,  146,
+           90,   84,   92,   83,   94,   91,    1,   97,   95,   88,
+           31,  158,  102,  103,  104,  158,   73,   93,  108,  109,
+          121,  164,   79,   96,  114,  115,   96,   96,   99,   86,
+           87,   88,  122,   90,   99,   92,  113,   94,   69,   83,
+           97,  156,  126,  158,  112,  102,  103,  104,  115,  130,
+          146,  108,  109,   83,   69,  129,  155,  114,  115,  159,
+          126,  105,   83,  107,  126,  122,  129,  156,  112,   99,
+          100,  101,  116,  117,    1,  105,  156,   69,  158,  143,
+          152,  125,  126,  127,  128,  143,  116,  117,   83,   81,
+           69,  146,  146,   85,  146,  125,  126,  127,  128,  146,
+          131,  132,  150,  147,   99,  100,  101,  150,  157,  151,
+          105,  156,  156,  159,  158,  159,  131,  132,  156,  156,
+          156,  116,  117,  156,  156,  159,  156,  158,  158,  159,
+          125,  126,  127,  128,  156,  156,  156,  158,  156,  156,
+          156,  160,  134,  158,  136,  137,  138,  139,  140,  141,
+          156,  156,  131,  132,  156,  156,  148,  149,  156,  156,
+          159,  156,  158,  158,  159,  158,  157,  146,  160,  157,
+          157,  163,  164,  157,  157,  160,  158,  158,  105,  158,
+          107,  158,  158,  158,  158,  112,  158,  158,  115,  116,
+          117,  118,  119,  120,  121,  158,  158,  161,  159,  159,
+          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
+          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
+           -1,  160,  160,  160,  160,  160,  160,  160,  160,  160,
+          160,  160,  159,  161,  160,  160,  160,  160,  160,  160,
+          160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
+          160,  160,  160,  160,  160,  160,  160,   -1,  161,  161,
+          161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
+          161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
+          161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
+          161,  161,  161,  161,  161,  161,  161,   -1,  162,  162,
+           -1,  163
     );
 
     protected $actionBase = array(
-            0,  223,  299,  371,  444,  303,  208,  618,   -2,   -2,
-          -73,   -2,   -2,  625,  718,  718,  764,  718,  552,  671,
-          811,  811,  811,  228,  113,  113,  113,  254,  361,  -40,
-          361,  333,  449,  470,  435,  435,  435,  435,  435,  435,
-          435,  435,  435,  435,  435,  435,  435,  435,  435,  435,
-          435,  435,  435,  435,  435,  435,  435,  435,  435,  435,
-          435,  435,  435,  435,  435,  435,  435,  435,  435,  435,
-          435,  435,  435,  435,  435,  435,  435,  435,  435,  435,
-          435,  435,  435,  435,  435,  435,  435,  435,  435,  435,
-          435,  435,  435,  435,  435,  435,  435,  435,  435,  435,
-          435,  435,  435,  435,  435,  435,  435,  435,  435,  435,
-          435,  435,  435,  435,  435,  435,  435,  435,  435,  435,
-          435,  435,  435,  435,  435,  435,  435,  435,  435,  435,
-          435,  435,  435,  435,  435,  435,  435,  435,  435,  435,
-          291,  291,  230,  393,  495,  779,  784,  781,  776,  775,
-          780,  785,  498,  678,  680,  562,  681,  682,  683,  685,
-          782,  804,  777,  783,  568,  568,  568,  568,  568,  568,
-          568,  568,  568,  568,  568,  568,  568,  568,  568,  568,
-          568,  253,   69,  162,   56,   56,   56,   56,   56,   56,
-           56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
-           56,   56,   56,   56,   56,   56,  349,  349,  349,  157,
-          210,  150,  200,  211,  143,   27,  917,  917,  917,  917,
-          917,  -16,  -16,  -16,  -16,  351,  351,  362,  217,   89,
-           89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
-           89,   89,  163,  313,  106,  106,  133,  133,  133,  133,
-          133,  133,  221,  305,  234,  347,  369,  523,  806,  167,
-          167,  441,   93,  283,  202,  202,  202,  386,  547,  533,
-          533,  533,  533,  419,  419,  533,  533,  170,  214,   74,
-          211,  211,  277,  211,  211,  211,  409,  409,  409,  452,
-          318,  352,  546,  318,  619,  640,  577,  675,  578,  677,
-          278,  585,  145,  586,  145,  145,  145,  458,  445,  451,
-          774,  291,  522,  291,  291,  291,  291,  722,  291,  291,
-          291,  291,  291,  291,   98,  291,   79,  430,  230,  240,
-          240,  556,  240,  452,  538,  263,  635,  410,  425,  538,
-          538,  538,  636,  637,  336,  363,  198,  638,  382,  402,
-          173,   33,  549,  549,  555,  555,  566,  551,  549,  549,
-          549,  549,  549,  690,  690,  555,  548,  555,  566,  695,
-          555,  551,  551,  555,  555,  549,  555,  690,  551,  156,
-          415,  249,  273,  551,  551,  426,  528,  549,  535,  535,
-          433,  555,  219,  555,  139,  539,  690,  690,  539,  229,
-          551,  231,  590,  591,  529,  527,  553,  245,  553,  553,
-          300,  529,  553,  551,  553,  448,   50,  548,  295,  553,
-           11,  699,  701,  418,  703,  694,  705,  731,  706,  530,
-          524,  526,  719,  720,  708,  692,  691,  561,  582,  513,
-          517,  534,  554,  689,  581,  531,  531,  531,  554,  687,
-          531,  531,  531,  531,  531,  531,  531,  531,  787,  540,
-          545,  723,  537,  541,  576,  543,  623,  520,  582,  582,
-          584,  732,  786,  564,  722,  762,  709,  587,  557,  741,
-          725,  525,  542,  565,  726,  727,  745,  765,  628,  513,
-          766,  641,  563,  643,  582,  644,  531,  670,  617,  788,
-          789,  688,  791,  736,  747,  749,  580,  645,  569,  803,
-          646,  768,  629,  631,  589,  737,  684,  751,  647,  752,
-          754,  649,  592,  572,  734,  573,  733,  272,  729,  632,
-          650,  654,  656,  658,  661,  710,  594,  738,  544,  740,
-          735,  595,  597,  560,  663,  488,  599,  570,  571,  600,
-          714,  558,  550,  601,  602,  769,  664,  728,  604,  665,
-          756,  574,  581,  536,  532,  575,  567,  634,  755,  559,
-          605,  609,  611,  613,  674,  616,    0,    0,    0,    0,
+            0,   -2,  151,  555,  816,  830,  865,  379,  717,  622,
+          862,  676,  780,  780,  839,  780,  493,  745,  301,  301,
+          -57,  301,  301,  496,  496,  496,  618,  618,  618,  618,
+          -58,  -58,   95,  700,  733,  770,  663,  803,  803,  803,
+          803,  803,  803,  803,  803,  803,  803,  803,  803,  803,
+          803,  803,  803,  803,  803,  803,  803,  803,  803,  803,
+          803,  803,  803,  803,  803,  803,  803,  803,  803,  803,
+          803,  803,  803,  803,  803,  803,  803,  803,  803,  803,
+          803,  803,  803,  803,  803,  803,  803,  803,  803,  803,
+          803,  803,  803,  803,  803,  803,  803,  803,  803,  803,
+          803,  803,  803,  803,  803,  803,  803,  803,  803,  803,
+          803,  803,  803,  803,  803,  803,  803,  803,  803,  803,
+          803,  803,  803,  803,  803,  803,  803,  803,  803,  803,
+          803,  803,  803,  803,  803,  803,  803,  803,  803,  803,
+          803,  803,  803,  803,  803,  803,  803,  803,  803,  803,
+          803,  803,  803,  803,  803,  803,  803,  803,   75,   -8,
+          347,  629,  986,  992,  988,  993,  984,  983,  987,  989,
+          994,  915,  916,  753,  917,  918,  919,  920,  990,  877,
+          985,  991,  285,  285,  285,  285,  285,  285,  285,  285,
+          285,  285,  285,  285,  285,  285,  285,  285,  285,  285,
+          285,  285,  285,  508,   38,  219,  141,  141,  141,  141,
+          141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+          141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+          156,  156,  156,  203,  525,  525,    8,  598,  161,  868,
+          868,  868,  868,  868,  868,  868,  868,  868,  868,  349,
+          333,  435,  435,  435,  435,  435,  436,  436,  436,  436,
+          933,  564,  636,  635,  465,  -52,  127,  127,  718,  718,
+          759,  410,  410,  410,  444, -109, -109, -109,   74,  538,
+          396,  348,  414,  414,  414,  414,  414,  802,  998,  139,
+          139,  139,  139,  414,  414,  414,  606,  713,  713,  881,
+          293,  293,  293,  713,  383,  777,  497,  383,  497,  129,
+          793,   32,  -40, -145,  793,  829,  845,   23,   12,  788,
+          573,  788,  767,  863,  898,  995,   82,  789,  913,  795,
+          914,  224,  678,  981,  981,  981,  981,  981,  981,  981,
+          981,  981,  981,  981,  269,  982,   63,  269,  269,  269,
+          529,   63,  518,  558,   63,  778,  982,   75,  805,   75,
+           75,   75,   75,  944,   75,   75,   75,   75,   75,   75,
+          949,  727,  723,  692,  -17,   75,   -8,  143,  143,  419,
+           36,  143,  143,  143,  143,   75,   75,  565,  573,  762,
+          812,  581,  817,  344,  762,  762,  762,  509,  121,  201,
+          122,  352,  750,  750,  768,  769,  924,  924,  750,  765,
+          750,  769,  929,  750,  768,  768,  750,  924,  768,  761,
+          343,  488,  452,  470,  768,  768,  492,  924,  370,  768,
+          768,  750,  750,  750,  797,  768,  494,  750,  356,  346,
+          750,  750,  768,  768,  797,  786,   59,  779,  924,  924,
+          924,  797,  455,  779,  779,  822,  823,  792,  732,  439,
+          378,  561,  332,  768,  732,  732,  750,  481,  792,  732,
+          792,  732,  818,  732,  732,  732,  792,  732,  765,  484,
+          732,  768,  515,  211,  732,   27,  930,  931,  672,  934,
+          927,  935,  955,  936,  937,  879,  794,  798,  942,  928,
+          938,  926,  925,  752,  631,  637,  806,  764,  923,  756,
+          756,  756,  921,  756,  756,  756,  756,  756,  756,  756,
+          756,  631,  811,  813,  776,  781,  945,  652,  660,  796,
+          814,  996,  997,  944,  976,  939,  771,  679,  962,  946,
+          760,  867,  947,  948,  963,  977,  978,  826,  757,  861,
+          899,  869,  950,  883,  756,  930,  937,  928,  938,  926,
+          925,  716,  714,  710,  712,  708,  704,  694,  703,  730,
+          875,  841,  872,  949,  922,  631,  873,  958,  864,  964,
+          965,  878,  790,  772,  876,  900,  951,  952,  953,  884,
+          979,  885,  815,  959,  896,  966,  791,  901,  967,  968,
+          969,  970,  886,  902,  888,  824,  749,  932,  773,  903,
+          528,  766,  775,  956,  560,  943,  889,  904,  905,  971,
+          972,  973,  906,  907,  940,  827,  960,  784,  961,  957,
+          828,  838,  570,  754,  758,  582,  594,  908,  909,  941,
+          737,  763,  840,  842,  980,  910,  614,  843,  683,  911,
+          975,  684,  686,  774,  897,  808,  783,  787,  954,  743,
+          844,  912,  854,  855,  858,  974,  859,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,  136,  136,  136,  136,   -2,   -2,   -2,
-            0,    0,   -2,    0,    0,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  568,  568,  568,  568,  568,  568,  568,  568,
-          568,  568,  568,  568,  568,  568,  568,  568,  568,  568,
-          568,  568,  568,  568,  568,  568,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,  449,  449,  449,  449,  449,
+          449,  301,  301,  301,  301,  449,  449,  449,  449,  449,
+          449,  449,    0,    0,  301,    0,    0,  449,  449,  449,
+          449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+          449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+          449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+          449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+          449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+          449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+          449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+          449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+          449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+          449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+          449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+          449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+          449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+          449,  449,  285,  285,  285,  285,  285,  285,  285,  285,
+          285,  285,  285,  285,  285,  285,  285,  285,  285,  285,
+          285,  285,  285,  285,  285,  285,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,  568,  568,  568,  568,  568,  568,  568,
-          568,  568,  568,  568,  568,  568,  568,  568,  568,  568,
-          568,  568,  568,  568,  568,  568,  568,  568,  568,  568,
-          568,  568,   -3,  568,  568,   -3,  568,  568,  568,  568,
-          568,  568,  568,  202,  202,  202,  202,  318,  318,  318,
-          -67,  318,  318,  318,  318,  318,  318,  318,  318,  318,
-          318,  318,  318,  318,  318,  -67,  202,  202,  318,  318,
-          318,  318,  318,  318,  318,  318,  318,  318,  419,  419,
-          419,  145,  145,  318,    0,    0,    0,    0,    0,  549,
-          419,  318,  318,  318,  318,    0,    0,  318,  318,  548,
-          145,    0,    0,    0,    0,    0,    0,    0,  549,  549,
-          549,  548,    0,  549,  419,    0,  240,  291,  440,  440,
-          440,  440,    0,  549,    0,  549,    0,    0,    0,    0,
-            0,    0,  551,    0,  690,    0,    0,    0,    0,  555,
-            0,    0,    0,    0,    0,    0,    0,    0,  548,    0,
-            0,    0,    0,  548,    0,    0,  531,    0,  564,    0,
-            0,  531,  531,  531,  564,  564,    0,    0,    0,  564
+            0,    0,    0,    0,    0,    0,    0,  285,  285,  285,
+          285,  285,  285,  285,  285,  285,  285,  285,  285,  285,
+          285,  285,  285,  285,  285,  285,  285,  285,  285,  285,
+          285,  285,  285,  285,  285,  285,  285,  285,  414,  414,
+          285,    0,  285,  414,  414,  414,  414,  414,  414,  414,
+          414,  414,  414,  285,  285,  285,  285,  285,  285,  285,
+          293,  293,  293,  293,  761,  414,  414,  414,  414,  -37,
+          293,  293,  414,  414,  -37,  414,  414,  414,  761,  414,
+          414,  414,    0,    0,   63,  497,    0,    0,    0,    0,
+            0,  497,  497,  269,  269,  269,  269,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,   63,  497,
+            0,   63,    0,  765,  414,  269,  761,  308,  414,    0,
+            0,    0,    0,   63,  765,   63,  497,  143,   75,  308,
+            0,  534,  534,  534,  534,    0,  573,  761,  761,  761,
+          761,  761,  761,  761,  761,  761,  761,  761,    0,  761,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,  765,
+          768,    0,  924,    0,    0,    0,    0,  750,    0,    0,
+            0,    0,    0,    0,  750,  929,  768,  768,    0,    0,
+            0,    0,    0,    0,  765,    0,    0,    0,    0,    0,
+            0,    0,    0,  756,  790,    0,  790,    0,  756,  756,
+          756
     );
 
     protected $actionDefault = array(
-            3,32767,32767,32767,32767,32767,32767,32767,32767,   92,
+            3,32767,   99,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,32767,   97,
+        32767,32767,32767,32767,32767,32767,  555,  555,  555,  555,
+          236,   99,32767,32767,32767,32767,  431,  350,  350,  350,
+        32767,32767,  499,  499,  499,  499,  499,  499,32767,32767,
+        32767,32767,32767,32767,  431,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,  510,  510,  510,   94,  499,32767,
-          499,32767,32767,32767,  314,  314,  314,32767,  454,  454,
-          454,  454,  454,  454,  454,32767,32767,32767,32767,32767,
-          394,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,   97,32767,32767,32767,
+           35,    5,    6,    8,    9,   48,   15,32767,32767,32767,
+        32767,32767,   99,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,   92,32767,32767,32767,32767,32767,32767,32767,32767,
+        32767,  548,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,  506,32767,32767,32767,32767,32767,
+        32767,32767,  435,  414,  415,  417,  418,  349,  500,  554,
+          293,  551,  348,  142,  305,  295,  224,  296,  240,  241,
+          267,  345,  146,  379,  432,  381,  430,  434,  380,  355,
+          360,  361,  362,  363,  364,  365,  366,  367,  368,  369,
+          370,  371,  372,  353,  354,  433,  436,  437,  440,  441,
+          411,  410,  409,  377,32767,32767,  378,  352,  382,32767,
+        32767,32767,32767,32767,32767,32767,32767,   99,32767,  384,
+          383,  400,  401,  398,  399,  402,  403,  404,  405,  406,
+        32767,32767,32767,32767,32767,  328,  391,  392,  284,  284,
+          330,32767,32767,32767,  108,32767,32767,32767,  493,  408,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,  377,  378,  380,  381,  313,  455,
-          509,  259,  505,  312,  130,  270,  261,  211,  243,  310,
-          134,  342,  395,  344,  393,  397,  343,  319,  323,  324,
-          325,  326,  327,  328,  329,  330,  331,  332,  333,  334,
-          335,  317,  318,  396,  398,  399,  374,  373,  372,  340,
-          316,  341,  345,  316,  347,  346,  363,  364,  361,  362,
-          365,  366,  367,  368,  369,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,   94,
-        32767,32767,32767,  293,  354,  355,  250,  250,  250,  250,
-          250,  250,32767,  250,32767,  250,32767,32767,32767,32767,
-        32767,32767,  448,  371,  349,  350,  348,32767,  426,32767,
-        32767,32767,32767,32767,  428,32767,   92,32767,32767,32767,
-          337,  339,  420,  508,  320,  507,32767,32767,   94,  414,
+        32767,32767,32767,   99,32767,   97,  495,  374,  376,  463,
+          386,  387,  385,  356,32767,  470,32767,   99,  472,32767,
+        32767,32767,32767,32767,32767,  494,32767,  501,  501,32767,
+          456,   97,32767,32767,32767,32767,  262,32767,32767,32767,
+        32767,  562,  456,  107,  107,  107,  107,  107,  107,  107,
+          107,  107,  107,  107,32767,  107,32767,32767,32767,   97,
+          185,32767,  250,  252,   99,  516,  190,32767,  475,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-          423,32767,32767,   92,32767,32767,   92,  174,  230,  232,
-          179,32767,  431,32767,32767,32767,32767,32767,32767,32767,
+        32767,  468,  190,  190,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,  456,  396,
+          135,32767,  135,  501,  388,  389,  390,  458,  501,  501,
+          501,32767,32767,32767,  190,32767,  473,  473,   97,   97,
+           97,   97,  468,32767,  190,  190,32767,32767,  190,  108,
+           96,   96,   96,   96,  190,  190,   96,  100,   98,  190,
+          190,32767,32767,32767,  205,  190,   96,32767,   98,   98,
+        32767,32767,  190,  190,  205,  207,   98,  209,32767,  520,
+          521,  205,   98,  209,  209,  229,  229,  447,  286,   98,
+           96,   98,   98,  190,  286,  286,32767,   98,  447,  286,
+          447,  286,  192,  286,  286,  286,  447,  286,32767,   98,
+          286,  190,   96,   96,  286,32767,32767,32767,  458,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,  414,  359,  517,32767,  456,32767,  351,
-          352,  353,32767,32767,  456,  456,  456,32767,  456,32767,
-          456,  456,32767,32767,32767,32767,32767,  179,32767,32767,
-        32767,32767,   94,  429,  429,   92,   92,   92,   92,  424,
-        32767,  179,  179,32767,32767,32767,32767,32767,  179,   91,
-           91,   91,   91,  179,  179,   91,  194,32767,  192,  192,
-           91,32767,   93,32767,   93,  196,32767,  470,  196,   91,
-          179,   91,  216,  216,  405,  181,  252,   93,  252,  252,
-           93,  405,  252,  179,  252,   91,   91,32767,   91,  252,
-        32767,32767,32767,   85,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,  416,32767,
-          436,32767,  449,  468,32767,  357,  358,  360,32767,  458,
-          382,  383,  384,  385,  386,  387,  388,  390,32767,  419,
-        32767,32767,32767,   87,  121,  269,32767,  515,   87,  417,
-        32767,  515,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,   87,   87,32767,32767,32767,32767,32767,  495,
-        32767,  516,32767,  456,  418,32767,  356,  432,  475,32767,
-        32767,  457,32767,32767,32767,32767,   87,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,  436,32767,32767,32767,
-        32767,32767,32767,32767,  456,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-          456,32767,32767,  242,32767,32767,32767,  309,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,   85,   60,32767,  289,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,  136,  136,    3,  272,
-            3,  272,  136,  136,  136,  272,  272,  136,  136,  136,
-          136,  136,  136,  136,  169,  224,  227,  216,  216,  281,
-          136,  136
+        32767,32767,32767,32767,32767,  488,32767,  505,  518,  394,
+          395,  397,  503,  419,  420,  421,  422,  423,  424,  425,
+          427,  550,32767,  462,32767,32767,32767,32767,  304,  560,
+        32767,  560,32767,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,  561,32767,  501,
+        32767,32767,32767,32767,  393,    7,   74,   41,   42,   50,
+           56,  479,  480,  481,  482,  476,  477,  483,  478,32767,
+          484,  526,32767,32767,  502,  553,32767,32767,32767,32767,
+        32767,32767,  135,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,  488,32767,  133,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,  501,32767,32767,
+        32767,  281,  283,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,32767,  501,
+        32767,32767,32767,  269,  271,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,  266,32767,
+        32767,  344,32767,32767,32767,32767,  324,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,  148,  148,    3,
+            3,  307,  148,  148,  148,  307,  307,  148,  307,  307,
+          148,  148,  148,  148,  148,  148,  180,  244,  247,  229,
+          229,  148,  316,  148
     );
 
     protected $goto = array(
-          171,  144,  144,  144,  171,  152,  153,  152,  155,  187,
-          172,  168,  168,  168,  168,  169,  169,  169,  169,  169,
-          169,  169,  164,  165,  166,  167,  184,  182,  185,  445,
-          446,  334,  447,  450,  451,  452,  453,  454,  455,  456,
-          457,  924,  141,  145,  146,  147,  170,  148,  149,  143,
-          150,  151,  154,  181,  183,  186,  206,  209,  211,  212,
-          214,  215,  216,  217,  218,  219,  220,  221,  222,  223,
-          224,  244,  245,  264,  265,  266,  339,  340,  341,  496,
-          188,  189,  190,  191,  192,  193,  194,  195,  196,  197,
-          198,  199,  200,  201,  202,  156,  203,  157,  173,  174,
-          175,  207,  176,  158,  159,  160,  177,  161,  208,  142,
-          204,  162,  178,  205,  179,  180,  163,  563,  210,  463,
-          210,  516,  516, 1038,  572, 1038, 1038, 1038, 1038, 1038,
-         1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,  468,  468,
-          468,  514,  537,  468,  297,  489,  521,  489,  498,  274,
-          533,  534,  698,  483,  258,  468,  448,  448,  448,  725,
-          448,  448,  448,  448,  448,  448,  448,  448,  448,  448,
-          448,  448,  448,  449,  449,  449,  699,  449,  449,  449,
-          449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
-         1114, 1114,  734,  725,  899,  725,  315,  319,  475,  499,
-          500,  502, 1083, 1084,  468,  468,  760, 1114,  761,  900,
-          482,  506,  468,  468,  468,  329,  330,  686,  481,  545,
-          495,  332,  510,  596,  523,  525,  294,  469,  538,  556,
-          559,  835,  566,  574,  831,  765,  729,  717,  864,  494,
-          807,  868,  490,  860,  716,  716,  810,  697, 1013, 1105,
-          726,  726,  726,  728,  715,  840, 1093,  800,  824,  805,
-          805,  803,  805,  595,  313,  460,  833,  828,  459,    3,
-            4,  907,  733,  539, 1009,  487,  317,  461,  459,  497,
-          892,  575,  972,  474,  843,  557,  890, 1129,  484,  485,
-          505,  517,  519,  520,  568,  801,  801,  801,  801,  465,
-          855,  795,  802, 1002,  787,  405, 1003,  799,  327,  571,
-          356, 1082,  530, 1014,  848,  346,  540,  350,   11,  337,
-          337,  280,  281,  283,  493,  344,  284,  345,  285,  348,
-          524,  351, 1015, 1069, 1113, 1113,  543,  301,  298,  299,
-          721,  560,  838,  838, 1100,  295,  865,  718,  600,  323,
-          544, 1113, 1010, 1017,  511, 1005,  869,  849,  849,  849,
-          849,  849,  849, 1017,  849,  849,  849,  720,  730, 1116,
-          714,  812,  849, 1088, 1088,  909,  465,  398,  513,  414,
-         1017, 1017, 1017, 1017,    0, 1079, 1017, 1017,    0,  701,
-            0,    0,    0,    0,    0, 1079,    0,    0,    0,    0,
-            0,  773, 1090, 1090,  774,  706,    0,  756,  751,  752,
-          766,    0,  707,  753,  704,  754,  755,  705,    0,  759,
-            0, 1075,    0,    0,    0,    0,    0, 1012,    0,    0,
-            0,  480,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,  867,    0, 1077, 1077,  867,
+          190,  190,  655,  781,  663,  399,  629,  964,  971,  972,
+          393,  297,  298,  317,  549,  303,  398,  318,  400,  607,
+          361,  365,  534,  572,  576,  161,  161,  161,  161,  187,
+          187,  171,  173,  209,  191,  204,  187,  187,  187,  187,
+          187,  188,  188,  188,  188,  188,  188,  182,  183,  184,
+          185,  186,  206,  204,  207,  509,  510,  389,  511,  513,
+          514,  515,  516,  517,  518,  519,  520, 1053,  162,  163,
+          164,  189,  165,  166,  167,  160,  168,  169,  170,  172,
+          203,  205,  208,  230,  233,  236,  238,  249,  250,  251,
+          252,  253,  254,  255,  256,  257,  258,  259,  266,  267,
+          300,  301,  302,  394,  395,  396,  554,  210,  211,  212,
+          213,  214,  215,  216,  217,  218,  219,  220,  221,  222,
+          223,  224,  174,  225,  175,  192,  193,  194,  231,  182,
+          183,  184,  185,  186,  206, 1053,  195,  176,  177,  178,
+          196,  192,  179,  232,  197,  159,  198,  226,  180,  199,
+          227,  228,  181,  229,  200,  201,  202,  807,  611,  611,
+          804,  274,  274,  274,  274,  976,  973,  974,  592,  626,
+         1147,  594,  594,  571,  533,  526, 1182, 1182, 1182, 1182,
+         1182, 1182, 1182, 1182, 1182, 1182, 1250, 1250,  986,  328,
+          812, 1027,  860,  855,  856,  869, 1026,  813,  857,  810,
+          858,  859,  811,  803, 1251, 1251,  805, 1250,  863,  912,
+          936,  910,  910,  908,  910,  687,  363,  526, 1003, 1004,
+          533, 1253,  525,  945,  940, 1251,  542,  543,  820, 1148,
+          838,  370,  552,  832,  308,  288,  819,  573,  864,  795,
+          865, 1200, 1200,  785,  587,  588, 1200, 1200, 1200, 1200,
+         1200, 1200, 1200, 1200, 1200, 1200, 1151, 1151, 1151,  968,
+         1149, 1208, 1209,  968,  968,  472,  968,  968,  968,  779,
+          968,  968,  968, 1232, 1232, 1232, 1232, 1151, 1151, 1151,
+         1151, 1151,  785,   21,  785,  546, 1198, 1198, 1151, 1151,
+         1151, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198,
+         1198,  523,  523,  523,  325,  876,  512,  512,  392,  877,
+          582,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+          512, 1240,  427,  906,  906,  906,  906,  387,  387,  387,
+          387,  602,  604,  427,  900,  907,  540,  904,  379,  662,
+          688,  606,  608,  933,    5,  627,    6,  539,  645,  649,
+          947,  653,  661,  943,  586,  377,  378,  800, 1019,  570,
+          635,  666,  636,  359,  381,  382,  383,  453,  646,  652,
+          652,  384,  658, 1017,  454,  323,  580,  595,  598,  599,
+          600,  601,  619,  620,  621,  665,  527,  537, 1267,  450,
+         1225, 1226,  527,  545,  537,  800,  628,  362, 1101,  528,
+          434,  521,  521,  521,  521, 1227, 1228, 1132,  890,  405,
+          575, 1133, 1136,  891, 1137,  444,  553,  445,  419,  419,
+          419,  830,  329,  330, 1258, 1259, 1222, 1222, 1222,  622,
+          623,  431,  637,  638, 1211,  439,  439,  550,  585,  881,
+         1041,  797,  319,  833,  821,  991,  439,  590,  995,  825,
+          828,  369,  822,  952, 1234, 1234, 1234, 1234,  915,  648,
+          824,  955,  632,  931,  473,  691,  474,  992,  818, 1144,
+          451,  996,  480,    0,  834, 1036, 1218,  917,    0,    0,
+         1143,    0,  905,    0,    0,    0,    0,    0,  528,    0,
+            0,  419,  419,  419,  419,  419,  419,  419,  419,  419,
+          419,  419,  800,  419, 1034,  837,    0,    0,    0,  994,
+            0,    0, 1220, 1220,  994,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0, 1146,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,  270,  524,  524,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,  462,  478,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,  462,
-            0,  478,    0,    0,  316,    0,    0,  466,  386,    0,
-          388,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,  724,    0, 1121
+            0,    0,    0,    0,    0,    0,    0,    0,    0,  950,
+          950
     );
 
     protected $gotoCheck = array(
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   63,   56,   10,
-           56,   86,   86,   86,    8,   86,   86,   86,   86,   86,
-           86,   86,   86,   86,   86,   86,   86,   86,   10,   10,
-           10,   46,   46,   10,   80,   85,   73,   85,   97,  134,
-           73,   73,   17,   10,  134,   10,  135,  135,  135,   26,
-          135,  135,  135,  135,  135,  135,  135,  135,  135,  135,
-          135,  135,  135,  137,  137,  137,   18,  137,  137,  137,
-          137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
-          148,  148,   36,   26,  111,   26,   49,   49,   49,   49,
-           49,   49,  141,  141,   10,   10,   55,  148,   55,  111,
-           10,   10,   10,   10,   10,   69,   69,    5,   39,   69,
-            2,   69,    2,   39,   39,   39,   69,   10,   39,   39,
-           39,   39,   39,   39,   39,   13,   14,   14,   14,   10,
-           40,   14,  136,   94,   26,   26,   14,   16,   92,  146,
-           26,   26,   26,   26,   26,   14,  143,   14,   16,   16,
-           16,   16,   16,   16,   52,   16,   16,   16,   75,   37,
-           37,   14,   14,   54,   14,   53,   65,   65,   75,    7,
-            7,    7,  118,   65,   88,    7,    7,   12,   65,   65,
-           68,   68,   68,   68,   68,   75,   75,   75,   75,   12,
-           90,   75,   75,   67,   67,   65,   67,   76,   76,   76,
-           89,  139,   24,   92,   91,   56,   56,   56,   65,   56,
-           56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
-           56,   56,   92,   92,  147,  147,   12,   20,   80,   80,
-           30,   12,   85,   85,   85,   11,   96,   28,   82,   19,
-           23,  147,  127,   63,   15,  124,   99,   63,   63,   63,
-           63,   63,   63,   63,   63,   63,   63,   15,   32,  147,
-           15,   79,   63,    8,    8,  114,   12,   71,   72,  122,
-           63,   63,   63,   63,   -1,   97,   63,   63,   -1,   13,
-           -1,   -1,   -1,   -1,   -1,   97,   -1,   -1,   -1,   -1,
-           -1,   63,   97,   97,   63,   13,   -1,   13,   13,   13,
-           13,   -1,   13,   13,   13,   13,   13,   13,   -1,   13,
-           -1,   97,   -1,   -1,   -1,   -1,   -1,   12,   -1,   -1,
-           -1,    8,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   97,   -1,   97,   97,   97,
+           41,   41,   71,    6,    8,   64,   64,  105,  105,  105,
+           64,   64,   64,   64,   64,   64,   64,   64,   64,   64,
+           57,   57,   57,   57,   57,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   14,  107,  107,
+           25,   22,   22,   22,   22,  107,  107,  107,   54,   54,
+           19,   99,   99,  114,   74,   74,   99,   99,   99,   99,
+           99,   99,   99,   99,   99,   99,  164,  164,  111,   88,
+           14,  128,   14,   14,   14,   14,  128,   14,   14,   14,
+           14,   14,   14,   24,  165,  165,   26,  164,   14,   48,
+           24,   24,   24,   24,   24,   24,   74,   74,   14,   14,
+           74,  164,   24,   24,   24,  165,   74,   74,   34,   19,
+           44,   74,   74,   34,  151,  151,   34,   74,   63,   19,
+           63,  152,  152,   11,   74,   74,  152,  152,  152,  152,
+          152,  152,  152,  152,  152,  152,   71,   71,   71,   71,
+           19,   19,   19,   71,   71,   74,   71,   71,   71,    5,
+           71,   71,   71,    8,    8,    8,    8,   71,   71,   71,
+           71,   71,   11,   74,   11,  154,  153,  153,   71,   71,
+           71,  153,  153,  153,  153,  153,  153,  153,  153,  153,
+          153,   18,   18,   18,  161,   71,  155,  155,   12,   71,
+           12,  155,  155,  155,  155,  155,  155,  155,  155,  155,
+          155,  163,   18,   18,   18,   18,   18,   23,   23,   23,
+           23,   81,   81,   18,   18,   18,   47,   84,   84,   84,
+           47,   47,   47,   94,   45,   47,   45,    8,   47,   47,
+           47,   47,   47,   47,    8,   78,   78,   21,    7,    7,
+           78,    7,   78,   60,   78,   78,   78,   80,   78,    7,
+            7,   78,    7,    7,   80,   78,   77,   77,   77,   77,
+           77,   77,   77,   77,   77,   77,    8,    8,   13,  158,
+          158,  158,    8,   95,    8,   21,   62,    8,  135,   13,
+            8,   98,   98,   98,   98,  160,  160,   76,   76,  103,
+           98,   76,   76,   76,   76,    8,    8,    8,   22,   22,
+           22,    8,   88,   88,    8,    8,  114,  114,  114,   82,
+           82,   79,   82,   82,   13,  133,  133,    2,    2,   16,
+           16,   17,   28,   15,   15,   15,  133,   16,   15,   38,
+            8,   27,   36,   16,  114,  114,  114,  114,   15,   13,
+           16,  101,   16,   16,  139,   90,  139,  113,   16,  144,
+          141,  116,  139,   -1,   40,  131,  114,   87,   -1,   -1,
+           16,   -1,   15,   -1,   -1,   -1,   -1,   -1,   13,   -1,
+           -1,   22,   22,   22,   22,   22,   22,   22,   22,   22,
+           22,   22,   21,   22,   15,   15,   -1,   -1,   -1,  114,
+           -1,   -1,  114,  114,  114,   -1,   -1,   -1,   -1,   -1,
            -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,    8,    8,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,    8,
-           -1,    8,   -1,   -1,    8,   -1,   -1,    8,    8,   -1,
-            8,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,    8,   -1,    8
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   13,   -1,   -1,
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+           -1,   -1,   -1,   -1,   23,   23,   23,   -1,   -1,   -1,
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   98,
+           98
     );
 
     protected $gotoBase = array(
-            0,    0, -358,    0,    0,  207,    0,  274,  114,    0,
-         -148,   54,   10,   94, -144,  -40,  245,  150,  174,   48,
-           70,    0,    0,   -3,   25,    0, -108,    0,   44,    0,
-           52,    0,    3,  -23,    0,    0,  183, -331,    0, -359,
-          221,    0,    0,    0,    0,    0,  106,    0,    0,  157,
-            0,    0,  227,   45,   47,  191,   90,    0,    0,    0,
-            0,    0,    0,  111,    0,  -95,    0,  -26,   43, -193,
-            0,  -12,  -20, -435,    0,   26,   37,    0,    0,    4,
-         -259,    0,   20,    0,    0,  117, -104,    0,   31,   55,
-           46,   53,  -64,    0,  216,    0,   40,  143,    0,  -10,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,  -34,    0,    0,    7,    0,    0,    0,   30,    0,
-            0,    0,  -32,    0,   -9,    0,    0,   -5,    0,    0,
-            0,    0,    0,    0, -119,  -69,  217,  -52,    0,   51,
-            0, -102,    0,  226,    0,    0,  223,   77,  -67,    0,
-            0
+            0,    0, -232,    0,    0,  249,   -6,  351,  -16,    0,
+            0,  -37,  -11,   79, -167,   22,    1,  148,   40, -188,
+            0,   83,  158,  324,  199,  156,  202,  132,  162,    0,
+            0,    0,    0,    0, -118,    0,  131,    0,  142,    0,
+           66,   -1,    0,    0,  211, -347,    0, -332,  192,    0,
+            0,    0,    0,    0,  130,    0,    0,  -23,    0,    0,
+          323,    0,  161,  225, -229,    0,    0,    0,    0,    0,
+            0,   -5,    0,    0, -198,    0,   30,   42, -109,  157,
+          -77, -122, -246,    0,   53,    0,    0,   67, -267,    0,
+           89,    0,    0,    0,  312,  352,    0,    0,  375,  -63,
+            0,  116,    0,  140,    0, -264,    0, -110,    0,    0,
+            0,  186,    0,  118,  165,    0,   62,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,  -74,    0,
+            0,   64,    0,  405,    0,  135,    0,    0,    0,   -4,
+            0,   63,    0,    0,   65,    0,    0,    0,    0,    0,
+            0,  -71,    7,   52,  258,   72,    0,    0,   99,    0,
+           58,  276,    0,  292, -101,  -83,    0,    0
     );
 
     protected $gotoDefault = array(
-        -32768,  420,  603,    2,  604,  676,  684,  548,  437,  573,
-          438,  464,  335,  758,  913,  778,  740,  741,  742,  320,
-          361,  311,  318,  531,  518,  410,  727,  381,  719,  407,
-          722,  380,  731,  140,  549,  416,  735,    1,  737,  470,
-          769,  308,  745,  309,  552,  747,  477,  749,  750,  314,
-          321,  322,  917,  486,  515,  762,  213,  479,  763,  307,
-          764,  772,  331,  312,  392,  417,  326,  894,  504,  527,
-          376,  395,  512,  507,  488, 1024,  797,  401,  390,  811,
-          296,  819,  601,  827,  830,  439,  440,  399,  842,  400,
-          853,  847, 1032,  394,  859,  382,  866, 1064,  385,  870,
-          228,  873,  255,  546,  349,  878,  879,    6,  884,  564,
-          565,    7,  243,  415,  908,  547,  379,  923,  364,  991,
-          993,  472,  408, 1006,  389,  555,  418, 1011, 1068,  377,
-          441,  396,  282,  300,  257,  442,  458,  262,  443,  397,
-         1071, 1078,  338, 1094,  279,   26, 1106, 1115,  292,  492,
-          509
+        -32768,  485,  695,    4,  696,  769,  777,  569,  503,  664,
+          324,  596,  390,  331,  862, 1040,  551,  796, 1160, 1168,
+          428,  799,  312,  326,  844,  845,  846,  366,  351,  357,
+          364,  617,  597,  467,  831,  422,  823,  459,  826,  421,
+          835,  158,  386,  483,  839,    3,  841,  530,  872,  352,
+          849,  353,  641,  851,  536,  853,  854,  360,  367,  368,
+         1045,  544,  593,  866,  237,  538,  867,  350,  868,  875,
+          355,  358,  650,  438,  478,  380, 1021,  579,  614,  416,
+          447,  591,  603,  589,  902,  460,  436,  916,  327,  924,
+          693, 1052,  609,  462,  932,  610,  939,  942,  504,  505,
+          452,  954,  268,  463,  981,  633,  634,  966,  612,  979,
+          446,  985,  423,  993, 1204,  426,  997,  260, 1000,  269,
+          385,  401, 1005, 1006,    7, 1011,  656,  657,   10,  265,
+          482, 1035,  651,  420, 1051,  406, 1120, 1122,  532,  464,
+         1140, 1139,  644,  479, 1145, 1207,  417,  506,  448,  299,
+          507,  287,  315,  296,  522,  278,  316,  508,  449, 1213,
+         1221,  313,   29, 1241, 1252,  322,  548,  584
     );
 
     protected $ruleToNonTerminal = array(
@@ -750,52 +844,57 @@ class Php7 extends \PhpParser\ParserAbstract
             5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
             5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
             5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-            5,    5,    5,    5,    6,    6,    6,    6,    6,    6,
-            6,    7,    7,    8,    9,   10,   10,   11,   12,   13,
-           13,   14,   14,   15,   15,    4,    4,    4,    4,    4,
-            4,    4,    4,    4,    4,    4,   20,   20,   21,   21,
-           21,   21,   23,   25,   25,   19,   27,   27,   24,   29,
-           29,   26,   26,   28,   28,   30,   30,   22,   31,   31,
-           32,   34,   35,   35,   36,   37,   37,   39,   38,   38,
-           38,   38,   40,   40,   40,   40,   40,   40,   40,   40,
-           40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
-           40,   40,   40,   40,   40,   40,   40,   16,   16,   59,
-           59,   62,   62,   61,   60,   60,   53,   64,   64,   65,
-           65,   66,   66,   67,   67,   17,   18,   18,   18,   70,
-           70,   70,   71,   71,   74,   74,   72,   72,   76,   77,
-           77,   47,   47,   55,   55,   58,   58,   58,   57,   78,
-           78,   79,   48,   48,   48,   48,   80,   80,   81,   81,
-           82,   82,   45,   45,   41,   41,   83,   43,   43,   84,
-           42,   42,   44,   44,   54,   54,   54,   54,   68,   68,
-           87,   87,   88,   88,   88,   90,   90,   91,   91,   91,
-           89,   89,   69,   69,   69,   92,   92,   93,   93,   94,
-           94,   94,   50,   95,   95,   96,   51,   98,   98,   99,
-           99,  100,  100,   73,  101,  101,  101,  101,  101,  106,
-          106,  107,  107,  108,  108,  108,  108,  108,  109,  110,
-          110,  105,  105,  102,  102,  104,  104,  112,  112,  111,
-          111,  111,  111,  111,  111,  103,  113,  113,  115,  114,
-          114,   52,  116,  116,   46,   46,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,  123,  117,  117,  122,  122,  125,  126,  126,
-          127,  128,  128,  128,   75,   75,   63,   63,   63,  118,
-          118,  118,  130,  130,  119,  119,  121,  121,  121,  124,
-          124,  135,  135,  135,   86,  137,  137,  137,  120,  120,
-          120,  120,  120,  120,  120,  120,  120,  120,  120,  120,
-          120,  120,  120,  120,   49,   49,  133,  133,  133,  129,
-          129,  129,  138,  138,  138,  138,  138,  138,   56,   56,
-           56,   97,   97,   97,   97,  141,  140,  132,  132,  132,
-          132,  132,  132,  131,  131,  131,  139,  139,  139,  139,
-           85,  142,  142,  143,  143,  143,  143,  143,  143,  143,
-          136,  145,  145,  144,  144,  146,  146,  146,  146,  146,
-          146,  134,  134,  134,  134,  148,  149,  147,  147,  147,
-          147,  147,  147,  147,  150,  150,  150,  150
+            5,    5,    5,    5,    5,    6,    6,    6,    6,    6,
+            6,    6,    7,    7,    8,    9,   10,   10,   10,   11,
+           11,   12,   12,   13,   14,   14,   15,   15,   16,   16,
+           17,   17,   20,   20,   21,   22,   22,   23,   23,    4,
+            4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
+           28,   28,   29,   29,   31,   33,   33,   27,   35,   35,
+           32,   37,   37,   34,   34,   36,   36,   38,   38,   30,
+           39,   39,   40,   42,   43,   43,   44,   45,   45,   47,
+           46,   46,   46,   46,   48,   48,   48,   48,   48,   48,
+           48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
+           48,   48,   48,   48,   48,   48,   48,   48,   24,   24,
+           67,   67,   70,   70,   69,   68,   68,   61,   73,   73,
+           74,   74,   75,   75,   76,   76,   25,   25,   26,   26,
+           26,   26,   79,   79,   79,   80,   80,   83,   83,   81,
+           81,   84,   85,   85,   55,   55,   63,   63,   66,   66,
+           66,   65,   86,   86,   87,   56,   56,   56,   56,   88,
+           88,   89,   89,   90,   90,   91,   92,   92,   93,   93,
+           94,   94,   53,   53,   49,   49,   96,   51,   51,   97,
+           50,   50,   52,   52,   62,   62,   62,   62,   77,   77,
+          100,  100,  102,  102,  102,  102,  101,  101,  101,  104,
+          104,  104,  105,  105,  107,  107,  107,  106,  106,  108,
+          108,  109,  109,  109,  103,  103,   78,   78,   78,   19,
+           19,  110,  110,  111,  111,  111,  111,   58,  112,  112,
+          113,   59,  115,  115,  116,  116,  117,  117,   82,  118,
+          118,  118,  118,  118,  123,  123,  124,  124,  125,  125,
+          125,  125,  125,  126,  127,  127,  122,  122,  119,  119,
+          121,  121,  129,  129,  128,  128,  128,  128,  128,  128,
+          120,  130,  130,  132,  131,  131,   60,   95,  133,  133,
+           54,   54,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,  140,  134,  134,  139,  139,  142,
+          143,  143,  144,  145,  145,  145,   18,   18,   71,   71,
+           71,   71,  135,  135,  135,  135,  147,  147,  136,  136,
+          138,  138,  138,  141,  141,  152,  152,  152,  152,  152,
+          152,  152,  152,  152,  153,  153,   99,  155,  155,  155,
+          155,  137,  137,  137,  137,  137,  137,  137,  137,   57,
+           57,  150,  150,  150,  150,  156,  156,  146,  146,  146,
+          157,  157,  157,  157,  157,  157,   72,   72,   64,   64,
+           64,   64,  114,  114,  114,  114,  160,  159,  149,  149,
+          149,  149,  149,  149,  149,  148,  148,  148,  158,  158,
+          158,  158,   98,  154,  162,  162,  161,  161,  163,  163,
+          163,  163,  163,  163,  163,  163,  151,  151,  151,  151,
+          165,  166,  164,  164,  164,  164,  164,  164,  164,  164,
+          167,  167,  167,  167
     );
 
     protected $ruleToLength = array(
@@ -807,51 +906,56 @@ class Php7 extends \PhpParser\ParserAbstract
             1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
             1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
             1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-            1,    1,    1,    1,    1,    1,    3,    1,    1,    1,
-            1,    0,    1,    0,    1,    1,    1,    1,    1,    3,
-            5,    4,    3,    4,    2,    3,    1,    1,    7,    8,
-            6,    7,    2,    3,    1,    2,    3,    1,    2,    3,
-            1,    1,    3,    1,    2,    1,    2,    2,    3,    1,
-            3,    2,    3,    1,    3,    2,    0,    1,    1,    1,
-            1,    1,    3,    7,   10,    5,    7,    9,    5,    3,
-            3,    3,    3,    3,    3,    1,    2,    5,    7,    9,
-            6,    5,    6,    3,    3,    2,    1,    1,    1,    0,
-            2,    1,    3,    8,    0,    4,    2,    1,    3,    0,
-            1,    0,    1,    3,    1,    8,    7,    6,    5,    1,
-            2,    2,    0,    2,    0,    2,    0,    2,    2,    1,
-            3,    1,    4,    1,    4,    1,    1,    4,    2,    1,
-            3,    3,    3,    4,    4,    5,    0,    2,    4,    3,
-            1,    1,    1,    4,    0,    2,    5,    0,    2,    6,
+            1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+            1,    1,    1,    1,    1,    1,    0,    1,    0,    1,
+            1,    2,    1,    3,    4,    1,    2,    0,    1,    1,
+            1,    1,    1,    3,    5,    4,    3,    4,    2,    3,
+            1,    1,    7,    6,    2,    3,    1,    2,    3,    1,
+            2,    3,    1,    1,    3,    1,    3,    1,    2,    2,
+            3,    1,    3,    2,    3,    1,    3,    2,    0,    1,
+            1,    1,    1,    1,    3,    7,   10,    5,    7,    9,
+            5,    3,    3,    3,    3,    3,    3,    1,    2,    5,
+            7,    9,    6,    5,    6,    3,    2,    1,    1,    1,
+            0,    2,    1,    3,    8,    0,    4,    2,    1,    3,
+            0,    1,    0,    1,    3,    1,    8,    9,    7,    8,
+            7,    6,    1,    2,    2,    0,    2,    0,    2,    0,
+            2,    2,    1,    3,    1,    4,    1,    4,    1,    1,
+            4,    2,    1,    3,    3,    3,    4,    4,    5,    0,
+            2,    4,    3,    1,    1,    7,    0,    2,    1,    3,
+            3,    4,    1,    4,    0,    2,    5,    0,    2,    6,
             0,    2,    0,    3,    1,    2,    1,    1,    2,    0,
-            1,    3,    4,    6,    4,    1,    2,    1,    1,    1,
-            0,    1,    0,    2,    2,    2,    4,    1,    3,    1,
-            2,    2,    2,    3,    1,    1,    2,    3,    1,    1,
-            3,    2,    0,    1,    4,    4,    9,    3,    1,    1,
-            3,    0,    2,    4,    5,    4,    4,    4,    3,    1,
-            1,    1,    1,    1,    1,    0,    1,    1,    2,    1,
-            1,    1,    1,    1,    1,    2,    1,    3,    1,    1,
-            3,    2,    3,    1,    0,    1,    1,    3,    3,    3,
-            4,    1,    2,    3,    3,    3,    3,    3,    3,    3,
-            3,    3,    3,    3,    3,    3,    2,    2,    2,    2,
+            1,    3,    0,    1,    1,    1,    6,    8,    6,    1,
+            2,    1,    1,    1,    1,    1,    1,    3,    3,    3,
+            3,    1,    2,    1,    0,    1,    0,    2,    2,    2,
+            4,    1,    3,    1,    2,    2,    3,    2,    3,    1,
+            1,    2,    3,    1,    1,    3,    2,    0,    1,    5,
+            5,   10,    3,    1,    1,    3,    0,    2,    4,    5,
+            4,    4,    4,    3,    1,    1,    1,    1,    1,    1,
+            0,    1,    1,    2,    1,    1,    1,    1,    1,    1,
+            2,    1,    3,    1,    1,    3,    2,    2,    3,    1,
+            0,    1,    1,    3,    3,    3,    4,    1,    1,    2,
             3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-            3,    3,    3,    3,    3,    3,    3,    2,    2,    2,
-            2,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-            3,    3,    5,    4,    3,    4,    4,    2,    2,    4,
-            2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
-            2,    1,    3,    2,    1,    2,    4,    2,    8,    9,
-            8,    9,    7,    3,    2,    0,    4,    2,    1,    3,
-            2,    2,    2,    4,    1,    1,    1,    2,    3,    1,
-            1,    1,    1,    1,    0,    3,    0,    1,    1,    0,
-            1,    1,    3,    3,    3,    4,    1,    1,    1,    1,
-            1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-            3,    2,    3,    3,    0,    1,    1,    3,    1,    1,
-            3,    1,    1,    4,    4,    4,    1,    4,    1,    1,
-            3,    1,    4,    2,    2,    1,    3,    1,    4,    4,
-            3,    3,    3,    1,    3,    1,    1,    3,    1,    1,
-            4,    3,    1,    1,    2,    1,    3,    4,    3,    0,
-            1,    1,    1,    3,    1,    3,    1,    4,    2,    2,
-            0,    2,    2,    1,    2,    1,    1,    1,    4,    3,
-            3,    3,    6,    3,    1,    1,    2,    1
+            3,    3,    3,    2,    2,    2,    2,    3,    3,    3,
+            3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+            3,    3,    3,    3,    2,    2,    2,    2,    3,    3,
+            3,    3,    3,    3,    3,    3,    3,    3,    3,    5,
+            4,    3,    4,    4,    2,    2,    4,    2,    2,    2,
+            2,    2,    2,    2,    2,    2,    2,    2,    1,    3,
+            2,    1,    2,    4,    2,    2,    8,    9,    8,    9,
+            9,   10,    9,   10,    8,    3,    2,    0,    4,    2,
+            1,    3,    2,    2,    2,    4,    1,    1,    1,    1,
+            1,    1,    1,    1,    3,    1,    1,    1,    0,    3,
+            0,    1,    1,    0,    1,    1,    1,    1,    1,    1,
+            1,    1,    1,    1,    3,    3,    3,    4,    1,    1,
+            3,    1,    1,    1,    1,    1,    3,    2,    3,    0,
+            1,    1,    3,    1,    1,    1,    1,    1,    3,    1,
+            1,    4,    4,    1,    4,    4,    0,    1,    1,    1,
+            3,    3,    1,    4,    2,    2,    1,    3,    1,    4,
+            4,    3,    3,    3,    3,    1,    3,    1,    1,    3,
+            1,    1,    4,    1,    1,    1,    3,    1,    1,    2,
+            1,    3,    4,    3,    2,    0,    2,    2,    1,    2,
+            1,    1,    1,    4,    3,    3,    3,    3,    6,    3,
+            1,    1,    2,    1
     );
 
     protected function initReduceCallbacks() {
@@ -869,7 +973,7 @@ protected function initReduceCallbacks() {
                  $this->semValue = array();
             },
             4 => function ($stackPos) {
-                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createZeroLengthAttributes($startAttributes)); } else { $nop = null; };
+                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; };
             if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             5 => function ($stackPos) {
@@ -1101,7 +1205,7 @@ protected function initReduceCallbacks() {
                 $this->semValue = $this->semStack[$stackPos];
             },
             81 => function ($stackPos) {
-                 $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                $this->semValue = $this->semStack[$stackPos];
             },
             82 => function ($stackPos) {
                  $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
@@ -1113,136 +1217,136 @@ protected function initReduceCallbacks() {
                  $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             85 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             86 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             87 => function ($stackPos) {
                  $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             88 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             89 => function ($stackPos) {
-                 /* nothing */
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             90 => function ($stackPos) {
-                 /* nothing */
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             91 => function ($stackPos) {
-                 /* nothing */
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             92 => function ($stackPos) {
-                 $this->emitError(new Error('A trailing comma is not allowed here', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes));
+                 $this->semValue = new Name(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             93 => function ($stackPos) {
-                $this->semValue = $this->semStack[$stackPos];
+                 $this->semValue = new Expr\Variable(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             94 => function ($stackPos) {
-                $this->semValue = $this->semStack[$stackPos];
+                 /* nothing */
             },
             95 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 /* nothing */
             },
             96 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 /* nothing */
             },
             97 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->emitError(new Error('A trailing comma is not allowed here', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes));
             },
             98 => function ($stackPos) {
-                 $this->semValue = new Stmt\HaltCompiler($this->lexer->handleHaltCompiler(), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                $this->semValue = $this->semStack[$stackPos];
             },
             99 => function ($stackPos) {
-                 $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos-(3-2)], null, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
-            $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON);
-            $this->checkNamespace($this->semValue);
+                $this->semValue = $this->semStack[$stackPos];
             },
             100 => function ($stackPos) {
-                 $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos-(5-2)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
-            $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
-            $this->checkNamespace($this->semValue);
+                 $this->semValue = new Node\Attribute($this->semStack[$stackPos-(1-1)], [], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             101 => function ($stackPos) {
-                 $this->semValue = new Stmt\Namespace_(null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
-            $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
-            $this->checkNamespace($this->semValue);
+                 $this->semValue = new Node\Attribute($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             102 => function ($stackPos) {
-                 $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(3-2)], Stmt\Use_::TYPE_NORMAL, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             103 => function ($stackPos) {
-                 $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             104 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Node\AttributeGroup($this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             105 => function ($stackPos) {
-                 $this->semValue = new Stmt\Const_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             106 => function ($stackPos) {
-                 $this->semValue = Stmt\Use_::TYPE_FUNCTION;
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             107 => function ($stackPos) {
-                 $this->semValue = Stmt\Use_::TYPE_CONSTANT;
+                 $this->semValue = [];
             },
             108 => function ($stackPos) {
-                 $this->semValue = new Stmt\GroupUse(new Name($this->semStack[$stackPos-(7-3)], $this->startAttributeStack[$stackPos-(7-3)] + $this->endAttributeStack[$stackPos-(7-3)]), $this->semStack[$stackPos-(7-6)], $this->semStack[$stackPos-(7-2)], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             109 => function ($stackPos) {
-                 $this->semValue = new Stmt\GroupUse(new Name($this->semStack[$stackPos-(8-4)], $this->startAttributeStack[$stackPos-(8-4)] + $this->endAttributeStack[$stackPos-(8-4)]), $this->semStack[$stackPos-(8-7)], $this->semStack[$stackPos-(8-2)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             110 => function ($stackPos) {
-                 $this->semValue = new Stmt\GroupUse(new Name($this->semStack[$stackPos-(6-2)], $this->startAttributeStack[$stackPos-(6-2)] + $this->endAttributeStack[$stackPos-(6-2)]), $this->semStack[$stackPos-(6-5)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             111 => function ($stackPos) {
-                 $this->semValue = new Stmt\GroupUse(new Name($this->semStack[$stackPos-(7-3)], $this->startAttributeStack[$stackPos-(7-3)] + $this->endAttributeStack[$stackPos-(7-3)]), $this->semStack[$stackPos-(7-6)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             112 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Stmt\HaltCompiler($this->lexer->handleHaltCompiler(), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             113 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos-(3-2)], null, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON);
+            $this->checkNamespace($this->semValue);
             },
             114 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos-(5-2)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+            $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
+            $this->checkNamespace($this->semValue);
             },
             115 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Stmt\Namespace_(null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+            $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
+            $this->checkNamespace($this->semValue);
             },
             116 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(3-2)], Stmt\Use_::TYPE_NORMAL, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             117 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             118 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             119 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Stmt\Const_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             120 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = Stmt\Use_::TYPE_FUNCTION;
             },
             121 => function ($stackPos) {
-                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(1-1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(1-1));
+                 $this->semValue = Stmt\Use_::TYPE_CONSTANT;
             },
             122 => function ($stackPos) {
-                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(3-3));
+                 $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-6)], $this->semStack[$stackPos-(7-2)], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
             },
             123 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-5)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
             },
             124 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             125 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)]; $this->semValue->type = Stmt\Use_::TYPE_NORMAL;
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             126 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)]; $this->semValue->type = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             127 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(2-1)];
@@ -1254,1220 +1358,1371 @@ protected function initReduceCallbacks() {
                  $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             130 => function ($stackPos) {
-                 $this->semValue = new Node\Const_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             131 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             132 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             133 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(1-1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(1-1));
             },
             134 => function ($stackPos) {
-                 $this->semValue = new Node\Const_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(3-3));
             },
             135 => function ($stackPos) {
-                 if (is_array($this->semStack[$stackPos-(2-2)])) { $this->semValue = array_merge($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]); } else { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; };
+                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(1-1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(1-1));
             },
             136 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(3-3));
             },
             137 => function ($stackPos) {
-                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createZeroLengthAttributes($startAttributes)); } else { $nop = null; };
-            if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)]; $this->semValue->type = Stmt\Use_::TYPE_NORMAL;
             },
             138 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-2)]; $this->semValue->type = $this->semStack[$stackPos-(2-1)];
             },
             139 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             140 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             141 => function ($stackPos) {
-                 throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             142 => function ($stackPos) {
-
-        if ($this->semStack[$stackPos-(3-2)]) {
-            $this->semValue = $this->semStack[$stackPos-(3-2)]; $attrs = $this->startAttributeStack[$stackPos-(3-1)]; $stmts = $this->semValue; if (!empty($attrs['comments'])) {$stmts[0]->setAttribute('comments', array_merge($attrs['comments'], $stmts[0]->getAttribute('comments', []))); };
-        } else {
-            $startAttributes = $this->startAttributeStack[$stackPos-(3-1)]; if (isset($startAttributes['comments'])) { $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); } else { $this->semValue = null; };
-            if (null === $this->semValue) { $this->semValue = array(); }
-        }
-
+                 $this->semValue = new Node\Const_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             143 => function ($stackPos) {
-                 $this->semValue = new Stmt\If_($this->semStack[$stackPos-(7-3)], ['stmts' => is_array($this->semStack[$stackPos-(7-5)]) ? $this->semStack[$stackPos-(7-5)] : array($this->semStack[$stackPos-(7-5)]), 'elseifs' => $this->semStack[$stackPos-(7-6)], 'else' => $this->semStack[$stackPos-(7-7)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             144 => function ($stackPos) {
-                 $this->semValue = new Stmt\If_($this->semStack[$stackPos-(10-3)], ['stmts' => $this->semStack[$stackPos-(10-6)], 'elseifs' => $this->semStack[$stackPos-(10-7)], 'else' => $this->semStack[$stackPos-(10-8)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             145 => function ($stackPos) {
-                 $this->semValue = new Stmt\While_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             146 => function ($stackPos) {
-                 $this->semValue = new Stmt\Do_($this->semStack[$stackPos-(7-5)], is_array($this->semStack[$stackPos-(7-2)]) ? $this->semStack[$stackPos-(7-2)] : array($this->semStack[$stackPos-(7-2)]), $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
+                 $this->semValue = new Node\Const_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             147 => function ($stackPos) {
-                 $this->semValue = new Stmt\For_(['init' => $this->semStack[$stackPos-(9-3)], 'cond' => $this->semStack[$stackPos-(9-5)], 'loop' => $this->semStack[$stackPos-(9-7)], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
+                 if (is_array($this->semStack[$stackPos-(2-2)])) { $this->semValue = array_merge($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]); } else { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; };
             },
             148 => function ($stackPos) {
-                 $this->semValue = new Stmt\Switch_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             149 => function ($stackPos) {
-                 $this->semValue = new Stmt\Break_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; };
+            if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             150 => function ($stackPos) {
-                 $this->semValue = new Stmt\Continue_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             151 => function ($stackPos) {
-                 $this->semValue = new Stmt\Return_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             152 => function ($stackPos) {
-                 $this->semValue = new Stmt\Global_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             153 => function ($stackPos) {
-                 $this->semValue = new Stmt\Static_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             154 => function ($stackPos) {
-                 $this->semValue = new Stmt\Echo_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+
+        if ($this->semStack[$stackPos-(3-2)]) {
+            $this->semValue = $this->semStack[$stackPos-(3-2)]; $attrs = $this->startAttributeStack[$stackPos-(3-1)]; $stmts = $this->semValue; if (!empty($attrs['comments'])) {$stmts[0]->setAttribute('comments', array_merge($attrs['comments'], $stmts[0]->getAttribute('comments', []))); };
+        } else {
+            $startAttributes = $this->startAttributeStack[$stackPos-(3-1)]; if (isset($startAttributes['comments'])) { $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); } else { $this->semValue = null; };
+            if (null === $this->semValue) { $this->semValue = array(); }
+        }
+
             },
             155 => function ($stackPos) {
-                 $this->semValue = new Stmt\InlineHTML($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\If_($this->semStack[$stackPos-(7-3)], ['stmts' => is_array($this->semStack[$stackPos-(7-5)]) ? $this->semStack[$stackPos-(7-5)] : array($this->semStack[$stackPos-(7-5)]), 'elseifs' => $this->semStack[$stackPos-(7-6)], 'else' => $this->semStack[$stackPos-(7-7)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
             },
             156 => function ($stackPos) {
-                 $this->semValue = new Stmt\Expression($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\If_($this->semStack[$stackPos-(10-3)], ['stmts' => $this->semStack[$stackPos-(10-6)], 'elseifs' => $this->semStack[$stackPos-(10-7)], 'else' => $this->semStack[$stackPos-(10-8)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
             },
             157 => function ($stackPos) {
-                 $this->semValue = new Stmt\Unset_($this->semStack[$stackPos-(5-3)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\While_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
             158 => function ($stackPos) {
-                 $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-5)][0], ['keyVar' => null, 'byRef' => $this->semStack[$stackPos-(7-5)][1], 'stmts' => $this->semStack[$stackPos-(7-7)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\Do_($this->semStack[$stackPos-(7-5)], is_array($this->semStack[$stackPos-(7-2)]) ? $this->semStack[$stackPos-(7-2)] : array($this->semStack[$stackPos-(7-2)]), $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
             },
             159 => function ($stackPos) {
-                 $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(9-3)], $this->semStack[$stackPos-(9-7)][0], ['keyVar' => $this->semStack[$stackPos-(9-5)], 'byRef' => $this->semStack[$stackPos-(9-7)][1], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\For_(['init' => $this->semStack[$stackPos-(9-3)], 'cond' => $this->semStack[$stackPos-(9-5)], 'loop' => $this->semStack[$stackPos-(9-7)], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
             },
             160 => function ($stackPos) {
-                 $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(6-3)], new Expr\Error($this->startAttributeStack[$stackPos-(6-4)] + $this->endAttributeStack[$stackPos-(6-4)]), ['stmts' => $this->semStack[$stackPos-(6-6)]], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\Switch_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
             161 => function ($stackPos) {
-                 $this->semValue = new Stmt\Declare_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\Break_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             162 => function ($stackPos) {
-                 $this->semValue = new Stmt\TryCatch($this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-5)], $this->semStack[$stackPos-(6-6)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); $this->checkTryCatch($this->semValue);
+                 $this->semValue = new Stmt\Continue_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             163 => function ($stackPos) {
-                 $this->semValue = new Stmt\Throw_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\Return_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             164 => function ($stackPos) {
-                 $this->semValue = new Stmt\Goto_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\Global_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             165 => function ($stackPos) {
-                 $this->semValue = new Stmt\Label($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\Static_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             166 => function ($stackPos) {
-                 $this->semValue = array(); /* means: no statement */
+                 $this->semValue = new Stmt\Echo_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             167 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Stmt\InlineHTML($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             168 => function ($stackPos) {
-                 $startAttributes = $this->startAttributeStack[$stackPos-(1-1)]; if (isset($startAttributes['comments'])) { $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); } else { $this->semValue = null; };
-            if ($this->semValue === null) $this->semValue = array(); /* means: no statement */
+
+        $e = $this->semStack[$stackPos-(2-1)];
+        if ($e instanceof Expr\Throw_) {
+            // For backwards-compatibility reasons, convert throw in statement position into
+            // Stmt\Throw_ rather than Stmt\Expression(Expr\Throw_).
+            $this->semValue = new Stmt\Throw_($e->expr, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+        } else {
+            $this->semValue = new Stmt\Expression($e, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+        }
+
             },
             169 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = new Stmt\Unset_($this->semStack[$stackPos-(5-3)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
             170 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-5)][0], ['keyVar' => null, 'byRef' => $this->semStack[$stackPos-(7-5)][1], 'stmts' => $this->semStack[$stackPos-(7-7)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
             },
             171 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(9-3)], $this->semStack[$stackPos-(9-7)][0], ['keyVar' => $this->semStack[$stackPos-(9-5)], 'byRef' => $this->semStack[$stackPos-(9-7)][1], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
             },
             172 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(6-3)], new Expr\Error($this->startAttributeStack[$stackPos-(6-4)] + $this->endAttributeStack[$stackPos-(6-4)]), ['stmts' => $this->semStack[$stackPos-(6-6)]], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
             },
             173 => function ($stackPos) {
-                 $this->semValue = new Stmt\Catch_($this->semStack[$stackPos-(8-3)], $this->semStack[$stackPos-(8-4)], $this->semStack[$stackPos-(8-7)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\Declare_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
             174 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Stmt\TryCatch($this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-5)], $this->semStack[$stackPos-(6-6)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); $this->checkTryCatch($this->semValue);
             },
             175 => function ($stackPos) {
-                 $this->semValue = new Stmt\Finally_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\Goto_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             176 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Stmt\Label($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             177 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = array(); /* means: no statement */
             },
             178 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             179 => function ($stackPos) {
-                 $this->semValue = false;
+                 $startAttributes = $this->startAttributeStack[$stackPos-(1-1)]; if (isset($startAttributes['comments'])) { $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); } else { $this->semValue = null; };
+            if ($this->semValue === null) $this->semValue = array(); /* means: no statement */
             },
             180 => function ($stackPos) {
-                 $this->semValue = true;
+                 $this->semValue = array();
             },
             181 => function ($stackPos) {
-                 $this->semValue = false;
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             182 => function ($stackPos) {
-                 $this->semValue = true;
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             183 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             184 => function ($stackPos) {
-                 $this->semValue = [];
+                 $this->semValue = new Stmt\Catch_($this->semStack[$stackPos-(8-3)], $this->semStack[$stackPos-(8-4)], $this->semStack[$stackPos-(8-7)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
             },
             185 => function ($stackPos) {
-                 $this->semValue = new Stmt\Function_($this->semStack[$stackPos-(8-3)], ['byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-5)], 'returnType' => $this->semStack[$stackPos-(8-7)], 'stmts' => $this->semStack[$stackPos-(8-8)]], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
+                 $this->semValue = null;
             },
             186 => function ($stackPos) {
-                 $this->semValue = new Stmt\Class_($this->semStack[$stackPos-(7-2)], ['type' => $this->semStack[$stackPos-(7-1)], 'extends' => $this->semStack[$stackPos-(7-3)], 'implements' => $this->semStack[$stackPos-(7-4)], 'stmts' => $this->semStack[$stackPos-(7-6)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
-            $this->checkClass($this->semValue, $stackPos-(7-2));
+                 $this->semValue = new Stmt\Finally_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             187 => function ($stackPos) {
-                 $this->semValue = new Stmt\Interface_($this->semStack[$stackPos-(6-2)], ['extends' => $this->semStack[$stackPos-(6-3)], 'stmts' => $this->semStack[$stackPos-(6-5)]], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
-            $this->checkInterface($this->semValue, $stackPos-(6-2));
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             188 => function ($stackPos) {
-                 $this->semValue = new Stmt\Trait_($this->semStack[$stackPos-(5-2)], ['stmts' => $this->semStack[$stackPos-(5-4)]], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             189 => function ($stackPos) {
-                 $this->semValue = 0;
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             190 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT;
+                 $this->semValue = false;
             },
             191 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_FINAL;
+                 $this->semValue = true;
             },
             192 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = false;
             },
             193 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = true;
             },
             194 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             195 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = [];
             },
             196 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = new Stmt\Function_($this->semStack[$stackPos-(8-3)], ['byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-5)], 'returnType' => $this->semStack[$stackPos-(8-7)], 'stmts' => $this->semStack[$stackPos-(8-8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
             },
             197 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = new Stmt\Function_($this->semStack[$stackPos-(9-4)], ['byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-6)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => $this->semStack[$stackPos-(9-1)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
             },
             198 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Stmt\Class_($this->semStack[$stackPos-(7-2)], ['type' => $this->semStack[$stackPos-(7-1)], 'extends' => $this->semStack[$stackPos-(7-3)], 'implements' => $this->semStack[$stackPos-(7-4)], 'stmts' => $this->semStack[$stackPos-(7-6)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
+            $this->checkClass($this->semValue, $stackPos-(7-2));
             },
             199 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Stmt\Class_($this->semStack[$stackPos-(8-3)], ['type' => $this->semStack[$stackPos-(8-2)], 'extends' => $this->semStack[$stackPos-(8-4)], 'implements' => $this->semStack[$stackPos-(8-5)], 'stmts' => $this->semStack[$stackPos-(8-7)], 'attrGroups' => $this->semStack[$stackPos-(8-1)]], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
+            $this->checkClass($this->semValue, $stackPos-(8-3));
             },
             200 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Stmt\Interface_($this->semStack[$stackPos-(7-3)], ['extends' => $this->semStack[$stackPos-(7-4)], 'stmts' => $this->semStack[$stackPos-(7-6)], 'attrGroups' => $this->semStack[$stackPos-(7-1)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
+            $this->checkInterface($this->semValue, $stackPos-(7-3));
             },
             201 => function ($stackPos) {
-                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Stmt\Trait_($this->semStack[$stackPos-(6-3)], ['stmts' => $this->semStack[$stackPos-(6-5)], 'attrGroups' => $this->semStack[$stackPos-(6-1)]], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
             },
             202 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semValue = 0;
             },
             203 => function ($stackPos) {
-                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT;
             },
             204 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semValue = Stmt\Class_::MODIFIER_FINAL;
             },
             205 => function ($stackPos) {
-                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = null;
             },
             206 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = $this->semStack[$stackPos-(2-2)];
             },
             207 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semValue = array();
             },
             208 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-2)];
             },
             209 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = array();
             },
             210 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-2)];
             },
             211 => function ($stackPos) {
-                 $this->semValue = new Stmt\DeclareDeclare($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             212 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             213 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-3)];
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             214 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
             },
             215 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(5-3)];
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             216 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
             },
             217 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             218 => function ($stackPos) {
-                 $this->semValue = new Stmt\Case_($this->semStack[$stackPos-(4-2)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
             },
             219 => function ($stackPos) {
-                 $this->semValue = new Stmt\Case_(null, $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = null;
             },
             220 => function ($stackPos) {
-                $this->semValue = $this->semStack[$stackPos];
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             221 => function ($stackPos) {
-                $this->semValue = $this->semStack[$stackPos];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             222 => function ($stackPos) {
-                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             223 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             224 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = new Stmt\DeclareDeclare($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             225 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             226 => function ($stackPos) {
-                 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(5-3)], is_array($this->semStack[$stackPos-(5-5)]) ? $this->semStack[$stackPos-(5-5)] : array($this->semStack[$stackPos-(5-5)]), $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(4-3)];
             },
             227 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             228 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = $this->semStack[$stackPos-(5-3)];
             },
             229 => function ($stackPos) {
-                 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-6)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             230 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             231 => function ($stackPos) {
-                 $this->semValue = new Stmt\Else_(is_array($this->semStack[$stackPos-(2-2)]) ? $this->semStack[$stackPos-(2-2)] : array($this->semStack[$stackPos-(2-2)]), $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\Case_($this->semStack[$stackPos-(4-2)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             232 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Stmt\Case_(null, $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             233 => function ($stackPos) {
-                 $this->semValue = new Stmt\Else_($this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                $this->semValue = $this->semStack[$stackPos];
             },
             234 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
+                $this->semValue = $this->semStack[$stackPos];
             },
             235 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(2-2)], true);
+                 $this->semValue = new Expr\Match_($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-6)], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
             },
             236 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
+                 $this->semValue = [];
             },
             237 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             238 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             239 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             240 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Node\MatchArm($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             241 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Node\MatchArm(null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             242 => function ($stackPos) {
-                 $this->semValue = new Node\Param($this->semStack[$stackPos-(4-4)], null, $this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-2)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); $this->checkParam($this->semValue);
+                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
             },
             243 => function ($stackPos) {
-                 $this->semValue = new Node\Param($this->semStack[$stackPos-(6-4)], $this->semStack[$stackPos-(6-6)], $this->semStack[$stackPos-(6-1)], $this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-3)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); $this->checkParam($this->semValue);
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             244 => function ($stackPos) {
-                 $this->semValue = new Node\Param(new Expr\Error($this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes), null, $this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-2)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             245 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             246 => function ($stackPos) {
-                 $this->semValue = new Node\NullableType($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(5-3)], is_array($this->semStack[$stackPos-(5-5)]) ? $this->semStack[$stackPos-(5-5)] : array($this->semStack[$stackPos-(5-5)]), $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
             247 => function ($stackPos) {
-                 $this->semValue = $this->handleBuiltinTypes($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = array();
             },
             248 => function ($stackPos) {
-                 $this->semValue = new Node\Identifier('array', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             249 => function ($stackPos) {
-                 $this->semValue = new Node\Identifier('callable', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-6)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
             },
             250 => function ($stackPos) {
                  $this->semValue = null;
             },
             251 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Stmt\Else_(is_array($this->semStack[$stackPos-(2-2)]) ? $this->semStack[$stackPos-(2-2)] : array($this->semStack[$stackPos-(2-2)]), $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             252 => function ($stackPos) {
                  $this->semValue = null;
             },
             253 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = new Stmt\Else_($this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             254 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
             },
             255 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = array($this->semStack[$stackPos-(2-2)], true);
             },
             256 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
             },
             257 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
             },
             258 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             259 => function ($stackPos) {
-                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(1-1)], false, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             260 => function ($stackPos) {
-                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], true, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             261 => function ($stackPos) {
-                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], false, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             262 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = 0;
             },
             263 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = Stmt\Class_::MODIFIER_PUBLIC;
             },
             264 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = Stmt\Class_::MODIFIER_PROTECTED;
             },
             265 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = Stmt\Class_::MODIFIER_PRIVATE;
             },
             266 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Node\Param($this->semStack[$stackPos-(6-6)], null, $this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-4)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes, $this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-1)]);
+            $this->checkParam($this->semValue);
             },
             267 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Node\Param($this->semStack[$stackPos-(8-6)], $this->semStack[$stackPos-(8-8)], $this->semStack[$stackPos-(8-3)], $this->semStack[$stackPos-(8-4)], $this->semStack[$stackPos-(8-5)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes, $this->semStack[$stackPos-(8-2)], $this->semStack[$stackPos-(8-1)]);
+            $this->checkParam($this->semValue);
             },
             268 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Node\Param(new Expr\Error($this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes), null, $this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-4)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes, $this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-1)]);
             },
             269 => function ($stackPos) {
-                 $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             270 => function ($stackPos) {
-                 $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Node\NullableType($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             271 => function ($stackPos) {
-                 if ($this->semStack[$stackPos-(2-2)] !== null) { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; }
+                 $this->semValue = new Node\UnionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             272 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             273 => function ($stackPos) {
-                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createZeroLengthAttributes($startAttributes)); } else { $nop = null; };
-            if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Node\Name('static', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             274 => function ($stackPos) {
-                 $attrs = $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes;
-            $this->semValue = new Stmt\Property($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $attrs, $this->semStack[$stackPos-(4-2)]); $this->checkProperty($this->semValue, $stackPos-(4-1));
+                 $this->semValue = $this->handleBuiltinTypes($this->semStack[$stackPos-(1-1)]);
             },
             275 => function ($stackPos) {
-                 $this->semValue = new Stmt\ClassConst($this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-1)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); $this->checkClassConst($this->semValue, $stackPos-(4-1));
+                 $this->semValue = new Node\Identifier('array', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             276 => function ($stackPos) {
-                 $this->semValue = new Stmt\ClassMethod($this->semStack[$stackPos-(9-4)], ['type' => $this->semStack[$stackPos-(9-1)], 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-6)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
-            $this->checkClassMethod($this->semValue, $stackPos-(9-1));
+                 $this->semValue = new Node\Identifier('callable', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             277 => function ($stackPos) {
-                 $this->semValue = new Stmt\TraitUse($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
             },
             278 => function ($stackPos) {
-                 $this->semValue = null; /* will be skipped */
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             279 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
             },
             280 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             281 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             282 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Node\NullableType($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             283 => function ($stackPos) {
-                 $this->semValue = new Stmt\TraitUseAdaptation\Precedence($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Node\UnionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             284 => function ($stackPos) {
-                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(5-1)][0], $this->semStack[$stackPos-(5-1)][1], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+                 $this->semValue = null;
             },
             285 => function ($stackPos) {
-                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], $this->semStack[$stackPos-(4-3)], null, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             286 => function ($stackPos) {
-                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = null;
             },
             287 => function ($stackPos) {
-                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(2-2)];
             },
             288 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
+                 $this->semValue = null;
             },
             289 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = array();
             },
             290 => function ($stackPos) {
-                 $this->semValue = array(null, $this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             291 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             292 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             293 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(1-1)], false, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             294 => function ($stackPos) {
-                 $this->semValue = 0;
+                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], true, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             295 => function ($stackPos) {
-                 $this->semValue = 0;
+                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], false, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             296 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(3-3)], false, false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->semStack[$stackPos-(3-1)]);
             },
             297 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             298 => function ($stackPos) {
-                 $this->checkModifier($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $this->semValue = $this->semStack[$stackPos-(2-1)] | $this->semStack[$stackPos-(2-2)];
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             299 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_PUBLIC;
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             300 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_PROTECTED;
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             301 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_PRIVATE;
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             302 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_STATIC;
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             303 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT;
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             304 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_FINAL;
+                 $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             305 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             306 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 if ($this->semStack[$stackPos-(2-2)] !== null) { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; }
             },
             307 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = array();
             },
             308 => function ($stackPos) {
-                 $this->semValue = new Node\VarLikeIdentifier(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; };
+            if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             309 => function ($stackPos) {
-                 $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\Property($this->semStack[$stackPos-(5-2)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes, $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-1)]);
+            $this->checkProperty($this->semValue, $stackPos-(5-2));
             },
             310 => function ($stackPos) {
-                 $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\ClassConst($this->semStack[$stackPos-(5-4)], $this->semStack[$stackPos-(5-2)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes, $this->semStack[$stackPos-(5-1)]);
+            $this->checkClassConst($this->semValue, $stackPos-(5-2));
             },
             311 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Stmt\ClassMethod($this->semStack[$stackPos-(10-5)], ['type' => $this->semStack[$stackPos-(10-2)], 'byRef' => $this->semStack[$stackPos-(10-4)], 'params' => $this->semStack[$stackPos-(10-7)], 'returnType' => $this->semStack[$stackPos-(10-9)], 'stmts' => $this->semStack[$stackPos-(10-10)], 'attrGroups' => $this->semStack[$stackPos-(10-1)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
+            $this->checkClassMethod($this->semValue, $stackPos-(10-2));
             },
             312 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Stmt\TraitUse($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             313 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = null; /* will be skipped */
             },
             314 => function ($stackPos) {
                  $this->semValue = array();
             },
             315 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             316 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = array();
             },
             317 => function ($stackPos) {
-                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             318 => function ($stackPos) {
-                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\TraitUseAdaptation\Precedence($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             319 => function ($stackPos) {
-                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(5-1)][0], $this->semStack[$stackPos-(5-1)][1], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
             320 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignRef($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], $this->semStack[$stackPos-(4-3)], null, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             321 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             322 => function ($stackPos) {
-                 $this->semValue = new Expr\Clone_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             323 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
             },
             324 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             325 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = array(null, $this->semStack[$stackPos-(1-1)]);
             },
             326 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = null;
             },
             327 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             328 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             329 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = 0;
             },
             330 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = 0;
             },
             331 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             332 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             333 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->checkModifier($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $this->semValue = $this->semStack[$stackPos-(2-1)] | $this->semStack[$stackPos-(2-2)];
             },
             334 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = Stmt\Class_::MODIFIER_PUBLIC;
             },
             335 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = Stmt\Class_::MODIFIER_PROTECTED;
             },
             336 => function ($stackPos) {
-                 $this->semValue = new Expr\PostInc($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = Stmt\Class_::MODIFIER_PRIVATE;
             },
             337 => function ($stackPos) {
-                 $this->semValue = new Expr\PreInc($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = Stmt\Class_::MODIFIER_STATIC;
             },
             338 => function ($stackPos) {
-                 $this->semValue = new Expr\PostDec($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT;
             },
             339 => function ($stackPos) {
-                 $this->semValue = new Expr\PreDec($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = Stmt\Class_::MODIFIER_FINAL;
             },
             340 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             341 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             342 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             343 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Node\VarLikeIdentifier(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             344 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             345 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             346 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             347 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             348 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             349 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             350 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             351 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             352 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             353 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             354 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             355 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             356 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignRef($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             357 => function ($stackPos) {
-                 $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             358 => function ($stackPos) {
-                 $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             359 => function ($stackPos) {
-                 $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Clone_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             360 => function ($stackPos) {
-                 $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             361 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             362 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             363 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             364 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             365 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Spaceship($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             366 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             367 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             368 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             369 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             370 => function ($stackPos) {
-                 $this->semValue = new Expr\Instanceof_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             371 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = new Expr\AssignOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             372 => function ($stackPos) {
-                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(5-1)], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             373 => function ($stackPos) {
-                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(4-1)], null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\PostInc($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             374 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\PreInc($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             375 => function ($stackPos) {
-                 $this->semValue = new Expr\Isset_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\PostDec($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             376 => function ($stackPos) {
-                 $this->semValue = new Expr\Empty_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\PreDec($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             377 => function ($stackPos) {
-                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             378 => function ($stackPos) {
-                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             379 => function ($stackPos) {
-                 $this->semValue = new Expr\Eval_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             380 => function ($stackPos) {
-                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             381 => function ($stackPos) {
-                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             382 => function ($stackPos) {
-                 $this->semValue = new Expr\Cast\Int_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             383 => function ($stackPos) {
-                 $attrs = $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes;
-            $attrs['kind'] = $this->getFloatCastKind($this->semStack[$stackPos-(2-1)]);
-            $this->semValue = new Expr\Cast\Double($this->semStack[$stackPos-(2-2)], $attrs);
+                 $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             384 => function ($stackPos) {
-                 $this->semValue = new Expr\Cast\String_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             385 => function ($stackPos) {
-                 $this->semValue = new Expr\Cast\Array_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             386 => function ($stackPos) {
-                 $this->semValue = new Expr\Cast\Object_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             387 => function ($stackPos) {
-                 $this->semValue = new Expr\Cast\Bool_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             388 => function ($stackPos) {
-                 $this->semValue = new Expr\Cast\Unset_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             389 => function ($stackPos) {
-                 $attrs = $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes;
-            $attrs['kind'] = strtolower($this->semStack[$stackPos-(2-1)]) === 'exit' ? Expr\Exit_::KIND_EXIT : Expr\Exit_::KIND_DIE;
-            $this->semValue = new Expr\Exit_($this->semStack[$stackPos-(2-2)], $attrs);
+                 $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             390 => function ($stackPos) {
-                 $this->semValue = new Expr\ErrorSuppress($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             391 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             392 => function ($stackPos) {
-                 $this->semValue = new Expr\ShellExec($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             393 => function ($stackPos) {
-                 $this->semValue = new Expr\Print_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             394 => function ($stackPos) {
-                 $this->semValue = new Expr\Yield_(null, null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             395 => function ($stackPos) {
-                 $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(2-2)], null, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             396 => function ($stackPos) {
-                 $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             397 => function ($stackPos) {
-                 $this->semValue = new Expr\YieldFrom($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             398 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrowFunction(['static' => false, 'byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-4)], 'returnType' => $this->semStack[$stackPos-(8-6)], 'expr' => $this->semStack[$stackPos-(8-8)]], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             399 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrowFunction(['static' => true, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'returnType' => $this->semStack[$stackPos-(9-7)], 'expr' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             400 => function ($stackPos) {
-                 $this->semValue = new Expr\Closure(['static' => false, 'byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-4)], 'uses' => $this->semStack[$stackPos-(8-6)], 'returnType' => $this->semStack[$stackPos-(8-7)], 'stmts' => $this->semStack[$stackPos-(8-8)]], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             401 => function ($stackPos) {
-                 $this->semValue = new Expr\Closure(['static' => true, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'uses' => $this->semStack[$stackPos-(9-7)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             402 => function ($stackPos) {
-                 $this->semValue = array(new Stmt\Class_(null, ['type' => 0, 'extends' => $this->semStack[$stackPos-(7-3)], 'implements' => $this->semStack[$stackPos-(7-4)], 'stmts' => $this->semStack[$stackPos-(7-6)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes), $this->semStack[$stackPos-(7-2)]);
-            $this->checkClass($this->semValue[0], -1);
+                 $this->semValue = new Expr\BinaryOp\Spaceship($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             403 => function ($stackPos) {
-                 $this->semValue = new Expr\New_($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             404 => function ($stackPos) {
-                 list($class, $ctorArgs) = $this->semStack[$stackPos-(2-2)]; $this->semValue = new Expr\New_($class, $ctorArgs, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             405 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             406 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-3)];
+                 $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             407 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Expr\Instanceof_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             408 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             409 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(5-1)], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
             410 => function ($stackPos) {
-                 $this->semValue = new Expr\ClosureUse($this->semStack[$stackPos-(2-2)], $this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(4-1)], null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             411 => function ($stackPos) {
-                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             412 => function ($stackPos) {
-                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Isset_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             413 => function ($stackPos) {
-                 $this->semValue = new Expr\StaticCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Empty_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             414 => function ($stackPos) {
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             415 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             416 => function ($stackPos) {
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Eval_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             417 => function ($stackPos) {
-                 $this->semValue = new Name\FullyQualified($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             418 => function ($stackPos) {
-                 $this->semValue = new Name\Relative($this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             419 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\Cast\Int_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             420 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $attrs = $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes;
+            $attrs['kind'] = $this->getFloatCastKind($this->semStack[$stackPos-(2-1)]);
+            $this->semValue = new Expr\Cast\Double($this->semStack[$stackPos-(2-2)], $attrs);
             },
             421 => function ($stackPos) {
-                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
+                 $this->semValue = new Expr\Cast\String_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             422 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\Cast\Array_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             423 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\Cast\Object_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             424 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Expr\Cast\Bool_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             425 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = new Expr\Cast\Unset_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             426 => function ($stackPos) {
-                 $this->semValue = array();
+                 $attrs = $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes;
+            $attrs['kind'] = strtolower($this->semStack[$stackPos-(2-1)]) === 'exit' ? Expr\Exit_::KIND_EXIT : Expr\Exit_::KIND_DIE;
+            $this->semValue = new Expr\Exit_($this->semStack[$stackPos-(2-2)], $attrs);
             },
             427 => function ($stackPos) {
-                 $this->semValue = array(new Scalar\EncapsedStringPart(Scalar\String_::parseEscapeSequences($this->semStack[$stackPos-(1-1)], '`'), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes));
+                 $this->semValue = new Expr\ErrorSuppress($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             428 => function ($stackPos) {
-                 foreach ($this->semStack[$stackPos-(1-1)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', true); } }; $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             429 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = new Expr\ShellExec($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             430 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\Print_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             431 => function ($stackPos) {
-                 $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Yield_(null, null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             432 => function ($stackPos) {
-                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(2-2)], null, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             433 => function ($stackPos) {
-                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], new Expr\Error($this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)]), $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->errorState = 2;
+                 $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             434 => function ($stackPos) {
-                 $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_SHORT;
-            $this->semValue = new Expr\Array_($this->semStack[$stackPos-(3-2)], $attrs);
+                 $this->semValue = new Expr\YieldFrom($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             435 => function ($stackPos) {
-                 $attrs = $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_LONG;
-            $this->semValue = new Expr\Array_($this->semStack[$stackPos-(4-3)], $attrs);
+                 $this->semValue = new Expr\Throw_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             436 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\ArrowFunction(['static' => false, 'byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-4)], 'returnType' => $this->semStack[$stackPos-(8-6)], 'expr' => $this->semStack[$stackPos-(8-8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
             },
             437 => function ($stackPos) {
-                 $attrs = $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes; $attrs['kind'] = ($this->semStack[$stackPos-(1-1)][0] === "'" || ($this->semStack[$stackPos-(1-1)][1] === "'" && ($this->semStack[$stackPos-(1-1)][0] === 'b' || $this->semStack[$stackPos-(1-1)][0] === 'B')) ? Scalar\String_::KIND_SINGLE_QUOTED : Scalar\String_::KIND_DOUBLE_QUOTED);
-            $this->semValue = new Scalar\String_(Scalar\String_::parse($this->semStack[$stackPos-(1-1)]), $attrs);
+                 $this->semValue = new Expr\ArrowFunction(['static' => true, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'returnType' => $this->semStack[$stackPos-(9-7)], 'expr' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
             },
             438 => function ($stackPos) {
-                 $this->semValue = $this->parseLNumber($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Closure(['static' => false, 'byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-4)], 'uses' => $this->semStack[$stackPos-(8-6)], 'returnType' => $this->semStack[$stackPos-(8-7)], 'stmts' => $this->semStack[$stackPos-(8-8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
             },
             439 => function ($stackPos) {
-                 $this->semValue = new Scalar\DNumber(Scalar\DNumber::parse($this->semStack[$stackPos-(1-1)]), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Closure(['static' => true, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'uses' => $this->semStack[$stackPos-(9-7)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
             },
             440 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Line($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ArrowFunction(['static' => false, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'returnType' => $this->semStack[$stackPos-(9-7)], 'expr' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => $this->semStack[$stackPos-(9-1)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
             },
             441 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\File($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ArrowFunction(['static' => true, 'byRef' => $this->semStack[$stackPos-(10-4)], 'params' => $this->semStack[$stackPos-(10-6)], 'returnType' => $this->semStack[$stackPos-(10-8)], 'expr' => $this->semStack[$stackPos-(10-10)], 'attrGroups' => $this->semStack[$stackPos-(10-1)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
             },
             442 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Dir($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Closure(['static' => false, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'uses' => $this->semStack[$stackPos-(9-7)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => $this->semStack[$stackPos-(9-1)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
             },
             443 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Class_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Closure(['static' => true, 'byRef' => $this->semStack[$stackPos-(10-4)], 'params' => $this->semStack[$stackPos-(10-6)], 'uses' => $this->semStack[$stackPos-(10-8)], 'returnType' => $this->semStack[$stackPos-(10-9)], 'stmts' => $this->semStack[$stackPos-(10-10)], 'attrGroups' => $this->semStack[$stackPos-(10-1)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
             },
             444 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Trait_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = array(new Stmt\Class_(null, ['type' => 0, 'extends' => $this->semStack[$stackPos-(8-4)], 'implements' => $this->semStack[$stackPos-(8-5)], 'stmts' => $this->semStack[$stackPos-(8-7)], 'attrGroups' => $this->semStack[$stackPos-(8-1)]], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes), $this->semStack[$stackPos-(8-3)]);
+            $this->checkClass($this->semValue[0], -1);
             },
             445 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Method($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\New_($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             446 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Function_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 list($class, $ctorArgs) = $this->semStack[$stackPos-(2-2)]; $this->semValue = new Expr\New_($class, $ctorArgs, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             447 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Namespace_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             448 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(4-3)];
             },
             449 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             450 => function ($stackPos) {
-                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], true);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             451 => function ($stackPos) {
-                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(2-1)], '', $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(2-2)] + $this->endAttributeStack[$stackPos-(2-2)], true);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             452 => function ($stackPos) {
-                 $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED;
-            foreach ($this->semStack[$stackPos-(3-2)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', true); } }; $this->semValue = new Scalar\Encapsed($this->semStack[$stackPos-(3-2)], $attrs);
+                 $this->semValue = new Expr\ClosureUse($this->semStack[$stackPos-(2-2)], $this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             453 => function ($stackPos) {
-                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], true);
+                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             454 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             455 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\StaticCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             456 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             457 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             458 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             459 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             460 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = new Name\FullyQualified(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             461 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Name\Relative(substr($this->semStack[$stackPos-(1-1)], 10), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             462 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             463 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             464 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             465 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
             },
             466 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             467 => function ($stackPos) {
-                 $this->semValue = new Expr\MethodCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             468 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = null;
             },
             469 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             470 => function ($stackPos) {
-                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             471 => function ($stackPos) {
-                 $this->semValue = substr($this->semStack[$stackPos-(1-1)], 1);
+                 $this->semValue = array(new Scalar\EncapsedStringPart(Scalar\String_::parseEscapeSequences($this->semStack[$stackPos-(1-1)], '`'), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes));
             },
             472 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-3)];
+                 foreach ($this->semStack[$stackPos-(1-1)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', true); } }; $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             473 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             474 => function ($stackPos) {
-                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); $this->errorState = 2;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             475 => function ($stackPos) {
-                 $var = $this->semStack[$stackPos-(1-1)]; $this->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes) : $var;
+                 $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             476 => function ($stackPos) {
-                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Line($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             477 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\File($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             478 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Dir($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             479 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Class_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             480 => function ($stackPos) {
-                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Trait_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             481 => function ($stackPos) {
-                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Method($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             482 => function ($stackPos) {
-                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Function_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             483 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Scalar\MagicConst\Namespace_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             484 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             485 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], new Expr\Error($this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)]), $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->errorState = 2;
             },
             486 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_SHORT;
+            $this->semValue = new Expr\Array_($this->semStack[$stackPos-(3-2)], $attrs);
             },
             487 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $attrs = $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_LONG;
+            $this->semValue = new Expr\Array_($this->semStack[$stackPos-(4-3)], $attrs);
             },
             488 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             489 => function ($stackPos) {
-                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
+                 $attrs = $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes; $attrs['kind'] = ($this->semStack[$stackPos-(1-1)][0] === "'" || ($this->semStack[$stackPos-(1-1)][1] === "'" && ($this->semStack[$stackPos-(1-1)][0] === 'b' || $this->semStack[$stackPos-(1-1)][0] === 'B')) ? Scalar\String_::KIND_SINGLE_QUOTED : Scalar\String_::KIND_DOUBLE_QUOTED);
+            $this->semValue = new Scalar\String_(Scalar\String_::parse($this->semStack[$stackPos-(1-1)]), $attrs);
             },
             490 => function ($stackPos) {
-                 $this->semValue = new Expr\List_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED;
+            foreach ($this->semStack[$stackPos-(3-2)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', true); } }; $this->semValue = new Scalar\Encapsed($this->semStack[$stackPos-(3-2)], $attrs);
             },
             491 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = $this->parseLNumber($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             492 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Scalar\DNumber(Scalar\DNumber::parse($this->semStack[$stackPos-(1-1)]), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             493 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             494 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             495 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             496 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], true);
             },
             497 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-1)], true, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(2-1)], '', $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(2-2)] + $this->endAttributeStack[$stackPos-(2-2)], true);
             },
             498 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], true);
             },
             499 => function ($stackPos) {
                  $this->semValue = null;
             },
             500 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)]; $end = count($this->semValue)-1; if ($this->semValue[$end] === null) array_pop($this->semValue);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             501 => function ($stackPos) {
-                $this->semValue = $this->semStack[$stackPos];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             502 => function ($stackPos) {
-                 /* do nothing -- prevent default action of $$=$this->semStack[$1]. See $551. */
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             503 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             504 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             505 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             506 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             507 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-1)], true, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             508 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             509 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             510 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             511 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             512 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             513 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             514 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]);
+                 $this->semValue = new Expr\MethodCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             515 => function ($stackPos) {
-                 $this->semValue = new Scalar\EncapsedStringPart($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\NullsafeMethodCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             516 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = null;
             },
             517 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             518 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             519 => function ($stackPos) {
-                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             520 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             521 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             522 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-4)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
+                 $this->semValue = substr($this->semStack[$stackPos-(1-1)], 1);
             },
             523 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = $this->semStack[$stackPos-(4-3)];
             },
             524 => function ($stackPos) {
-                 $this->semValue = new Scalar\String_($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             525 => function ($stackPos) {
-                 $this->semValue = $this->parseNumString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); $this->errorState = 2;
             },
             526 => function ($stackPos) {
-                 $this->semValue = $this->parseNumString('-' . $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $var = $this->semStack[$stackPos-(1-1)]; $this->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes) : $var;
             },
             527 => function ($stackPos) {
+                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            528 => function ($stackPos) {
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            529 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+            },
+            530 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+            },
+            531 => function ($stackPos) {
+                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            532 => function ($stackPos) {
+                 $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            533 => function ($stackPos) {
+                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            534 => function ($stackPos) {
+                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            535 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+            },
+            536 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+            },
+            537 => function ($stackPos) {
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            538 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+            },
+            539 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+            },
+            540 => function ($stackPos) {
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            541 => function ($stackPos) {
+                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
+            },
+            542 => function ($stackPos) {
+                 $this->semValue = new Expr\List_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+            },
+            543 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(1-1)]; $end = count($this->semValue)-1; if ($this->semValue[$end] === null) array_pop($this->semValue);
+            },
+            544 => function ($stackPos) {
+                $this->semValue = $this->semStack[$stackPos];
+            },
+            545 => function ($stackPos) {
+                 /* do nothing -- prevent default action of $$=$this->semStack[$1]. See $551. */
+            },
+            546 => function ($stackPos) {
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+            },
+            547 => function ($stackPos) {
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+            },
+            548 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            549 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+            },
+            550 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            551 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            552 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-1)], true, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+            },
+            553 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            554 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+            },
+            555 => function ($stackPos) {
+                 $this->semValue = null;
+            },
+            556 => function ($stackPos) {
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+            },
+            557 => function ($stackPos) {
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+            },
+            558 => function ($stackPos) {
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+            },
+            559 => function ($stackPos) {
+                 $this->semValue = array($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]);
+            },
+            560 => function ($stackPos) {
+                 $this->semValue = new Scalar\EncapsedStringPart($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            561 => function ($stackPos) {
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            562 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+            },
+            563 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+            },
+            564 => function ($stackPos) {
+                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            565 => function ($stackPos) {
+                 $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            566 => function ($stackPos) {
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            567 => function ($stackPos) {
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            568 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-4)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
+            },
+            569 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+            },
+            570 => function ($stackPos) {
+                 $this->semValue = new Scalar\String_($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            571 => function ($stackPos) {
+                 $this->semValue = $this->parseNumString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            572 => function ($stackPos) {
+                 $this->semValue = $this->parseNumString('-' . $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+            },
+            573 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
         ];
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Parser/Tokens.php b/vendor/nikic/php-parser/lib/PhpParser/Parser/Tokens.php
index 50c5bf5747..ed2062b46d 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Parser/Tokens.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Parser/Tokens.php
@@ -6,84 +6,84 @@
 final class Tokens
 {
     const YYERRTOK = 256;
-    const T_INCLUDE = 257;
-    const T_INCLUDE_ONCE = 258;
-    const T_EVAL = 259;
-    const T_REQUIRE = 260;
-    const T_REQUIRE_ONCE = 261;
-    const T_LOGICAL_OR = 262;
-    const T_LOGICAL_XOR = 263;
-    const T_LOGICAL_AND = 264;
-    const T_PRINT = 265;
-    const T_YIELD = 266;
-    const T_DOUBLE_ARROW = 267;
-    const T_YIELD_FROM = 268;
-    const T_PLUS_EQUAL = 269;
-    const T_MINUS_EQUAL = 270;
-    const T_MUL_EQUAL = 271;
-    const T_DIV_EQUAL = 272;
-    const T_CONCAT_EQUAL = 273;
-    const T_MOD_EQUAL = 274;
-    const T_AND_EQUAL = 275;
-    const T_OR_EQUAL = 276;
-    const T_XOR_EQUAL = 277;
-    const T_SL_EQUAL = 278;
-    const T_SR_EQUAL = 279;
-    const T_POW_EQUAL = 280;
-    const T_COALESCE_EQUAL = 281;
-    const T_COALESCE = 282;
-    const T_BOOLEAN_OR = 283;
-    const T_BOOLEAN_AND = 284;
-    const T_IS_EQUAL = 285;
-    const T_IS_NOT_EQUAL = 286;
-    const T_IS_IDENTICAL = 287;
-    const T_IS_NOT_IDENTICAL = 288;
-    const T_SPACESHIP = 289;
-    const T_IS_SMALLER_OR_EQUAL = 290;
-    const T_IS_GREATER_OR_EQUAL = 291;
-    const T_SL = 292;
-    const T_SR = 293;
-    const T_INSTANCEOF = 294;
-    const T_INC = 295;
-    const T_DEC = 296;
-    const T_INT_CAST = 297;
-    const T_DOUBLE_CAST = 298;
-    const T_STRING_CAST = 299;
-    const T_ARRAY_CAST = 300;
-    const T_OBJECT_CAST = 301;
-    const T_BOOL_CAST = 302;
-    const T_UNSET_CAST = 303;
-    const T_POW = 304;
-    const T_NEW = 305;
-    const T_CLONE = 306;
-    const T_EXIT = 307;
-    const T_IF = 308;
-    const T_ELSEIF = 309;
-    const T_ELSE = 310;
-    const T_ENDIF = 311;
-    const T_LNUMBER = 312;
-    const T_DNUMBER = 313;
-    const T_STRING = 314;
-    const T_STRING_VARNAME = 315;
-    const T_VARIABLE = 316;
-    const T_NUM_STRING = 317;
-    const T_INLINE_HTML = 318;
-    const T_CHARACTER = 319;
-    const T_BAD_CHARACTER = 320;
-    const T_ENCAPSED_AND_WHITESPACE = 321;
-    const T_CONSTANT_ENCAPSED_STRING = 322;
-    const T_ECHO = 323;
-    const T_DO = 324;
-    const T_WHILE = 325;
-    const T_ENDWHILE = 326;
-    const T_FOR = 327;
-    const T_ENDFOR = 328;
-    const T_FOREACH = 329;
-    const T_ENDFOREACH = 330;
-    const T_DECLARE = 331;
-    const T_ENDDECLARE = 332;
-    const T_AS = 333;
-    const T_SWITCH = 334;
+    const T_THROW = 257;
+    const T_INCLUDE = 258;
+    const T_INCLUDE_ONCE = 259;
+    const T_EVAL = 260;
+    const T_REQUIRE = 261;
+    const T_REQUIRE_ONCE = 262;
+    const T_LOGICAL_OR = 263;
+    const T_LOGICAL_XOR = 264;
+    const T_LOGICAL_AND = 265;
+    const T_PRINT = 266;
+    const T_YIELD = 267;
+    const T_DOUBLE_ARROW = 268;
+    const T_YIELD_FROM = 269;
+    const T_PLUS_EQUAL = 270;
+    const T_MINUS_EQUAL = 271;
+    const T_MUL_EQUAL = 272;
+    const T_DIV_EQUAL = 273;
+    const T_CONCAT_EQUAL = 274;
+    const T_MOD_EQUAL = 275;
+    const T_AND_EQUAL = 276;
+    const T_OR_EQUAL = 277;
+    const T_XOR_EQUAL = 278;
+    const T_SL_EQUAL = 279;
+    const T_SR_EQUAL = 280;
+    const T_POW_EQUAL = 281;
+    const T_COALESCE_EQUAL = 282;
+    const T_COALESCE = 283;
+    const T_BOOLEAN_OR = 284;
+    const T_BOOLEAN_AND = 285;
+    const T_IS_EQUAL = 286;
+    const T_IS_NOT_EQUAL = 287;
+    const T_IS_IDENTICAL = 288;
+    const T_IS_NOT_IDENTICAL = 289;
+    const T_SPACESHIP = 290;
+    const T_IS_SMALLER_OR_EQUAL = 291;
+    const T_IS_GREATER_OR_EQUAL = 292;
+    const T_SL = 293;
+    const T_SR = 294;
+    const T_INSTANCEOF = 295;
+    const T_INC = 296;
+    const T_DEC = 297;
+    const T_INT_CAST = 298;
+    const T_DOUBLE_CAST = 299;
+    const T_STRING_CAST = 300;
+    const T_ARRAY_CAST = 301;
+    const T_OBJECT_CAST = 302;
+    const T_BOOL_CAST = 303;
+    const T_UNSET_CAST = 304;
+    const T_POW = 305;
+    const T_NEW = 306;
+    const T_CLONE = 307;
+    const T_EXIT = 308;
+    const T_IF = 309;
+    const T_ELSEIF = 310;
+    const T_ELSE = 311;
+    const T_ENDIF = 312;
+    const T_LNUMBER = 313;
+    const T_DNUMBER = 314;
+    const T_STRING = 315;
+    const T_STRING_VARNAME = 316;
+    const T_VARIABLE = 317;
+    const T_NUM_STRING = 318;
+    const T_INLINE_HTML = 319;
+    const T_ENCAPSED_AND_WHITESPACE = 320;
+    const T_CONSTANT_ENCAPSED_STRING = 321;
+    const T_ECHO = 322;
+    const T_DO = 323;
+    const T_WHILE = 324;
+    const T_ENDWHILE = 325;
+    const T_FOR = 326;
+    const T_ENDFOR = 327;
+    const T_FOREACH = 328;
+    const T_ENDFOREACH = 329;
+    const T_DECLARE = 330;
+    const T_ENDDECLARE = 331;
+    const T_AS = 332;
+    const T_SWITCH = 333;
+    const T_MATCH = 334;
     const T_ENDSWITCH = 335;
     const T_CASE = 336;
     const T_DEFAULT = 337;
@@ -97,27 +97,27 @@ final class Tokens
     const T_TRY = 345;
     const T_CATCH = 346;
     const T_FINALLY = 347;
-    const T_THROW = 348;
-    const T_USE = 349;
-    const T_INSTEADOF = 350;
-    const T_GLOBAL = 351;
-    const T_STATIC = 352;
-    const T_ABSTRACT = 353;
-    const T_FINAL = 354;
-    const T_PRIVATE = 355;
-    const T_PROTECTED = 356;
-    const T_PUBLIC = 357;
-    const T_VAR = 358;
-    const T_UNSET = 359;
-    const T_ISSET = 360;
-    const T_EMPTY = 361;
-    const T_HALT_COMPILER = 362;
-    const T_CLASS = 363;
-    const T_TRAIT = 364;
-    const T_INTERFACE = 365;
-    const T_EXTENDS = 366;
-    const T_IMPLEMENTS = 367;
-    const T_OBJECT_OPERATOR = 368;
+    const T_USE = 348;
+    const T_INSTEADOF = 349;
+    const T_GLOBAL = 350;
+    const T_STATIC = 351;
+    const T_ABSTRACT = 352;
+    const T_FINAL = 353;
+    const T_PRIVATE = 354;
+    const T_PROTECTED = 355;
+    const T_PUBLIC = 356;
+    const T_VAR = 357;
+    const T_UNSET = 358;
+    const T_ISSET = 359;
+    const T_EMPTY = 360;
+    const T_HALT_COMPILER = 361;
+    const T_CLASS = 362;
+    const T_TRAIT = 363;
+    const T_INTERFACE = 364;
+    const T_EXTENDS = 365;
+    const T_IMPLEMENTS = 366;
+    const T_OBJECT_OPERATOR = 367;
+    const T_NULLSAFE_OBJECT_OPERATOR = 368;
     const T_LIST = 369;
     const T_ARRAY = 370;
     const T_CALLABLE = 371;
@@ -127,20 +127,18 @@ final class Tokens
     const T_FUNC_C = 375;
     const T_LINE = 376;
     const T_FILE = 377;
-    const T_COMMENT = 378;
-    const T_DOC_COMMENT = 379;
-    const T_OPEN_TAG = 380;
-    const T_OPEN_TAG_WITH_ECHO = 381;
-    const T_CLOSE_TAG = 382;
-    const T_WHITESPACE = 383;
-    const T_START_HEREDOC = 384;
-    const T_END_HEREDOC = 385;
-    const T_DOLLAR_OPEN_CURLY_BRACES = 386;
-    const T_CURLY_OPEN = 387;
-    const T_PAAMAYIM_NEKUDOTAYIM = 388;
-    const T_NAMESPACE = 389;
-    const T_NS_C = 390;
-    const T_DIR = 391;
-    const T_NS_SEPARATOR = 392;
-    const T_ELLIPSIS = 393;
+    const T_START_HEREDOC = 378;
+    const T_END_HEREDOC = 379;
+    const T_DOLLAR_OPEN_CURLY_BRACES = 380;
+    const T_CURLY_OPEN = 381;
+    const T_PAAMAYIM_NEKUDOTAYIM = 382;
+    const T_NAMESPACE = 383;
+    const T_NS_C = 384;
+    const T_DIR = 385;
+    const T_NS_SEPARATOR = 386;
+    const T_ELLIPSIS = 387;
+    const T_NAME_FULLY_QUALIFIED = 388;
+    const T_NAME_QUALIFIED = 389;
+    const T_NAME_RELATIVE = 390;
+    const T_ATTRIBUTE = 391;
 }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php b/vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php
index 975e17c6bb..11c8568db9 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php
@@ -648,7 +648,7 @@ protected function fixupStartAttributes(Node $to, Node $from) {
     }
 
     protected function handleBuiltinTypes(Name $name) {
-        $scalarTypes = [
+        $builtinTypes = [
             'bool'     => true,
             'int'      => true,
             'float'    => true,
@@ -656,6 +656,9 @@ protected function handleBuiltinTypes(Name $name) {
             'iterable' => true,
             'void'     => true,
             'object'   => true,
+            'null'     => true,
+            'false'    => true,
+            'mixed'    => true,
         ];
 
         if (!$name->isUnqualified()) {
@@ -663,7 +666,7 @@ protected function handleBuiltinTypes(Name $name) {
         }
 
         $lowerName = $name->toLowerString();
-        if (!isset($scalarTypes[$lowerName])) {
+        if (!isset($builtinTypes[$lowerName])) {
             return $name;
         }
 
@@ -840,21 +843,29 @@ protected function parseDocString(
     }
 
     /**
-     * Create attributes for a zero-length node with the given start attributes.
+     * Create attributes for a zero-length common-capturing nop.
      *
-     * @param array $startAttributes
+     * @param Comment[] $comments
      * @return array
      */
-    protected function createZeroLengthAttributes(array $startAttributes) {
-        $attributes = $startAttributes;
-        if (isset($startAttributes['startLine'])) {
-            $attributes['endLine'] = $startAttributes['startLine'];
+    protected function createCommentNopAttributes(array $comments) {
+        $comment = $comments[count($comments) - 1];
+        $commentEndLine = $comment->getEndLine();
+        $commentEndFilePos = $comment->getEndFilePos();
+        $commentEndTokenPos = $comment->getEndTokenPos();
+
+        $attributes = ['comments' => $comments];
+        if (-1 !== $commentEndLine) {
+            $attributes['startLine'] = $commentEndLine;
+            $attributes['endLine'] = $commentEndLine;
         }
-        if (isset($startAttributes['startTokenPos'])) {
-            $attributes['endTokenPos'] = $startAttributes['startTokenPos'] - 1;
+        if (-1 !== $commentEndFilePos) {
+            $attributes['startFilePos'] = $commentEndFilePos + 1;
+            $attributes['endFilePos'] = $commentEndFilePos;
         }
-        if (isset($startAttributes['startFilePos'])) {
-            $attributes['endFilePos'] = $startAttributes['startFilePos'] - 1;
+        if (-1 !== $commentEndTokenPos) {
+            $attributes['startTokenPos'] = $commentEndTokenPos + 1;
+            $attributes['endTokenPos'] = $commentEndTokenPos;
         }
         return $attributes;
     }
@@ -887,13 +898,6 @@ protected function checkTryCatch(TryCatch $node) {
     }
 
     protected function checkNamespace(Namespace_ $node) {
-        if ($node->name && $node->name->isSpecialClassName()) {
-            $this->emitError(new Error(
-                sprintf('Cannot use \'%s\' as namespace name', $node->name),
-                $node->name->getAttributes()
-            ));
-        }
-
         if (null !== $node->stmts) {
             foreach ($node->stmts as $stmt) {
                 if ($stmt instanceof Namespace_) {
diff --git a/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php b/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php
index 78ee7d0032..c44bda9833 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php
@@ -18,7 +18,9 @@ class Standard extends PrettyPrinterAbstract
     // Special nodes
 
     protected function pParam(Node\Param $node) {
-        return ($node->type ? $this->p($node->type) . ' ' : '')
+        return $this->pAttrGroups($node->attrGroups, true)
+             . $this->pModifiers($node->flags)
+             . ($node->type ? $this->p($node->type) . ' ' : '')
              . ($node->byRef ? '&' : '')
              . ($node->variadic ? '...' : '')
              . $this->p($node->var)
@@ -26,7 +28,9 @@ protected function pParam(Node\Param $node) {
     }
 
     protected function pArg(Node\Arg $node) {
-        return ($node->byRef ? '&' : '') . ($node->unpack ? '...' : '') . $this->p($node->value);
+        return ($node->name ? $node->name->toString() . ': ' : '')
+             . ($node->byRef ? '&' : '') . ($node->unpack ? '...' : '')
+             . $this->p($node->value);
     }
 
     protected function pConst(Node\Const_ $node) {
@@ -37,6 +41,10 @@ protected function pNullableType(Node\NullableType $node) {
         return '?' . $this->p($node->type);
     }
 
+    protected function pUnionType(Node\UnionType $node) {
+        return $this->pImplode($node->types, '|');
+    }
+
     protected function pIdentifier(Node\Identifier $node) {
         return $node->name;
     }
@@ -45,6 +53,15 @@ protected function pVarLikeIdentifier(Node\VarLikeIdentifier $node) {
         return '$' . $node->name;
     }
 
+    protected function pAttribute(Node\Attribute $node) {
+        return $this->p($node->name)
+             . ($node->args ? '(' . $this->pCommaSeparated($node->args) . ')' : '');
+    }
+
+    protected function pAttributeGroup(Node\AttributeGroup $node) {
+        return '#[' . $this->pCommaSeparated($node->attrs) . ']';
+    }
+
     // Names
 
     protected function pName(Name $node) {
@@ -159,8 +176,13 @@ protected function pScalar_LNumber(Scalar\LNumber $node) {
             return (string) $node->value;
         }
 
-        $sign = $node->value < 0 ? '-' : '';
-        $str = (string) $node->value;
+        if ($node->value < 0) {
+            $sign = '-';
+            $str = (string) -$node->value;
+        } else {
+            $sign = '';
+            $str = (string) $node->value;
+        }
         switch ($kind) {
             case Scalar\LNumber::KIND_BIN:
                 return $sign . '0b' . base_convert($str, 10, 2);
@@ -375,7 +397,10 @@ protected function pExpr_BinaryOp_Coalesce(BinaryOp\Coalesce $node) {
     }
 
     protected function pExpr_Instanceof(Expr\Instanceof_ $node) {
-        return $this->pInfixOp(Expr\Instanceof_::class, $node->expr, ' instanceof ', $node->class);
+        list($precedence, $associativity) = $this->precedenceMap[Expr\Instanceof_::class];
+        return $this->pPrec($node->expr, $precedence, $associativity, -1)
+             . ' instanceof '
+             . $this->pNewVariable($node->class);
     }
 
     // Unary expressions
@@ -482,6 +507,11 @@ protected function pExpr_MethodCall(Expr\MethodCall $node) {
              . '(' . $this->pMaybeMultiline($node->args) . ')';
     }
 
+    protected function pExpr_NullsafeMethodCall(Expr\NullsafeMethodCall $node) {
+        return $this->pDereferenceLhs($node->var) . '?->' . $this->pObjectProperty($node->name)
+            . '(' . $this->pMaybeMultiline($node->args) . ')';
+    }
+
     protected function pExpr_StaticCall(Expr\StaticCall $node) {
         return $this->pDereferenceLhs($node->class) . '::'
              . ($node->name instanceof Expr
@@ -560,13 +590,17 @@ protected function pExpr_ConstFetch(Expr\ConstFetch $node) {
     }
 
     protected function pExpr_ClassConstFetch(Expr\ClassConstFetch $node) {
-        return $this->p($node->class) . '::' . $this->p($node->name);
+        return $this->pDereferenceLhs($node->class) . '::' . $this->p($node->name);
     }
 
     protected function pExpr_PropertyFetch(Expr\PropertyFetch $node) {
         return $this->pDereferenceLhs($node->var) . '->' . $this->pObjectProperty($node->name);
     }
 
+    protected function pExpr_NullsafePropertyFetch(Expr\NullsafePropertyFetch $node) {
+        return $this->pDereferenceLhs($node->var) . '?->' . $this->pObjectProperty($node->name);
+    }
+
     protected function pExpr_StaticPropertyFetch(Expr\StaticPropertyFetch $node) {
         return $this->pDereferenceLhs($node->class) . '::$' . $this->pObjectProperty($node->name);
     }
@@ -576,7 +610,8 @@ protected function pExpr_ShellExec(Expr\ShellExec $node) {
     }
 
     protected function pExpr_Closure(Expr\Closure $node) {
-        return ($node->static ? 'static ' : '')
+        return $this->pAttrGroups($node->attrGroups, true)
+             . ($node->static ? 'static ' : '')
              . 'function ' . ($node->byRef ? '&' : '')
              . '(' . $this->pCommaSeparated($node->params) . ')'
              . (!empty($node->uses) ? ' use(' . $this->pCommaSeparated($node->uses) . ')' : '')
@@ -584,8 +619,21 @@ protected function pExpr_Closure(Expr\Closure $node) {
              . ' {' . $this->pStmts($node->stmts) . $this->nl . '}';
     }
 
+    protected function pExpr_Match(Expr\Match_ $node) {
+        return 'match (' . $this->p($node->cond) . ') {'
+            . $this->pCommaSeparatedMultiline($node->arms, true)
+            . $this->nl
+            . '}';
+    }
+
+    protected function pMatchArm(Node\MatchArm $node) {
+        return ($node->conds ? $this->pCommaSeparated($node->conds) : 'default')
+            . ' => ' . $this->p($node->body);
+    }
+
     protected function pExpr_ArrowFunction(Expr\ArrowFunction $node) {
-        return ($node->static ? 'static ' : '')
+        return $this->pAttrGroups($node->attrGroups, true)
+            . ($node->static ? 'static ' : '')
             . 'fn' . ($node->byRef ? '&' : '')
             . '(' . $this->pCommaSeparated($node->params) . ')'
             . (null !== $node->returnType ? ': ' . $this->p($node->returnType) : '')
@@ -602,7 +650,8 @@ protected function pExpr_New(Expr\New_ $node) {
             $args = $node->args ? '(' . $this->pMaybeMultiline($node->args) . ')' : '';
             return 'new ' . $this->pClassCommon($node->class, $args);
         }
-        return 'new ' . $this->p($node->class) . '(' . $this->pMaybeMultiline($node->args) . ')';
+        return 'new ' . $this->pNewVariable($node->class)
+            . '(' . $this->pMaybeMultiline($node->args) . ')';
     }
 
     protected function pExpr_Clone(Expr\Clone_ $node) {
@@ -623,6 +672,10 @@ protected function pExpr_Exit(Expr\Exit_ $node) {
              . (null !== $node->expr ? '(' . $this->p($node->expr) . ')' : '');
     }
 
+    protected function pExpr_Throw(Expr\Throw_ $node) {
+        return 'throw ' . $this->p($node->expr);
+    }
+
     protected function pExpr_Yield(Expr\Yield_ $node) {
         if ($node->value === null) {
             return 'yield';
@@ -668,7 +721,8 @@ protected function pUseType($type) {
     }
 
     protected function pStmt_Interface(Stmt\Interface_ $node) {
-        return 'interface ' . $node->name
+        return $this->pAttrGroups($node->attrGroups)
+             . 'interface ' . $node->name
              . (!empty($node->extends) ? ' extends ' . $this->pCommaSeparated($node->extends) : '')
              . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}';
     }
@@ -678,7 +732,8 @@ protected function pStmt_Class(Stmt\Class_ $node) {
     }
 
     protected function pStmt_Trait(Stmt\Trait_ $node) {
-        return 'trait ' . $node->name
+        return $this->pAttrGroups($node->attrGroups)
+             . 'trait ' . $node->name
              . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}';
     }
 
@@ -703,7 +758,8 @@ protected function pStmt_TraitUseAdaptation_Alias(Stmt\TraitUseAdaptation\Alias
     }
 
     protected function pStmt_Property(Stmt\Property $node) {
-        return (0 === $node->flags ? 'var ' : $this->pModifiers($node->flags))
+        return $this->pAttrGroups($node->attrGroups)
+            . (0 === $node->flags ? 'var ' : $this->pModifiers($node->flags))
             . ($node->type ? $this->p($node->type) . ' ' : '')
             . $this->pCommaSeparated($node->props) . ';';
     }
@@ -714,9 +770,10 @@ protected function pStmt_PropertyProperty(Stmt\PropertyProperty $node) {
     }
 
     protected function pStmt_ClassMethod(Stmt\ClassMethod $node) {
-        return $this->pModifiers($node->flags)
+        return $this->pAttrGroups($node->attrGroups)
+             . $this->pModifiers($node->flags)
              . 'function ' . ($node->byRef ? '&' : '') . $node->name
-             . '(' . $this->pCommaSeparated($node->params) . ')'
+             . '(' . $this->pMaybeMultiline($node->params) . ')'
              . (null !== $node->returnType ? ' : ' . $this->p($node->returnType) : '')
              . (null !== $node->stmts
                 ? $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}'
@@ -724,12 +781,14 @@ protected function pStmt_ClassMethod(Stmt\ClassMethod $node) {
     }
 
     protected function pStmt_ClassConst(Stmt\ClassConst $node) {
-        return $this->pModifiers($node->flags)
+        return $this->pAttrGroups($node->attrGroups)
+             . $this->pModifiers($node->flags)
              . 'const ' . $this->pCommaSeparated($node->consts) . ';';
     }
 
     protected function pStmt_Function(Stmt\Function_ $node) {
-        return 'function ' . ($node->byRef ? '&' : '') . $node->name
+        return $this->pAttrGroups($node->attrGroups)
+             . 'function ' . ($node->byRef ? '&' : '') . $node->name
              . '(' . $this->pCommaSeparated($node->params) . ')'
              . (null !== $node->returnType ? ' : ' . $this->p($node->returnType) : '')
              . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}';
@@ -808,8 +867,8 @@ protected function pStmt_TryCatch(Stmt\TryCatch $node) {
     }
 
     protected function pStmt_Catch(Stmt\Catch_ $node) {
-        return 'catch (' . $this->pImplode($node->types, '|') . ' '
-             . $this->p($node->var)
+        return 'catch (' . $this->pImplode($node->types, '|')
+             . ($node->var !== null ? ' ' . $this->p($node->var) : '')
              . ') {' . $this->pStmts($node->stmts) . $this->nl . '}';
     }
 
@@ -884,11 +943,12 @@ protected function pStmt_Nop(Stmt\Nop $node) {
     // Helpers
 
     protected function pClassCommon(Stmt\Class_ $node, $afterClassToken) {
-        return $this->pModifiers($node->flags)
-        . 'class' . $afterClassToken
-        . (null !== $node->extends ? ' extends ' . $this->p($node->extends) : '')
-        . (!empty($node->implements) ? ' implements ' . $this->pCommaSeparated($node->implements) : '')
-        . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}';
+        return $this->pAttrGroups($node->attrGroups, $node->name === null)
+            . $this->pModifiers($node->flags)
+            . 'class' . $afterClassToken
+            . (null !== $node->extends ? ' extends ' . $this->p($node->extends) : '')
+            . (!empty($node->implements) ? ' implements ' . $this->pCommaSeparated($node->implements) : '')
+            . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}';
     }
 
     protected function pObjectProperty($node) {
@@ -971,6 +1031,11 @@ protected function pCallLhs(Node $node) {
         }
     }
 
+    protected function pNewVariable(Node $node) {
+        // TODO: This is not fully accurate.
+        return $this->pDereferenceLhs($node);
+    }
+
     /**
      * @param Node[] $nodes
      * @return bool
@@ -984,11 +1049,21 @@ private function hasNodeWithComments(array $nodes) {
         return false;
     }
 
-    private function pMaybeMultiline(array $nodes, $trailingComma = false) {
+    private function pMaybeMultiline(array $nodes, bool $trailingComma = false) {
         if (!$this->hasNodeWithComments($nodes)) {
             return $this->pCommaSeparated($nodes);
         } else {
             return $this->pCommaSeparatedMultiline($nodes, $trailingComma) . $this->nl;
         }
     }
+
+    private function pAttrGroups(array $nodes, bool $inline = false): string {
+        $result = '';
+        $sep = $inline ? ' ' : $this->nl;
+        foreach ($nodes as $node) {
+            $result .= $this->p($node) . $sep;
+        }
+
+        return $result;
+    }
 }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php b/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php
index 90f10c4624..bc85f76b45 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php
@@ -704,8 +704,10 @@ protected function pArray(
 
         $mapKey = $parentNodeType . '->' . $subNodeName;
         $insertStr = $this->listInsertionMap[$mapKey] ?? null;
+        $isStmtList = $subNodeName === 'stmts';
 
         $beforeFirstKeepOrReplace = true;
+        $skipRemovedNode = false;
         $delayedAdd = [];
         $lastElemIndentLevel = $this->indentLevel;
 
@@ -715,7 +717,7 @@ protected function pArray(
             $insertNewline = true;
         }
 
-        if ($subNodeName === 'stmts' && \count($origNodes) === 1 && \count($nodes) !== 1) {
+        if ($isStmtList && \count($origNodes) === 1 && \count($nodes) !== 1) {
             $startPos = $origNodes[0]->getStartTokenPos();
             $endPos = $origNodes[0]->getEndTokenPos();
             \assert($startPos >= 0 && $endPos >= 0);
@@ -754,14 +756,7 @@ protected function pArray(
 
                 $itemStartPos = $origArrItem->getStartTokenPos();
                 $itemEndPos = $origArrItem->getEndTokenPos();
-                \assert($itemStartPos >= 0 && $itemEndPos >= 0);
-
-                if ($itemEndPos < $itemStartPos) {
-                    // End can be before start for Nop nodes, because offsets refer to non-whitespace
-                    // locations, which for an "empty" node might result in an inverted order.
-                    assert($origArrItem instanceof Stmt\Nop);
-                    continue;
-                }
+                \assert($itemStartPos >= 0 && $itemEndPos >= 0 && $itemStartPos >= $pos);
 
                 $origIndentLevel = $this->indentLevel;
                 $lastElemIndentLevel = $this->origTokens->getIndentationBefore($itemStartPos) + $indentAdjustment;
@@ -769,19 +764,28 @@ protected function pArray(
 
                 $comments = $arrItem->getComments();
                 $origComments = $origArrItem->getComments();
-                $commentStartPos = $origComments ? $origComments[0]->getTokenPos() : $itemStartPos;
+                $commentStartPos = $origComments ? $origComments[0]->getStartTokenPos() : $itemStartPos;
                 \assert($commentStartPos >= 0);
 
-                $commentsChanged = $comments !== $origComments;
-                if ($commentsChanged) {
-                    // Remove old comments
-                    $itemStartPos = $commentStartPos;
+                if ($commentStartPos < $pos) {
+                    // Comments may be assigned to multiple nodes if they start at the same position.
+                    // Make sure we don't try to print them multiple times.
+                    $commentStartPos = $itemStartPos;
                 }
 
-                if (!empty($delayedAdd)) {
+                if ($skipRemovedNode) {
+                    if ($isStmtList && $this->origTokens->haveBracesInRange($pos, $itemStartPos)) {
+                        // We'd remove the brace of a code block.
+                        // TODO: Preserve formatting.
+                        $this->setIndentLevel($origIndentLevel);
+                        return null;
+                    }
+                } else {
                     $result .= $this->origTokens->getTokenCode(
                         $pos, $commentStartPos, $indentAdjustment);
+                }
 
+                if (!empty($delayedAdd)) {
                     /** @var Node $delayedAddNode */
                     foreach ($delayedAdd as $delayedAddNode) {
                         if ($insertNewline) {
@@ -800,19 +804,20 @@ protected function pArray(
                         }
                     }
 
-                    $result .= $this->origTokens->getTokenCode(
-                        $commentStartPos, $itemStartPos, $indentAdjustment);
-
                     $delayedAdd = [];
+                }
+
+                if ($comments !== $origComments) {
+                    if ($comments) {
+                        $result .= $this->pComments($comments) . $this->nl;
+                    }
                 } else {
                     $result .= $this->origTokens->getTokenCode(
-                        $pos, $itemStartPos, $indentAdjustment);
+                        $commentStartPos, $itemStartPos, $indentAdjustment);
                 }
 
-                if ($commentsChanged && $comments) {
-                    // Add new comments
-                    $result .= $this->pComments($comments) . $this->nl;
-                }
+                // If we had to remove anything, we have done so now.
+                $skipRemovedNode = false;
             } elseif ($diffType === DiffElem::TYPE_ADD) {
                 if (null === $insertStr) {
                     // We don't have insertion information for this list type
@@ -846,18 +851,34 @@ protected function pArray(
                     $result .= $insertStr;
                 }
             } elseif ($diffType === DiffElem::TYPE_REMOVE) {
-                if ($i === 0) {
-                    // TODO Handle removal at the start
-                    return null;
-                }
-
                 if (!$origArrItem instanceof Node) {
                     // We only support removal for nodes
                     return null;
                 }
 
+                $itemStartPos = $origArrItem->getStartTokenPos();
                 $itemEndPos = $origArrItem->getEndTokenPos();
-                \assert($itemEndPos >= 0);
+                \assert($itemStartPos >= 0 && $itemEndPos >= 0);
+
+                // Consider comments part of the node.
+                $origComments = $origArrItem->getComments();
+                if ($origComments) {
+                    $itemStartPos = $origComments[0]->getStartTokenPos();
+                }
+
+                if ($i === 0) {
+                    // If we're removing from the start, keep the tokens before the node and drop those after it,
+                    // instead of the other way around.
+                    $result .= $this->origTokens->getTokenCode(
+                        $pos, $itemStartPos, $indentAdjustment);
+                    $skipRemovedNode = true;
+                } else {
+                    if ($isStmtList && $this->origTokens->haveBracesInRange($pos, $itemStartPos)) {
+                        // We'd remove the brace of a code block.
+                        // TODO: Preserve formatting.
+                        return null;
+                    }
+                }
 
                 $pos = $itemEndPos + 1;
                 continue;
@@ -876,6 +897,11 @@ protected function pArray(
             $pos = $itemEndPos + 1;
         }
 
+        if ($skipRemovedNode) {
+            // TODO: Support removing single node.
+            return null;
+        }
+
         if (!empty($delayedAdd)) {
             if (!isset($this->emptyListInsertionMap[$mapKey])) {
                 return null;
@@ -1006,6 +1032,7 @@ protected function callLhsRequiresParens(Node $node) : bool {
             || $node instanceof Expr\ArrayDimFetch
             || $node instanceof Expr\FuncCall
             || $node instanceof Expr\MethodCall
+            || $node instanceof Expr\NullsafeMethodCall
             || $node instanceof Expr\StaticCall
             || $node instanceof Expr\Array_);
     }
@@ -1022,9 +1049,11 @@ protected function dereferenceLhsRequiresParens(Node $node) : bool {
             || $node instanceof Node\Name
             || $node instanceof Expr\ArrayDimFetch
             || $node instanceof Expr\PropertyFetch
+            || $node instanceof Expr\NullsafePropertyFetch
             || $node instanceof Expr\StaticPropertyFetch
             || $node instanceof Expr\FuncCall
             || $node instanceof Expr\MethodCall
+            || $node instanceof Expr\NullsafeMethodCall
             || $node instanceof Expr\StaticCall
             || $node instanceof Expr\Array_
             || $node instanceof Scalar\String_
@@ -1131,7 +1160,7 @@ protected function initializeFixupMap() {
             Expr\PostDec::class => ['var' => self::FIXUP_PREC_LEFT],
             Expr\Instanceof_::class => [
                 'expr' => self::FIXUP_PREC_LEFT,
-                'class' => self::FIXUP_PREC_RIGHT,
+                'class' => self::FIXUP_PREC_RIGHT, // TODO: FIXUP_NEW_VARIABLE
             ],
             Expr\Ternary::class => [
                 'cond' => self::FIXUP_PREC_LEFT,
@@ -1141,10 +1170,16 @@ protected function initializeFixupMap() {
             Expr\FuncCall::class => ['name' => self::FIXUP_CALL_LHS],
             Expr\StaticCall::class => ['class' => self::FIXUP_DEREF_LHS],
             Expr\ArrayDimFetch::class => ['var' => self::FIXUP_DEREF_LHS],
+            Expr\ClassConstFetch::class => ['var' => self::FIXUP_DEREF_LHS],
+            Expr\New_::class => ['class' => self::FIXUP_DEREF_LHS], // TODO: FIXUP_NEW_VARIABLE
             Expr\MethodCall::class => [
                 'var' => self::FIXUP_DEREF_LHS,
                 'name' => self::FIXUP_BRACED_NAME,
             ],
+            Expr\NullsafeMethodCall::class => [
+                'var' => self::FIXUP_DEREF_LHS,
+                'name' => self::FIXUP_BRACED_NAME,
+            ],
             Expr\StaticPropertyFetch::class => [
                 'class' => self::FIXUP_DEREF_LHS,
                 'name' => self::FIXUP_VAR_BRACED_NAME,
@@ -1153,6 +1188,10 @@ protected function initializeFixupMap() {
                 'var' => self::FIXUP_DEREF_LHS,
                 'name' => self::FIXUP_BRACED_NAME,
             ],
+            Expr\NullsafePropertyFetch::class => [
+                'var' => self::FIXUP_DEREF_LHS,
+                'name' => self::FIXUP_BRACED_NAME,
+            ],
             Scalar\Encapsed::class => [
                 'parts' => self::FIXUP_ENCAPSED,
             ],
@@ -1227,6 +1266,7 @@ protected function initializeRemovalMap() {
             'Param->type' => $stripRight,
             'Param->default' => $stripEquals,
             'Stmt_Break->num' => $stripBoth,
+            'Stmt_Catch->var' => $stripLeft,
             'Stmt_ClassMethod->returnType' => $stripColon,
             'Stmt_Class->extends' => ['left' => \T_EXTENDS],
             'Expr_PrintableNewAnonClass->extends' => ['left' => \T_EXTENDS],
@@ -1264,6 +1304,7 @@ protected function initializeInsertionMap() {
             'Param->type' => [null, false, null, ' '],
             'Param->default' => [null, false, ' = ', null],
             'Stmt_Break->num' => [\T_BREAK, false, ' ', null],
+            'Stmt_Catch->var' => [null, false, ' ', null],
             'Stmt_ClassMethod->returnType' => [')', false, ' : ', null],
             'Stmt_Class->extends' => [null, false, ' extends ', null],
             'Expr_PrintableNewAnonClass->extends' => [null, ' extends ', null],
@@ -1295,6 +1336,7 @@ protected function initializeListInsertionMap() {
             //'Expr_ShellExec->parts' => '', // TODO These need to be treated more carefully
             //'Scalar_Encapsed->parts' => '',
             'Stmt_Catch->types' => '|',
+            'UnionType->types' => '|',
             'Stmt_If->elseifs' => ' ',
             'Stmt_TryCatch->catches' => ' ',
 
@@ -1307,6 +1349,7 @@ protected function initializeListInsertionMap() {
             'Expr_Isset->vars' => ', ',
             'Expr_List->items' => ', ',
             'Expr_MethodCall->args' => ', ',
+            'Expr_NullsafeMethodCall->args' => ', ',
             'Expr_New->args' => ', ',
             'Expr_PrintableNewAnonClass->args' => ', ',
             'Expr_StaticCall->args' => ', ',
@@ -1324,12 +1367,15 @@ protected function initializeListInsertionMap() {
             'Stmt_Global->vars' => ', ',
             'Stmt_GroupUse->uses' => ', ',
             'Stmt_Interface->extends' => ', ',
+            'Stmt_Match->arms' => ', ',
             'Stmt_Property->props' => ', ',
             'Stmt_StaticVar->vars' => ', ',
             'Stmt_TraitUse->traits' => ', ',
             'Stmt_TraitUseAdaptation_Precedence->insteadof' => ', ',
             'Stmt_Unset->vars' => ', ',
             'Stmt_Use->uses' => ', ',
+            'MatchArm->conds' => ', ',
+            'AttributeGroup->attrs' => ', ',
 
             // statement lists
             'Expr_Closure->stmts' => "\n",
@@ -1350,6 +1396,17 @@ protected function initializeListInsertionMap() {
             'Stmt_Function->stmts' => "\n",
             'Stmt_If->stmts' => "\n",
             'Stmt_Namespace->stmts' => "\n",
+            'Stmt_Class->attrGroups' => "\n",
+            'Stmt_Interface->attrGroups' => "\n",
+            'Stmt_Trait->attrGroups' => "\n",
+            'Stmt_Function->attrGroups' => "\n",
+            'Stmt_ClassMethod->attrGroups' => "\n",
+            'Stmt_ClassConst->attrGroups' => "\n",
+            'Stmt_Property->attrGroups' => "\n",
+            'Expr_PrintableNewAnonClass->attrGroups' => ' ',
+            'Expr_Closure->attrGroups' => ' ',
+            'Expr_ArrowFunction->attrGroups' => ' ',
+            'Param->attrGroups' => ' ',
             'Stmt_Switch->cases' => "\n",
             'Stmt_TraitUse->adaptations' => "\n",
             'Stmt_TryCatch->stmts' => "\n",
@@ -1372,6 +1429,7 @@ protected function initializeEmptyListInsertionMap() {
             'Expr_Closure->params' => ['(', '', ''],
             'Expr_FuncCall->args' => ['(', '', ''],
             'Expr_MethodCall->args' => ['(', '', ''],
+            'Expr_NullsafeMethodCall->args' => ['(', '', ''],
             'Expr_New->args' => ['(', '', ''],
             'Expr_PrintableNewAnonClass->args' => ['(', '', ''],
             'Expr_PrintableNewAnonClass->implements' => [null, ' implements ', ''],
@@ -1396,6 +1454,7 @@ protected function initializeEmptyListInsertionMap() {
              * Stmt_TraitUseAdaptation_Precedence->insteadof
              * Stmt_Unset->vars
              * Stmt_Use->uses
+             * UnionType->types
              */
 
             /* TODO
@@ -1418,6 +1477,7 @@ protected function initializeModifierChangeMap() {
             'Stmt_ClassMethod->flags' => \T_FUNCTION,
             'Stmt_Class->flags' => \T_CLASS,
             'Stmt_Property->flags' => \T_VARIABLE,
+            'Param->flags' => \T_VARIABLE,
             //'Stmt_TraitUseAdaptation_Alias->newModifier' => 0, // TODO
         ];
 
diff --git a/vendor/nikic/php-parser/phpunit.xml.dist b/vendor/nikic/php-parser/phpunit.xml.dist
deleted file mode 100644
index 5271264cbf..0000000000
--- a/vendor/nikic/php-parser/phpunit.xml.dist
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
-         backupGlobals="false"
-         colors="true"
-         beStrictAboutTestsThatDoNotTestAnything="false"
-         bootstrap="./test/bootstrap.php">
-    <testsuites>
-        <testsuite name="PHPParser Test Suite">
-            <directory>./test/</directory>
-        </testsuite>
-    </testsuites>
-
-    <filter>
-        <whitelist>
-            <directory suffix=".php">./lib/PhpParser/</directory>
-        </whitelist>
-    </filter>
-</phpunit>
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/ClassTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/ClassTest.php
deleted file mode 100644
index 2cfa787231..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Builder/ClassTest.php
+++ /dev/null
@@ -1,153 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Builder;
-
-use PhpParser\Comment;
-use PhpParser\Node;
-use PhpParser\Node\Name;
-use PhpParser\Node\Stmt;
-
-class ClassTest extends \PHPUnit\Framework\TestCase
-{
-    protected function createClassBuilder($class) {
-        return new Class_($class);
-    }
-
-    public function testExtendsImplements() {
-        $node = $this->createClassBuilder('SomeLogger')
-            ->extend('BaseLogger')
-            ->implement('Namespaced\Logger', new Name('SomeInterface'))
-            ->implement('\Fully\Qualified', 'namespace\NamespaceRelative')
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\Class_('SomeLogger', [
-                'extends' => new Name('BaseLogger'),
-                'implements' => [
-                    new Name('Namespaced\Logger'),
-                    new Name('SomeInterface'),
-                    new Name\FullyQualified('Fully\Qualified'),
-                    new Name\Relative('NamespaceRelative'),
-                ],
-            ]),
-            $node
-        );
-    }
-
-    public function testAbstract() {
-        $node = $this->createClassBuilder('Test')
-            ->makeAbstract()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\Class_('Test', [
-                'flags' => Stmt\Class_::MODIFIER_ABSTRACT
-            ]),
-            $node
-        );
-    }
-
-    public function testFinal() {
-        $node = $this->createClassBuilder('Test')
-            ->makeFinal()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\Class_('Test', [
-                'flags' => Stmt\Class_::MODIFIER_FINAL
-            ]),
-            $node
-        );
-    }
-
-    public function testStatementOrder() {
-        $method = new Stmt\ClassMethod('testMethod');
-        $property = new Stmt\Property(
-            Stmt\Class_::MODIFIER_PUBLIC,
-            [new Stmt\PropertyProperty('testProperty')]
-        );
-        $const = new Stmt\ClassConst([
-            new Node\Const_('TEST_CONST', new Node\Scalar\String_('ABC'))
-        ]);
-        $use = new Stmt\TraitUse([new Name('SomeTrait')]);
-
-        $node = $this->createClassBuilder('Test')
-            ->addStmt($method)
-            ->addStmt($property)
-            ->addStmts([$const, $use])
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\Class_('Test', [
-                'stmts' => [$use, $const, $property, $method]
-            ]),
-            $node
-        );
-    }
-
-    public function testDocComment() {
-        $docComment = <<<'DOC'
-/**
- * Test
- */
-DOC;
-        $class = $this->createClassBuilder('Test')
-            ->setDocComment($docComment)
-            ->getNode();
-
-        $this->assertEquals(
-            new Stmt\Class_('Test', [], [
-                'comments' => [
-                    new Comment\Doc($docComment)
-                ]
-            ]),
-            $class
-        );
-
-        $class = $this->createClassBuilder('Test')
-            ->setDocComment(new Comment\Doc($docComment))
-            ->getNode();
-
-        $this->assertEquals(
-            new Stmt\Class_('Test', [], [
-                'comments' => [
-                    new Comment\Doc($docComment)
-                ]
-            ]),
-            $class
-        );
-    }
-
-    public function testInvalidStmtError() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Unexpected node of type "Stmt_Echo"');
-        $this->createClassBuilder('Test')
-            ->addStmt(new Stmt\Echo_([]))
-        ;
-    }
-
-    public function testInvalidDocComment() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Doc comment must be a string or an instance of PhpParser\Comment\Doc');
-        $this->createClassBuilder('Test')
-            ->setDocComment(new Comment('Test'));
-    }
-
-    public function testEmptyName() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Name cannot be empty');
-        $this->createClassBuilder('Test')
-            ->extend('');
-    }
-
-    public function testInvalidName() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Name must be a string or an instance of Node\Name');
-        $this->createClassBuilder('Test')
-            ->extend(['Foo']);
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/FunctionTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/FunctionTest.php
deleted file mode 100644
index c17045b83f..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Builder/FunctionTest.php
+++ /dev/null
@@ -1,114 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Builder;
-
-use PhpParser\Comment;
-use PhpParser\Node;
-use PhpParser\Node\Expr\Print_;
-use PhpParser\Node\Expr\Variable;
-use PhpParser\Node\Scalar\String_;
-use PhpParser\Node\Stmt;
-
-class FunctionTest extends \PHPUnit\Framework\TestCase
-{
-    public function createFunctionBuilder($name) {
-        return new Function_($name);
-    }
-
-    public function testReturnByRef() {
-        $node = $this->createFunctionBuilder('test')
-            ->makeReturnByRef()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\Function_('test', [
-                'byRef' => true
-            ]),
-            $node
-        );
-    }
-
-    public function testParams() {
-        $param1 = new Node\Param(new Variable('test1'));
-        $param2 = new Node\Param(new Variable('test2'));
-        $param3 = new Node\Param(new Variable('test3'));
-
-        $node = $this->createFunctionBuilder('test')
-            ->addParam($param1)
-            ->addParams([$param2, $param3])
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\Function_('test', [
-                'params' => [$param1, $param2, $param3]
-            ]),
-            $node
-        );
-    }
-
-    public function testStmts() {
-        $stmt1 = new Print_(new String_('test1'));
-        $stmt2 = new Print_(new String_('test2'));
-        $stmt3 = new Print_(new String_('test3'));
-
-        $node = $this->createFunctionBuilder('test')
-            ->addStmt($stmt1)
-            ->addStmts([$stmt2, $stmt3])
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\Function_('test', [
-                'stmts' => [
-                    new Stmt\Expression($stmt1),
-                    new Stmt\Expression($stmt2),
-                    new Stmt\Expression($stmt3),
-                ]
-            ]),
-            $node
-        );
-    }
-
-    public function testDocComment() {
-        $node = $this->createFunctionBuilder('test')
-            ->setDocComment('/** Test */')
-            ->getNode();
-
-        $this->assertEquals(new Stmt\Function_('test', [], [
-            'comments' => [new Comment\Doc('/** Test */')]
-        ]), $node);
-    }
-
-    public function testReturnType() {
-        $node = $this->createFunctionBuilder('test')
-            ->setReturnType('void')
-            ->getNode();
-
-        $this->assertEquals(new Stmt\Function_('test', [
-            'returnType' => 'void'
-        ], []), $node);
-    }
-
-    public function testInvalidNullableVoidType() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('void type cannot be nullable');
-        $this->createFunctionBuilder('test')->setReturnType('?void');
-    }
-
-    public function testInvalidParamError() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Expected parameter node, got "Name"');
-        $this->createFunctionBuilder('test')
-            ->addParam(new Node\Name('foo'))
-        ;
-    }
-
-    public function testAddNonStmt() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Expected statement or expression node');
-        $this->createFunctionBuilder('test')
-            ->addStmt(new Node\Name('Test'));
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/InterfaceTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/InterfaceTest.php
deleted file mode 100644
index 7f7f56a270..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Builder/InterfaceTest.php
+++ /dev/null
@@ -1,102 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Builder;
-
-use PhpParser\Comment;
-use PhpParser\Node;
-use PhpParser\Node\Scalar\DNumber;
-use PhpParser\Node\Stmt;
-
-class InterfaceTest extends \PHPUnit\Framework\TestCase
-{
-    /** @var Interface_ */
-    protected $builder;
-
-    protected function setUp() {
-        $this->builder = new Interface_('Contract');
-    }
-
-    private function dump($node) {
-        $pp = new \PhpParser\PrettyPrinter\Standard;
-        return $pp->prettyPrint([$node]);
-    }
-
-    public function testEmpty() {
-        $contract = $this->builder->getNode();
-        $this->assertInstanceOf(Stmt\Interface_::class, $contract);
-        $this->assertEquals(new Node\Identifier('Contract'), $contract->name);
-    }
-
-    public function testExtending() {
-        $contract = $this->builder->extend('Space\Root1', 'Root2')->getNode();
-        $this->assertEquals(
-            new Stmt\Interface_('Contract', [
-                'extends' => [
-                    new Node\Name('Space\Root1'),
-                    new Node\Name('Root2')
-                ],
-            ]), $contract
-        );
-    }
-
-    public function testAddMethod() {
-        $method = new Stmt\ClassMethod('doSomething');
-        $contract = $this->builder->addStmt($method)->getNode();
-        $this->assertSame([$method], $contract->stmts);
-    }
-
-    public function testAddConst() {
-        $const = new Stmt\ClassConst([
-            new Node\Const_('SPEED_OF_LIGHT', new DNumber(299792458.0))
-        ]);
-        $contract = $this->builder->addStmt($const)->getNode();
-        $this->assertSame(299792458.0, $contract->stmts[0]->consts[0]->value->value);
-    }
-
-    public function testOrder() {
-        $const = new Stmt\ClassConst([
-            new Node\Const_('SPEED_OF_LIGHT', new DNumber(299792458))
-        ]);
-        $method = new Stmt\ClassMethod('doSomething');
-        $contract = $this->builder
-            ->addStmt($method)
-            ->addStmt($const)
-            ->getNode()
-        ;
-
-        $this->assertInstanceOf(Stmt\ClassConst::class, $contract->stmts[0]);
-        $this->assertInstanceOf(Stmt\ClassMethod::class, $contract->stmts[1]);
-    }
-
-    public function testDocComment() {
-        $node = $this->builder
-            ->setDocComment('/** Test */')
-            ->getNode();
-
-        $this->assertEquals(new Stmt\Interface_('Contract', [], [
-            'comments' => [new Comment\Doc('/** Test */')]
-        ]), $node);
-    }
-
-    public function testInvalidStmtError() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Unexpected node of type "Stmt_PropertyProperty"');
-        $this->builder->addStmt(new Stmt\PropertyProperty('invalid'));
-    }
-
-    public function testFullFunctional() {
-        $const = new Stmt\ClassConst([
-            new Node\Const_('SPEED_OF_LIGHT', new DNumber(299792458))
-        ]);
-        $method = new Stmt\ClassMethod('doSomething');
-        $contract = $this->builder
-            ->addStmt($method)
-            ->addStmt($const)
-            ->getNode()
-        ;
-
-        eval($this->dump($contract));
-
-        $this->assertTrue(interface_exists('Contract', false));
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/MethodTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/MethodTest.php
deleted file mode 100644
index 529f035497..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Builder/MethodTest.php
+++ /dev/null
@@ -1,162 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Builder;
-
-use PhpParser\Comment;
-use PhpParser\Node;
-use PhpParser\Node\Expr\Print_;
-use PhpParser\Node\Expr\Variable;
-use PhpParser\Node\Scalar\String_;
-use PhpParser\Node\Stmt;
-
-class MethodTest extends \PHPUnit\Framework\TestCase
-{
-    public function createMethodBuilder($name) {
-        return new Method($name);
-    }
-
-    public function testModifiers() {
-        $node = $this->createMethodBuilder('test')
-            ->makePublic()
-            ->makeAbstract()
-            ->makeStatic()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\ClassMethod('test', [
-                'flags' => Stmt\Class_::MODIFIER_PUBLIC
-                         | Stmt\Class_::MODIFIER_ABSTRACT
-                         | Stmt\Class_::MODIFIER_STATIC,
-                'stmts' => null,
-            ]),
-            $node
-        );
-
-        $node = $this->createMethodBuilder('test')
-            ->makeProtected()
-            ->makeFinal()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\ClassMethod('test', [
-                'flags' => Stmt\Class_::MODIFIER_PROTECTED
-                         | Stmt\Class_::MODIFIER_FINAL
-            ]),
-            $node
-        );
-
-        $node = $this->createMethodBuilder('test')
-            ->makePrivate()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\ClassMethod('test', [
-                'type' => Stmt\Class_::MODIFIER_PRIVATE
-            ]),
-            $node
-        );
-    }
-
-    public function testReturnByRef() {
-        $node = $this->createMethodBuilder('test')
-            ->makeReturnByRef()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\ClassMethod('test', [
-                'byRef' => true
-            ]),
-            $node
-        );
-    }
-
-    public function testParams() {
-        $param1 = new Node\Param(new Variable('test1'));
-        $param2 = new Node\Param(new Variable('test2'));
-        $param3 = new Node\Param(new Variable('test3'));
-
-        $node = $this->createMethodBuilder('test')
-            ->addParam($param1)
-            ->addParams([$param2, $param3])
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\ClassMethod('test', [
-                'params' => [$param1, $param2, $param3]
-            ]),
-            $node
-        );
-    }
-
-    public function testStmts() {
-        $stmt1 = new Print_(new String_('test1'));
-        $stmt2 = new Print_(new String_('test2'));
-        $stmt3 = new Print_(new String_('test3'));
-
-        $node = $this->createMethodBuilder('test')
-            ->addStmt($stmt1)
-            ->addStmts([$stmt2, $stmt3])
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\ClassMethod('test', [
-                'stmts' => [
-                    new Stmt\Expression($stmt1),
-                    new Stmt\Expression($stmt2),
-                    new Stmt\Expression($stmt3),
-                ]
-            ]),
-            $node
-        );
-    }
-    public function testDocComment() {
-        $node = $this->createMethodBuilder('test')
-            ->setDocComment('/** Test */')
-            ->getNode();
-
-        $this->assertEquals(new Stmt\ClassMethod('test', [], [
-            'comments' => [new Comment\Doc('/** Test */')]
-        ]), $node);
-    }
-
-    public function testReturnType() {
-        $node = $this->createMethodBuilder('test')
-            ->setReturnType('bool')
-            ->getNode();
-        $this->assertEquals(new Stmt\ClassMethod('test', [
-            'returnType' => 'bool'
-        ], []), $node);
-    }
-
-    public function testAddStmtToAbstractMethodError() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Cannot add statements to an abstract method');
-        $this->createMethodBuilder('test')
-            ->makeAbstract()
-            ->addStmt(new Print_(new String_('test')))
-        ;
-    }
-
-    public function testMakeMethodWithStmtsAbstractError() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Cannot make method with statements abstract');
-        $this->createMethodBuilder('test')
-            ->addStmt(new Print_(new String_('test')))
-            ->makeAbstract()
-        ;
-    }
-
-    public function testInvalidParamError() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Expected parameter node, got "Name"');
-        $this->createMethodBuilder('test')
-            ->addParam(new Node\Name('foo'))
-        ;
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/NamespaceTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/NamespaceTest.php
deleted file mode 100644
index 689001bcbe..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Builder/NamespaceTest.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Builder;
-
-use PhpParser\Comment\Doc;
-use PhpParser\Node;
-use PhpParser\Node\Stmt;
-
-class NamespaceTest extends \PHPUnit\Framework\TestCase
-{
-    protected function createNamespaceBuilder($fqn) {
-        return new Namespace_($fqn);
-    }
-
-    public function testCreation() {
-        $stmt1 = new Stmt\Class_('SomeClass');
-        $stmt2 = new Stmt\Interface_('SomeInterface');
-        $stmt3 = new Stmt\Function_('someFunction');
-        $docComment = new Doc('/** Test */');
-        $expected = new Stmt\Namespace_(
-            new Node\Name('Name\Space'),
-            [$stmt1, $stmt2, $stmt3],
-            ['comments' => [$docComment]]
-        );
-
-        $node = $this->createNamespaceBuilder('Name\Space')
-            ->addStmt($stmt1)
-            ->addStmts([$stmt2, $stmt3])
-            ->setDocComment($docComment)
-            ->getNode()
-        ;
-        $this->assertEquals($expected, $node);
-
-        $node = $this->createNamespaceBuilder(new Node\Name(['Name', 'Space']))
-            ->setDocComment($docComment)
-            ->addStmts([$stmt1, $stmt2])
-            ->addStmt($stmt3)
-            ->getNode()
-        ;
-        $this->assertEquals($expected, $node);
-
-        $node = $this->createNamespaceBuilder(null)->getNode();
-        $this->assertNull($node->name);
-        $this->assertEmpty($node->stmts);
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/ParamTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/ParamTest.php
deleted file mode 100644
index c9cbfcac0f..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Builder/ParamTest.php
+++ /dev/null
@@ -1,166 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Builder;
-
-use PhpParser\Node;
-use PhpParser\Node\Expr;
-use PhpParser\Node\Scalar;
-
-class ParamTest extends \PHPUnit\Framework\TestCase
-{
-    public function createParamBuilder($name) {
-        return new Param($name);
-    }
-
-    /**
-     * @dataProvider provideTestDefaultValues
-     */
-    public function testDefaultValues($value, $expectedValueNode) {
-        $node = $this->createParamBuilder('test')
-            ->setDefault($value)
-            ->getNode()
-        ;
-
-        $this->assertEquals($expectedValueNode, $node->default);
-    }
-
-    public function provideTestDefaultValues() {
-        return [
-            [
-                null,
-                new Expr\ConstFetch(new Node\Name('null'))
-            ],
-            [
-                true,
-                new Expr\ConstFetch(new Node\Name('true'))
-            ],
-            [
-                false,
-                new Expr\ConstFetch(new Node\Name('false'))
-            ],
-            [
-                31415,
-                new Scalar\LNumber(31415)
-            ],
-            [
-                3.1415,
-                new Scalar\DNumber(3.1415)
-            ],
-            [
-                'Hallo World',
-                new Scalar\String_('Hallo World')
-            ],
-            [
-                [1, 2, 3],
-                new Expr\Array_([
-                    new Expr\ArrayItem(new Scalar\LNumber(1)),
-                    new Expr\ArrayItem(new Scalar\LNumber(2)),
-                    new Expr\ArrayItem(new Scalar\LNumber(3)),
-                ])
-            ],
-            [
-                ['foo' => 'bar', 'bar' => 'foo'],
-                new Expr\Array_([
-                    new Expr\ArrayItem(
-                        new Scalar\String_('bar'),
-                        new Scalar\String_('foo')
-                    ),
-                    new Expr\ArrayItem(
-                        new Scalar\String_('foo'),
-                        new Scalar\String_('bar')
-                    ),
-                ])
-            ],
-            [
-                new Scalar\MagicConst\Dir,
-                new Scalar\MagicConst\Dir
-            ]
-        ];
-    }
-
-    /**
-     * @dataProvider provideTestTypes
-     */
-    public function testTypes($typeHint, $expectedType) {
-        $node = $this->createParamBuilder('test')
-            ->setTypeHint($typeHint)
-            ->getNode()
-        ;
-        $type = $node->type;
-
-        /* Manually implement comparison to avoid __toString stupidity */
-        if ($expectedType instanceof Node\NullableType) {
-            $this->assertInstanceOf(get_class($expectedType), $type);
-            $expectedType = $expectedType->type;
-            $type = $type->type;
-        }
-
-        $this->assertInstanceOf(get_class($expectedType), $type);
-        $this->assertEquals($expectedType, $type);
-    }
-
-    public function provideTestTypes() {
-        return [
-            ['array', new Node\Identifier('array')],
-            ['callable', new Node\Identifier('callable')],
-            ['bool', new Node\Identifier('bool')],
-            ['int', new Node\Identifier('int')],
-            ['float', new Node\Identifier('float')],
-            ['string', new Node\Identifier('string')],
-            ['iterable', new Node\Identifier('iterable')],
-            ['object', new Node\Identifier('object')],
-            ['Array', new Node\Identifier('array')],
-            ['CALLABLE', new Node\Identifier('callable')],
-            ['Some\Class', new Node\Name('Some\Class')],
-            ['\Foo', new Node\Name\FullyQualified('Foo')],
-            ['self', new Node\Name('self')],
-            ['?array', new Node\NullableType(new Node\Identifier('array'))],
-            ['?Some\Class', new Node\NullableType(new Node\Name('Some\Class'))],
-            [new Node\Name('Some\Class'), new Node\Name('Some\Class')],
-            [
-                new Node\NullableType(new Node\Identifier('int')),
-                new Node\NullableType(new Node\Identifier('int'))
-            ],
-            [
-                new Node\NullableType(new Node\Name('Some\Class')),
-                new Node\NullableType(new Node\Name('Some\Class'))
-            ],
-        ];
-    }
-
-    public function testVoidTypeError() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Parameter type cannot be void');
-        $this->createParamBuilder('test')->setType('void');
-    }
-
-    public function testInvalidTypeError() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Type must be a string, or an instance of Name, Identifier or NullableType');
-        $this->createParamBuilder('test')->setType(new \stdClass);
-    }
-
-    public function testByRef() {
-        $node = $this->createParamBuilder('test')
-            ->makeByRef()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Node\Param(new Expr\Variable('test'), null, null, true),
-            $node
-        );
-    }
-
-    public function testVariadic() {
-        $node = $this->createParamBuilder('test')
-            ->makeVariadic()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Node\Param(new Expr\Variable('test'), null, null, false, true),
-            $node
-        );
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/PropertyTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/PropertyTest.php
deleted file mode 100644
index a15cd43c76..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Builder/PropertyTest.php
+++ /dev/null
@@ -1,147 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Builder;
-
-use PhpParser\Comment;
-use PhpParser\Node\Expr;
-use PhpParser\Node\Name;
-use PhpParser\Node\Scalar;
-use PhpParser\Node\Stmt;
-
-class PropertyTest extends \PHPUnit\Framework\TestCase
-{
-    public function createPropertyBuilder($name) {
-        return new Property($name);
-    }
-
-    public function testModifiers() {
-        $node = $this->createPropertyBuilder('test')
-            ->makePrivate()
-            ->makeStatic()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\Property(
-                Stmt\Class_::MODIFIER_PRIVATE
-              | Stmt\Class_::MODIFIER_STATIC,
-                [
-                    new Stmt\PropertyProperty('test')
-                ]
-            ),
-            $node
-        );
-
-        $node = $this->createPropertyBuilder('test')
-            ->makeProtected()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\Property(
-                Stmt\Class_::MODIFIER_PROTECTED,
-                [
-                    new Stmt\PropertyProperty('test')
-                ]
-            ),
-            $node
-        );
-
-        $node = $this->createPropertyBuilder('test')
-            ->makePublic()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\Property(
-                Stmt\Class_::MODIFIER_PUBLIC,
-                [
-                    new Stmt\PropertyProperty('test')
-                ]
-            ),
-            $node
-        );
-    }
-
-    public function testDocComment() {
-        $node = $this->createPropertyBuilder('test')
-            ->setDocComment('/** Test */')
-            ->getNode();
-
-        $this->assertEquals(new Stmt\Property(
-            Stmt\Class_::MODIFIER_PUBLIC,
-            [
-                new Stmt\PropertyProperty('test')
-            ],
-            [
-                'comments' => [new Comment\Doc('/** Test */')]
-            ]
-        ), $node);
-    }
-
-    /**
-     * @dataProvider provideTestDefaultValues
-     */
-    public function testDefaultValues($value, $expectedValueNode) {
-        $node = $this->createPropertyBuilder('test')
-            ->setDefault($value)
-            ->getNode()
-        ;
-
-        $this->assertEquals($expectedValueNode, $node->props[0]->default);
-    }
-
-    public function provideTestDefaultValues() {
-        return [
-            [
-                null,
-                new Expr\ConstFetch(new Name('null'))
-            ],
-            [
-                true,
-                new Expr\ConstFetch(new Name('true'))
-            ],
-            [
-                false,
-                new Expr\ConstFetch(new Name('false'))
-            ],
-            [
-                31415,
-                new Scalar\LNumber(31415)
-            ],
-            [
-                3.1415,
-                new Scalar\DNumber(3.1415)
-            ],
-            [
-                'Hallo World',
-                new Scalar\String_('Hallo World')
-            ],
-            [
-                [1, 2, 3],
-                new Expr\Array_([
-                    new Expr\ArrayItem(new Scalar\LNumber(1)),
-                    new Expr\ArrayItem(new Scalar\LNumber(2)),
-                    new Expr\ArrayItem(new Scalar\LNumber(3)),
-                ])
-            ],
-            [
-                ['foo' => 'bar', 'bar' => 'foo'],
-                new Expr\Array_([
-                    new Expr\ArrayItem(
-                        new Scalar\String_('bar'),
-                        new Scalar\String_('foo')
-                    ),
-                    new Expr\ArrayItem(
-                        new Scalar\String_('foo'),
-                        new Scalar\String_('bar')
-                    ),
-                ])
-            ],
-            [
-                new Scalar\MagicConst\Dir,
-                new Scalar\MagicConst\Dir
-            ]
-        ];
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/TraitTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/TraitTest.php
deleted file mode 100644
index 4d99ef8870..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Builder/TraitTest.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Builder;
-
-use PhpParser\Comment;
-use PhpParser\Node\Name;
-use PhpParser\Node\Stmt;
-
-class TraitTest extends \PHPUnit\Framework\TestCase
-{
-    protected function createTraitBuilder($class) {
-        return new Trait_($class);
-    }
-
-    public function testStmtAddition() {
-        $method1 = new Stmt\ClassMethod('test1');
-        $method2 = new Stmt\ClassMethod('test2');
-        $method3 = new Stmt\ClassMethod('test3');
-        $prop = new Stmt\Property(Stmt\Class_::MODIFIER_PUBLIC, [
-            new Stmt\PropertyProperty('test')
-        ]);
-        $use = new Stmt\TraitUse([new Name('OtherTrait')]);
-        $trait = $this->createTraitBuilder('TestTrait')
-            ->setDocComment('/** Nice trait */')
-            ->addStmt($method1)
-            ->addStmts([$method2, $method3])
-            ->addStmt($prop)
-            ->addStmt($use)
-            ->getNode();
-        $this->assertEquals(new Stmt\Trait_('TestTrait', [
-            'stmts' => [$use, $prop, $method1, $method2, $method3]
-        ], [
-            'comments' => [
-                new Comment\Doc('/** Nice trait */')
-            ]
-        ]), $trait);
-    }
-
-    public function testInvalidStmtError() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Unexpected node of type "Stmt_Echo"');
-        $this->createTraitBuilder('Test')
-            ->addStmt(new Stmt\Echo_([]))
-        ;
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/TraitUseAdaptationTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/TraitUseAdaptationTest.php
deleted file mode 100644
index 4961ccfac9..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Builder/TraitUseAdaptationTest.php
+++ /dev/null
@@ -1,106 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Builder;
-
-use PhpParser\Node\Name;
-use PhpParser\Node\Stmt;
-use PhpParser\Node\Stmt\Class_;
-
-class TraitUseAdaptationTest extends \PHPUnit\Framework\TestCase
-{
-    protected function createTraitUseAdaptationBuilder($trait, $method) {
-        return new TraitUseAdaptation($trait, $method);
-    }
-
-    public function testAsMake() {
-        $builder = $this->createTraitUseAdaptationBuilder(null, 'foo');
-
-        $this->assertEquals(
-            new Stmt\TraitUseAdaptation\Alias(null, 'foo', null, 'bar'),
-            (clone $builder)->as('bar')->getNode()
-        );
-
-        $this->assertEquals(
-            new Stmt\TraitUseAdaptation\Alias(null, 'foo', Class_::MODIFIER_PUBLIC, null),
-            (clone $builder)->makePublic()->getNode()
-        );
-
-        $this->assertEquals(
-            new Stmt\TraitUseAdaptation\Alias(null, 'foo', Class_::MODIFIER_PROTECTED, null),
-            (clone $builder)->makeProtected()->getNode()
-        );
-
-        $this->assertEquals(
-            new Stmt\TraitUseAdaptation\Alias(null, 'foo', Class_::MODIFIER_PRIVATE, null),
-            (clone $builder)->makePrivate()->getNode()
-        );
-    }
-
-    public function testInsteadof() {
-        $node = $this->createTraitUseAdaptationBuilder('SomeTrait', 'foo')
-            ->insteadof('AnotherTrait')
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\TraitUseAdaptation\Precedence(
-                new Name('SomeTrait'),
-                'foo',
-                [new Name('AnotherTrait')]
-            ),
-            $node
-        );
-    }
-
-    public function testAsOnNotAlias() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Cannot set alias for not alias adaptation buider');
-        $this->createTraitUseAdaptationBuilder('Test', 'foo')
-            ->insteadof('AnotherTrait')
-            ->as('bar')
-        ;
-    }
-
-    public function testInsteadofOnNotPrecedence() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Cannot add overwritten traits for not precedence adaptation buider');
-        $this->createTraitUseAdaptationBuilder('Test', 'foo')
-            ->as('bar')
-            ->insteadof('AnotherTrait')
-        ;
-    }
-
-    public function testInsteadofWithoutTrait() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Precedence adaptation must have trait');
-        $this->createTraitUseAdaptationBuilder(null, 'foo')
-            ->insteadof('AnotherTrait')
-        ;
-    }
-
-    public function testMakeOnNotAlias() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Cannot set access modifier for not alias adaptation buider');
-        $this->createTraitUseAdaptationBuilder('Test', 'foo')
-            ->insteadof('AnotherTrait')
-            ->makePublic()
-        ;
-    }
-
-    public function testMultipleMake() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Multiple access type modifiers are not allowed');
-        $this->createTraitUseAdaptationBuilder(null, 'foo')
-            ->makePrivate()
-            ->makePublic()
-        ;
-    }
-
-    public function testUndefinedType() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Type of adaptation is not defined');
-        $this->createTraitUseAdaptationBuilder(null, 'foo')
-            ->getNode()
-        ;
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/TraitUseTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/TraitUseTest.php
deleted file mode 100644
index 8d20dfbd7c..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Builder/TraitUseTest.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Builder;
-
-use PhpParser\Node\Name;
-use PhpParser\Node\Stmt;
-
-class TraitUseTest extends \PHPUnit\Framework\TestCase
-{
-    protected function createTraitUseBuilder(...$traits) {
-        return new TraitUse(...$traits);
-    }
-
-    public function testAnd() {
-        $node = $this->createTraitUseBuilder('SomeTrait')
-            ->and('AnotherTrait')
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\TraitUse([
-                new Name('SomeTrait'),
-                new Name('AnotherTrait')
-            ]),
-            $node
-        );
-    }
-
-    public function testWith() {
-        $node = $this->createTraitUseBuilder('SomeTrait')
-            ->with(new Stmt\TraitUseAdaptation\Alias(null, 'foo', null, 'bar'))
-            ->with((new TraitUseAdaptation(null, 'test'))->as('baz'))
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\TraitUse([new Name('SomeTrait')], [
-                new Stmt\TraitUseAdaptation\Alias(null, 'foo', null, 'bar'),
-                new Stmt\TraitUseAdaptation\Alias(null, 'test', null, 'baz')
-            ]),
-            $node
-        );
-    }
-
-    public function testInvalidAdaptationNode() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Adaptation must have type TraitUseAdaptation');
-        $this->createTraitUseBuilder('Test')
-            ->with(new Stmt\Echo_([]))
-        ;
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/UseTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/UseTest.php
deleted file mode 100644
index f17da59b42..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Builder/UseTest.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Builder;
-
-use PhpParser\Builder;
-use PhpParser\Node\Name;
-use PhpParser\Node\Stmt;
-
-class UseTest extends \PHPUnit\Framework\TestCase
-{
-    protected function createUseBuilder($name, $type = Stmt\Use_::TYPE_NORMAL) {
-        return new Builder\Use_($name, $type);
-    }
-
-    public function testCreation() {
-        $node = $this->createUseBuilder('Foo\Bar')->getNode();
-        $this->assertEquals(new Stmt\Use_([
-            new Stmt\UseUse(new Name('Foo\Bar'), null)
-        ]), $node);
-
-        $node = $this->createUseBuilder(new Name('Foo\Bar'))->as('XYZ')->getNode();
-        $this->assertEquals(new Stmt\Use_([
-            new Stmt\UseUse(new Name('Foo\Bar'), 'XYZ')
-        ]), $node);
-
-        $node = $this->createUseBuilder('foo\bar', Stmt\Use_::TYPE_FUNCTION)->as('foo')->getNode();
-        $this->assertEquals(new Stmt\Use_([
-            new Stmt\UseUse(new Name('foo\bar'), 'foo')
-        ], Stmt\Use_::TYPE_FUNCTION), $node);
-
-        $node = $this->createUseBuilder('foo\BAR', Stmt\Use_::TYPE_CONSTANT)->as('FOO')->getNode();
-        $this->assertEquals(new Stmt\Use_([
-            new Stmt\UseUse(new Name('foo\BAR'), 'FOO')
-        ], Stmt\Use_::TYPE_CONSTANT), $node);
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/BuilderFactoryTest.php b/vendor/nikic/php-parser/test/PhpParser/BuilderFactoryTest.php
deleted file mode 100644
index a80e1c5814..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/BuilderFactoryTest.php
+++ /dev/null
@@ -1,327 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-use PhpParser\Node\Arg;
-use PhpParser\Node\Expr;
-use PhpParser\Node\Expr\BinaryOp\Concat;
-use PhpParser\Node\Identifier;
-use PhpParser\Node\Name;
-use PhpParser\Node\Scalar\LNumber;
-use PhpParser\Node\Scalar\String_;
-
-class BuilderFactoryTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @dataProvider provideTestFactory
-     */
-    public function testFactory($methodName, $className) {
-        $factory = new BuilderFactory;
-        $this->assertInstanceOf($className, $factory->$methodName('test'));
-    }
-
-    public function provideTestFactory() {
-        return [
-            ['namespace',   Builder\Namespace_::class],
-            ['class',       Builder\Class_::class],
-            ['interface',   Builder\Interface_::class],
-            ['trait',       Builder\Trait_::class],
-            ['method',      Builder\Method::class],
-            ['function',    Builder\Function_::class],
-            ['property',    Builder\Property::class],
-            ['param',       Builder\Param::class],
-            ['use',         Builder\Use_::class],
-            ['useFunction', Builder\Use_::class],
-            ['useConst',    Builder\Use_::class],
-        ];
-    }
-
-    public function testVal() {
-        // This method is a wrapper around BuilderHelpers::normalizeValue(),
-        // which is already tested elsewhere
-        $factory = new BuilderFactory();
-        $this->assertEquals(
-            new String_("foo"),
-            $factory->val("foo")
-        );
-    }
-
-    public function testConcat() {
-        $factory = new BuilderFactory();
-        $varA = new Expr\Variable('a');
-        $varB = new Expr\Variable('b');
-        $varC = new Expr\Variable('c');
-
-        $this->assertEquals(
-            new Concat($varA, $varB),
-            $factory->concat($varA, $varB)
-        );
-        $this->assertEquals(
-            new Concat(new Concat($varA, $varB), $varC),
-            $factory->concat($varA, $varB, $varC)
-        );
-        $this->assertEquals(
-            new Concat(new Concat(new String_("a"), $varB), new String_("c")),
-            $factory->concat("a", $varB, "c")
-        );
-    }
-
-    public function testConcatOneError() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Expected at least two expressions');
-        (new BuilderFactory())->concat("a");
-    }
-
-    public function testConcatInvalidExpr() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Expected string or Expr');
-        (new BuilderFactory())->concat("a", 42);
-    }
-
-    public function testArgs() {
-        $factory = new BuilderFactory();
-        $unpack = new Arg(new Expr\Variable('c'), false, true);
-        $this->assertEquals(
-            [
-                new Arg(new Expr\Variable('a')),
-                new Arg(new String_('b')),
-                $unpack
-            ],
-            $factory->args([new Expr\Variable('a'), 'b', $unpack])
-        );
-    }
-
-    public function testCalls() {
-        $factory = new BuilderFactory();
-
-        // Simple function call
-        $this->assertEquals(
-            new Expr\FuncCall(
-                new Name('var_dump'),
-                [new Arg(new String_('str'))]
-            ),
-            $factory->funcCall('var_dump', ['str'])
-        );
-        // Dynamic function call
-        $this->assertEquals(
-            new Expr\FuncCall(new Expr\Variable('fn')),
-            $factory->funcCall(new Expr\Variable('fn'))
-        );
-
-        // Simple method call
-        $this->assertEquals(
-            new Expr\MethodCall(
-                new Expr\Variable('obj'),
-                new Identifier('method'),
-                [new Arg(new LNumber(42))]
-            ),
-            $factory->methodCall(new Expr\Variable('obj'), 'method', [42])
-        );
-        // Explicitly pass Identifier node
-        $this->assertEquals(
-            new Expr\MethodCall(
-                new Expr\Variable('obj'),
-                new Identifier('method')
-            ),
-            $factory->methodCall(new Expr\Variable('obj'), new Identifier('method'))
-        );
-        // Dynamic method call
-        $this->assertEquals(
-            new Expr\MethodCall(
-                new Expr\Variable('obj'),
-                new Expr\Variable('method')
-            ),
-            $factory->methodCall(new Expr\Variable('obj'), new Expr\Variable('method'))
-        );
-
-        // Simple static method call
-        $this->assertEquals(
-            new Expr\StaticCall(
-                new Name\FullyQualified('Foo'),
-                new Identifier('bar'),
-                [new Arg(new Expr\Variable('baz'))]
-            ),
-            $factory->staticCall('\Foo', 'bar', [new Expr\Variable('baz')])
-        );
-        // Dynamic static method call
-        $this->assertEquals(
-            new Expr\StaticCall(
-                new Expr\Variable('foo'),
-                new Expr\Variable('bar')
-            ),
-            $factory->staticCall(new Expr\Variable('foo'), new Expr\Variable('bar'))
-        );
-
-        // Simple new call
-        $this->assertEquals(
-            new Expr\New_(new Name\FullyQualified('stdClass')),
-            $factory->new('\stdClass')
-        );
-        // Dynamic new call
-        $this->assertEquals(
-            new Expr\New_(
-                new Expr\Variable('foo'),
-                [new Arg(new String_('bar'))]
-            ),
-            $factory->new(new Expr\Variable('foo'), ['bar'])
-        );
-    }
-
-    public function testConstFetches() {
-        $factory = new BuilderFactory();
-        $this->assertEquals(
-            new Expr\ConstFetch(new Name('FOO')),
-            $factory->constFetch('FOO')
-        );
-        $this->assertEquals(
-            new Expr\ClassConstFetch(new Name('Foo'), new Identifier('BAR')),
-            $factory->classConstFetch('Foo', 'BAR')
-        );
-        $this->assertEquals(
-            new Expr\ClassConstFetch(new Expr\Variable('foo'), new Identifier('BAR')),
-            $factory->classConstFetch(new Expr\Variable('foo'), 'BAR')
-        );
-    }
-
-    public function testVar() {
-        $factory = new BuilderFactory();
-        $this->assertEquals(
-            new Expr\Variable("foo"),
-            $factory->var("foo")
-        );
-        $this->assertEquals(
-            new Expr\Variable(new Expr\Variable("foo")),
-            $factory->var($factory->var("foo"))
-        );
-    }
-
-    public function testPropertyFetch() {
-        $f = new BuilderFactory();
-        $this->assertEquals(
-            new Expr\PropertyFetch(new Expr\Variable('foo'), 'bar'),
-            $f->propertyFetch($f->var('foo'), 'bar')
-        );
-        $this->assertEquals(
-            new Expr\PropertyFetch(new Expr\Variable('foo'), 'bar'),
-            $f->propertyFetch($f->var('foo'), new Identifier('bar'))
-        );
-        $this->assertEquals(
-            new Expr\PropertyFetch(new Expr\Variable('foo'), new Expr\Variable('bar')),
-            $f->propertyFetch($f->var('foo'), $f->var('bar'))
-        );
-    }
-
-    public function testInvalidIdentifier() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Expected string or instance of Node\Identifier');
-        (new BuilderFactory())->classConstFetch('Foo', new Expr\Variable('foo'));
-    }
-
-    public function testInvalidIdentifierOrExpr() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Expected string or instance of Node\Identifier or Node\Expr');
-        (new BuilderFactory())->staticCall('Foo', new Name('bar'));
-    }
-
-    public function testInvalidNameOrExpr() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Name must be a string or an instance of Node\Name or Node\Expr');
-        (new BuilderFactory())->funcCall(new Node\Stmt\Return_());
-    }
-
-    public function testInvalidVar() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Variable name must be string or Expr');
-        (new BuilderFactory())->var(new Node\Stmt\Return_());
-    }
-
-    public function testIntegration() {
-        $factory = new BuilderFactory;
-        $node = $factory->namespace('Name\Space')
-            ->addStmt($factory->use('Foo\Bar\SomeOtherClass'))
-            ->addStmt($factory->use('Foo\Bar')->as('A'))
-            ->addStmt($factory->useFunction('strlen'))
-            ->addStmt($factory->useConst('PHP_VERSION'))
-            ->addStmt($factory
-                ->class('SomeClass')
-                ->extend('SomeOtherClass')
-                ->implement('A\Few', '\Interfaces')
-                ->makeAbstract()
-
-                ->addStmt($factory->useTrait('FirstTrait'))
-
-                ->addStmt($factory->useTrait('SecondTrait', 'ThirdTrait')
-                    ->and('AnotherTrait')
-                    ->with($factory->traitUseAdaptation('foo')->as('bar'))
-                    ->with($factory->traitUseAdaptation('AnotherTrait', 'baz')->as('test'))
-                    ->with($factory->traitUseAdaptation('AnotherTrait', 'func')->insteadof('SecondTrait')))
-
-                ->addStmt($factory->method('firstMethod'))
-
-                ->addStmt($factory->method('someMethod')
-                    ->makePublic()
-                    ->makeAbstract()
-                    ->addParam($factory->param('someParam')->setType('SomeClass'))
-                    ->setDocComment('/**
-                                      * This method does something.
-                                      *
-                                      * @param SomeClass And takes a parameter
-                                      */'))
-
-                ->addStmt($factory->method('anotherMethod')
-                    ->makeProtected()
-                    ->addParam($factory->param('someParam')->setDefault('test'))
-                    ->addStmt(new Expr\Print_(new Expr\Variable('someParam'))))
-
-                ->addStmt($factory->property('someProperty')->makeProtected())
-                ->addStmt($factory->property('anotherProperty')
-                    ->makePrivate()
-                    ->setDefault([1, 2, 3])))
-            ->getNode()
-        ;
-
-        $expected = <<<'EOC'
-<?php
-
-namespace Name\Space;
-
-use Foo\Bar\SomeOtherClass;
-use Foo\Bar as A;
-use function strlen;
-use const PHP_VERSION;
-abstract class SomeClass extends SomeOtherClass implements A\Few, \Interfaces
-{
-    use FirstTrait;
-    use SecondTrait, ThirdTrait, AnotherTrait {
-        foo as bar;
-        AnotherTrait::baz as test;
-        AnotherTrait::func insteadof SecondTrait;
-    }
-    protected $someProperty;
-    private $anotherProperty = array(1, 2, 3);
-    function firstMethod()
-    {
-    }
-    /**
-     * This method does something.
-     *
-     * @param SomeClass And takes a parameter
-     */
-    public abstract function someMethod(SomeClass $someParam);
-    protected function anotherMethod($someParam = 'test')
-    {
-        print $someParam;
-    }
-}
-EOC;
-
-        $stmts = [$node];
-        $prettyPrinter = new PrettyPrinter\Standard();
-        $generated = $prettyPrinter->prettyPrintFile($stmts);
-
-        $this->assertEquals(
-            str_replace("\r\n", "\n", $expected),
-            str_replace("\r\n", "\n", $generated)
-        );
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/CodeParsingTest.php b/vendor/nikic/php-parser/test/PhpParser/CodeParsingTest.php
deleted file mode 100644
index 24e93dd522..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/CodeParsingTest.php
+++ /dev/null
@@ -1,119 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-use PhpParser\Node\Expr;
-use PhpParser\Node\Stmt;
-
-class CodeParsingTest extends CodeTestAbstract
-{
-    /**
-     * @dataProvider provideTestParse
-     */
-    public function testParse($name, $code, $expected, $modeLine) {
-        if (null !== $modeLine) {
-            $modes = array_fill_keys(explode(',', $modeLine), true);
-        } else {
-            $modes = [];
-        }
-
-        list($parser5, $parser7) = $this->createParsers($modes);
-        list($stmts5, $output5) = $this->getParseOutput($parser5, $code, $modes);
-        list($stmts7, $output7) = $this->getParseOutput($parser7, $code, $modes);
-
-        if (isset($modes['php5'])) {
-            $this->assertSame($expected, $output5, $name);
-            $this->assertNotSame($expected, $output7, $name);
-        } elseif (isset($modes['php7'])) {
-            $this->assertNotSame($expected, $output5, $name);
-            $this->assertSame($expected, $output7, $name);
-        } else {
-            $this->assertSame($expected, $output5, $name);
-            $this->assertSame($expected, $output7, $name);
-        }
-
-        $this->checkAttributes($stmts5);
-        $this->checkAttributes($stmts7);
-    }
-
-    public function createParsers(array $modes) {
-        $lexer = new Lexer\Emulative(['usedAttributes' => [
-            'startLine', 'endLine',
-            'startFilePos', 'endFilePos',
-            'startTokenPos', 'endTokenPos',
-            'comments'
-        ]]);
-
-        return [
-            new Parser\Php5($lexer),
-            new Parser\Php7($lexer),
-        ];
-    }
-
-    // Must be public for updateTests.php
-    public function getParseOutput(Parser $parser, $code, array $modes) {
-        $dumpPositions = isset($modes['positions']);
-
-        $errors = new ErrorHandler\Collecting;
-        $stmts = $parser->parse($code, $errors);
-
-        $output = '';
-        foreach ($errors->getErrors() as $error) {
-            $output .= $this->formatErrorMessage($error, $code) . "\n";
-        }
-
-        if (null !== $stmts) {
-            $dumper = new NodeDumper(['dumpComments' => true, 'dumpPositions' => $dumpPositions]);
-            $output .= $dumper->dump($stmts, $code);
-        }
-
-        return [$stmts, canonicalize($output)];
-    }
-
-    public function provideTestParse() {
-        return $this->getTests(__DIR__ . '/../code/parser', 'test');
-    }
-
-    private function formatErrorMessage(Error $e, $code) {
-        if ($e->hasColumnInfo()) {
-            return $e->getMessageWithColumnInfo($code);
-        }
-
-        return $e->getMessage();
-    }
-
-    private function checkAttributes($stmts) {
-        if ($stmts === null) {
-            return;
-        }
-
-        $traverser = new NodeTraverser();
-        $traverser->addVisitor(new class extends NodeVisitorAbstract {
-            public function enterNode(Node $node) {
-                $startLine = $node->getStartLine();
-                $endLine = $node->getEndLine();
-                $startFilePos = $node->getStartFilePos();
-                $endFilePos = $node->getEndFilePos();
-                $startTokenPos = $node->getStartTokenPos();
-                $endTokenPos = $node->getEndTokenPos();
-                if ($startLine < 0 || $endLine < 0 ||
-                    $startFilePos < 0 || $endFilePos < 0 ||
-                    $startTokenPos < 0 || $endTokenPos < 0
-                ) {
-                    throw new \Exception('Missing location information on ' . $node->getType());
-                }
-
-                if ($endLine < $startLine ||
-                    $endFilePos < $startFilePos ||
-                    $endTokenPos < $startTokenPos
-                ) {
-                    // Nops and error can have inverted order, if they are empty
-                    if (!$node instanceof Stmt\Nop && !$node instanceof Expr\Error) {
-                        throw new \Exception('End < start on ' . $node->getType());
-                    }
-                }
-            }
-        });
-        $traverser->traverse($stmts);
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/CodeTestAbstract.php b/vendor/nikic/php-parser/test/PhpParser/CodeTestAbstract.php
deleted file mode 100644
index f5f408755c..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/CodeTestAbstract.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-abstract class CodeTestAbstract extends \PHPUnit\Framework\TestCase
-{
-    protected function getTests($directory, $fileExtension, $chunksPerTest = 2) {
-        $parser = new CodeTestParser;
-        $allTests = [];
-        foreach (filesInDir($directory, $fileExtension) as $fileName => $fileContents) {
-            list($name, $tests) = $parser->parseTest($fileContents, $chunksPerTest);
-
-            // first part is the name
-            $name .= ' (' . $fileName . ')';
-            $shortName = ltrim(str_replace($directory, '', $fileName), '/\\');
-
-            // multiple sections possible with always two forming a pair
-            foreach ($tests as $i => list($mode, $parts)) {
-                $dataSetName = $shortName . (count($parts) > 1 ? '#' . $i : '');
-                $allTests[$dataSetName] = array_merge([$name], $parts, [$mode]);
-            }
-        }
-
-        return $allTests;
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/CodeTestParser.php b/vendor/nikic/php-parser/test/PhpParser/CodeTestParser.php
deleted file mode 100644
index f63dc92653..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/CodeTestParser.php
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-class CodeTestParser
-{
-    public function parseTest($code, $chunksPerTest) {
-        $code = canonicalize($code);
-
-        // evaluate @@{expr}@@ expressions
-        $code = preg_replace_callback(
-            '/@@\{(.*?)\}@@/',
-            function($matches) {
-                return eval('return ' . $matches[1] . ';');
-            },
-            $code
-        );
-
-        // parse sections
-        $parts = preg_split("/\n-----(?:\n|$)/", $code);
-
-        // first part is the name
-        $name = array_shift($parts);
-
-        // multiple sections possible with always two forming a pair
-        $chunks = array_chunk($parts, $chunksPerTest);
-        $tests = [];
-        foreach ($chunks as $i => $chunk) {
-            $lastPart = array_pop($chunk);
-            list($lastPart, $mode) = $this->extractMode($lastPart);
-            $tests[] = [$mode, array_merge($chunk, [$lastPart])];
-        }
-
-        return [$name, $tests];
-    }
-
-    public function reconstructTest($name, array $tests) {
-        $result = $name;
-        foreach ($tests as list($mode, $parts)) {
-            $lastPart = array_pop($parts);
-            foreach ($parts as $part) {
-                $result .= "\n-----\n$part";
-            }
-
-            $result .= "\n-----\n";
-            if (null !== $mode) {
-                $result .= "!!$mode\n";
-            }
-            $result .= $lastPart;
-        }
-        return $result;
-    }
-
-    private function extractMode($expected) {
-        $firstNewLine = strpos($expected, "\n");
-        if (false === $firstNewLine) {
-            $firstNewLine = strlen($expected);
-        }
-
-        $firstLine = substr($expected, 0, $firstNewLine);
-        if (0 !== strpos($firstLine, '!!')) {
-            return [$expected, null];
-        }
-
-        $expected = (string) substr($expected, $firstNewLine + 1);
-        return [$expected, substr($firstLine, 2)];
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/CommentTest.php b/vendor/nikic/php-parser/test/PhpParser/CommentTest.php
deleted file mode 100644
index 409841aae1..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/CommentTest.php
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-class CommentTest extends \PHPUnit\Framework\TestCase
-{
-    public function testGetSet() {
-        $comment = new Comment('/* Some comment */', 1, 10, 2);
-
-        $this->assertSame('/* Some comment */', $comment->getText());
-        $this->assertSame('/* Some comment */', (string) $comment);
-        $this->assertSame(1, $comment->getLine());
-        $this->assertSame(10, $comment->getFilePos());
-        $this->assertSame(2, $comment->getTokenPos());
-    }
-
-    /**
-     * @dataProvider provideTestReformatting
-     */
-    public function testReformatting($commentText, $reformattedText) {
-        $comment = new Comment($commentText);
-        $this->assertSame($reformattedText, $comment->getReformattedText());
-    }
-
-    public function provideTestReformatting() {
-        return [
-            ['// Some text' . "\n", '// Some text'],
-            ['/* Some text */', '/* Some text */'],
-            [
-                '/**
-     * Some text.
-     * Some more text.
-     */',
-                '/**
- * Some text.
- * Some more text.
- */'
-            ],
-            [
-                '/*
-        Some text.
-        Some more text.
-    */',
-                '/*
-    Some text.
-    Some more text.
-*/'
-            ],
-            [
-                '/* Some text.
-       More text.
-       Even more text. */',
-                '/* Some text.
-   More text.
-   Even more text. */'
-            ],
-            [
-                '/* Some text.
-       More text.
-         Indented text. */',
-                '/* Some text.
-   More text.
-     Indented text. */',
-            ],
-            // invalid comment -> no reformatting
-            [
-                'hallo
-    world',
-                'hallo
-    world',
-            ],
-        ];
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/ConstExprEvaluatorTest.php b/vendor/nikic/php-parser/test/PhpParser/ConstExprEvaluatorTest.php
deleted file mode 100644
index 02d992e599..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/ConstExprEvaluatorTest.php
+++ /dev/null
@@ -1,130 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-use PhpParser\Node\Expr;
-use PhpParser\Node\Scalar;
-
-class ConstExprEvaluatorTest extends \PHPUnit\Framework\TestCase
-{
-    /** @dataProvider provideTestEvaluate */
-    public function testEvaluate($exprString, $expected) {
-        $parser = new Parser\Php7(new Lexer());
-        $expr = $parser->parse('<?php ' . $exprString . ';')[0]->expr;
-        $evaluator = new ConstExprEvaluator();
-        $this->assertSame($expected, $evaluator->evaluateDirectly($expr));
-    }
-
-    public function provideTestEvaluate() {
-        return [
-            ['1', 1],
-            ['1.0', 1.0],
-            ['"foo"', "foo"],
-            ['[0, 1]', [0, 1]],
-            ['["foo" => "bar"]', ["foo" => "bar"]],
-            ['NULL', null],
-            ['False', false],
-            ['true', true],
-            ['+1', 1],
-            ['-1', -1],
-            ['~0', -1],
-            ['!true', false],
-            ['[0][0]', 0],
-            ['"a"[0]', "a"],
-            ['true ? 1 : (1/0)', 1],
-            ['false ? (1/0) : 1', 1],
-            ['42 ?: (1/0)', 42],
-            ['false ?: 42', 42],
-            ['false ?? 42', false],
-            ['null ?? 42', 42],
-            ['[0][0] ?? 42', 0],
-            ['[][0] ?? 42', 42],
-            ['0b11 & 0b10', 0b10],
-            ['0b11 | 0b10', 0b11],
-            ['0b11 ^ 0b10', 0b01],
-            ['1 << 2', 4],
-            ['4 >> 2', 1],
-            ['"a" . "b"', "ab"],
-            ['4 + 2', 6],
-            ['4 - 2', 2],
-            ['4 * 2', 8],
-            ['4 / 2', 2],
-            ['4 % 2', 0],
-            ['4 ** 2', 16],
-            ['1 == 1.0', true],
-            ['1 != 1.0', false],
-            ['1 < 2.0', true],
-            ['1 <= 2.0', true],
-            ['1 > 2.0', false],
-            ['1 >= 2.0', false],
-            ['1 <=> 2.0', -1],
-            ['1 === 1.0', false],
-            ['1 !== 1.0', true],
-            ['true && true', true],
-            ['true and true', true],
-            ['false && (1/0)', false],
-            ['false and (1/0)', false],
-            ['false || false', false],
-            ['false or false', false],
-            ['true || (1/0)', true],
-            ['true or (1/0)', true],
-            ['true xor false', true],
-        ];
-    }
-
-    public function testEvaluateFails() {
-        $this->expectException(ConstExprEvaluationException::class);
-        $this->expectExceptionMessage('Expression of type Expr_Variable cannot be evaluated');
-        $evaluator = new ConstExprEvaluator();
-        $evaluator->evaluateDirectly(new Expr\Variable('a'));
-    }
-
-    public function testEvaluateFallback() {
-        $evaluator = new ConstExprEvaluator(function(Expr $expr) {
-            if ($expr instanceof Scalar\MagicConst\Line) {
-                return 42;
-            }
-            throw new ConstExprEvaluationException();
-        });
-        $expr = new Expr\BinaryOp\Plus(
-            new Scalar\LNumber(8),
-            new Scalar\MagicConst\Line()
-        );
-        $this->assertSame(50, $evaluator->evaluateDirectly($expr));
-    }
-
-    /**
-     * @dataProvider provideTestEvaluateSilently
-     */
-    public function testEvaluateSilently($expr, $exception, $msg) {
-        $evaluator = new ConstExprEvaluator();
-
-        try {
-            $evaluator->evaluateSilently($expr);
-        } catch (ConstExprEvaluationException $e) {
-            $this->assertSame(
-                'An error occurred during constant expression evaluation',
-                $e->getMessage()
-            );
-
-            $prev = $e->getPrevious();
-            $this->assertInstanceOf($exception, $prev);
-            $this->assertSame($msg, $prev->getMessage());
-        }
-    }
-
-    public function provideTestEvaluateSilently() {
-        return [
-            [
-                new Expr\BinaryOp\Mod(new Scalar\LNumber(42), new Scalar\LNumber(0)),
-                \Error::class,
-                'Modulo by zero'
-            ],
-            [
-                new Expr\BinaryOp\Div(new Scalar\LNumber(42), new Scalar\LNumber(0)),
-                \ErrorException::class,
-                'Division by zero'
-            ],
-        ];
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/ErrorHandler/CollectingTest.php b/vendor/nikic/php-parser/test/PhpParser/ErrorHandler/CollectingTest.php
deleted file mode 100644
index a20101a8b6..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/ErrorHandler/CollectingTest.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\ErrorHandler;
-
-use PhpParser\Error;
-
-class CollectingTest extends \PHPUnit\Framework\TestCase
-{
-    public function testHandleError() {
-        $errorHandler = new Collecting();
-        $this->assertFalse($errorHandler->hasErrors());
-        $this->assertEmpty($errorHandler->getErrors());
-
-        $errorHandler->handleError($e1 = new Error('Test 1'));
-        $errorHandler->handleError($e2 = new Error('Test 2'));
-        $this->assertTrue($errorHandler->hasErrors());
-        $this->assertSame([$e1, $e2], $errorHandler->getErrors());
-
-        $errorHandler->clearErrors();
-        $this->assertFalse($errorHandler->hasErrors());
-        $this->assertEmpty($errorHandler->getErrors());
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/ErrorHandler/ThrowingTest.php b/vendor/nikic/php-parser/test/PhpParser/ErrorHandler/ThrowingTest.php
deleted file mode 100644
index be641ec7a9..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/ErrorHandler/ThrowingTest.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\ErrorHandler;
-
-use PhpParser\Error;
-
-class ThrowingTest extends \PHPUnit\Framework\TestCase
-{
-    public function testHandleError() {
-        $this->expectException(Error::class);
-        $this->expectExceptionMessage('Test');
-        $errorHandler = new Throwing();
-        $errorHandler->handleError(new Error('Test'));
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/ErrorTest.php b/vendor/nikic/php-parser/test/PhpParser/ErrorTest.php
deleted file mode 100644
index cc2d3fa5c8..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/ErrorTest.php
+++ /dev/null
@@ -1,104 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-class ErrorTest extends \PHPUnit\Framework\TestCase
-{
-    public function testConstruct() {
-        $attributes = [
-            'startLine' => 10,
-            'endLine' => 11,
-        ];
-        $error = new Error('Some error', $attributes);
-
-        $this->assertSame('Some error', $error->getRawMessage());
-        $this->assertSame($attributes, $error->getAttributes());
-        $this->assertSame(10, $error->getStartLine());
-        $this->assertSame(11, $error->getEndLine());
-        $this->assertSame('Some error on line 10', $error->getMessage());
-
-        return $error;
-    }
-
-    /**
-     * @depends testConstruct
-     */
-    public function testSetMessageAndLine(Error $error) {
-        $error->setRawMessage('Some other error');
-        $this->assertSame('Some other error', $error->getRawMessage());
-
-        $error->setStartLine(15);
-        $this->assertSame(15, $error->getStartLine());
-        $this->assertSame('Some other error on line 15', $error->getMessage());
-    }
-
-    public function testUnknownLine() {
-        $error = new Error('Some error');
-
-        $this->assertSame(-1, $error->getStartLine());
-        $this->assertSame(-1, $error->getEndLine());
-        $this->assertSame('Some error on unknown line', $error->getMessage());
-    }
-
-    /** @dataProvider provideTestColumnInfo */
-    public function testColumnInfo($code, $startPos, $endPos, $startColumn, $endColumn) {
-        $error = new Error('Some error', [
-            'startFilePos' => $startPos,
-            'endFilePos' => $endPos,
-        ]);
-
-        $this->assertTrue($error->hasColumnInfo());
-        $this->assertSame($startColumn, $error->getStartColumn($code));
-        $this->assertSame($endColumn, $error->getEndColumn($code));
-
-    }
-
-    public function provideTestColumnInfo() {
-        return [
-            // Error at "bar"
-            ["<?php foo bar baz", 10, 12, 11, 13],
-            ["<?php\nfoo bar baz", 10, 12, 5, 7],
-            ["<?php foo\nbar baz", 10, 12, 1, 3],
-            ["<?php foo bar\nbaz", 10, 12, 11, 13],
-            ["<?php\r\nfoo bar baz", 11, 13, 5, 7],
-            // Error at "baz"
-            ["<?php foo bar baz", 14, 16, 15, 17],
-            ["<?php foo bar\nbaz", 14, 16, 1, 3],
-            // Error at string literal
-            ["<?php foo 'bar\nbaz' xyz", 10, 18, 11, 4],
-            ["<?php\nfoo 'bar\nbaz' xyz", 10, 18, 5, 4],
-            ["<?php foo\n'\nbarbaz\n'\nxyz", 10, 19, 1, 1],
-            // Error over full string
-            ["<?php", 0, 4, 1, 5],
-            ["<?\nphp", 0, 5, 1, 3],
-        ];
-    }
-
-    public function testNoColumnInfo() {
-        $error = new Error('Some error', 3);
-
-        $this->assertFalse($error->hasColumnInfo());
-        try {
-            $error->getStartColumn('');
-            $this->fail('Expected RuntimeException');
-        } catch (\RuntimeException $e) {
-            $this->assertSame('Error does not have column information', $e->getMessage());
-        }
-        try {
-            $error->getEndColumn('');
-            $this->fail('Expected RuntimeException');
-        } catch (\RuntimeException $e) {
-            $this->assertSame('Error does not have column information', $e->getMessage());
-        }
-    }
-
-    public function testInvalidPosInfo() {
-        $this->expectException(\RuntimeException::class);
-        $this->expectExceptionMessage('Invalid position information');
-        $error = new Error('Some error', [
-            'startFilePos' => 10,
-            'endFilePos' => 11,
-        ]);
-        $error->getStartColumn('code');
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Internal/DifferTest.php b/vendor/nikic/php-parser/test/PhpParser/Internal/DifferTest.php
deleted file mode 100644
index 6fac3fd365..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Internal/DifferTest.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Internal;
-
-class DifferTest extends \PHPUnit\Framework\TestCase
-{
-    private function formatDiffString(array $diff) {
-        $diffStr = '';
-        foreach ($diff as $diffElem) {
-            switch ($diffElem->type) {
-                case DiffElem::TYPE_KEEP:
-                    $diffStr .= $diffElem->old;
-                    break;
-                case DiffElem::TYPE_REMOVE:
-                    $diffStr .= '-' . $diffElem->old;
-                    break;
-                case DiffElem::TYPE_ADD:
-                    $diffStr .= '+' . $diffElem->new;
-                    break;
-                case DiffElem::TYPE_REPLACE:
-                    $diffStr .= '/' . $diffElem->old . $diffElem->new;
-                    break;
-                default:
-                    assert(false);
-                    break;
-            }
-        }
-        return $diffStr;
-    }
-
-    /** @dataProvider provideTestDiff */
-    public function testDiff($oldStr, $newStr, $expectedDiffStr) {
-        $differ = new Differ(function($a, $b) { return $a === $b; });
-        $diff = $differ->diff(str_split($oldStr), str_split($newStr));
-        $this->assertSame($expectedDiffStr, $this->formatDiffString($diff));
-    }
-
-    public function provideTestDiff() {
-        return [
-            ['abc', 'abc', 'abc'],
-            ['abc', 'abcdef', 'abc+d+e+f'],
-            ['abcdef', 'abc', 'abc-d-e-f'],
-            ['abcdef', 'abcxyzdef', 'abc+x+y+zdef'],
-            ['axyzb', 'ab', 'a-x-y-zb'],
-            ['abcdef', 'abxyef', 'ab-c-d+x+yef'],
-            ['abcdef', 'cdefab', '-a-bcdef+a+b'],
-        ];
-    }
-
-    /** @dataProvider provideTestDiffWithReplacements */
-    public function testDiffWithReplacements($oldStr, $newStr, $expectedDiffStr) {
-        $differ = new Differ(function($a, $b) { return $a === $b; });
-        $diff = $differ->diffWithReplacements(str_split($oldStr), str_split($newStr));
-        $this->assertSame($expectedDiffStr, $this->formatDiffString($diff));
-    }
-
-    public function provideTestDiffWithReplacements() {
-        return [
-            ['abcde', 'axyze', 'a/bx/cy/dze'],
-            ['abcde', 'xbcdy', '/axbcd/ey'],
-            ['abcde', 'axye', 'a-b-c-d+x+ye'],
-            ['abcde', 'axyzue', 'a-b-c-d+x+y+z+ue'],
-        ];
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/JsonDecoderTest.php b/vendor/nikic/php-parser/test/PhpParser/JsonDecoderTest.php
deleted file mode 100644
index d5cb05973e..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/JsonDecoderTest.php
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-class JsonDecoderTest extends \PHPUnit\Framework\TestCase
-{
-    public function testRoundTrip() {
-        $code = <<<'PHP'
-<?php
-// comment
-/** doc comment */
-function functionName(&$a = 0, $b = 1.0) {
-    echo 'Foo';
-}
-PHP;
-
-        $parser = new Parser\Php7(new Lexer());
-        $stmts = $parser->parse($code);
-        $json = json_encode($stmts);
-
-        $jsonDecoder = new JsonDecoder();
-        $decodedStmts = $jsonDecoder->decode($json);
-        $this->assertEquals($stmts, $decodedStmts);
-    }
-
-    /** @dataProvider provideTestDecodingError */
-    public function testDecodingError($json, $expectedMessage) {
-        $jsonDecoder = new JsonDecoder();
-        $this->expectException(\RuntimeException::class);
-        $this->expectExceptionMessage($expectedMessage);
-        $jsonDecoder->decode($json);
-    }
-
-    public function provideTestDecodingError() {
-        return [
-            ['???', 'JSON decoding error: Syntax error'],
-            ['{"nodeType":123}', 'Node type must be a string'],
-            ['{"nodeType":"Name","attributes":123}', 'Attributes must be an array'],
-            ['{"nodeType":"Comment"}', 'Comment must have text'],
-            ['{"nodeType":"xxx"}', 'Unknown node type "xxx"'],
-        ];
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Lexer/EmulativeTest.php b/vendor/nikic/php-parser/test/PhpParser/Lexer/EmulativeTest.php
deleted file mode 100644
index a53c379b79..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Lexer/EmulativeTest.php
+++ /dev/null
@@ -1,210 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Lexer;
-
-use PhpParser\ErrorHandler;
-use PhpParser\LexerTest;
-use PhpParser\Parser\Tokens;
-
-class EmulativeTest extends LexerTest
-{
-    protected function getLexer(array $options = []) {
-        return new Emulative($options);
-    }
-
-    /**
-     * @dataProvider provideTestReplaceKeywords
-     */
-    public function testReplaceKeywords($keyword, $expectedToken) {
-        $lexer = $this->getLexer();
-        $lexer->startLexing('<?php ' . $keyword);
-
-        $this->assertSame($expectedToken, $lexer->getNextToken());
-        $this->assertSame(0, $lexer->getNextToken());
-    }
-
-    /**
-     * @dataProvider provideTestReplaceKeywords
-     */
-    public function testNoReplaceKeywordsAfterObjectOperator(string $keyword) {
-        $lexer = $this->getLexer();
-        $lexer->startLexing('<?php ->' . $keyword);
-
-        $this->assertSame(Tokens::T_OBJECT_OPERATOR, $lexer->getNextToken());
-        $this->assertSame(Tokens::T_STRING, $lexer->getNextToken());
-        $this->assertSame(0, $lexer->getNextToken());
-    }
-
-    /**
-     * @dataProvider provideTestReplaceKeywords
-     */
-    public function testNoReplaceKeywordsAfterObjectOperatorWithSpaces(string $keyword) {
-        $lexer = $this->getLexer();
-        $lexer->startLexing('<?php ->    ' . $keyword);
-
-        $this->assertSame(Tokens::T_OBJECT_OPERATOR, $lexer->getNextToken());
-        $this->assertSame(Tokens::T_STRING, $lexer->getNextToken());
-        $this->assertSame(0, $lexer->getNextToken());
-    }
-
-    public function provideTestReplaceKeywords() {
-        return [
-            // PHP 7.4
-            ['fn',            Tokens::T_FN],
-
-            // PHP 5.5
-            ['finally',       Tokens::T_FINALLY],
-            ['yield',         Tokens::T_YIELD],
-
-            // PHP 5.4
-            ['callable',      Tokens::T_CALLABLE],
-            ['insteadof',     Tokens::T_INSTEADOF],
-            ['trait',         Tokens::T_TRAIT],
-            ['__TRAIT__',     Tokens::T_TRAIT_C],
-
-            // PHP 5.3
-            ['__DIR__',       Tokens::T_DIR],
-            ['goto',          Tokens::T_GOTO],
-            ['namespace',     Tokens::T_NAMESPACE],
-            ['__NAMESPACE__', Tokens::T_NS_C],
-        ];
-    }
-
-    /**
-     * @dataProvider provideTestLexNewFeatures
-     */
-    public function testLexNewFeatures($code, array $expectedTokens) {
-        $lexer = $this->getLexer();
-        $lexer->startLexing('<?php ' . $code);
-
-        $tokens = [];
-        while (0 !== $token = $lexer->getNextToken($text)) {
-            $tokens[] = [$token, $text];
-        }
-        $this->assertSame($expectedTokens, $tokens);
-    }
-
-    /**
-     * @dataProvider provideTestLexNewFeatures
-     */
-    public function testLeaveStuffAloneInStrings($code) {
-        $stringifiedToken = '"' . addcslashes($code, '"\\') . '"';
-
-        $lexer = $this->getLexer();
-        $lexer->startLexing('<?php ' . $stringifiedToken);
-
-        $this->assertSame(Tokens::T_CONSTANT_ENCAPSED_STRING, $lexer->getNextToken($text));
-        $this->assertSame($stringifiedToken, $text);
-        $this->assertSame(0, $lexer->getNextToken());
-    }
-
-    /**
-     * @dataProvider provideTestLexNewFeatures
-     */
-    public function testErrorAfterEmulation($code) {
-        $errorHandler = new ErrorHandler\Collecting;
-        $lexer = $this->getLexer();
-        $lexer->startLexing('<?php ' . $code . "\0", $errorHandler);
-
-        $errors = $errorHandler->getErrors();
-        $this->assertCount(1, $errors);
-
-        $error = $errors[0];
-        $this->assertSame('Unexpected null byte', $error->getRawMessage());
-
-        $attrs = $error->getAttributes();
-        $expPos = strlen('<?php ' . $code);
-        $expLine = 1 + substr_count('<?php ' . $code, "\n");
-        $this->assertSame($expPos, $attrs['startFilePos']);
-        $this->assertSame($expPos, $attrs['endFilePos']);
-        $this->assertSame($expLine, $attrs['startLine']);
-        $this->assertSame($expLine, $attrs['endLine']);
-    }
-
-    public function provideTestLexNewFeatures() {
-        return [
-            // PHP 7.4
-            ['??=', [
-                [Tokens::T_COALESCE_EQUAL, '??='],
-            ]],
-            ['yield from', [
-                [Tokens::T_YIELD_FROM, 'yield from'],
-            ]],
-            ["yield\r\nfrom", [
-                [Tokens::T_YIELD_FROM, "yield\r\nfrom"],
-            ]],
-            ['...', [
-                [Tokens::T_ELLIPSIS, '...'],
-            ]],
-            ['**', [
-                [Tokens::T_POW, '**'],
-            ]],
-            ['**=', [
-                [Tokens::T_POW_EQUAL, '**='],
-            ]],
-            ['??', [
-                [Tokens::T_COALESCE, '??'],
-            ]],
-            ['<=>', [
-                [Tokens::T_SPACESHIP, '<=>'],
-            ]],
-            ['0b1010110', [
-                [Tokens::T_LNUMBER, '0b1010110'],
-            ]],
-            ['0b1011010101001010110101010010101011010101010101101011001110111100', [
-                [Tokens::T_DNUMBER, '0b1011010101001010110101010010101011010101010101101011001110111100'],
-            ]],
-            ['\\', [
-                [Tokens::T_NS_SEPARATOR, '\\'],
-            ]],
-            ["<<<'NOWDOC'\nNOWDOC;\n", [
-                [Tokens::T_START_HEREDOC, "<<<'NOWDOC'\n"],
-                [Tokens::T_END_HEREDOC, 'NOWDOC'],
-                [ord(';'), ';'],
-            ]],
-            ["<<<'NOWDOC'\nFoobar\nNOWDOC;\n", [
-                [Tokens::T_START_HEREDOC, "<<<'NOWDOC'\n"],
-                [Tokens::T_ENCAPSED_AND_WHITESPACE, "Foobar\n"],
-                [Tokens::T_END_HEREDOC, 'NOWDOC'],
-                [ord(';'), ';'],
-            ]],
-
-            // Flexible heredoc/nowdoc
-            ["<<<LABEL\nLABEL,", [
-                [Tokens::T_START_HEREDOC, "<<<LABEL\n"],
-                [Tokens::T_END_HEREDOC, "LABEL"],
-                [ord(','), ','],
-            ]],
-            ["<<<LABEL\n    LABEL,", [
-                [Tokens::T_START_HEREDOC, "<<<LABEL\n"],
-                [Tokens::T_END_HEREDOC, "    LABEL"],
-                [ord(','), ','],
-            ]],
-            ["<<<LABEL\n    Foo\n  LABEL;", [
-                [Tokens::T_START_HEREDOC, "<<<LABEL\n"],
-                [Tokens::T_ENCAPSED_AND_WHITESPACE, "    Foo\n"],
-                [Tokens::T_END_HEREDOC, "  LABEL"],
-                [ord(';'), ';'],
-            ]],
-            ["<<<A\n A,<<<A\n A,", [
-                [Tokens::T_START_HEREDOC, "<<<A\n"],
-                [Tokens::T_END_HEREDOC, " A"],
-                [ord(','), ','],
-                [Tokens::T_START_HEREDOC, "<<<A\n"],
-                [Tokens::T_END_HEREDOC, " A"],
-                [ord(','), ','],
-            ]],
-            ["<<<LABEL\nLABELNOPE\nLABEL\n", [
-                [Tokens::T_START_HEREDOC, "<<<LABEL\n"],
-                [Tokens::T_ENCAPSED_AND_WHITESPACE, "LABELNOPE\n"],
-                [Tokens::T_END_HEREDOC, "LABEL"],
-            ]],
-            // Interpretation changed
-            ["<<<LABEL\n    LABEL\nLABEL\n", [
-                [Tokens::T_START_HEREDOC, "<<<LABEL\n"],
-                [Tokens::T_END_HEREDOC, "    LABEL"],
-                [Tokens::T_STRING, "LABEL"],
-            ]],
-        ];
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/LexerTest.php b/vendor/nikic/php-parser/test/PhpParser/LexerTest.php
deleted file mode 100644
index f24c64d512..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/LexerTest.php
+++ /dev/null
@@ -1,263 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-use PhpParser\Parser\Tokens;
-
-class LexerTest extends \PHPUnit\Framework\TestCase
-{
-    /* To allow overwriting in parent class */
-    protected function getLexer(array $options = []) {
-        return new Lexer($options);
-    }
-
-    /**
-     * @dataProvider provideTestError
-     */
-    public function testError($code, $messages) {
-        if (defined('HHVM_VERSION')) {
-            $this->markTestSkipped('HHVM does not throw warnings from token_get_all()');
-        }
-
-        $errorHandler = new ErrorHandler\Collecting();
-        $lexer = $this->getLexer(['usedAttributes' => [
-            'comments', 'startLine', 'endLine', 'startFilePos', 'endFilePos'
-        ]]);
-        $lexer->startLexing($code, $errorHandler);
-        $errors = $errorHandler->getErrors();
-
-        $this->assertCount(count($messages), $errors);
-        for ($i = 0; $i < count($messages); $i++) {
-            $this->assertSame($messages[$i], $errors[$i]->getMessageWithColumnInfo($code));
-        }
-    }
-
-    public function provideTestError() {
-        return [
-            ["<?php /*", ["Unterminated comment from 1:7 to 1:9"]],
-            ["<?php \1", ["Unexpected character \"\1\" (ASCII 1) from 1:7 to 1:7"]],
-            ["<?php \0", ["Unexpected null byte from 1:7 to 1:7"]],
-            // Error with potentially emulated token
-            ["<?php ?? \0", ["Unexpected null byte from 1:10 to 1:10"]],
-            ["<?php\n\0\1 foo /* bar", [
-                "Unexpected null byte from 2:1 to 2:1",
-                "Unexpected character \"\1\" (ASCII 1) from 2:2 to 2:2",
-                "Unterminated comment from 2:8 to 2:14"
-            ]],
-        ];
-    }
-
-    /**
-     * @dataProvider provideTestLex
-     */
-    public function testLex($code, $options, $tokens) {
-        $lexer = $this->getLexer($options);
-        $lexer->startLexing($code);
-        while ($id = $lexer->getNextToken($value, $startAttributes, $endAttributes)) {
-            $token = array_shift($tokens);
-
-            $this->assertSame($token[0], $id);
-            $this->assertSame($token[1], $value);
-            $this->assertEquals($token[2], $startAttributes);
-            $this->assertEquals($token[3], $endAttributes);
-        }
-    }
-
-    public function provideTestLex() {
-        return [
-            // tests conversion of closing PHP tag and drop of whitespace and opening tags
-            [
-                '<?php tokens ?>plaintext',
-                [],
-                [
-                    [
-                        Tokens::T_STRING, 'tokens',
-                        ['startLine' => 1], ['endLine' => 1]
-                    ],
-                    [
-                        ord(';'), '?>',
-                        ['startLine' => 1], ['endLine' => 1]
-                    ],
-                    [
-                        Tokens::T_INLINE_HTML, 'plaintext',
-                        ['startLine' => 1, 'hasLeadingNewline' => false],
-                        ['endLine' => 1]
-                    ],
-                ]
-            ],
-            // tests line numbers
-            [
-                '<?php' . "\n" . '$ token /** doc' . "\n" . 'comment */ $',
-                [],
-                [
-                    [
-                        ord('$'), '$',
-                        ['startLine' => 2], ['endLine' => 2]
-                    ],
-                    [
-                        Tokens::T_STRING, 'token',
-                        ['startLine' => 2], ['endLine' => 2]
-                    ],
-                    [
-                        ord('$'), '$',
-                        [
-                            'startLine' => 3,
-                            'comments' => [
-                                new Comment\Doc('/** doc' . "\n" . 'comment */', 2, 14, 5),
-                            ]
-                        ],
-                        ['endLine' => 3]
-                    ],
-                ]
-            ],
-            // tests comment extraction
-            [
-                '<?php /* comment */ // comment' . "\n" . '/** docComment 1 *//** docComment 2 */ token',
-                [],
-                [
-                    [
-                        Tokens::T_STRING, 'token',
-                        [
-                            'startLine' => 2,
-                            'comments' => [
-                                new Comment('/* comment */', 1, 6, 1),
-                                new Comment('// comment' . "\n", 1, 20, 3),
-                                new Comment\Doc('/** docComment 1 */', 2, 31, 4),
-                                new Comment\Doc('/** docComment 2 */', 2, 50, 5),
-                            ],
-                        ],
-                        ['endLine' => 2]
-                    ],
-                ]
-            ],
-            // tests differing start and end line
-            [
-                '<?php "foo' . "\n" . 'bar"',
-                [],
-                [
-                    [
-                        Tokens::T_CONSTANT_ENCAPSED_STRING, '"foo' . "\n" . 'bar"',
-                        ['startLine' => 1], ['endLine' => 2]
-                    ],
-                ]
-            ],
-            // tests exact file offsets
-            [
-                '<?php "a";' . "\n" . '// foo' . "\n" . '"b";',
-                ['usedAttributes' => ['startFilePos', 'endFilePos']],
-                [
-                    [
-                        Tokens::T_CONSTANT_ENCAPSED_STRING, '"a"',
-                        ['startFilePos' => 6], ['endFilePos' => 8]
-                    ],
-                    [
-                        ord(';'), ';',
-                        ['startFilePos' => 9], ['endFilePos' => 9]
-                    ],
-                    [
-                        Tokens::T_CONSTANT_ENCAPSED_STRING, '"b"',
-                        ['startFilePos' => 18], ['endFilePos' => 20]
-                    ],
-                    [
-                        ord(';'), ';',
-                        ['startFilePos' => 21], ['endFilePos' => 21]
-                    ],
-                ]
-            ],
-            // tests token offsets
-            [
-                '<?php "a";' . "\n" . '// foo' . "\n" . '"b";',
-                ['usedAttributes' => ['startTokenPos', 'endTokenPos']],
-                [
-                    [
-                        Tokens::T_CONSTANT_ENCAPSED_STRING, '"a"',
-                        ['startTokenPos' => 1], ['endTokenPos' => 1]
-                    ],
-                    [
-                        ord(';'), ';',
-                        ['startTokenPos' => 2], ['endTokenPos' => 2]
-                    ],
-                    [
-                        Tokens::T_CONSTANT_ENCAPSED_STRING, '"b"',
-                        ['startTokenPos' => 5], ['endTokenPos' => 5]
-                    ],
-                    [
-                        ord(';'), ';',
-                        ['startTokenPos' => 6], ['endTokenPos' => 6]
-                    ],
-                ]
-            ],
-            // tests all attributes being disabled
-            [
-                '<?php /* foo */ $bar;',
-                ['usedAttributes' => []],
-                [
-                    [
-                        Tokens::T_VARIABLE, '$bar',
-                        [], []
-                    ],
-                    [
-                        ord(';'), ';',
-                        [], []
-                    ]
-                ]
-            ],
-            // tests no tokens
-            [
-                '',
-                [],
-                []
-            ],
-        ];
-    }
-
-    /**
-     * @dataProvider provideTestHaltCompiler
-     */
-    public function testHandleHaltCompiler($code, $remaining) {
-        $lexer = $this->getLexer();
-        $lexer->startLexing($code);
-
-        while (Tokens::T_HALT_COMPILER !== $lexer->getNextToken());
-
-        $this->assertSame($remaining, $lexer->handleHaltCompiler());
-        $this->assertSame(0, $lexer->getNextToken());
-    }
-
-    public function provideTestHaltCompiler() {
-        return [
-            ['<?php ... __halt_compiler();Remaining Text', 'Remaining Text'],
-            ['<?php ... __halt_compiler ( ) ;Remaining Text', 'Remaining Text'],
-            ['<?php ... __halt_compiler() ?>Remaining Text', 'Remaining Text'],
-            //array('<?php ... __halt_compiler();' . "\0", "\0"),
-            //array('<?php ... __halt_compiler /* */ ( ) ;Remaining Text', 'Remaining Text'),
-        ];
-    }
-
-    public function testHandleHaltCompilerError() {
-        $this->expectException(Error::class);
-        $this->expectExceptionMessage('__HALT_COMPILER must be followed by "();"');
-        $lexer = $this->getLexer();
-        $lexer->startLexing('<?php ... __halt_compiler invalid ();');
-
-        while (Tokens::T_HALT_COMPILER !== $lexer->getNextToken());
-        $lexer->handleHaltCompiler();
-    }
-
-    public function testGetTokens() {
-        $code = '<?php "a";' . "\n" . '// foo' . "\n" . '"b";';
-        $expectedTokens = [
-            [T_OPEN_TAG, '<?php ', 1],
-            [T_CONSTANT_ENCAPSED_STRING, '"a"', 1],
-            ';',
-            [T_WHITESPACE, "\n", 1],
-            [T_COMMENT, '// foo' . "\n", 2],
-            [T_CONSTANT_ENCAPSED_STRING, '"b"', 3],
-            ';',
-        ];
-
-        $lexer = $this->getLexer();
-        $lexer->startLexing($code);
-        $this->assertSame($expectedTokens, $lexer->getTokens());
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/NameContextTest.php b/vendor/nikic/php-parser/test/PhpParser/NameContextTest.php
deleted file mode 100644
index ee8458b67e..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/NameContextTest.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-use PhpParser\Node\Name;
-use PhpParser\Node\Stmt\Use_;
-
-class NameContextTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @dataProvider provideTestGetPossibleNames
-     */
-    public function testGetPossibleNames($type, $name, $expectedPossibleNames) {
-        $nameContext = new NameContext(new ErrorHandler\Throwing());
-        $nameContext->startNamespace(new Name('NS'));
-        $nameContext->addAlias(new Name('Foo'), 'Foo', Use_::TYPE_NORMAL);
-        $nameContext->addAlias(new Name('Foo\Bar'), 'Alias', Use_::TYPE_NORMAL);
-        $nameContext->addAlias(new Name('Foo\fn'), 'fn', Use_::TYPE_FUNCTION);
-        $nameContext->addAlias(new Name('Foo\CN'), 'CN', Use_::TYPE_CONSTANT);
-
-        $possibleNames = $nameContext->getPossibleNames($name, $type);
-        $possibleNames = array_map(function (Name $name) {
-            return $name->toCodeString();
-        }, $possibleNames);
-
-        $this->assertSame($expectedPossibleNames, $possibleNames);
-
-        // Here the last name is always the shortest one
-        $expectedShortName = $expectedPossibleNames[count($expectedPossibleNames) - 1];
-        $this->assertSame(
-            $expectedShortName,
-            $nameContext->getShortName($name, $type)->toCodeString()
-        );
-    }
-
-    public function provideTestGetPossibleNames() {
-        return [
-            [Use_::TYPE_NORMAL, 'Test', ['\Test']],
-            [Use_::TYPE_NORMAL, 'Test\Namespaced', ['\Test\Namespaced']],
-            [Use_::TYPE_NORMAL, 'NS\Test', ['\NS\Test', 'Test']],
-            [Use_::TYPE_NORMAL, 'ns\Test', ['\ns\Test', 'Test']],
-            [Use_::TYPE_NORMAL, 'NS\Foo\Bar', ['\NS\Foo\Bar']],
-            [Use_::TYPE_NORMAL, 'ns\foo\Bar', ['\ns\foo\Bar']],
-            [Use_::TYPE_NORMAL, 'Foo', ['\Foo', 'Foo']],
-            [Use_::TYPE_NORMAL, 'Foo\Bar', ['\Foo\Bar', 'Foo\Bar', 'Alias']],
-            [Use_::TYPE_NORMAL, 'Foo\Bar\Baz', ['\Foo\Bar\Baz', 'Foo\Bar\Baz', 'Alias\Baz']],
-            [Use_::TYPE_NORMAL, 'Foo\fn\Bar', ['\Foo\fn\Bar', 'Foo\fn\Bar']],
-            [Use_::TYPE_FUNCTION, 'Foo\fn\bar', ['\Foo\fn\bar', 'Foo\fn\bar']],
-            [Use_::TYPE_FUNCTION, 'Foo\fn', ['\Foo\fn', 'Foo\fn', 'fn']],
-            [Use_::TYPE_FUNCTION, 'Foo\FN', ['\Foo\FN', 'Foo\FN', 'fn']],
-            [Use_::TYPE_CONSTANT, 'Foo\CN\BAR', ['\Foo\CN\BAR', 'Foo\CN\BAR']],
-            [Use_::TYPE_CONSTANT, 'Foo\CN', ['\Foo\CN', 'Foo\CN', 'CN']],
-            [Use_::TYPE_CONSTANT, 'foo\CN', ['\foo\CN', 'Foo\CN', 'CN']],
-            [Use_::TYPE_CONSTANT, 'foo\cn', ['\foo\cn', 'Foo\cn']],
-            // self/parent/static must not be fully qualified
-            [Use_::TYPE_NORMAL, 'self', ['self']],
-            [Use_::TYPE_NORMAL, 'parent', ['parent']],
-            [Use_::TYPE_NORMAL, 'static', ['static']],
-            // true/false/null do not need to be fully qualified, even in namespaces
-            [Use_::TYPE_CONSTANT, 'true', ['\true', 'true']],
-            [Use_::TYPE_CONSTANT, 'false', ['\false', 'false']],
-            [Use_::TYPE_CONSTANT, 'null', ['\null', 'null']],
-        ];
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Node/IdentifierTest.php b/vendor/nikic/php-parser/test/PhpParser/Node/IdentifierTest.php
deleted file mode 100644
index 2bd58fc8d0..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Node/IdentifierTest.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Node;
-
-class IdentifierTest extends \PHPUnit\Framework\TestCase
-{
-    public function testToString() {
-        $identifier = new Identifier('Foo');
-
-        $this->assertSame('Foo', (string) $identifier);
-        $this->assertSame('Foo', $identifier->toString());
-        $this->assertSame('foo', $identifier->toLowerString());
-    }
-
-    /** @dataProvider provideTestIsSpecialClassName */
-    public function testIsSpecialClassName($identifier, $expected) {
-        $identifier = new Identifier($identifier);
-        $this->assertSame($expected, $identifier->isSpecialClassName());
-    }
-
-    public function provideTestIsSpecialClassName() {
-        return [
-            ['self', true],
-            ['PARENT', true],
-            ['Static', true],
-            ['other', false],
-        ];
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Node/NameTest.php b/vendor/nikic/php-parser/test/PhpParser/Node/NameTest.php
deleted file mode 100644
index 5e69ebba3c..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Node/NameTest.php
+++ /dev/null
@@ -1,157 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Node;
-
-class NameTest extends \PHPUnit\Framework\TestCase
-{
-    public function testConstruct() {
-        $name = new Name(['foo', 'bar']);
-        $this->assertSame(['foo', 'bar'], $name->parts);
-
-        $name = new Name('foo\bar');
-        $this->assertSame(['foo', 'bar'], $name->parts);
-
-        $name = new Name($name);
-        $this->assertSame(['foo', 'bar'], $name->parts);
-    }
-
-    public function testGet() {
-        $name = new Name('foo');
-        $this->assertSame('foo', $name->getFirst());
-        $this->assertSame('foo', $name->getLast());
-
-        $name = new Name('foo\bar');
-        $this->assertSame('foo', $name->getFirst());
-        $this->assertSame('bar', $name->getLast());
-    }
-
-    public function testToString() {
-        $name = new Name('Foo\Bar');
-
-        $this->assertSame('Foo\Bar', (string) $name);
-        $this->assertSame('Foo\Bar', $name->toString());
-        $this->assertSame('foo\bar', $name->toLowerString());
-    }
-
-    public function testSlice() {
-        $name = new Name('foo\bar\baz');
-        $this->assertEquals(new Name('foo\bar\baz'), $name->slice(0));
-        $this->assertEquals(new Name('bar\baz'), $name->slice(1));
-        $this->assertNull($name->slice(3));
-        $this->assertEquals(new Name('foo\bar\baz'), $name->slice(-3));
-        $this->assertEquals(new Name('bar\baz'), $name->slice(-2));
-        $this->assertEquals(new Name('foo\bar'), $name->slice(0, -1));
-        $this->assertNull($name->slice(0, -3));
-        $this->assertEquals(new Name('bar'), $name->slice(1, -1));
-        $this->assertNull($name->slice(1, -2));
-        $this->assertEquals(new Name('bar'), $name->slice(-2, 1));
-        $this->assertEquals(new Name('bar'), $name->slice(-2, -1));
-        $this->assertNull($name->slice(-2, -2));
-    }
-
-    public function testSliceOffsetTooLarge() {
-        $this->expectException(\OutOfBoundsException::class);
-        $this->expectExceptionMessage('Offset 4 is out of bounds');
-        (new Name('foo\bar\baz'))->slice(4);
-    }
-
-    public function testSliceOffsetTooSmall() {
-        $this->expectException(\OutOfBoundsException::class);
-        $this->expectExceptionMessage('Offset -4 is out of bounds');
-        (new Name('foo\bar\baz'))->slice(-4);
-    }
-
-    public function testSliceLengthTooLarge() {
-        $this->expectException(\OutOfBoundsException::class);
-        $this->expectExceptionMessage('Length 4 is out of bounds');
-        (new Name('foo\bar\baz'))->slice(0, 4);
-    }
-
-    public function testSliceLengthTooSmall() {
-        $this->expectException(\OutOfBoundsException::class);
-        $this->expectExceptionMessage('Length -4 is out of bounds');
-        (new Name('foo\bar\baz'))->slice(0, -4);
-    }
-
-    public function testConcat() {
-        $this->assertEquals(new Name('foo\bar\baz'), Name::concat('foo', 'bar\baz'));
-        $this->assertEquals(
-            new Name\FullyQualified('foo\bar'),
-            Name\FullyQualified::concat(['foo'], new Name('bar'))
-        );
-
-        $attributes = ['foo' => 'bar'];
-        $this->assertEquals(
-            new Name\Relative('foo\bar\baz', $attributes),
-            Name\Relative::concat(new Name\FullyQualified('foo\bar'), 'baz', $attributes)
-        );
-
-        $this->assertEquals(new Name('foo'), Name::concat(null, 'foo'));
-        $this->assertEquals(new Name('foo'), Name::concat('foo', null));
-        $this->assertNull(Name::concat(null, null));
-    }
-
-    public function testNameTypes() {
-        $name = new Name('foo');
-        $this->assertTrue($name->isUnqualified());
-        $this->assertFalse($name->isQualified());
-        $this->assertFalse($name->isFullyQualified());
-        $this->assertFalse($name->isRelative());
-        $this->assertSame('foo', $name->toCodeString());
-
-        $name = new Name('foo\bar');
-        $this->assertFalse($name->isUnqualified());
-        $this->assertTrue($name->isQualified());
-        $this->assertFalse($name->isFullyQualified());
-        $this->assertFalse($name->isRelative());
-        $this->assertSame('foo\bar', $name->toCodeString());
-
-        $name = new Name\FullyQualified('foo');
-        $this->assertFalse($name->isUnqualified());
-        $this->assertFalse($name->isQualified());
-        $this->assertTrue($name->isFullyQualified());
-        $this->assertFalse($name->isRelative());
-        $this->assertSame('\foo', $name->toCodeString());
-
-        $name = new Name\Relative('foo');
-        $this->assertFalse($name->isUnqualified());
-        $this->assertFalse($name->isQualified());
-        $this->assertFalse($name->isFullyQualified());
-        $this->assertTrue($name->isRelative());
-        $this->assertSame('namespace\foo', $name->toCodeString());
-    }
-
-    public function testInvalidArg() {
-        $this->expectException(\InvalidArgumentException::class);
-        $this->expectExceptionMessage('Expected string, array of parts or Name instance');
-        Name::concat('foo', new \stdClass);
-    }
-
-    public function testInvalidEmptyString() {
-        $this->expectException(\InvalidArgumentException::class);
-        $this->expectExceptionMessage('Name cannot be empty');
-        new Name('');
-    }
-
-    public function testInvalidEmptyArray() {
-        $this->expectException(\InvalidArgumentException::class);
-        $this->expectExceptionMessage('Name cannot be empty');
-        new Name([]);
-    }
-
-    /** @dataProvider provideTestIsSpecialClassName */
-    public function testIsSpecialClassName($name, $expected) {
-        $name = new Name($name);
-        $this->assertSame($expected, $name->isSpecialClassName());
-    }
-
-    public function provideTestIsSpecialClassName() {
-        return [
-            ['self', true],
-            ['PARENT', true],
-            ['Static', true],
-            ['self\not', false],
-            ['not\self', false],
-        ];
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Node/Scalar/MagicConstTest.php b/vendor/nikic/php-parser/test/PhpParser/Node/Scalar/MagicConstTest.php
deleted file mode 100644
index c8ae433b00..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Node/Scalar/MagicConstTest.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Node\Scalar;
-
-class MagicConstTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @dataProvider provideTestGetName
-     */
-    public function testGetName(MagicConst $magicConst, $name) {
-        $this->assertSame($name, $magicConst->getName());
-    }
-
-    public function provideTestGetName() {
-        return [
-            [new MagicConst\Class_, '__CLASS__'],
-            [new MagicConst\Dir, '__DIR__'],
-            [new MagicConst\File, '__FILE__'],
-            [new MagicConst\Function_, '__FUNCTION__'],
-            [new MagicConst\Line, '__LINE__'],
-            [new MagicConst\Method, '__METHOD__'],
-            [new MagicConst\Namespace_, '__NAMESPACE__'],
-            [new MagicConst\Trait_, '__TRAIT__'],
-        ];
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Node/Scalar/StringTest.php b/vendor/nikic/php-parser/test/PhpParser/Node/Scalar/StringTest.php
deleted file mode 100644
index 814a7758fc..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Node/Scalar/StringTest.php
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Node\Scalar;
-
-class StringTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @dataProvider provideTestParseEscapeSequences
-     */
-    public function testParseEscapeSequences($expected, $string, $quote) {
-        $this->assertSame(
-            $expected,
-            String_::parseEscapeSequences($string, $quote)
-        );
-    }
-
-    /**
-     * @dataProvider provideTestParse
-     */
-    public function testCreate($expected, $string) {
-        $this->assertSame(
-            $expected,
-            String_::parse($string)
-        );
-    }
-
-    public function provideTestParseEscapeSequences() {
-        return [
-            ['"',              '\\"',              '"'],
-            ['\\"',            '\\"',              '`'],
-            ['\\"\\`',         '\\"\\`',           null],
-            ["\\\$\n\r\t\f\v", '\\\\\$\n\r\t\f\v', null],
-            ["\x1B",           '\e',               null],
-            [chr(255),         '\xFF',             null],
-            [chr(255),         '\377',             null],
-            [chr(0),           '\400',             null],
-            ["\0",             '\0',               null],
-            ['\xFF',           '\\\\xFF',          null],
-        ];
-    }
-
-    public function provideTestParse() {
-        $tests = [
-            ['A', '\'A\''],
-            ['A', 'b\'A\''],
-            ['A', '"A"'],
-            ['A', 'b"A"'],
-            ['\\', '\'\\\\\''],
-            ['\'', '\'\\\'\''],
-        ];
-
-        foreach ($this->provideTestParseEscapeSequences() as $i => $test) {
-            // skip second and third tests, they aren't for double quotes
-            if ($i !== 1 && $i !== 2) {
-                $tests[] = [$test[0], '"' . $test[1] . '"'];
-            }
-        }
-
-        return $tests;
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/ClassConstTest.php b/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/ClassConstTest.php
deleted file mode 100644
index 9a1b4697ca..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/ClassConstTest.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Node\Stmt;
-
-class ClassConstTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @dataProvider provideModifiers
-     */
-    public function testModifiers($modifier) {
-        $node = new ClassConst(
-            [], // invalid
-            constant('PhpParser\Node\Stmt\Class_::MODIFIER_' . strtoupper($modifier))
-        );
-
-        $this->assertTrue($node->{'is' . $modifier}());
-    }
-
-    public function testNoModifiers() {
-        $node = new ClassConst([], 0);
-
-        $this->assertTrue($node->isPublic());
-        $this->assertFalse($node->isProtected());
-        $this->assertFalse($node->isPrivate());
-    }
-
-    public function provideModifiers() {
-        return [
-            ['public'],
-            ['protected'],
-            ['private'],
-        ];
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/ClassMethodTest.php b/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/ClassMethodTest.php
deleted file mode 100644
index 51c5f1c2cf..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/ClassMethodTest.php
+++ /dev/null
@@ -1,123 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Node\Stmt;
-
-use PhpParser\Node\Expr\Variable;
-use PhpParser\Node\Name;
-use PhpParser\Node\Param;
-
-class ClassMethodTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @dataProvider provideModifiers
-     */
-    public function testModifiers($modifier) {
-        $node = new ClassMethod('foo', [
-            'type' => constant('PhpParser\Node\Stmt\Class_::MODIFIER_' . strtoupper($modifier))
-        ]);
-
-        $this->assertTrue($node->{'is' . $modifier}());
-    }
-
-    public function testNoModifiers() {
-        $node = new ClassMethod('foo', ['type' => 0]);
-
-        $this->assertTrue($node->isPublic());
-        $this->assertFalse($node->isProtected());
-        $this->assertFalse($node->isPrivate());
-        $this->assertFalse($node->isAbstract());
-        $this->assertFalse($node->isFinal());
-        $this->assertFalse($node->isStatic());
-        $this->assertFalse($node->isMagic());
-    }
-
-    public function provideModifiers() {
-        return [
-            ['public'],
-            ['protected'],
-            ['private'],
-            ['abstract'],
-            ['final'],
-            ['static'],
-        ];
-    }
-
-    /**
-     * Checks that implicit public modifier detection for method is working
-     *
-     * @dataProvider implicitPublicModifiers
-     *
-     * @param string $modifier Node type modifier
-     */
-    public function testImplicitPublic(string $modifier)
-    {
-        $node = new ClassMethod('foo', [
-            'type' => constant('PhpParser\Node\Stmt\Class_::MODIFIER_' . strtoupper($modifier))
-        ]);
-
-        $this->assertTrue($node->isPublic(), 'Node should be implicitly public');
-    }
-
-    public function implicitPublicModifiers() {
-        return [
-            ['abstract'],
-            ['final'],
-            ['static'],
-        ];
-    }
-
-    /**
-     * @dataProvider provideMagics
-     *
-     * @param string $name Node name
-     */
-    public function testMagic(string $name) {
-        $node = new ClassMethod($name);
-        $this->assertTrue($node->isMagic(), 'Method should be magic');
-    }
-
-    public function provideMagics() {
-        return [
-             ['__construct'],
-             ['__DESTRUCT'],
-             ['__caLL'],
-             ['__callstatic'],
-             ['__get'],
-             ['__set'],
-             ['__isset'],
-             ['__unset'],
-             ['__sleep'],
-             ['__wakeup'],
-             ['__tostring'],
-             ['__set_state'],
-             ['__clone'],
-             ['__invoke'],
-             ['__debuginfo'],
-        ];
-    }
-
-    public function testFunctionLike() {
-        $param = new Param(new Variable('a'));
-        $type = new Name('Foo');
-        $return = new Return_(new Variable('a'));
-        $method = new ClassMethod('test', [
-            'byRef' => false,
-            'params' => [$param],
-            'returnType' => $type,
-            'stmts' => [$return],
-        ]);
-
-        $this->assertFalse($method->returnsByRef());
-        $this->assertSame([$param], $method->getParams());
-        $this->assertSame($type, $method->getReturnType());
-        $this->assertSame([$return], $method->getStmts());
-
-        $method = new ClassMethod('test', [
-            'byRef' => true,
-            'stmts' => null,
-        ]);
-
-        $this->assertTrue($method->returnsByRef());
-        $this->assertNull($method->getStmts());
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/ClassTest.php b/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/ClassTest.php
deleted file mode 100644
index 9b7c7de1cc..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/ClassTest.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Node\Stmt;
-
-class ClassTest extends \PHPUnit\Framework\TestCase
-{
-    public function testIsAbstract() {
-        $class = new Class_('Foo', ['type' => Class_::MODIFIER_ABSTRACT]);
-        $this->assertTrue($class->isAbstract());
-
-        $class = new Class_('Foo');
-        $this->assertFalse($class->isAbstract());
-    }
-
-    public function testIsFinal() {
-        $class = new Class_('Foo', ['type' => Class_::MODIFIER_FINAL]);
-        $this->assertTrue($class->isFinal());
-
-        $class = new Class_('Foo');
-        $this->assertFalse($class->isFinal());
-    }
-
-    public function testGetMethods() {
-        $methods = [
-            new ClassMethod('foo'),
-            new ClassMethod('bar'),
-            new ClassMethod('fooBar'),
-        ];
-        $class = new Class_('Foo', [
-            'stmts' => [
-                new TraitUse([]),
-                $methods[0],
-                new ClassConst([]),
-                $methods[1],
-                new Property(0, []),
-                $methods[2],
-            ]
-        ]);
-
-        $this->assertSame($methods, $class->getMethods());
-    }
-
-    public function testGetMethod() {
-        $methodConstruct = new ClassMethod('__CONSTRUCT');
-        $methodTest = new ClassMethod('test');
-        $class = new Class_('Foo', [
-            'stmts' => [
-                new ClassConst([]),
-                $methodConstruct,
-                new Property(0, []),
-                $methodTest,
-            ]
-        ]);
-
-        $this->assertSame($methodConstruct, $class->getMethod('__construct'));
-        $this->assertSame($methodTest, $class->getMethod('test'));
-        $this->assertNull($class->getMethod('nonExisting'));
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/InterfaceTest.php b/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/InterfaceTest.php
deleted file mode 100644
index da6e8eb6fe..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/InterfaceTest.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Node\Stmt;
-
-use PhpParser\Node;
-
-class InterfaceTest extends \PHPUnit\Framework\TestCase
-{
-    public function testGetMethods() {
-        $methods = [
-            new ClassMethod('foo'),
-            new ClassMethod('bar'),
-        ];
-        $interface = new Class_('Foo', [
-            'stmts' => [
-                new Node\Stmt\ClassConst([new Node\Const_('C1', new Node\Scalar\String_('C1'))]),
-                $methods[0],
-                new Node\Stmt\ClassConst([new Node\Const_('C2', new Node\Scalar\String_('C2'))]),
-                $methods[1],
-                new Node\Stmt\ClassConst([new Node\Const_('C3', new Node\Scalar\String_('C3'))]),
-            ]
-        ]);
-
-        $this->assertSame($methods, $interface->getMethods());
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/PropertyTest.php b/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/PropertyTest.php
deleted file mode 100644
index e5d69fba5d..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/PropertyTest.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Node\Stmt;
-
-class PropertyTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @dataProvider provideModifiers
-     */
-    public function testModifiers($modifier) {
-        $node = new Property(
-            constant('PhpParser\Node\Stmt\Class_::MODIFIER_' . strtoupper($modifier)),
-            [] // invalid
-        );
-
-        $this->assertTrue($node->{'is' . $modifier}());
-    }
-
-    public function testNoModifiers() {
-        $node = new Property(0, []);
-
-        $this->assertTrue($node->isPublic());
-        $this->assertFalse($node->isProtected());
-        $this->assertFalse($node->isPrivate());
-        $this->assertFalse($node->isStatic());
-    }
-
-    public function testStaticImplicitlyPublic() {
-        $node = new Property(Class_::MODIFIER_STATIC, []);
-        $this->assertTrue($node->isPublic());
-        $this->assertFalse($node->isProtected());
-        $this->assertFalse($node->isPrivate());
-        $this->assertTrue($node->isStatic());
-    }
-
-    public function provideModifiers() {
-        return [
-            ['public'],
-            ['protected'],
-            ['private'],
-            ['static'],
-        ];
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/NodeAbstractTest.php b/vendor/nikic/php-parser/test/PhpParser/NodeAbstractTest.php
deleted file mode 100644
index 071b8f2a3a..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/NodeAbstractTest.php
+++ /dev/null
@@ -1,325 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-class DummyNode extends NodeAbstract
-{
-    public $subNode1;
-    public $subNode2;
-
-    public function __construct($subNode1, $subNode2, $attributes) {
-        parent::__construct($attributes);
-        $this->subNode1 = $subNode1;
-        $this->subNode2 = $subNode2;
-    }
-
-    public function getSubNodeNames() : array {
-        return ['subNode1', 'subNode2'];
-    }
-
-    // This method is only overwritten because the node is located in an unusual namespace
-    public function getType() : string {
-        return 'Dummy';
-    }
-}
-
-class NodeAbstractTest extends \PHPUnit\Framework\TestCase
-{
-    public function provideNodes() {
-        $attributes = [
-            'startLine' => 10,
-            'endLine' => 11,
-            'startTokenPos' => 12,
-            'endTokenPos' => 13,
-            'startFilePos' => 14,
-            'endFilePos' => 15,
-            'comments'  => [
-                new Comment('// Comment' . "\n"),
-                new Comment\Doc('/** doc comment */'),
-            ],
-        ];
-
-        $node = new DummyNode('value1', 'value2', $attributes);
-        $node->notSubNode = 'value3';
-
-        return [
-            [$attributes, $node],
-        ];
-    }
-
-    /**
-     * @dataProvider provideNodes
-     */
-    public function testConstruct(array $attributes, Node $node) {
-        $this->assertSame('Dummy', $node->getType());
-        $this->assertSame(['subNode1', 'subNode2'], $node->getSubNodeNames());
-        $this->assertSame(10, $node->getLine());
-        $this->assertSame(10, $node->getStartLine());
-        $this->assertSame(11, $node->getEndLine());
-        $this->assertSame(12, $node->getStartTokenPos());
-        $this->assertSame(13, $node->getEndTokenPos());
-        $this->assertSame(14, $node->getStartFilePos());
-        $this->assertSame(15, $node->getEndFilePos());
-        $this->assertSame('/** doc comment */', $node->getDocComment()->getText());
-        $this->assertSame('value1', $node->subNode1);
-        $this->assertSame('value2', $node->subNode2);
-        $this->assertObjectHasAttribute('subNode1', $node);
-        $this->assertObjectHasAttribute('subNode2', $node);
-        $this->assertObjectNotHasAttribute('subNode3', $node);
-        $this->assertSame($attributes, $node->getAttributes());
-        $this->assertSame($attributes['comments'], $node->getComments());
-
-        return $node;
-    }
-
-    /**
-     * @dataProvider provideNodes
-     */
-    public function testGetDocComment(array $attributes, Node $node) {
-        $this->assertSame('/** doc comment */', $node->getDocComment()->getText());
-        $comments = $node->getComments();
-
-        array_pop($comments); // remove doc comment
-        $node->setAttribute('comments', $comments);
-        $this->assertNull($node->getDocComment());
-
-        array_pop($comments); // remove comment
-        $node->setAttribute('comments', $comments);
-        $this->assertNull($node->getDocComment());
-    }
-
-    public function testSetDocComment() {
-        $node = new DummyNode(null, null, []);
-
-        // Add doc comment to node without comments
-        $docComment = new Comment\Doc('/** doc */');
-        $node->setDocComment($docComment);
-        $this->assertSame($docComment, $node->getDocComment());
-
-        // Replace it
-        $docComment = new Comment\Doc('/** doc 2 */');
-        $node->setDocComment($docComment);
-        $this->assertSame($docComment, $node->getDocComment());
-
-        // Add docmment to node with other comments
-        $c1 = new Comment('/* foo */');
-        $c2 = new Comment('/* bar */');
-        $docComment = new Comment\Doc('/** baz */');
-        $node->setAttribute('comments', [$c1, $c2]);
-        $node->setDocComment($docComment);
-        $this->assertSame([$c1, $c2, $docComment], $node->getAttribute('comments'));
-    }
-
-    /**
-     * @dataProvider provideNodes
-     */
-    public function testChange(array $attributes, Node $node) {
-        // direct modification
-        $node->subNode = 'newValue';
-        $this->assertSame('newValue', $node->subNode);
-
-        // indirect modification
-        $subNode =& $node->subNode;
-        $subNode = 'newNewValue';
-        $this->assertSame('newNewValue', $node->subNode);
-
-        // removal
-        unset($node->subNode);
-        $this->assertObjectNotHasAttribute('subNode', $node);
-    }
-
-    /**
-     * @dataProvider provideNodes
-     */
-    public function testIteration(array $attributes, Node $node) {
-        // Iteration is simple object iteration over properties,
-        // not over subnodes
-        $i = 0;
-        foreach ($node as $key => $value) {
-            if ($i === 0) {
-                $this->assertSame('subNode1', $key);
-                $this->assertSame('value1', $value);
-            } elseif ($i === 1) {
-                $this->assertSame('subNode2', $key);
-                $this->assertSame('value2', $value);
-            } elseif ($i === 2) {
-                $this->assertSame('notSubNode', $key);
-                $this->assertSame('value3', $value);
-            } else {
-                throw new \Exception;
-            }
-            $i++;
-        }
-        $this->assertSame(3, $i);
-    }
-
-    public function testAttributes() {
-        /** @var $node Node */
-        $node = $this->getMockForAbstractClass(NodeAbstract::class);
-
-        $this->assertEmpty($node->getAttributes());
-
-        $node->setAttribute('key', 'value');
-        $this->assertTrue($node->hasAttribute('key'));
-        $this->assertSame('value', $node->getAttribute('key'));
-
-        $this->assertFalse($node->hasAttribute('doesNotExist'));
-        $this->assertNull($node->getAttribute('doesNotExist'));
-        $this->assertSame('default', $node->getAttribute('doesNotExist', 'default'));
-
-        $node->setAttribute('null', null);
-        $this->assertTrue($node->hasAttribute('null'));
-        $this->assertNull($node->getAttribute('null'));
-        $this->assertNull($node->getAttribute('null', 'default'));
-
-        $this->assertSame(
-            [
-                'key'  => 'value',
-                'null' => null,
-            ],
-            $node->getAttributes()
-        );
-
-        $node->setAttributes(
-            [
-                'a' => 'b',
-                'c' => null,
-            ]
-        );
-        $this->assertSame(
-            [
-                'a' => 'b',
-                'c' => null,
-            ],
-            $node->getAttributes()
-        );
-    }
-
-    public function testJsonSerialization() {
-        $code = <<<'PHP'
-<?php
-// comment
-/** doc comment */
-function functionName(&$a = 0, $b = 1.0) {
-    echo 'Foo';
-}
-PHP;
-        $expected = <<<'JSON'
-[
-    {
-        "nodeType": "Stmt_Function",
-        "byRef": false,
-        "name": {
-            "nodeType": "Identifier",
-            "name": "functionName",
-            "attributes": {
-                "startLine": 4,
-                "endLine": 4
-            }
-        },
-        "params": [
-            {
-                "nodeType": "Param",
-                "type": null,
-                "byRef": true,
-                "variadic": false,
-                "var": {
-                    "nodeType": "Expr_Variable",
-                    "name": "a",
-                    "attributes": {
-                        "startLine": 4,
-                        "endLine": 4
-                    }
-                },
-                "default": {
-                    "nodeType": "Scalar_LNumber",
-                    "value": 0,
-                    "attributes": {
-                        "startLine": 4,
-                        "endLine": 4,
-                        "kind": 10
-                    }
-                },
-                "attributes": {
-                    "startLine": 4,
-                    "endLine": 4
-                }
-            },
-            {
-                "nodeType": "Param",
-                "type": null,
-                "byRef": false,
-                "variadic": false,
-                "var": {
-                    "nodeType": "Expr_Variable",
-                    "name": "b",
-                    "attributes": {
-                        "startLine": 4,
-                        "endLine": 4
-                    }
-                },
-                "default": {
-                    "nodeType": "Scalar_DNumber",
-                    "value": 1,
-                    "attributes": {
-                        "startLine": 4,
-                        "endLine": 4
-                    }
-                },
-                "attributes": {
-                    "startLine": 4,
-                    "endLine": 4
-                }
-            }
-        ],
-        "returnType": null,
-        "stmts": [
-            {
-                "nodeType": "Stmt_Echo",
-                "exprs": [
-                    {
-                        "nodeType": "Scalar_String",
-                        "value": "Foo",
-                        "attributes": {
-                            "startLine": 5,
-                            "endLine": 5,
-                            "kind": 1
-                        }
-                    }
-                ],
-                "attributes": {
-                    "startLine": 5,
-                    "endLine": 5
-                }
-            }
-        ],
-        "attributes": {
-            "startLine": 4,
-            "comments": [
-                {
-                    "nodeType": "Comment",
-                    "text": "\/\/ comment\n",
-                    "line": 2,
-                    "filePos": 6,
-                    "tokenPos": 1
-                },
-                {
-                    "nodeType": "Comment_Doc",
-                    "text": "\/** doc comment *\/",
-                    "line": 3,
-                    "filePos": 17,
-                    "tokenPos": 2
-                }
-            ],
-            "endLine": 6
-        }
-    }
-]
-JSON;
-
-        $parser = new Parser\Php7(new Lexer());
-        $stmts = $parser->parse(canonicalize($code));
-        $json = json_encode($stmts, JSON_PRETTY_PRINT);
-        $this->assertEquals(canonicalize($expected), canonicalize($json));
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/NodeDumperTest.php b/vendor/nikic/php-parser/test/PhpParser/NodeDumperTest.php
deleted file mode 100644
index 036c3d1ee5..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/NodeDumperTest.php
+++ /dev/null
@@ -1,106 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-class NodeDumperTest extends \PHPUnit\Framework\TestCase
-{
-    private function canonicalize($string) {
-        return str_replace("\r\n", "\n", $string);
-    }
-
-    /**
-     * @dataProvider provideTestDump
-     */
-    public function testDump($node, $dump) {
-        $dumper = new NodeDumper;
-
-        $this->assertSame($this->canonicalize($dump), $this->canonicalize($dumper->dump($node)));
-    }
-
-    public function provideTestDump() {
-        return [
-            [
-                [],
-'array(
-)'
-            ],
-            [
-                ['Foo', 'Bar', 'Key' => 'FooBar'],
-'array(
-    0: Foo
-    1: Bar
-    Key: FooBar
-)'
-            ],
-            [
-                new Node\Name(['Hallo', 'World']),
-'Name(
-    parts: array(
-        0: Hallo
-        1: World
-    )
-)'
-            ],
-            [
-                new Node\Expr\Array_([
-                    new Node\Expr\ArrayItem(new Node\Scalar\String_('Foo'))
-                ]),
-'Expr_Array(
-    items: array(
-        0: Expr_ArrayItem(
-            key: null
-            value: Scalar_String(
-                value: Foo
-            )
-            byRef: false
-            unpack: false
-        )
-    )
-)'
-            ],
-        ];
-    }
-
-    public function testDumpWithPositions() {
-        $parser = (new ParserFactory)->create(
-            ParserFactory::ONLY_PHP7,
-            new Lexer(['usedAttributes' => ['startLine', 'endLine', 'startFilePos', 'endFilePos']])
-        );
-        $dumper = new NodeDumper(['dumpPositions' => true]);
-
-        $code = "<?php\n\$a = 1;\necho \$a;";
-        $expected = <<<'OUT'
-array(
-    0: Stmt_Expression[2:1 - 2:7](
-        expr: Expr_Assign[2:1 - 2:6](
-            var: Expr_Variable[2:1 - 2:2](
-                name: a
-            )
-            expr: Scalar_LNumber[2:6 - 2:6](
-                value: 1
-            )
-        )
-    )
-    1: Stmt_Echo[3:1 - 3:8](
-        exprs: array(
-            0: Expr_Variable[3:6 - 3:7](
-                name: a
-            )
-        )
-    )
-)
-OUT;
-
-        $stmts = $parser->parse($code);
-        $dump = $dumper->dump($stmts, $code);
-
-        $this->assertSame($this->canonicalize($expected), $this->canonicalize($dump));
-    }
-
-    public function testError() {
-        $this->expectException(\InvalidArgumentException::class);
-        $this->expectExceptionMessage('Can only dump nodes and arrays.');
-        $dumper = new NodeDumper;
-        $dumper->dump(new \stdClass);
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/NodeFinderTest.php b/vendor/nikic/php-parser/test/PhpParser/NodeFinderTest.php
deleted file mode 100644
index 909738a738..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/NodeFinderTest.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-use PhpParser\Node\Expr;
-
-class NodeFinderTest extends \PHPUnit\Framework\TestCase
-{
-    private function getStmtsAndVars() {
-        $assign = new Expr\Assign(new Expr\Variable('a'), new Expr\BinaryOp\Concat(
-            new Expr\Variable('b'), new Expr\Variable('c')
-        ));
-        $stmts = [new Node\Stmt\Expression($assign)];
-        $vars = [$assign->var, $assign->expr->left, $assign->expr->right];
-        return [$stmts, $vars];
-    }
-
-    public function testFind() {
-        $finder = new NodeFinder;
-        list($stmts, $vars) = $this->getStmtsAndVars();
-        $varFilter = function(Node $node) {
-            return $node instanceof Expr\Variable;
-        };
-        $this->assertSame($vars, $finder->find($stmts, $varFilter));
-        $this->assertSame($vars, $finder->find($stmts[0], $varFilter));
-
-        $noneFilter = function () { return false; };
-        $this->assertSame([], $finder->find($stmts, $noneFilter));
-    }
-
-    public function testFindInstanceOf() {
-        $finder = new NodeFinder;
-        list($stmts, $vars) = $this->getStmtsAndVars();
-        $this->assertSame($vars, $finder->findInstanceOf($stmts, Expr\Variable::class));
-        $this->assertSame($vars, $finder->findInstanceOf($stmts[0], Expr\Variable::class));
-        $this->assertSame([], $finder->findInstanceOf($stmts, Expr\BinaryOp\Mul::class));
-    }
-
-    public function testFindFirst() {
-        $finder = new NodeFinder;
-        list($stmts, $vars) = $this->getStmtsAndVars();
-        $varFilter = function(Node $node) {
-            return $node instanceof Expr\Variable;
-        };
-        $this->assertSame($vars[0], $finder->findFirst($stmts, $varFilter));
-        $this->assertSame($vars[0], $finder->findFirst($stmts[0], $varFilter));
-
-        $noneFilter = function () { return false; };
-        $this->assertNull($finder->findFirst($stmts, $noneFilter));
-    }
-
-    public function testFindFirstInstanceOf() {
-        $finder = new NodeFinder;
-        list($stmts, $vars) = $this->getStmtsAndVars();
-        $this->assertSame($vars[0], $finder->findFirstInstanceOf($stmts, Expr\Variable::class));
-        $this->assertSame($vars[0], $finder->findFirstInstanceOf($stmts[0], Expr\Variable::class));
-        $this->assertNull($finder->findFirstInstanceOf($stmts, Expr\BinaryOp\Mul::class));
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/NodeTraverserTest.php b/vendor/nikic/php-parser/test/PhpParser/NodeTraverserTest.php
deleted file mode 100644
index 2daa9ceaf0..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/NodeTraverserTest.php
+++ /dev/null
@@ -1,344 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-use PhpParser\Node\Expr;
-use PhpParser\Node\Scalar\String_;
-
-class NodeTraverserTest extends \PHPUnit\Framework\TestCase
-{
-    public function testNonModifying() {
-        $str1Node = new String_('Foo');
-        $str2Node = new String_('Bar');
-        $echoNode = new Node\Stmt\Echo_([$str1Node, $str2Node]);
-        $stmts    = [$echoNode];
-
-        $visitor = $this->getMockBuilder(NodeVisitor::class)->getMock();
-
-        $visitor->expects($this->at(0))->method('beforeTraverse')->with($stmts);
-        $visitor->expects($this->at(1))->method('enterNode')->with($echoNode);
-        $visitor->expects($this->at(2))->method('enterNode')->with($str1Node);
-        $visitor->expects($this->at(3))->method('leaveNode')->with($str1Node);
-        $visitor->expects($this->at(4))->method('enterNode')->with($str2Node);
-        $visitor->expects($this->at(5))->method('leaveNode')->with($str2Node);
-        $visitor->expects($this->at(6))->method('leaveNode')->with($echoNode);
-        $visitor->expects($this->at(7))->method('afterTraverse')->with($stmts);
-
-        $traverser = new NodeTraverser;
-        $traverser->addVisitor($visitor);
-
-        $this->assertEquals($stmts, $traverser->traverse($stmts));
-    }
-
-    public function testModifying() {
-        $str1Node  = new String_('Foo');
-        $str2Node  = new String_('Bar');
-        $printNode = new Expr\Print_($str1Node);
-
-        // first visitor changes the node, second verifies the change
-        $visitor1 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor2 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-
-        // replace empty statements with string1 node
-        $visitor1->expects($this->at(0))->method('beforeTraverse')->with([])
-                 ->willReturn([$str1Node]);
-        $visitor2->expects($this->at(0))->method('beforeTraverse')->with([$str1Node]);
-
-        // replace string1 node with print node
-        $visitor1->expects($this->at(1))->method('enterNode')->with($str1Node)
-                 ->willReturn($printNode);
-        $visitor2->expects($this->at(1))->method('enterNode')->with($printNode);
-
-        // replace string1 node with string2 node
-        $visitor1->expects($this->at(2))->method('enterNode')->with($str1Node)
-                 ->willReturn($str2Node);
-        $visitor2->expects($this->at(2))->method('enterNode')->with($str2Node);
-
-        // replace string2 node with string1 node again
-        $visitor1->expects($this->at(3))->method('leaveNode')->with($str2Node)
-                 ->willReturn($str1Node);
-        $visitor2->expects($this->at(3))->method('leaveNode')->with($str1Node);
-
-        // replace print node with string1 node again
-        $visitor1->expects($this->at(4))->method('leaveNode')->with($printNode)
-                 ->willReturn($str1Node);
-        $visitor2->expects($this->at(4))->method('leaveNode')->with($str1Node);
-
-        // replace string1 node with empty statements again
-        $visitor1->expects($this->at(5))->method('afterTraverse')->with([$str1Node])
-                 ->willReturn([]);
-        $visitor2->expects($this->at(5))->method('afterTraverse')->with([]);
-
-        $traverser = new NodeTraverser;
-        $traverser->addVisitor($visitor1);
-        $traverser->addVisitor($visitor2);
-
-        // as all operations are reversed we end where we start
-        $this->assertEquals([], $traverser->traverse([]));
-    }
-
-    public function testRemove() {
-        $str1Node = new String_('Foo');
-        $str2Node = new String_('Bar');
-
-        $visitor = $this->getMockBuilder(NodeVisitor::class)->getMock();
-
-        // remove the string1 node, leave the string2 node
-        $visitor->expects($this->at(2))->method('leaveNode')->with($str1Node)
-                ->willReturn(NodeTraverser::REMOVE_NODE);
-
-        $traverser = new NodeTraverser;
-        $traverser->addVisitor($visitor);
-
-        $this->assertEquals([$str2Node], $traverser->traverse([$str1Node, $str2Node]));
-    }
-
-    public function testMerge() {
-        $strStart  = new String_('Start');
-        $strMiddle = new String_('End');
-        $strEnd    = new String_('Middle');
-        $strR1     = new String_('Replacement 1');
-        $strR2     = new String_('Replacement 2');
-
-        $visitor = $this->getMockBuilder(NodeVisitor::class)->getMock();
-
-        // replace strMiddle with strR1 and strR2 by merge
-        $visitor->expects($this->at(4))->method('leaveNode')->with($strMiddle)
-                ->willReturn([$strR1, $strR2]);
-
-        $traverser = new NodeTraverser;
-        $traverser->addVisitor($visitor);
-
-        $this->assertEquals(
-            [$strStart, $strR1, $strR2, $strEnd],
-            $traverser->traverse([$strStart, $strMiddle, $strEnd])
-        );
-    }
-
-    public function testInvalidDeepArray() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Invalid node structure: Contains nested arrays');
-        $strNode = new String_('Foo');
-        $stmts = [[[$strNode]]];
-
-        $traverser = new NodeTraverser;
-        $this->assertEquals($stmts, $traverser->traverse($stmts));
-    }
-
-    public function testDontTraverseChildren() {
-        $strNode = new String_('str');
-        $printNode = new Expr\Print_($strNode);
-        $varNode = new Expr\Variable('foo');
-        $mulNode = new Expr\BinaryOp\Mul($varNode, $varNode);
-        $negNode = new Expr\UnaryMinus($mulNode);
-        $stmts = [$printNode, $negNode];
-
-        $visitor1 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor2 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-
-        $visitor1->expects($this->at(1))->method('enterNode')->with($printNode)
-            ->willReturn(NodeTraverser::DONT_TRAVERSE_CHILDREN);
-        $visitor2->expects($this->at(1))->method('enterNode')->with($printNode);
-
-        $visitor1->expects($this->at(2))->method('leaveNode')->with($printNode);
-        $visitor2->expects($this->at(2))->method('leaveNode')->with($printNode);
-
-        $visitor1->expects($this->at(3))->method('enterNode')->with($negNode);
-        $visitor2->expects($this->at(3))->method('enterNode')->with($negNode);
-
-        $visitor1->expects($this->at(4))->method('enterNode')->with($mulNode);
-        $visitor2->expects($this->at(4))->method('enterNode')->with($mulNode)
-            ->willReturn(NodeTraverser::DONT_TRAVERSE_CHILDREN);
-
-        $visitor1->expects($this->at(5))->method('leaveNode')->with($mulNode);
-        $visitor2->expects($this->at(5))->method('leaveNode')->with($mulNode);
-
-        $visitor1->expects($this->at(6))->method('leaveNode')->with($negNode);
-        $visitor2->expects($this->at(6))->method('leaveNode')->with($negNode);
-
-        $traverser = new NodeTraverser;
-        $traverser->addVisitor($visitor1);
-        $traverser->addVisitor($visitor2);
-
-        $this->assertEquals($stmts, $traverser->traverse($stmts));
-    }
-
-    public function testDontTraverseCurrentAndChildren() {
-        // print 'str'; -($foo * $foo);
-        $strNode = new String_('str');
-        $printNode = new Expr\Print_($strNode);
-        $varNode = new Expr\Variable('foo');
-        $mulNode = new Expr\BinaryOp\Mul($varNode, $varNode);
-        $divNode = new Expr\BinaryOp\Div($varNode, $varNode);
-        $negNode = new Expr\UnaryMinus($mulNode);
-        $stmts = [$printNode, $negNode];
-
-        $visitor1 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor2 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-
-        $visitor1->expects($this->at(1))->method('enterNode')->with($printNode)
-            ->willReturn(NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN);
-        $visitor1->expects($this->at(2))->method('leaveNode')->with($printNode);
-
-        $visitor1->expects($this->at(3))->method('enterNode')->with($negNode);
-        $visitor2->expects($this->at(1))->method('enterNode')->with($negNode);
-
-        $visitor1->expects($this->at(4))->method('enterNode')->with($mulNode)
-            ->willReturn(NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN);
-        $visitor1->expects($this->at(5))->method('leaveNode')->with($mulNode)->willReturn($divNode);
-
-        $visitor1->expects($this->at(6))->method('leaveNode')->with($negNode);
-        $visitor2->expects($this->at(2))->method('leaveNode')->with($negNode);
-
-        $traverser = new NodeTraverser;
-        $traverser->addVisitor($visitor1);
-        $traverser->addVisitor($visitor2);
-
-        $resultStmts = $traverser->traverse($stmts);
-
-        $this->assertInstanceOf(Expr\BinaryOp\Div::class, $resultStmts[1]->expr);
-    }
-
-    public function testStopTraversal() {
-        $varNode1 = new Expr\Variable('a');
-        $varNode2 = new Expr\Variable('b');
-        $varNode3 = new Expr\Variable('c');
-        $mulNode = new Expr\BinaryOp\Mul($varNode1, $varNode2);
-        $printNode = new Expr\Print_($varNode3);
-        $stmts = [$mulNode, $printNode];
-
-        // From enterNode() with array parent
-        $visitor = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor->expects($this->at(1))->method('enterNode')->with($mulNode)
-            ->willReturn(NodeTraverser::STOP_TRAVERSAL);
-        $visitor->expects($this->at(2))->method('afterTraverse');
-        $traverser = new NodeTraverser;
-        $traverser->addVisitor($visitor);
-        $this->assertEquals($stmts, $traverser->traverse($stmts));
-
-        // From enterNode with Node parent
-        $visitor = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor->expects($this->at(2))->method('enterNode')->with($varNode1)
-            ->willReturn(NodeTraverser::STOP_TRAVERSAL);
-        $visitor->expects($this->at(3))->method('afterTraverse');
-        $traverser = new NodeTraverser;
-        $traverser->addVisitor($visitor);
-        $this->assertEquals($stmts, $traverser->traverse($stmts));
-
-        // From leaveNode with Node parent
-        $visitor = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor->expects($this->at(3))->method('leaveNode')->with($varNode1)
-            ->willReturn(NodeTraverser::STOP_TRAVERSAL);
-        $visitor->expects($this->at(4))->method('afterTraverse');
-        $traverser = new NodeTraverser;
-        $traverser->addVisitor($visitor);
-        $this->assertEquals($stmts, $traverser->traverse($stmts));
-
-        // From leaveNode with array parent
-        $visitor = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor->expects($this->at(6))->method('leaveNode')->with($mulNode)
-            ->willReturn(NodeTraverser::STOP_TRAVERSAL);
-        $visitor->expects($this->at(7))->method('afterTraverse');
-        $traverser = new NodeTraverser;
-        $traverser->addVisitor($visitor);
-        $this->assertEquals($stmts, $traverser->traverse($stmts));
-
-        // Check that pending array modifications are still carried out
-        $visitor = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor->expects($this->at(6))->method('leaveNode')->with($mulNode)
-            ->willReturn(NodeTraverser::REMOVE_NODE);
-        $visitor->expects($this->at(7))->method('enterNode')->with($printNode)
-            ->willReturn(NodeTraverser::STOP_TRAVERSAL);
-        $visitor->expects($this->at(8))->method('afterTraverse');
-        $traverser = new NodeTraverser;
-        $traverser->addVisitor($visitor);
-        $this->assertEquals([$printNode], $traverser->traverse($stmts));
-
-    }
-
-    public function testRemovingVisitor() {
-        $visitor1 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor2 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor3 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-
-        $traverser = new NodeTraverser;
-        $traverser->addVisitor($visitor1);
-        $traverser->addVisitor($visitor2);
-        $traverser->addVisitor($visitor3);
-
-        $preExpected = [$visitor1, $visitor2, $visitor3];
-        $this->assertAttributeSame($preExpected, 'visitors', $traverser, 'The appropriate visitors have not been added');
-
-        $traverser->removeVisitor($visitor2);
-
-        $postExpected = [0 => $visitor1, 2 => $visitor3];
-        $this->assertAttributeSame($postExpected, 'visitors', $traverser, 'The appropriate visitors are not present after removal');
-    }
-
-    public function testNoCloneNodes() {
-        $stmts = [new Node\Stmt\Echo_([new String_('Foo'), new String_('Bar')])];
-
-        $traverser = new NodeTraverser;
-
-        $this->assertSame($stmts, $traverser->traverse($stmts));
-    }
-
-    /**
-     * @dataProvider provideTestInvalidReturn
-     */
-    public function testInvalidReturn($visitor, $message) {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage($message);
-
-        $stmts = [new Node\Stmt\Expression(new Node\Scalar\LNumber(42))];
-
-        $traverser = new NodeTraverser();
-        $traverser->addVisitor($visitor);
-        $traverser->traverse($stmts);
-    }
-
-    public function provideTestInvalidReturn() {
-        $visitor1 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor1->expects($this->at(1))->method('enterNode')
-            ->willReturn('foobar');
-
-        $visitor2 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor2->expects($this->at(2))->method('enterNode')
-            ->willReturn('foobar');
-
-        $visitor3 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor3->expects($this->at(3))->method('leaveNode')
-            ->willReturn('foobar');
-
-        $visitor4 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor4->expects($this->at(4))->method('leaveNode')
-            ->willReturn('foobar');
-
-        $visitor5 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor5->expects($this->at(3))->method('leaveNode')
-            ->willReturn([new Node\Scalar\DNumber(42.0)]);
-
-        $visitor6 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor6->expects($this->at(4))->method('leaveNode')
-            ->willReturn(false);
-
-        $visitor7 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor7->expects($this->at(1))->method('enterNode')
-            ->willReturn(new Node\Scalar\LNumber(42));
-
-        $visitor8 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor8->expects($this->at(2))->method('enterNode')
-            ->willReturn(new Node\Stmt\Return_());
-
-        return [
-            [$visitor1, 'enterNode() returned invalid value of type string'],
-            [$visitor2, 'enterNode() returned invalid value of type string'],
-            [$visitor3, 'leaveNode() returned invalid value of type string'],
-            [$visitor4, 'leaveNode() returned invalid value of type string'],
-            [$visitor5, 'leaveNode() may only return an array if the parent structure is an array'],
-            [$visitor6, 'bool(false) return from leaveNode() no longer supported. Return NodeTraverser::REMOVE_NODE instead'],
-            [$visitor7, 'Trying to replace statement (Stmt_Expression) with expression (Scalar_LNumber). Are you missing a Stmt_Expression wrapper?'],
-            [$visitor8, 'Trying to replace expression (Scalar_LNumber) with statement (Stmt_Return)'],
-        ];
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/NodeVisitor/FindingVisitorTest.php b/vendor/nikic/php-parser/test/PhpParser/NodeVisitor/FindingVisitorTest.php
deleted file mode 100644
index 27cb6dd480..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/NodeVisitor/FindingVisitorTest.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\NodeVisitor;
-
-use PhpParser\Node;
-use PhpParser\Node\Expr;
-use PhpParser\NodeTraverser;
-
-class FindingVisitorTest extends \PHPUnit\Framework\TestCase
-{
-    public function testFindVariables() {
-        $traverser = new NodeTraverser();
-        $visitor = new FindingVisitor(function(Node $node) {
-            return $node instanceof Node\Expr\Variable;
-        });
-        $traverser->addVisitor($visitor);
-
-        $assign = new Expr\Assign(new Expr\Variable('a'), new Expr\BinaryOp\Concat(
-            new Expr\Variable('b'), new Expr\Variable('c')
-        ));
-        $stmts = [new Node\Stmt\Expression($assign)];
-
-        $traverser->traverse($stmts);
-        $this->assertSame([
-            $assign->var,
-            $assign->expr->left,
-            $assign->expr->right,
-        ], $visitor->getFoundNodes());
-    }
-
-    public function testFindAll() {
-        $traverser = new NodeTraverser();
-        $visitor = new FindingVisitor(function(Node $node) {
-            return true; // All nodes
-        });
-        $traverser->addVisitor($visitor);
-
-        $assign = new Expr\Assign(new Expr\Variable('a'), new Expr\BinaryOp\Concat(
-            new Expr\Variable('b'), new Expr\Variable('c')
-        ));
-        $stmts = [new Node\Stmt\Expression($assign)];
-
-        $traverser->traverse($stmts);
-        $this->assertSame([
-            $stmts[0],
-            $assign,
-            $assign->var,
-            $assign->expr,
-            $assign->expr->left,
-            $assign->expr->right,
-        ], $visitor->getFoundNodes());
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/NodeVisitor/FirstFindingVisitorTest.php b/vendor/nikic/php-parser/test/PhpParser/NodeVisitor/FirstFindingVisitorTest.php
deleted file mode 100644
index 9ae8932f92..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/NodeVisitor/FirstFindingVisitorTest.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\NodeVisitor;
-
-use PhpParser\Node;
-use PhpParser\Node\Expr;
-use PhpParser\NodeTraverser;
-
-class FirstFindingVisitorTest extends \PHPUnit\Framework\TestCase
-{
-    public function testFindFirstVariable() {
-        $traverser = new NodeTraverser();
-        $visitor = new FirstFindingVisitor(function(Node $node) {
-            return $node instanceof Node\Expr\Variable;
-        });
-        $traverser->addVisitor($visitor);
-
-        $assign = new Expr\Assign(new Expr\Variable('a'), new Expr\Variable('b'));
-        $stmts = [new Node\Stmt\Expression($assign)];
-
-        $traverser->traverse($stmts);
-        $this->assertSame($assign->var, $visitor->getFoundNode());
-    }
-
-    public function testFindNone() {
-        $traverser = new NodeTraverser();
-        $visitor = new FirstFindingVisitor(function(Node $node) {
-            return $node instanceof Node\Expr\BinaryOp;
-        });
-        $traverser->addVisitor($visitor);
-
-        $assign = new Expr\Assign(new Expr\Variable('a'), new Expr\Variable('b'));
-        $stmts = [new Node\Stmt\Expression($assign)];
-
-        $traverser->traverse($stmts);
-        $this->assertNull($visitor->getFoundNode());
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/NodeVisitor/NameResolverTest.php b/vendor/nikic/php-parser/test/PhpParser/NodeVisitor/NameResolverTest.php
deleted file mode 100644
index 571eaaea39..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/NodeVisitor/NameResolverTest.php
+++ /dev/null
@@ -1,505 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\NodeVisitor;
-
-use PhpParser;
-use PhpParser\Node;
-use PhpParser\Node\Expr;
-use PhpParser\Node\Name;
-use PhpParser\Node\Stmt;
-
-class NameResolverTest extends \PHPUnit\Framework\TestCase
-{
-    private function canonicalize($string) {
-        return str_replace("\r\n", "\n", $string);
-    }
-
-    /**
-     * @covers \PhpParser\NodeVisitor\NameResolver
-     */
-    public function testResolveNames() {
-        $code = <<<'EOC'
-<?php
-
-namespace Foo {
-    use Hallo as Hi;
-
-    new Bar();
-    new Hi();
-    new Hi\Bar();
-    new \Bar();
-    new namespace\Bar();
-
-    bar();
-    hi();
-    Hi\bar();
-    foo\bar();
-    \bar();
-    namespace\bar();
-}
-namespace {
-    use Hallo as Hi;
-
-    new Bar();
-    new Hi();
-    new Hi\Bar();
-    new \Bar();
-    new namespace\Bar();
-
-    bar();
-    hi();
-    Hi\bar();
-    foo\bar();
-    \bar();
-    namespace\bar();
-}
-namespace Bar {
-    use function foo\bar as baz;
-    use const foo\BAR as BAZ;
-    use foo as bar;
-
-    bar();
-    baz();
-    bar\foo();
-    baz\foo();
-    BAR();
-    BAZ();
-    BAR\FOO();
-    BAZ\FOO();
-
-    bar;
-    baz;
-    bar\foo;
-    baz\foo;
-    BAR;
-    BAZ;
-    BAR\FOO;
-    BAZ\FOO;
-}
-namespace Baz {
-    use A\T\{B\C, D\E};
-    use function X\T\{b\c, d\e};
-    use const Y\T\{B\C, D\E};
-    use Z\T\{G, function f, const K};
-
-    new C;
-    new E;
-    new C\D;
-    new E\F;
-    new G;
-
-    c();
-    e();
-    f();
-    C;
-    E;
-    K;
-
-    class ClassWithTypeProperties
-    {
-        public float $php = 7.4;
-        public ?Foo $person;
-        protected static ?bool $probability;
-    }
-}
-EOC;
-        $expectedCode = <<<'EOC'
-namespace Foo {
-    use Hallo as Hi;
-    new \Foo\Bar();
-    new \Hallo();
-    new \Hallo\Bar();
-    new \Bar();
-    new \Foo\Bar();
-    bar();
-    hi();
-    \Hallo\bar();
-    \Foo\foo\bar();
-    \bar();
-    \Foo\bar();
-}
-namespace {
-    use Hallo as Hi;
-    new \Bar();
-    new \Hallo();
-    new \Hallo\Bar();
-    new \Bar();
-    new \Bar();
-    \bar();
-    \hi();
-    \Hallo\bar();
-    \foo\bar();
-    \bar();
-    \bar();
-}
-namespace Bar {
-    use function foo\bar as baz;
-    use const foo\BAR as BAZ;
-    use foo as bar;
-    bar();
-    \foo\bar();
-    \foo\foo();
-    \Bar\baz\foo();
-    BAR();
-    \foo\bar();
-    \foo\FOO();
-    \Bar\BAZ\FOO();
-    bar;
-    baz;
-    \foo\foo;
-    \Bar\baz\foo;
-    BAR;
-    \foo\BAR;
-    \foo\FOO;
-    \Bar\BAZ\FOO;
-}
-namespace Baz {
-    use A\T\{B\C, D\E};
-    use function X\T\{b\c, d\e};
-    use const Y\T\{B\C, D\E};
-    use Z\T\{G, function f, const K};
-    new \A\T\B\C();
-    new \A\T\D\E();
-    new \A\T\B\C\D();
-    new \A\T\D\E\F();
-    new \Z\T\G();
-    \X\T\b\c();
-    \X\T\d\e();
-    \Z\T\f();
-    \Y\T\B\C;
-    \Y\T\D\E;
-    \Z\T\K;
-    class ClassWithTypeProperties
-    {
-        public float $php = 7.4;
-        public ?\Baz\Foo $person;
-        protected static ?bool $probability;
-    }
-}
-EOC;
-
-        $parser        = new PhpParser\Parser\Php7(new PhpParser\Lexer\Emulative);
-        $prettyPrinter = new PhpParser\PrettyPrinter\Standard;
-        $traverser     = new PhpParser\NodeTraverser;
-        $traverser->addVisitor(new NameResolver);
-
-        $stmts = $parser->parse($code);
-        $stmts = $traverser->traverse($stmts);
-
-        $this->assertSame(
-            $this->canonicalize($expectedCode),
-            $prettyPrinter->prettyPrint($stmts)
-        );
-    }
-
-    /**
-     * @covers \PhpParser\NodeVisitor\NameResolver
-     */
-    public function testResolveLocations() {
-        $code = <<<'EOC'
-<?php
-namespace NS;
-
-class A extends B implements C, D {
-    use E, F, G {
-        f as private g;
-        E::h as i;
-        E::j insteadof F, G;
-    }
-}
-
-interface A extends C, D {
-    public function a(A $a) : A;
-}
-
-function f(A $a) : A {}
-function f2(array $a) : array {}
-function(A $a) : A {};
-
-function fn3(?A $a) : ?A {}
-function fn4(?array $a) : ?array {}
-
-A::b();
-A::$b;
-A::B;
-new A;
-$a instanceof A;
-
-namespace\a();
-namespace\A;
-
-try {
-    $someThing;
-} catch (A $a) {
-    $someThingElse;
-}
-EOC;
-        $expectedCode = <<<'EOC'
-namespace NS;
-
-class A extends \NS\B implements \NS\C, \NS\D
-{
-    use \NS\E, \NS\F, \NS\G {
-        f as private g;
-        \NS\E::h as i;
-        \NS\E::j insteadof \NS\F, \NS\G;
-    }
-}
-interface A extends \NS\C, \NS\D
-{
-    public function a(\NS\A $a) : \NS\A;
-}
-function f(\NS\A $a) : \NS\A
-{
-}
-function f2(array $a) : array
-{
-}
-function (\NS\A $a) : \NS\A {
-};
-function fn3(?\NS\A $a) : ?\NS\A
-{
-}
-function fn4(?array $a) : ?array
-{
-}
-\NS\A::b();
-\NS\A::$b;
-\NS\A::B;
-new \NS\A();
-$a instanceof \NS\A;
-\NS\a();
-\NS\A;
-try {
-    $someThing;
-} catch (\NS\A $a) {
-    $someThingElse;
-}
-EOC;
-
-        $parser        = new PhpParser\Parser\Php7(new PhpParser\Lexer\Emulative);
-        $prettyPrinter = new PhpParser\PrettyPrinter\Standard;
-        $traverser     = new PhpParser\NodeTraverser;
-        $traverser->addVisitor(new NameResolver);
-
-        $stmts = $parser->parse($code);
-        $stmts = $traverser->traverse($stmts);
-
-        $this->assertSame(
-            $this->canonicalize($expectedCode),
-            $prettyPrinter->prettyPrint($stmts)
-        );
-    }
-
-    public function testNoResolveSpecialName() {
-        $stmts = [new Node\Expr\New_(new Name('self'))];
-
-        $traverser = new PhpParser\NodeTraverser;
-        $traverser->addVisitor(new NameResolver);
-
-        $this->assertEquals($stmts, $traverser->traverse($stmts));
-    }
-
-    public function testAddDeclarationNamespacedName() {
-        $nsStmts = [
-            new Stmt\Class_('A'),
-            new Stmt\Interface_('B'),
-            new Stmt\Function_('C'),
-            new Stmt\Const_([
-                new Node\Const_('D', new Node\Scalar\LNumber(42))
-            ]),
-            new Stmt\Trait_('E'),
-            new Expr\New_(new Stmt\Class_(null)),
-        ];
-
-        $traverser = new PhpParser\NodeTraverser;
-        $traverser->addVisitor(new NameResolver);
-
-        $stmts = $traverser->traverse([new Stmt\Namespace_(new Name('NS'), $nsStmts)]);
-        $this->assertSame('NS\\A', (string) $stmts[0]->stmts[0]->namespacedName);
-        $this->assertSame('NS\\B', (string) $stmts[0]->stmts[1]->namespacedName);
-        $this->assertSame('NS\\C', (string) $stmts[0]->stmts[2]->namespacedName);
-        $this->assertSame('NS\\D', (string) $stmts[0]->stmts[3]->consts[0]->namespacedName);
-        $this->assertSame('NS\\E', (string) $stmts[0]->stmts[4]->namespacedName);
-        $this->assertObjectNotHasAttribute('namespacedName', $stmts[0]->stmts[5]->class);
-
-        $stmts = $traverser->traverse([new Stmt\Namespace_(null, $nsStmts)]);
-        $this->assertSame('A',     (string) $stmts[0]->stmts[0]->namespacedName);
-        $this->assertSame('B',     (string) $stmts[0]->stmts[1]->namespacedName);
-        $this->assertSame('C',     (string) $stmts[0]->stmts[2]->namespacedName);
-        $this->assertSame('D',     (string) $stmts[0]->stmts[3]->consts[0]->namespacedName);
-        $this->assertSame('E',     (string) $stmts[0]->stmts[4]->namespacedName);
-        $this->assertObjectNotHasAttribute('namespacedName', $stmts[0]->stmts[5]->class);
-    }
-
-    public function testAddRuntimeResolvedNamespacedName() {
-        $stmts = [
-            new Stmt\Namespace_(new Name('NS'), [
-                new Expr\FuncCall(new Name('foo')),
-                new Expr\ConstFetch(new Name('FOO')),
-            ]),
-            new Stmt\Namespace_(null, [
-                new Expr\FuncCall(new Name('foo')),
-                new Expr\ConstFetch(new Name('FOO')),
-            ]),
-        ];
-
-        $traverser = new PhpParser\NodeTraverser;
-        $traverser->addVisitor(new NameResolver);
-        $stmts = $traverser->traverse($stmts);
-
-        $this->assertSame('NS\\foo', (string) $stmts[0]->stmts[0]->name->getAttribute('namespacedName'));
-        $this->assertSame('NS\\FOO', (string) $stmts[0]->stmts[1]->name->getAttribute('namespacedName'));
-
-        $this->assertFalse($stmts[1]->stmts[0]->name->hasAttribute('namespacedName'));
-        $this->assertFalse($stmts[1]->stmts[1]->name->hasAttribute('namespacedName'));
-    }
-
-    /**
-     * @dataProvider provideTestError
-     */
-    public function testError(Node $stmt, $errorMsg) {
-        $this->expectException(\PhpParser\Error::class);
-        $this->expectExceptionMessage($errorMsg);
-
-        $traverser = new PhpParser\NodeTraverser;
-        $traverser->addVisitor(new NameResolver);
-        $traverser->traverse([$stmt]);
-    }
-
-    public function provideTestError() {
-        return [
-            [
-                new Stmt\Use_([
-                    new Stmt\UseUse(new Name('A\B'), 'B', 0, ['startLine' => 1]),
-                    new Stmt\UseUse(new Name('C\D'), 'B', 0, ['startLine' => 2]),
-                ], Stmt\Use_::TYPE_NORMAL),
-                'Cannot use C\D as B because the name is already in use on line 2'
-            ],
-            [
-                new Stmt\Use_([
-                    new Stmt\UseUse(new Name('a\b'), 'b', 0, ['startLine' => 1]),
-                    new Stmt\UseUse(new Name('c\d'), 'B', 0, ['startLine' => 2]),
-                ], Stmt\Use_::TYPE_FUNCTION),
-                'Cannot use function c\d as B because the name is already in use on line 2'
-            ],
-            [
-                new Stmt\Use_([
-                    new Stmt\UseUse(new Name('A\B'), 'B', 0, ['startLine' => 1]),
-                    new Stmt\UseUse(new Name('C\D'), 'B', 0, ['startLine' => 2]),
-                ], Stmt\Use_::TYPE_CONSTANT),
-                'Cannot use const C\D as B because the name is already in use on line 2'
-            ],
-            [
-                new Expr\New_(new Name\FullyQualified('self', ['startLine' => 3])),
-                "'\\self' is an invalid class name on line 3"
-            ],
-            [
-                new Expr\New_(new Name\Relative('self', ['startLine' => 3])),
-                "'\\self' is an invalid class name on line 3"
-            ],
-            [
-                new Expr\New_(new Name\FullyQualified('PARENT', ['startLine' => 3])),
-                "'\\PARENT' is an invalid class name on line 3"
-            ],
-            [
-                new Expr\New_(new Name\Relative('STATIC', ['startLine' => 3])),
-                "'\\STATIC' is an invalid class name on line 3"
-            ],
-        ];
-    }
-
-    public function testClassNameIsCaseInsensitive()
-    {
-        $source = <<<'EOC'
-<?php
-namespace Foo;
-use Bar\Baz;
-$test = new baz();
-EOC;
-
-        $parser = new PhpParser\Parser\Php7(new PhpParser\Lexer\Emulative);
-        $stmts = $parser->parse($source);
-
-        $traverser = new PhpParser\NodeTraverser;
-        $traverser->addVisitor(new NameResolver);
-
-        $stmts = $traverser->traverse($stmts);
-        $stmt = $stmts[0];
-
-        $assign = $stmt->stmts[1]->expr;
-        $this->assertSame(['Bar', 'Baz'], $assign->expr->class->parts);
-    }
-
-    public function testSpecialClassNamesAreCaseInsensitive() {
-        $source = <<<'EOC'
-<?php
-namespace Foo;
-
-class Bar
-{
-    public static function method()
-    {
-        SELF::method();
-        PARENT::method();
-        STATIC::method();
-    }
-}
-EOC;
-
-        $parser = new PhpParser\Parser\Php7(new PhpParser\Lexer\Emulative);
-        $stmts = $parser->parse($source);
-
-        $traverser = new PhpParser\NodeTraverser;
-        $traverser->addVisitor(new NameResolver);
-
-        $stmts = $traverser->traverse($stmts);
-        $classStmt = $stmts[0];
-        $methodStmt = $classStmt->stmts[0]->stmts[0];
-
-        $this->assertSame('SELF', (string) $methodStmt->stmts[0]->expr->class);
-        $this->assertSame('PARENT', (string) $methodStmt->stmts[1]->expr->class);
-        $this->assertSame('STATIC', (string) $methodStmt->stmts[2]->expr->class);
-    }
-
-    public function testAddOriginalNames() {
-        $traverser = new PhpParser\NodeTraverser;
-        $traverser->addVisitor(new NameResolver(null, ['preserveOriginalNames' => true]));
-
-        $n1 = new Name('Bar');
-        $n2 = new Name('bar');
-        $origStmts = [
-            new Stmt\Namespace_(new Name('Foo'), [
-                new Expr\ClassConstFetch($n1, 'FOO'),
-                new Expr\FuncCall($n2),
-            ])
-        ];
-
-        $stmts = $traverser->traverse($origStmts);
-
-        $this->assertSame($n1, $stmts[0]->stmts[0]->class->getAttribute('originalName'));
-        $this->assertSame($n2, $stmts[0]->stmts[1]->name->getAttribute('originalName'));
-    }
-
-    public function testAttributeOnlyMode() {
-        $traverser = new PhpParser\NodeTraverser;
-        $traverser->addVisitor(new NameResolver(null, ['replaceNodes' => false]));
-
-        $n1 = new Name('Bar');
-        $n2 = new Name('bar');
-        $origStmts = [
-            new Stmt\Namespace_(new Name('Foo'), [
-                new Expr\ClassConstFetch($n1, 'FOO'),
-                new Expr\FuncCall($n2),
-            ])
-        ];
-
-        $traverser->traverse($origStmts);
-
-        $this->assertEquals(
-            new Name\FullyQualified('Foo\Bar'), $n1->getAttribute('resolvedName'));
-        $this->assertFalse($n2->hasAttribute('resolvedName'));
-        $this->assertEquals(
-            new Name\FullyQualified('Foo\bar'), $n2->getAttribute('namespacedName'));
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Parser/MultipleTest.php b/vendor/nikic/php-parser/test/PhpParser/Parser/MultipleTest.php
deleted file mode 100644
index f89e7bf628..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Parser/MultipleTest.php
+++ /dev/null
@@ -1,94 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Parser;
-
-use PhpParser\Error;
-use PhpParser\Lexer;
-use PhpParser\Node\Expr;
-use PhpParser\Node\Scalar\LNumber;
-use PhpParser\Node\Stmt;
-use PhpParser\ParserTest;
-
-class MultipleTest extends ParserTest
-{
-    // This provider is for the generic parser tests, just pick an arbitrary order here
-    protected function getParser(Lexer $lexer) {
-        return new Multiple([new Php5($lexer), new Php7($lexer)]);
-    }
-
-    private function getPrefer7() {
-        $lexer = new Lexer(['usedAttributes' => []]);
-        return new Multiple([new Php7($lexer), new Php5($lexer)]);
-    }
-
-    private function getPrefer5() {
-        $lexer = new Lexer(['usedAttributes' => []]);
-        return new Multiple([new Php5($lexer), new Php7($lexer)]);
-    }
-
-    /** @dataProvider provideTestParse */
-    public function testParse($code, Multiple $parser, $expected) {
-        $this->assertEquals($expected, $parser->parse($code));
-    }
-
-    public function provideTestParse() {
-        return [
-            [
-                // PHP 7 only code
-                '<?php class Test { function function() {} }',
-                $this->getPrefer5(),
-                [
-                    new Stmt\Class_('Test', ['stmts' => [
-                        new Stmt\ClassMethod('function')
-                    ]]),
-                ]
-            ],
-            [
-                // PHP 5 only code
-                '<?php global $$a->b;',
-                $this->getPrefer7(),
-                [
-                    new Stmt\Global_([
-                        new Expr\Variable(new Expr\PropertyFetch(new Expr\Variable('a'), 'b'))
-                    ])
-                ]
-            ],
-            [
-                // Different meaning (PHP 5)
-                '<?php $$a[0];',
-                $this->getPrefer5(),
-                [
-                    new Stmt\Expression(new Expr\Variable(
-                        new Expr\ArrayDimFetch(new Expr\Variable('a'), LNumber::fromString('0'))
-                    ))
-                ]
-            ],
-            [
-                // Different meaning (PHP 7)
-                '<?php $$a[0];',
-                $this->getPrefer7(),
-                [
-                    new Stmt\Expression(new Expr\ArrayDimFetch(
-                        new Expr\Variable(new Expr\Variable('a')), LNumber::fromString('0')
-                    ))
-                ]
-            ],
-        ];
-    }
-
-    public function testThrownError() {
-        $this->expectException(Error::class);
-        $this->expectExceptionMessage('FAIL A');
-
-        $parserA = $this->getMockBuilder(\PhpParser\Parser::class)->getMock();
-        $parserA->expects($this->at(0))
-            ->method('parse')->willThrowException(new Error('FAIL A'));
-
-        $parserB = $this->getMockBuilder(\PhpParser\Parser::class)->getMock();
-        $parserB->expects($this->at(0))
-            ->method('parse')->willThrowException(new Error('FAIL B'));
-
-        $parser = new Multiple([$parserA, $parserB]);
-        $parser->parse('dummy');
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Parser/Php5Test.php b/vendor/nikic/php-parser/test/PhpParser/Parser/Php5Test.php
deleted file mode 100644
index 4386b5129a..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Parser/Php5Test.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Parser;
-
-use PhpParser\Lexer;
-use PhpParser\ParserTest;
-
-class Php5Test extends ParserTest
-{
-    protected function getParser(Lexer $lexer) {
-        return new Php5($lexer);
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Parser/Php7Test.php b/vendor/nikic/php-parser/test/PhpParser/Parser/Php7Test.php
deleted file mode 100644
index 22a4c5190c..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Parser/Php7Test.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Parser;
-
-use PhpParser\Lexer;
-use PhpParser\ParserTest;
-
-class Php7Test extends ParserTest
-{
-    protected function getParser(Lexer $lexer) {
-        return new Php7($lexer);
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/ParserFactoryTest.php b/vendor/nikic/php-parser/test/PhpParser/ParserFactoryTest.php
deleted file mode 100644
index d50981f2a1..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/ParserFactoryTest.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-/* This test is very weak, because PHPUnit's assertEquals assertion is way too slow dealing with the
- * large objects involved here. So we just do some basic instanceof tests instead. */
-
-class ParserFactoryTest extends \PHPUnit\Framework\TestCase
-{
-    /** @dataProvider provideTestCreate */
-    public function testCreate($kind, $lexer, $expected) {
-        $this->assertInstanceOf($expected, (new ParserFactory)->create($kind, $lexer));
-    }
-
-    public function provideTestCreate() {
-        $lexer = new Lexer();
-        return [
-            [
-                ParserFactory::PREFER_PHP7, $lexer,
-                Parser\Multiple::class
-            ],
-            [
-                ParserFactory::PREFER_PHP5, null,
-                Parser\Multiple::class
-            ],
-            [
-                ParserFactory::ONLY_PHP7, null,
-                Parser\Php7::class
-            ],
-            [
-                ParserFactory::ONLY_PHP5, $lexer,
-                Parser\Php5::class
-            ]
-        ];
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/ParserTest.php b/vendor/nikic/php-parser/test/PhpParser/ParserTest.php
deleted file mode 100644
index 0f7f1b79f2..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/ParserTest.php
+++ /dev/null
@@ -1,183 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-use PhpParser\Node\Expr;
-use PhpParser\Node\Scalar;
-use PhpParser\Node\Scalar\String_;
-use PhpParser\Node\Stmt;
-
-abstract class ParserTest extends \PHPUnit\Framework\TestCase
-{
-    /** @returns Parser */
-    abstract protected function getParser(Lexer $lexer);
-
-    public function testParserThrowsSyntaxError() {
-        $this->expectException(Error::class);
-        $this->expectExceptionMessage('Syntax error, unexpected EOF on line 1');
-        $parser = $this->getParser(new Lexer());
-        $parser->parse('<?php foo');
-    }
-
-    public function testParserThrowsSpecialError() {
-        $this->expectException(Error::class);
-        $this->expectExceptionMessage('Cannot use foo as self because \'self\' is a special class name on line 1');
-        $parser = $this->getParser(new Lexer());
-        $parser->parse('<?php use foo as self;');
-    }
-
-    public function testParserThrowsLexerError() {
-        $this->expectException(Error::class);
-        $this->expectExceptionMessage('Unterminated comment on line 1');
-        $parser = $this->getParser(new Lexer());
-        $parser->parse('<?php /*');
-    }
-
-    public function testAttributeAssignment() {
-        $lexer = new Lexer([
-            'usedAttributes' => [
-                'comments', 'startLine', 'endLine',
-                'startTokenPos', 'endTokenPos',
-            ]
-        ]);
-
-        $code = <<<'EOC'
-<?php
-/** Doc comment */
-function test($a) {
-    // Line
-    // Comments
-    echo $a;
-}
-EOC;
-        $code = canonicalize($code);
-
-        $parser = $this->getParser($lexer);
-        $stmts = $parser->parse($code);
-
-        /** @var Stmt\Function_ $fn */
-        $fn = $stmts[0];
-        $this->assertInstanceOf(Stmt\Function_::class, $fn);
-        $this->assertEquals([
-            'comments' => [
-                new Comment\Doc('/** Doc comment */', 2, 6, 1),
-            ],
-            'startLine' => 3,
-            'endLine' => 7,
-            'startTokenPos' => 3,
-            'endTokenPos' => 21,
-        ], $fn->getAttributes());
-
-        $param = $fn->params[0];
-        $this->assertInstanceOf(Node\Param::class, $param);
-        $this->assertEquals([
-            'startLine' => 3,
-            'endLine' => 3,
-            'startTokenPos' => 7,
-            'endTokenPos' => 7,
-        ], $param->getAttributes());
-
-        /** @var Stmt\Echo_ $echo */
-        $echo = $fn->stmts[0];
-        $this->assertInstanceOf(Stmt\Echo_::class, $echo);
-        $this->assertEquals([
-            'comments' => [
-                new Comment("// Line\n", 4, 49, 12),
-                new Comment("// Comments\n", 5, 61, 14),
-            ],
-            'startLine' => 6,
-            'endLine' => 6,
-            'startTokenPos' => 16,
-            'endTokenPos' => 19,
-        ], $echo->getAttributes());
-
-        /** @var \PhpParser\Node\Expr\Variable $var */
-        $var = $echo->exprs[0];
-        $this->assertInstanceOf(Expr\Variable::class, $var);
-        $this->assertEquals([
-            'startLine' => 6,
-            'endLine' => 6,
-            'startTokenPos' => 18,
-            'endTokenPos' => 18,
-        ], $var->getAttributes());
-    }
-
-    public function testInvalidToken() {
-        $this->expectException(\RangeException::class);
-        $this->expectExceptionMessage('The lexer returned an invalid token (id=999, value=foobar)');
-        $lexer = new InvalidTokenLexer;
-        $parser = $this->getParser($lexer);
-        $parser->parse('dummy');
-    }
-
-    /**
-     * @dataProvider provideTestExtraAttributes
-     */
-    public function testExtraAttributes($code, $expectedAttributes) {
-        $parser = $this->getParser(new Lexer\Emulative);
-        $stmts = $parser->parse("<?php $code;");
-        $node = $stmts[0] instanceof Stmt\Expression ? $stmts[0]->expr : $stmts[0];
-        $attributes = $node->getAttributes();
-        foreach ($expectedAttributes as $name => $value) {
-            $this->assertSame($value, $attributes[$name]);
-        }
-    }
-
-    public function provideTestExtraAttributes() {
-        return [
-            ['0', ['kind' => Scalar\LNumber::KIND_DEC]],
-            ['9', ['kind' => Scalar\LNumber::KIND_DEC]],
-            ['07', ['kind' => Scalar\LNumber::KIND_OCT]],
-            ['0xf', ['kind' => Scalar\LNumber::KIND_HEX]],
-            ['0XF', ['kind' => Scalar\LNumber::KIND_HEX]],
-            ['0b1', ['kind' => Scalar\LNumber::KIND_BIN]],
-            ['0B1', ['kind' => Scalar\LNumber::KIND_BIN]],
-            ['[]', ['kind' => Expr\Array_::KIND_SHORT]],
-            ['array()', ['kind' => Expr\Array_::KIND_LONG]],
-            ["'foo'", ['kind' => String_::KIND_SINGLE_QUOTED]],
-            ["b'foo'", ['kind' => String_::KIND_SINGLE_QUOTED]],
-            ["B'foo'", ['kind' => String_::KIND_SINGLE_QUOTED]],
-            ['"foo"', ['kind' => String_::KIND_DOUBLE_QUOTED]],
-            ['b"foo"', ['kind' => String_::KIND_DOUBLE_QUOTED]],
-            ['B"foo"', ['kind' => String_::KIND_DOUBLE_QUOTED]],
-            ['"foo$bar"', ['kind' => String_::KIND_DOUBLE_QUOTED]],
-            ['b"foo$bar"', ['kind' => String_::KIND_DOUBLE_QUOTED]],
-            ['B"foo$bar"', ['kind' => String_::KIND_DOUBLE_QUOTED]],
-            ["<<<'STR'\nSTR\n", ['kind' => String_::KIND_NOWDOC, 'docLabel' => 'STR', 'docIndentation' => '']],
-            ["<<<STR\nSTR\n", ['kind' => String_::KIND_HEREDOC, 'docLabel' => 'STR', 'docIndentation' => '']],
-            ["<<<\"STR\"\nSTR\n", ['kind' => String_::KIND_HEREDOC, 'docLabel' => 'STR', 'docIndentation' => '']],
-            ["b<<<'STR'\nSTR\n", ['kind' => String_::KIND_NOWDOC, 'docLabel' => 'STR', 'docIndentation' => '']],
-            ["B<<<'STR'\nSTR\n", ['kind' => String_::KIND_NOWDOC, 'docLabel' => 'STR', 'docIndentation' => '']],
-            ["<<< \t 'STR'\nSTR\n", ['kind' => String_::KIND_NOWDOC, 'docLabel' => 'STR', 'docIndentation' => '']],
-            ["<<<'\xff'\n\xff\n", ['kind' => String_::KIND_NOWDOC, 'docLabel' => "\xff", 'docIndentation' => '']],
-            ["<<<\"STR\"\n\$a\nSTR\n", ['kind' => String_::KIND_HEREDOC, 'docLabel' => 'STR', 'docIndentation' => '']],
-            ["b<<<\"STR\"\n\$a\nSTR\n", ['kind' => String_::KIND_HEREDOC, 'docLabel' => 'STR', 'docIndentation' => '']],
-            ["B<<<\"STR\"\n\$a\nSTR\n", ['kind' => String_::KIND_HEREDOC, 'docLabel' => 'STR', 'docIndentation' => '']],
-            ["<<< \t \"STR\"\n\$a\nSTR\n", ['kind' => String_::KIND_HEREDOC, 'docLabel' => 'STR', 'docIndentation' => '']],
-            ["<<<STR\n    STR\n", ['kind' => String_::KIND_HEREDOC, 'docLabel' => 'STR', 'docIndentation' => '    ']],
-            ["<<<STR\n\tSTR\n", ['kind' => String_::KIND_HEREDOC, 'docLabel' => 'STR', 'docIndentation' => "\t"]],
-            ["<<<'STR'\n    Foo\n  STR\n", ['kind' => String_::KIND_NOWDOC, 'docLabel' => 'STR', 'docIndentation' => '  ']],
-            ["die", ['kind' => Expr\Exit_::KIND_DIE]],
-            ["die('done')", ['kind' => Expr\Exit_::KIND_DIE]],
-            ["exit", ['kind' => Expr\Exit_::KIND_EXIT]],
-            ["exit(1)", ['kind' => Expr\Exit_::KIND_EXIT]],
-            ["?>Foo", ['hasLeadingNewline' => false]],
-            ["?>\nFoo", ['hasLeadingNewline' => true]],
-            ["namespace Foo;", ['kind' => Stmt\Namespace_::KIND_SEMICOLON]],
-            ["namespace Foo {}", ['kind' => Stmt\Namespace_::KIND_BRACED]],
-            ["namespace {}", ['kind' => Stmt\Namespace_::KIND_BRACED]],
-            ["(float) 5.0", ['kind' => Expr\Cast\Double::KIND_FLOAT]],
-            ["(double) 5.0", ['kind' => Expr\Cast\Double::KIND_DOUBLE]],
-            ["(real) 5.0", ['kind' => Expr\Cast\Double::KIND_REAL]],
-            [" (  REAL )  5.0", ['kind' => Expr\Cast\Double::KIND_REAL]],
-        ];
-    }
-}
-
-class InvalidTokenLexer extends Lexer
-{
-    public function getNextToken(&$value = null, &$startAttributes = null, &$endAttributes = null) : int {
-        $value = 'foobar';
-        return 999;
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/PrettyPrinterTest.php b/vendor/nikic/php-parser/test/PhpParser/PrettyPrinterTest.php
deleted file mode 100644
index e5b8a1aeae..0000000000
--- a/vendor/nikic/php-parser/test/PhpParser/PrettyPrinterTest.php
+++ /dev/null
@@ -1,307 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-use PhpParser\Node\Expr;
-use PhpParser\Node\Name;
-use PhpParser\Node\Scalar\DNumber;
-use PhpParser\Node\Scalar\Encapsed;
-use PhpParser\Node\Scalar\EncapsedStringPart;
-use PhpParser\Node\Scalar\LNumber;
-use PhpParser\Node\Scalar\String_;
-use PhpParser\Node\Stmt;
-use PhpParser\PrettyPrinter\Standard;
-
-class PrettyPrinterTest extends CodeTestAbstract
-{
-    protected function doTestPrettyPrintMethod($method, $name, $code, $expected, $modeLine) {
-        $lexer = new Lexer\Emulative;
-        $parser5 = new Parser\Php5($lexer);
-        $parser7 = new Parser\Php7($lexer);
-
-        list($version, $options) = $this->parseModeLine($modeLine);
-        $prettyPrinter = new Standard($options);
-
-        try {
-            $output5 = canonicalize($prettyPrinter->$method($parser5->parse($code)));
-        } catch (Error $e) {
-            $output5 = null;
-            if ('php7' !== $version) {
-                throw $e;
-            }
-        }
-
-        try {
-            $output7 = canonicalize($prettyPrinter->$method($parser7->parse($code)));
-        } catch (Error $e) {
-            $output7 = null;
-            if ('php5' !== $version) {
-                throw $e;
-            }
-        }
-
-        if ('php5' === $version) {
-            $this->assertSame($expected, $output5, $name);
-            $this->assertNotSame($expected, $output7, $name);
-        } elseif ('php7' === $version) {
-            $this->assertSame($expected, $output7, $name);
-            $this->assertNotSame($expected, $output5, $name);
-        } else {
-            $this->assertSame($expected, $output5, $name);
-            $this->assertSame($expected, $output7, $name);
-        }
-    }
-
-    /**
-     * @dataProvider provideTestPrettyPrint
-     * @covers \PhpParser\PrettyPrinter\Standard<extended>
-     */
-    public function testPrettyPrint($name, $code, $expected, $mode) {
-        $this->doTestPrettyPrintMethod('prettyPrint', $name, $code, $expected, $mode);
-    }
-
-    /**
-     * @dataProvider provideTestPrettyPrintFile
-     * @covers \PhpParser\PrettyPrinter\Standard<extended>
-     */
-    public function testPrettyPrintFile($name, $code, $expected, $mode) {
-        $this->doTestPrettyPrintMethod('prettyPrintFile', $name, $code, $expected, $mode);
-    }
-
-    public function provideTestPrettyPrint() {
-        return $this->getTests(__DIR__ . '/../code/prettyPrinter', 'test');
-    }
-
-    public function provideTestPrettyPrintFile() {
-        return $this->getTests(__DIR__ . '/../code/prettyPrinter', 'file-test');
-    }
-
-    public function testPrettyPrintExpr() {
-        $prettyPrinter = new Standard;
-        $expr = new Expr\BinaryOp\Mul(
-            new Expr\BinaryOp\Plus(new Expr\Variable('a'), new Expr\Variable('b')),
-            new Expr\Variable('c')
-        );
-        $this->assertEquals('($a + $b) * $c', $prettyPrinter->prettyPrintExpr($expr));
-
-        $expr = new Expr\Closure([
-            'stmts' => [new Stmt\Return_(new String_("a\nb"))]
-        ]);
-        $this->assertEquals("function () {\n    return 'a\nb';\n}", $prettyPrinter->prettyPrintExpr($expr));
-    }
-
-    public function testCommentBeforeInlineHTML() {
-        $prettyPrinter = new PrettyPrinter\Standard;
-        $comment = new Comment\Doc("/**\n * This is a comment\n */");
-        $stmts = [new Stmt\InlineHTML('Hello World!', ['comments' => [$comment]])];
-        $expected = "<?php\n\n/**\n * This is a comment\n */\n?>\nHello World!";
-        $this->assertSame($expected, $prettyPrinter->prettyPrintFile($stmts));
-    }
-
-    private function parseModeLine($modeLine) {
-        $parts = explode(' ', (string) $modeLine, 2);
-        $version = $parts[0] ?? 'both';
-        $options = isset($parts[1]) ? json_decode($parts[1], true) : [];
-        return [$version, $options];
-    }
-
-    public function testArraySyntaxDefault() {
-        $prettyPrinter = new Standard(['shortArraySyntax' => true]);
-        $expr = new Expr\Array_([
-            new Expr\ArrayItem(new String_('val'), new String_('key'))
-        ]);
-        $expected = "['key' => 'val']";
-        $this->assertSame($expected, $prettyPrinter->prettyPrintExpr($expr));
-    }
-
-    /**
-     * @dataProvider provideTestKindAttributes
-     */
-    public function testKindAttributes($node, $expected) {
-        $prttyPrinter = new PrettyPrinter\Standard;
-        $result = $prttyPrinter->prettyPrintExpr($node);
-        $this->assertSame($expected, $result);
-    }
-
-    public function provideTestKindAttributes() {
-        $nowdoc = ['kind' => String_::KIND_NOWDOC, 'docLabel' => 'STR'];
-        $heredoc = ['kind' => String_::KIND_HEREDOC, 'docLabel' => 'STR'];
-        return [
-            // Defaults to single quoted
-            [new String_('foo'), "'foo'"],
-            // Explicit single/double quoted
-            [new String_('foo', ['kind' => String_::KIND_SINGLE_QUOTED]), "'foo'"],
-            [new String_('foo', ['kind' => String_::KIND_DOUBLE_QUOTED]), '"foo"'],
-            // Fallback from doc string if no label
-            [new String_('foo', ['kind' => String_::KIND_NOWDOC]), "'foo'"],
-            [new String_('foo', ['kind' => String_::KIND_HEREDOC]), '"foo"'],
-            // Fallback if string contains label
-            [new String_("A\nB\nC", ['kind' => String_::KIND_NOWDOC, 'docLabel' => 'A']), "'A\nB\nC'"],
-            [new String_("A\nB\nC", ['kind' => String_::KIND_NOWDOC, 'docLabel' => 'B']), "'A\nB\nC'"],
-            [new String_("A\nB\nC", ['kind' => String_::KIND_NOWDOC, 'docLabel' => 'C']), "'A\nB\nC'"],
-            [new String_("STR;", ['kind' => String_::KIND_NOWDOC, 'docLabel' => 'STR']), "'STR;'"],
-            // Doc string if label not contained (or not in ending position)
-            [new String_("foo", $nowdoc), "<<<'STR'\nfoo\nSTR\n"],
-            [new String_("foo", $heredoc), "<<<STR\nfoo\nSTR\n"],
-            [new String_("STRx", $nowdoc), "<<<'STR'\nSTRx\nSTR\n"],
-            [new String_("xSTR", $nowdoc), "<<<'STR'\nxSTR\nSTR\n"],
-            // Empty doc string variations (encapsed variant does not occur naturally)
-            [new String_("", $nowdoc), "<<<'STR'\nSTR\n"],
-            [new String_("", $heredoc), "<<<STR\nSTR\n"],
-            [new Encapsed([new EncapsedStringPart('')], $heredoc), "<<<STR\nSTR\n"],
-            // Encapsed doc string variations
-            [new Encapsed([new EncapsedStringPart('foo')], $heredoc), "<<<STR\nfoo\nSTR\n"],
-            [new Encapsed([new EncapsedStringPart('foo'), new Expr\Variable('y')], $heredoc), "<<<STR\nfoo{\$y}\nSTR\n"],
-            [new Encapsed([new EncapsedStringPart("\nSTR"), new Expr\Variable('y')], $heredoc), "<<<STR\n\nSTR{\$y}\nSTR\n"],
-            [new Encapsed([new EncapsedStringPart("\nSTR"), new Expr\Variable('y')], $heredoc), "<<<STR\n\nSTR{\$y}\nSTR\n"],
-            [new Encapsed([new Expr\Variable('y'), new EncapsedStringPart("STR\n")], $heredoc), "<<<STR\n{\$y}STR\n\nSTR\n"],
-            // Encapsed doc string fallback
-            [new Encapsed([new Expr\Variable('y'), new EncapsedStringPart("\nSTR")], $heredoc), '"{$y}\\nSTR"'],
-            [new Encapsed([new EncapsedStringPart("STR\n"), new Expr\Variable('y')], $heredoc), '"STR\\n{$y}"'],
-            [new Encapsed([new EncapsedStringPart("STR")], $heredoc), '"STR"'],
-        ];
-    }
-
-    /** @dataProvider provideTestUnnaturalLiterals */
-    public function testUnnaturalLiterals($node, $expected) {
-        $prttyPrinter = new PrettyPrinter\Standard;
-        $result = $prttyPrinter->prettyPrintExpr($node);
-        $this->assertSame($expected, $result);
-    }
-
-    public function provideTestUnnaturalLiterals() {
-        return [
-            [new LNumber(-1), '-1'],
-            [new LNumber(-PHP_INT_MAX - 1), '(-' . PHP_INT_MAX . '-1)'],
-            [new LNumber(-1, ['kind' => LNumber::KIND_BIN]), '-0b1'],
-            [new LNumber(-1, ['kind' => LNumber::KIND_OCT]), '-01'],
-            [new LNumber(-1, ['kind' => LNumber::KIND_HEX]), '-0x1'],
-            [new DNumber(\INF), '\INF'],
-            [new DNumber(-\INF), '-\INF'],
-            [new DNumber(-\NAN), '\NAN'],
-        ];
-    }
-
-    public function testPrettyPrintWithError() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Cannot pretty-print AST with Error nodes');
-        $stmts = [new Stmt\Expression(
-            new Expr\PropertyFetch(new Expr\Variable('a'), new Expr\Error())
-        )];
-        $prettyPrinter = new PrettyPrinter\Standard;
-        $prettyPrinter->prettyPrint($stmts);
-    }
-
-    public function testPrettyPrintWithErrorInClassConstFetch() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Cannot pretty-print AST with Error nodes');
-        $stmts = [new Stmt\Expression(
-            new Expr\ClassConstFetch(new Name('Foo'), new Expr\Error())
-        )];
-        $prettyPrinter = new PrettyPrinter\Standard;
-        $prettyPrinter->prettyPrint($stmts);
-    }
-
-    public function testPrettyPrintEncapsedStringPart() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Cannot directly print EncapsedStringPart');
-        $expr = new Node\Scalar\EncapsedStringPart('foo');
-        $prettyPrinter = new PrettyPrinter\Standard;
-        $prettyPrinter->prettyPrintExpr($expr);
-    }
-
-    /**
-     * @dataProvider provideTestFormatPreservingPrint
-     * @covers \PhpParser\PrettyPrinter\Standard<extended>
-     */
-    public function testFormatPreservingPrint($name, $code, $modification, $expected, $modeLine) {
-        $lexer = new Lexer\Emulative([
-            'usedAttributes' => [
-                'comments',
-                'startLine', 'endLine',
-                'startTokenPos', 'endTokenPos',
-            ],
-        ]);
-
-        $parser = new Parser\Php7($lexer);
-        $traverser = new NodeTraverser();
-        $traverser->addVisitor(new NodeVisitor\CloningVisitor());
-
-        $printer = new PrettyPrinter\Standard();
-
-        $oldStmts = $parser->parse($code);
-        $oldTokens = $lexer->getTokens();
-
-        $newStmts = $traverser->traverse($oldStmts);
-
-        /** @var callable $fn */
-        eval(<<<CODE
-use PhpParser\Comment;
-use PhpParser\Node;
-use PhpParser\Node\Expr;
-use PhpParser\Node\Scalar;
-use PhpParser\Node\Stmt;
-\$fn = function(&\$stmts) { $modification };
-CODE
-        );
-        $fn($newStmts);
-
-        $newCode = $printer->printFormatPreserving($newStmts, $oldStmts, $oldTokens);
-        $this->assertSame(canonicalize($expected), canonicalize($newCode), $name);
-    }
-
-    public function provideTestFormatPreservingPrint() {
-        return $this->getTests(__DIR__ . '/../code/formatPreservation', 'test', 3);
-    }
-
-    /**
-     * @dataProvider provideTestRoundTripPrint
-     * @covers \PhpParser\PrettyPrinter\Standard<extended>
-     */
-    public function testRoundTripPrint($name, $code, $expected, $modeLine) {
-        /**
-         * This test makes sure that the format-preserving pretty printer round-trips for all
-         * the pretty printer tests (i.e. returns the input if no changes occurred).
-         */
-
-        list($version) = $this->parseModeLine($modeLine);
-
-        $lexer = new Lexer\Emulative([
-            'usedAttributes' => [
-                'comments',
-                'startLine', 'endLine',
-                'startTokenPos', 'endTokenPos',
-            ],
-        ]);
-
-        $parserClass = $version === 'php5' ? Parser\Php5::class : Parser\Php7::class;
-        /** @var Parser $parser */
-        $parser = new $parserClass($lexer);
-
-        $traverser = new NodeTraverser();
-        $traverser->addVisitor(new NodeVisitor\CloningVisitor());
-
-        $printer = new PrettyPrinter\Standard();
-
-        try {
-            $oldStmts = $parser->parse($code);
-        } catch (Error $e) {
-            // Can't do a format-preserving print on a file with errors
-            return;
-        }
-
-        $oldTokens = $lexer->getTokens();
-
-        $newStmts = $traverser->traverse($oldStmts);
-
-        $newCode = $printer->printFormatPreserving($newStmts, $oldStmts, $oldTokens);
-        $this->assertSame(canonicalize($code), canonicalize($newCode), $name);
-    }
-
-    public function provideTestRoundTripPrint() {
-        return array_merge(
-            $this->getTests(__DIR__ . '/../code/prettyPrinter', 'test'),
-            $this->getTests(__DIR__ . '/../code/parser', 'test')
-        );
-    }
-}
diff --git a/vendor/nikic/php-parser/test/bootstrap.php b/vendor/nikic/php-parser/test/bootstrap.php
deleted file mode 100644
index 0bfa9d0ad7..0000000000
--- a/vendor/nikic/php-parser/test/bootstrap.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-namespace PhpParser;
-
-require __DIR__ . '/../vendor/autoload.php';
-
-function canonicalize($str) {
-    // normalize EOL style
-    $str = str_replace("\r\n", "\n", $str);
-
-    // trim newlines at end
-    $str = rtrim($str, "\n");
-
-    // remove trailing whitespace on all lines
-    $lines = explode("\n", $str);
-    $lines = array_map(function($line) {
-        return rtrim($line, " \t");
-    }, $lines);
-    return implode("\n", $lines);
-}
-
-function filesInDir($directory, $fileExtension) {
-    $directory = realpath($directory);
-    $it = new \RecursiveDirectoryIterator($directory);
-    $it = new \RecursiveIteratorIterator($it, \RecursiveIteratorIterator::LEAVES_ONLY);
-    $it = new \RegexIterator($it, '(\.' . preg_quote($fileExtension) . '$)');
-    foreach ($it as $file) {
-        $fileName = $file->getPathname();
-        yield $fileName => file_get_contents($fileName);
-    }
-}
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/addingPropertyType.test b/vendor/nikic/php-parser/test/code/formatPreservation/addingPropertyType.test
deleted file mode 100644
index 2ef332b27e..0000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/addingPropertyType.test
+++ /dev/null
@@ -1,39 +0,0 @@
-Adding property type
------
-<?php
-
-class A
-{
-
-    public $a
-    = 1;
-}
------
-$stmts[0]->stmts[0]->type = new Node\Identifier('string');
------
-<?php
-
-class A
-{
-
-    public string $a
-    = 1;
-}
------
-<?php
-
-class A
-{
-    public
-        $b;
-}
------
-$stmts[0]->stmts[0]->type = new Node\Identifier('int');
------
-<?php
-
-class A
-{
-    public
-        int $b;
-}
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/anonClasses.test b/vendor/nikic/php-parser/test/code/formatPreservation/anonClasses.test
deleted file mode 100644
index b7896f22fb..0000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/anonClasses.test
+++ /dev/null
@@ -1,28 +0,0 @@
-Anonymous classes
------
-<?php
-new class
-($x)
-  extends X
-{ };
------
-$new = $stmts[0]->expr;
-$new->class->extends = null;
-$new->args[] = new Expr\Variable('y');
------
-<?php
-new class
-($x, $y)
-{ };
------
-<?php
-new class
-{};
------
-// Ignore name assigned to anon class
-$new = $stmts[0]->expr;
-$new->class->name = new Node\Identifier('Anon1');
------
-<?php
-new class
-{};
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/array_spread.test b/vendor/nikic/php-parser/test/code/formatPreservation/array_spread.test
deleted file mode 100644
index ce83e1651a..0000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/array_spread.test
+++ /dev/null
@@ -1,29 +0,0 @@
-Array spread
------
-<?php
-$items = [
-...$value
-];
------
-$array = $stmts[0]->expr->expr;
-$array->items[] = new Expr\ArrayItem(new Expr\Variable('b'));
------
-<?php
-$items = [
-...$value, $b
-];
------
-<?php
-$items =
-[
-... $value
-];
------
-$array = $stmts[0]->expr->expr;
-$array->items[] = new Expr\ArrayItem(new Expr\Variable('c'), null, false, [], true);
------
-<?php
-$items =
-[
-... $value, ...$c
-];
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/arrow_function.test b/vendor/nikic/php-parser/test/code/formatPreservation/arrow_function.test
deleted file mode 100644
index eeff36f7bb..0000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/arrow_function.test
+++ /dev/null
@@ -1,97 +0,0 @@
-Arrow function
------
-<?php
-fn($a)
-=>
-$a;
------
-$stmts[0]->expr->expr = new Expr\Variable('b');
------
-<?php
-fn($a)
-=>
-$b;
------
-<?php
-fn(
-$a
-) => $a;
------
-$stmts[0]->expr->params[] = new Node\Param(new Expr\Variable('b'));
------
-<?php
-fn(
-$a, $b
-) => $a;
------
-<?php
-fn(
-$a
-)
-=>
-$a;
------
-// TODO: Format preserving currently not supported
-$stmts[0]->expr->params = [];
------
-<?php
-fn() => $a;
------
-<?php
-fn($a)
-: int
-=> $a;
------
-$stmts[0]->expr->returnType = new Node\Identifier('bool');
------
-<?php
-fn($a)
-: bool
-=> $a;
------
-<?php
-fn($a)
-: int
-=> $a;
------
-$stmts[0]->expr->returnType = null;
------
-<?php
-fn($a)
-=> $a;
------
-<?php
-fn($a)
-: int
-=> $a;
-
-static fn($a)
-: int
-=> $a;
------
-// TODO: Format preserving currently not supported
-$stmts[0]->expr->static = true;
-$stmts[1]->expr->static = false;
------
-<?php
-static fn($a): int => $a;
-
-fn($a): int => $a;
------
-<?php
-fn($a)
-: int
-=> $a;
-
-fn&($a)
-: int
-=> $a;
------
-// TODO: Format preserving currently not supported
-$stmts[0]->expr->byRef = true;
-$stmts[1]->expr->byRef = false;
------
-<?php
-fn&($a): int => $a;
-
-fn($a): int => $a;
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/basic.test b/vendor/nikic/php-parser/test/code/formatPreservation/basic.test
deleted file mode 100644
index 48db7803cb..0000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/basic.test
+++ /dev/null
@@ -1,190 +0,0 @@
-abc1
------
-<?php
-echo
-    1
-        +
-            2
-                +
-                    3;
------
-$stmts[0]->exprs[0]->left->right->value = 42;
------
-<?php
-echo
-    1
-        +
-            42
-                +
-                    3;
------
-<?php
-function foo($a)
-    { return $a; }
------
-$stmts[0]->name = new Node\Identifier('bar');
------
-<?php
-function bar($a)
-    { return $a; }
------
-<?php
-function
-foo() {
-    call(
-        $bar
-    );
-}
------
-// This triggers a fallback
-$stmts[0]->byRef = true;
------
-<?php
-function &foo()
-{
-    call(
-        $bar
-    );
-}
------
-<?php
-function
-foo() {
-echo "Start
-End";
-}
------
-// This triggers a fallback
-$stmts[0]->byRef = true;
------
-<?php
-function &foo()
-{
-    echo "Start
-End";
-}
------
-<?php
-function test() {
-    call1(
-        $bar
-    );
-}
-call2(
-    $foo
-);
------
-$tmp = $stmts[0]->stmts[0];
-$stmts[0]->stmts[0] = $stmts[1];
-$stmts[1] = $tmp;
------
-<?php
-function test() {
-    call2(
-        $foo
-    );
-}
-call1(
-    $bar
-);
------
-<?php
-x;
-function test() {
-    call1(
-        $bar
-    );
-}
-call2(
-    $foo
-);
------
-$tmp = $stmts[1]->stmts[0];
-$stmts[1]->stmts[0] = $stmts[2];
-$stmts[2] = $tmp;
-// Same test, but also removing first statement, triggering fallback
-array_splice($stmts, 0, 1, []);
------
-<?php
-
-function test() {
-    call2(
-        $foo
-    );
-}
-call1(
-    $bar
-);
------
-<?php
-    echo 1;
------
-$stmts[0] = new Stmt\Expression(
-    new Expr\Assign(new Expr\Variable('a'), new Expr\Variable('b')));
------
-<?php
-    $a = $b;
------
-<?php
-echo$a;
------
-$stmts[0]->exprs[0] = new Expr\ConstFetch(new Node\Name('C'));
------
-<?php
-echo C;
------
-<?php
-function foo() {
-    foo();
-    /*
-     * bar
-     */
-    baz();
-}
-
-{
-    $x;
-}
------
-$tmp = $stmts[0];
-$stmts[0] = $stmts[1];
-$stmts[1] = $tmp;
-/* TODO This used to do two replacement operations, but with the node list diffing this is a
- * remove, keep, add (which probably makes more sense). As such, this currently triggers a
- * fallback. */
------
-<?php
-
-$x;
-function foo() {
-    foo();
-    /*
-     * bar
-     */
-    baz();
-}
------
-<?php
-echo "${foo}bar";
-echo "${foo['baz']}bar";
------
-$stmts[0]->exprs[0]->parts[0] = new Expr\Variable('bar');
-$stmts[1]->exprs[0]->parts[0] = new Expr\Variable('bar');
------
-<?php
-echo "{$bar}bar";
-echo "{$bar}bar";
------
-<?php
-[$a
-,$b
-,
-,] = $b;
------
-/* Nothing */
------
-<?php
-[$a
-,$b
-,
-,] = $b;
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/blockConversion.test b/vendor/nikic/php-parser/test/code/formatPreservation/blockConversion.test
deleted file mode 100644
index 4c3c1e30e9..0000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/blockConversion.test
+++ /dev/null
@@ -1,29 +0,0 @@
-It may be necessary to convert a single statement into a block
------
-<?php
-
-if
-($a) $b;
------
-// TODO Avoid fallback
-$stmts[0]->stmts[] = new Stmt\Expression(new Expr\Variable('c'));
------
-<?php
-
-if ($a) {
-    $b;
-    $c;
-}
------
-<?php
-
-if
-($a) {$b;}
------
-$stmts[0]->stmts[] = new Stmt\Expression(new Expr\Variable('c'));
------
-<?php
-
-if
-($a) {$b;
-$c;}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/comments.test b/vendor/nikic/php-parser/test/code/formatPreservation/comments.test
deleted file mode 100644
index 61f21e2f56..0000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/comments.test
+++ /dev/null
@@ -1,52 +0,0 @@
-Comment changes
------
-<?php
-// Test
-foo();
------
-$stmts[0]->setAttribute('comments', []);
------
-<?php
-foo();
------
-<?php
-$foo;
-
-
-/* bar */
-$baz;
------
-$comments = $stmts[1]->getComments();
-$comments[] = new Comment("// foo");
-$stmts[1]->setAttribute('comments', $comments);
------
-<?php
-$foo;
-
-
-/* bar */
-// foo
-$baz;
------
-<?php
-class Test {
-    /**
-     * @expectedException \FooException
-     */
-    public function test() {
-        // some code
-    }
-}
------
-$method = $stmts[0]->stmts[0];
-$method->setAttribute('comments', [new Comment\Doc("/**\n *\n */")]);
------
-<?php
-class Test {
-    /**
-     *
-     */
-    public function test() {
-        // some code
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/emptyListInsertion.test b/vendor/nikic/php-parser/test/code/formatPreservation/emptyListInsertion.test
deleted file mode 100644
index ad3137bf68..0000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/emptyListInsertion.test
+++ /dev/null
@@ -1,110 +0,0 @@
-Inserting into an empty list
------
-<?php
-class
-Test {}
-
-interface
-Test {}
------
-$stmts[0]->implements[] = new Node\Name('Iface');
-$stmts[0]->implements[] = new Node\Name('Iface2');
-$stmts[1]->extends[] = new Node\Name('Iface');
-$stmts[1]->extends[] = new Node\Name('Iface2');
------
-<?php
-class
-Test implements Iface, Iface2 {}
-
-interface
-Test extends Iface, Iface2 {}
------
-<?php
-function test
-() {}
-
-class Test {
-    public function
-    test
-    () {}
-}
-
-function
-() {};
-
-fn()
-=> 42;
------
-$stmts[0]->params[] = new Node\Param(new Node\Expr\Variable('a'));
-$stmts[0]->params[] = new Node\Param(new Node\Expr\Variable('b'));
-$stmts[1]->stmts[0]->params[] = new Node\Param(new Node\Expr\Variable('a'));
-$stmts[1]->stmts[0]->params[] = new Node\Param(new Node\Expr\Variable('b'));
-$stmts[2]->expr->params[] = new Node\Param(new Node\Expr\Variable('a'));
-$stmts[2]->expr->params[] = new Node\Param(new Node\Expr\Variable('b'));
-$stmts[2]->expr->uses[] = new Node\Expr\Variable('c');
-$stmts[2]->expr->uses[] = new Node\Expr\Variable('d');
-$stmts[3]->expr->params[] = new Node\Param(new Node\Expr\Variable('a'));
-$stmts[3]->expr->params[] = new Node\Param(new Node\Expr\Variable('b'));
------
-<?php
-function test
-($a, $b) {}
-
-class Test {
-    public function
-    test
-    ($a, $b) {}
-}
-
-function
-($a, $b) use($c, $d) {};
-
-fn($a, $b)
-=> 42;
------
-<?php
-foo
-();
-
-$foo->
-bar();
-
-Foo
-::bar ();
-
-new
-Foo
-();
-
-new class
-()
-extends Foo {};
------
-$stmts[0]->expr->args[] = new Node\Expr\Variable('a');
-$stmts[0]->expr->args[] = new Node\Expr\Variable('b');
-$stmts[1]->expr->args[] = new Node\Expr\Variable('a');
-$stmts[1]->expr->args[] = new Node\Expr\Variable('b');
-$stmts[2]->expr->args[] = new Node\Expr\Variable('a');
-$stmts[2]->expr->args[] = new Node\Expr\Variable('b');
-$stmts[3]->expr->args[] = new Node\Expr\Variable('a');
-$stmts[3]->expr->args[] = new Node\Expr\Variable('b');
-$stmts[4]->expr->args[] = new Node\Expr\Variable('a');
-$stmts[4]->expr->args[] = new Node\Expr\Variable('b');
------
-<?php
-foo
-($a, $b);
-
-$foo->
-bar($a, $b);
-
-Foo
-::bar ($a, $b);
-
-new
-Foo
-($a, $b);
-
-new class
-($a, $b)
-extends Foo {};
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/fixup.test b/vendor/nikic/php-parser/test/code/formatPreservation/fixup.test
deleted file mode 100644
index e8870ae56b..0000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/fixup.test
+++ /dev/null
@@ -1,67 +0,0 @@
-Fixup for precedence and some special syntax
------
-<?php
-$a ** $b  *  $c;
-$a  +  $b * $c;
-$a * $b  +  $c;
-$a  ?  $b  :  $c;
-($a ** $b)  *  $c;
-( $a ** $b )  *  $c;
-!$a = $b;
------
-// Parens necessary
-$stmts[0]->expr->left = new Expr\BinaryOp\Plus(new Expr\Variable('a'), new Expr\Variable('b'));
-// The parens here are "correct", because add is left assoc
-$stmts[1]->expr->right = new Expr\BinaryOp\Plus(new Expr\Variable('b'), new Expr\Variable('c'));
-// No parens necessary
-$stmts[2]->expr->left = new Expr\BinaryOp\Plus(new Expr\Variable('a'), new Expr\Variable('b'));
-// Parens for RHS not strictly necessary due to assign speciality
-$stmts[3]->expr->cond = new Expr\Assign(new Expr\Variable('a'), new Expr\Variable('b'));
-$stmts[3]->expr->if = new Expr\Assign(new Expr\Variable('a'), new Expr\Variable('b'));
-$stmts[3]->expr->else = new Expr\Assign(new Expr\Variable('a'), new Expr\Variable('b'));
-// Already has parens
-$stmts[4]->expr->left = new Expr\BinaryOp\Plus(new Expr\Variable('a'), new Expr\Variable('b'));
-$stmts[5]->expr->left = new Expr\BinaryOp\Plus(new Expr\Variable('a'), new Expr\Variable('b'));
------
-<?php
-($a + $b)  *  $c;
-$a  +  ($b + $c);
-$a + $b  +  $c;
-($a = $b)  ?  $a = $b  :  ($a = $b);
-($a + $b)  *  $c;
-( $a + $b )  *  $c;
-!$a = $b;
------
-<?php
-foo ();
-foo ();
-$foo -> bar;
-$foo -> bar;
-$foo -> bar;
-$foo -> bar;
-$foo -> bar;
-self :: $foo;
-self :: $foo;
------
-$stmts[0]->expr->name = new Expr\Variable('a');
-$stmts[1]->expr->name = new Expr\BinaryOp\Concat(new Expr\Variable('a'), new Expr\Variable('b'));
-$stmts[2]->expr->var = new Expr\Variable('bar');
-$stmts[3]->expr->var = new Expr\BinaryOp\Concat(new Expr\Variable('a'), new Expr\Variable('b'));
-$stmts[4]->expr->name = new Node\Identifier('foo');
-// In this case the braces are not strictly necessary. However, on PHP 5 they may be required
-// depending on where the property fetch node itself occurs.
-$stmts[5]->expr->name = new Expr\Variable('bar');
-$stmts[6]->expr->name = new Expr\BinaryOp\Concat(new Expr\Variable('a'), new Expr\Variable('b'));
-$stmts[7]->expr->name = new Node\VarLikeIdentifier('bar');
-$stmts[8]->expr->name = new Expr\BinaryOp\Concat(new Expr\Variable('a'), new Expr\Variable('b'));
------
-<?php
-$a ();
-($a . $b) ();
-$bar -> bar;
-($a . $b) -> bar;
-$foo -> foo;
-$foo -> {$bar};
-$foo -> {$a . $b};
-self :: $bar;
-self :: ${$a . $b};
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/inlineHtml.test b/vendor/nikic/php-parser/test/code/formatPreservation/inlineHtml.test
deleted file mode 100644
index 7494e53597..0000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/inlineHtml.test
+++ /dev/null
@@ -1,54 +0,0 @@
-Handling of inline HTML
------
-<?php
-
-function test() {
-    ?>Foo<?php
-}
------
-$stmts[0]->setAttribute('origNode', null);
------
-<?php
-
-function test()
-{
-    ?>Foo<?php
-}
------
-<?php
-
-function test() {
-    foo();
-    ?>Bar<?php
-    baz();
-}
------
-// TODO Fix broken result
-$stmts[0]->stmts[2] = $stmts[0]->stmts[1];
------
-<?php
-
-function test() {
-    foo();
-    ?>Bar<?php
-    Bar
-}
------
-<?php
-
-function test() {
-    foo();
-    ?>Bar<?php
-    baz();
-}
------
-// TODO Fix broken result
-$stmts[0]->stmts[1] = $stmts[0]->stmts[2];
------
-<?php
-
-function test() {
-    foo();<?php
-    baz();
-    baz();
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/insertionOfNullable.test b/vendor/nikic/php-parser/test/code/formatPreservation/insertionOfNullable.test
deleted file mode 100644
index 79effd11c3..0000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/insertionOfNullable.test
+++ /dev/null
@@ -1,176 +0,0 @@
-Insertion of a nullable node
------
-<?php
-
-// TODO: The result spacing isn't always optimal. We may want to skip whitespace in some cases.
-
-function
-foo(
-$x,
-&$y
-)
-{}
-
-$foo
-[
-];
-
-[
-    $value
-];
-
-function
-()
-{};
-
-$x
-?
-:
-$y;
-
-yield
-$v  ;
-yield  ;
-
-break
-;
-continue
-;
-return
-;
-
-class
-X
-{
-    public
-    function y()
-    {}
-
-    private
-        $x
-    ;
-}
-
-foreach (
-    $x
-    as
-    $y
-) {}
-
-static
-$var
-;
-
-try {
-} catch (X
-$y) {
-}
-
-if ($cond) { // Foo
-} elseif ($cond2) { // Bar
-}
------
-$stmts[0]->returnType = new Node\Name('Foo');
-$stmts[0]->params[0]->type = new Node\Identifier('int');
-$stmts[0]->params[1]->type = new Node\Identifier('array');
-$stmts[0]->params[1]->default = new Expr\ConstFetch(new Node\Name('null'));
-$stmts[1]->expr->dim = new Expr\Variable('a');
-$stmts[2]->expr->items[0]->key = new Scalar\String_('X');
-$stmts[3]->expr->returnType = new Node\Name('Bar');
-$stmts[4]->expr->if = new Expr\Variable('z');
-$stmts[5]->expr->key = new Expr\Variable('k');
-$stmts[6]->expr->value = new Expr\Variable('v');
-$stmts[7]->num = new Scalar\LNumber(2);
-$stmts[8]->num = new Scalar\LNumber(2);
-$stmts[9]->expr = new Expr\Variable('x');
-$stmts[10]->extends = new Node\Name\FullyQualified('Bar');
-$stmts[10]->stmts[0]->returnType = new Node\Name('Y');
-$stmts[10]->stmts[1]->props[0]->default = new Scalar\DNumber(42.0);
-$stmts[11]->keyVar = new Expr\Variable('z');
-$stmts[12]->vars[0]->default = new Scalar\String_('abc');
-$stmts[13]->finally = new Stmt\Finally_([]);
-$stmts[14]->else = new Stmt\Else_([]);
------
-<?php
-
-// TODO: The result spacing isn't always optimal. We may want to skip whitespace in some cases.
-
-function
-foo(
-int $x,
-array &$y = null
-) : Foo
-{}
-
-$foo
-[$a
-];
-
-[
-    'X' => $value
-];
-
-function
-() : Bar
-{};
-
-$x
-? $z
-:
-$y;
-
-yield
-$k => $v  ;
-yield $v  ;
-
-break 2
-;
-continue 2
-;
-return $x
-;
-
-class
-X extends \Bar
-{
-    public
-    function y() : Y
-    {}
-
-    private
-        $x = 42.0
-    ;
-}
-
-foreach (
-    $x
-    as
-    $z => $y
-) {}
-
-static
-$var = 'abc'
-;
-
-try {
-} catch (X
-$y) {
-} finally {
-}
-
-if ($cond) { // Foo
-} elseif ($cond2) { // Bar
-} else {
-}
------
-<?php
-
-namespace
-{ echo 42; }
------
-$stmts[0]->name = new Node\Name('Foo');
------
-<?php
-
-namespace Foo
-{ echo 42; }
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/listInsertion.test b/vendor/nikic/php-parser/test/code/formatPreservation/listInsertion.test
deleted file mode 100644
index 9211958d7d..0000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/listInsertion.test
+++ /dev/null
@@ -1,309 +0,0 @@
-Insertion into list nodes
------
-<?php
-$foo;
-
-$bar;
------
-$stmts[] = new Stmt\Expression(new Expr\Variable('baz'));
------
-<?php
-$foo;
-
-$bar;
-$baz;
------
-<?php
-
-function test() {
-    $foo;
-
-    $bar;
-}
------
-$stmts[0]->stmts[] = new Stmt\Expression(new Expr\Variable('baz'));
------
-<?php
-
-function test() {
-    $foo;
-
-    $bar;
-    $baz;
-}
------
-<?php
-
-function test(Foo     $param1) {}
------
-$stmts[0]->params[] = new Node\Param(new Expr\Variable('param2'));
------
-<?php
-
-function test(Foo     $param1, $param2) {}
------
-<?php
-
-try {
-    /* stuff */
-} catch
-(Foo $x) {}
------
-$stmts[0]->catches[0]->types[] = new Node\Name('Bar');
------
-<?php
-
-try {
-    /* stuff */
-} catch
-(Foo|Bar $x) {}
------
-<?php
-
-function test(Foo     $param1) {}
------
-array_unshift($stmts[0]->params, new Node\Param(new Expr\Variable('param0')));
------
-<?php
-
-function test($param0, Foo     $param1) {}
------
-<?php
-
-function test() {}
------
-$stmts[0]->params[] = new Node\Param(new Expr\Variable('param0'));
------
-<?php
-
-function test($param0) {}
------
-<?php
-
-if ($cond) {
-} elseif ($cond2) {
-}
------
-$stmts[0]->elseifs[] = new Stmt\ElseIf_(new Expr\Variable('cond3'), []);
------
-<?php
-
-if ($cond) {
-} elseif ($cond2) {
-} elseif ($cond3) {
-}
------
-<?php
-
-try {
-} catch (Foo $foo) {
-}
------
-$stmts[0]->catches[] = new Stmt\Catch_([new Node\Name('Bar')], new Expr\Variable('bar'), []);
------
-<?php
-
-try {
-} catch (Foo $foo) {
-} catch (Bar $bar) {
-}
------
-<?php
-$foo; $bar;
------
-$node = new Stmt\Expression(new Expr\Variable('baz'));
-$node->setAttribute('comments', [new Comment('// Test')]);
-$stmts[] = $node;
------
-<?php
-$foo; $bar;
-// Test
-$baz;
------
-<?php
-function test() {
-    $foo; $bar;
-}
------
-$node = new Stmt\Expression(new Expr\Variable('baz'));
-$node->setAttribute('comments', [new Comment('// Test'), new Comment('// Test 2')]);
-$stmts[0]->stmts[] = $node;
------
-<?php
-function test() {
-    $foo; $bar;
-    // Test
-    // Test 2
-    $baz;
-}
------
-<?php
-namespace
-Foo;
------
-$stmts[0]->name->parts[0] = 'Xyz';
------
-<?php
-namespace
-Xyz;
------
-<?php
-function test() {
-    $foo; $bar;
-}
------
-$node = new Stmt\Expression(new Expr\Variable('baz'));
-array_unshift($stmts[0]->stmts, $node);
------
-<?php
-function test() {
-    $baz;
-    $foo; $bar;
-}
------
-<?php
-function test() {
-    $foo; $bar;
-}
------
-$node = new Stmt\Expression(new Expr\Variable('baz'));
-$node->setAttribute('comments', [new Comment('// Test')]);
-array_unshift($stmts[0]->stmts, $node);
------
-<?php
-function test() {
-    // Test
-    $baz;
-    $foo; $bar;
-}
------
-<?php
-function test() {
-
-    // Foo bar
-    $foo; $bar;
-}
------
-$node = new Stmt\Expression(new Expr\Variable('baz'));
-$node->setAttribute('comments', [new Comment('// Test')]);
-array_unshift($stmts[0]->stmts, $node);
------
-<?php
-function test() {
-
-    // Test
-    $baz;
-    // Foo bar
-    $foo; $bar;
-}
------
-<?php
-function test() {
-
-    // Foo bar
-    $foo; $bar;
-}
------
-$node = new Stmt\Expression(new Expr\Variable('baz'));
-$node->setAttribute('comments', [new Comment('// Test')]);
-array_unshift($stmts[0]->stmts, $node);
-$stmts[0]->stmts[1]->setAttribute('comments', [new Comment('// Bar foo')]);
------
-<?php
-function test() {
-
-    // Test
-    $baz;
-    // Bar foo
-    $foo; $bar;
-}
------
-<?php
-function test() {
-
-    // Foo bar
-    $foo; $bar;
-}
------
-$node = new Stmt\Expression(new Expr\Variable('baz'));
-$node->setAttribute('comments', [new Comment('// Test')]);
-array_unshift($stmts[0]->stmts, $node);
-$stmts[0]->stmts[1]->setAttribute('comments', []);
------
-<?php
-function test() {
-
-    // Test
-    $baz;
-    $foo; $bar;
-}
------
-<?php
-function test() {
-
-    // Foo bar
-    $foo; $bar;
-}
------
-array_unshift(
-    $stmts[0]->stmts,
-    new Stmt\Expression(new Expr\Variable('a')),
-    new Stmt\Expression(new Expr\Variable('b')));
------
-<?php
-function test() {
-
-    $a;
-    $b;
-    // Foo bar
-    $foo; $bar;
-}
------
-<?php
-function test() {}
------
-/* Insertion into empty list not handled yet */
-$stmts[0]->stmts = [
-    new Stmt\Expression(new Expr\Variable('a')),
-    new Stmt\Expression(new Expr\Variable('b')),
-];
------
-<?php
-function test()
-{
-    $a;
-    $b;
-}
------
-<?php
-$array = [
-    1,
-    2,
-    3,
-];
------
-array_unshift($stmts[0]->expr->expr->items, new Expr\ArrayItem(new Scalar\LNumber(42)));
-$stmts[0]->expr->expr->items[] = new Expr\ArrayItem(new Scalar\LNumber(24));
------
-<?php
-$array = [
-    42,
-    1,
-    2,
-    3,
-    24,
-];
------
-<?php
-$array = [
-    1, 2,
-    3,
-];
------
-$stmts[0]->expr->expr->items[] = new Expr\ArrayItem(new Scalar\LNumber(24));
------
-<?php
-$array = [
-    1, 2,
-    3, 24,
-];
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/listInsertionIndentation.test b/vendor/nikic/php-parser/test/code/formatPreservation/listInsertionIndentation.test
deleted file mode 100644
index ffcc6cfb5b..0000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/listInsertionIndentation.test
+++ /dev/null
@@ -1,17 +0,0 @@
-Check correct indentation use when inserting into list node
------
-<?php
-$this->foo = new Foo;
-$this->foo->a()
-          ->b();
------
-$outerCall = $stmts[1]->expr;
-$innerCall = $outerCall->var;
-$var = $innerCall->var;
-$stmts[1]->expr = $innerCall;
-$stmts[2] = new Stmt\Expression(new Expr\MethodCall($var, $outerCall->name));
------
-<?php
-$this->foo = new Foo;
-$this->foo->a();
-$this->foo->b();
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/listRemoval.test b/vendor/nikic/php-parser/test/code/formatPreservation/listRemoval.test
deleted file mode 100644
index 0ac423901b..0000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/listRemoval.test
+++ /dev/null
@@ -1,41 +0,0 @@
-Removing from list nodes
------
-<?php $foo; $bar; $baz;
------
-array_splice($stmts, 1, 1, []);
------
-<?php $foo; $baz;
------
-<?php
-function foo(
-    $a,
-    $b,
-    $c
-) {}
------
-array_pop($stmts[0]->params);
------
-<?php
-function foo(
-    $a,
-    $b
-) {}
------
-<?php
-function foo(
-    $a,
-    $b,
-    $c
-) {}
------
-array_pop($stmts[0]->params);
-$stmts[0]->params[] = new Node\Param(new Expr\Variable('x'));
-$stmts[0]->params[] = new Node\Param(new Expr\Variable('y'));
------
-<?php
-function foo(
-    $a,
-    $b,
-    $x,
-    $y
-) {}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/modifierChange.test b/vendor/nikic/php-parser/test/code/formatPreservation/modifierChange.test
deleted file mode 100644
index 06dba62dce..0000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/modifierChange.test
+++ /dev/null
@@ -1,33 +0,0 @@
-Modifier change
------
-<?php
-class Foo {}
-abstract class Bar {
-    const
-    FOO = 42;
-
-    var $foo
-    = 24;
-
-    public function
-    foo() {}
-}
------
-$stmts[0]->flags = Stmt\Class_::MODIFIER_ABSTRACT;
-$stmts[1]->flags = 0;
-$stmts[1]->stmts[0]->flags = Stmt\Class_::MODIFIER_PRIVATE;
-$stmts[1]->stmts[1]->flags = Stmt\Class_::MODIFIER_PROTECTED;
-$stmts[1]->stmts[2]->flags |= Stmt\Class_::MODIFIER_FINAL;
------
-<?php
-abstract class Foo {}
-class Bar {
-    private const
-    FOO = 42;
-
-    protected $foo
-    = 24;
-
-    public final function
-    foo() {}
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/nopCommentAtEnd.test b/vendor/nikic/php-parser/test/code/formatPreservation/nopCommentAtEnd.test
deleted file mode 100644
index 059b5f113b..0000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/nopCommentAtEnd.test
+++ /dev/null
@@ -1,11 +0,0 @@
-Nop statement with comment at end (#513)
------
-<?php
-$foo;
-$bar;
------
-$stmts[1] = new Stmt\Nop(['comments' => [new Comment('//Some comment here')]]);
------
-<?php
-$foo;
-//Some comment here
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/removalViaNull.test b/vendor/nikic/php-parser/test/code/formatPreservation/removalViaNull.test
deleted file mode 100644
index da6fdaa9ff..0000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/removalViaNull.test
+++ /dev/null
@@ -1,194 +0,0 @@
-Removing subnodes by setting them to null
------
-<?php
-function
-foo (
-    Bar $foo
-        = null,
-    Foo $bar) : baz
-{}
-
-function
-()
-: int
-{};
-
-class
-Foo
-extends
-Bar
-{
-    public
-    function
-    foo() : ?X {}
-
-    public
-      $prop = 'x'
-    ;
-
-    use T {
-        T
-        ::
-        x
-        as
-        public
-        y
-        ;
-    }
-}
-
-$foo [ $bar ];
-exit ( $bar );
-$foo
-? $bar :
-$baz;
-[ $a => $b
-, $c => $d];
-
-yield
-$foo
-=>
-$bar;
-yield
-$bar;
-
-break
-2
-;
-continue
-2
-;
-
-foreach(
-    $array
-as
-    $key
- =>
-    $value
-) {}
-
-if
-($x)
-{
-}
-
-else {}
-
-return
-$val
-;
-static
-  $x
-  =
-  $y
-;
-
-try {} catch
-  (X $y)
-  {}
-finally
-{}
------
-$stmts[0]->returnType = null;
-$stmts[0]->params[0]->default = null;
-$stmts[0]->params[1]->type = null;
-$stmts[1]->expr->returnType = null;
-$stmts[2]->extends = null;
-$stmts[2]->stmts[0]->returnType = null;
-$stmts[2]->stmts[1]->props[0]->default = null;
-$stmts[2]->stmts[2]->adaptations[0]->newName = null;
-$stmts[3]->expr->dim = null;
-$stmts[4]->expr->expr = null;
-$stmts[5]->expr->if = null;
-$stmts[6]->expr->items[1]->key = null;
-$stmts[7]->expr->key = null;
-$stmts[8]->expr->value = null;
-$stmts[9]->num = null;
-$stmts[10]->num = null;
-$stmts[11]->keyVar = null;
-$stmts[12]->else = null;
-$stmts[13]->expr = null;
-$stmts[14]->vars[0]->default = null;
-$stmts[15]->finally = null;
------
-<?php
-function
-foo (
-    Bar $foo,
-    $bar)
-{}
-
-function
-()
-{};
-
-class
-Foo
-{
-    public
-    function
-    foo() {}
-
-    public
-      $prop
-    ;
-
-    use T {
-        T
-        ::
-        x
-        as
-        public
-        ;
-    }
-}
-
-$foo [];
-exit ();
-$foo
-?:
-$baz;
-[ $a => $b
-, $d];
-
-yield
-$bar;
-yield;
-
-break;
-continue;
-
-foreach(
-    $array
-as
-    $value
-) {}
-
-if
-($x)
-{
-}
-
-return;
-static
-  $x
-;
-
-try {} catch
-  (X $y)
-  {}
------
-<?php
-
-namespace
-A
-    {
-    }
------
-$stmts[0]->name = null;
------
-<?php
-
-namespace
-    {
-    }
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/removingPropertyType.test b/vendor/nikic/php-parser/test/code/formatPreservation/removingPropertyType.test
deleted file mode 100644
index 37b174c10d..0000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/removingPropertyType.test
+++ /dev/null
@@ -1,22 +0,0 @@
-Removing property type
------
-<?php
-
-class B
-{
-
-    public
-    ?float
-    $b;
-}
------
-$stmts[0]->stmts[0]->type = null;
------
-<?php
-
-class B
-{
-
-    public
-    $b;
-}
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/traitAlias.test b/vendor/nikic/php-parser/test/code/formatPreservation/traitAlias.test
deleted file mode 100644
index 8774bb6f35..0000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/traitAlias.test
+++ /dev/null
@@ -1,19 +0,0 @@
-Trait alias
------
-<?php
-class X {
-    use T {
-        exit
-            as die;
-    }
-}
------
-/* do nothing */
------
-<?php
-class X {
-    use T {
-        exit
-            as die;
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/blockComments.test b/vendor/nikic/php-parser/test/code/parser/blockComments.test
deleted file mode 100644
index 8cfe166d74..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/blockComments.test
+++ /dev/null
@@ -1,36 +0,0 @@
-Comments on blocks
------
-<?php
-
-// foo
-{
-    // bar
-    {
-        // baz
-        $a;
-    }
-}
-
-// empty
-{}
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Variable(
-            name: a
-            comments: array(
-                0: // baz
-            )
-        )
-        comments: array(
-            0: // foo
-            1: // bar
-            2: // baz
-        )
-    )
-    1: Stmt_Nop(
-        comments: array(
-            0: // empty
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/commentAtEndOfClass.test b/vendor/nikic/php-parser/test/code/parser/commentAtEndOfClass.test
deleted file mode 100644
index 8096b73bd7..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/commentAtEndOfClass.test
+++ /dev/null
@@ -1,38 +0,0 @@
-Comment at end of class (#509)
------
-<?php
-class MyClass {
-    protected $a;
-    // my comment
-}
------
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: MyClass
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_Property(
-                flags: MODIFIER_PROTECTED (2)
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: a
-                        )
-                        default: null
-                    )
-                )
-            )
-            1: Stmt_Nop(
-                comments: array(
-                    0: // my comment
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/comments.test b/vendor/nikic/php-parser/test/code/parser/comments.test
deleted file mode 100644
index 90b6b1f079..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/comments.test
+++ /dev/null
@@ -1,108 +0,0 @@
-Comments
------
-<?php
-
-/** doc 1 */
-/* foobar 1 */
-// foo 1
-// bar 1
-$var;
-
-if ($cond) {
-    /** doc 2 */
-    /* foobar 2 */
-    // foo 2
-    // bar 2
-}
-
-/** doc 3 */
-/* foobar 3 */
-// foo 3
-// bar 3
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Variable(
-            name: var
-            comments: array(
-                0: /** doc 1 */
-                1: /* foobar 1 */
-                2: // foo 1
-                3: // bar 1
-            )
-        )
-        comments: array(
-            0: /** doc 1 */
-            1: /* foobar 1 */
-            2: // foo 1
-            3: // bar 1
-        )
-    )
-    1: Stmt_If(
-        cond: Expr_Variable(
-            name: cond
-        )
-        stmts: array(
-            0: Stmt_Nop(
-                comments: array(
-                    0: /** doc 2 */
-                    1: /* foobar 2 */
-                    2: // foo 2
-                    3: // bar 2
-                )
-            )
-        )
-        elseifs: array(
-        )
-        else: null
-    )
-    2: Stmt_Nop(
-        comments: array(
-            0: /** doc 3 */
-            1: /* foobar 3 */
-            2: // foo 3
-            3: // bar 3
-        )
-    )
-)
------
-<?php
-
-/** doc */
-/* foobar */
-// foo
-// bar
-
-?>
------
-array(
-    0: Stmt_Nop(
-        comments: array(
-            0: /** doc */
-            1: /* foobar */
-            2: // foo
-            3: // bar
-        )
-    )
-)
------
-<?php
-
-// comment
-if (42) {}
------
-array(
-    0: Stmt_If(
-        cond: Scalar_LNumber(
-            value: 42
-        )
-        stmts: array(
-        )
-        elseifs: array(
-        )
-        else: null
-        comments: array(
-            0: // comment
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/errorHandling/eofError.test b/vendor/nikic/php-parser/test/code/parser/errorHandling/eofError.test
deleted file mode 100644
index 012841def0..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/errorHandling/eofError.test
+++ /dev/null
@@ -1,36 +0,0 @@
-Error positions
------
-<?php foo
------
-Syntax error, unexpected EOF from 1:10 to 1:10
-array(
-    0: Stmt_Expression(
-        expr: Expr_ConstFetch(
-            name: Name(
-                parts: array(
-                    0: foo
-                )
-            )
-        )
-    )
-)
------
-<?php foo /* bar */
------
-Syntax error, unexpected EOF from 1:20 to 1:20
-array(
-    0: Stmt_Expression(
-        expr: Expr_ConstFetch(
-            name: Name(
-                parts: array(
-                    0: foo
-                )
-            )
-        )
-    )
-    1: Stmt_Nop(
-        comments: array(
-            0: /* bar */
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/errorHandling/lexerErrors.test b/vendor/nikic/php-parser/test/code/parser/errorHandling/lexerErrors.test
deleted file mode 100644
index 163b743ade..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/errorHandling/lexerErrors.test
+++ /dev/null
@@ -1,140 +0,0 @@
-Lexer errors
------
-<?php
-
-$a = 42;
-/*
-$b = 24;
------
-Unterminated comment from 4:1 to 5:9
-array(
-    0: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Scalar_LNumber(
-                value: 42
-            )
-        )
-    )
-    1: Stmt_Nop(
-        comments: array(
-            0: /*
-            $b = 24;
-        )
-    )
-)
------
-<?php
-
-$a = 42;
-@@{ "\1" }@@
-$b = 24;
------
-Unexpected character "" (ASCII 1) from 4:1 to 4:1
-array(
-    0: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Scalar_LNumber(
-                value: 42
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: b
-            )
-            expr: Scalar_LNumber(
-                value: 24
-            )
-        )
-    )
-)
------
-<?php
-
-$a = 42;
-@@{ "\0" }@@
-$b = 24;
------
-Unexpected null byte from 4:1 to 4:1
-array(
-    0: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Scalar_LNumber(
-                value: 42
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: b
-            )
-            expr: Scalar_LNumber(
-                value: 24
-            )
-        )
-    )
-)
------
-<?php
-
-$a = 1;
-@@{ "\1" }@@
-$b = 2;
-@@{ "\2" }@@
-$c = 3;
------
-Unexpected character "@@{ "\1" }@@" (ASCII 1) from 4:1 to 4:1
-Unexpected character "@@{ "\2" }@@" (ASCII 2) from 6:1 to 6:1
-array(
-    0: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Scalar_LNumber(
-                value: 1
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: b
-            )
-            expr: Scalar_LNumber(
-                value: 2
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: c
-            )
-            expr: Scalar_LNumber(
-                value: 3
-            )
-        )
-    )
-)
------
-<?php
-
-if ($b) {
-    $a = 1;
-    /* unterminated
-}
------
-Unterminated comment from 5:5 to 6:2
-Syntax error, unexpected EOF from 6:2 to 6:2
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/errorHandling/recovery.test b/vendor/nikic/php-parser/test/code/parser/errorHandling/recovery.test
deleted file mode 100644
index a9fd49d0d6..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/errorHandling/recovery.test
+++ /dev/null
@@ -1,1417 +0,0 @@
-Error recovery
------
-<?php
-
-foo()
-bar()
-baz()
------
-Syntax error, unexpected T_STRING from 4:1 to 4:3
-Syntax error, unexpected T_STRING from 5:1 to 5:3
-Syntax error, unexpected EOF from 5:6 to 5:6
-array(
-    0: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: foo
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: bar
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: baz
-                )
-            )
-            args: array(
-            )
-        )
-    )
-)
------
-<?php
-
-foo()
-bar();
-baz();
------
-Syntax error, unexpected T_STRING from 4:1 to 4:3
-array(
-    0: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: foo
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: bar
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: baz
-                )
-            )
-            args: array(
-            )
-        )
-    )
-)
------
-<?php
-
-foo();
-bar()
-baz();
------
-Syntax error, unexpected T_STRING from 5:1 to 5:3
-array(
-    0: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: foo
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: bar
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: baz
-                )
-            )
-            args: array(
-            )
-        )
-    )
-)
------
-<?php
-abc;
-1 + ;
------
-Syntax error, unexpected ';' from 3:5 to 3:5
-array(
-    0: Stmt_Expression(
-        expr: Expr_ConstFetch(
-            name: Name(
-                parts: array(
-                    0: abc
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Scalar_LNumber(
-            value: 1
-        )
-    )
-)
------
-<?php
-function test() {
-    1 +
-}
------
-Syntax error, unexpected '}' from 4:1 to 4:1
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: test
-        )
-        params: array(
-        )
-        returnType: null
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Scalar_LNumber(
-                    value: 1
-                )
-            )
-        )
-    )
-)
------
-<?php
-
-$i = 0;
-while
-
-$j = 1;
-$k = 2;
------
-Syntax error, unexpected T_VARIABLE, expecting '(' from 6:1 to 6:2
-array(
-    0: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: i
-            )
-            expr: Scalar_LNumber(
-                value: 0
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: j
-            )
-            expr: Scalar_LNumber(
-                value: 1
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: k
-            )
-            expr: Scalar_LNumber(
-                value: 2
-            )
-        )
-    )
-)
------
-<?php
-
-$i = 0;
-while () {
-    $j = 1;
-}
-$k = 2;
-// The output here drops the loop - would require Error node to handle this
------
-Syntax error, unexpected ')' from 4:8 to 4:8
-array(
-    0: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: i
-            )
-            expr: Scalar_LNumber(
-                value: 0
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: j
-            )
-            expr: Scalar_LNumber(
-                value: 1
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: k
-            )
-            expr: Scalar_LNumber(
-                value: 2
-            )
-        )
-    )
-    3: Stmt_Nop(
-        comments: array(
-            0: // The output here drops the loop - would require Error node to handle this
-        )
-    )
-)
------
-<?php
-// Can't recover this yet, as the '}' for the inner_statement_list
-// is always required.
-
-$i = 0;
-while (true) {
-    $i = 1;
-    $i = 2;
------
-Syntax error, unexpected EOF from 8:12 to 8:12
------
-<?php
-$foo->
-;
------
-!!positions
-Syntax error, unexpected ';', expecting T_STRING or T_VARIABLE or '{' or '$' from 3:1 to 3:1
-array(
-    0: Stmt_Expression[2:1 - 3:1](
-        expr: Expr_PropertyFetch[2:1 - 2:6](
-            var: Expr_Variable[2:1 - 2:4](
-                name: foo
-            )
-            name: Expr_Error[3:1 - 2:6](
-            )
-        )
-    )
-)
------
-<?php
-function foo() {
-    $bar->
-}
------
-!!positions
-Syntax error, unexpected '}', expecting T_STRING or T_VARIABLE or '{' or '$' from 4:1 to 4:1
-array(
-    0: Stmt_Function[2:1 - 4:1](
-        byRef: false
-        name: Identifier[2:10 - 2:12](
-            name: foo
-        )
-        params: array(
-        )
-        returnType: null
-        stmts: array(
-            0: Stmt_Expression[3:5 - 3:10](
-                expr: Expr_PropertyFetch[3:5 - 3:10](
-                    var: Expr_Variable[3:5 - 3:8](
-                        name: bar
-                    )
-                    name: Expr_Error[4:1 - 3:10](
-                    )
-                )
-            )
-        )
-    )
-)
------
-<?php
-new T
------
-Syntax error, unexpected EOF from 2:6 to 2:6
-array(
-    0: Stmt_Expression(
-        expr: Expr_New(
-            class: Name(
-                parts: array(
-                    0: T
-                )
-            )
-            args: array(
-            )
-        )
-    )
-)
------
-<?php
-new
------
-!!php7,positions
-Syntax error, unexpected EOF from 2:4 to 2:4
-array(
-    0: Stmt_Expression[2:1 - 2:3](
-        expr: Expr_New[2:1 - 2:3](
-            class: Expr_Error[2:4 - 2:3](
-            )
-            args: array(
-            )
-        )
-    )
-)
------
-<?php
-$foo instanceof
------
-!!php7
-Syntax error, unexpected EOF from 2:16 to 2:16
-array(
-    0: Stmt_Expression(
-        expr: Expr_Instanceof(
-            expr: Expr_Variable(
-                name: foo
-            )
-            class: Expr_Error(
-            )
-        )
-    )
-)
------
-<?php
-$
------
-!!php7
-Syntax error, unexpected EOF, expecting T_VARIABLE or '{' or '$' from 2:2 to 2:2
-array(
-    0: Stmt_Expression(
-        expr: Expr_Variable(
-            name: Expr_Error(
-            )
-        )
-    )
-)
------
-<?php
-Foo::$
------
-!!php7
-Syntax error, unexpected EOF, expecting T_VARIABLE or '{' or '$' from 2:7 to 2:7
-array(
-    0: Stmt_Expression(
-        expr: Expr_StaticPropertyFetch(
-            class: Name(
-                parts: array(
-                    0: Foo
-                )
-            )
-            name: Expr_Error(
-            )
-        )
-    )
-)
------
-<?php
-Foo::
------
-!!php7
-Syntax error, unexpected EOF from 2:6 to 2:6
-array(
-    0: Stmt_Expression(
-        expr: Expr_ClassConstFetch(
-            class: Name(
-                parts: array(
-                    0: Foo
-                )
-            )
-            name: Expr_Error(
-            )
-        )
-    )
-)
------
-<?php
-namespace Foo
-use A
-use function a
-use A\{B}
-const A = 1
-break
-break 2
-continue
-continue 2
-return
-return 2
-echo $a
-unset($a)
-throw $x
-goto label
------
-!!php7
-Syntax error, unexpected T_USE, expecting ';' or '{' from 3:1 to 3:3
-Syntax error, unexpected T_USE, expecting ';' from 5:1 to 5:3
-Syntax error, unexpected T_CONST, expecting ';' from 6:1 to 6:5
-Syntax error, unexpected T_BREAK, expecting ';' from 7:1 to 7:5
-Syntax error, unexpected T_THROW, expecting ';' from 15:1 to 15:5
-array(
-    0: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: Foo
-            )
-        )
-        stmts: array(
-            0: Stmt_Use(
-                type: TYPE_NORMAL (1)
-                uses: array(
-                    0: Stmt_UseUse(
-                        type: TYPE_UNKNOWN (0)
-                        name: Name(
-                            parts: array(
-                                0: A
-                            )
-                        )
-                        alias: null
-                    )
-                )
-            )
-            1: Stmt_Use(
-                type: TYPE_FUNCTION (2)
-                uses: array(
-                    0: Stmt_UseUse(
-                        type: TYPE_UNKNOWN (0)
-                        name: Name(
-                            parts: array(
-                                0: a
-                            )
-                        )
-                        alias: null
-                    )
-                )
-            )
-            2: Stmt_GroupUse(
-                type: TYPE_UNKNOWN (0)
-                prefix: Name(
-                    parts: array(
-                        0: A
-                    )
-                )
-                uses: array(
-                    0: Stmt_UseUse(
-                        type: TYPE_NORMAL (1)
-                        name: Name(
-                            parts: array(
-                                0: B
-                            )
-                        )
-                        alias: null
-                    )
-                )
-            )
-            3: Stmt_Const(
-                consts: array(
-                    0: Const(
-                        name: Identifier(
-                            name: A
-                        )
-                        value: Scalar_LNumber(
-                            value: 1
-                        )
-                    )
-                )
-            )
-            4: Stmt_Break(
-                num: null
-            )
-            5: Stmt_Break(
-                num: Scalar_LNumber(
-                    value: 2
-                )
-            )
-            6: Stmt_Continue(
-                num: null
-            )
-            7: Stmt_Continue(
-                num: Scalar_LNumber(
-                    value: 2
-                )
-            )
-            8: Stmt_Return(
-                expr: null
-            )
-            9: Stmt_Return(
-                expr: Scalar_LNumber(
-                    value: 2
-                )
-            )
-            10: Stmt_Echo(
-                exprs: array(
-                    0: Expr_Variable(
-                        name: a
-                    )
-                )
-            )
-            11: Stmt_Unset(
-                vars: array(
-                    0: Expr_Variable(
-                        name: a
-                    )
-                )
-            )
-            12: Stmt_Throw(
-                expr: Expr_Variable(
-                    name: x
-                )
-            )
-            13: Stmt_Goto(
-                name: Identifier(
-                    name: label
-                )
-            )
-        )
-    )
-)
------
-<?php
-
-use A\{B, };
-use function A\{b, };
-use A, ;
-const A = 42, ;
-
-class X implements Y, {
-    use A, ;
-    use A, {
-        A::b insteadof C, ;
-    }
-    const A = 42, ;
-    public $x, ;
-}
-interface I extends J, {}
-
-unset($x, );
-isset($x, );
-
-declare(a=42, );
-
-function foo($a, ) {}
-foo($a, );
-global $a, ;
-static $a, ;
-echo $a, ;
-
-for ($a, ; $b, ; $c, );
-function ($a, ) use ($b, ) {};
------
-!!php7
-A trailing comma is not allowed here from 5:6 to 5:6
-A trailing comma is not allowed here from 6:13 to 6:13
-A trailing comma is not allowed here from 8:21 to 8:21
-A trailing comma is not allowed here from 9:10 to 9:10
-A trailing comma is not allowed here from 10:10 to 10:10
-A trailing comma is not allowed here from 11:25 to 11:25
-A trailing comma is not allowed here from 13:17 to 13:17
-A trailing comma is not allowed here from 14:14 to 14:14
-A trailing comma is not allowed here from 16:22 to 16:22
-A trailing comma is not allowed here from 21:13 to 21:13
-A trailing comma is not allowed here from 23:16 to 23:16
-A trailing comma is not allowed here from 25:10 to 25:10
-A trailing comma is not allowed here from 26:10 to 26:10
-A trailing comma is not allowed here from 27:8 to 27:8
-A trailing comma is not allowed here from 29:8 to 29:8
-A trailing comma is not allowed here from 29:14 to 29:14
-A trailing comma is not allowed here from 29:20 to 29:20
-A trailing comma is not allowed here from 30:13 to 30:13
-A trailing comma is not allowed here from 30:24 to 30:24
-array(
-    0: Stmt_GroupUse(
-        type: TYPE_UNKNOWN (0)
-        prefix: Name(
-            parts: array(
-                0: A
-            )
-        )
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_NORMAL (1)
-                name: Name(
-                    parts: array(
-                        0: B
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-    1: Stmt_GroupUse(
-        type: TYPE_FUNCTION (2)
-        prefix: Name(
-            parts: array(
-                0: A
-            )
-        )
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: b
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-    2: Stmt_Use(
-        type: TYPE_NORMAL (1)
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: A
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-    3: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: A
-                )
-                value: Scalar_LNumber(
-                    value: 42
-                )
-            )
-        )
-    )
-    4: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: X
-        )
-        extends: null
-        implements: array(
-            0: Name(
-                parts: array(
-                    0: Y
-                )
-            )
-        )
-        stmts: array(
-            0: Stmt_TraitUse(
-                traits: array(
-                    0: Name(
-                        parts: array(
-                            0: A
-                        )
-                    )
-                )
-                adaptations: array(
-                )
-            )
-            1: Stmt_TraitUse(
-                traits: array(
-                    0: Name(
-                        parts: array(
-                            0: A
-                        )
-                    )
-                )
-                adaptations: array(
-                    0: Stmt_TraitUseAdaptation_Precedence(
-                        trait: Name(
-                            parts: array(
-                                0: A
-                            )
-                        )
-                        method: Identifier(
-                            name: b
-                        )
-                        insteadof: array(
-                            0: Name(
-                                parts: array(
-                                    0: C
-                                )
-                            )
-                        )
-                    )
-                )
-            )
-            2: Stmt_ClassConst(
-                flags: 0
-                consts: array(
-                    0: Const(
-                        name: Identifier(
-                            name: A
-                        )
-                        value: Scalar_LNumber(
-                            value: 42
-                        )
-                    )
-                )
-            )
-            3: Stmt_Property(
-                flags: MODIFIER_PUBLIC (1)
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: x
-                        )
-                        default: null
-                    )
-                )
-            )
-        )
-    )
-    5: Stmt_Interface(
-        name: Identifier(
-            name: I
-        )
-        extends: array(
-            0: Name(
-                parts: array(
-                    0: J
-                )
-            )
-        )
-        stmts: array(
-        )
-    )
-    6: Stmt_Unset(
-        vars: array(
-            0: Expr_Variable(
-                name: x
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_Isset(
-            vars: array(
-                0: Expr_Variable(
-                    name: x
-                )
-            )
-        )
-    )
-    8: Stmt_Declare(
-        declares: array(
-            0: Stmt_DeclareDeclare(
-                key: Identifier(
-                    name: a
-                )
-                value: Scalar_LNumber(
-                    value: 42
-                )
-            )
-        )
-        stmts: null
-    )
-    9: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: foo
-        )
-        params: array(
-            0: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: a
-                )
-                default: null
-            )
-        )
-        returnType: null
-        stmts: array(
-        )
-    )
-    10: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: foo
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Expr_Variable(
-                        name: a
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    11: Stmt_Global(
-        vars: array(
-            0: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    12: Stmt_Static(
-        vars: array(
-            0: Stmt_StaticVar(
-                var: Expr_Variable(
-                    name: a
-                )
-                default: null
-            )
-        )
-    )
-    13: Stmt_Echo(
-        exprs: array(
-            0: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    14: Stmt_For(
-        init: array(
-            0: Expr_Variable(
-                name: a
-            )
-        )
-        cond: array(
-            0: Expr_Variable(
-                name: b
-            )
-        )
-        loop: array(
-            0: Expr_Variable(
-                name: c
-            )
-        )
-        stmts: array(
-        )
-    )
-    15: Stmt_Expression(
-        expr: Expr_Closure(
-            static: false
-            byRef: false
-            params: array(
-                0: Param(
-                    type: null
-                    byRef: false
-                    variadic: false
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    default: null
-                )
-            )
-            uses: array(
-                0: Expr_ClosureUse(
-                    var: Expr_Variable(
-                        name: b
-                    )
-                    byRef: false
-                )
-            )
-            returnType: null
-            stmts: array(
-            )
-        )
-    )
-)
------
-<?php
-
-foo(Bar::);
------
-!!php7,positions
-Syntax error, unexpected ')' from 3:10 to 3:10
-array(
-    0: Stmt_Expression[3:1 - 3:11](
-        expr: Expr_FuncCall[3:1 - 3:10](
-            name: Name[3:1 - 3:3](
-                parts: array(
-                    0: foo
-                )
-            )
-            args: array(
-                0: Arg[3:5 - 3:9](
-                    value: Expr_ClassConstFetch[3:5 - 3:9](
-                        class: Name[3:5 - 3:7](
-                            parts: array(
-                                0: Bar
-                            )
-                        )
-                        name: Expr_Error[3:10 - 3:9](
-                        )
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-)
------
-<?php
-
-class Foo {
-    publi $foo;
-    public $bar;
-}
------
-!!php7
-Syntax error, unexpected T_STRING from 4:5 to 4:9
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: Foo
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_Property(
-                flags: MODIFIER_PUBLIC (1)
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: bar
-                        )
-                        default: null
-                    )
-                )
-            )
-        )
-    )
-)
------
-<?php
-
-foreach ($foo) { $bar; }
-foreach ($foo as ) { $bar; }
------
-!!php7
-Syntax error, unexpected ')' from 3:14 to 3:14
-Syntax error, unexpected ')' from 4:18 to 4:18
-array(
-    0: Stmt_Foreach(
-        expr: Expr_Variable(
-            name: foo
-        )
-        keyVar: null
-        byRef: false
-        valueVar: Expr_Error(
-        )
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Variable(
-                    name: bar
-                )
-            )
-        )
-    )
-    1: Stmt_Foreach(
-        expr: Expr_Variable(
-            name: foo
-        )
-        keyVar: null
-        byRef: false
-        valueVar: Expr_Error(
-        )
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Variable(
-                    name: bar
-                )
-            )
-        )
-    )
-)
------
-<?php
-
-function foo(Type) {
-    $foo;
-}
-
-function foo(Type1 $foo, Type2) {
-    $bar;
-}
-
-function foo(...) {
-    $baz;
-}
-
-function foo(&) {
-    $qux;
-}
-
-function foo(Bar)
-
-class Bar {
-    function foo(Baz)
-}
-
-function(Foo);
------
-!!php7
-Syntax error, unexpected ')', expecting T_VARIABLE from 3:18 to 3:18
-Syntax error, unexpected ')', expecting T_VARIABLE from 7:31 to 7:31
-Syntax error, unexpected ')', expecting T_VARIABLE from 11:17 to 11:17
-Syntax error, unexpected ')', expecting T_VARIABLE from 15:15 to 15:15
-Syntax error, unexpected ')', expecting T_VARIABLE from 19:17 to 19:17
-Syntax error, unexpected ')', expecting T_VARIABLE from 22:21 to 22:21
-Syntax error, unexpected ')', expecting T_VARIABLE from 25:13 to 25:13
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: foo
-        )
-        params: array(
-            0: Param(
-                type: Name(
-                    parts: array(
-                        0: Type
-                    )
-                )
-                byRef: false
-                variadic: false
-                var: Expr_Error(
-                )
-                default: null
-            )
-        )
-        returnType: null
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Variable(
-                    name: foo
-                )
-            )
-        )
-    )
-    1: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: foo
-        )
-        params: array(
-            0: Param(
-                type: Name(
-                    parts: array(
-                        0: Type1
-                    )
-                )
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: foo
-                )
-                default: null
-            )
-            1: Param(
-                type: Name(
-                    parts: array(
-                        0: Type2
-                    )
-                )
-                byRef: false
-                variadic: false
-                var: Expr_Error(
-                )
-                default: null
-            )
-        )
-        returnType: null
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Variable(
-                    name: bar
-                )
-            )
-        )
-    )
-    2: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: foo
-        )
-        params: array(
-            0: Param(
-                type: null
-                byRef: false
-                variadic: true
-                var: Expr_Error(
-                )
-                default: null
-            )
-        )
-        returnType: null
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Variable(
-                    name: baz
-                )
-            )
-        )
-    )
-    3: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: foo
-        )
-        params: array(
-            0: Param(
-                type: null
-                byRef: true
-                variadic: false
-                var: Expr_Error(
-                )
-                default: null
-            )
-        )
-        returnType: null
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Variable(
-                    name: qux
-                )
-            )
-        )
-    )
-    4: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: foo
-        )
-        params: array(
-            0: Param(
-                type: Name(
-                    parts: array(
-                        0: Bar
-                    )
-                )
-                byRef: false
-                variadic: false
-                var: Expr_Error(
-                )
-                default: null
-            )
-        )
-        returnType: null
-        stmts: array(
-        )
-    )
-    5: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: Bar
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassMethod(
-                flags: 0
-                byRef: false
-                name: Identifier(
-                    name: foo
-                )
-                params: array(
-                    0: Param(
-                        type: Name(
-                            parts: array(
-                                0: Baz
-                            )
-                        )
-                        byRef: false
-                        variadic: false
-                        var: Expr_Error(
-                        )
-                        default: null
-                    )
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_Closure(
-            static: false
-            byRef: false
-            params: array(
-                0: Param(
-                    type: Name(
-                        parts: array(
-                            0: Foo
-                        )
-                    )
-                    byRef: false
-                    variadic: false
-                    var: Expr_Error(
-                    )
-                    default: null
-                )
-            )
-            uses: array(
-            )
-            returnType: null
-            stmts: array(
-            )
-        )
-    )
-)
------
-<?php
-$array = [
-    $this->value $oopsAnotherValue->get()
-];
-$array = [
-    $value $oopsAnotherValue
-];
-$array = [
-    'key' => $value $oopsAnotherValue
-];
------
-!!php7
-Syntax error, unexpected T_VARIABLE, expecting ',' or ')' or ']' from 3:18 to 3:34
-Syntax error, unexpected T_VARIABLE, expecting ',' or ')' or ']' from 6:12 to 6:28
-Syntax error, unexpected T_VARIABLE, expecting ',' or ')' or ']' from 9:21 to 9:37
-array(
-    0: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: array
-            )
-            expr: Expr_Array(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: null
-                        value: Expr_PropertyFetch(
-                            var: Expr_Variable(
-                                name: this
-                            )
-                            name: Identifier(
-                                name: value
-                            )
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    1: Expr_ArrayItem(
-                        key: null
-                        value: Expr_MethodCall(
-                            var: Expr_Variable(
-                                name: oopsAnotherValue
-                            )
-                            name: Identifier(
-                                name: get
-                            )
-                            args: array(
-                            )
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: array
-            )
-            expr: Expr_Array(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: value
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    1: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: oopsAnotherValue
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: array
-            )
-            expr: Expr_Array(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: Scalar_String(
-                            value: key
-                        )
-                        value: Expr_Variable(
-                            name: value
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    1: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: oopsAnotherValue
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-        )
-    )
-)
------
-<?php
-function foo() :
-{
-    return $a;
-}
------
-!!php7
-Syntax error, unexpected '{' from 3:1 to 3:1
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: foo
-        )
-        params: array(
-        )
-        returnType: null
-        stmts: array(
-            0: Stmt_Return(
-                expr: Expr_Variable(
-                    name: a
-                )
-            )
-        )
-    )
-)
------
-<?php
-$a = ["a "thing"];
------
-!!php7
-Syntax error, unexpected T_STRING, expecting ',' or ')' or ']' from 2:11 to 2:15
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/arrayDef.test b/vendor/nikic/php-parser/test/code/parser/expr/arrayDef.test
deleted file mode 100644
index 0339a56761..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/arrayDef.test
+++ /dev/null
@@ -1,173 +0,0 @@
-Array definitions
------
-<?php
-
-array();
-array('a');
-array('a', );
-array('a', 'b');
-array('a', &$b, 'c' => 'd', 'e' => &$f);
-
-// short array syntax
-[];
-[1, 2, 3];
-['a' => 'b'];
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_String(
-                        value: a
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_String(
-                        value: a
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_String(
-                        value: a
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                1: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_String(
-                        value: b
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_String(
-                        value: a
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                1: Expr_ArrayItem(
-                    key: null
-                    value: Expr_Variable(
-                        name: b
-                    )
-                    byRef: true
-                    unpack: false
-                )
-                2: Expr_ArrayItem(
-                    key: Scalar_String(
-                        value: c
-                    )
-                    value: Scalar_String(
-                        value: d
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                3: Expr_ArrayItem(
-                    key: Scalar_String(
-                        value: e
-                    )
-                    value: Expr_Variable(
-                        name: f
-                    )
-                    byRef: true
-                    unpack: false
-                )
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-            )
-            comments: array(
-                0: // short array syntax
-            )
-        )
-        comments: array(
-            0: // short array syntax
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_LNumber(
-                        value: 1
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                1: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_LNumber(
-                        value: 2
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                2: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_LNumber(
-                        value: 3
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: Scalar_String(
-                        value: a
-                    )
-                    value: Scalar_String(
-                        value: b
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/arrayDestructuring.test b/vendor/nikic/php-parser/test/code/parser/expr/arrayDestructuring.test
deleted file mode 100644
index cfec0d13b1..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/arrayDestructuring.test
+++ /dev/null
@@ -1,164 +0,0 @@
-Array destructuring
------
-<?php
-
-[$a, $b] = [$c, $d];
-[, $a, , , $b, ,] = $foo;
-[, [[$a]], $b] = $bar;
-['a' => $b, 'b' => $a] = $baz;
------
-!!php7
-array(
-    0: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Array(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: a
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    1: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: b
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            expr: Expr_Array(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: c
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    1: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: d
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Array(
-                items: array(
-                    0: null
-                    1: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: a
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    2: null
-                    3: null
-                    4: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: b
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    5: null
-                )
-            )
-            expr: Expr_Variable(
-                name: foo
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Array(
-                items: array(
-                    0: null
-                    1: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Array(
-                            items: array(
-                                0: Expr_ArrayItem(
-                                    key: null
-                                    value: Expr_Array(
-                                        items: array(
-                                            0: Expr_ArrayItem(
-                                                key: null
-                                                value: Expr_Variable(
-                                                    name: a
-                                                )
-                                                byRef: false
-                                                unpack: false
-                                            )
-                                        )
-                                    )
-                                    byRef: false
-                                    unpack: false
-                                )
-                            )
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    2: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: b
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            expr: Expr_Variable(
-                name: bar
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Array(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: Scalar_String(
-                            value: a
-                        )
-                        value: Expr_Variable(
-                            name: b
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    1: Expr_ArrayItem(
-                        key: Scalar_String(
-                            value: b
-                        )
-                        value: Expr_Variable(
-                            name: a
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            expr: Expr_Variable(
-                name: baz
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/arraySpread.test b/vendor/nikic/php-parser/test/code/parser/expr/arraySpread.test
deleted file mode 100644
index ed2edce3de..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/arraySpread.test
+++ /dev/null
@@ -1,432 +0,0 @@
-Spread array
------
-<?php
-$array = [1, 2, 3];
-
-function getArr() {
-	return [4, 5];
-}
-
-function arrGen() {
-	for($i = 11; $i < 15; $i++) {
-		yield $i;
-	}
-}
-
-[...[]];
-[...[1, 2, 3]];
-[...$array];
-[...getArr()];
-[...arrGen()];
-[...new ArrayIterator(['a', 'b', 'c'])];
-[0, ...$array, ...getArr(), 6, 7, 8, 9, 10, ...arrGen()];
-[0, ...$array, ...$array, 'end'];
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: array
-            )
-            expr: Expr_Array(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: null
-                        value: Scalar_LNumber(
-                            value: 1
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    1: Expr_ArrayItem(
-                        key: null
-                        value: Scalar_LNumber(
-                            value: 2
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    2: Expr_ArrayItem(
-                        key: null
-                        value: Scalar_LNumber(
-                            value: 3
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: getArr
-        )
-        params: array(
-        )
-        returnType: null
-        stmts: array(
-            0: Stmt_Return(
-                expr: Expr_Array(
-                    items: array(
-                        0: Expr_ArrayItem(
-                            key: null
-                            value: Scalar_LNumber(
-                                value: 4
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                        1: Expr_ArrayItem(
-                            key: null
-                            value: Scalar_LNumber(
-                                value: 5
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                    )
-                )
-            )
-        )
-    )
-    2: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: arrGen
-        )
-        params: array(
-        )
-        returnType: null
-        stmts: array(
-            0: Stmt_For(
-                init: array(
-                    0: Expr_Assign(
-                        var: Expr_Variable(
-                            name: i
-                        )
-                        expr: Scalar_LNumber(
-                            value: 11
-                        )
-                    )
-                )
-                cond: array(
-                    0: Expr_BinaryOp_Smaller(
-                        left: Expr_Variable(
-                            name: i
-                        )
-                        right: Scalar_LNumber(
-                            value: 15
-                        )
-                    )
-                )
-                loop: array(
-                    0: Expr_PostInc(
-                        var: Expr_Variable(
-                            name: i
-                        )
-                    )
-                )
-                stmts: array(
-                    0: Stmt_Expression(
-                        expr: Expr_Yield(
-                            key: null
-                            value: Expr_Variable(
-                                name: i
-                            )
-                        )
-                    )
-                )
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: null
-                    value: Expr_Array(
-                        items: array(
-                        )
-                    )
-                    byRef: false
-                    unpack: true
-                )
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: null
-                    value: Expr_Array(
-                        items: array(
-                            0: Expr_ArrayItem(
-                                key: null
-                                value: Scalar_LNumber(
-                                    value: 1
-                                )
-                                byRef: false
-                                unpack: false
-                            )
-                            1: Expr_ArrayItem(
-                                key: null
-                                value: Scalar_LNumber(
-                                    value: 2
-                                )
-                                byRef: false
-                                unpack: false
-                            )
-                            2: Expr_ArrayItem(
-                                key: null
-                                value: Scalar_LNumber(
-                                    value: 3
-                                )
-                                byRef: false
-                                unpack: false
-                            )
-                        )
-                    )
-                    byRef: false
-                    unpack: true
-                )
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: null
-                    value: Expr_Variable(
-                        name: array
-                    )
-                    byRef: false
-                    unpack: true
-                )
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: null
-                    value: Expr_FuncCall(
-                        name: Name(
-                            parts: array(
-                                0: getArr
-                            )
-                        )
-                        args: array(
-                        )
-                    )
-                    byRef: false
-                    unpack: true
-                )
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: null
-                    value: Expr_FuncCall(
-                        name: Name(
-                            parts: array(
-                                0: arrGen
-                            )
-                        )
-                        args: array(
-                        )
-                    )
-                    byRef: false
-                    unpack: true
-                )
-            )
-        )
-    )
-    8: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: null
-                    value: Expr_New(
-                        class: Name(
-                            parts: array(
-                                0: ArrayIterator
-                            )
-                        )
-                        args: array(
-                            0: Arg(
-                                value: Expr_Array(
-                                    items: array(
-                                        0: Expr_ArrayItem(
-                                            key: null
-                                            value: Scalar_String(
-                                                value: a
-                                            )
-                                            byRef: false
-                                            unpack: false
-                                        )
-                                        1: Expr_ArrayItem(
-                                            key: null
-                                            value: Scalar_String(
-                                                value: b
-                                            )
-                                            byRef: false
-                                            unpack: false
-                                        )
-                                        2: Expr_ArrayItem(
-                                            key: null
-                                            value: Scalar_String(
-                                                value: c
-                                            )
-                                            byRef: false
-                                            unpack: false
-                                        )
-                                    )
-                                )
-                                byRef: false
-                                unpack: false
-                            )
-                        )
-                    )
-                    byRef: false
-                    unpack: true
-                )
-            )
-        )
-    )
-    9: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_LNumber(
-                        value: 0
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                1: Expr_ArrayItem(
-                    key: null
-                    value: Expr_Variable(
-                        name: array
-                    )
-                    byRef: false
-                    unpack: true
-                )
-                2: Expr_ArrayItem(
-                    key: null
-                    value: Expr_FuncCall(
-                        name: Name(
-                            parts: array(
-                                0: getArr
-                            )
-                        )
-                        args: array(
-                        )
-                    )
-                    byRef: false
-                    unpack: true
-                )
-                3: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_LNumber(
-                        value: 6
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                4: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_LNumber(
-                        value: 7
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                5: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_LNumber(
-                        value: 8
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                6: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_LNumber(
-                        value: 9
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                7: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_LNumber(
-                        value: 10
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                8: Expr_ArrayItem(
-                    key: null
-                    value: Expr_FuncCall(
-                        name: Name(
-                            parts: array(
-                                0: arrGen
-                            )
-                        )
-                        args: array(
-                        )
-                    )
-                    byRef: false
-                    unpack: true
-                )
-            )
-        )
-    )
-    10: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_LNumber(
-                        value: 0
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                1: Expr_ArrayItem(
-                    key: null
-                    value: Expr_Variable(
-                        name: array
-                    )
-                    byRef: false
-                    unpack: true
-                )
-                2: Expr_ArrayItem(
-                    key: null
-                    value: Expr_Variable(
-                        name: array
-                    )
-                    byRef: false
-                    unpack: true
-                )
-                3: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_String(
-                        value: end
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/arrow_function.test b/vendor/nikic/php-parser/test/code/parser/expr/arrow_function.test
deleted file mode 100644
index 1beec451e4..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/arrow_function.test
+++ /dev/null
@@ -1,145 +0,0 @@
-Arrow Functions
------
-<?php
-fn(bool $a) => $a;
-fn($x = 42) => $x;
-static fn(&$x) => $x;
-fn&($x) => $x;
-fn($x, ...$rest) => $rest;
-fn(): int => $x;
------
-!!php7
-array(
-    0: Stmt_Expression(
-        expr: Expr_ArrowFunction(
-            static: false
-            byRef: false
-            params: array(
-                0: Param(
-                    type: Identifier(
-                        name: bool
-                    )
-                    byRef: false
-                    variadic: false
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    default: null
-                )
-            )
-            returnType: null
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_ArrowFunction(
-            static: false
-            byRef: false
-            params: array(
-                0: Param(
-                    type: null
-                    byRef: false
-                    variadic: false
-                    var: Expr_Variable(
-                        name: x
-                    )
-                    default: Scalar_LNumber(
-                        value: 42
-                    )
-                )
-            )
-            returnType: null
-            expr: Expr_Variable(
-                name: x
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_ArrowFunction(
-            static: true
-            byRef: false
-            params: array(
-                0: Param(
-                    type: null
-                    byRef: true
-                    variadic: false
-                    var: Expr_Variable(
-                        name: x
-                    )
-                    default: null
-                )
-            )
-            returnType: null
-            expr: Expr_Variable(
-                name: x
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_ArrowFunction(
-            static: false
-            byRef: true
-            params: array(
-                0: Param(
-                    type: null
-                    byRef: false
-                    variadic: false
-                    var: Expr_Variable(
-                        name: x
-                    )
-                    default: null
-                )
-            )
-            returnType: null
-            expr: Expr_Variable(
-                name: x
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_ArrowFunction(
-            static: false
-            byRef: false
-            params: array(
-                0: Param(
-                    type: null
-                    byRef: false
-                    variadic: false
-                    var: Expr_Variable(
-                        name: x
-                    )
-                    default: null
-                )
-                1: Param(
-                    type: null
-                    byRef: false
-                    variadic: true
-                    var: Expr_Variable(
-                        name: rest
-                    )
-                    default: null
-                )
-            )
-            returnType: null
-            expr: Expr_Variable(
-                name: rest
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_ArrowFunction(
-            static: false
-            byRef: false
-            params: array(
-            )
-            returnType: Identifier(
-                name: int
-            )
-            expr: Expr_Variable(
-                name: x
-            )
-        )
-    )
-)
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/assign.test b/vendor/nikic/php-parser/test/code/parser/expr/assign.test
deleted file mode 100644
index 423f48af2f..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/assign.test
+++ /dev/null
@@ -1,381 +0,0 @@
-Assignments
------
-<?php
-// simple assign
-$a = $b;
-
-// combined assign
-$a &= $b;
-$a |= $b;
-$a ^= $b;
-$a .= $b;
-$a /= $b;
-$a -= $b;
-$a %= $b;
-$a *= $b;
-$a += $b;
-$a <<= $b;
-$a >>= $b;
-$a **= $b;
-$a ??= $b;
-
-// chained assign
-$a = $b *= $c **= $d;
-
-// by ref assign
-$a =& $b;
-
-// list() assign
-list($a) = $b;
-list($a, , $b) = $c;
-list($a, list(, $c), $d) = $e;
-
-// inc/dec
-++$a;
-$a++;
---$a;
-$a--;
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: a
-                comments: array(
-                    0: // simple assign
-                )
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-            comments: array(
-                0: // simple assign
-            )
-        )
-        comments: array(
-            0: // simple assign
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_AssignOp_BitwiseAnd(
-            var: Expr_Variable(
-                name: a
-                comments: array(
-                    0: // combined assign
-                )
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-            comments: array(
-                0: // combined assign
-            )
-        )
-        comments: array(
-            0: // combined assign
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_AssignOp_BitwiseOr(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_AssignOp_BitwiseXor(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_AssignOp_Concat(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_AssignOp_Div(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_AssignOp_Minus(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_AssignOp_Mod(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    8: Stmt_Expression(
-        expr: Expr_AssignOp_Mul(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    9: Stmt_Expression(
-        expr: Expr_AssignOp_Plus(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    10: Stmt_Expression(
-        expr: Expr_AssignOp_ShiftLeft(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    11: Stmt_Expression(
-        expr: Expr_AssignOp_ShiftRight(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    12: Stmt_Expression(
-        expr: Expr_AssignOp_Pow(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    13: Stmt_Expression(
-        expr: Expr_AssignOp_Coalesce(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    14: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: a
-                comments: array(
-                    0: // chained assign
-                )
-            )
-            expr: Expr_AssignOp_Mul(
-                var: Expr_Variable(
-                    name: b
-                )
-                expr: Expr_AssignOp_Pow(
-                    var: Expr_Variable(
-                        name: c
-                    )
-                    expr: Expr_Variable(
-                        name: d
-                    )
-                )
-            )
-            comments: array(
-                0: // chained assign
-            )
-        )
-        comments: array(
-            0: // chained assign
-        )
-    )
-    15: Stmt_Expression(
-        expr: Expr_AssignRef(
-            var: Expr_Variable(
-                name: a
-                comments: array(
-                    0: // by ref assign
-                )
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-            comments: array(
-                0: // by ref assign
-            )
-        )
-        comments: array(
-            0: // by ref assign
-        )
-    )
-    16: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_List(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: a
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-                comments: array(
-                    0: // list() assign
-                )
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-            comments: array(
-                0: // list() assign
-            )
-        )
-        comments: array(
-            0: // list() assign
-        )
-    )
-    17: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_List(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: a
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    1: null
-                    2: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: b
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            expr: Expr_Variable(
-                name: c
-            )
-        )
-    )
-    18: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_List(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: a
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    1: Expr_ArrayItem(
-                        key: null
-                        value: Expr_List(
-                            items: array(
-                                0: null
-                                1: Expr_ArrayItem(
-                                    key: null
-                                    value: Expr_Variable(
-                                        name: c
-                                    )
-                                    byRef: false
-                                    unpack: false
-                                )
-                            )
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    2: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: d
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            expr: Expr_Variable(
-                name: e
-            )
-        )
-    )
-    19: Stmt_Expression(
-        expr: Expr_PreInc(
-            var: Expr_Variable(
-                name: a
-            )
-            comments: array(
-                0: // inc/dec
-            )
-        )
-        comments: array(
-            0: // inc/dec
-        )
-    )
-    20: Stmt_Expression(
-        expr: Expr_PostInc(
-            var: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    21: Stmt_Expression(
-        expr: Expr_PreDec(
-            var: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    22: Stmt_Expression(
-        expr: Expr_PostDec(
-            var: Expr_Variable(
-                name: a
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/assignNewByRef.test b/vendor/nikic/php-parser/test/code/parser/expr/assignNewByRef.test
deleted file mode 100644
index a66d943a42..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/assignNewByRef.test
+++ /dev/null
@@ -1,43 +0,0 @@
-Assigning new by reference (PHP 5 only)
------
-<?php
-$a =& new B;
------
-!!php5
-array(
-    0: Stmt_Expression(
-        expr: Expr_AssignRef(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Expr_New(
-                class: Name(
-                    parts: array(
-                        0: B
-                    )
-                )
-                args: array(
-                )
-            )
-        )
-    )
-)
------
-<?php
-$a =& new B;
------
-!!php7
-Syntax error, unexpected T_NEW from 2:7 to 2:9
-array(
-    0: Stmt_Expression(
-        expr: Expr_New(
-            class: Name(
-                parts: array(
-                    0: B
-                )
-            )
-            args: array(
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/cast.test b/vendor/nikic/php-parser/test/code/parser/expr/cast.test
deleted file mode 100644
index a875bb47fe..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/cast.test
+++ /dev/null
@@ -1,94 +0,0 @@
-Casts
------
-<?php
-(array)   $a;
-(bool)    $a;
-(boolean) $a;
-(real)    $a;
-(double)  $a;
-(float)   $a;
-(int)     $a;
-(integer) $a;
-(object)  $a;
-(string)  $a;
-(unset)   $a;
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Cast_Array(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Cast_Bool(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Cast_Bool(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_Cast_Double(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_Cast_Double(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_Cast_Double(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_Cast_Int(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_Cast_Int(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    8: Stmt_Expression(
-        expr: Expr_Cast_Object(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    9: Stmt_Expression(
-        expr: Expr_Cast_String(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    10: Stmt_Expression(
-        expr: Expr_Cast_Unset(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/clone.test b/vendor/nikic/php-parser/test/code/parser/expr/clone.test
deleted file mode 100644
index 418eb0e658..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/clone.test
+++ /dev/null
@@ -1,15 +0,0 @@
-Clone
------
-<?php
-
-clone $a;
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Clone(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/closure.test b/vendor/nikic/php-parser/test/code/parser/expr/closure.test
deleted file mode 100644
index c88de78b49..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/closure.test
+++ /dev/null
@@ -1,176 +0,0 @@
-Closures
------
-<?php
-function($a) { $a; };
-function($a) use($b) {};
-function() use($a, &$b) {};
-function &($a) {};
-static function() {};
-function($a) : array {};
-function() use($a) : \Foo\Bar {};
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Closure(
-            static: false
-            byRef: false
-            params: array(
-                0: Param(
-                    type: null
-                    byRef: false
-                    variadic: false
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    default: null
-                )
-            )
-            uses: array(
-            )
-            returnType: null
-            stmts: array(
-                0: Stmt_Expression(
-                    expr: Expr_Variable(
-                        name: a
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Closure(
-            static: false
-            byRef: false
-            params: array(
-                0: Param(
-                    type: null
-                    byRef: false
-                    variadic: false
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    default: null
-                )
-            )
-            uses: array(
-                0: Expr_ClosureUse(
-                    var: Expr_Variable(
-                        name: b
-                    )
-                    byRef: false
-                )
-            )
-            returnType: null
-            stmts: array(
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Closure(
-            static: false
-            byRef: false
-            params: array(
-            )
-            uses: array(
-                0: Expr_ClosureUse(
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    byRef: false
-                )
-                1: Expr_ClosureUse(
-                    var: Expr_Variable(
-                        name: b
-                    )
-                    byRef: true
-                )
-            )
-            returnType: null
-            stmts: array(
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_Closure(
-            static: false
-            byRef: true
-            params: array(
-                0: Param(
-                    type: null
-                    byRef: false
-                    variadic: false
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    default: null
-                )
-            )
-            uses: array(
-            )
-            returnType: null
-            stmts: array(
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_Closure(
-            static: true
-            byRef: false
-            params: array(
-            )
-            uses: array(
-            )
-            returnType: null
-            stmts: array(
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_Closure(
-            static: false
-            byRef: false
-            params: array(
-                0: Param(
-                    type: null
-                    byRef: false
-                    variadic: false
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    default: null
-                )
-            )
-            uses: array(
-            )
-            returnType: Identifier(
-                name: array
-            )
-            stmts: array(
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_Closure(
-            static: false
-            byRef: false
-            params: array(
-            )
-            uses: array(
-                0: Expr_ClosureUse(
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    byRef: false
-                )
-            )
-            returnType: Name_FullyQualified(
-                parts: array(
-                    0: Foo
-                    1: Bar
-                )
-            )
-            stmts: array(
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/comparison.test b/vendor/nikic/php-parser/test/code/parser/expr/comparison.test
deleted file mode 100644
index 011692f064..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/comparison.test
+++ /dev/null
@@ -1,129 +0,0 @@
-Comparison operators
------
-<?php
-$a < $b;
-$a <= $b;
-$a > $b;
-$a >= $b;
-$a == $b;
-$a === $b;
-$a != $b;
-$a !== $b;
-$a <=> $b;
-$a instanceof B;
-$a instanceof $b;
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_BinaryOp_Smaller(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_BinaryOp_SmallerOrEqual(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_BinaryOp_Greater(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_BinaryOp_GreaterOrEqual(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_BinaryOp_Equal(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_BinaryOp_Identical(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_BinaryOp_NotEqual(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_BinaryOp_NotIdentical(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    8: Stmt_Expression(
-        expr: Expr_BinaryOp_Spaceship(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    9: Stmt_Expression(
-        expr: Expr_Instanceof(
-            expr: Expr_Variable(
-                name: a
-            )
-            class: Name(
-                parts: array(
-                    0: B
-                )
-            )
-        )
-    )
-    10: Stmt_Expression(
-        expr: Expr_Instanceof(
-            expr: Expr_Variable(
-                name: a
-            )
-            class: Expr_Variable(
-                name: b
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/constant_expr.test b/vendor/nikic/php-parser/test/code/parser/expr/constant_expr.test
deleted file mode 100644
index 0f9815f94e..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/constant_expr.test
+++ /dev/null
@@ -1,694 +0,0 @@
-Expressions in static scalar context
------
-<?php
-
-const T_1 = 1 << 1;
-const T_2 = 1 / 2;
-const T_3 = 1.5 + 1.5;
-const T_4 = "foo" . "bar";
-const T_5 = (1.5 + 1.5) * 2;
-const T_6 = "foo" . 2 . 3 . 4.0;
-const T_7 = __LINE__;
-const T_8 = <<<ENDOFSTRING
-This is a test string
-ENDOFSTRING;
-const T_9 = ~-1;
-const T_10 = (-1?:1) + (0?2:3);
-const T_11 = 1 && 0;
-const T_12 = 1 and 1;
-const T_13 = 0 || 0;
-const T_14 = 1 or 0;
-const T_15 = 1 xor 1;
-const T_16 = 1 xor 0;
-const T_17 = 1 < 0;
-const T_18 = 0 <= 0;
-const T_19 = 1 > 0;
-const T_20 = 1 >= 0;
-const T_21 = 1 === 1;
-const T_22 = 1 !== 1;
-const T_23 = 0 != "0";
-const T_24 = 1 == "1";
-const T_25 = 1 + 2 * 3;
-const T_26 = "1" + 2 + "3";
-const T_27 = 2 ** 3;
-const T_28 = [1, 2, 3][1];
-const T_29 = 12 - 13;
-const T_30 = 12 ^ 13;
-const T_31 = 12 & 13;
-const T_32 = 12 | 13;
-const T_33 = 12 % 3;
-const T_34 = 100 >> 4;
-const T_35 = !false;
------
-array(
-    0: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_1
-                )
-                value: Expr_BinaryOp_ShiftLeft(
-                    left: Scalar_LNumber(
-                        value: 1
-                    )
-                    right: Scalar_LNumber(
-                        value: 1
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_2
-                )
-                value: Expr_BinaryOp_Div(
-                    left: Scalar_LNumber(
-                        value: 1
-                    )
-                    right: Scalar_LNumber(
-                        value: 2
-                    )
-                )
-            )
-        )
-    )
-    2: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_3
-                )
-                value: Expr_BinaryOp_Plus(
-                    left: Scalar_DNumber(
-                        value: 1.5
-                    )
-                    right: Scalar_DNumber(
-                        value: 1.5
-                    )
-                )
-            )
-        )
-    )
-    3: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_4
-                )
-                value: Expr_BinaryOp_Concat(
-                    left: Scalar_String(
-                        value: foo
-                    )
-                    right: Scalar_String(
-                        value: bar
-                    )
-                )
-            )
-        )
-    )
-    4: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_5
-                )
-                value: Expr_BinaryOp_Mul(
-                    left: Expr_BinaryOp_Plus(
-                        left: Scalar_DNumber(
-                            value: 1.5
-                        )
-                        right: Scalar_DNumber(
-                            value: 1.5
-                        )
-                    )
-                    right: Scalar_LNumber(
-                        value: 2
-                    )
-                )
-            )
-        )
-    )
-    5: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_6
-                )
-                value: Expr_BinaryOp_Concat(
-                    left: Expr_BinaryOp_Concat(
-                        left: Expr_BinaryOp_Concat(
-                            left: Scalar_String(
-                                value: foo
-                            )
-                            right: Scalar_LNumber(
-                                value: 2
-                            )
-                        )
-                        right: Scalar_LNumber(
-                            value: 3
-                        )
-                    )
-                    right: Scalar_DNumber(
-                        value: 4
-                    )
-                )
-            )
-        )
-    )
-    6: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_7
-                )
-                value: Scalar_MagicConst_Line(
-                )
-            )
-        )
-    )
-    7: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_8
-                )
-                value: Scalar_String(
-                    value: This is a test string
-                )
-            )
-        )
-    )
-    8: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_9
-                )
-                value: Expr_BitwiseNot(
-                    expr: Expr_UnaryMinus(
-                        expr: Scalar_LNumber(
-                            value: 1
-                        )
-                    )
-                )
-            )
-        )
-    )
-    9: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_10
-                )
-                value: Expr_BinaryOp_Plus(
-                    left: Expr_Ternary(
-                        cond: Expr_UnaryMinus(
-                            expr: Scalar_LNumber(
-                                value: 1
-                            )
-                        )
-                        if: null
-                        else: Scalar_LNumber(
-                            value: 1
-                        )
-                    )
-                    right: Expr_Ternary(
-                        cond: Scalar_LNumber(
-                            value: 0
-                        )
-                        if: Scalar_LNumber(
-                            value: 2
-                        )
-                        else: Scalar_LNumber(
-                            value: 3
-                        )
-                    )
-                )
-            )
-        )
-    )
-    10: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_11
-                )
-                value: Expr_BinaryOp_BooleanAnd(
-                    left: Scalar_LNumber(
-                        value: 1
-                    )
-                    right: Scalar_LNumber(
-                        value: 0
-                    )
-                )
-            )
-        )
-    )
-    11: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_12
-                )
-                value: Expr_BinaryOp_LogicalAnd(
-                    left: Scalar_LNumber(
-                        value: 1
-                    )
-                    right: Scalar_LNumber(
-                        value: 1
-                    )
-                )
-            )
-        )
-    )
-    12: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_13
-                )
-                value: Expr_BinaryOp_BooleanOr(
-                    left: Scalar_LNumber(
-                        value: 0
-                    )
-                    right: Scalar_LNumber(
-                        value: 0
-                    )
-                )
-            )
-        )
-    )
-    13: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_14
-                )
-                value: Expr_BinaryOp_LogicalOr(
-                    left: Scalar_LNumber(
-                        value: 1
-                    )
-                    right: Scalar_LNumber(
-                        value: 0
-                    )
-                )
-            )
-        )
-    )
-    14: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_15
-                )
-                value: Expr_BinaryOp_LogicalXor(
-                    left: Scalar_LNumber(
-                        value: 1
-                    )
-                    right: Scalar_LNumber(
-                        value: 1
-                    )
-                )
-            )
-        )
-    )
-    15: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_16
-                )
-                value: Expr_BinaryOp_LogicalXor(
-                    left: Scalar_LNumber(
-                        value: 1
-                    )
-                    right: Scalar_LNumber(
-                        value: 0
-                    )
-                )
-            )
-        )
-    )
-    16: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_17
-                )
-                value: Expr_BinaryOp_Smaller(
-                    left: Scalar_LNumber(
-                        value: 1
-                    )
-                    right: Scalar_LNumber(
-                        value: 0
-                    )
-                )
-            )
-        )
-    )
-    17: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_18
-                )
-                value: Expr_BinaryOp_SmallerOrEqual(
-                    left: Scalar_LNumber(
-                        value: 0
-                    )
-                    right: Scalar_LNumber(
-                        value: 0
-                    )
-                )
-            )
-        )
-    )
-    18: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_19
-                )
-                value: Expr_BinaryOp_Greater(
-                    left: Scalar_LNumber(
-                        value: 1
-                    )
-                    right: Scalar_LNumber(
-                        value: 0
-                    )
-                )
-            )
-        )
-    )
-    19: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_20
-                )
-                value: Expr_BinaryOp_GreaterOrEqual(
-                    left: Scalar_LNumber(
-                        value: 1
-                    )
-                    right: Scalar_LNumber(
-                        value: 0
-                    )
-                )
-            )
-        )
-    )
-    20: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_21
-                )
-                value: Expr_BinaryOp_Identical(
-                    left: Scalar_LNumber(
-                        value: 1
-                    )
-                    right: Scalar_LNumber(
-                        value: 1
-                    )
-                )
-            )
-        )
-    )
-    21: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_22
-                )
-                value: Expr_BinaryOp_NotIdentical(
-                    left: Scalar_LNumber(
-                        value: 1
-                    )
-                    right: Scalar_LNumber(
-                        value: 1
-                    )
-                )
-            )
-        )
-    )
-    22: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_23
-                )
-                value: Expr_BinaryOp_NotEqual(
-                    left: Scalar_LNumber(
-                        value: 0
-                    )
-                    right: Scalar_String(
-                        value: 0
-                    )
-                )
-            )
-        )
-    )
-    23: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_24
-                )
-                value: Expr_BinaryOp_Equal(
-                    left: Scalar_LNumber(
-                        value: 1
-                    )
-                    right: Scalar_String(
-                        value: 1
-                    )
-                )
-            )
-        )
-    )
-    24: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_25
-                )
-                value: Expr_BinaryOp_Plus(
-                    left: Scalar_LNumber(
-                        value: 1
-                    )
-                    right: Expr_BinaryOp_Mul(
-                        left: Scalar_LNumber(
-                            value: 2
-                        )
-                        right: Scalar_LNumber(
-                            value: 3
-                        )
-                    )
-                )
-            )
-        )
-    )
-    25: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_26
-                )
-                value: Expr_BinaryOp_Plus(
-                    left: Expr_BinaryOp_Plus(
-                        left: Scalar_String(
-                            value: 1
-                        )
-                        right: Scalar_LNumber(
-                            value: 2
-                        )
-                    )
-                    right: Scalar_String(
-                        value: 3
-                    )
-                )
-            )
-        )
-    )
-    26: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_27
-                )
-                value: Expr_BinaryOp_Pow(
-                    left: Scalar_LNumber(
-                        value: 2
-                    )
-                    right: Scalar_LNumber(
-                        value: 3
-                    )
-                )
-            )
-        )
-    )
-    27: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_28
-                )
-                value: Expr_ArrayDimFetch(
-                    var: Expr_Array(
-                        items: array(
-                            0: Expr_ArrayItem(
-                                key: null
-                                value: Scalar_LNumber(
-                                    value: 1
-                                )
-                                byRef: false
-                                unpack: false
-                            )
-                            1: Expr_ArrayItem(
-                                key: null
-                                value: Scalar_LNumber(
-                                    value: 2
-                                )
-                                byRef: false
-                                unpack: false
-                            )
-                            2: Expr_ArrayItem(
-                                key: null
-                                value: Scalar_LNumber(
-                                    value: 3
-                                )
-                                byRef: false
-                                unpack: false
-                            )
-                        )
-                    )
-                    dim: Scalar_LNumber(
-                        value: 1
-                    )
-                )
-            )
-        )
-    )
-    28: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_29
-                )
-                value: Expr_BinaryOp_Minus(
-                    left: Scalar_LNumber(
-                        value: 12
-                    )
-                    right: Scalar_LNumber(
-                        value: 13
-                    )
-                )
-            )
-        )
-    )
-    29: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_30
-                )
-                value: Expr_BinaryOp_BitwiseXor(
-                    left: Scalar_LNumber(
-                        value: 12
-                    )
-                    right: Scalar_LNumber(
-                        value: 13
-                    )
-                )
-            )
-        )
-    )
-    30: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_31
-                )
-                value: Expr_BinaryOp_BitwiseAnd(
-                    left: Scalar_LNumber(
-                        value: 12
-                    )
-                    right: Scalar_LNumber(
-                        value: 13
-                    )
-                )
-            )
-        )
-    )
-    31: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_32
-                )
-                value: Expr_BinaryOp_BitwiseOr(
-                    left: Scalar_LNumber(
-                        value: 12
-                    )
-                    right: Scalar_LNumber(
-                        value: 13
-                    )
-                )
-            )
-        )
-    )
-    32: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_33
-                )
-                value: Expr_BinaryOp_Mod(
-                    left: Scalar_LNumber(
-                        value: 12
-                    )
-                    right: Scalar_LNumber(
-                        value: 3
-                    )
-                )
-            )
-        )
-    )
-    33: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_34
-                )
-                value: Expr_BinaryOp_ShiftRight(
-                    left: Scalar_LNumber(
-                        value: 100
-                    )
-                    right: Scalar_LNumber(
-                        value: 4
-                    )
-                )
-            )
-        )
-    )
-    34: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_35
-                )
-                value: Expr_BooleanNot(
-                    expr: Expr_ConstFetch(
-                        name: Name(
-                            parts: array(
-                                0: false
-                            )
-                        )
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/errorSuppress.test b/vendor/nikic/php-parser/test/code/parser/expr/errorSuppress.test
deleted file mode 100644
index 7f099988ab..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/errorSuppress.test
+++ /dev/null
@@ -1,14 +0,0 @@
-Error suppression
------
-<?php
-@$a;
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_ErrorSuppress(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/exit.test b/vendor/nikic/php-parser/test/code/parser/expr/exit.test
deleted file mode 100644
index c880921f30..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/exit.test
+++ /dev/null
@@ -1,46 +0,0 @@
-Exit
------
-<?php
-exit;
-exit();
-exit('Die!');
-die;
-die();
-die('Exit!');
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Exit(
-            expr: null
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Exit(
-            expr: null
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Exit(
-            expr: Scalar_String(
-                value: Die!
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_Exit(
-            expr: null
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_Exit(
-            expr: null
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_Exit(
-            expr: Scalar_String(
-                value: Exit!
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/args.test b/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/args.test
deleted file mode 100644
index 24ca03105d..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/args.test
+++ /dev/null
@@ -1,109 +0,0 @@
-Arguments
------
-<?php
-
-f();
-f($a);
-f($a, $b);
-f(&$a);
-f($a, ...$b);
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: f
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: f
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Expr_Variable(
-                        name: a
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: f
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Expr_Variable(
-                        name: a
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                1: Arg(
-                    value: Expr_Variable(
-                        name: b
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: f
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Expr_Variable(
-                        name: a
-                    )
-                    byRef: true
-                    unpack: false
-                )
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: f
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Expr_Variable(
-                        name: a
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                1: Arg(
-                    value: Expr_Variable(
-                        name: b
-                    )
-                    byRef: false
-                    unpack: true
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/constFetch.test b/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/constFetch.test
deleted file mode 100644
index d00084bafa..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/constFetch.test
+++ /dev/null
@@ -1,43 +0,0 @@
-Constant fetches
------
-<?php
-
-A;
-A::B;
-A::class;
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_ConstFetch(
-            name: Name(
-                parts: array(
-                    0: A
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_ClassConstFetch(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-            )
-            name: Identifier(
-                name: B
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_ClassConstFetch(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-            )
-            name: Identifier(
-                name: class
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/constantDeref.test b/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/constantDeref.test
deleted file mode 100644
index 557532f1b7..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/constantDeref.test
+++ /dev/null
@@ -1,265 +0,0 @@
-Array/string dereferencing
------
-<?php
-
-"abc"[2];
-"abc"[2][0][0];
-
-[1, 2, 3][2];
-[1, 2, 3][2][0][0];
-
-array(1, 2, 3)[2];
-array(1, 2, 3)[2][0][0];
-
-FOO[0];
-Foo::BAR[1];
-$foo::BAR[2][1][0];
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Scalar_String(
-                value: abc
-            )
-            dim: Scalar_LNumber(
-                value: 2
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_ArrayDimFetch(
-                var: Expr_ArrayDimFetch(
-                    var: Scalar_String(
-                        value: abc
-                    )
-                    dim: Scalar_LNumber(
-                        value: 2
-                    )
-                )
-                dim: Scalar_LNumber(
-                    value: 0
-                )
-            )
-            dim: Scalar_LNumber(
-                value: 0
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_Array(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: null
-                        value: Scalar_LNumber(
-                            value: 1
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    1: Expr_ArrayItem(
-                        key: null
-                        value: Scalar_LNumber(
-                            value: 2
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    2: Expr_ArrayItem(
-                        key: null
-                        value: Scalar_LNumber(
-                            value: 3
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            dim: Scalar_LNumber(
-                value: 2
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_ArrayDimFetch(
-                var: Expr_ArrayDimFetch(
-                    var: Expr_Array(
-                        items: array(
-                            0: Expr_ArrayItem(
-                                key: null
-                                value: Scalar_LNumber(
-                                    value: 1
-                                )
-                                byRef: false
-                                unpack: false
-                            )
-                            1: Expr_ArrayItem(
-                                key: null
-                                value: Scalar_LNumber(
-                                    value: 2
-                                )
-                                byRef: false
-                                unpack: false
-                            )
-                            2: Expr_ArrayItem(
-                                key: null
-                                value: Scalar_LNumber(
-                                    value: 3
-                                )
-                                byRef: false
-                                unpack: false
-                            )
-                        )
-                    )
-                    dim: Scalar_LNumber(
-                        value: 2
-                    )
-                )
-                dim: Scalar_LNumber(
-                    value: 0
-                )
-            )
-            dim: Scalar_LNumber(
-                value: 0
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_Array(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: null
-                        value: Scalar_LNumber(
-                            value: 1
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    1: Expr_ArrayItem(
-                        key: null
-                        value: Scalar_LNumber(
-                            value: 2
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    2: Expr_ArrayItem(
-                        key: null
-                        value: Scalar_LNumber(
-                            value: 3
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            dim: Scalar_LNumber(
-                value: 2
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_ArrayDimFetch(
-                var: Expr_ArrayDimFetch(
-                    var: Expr_Array(
-                        items: array(
-                            0: Expr_ArrayItem(
-                                key: null
-                                value: Scalar_LNumber(
-                                    value: 1
-                                )
-                                byRef: false
-                                unpack: false
-                            )
-                            1: Expr_ArrayItem(
-                                key: null
-                                value: Scalar_LNumber(
-                                    value: 2
-                                )
-                                byRef: false
-                                unpack: false
-                            )
-                            2: Expr_ArrayItem(
-                                key: null
-                                value: Scalar_LNumber(
-                                    value: 3
-                                )
-                                byRef: false
-                                unpack: false
-                            )
-                        )
-                    )
-                    dim: Scalar_LNumber(
-                        value: 2
-                    )
-                )
-                dim: Scalar_LNumber(
-                    value: 0
-                )
-            )
-            dim: Scalar_LNumber(
-                value: 0
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_ConstFetch(
-                name: Name(
-                    parts: array(
-                        0: FOO
-                    )
-                )
-            )
-            dim: Scalar_LNumber(
-                value: 0
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_ClassConstFetch(
-                class: Name(
-                    parts: array(
-                        0: Foo
-                    )
-                )
-                name: Identifier(
-                    name: BAR
-                )
-            )
-            dim: Scalar_LNumber(
-                value: 1
-            )
-        )
-    )
-    8: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_ArrayDimFetch(
-                var: Expr_ArrayDimFetch(
-                    var: Expr_ClassConstFetch(
-                        class: Expr_Variable(
-                            name: foo
-                        )
-                        name: Identifier(
-                            name: BAR
-                        )
-                    )
-                    dim: Scalar_LNumber(
-                        value: 2
-                    )
-                )
-                dim: Scalar_LNumber(
-                    value: 1
-                )
-            )
-            dim: Scalar_LNumber(
-                value: 0
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/funcCall.test b/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/funcCall.test
deleted file mode 100644
index 4a82651403..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/funcCall.test
+++ /dev/null
@@ -1,158 +0,0 @@
-Function calls
------
-<?php
-
-// function name variations
-a();
-$a();
-${'a'}();
-$$a();
-$$$a();
-$a['b']();
-$a{'b'}();
-$a->b['c']();
-
-// array dereferencing
-a()['b'];
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: a
-                )
-                comments: array(
-                    0: // function name variations
-                )
-            )
-            args: array(
-            )
-            comments: array(
-                0: // function name variations
-            )
-        )
-        comments: array(
-            0: // function name variations
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_Variable(
-                name: a
-            )
-            args: array(
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_Variable(
-                name: Scalar_String(
-                    value: a
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_Variable(
-                name: Expr_Variable(
-                    name: a
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_Variable(
-                name: Expr_Variable(
-                    name: Expr_Variable(
-                        name: a
-                    )
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_ArrayDimFetch(
-                var: Expr_Variable(
-                    name: a
-                )
-                dim: Scalar_String(
-                    value: b
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_ArrayDimFetch(
-                var: Expr_Variable(
-                    name: a
-                )
-                dim: Scalar_String(
-                    value: b
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_ArrayDimFetch(
-                var: Expr_PropertyFetch(
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    name: Identifier(
-                        name: b
-                    )
-                )
-                dim: Scalar_String(
-                    value: c
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    8: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_FuncCall(
-                name: Name(
-                    parts: array(
-                        0: a
-                    )
-                    comments: array(
-                        0: // array dereferencing
-                    )
-                )
-                args: array(
-                )
-                comments: array(
-                    0: // array dereferencing
-                )
-            )
-            dim: Scalar_String(
-                value: b
-            )
-            comments: array(
-                0: // array dereferencing
-            )
-        )
-        comments: array(
-            0: // array dereferencing
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/newDeref.test b/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/newDeref.test
deleted file mode 100644
index a4b7a7240b..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/newDeref.test
+++ /dev/null
@@ -1,82 +0,0 @@
-New expression dereferencing
------
-<?php
-
-(new A)->b;
-(new A)->b();
-(new A)['b'];
-(new A)['b']['c'];
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_PropertyFetch(
-            var: Expr_New(
-                class: Name(
-                    parts: array(
-                        0: A
-                    )
-                )
-                args: array(
-                )
-            )
-            name: Identifier(
-                name: b
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_MethodCall(
-            var: Expr_New(
-                class: Name(
-                    parts: array(
-                        0: A
-                    )
-                )
-                args: array(
-                )
-            )
-            name: Identifier(
-                name: b
-            )
-            args: array(
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_New(
-                class: Name(
-                    parts: array(
-                        0: A
-                    )
-                )
-                args: array(
-                )
-            )
-            dim: Scalar_String(
-                value: b
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_ArrayDimFetch(
-                var: Expr_New(
-                    class: Name(
-                        parts: array(
-                            0: A
-                        )
-                    )
-                    args: array(
-                    )
-                )
-                dim: Scalar_String(
-                    value: b
-                )
-            )
-            dim: Scalar_String(
-                value: c
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/objectAccess.test b/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/objectAccess.test
deleted file mode 100644
index 2d1808b058..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/objectAccess.test
+++ /dev/null
@@ -1,184 +0,0 @@
-Object access
------
-<?php
-
-// property fetch variations
-$a->b;
-$a->b['c'];
-$a->b{'c'};
-
-// method call variations
-$a->b();
-$a->{'b'}();
-$a->$b();
-$a->$b['c']();
-
-// array dereferencing
-$a->b()['c'];
-$a->b(){'c'}; // invalid PHP: drop Support?
------
-!!php5
-array(
-    0: Stmt_Expression(
-        expr: Expr_PropertyFetch(
-            var: Expr_Variable(
-                name: a
-                comments: array(
-                    0: // property fetch variations
-                )
-            )
-            name: Identifier(
-                name: b
-            )
-            comments: array(
-                0: // property fetch variations
-            )
-        )
-        comments: array(
-            0: // property fetch variations
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_PropertyFetch(
-                var: Expr_Variable(
-                    name: a
-                )
-                name: Identifier(
-                    name: b
-                )
-            )
-            dim: Scalar_String(
-                value: c
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_PropertyFetch(
-                var: Expr_Variable(
-                    name: a
-                )
-                name: Identifier(
-                    name: b
-                )
-            )
-            dim: Scalar_String(
-                value: c
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_MethodCall(
-            var: Expr_Variable(
-                name: a
-                comments: array(
-                    0: // method call variations
-                )
-            )
-            name: Identifier(
-                name: b
-            )
-            args: array(
-            )
-            comments: array(
-                0: // method call variations
-            )
-        )
-        comments: array(
-            0: // method call variations
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_MethodCall(
-            var: Expr_Variable(
-                name: a
-            )
-            name: Scalar_String(
-                value: b
-            )
-            args: array(
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_MethodCall(
-            var: Expr_Variable(
-                name: a
-            )
-            name: Expr_Variable(
-                name: b
-            )
-            args: array(
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_MethodCall(
-            var: Expr_Variable(
-                name: a
-            )
-            name: Expr_ArrayDimFetch(
-                var: Expr_Variable(
-                    name: b
-                )
-                dim: Scalar_String(
-                    value: c
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_MethodCall(
-                var: Expr_Variable(
-                    name: a
-                    comments: array(
-                        0: // array dereferencing
-                    )
-                )
-                name: Identifier(
-                    name: b
-                )
-                args: array(
-                )
-                comments: array(
-                    0: // array dereferencing
-                )
-            )
-            dim: Scalar_String(
-                value: c
-            )
-            comments: array(
-                0: // array dereferencing
-            )
-        )
-        comments: array(
-            0: // array dereferencing
-        )
-    )
-    8: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_MethodCall(
-                var: Expr_Variable(
-                    name: a
-                )
-                name: Identifier(
-                    name: b
-                )
-                args: array(
-                )
-            )
-            dim: Scalar_String(
-                value: c
-            )
-        )
-    )
-    9: Stmt_Nop(
-        comments: array(
-            0: // invalid PHP: drop Support?
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/simpleArrayAccess.test b/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/simpleArrayAccess.test
deleted file mode 100644
index 133771b75d..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/simpleArrayAccess.test
+++ /dev/null
@@ -1,72 +0,0 @@
-Simple array access
------
-<?php
-
-$a['b'];
-$a['b']['c'];
-$a[] = $b;
-$a{'b'};
-${$a}['b'];
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_Variable(
-                name: a
-            )
-            dim: Scalar_String(
-                value: b
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_ArrayDimFetch(
-                var: Expr_Variable(
-                    name: a
-                )
-                dim: Scalar_String(
-                    value: b
-                )
-            )
-            dim: Scalar_String(
-                value: c
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_ArrayDimFetch(
-                var: Expr_Variable(
-                    name: a
-                )
-                dim: null
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_Variable(
-                name: a
-            )
-            dim: Scalar_String(
-                value: b
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_Variable(
-                name: Expr_Variable(
-                    name: a
-                )
-            )
-            dim: Scalar_String(
-                value: b
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/staticCall.test b/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/staticCall.test
deleted file mode 100644
index a34a3e4bcd..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/staticCall.test
+++ /dev/null
@@ -1,214 +0,0 @@
-Static calls
------
-<?php
-
-// method name variations
-A::b();
-A::{'b'}();
-A::$b();
-A::$b['c']();
-A::$b['c']['d']();
-
-// array dereferencing
-A::b()['c'];
-
-// class name variations
-static::b();
-$a::b();
-${'a'}::b();
-$a['b']::c();
------
-!!php5
-array(
-    0: Stmt_Expression(
-        expr: Expr_StaticCall(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-                comments: array(
-                    0: // method name variations
-                )
-            )
-            name: Identifier(
-                name: b
-            )
-            args: array(
-            )
-            comments: array(
-                0: // method name variations
-            )
-        )
-        comments: array(
-            0: // method name variations
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_StaticCall(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-            )
-            name: Scalar_String(
-                value: b
-            )
-            args: array(
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_StaticCall(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-            )
-            name: Expr_Variable(
-                name: b
-            )
-            args: array(
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_StaticCall(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-            )
-            name: Expr_ArrayDimFetch(
-                var: Expr_Variable(
-                    name: b
-                )
-                dim: Scalar_String(
-                    value: c
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_StaticCall(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-            )
-            name: Expr_ArrayDimFetch(
-                var: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: b
-                    )
-                    dim: Scalar_String(
-                        value: c
-                    )
-                )
-                dim: Scalar_String(
-                    value: d
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_StaticCall(
-                class: Name(
-                    parts: array(
-                        0: A
-                    )
-                    comments: array(
-                        0: // array dereferencing
-                    )
-                )
-                name: Identifier(
-                    name: b
-                )
-                args: array(
-                )
-                comments: array(
-                    0: // array dereferencing
-                )
-            )
-            dim: Scalar_String(
-                value: c
-            )
-            comments: array(
-                0: // array dereferencing
-            )
-        )
-        comments: array(
-            0: // array dereferencing
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_StaticCall(
-            class: Name(
-                parts: array(
-                    0: static
-                )
-                comments: array(
-                    0: // class name variations
-                )
-            )
-            name: Identifier(
-                name: b
-            )
-            args: array(
-            )
-            comments: array(
-                0: // class name variations
-            )
-        )
-        comments: array(
-            0: // class name variations
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_StaticCall(
-            class: Expr_Variable(
-                name: a
-            )
-            name: Identifier(
-                name: b
-            )
-            args: array(
-            )
-        )
-    )
-    8: Stmt_Expression(
-        expr: Expr_StaticCall(
-            class: Expr_Variable(
-                name: Scalar_String(
-                    value: a
-                )
-            )
-            name: Identifier(
-                name: b
-            )
-            args: array(
-            )
-        )
-    )
-    9: Stmt_Expression(
-        expr: Expr_StaticCall(
-            class: Expr_ArrayDimFetch(
-                var: Expr_Variable(
-                    name: a
-                )
-                dim: Scalar_String(
-                    value: b
-                )
-            )
-            name: Identifier(
-                name: c
-            )
-            args: array(
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/staticPropertyFetch.test b/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/staticPropertyFetch.test
deleted file mode 100644
index a1de3c8c12..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/staticPropertyFetch.test
+++ /dev/null
@@ -1,113 +0,0 @@
-Static property fetches
------
-<?php
-
-// property name variations
-A::$b;
-A::$$b;
-A::${'b'};
-
-// array access
-A::$b['c'];
-A::$b{'c'};
-
-// class name variations can be found in staticCall.test
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_StaticPropertyFetch(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-                comments: array(
-                    0: // property name variations
-                )
-            )
-            name: VarLikeIdentifier(
-                name: b
-            )
-            comments: array(
-                0: // property name variations
-            )
-        )
-        comments: array(
-            0: // property name variations
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_StaticPropertyFetch(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-            )
-            name: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_StaticPropertyFetch(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-            )
-            name: Scalar_String(
-                value: b
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_StaticPropertyFetch(
-                class: Name(
-                    parts: array(
-                        0: A
-                    )
-                    comments: array(
-                        0: // array access
-                    )
-                )
-                name: VarLikeIdentifier(
-                    name: b
-                )
-                comments: array(
-                    0: // array access
-                )
-            )
-            dim: Scalar_String(
-                value: c
-            )
-            comments: array(
-                0: // array access
-            )
-        )
-        comments: array(
-            0: // array access
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_StaticPropertyFetch(
-                class: Name(
-                    parts: array(
-                        0: A
-                    )
-                )
-                name: VarLikeIdentifier(
-                    name: b
-                )
-            )
-            dim: Scalar_String(
-                value: c
-            )
-        )
-    )
-    5: Stmt_Nop(
-        comments: array(
-            0: // class name variations can be found in staticCall.test
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/includeAndEval.test b/vendor/nikic/php-parser/test/code/parser/expr/includeAndEval.test
deleted file mode 100644
index 0ab189081a..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/includeAndEval.test
+++ /dev/null
@@ -1,50 +0,0 @@
-Include and eval
------
-<?php
-include 'A.php';
-include_once 'A.php';
-require 'A.php';
-require_once 'A.php';
-eval('A');
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Include(
-            expr: Scalar_String(
-                value: A.php
-            )
-            type: TYPE_INCLUDE (1)
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Include(
-            expr: Scalar_String(
-                value: A.php
-            )
-            type: TYPE_INCLUDE_ONCE (2)
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Include(
-            expr: Scalar_String(
-                value: A.php
-            )
-            type: TYPE_REQUIRE (3)
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_Include(
-            expr: Scalar_String(
-                value: A.php
-            )
-            type: TYPE_REQUIRE_ONCE (4)
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_Eval(
-            expr: Scalar_String(
-                value: A
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/issetAndEmpty.test b/vendor/nikic/php-parser/test/code/parser/expr/issetAndEmpty.test
deleted file mode 100644
index 989b3a5547..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/issetAndEmpty.test
+++ /dev/null
@@ -1,88 +0,0 @@
-isset() and empty()
------
-<?php
-isset($a);
-isset($a, $b, $c);
-
-empty($a);
-empty(foo());
-empty(array(1, 2, 3));
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Isset(
-            vars: array(
-                0: Expr_Variable(
-                    name: a
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Isset(
-            vars: array(
-                0: Expr_Variable(
-                    name: a
-                )
-                1: Expr_Variable(
-                    name: b
-                )
-                2: Expr_Variable(
-                    name: c
-                )
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Empty(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_Empty(
-            expr: Expr_FuncCall(
-                name: Name(
-                    parts: array(
-                        0: foo
-                    )
-                )
-                args: array(
-                )
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_Empty(
-            expr: Expr_Array(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: null
-                        value: Scalar_LNumber(
-                            value: 1
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    1: Expr_ArrayItem(
-                        key: null
-                        value: Scalar_LNumber(
-                            value: 2
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    2: Expr_ArrayItem(
-                        key: null
-                        value: Scalar_LNumber(
-                            value: 3
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/listReferences.test b/vendor/nikic/php-parser/test/code/parser/expr/listReferences.test
deleted file mode 100644
index 436d45ffa3..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/listReferences.test
+++ /dev/null
@@ -1,92 +0,0 @@
-List reference assignments (PHP 7.3)
------
-<?php
-
-list(&$v) = $x;
-list('k' => &$v) = $x;
-[&$v] = $x;
-['k' => &$v] = $x;
------
-!!php7
-array(
-    0: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_List(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: v
-                        )
-                        byRef: true
-                        unpack: false
-                    )
-                )
-            )
-            expr: Expr_Variable(
-                name: x
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_List(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: Scalar_String(
-                            value: k
-                        )
-                        value: Expr_Variable(
-                            name: v
-                        )
-                        byRef: true
-                        unpack: false
-                    )
-                )
-            )
-            expr: Expr_Variable(
-                name: x
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Array(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: v
-                        )
-                        byRef: true
-                        unpack: false
-                    )
-                )
-            )
-            expr: Expr_Variable(
-                name: x
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Array(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: Scalar_String(
-                            value: k
-                        )
-                        value: Expr_Variable(
-                            name: v
-                        )
-                        byRef: true
-                        unpack: false
-                    )
-                )
-            )
-            expr: Expr_Variable(
-                name: x
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/listWithKeys.test b/vendor/nikic/php-parser/test/code/parser/expr/listWithKeys.test
deleted file mode 100644
index e2eeedf0d9..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/listWithKeys.test
+++ /dev/null
@@ -1,84 +0,0 @@
-List destructing with keys
------
-<?php
-
-list('a' => $b) = ['a' => 'b'];
-list('a' => list($b => $c), 'd' => $e) = $x;
------
-!!php7
-array(
-    0: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_List(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: Scalar_String(
-                            value: a
-                        )
-                        value: Expr_Variable(
-                            name: b
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            expr: Expr_Array(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: Scalar_String(
-                            value: a
-                        )
-                        value: Scalar_String(
-                            value: b
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_List(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: Scalar_String(
-                            value: a
-                        )
-                        value: Expr_List(
-                            items: array(
-                                0: Expr_ArrayItem(
-                                    key: Expr_Variable(
-                                        name: b
-                                    )
-                                    value: Expr_Variable(
-                                        name: c
-                                    )
-                                    byRef: false
-                                    unpack: false
-                                )
-                            )
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    1: Expr_ArrayItem(
-                        key: Scalar_String(
-                            value: d
-                        )
-                        value: Expr_Variable(
-                            name: e
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            expr: Expr_Variable(
-                name: x
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/logic.test b/vendor/nikic/php-parser/test/code/parser/expr/logic.test
deleted file mode 100644
index 6b434565f6..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/logic.test
+++ /dev/null
@@ -1,190 +0,0 @@
-Logical operators
------
-<?php
-
-// boolean ops
-$a && $b;
-$a || $b;
-!$a;
-!!$a;
-
-// logical ops
-$a and $b;
-$a or $b;
-$a xor $b;
-
-// precedence
-$a && $b || $c && $d;
-$a && ($b || $c) && $d;
-
-$a = $b || $c;
-$a = $b or $c;
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_BinaryOp_BooleanAnd(
-            left: Expr_Variable(
-                name: a
-                comments: array(
-                    0: // boolean ops
-                )
-            )
-            right: Expr_Variable(
-                name: b
-            )
-            comments: array(
-                0: // boolean ops
-            )
-        )
-        comments: array(
-            0: // boolean ops
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_BinaryOp_BooleanOr(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_BooleanNot(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_BooleanNot(
-            expr: Expr_BooleanNot(
-                expr: Expr_Variable(
-                    name: a
-                )
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_BinaryOp_LogicalAnd(
-            left: Expr_Variable(
-                name: a
-                comments: array(
-                    0: // logical ops
-                )
-            )
-            right: Expr_Variable(
-                name: b
-            )
-            comments: array(
-                0: // logical ops
-            )
-        )
-        comments: array(
-            0: // logical ops
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_BinaryOp_LogicalOr(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_BinaryOp_LogicalXor(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_BinaryOp_BooleanOr(
-            left: Expr_BinaryOp_BooleanAnd(
-                left: Expr_Variable(
-                    name: a
-                    comments: array(
-                        0: // precedence
-                    )
-                )
-                right: Expr_Variable(
-                    name: b
-                )
-                comments: array(
-                    0: // precedence
-                )
-            )
-            right: Expr_BinaryOp_BooleanAnd(
-                left: Expr_Variable(
-                    name: c
-                )
-                right: Expr_Variable(
-                    name: d
-                )
-            )
-            comments: array(
-                0: // precedence
-            )
-        )
-        comments: array(
-            0: // precedence
-        )
-    )
-    8: Stmt_Expression(
-        expr: Expr_BinaryOp_BooleanAnd(
-            left: Expr_BinaryOp_BooleanAnd(
-                left: Expr_Variable(
-                    name: a
-                )
-                right: Expr_BinaryOp_BooleanOr(
-                    left: Expr_Variable(
-                        name: b
-                    )
-                    right: Expr_Variable(
-                        name: c
-                    )
-                )
-            )
-            right: Expr_Variable(
-                name: d
-            )
-        )
-    )
-    9: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Expr_BinaryOp_BooleanOr(
-                left: Expr_Variable(
-                    name: b
-                )
-                right: Expr_Variable(
-                    name: c
-                )
-            )
-        )
-    )
-    10: Stmt_Expression(
-        expr: Expr_BinaryOp_LogicalOr(
-            left: Expr_Assign(
-                var: Expr_Variable(
-                    name: a
-                )
-                expr: Expr_Variable(
-                    name: b
-                )
-            )
-            right: Expr_Variable(
-                name: c
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/math.test b/vendor/nikic/php-parser/test/code/parser/expr/math.test
deleted file mode 100644
index 8399400c06..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/math.test
+++ /dev/null
@@ -1,313 +0,0 @@
-Mathematical operators
------
-<?php
-
-// unary ops
-~$a;
-+$a;
--$a;
-
-// binary ops
-$a & $b;
-$a | $b;
-$a ^ $b;
-$a . $b;
-$a / $b;
-$a - $b;
-$a % $b;
-$a * $b;
-$a + $b;
-$a << $b;
-$a >> $b;
-$a ** $b;
-
-// associativity
-$a * $b * $c;
-$a * ($b * $c);
-
-// precedence
-$a + $b * $c;
-($a + $b) * $c;
-
-// pow is special
-$a ** $b ** $c;
-($a ** $b) ** $c;
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_BitwiseNot(
-            expr: Expr_Variable(
-                name: a
-            )
-            comments: array(
-                0: // unary ops
-            )
-        )
-        comments: array(
-            0: // unary ops
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_UnaryPlus(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_UnaryMinus(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_BinaryOp_BitwiseAnd(
-            left: Expr_Variable(
-                name: a
-                comments: array(
-                    0: // binary ops
-                )
-            )
-            right: Expr_Variable(
-                name: b
-            )
-            comments: array(
-                0: // binary ops
-            )
-        )
-        comments: array(
-            0: // binary ops
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_BinaryOp_BitwiseOr(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_BinaryOp_BitwiseXor(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_BinaryOp_Concat(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_BinaryOp_Div(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    8: Stmt_Expression(
-        expr: Expr_BinaryOp_Minus(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    9: Stmt_Expression(
-        expr: Expr_BinaryOp_Mod(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    10: Stmt_Expression(
-        expr: Expr_BinaryOp_Mul(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    11: Stmt_Expression(
-        expr: Expr_BinaryOp_Plus(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    12: Stmt_Expression(
-        expr: Expr_BinaryOp_ShiftLeft(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    13: Stmt_Expression(
-        expr: Expr_BinaryOp_ShiftRight(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    14: Stmt_Expression(
-        expr: Expr_BinaryOp_Pow(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    15: Stmt_Expression(
-        expr: Expr_BinaryOp_Mul(
-            left: Expr_BinaryOp_Mul(
-                left: Expr_Variable(
-                    name: a
-                    comments: array(
-                        0: // associativity
-                    )
-                )
-                right: Expr_Variable(
-                    name: b
-                )
-                comments: array(
-                    0: // associativity
-                )
-            )
-            right: Expr_Variable(
-                name: c
-            )
-            comments: array(
-                0: // associativity
-            )
-        )
-        comments: array(
-            0: // associativity
-        )
-    )
-    16: Stmt_Expression(
-        expr: Expr_BinaryOp_Mul(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_BinaryOp_Mul(
-                left: Expr_Variable(
-                    name: b
-                )
-                right: Expr_Variable(
-                    name: c
-                )
-            )
-        )
-    )
-    17: Stmt_Expression(
-        expr: Expr_BinaryOp_Plus(
-            left: Expr_Variable(
-                name: a
-                comments: array(
-                    0: // precedence
-                )
-            )
-            right: Expr_BinaryOp_Mul(
-                left: Expr_Variable(
-                    name: b
-                )
-                right: Expr_Variable(
-                    name: c
-                )
-            )
-            comments: array(
-                0: // precedence
-            )
-        )
-        comments: array(
-            0: // precedence
-        )
-    )
-    18: Stmt_Expression(
-        expr: Expr_BinaryOp_Mul(
-            left: Expr_BinaryOp_Plus(
-                left: Expr_Variable(
-                    name: a
-                )
-                right: Expr_Variable(
-                    name: b
-                )
-            )
-            right: Expr_Variable(
-                name: c
-            )
-        )
-    )
-    19: Stmt_Expression(
-        expr: Expr_BinaryOp_Pow(
-            left: Expr_Variable(
-                name: a
-                comments: array(
-                    0: // pow is special
-                )
-            )
-            right: Expr_BinaryOp_Pow(
-                left: Expr_Variable(
-                    name: b
-                )
-                right: Expr_Variable(
-                    name: c
-                )
-            )
-            comments: array(
-                0: // pow is special
-            )
-        )
-        comments: array(
-            0: // pow is special
-        )
-    )
-    20: Stmt_Expression(
-        expr: Expr_BinaryOp_Pow(
-            left: Expr_BinaryOp_Pow(
-                left: Expr_Variable(
-                    name: a
-                )
-                right: Expr_Variable(
-                    name: b
-                )
-            )
-            right: Expr_Variable(
-                name: c
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/new.test b/vendor/nikic/php-parser/test/code/parser/expr/new.test
deleted file mode 100644
index 2735bfe932..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/new.test
+++ /dev/null
@@ -1,187 +0,0 @@
-New
------
-<?php
-
-new A;
-new A($b);
-
-// class name variations
-new $a();
-new $a['b']();
-new A::$b();
-// DNCR object access
-new $a->b();
-new $a->b->c();
-new $a->b['c']();
-new $a->b{'c'}();
-
-// test regression introduces by new dereferencing syntax
-(new A);
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_New(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_New(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Expr_Variable(
-                        name: b
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_New(
-            class: Expr_Variable(
-                name: a
-            )
-            args: array(
-            )
-            comments: array(
-                0: // class name variations
-            )
-        )
-        comments: array(
-            0: // class name variations
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_New(
-            class: Expr_ArrayDimFetch(
-                var: Expr_Variable(
-                    name: a
-                )
-                dim: Scalar_String(
-                    value: b
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_New(
-            class: Expr_StaticPropertyFetch(
-                class: Name(
-                    parts: array(
-                        0: A
-                    )
-                )
-                name: VarLikeIdentifier(
-                    name: b
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_New(
-            class: Expr_PropertyFetch(
-                var: Expr_Variable(
-                    name: a
-                )
-                name: Identifier(
-                    name: b
-                )
-            )
-            args: array(
-            )
-            comments: array(
-                0: // DNCR object access
-            )
-        )
-        comments: array(
-            0: // DNCR object access
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_New(
-            class: Expr_PropertyFetch(
-                var: Expr_PropertyFetch(
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    name: Identifier(
-                        name: b
-                    )
-                )
-                name: Identifier(
-                    name: c
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_New(
-            class: Expr_ArrayDimFetch(
-                var: Expr_PropertyFetch(
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    name: Identifier(
-                        name: b
-                    )
-                )
-                dim: Scalar_String(
-                    value: c
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    8: Stmt_Expression(
-        expr: Expr_New(
-            class: Expr_ArrayDimFetch(
-                var: Expr_PropertyFetch(
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    name: Identifier(
-                        name: b
-                    )
-                )
-                dim: Scalar_String(
-                    value: c
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    9: Stmt_Expression(
-        expr: Expr_New(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-            )
-            args: array(
-            )
-        )
-        comments: array(
-            0: // test regression introduces by new dereferencing syntax
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/newWithoutClass.test b/vendor/nikic/php-parser/test/code/parser/expr/newWithoutClass.test
deleted file mode 100644
index 318f9301f9..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/newWithoutClass.test
+++ /dev/null
@@ -1,25 +0,0 @@
-New without a class
------
-<?php
-new;
------
-!!php5
-Syntax error, unexpected ';' from 2:4 to 2:4
-array(
-)
------
-<?php
-new;
------
-!!php7
-Syntax error, unexpected ';' from 2:4 to 2:4
-array(
-    0: Stmt_Expression(
-        expr: Expr_New(
-            class: Expr_Error(
-            )
-            args: array(
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/print.test b/vendor/nikic/php-parser/test/code/parser/expr/print.test
deleted file mode 100644
index 84ed7775b1..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/print.test
+++ /dev/null
@@ -1,14 +0,0 @@
-Print
------
-<?php
-print $a;
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Print(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/shellExec.test b/vendor/nikic/php-parser/test/code/parser/expr/shellExec.test
deleted file mode 100644
index 115d9f0a36..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/shellExec.test
+++ /dev/null
@@ -1,56 +0,0 @@
-Shell execution
------
-<?php
-``;
-`test`;
-`test $A`;
-`test \``;
-`test \"`;
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_ShellExec(
-            parts: array(
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_ShellExec(
-            parts: array(
-                0: Scalar_EncapsedStringPart(
-                    value: test
-                )
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_ShellExec(
-            parts: array(
-                0: Scalar_EncapsedStringPart(
-                    value: test
-                )
-                1: Expr_Variable(
-                    name: A
-                )
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_ShellExec(
-            parts: array(
-                0: Scalar_EncapsedStringPart(
-                    value: test `
-                )
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_ShellExec(
-            parts: array(
-                0: Scalar_EncapsedStringPart(
-                    value: test \"
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/ternaryAndCoalesce.test b/vendor/nikic/php-parser/test/code/parser/expr/ternaryAndCoalesce.test
deleted file mode 100644
index ea1010caa1..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/ternaryAndCoalesce.test
+++ /dev/null
@@ -1,174 +0,0 @@
-Ternary operator
------
-<?php
-
-// ternary
-$a ? $b : $c;
-$a ?: $c;
-
-// precedence
-$a ? $b : $c ? $d : $e;
-$a ? $b : ($c ? $d : $e);
-
-// null coalesce
-$a ?? $b;
-$a ?? $b ?? $c;
-$a ?? $b ? $c : $d;
-$a && $b ?? $c;
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Ternary(
-            cond: Expr_Variable(
-                name: a
-                comments: array(
-                    0: // ternary
-                )
-            )
-            if: Expr_Variable(
-                name: b
-            )
-            else: Expr_Variable(
-                name: c
-            )
-            comments: array(
-                0: // ternary
-            )
-        )
-        comments: array(
-            0: // ternary
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Ternary(
-            cond: Expr_Variable(
-                name: a
-            )
-            if: null
-            else: Expr_Variable(
-                name: c
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Ternary(
-            cond: Expr_Ternary(
-                cond: Expr_Variable(
-                    name: a
-                    comments: array(
-                        0: // precedence
-                    )
-                )
-                if: Expr_Variable(
-                    name: b
-                )
-                else: Expr_Variable(
-                    name: c
-                )
-                comments: array(
-                    0: // precedence
-                )
-            )
-            if: Expr_Variable(
-                name: d
-            )
-            else: Expr_Variable(
-                name: e
-            )
-            comments: array(
-                0: // precedence
-            )
-        )
-        comments: array(
-            0: // precedence
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_Ternary(
-            cond: Expr_Variable(
-                name: a
-            )
-            if: Expr_Variable(
-                name: b
-            )
-            else: Expr_Ternary(
-                cond: Expr_Variable(
-                    name: c
-                )
-                if: Expr_Variable(
-                    name: d
-                )
-                else: Expr_Variable(
-                    name: e
-                )
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_BinaryOp_Coalesce(
-            left: Expr_Variable(
-                name: a
-                comments: array(
-                    0: // null coalesce
-                )
-            )
-            right: Expr_Variable(
-                name: b
-            )
-            comments: array(
-                0: // null coalesce
-            )
-        )
-        comments: array(
-            0: // null coalesce
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_BinaryOp_Coalesce(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_BinaryOp_Coalesce(
-                left: Expr_Variable(
-                    name: b
-                )
-                right: Expr_Variable(
-                    name: c
-                )
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_Ternary(
-            cond: Expr_BinaryOp_Coalesce(
-                left: Expr_Variable(
-                    name: a
-                )
-                right: Expr_Variable(
-                    name: b
-                )
-            )
-            if: Expr_Variable(
-                name: c
-            )
-            else: Expr_Variable(
-                name: d
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_BinaryOp_Coalesce(
-            left: Expr_BinaryOp_BooleanAnd(
-                left: Expr_Variable(
-                    name: a
-                )
-                right: Expr_Variable(
-                    name: b
-                )
-            )
-            right: Expr_Variable(
-                name: c
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/trailingCommas.test b/vendor/nikic/php-parser/test/code/parser/expr/trailingCommas.test
deleted file mode 100644
index 11092d9816..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/trailingCommas.test
+++ /dev/null
@@ -1,140 +0,0 @@
-PHP 7.3 trailing comma additions
------
-<?php
-
-foo($a, $b, );
-$foo->bar($a, $b, );
-Foo::bar($a, $b, );
-new Foo($a, $b, );
-unset($a, $b, );
-isset($a, $b, );
------
-!!php7
-array(
-    0: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: foo
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Expr_Variable(
-                        name: a
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                1: Arg(
-                    value: Expr_Variable(
-                        name: b
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_MethodCall(
-            var: Expr_Variable(
-                name: foo
-            )
-            name: Identifier(
-                name: bar
-            )
-            args: array(
-                0: Arg(
-                    value: Expr_Variable(
-                        name: a
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                1: Arg(
-                    value: Expr_Variable(
-                        name: b
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_StaticCall(
-            class: Name(
-                parts: array(
-                    0: Foo
-                )
-            )
-            name: Identifier(
-                name: bar
-            )
-            args: array(
-                0: Arg(
-                    value: Expr_Variable(
-                        name: a
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                1: Arg(
-                    value: Expr_Variable(
-                        name: b
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_New(
-            class: Name(
-                parts: array(
-                    0: Foo
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Expr_Variable(
-                        name: a
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                1: Arg(
-                    value: Expr_Variable(
-                        name: b
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    4: Stmt_Unset(
-        vars: array(
-            0: Expr_Variable(
-                name: a
-            )
-            1: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_Isset(
-            vars: array(
-                0: Expr_Variable(
-                    name: a
-                )
-                1: Expr_Variable(
-                    name: b
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/uvs/globalNonSimpleVarError.test b/vendor/nikic/php-parser/test/code/parser/expr/uvs/globalNonSimpleVarError.test
deleted file mode 100644
index 5ae4f958e2..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/uvs/globalNonSimpleVarError.test
+++ /dev/null
@@ -1,27 +0,0 @@
-Non-simple variables are forbidden in PHP 7
------
-<?php
-global $$foo->bar;
------
-!!php7
-Syntax error, unexpected T_OBJECT_OPERATOR, expecting ';' from 2:13 to 2:14
-array(
-    0: Stmt_Global(
-        vars: array(
-            0: Expr_Variable(
-                name: Expr_Variable(
-                    name: foo
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_ConstFetch(
-            name: Name(
-                parts: array(
-                    0: bar
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/uvs/indirectCall.test b/vendor/nikic/php-parser/test/code/parser/expr/uvs/indirectCall.test
deleted file mode 100644
index 39db60c035..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/uvs/indirectCall.test
+++ /dev/null
@@ -1,511 +0,0 @@
-UVS indirect calls
------
-<?php
-
-id('var_dump')(1);
-id('id')('var_dump')(2);
-id()()('var_dump')(4);
-id(['udef', 'id'])[1]()('var_dump')(5);
-(function($x) { return $x; })('id')('var_dump')(8);
-($f = function($x = null) use (&$f) {
-    return $x ?: $f;
-})()()()('var_dump')(9);
-[$obj, 'id']()('id')($id)('var_dump')(10);
-'id'()('id')('var_dump')(12);
-('i' . 'd')()('var_dump')(13);
-'\id'('var_dump')(14);
------
-!!php7
-array(
-    0: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_FuncCall(
-                name: Name(
-                    parts: array(
-                        0: id
-                    )
-                )
-                args: array(
-                    0: Arg(
-                        value: Scalar_String(
-                            value: var_dump
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Scalar_LNumber(
-                        value: 1
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_FuncCall(
-                name: Expr_FuncCall(
-                    name: Name(
-                        parts: array(
-                            0: id
-                        )
-                    )
-                    args: array(
-                        0: Arg(
-                            value: Scalar_String(
-                                value: id
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                    )
-                )
-                args: array(
-                    0: Arg(
-                        value: Scalar_String(
-                            value: var_dump
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Scalar_LNumber(
-                        value: 2
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_FuncCall(
-                name: Expr_FuncCall(
-                    name: Expr_FuncCall(
-                        name: Name(
-                            parts: array(
-                                0: id
-                            )
-                        )
-                        args: array(
-                        )
-                    )
-                    args: array(
-                    )
-                )
-                args: array(
-                    0: Arg(
-                        value: Scalar_String(
-                            value: var_dump
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Scalar_LNumber(
-                        value: 4
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_FuncCall(
-                name: Expr_FuncCall(
-                    name: Expr_ArrayDimFetch(
-                        var: Expr_FuncCall(
-                            name: Name(
-                                parts: array(
-                                    0: id
-                                )
-                            )
-                            args: array(
-                                0: Arg(
-                                    value: Expr_Array(
-                                        items: array(
-                                            0: Expr_ArrayItem(
-                                                key: null
-                                                value: Scalar_String(
-                                                    value: udef
-                                                )
-                                                byRef: false
-                                                unpack: false
-                                            )
-                                            1: Expr_ArrayItem(
-                                                key: null
-                                                value: Scalar_String(
-                                                    value: id
-                                                )
-                                                byRef: false
-                                                unpack: false
-                                            )
-                                        )
-                                    )
-                                    byRef: false
-                                    unpack: false
-                                )
-                            )
-                        )
-                        dim: Scalar_LNumber(
-                            value: 1
-                        )
-                    )
-                    args: array(
-                    )
-                )
-                args: array(
-                    0: Arg(
-                        value: Scalar_String(
-                            value: var_dump
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Scalar_LNumber(
-                        value: 5
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_FuncCall(
-                name: Expr_FuncCall(
-                    name: Expr_Closure(
-                        static: false
-                        byRef: false
-                        params: array(
-                            0: Param(
-                                type: null
-                                byRef: false
-                                variadic: false
-                                var: Expr_Variable(
-                                    name: x
-                                )
-                                default: null
-                            )
-                        )
-                        uses: array(
-                        )
-                        returnType: null
-                        stmts: array(
-                            0: Stmt_Return(
-                                expr: Expr_Variable(
-                                    name: x
-                                )
-                            )
-                        )
-                    )
-                    args: array(
-                        0: Arg(
-                            value: Scalar_String(
-                                value: id
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                    )
-                )
-                args: array(
-                    0: Arg(
-                        value: Scalar_String(
-                            value: var_dump
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Scalar_LNumber(
-                        value: 8
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_FuncCall(
-                name: Expr_FuncCall(
-                    name: Expr_FuncCall(
-                        name: Expr_FuncCall(
-                            name: Expr_Assign(
-                                var: Expr_Variable(
-                                    name: f
-                                )
-                                expr: Expr_Closure(
-                                    static: false
-                                    byRef: false
-                                    params: array(
-                                        0: Param(
-                                            type: null
-                                            byRef: false
-                                            variadic: false
-                                            var: Expr_Variable(
-                                                name: x
-                                            )
-                                            default: Expr_ConstFetch(
-                                                name: Name(
-                                                    parts: array(
-                                                        0: null
-                                                    )
-                                                )
-                                            )
-                                        )
-                                    )
-                                    uses: array(
-                                        0: Expr_ClosureUse(
-                                            var: Expr_Variable(
-                                                name: f
-                                            )
-                                            byRef: true
-                                        )
-                                    )
-                                    returnType: null
-                                    stmts: array(
-                                        0: Stmt_Return(
-                                            expr: Expr_Ternary(
-                                                cond: Expr_Variable(
-                                                    name: x
-                                                )
-                                                if: null
-                                                else: Expr_Variable(
-                                                    name: f
-                                                )
-                                            )
-                                        )
-                                    )
-                                )
-                            )
-                            args: array(
-                            )
-                        )
-                        args: array(
-                        )
-                    )
-                    args: array(
-                    )
-                )
-                args: array(
-                    0: Arg(
-                        value: Scalar_String(
-                            value: var_dump
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Scalar_LNumber(
-                        value: 9
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_FuncCall(
-                name: Expr_FuncCall(
-                    name: Expr_FuncCall(
-                        name: Expr_FuncCall(
-                            name: Expr_Array(
-                                items: array(
-                                    0: Expr_ArrayItem(
-                                        key: null
-                                        value: Expr_Variable(
-                                            name: obj
-                                        )
-                                        byRef: false
-                                        unpack: false
-                                    )
-                                    1: Expr_ArrayItem(
-                                        key: null
-                                        value: Scalar_String(
-                                            value: id
-                                        )
-                                        byRef: false
-                                        unpack: false
-                                    )
-                                )
-                            )
-                            args: array(
-                            )
-                        )
-                        args: array(
-                            0: Arg(
-                                value: Scalar_String(
-                                    value: id
-                                )
-                                byRef: false
-                                unpack: false
-                            )
-                        )
-                    )
-                    args: array(
-                        0: Arg(
-                            value: Expr_Variable(
-                                name: id
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                    )
-                )
-                args: array(
-                    0: Arg(
-                        value: Scalar_String(
-                            value: var_dump
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Scalar_LNumber(
-                        value: 10
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_FuncCall(
-                name: Expr_FuncCall(
-                    name: Expr_FuncCall(
-                        name: Scalar_String(
-                            value: id
-                        )
-                        args: array(
-                        )
-                    )
-                    args: array(
-                        0: Arg(
-                            value: Scalar_String(
-                                value: id
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                    )
-                )
-                args: array(
-                    0: Arg(
-                        value: Scalar_String(
-                            value: var_dump
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Scalar_LNumber(
-                        value: 12
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    8: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_FuncCall(
-                name: Expr_FuncCall(
-                    name: Expr_BinaryOp_Concat(
-                        left: Scalar_String(
-                            value: i
-                        )
-                        right: Scalar_String(
-                            value: d
-                        )
-                    )
-                    args: array(
-                    )
-                )
-                args: array(
-                    0: Arg(
-                        value: Scalar_String(
-                            value: var_dump
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Scalar_LNumber(
-                        value: 13
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    9: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_FuncCall(
-                name: Scalar_String(
-                    value: \id
-                )
-                args: array(
-                    0: Arg(
-                        value: Scalar_String(
-                            value: var_dump
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Scalar_LNumber(
-                        value: 14
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/uvs/isset.test b/vendor/nikic/php-parser/test/code/parser/expr/uvs/isset.test
deleted file mode 100644
index 828fd9b1f5..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/uvs/isset.test
+++ /dev/null
@@ -1,87 +0,0 @@
-UVS isset() on temporaries
------
-<?php
-
-isset(([0, 1] + [])[0]);
-isset(['a' => 'b']->a);
-isset("str"->a);
------
-!!php7
-array(
-    0: Stmt_Expression(
-        expr: Expr_Isset(
-            vars: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_BinaryOp_Plus(
-                        left: Expr_Array(
-                            items: array(
-                                0: Expr_ArrayItem(
-                                    key: null
-                                    value: Scalar_LNumber(
-                                        value: 0
-                                    )
-                                    byRef: false
-                                    unpack: false
-                                )
-                                1: Expr_ArrayItem(
-                                    key: null
-                                    value: Scalar_LNumber(
-                                        value: 1
-                                    )
-                                    byRef: false
-                                    unpack: false
-                                )
-                            )
-                        )
-                        right: Expr_Array(
-                            items: array(
-                            )
-                        )
-                    )
-                    dim: Scalar_LNumber(
-                        value: 0
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Isset(
-            vars: array(
-                0: Expr_PropertyFetch(
-                    var: Expr_Array(
-                        items: array(
-                            0: Expr_ArrayItem(
-                                key: Scalar_String(
-                                    value: a
-                                )
-                                value: Scalar_String(
-                                    value: b
-                                )
-                                byRef: false
-                                unpack: false
-                            )
-                        )
-                    )
-                    name: Identifier(
-                        name: a
-                    )
-                )
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Isset(
-            vars: array(
-                0: Expr_PropertyFetch(
-                    var: Scalar_String(
-                        value: str
-                    )
-                    name: Identifier(
-                        name: a
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/uvs/misc.test b/vendor/nikic/php-parser/test/code/parser/expr/uvs/misc.test
deleted file mode 100644
index 801eb37c06..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/uvs/misc.test
+++ /dev/null
@@ -1,129 +0,0 @@
-Uniform variable syntax in PHP 7 (misc)
------
-<?php
-
-A::A[0];
-A::A[0][1][2];
-"string"->length();
-(clone $obj)->b[0](1);
-[0, 1][0] = 1;
------
-!!php7
-array(
-    0: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_ClassConstFetch(
-                class: Name(
-                    parts: array(
-                        0: A
-                    )
-                )
-                name: Identifier(
-                    name: A
-                )
-            )
-            dim: Scalar_LNumber(
-                value: 0
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_ArrayDimFetch(
-                var: Expr_ArrayDimFetch(
-                    var: Expr_ClassConstFetch(
-                        class: Name(
-                            parts: array(
-                                0: A
-                            )
-                        )
-                        name: Identifier(
-                            name: A
-                        )
-                    )
-                    dim: Scalar_LNumber(
-                        value: 0
-                    )
-                )
-                dim: Scalar_LNumber(
-                    value: 1
-                )
-            )
-            dim: Scalar_LNumber(
-                value: 2
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_MethodCall(
-            var: Scalar_String(
-                value: string
-            )
-            name: Identifier(
-                name: length
-            )
-            args: array(
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_ArrayDimFetch(
-                var: Expr_PropertyFetch(
-                    var: Expr_Clone(
-                        expr: Expr_Variable(
-                            name: obj
-                        )
-                    )
-                    name: Identifier(
-                        name: b
-                    )
-                )
-                dim: Scalar_LNumber(
-                    value: 0
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Scalar_LNumber(
-                        value: 1
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_ArrayDimFetch(
-                var: Expr_Array(
-                    items: array(
-                        0: Expr_ArrayItem(
-                            key: null
-                            value: Scalar_LNumber(
-                                value: 0
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                        1: Expr_ArrayItem(
-                            key: null
-                            value: Scalar_LNumber(
-                                value: 1
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                    )
-                )
-                dim: Scalar_LNumber(
-                    value: 0
-                )
-            )
-            expr: Scalar_LNumber(
-                value: 1
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/uvs/new.test b/vendor/nikic/php-parser/test/code/parser/expr/uvs/new.test
deleted file mode 100644
index 5e1caf2fc2..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/uvs/new.test
+++ /dev/null
@@ -1,119 +0,0 @@
-UVS new expressions
------
-<?php
-new $className;
-new $array['className'];
-new $array{'className'};
-new $obj->className;
-new Test::$className;
-new $test::$className;
-new $weird[0]->foo::$className;
------
-!!php7
-array(
-    0: Stmt_Expression(
-        expr: Expr_New(
-            class: Expr_Variable(
-                name: className
-            )
-            args: array(
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_New(
-            class: Expr_ArrayDimFetch(
-                var: Expr_Variable(
-                    name: array
-                )
-                dim: Scalar_String(
-                    value: className
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_New(
-            class: Expr_ArrayDimFetch(
-                var: Expr_Variable(
-                    name: array
-                )
-                dim: Scalar_String(
-                    value: className
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_New(
-            class: Expr_PropertyFetch(
-                var: Expr_Variable(
-                    name: obj
-                )
-                name: Identifier(
-                    name: className
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_New(
-            class: Expr_StaticPropertyFetch(
-                class: Name(
-                    parts: array(
-                        0: Test
-                    )
-                )
-                name: VarLikeIdentifier(
-                    name: className
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_New(
-            class: Expr_StaticPropertyFetch(
-                class: Expr_Variable(
-                    name: test
-                )
-                name: VarLikeIdentifier(
-                    name: className
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_New(
-            class: Expr_StaticPropertyFetch(
-                class: Expr_PropertyFetch(
-                    var: Expr_ArrayDimFetch(
-                        var: Expr_Variable(
-                            name: weird
-                        )
-                        dim: Scalar_LNumber(
-                            value: 0
-                        )
-                    )
-                    name: Identifier(
-                        name: foo
-                    )
-                )
-                name: VarLikeIdentifier(
-                    name: className
-                )
-            )
-            args: array(
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/uvs/staticProperty.test b/vendor/nikic/php-parser/test/code/parser/expr/uvs/staticProperty.test
deleted file mode 100644
index bf3547ca76..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/uvs/staticProperty.test
+++ /dev/null
@@ -1,123 +0,0 @@
-UVS static access
------
-<?php
-A::$b;
-$A::$b;
-'A'::$b;
-('A' . '')::$b;
-'A'[0]::$b;
-A::$$b;
-A::$$c[1];
-A::$A::$b;
------
-!!php7
-array(
-    0: Stmt_Expression(
-        expr: Expr_StaticPropertyFetch(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-            )
-            name: VarLikeIdentifier(
-                name: b
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_StaticPropertyFetch(
-            class: Expr_Variable(
-                name: A
-            )
-            name: VarLikeIdentifier(
-                name: b
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_StaticPropertyFetch(
-            class: Scalar_String(
-                value: A
-            )
-            name: VarLikeIdentifier(
-                name: b
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_StaticPropertyFetch(
-            class: Expr_BinaryOp_Concat(
-                left: Scalar_String(
-                    value: A
-                )
-                right: Scalar_String(
-                    value:
-                )
-            )
-            name: VarLikeIdentifier(
-                name: b
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_StaticPropertyFetch(
-            class: Expr_ArrayDimFetch(
-                var: Scalar_String(
-                    value: A
-                )
-                dim: Scalar_LNumber(
-                    value: 0
-                )
-            )
-            name: VarLikeIdentifier(
-                name: b
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_StaticPropertyFetch(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-            )
-            name: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_StaticPropertyFetch(
-                class: Name(
-                    parts: array(
-                        0: A
-                    )
-                )
-                name: Expr_Variable(
-                    name: c
-                )
-            )
-            dim: Scalar_LNumber(
-                value: 1
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_StaticPropertyFetch(
-            class: Expr_StaticPropertyFetch(
-                class: Name(
-                    parts: array(
-                        0: A
-                    )
-                )
-                name: VarLikeIdentifier(
-                    name: A
-                )
-            )
-            name: VarLikeIdentifier(
-                name: b
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/variable.test b/vendor/nikic/php-parser/test/code/parser/expr/variable.test
deleted file mode 100644
index c30326cc5e..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/variable.test
+++ /dev/null
@@ -1,67 +0,0 @@
-Variable syntaxes
------
-<?php
-
-$a;
-${'a'};
-${foo()};
-$$a;
-$$$a;
-$$a['b'];
------
-!!php5
-array(
-    0: Stmt_Expression(
-        expr: Expr_Variable(
-            name: a
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Variable(
-            name: Scalar_String(
-                value: a
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Variable(
-            name: Expr_FuncCall(
-                name: Name(
-                    parts: array(
-                        0: foo
-                    )
-                )
-                args: array(
-                )
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_Variable(
-            name: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_Variable(
-            name: Expr_Variable(
-                name: Expr_Variable(
-                    name: a
-                )
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_Variable(
-            name: Expr_ArrayDimFetch(
-                var: Expr_Variable(
-                    name: a
-                )
-                dim: Scalar_String(
-                    value: b
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/nopPositions.test b/vendor/nikic/php-parser/test/code/parser/nopPositions.test
deleted file mode 100644
index a981329be3..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/nopPositions.test
+++ /dev/null
@@ -1,13 +0,0 @@
-Positions for leading nop statement
------
-<?php
-/* Comment */
------
-!!positions
-array(
-    0: Stmt_Nop[2:14 - 2:13](
-        comments: array(
-            0: /* Comment */
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/scalar/constantString.test b/vendor/nikic/php-parser/test/code/parser/scalar/constantString.test
deleted file mode 100644
index 4084bdd03c..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/scalar/constantString.test
+++ /dev/null
@@ -1,86 +0,0 @@
-Constant string syntaxes
------
-<?php
-
-'';
-"";
-b'';
-b"";
-'Hi';
-b'Hi';
-B'Hi';
-"Hi";
-b"Hi";
-B"Hi";
-'!\'!\\!\a!';
-"!\"!\\!\$!\n!\r!\t!\f!\v!\e!\a";
-"!\xFF!\377!\400!\0!";
------
-array(
-    0: Stmt_Expression(
-        expr: Scalar_String(
-            value:
-        )
-    )
-    1: Stmt_Expression(
-        expr: Scalar_String(
-            value:
-        )
-    )
-    2: Stmt_Expression(
-        expr: Scalar_String(
-            value:
-        )
-    )
-    3: Stmt_Expression(
-        expr: Scalar_String(
-            value:
-        )
-    )
-    4: Stmt_Expression(
-        expr: Scalar_String(
-            value: Hi
-        )
-    )
-    5: Stmt_Expression(
-        expr: Scalar_String(
-            value: Hi
-        )
-    )
-    6: Stmt_Expression(
-        expr: Scalar_String(
-            value: Hi
-        )
-    )
-    7: Stmt_Expression(
-        expr: Scalar_String(
-            value: Hi
-        )
-    )
-    8: Stmt_Expression(
-        expr: Scalar_String(
-            value: Hi
-        )
-    )
-    9: Stmt_Expression(
-        expr: Scalar_String(
-            value: Hi
-        )
-    )
-    10: Stmt_Expression(
-        expr: Scalar_String(
-            value: !'!\!\a!
-        )
-    )
-    11: Stmt_Expression(
-        expr: Scalar_String(
-            value: !"!\!$!
-        !@@{ "\r" }@@!@@{ "\t" }@@!@@{ "\f" }@@!@@{ "\v" }@@!@@{ chr(27) /* "\e" */ }@@!\a
-        )
-    )
-    12: Stmt_Expression(
-        expr: Scalar_String(
-            value: !@@{ chr(255) }@@!@@{ chr(255) }@@!@@{ chr(0) }@@!@@{ chr(0) }@@!
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/scalar/docString.test b/vendor/nikic/php-parser/test/code/parser/scalar/docString.test
deleted file mode 100644
index 2775be75fd..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/scalar/docString.test
+++ /dev/null
@@ -1,115 +0,0 @@
-Nowdoc and heredoc strings
------
-<?php
-
-// empty strings
-<<<'EOS'
-EOS;
-<<<EOS
-EOS;
-
-// constant encapsed strings
-<<<'EOS'
-Test '" $a \n
-EOS;
-<<<EOS
-Test '" \$a \n
-EOS;
-
-// encapsed strings
-<<<EOS
-Test $a
-EOS;
-<<<EOS
-Test $a and $b->c test
-EOS;
-
-b<<<EOS
-Binary
-EOS;
-
------
-array(
-    0: Stmt_Expression(
-        expr: Scalar_String(
-            value:
-            comments: array(
-                0: // empty strings
-            )
-        )
-        comments: array(
-            0: // empty strings
-        )
-    )
-    1: Stmt_Expression(
-        expr: Scalar_String(
-            value:
-        )
-    )
-    2: Stmt_Expression(
-        expr: Scalar_String(
-            value: Test '" $a \n
-            comments: array(
-                0: // constant encapsed strings
-            )
-        )
-        comments: array(
-            0: // constant encapsed strings
-        )
-    )
-    3: Stmt_Expression(
-        expr: Scalar_String(
-            value: Test '" $a
-
-        )
-    )
-    4: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Scalar_EncapsedStringPart(
-                    value: Test
-                )
-                1: Expr_Variable(
-                    name: a
-                )
-            )
-            comments: array(
-                0: // encapsed strings
-            )
-        )
-        comments: array(
-            0: // encapsed strings
-        )
-    )
-    5: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Scalar_EncapsedStringPart(
-                    value: Test
-                )
-                1: Expr_Variable(
-                    name: a
-                )
-                2: Scalar_EncapsedStringPart(
-                    value:  and
-                )
-                3: Expr_PropertyFetch(
-                    var: Expr_Variable(
-                        name: b
-                    )
-                    name: Identifier(
-                        name: c
-                    )
-                )
-                4: Scalar_EncapsedStringPart(
-                    value:  test
-                )
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Scalar_String(
-            value: Binary
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/scalar/docStringNewlines.test b/vendor/nikic/php-parser/test/code/parser/scalar/docStringNewlines.test
deleted file mode 100644
index 9eae2338f0..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/scalar/docStringNewlines.test
+++ /dev/null
@@ -1,77 +0,0 @@
-Trailing newlines in doc strings
------
-<?php
-
-<<<'EOF'@@{ "\n\n" }@@EOF;
-<<<'EOF'@@{ "\n\n\n" }@@EOF;
-<<<'EOF'@@{ "\nFoo\n\n" }@@EOF;
-<<<EOF@@{ "\n\$var\n\n" }@@EOF;
-
-<<<'EOF'@@{ "\r\n\r\n" }@@EOF;
-<<<'EOF'@@{ "\r\n\r\n\r\n" }@@EOF;
-<<<'EOF'@@{ "\r\nFoo\r\n\r\n" }@@EOF;
-<<<EOF@@{ "\r\n\$var\r\n\r\n" }@@EOF;
-
------
-array(
-    0: Stmt_Expression(
-        expr: Scalar_String(
-            value:
-        )
-    )
-    1: Stmt_Expression(
-        expr: Scalar_String(
-            value:
-
-        )
-    )
-    2: Stmt_Expression(
-        expr: Scalar_String(
-            value: Foo
-
-        )
-    )
-    3: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: var
-                )
-                1: Scalar_EncapsedStringPart(
-                    value:
-
-                )
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Scalar_String(
-            value:
-        )
-    )
-    5: Stmt_Expression(
-        expr: Scalar_String(
-            value:
-
-        )
-    )
-    6: Stmt_Expression(
-        expr: Scalar_String(
-            value: Foo
-
-        )
-    )
-    7: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: var
-                )
-                1: Scalar_EncapsedStringPart(
-                    value:
-
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/scalar/encapsedNegVarOffset.test b/vendor/nikic/php-parser/test/code/parser/scalar/encapsedNegVarOffset.test
deleted file mode 100644
index 27a9056fcf..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/scalar/encapsedNegVarOffset.test
+++ /dev/null
@@ -1,82 +0,0 @@
-Encapsed string negative var offsets
------
-<?php
-"$a[-0]";
-"$a[-1]";
-"$a[-0x0]";
-"$a[-00]";
-"$a[@@{ -PHP_INT_MAX - 1 }@@]";
------
-!!php7
-array(
-    0: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    dim: Scalar_String(
-                        value: -0
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    dim: Scalar_LNumber(
-                        value: -1
-                    )
-                )
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    dim: Scalar_String(
-                        value: -0x0
-                    )
-                )
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    dim: Scalar_String(
-                        value: -00
-                    )
-                )
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    dim: Scalar_LNumber(
-                        value: @@{ -PHP_INT_MAX - 1 }@@
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/scalar/encapsedString.test b/vendor/nikic/php-parser/test/code/parser/scalar/encapsedString.test
deleted file mode 100644
index 57be611ee0..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/scalar/encapsedString.test
+++ /dev/null
@@ -1,344 +0,0 @@
-Encapsed strings
------
-<?php
-
-"$A";
-"$A->B";
-"$A[B]";
-"$A[0]";
-"$A[1234]";
-"$A[9223372036854775808]";
-"$A[000]";
-"$A[0x0]";
-"$A[0b0]";
-"$A[$B]";
-"{$A}";
-"{$A['B']}";
-"${A}";
-"${A['B']}";
-"${$A}";
-"\{$A}";
-"\{ $A }";
-"\\{$A}";
-"\\{ $A }";
-"{$$A}[B]";
-"$$A[B]";
-"A $B C";
-b"$A";
-B"$A";
------
-array(
-    0: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: A
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_PropertyFetch(
-                    var: Expr_Variable(
-                        name: A
-                    )
-                    name: Identifier(
-                        name: B
-                    )
-                )
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: A
-                    )
-                    dim: Scalar_String(
-                        value: B
-                    )
-                )
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: A
-                    )
-                    dim: Scalar_LNumber(
-                        value: 0
-                    )
-                )
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: A
-                    )
-                    dim: Scalar_LNumber(
-                        value: 1234
-                    )
-                )
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: A
-                    )
-                    dim: Scalar_String(
-                        value: 9223372036854775808
-                    )
-                )
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: A
-                    )
-                    dim: Scalar_String(
-                        value: 000
-                    )
-                )
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: A
-                    )
-                    dim: Scalar_String(
-                        value: 0x0
-                    )
-                )
-            )
-        )
-    )
-    8: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: A
-                    )
-                    dim: Scalar_String(
-                        value: 0b0
-                    )
-                )
-            )
-        )
-    )
-    9: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: A
-                    )
-                    dim: Expr_Variable(
-                        name: B
-                    )
-                )
-            )
-        )
-    )
-    10: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: A
-                )
-            )
-        )
-    )
-    11: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: A
-                    )
-                    dim: Scalar_String(
-                        value: B
-                    )
-                )
-            )
-        )
-    )
-    12: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: A
-                )
-            )
-        )
-    )
-    13: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: A
-                    )
-                    dim: Scalar_String(
-                        value: B
-                    )
-                )
-            )
-        )
-    )
-    14: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: Expr_Variable(
-                        name: A
-                    )
-                )
-            )
-        )
-    )
-    15: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Scalar_EncapsedStringPart(
-                    value: \{
-                )
-                1: Expr_Variable(
-                    name: A
-                )
-                2: Scalar_EncapsedStringPart(
-                    value: }
-                )
-            )
-        )
-    )
-    16: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Scalar_EncapsedStringPart(
-                    value: \{
-                )
-                1: Expr_Variable(
-                    name: A
-                )
-                2: Scalar_EncapsedStringPart(
-                    value:  }
-                )
-            )
-        )
-    )
-    17: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Scalar_EncapsedStringPart(
-                    value: \
-                )
-                1: Expr_Variable(
-                    name: A
-                )
-            )
-        )
-    )
-    18: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Scalar_EncapsedStringPart(
-                    value: \{
-                )
-                1: Expr_Variable(
-                    name: A
-                )
-                2: Scalar_EncapsedStringPart(
-                    value:  }
-                )
-            )
-        )
-    )
-    19: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: Expr_Variable(
-                        name: A
-                    )
-                )
-                1: Scalar_EncapsedStringPart(
-                    value: [B]
-                )
-            )
-        )
-    )
-    20: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Scalar_EncapsedStringPart(
-                    value: $
-                )
-                1: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: A
-                    )
-                    dim: Scalar_String(
-                        value: B
-                    )
-                )
-            )
-        )
-    )
-    21: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Scalar_EncapsedStringPart(
-                    value: A
-                )
-                1: Expr_Variable(
-                    name: B
-                )
-                2: Scalar_EncapsedStringPart(
-                    value:  C
-                )
-            )
-        )
-    )
-    22: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: A
-                )
-            )
-        )
-    )
-    23: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: A
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/scalar/flexibleDocString.test b/vendor/nikic/php-parser/test/code/parser/scalar/flexibleDocString.test
deleted file mode 100644
index 17d728dd0e..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/scalar/flexibleDocString.test
+++ /dev/null
@@ -1,361 +0,0 @@
-Flexible heredoc/nowdoc (PHP 7.3)
------
-<?php
-
-$ary = [
-    <<<FOO
-Test
-FOO,
-    <<<'BAR'
-    Test
-    BAR,
-];
-
-<<<'END'
- END;
-
-<<<END
-
-  END;
-
-<<<END
-@@{ " " }@@
-  END;
-
-<<<'END'
-     a
-    b
-
-   c
-
-  d
- e
- END;
-
-<<<END
-	    a
-	   b
-	  $test
-	 d
-	e
-	END;
-
-<<<'END'
-
-    a
-
-   b
-
-  c
-
- d
-
-e
-
-END;
-
-<<<END
-	a\r\n
-\ta\n
-   b\r\n
-  $test\n
- d\r\n
-e\n
-END;
-
-<<<BAR
- $one-
- BAR;
-
-<<<BAR
- $two -
- BAR;
-
-<<<BAR
- $three	-
- BAR;
-
-<<<BAR
- $four-$four
- BAR;
-
-<<<BAR
- $five-$five-
- BAR;
-
-<<<BAR
- $six-$six-$six
- BAR;
-
-<<<BAR
- $seven
- -
- BAR;
-
-<<<BAR
- $eight
-  -
- BAR;
-
-<<<BAR
-$nine
-BAR;
-
-<<<BAR
- -
- BAR;
-
-<<<BAR
-  -
- BAR;
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: ary
-            )
-            expr: Expr_Array(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: null
-                        value: Scalar_String(
-                            value: Test
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    1: Expr_ArrayItem(
-                        key: null
-                        value: Scalar_String(
-                            value: Test
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Scalar_String(
-            value:
-        )
-    )
-    2: Stmt_Expression(
-        expr: Scalar_String(
-            value:
-        )
-    )
-    3: Stmt_Expression(
-        expr: Scalar_String(
-            value:
-        )
-    )
-    4: Stmt_Expression(
-        expr: Scalar_String(
-            value:     a
-           b
-
-          c
-
-         d
-        e
-        )
-    )
-    5: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Scalar_EncapsedStringPart(
-                    value:     a
-                   b
-
-                )
-                1: Expr_Variable(
-                    name: test
-                )
-                2: Scalar_EncapsedStringPart(
-                    value:
-                 d
-                e
-                )
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Scalar_String(
-            value:
-            a
-
-           b
-
-          c
-
-         d
-
-        e
-
-        )
-    )
-    7: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Scalar_EncapsedStringPart(
-                    value: 	a
-
-                @@{ "\t" }@@a
-
-                   b
-
-
-                )
-                1: Expr_Variable(
-                    name: test
-                )
-                2: Scalar_EncapsedStringPart(
-                    value:
-
-                 d
-
-                e
-
-                )
-            )
-        )
-    )
-    8: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: one
-                )
-                1: Scalar_EncapsedStringPart(
-                    value: -
-                )
-            )
-        )
-    )
-    9: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: two
-                )
-                1: Scalar_EncapsedStringPart(
-                    value:  -
-                )
-            )
-        )
-    )
-    10: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: three
-                )
-                1: Scalar_EncapsedStringPart(
-                    value: 	-
-                )
-            )
-        )
-    )
-    11: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: four
-                )
-                1: Scalar_EncapsedStringPart(
-                    value: -
-                )
-                2: Expr_Variable(
-                    name: four
-                )
-            )
-        )
-    )
-    12: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: five
-                )
-                1: Scalar_EncapsedStringPart(
-                    value: -
-                )
-                2: Expr_Variable(
-                    name: five
-                )
-                3: Scalar_EncapsedStringPart(
-                    value: -
-                )
-            )
-        )
-    )
-    13: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: six
-                )
-                1: Scalar_EncapsedStringPart(
-                    value: -
-                )
-                2: Expr_Variable(
-                    name: six
-                )
-                3: Scalar_EncapsedStringPart(
-                    value: -
-                )
-                4: Expr_Variable(
-                    name: six
-                )
-            )
-        )
-    )
-    14: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: seven
-                )
-                1: Scalar_EncapsedStringPart(
-                    value:
-                -
-                )
-            )
-        )
-    )
-    15: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: eight
-                )
-                1: Scalar_EncapsedStringPart(
-                    value:
-                 -
-                )
-            )
-        )
-    )
-    16: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: nine
-                )
-            )
-        )
-    )
-    17: Stmt_Expression(
-        expr: Scalar_String(
-            value: -
-        )
-    )
-    18: Stmt_Expression(
-        expr: Scalar_String(
-            value:  -
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/scalar/flexibleDocStringErrors.test b/vendor/nikic/php-parser/test/code/parser/scalar/flexibleDocStringErrors.test
deleted file mode 100644
index 25b7484b24..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/scalar/flexibleDocStringErrors.test
+++ /dev/null
@@ -1,117 +0,0 @@
-Error conditions for flexible doc strings
------
-<?php
-
-<<<A
- @@{ "\t" }@@A;
-
-<<<A
-    FooBar
- @@{ "\t" }@@A;
-
-echo <<<END
-@@{ "\t" }@@   X
-@@{ "\t\t" }@@END;
-
-echo <<<END
-      a
-     b
-    c
-     END;
-
-<<<END
-\ta
-@@{ "\t" }@@END;
-
-<<<TEST
-  Foo
-$var
-  TEST;
-
-<<<TEST
-$var
- TEST;
-
-echo <<<END
- a
-$a
- END;
------
-Invalid indentation - tabs and spaces cannot be mixed from 4:1 to 4:3
-Invalid indentation - tabs and spaces cannot be mixed from 8:1 to 8:3
-Invalid indentation - tabs and spaces cannot be mixed from 10:6 to 12:5
-Invalid body indentation level (expecting an indentation level of at least 5) from 14:6 to 18:8
-Invalid body indentation level (expecting an indentation level of at least 1) from 20:1 to 22:4
-Invalid body indentation level (expecting an indentation level of at least 2) from 25:1 to 26:0
-Invalid body indentation level (expecting an indentation level of at least 1) from 30:1 to 30:4
-Invalid body indentation level (expecting an indentation level of at least 1) from 34:1 to 35:0
-array(
-    0: Stmt_Expression(
-        expr: Scalar_String(
-            value:
-        )
-    )
-    1: Stmt_Expression(
-        expr: Scalar_String(
-            value:     FooBar
-        )
-    )
-    2: Stmt_Echo(
-        exprs: array(
-            0: Scalar_String(
-                value:   X
-            )
-        )
-    )
-    3: Stmt_Echo(
-        exprs: array(
-            0: Scalar_String(
-                value:  a
-            b
-            c
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Scalar_String(
-            value: 	a
-        )
-    )
-    5: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Scalar_EncapsedStringPart(
-                    value: Foo
-
-                )
-                1: Expr_Variable(
-                    name: var
-                )
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: var
-                )
-            )
-        )
-    )
-    7: Stmt_Echo(
-        exprs: array(
-            0: Scalar_Encapsed(
-                parts: array(
-                    0: Scalar_EncapsedStringPart(
-                        value: a
-
-                    )
-                    1: Expr_Variable(
-                        name: a
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/scalar/float.test b/vendor/nikic/php-parser/test/code/parser/scalar/float.test
deleted file mode 100644
index eb9f5b7262..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/scalar/float.test
+++ /dev/null
@@ -1,108 +0,0 @@
-Different float syntaxes
------
-<?php
-
-0.0;
-0.;
-.0;
-0e0;
-0E0;
-0e+0;
-0e-0;
-30.20e10;
-300.200e100;
-1e10000;
-
-// various integer -> float overflows
-// (all are actually the same number, just in different representations)
-18446744073709551615;
-0xFFFFFFFFFFFFFFFF;
-01777777777777777777777;
-0177777777777777777777787;
-0b1111111111111111111111111111111111111111111111111111111111111111;
------
-array(
-    0: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: 0
-        )
-    )
-    1: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: 0
-        )
-    )
-    2: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: 0
-        )
-    )
-    3: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: 0
-        )
-    )
-    4: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: 0
-        )
-    )
-    5: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: 0
-        )
-    )
-    6: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: 0
-        )
-    )
-    7: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: 302000000000
-        )
-    )
-    8: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: 3.002E+102
-        )
-    )
-    9: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: INF
-        )
-    )
-    10: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: 1.844674407371E+19
-            comments: array(
-                0: // various integer -> float overflows
-                1: // (all are actually the same number, just in different representations)
-            )
-        )
-        comments: array(
-            0: // various integer -> float overflows
-            1: // (all are actually the same number, just in different representations)
-        )
-    )
-    11: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: 1.844674407371E+19
-        )
-    )
-    12: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: 1.844674407371E+19
-        )
-    )
-    13: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: 1.844674407371E+19
-        )
-    )
-    14: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: 1.844674407371E+19
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/scalar/int.test b/vendor/nikic/php-parser/test/code/parser/scalar/int.test
deleted file mode 100644
index b65858dbbc..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/scalar/int.test
+++ /dev/null
@@ -1,61 +0,0 @@
-Different integer syntaxes
------
-<?php
-
-0;
-1;
-@@{ PHP_INT_MAX     }@@;
-@@{ PHP_INT_MAX + 1 }@@;
-0xFFF;
-0xfff;
-0XfFf;
-0777;
-0b111000111000;
------
-array(
-    0: Stmt_Expression(
-        expr: Scalar_LNumber(
-            value: 0
-        )
-    )
-    1: Stmt_Expression(
-        expr: Scalar_LNumber(
-            value: 1
-        )
-    )
-    2: Stmt_Expression(
-        expr: Scalar_LNumber(
-            value: @@{ PHP_INT_MAX }@@
-        )
-    )
-    3: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: @@{ PHP_INT_MAX + 1 }@@
-        )
-    )
-    4: Stmt_Expression(
-        expr: Scalar_LNumber(
-            value: 4095
-        )
-    )
-    5: Stmt_Expression(
-        expr: Scalar_LNumber(
-            value: 4095
-        )
-    )
-    6: Stmt_Expression(
-        expr: Scalar_LNumber(
-            value: 4095
-        )
-    )
-    7: Stmt_Expression(
-        expr: Scalar_LNumber(
-            value: 511
-        )
-    )
-    8: Stmt_Expression(
-        expr: Scalar_LNumber(
-            value: 3640
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/scalar/invalidOctal.test b/vendor/nikic/php-parser/test/code/parser/scalar/invalidOctal.test
deleted file mode 100644
index cd0cbfba0f..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/scalar/invalidOctal.test
+++ /dev/null
@@ -1,26 +0,0 @@
-Invalid octal literals
------
-<?php
-0787;
------
-!!php7
-Invalid numeric literal from 2:1 to 2:4
-array(
-    0: Stmt_Expression(
-        expr: Scalar_LNumber(
-            value: 0
-        )
-    )
-)
------
-<?php
-0787;
------
-!!php5
-array(
-    0: Stmt_Expression(
-        expr: Scalar_LNumber(
-            value: 7
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/scalar/magicConst.test b/vendor/nikic/php-parser/test/code/parser/scalar/magicConst.test
deleted file mode 100644
index 520ea1776c..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/scalar/magicConst.test
+++ /dev/null
@@ -1,47 +0,0 @@
-Magic constants
------
-<?php
-
-__CLASS__;
-__DIR__;
-__FILE__;
-__FUNCTION__;
-__LINE__;
-__METHOD__;
-__NAMESPACE__;
-__TRAIT__;
------
-array(
-    0: Stmt_Expression(
-        expr: Scalar_MagicConst_Class(
-        )
-    )
-    1: Stmt_Expression(
-        expr: Scalar_MagicConst_Dir(
-        )
-    )
-    2: Stmt_Expression(
-        expr: Scalar_MagicConst_File(
-        )
-    )
-    3: Stmt_Expression(
-        expr: Scalar_MagicConst_Function(
-        )
-    )
-    4: Stmt_Expression(
-        expr: Scalar_MagicConst_Line(
-        )
-    )
-    5: Stmt_Expression(
-        expr: Scalar_MagicConst_Method(
-        )
-    )
-    6: Stmt_Expression(
-        expr: Scalar_MagicConst_Namespace(
-        )
-    )
-    7: Stmt_Expression(
-        expr: Scalar_MagicConst_Trait(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/scalar/unicodeEscape.test b/vendor/nikic/php-parser/test/code/parser/scalar/unicodeEscape.test
deleted file mode 100644
index 95d982955c..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/scalar/unicodeEscape.test
+++ /dev/null
@@ -1,26 +0,0 @@
-Unicode escape sequence
------
-<?php
-
-"\u{0}";
-"\u{114}";
-"\u{1F602}";
------
-!!php7
-array(
-    0: Stmt_Expression(
-        expr: Scalar_String(
-            value: @@{"\0"}@@
-        )
-    )
-    1: Stmt_Expression(
-        expr: Scalar_String(
-            value: Ĕ
-        )
-    )
-    2: Stmt_Expression(
-        expr: Scalar_String(
-            value: @@{"\xF0\x9F\x98\x82"}@@
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/semiReserved.test b/vendor/nikic/php-parser/test/code/parser/semiReserved.test
deleted file mode 100644
index 70cf063dfc..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/semiReserved.test
+++ /dev/null
@@ -1,490 +0,0 @@
-Valid usages of reserved keywords as identifiers
------
-<?php
-
-class Test {
-    function array() {}
-    function public() {}
-
-    static function list() {}
-    static function protected() {}
-
-    public $class;
-    public $private;
-
-    const TRAIT = 3, FINAL = 4;
-
-    const __CLASS__ = 1, __TRAIT__ = 2, __FUNCTION__ = 3, __METHOD__ = 4, __LINE__ = 5,
-          __FILE__ = 6, __DIR__ = 7, __NAMESPACE__ = 8;
-    // __halt_compiler does not work
-}
-
-$t = new Test;
-$t->array();
-$t->public();
-
-Test::list();
-Test::protected();
-
-$t->class;
-$t->private;
-
-Test::TRAIT;
-Test::FINAL;
-
-class Foo {
-    use TraitA, TraitB {
-        TraitA::catch insteadof namespace\TraitB;
-        TraitA::list as foreach;
-        TraitB::throw as protected public;
-        TraitB::self as protected;
-        exit as die;
-        \TraitC::exit as bye;
-        namespace\TraitC::exit as byebye;
-        TraitA::
-            //
-            /** doc comment */
-            #
-        catch /* comment */
-            // comment
-            # comment
-        insteadof TraitB;
-    }
-}
------
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: Test
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassMethod(
-                flags: 0
-                byRef: false
-                name: Identifier(
-                    name: array
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-            1: Stmt_ClassMethod(
-                flags: 0
-                byRef: false
-                name: Identifier(
-                    name: public
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-            2: Stmt_ClassMethod(
-                flags: MODIFIER_STATIC (8)
-                byRef: false
-                name: Identifier(
-                    name: list
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-            3: Stmt_ClassMethod(
-                flags: MODIFIER_STATIC (8)
-                byRef: false
-                name: Identifier(
-                    name: protected
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-            4: Stmt_Property(
-                flags: MODIFIER_PUBLIC (1)
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: class
-                        )
-                        default: null
-                    )
-                )
-            )
-            5: Stmt_Property(
-                flags: MODIFIER_PUBLIC (1)
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: private
-                        )
-                        default: null
-                    )
-                )
-            )
-            6: Stmt_ClassConst(
-                flags: 0
-                consts: array(
-                    0: Const(
-                        name: Identifier(
-                            name: TRAIT
-                        )
-                        value: Scalar_LNumber(
-                            value: 3
-                        )
-                    )
-                    1: Const(
-                        name: Identifier(
-                            name: FINAL
-                        )
-                        value: Scalar_LNumber(
-                            value: 4
-                        )
-                    )
-                )
-            )
-            7: Stmt_ClassConst(
-                flags: 0
-                consts: array(
-                    0: Const(
-                        name: Identifier(
-                            name: __CLASS__
-                        )
-                        value: Scalar_LNumber(
-                            value: 1
-                        )
-                    )
-                    1: Const(
-                        name: Identifier(
-                            name: __TRAIT__
-                        )
-                        value: Scalar_LNumber(
-                            value: 2
-                        )
-                    )
-                    2: Const(
-                        name: Identifier(
-                            name: __FUNCTION__
-                        )
-                        value: Scalar_LNumber(
-                            value: 3
-                        )
-                    )
-                    3: Const(
-                        name: Identifier(
-                            name: __METHOD__
-                        )
-                        value: Scalar_LNumber(
-                            value: 4
-                        )
-                    )
-                    4: Const(
-                        name: Identifier(
-                            name: __LINE__
-                        )
-                        value: Scalar_LNumber(
-                            value: 5
-                        )
-                    )
-                    5: Const(
-                        name: Identifier(
-                            name: __FILE__
-                        )
-                        value: Scalar_LNumber(
-                            value: 6
-                        )
-                    )
-                    6: Const(
-                        name: Identifier(
-                            name: __DIR__
-                        )
-                        value: Scalar_LNumber(
-                            value: 7
-                        )
-                    )
-                    7: Const(
-                        name: Identifier(
-                            name: __NAMESPACE__
-                        )
-                        value: Scalar_LNumber(
-                            value: 8
-                        )
-                    )
-                )
-            )
-            8: Stmt_Nop(
-                comments: array(
-                    0: // __halt_compiler does not work
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: t
-            )
-            expr: Expr_New(
-                class: Name(
-                    parts: array(
-                        0: Test
-                    )
-                )
-                args: array(
-                )
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_MethodCall(
-            var: Expr_Variable(
-                name: t
-            )
-            name: Identifier(
-                name: array
-            )
-            args: array(
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_MethodCall(
-            var: Expr_Variable(
-                name: t
-            )
-            name: Identifier(
-                name: public
-            )
-            args: array(
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_StaticCall(
-            class: Name(
-                parts: array(
-                    0: Test
-                )
-            )
-            name: Identifier(
-                name: list
-            )
-            args: array(
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_StaticCall(
-            class: Name(
-                parts: array(
-                    0: Test
-                )
-            )
-            name: Identifier(
-                name: protected
-            )
-            args: array(
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_PropertyFetch(
-            var: Expr_Variable(
-                name: t
-            )
-            name: Identifier(
-                name: class
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_PropertyFetch(
-            var: Expr_Variable(
-                name: t
-            )
-            name: Identifier(
-                name: private
-            )
-        )
-    )
-    8: Stmt_Expression(
-        expr: Expr_ClassConstFetch(
-            class: Name(
-                parts: array(
-                    0: Test
-                )
-            )
-            name: Identifier(
-                name: TRAIT
-            )
-        )
-    )
-    9: Stmt_Expression(
-        expr: Expr_ClassConstFetch(
-            class: Name(
-                parts: array(
-                    0: Test
-                )
-            )
-            name: Identifier(
-                name: FINAL
-            )
-        )
-    )
-    10: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: Foo
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_TraitUse(
-                traits: array(
-                    0: Name(
-                        parts: array(
-                            0: TraitA
-                        )
-                    )
-                    1: Name(
-                        parts: array(
-                            0: TraitB
-                        )
-                    )
-                )
-                adaptations: array(
-                    0: Stmt_TraitUseAdaptation_Precedence(
-                        trait: Name(
-                            parts: array(
-                                0: TraitA
-                            )
-                        )
-                        method: Identifier(
-                            name: catch
-                        )
-                        insteadof: array(
-                            0: Name_Relative(
-                                parts: array(
-                                    0: TraitB
-                                )
-                            )
-                        )
-                    )
-                    1: Stmt_TraitUseAdaptation_Alias(
-                        trait: Name(
-                            parts: array(
-                                0: TraitA
-                            )
-                        )
-                        method: Identifier(
-                            name: list
-                        )
-                        newModifier: null
-                        newName: Identifier(
-                            name: foreach
-                        )
-                    )
-                    2: Stmt_TraitUseAdaptation_Alias(
-                        trait: Name(
-                            parts: array(
-                                0: TraitB
-                            )
-                        )
-                        method: Identifier(
-                            name: throw
-                        )
-                        newModifier: MODIFIER_PROTECTED (2)
-                        newName: Identifier(
-                            name: public
-                        )
-                    )
-                    3: Stmt_TraitUseAdaptation_Alias(
-                        trait: Name(
-                            parts: array(
-                                0: TraitB
-                            )
-                        )
-                        method: Identifier(
-                            name: self
-                        )
-                        newModifier: MODIFIER_PROTECTED (2)
-                        newName: null
-                    )
-                    4: Stmt_TraitUseAdaptation_Alias(
-                        trait: null
-                        method: Identifier(
-                            name: exit
-                        )
-                        newModifier: null
-                        newName: Identifier(
-                            name: die
-                        )
-                    )
-                    5: Stmt_TraitUseAdaptation_Alias(
-                        trait: Name_FullyQualified(
-                            parts: array(
-                                0: TraitC
-                            )
-                        )
-                        method: Identifier(
-                            name: exit
-                        )
-                        newModifier: null
-                        newName: Identifier(
-                            name: bye
-                        )
-                    )
-                    6: Stmt_TraitUseAdaptation_Alias(
-                        trait: Name_Relative(
-                            parts: array(
-                                0: TraitC
-                            )
-                        )
-                        method: Identifier(
-                            name: exit
-                        )
-                        newModifier: null
-                        newName: Identifier(
-                            name: byebye
-                        )
-                    )
-                    7: Stmt_TraitUseAdaptation_Precedence(
-                        trait: Name(
-                            parts: array(
-                                0: TraitA
-                            )
-                        )
-                        method: Identifier(
-                            name: catch
-                            comments: array(
-                                0: //
-                                1: /** doc comment */
-                                2: #
-                            )
-                        )
-                        insteadof: array(
-                            0: Name(
-                                parts: array(
-                                    0: TraitB
-                                )
-                            )
-                        )
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/blocklessStatement.test b/vendor/nikic/php-parser/test/code/parser/stmt/blocklessStatement.test
deleted file mode 100644
index abf586465b..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/blocklessStatement.test
+++ /dev/null
@@ -1,130 +0,0 @@
-Blockless statements for if/for/etc
------
-<?php
-
-if ($a) $A;
-elseif ($b) $B;
-else $C;
-
-for (;;) $foo;
-
-foreach ($a as $b) $AB;
-
-while ($a) $A;
-
-do $A; while ($a);
-
-declare (a='b') $C;
------
-array(
-    0: Stmt_If(
-        cond: Expr_Variable(
-            name: a
-        )
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Variable(
-                    name: A
-                )
-            )
-        )
-        elseifs: array(
-            0: Stmt_ElseIf(
-                cond: Expr_Variable(
-                    name: b
-                )
-                stmts: array(
-                    0: Stmt_Expression(
-                        expr: Expr_Variable(
-                            name: B
-                        )
-                    )
-                )
-            )
-        )
-        else: Stmt_Else(
-            stmts: array(
-                0: Stmt_Expression(
-                    expr: Expr_Variable(
-                        name: C
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_For(
-        init: array(
-        )
-        cond: array(
-        )
-        loop: array(
-        )
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Variable(
-                    name: foo
-                )
-            )
-        )
-    )
-    2: Stmt_Foreach(
-        expr: Expr_Variable(
-            name: a
-        )
-        keyVar: null
-        byRef: false
-        valueVar: Expr_Variable(
-            name: b
-        )
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Variable(
-                    name: AB
-                )
-            )
-        )
-    )
-    3: Stmt_While(
-        cond: Expr_Variable(
-            name: a
-        )
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Variable(
-                    name: A
-                )
-            )
-        )
-    )
-    4: Stmt_Do(
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Variable(
-                    name: A
-                )
-            )
-        )
-        cond: Expr_Variable(
-            name: a
-        )
-    )
-    5: Stmt_Declare(
-        declares: array(
-            0: Stmt_DeclareDeclare(
-                key: Identifier(
-                    name: a
-                )
-                value: Scalar_String(
-                    value: b
-                )
-            )
-        )
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Variable(
-                    name: C
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/class/abstract.test b/vendor/nikic/php-parser/test/code/parser/stmt/class/abstract.test
deleted file mode 100644
index 01a82e5194..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/class/abstract.test
+++ /dev/null
@@ -1,45 +0,0 @@
-Abstract class
------
-<?php
-
-abstract class A {
-    public function a() {}
-    abstract public function b();
-}
------
-array(
-    0: Stmt_Class(
-        flags: MODIFIER_ABSTRACT (16)
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassMethod(
-                flags: MODIFIER_PUBLIC (1)
-                byRef: false
-                name: Identifier(
-                    name: a
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-            1: Stmt_ClassMethod(
-                flags: MODIFIER_PUBLIC | MODIFIER_ABSTRACT (17)
-                byRef: false
-                name: Identifier(
-                    name: b
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: null
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/class/anonymous.test b/vendor/nikic/php-parser/test/code/parser/stmt/class/anonymous.test
deleted file mode 100644
index 9aaaff9382..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/class/anonymous.test
+++ /dev/null
@@ -1,214 +0,0 @@
-Anonymous classes
------
-<?php
-
-new class {
-    public function test() {}
-};
-new class extends A implements B, C {};
-new class() {
-    public $foo;
-};
-new class($a, $b) extends A {
-    use T;
-};
-
-class A {
-    public function test() {
-        return new class($this) extends A {
-            const A = 'B';
-        };
-    }
-}
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_New(
-            class: Stmt_Class(
-                flags: 0
-                name: null
-                extends: null
-                implements: array(
-                )
-                stmts: array(
-                    0: Stmt_ClassMethod(
-                        flags: MODIFIER_PUBLIC (1)
-                        byRef: false
-                        name: Identifier(
-                            name: test
-                        )
-                        params: array(
-                        )
-                        returnType: null
-                        stmts: array(
-                        )
-                    )
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_New(
-            class: Stmt_Class(
-                flags: 0
-                name: null
-                extends: Name(
-                    parts: array(
-                        0: A
-                    )
-                )
-                implements: array(
-                    0: Name(
-                        parts: array(
-                            0: B
-                        )
-                    )
-                    1: Name(
-                        parts: array(
-                            0: C
-                        )
-                    )
-                )
-                stmts: array(
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_New(
-            class: Stmt_Class(
-                flags: 0
-                name: null
-                extends: null
-                implements: array(
-                )
-                stmts: array(
-                    0: Stmt_Property(
-                        flags: MODIFIER_PUBLIC (1)
-                        type: null
-                        props: array(
-                            0: Stmt_PropertyProperty(
-                                name: VarLikeIdentifier(
-                                    name: foo
-                                )
-                                default: null
-                            )
-                        )
-                    )
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_New(
-            class: Stmt_Class(
-                flags: 0
-                name: null
-                extends: Name(
-                    parts: array(
-                        0: A
-                    )
-                )
-                implements: array(
-                )
-                stmts: array(
-                    0: Stmt_TraitUse(
-                        traits: array(
-                            0: Name(
-                                parts: array(
-                                    0: T
-                                )
-                            )
-                        )
-                        adaptations: array(
-                        )
-                    )
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Expr_Variable(
-                        name: a
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                1: Arg(
-                    value: Expr_Variable(
-                        name: b
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    4: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassMethod(
-                flags: MODIFIER_PUBLIC (1)
-                byRef: false
-                name: Identifier(
-                    name: test
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                    0: Stmt_Return(
-                        expr: Expr_New(
-                            class: Stmt_Class(
-                                flags: 0
-                                name: null
-                                extends: Name(
-                                    parts: array(
-                                        0: A
-                                    )
-                                )
-                                implements: array(
-                                )
-                                stmts: array(
-                                    0: Stmt_ClassConst(
-                                        flags: 0
-                                        consts: array(
-                                            0: Const(
-                                                name: Identifier(
-                                                    name: A
-                                                )
-                                                value: Scalar_String(
-                                                    value: B
-                                                )
-                                            )
-                                        )
-                                    )
-                                )
-                            )
-                            args: array(
-                                0: Arg(
-                                    value: Expr_Variable(
-                                        name: this
-                                    )
-                                    byRef: false
-                                    unpack: false
-                                )
-                            )
-                        )
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/class/conditional.test b/vendor/nikic/php-parser/test/code/parser/stmt/class/conditional.test
deleted file mode 100644
index 40a93508b0..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/class/conditional.test
+++ /dev/null
@@ -1,35 +0,0 @@
-Conditional class definition
------
-<?php
-
-if (true) {
-    class A {}
-}
------
-array(
-    0: Stmt_If(
-        cond: Expr_ConstFetch(
-            name: Name(
-                parts: array(
-                    0: true
-                )
-            )
-        )
-        stmts: array(
-            0: Stmt_Class(
-                flags: 0
-                name: Identifier(
-                    name: A
-                )
-                extends: null
-                implements: array(
-                )
-                stmts: array(
-                )
-            )
-        )
-        elseifs: array(
-        )
-        else: null
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/class/constModifierErrors.test b/vendor/nikic/php-parser/test/code/parser/stmt/class/constModifierErrors.test
deleted file mode 100644
index a6aa797218..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/class/constModifierErrors.test
+++ /dev/null
@@ -1,137 +0,0 @@
-Invalid class constant modifiers
------
-<?php
-class A {
-    static const X = 1;
-}
------
-!!php7
-Cannot use 'static' as constant modifier from 3:5 to 3:10
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassConst(
-                flags: MODIFIER_STATIC (8)
-                consts: array(
-                    0: Const(
-                        name: Identifier(
-                            name: X
-                        )
-                        value: Scalar_LNumber(
-                            value: 1
-                        )
-                    )
-                )
-            )
-        )
-    )
-)
------
-<?php
-class A {
-    abstract const X = 1;
-}
------
-!!php7
-Cannot use 'abstract' as constant modifier from 3:5 to 3:12
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassConst(
-                flags: MODIFIER_ABSTRACT (16)
-                consts: array(
-                    0: Const(
-                        name: Identifier(
-                            name: X
-                        )
-                        value: Scalar_LNumber(
-                            value: 1
-                        )
-                    )
-                )
-            )
-        )
-    )
-)
------
-<?php
-class A {
-    final const X = 1;
-}
------
-!!php7
-Cannot use 'final' as constant modifier from 3:5 to 3:9
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassConst(
-                flags: MODIFIER_FINAL (32)
-                consts: array(
-                    0: Const(
-                        name: Identifier(
-                            name: X
-                        )
-                        value: Scalar_LNumber(
-                            value: 1
-                        )
-                    )
-                )
-            )
-        )
-    )
-)
------
-<?php
-class A {
-    public public const X = 1;
-}
------
-!!php7
-Multiple access type modifiers are not allowed from 3:12 to 3:17
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassConst(
-                flags: MODIFIER_PUBLIC (1)
-                consts: array(
-                    0: Const(
-                        name: Identifier(
-                            name: X
-                        )
-                        value: Scalar_LNumber(
-                            value: 1
-                        )
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/class/constModifiers.test b/vendor/nikic/php-parser/test/code/parser/stmt/class/constModifiers.test
deleted file mode 100644
index 24d7219811..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/class/constModifiers.test
+++ /dev/null
@@ -1,77 +0,0 @@
-Class constant modifiers
------
-<?php
-
-class Foo {
-    const A = 1;
-    public const B = 2;
-    protected const C = 3;
-    private const D = 4;
-}
------
-!!php7
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: Foo
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassConst(
-                flags: 0
-                consts: array(
-                    0: Const(
-                        name: Identifier(
-                            name: A
-                        )
-                        value: Scalar_LNumber(
-                            value: 1
-                        )
-                    )
-                )
-            )
-            1: Stmt_ClassConst(
-                flags: MODIFIER_PUBLIC (1)
-                consts: array(
-                    0: Const(
-                        name: Identifier(
-                            name: B
-                        )
-                        value: Scalar_LNumber(
-                            value: 2
-                        )
-                    )
-                )
-            )
-            2: Stmt_ClassConst(
-                flags: MODIFIER_PROTECTED (2)
-                consts: array(
-                    0: Const(
-                        name: Identifier(
-                            name: C
-                        )
-                        value: Scalar_LNumber(
-                            value: 3
-                        )
-                    )
-                )
-            )
-            3: Stmt_ClassConst(
-                flags: MODIFIER_PRIVATE (4)
-                consts: array(
-                    0: Const(
-                        name: Identifier(
-                            name: D
-                        )
-                        value: Scalar_LNumber(
-                            value: 4
-                        )
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/class/final.test b/vendor/nikic/php-parser/test/code/parser/stmt/class/final.test
deleted file mode 100644
index ecb7a5c3d6..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/class/final.test
+++ /dev/null
@@ -1,19 +0,0 @@
-Final class
------
-<?php
-
-final class A {}
------
-array(
-    0: Stmt_Class(
-        flags: MODIFIER_FINAL (32)
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/class/implicitPublic.test b/vendor/nikic/php-parser/test/code/parser/stmt/class/implicitPublic.test
deleted file mode 100644
index 92737af7ad..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/class/implicitPublic.test
+++ /dev/null
@@ -1,110 +0,0 @@
-Implicitly public properties and methods
------
-<?php
-
-abstract class A {
-    var $a;
-    static $b;
-    abstract function c();
-    final function d() {}
-    static function e() {}
-    final static function f() {}
-    function g() {}
-}
------
-array(
-    0: Stmt_Class(
-        flags: MODIFIER_ABSTRACT (16)
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_Property(
-                flags: 0
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: a
-                        )
-                        default: null
-                    )
-                )
-            )
-            1: Stmt_Property(
-                flags: MODIFIER_STATIC (8)
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: b
-                        )
-                        default: null
-                    )
-                )
-            )
-            2: Stmt_ClassMethod(
-                flags: MODIFIER_ABSTRACT (16)
-                byRef: false
-                name: Identifier(
-                    name: c
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: null
-            )
-            3: Stmt_ClassMethod(
-                flags: MODIFIER_FINAL (32)
-                byRef: false
-                name: Identifier(
-                    name: d
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-            4: Stmt_ClassMethod(
-                flags: MODIFIER_STATIC (8)
-                byRef: false
-                name: Identifier(
-                    name: e
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-            5: Stmt_ClassMethod(
-                flags: MODIFIER_STATIC | MODIFIER_FINAL (40)
-                byRef: false
-                name: Identifier(
-                    name: f
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-            6: Stmt_ClassMethod(
-                flags: 0
-                byRef: false
-                name: Identifier(
-                    name: g
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/class/interface.test b/vendor/nikic/php-parser/test/code/parser/stmt/class/interface.test
deleted file mode 100644
index 7ac15970dd..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/class/interface.test
+++ /dev/null
@@ -1,40 +0,0 @@
-Interface
------
-<?php
-
-interface A extends C, D {
-    public function a();
-}
------
-array(
-    0: Stmt_Interface(
-        name: Identifier(
-            name: A
-        )
-        extends: array(
-            0: Name(
-                parts: array(
-                    0: C
-                )
-            )
-            1: Name(
-                parts: array(
-                    0: D
-                )
-            )
-        )
-        stmts: array(
-            0: Stmt_ClassMethod(
-                flags: MODIFIER_PUBLIC (1)
-                byRef: false
-                name: Identifier(
-                    name: a
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: null
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/class/modifier.test b/vendor/nikic/php-parser/test/code/parser/stmt/class/modifier.test
deleted file mode 100644
index 797ef4e83e..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/class/modifier.test
+++ /dev/null
@@ -1,254 +0,0 @@
-Invalid modifier combination
------
-<?php class A { public public $a; }
------
-Multiple access type modifiers are not allowed from 1:24 to 1:29
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_Property(
-                flags: MODIFIER_PUBLIC (1)
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: a
-                        )
-                        default: null
-                    )
-                )
-            )
-        )
-    )
-)
------
-<?php class A { public protected $a; }
------
-Multiple access type modifiers are not allowed from 1:24 to 1:32
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_Property(
-                flags: MODIFIER_PUBLIC | MODIFIER_PROTECTED (3)
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: a
-                        )
-                        default: null
-                    )
-                )
-            )
-        )
-    )
-)
------
-<?php class A { abstract abstract function a(); }
------
-Multiple abstract modifiers are not allowed from 1:26 to 1:33
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassMethod(
-                flags: MODIFIER_ABSTRACT (16)
-                byRef: false
-                name: Identifier(
-                    name: a
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: null
-            )
-        )
-    )
-)
------
-<?php class A { static static $a; }
------
-Multiple static modifiers are not allowed from 1:24 to 1:29
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_Property(
-                flags: MODIFIER_STATIC (8)
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: a
-                        )
-                        default: null
-                    )
-                )
-            )
-        )
-    )
-)
------
-<?php class A { final final function a() {} }
------
-Multiple final modifiers are not allowed from 1:23 to 1:27
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassMethod(
-                flags: MODIFIER_FINAL (32)
-                byRef: false
-                name: Identifier(
-                    name: a
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-        )
-    )
-)
------
-<?php class A { abstract final function a(); }
------
-Cannot use the final modifier on an abstract class member from 1:26 to 1:30
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassMethod(
-                flags: MODIFIER_ABSTRACT | MODIFIER_FINAL (48)
-                byRef: false
-                name: Identifier(
-                    name: a
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: null
-            )
-        )
-    )
-)
------
-<?php abstract final class A { }
-// Type in the partial parse could conceivably be any of 0, 16 or 32
------
-Syntax error, unexpected T_FINAL, expecting T_CLASS from 1:16 to 1:20
-array(
-    0: Stmt_Class(
-        flags: MODIFIER_FINAL (32)
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-        )
-    )
-    1: Stmt_Nop(
-        comments: array(
-            0: // Type in the partial parse could conceivably be any of 0, 16 or 32
-        )
-    )
-)
------
-<?php class A { abstract $a; }
------
-Properties cannot be declared abstract from 1:17 to 1:24
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_Property(
-                flags: MODIFIER_ABSTRACT (16)
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: a
-                        )
-                        default: null
-                    )
-                )
-            )
-        )
-    )
-)
------
-<?php class A { final $a; }
------
-Properties cannot be declared final from 1:17 to 1:21
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_Property(
-                flags: MODIFIER_FINAL (32)
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: a
-                        )
-                        default: null
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/class/name.test b/vendor/nikic/php-parser/test/code/parser/stmt/class/name.test
deleted file mode 100644
index 40cb2fe27e..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/class/name.test
+++ /dev/null
@@ -1,266 +0,0 @@
-Invalid class name
------
-<?php class self {}
------
-Cannot use 'self' as class name as it is reserved from 1:13 to 1:16
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: self
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-        )
-    )
-)
------
-<?php class PARENT {}
------
-Cannot use 'PARENT' as class name as it is reserved from 1:13 to 1:18
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: PARENT
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-        )
-    )
-)
------
-<?php class static {}
------
-Syntax error, unexpected T_STATIC, expecting T_STRING from 1:13 to 1:18
-array(
-)
------
-<?php class A extends self {}
------
-Cannot use 'self' as class name as it is reserved from 1:23 to 1:26
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: Name(
-            parts: array(
-                0: self
-            )
-        )
-        implements: array(
-        )
-        stmts: array(
-        )
-    )
-)
------
-<?php class A extends PARENT {}
------
-Cannot use 'PARENT' as class name as it is reserved from 1:23 to 1:28
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: Name(
-            parts: array(
-                0: PARENT
-            )
-        )
-        implements: array(
-        )
-        stmts: array(
-        )
-    )
-)
------
-<?php class A extends static {}
------
-Cannot use 'static' as class name as it is reserved from 1:23 to 1:28
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: Name(
-            parts: array(
-                0: static
-            )
-        )
-        implements: array(
-        )
-        stmts: array(
-        )
-    )
-)
------
-<?php class A implements self {}
------
-Cannot use 'self' as interface name as it is reserved from 1:26 to 1:29
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-            0: Name(
-                parts: array(
-                    0: self
-                )
-            )
-        )
-        stmts: array(
-        )
-    )
-)
------
-<?php class A implements PARENT {}
------
-Cannot use 'PARENT' as interface name as it is reserved from 1:26 to 1:31
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-            0: Name(
-                parts: array(
-                    0: PARENT
-                )
-            )
-        )
-        stmts: array(
-        )
-    )
-)
------
-<?php class A implements static {}
------
-Cannot use 'static' as interface name as it is reserved from 1:26 to 1:31
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-            0: Name(
-                parts: array(
-                    0: static
-                )
-            )
-        )
-        stmts: array(
-        )
-    )
-)
------
-<?php interface self {}
------
-Cannot use 'self' as class name as it is reserved from 1:17 to 1:20
-array(
-    0: Stmt_Interface(
-        name: Identifier(
-            name: self
-        )
-        extends: array(
-        )
-        stmts: array(
-        )
-    )
-)
------
-<?php interface PARENT {}
------
-Cannot use 'PARENT' as class name as it is reserved from 1:17 to 1:22
-array(
-    0: Stmt_Interface(
-        name: Identifier(
-            name: PARENT
-        )
-        extends: array(
-        )
-        stmts: array(
-        )
-    )
-)
------
-<?php interface static {}
------
-Syntax error, unexpected T_STATIC, expecting T_STRING from 1:17 to 1:22
-array(
-)
------
-<?php interface A extends self {}
------
-Cannot use 'self' as interface name as it is reserved from 1:27 to 1:30
-array(
-    0: Stmt_Interface(
-        name: Identifier(
-            name: A
-        )
-        extends: array(
-            0: Name(
-                parts: array(
-                    0: self
-                )
-            )
-        )
-        stmts: array(
-        )
-    )
-)
------
-<?php interface A extends PARENT {}
------
-Cannot use 'PARENT' as interface name as it is reserved from 1:27 to 1:32
-array(
-    0: Stmt_Interface(
-        name: Identifier(
-            name: A
-        )
-        extends: array(
-            0: Name(
-                parts: array(
-                    0: PARENT
-                )
-            )
-        )
-        stmts: array(
-        )
-    )
-)
------
-<?php interface A extends static {}
------
-Cannot use 'static' as interface name as it is reserved from 1:27 to 1:32
-array(
-    0: Stmt_Interface(
-        name: Identifier(
-            name: A
-        )
-        extends: array(
-            0: Name(
-                parts: array(
-                    0: static
-                )
-            )
-        )
-        stmts: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/class/php4Style.test b/vendor/nikic/php-parser/test/code/parser/stmt/class/php4Style.test
deleted file mode 100644
index 8906ef1325..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/class/php4Style.test
+++ /dev/null
@@ -1,59 +0,0 @@
-PHP 4 style declarations
------
-<?php
-
-class A {
-    var $foo;
-    function bar() {}
-    static abstract function baz() {}
-}
------
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_Property(
-                flags: 0
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: foo
-                        )
-                        default: null
-                    )
-                )
-            )
-            1: Stmt_ClassMethod(
-                flags: 0
-                byRef: false
-                name: Identifier(
-                    name: bar
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-            2: Stmt_ClassMethod(
-                flags: MODIFIER_ABSTRACT | MODIFIER_STATIC (24)
-                byRef: false
-                name: Identifier(
-                    name: baz
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/class/propertyTypes.test b/vendor/nikic/php-parser/test/code/parser/stmt/class/propertyTypes.test
deleted file mode 100644
index 55955f3f9b..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/class/propertyTypes.test
+++ /dev/null
@@ -1,70 +0,0 @@
-Class declaration
------
-<?php
-
-class A {
-    public string $a;
-    protected static D $b;
-    private ?float $c;
-}
------
-!!php7
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_Property(
-                flags: MODIFIER_PUBLIC (1)
-                type: Identifier(
-                    name: string
-                )
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: a
-                        )
-                        default: null
-                    )
-                )
-            )
-            1: Stmt_Property(
-                flags: MODIFIER_PROTECTED | MODIFIER_STATIC (10)
-                type: Name(
-                    parts: array(
-                        0: D
-                    )
-                )
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: b
-                        )
-                        default: null
-                    )
-                )
-            )
-            2: Stmt_Property(
-                flags: MODIFIER_PRIVATE (4)
-                type: NullableType(
-                    type: Identifier(
-                        name: float
-                    )
-                )
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: c
-                        )
-                        default: null
-                    )
-                )
-            )
-        )
-    )
-)
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/class/simple.test b/vendor/nikic/php-parser/test/code/parser/stmt/class/simple.test
deleted file mode 100644
index c0bd53f3c9..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/class/simple.test
+++ /dev/null
@@ -1,185 +0,0 @@
-Class declaration
------
-<?php
-
-class A extends B implements C, D {
-    const A = 'B', C = 'D';
-
-    public $a = 'b', $c = 'd';
-    protected $e;
-    private $f;
-
-    public function a() {}
-    public static function b($a) {}
-    public final function c() : B {}
-    protected function d() {}
-    private function e() {}
-}
------
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: Name(
-            parts: array(
-                0: B
-            )
-        )
-        implements: array(
-            0: Name(
-                parts: array(
-                    0: C
-                )
-            )
-            1: Name(
-                parts: array(
-                    0: D
-                )
-            )
-        )
-        stmts: array(
-            0: Stmt_ClassConst(
-                flags: 0
-                consts: array(
-                    0: Const(
-                        name: Identifier(
-                            name: A
-                        )
-                        value: Scalar_String(
-                            value: B
-                        )
-                    )
-                    1: Const(
-                        name: Identifier(
-                            name: C
-                        )
-                        value: Scalar_String(
-                            value: D
-                        )
-                    )
-                )
-            )
-            1: Stmt_Property(
-                flags: MODIFIER_PUBLIC (1)
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: a
-                        )
-                        default: Scalar_String(
-                            value: b
-                        )
-                    )
-                    1: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: c
-                        )
-                        default: Scalar_String(
-                            value: d
-                        )
-                    )
-                )
-            )
-            2: Stmt_Property(
-                flags: MODIFIER_PROTECTED (2)
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: e
-                        )
-                        default: null
-                    )
-                )
-            )
-            3: Stmt_Property(
-                flags: MODIFIER_PRIVATE (4)
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: f
-                        )
-                        default: null
-                    )
-                )
-            )
-            4: Stmt_ClassMethod(
-                flags: MODIFIER_PUBLIC (1)
-                byRef: false
-                name: Identifier(
-                    name: a
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-            5: Stmt_ClassMethod(
-                flags: MODIFIER_PUBLIC | MODIFIER_STATIC (9)
-                byRef: false
-                name: Identifier(
-                    name: b
-                )
-                params: array(
-                    0: Param(
-                        type: null
-                        byRef: false
-                        variadic: false
-                        var: Expr_Variable(
-                            name: a
-                        )
-                        default: null
-                    )
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-            6: Stmt_ClassMethod(
-                flags: MODIFIER_PUBLIC | MODIFIER_FINAL (33)
-                byRef: false
-                name: Identifier(
-                    name: c
-                )
-                params: array(
-                )
-                returnType: Name(
-                    parts: array(
-                        0: B
-                    )
-                )
-                stmts: array(
-                )
-            )
-            7: Stmt_ClassMethod(
-                flags: MODIFIER_PROTECTED (2)
-                byRef: false
-                name: Identifier(
-                    name: d
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-            8: Stmt_ClassMethod(
-                flags: MODIFIER_PRIVATE (4)
-                byRef: false
-                name: Identifier(
-                    name: e
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/class/staticMethod.test b/vendor/nikic/php-parser/test/code/parser/stmt/class/staticMethod.test
deleted file mode 100644
index 0540930e4f..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/class/staticMethod.test
+++ /dev/null
@@ -1,175 +0,0 @@
-Some special methods cannot be static
------
-<?php class A { static function __construct() {} }
------
-Constructor __construct() cannot be static from 1:17 to 1:22
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassMethod(
-                flags: MODIFIER_STATIC (8)
-                byRef: false
-                name: Identifier(
-                    name: __construct
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-        )
-    )
-)
------
-<?php class A { static function __destruct() {} }
------
-Destructor __destruct() cannot be static from 1:17 to 1:22
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassMethod(
-                flags: MODIFIER_STATIC (8)
-                byRef: false
-                name: Identifier(
-                    name: __destruct
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-        )
-    )
-)
------
-<?php class A { static function __clone() {} }
------
-Clone method __clone() cannot be static from 1:17 to 1:22
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassMethod(
-                flags: MODIFIER_STATIC (8)
-                byRef: false
-                name: Identifier(
-                    name: __clone
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-        )
-    )
-)
------
-<?php class A { static function __CONSTRUCT() {} }
------
-Constructor __CONSTRUCT() cannot be static from 1:17 to 1:22
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassMethod(
-                flags: MODIFIER_STATIC (8)
-                byRef: false
-                name: Identifier(
-                    name: __CONSTRUCT
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-        )
-    )
-)
------
-<?php class A { static function __Destruct() {} }
------
-Destructor __Destruct() cannot be static from 1:17 to 1:22
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassMethod(
-                flags: MODIFIER_STATIC (8)
-                byRef: false
-                name: Identifier(
-                    name: __Destruct
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-        )
-    )
-)
------
-<?php class A { static function __cLoNe() {} }
------
-Clone method __cLoNe() cannot be static from 1:17 to 1:22
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassMethod(
-                flags: MODIFIER_STATIC (8)
-                byRef: false
-                name: Identifier(
-                    name: __cLoNe
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/class/trait.test b/vendor/nikic/php-parser/test/code/parser/stmt/class/trait.test
deleted file mode 100644
index bda3cc56d7..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/class/trait.test
+++ /dev/null
@@ -1,188 +0,0 @@
-Traits
------
-<?php
-
-trait A {
-    public function a() {}
-}
-
-class B {
-    use C;
-    use D {
-        a as protected b;
-        c as d;
-        e as private;
-    }
-    use E, F, G {
-        E::a insteadof F, G;
-        E::b as protected c;
-        E::d as e;
-        E::f as private;
-    }
-}
------
-array(
-    0: Stmt_Trait(
-        name: Identifier(
-            name: A
-        )
-        stmts: array(
-            0: Stmt_ClassMethod(
-                flags: MODIFIER_PUBLIC (1)
-                byRef: false
-                name: Identifier(
-                    name: a
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-        )
-    )
-    1: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: B
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_TraitUse(
-                traits: array(
-                    0: Name(
-                        parts: array(
-                            0: C
-                        )
-                    )
-                )
-                adaptations: array(
-                )
-            )
-            1: Stmt_TraitUse(
-                traits: array(
-                    0: Name(
-                        parts: array(
-                            0: D
-                        )
-                    )
-                )
-                adaptations: array(
-                    0: Stmt_TraitUseAdaptation_Alias(
-                        trait: null
-                        method: Identifier(
-                            name: a
-                        )
-                        newModifier: MODIFIER_PROTECTED (2)
-                        newName: Identifier(
-                            name: b
-                        )
-                    )
-                    1: Stmt_TraitUseAdaptation_Alias(
-                        trait: null
-                        method: Identifier(
-                            name: c
-                        )
-                        newModifier: null
-                        newName: Identifier(
-                            name: d
-                        )
-                    )
-                    2: Stmt_TraitUseAdaptation_Alias(
-                        trait: null
-                        method: Identifier(
-                            name: e
-                        )
-                        newModifier: MODIFIER_PRIVATE (4)
-                        newName: null
-                    )
-                )
-            )
-            2: Stmt_TraitUse(
-                traits: array(
-                    0: Name(
-                        parts: array(
-                            0: E
-                        )
-                    )
-                    1: Name(
-                        parts: array(
-                            0: F
-                        )
-                    )
-                    2: Name(
-                        parts: array(
-                            0: G
-                        )
-                    )
-                )
-                adaptations: array(
-                    0: Stmt_TraitUseAdaptation_Precedence(
-                        trait: Name(
-                            parts: array(
-                                0: E
-                            )
-                        )
-                        method: Identifier(
-                            name: a
-                        )
-                        insteadof: array(
-                            0: Name(
-                                parts: array(
-                                    0: F
-                                )
-                            )
-                            1: Name(
-                                parts: array(
-                                    0: G
-                                )
-                            )
-                        )
-                    )
-                    1: Stmt_TraitUseAdaptation_Alias(
-                        trait: Name(
-                            parts: array(
-                                0: E
-                            )
-                        )
-                        method: Identifier(
-                            name: b
-                        )
-                        newModifier: MODIFIER_PROTECTED (2)
-                        newName: Identifier(
-                            name: c
-                        )
-                    )
-                    2: Stmt_TraitUseAdaptation_Alias(
-                        trait: Name(
-                            parts: array(
-                                0: E
-                            )
-                        )
-                        method: Identifier(
-                            name: d
-                        )
-                        newModifier: null
-                        newName: Identifier(
-                            name: e
-                        )
-                    )
-                    3: Stmt_TraitUseAdaptation_Alias(
-                        trait: Name(
-                            parts: array(
-                                0: E
-                            )
-                        )
-                        method: Identifier(
-                            name: f
-                        )
-                        newModifier: MODIFIER_PRIVATE (4)
-                        newName: null
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/const.test b/vendor/nikic/php-parser/test/code/parser/stmt/const.test
deleted file mode 100644
index e6c4db84ff..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/const.test
+++ /dev/null
@@ -1,48 +0,0 @@
-Global constants
------
-<?php
-
-const A = 0, B = 1.0, C = 'A', D = E;
------
-array(
-    0: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: A
-                )
-                value: Scalar_LNumber(
-                    value: 0
-                )
-            )
-            1: Const(
-                name: Identifier(
-                    name: B
-                )
-                value: Scalar_DNumber(
-                    value: 1
-                )
-            )
-            2: Const(
-                name: Identifier(
-                    name: C
-                )
-                value: Scalar_String(
-                    value: A
-                )
-            )
-            3: Const(
-                name: Identifier(
-                    name: D
-                )
-                value: Expr_ConstFetch(
-                    name: Name(
-                        parts: array(
-                            0: E
-                        )
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/controlFlow.test b/vendor/nikic/php-parser/test/code/parser/stmt/controlFlow.test
deleted file mode 100644
index d9c9fcf353..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/controlFlow.test
+++ /dev/null
@@ -1,59 +0,0 @@
-Control flow statements
------
-<?php
-
-break;
-break 2;
-
-continue;
-continue 2;
-
-return;
-return $a;
-
-throw $e;
-
-label:
-goto label;
------
-array(
-    0: Stmt_Break(
-        num: null
-    )
-    1: Stmt_Break(
-        num: Scalar_LNumber(
-            value: 2
-        )
-    )
-    2: Stmt_Continue(
-        num: null
-    )
-    3: Stmt_Continue(
-        num: Scalar_LNumber(
-            value: 2
-        )
-    )
-    4: Stmt_Return(
-        expr: null
-    )
-    5: Stmt_Return(
-        expr: Expr_Variable(
-            name: a
-        )
-    )
-    6: Stmt_Throw(
-        expr: Expr_Variable(
-            name: e
-        )
-    )
-    7: Stmt_Label(
-        name: Identifier(
-            name: label
-        )
-    )
-    8: Stmt_Goto(
-        name: Identifier(
-            name: label
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/declare.test b/vendor/nikic/php-parser/test/code/parser/stmt/declare.test
deleted file mode 100644
index f044d24f91..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/declare.test
+++ /dev/null
@@ -1,70 +0,0 @@
-Declare
------
-<?php
-
-declare (X='Y');
-
-declare (A='B', C='D') {}
-
-declare (A='B', C='D'):
-enddeclare;
------
-array(
-    0: Stmt_Declare(
-        declares: array(
-            0: Stmt_DeclareDeclare(
-                key: Identifier(
-                    name: X
-                )
-                value: Scalar_String(
-                    value: Y
-                )
-            )
-        )
-        stmts: null
-    )
-    1: Stmt_Declare(
-        declares: array(
-            0: Stmt_DeclareDeclare(
-                key: Identifier(
-                    name: A
-                )
-                value: Scalar_String(
-                    value: B
-                )
-            )
-            1: Stmt_DeclareDeclare(
-                key: Identifier(
-                    name: C
-                )
-                value: Scalar_String(
-                    value: D
-                )
-            )
-        )
-        stmts: array(
-        )
-    )
-    2: Stmt_Declare(
-        declares: array(
-            0: Stmt_DeclareDeclare(
-                key: Identifier(
-                    name: A
-                )
-                value: Scalar_String(
-                    value: B
-                )
-            )
-            1: Stmt_DeclareDeclare(
-                key: Identifier(
-                    name: C
-                )
-                value: Scalar_String(
-                    value: D
-                )
-            )
-        )
-        stmts: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/echo.test b/vendor/nikic/php-parser/test/code/parser/stmt/echo.test
deleted file mode 100644
index 1d03eae5d0..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/echo.test
+++ /dev/null
@@ -1,32 +0,0 @@
-Echo
------
-<?php
-
-echo 'Hallo World!';
-echo 'Hallo', ' ', 'World', '!';
------
-array(
-    0: Stmt_Echo(
-        exprs: array(
-            0: Scalar_String(
-                value: Hallo World!
-            )
-        )
-    )
-    1: Stmt_Echo(
-        exprs: array(
-            0: Scalar_String(
-                value: Hallo
-            )
-            1: Scalar_String(
-                value:
-            )
-            2: Scalar_String(
-                value: World
-            )
-            3: Scalar_String(
-                value: !
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/function/builtinTypeDeclarations.test b/vendor/nikic/php-parser/test/code/parser/stmt/function/builtinTypeDeclarations.test
deleted file mode 100644
index b90fd019aa..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/function/builtinTypeDeclarations.test
+++ /dev/null
@@ -1,87 +0,0 @@
-Scalar type declarations
------
-<?php
-function test(bool $a, Int $b, FLOAT $c, StRiNg $d, iterable $e, object $f) : void {}
------
-!!php7
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: test
-        )
-        params: array(
-            0: Param(
-                type: Identifier(
-                    name: bool
-                )
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: a
-                )
-                default: null
-            )
-            1: Param(
-                type: Identifier(
-                    name: int
-                )
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: b
-                )
-                default: null
-            )
-            2: Param(
-                type: Identifier(
-                    name: float
-                )
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: c
-                )
-                default: null
-            )
-            3: Param(
-                type: Identifier(
-                    name: string
-                )
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: d
-                )
-                default: null
-            )
-            4: Param(
-                type: Identifier(
-                    name: iterable
-                )
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: e
-                )
-                default: null
-            )
-            5: Param(
-                type: Identifier(
-                    name: object
-                )
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: f
-                )
-                default: null
-            )
-        )
-        returnType: Identifier(
-            name: void
-        )
-        stmts: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/function/byRef.test b/vendor/nikic/php-parser/test/code/parser/stmt/function/byRef.test
deleted file mode 100644
index 4b276e734d..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/function/byRef.test
+++ /dev/null
@@ -1,49 +0,0 @@
-Return and pass by ref
------
-<?php
-
-function a(&$b) {}
-function &a($b) {}
------
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: a
-        )
-        params: array(
-            0: Param(
-                type: null
-                byRef: true
-                variadic: false
-                var: Expr_Variable(
-                    name: b
-                )
-                default: null
-            )
-        )
-        returnType: null
-        stmts: array(
-        )
-    )
-    1: Stmt_Function(
-        byRef: true
-        name: Identifier(
-            name: a
-        )
-        params: array(
-            0: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: b
-                )
-                default: null
-            )
-        )
-        returnType: null
-        stmts: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/function/conditional.test b/vendor/nikic/php-parser/test/code/parser/stmt/function/conditional.test
deleted file mode 100644
index 8495aad1f0..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/function/conditional.test
+++ /dev/null
@@ -1,35 +0,0 @@
-Conditional function definition
------
-<?php
-
-if (true) {
-    function A() {}
-}
------
-array(
-    0: Stmt_If(
-        cond: Expr_ConstFetch(
-            name: Name(
-                parts: array(
-                    0: true
-                )
-            )
-        )
-        stmts: array(
-            0: Stmt_Function(
-                byRef: false
-                name: Identifier(
-                    name: A
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-        )
-        elseifs: array(
-        )
-        else: null
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/function/defaultValues.test b/vendor/nikic/php-parser/test/code/parser/stmt/function/defaultValues.test
deleted file mode 100644
index 505cddfdc7..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/function/defaultValues.test
+++ /dev/null
@@ -1,173 +0,0 @@
-Default values (static scalar tests)
------
-<?php
-
-function a(
-    $b = null,
-    $c = 'foo',
-    $d = A::B,
-    $f = +1,
-    $g = -1.0,
-    $h = array(),
-    $i = [],
-    $j = ['foo'],
-    $k = ['foo', 'bar' => 'baz']
-) {}
------
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: a
-        )
-        params: array(
-            0: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: b
-                )
-                default: Expr_ConstFetch(
-                    name: Name(
-                        parts: array(
-                            0: null
-                        )
-                    )
-                )
-            )
-            1: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: c
-                )
-                default: Scalar_String(
-                    value: foo
-                )
-            )
-            2: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: d
-                )
-                default: Expr_ClassConstFetch(
-                    class: Name(
-                        parts: array(
-                            0: A
-                        )
-                    )
-                    name: Identifier(
-                        name: B
-                    )
-                )
-            )
-            3: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: f
-                )
-                default: Expr_UnaryPlus(
-                    expr: Scalar_LNumber(
-                        value: 1
-                    )
-                )
-            )
-            4: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: g
-                )
-                default: Expr_UnaryMinus(
-                    expr: Scalar_DNumber(
-                        value: 1
-                    )
-                )
-            )
-            5: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: h
-                )
-                default: Expr_Array(
-                    items: array(
-                    )
-                )
-            )
-            6: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: i
-                )
-                default: Expr_Array(
-                    items: array(
-                    )
-                )
-            )
-            7: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: j
-                )
-                default: Expr_Array(
-                    items: array(
-                        0: Expr_ArrayItem(
-                            key: null
-                            value: Scalar_String(
-                                value: foo
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                    )
-                )
-            )
-            8: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: k
-                )
-                default: Expr_Array(
-                    items: array(
-                        0: Expr_ArrayItem(
-                            key: null
-                            value: Scalar_String(
-                                value: foo
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                        1: Expr_ArrayItem(
-                            key: Scalar_String(
-                                value: bar
-                            )
-                            value: Scalar_String(
-                                value: baz
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                    )
-                )
-            )
-        )
-        returnType: null
-        stmts: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/function/nullableTypes.test b/vendor/nikic/php-parser/test/code/parser/stmt/function/nullableTypes.test
deleted file mode 100644
index 8bf2d31dab..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/function/nullableTypes.test
+++ /dev/null
@@ -1,55 +0,0 @@
-Nullable types
------
-<?php
-
-function test(?Foo $bar, ?string $foo) : ?Baz {
-}
------
-!!php7
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: test
-        )
-        params: array(
-            0: Param(
-                type: NullableType(
-                    type: Name(
-                        parts: array(
-                            0: Foo
-                        )
-                    )
-                )
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: bar
-                )
-                default: null
-            )
-            1: Param(
-                type: NullableType(
-                    type: Identifier(
-                        name: string
-                    )
-                )
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: foo
-                )
-                default: null
-            )
-        )
-        returnType: NullableType(
-            type: Name(
-                parts: array(
-                    0: Baz
-                )
-            )
-        )
-        stmts: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/function/returnTypes.test b/vendor/nikic/php-parser/test/code/parser/stmt/function/returnTypes.test
deleted file mode 100644
index 8b71595e7e..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/function/returnTypes.test
+++ /dev/null
@@ -1,64 +0,0 @@
-Return type declarations
------
-<?php
-
-function test1() {}
-function test2() : array {}
-function test3() : callable {}
-function test4() : Foo\Bar {}
------
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: test1
-        )
-        params: array(
-        )
-        returnType: null
-        stmts: array(
-        )
-    )
-    1: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: test2
-        )
-        params: array(
-        )
-        returnType: Identifier(
-            name: array
-        )
-        stmts: array(
-        )
-    )
-    2: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: test3
-        )
-        params: array(
-        )
-        returnType: Identifier(
-            name: callable
-        )
-        stmts: array(
-        )
-    )
-    3: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: test4
-        )
-        params: array(
-        )
-        returnType: Name(
-            parts: array(
-                0: Foo
-                1: Bar
-            )
-        )
-        stmts: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/function/specialVars.test b/vendor/nikic/php-parser/test/code/parser/stmt/function/specialVars.test
deleted file mode 100644
index 10a9e0796e..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/function/specialVars.test
+++ /dev/null
@@ -1,57 +0,0 @@
-Special function variables
------
-<?php
-
-function a() {
-    global $a, ${'b'}, $$c;
-    static $c, $d = 'e';
-}
------
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: a
-        )
-        params: array(
-        )
-        returnType: null
-        stmts: array(
-            0: Stmt_Global(
-                vars: array(
-                    0: Expr_Variable(
-                        name: a
-                    )
-                    1: Expr_Variable(
-                        name: Scalar_String(
-                            value: b
-                        )
-                    )
-                    2: Expr_Variable(
-                        name: Expr_Variable(
-                            name: c
-                        )
-                    )
-                )
-            )
-            1: Stmt_Static(
-                vars: array(
-                    0: Stmt_StaticVar(
-                        var: Expr_Variable(
-                            name: c
-                        )
-                        default: null
-                    )
-                    1: Stmt_StaticVar(
-                        var: Expr_Variable(
-                            name: d
-                        )
-                        default: Scalar_String(
-                            value: e
-                        )
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/function/typeDeclarations.test b/vendor/nikic/php-parser/test/code/parser/stmt/function/typeDeclarations.test
deleted file mode 100644
index 8327cf32cd..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/function/typeDeclarations.test
+++ /dev/null
@@ -1,63 +0,0 @@
-Type hints
------
-<?php
-
-function a($b, array $c, callable $d, E $f) {}
------
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: a
-        )
-        params: array(
-            0: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: b
-                )
-                default: null
-            )
-            1: Param(
-                type: Identifier(
-                    name: array
-                )
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: c
-                )
-                default: null
-            )
-            2: Param(
-                type: Identifier(
-                    name: callable
-                )
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: d
-                )
-                default: null
-            )
-            3: Param(
-                type: Name(
-                    parts: array(
-                        0: E
-                    )
-                )
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: f
-                )
-                default: null
-            )
-        )
-        returnType: null
-        stmts: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/function/variadic.test b/vendor/nikic/php-parser/test/code/parser/stmt/function/variadic.test
deleted file mode 100644
index afbcf68fb2..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/function/variadic.test
+++ /dev/null
@@ -1,134 +0,0 @@
-Variadic functions
------
-<?php
-function test($a, ... $b) {}
-function test($a, &... $b) {}
-function test($a, Type ... $b) {}
-function test($a, Type &... $b) {}
------
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: test
-        )
-        params: array(
-            0: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: a
-                )
-                default: null
-            )
-            1: Param(
-                type: null
-                byRef: false
-                variadic: true
-                var: Expr_Variable(
-                    name: b
-                )
-                default: null
-            )
-        )
-        returnType: null
-        stmts: array(
-        )
-    )
-    1: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: test
-        )
-        params: array(
-            0: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: a
-                )
-                default: null
-            )
-            1: Param(
-                type: null
-                byRef: true
-                variadic: true
-                var: Expr_Variable(
-                    name: b
-                )
-                default: null
-            )
-        )
-        returnType: null
-        stmts: array(
-        )
-    )
-    2: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: test
-        )
-        params: array(
-            0: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: a
-                )
-                default: null
-            )
-            1: Param(
-                type: Name(
-                    parts: array(
-                        0: Type
-                    )
-                )
-                byRef: false
-                variadic: true
-                var: Expr_Variable(
-                    name: b
-                )
-                default: null
-            )
-        )
-        returnType: null
-        stmts: array(
-        )
-    )
-    3: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: test
-        )
-        params: array(
-            0: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: a
-                )
-                default: null
-            )
-            1: Param(
-                type: Name(
-                    parts: array(
-                        0: Type
-                    )
-                )
-                byRef: true
-                variadic: true
-                var: Expr_Variable(
-                    name: b
-                )
-                default: null
-            )
-        )
-        returnType: null
-        stmts: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/function/variadicDefaultValue.test b/vendor/nikic/php-parser/test/code/parser/stmt/function/variadicDefaultValue.test
deleted file mode 100644
index 0431f39ac1..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/function/variadicDefaultValue.test
+++ /dev/null
@@ -1,31 +0,0 @@
-Invalid variadic function
------
-<?php
-function foo(...$foo = []) {}
------
-Variadic parameter cannot have a default value from 2:24 to 2:25
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: foo
-        )
-        params: array(
-            0: Param(
-                type: null
-                byRef: false
-                variadic: true
-                var: Expr_Variable(
-                    name: foo
-                )
-                default: Expr_Array(
-                    items: array(
-                    )
-                )
-            )
-        )
-        returnType: null
-        stmts: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/generator/basic.test b/vendor/nikic/php-parser/test/code/parser/stmt/generator/basic.test
deleted file mode 100644
index 78ea9c09ee..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/generator/basic.test
+++ /dev/null
@@ -1,319 +0,0 @@
-Generators (yield expression)
------
-<?php
-
-function gen() {
-    // statements
-    yield;
-    yield $value;
-    yield $key => $value;
-
-    // expressions
-    $data = yield;
-    $data = (yield $value);
-    $data = (yield $key => $value);
-
-    // yield in language constructs with their own parentheses
-    if (yield $foo); elseif (yield $foo);
-    if (yield $foo): elseif (yield $foo): endif;
-    while (yield $foo);
-    do {} while (yield $foo);
-    switch (yield $foo) {}
-    die(yield $foo);
-
-    // yield in function calls
-    func(yield $foo);
-    $foo->func(yield $foo);
-    new Foo(yield $foo);
-
-    yield from $foo;
-    yield from $foo and yield from $bar;
-    yield from $foo + $bar;
-}
------
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: gen
-        )
-        params: array(
-        )
-        returnType: null
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Yield(
-                    key: null
-                    value: null
-                    comments: array(
-                        0: // statements
-                    )
-                )
-                comments: array(
-                    0: // statements
-                )
-            )
-            1: Stmt_Expression(
-                expr: Expr_Yield(
-                    key: null
-                    value: Expr_Variable(
-                        name: value
-                    )
-                )
-            )
-            2: Stmt_Expression(
-                expr: Expr_Yield(
-                    key: Expr_Variable(
-                        name: key
-                    )
-                    value: Expr_Variable(
-                        name: value
-                    )
-                )
-            )
-            3: Stmt_Expression(
-                expr: Expr_Assign(
-                    var: Expr_Variable(
-                        name: data
-                        comments: array(
-                            0: // expressions
-                        )
-                    )
-                    expr: Expr_Yield(
-                        key: null
-                        value: null
-                    )
-                    comments: array(
-                        0: // expressions
-                    )
-                )
-                comments: array(
-                    0: // expressions
-                )
-            )
-            4: Stmt_Expression(
-                expr: Expr_Assign(
-                    var: Expr_Variable(
-                        name: data
-                    )
-                    expr: Expr_Yield(
-                        key: null
-                        value: Expr_Variable(
-                            name: value
-                        )
-                    )
-                )
-            )
-            5: Stmt_Expression(
-                expr: Expr_Assign(
-                    var: Expr_Variable(
-                        name: data
-                    )
-                    expr: Expr_Yield(
-                        key: Expr_Variable(
-                            name: key
-                        )
-                        value: Expr_Variable(
-                            name: value
-                        )
-                    )
-                )
-            )
-            6: Stmt_If(
-                cond: Expr_Yield(
-                    key: null
-                    value: Expr_Variable(
-                        name: foo
-                    )
-                )
-                stmts: array(
-                )
-                elseifs: array(
-                    0: Stmt_ElseIf(
-                        cond: Expr_Yield(
-                            key: null
-                            value: Expr_Variable(
-                                name: foo
-                            )
-                        )
-                        stmts: array(
-                        )
-                    )
-                )
-                else: null
-                comments: array(
-                    0: // yield in language constructs with their own parentheses
-                )
-            )
-            7: Stmt_If(
-                cond: Expr_Yield(
-                    key: null
-                    value: Expr_Variable(
-                        name: foo
-                    )
-                )
-                stmts: array(
-                )
-                elseifs: array(
-                    0: Stmt_ElseIf(
-                        cond: Expr_Yield(
-                            key: null
-                            value: Expr_Variable(
-                                name: foo
-                            )
-                        )
-                        stmts: array(
-                        )
-                    )
-                )
-                else: null
-            )
-            8: Stmt_While(
-                cond: Expr_Yield(
-                    key: null
-                    value: Expr_Variable(
-                        name: foo
-                    )
-                )
-                stmts: array(
-                )
-            )
-            9: Stmt_Do(
-                stmts: array(
-                )
-                cond: Expr_Yield(
-                    key: null
-                    value: Expr_Variable(
-                        name: foo
-                    )
-                )
-            )
-            10: Stmt_Switch(
-                cond: Expr_Yield(
-                    key: null
-                    value: Expr_Variable(
-                        name: foo
-                    )
-                )
-                cases: array(
-                )
-            )
-            11: Stmt_Expression(
-                expr: Expr_Exit(
-                    expr: Expr_Yield(
-                        key: null
-                        value: Expr_Variable(
-                            name: foo
-                        )
-                    )
-                )
-            )
-            12: Stmt_Expression(
-                expr: Expr_FuncCall(
-                    name: Name(
-                        parts: array(
-                            0: func
-                        )
-                        comments: array(
-                            0: // yield in function calls
-                        )
-                    )
-                    args: array(
-                        0: Arg(
-                            value: Expr_Yield(
-                                key: null
-                                value: Expr_Variable(
-                                    name: foo
-                                )
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                    )
-                    comments: array(
-                        0: // yield in function calls
-                    )
-                )
-                comments: array(
-                    0: // yield in function calls
-                )
-            )
-            13: Stmt_Expression(
-                expr: Expr_MethodCall(
-                    var: Expr_Variable(
-                        name: foo
-                    )
-                    name: Identifier(
-                        name: func
-                    )
-                    args: array(
-                        0: Arg(
-                            value: Expr_Yield(
-                                key: null
-                                value: Expr_Variable(
-                                    name: foo
-                                )
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                    )
-                )
-            )
-            14: Stmt_Expression(
-                expr: Expr_New(
-                    class: Name(
-                        parts: array(
-                            0: Foo
-                        )
-                    )
-                    args: array(
-                        0: Arg(
-                            value: Expr_Yield(
-                                key: null
-                                value: Expr_Variable(
-                                    name: foo
-                                )
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                    )
-                )
-            )
-            15: Stmt_Expression(
-                expr: Expr_YieldFrom(
-                    expr: Expr_Variable(
-                        name: foo
-                    )
-                )
-            )
-            16: Stmt_Expression(
-                expr: Expr_BinaryOp_LogicalAnd(
-                    left: Expr_YieldFrom(
-                        expr: Expr_Variable(
-                            name: foo
-                        )
-                    )
-                    right: Expr_YieldFrom(
-                        expr: Expr_Variable(
-                            name: bar
-                        )
-                    )
-                )
-            )
-            17: Stmt_Expression(
-                expr: Expr_YieldFrom(
-                    expr: Expr_BinaryOp_Plus(
-                        left: Expr_Variable(
-                            name: foo
-                        )
-                        right: Expr_Variable(
-                            name: bar
-                        )
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/generator/yieldPrecedence.test b/vendor/nikic/php-parser/test/code/parser/stmt/generator/yieldPrecedence.test
deleted file mode 100644
index ce2b6374d6..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/generator/yieldPrecedence.test
+++ /dev/null
@@ -1,253 +0,0 @@
-Yield operator precedence
------
-<?php
-
-function gen() {
-    yield "a" . "b";
-    yield "a" or die;
-    yield "k" => "a" . "b";
-    yield "k" => "a" or die;
-    var_dump([yield "k" => "a" . "b"]);
-    yield yield "k1" => yield "k2" => "a" . "b";
-    yield yield "k1" => (yield "k2") => "a" . "b";
-    var_dump([yield "k1" => yield "k2" => "a" . "b"]);
-    var_dump([yield "k1" => (yield "k2") => "a" . "b"]);
-}
------
-!!php7
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: gen
-        )
-        params: array(
-        )
-        returnType: null
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Yield(
-                    key: null
-                    value: Expr_BinaryOp_Concat(
-                        left: Scalar_String(
-                            value: a
-                        )
-                        right: Scalar_String(
-                            value: b
-                        )
-                    )
-                )
-            )
-            1: Stmt_Expression(
-                expr: Expr_BinaryOp_LogicalOr(
-                    left: Expr_Yield(
-                        key: null
-                        value: Scalar_String(
-                            value: a
-                        )
-                    )
-                    right: Expr_Exit(
-                        expr: null
-                    )
-                )
-            )
-            2: Stmt_Expression(
-                expr: Expr_Yield(
-                    key: Scalar_String(
-                        value: k
-                    )
-                    value: Expr_BinaryOp_Concat(
-                        left: Scalar_String(
-                            value: a
-                        )
-                        right: Scalar_String(
-                            value: b
-                        )
-                    )
-                )
-            )
-            3: Stmt_Expression(
-                expr: Expr_BinaryOp_LogicalOr(
-                    left: Expr_Yield(
-                        key: Scalar_String(
-                            value: k
-                        )
-                        value: Scalar_String(
-                            value: a
-                        )
-                    )
-                    right: Expr_Exit(
-                        expr: null
-                    )
-                )
-            )
-            4: Stmt_Expression(
-                expr: Expr_FuncCall(
-                    name: Name(
-                        parts: array(
-                            0: var_dump
-                        )
-                    )
-                    args: array(
-                        0: Arg(
-                            value: Expr_Array(
-                                items: array(
-                                    0: Expr_ArrayItem(
-                                        key: null
-                                        value: Expr_Yield(
-                                            key: Scalar_String(
-                                                value: k
-                                            )
-                                            value: Expr_BinaryOp_Concat(
-                                                left: Scalar_String(
-                                                    value: a
-                                                )
-                                                right: Scalar_String(
-                                                    value: b
-                                                )
-                                            )
-                                        )
-                                        byRef: false
-                                        unpack: false
-                                    )
-                                )
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                    )
-                )
-            )
-            5: Stmt_Expression(
-                expr: Expr_Yield(
-                    key: null
-                    value: Expr_Yield(
-                        key: Scalar_String(
-                            value: k1
-                        )
-                        value: Expr_Yield(
-                            key: Scalar_String(
-                                value: k2
-                            )
-                            value: Expr_BinaryOp_Concat(
-                                left: Scalar_String(
-                                    value: a
-                                )
-                                right: Scalar_String(
-                                    value: b
-                                )
-                            )
-                        )
-                    )
-                )
-            )
-            6: Stmt_Expression(
-                expr: Expr_Yield(
-                    key: Expr_Yield(
-                        key: Scalar_String(
-                            value: k1
-                        )
-                        value: Expr_Yield(
-                            key: null
-                            value: Scalar_String(
-                                value: k2
-                            )
-                        )
-                    )
-                    value: Expr_BinaryOp_Concat(
-                        left: Scalar_String(
-                            value: a
-                        )
-                        right: Scalar_String(
-                            value: b
-                        )
-                    )
-                )
-            )
-            7: Stmt_Expression(
-                expr: Expr_FuncCall(
-                    name: Name(
-                        parts: array(
-                            0: var_dump
-                        )
-                    )
-                    args: array(
-                        0: Arg(
-                            value: Expr_Array(
-                                items: array(
-                                    0: Expr_ArrayItem(
-                                        key: null
-                                        value: Expr_Yield(
-                                            key: Scalar_String(
-                                                value: k1
-                                            )
-                                            value: Expr_Yield(
-                                                key: Scalar_String(
-                                                    value: k2
-                                                )
-                                                value: Expr_BinaryOp_Concat(
-                                                    left: Scalar_String(
-                                                        value: a
-                                                    )
-                                                    right: Scalar_String(
-                                                        value: b
-                                                    )
-                                                )
-                                            )
-                                        )
-                                        byRef: false
-                                        unpack: false
-                                    )
-                                )
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                    )
-                )
-            )
-            8: Stmt_Expression(
-                expr: Expr_FuncCall(
-                    name: Name(
-                        parts: array(
-                            0: var_dump
-                        )
-                    )
-                    args: array(
-                        0: Arg(
-                            value: Expr_Array(
-                                items: array(
-                                    0: Expr_ArrayItem(
-                                        key: Expr_Yield(
-                                            key: Scalar_String(
-                                                value: k1
-                                            )
-                                            value: Expr_Yield(
-                                                key: null
-                                                value: Scalar_String(
-                                                    value: k2
-                                                )
-                                            )
-                                        )
-                                        value: Expr_BinaryOp_Concat(
-                                            left: Scalar_String(
-                                                value: a
-                                            )
-                                            right: Scalar_String(
-                                                value: b
-                                            )
-                                        )
-                                        byRef: false
-                                        unpack: false
-                                    )
-                                )
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/generator/yieldUnaryPrecedence.test b/vendor/nikic/php-parser/test/code/parser/stmt/generator/yieldUnaryPrecedence.test
deleted file mode 100644
index 6b77d3357a..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/generator/yieldUnaryPrecedence.test
+++ /dev/null
@@ -1,56 +0,0 @@
-Yield with unary operator argument
------
-<?php
-
-function gen() {
-    yield +1;
-    yield -1;
-    yield * -1;
-}
------
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: gen
-        )
-        params: array(
-        )
-        returnType: null
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Yield(
-                    key: null
-                    value: Expr_UnaryPlus(
-                        expr: Scalar_LNumber(
-                            value: 1
-                        )
-                    )
-                )
-            )
-            1: Stmt_Expression(
-                expr: Expr_Yield(
-                    key: null
-                    value: Expr_UnaryMinus(
-                        expr: Scalar_LNumber(
-                            value: 1
-                        )
-                    )
-                )
-            )
-            2: Stmt_Expression(
-                expr: Expr_BinaryOp_Mul(
-                    left: Expr_Yield(
-                        key: null
-                        value: null
-                    )
-                    right: Expr_UnaryMinus(
-                        expr: Scalar_LNumber(
-                            value: 1
-                        )
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/haltCompiler.test b/vendor/nikic/php-parser/test/code/parser/stmt/haltCompiler.test
deleted file mode 100644
index 112946ea7c..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/haltCompiler.test
+++ /dev/null
@@ -1,61 +0,0 @@
-__halt_compiler
------
-<?php
-
-$a;
-__halt_compiler()
-?>
-Hallo World!
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Variable(
-            name: a
-        )
-    )
-    1: Stmt_HaltCompiler(
-        remaining: Hallo World!
-    )
-)
------
-<?php
-
-$a;
-__halt_compiler();Hallo World!
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Variable(
-            name: a
-        )
-    )
-    1: Stmt_HaltCompiler(
-        remaining: Hallo World!
-    )
-)
------
-<?php
-
-namespace A;
-$a;
-__halt_compiler();
------
-array(
-    0: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: A
-            )
-        )
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Variable(
-                    name: a
-                )
-            )
-        )
-    )
-    1: Stmt_HaltCompiler(
-        remaining:
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/haltCompilerInvalidSyntax.test b/vendor/nikic/php-parser/test/code/parser/stmt/haltCompilerInvalidSyntax.test
deleted file mode 100644
index 381019a9bf..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/haltCompilerInvalidSyntax.test
+++ /dev/null
@@ -1,6 +0,0 @@
-Invalid __halt_compiler() syntax
------
-<?php
-__halt_compiler()
------
-__HALT_COMPILER must be followed by "();" on line 2
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/haltCompilerOffset.test b/vendor/nikic/php-parser/test/code/parser/stmt/haltCompilerOffset.test
deleted file mode 100644
index 16b902938d..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/haltCompilerOffset.test
+++ /dev/null
@@ -1,36 +0,0 @@
-Use of __HALT_COMPILER_OFFSET__ constant
------
-<?php
-
-var_dump(__HALT_COMPILER_OFFSET__);
-__halt_compiler();
-Foo
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: var_dump
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Expr_ConstFetch(
-                        name: Name(
-                            parts: array(
-                                0: __HALT_COMPILER_OFFSET__
-                            )
-                        )
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    1: Stmt_HaltCompiler(
-        remaining:
-    Foo
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/haltCompilerOutermostScope.test b/vendor/nikic/php-parser/test/code/parser/stmt/haltCompilerOutermostScope.test
deleted file mode 100644
index fddb6191d3..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/haltCompilerOutermostScope.test
+++ /dev/null
@@ -1,8 +0,0 @@
-__halt_compiler can only be used from outermost scope
------
-<?php
-if (true) {
-    __halt_compiler();
-}
------
-__HALT_COMPILER() can only be used from the outermost scope from 3:5 to 3:19
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/hashbang.test b/vendor/nikic/php-parser/test/code/parser/stmt/hashbang.test
deleted file mode 100644
index 60eff65216..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/hashbang.test
+++ /dev/null
@@ -1,26 +0,0 @@
-Hashbang line
------
-#!/usr/bin/env php
-<?php
-
-echo "foobar";
-
-?>
-#!/usr/bin/env php
------
-array(
-    0: Stmt_InlineHTML(
-        value: #!/usr/bin/env php
-
-    )
-    1: Stmt_Echo(
-        exprs: array(
-            0: Scalar_String(
-                value: foobar
-            )
-        )
-    )
-    2: Stmt_InlineHTML(
-        value: #!/usr/bin/env php
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/if.test b/vendor/nikic/php-parser/test/code/parser/stmt/if.test
deleted file mode 100644
index e054c89766..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/if.test
+++ /dev/null
@@ -1,103 +0,0 @@
-If/Elseif/Else
------
-<?php
-
-if      ($a) {}
-elseif  ($b) {}
-elseif  ($c) {}
-else         {}
-
-if ($a) {} // without else
-
-if      ($a):
-elseif  ($b):
-elseif  ($c):
-else        :
-endif;
-
-if ($a): endif; // without else
------
-array(
-    0: Stmt_If(
-        cond: Expr_Variable(
-            name: a
-        )
-        stmts: array(
-        )
-        elseifs: array(
-            0: Stmt_ElseIf(
-                cond: Expr_Variable(
-                    name: b
-                )
-                stmts: array(
-                )
-            )
-            1: Stmt_ElseIf(
-                cond: Expr_Variable(
-                    name: c
-                )
-                stmts: array(
-                )
-            )
-        )
-        else: Stmt_Else(
-            stmts: array(
-            )
-        )
-    )
-    1: Stmt_If(
-        cond: Expr_Variable(
-            name: a
-        )
-        stmts: array(
-        )
-        elseifs: array(
-        )
-        else: null
-    )
-    2: Stmt_If(
-        cond: Expr_Variable(
-            name: a
-        )
-        stmts: array(
-        )
-        elseifs: array(
-            0: Stmt_ElseIf(
-                cond: Expr_Variable(
-                    name: b
-                )
-                stmts: array(
-                )
-            )
-            1: Stmt_ElseIf(
-                cond: Expr_Variable(
-                    name: c
-                )
-                stmts: array(
-                )
-            )
-        )
-        else: Stmt_Else(
-            stmts: array(
-            )
-        )
-        comments: array(
-            0: // without else
-        )
-    )
-    3: Stmt_If(
-        cond: Expr_Variable(
-            name: a
-        )
-        stmts: array(
-        )
-        elseifs: array(
-        )
-        else: null
-    )
-    4: Stmt_Nop(
-        comments: array(
-            0: // without else
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/inlineHTML.test b/vendor/nikic/php-parser/test/code/parser/stmt/inlineHTML.test
deleted file mode 100644
index a7e543cfcd..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/inlineHTML.test
+++ /dev/null
@@ -1,33 +0,0 @@
-Inline HTML
------
-<?php
-$a;
-?>
-B
-<?php
-$c;
-?>
-<?php
-$d;
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Variable(
-            name: a
-        )
-    )
-    1: Stmt_InlineHTML(
-        value: B
-
-    )
-    2: Stmt_Expression(
-        expr: Expr_Variable(
-            name: c
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_Variable(
-            name: d
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/loop/do.test b/vendor/nikic/php-parser/test/code/parser/stmt/loop/do.test
deleted file mode 100644
index 76c8081082..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/loop/do.test
+++ /dev/null
@@ -1,17 +0,0 @@
-Do loop
------
-<?php
-
-do {
-
-} while ($a);
------
-array(
-    0: Stmt_Do(
-        stmts: array(
-        )
-        cond: Expr_Variable(
-            name: a
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/loop/for.test b/vendor/nikic/php-parser/test/code/parser/stmt/loop/for.test
deleted file mode 100644
index c942d311e6..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/loop/for.test
+++ /dev/null
@@ -1,110 +0,0 @@
-For loop
------
-<?php
-
-// "classical" loop
-for ($i = 0; $i < $c; ++$i) {}
-
-// multiple expressions
-for ($a, $b; $c, $d; $e, $f) {}
-
-// infinite loop
-for (;;) {}
-
-// alternative syntax
-for (;;):
-endfor;
------
-array(
-    0: Stmt_For(
-        init: array(
-            0: Expr_Assign(
-                var: Expr_Variable(
-                    name: i
-                )
-                expr: Scalar_LNumber(
-                    value: 0
-                )
-            )
-        )
-        cond: array(
-            0: Expr_BinaryOp_Smaller(
-                left: Expr_Variable(
-                    name: i
-                )
-                right: Expr_Variable(
-                    name: c
-                )
-            )
-        )
-        loop: array(
-            0: Expr_PreInc(
-                var: Expr_Variable(
-                    name: i
-                )
-            )
-        )
-        stmts: array(
-        )
-        comments: array(
-            0: // "classical" loop
-        )
-    )
-    1: Stmt_For(
-        init: array(
-            0: Expr_Variable(
-                name: a
-            )
-            1: Expr_Variable(
-                name: b
-            )
-        )
-        cond: array(
-            0: Expr_Variable(
-                name: c
-            )
-            1: Expr_Variable(
-                name: d
-            )
-        )
-        loop: array(
-            0: Expr_Variable(
-                name: e
-            )
-            1: Expr_Variable(
-                name: f
-            )
-        )
-        stmts: array(
-        )
-        comments: array(
-            0: // multiple expressions
-        )
-    )
-    2: Stmt_For(
-        init: array(
-        )
-        cond: array(
-        )
-        loop: array(
-        )
-        stmts: array(
-        )
-        comments: array(
-            0: // infinite loop
-        )
-    )
-    3: Stmt_For(
-        init: array(
-        )
-        cond: array(
-        )
-        loop: array(
-        )
-        stmts: array(
-        )
-        comments: array(
-            0: // alternative syntax
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/loop/foreach.test b/vendor/nikic/php-parser/test/code/parser/stmt/loop/foreach.test
deleted file mode 100644
index 2dc802fc0c..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/loop/foreach.test
+++ /dev/null
@@ -1,168 +0,0 @@
-Foreach loop
------
-<?php
-
-// foreach on variable
-foreach ($a as $b)  {}
-foreach ($a as &$b) {}
-foreach ($a as $b => $c) {}
-foreach ($a as $b => &$c) {}
-foreach ($a as list($a, $b)) {}
-foreach ($a as $a => list($b, , $c)) {}
-
-// foreach on expression
-foreach (array() as $b) {}
-
-// alternative syntax
-foreach ($a as $b):
-endforeach;
------
-array(
-    0: Stmt_Foreach(
-        expr: Expr_Variable(
-            name: a
-        )
-        keyVar: null
-        byRef: false
-        valueVar: Expr_Variable(
-            name: b
-        )
-        stmts: array(
-        )
-        comments: array(
-            0: // foreach on variable
-        )
-    )
-    1: Stmt_Foreach(
-        expr: Expr_Variable(
-            name: a
-        )
-        keyVar: null
-        byRef: true
-        valueVar: Expr_Variable(
-            name: b
-        )
-        stmts: array(
-        )
-    )
-    2: Stmt_Foreach(
-        expr: Expr_Variable(
-            name: a
-        )
-        keyVar: Expr_Variable(
-            name: b
-        )
-        byRef: false
-        valueVar: Expr_Variable(
-            name: c
-        )
-        stmts: array(
-        )
-    )
-    3: Stmt_Foreach(
-        expr: Expr_Variable(
-            name: a
-        )
-        keyVar: Expr_Variable(
-            name: b
-        )
-        byRef: true
-        valueVar: Expr_Variable(
-            name: c
-        )
-        stmts: array(
-        )
-    )
-    4: Stmt_Foreach(
-        expr: Expr_Variable(
-            name: a
-        )
-        keyVar: null
-        byRef: false
-        valueVar: Expr_List(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: null
-                    value: Expr_Variable(
-                        name: a
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                1: Expr_ArrayItem(
-                    key: null
-                    value: Expr_Variable(
-                        name: b
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-        stmts: array(
-        )
-    )
-    5: Stmt_Foreach(
-        expr: Expr_Variable(
-            name: a
-        )
-        keyVar: Expr_Variable(
-            name: a
-        )
-        byRef: false
-        valueVar: Expr_List(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: null
-                    value: Expr_Variable(
-                        name: b
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                1: null
-                2: Expr_ArrayItem(
-                    key: null
-                    value: Expr_Variable(
-                        name: c
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-        stmts: array(
-        )
-    )
-    6: Stmt_Foreach(
-        expr: Expr_Array(
-            items: array(
-            )
-        )
-        keyVar: null
-        byRef: false
-        valueVar: Expr_Variable(
-            name: b
-        )
-        stmts: array(
-        )
-        comments: array(
-            0: // foreach on expression
-        )
-    )
-    7: Stmt_Foreach(
-        expr: Expr_Variable(
-            name: a
-        )
-        keyVar: null
-        byRef: false
-        valueVar: Expr_Variable(
-            name: b
-        )
-        stmts: array(
-        )
-        comments: array(
-            0: // alternative syntax
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/loop/while.test b/vendor/nikic/php-parser/test/code/parser/stmt/loop/while.test
deleted file mode 100644
index 65f6b2336f..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/loop/while.test
+++ /dev/null
@@ -1,25 +0,0 @@
-While loop
------
-<?php
-
-while ($a) {}
-
-while ($a):
-endwhile;
------
-array(
-    0: Stmt_While(
-        cond: Expr_Variable(
-            name: a
-        )
-        stmts: array(
-        )
-    )
-    1: Stmt_While(
-        cond: Expr_Variable(
-            name: a
-        )
-        stmts: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/multiCatch.test b/vendor/nikic/php-parser/test/code/parser/stmt/multiCatch.test
deleted file mode 100644
index f7cfb3c6b8..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/multiCatch.test
+++ /dev/null
@@ -1,75 +0,0 @@
-Try/catch with multiple classes
------
-<?php
-try {
-    $x;
-} catch (X|Y $e1) {
-    $y;
-} catch (\A|B\C $e2) {
-    $z;
-}
------
-!!php7
-array(
-    0: Stmt_TryCatch(
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Variable(
-                    name: x
-                )
-            )
-        )
-        catches: array(
-            0: Stmt_Catch(
-                types: array(
-                    0: Name(
-                        parts: array(
-                            0: X
-                        )
-                    )
-                    1: Name(
-                        parts: array(
-                            0: Y
-                        )
-                    )
-                )
-                var: Expr_Variable(
-                    name: e1
-                )
-                stmts: array(
-                    0: Stmt_Expression(
-                        expr: Expr_Variable(
-                            name: y
-                        )
-                    )
-                )
-            )
-            1: Stmt_Catch(
-                types: array(
-                    0: Name_FullyQualified(
-                        parts: array(
-                            0: A
-                        )
-                    )
-                    1: Name(
-                        parts: array(
-                            0: B
-                            1: C
-                        )
-                    )
-                )
-                var: Expr_Variable(
-                    name: e2
-                )
-                stmts: array(
-                    0: Stmt_Expression(
-                        expr: Expr_Variable(
-                            name: z
-                        )
-                    )
-                )
-            )
-        )
-        finally: null
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/alias.test b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/alias.test
deleted file mode 100644
index ef3f4256cf..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/alias.test
+++ /dev/null
@@ -1,178 +0,0 @@
-Aliases (use)
------
-<?php
-
-use A\B;
-use C\D as E;
-use F\G as H, J;
-
-// evil alias notation - Do Not Use!
-use \A;
-use \A as B;
-
-// function and constant aliases
-use function foo\bar;
-use function foo\bar as baz;
-use const foo\BAR;
-use const foo\BAR as BAZ;
------
-array(
-    0: Stmt_Use(
-        type: TYPE_NORMAL (1)
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: A
-                        1: B
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-    1: Stmt_Use(
-        type: TYPE_NORMAL (1)
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: C
-                        1: D
-                    )
-                )
-                alias: Identifier(
-                    name: E
-                )
-            )
-        )
-    )
-    2: Stmt_Use(
-        type: TYPE_NORMAL (1)
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: F
-                        1: G
-                    )
-                )
-                alias: Identifier(
-                    name: H
-                )
-            )
-            1: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: J
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-    3: Stmt_Use(
-        type: TYPE_NORMAL (1)
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: A
-                    )
-                )
-                alias: null
-            )
-        )
-        comments: array(
-            0: // evil alias notation - Do Not Use!
-        )
-    )
-    4: Stmt_Use(
-        type: TYPE_NORMAL (1)
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: A
-                    )
-                )
-                alias: Identifier(
-                    name: B
-                )
-            )
-        )
-    )
-    5: Stmt_Use(
-        type: TYPE_FUNCTION (2)
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: foo
-                        1: bar
-                    )
-                )
-                alias: null
-            )
-        )
-        comments: array(
-            0: // function and constant aliases
-        )
-    )
-    6: Stmt_Use(
-        type: TYPE_FUNCTION (2)
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: foo
-                        1: bar
-                    )
-                )
-                alias: Identifier(
-                    name: baz
-                )
-            )
-        )
-    )
-    7: Stmt_Use(
-        type: TYPE_CONSTANT (3)
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: foo
-                        1: BAR
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-    8: Stmt_Use(
-        type: TYPE_CONSTANT (3)
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: foo
-                        1: BAR
-                    )
-                )
-                alias: Identifier(
-                    name: BAZ
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/braced.test b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/braced.test
deleted file mode 100644
index a057352f41..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/braced.test
+++ /dev/null
@@ -1,46 +0,0 @@
-Braced namespaces
------
-<?php
-
-namespace Foo\Bar {
-    foo;
-}
-namespace {
-    bar;
-}
------
-array(
-    0: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: Foo
-                1: Bar
-            )
-        )
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_ConstFetch(
-                    name: Name(
-                        parts: array(
-                            0: foo
-                        )
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_Namespace(
-        name: null
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_ConstFetch(
-                    name: Name(
-                        parts: array(
-                            0: bar
-                        )
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/commentAfterNamespace.test b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/commentAfterNamespace.test
deleted file mode 100644
index 3f379b734f..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/commentAfterNamespace.test
+++ /dev/null
@@ -1,22 +0,0 @@
-Trailing comment after braced namespace declaration
------
-<?php
-namespace Foo {}
-// Comment
------
-array(
-    0: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: Foo
-            )
-        )
-        stmts: array(
-        )
-    )
-    1: Stmt_Nop(
-        comments: array(
-            0: // Comment
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/groupUse.test b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/groupUse.test
deleted file mode 100644
index d68aadba7b..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/groupUse.test
+++ /dev/null
@@ -1,188 +0,0 @@
-Group use declarations
------
-<?php
-use A\{B};
-use A\{B\C, D};
-use \A\B\{C\D, E};
-use function A\{b\c, d};
-use const \A\{B\C, D};
-use A\B\{C\D, function b\c, const D};
------
-array(
-    0: Stmt_GroupUse(
-        type: TYPE_UNKNOWN (0)
-        prefix: Name(
-            parts: array(
-                0: A
-            )
-        )
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_NORMAL (1)
-                name: Name(
-                    parts: array(
-                        0: B
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-    1: Stmt_GroupUse(
-        type: TYPE_UNKNOWN (0)
-        prefix: Name(
-            parts: array(
-                0: A
-            )
-        )
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_NORMAL (1)
-                name: Name(
-                    parts: array(
-                        0: B
-                        1: C
-                    )
-                )
-                alias: null
-            )
-            1: Stmt_UseUse(
-                type: TYPE_NORMAL (1)
-                name: Name(
-                    parts: array(
-                        0: D
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-    2: Stmt_GroupUse(
-        type: TYPE_UNKNOWN (0)
-        prefix: Name(
-            parts: array(
-                0: A
-                1: B
-            )
-        )
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_NORMAL (1)
-                name: Name(
-                    parts: array(
-                        0: C
-                        1: D
-                    )
-                )
-                alias: null
-            )
-            1: Stmt_UseUse(
-                type: TYPE_NORMAL (1)
-                name: Name(
-                    parts: array(
-                        0: E
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-    3: Stmt_GroupUse(
-        type: TYPE_FUNCTION (2)
-        prefix: Name(
-            parts: array(
-                0: A
-            )
-        )
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: b
-                        1: c
-                    )
-                )
-                alias: null
-            )
-            1: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: d
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-    4: Stmt_GroupUse(
-        type: TYPE_CONSTANT (3)
-        prefix: Name(
-            parts: array(
-                0: A
-            )
-        )
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: B
-                        1: C
-                    )
-                )
-                alias: null
-            )
-            1: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: D
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-    5: Stmt_GroupUse(
-        type: TYPE_UNKNOWN (0)
-        prefix: Name(
-            parts: array(
-                0: A
-                1: B
-            )
-        )
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_NORMAL (1)
-                name: Name(
-                    parts: array(
-                        0: C
-                        1: D
-                    )
-                )
-                alias: null
-            )
-            1: Stmt_UseUse(
-                type: TYPE_FUNCTION (2)
-                name: Name(
-                    parts: array(
-                        0: b
-                        1: c
-                    )
-                )
-                alias: null
-            )
-            2: Stmt_UseUse(
-                type: TYPE_CONSTANT (3)
-                name: Name(
-                    parts: array(
-                        0: D
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/groupUseErrors.test b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/groupUseErrors.test
deleted file mode 100644
index 1cccf86c71..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/groupUseErrors.test
+++ /dev/null
@@ -1,113 +0,0 @@
-Invalid group use syntax
------
-<?php
-// Missing semicolon
-use Foo\{Bar}
-use Bar\{Foo};
------
-!!php7
-Syntax error, unexpected T_USE, expecting ';' from 4:1 to 4:3
-array(
-    0: Stmt_GroupUse(
-        type: TYPE_UNKNOWN (0)
-        prefix: Name(
-            parts: array(
-                0: Foo
-            )
-        )
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_NORMAL (1)
-                name: Name(
-                    parts: array(
-                        0: Bar
-                    )
-                )
-                alias: null
-            )
-        )
-        comments: array(
-            0: // Missing semicolon
-        )
-    )
-    1: Stmt_GroupUse(
-        type: TYPE_UNKNOWN (0)
-        prefix: Name(
-            parts: array(
-                0: Bar
-            )
-        )
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_NORMAL (1)
-                name: Name(
-                    parts: array(
-                        0: Foo
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-)
------
-<?php
-// Missing NS separator
-use Foo {Bar, Baz};
------
-!!php7
-Syntax error, unexpected '{', expecting ';' from 3:9 to 3:9
-array(
-    0: Stmt_Use(
-        type: TYPE_NORMAL (1)
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: Foo
-                    )
-                )
-                alias: null
-            )
-        )
-        comments: array(
-            0: // Missing NS separator
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_ConstFetch(
-            name: Name(
-                parts: array(
-                    0: Bar
-                )
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_ConstFetch(
-            name: Name(
-                parts: array(
-                    0: Baz
-                )
-            )
-        )
-    )
-)
------
-<?php
-// Extra NS separator
-use Foo\{\Bar};
------
-Syntax error, unexpected T_NS_SEPARATOR, expecting T_STRING or T_FUNCTION or T_CONST from 3:10 to 3:10
-array(
-    0: Stmt_Expression(
-        expr: Expr_ConstFetch(
-            name: Name_FullyQualified(
-                parts: array(
-                    0: Bar
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/groupUsePositions.test b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/groupUsePositions.test
deleted file mode 100644
index 7898b208b0..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/groupUsePositions.test
+++ /dev/null
@@ -1,28 +0,0 @@
-Ensure correct file position attributes for group use prefix
------
-<?php
-use Foo\Bar\{Baz};
------
-!!positions
-array(
-    0: Stmt_GroupUse[2:1 - 2:17](
-        type: TYPE_UNKNOWN (0)
-        prefix: Name[2:5 - 2:11](
-            parts: array(
-                0: Foo
-                1: Bar
-            )
-        )
-        uses: array(
-            0: Stmt_UseUse[2:14 - 2:16](
-                type: TYPE_NORMAL (1)
-                name: Name[2:14 - 2:16](
-                    parts: array(
-                        0: Baz
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/groupUseTrailingComma.test b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/groupUseTrailingComma.test
deleted file mode 100644
index 0327a9b39a..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/groupUseTrailingComma.test
+++ /dev/null
@@ -1,47 +0,0 @@
-Group use can have trailing comma
------
-<?php
-use A\{B,};
-use function A\{b,};
------
-!!php7
-array(
-    0: Stmt_GroupUse(
-        type: TYPE_UNKNOWN (0)
-        prefix: Name(
-            parts: array(
-                0: A
-            )
-        )
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_NORMAL (1)
-                name: Name(
-                    parts: array(
-                        0: B
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-    1: Stmt_GroupUse(
-        type: TYPE_FUNCTION (2)
-        prefix: Name(
-            parts: array(
-                0: A
-            )
-        )
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: b
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/invalidName.test b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/invalidName.test
deleted file mode 100644
index 2f466d396e..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/invalidName.test
+++ /dev/null
@@ -1,87 +0,0 @@
-Invalid namespace names
------
-<?php namespace self;
------
-Cannot use 'self' as namespace name from 1:17 to 1:20
-array(
-    0: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: self
-            )
-        )
-        stmts: array(
-        )
-    )
-)
------
-<?php namespace PARENT;
------
-Cannot use 'PARENT' as namespace name from 1:17 to 1:22
-array(
-    0: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: PARENT
-            )
-        )
-        stmts: array(
-        )
-    )
-)
------
-<?php namespace static;
------
-Syntax error, unexpected T_STATIC, expecting T_STRING or T_NS_SEPARATOR or '{' from 1:17 to 1:22
-array(
-)
------
-<?php use A as self;
------
-Cannot use A as self because 'self' is a special class name from 1:16 to 1:19
-array(
-    0: Stmt_Use(
-        type: TYPE_NORMAL (1)
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: A
-                    )
-                )
-                alias: Identifier(
-                    name: self
-                )
-            )
-        )
-    )
-)
------
-<?php use B as PARENT;
------
-Cannot use B as PARENT because 'PARENT' is a special class name from 1:16 to 1:21
-array(
-    0: Stmt_Use(
-        type: TYPE_NORMAL (1)
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: B
-                    )
-                )
-                alias: Identifier(
-                    name: PARENT
-                )
-            )
-        )
-    )
-)
------
-<?php use C as static;
------
-Syntax error, unexpected T_STATIC, expecting T_STRING from 1:16 to 1:21
-array(
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/mix.test b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/mix.test
deleted file mode 100644
index 0fbfbf4241..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/mix.test
+++ /dev/null
@@ -1,103 +0,0 @@
-Namespace types cannot be mixed
------
-<?php
-namespace A;
-echo 1;
-namespace B {
-    echo 2;
-}
-echo 3;
------
-Cannot mix bracketed namespace declarations with unbracketed namespace declarations on line 4
-array(
-    0: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: A
-            )
-        )
-        stmts: array(
-            0: Stmt_Echo(
-                exprs: array(
-                    0: Scalar_LNumber(
-                        value: 1
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: B
-            )
-        )
-        stmts: array(
-            0: Stmt_Echo(
-                exprs: array(
-                    0: Scalar_LNumber(
-                        value: 2
-                    )
-                )
-            )
-        )
-    )
-    2: Stmt_Echo(
-        exprs: array(
-            0: Scalar_LNumber(
-                value: 3
-            )
-        )
-    )
-)
------
-<?php
-namespace A {
-    echo 1;
-}
-echo 2;
-namespace B;
-echo 3;
------
-Cannot mix bracketed namespace declarations with unbracketed namespace declarations on line 6
-array(
-    0: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: A
-            )
-        )
-        stmts: array(
-            0: Stmt_Echo(
-                exprs: array(
-                    0: Scalar_LNumber(
-                        value: 1
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_Echo(
-        exprs: array(
-            0: Scalar_LNumber(
-                value: 2
-            )
-        )
-    )
-    2: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: B
-            )
-        )
-        stmts: array(
-            0: Stmt_Echo(
-                exprs: array(
-                    0: Scalar_LNumber(
-                        value: 3
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/name.test b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/name.test
deleted file mode 100644
index 9a5babb36a..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/name.test
+++ /dev/null
@@ -1,50 +0,0 @@
-Different name types
------
-<?php
-
-A;
-A\B;
-\A\B;
-namespace\A\B;
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_ConstFetch(
-            name: Name(
-                parts: array(
-                    0: A
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_ConstFetch(
-            name: Name(
-                parts: array(
-                    0: A
-                    1: B
-                )
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_ConstFetch(
-            name: Name_FullyQualified(
-                parts: array(
-                    0: A
-                    1: B
-                )
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_ConstFetch(
-            name: Name_Relative(
-                parts: array(
-                    0: A
-                    1: B
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/nested.test b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/nested.test
deleted file mode 100644
index 840daffe92..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/nested.test
+++ /dev/null
@@ -1,30 +0,0 @@
-Nested namespaces are not allowed
------
-<?php
-namespace A {
-    namespace B {
-
-    }
-}
------
-Namespace declarations cannot be nested from 3:5 to 5:5
-array(
-    0: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: A
-            )
-        )
-        stmts: array(
-            0: Stmt_Namespace(
-                name: Name(
-                    parts: array(
-                        0: B
-                    )
-                )
-                stmts: array(
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/notBraced.test b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/notBraced.test
deleted file mode 100644
index aa34fc5c3b..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/notBraced.test
+++ /dev/null
@@ -1,49 +0,0 @@
-Semicolon style namespaces
------
-<?php
-
-namespace Foo\Bar;
-foo;
-
-namespace Bar;
-bar;
------
-array(
-    0: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: Foo
-                1: Bar
-            )
-        )
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_ConstFetch(
-                    name: Name(
-                        parts: array(
-                            0: foo
-                        )
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: Bar
-            )
-        )
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_ConstFetch(
-                    name: Name(
-                        parts: array(
-                            0: bar
-                        )
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/nsAfterHashbang.test b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/nsAfterHashbang.test
deleted file mode 100644
index 6d452538d4..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/nsAfterHashbang.test
+++ /dev/null
@@ -1,22 +0,0 @@
-Hashbang followed by namespace declaration
------
-#!/usr/bin/env php
-<?php
-
-namespace A;
------
-array(
-    0: Stmt_InlineHTML(
-        value: #!/usr/bin/env php
-
-    )
-    1: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: A
-            )
-        )
-        stmts: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/outsideStmt.test b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/outsideStmt.test
deleted file mode 100644
index fe8bde6686..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/outsideStmt.test
+++ /dev/null
@@ -1,60 +0,0 @@
-Some statements may occur outside of namespaces
------
-<?php
-declare(A='B');
-namespace B {
-
-}
-__halt_compiler()
-?>
-Hi!
------
-array(
-    0: Stmt_Declare(
-        declares: array(
-            0: Stmt_DeclareDeclare(
-                key: Identifier(
-                    name: A
-                )
-                value: Scalar_String(
-                    value: B
-                )
-            )
-        )
-        stmts: null
-    )
-    1: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: B
-            )
-        )
-        stmts: array(
-        )
-    )
-    2: Stmt_HaltCompiler(
-        remaining: Hi!
-    )
-)
------
-<?php
-/* Comment */
-;
-namespace Foo;
------
-array(
-    0: Stmt_Nop(
-        comments: array(
-            0: /* Comment */
-        )
-    )
-    1: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: Foo
-            )
-        )
-        stmts: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/outsideStmtInvalid.test b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/outsideStmtInvalid.test
deleted file mode 100644
index 85bd180818..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/outsideStmtInvalid.test
+++ /dev/null
@@ -1,109 +0,0 @@
-There (mostly) can't be statements outside of namespaces
------
-<?php
-echo 1;
-echo 2;
-namespace A;
------
-Namespace declaration statement has to be the very first statement in the script on line 4
-array(
-    0: Stmt_Echo(
-        exprs: array(
-            0: Scalar_LNumber(
-                value: 1
-            )
-        )
-    )
-    1: Stmt_Echo(
-        exprs: array(
-            0: Scalar_LNumber(
-                value: 2
-            )
-        )
-    )
-    2: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: A
-            )
-        )
-        stmts: array(
-        )
-    )
-)
------
-<?php
-namespace A {}
-echo 1;
------
-No code may exist outside of namespace {} from 3:1 to 3:7
-array(
-    0: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: A
-            )
-        )
-        stmts: array(
-        )
-    )
-    1: Stmt_Echo(
-        exprs: array(
-            0: Scalar_LNumber(
-                value: 1
-            )
-        )
-    )
-)
------
-<?php
-namespace A {}
-declare(ticks=1);
-foo();
-namespace B {}
------
-No code may exist outside of namespace {} from 3:1 to 3:17
-array(
-    0: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: A
-            )
-        )
-        stmts: array(
-        )
-    )
-    1: Stmt_Declare(
-        declares: array(
-            0: Stmt_DeclareDeclare(
-                key: Identifier(
-                    name: ticks
-                )
-                value: Scalar_LNumber(
-                    value: 1
-                )
-            )
-        )
-        stmts: null
-    )
-    2: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: foo
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    3: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: B
-            )
-        )
-        stmts: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/switch.test b/vendor/nikic/php-parser/test/code/parser/stmt/switch.test
deleted file mode 100644
index fc24508e1b..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/switch.test
+++ /dev/null
@@ -1,81 +0,0 @@
-Switch
------
-<?php
-
-switch ($a) {
-    case 0:
-        break;
-    // Comment
-    case 1;
-    default:
-}
-
-// alternative syntax
-switch ($a):
-endswitch;
-
-// leading semicolon
-switch ($a) { ; }
-switch ($a): ; endswitch;
------
-array(
-    0: Stmt_Switch(
-        cond: Expr_Variable(
-            name: a
-        )
-        cases: array(
-            0: Stmt_Case(
-                cond: Scalar_LNumber(
-                    value: 0
-                )
-                stmts: array(
-                    0: Stmt_Break(
-                        num: null
-                    )
-                )
-            )
-            1: Stmt_Case(
-                cond: Scalar_LNumber(
-                    value: 1
-                )
-                stmts: array(
-                )
-                comments: array(
-                    0: // Comment
-                )
-            )
-            2: Stmt_Case(
-                cond: null
-                stmts: array(
-                )
-            )
-        )
-    )
-    1: Stmt_Switch(
-        cond: Expr_Variable(
-            name: a
-        )
-        cases: array(
-        )
-        comments: array(
-            0: // alternative syntax
-        )
-    )
-    2: Stmt_Switch(
-        cond: Expr_Variable(
-            name: a
-        )
-        cases: array(
-        )
-        comments: array(
-            0: // leading semicolon
-        )
-    )
-    3: Stmt_Switch(
-        cond: Expr_Variable(
-            name: a
-        )
-        cases: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/tryCatch.test b/vendor/nikic/php-parser/test/code/parser/stmt/tryCatch.test
deleted file mode 100644
index 8f88f4a359..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/tryCatch.test
+++ /dev/null
@@ -1,144 +0,0 @@
-Try/catch
------
-<?php
-
-try {
-    doTry();
-} catch (A $b) {
-    doCatchA();
-} catch (B $c) {
-    doCatchB();
-} finally {
-    doFinally();
-}
-
-// no finally
-try { }
-catch (A $b) { }
-
-// no catch
-try { }
-finally { }
-
------
-array(
-    0: Stmt_TryCatch(
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_FuncCall(
-                    name: Name(
-                        parts: array(
-                            0: doTry
-                        )
-                    )
-                    args: array(
-                    )
-                )
-            )
-        )
-        catches: array(
-            0: Stmt_Catch(
-                types: array(
-                    0: Name(
-                        parts: array(
-                            0: A
-                        )
-                    )
-                )
-                var: Expr_Variable(
-                    name: b
-                )
-                stmts: array(
-                    0: Stmt_Expression(
-                        expr: Expr_FuncCall(
-                            name: Name(
-                                parts: array(
-                                    0: doCatchA
-                                )
-                            )
-                            args: array(
-                            )
-                        )
-                    )
-                )
-            )
-            1: Stmt_Catch(
-                types: array(
-                    0: Name(
-                        parts: array(
-                            0: B
-                        )
-                    )
-                )
-                var: Expr_Variable(
-                    name: c
-                )
-                stmts: array(
-                    0: Stmt_Expression(
-                        expr: Expr_FuncCall(
-                            name: Name(
-                                parts: array(
-                                    0: doCatchB
-                                )
-                            )
-                            args: array(
-                            )
-                        )
-                    )
-                )
-            )
-        )
-        finally: Stmt_Finally(
-            stmts: array(
-                0: Stmt_Expression(
-                    expr: Expr_FuncCall(
-                        name: Name(
-                            parts: array(
-                                0: doFinally
-                            )
-                        )
-                        args: array(
-                        )
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_TryCatch(
-        stmts: array(
-        )
-        catches: array(
-            0: Stmt_Catch(
-                types: array(
-                    0: Name(
-                        parts: array(
-                            0: A
-                        )
-                    )
-                )
-                var: Expr_Variable(
-                    name: b
-                )
-                stmts: array(
-                )
-            )
-        )
-        finally: null
-        comments: array(
-            0: // no finally
-        )
-    )
-    2: Stmt_TryCatch(
-        stmts: array(
-        )
-        catches: array(
-        )
-        finally: Stmt_Finally(
-            stmts: array(
-            )
-        )
-        comments: array(
-            0: // no catch
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/tryWithoutCatch.test b/vendor/nikic/php-parser/test/code/parser/stmt/tryWithoutCatch.test
deleted file mode 100644
index 5650d80ac5..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/tryWithoutCatch.test
+++ /dev/null
@@ -1,29 +0,0 @@
-Cannot use try without catch or finally
------
-<?php
-
-try {
-    foo();
-}
------
-Cannot use try without catch or finally from 3:1 to 5:1
-array(
-    0: Stmt_TryCatch(
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_FuncCall(
-                    name: Name(
-                        parts: array(
-                            0: foo
-                        )
-                    )
-                    args: array(
-                    )
-                )
-            )
-        )
-        catches: array(
-        )
-        finally: null
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/unset.test b/vendor/nikic/php-parser/test/code/parser/stmt/unset.test
deleted file mode 100644
index c69679ef50..0000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/unset.test
+++ /dev/null
@@ -1,26 +0,0 @@
-Unset
------
-<?php
-
-unset($a);
-unset($b, $c);
------
-array(
-    0: Stmt_Unset(
-        vars: array(
-            0: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    1: Stmt_Unset(
-        vars: array(
-            0: Expr_Variable(
-                name: b
-            )
-            1: Expr_Variable(
-                name: c
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/comments.test b/vendor/nikic/php-parser/test/code/prettyPrinter/comments.test
deleted file mode 100644
index 34a9f93d8f..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/comments.test
+++ /dev/null
@@ -1,67 +0,0 @@
-Comments
------
-<?php
-
-function justForIndentation()
-{
-    // Some text
-    # Some text
-    /* Some text */
-    /** Some text */
-    /**
-     * Some text.
-     * Some more text.
-     */
-    /*
-     * Some text.
-     * Some more text.
-     */
-    /*
-        Some text.
-        Some more text.
-    */
-    /* Some text.
-       More text. */
-    /* Some text.
-       More text.
-       Even more text. */
-    $foo;
-}
------
-function justForIndentation()
-{
-    // Some text
-    # Some text
-    /* Some text */
-    /** Some text */
-    /**
-     * Some text.
-     * Some more text.
-     */
-    /*
-     * Some text.
-     * Some more text.
-     */
-    /*
-        Some text.
-        Some more text.
-    */
-    /* Some text.
-       More text. */
-    /* Some text.
-       More text.
-       Even more text. */
-    $foo;
-}
------
-<?php
-
-function test()
-{
-    // empty
-}
------
-function test()
-{
-    // empty
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/commentsInCommaList.test b/vendor/nikic/php-parser/test/code/prettyPrinter/commentsInCommaList.test
deleted file mode 100644
index d0e42ef68a..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/commentsInCommaList.test
+++ /dev/null
@@ -1,53 +0,0 @@
-Comments in arrays and function calls
------
-<?php
-
-$arr = [
-    // Foo
-    $foo,
-    // Bar
-    $bar,
-    // Discarded
-];
-[
-    // Foo
-    $foo,
-    ,
-    // Bar
-    $bar,
-] = $arr;
-foo(
-    // Foo
-    $foo,
-    // Bar
-    $bar
-);
-new Foo(
-    // Foo
-    $foo
-);
------
-!!php7
-$arr = [
-    // Foo
-    $foo,
-    // Bar
-    $bar,
-];
-[
-    // Foo
-    $foo,
-    ,
-    // Bar
-    $bar,
-] = $arr;
-foo(
-    // Foo
-    $foo,
-    // Bar
-    $bar
-);
-new Foo(
-    // Foo
-    $foo
-);
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/anonymousClass.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/anonymousClass.test
deleted file mode 100644
index 1f24517125..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/anonymousClass.test
+++ /dev/null
@@ -1,27 +0,0 @@
-Anonymous classes
------
-<?php
-
-new class {};
-new class extends A implements B, C {};
-new class($a) extends A {
-    private $a;
-    public function __construct($a) {
-        $this->a = $a;
-    }
-};
------
-new class
-{
-};
-new class extends A implements B, C
-{
-};
-new class($a) extends A
-{
-    private $a;
-    public function __construct($a)
-    {
-        $this->a = $a;
-    }
-};
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/arrayDestructuring.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/arrayDestructuring.test
deleted file mode 100644
index bff1999e4e..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/arrayDestructuring.test
+++ /dev/null
@@ -1,14 +0,0 @@
-Array destructuring
------
-<?php
-
-[$a, $b] = [$c, $d];
-[, $a, , , $b, ,] = $foo;
-[, [[$a]], $b] = $bar;
-['a' => $b, 'b' => $a] = $baz;
------
-!!php7
-[$a, $b] = [$c, $d];
-[, $a, , , $b, ] = $foo;
-[, [[$a]], $b] = $bar;
-['a' => $b, 'b' => $a] = $baz;
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/arraySpread.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/arraySpread.test
deleted file mode 100644
index 5e8393ff27..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/arraySpread.test
+++ /dev/null
@@ -1,8 +0,0 @@
-Array spread
------
-<?php
-
-[$a, $b] = [...$c, ...$d];
------
-!!php7
-[$a, $b] = [...$c, ...$d];
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/arrow_function.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/arrow_function.test
deleted file mode 100644
index fe8d8791b5..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/arrow_function.test
+++ /dev/null
@@ -1,18 +0,0 @@
-Arrow function
------
-<?php
-
-fn($a) => $a;
-fn($x = 42) => $x;
-fn(&$x) => $x;
-fn&($x) => $x;
-static fn($x, ...$rest) => $rest;
-fn(): int => $x;
------
-!!php7
-fn($a) => $a;
-fn($x = 42) => $x;
-fn(&$x) => $x;
-fn&($x) => $x;
-static fn($x, ...$rest) => $rest;
-fn(): int => $x;
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/call.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/call.test
deleted file mode 100644
index 0ec8925cf2..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/call.test
+++ /dev/null
@@ -1,13 +0,0 @@
-Calls
------
-<?php
-
-f($a);
-f(&$a);
-f(...$a);
-f($a, &$b, ...$c);
------
-f($a);
-f(&$a);
-f(...$a);
-f($a, &$b, ...$c);
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/closure.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/closure.test
deleted file mode 100644
index 7e4fcfd05d..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/closure.test
+++ /dev/null
@@ -1,18 +0,0 @@
-Closures
------
-<?php
-
-$closureWithArgs = function ($arg1, $arg2) {
-    $comment = 'closure body';
-};
-
-$closureWithArgsAndVars = function ($arg1, $arg2) use($var1, $var2) {
-    $comment = 'closure body';
-};
------
-$closureWithArgs = function ($arg1, $arg2) {
-    $comment = 'closure body';
-};
-$closureWithArgsAndVars = function ($arg1, $arg2) use($var1, $var2) {
-    $comment = 'closure body';
-};
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/constant_deref.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/constant_deref.test
deleted file mode 100644
index 1371d42252..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/constant_deref.test
+++ /dev/null
@@ -1,13 +0,0 @@
-Constant/literal dereferencing
------
-<?php
-
-FOO[0];
-FOO::BAR[0];
-'FOO'[0];
-array(FOO)[0];
------
-FOO[0];
-FOO::BAR[0];
-'FOO'[0];
-array(FOO)[0];
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/docStrings.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/docStrings.test
deleted file mode 100644
index a4a60acead..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/docStrings.test
+++ /dev/null
@@ -1,86 +0,0 @@
-Literals
------
-<?php
-
-<<<'STR'
-STR;
-<<<STR
-STR;
-
-<<<'STR'
-A
-B
-STR;
-<<<STR
-A
-B
-STR;
-
-<<<'STR'
-a\nb$c
-STR;
-<<<STR
-a\\nb\$c
-STR;
-
-<<<STR
-a$b
-{$c->d}
-STR;
-
-call(
-    <<<STR
-A
-STR
-    , <<<STR
-B
-STR
-);
-
-function test() {
-    <<<STR
-Foo
-STR;
-    <<<STR
-    Bar
-STR;
-}
------
-<<<'STR'
-STR;
-<<<STR
-STR;
-<<<'STR'
-A
-B
-STR;
-<<<STR
-A
-B
-STR;
-<<<'STR'
-a\nb$c
-STR;
-<<<STR
-a\\nb\$c
-STR;
-<<<STR
-a{$b}
-{$c->d}
-STR;
-call(<<<STR
-A
-STR
-, <<<STR
-B
-STR
-);
-function test()
-{
-    <<<STR
-Foo
-STR;
-    <<<STR
-    Bar
-STR;
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/include.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/include.test
deleted file mode 100644
index 3c40779876..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/include.test
+++ /dev/null
@@ -1,7 +0,0 @@
-Include
------
-<?php
-
-(include $foo) && (include $bar);
------
-(include $foo) && (include $bar);
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/intrinsics.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/intrinsics.test
deleted file mode 100644
index f1a1adcd53..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/intrinsics.test
+++ /dev/null
@@ -1,29 +0,0 @@
-isset, empty, unset, exit, die, clone, eval
------
-<?php
-
-isset($a, $a[$b]);
-empty($a);
-empty('foo');
-unset($a, $a[$b]);
-exit;
-exit();
-exit(1);
-die;
-die();
-die('foo');
-clone $foo;
-eval('str');
------
-isset($a, $a[$b]);
-empty($a);
-empty('foo');
-unset($a, $a[$b]);
-exit;
-exit;
-exit(1);
-die;
-die;
-die('foo');
-clone $foo;
-eval('str');
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/list.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/list.test
deleted file mode 100644
index 608ced6a69..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/list.test
+++ /dev/null
@@ -1,19 +0,0 @@
-list()
------
-<?php
-
-list() = $a;
-list($a) = $b;
-list($a, $b, $c) = $d;
-list(, $a) = $b;
-list(, , $a, , $b) = $c;
-list(list($a)) = $b;
-list(, list(, list(, $a), $b)) = $c;
------
-list() = $a;
-list($a) = $b;
-list($a, $b, $c) = $d;
-list(, $a) = $b;
-list(, , $a, , $b) = $c;
-list(list($a)) = $b;
-list(, list(, list(, $a), $b)) = $c;
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/literals.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/literals.test
deleted file mode 100644
index f649b5d0cc..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/literals.test
+++ /dev/null
@@ -1,158 +0,0 @@
-Literals
------
-<?php
-
-// magic constants
-__LINE__;
-__FILE__;
-__DIR__;
-__FUNCTION__;
-__CLASS__;
-__TRAIT__;
-__METHOD__;
-__NAMESPACE__;
-
-// not actually literals, but close
-null;
-true;
-false;
-NULL;
-TRUE;
-FALSE;
-
-// integers (normalized to decimal)
-0;
-11;
-011;
-0x11;
-0b11;
-
-// floats (normalized to ... something)
-0.;
-.0;
-0.0;
-0e1000;
-1.0;
-1e100;
-1e1000;
-1E-100;
-1000000000000000000000000000000000000000000000000000000000000000000000000000000000000;
-378282246310005.0;
-10000000000000002.0;
-
-// strings (single quoted)
-'a';
-'a
-b';
-'a\'b';
-'a\b';
-'a\\';
-
-// strings (double quoted)
-"a";
-"a\nb";
-"a'b";
-"a\b";
-"$a";
-"a$b";
-"$a$b";
-"$a $b";
-"a${b}c";
-"a{$b}c";
-"a$a[b]c";
-"\{$A}";
-"\{ $A }";
-"\\{$A}";
-"\\{ $A }";
-"{$$A}[B]";
-"$$A[B]";
-
-// make sure indentation doesn't mess anything up
-function foo()
-{
-    "a\nb";
-    'a
-b';
-    'a
-    b';
-}
-
-// shell exec (similar to double quoted string)
-`foo`;
-`foo$a`;
-`foo{$a}bar`;
-`\`\'\"`;
------
-// magic constants
-__LINE__;
-__FILE__;
-__DIR__;
-__FUNCTION__;
-__CLASS__;
-__TRAIT__;
-__METHOD__;
-__NAMESPACE__;
-// not actually literals, but close
-null;
-true;
-false;
-NULL;
-TRUE;
-FALSE;
-// integers (normalized to decimal)
-0;
-11;
-011;
-0x11;
-0b11;
-// floats (normalized to ... something)
-0.0;
-0.0;
-0.0;
-0.0;
-1.0;
-1.0E+100;
-\INF;
-1.0E-100;
-1.0E+84;
-378282246310005.0;
-10000000000000002.0;
-// strings (single quoted)
-'a';
-'a
-b';
-'a\'b';
-'a\\b';
-'a\\';
-// strings (double quoted)
-"a";
-"a\nb";
-"a'b";
-"a\\b";
-"{$a}";
-"a{$b}";
-"{$a}{$b}";
-"{$a} {$b}";
-"a{$b}c";
-"a{$b}c";
-"a{$a['b']}c";
-"\\{{$A}}";
-"\\{ {$A} }";
-"\\{$A}";
-"\\{ {$A} }";
-"{${$A}}[B]";
-"\${$A['B']}";
-// make sure indentation doesn't mess anything up
-function foo()
-{
-    "a\nb";
-    'a
-b';
-    'a
-    b';
-}
-// shell exec (similar to double quoted string)
-`foo`;
-`foo{$a}`;
-`foo{$a}bar`;
-`\`\\'\\"`;
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/numbers.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/numbers.test
deleted file mode 100644
index c85f36bd82..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/numbers.test
+++ /dev/null
@@ -1,35 +0,0 @@
-Number literals
------
-<?php
-
-0;
-+0;
--0;
-0.0;
--0.0;
-42;
--42;
-42.0;
--42.0;
-42.5;
--42.5;
-1e42;
--1e42;
-1e1000;
--1e1000;
------
-0;
-+0;
--0;
-0.0;
--0.0;
-42;
--42;
-42.0;
--42.0;
-42.5;
--42.5;
-1.0E+42;
--1.0E+42;
-\INF;
--\INF;
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/operators.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/operators.test
deleted file mode 100644
index 2b5ab01d6b..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/operators.test
+++ /dev/null
@@ -1,151 +0,0 @@
-Basic operators
------
-<?php
-
-$a ** $b;
-
-++$a;
---$a;
-$a++;
-$a--;
-
-@$a;
-~$a;
--$a;
-+$a;
-
-(int) $a;
-(integer) $a;
-(float) $a;
-(double) $a;
-(real) $a;
-( float) $a;
-(double ) $a;
-( REAL ) $a;
-(string) $a;
-(binary) $a;
-(array) $a;
-(object) $a;
-(bool) $a;
-(boolean) $a;
-(unset) $a;
-
-$a * $b;
-$a / $b;
-$a % $b;
-$a + $b;
-$a - $b;
-$a . $b;
-$a << $b;
-$a >> $b;
-$a < $b;
-$a <= $b;
-$a > $b;
-$a >= $b;
-$a == $b;
-$a != $b;
-$a <> $b;
-$a === $b;
-$a !== $b;
-$a <=> $b;
-$a & $b;
-$a ^ $b;
-$a | $b;
-$a && $b;
-$a || $b;
-$a ? $b : $c;
-$a ?: $c;
-$a ?? $c;
-$a = $b;
-$a **= $b;
-$a ??= $c;
-$a *= $b;
-$a /= $b;
-$a %= $b;
-$a += $b;
-$a -= $b;
-$a .= $b;
-$a <<= $b;
-$a >>= $b;
-$a &= $b;
-$a ^= $b;
-$a |= $b;
-$a =& $b;
-
-$a and $b;
-$a xor $b;
-$a or $b;
-
-$a instanceof Foo;
-$a instanceof $b;
------
-$a ** $b;
-++$a;
---$a;
-$a++;
-$a--;
-@$a;
-~$a;
--$a;
-+$a;
-(int) $a;
-(int) $a;
-(float) $a;
-(double) $a;
-(real) $a;
-(float) $a;
-(double) $a;
-(real) $a;
-(string) $a;
-(string) $a;
-(array) $a;
-(object) $a;
-(bool) $a;
-(bool) $a;
-(unset) $a;
-$a * $b;
-$a / $b;
-$a % $b;
-$a + $b;
-$a - $b;
-$a . $b;
-$a << $b;
-$a >> $b;
-$a < $b;
-$a <= $b;
-$a > $b;
-$a >= $b;
-$a == $b;
-$a != $b;
-$a != $b;
-$a === $b;
-$a !== $b;
-$a <=> $b;
-$a & $b;
-$a ^ $b;
-$a | $b;
-$a && $b;
-$a || $b;
-$a ? $b : $c;
-$a ?: $c;
-$a ?? $c;
-$a = $b;
-$a **= $b;
-$a ??= $c;
-$a *= $b;
-$a /= $b;
-$a %= $b;
-$a += $b;
-$a -= $b;
-$a .= $b;
-$a <<= $b;
-$a >>= $b;
-$a &= $b;
-$a ^= $b;
-$a |= $b;
-$a =& $b;
-$a and $b;
-$a xor $b;
-$a or $b;
-$a instanceof Foo;
-$a instanceof $b;
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/parentheses.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/parentheses.test
deleted file mode 100644
index a49c1108d2..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/parentheses.test
+++ /dev/null
@@ -1,86 +0,0 @@
-Pretty printer generates least-parentheses output
------
-<?php
-
-echo 'abc' . 'cde' . 'fgh';
-echo 'abc' . ('cde' . 'fgh');
-
-echo 'abc' . 1 + 2 . 'fgh';
-echo 'abc' . (1 + 2) . 'fgh';
-
-echo 1 * 2 + 3 / 4 % 5 . 6;
-echo 1 * (2 + 3) / (4 % (5 . 6));
-
-$a = $b = $c = $d = $f && true;
-($a = $b = $c = $d = $f) && true;
-$a = $b = $c = $d = $f and true;
-$a = $b = $c = $d = ($f and true);
-
-$a ? $b : $c ? $d : $e ? $f : $g;
-$a ? $b : ($c ? $d : ($e ? $f : $g));
-$a ? $b ? $c : $d : $f;
-
-$a ?? $b ?? $c;
-($a ?? $b) ?? $c;
-$a ?? ($b ? $c : $d);
-$a || ($b ?? $c);
-
-(1 > 0) > (1 < 0);
-++$a + $b;
-$a + $b++;
-
-$a ** $b ** $c;
-($a ** $b) ** $c;
--1 ** 2;
-
-yield from $a and yield from $b;
-yield from ($a and yield from $b);
-
-print ($a and print $b);
-
--(-$a);
-+(+$a);
--(--$a);
-+(++$a);
-
-// The following will currently add unnecessary parentheses, because the pretty printer is not aware that assignment
-// and incdec only work on variables.
-!$a = $b;
-++$a ** $b;
-$a ** $b++;
------
-echo 'abc' . 'cde' . 'fgh';
-echo 'abc' . ('cde' . 'fgh');
-echo 'abc' . 1 + 2 . 'fgh';
-echo 'abc' . (1 + 2) . 'fgh';
-echo 1 * 2 + 3 / 4 % 5 . 6;
-echo 1 * (2 + 3) / (4 % (5 . 6));
-$a = $b = $c = $d = $f && true;
-($a = $b = $c = $d = $f) && true;
-$a = $b = $c = $d = $f and true;
-$a = $b = $c = $d = ($f and true);
-$a ? $b : $c ? $d : $e ? $f : $g;
-$a ? $b : ($c ? $d : ($e ? $f : $g));
-$a ? $b ? $c : $d : $f;
-$a ?? $b ?? $c;
-($a ?? $b) ?? $c;
-$a ?? ($b ? $c : $d);
-$a || ($b ?? $c);
-(1 > 0) > (1 < 0);
-++$a + $b;
-$a + $b++;
-$a ** $b ** $c;
-($a ** $b) ** $c;
--1 ** 2;
-yield from $a and yield from $b;
-yield from ($a and yield from $b);
-print ($a and print $b);
--(-$a);
-+(+$a);
--(--$a);
-+(++$a);
-// The following will currently add unnecessary parentheses, because the pretty printer is not aware that assignment
-// and incdec only work on variables.
-!($a = $b);
-(++$a) ** $b;
-$a ** ($b++);
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/shortArraySyntax.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/shortArraySyntax.test
deleted file mode 100644
index 082c2e047f..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/shortArraySyntax.test
+++ /dev/null
@@ -1,11 +0,0 @@
-Short array syntax
------
-<?php
-
-[];
-array(1, 2, 3);
-['a' => 'b', 'c' => 'd'];
------
-[];
-array(1, 2, 3);
-['a' => 'b', 'c' => 'd'];
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/stringEscaping.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/stringEscaping.test
deleted file mode 100644
index 02877ad328..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/stringEscaping.test
+++ /dev/null
@@ -1,23 +0,0 @@
-Escape sequences in double-quoted strings
------
-<?php
-"\n\r\t\f\v\$\"\\";
-"@@{ implode(range("\0", "\37")) }@@";
-"\0000\0001";
-
-<<<DOC
-\n\r\t\f\v\$\"\\
-@@{ implode(range("\0", "\37")) }@@
-\0000\0001
-DOC;
-
------
-"\n\r\t\f\v\$\"\\";
-"\0\1\2\3\4\5\6\7\10\t\n\v\f\r\16\17\20\21\22\23\24\25\26\27\30\31\32\33\34\35\36\37";
-"\0000\0001";
-<<<DOC
-@@{ "\n\r" }@@\t\f\v\$\\"\\
-\0\1\2\3\4\5\6\7\10\t@@{ "\n" }@@\v\f@@{ "\r" }@@\16\17\20\21\22\23\24\25\26\27\30\31\32\33\34\35\36\37
-\0000\0001
-DOC
-;
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/uvs.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/uvs.test
deleted file mode 100644
index e336fb578a..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/uvs.test
+++ /dev/null
@@ -1,23 +0,0 @@
-Uniform variable syntax
------
-<?php
-
-(function() {})();
-array('a', 'b')()();
-A::$b::$c;
-$A::$b[$c]();
-$A::{$b[$c]}();
-A::$$b[$c]();
-($a->b)();
-(A::$b)();
------
-!!php7
-(function () {
-})();
-array('a', 'b')()();
-A::$b::$c;
-$A::$b[$c]();
-$A::{$b[$c]}();
-A::${$b}[$c]();
-($a->b)();
-(A::$b)();
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/variables.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/variables.test
deleted file mode 100644
index 4e0fa2e123..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/variables.test
+++ /dev/null
@@ -1,73 +0,0 @@
-Variables
------
-<?php
-
-$a;
-$$a;
-${$a};
-$a->b;
-$a->b();
-$a->b($c);
-$a->$b();
-$a->{$b}();
-$a->$b[$c]();
-$$a->b;
-$a[$b];
-$a[$b]();
-$$a[$b];
-$a::B;
-$a::$b;
-$a::b();
-$a::b($c);
-$a::$b();
-$a::$b[$c];
-$a::$b[$c]($d);
-$a::{$b[$c]}($d);
-$a::{$b->c}();
-A::$$b[$c]();
-a();
-$a();
-$a()[$b];
-$a->b()[$c];
-$a::$b()[$c];
-(new A)->b;
-(new A())->b();
-(new $$a)[$b];
-(new $a->b)->c;
-
-global $a, $$a, $$a[$b], $$a->b;
------
-!!php5
-$a;
-${$a};
-${$a};
-$a->b;
-$a->b();
-$a->b($c);
-$a->{$b}();
-$a->{$b}();
-$a->{$b[$c]}();
-${$a}->b;
-$a[$b];
-$a[$b]();
-${$a[$b]};
-$a::B;
-$a::$b;
-$a::b();
-$a::b($c);
-$a::$b();
-$a::$b[$c];
-$a::{$b[$c]}($d);
-$a::{$b[$c]}($d);
-$a::{$b->c}();
-A::${$b[$c]}();
-a();
-$a();
-$a()[$b];
-$a->b()[$c];
-$a::$b()[$c];
-(new A())->b;
-(new A())->b();
-(new ${$a}())[$b];
-(new $a->b())->c;
-global $a, ${$a}, ${$a[$b]}, ${$a->b};
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/yield.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/yield.test
deleted file mode 100644
index 12ab7dec1c..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/yield.test
+++ /dev/null
@@ -1,46 +0,0 @@
-Yield
------
-<?php
-
-function gen()
-{
-    yield;
-    yield $a;
-    yield $a => $b;
-    $a = yield;
-    $a = (yield $b);
-    $a = (yield $b => $c);
-}
-// TODO Get rid of parens for cases 2 and 3
------
-function gen()
-{
-    yield;
-    (yield $a);
-    (yield $a => $b);
-    $a = yield;
-    $a = (yield $b);
-    $a = (yield $b => $c);
-}
-// TODO Get rid of parens for cases 2 and 3
------
-<?php
-
-function gen()
-{
-    $a = yield $b;
-    $a = yield $b => $c;
-    yield from $a;
-    $a = yield from $b;
-}
-// TODO Get rid of parens for last case
------
-!!php7
-function gen()
-{
-    $a = (yield $b);
-    $a = (yield $b => $c);
-    yield from $a;
-    $a = (yield from $b);
-}
-// TODO Get rid of parens for last case
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/inlineHTMLandPHPtest.file-test b/vendor/nikic/php-parser/test/code/prettyPrinter/inlineHTMLandPHPtest.file-test
deleted file mode 100644
index b33eb527df..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/inlineHTMLandPHPtest.file-test
+++ /dev/null
@@ -1,58 +0,0 @@
-File containing both inline HTML and PHP
------
-HTML
-<?php
-echo 'PHP';
------
-HTML
-<?php
-echo 'PHP';
------
-<?php
-echo 'PHP';
-?>
-HTML
------
-<?php
-
-echo 'PHP';
-?>
-HTML
------
-HTML
-<?php
-echo 'PHP';
-?>
-HTML
------
-HTML
-<?php
-echo 'PHP';
-?>
-HTML
------
-HTML
-<?php
-echo 'PHP';
-?>
-HTML
-<?php
-echo 'PHP';
-?>
-HTML
------
-HTML
-<?php
-echo 'PHP';
-?>
-HTML
-<?php
-echo 'PHP';
-?>
-HTML
------
-HTML<?php echo 'PHP'; ?>HTML
------
-HTML<?php
-echo 'PHP';
-?>HTML
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/nestedInlineHTML.test b/vendor/nikic/php-parser/test/code/prettyPrinter/nestedInlineHTML.test
deleted file mode 100644
index bc611f7b95..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/nestedInlineHTML.test
+++ /dev/null
@@ -1,16 +0,0 @@
-InlineHTML node nested inside other code
------
-<?php
-
-function test() {
-    ?>
-Test
-    <?php
-}
------
-function test()
-{
-    ?>
-Test
-    <?php
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/onlyInlineHTML.file-test b/vendor/nikic/php-parser/test/code/prettyPrinter/onlyInlineHTML.file-test
deleted file mode 100644
index e980719140..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/onlyInlineHTML.file-test
+++ /dev/null
@@ -1,19 +0,0 @@
-File containing only inline HTML
------
-Hallo World
-Foo Bar
-Bar Foo
-World Hallo
------
-Hallo World
-Foo Bar
-Bar Foo
-World Hallo
------
-
-
-Test
------
-
-
-Test
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/onlyPHP.file-test b/vendor/nikic/php-parser/test/code/prettyPrinter/onlyPHP.file-test
deleted file mode 100644
index 9550b107ef..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/onlyPHP.file-test
+++ /dev/null
@@ -1,16 +0,0 @@
-File containing only PHP
------
-<?php
-
-echo 'Foo Bar';
-echo 'Bar Foo';
------
-<?php
-
-echo 'Foo Bar';
-echo 'Bar Foo';
------
-<?php
-
------
-<?php
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/alias.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/alias.test
deleted file mode 100644
index ef5695d8e6..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/alias.test
+++ /dev/null
@@ -1,20 +0,0 @@
-Aliases (namespacing)
------
-<?php
-
-use A\B;
-use C\D as E;
-use F\G as H, J;
-
-use function foo\bar;
-use function foo\bar as baz;
-use const foo\BAR;
-use const foo\BAR as BAZ;
------
-use A\B;
-use C\D as E;
-use F\G as H, J;
-use function foo\bar;
-use function foo\bar as baz;
-use const foo\BAR;
-use const foo\BAR as BAZ;
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/break_continue.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/break_continue.test
deleted file mode 100644
index 4773df1d3e..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/break_continue.test
+++ /dev/null
@@ -1,13 +0,0 @@
-break/continue
------
-<?php
-
-continue;
-continue 2;
-break;
-break 2;
------
-continue;
-continue 2;
-break;
-break 2;
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/class.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/class.test
deleted file mode 100644
index 5225d2a6ec..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/class.test
+++ /dev/null
@@ -1,53 +0,0 @@
-Class
------
-<?php
-
-class Foo extends Bar implements ABC, \DEF, namespace\GHI
-{
-    var $a = 'foo';
-    private $b = 'bar';
-    static $c = 'baz';
-    function test()
-    {
-        $this->a = 'bar';
-        echo 'test';
-    }
-
-    protected function baz() {}
-    public function foo() {}
-    abstract static function bar() {}
-}
-
-trait Bar
-{
-    function test()
-    {
-    }
-}
------
-class Foo extends Bar implements ABC, \DEF, namespace\GHI
-{
-    var $a = 'foo';
-    private $b = 'bar';
-    static $c = 'baz';
-    function test()
-    {
-        $this->a = 'bar';
-        echo 'test';
-    }
-    protected function baz()
-    {
-    }
-    public function foo()
-    {
-    }
-    static abstract function bar()
-    {
-    }
-}
-trait Bar
-{
-    function test()
-    {
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/class_const.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/class_const.test
deleted file mode 100644
index e73ad4304b..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/class_const.test
+++ /dev/null
@@ -1,20 +0,0 @@
-Class constants
------
-<?php
-
-class Foo
-{
-    const A = 1, B = 2;
-    public const C = 3, D = 4;
-    protected const E = 5, F = 6;
-    private const G = 7, H = 8;
-}
------
-!!php7
-class Foo
-{
-    const A = 1, B = 2;
-    public const C = 3, D = 4;
-    protected const E = 5, F = 6;
-    private const G = 7, H = 8;
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/const.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/const.test
deleted file mode 100644
index 6b1764206b..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/const.test
+++ /dev/null
@@ -1,11 +0,0 @@
-Constant declarations
------
-<?php
-
-const FOO = 'BAR';
-const FOO = 1 + 1;
-const FOO = BAR, BAR = FOO;
------
-const FOO = 'BAR';
-const FOO = 1 + 1;
-const FOO = BAR, BAR = FOO;
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/declare.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/declare.test
deleted file mode 100644
index fd48e6953d..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/declare.test
+++ /dev/null
@@ -1,17 +0,0 @@
-declare
------
-<?php
-
-declare (strict_types=1);
-declare (ticks=1) {
-    foo();
-}
-declare (ticks=2) {
-}
------
-declare (strict_types=1);
-declare (ticks=1) {
-    foo();
-}
-declare (ticks=2) {
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/do_while.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/do_while.test
deleted file mode 100644
index 532d475a04..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/do_while.test
+++ /dev/null
@@ -1,10 +0,0 @@
-doWhile
------
-<?php
-
-do {
-
-} while (true);
------
-do {
-} while (true);
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/for.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/for.test
deleted file mode 100644
index ef7ac4a93b..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/for.test
+++ /dev/null
@@ -1,28 +0,0 @@
-for
------
-<?php
-
-for ($i = 0; $i < 10; $i++) {
-
-}
-
-for ($i = 0,$j = 0; $i < 10; $i++) {
-
-}
-
-for ($i = 0; $i < 10;) {
-
-}
-
-for (;;) {
-
-}
------
-for ($i = 0; $i < 10; $i++) {
-}
-for ($i = 0, $j = 0; $i < 10; $i++) {
-}
-for ($i = 0; $i < 10;) {
-}
-for (;;) {
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/foreach.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/foreach.test
deleted file mode 100644
index 44c3a1acff..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/foreach.test
+++ /dev/null
@@ -1,28 +0,0 @@
-foreach
------
-<?php
-
-foreach ($arr as $val) {
-
-}
-
-foreach ($arr as &$val) {
-
-}
-
-foreach ($arr as $key => $val) {
-
-}
-
-foreach ($arr as $key => &$val) {
-
-}
------
-foreach ($arr as $val) {
-}
-foreach ($arr as &$val) {
-}
-foreach ($arr as $key => $val) {
-}
-foreach ($arr as $key => &$val) {
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/function_signatures.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/function_signatures.test
deleted file mode 100644
index af1088a051..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/function_signatures.test
+++ /dev/null
@@ -1,43 +0,0 @@
-Function signatures
------
-<?php
-
-interface A
-{
-    function f1();
-    function f2($a, $b);
-    function f3(&$a);
-    function f4(A\B $a);
-    function f4(array $a);
-    function f5(callable $a);
-    function f6(&$a);
-    function f7(...$a);
-    function f8(&...$a);
-    function f9(A &$a);
-    function f10(A ...$a);
-    function f11(A &$a);
-    function f12(A &...$a);
-    function f13($a) : array;
-    function f14($a) : callable;
-    function f15($a) : B\C;
-}
------
-interface A
-{
-    function f1();
-    function f2($a, $b);
-    function f3(&$a);
-    function f4(A\B $a);
-    function f4(array $a);
-    function f5(callable $a);
-    function f6(&$a);
-    function f7(...$a);
-    function f8(&...$a);
-    function f9(A &$a);
-    function f10(A ...$a);
-    function f11(A &$a);
-    function f12(A &...$a);
-    function f13($a) : array;
-    function f14($a) : callable;
-    function f15($a) : B\C;
-}
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/global_static_variables.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/global_static_variables.test
deleted file mode 100644
index eea776a5ab..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/global_static_variables.test
+++ /dev/null
@@ -1,11 +0,0 @@
-Global and static variables
------
-<?php
-
-global $a, $$a, ${$a[$a]};
-static $a, $b;
-static $a = 'foo', $b = 'bar';
------
-global $a, ${$a}, ${$a[$a]};
-static $a, $b;
-static $a = 'foo', $b = 'bar';
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/goto.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/goto.test
deleted file mode 100644
index 61c781200c..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/goto.test
+++ /dev/null
@@ -1,9 +0,0 @@
-goto
------
-<?php
-
-marker:
-goto marker;
------
-marker:
-goto marker;
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/groupUse.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/groupUse.test
deleted file mode 100644
index de086c8773..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/groupUse.test
+++ /dev/null
@@ -1,16 +0,0 @@
-Group use declaration
------
-<?php
-use A\{B};
-use A\{B\C, D};
-use A\B\{C\D, E};
-use function A\{b\c, d};
-use const A\{B\C, D};
-use A\B\{C\D, function b\c, const D};
------
-use A\{B};
-use A\{B\C, D};
-use A\B\{C\D, E};
-use function A\{b\c, d};
-use const A\{B\C, D};
-use A\B\{C\D, function b\c, const D};
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/haltCompiler.file-test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/haltCompiler.file-test
deleted file mode 100644
index a427a64c82..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/haltCompiler.file-test
+++ /dev/null
@@ -1,27 +0,0 @@
-__halt_compiler
------
-<?php
-
-echo 'foo';
-__halt_compiler();
-!!!
-???
------
-<?php
-
-echo 'foo';
-__halt_compiler();
-!!!
-???
------
-<?php
-
-echo 'foo';
-__halt_compiler();
-<?php
------
-<?php
-
-echo 'foo';
-__halt_compiler();
-<?php
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/if.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/if.test
deleted file mode 100644
index 8debb2ec38..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/if.test
+++ /dev/null
@@ -1,16 +0,0 @@
-if/elseif/else
------
-<?php
-
-if ($expr) {
-
-} elseif ($expr2) {
-
-} else {
-
-}
------
-if ($expr) {
-} elseif ($expr2) {
-} else {
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/multiCatch.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/multiCatch.test
deleted file mode 100644
index 8e3f12b4d8..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/multiCatch.test
+++ /dev/null
@@ -1,19 +0,0 @@
-Multi catch
------
-<?php
-try {
-    $x;
-} catch (X|Y $e1) {
-    $y;
-} catch (\A|B\C $e2) {
-    $z;
-}
------
-!!php7
-try {
-    $x;
-} catch (X|Y $e1) {
-    $y;
-} catch (\A|B\C $e2) {
-    $z;
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/namespaces.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/namespaces.test
deleted file mode 100644
index 939470b5bc..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/namespaces.test
+++ /dev/null
@@ -1,50 +0,0 @@
-Namespaces
------
-<?php
-
-namespace Foo;
-
-function foo()
-{
-}
-
-namespace Bar;
-
-function bar()
-{
-}
------
-namespace Foo;
-
-function foo()
-{
-}
-namespace Bar;
-
-function bar()
-{
-}
------
-<?php
-
-namespace Foo {
-    function foo()
-    {
-    }
-}
-
-namespace {
-    function glob() {
-    }
-}
------
-namespace Foo {
-    function foo()
-    {
-    }
-}
-namespace {
-    function glob()
-    {
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/nullable_types.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/nullable_types.test
deleted file mode 100644
index 6a40e2019a..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/nullable_types.test
+++ /dev/null
@@ -1,11 +0,0 @@
-Nullable types
------
-<?php
-function test(?Foo $bar, ?string $foo, ?\Xyz $zyx) : ?Baz
-{
-}
------
-!!php7
-function test(?Foo $bar, ?string $foo, ?\Xyz $zyx) : ?Baz
-{
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/properties.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/properties.test
deleted file mode 100644
index 5a78ec4929..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/properties.test
+++ /dev/null
@@ -1,20 +0,0 @@
-Class properties
------
-<?php
-
-class A
-{
-    public $a;
-    public string $b;
-    protected static ?float $c = 5.0;
-    private static ?self $d;
-}
------
-!!php7
-class A
-{
-    public $a;
-    public string $b;
-    protected static ?float $c = 5.0;
-    private static ?self $d;
-}
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/switch.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/switch.test
deleted file mode 100644
index 871ff54baa..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/switch.test
+++ /dev/null
@@ -1,37 +0,0 @@
-switch/case/default
------
-<?php
-
-switch ($expr) {
-    case 0:
-        echo 'First case, with a break';
-        break;
-    case 1:
-        echo 'Second case, which falls through';
-    case 2:
-    case 3:
-    case 4:
-        echo 'Third case, return instead of break';
-        return;
-    // Comment
-    default:
-        echo 'Default case';
-        break;
-}
------
-switch ($expr) {
-    case 0:
-        echo 'First case, with a break';
-        break;
-    case 1:
-        echo 'Second case, which falls through';
-    case 2:
-    case 3:
-    case 4:
-        echo 'Third case, return instead of break';
-        return;
-    // Comment
-    default:
-        echo 'Default case';
-        break;
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/throw.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/throw.test
deleted file mode 100644
index 23408936a5..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/throw.test
+++ /dev/null
@@ -1,7 +0,0 @@
-throw
------
-<?php
-
-throw $e;
------
-throw $e;
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/traitUse.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/traitUse.test
deleted file mode 100644
index 7455ea008b..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/traitUse.test
+++ /dev/null
@@ -1,25 +0,0 @@
-Trait uses and adaptations
------
-<?php
-
-class A
-{
-    use B, C, D {
-        f as g;
-        f as private;
-        f as private g;
-        B::f as g;
-        B::f insteadof C, D;
-    }
-}
------
-class A
-{
-    use B, C, D {
-        f as g;
-        f as private;
-        f as private g;
-        B::f as g;
-        B::f insteadof C, D;
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/tryCatch.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/tryCatch.test
deleted file mode 100644
index 044934de97..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/tryCatch.test
+++ /dev/null
@@ -1,24 +0,0 @@
-tryCatch
------
-<?php
-
-try {
-
-} catch (Exception $e) {
-
-}
-
-try {
-} catch (Exception $e) {
-
-} finally {
-
-}
------
-try {
-} catch (Exception $e) {
-}
-try {
-} catch (Exception $e) {
-} finally {
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/while.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/while.test
deleted file mode 100644
index 4e6dadaeb9..0000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/while.test
+++ /dev/null
@@ -1,10 +0,0 @@
-while
------
-<?php
-
-while (true) {
-
-}
------
-while (true) {
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/updateTests.php b/vendor/nikic/php-parser/test/updateTests.php
deleted file mode 100644
index 40d0d0a965..0000000000
--- a/vendor/nikic/php-parser/test/updateTests.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-namespace PhpParser;
-
-require __DIR__ . '/bootstrap.php';
-require __DIR__ . '/PhpParser/CodeTestParser.php';
-require __DIR__ . '/PhpParser/CodeParsingTest.php';
-
-$dir = __DIR__ . '/code/parser';
-
-$testParser = new CodeTestParser;
-$codeParsingTest = new CodeParsingTest;
-foreach (filesInDir($dir, 'test') as $fileName => $code) {
-    if (false !== strpos($code, '@@{')) {
-        // Skip tests with evaluate segments
-        continue;
-    }
-
-    list($name, $tests) = $testParser->parseTest($code, 2);
-    $newTests = [];
-    foreach ($tests as list($modeLine, list($input, $expected))) {
-        $modes = null !== $modeLine ? array_fill_keys(explode(',', $modeLine), true) : [];
-        list($parser5, $parser7) = $codeParsingTest->createParsers($modes);
-        list(, $output) = isset($modes['php5'])
-            ? $codeParsingTest->getParseOutput($parser5, $input, $modes)
-            : $codeParsingTest->getParseOutput($parser7, $input, $modes);
-        $newTests[] = [$modeLine, [$input, $output]];
-    }
-
-    $newCode = $testParser->reconstructTest($name, $newTests);
-    file_put_contents($fileName, $newCode);
-}
diff --git a/vendor/nikic/php-parser/test_old/run-php-src.sh b/vendor/nikic/php-parser/test_old/run-php-src.sh
deleted file mode 100755
index d4f3889469..0000000000
--- a/vendor/nikic/php-parser/test_old/run-php-src.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-wget -q https://github.com/php/php-src/archive/PHP-7.4.tar.gz
-mkdir -p ./data/php-src
-tar -xzf ./PHP-7.4.tar.gz -C ./data/php-src --strip-components=1
-php -n test_old/run.php --verbose --no-progress PHP7 ./data/php-src
diff --git a/vendor/nikic/php-parser/test_old/run.php b/vendor/nikic/php-parser/test_old/run.php
deleted file mode 100644
index 8b74ab479b..0000000000
--- a/vendor/nikic/php-parser/test_old/run.php
+++ /dev/null
@@ -1,271 +0,0 @@
-<?php
-
-error_reporting(E_ALL | E_STRICT);
-ini_set('short_open_tag', false);
-
-if ('cli' !== php_sapi_name()) {
-    die('This script is designed for running on the command line.');
-}
-
-function showHelp($error) {
-    die($error . "\n\n" .
-<<<OUTPUT
-This script has to be called with the following signature:
-
-    php run.php [--no-progress] testType pathToTestFiles
-
-The test type must be one of: PHP5, PHP7 or Symfony.
-
-The following options are available:
-
-    --no-progress    Disables showing which file is currently tested.
-
-OUTPUT
-    );
-}
-
-$options = array();
-$arguments = array();
-
-// remove script name from argv
-array_shift($argv);
-
-foreach ($argv as $arg) {
-    if ('-' === $arg[0]) {
-        $options[] = $arg;
-    } else {
-        $arguments[] = $arg;
-    }
-}
-
-if (count($arguments) !== 2) {
-    showHelp('Too little arguments passed!');
-}
-
-$showProgress = true;
-$verbose = false;
-foreach ($options as $option) {
-    if ($option === '--no-progress') {
-        $showProgress = false;
-    } elseif ($option === '--verbose') {
-        $verbose = true;
-    } else {
-        showHelp('Invalid option passed!');
-    }
-}
-
-$testType = $arguments[0];
-$dir = $arguments[1];
-
-switch ($testType) {
-    case 'Symfony':
-        $version = 'Php7';
-        $fileFilter = function($path) {
-            if (!preg_match('~\.php$~', $path)) {
-                return false;
-            }
-
-            if (preg_match('~(?:
-# invalid php code
-  dependency-injection.Tests.Fixtures.xml.xml_with_wrong_ext
-# difference in nop statement
-| framework-bundle.Resources.views.Form.choice_widget_options\.html
-# difference due to INF
-| yaml.Tests.InlineTest
-)\.php$~x', $path)) {
-                return false;
-            }
-
-            return true;
-        };
-        $codeExtractor = function($file, $code) {
-            return $code;
-        };
-        break;
-    case 'PHP5':
-    case 'PHP7':
-    $version = $testType === 'PHP5' ? 'Php5' : 'Php7';
-        $fileFilter = function($path) {
-            return preg_match('~\.phpt$~', $path);
-        };
-        $codeExtractor = function($file, $code) {
-            if (preg_match('~(?:
-# skeleton files
-  ext.gmp.tests.001
-| ext.skeleton.tests.00\d
-# multibyte encoded files
-| ext.mbstring.tests.zend_multibyte-01
-| Zend.tests.multibyte.multibyte_encoding_001
-| Zend.tests.multibyte.multibyte_encoding_004
-| Zend.tests.multibyte.multibyte_encoding_005
-# invalid code due to missing WS after opening tag
-| tests.run-test.bug75042-3
-# pretty print difference due to INF vs 1e1000
-| ext.standard.tests.general_functions.bug27678
-| tests.lang.bug24640
-| Zend.tests.bug74947
-# pretty print differences due to negative LNumbers
-| Zend.tests.neg_num_string
-| Zend.tests.bug72918
-# pretty print difference due to nop statements
-| ext.mbstring.tests.htmlent
-| ext.standard.tests.file.fread_basic
-# its too hard to emulate these on old PHP versions
-| Zend.tests.flexible-heredoc-complex-test[1-4]
-)\.phpt$~x', $file)) {
-                return null;
-            }
-
-            if (!preg_match('~--FILE--\s*(.*?)\n--[A-Z]+--~s', $code, $matches)) {
-                return null;
-            }
-            if (preg_match('~--EXPECT(?:F|REGEX)?--\s*(?:Parse|Fatal) error~', $code)) {
-                return null;
-            }
-
-            return $matches[1];
-        };
-        break;
-    default:
-        showHelp('Test type must be one of: PHP5, PHP7 or Symfony');
-}
-
-require_once __DIR__ . '/../vendor/autoload.php';
-
-$lexer = new PhpParser\Lexer\Emulative(['usedAttributes' => [
-    'comments', 'startLine', 'endLine', 'startTokenPos', 'endTokenPos',
-]]);
-$parserName = 'PhpParser\Parser\\' . $version;
-/** @var PhpParser\Parser $parser */
-$parser = new $parserName($lexer);
-$prettyPrinter = new PhpParser\PrettyPrinter\Standard;
-$nodeDumper = new PhpParser\NodeDumper;
-
-$cloningTraverser = new PhpParser\NodeTraverser;
-$cloningTraverser->addVisitor(new PhpParser\NodeVisitor\CloningVisitor);
-
-$parseFail = $fpppFail = $ppFail = $compareFail = $count = 0;
-
-$readTime = $parseTime = $cloneTime = 0;
-$fpppTime = $ppTime = $reparseTime = $compareTime = 0;
-$totalStartTime = microtime(true);
-
-foreach (new RecursiveIteratorIterator(
-             new RecursiveDirectoryIterator($dir),
-             RecursiveIteratorIterator::LEAVES_ONLY)
-         as $file) {
-    if (!$fileFilter($file)) {
-        continue;
-    }
-
-    $startTime = microtime(true);
-    $origCode = file_get_contents($file);
-    $readTime += microtime(true) - $startTime;
-
-    if (null === $origCode = $codeExtractor($file, $origCode)) {
-        continue;
-    }
-
-    set_time_limit(10);
-
-    ++$count;
-
-    if ($showProgress) {
-        echo substr(str_pad('Testing file ' . $count . ': ' . substr($file, strlen($dir)), 79), 0, 79), "\r";
-    }
-
-    try {
-        $startTime = microtime(true);
-        $origStmts = $parser->parse($origCode);
-        $parseTime += microtime(true) - $startTime;
-
-        $origTokens = $lexer->getTokens();
-
-        $startTime = microtime(true);
-        $stmts = $cloningTraverser->traverse($origStmts);
-        $cloneTime += microtime(true) - $startTime;
-
-        $startTime = microtime(true);
-        $code = $prettyPrinter->printFormatPreserving($stmts, $origStmts, $origTokens);
-        $fpppTime += microtime(true) - $startTime;
-
-        if ($code !== $origCode) {
-            echo $file, ":\n Result of format-preserving pretty-print differs\n";
-            if ($verbose) {
-                echo "FPPP output:\n=====\n$code\n=====\n\n";
-            }
-
-            ++$fpppFail;
-        }
-
-        $startTime = microtime(true);
-        $code = "<?php\n" . $prettyPrinter->prettyPrint($stmts);
-        $ppTime += microtime(true) - $startTime;
-
-        try {
-            $startTime = microtime(true);
-            $ppStmts = $parser->parse($code);
-            $reparseTime += microtime(true) - $startTime;
-
-            $startTime = microtime(true);
-            $same = $nodeDumper->dump($stmts) == $nodeDumper->dump($ppStmts);
-            $compareTime += microtime(true) - $startTime;
-
-            if (!$same) {
-                echo $file, ":\n    Result of initial parse and parse after pretty print differ\n";
-                if ($verbose) {
-                    echo "Pretty printer output:\n=====\n$code\n=====\n\n";
-                }
-
-                ++$compareFail;
-            }
-        } catch (PhpParser\Error $e) {
-            echo $file, ":\n    Parse of pretty print failed with message: {$e->getMessage()}\n";
-            if ($verbose) {
-                echo "Pretty printer output:\n=====\n$code\n=====\n\n";
-            }
-
-            ++$ppFail;
-        }
-    } catch (PhpParser\Error $e) {
-        echo $file, ":\n    Parse failed with message: {$e->getMessage()}\n";
-
-        ++$parseFail;
-    }
-}
-
-if (0 === $parseFail && 0 === $ppFail && 0 === $compareFail) {
-    $exit = 0;
-    echo "\n\n", 'All tests passed.', "\n";
-} else {
-    $exit = 1;
-    echo "\n\n", '==========', "\n\n", 'There were: ', "\n";
-    if (0 !== $parseFail) {
-        echo '    ', $parseFail,   ' parse failures.',        "\n";
-    }
-    if (0 !== $ppFail) {
-        echo '    ', $ppFail,      ' pretty print failures.', "\n";
-    }
-    if (0 !== $fpppFail) {
-        echo '    ', $fpppFail,      ' FPPP failures.', "\n";
-    }
-    if (0 !== $compareFail) {
-        echo '    ', $compareFail, ' compare failures.',      "\n";
-    }
-}
-
-echo "\n",
-     'Tested files:         ', $count,        "\n",
-     "\n",
-     'Reading files took:   ', $readTime,    "\n",
-     'Parsing took:         ', $parseTime,   "\n",
-     'Cloning took:         ', $cloneTime,   "\n",
-     'FPPP took:            ', $fpppTime,    "\n",
-     'Pretty printing took: ', $ppTime,      "\n",
-     'Reparsing took:       ', $reparseTime, "\n",
-     'Comparing took:       ', $compareTime, "\n",
-     "\n",
-     'Total time:           ', microtime(true) - $totalStartTime, "\n",
-     'Maximum memory usage: ', memory_get_peak_usage(true), "\n";
-
-exit($exit);
diff --git a/vendor/oomphinc/composer-installers-extender/.editorconfig b/vendor/oomphinc/composer-installers-extender/.editorconfig
new file mode 100644
index 0000000000..4fef870856
--- /dev/null
+++ b/vendor/oomphinc/composer-installers-extender/.editorconfig
@@ -0,0 +1,18 @@
+# This file is for unifying the coding style for different editors and IDEs
+# editorconfig.org
+
+# PHP PSR-2 Coding Standards
+# http://www.php-fig.org/psr/psr-2/
+
+root = true
+
+[*]
+charset = utf-8
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
+indent_style = space
+indent_size = 4
+
+[*.{xml,yml}]
+indent_size = 2
diff --git a/vendor/oomphinc/composer-installers-extender/.travis.yml b/vendor/oomphinc/composer-installers-extender/.travis.yml
new file mode 100644
index 0000000000..bfb41b607c
--- /dev/null
+++ b/vendor/oomphinc/composer-installers-extender/.travis.yml
@@ -0,0 +1,20 @@
+language: php
+
+php:
+  - 5.6
+  - 7.0
+  - 7.1
+  - 7.2
+  - nightly
+
+matrix:
+  allow_failures:
+    - php: 5.6
+    - php: 7.0
+  fast_finish: true
+
+install: composer install
+
+script:
+  - composer lint
+  - composer test
diff --git a/vendor/oomphinc/composer-installers-extender/CHANGELOG.md b/vendor/oomphinc/composer-installers-extender/CHANGELOG.md
new file mode 100644
index 0000000000..0fb7ad6e40
--- /dev/null
+++ b/vendor/oomphinc/composer-installers-extender/CHANGELOG.md
@@ -0,0 +1,55 @@
+# Changelog
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog][] and this project adheres to the
+[Semantic Versioning][] scheme.
+
+[Keep a Changelog]: http://keepachangelog.com
+[Semantic Versioning]: https://semver.org
+
+## [Unreleased]
+### Added
+
+### Changed
+
+### Deprecated
+
+### Removed
+
+### Fixed
+
+### Security
+
+## [2.0.0] - 2020-08-11
+### Added
+- Add `.editorconfig`, `.gitignore`, `.lando.yml`, `phpcs.xml` and `phpunit.xml`
+  files to support local development
+- Add `LICENSE` and `CHANGELOG.md` files
+- Add `phpunit/phpunit` and `squizlabs/php_codesniffer` as development
+  dependencies
+- Add requirement for PHP 7.1
+- Add support for Composer 2
+
+### Changed
+- Move `OomphInc\ComposerInstallersExtender\Installer` to
+  `OomphInc\ComposerInstallersExtender\Installers\Installer`
+- Move `OomphInc\ComposerInstallersExtender\InstallerHelper` to
+  `OomphInc\ComposerInstallersExtender\Installers\CustomInstaller`
+- Implement PSR-2 standards and PHP 7.1 syntax
+- Update project `README.md` file
+
+## [1.1.2] - 2017-03-31
+### Changed
+- Minor syntax update to provide compatibility with PHP 5.3
+
+## [1.1.1] - 2016-07-05
+### Changed
+- Update composer/installers version requirement
+
+## [1.1.0] - 2016-03-02
+### Changed
+- Update package requirements to be less restrictive
+
+## [1.0.0] - 2016-01-07
+### Added
+- Initial release
diff --git a/vendor/oomphinc/composer-installers-extender/LICENSE b/vendor/oomphinc/composer-installers-extender/LICENSE
new file mode 100644
index 0000000000..6ce1578dd0
--- /dev/null
+++ b/vendor/oomphinc/composer-installers-extender/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Oomph, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/vendor/oomphinc/composer-installers-extender/README.md b/vendor/oomphinc/composer-installers-extender/README.md
index a2bb3ca193..05ca2d3324 100644
--- a/vendor/oomphinc/composer-installers-extender/README.md
+++ b/vendor/oomphinc/composer-installers-extender/README.md
@@ -1,45 +1,79 @@
 # Composer Installers Extender
 
-The `composer-installers-extender` is a plugin for [Composer](https://getcomposer.org/) that allows
-any package to be installed to a directory other than the default `vendor/` directory within
-the repo on a package-by-package basis. This plugin extends the [`composer/installers`](https://github.com/composer/installers)
-plugin to allow any arbitrary package type to be handled by their custom installer and specified explicitly in the
-`"installer-paths"` mapping in the `"extra"` data property.
+The `composer-installers-extender` is a plugin for [Composer][] that allows
+any package to be installed to a directory other than the default `vendor`
+directory within a project on a package-by-package basis. This plugin extends
+the [`composer/installers`][] plugin to allow any arbitrary package type to be
+handled by their custom installer.
 
-`composer/installers` has a finite set of supported package types and we recognize the need for
-any arbitrary package type to be installed to a specific directory other than `vendor/`. This plugin
-allows additional package types to be handled by `composer/installers`, benefiting from their explicit install path
-mapping and token replacement of package properties.
+The [`composer/installers`][] plugin has a finite set of supported package types
+and we recognize the need for any arbitrary package type to be installed to a
+specific directory other than `vendor`. This plugin allows additional package
+types to be handled by the [`composer/installers`][] plugin, benefiting from
+their explicit install path mapping and token replacement of package properties.
 
-## How to Use
-Add `oomphinc/composer-installers-extender` as a dependency of your project.
-```sh
-composer require oomphinc/composer-installers-extender
-```
-`composer/installers` is a dependency of this plugin and will be automatically required as well.
+## How to Install
+
+Add `oomphinc/composer-installers-extender` as a dependency of your project:
 
-To support additional package types, add an array of these types in the `"extra"` property in your `composer.json`:
+```bash
+$ composer require oomphinc/composer-installers-extender
 ```
-	"extra": {
-		"installer-types": ["library"]
-	}
+
+This plugin requires at least PHP 7.1. If you're using a lower version of PHP
+use the latest stable 1.x release:
+
+```bash
+$ composer require oomphinc/composer-installers-extender:^1.1
 ```
-Then, you can add mappings for packages of these types in the same way that you would add package types
-that are supported by [`composer/installers`](https://github.com/composer/installers#custom-install-paths):
+
+## How to Use
+
+The [`composer/installers`][] plugin is a dependency of this plugin and will be
+automatically required as well if not already required.
+
+To support additional package types, add an array of these types in the
+`extra` property in your `composer.json`:
+
+```json
+{
+    "extra": {
+        "installer-types": ["library"]
+    }
+}
 ```
-  "extra": {
-    "installer-types": ["library"],
-    "installer-paths": {
-      "special/package/": ["my/package"],
-      "path/to/libraries/{$name}/": ["type:library"]
+
+Then, you can add mappings for packages of these types in the same way that you
+would add package types that are supported by [`composer/installers`][]:
+
+```json
+{
+    "extra": {
+        "installer-types": ["library"],
+        "installer-paths": {
+            "special/package/": ["my/package"],
+            "path/to/libraries/{$name}/": ["type:library"]
+        }
     }
-  }
+}
 ```
-By default, packages that do not specify a `type` will be considered type `library`. Adding support for this type
-allows any of these packages to be placed in a different install path.
 
-If a type has been added to `"installer-types"`, the plugin will attempt to find an explicit installer path in the mapping.
-If there is no match either by name or by type, the default installer path for all packages will be used instead.
+By default, packages that do not specify a `type` will be considered the type
+`library`. Adding support for this type allows any of these packages to be
+placed in a different install path.
+
+If a type has been added to `installer-types`, the plugin will attempt to find
+an explicit installer path in the mapping. If there is no match either by name
+or by type, the default installer path for all packages will be used instead.
+
+Please see the README for [`composer/installers`][] to see the supported syntax
+for package and type matching as well as the supported replacement tokens in
+the path (e.g. `{$name}`).
+
+## License
+
+[MIT License][]
 
-Please see the README for [`composer/installers`](https://github.com/composer/installers) to see the supported
-syntax for package and type matching as well as the supported replacement tokens in the path (e.g. `{$name}`).
+[Composer]: https://getcomposer.org
+[`composer/installers`]: https://github.com/composer/installers
+[MIT License]: LICENSE
diff --git a/vendor/oomphinc/composer-installers-extender/composer.json b/vendor/oomphinc/composer-installers-extender/composer.json
index 118835c700..3837d0feee 100644
--- a/vendor/oomphinc/composer-installers-extender/composer.json
+++ b/vendor/oomphinc/composer-installers-extender/composer.json
@@ -1,27 +1,55 @@
 {
-	"name": "oomphinc/composer-installers-extender",
-	"description": "Extend the composer/installers plugin to accept any arbitrary package type.",
-	"homepage": "http://www.oomphinc.com/",
-	"type": "composer-plugin",
-	"license": "MIT",
-	"authors": [
-		{
-			"name": "Stephen Beemsterboer",
-			"email": "stephen@oomphinc.com",
-			"homepage": "https://github.com/balbuf"
-		}
-	],
-	"support": {
-		"issues": "https://github.com/oomphinc/composer-installers-extender/issues"
-	},
-	"autoload": {
-		"psr-4": {"OomphInc\\ComposerInstallersExtender\\": "src/"}
-	},
-	"extra": {
-		"class": "OomphInc\\ComposerInstallersExtender\\Plugin"
-	},
-	"require": {
-		"composer-plugin-api": "^1.0",
-		"composer/installers": "^1.0"
-	}
+    "name": "oomphinc/composer-installers-extender",
+    "description": "Extend the composer/installers plugin to accept any arbitrary package type.",
+    "homepage": "http://www.oomphinc.com/",
+    "type": "composer-plugin",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Stephen Beemsterboer",
+            "email": "stephen@oomphinc.com",
+            "homepage": "https://github.com/balbuf"
+        },
+        {
+            "name": "Nathan Dentzau",
+            "email": "nate@oomphinc.com",
+            "homepage": "http://oomph.is/ndentzau"
+        }
+    ],
+    "support": {
+        "issues": "https://github.com/oomphinc/composer-installers-extender/issues"
+    },
+    "require": {
+        "php": ">=7.1",
+        "composer-plugin-api": "^1.1 || ^2.0",
+        "composer/installers": "^1.0"
+    },
+    "require-dev": {
+        "composer/composer": "^2.0",
+        "phpunit/phpunit": "^7.2",
+        "squizlabs/php_codesniffer": "^3.3"
+    },
+    "autoload":{
+        "psr-4": {
+            "OomphInc\\ComposerInstallersExtender\\": "src/"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "OomphInc\\ComposerInstallerExtender\\Tests\\": "tests/src/"
+        }
+    },
+    "scripts": {
+        "fix": "vendor/bin/phpcbf",
+        "lint": "vendor/bin/phpcs",
+        "test": "vendor/bin/phpunit"
+    },
+    "config": {
+        "sort-packages": true
+    },
+    "extra": {
+        "class": "OomphInc\\ComposerInstallersExtender\\Plugin"
+    },
+    "minimum-stability": "dev",
+    "prefer-stable": true
 }
diff --git a/vendor/oomphinc/composer-installers-extender/phpcs.xml b/vendor/oomphinc/composer-installers-extender/phpcs.xml
new file mode 100644
index 0000000000..5560f3c008
--- /dev/null
+++ b/vendor/oomphinc/composer-installers-extender/phpcs.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<ruleset name="Composer Installers Extender">
+  <description>
+    Coding standards for the Composer Installers Extender project using PSR-2
+    with PHP 7 syntax.
+  </description>
+
+  <!-- Directories to scan -->
+  <file>src/</file>
+
+  <!-- PHPCS argument overrides -->
+  <arg name="colors" />
+
+  <!-- PHP configuration overrides -->
+  <ini name="memory_limit" value="-1" />
+
+  <!-- Project autoloader -->
+  <autoload>vendor/autoload.php</autoload>
+
+  <!-- Import rules -->
+  <rule ref="PSR2" />
+</ruleset>
diff --git a/vendor/oomphinc/composer-installers-extender/phpunit.xml b/vendor/oomphinc/composer-installers-extender/phpunit.xml
new file mode 100644
index 0000000000..261373e864
--- /dev/null
+++ b/vendor/oomphinc/composer-installers-extender/phpunit.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit
+  colors="true"
+  beStrictAboutChangesToGlobalState="true"
+  beStrictAboutOutputDuringTests="true"
+  beStrictAboutTestsThatDoNotTestAnything="true"
+  bootstrap="vendor/autoload.php">
+  <php>
+    <ini name="error_reporting" value="32767" />
+    <ini name="memory_limit" value="-1" />
+  </php>
+  <testsuites>
+    <testsuite name="unit">
+      <directory>./tests/src</directory>
+    </testsuite>
+  </testsuites>
+  <filter>
+    <whitelist>
+      <directory>./src</directory>
+     </whitelist>
+  </filter>
+  <logging>
+    <log type="coverage-html" target="tests/results/html"/>
+    <log type="coverage-clover" target="tests/results/coverage.xml"/>
+    <log type="coverage-text" target="tests/results/coverage.txt"/>
+  </logging>
+</phpunit>
diff --git a/vendor/oomphinc/composer-installers-extender/src/Installer.php b/vendor/oomphinc/composer-installers-extender/src/Installer.php
deleted file mode 100644
index 437b49a798..0000000000
--- a/vendor/oomphinc/composer-installers-extender/src/Installer.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-namespace OomphInc\ComposerInstallersExtender;
-
-use Composer\Installer\LibraryInstaller;
-use Composer\Installers\Installer as ComposerInstaller;
-use Composer\Package\PackageInterface;
-
-class Installer extends ComposerInstaller {
-
-	protected $packageTypes;
-
-	public function getInstallPath( PackageInterface $package ) {
-		$installer = new InstallerHelper( $package, $this->composer, $this->io );
-		$path = $installer->getInstallPath( $package, $package->getType() );
-		// if the path is false, use the default installer path instead
-		return $path !== false ? $path : LibraryInstaller::getInstallPath( $package );
-	}
-
-	public function supports( $packageType ) {
-		// grab the package types once
-		if ( !isset( $this->packageTypes ) ) {
-			$this->packageTypes = false;
-			if ( $this->composer->getPackage() ) {
-				// get data from the 'extra' field
-				$extra = $this->composer->getPackage()->getExtra();
-				if ( !empty( $extra['installer-types'] ) ) {
-					$this->packageTypes = (array) $extra['installer-types'];
-				}
-			}
-		}
-		return is_array( $this->packageTypes ) && in_array( $packageType, $this->packageTypes );
-	}
-
-}
\ No newline at end of file
diff --git a/vendor/oomphinc/composer-installers-extender/src/InstallerHelper.php b/vendor/oomphinc/composer-installers-extender/src/InstallerHelper.php
deleted file mode 100644
index fb332d6737..0000000000
--- a/vendor/oomphinc/composer-installers-extender/src/InstallerHelper.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-
-namespace OomphInc\ComposerInstallersExtender;
-
-use Composer\Installers\BaseInstaller;
-
-class InstallerHelper extends BaseInstaller {
-
-	function getLocations() {
-		// it will be looking for a key of FALSE, which evaluates to 0, i.e. the first element
-		// that element value being false signals the installer to use the default path
-		return array( false );
-	}
-
-}
diff --git a/vendor/oomphinc/composer-installers-extender/src/Installers/CustomInstaller.php b/vendor/oomphinc/composer-installers-extender/src/Installers/CustomInstaller.php
new file mode 100644
index 0000000000..e80ab38719
--- /dev/null
+++ b/vendor/oomphinc/composer-installers-extender/src/Installers/CustomInstaller.php
@@ -0,0 +1,18 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace OomphInc\ComposerInstallersExtender\Installers;
+
+use Composer\Installers\BaseInstaller;
+
+/**
+ * Provides a custom installer class for custom installer types.
+ *
+ * By default, the parent class has no specified locations. By not providing an
+ * array of locations we are forcing the installer to use custom installer
+ * paths.
+ */
+class CustomInstaller extends BaseInstaller
+{
+}
diff --git a/vendor/oomphinc/composer-installers-extender/src/Installers/Installer.php b/vendor/oomphinc/composer-installers-extender/src/Installers/Installer.php
new file mode 100644
index 0000000000..c686f77a86
--- /dev/null
+++ b/vendor/oomphinc/composer-installers-extender/src/Installers/Installer.php
@@ -0,0 +1,53 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace OomphInc\ComposerInstallersExtender\Installers;
+
+use Composer\Package\PackageInterface;
+use Composer\Installer\LibraryInstaller;
+use Composer\Installers\Installer as InstallerBase;
+
+class Installer extends InstallerBase
+{
+    /**
+     * A list of installer types.
+     *
+     * @var array
+     */
+    protected $installerTypes;
+
+    /**
+     * {@inheritDoc}
+     */
+    public function getInstallPath(PackageInterface $package): string
+    {
+        $installer = new CustomInstaller($package, $this->composer, $this->io);
+        $path = $installer->getInstallPath($package, $package->getType());
+
+        return $path ?: LibraryInstaller::getInstallPath($package);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function supports($packageType): bool
+    {
+        return in_array($packageType, $this->getInstallerTypes());
+    }
+
+    /**
+     * Get a list of custom installer types.
+     *
+     * @return array
+     */
+    public function getInstallerTypes(): array
+    {
+        if (!$this->installerTypes) {
+            $extra = $this->composer->getPackage()->getExtra();
+            $this->installerTypes = $extra['installer-types'] ?? [];
+        }
+
+        return $this->installerTypes;
+    }
+}
diff --git a/vendor/oomphinc/composer-installers-extender/src/Plugin.php b/vendor/oomphinc/composer-installers-extender/src/Plugin.php
index 09c1ad50fc..2f9b04d67a 100644
--- a/vendor/oomphinc/composer-installers-extender/src/Plugin.php
+++ b/vendor/oomphinc/composer-installers-extender/src/Plugin.php
@@ -1,16 +1,36 @@
 <?php
 
+declare(strict_types = 1);
+
 namespace OomphInc\ComposerInstallersExtender;
 
 use Composer\Composer;
 use Composer\IO\IOInterface;
 use Composer\Plugin\PluginInterface;
+use OomphInc\ComposerInstallersExtender\Installers\Installer;
 
-class Plugin implements PluginInterface {
+class Plugin implements PluginInterface
+{
+    /**
+     * {@inheritDoc}
+     */
+    public function activate(Composer $composer, IOInterface $io): void
+    {
+        $installer = new Installer($io, $composer);
+        $composer->getInstallationManager()->addInstaller($installer);
+    }
 
-	public function activate( Composer $composer, IOInterface $io ) {
-		$installer = new Installer( $io, $composer );
-		$composer->getInstallationManager()->addInstaller( $installer );
-	}
+    /**
+     * {@inheritDoc}
+     */
+    public function deactivate(Composer $composer, IOInterface $io): void
+    {
+    }
 
-}
\ No newline at end of file
+    /**
+     * {@inheritDoc}
+     */
+    public function uninstall(Composer $composer, IOInterface $io): void
+    {
+    }
+}
diff --git a/vendor/oomphinc/composer-installers-extender/tests/src/Installers/CustomInstallerTest.php b/vendor/oomphinc/composer-installers-extender/tests/src/Installers/CustomInstallerTest.php
new file mode 100644
index 0000000000..5d696ada5a
--- /dev/null
+++ b/vendor/oomphinc/composer-installers-extender/tests/src/Installers/CustomInstallerTest.php
@@ -0,0 +1,18 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace OomphInc\ComposerInstallersExtender\Tests\Installers;
+
+use PHPUnit\Framework\TestCase;
+use OomphInc\ComposerInstallersExtender\Installers\CustomInstaller;
+
+class CustomInstallerTest extends TestCase
+{
+    public function testLocations(): void
+    {
+        $installer = (new \ReflectionClass(CustomInstaller::class))
+            ->newInstanceWithoutConstructor();
+        $this->assertEmpty($installer->getLocations());
+    }
+}
diff --git a/vendor/oomphinc/composer-installers-extender/tests/src/Installers/InstallerTest.php b/vendor/oomphinc/composer-installers-extender/tests/src/Installers/InstallerTest.php
new file mode 100644
index 0000000000..f090f504fc
--- /dev/null
+++ b/vendor/oomphinc/composer-installers-extender/tests/src/Installers/InstallerTest.php
@@ -0,0 +1,117 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace OomphInc\ComposerInstallersExtender\Installers;
+
+use Composer\Composer;
+use Composer\IO\IOInterface;
+use PHPUnit\Framework\TestCase;
+use Composer\Package\Package;
+
+class InstallerTest extends TestCase
+{
+    protected $composer;
+
+    protected $io;
+
+    public function setUp(): void
+    {
+        parent::setUp();
+
+        $this->composer = $this->createMock(Composer::class);
+        $this->composer
+            ->method('getConfig')
+            ->willReturn(new class {
+                public function get($name) {
+                    return null;
+                }
+            });
+
+        $this->io = $this->createMock(IOInterface::class);
+    }
+
+    public function testGetInstallPath(): void
+    {
+        $this->composer
+            ->method('getPackage')
+            ->willReturn(new class {
+                public function getExtra()
+                {
+                    return [
+                        'installer-types' => ['custom-type'],
+                        'installer-paths' => [
+                            'custom/path/{$name}' => ['type:custom-type'],
+                        ],
+                    ];
+                }
+            });
+
+        $installer = new Installer($this->io, $this->composer);
+
+        $package = new Package('oomphinc/test', '1.0.0', '1.0.0');
+        $package->setType('custom-type');
+
+        $this->assertEquals(
+            'custom/path/test',
+            $installer->getInstallPath($package)
+        );
+    }
+
+    public function testSupports(): void
+    {
+        $installer = new class extends Installer {
+            public function __construct() {}
+
+            public function getInstallerTypes(): array
+            {
+                return ['custom-type'];
+            }
+        };
+
+        $this->assertTrue($installer->supports('custom-type'));
+        $this->assertFalse($installer->supports('oomph'));
+    }
+
+    /**
+     * @dataProvider installerTypesDataProvider
+     */
+    public function testGetInstallerTypes($package, array $expected): void
+    {
+        $this->composer
+            ->method('getPackage')
+            ->willReturn($package);
+
+        $installer = new Installer($this->io, $this->composer);
+        $this->assertEquals($expected, $installer->getInstallerTypes());
+    }
+
+    public function installerTypesDataProvider(): array
+    {
+        return [
+            [
+                new class {
+                    public function getExtra(): array
+                    {
+                        return [
+                            'installer-types' => ['custom-type'],
+                            'installer-paths' => [
+                                'custom/path/{$name}' => ['type:custom-type'],
+                            ],
+                        ];
+                    }
+                },
+                ['custom-type'],
+            ],
+            [
+                new class {
+                    public function getExtra(): array
+                    {
+                        return [];
+                    }
+                },
+                [],
+            ],
+        ];
+    }
+}
diff --git a/vendor/oomphinc/composer-installers-extender/tests/src/PluginTest.php b/vendor/oomphinc/composer-installers-extender/tests/src/PluginTest.php
new file mode 100644
index 0000000000..cb0fb9b795
--- /dev/null
+++ b/vendor/oomphinc/composer-installers-extender/tests/src/PluginTest.php
@@ -0,0 +1,55 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace OomphInc\ComposerInstallersExtender\Tests;
+
+use Composer\Composer;
+use Composer\IO\IOInterface;
+use PHPUnit\Framework\TestCase;
+use Composer\Installer\InstallationManager;
+use OomphInc\ComposerInstallersExtender\Installers\Installer;
+use OomphInc\ComposerInstallersExtender\Plugin;
+
+class PluginTest extends TestCase
+{
+    protected $composer;
+
+    protected $io;
+
+    public function setUp(): void
+    {
+        parent::setUp();
+
+        $this->composer = $this->createMock(Composer::class);
+        $this->composer
+            ->method('getConfig')
+            ->willReturn(new class{
+                public function get($name)
+                {
+                    return null;
+                }
+            });
+
+        $this->io = $this->createMock(IOInterface::class);
+    }
+
+    public function testActive(): void
+    {
+        $installationManager = $this->createMock(InstallationManager::class);
+        $installationManager
+            ->expects($this->once())
+            ->method('addInstaller')
+            ->with(new Installer($this->io, $this->composer));
+
+        $this->composer
+            ->expects($this->once())
+            ->method('getInstallationManager')
+            ->willReturn($installationManager);
+
+        // There is no output to test from the activate method. Only test for
+        // method call expectations.
+        $plugin = new Plugin();
+        $plugin->activate($this->composer, $this->io);
+    }
+}
diff --git a/vendor/jakub-onderka/php-console-highlighter/LICENSE b/vendor/pantheon-systems/quicksilver-pushback/LICENSE
similarity index 96%
rename from vendor/jakub-onderka/php-console-highlighter/LICENSE
rename to vendor/pantheon-systems/quicksilver-pushback/LICENSE
index 1a8317fa15..c5be8b188f 100644
--- a/vendor/jakub-onderka/php-console-highlighter/LICENSE
+++ b/vendor/pantheon-systems/quicksilver-pushback/LICENSE
@@ -1,6 +1,6 @@
 The MIT License (MIT)
 
-Copyright (c) 2013 Jakub Onderka
+Copyright (c) 2015 Pantheon
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
@@ -18,4 +18,5 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
\ No newline at end of file
+SOFTWARE.
+
diff --git a/vendor/pantheon-systems/quicksilver-pushback/README.md b/vendor/pantheon-systems/quicksilver-pushback/README.md
new file mode 100644
index 0000000000..30a6954678
--- /dev/null
+++ b/vendor/pantheon-systems/quicksilver-pushback/README.md
@@ -0,0 +1,41 @@
+# Quicksilver Pushback
+This Quicksilver project is used in conjunction with the various suite of [Terminus Build Tools](https://github.com/pantheon-systems/terminus-build-tools-plugin)-based example repositories to push any commits made on the Pantheon dashboard back to the original GitHub repository for the site.
+
+This Quicksilver script only works with Pantheon sites that have been configured to use a GitHub PR workflow.
+
+### Example composer.json
+
+This project is designed to be included from a site's composer.json file, and placed in its appropriate installation directory by [Composer Installers](https://github.com/composer/installers).
+
+In order for this to work, you should have the following in your composer.json file:
+
+```json
+{
+  "require": {
+    "composer/installers": "^1.0.20"
+  },
+  "extra": {
+    "installer-paths": {
+      "web/private/scripts/quicksilver": ["type:quicksilver-script"]
+    }
+  }
+}
+```
+
+If you are using one of the example PR workflow projects as a starting point for your site, these entries should already be present in your composer.json.
+
+### Example `pantheon.yml`
+
+Here's an example of what your `pantheon.yml` would look like if this were the only Quicksilver operation you wanted to use.
+
+```yaml
+api_version: 1
+
+workflows:
+  sync_code:
+    after:
+      - type: webphp
+        description: Push changes back to GitHub if needed
+        script: private/scripts/quicksilver/quicksilver-pushback/push-back-to-github.php
+```
+If you are using one of the example PR workflow projects as a starting point for your site, this entry should already be present in your pantheon.yml.
diff --git a/vendor/pantheon-systems/quicksilver-pushback/composer.json b/vendor/pantheon-systems/quicksilver-pushback/composer.json
new file mode 100644
index 0000000000..b97612dff2
--- /dev/null
+++ b/vendor/pantheon-systems/quicksilver-pushback/composer.json
@@ -0,0 +1,9 @@
+{
+  "name": "pantheon-systems/quicksilver-pushback",
+  "description": "Push commits made via the Pantheon dashboard back to original GitHub repository.",
+  "type": "quicksilver-script",
+  "require": {
+    "composer/installers": "~1.0"
+  },
+  "license": "MIT"
+}
diff --git a/vendor/pantheon-systems/quicksilver-pushback/lean-repo-utils.php b/vendor/pantheon-systems/quicksilver-pushback/lean-repo-utils.php
new file mode 100644
index 0000000000..d09d94f281
--- /dev/null
+++ b/vendor/pantheon-systems/quicksilver-pushback/lean-repo-utils.php
@@ -0,0 +1,64 @@
+<?php
+
+function load_github_secrets($gitHubSecretsFile)
+{
+  if (!file_exists($gitHubSecretsFile)) {
+    print "Could not find $gitHubSecretsFile\n";
+    return [];
+  }
+  $gitHubSecretsContents = file_get_contents($gitHubSecretsFile);
+  if (empty($gitHubSecretsContents)) {
+    print "GitHub secrets file is empty\n";
+    return [];
+  }
+  $gitHubSecrets = json_decode($gitHubSecretsContents, true);
+  if (empty($gitHubSecrets)) {
+    print "No data in GitHub secrets\n";
+  }
+  return $gitHubSecrets;
+}
+
+/**
+ * Read the secrets.json file
+ */
+function pantheon_get_secrets($bindingDir, $requiredKeys, $defaultValues) {
+  $secretsFile = "$bindingDir/files/private/secrets.json";
+  if (!file_exists($secretsFile)) {
+    pantheon_raise_dashboard_error('Secrets file does not exist');
+  }
+  $secretsContents = file_get_contents($secretsFile);
+  if (empty($secretsContents)) {
+    pantheon_raise_dashboard_error('Could not read secrets file (or it is empty).');
+  }
+  $secrets = json_decode($secretsContents, 1);
+  if (empty($secrets)) {
+    pantheon_raise_dashboard_error('Could not parse json data in secrets file.');
+  }
+  $secrets += $defaultValues;
+  $missing = array_diff($requiredKeys, array_keys($secrets));
+  if (!empty($missing)) {
+    die('Missing required keys in json secrets file: ' . implode(',', $missing) . '. Aborting!');
+  }
+  return $secrets;
+}
+
+/**
+ * Function to report an error on the Pantheon dashboard
+ *
+ * Not supported; may stop working at any point in the future.
+ */
+function pantheon_raise_dashboard_error($reason = 'Uknown failure', $extended = FALSE) {
+  // Make creative use of the error reporting API
+  $data = array('file'=>'GitHub Integration',
+                'line'=>'Error',
+                'type'=>'error',
+                'message'=>$reason);
+  $params = http_build_query($data);
+  $result = pantheon_curl('https://api.live.getpantheon.com/sites/self/environments/self/events?'. $params, NULL, 8443, 'POST');
+  error_log("GitHub Integration failed - $reason");
+  // Dump additional debug info into the error log
+  if ($extended) {
+    error_log(print_r($extended, 1));
+  }
+  die("GitHub Integration failed - $reason");
+}
diff --git a/vendor/pantheon-systems/quicksilver-pushback/push-back-to-github.php b/vendor/pantheon-systems/quicksilver-pushback/push-back-to-github.php
new file mode 100644
index 0000000000..e49f77cc87
--- /dev/null
+++ b/vendor/pantheon-systems/quicksilver-pushback/push-back-to-github.php
@@ -0,0 +1,231 @@
+<?php
+
+include __DIR__ . '/lean-repo-utils.php';
+
+// ad-hoc cli usage: call with cwd set to full repository
+// TODO: refactor for testability (and write tests!)
+if (!isset($_ENV['PANTHEON_ENVIRONMENT'])) {
+  $fullRepository = getcwd();
+  $workDir = sys_get_temp_dir() . '/pushback-workdir';
+  passthru("rm -rf $workDir");
+  mkdir($workDir);
+  $github_token = getenv('GITHUB_TOKEN');
+
+  $result = push_back_to_github($fullRepository, $workDir, $github_token);
+
+  exit($result);
+}
+
+// Do nothing for test or live environments.
+if (in_array($_ENV['PANTHEON_ENVIRONMENT'], ['test', 'live'])) {
+  return;
+}
+
+/**
+ * This script will separates changes from the most recent commit
+ * and pushes any that affect the canonical sources back to the
+ * master repository.
+ */
+$bindingDir = $_SERVER['HOME'];
+$fullRepository = "$bindingDir/code";
+// $docRoot = "$fullRepository/" . $_SERVER['DOCROOT'];
+
+print "Enter push-back-to-github. Repository root is $fullRepository.\n";
+
+$privateFiles = "$bindingDir/files/private";
+$gitHubSecretsFile = "$privateFiles/github-secrets.json";
+$gitHubSecrets = load_github_secrets($gitHubSecretsFile);
+$github_token = $gitHubSecrets['token'];
+
+$workDir = "$bindingDir/tmp/pushback-workdir";
+
+// Temporary:
+passthru("rm -rf $workDir");
+mkdir($workDir);
+
+$status = push_back_to_github($fullRepository, $workDir, $github_token);
+
+// Throw out the working repository.
+passthru("rm -rf $workDir");
+
+// Post error to dashboard and exit if the merge fails.
+if ($status != 0) {
+  $message = "Commit back to canonical repository failed with exit code $status.";
+  pantheon_raise_dashboard_error($message, true);
+}
+
+function push_back_to_github($fullRepository, $workDir, $github_token)
+{
+  $buildMetadataFile = "build-metadata.json";
+  if (!file_exists("$fullRepository/$buildMetadataFile")) {
+    print "Could not find build metadata file, $buildMetadataFile\n";
+    return;
+  }
+  $buildMetadataFileContents = file_get_contents("$fullRepository/$buildMetadataFile");
+  $buildMetadata = json_decode($buildMetadataFileContents, true);
+  if (empty($buildMetadata)) {
+    print "No data in build metadata\n";
+    return;
+  }
+
+  print "::::::::::::::::: Build Metadata :::::::::::::::::\n";
+  var_export($buildMetadata);
+  print "\n\n";
+
+  // The remote repo to push to
+  $upstreamRepo = $buildMetadata['url'];
+  $upstreamRepoWithCredentials = $upstreamRepo;
+  if (!empty($github_token)) {
+    $upstreamRepoWithCredentials = str_replace('git@github.com:', 'https://github.com/', $upstreamRepoWithCredentials);
+    $upstreamRepoWithCredentials = str_replace('https://', "https://$github_token:x-oauth-basic@", $upstreamRepoWithCredentials);
+  }
+
+  // The last commit made on the lean repo prior to creating the build artifacts
+  $fromSha = $buildMetadata['sha'];
+
+  // The name of the PR branch
+  $branch = $buildMetadata['ref'];
+
+  // The commit to cherry-pick
+  $commitToSubmit = exec("git -C $fullRepository rev-parse HEAD");
+
+  // Seatbelts: is build metadatafile modified in the HEAD commit?
+  $commitWithBuildMetadataFile = exec("git -C $fullRepository log -n 1 --pretty=format:%H -- $buildMetadataFile");
+  if ($commitWithBuildMetadataFile == $commitToSubmit) {
+    print "Ignoring commit because it contains build assets.\n";
+    return;
+  }
+
+  // A working branch to make changes on
+  $targetBranch = $branch;
+
+  print "::::::::::::::::: Info :::::::::::::::::\n";
+  print "We are going to check out $branch from {$buildMetadata['url']}, branch from $fromSha and cherry-pick $commitToSubmit onto it\n";
+
+  $canonicalRepository = "$workDir/scratchRepository";
+  $workbranch = "recommit-work";
+
+  // Make a working clone of the GitHub branch. Clone just the branch
+  // and commit we need.
+  print "git clone $upstreamRepo --depth=1 --branch $branch --single-branch\n";
+  passthru("git clone $upstreamRepoWithCredentials --depth=1 --branch $branch --single-branch $canonicalRepository 2>&1");
+
+  // If there have been extra commits, then unshallow the repository so that
+  // we can make a branch off of the commit this multidev was built from.
+  print "git rev-parse HEAD\n";
+  $remoteHead = exec("git -C $canonicalRepository rev-parse HEAD");
+  if ($remoteHead != $fromSha) {
+    // TODO: If we had git 2.11.0, we could use --shallow-since with the date
+    // from $buildMetadata['commit-date'] to get exactly the commits we need.
+    // Until then, though, we will just `unshallow` the whole branch if there
+    // is a conflicting commit.
+    print "git fetch --unshallow\n";
+    passthru("git -C $canonicalRepository fetch --unshallow 2>&1");
+  }
+
+  // Get metadata from the commit at the HEAD of the full repository
+  $comment = escapeshellarg(exec("git -C $fullRepository log -1 --pretty=\"%s\""));
+  $commit_date = escapeshellarg(exec("git -C $fullRepository log -1 --pretty=\"%at\""));
+  $author_name = exec("git -C $fullRepository log -1 --pretty=\"%an\"");
+  $author_email = exec("git -C $fullRepository log -1 --pretty=\"%ae\"");
+  $author = escapeshellarg("$author_name <$author_email>");
+
+  print "Comment is $comment and author is $author and date is $commit_date\n";
+  // Make a safe space to store stuff
+  $safe_space = "$workDir/safe-space";
+  mkdir($safe_space);
+
+  // If there are conflicting commits, or if this new commit is on the master
+  // branch, then we will work from and push to a branch with a different name.
+  // The user should then create a new PR on GitHub, and use the GitHub UI
+  // to resolve any conflicts (or clone the branch locally to do the same thing).
+  $createNewBranchReason = '';
+  if ($branch == 'master') {
+    $createNewBranchReason = "the $branch branch cannot be pushed to directly";
+  }
+  elseif ($remoteHead != $fromSha) {
+    $createNewBranchReason = "new conflicting commits (e.g. $remoteHead) were added to the upstream repository";
+  }
+  if (!empty($createNewBranchReason)) {
+    // Warn that a new branch is being created.
+    $targetBranch = substr($commitToSubmit, 0, 5) . $branch;
+    print "Creating a new branch, '$targetBranch', because $createNewBranchReason.\n";
+    print "git checkout -B $targetBranch $fromSha\n";
+    passthru("git -C $canonicalRepository checkout -B $targetBranch $fromSha 2>&1");
+  }
+
+  // Now for some git magic.
+  //
+  // - $fullRepository contains all of the files we want to commit (and more).
+  // - $canonicalRepository is where we want to commit them.
+  //
+  // The .gitignore file in the canonical repository is correctly configured
+  // to ignore the build results that we do not want from the full repository.
+  //
+  // To affect the change, we will:
+  //
+  // - Copy the .gitignore file from the canonical repository to the full repo.
+  // - Operate on the CONTENTS of the full repository with the .git directory
+  //   of the canonical repository via the --git-dir and -C flags.
+  // - We restore the .gitignore at the end via `git checkout -- .gitignore`.
+
+  $gitignore_contents = file_get_contents("$canonicalRepository/.gitignore");
+  file_put_contents("$fullRepository/.gitignore", $gitignore_contents);
+
+  print "::::::::::::::::: .gitignore :::::::::::::::::\n$gitignore_contents\n";
+
+  // Add our files and make our commit
+  print "git add .\n";
+  passthru("git --git-dir=$canonicalRepository/.git -C $fullRepository add .", $status);
+  if ($status != 0) {
+    print "FAILED with $status\n";
+  }
+  // We don't want to commit the build-metadata to the canonical repository.
+  passthru("git --git-dir=$canonicalRepository/.git -C $fullRepository reset HEAD $buildMetadataFile");
+  // TODO: Copy author, message and perhaps other attributes from the commit at the head of the full repository
+  passthru("git --git-dir=$canonicalRepository/.git -C $fullRepository commit -q --no-edit --message=$comment --author=$author --date=$commit_date", $commitStatus);
+
+  // Get our .gitignore back
+  passthru("git -C $fullRepository checkout -- .gitignore");
+
+  // Make sure that HEAD changed after 'git apply'
+  $appliedCommit = exec("git -C $canonicalRepository rev-parse HEAD");
+
+  // Seatbelts: this generally should not happen. If it does, we will presume
+  // it is not an error; this situation might arise if someone commits only
+  // changes to build result files from dashboard.
+  if ($appliedCommit == $remoteHead) {
+    print "'git commit' did not add a commits. Status code: $commitStatus\n";
+    return;
+  }
+
+  exec("git -C $canonicalRepository diff-tree --no-commit-id --name-only -r HEAD", $committedFiles);
+  $committedFiles = implode("\n", $committedFiles);
+  if (empty($committedFiles)) {
+    print "Commit $appliedCommit does not contain any files.\n";
+    return;
+  }
+  // Even more seatbelts: ensure that there is nothing in the
+  // commit that should not have been modified. Our .gitignore
+  // file should ensure this never happens. For now, only test
+  // 'vendor'.
+  if (preg_match('#^vendor/#', $committedFiles)) {
+    print "Aborting: commit $appliedCommit contains changes to the 'vendor' directory.\n";
+    return 1;
+  }
+
+  // If the apply worked, then push the commit back to the light repository.
+  if (($commitStatus == 0) && ($appliedCommit != $remoteHead)) {
+
+    // Push the new branch back to Pantheon
+    print "git push $upstreamRepo $targetBranch\n";
+    passthru("git -C $canonicalRepository push $upstreamRepoWithCredentials $targetBranch 2>&1");
+
+    // TODO: If a new branch was created, it would be cool to use the GitHub API
+    // to create a new PR. If there is an existing PR (i.e. branch not master),
+    // it would also be cool to cross-reference the new PR to the old PR. The trouble
+    // here is converting the branch name to a PR number.
+  }
+
+  return $commitStatus;
+}
diff --git a/vendor/psy/psysh/.editorconfig b/vendor/psy/psysh/.editorconfig
deleted file mode 100644
index fddf9c1c6b..0000000000
--- a/vendor/psy/psysh/.editorconfig
+++ /dev/null
@@ -1,15 +0,0 @@
-root = true
-
-[*]
-indent_style = space
-indent_size = 4
-end_of_line = lf
-charset = utf-8
-trim_trailing_whitespace = true
-insert_final_newline = true
-
-[*.md]
-trim_trailing_whitespace = false
-
-[Makefile]
-indent_style = tab
diff --git a/vendor/psy/psysh/.github/CONTRIBUTING.md b/vendor/psy/psysh/.github/CONTRIBUTING.md
deleted file mode 100644
index efb87446cb..0000000000
--- a/vendor/psy/psysh/.github/CONTRIBUTING.md
+++ /dev/null
@@ -1,9 +0,0 @@
-## Code style
-
-Please make your code look like the other code in the project.
-
-PsySH follows [PSR-1](http://php-fig.org/psr/psr-1/) and [PSR-2](http://php-fig.org/psr/psr-2/). The easiest way to do make sure you're following the coding standard is to [install `php-cs-fixer`](https://github.com/friendsofphp/php-cs-fixer) and run `php-cs-fixer fix` before committing.
-
-## Branching model
-
-Please branch off and send pull requests to the `develop` branch.
diff --git a/vendor/psy/psysh/.gitignore b/vendor/psy/psysh/.gitignore
deleted file mode 100644
index da05f58cb7..0000000000
--- a/vendor/psy/psysh/.gitignore
+++ /dev/null
@@ -1,9 +0,0 @@
-/build/
-/dist/
-/composer.lock
-/manual/
-/psysh
-/__pycache__
-/.php_cs.cache
-/vendor/
-/vendor-bin/*/vendor/
diff --git a/vendor/psy/psysh/.phan/config.php b/vendor/psy/psysh/.phan/config.php
index 433a04ab90..9ec5014859 100644
--- a/vendor/psy/psysh/.phan/config.php
+++ b/vendor/psy/psysh/.phan/config.php
@@ -17,15 +17,9 @@
     'directory_list' => [
         'src/',
         'vendor/dnoegel/php-xdg-base-dir/src/',
-        'vendor/doctrine/instantiator/src/',
         'vendor/hoa/console/',
-        'vendor/jakub-onderka/php-console-color/src/',
-        'vendor/jakub-onderka/php-console-highlighter/src/',
         'vendor/nikic/php-parser/lib/',
-        'vendor/phpdocumentor/reflection-docblock/',
         'vendor/symfony/console/',
-        'vendor/symfony/filesystem/',
-        'vendor/symfony/finder/',
         'vendor/symfony/var-dumper/',
     ],
 
diff --git a/vendor/psy/psysh/.php_cs b/vendor/psy/psysh/.php_cs
deleted file mode 100644
index 421c31d2a5..0000000000
--- a/vendor/psy/psysh/.php_cs
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-$finder = PhpCsFixer\Finder::create()
-    ->in(__DIR__)
-    ->name('.php_cs')
-    ->name('build-manual')
-    ->name('build-phar')
-    ->exclude('build-vendor');
-
-$header = <<<EOF
-This file is part of Psy Shell.
-
-(c) 2012-2018 Justin Hileman
-
-For the full copyright and license information, please view the LICENSE
-file that was distributed with this source code.
-EOF;
-
-return PhpCsFixer\Config::create()
-    ->setRules(array(
-        '@Symfony' => true,
-        'array_syntax' => array('syntax' => 'short'),
-        'binary_operator_spaces' => false,
-        'concat_space' => array('spacing' => 'one'),
-        'header_comment' => array('header' => $header),
-        'increment_style' => array('style' => 'post'),
-        'method_argument_space' => array('keep_multiple_spaces_after_comma' => true),
-        'ordered_imports' => true,
-        'pre_increment' => false,
-        'yoda_style' => false,
-    ))
-    ->setFinder($finder);
diff --git a/vendor/psy/psysh/.styleci.yml b/vendor/psy/psysh/.styleci.yml
deleted file mode 100644
index 96fc96bf40..0000000000
--- a/vendor/psy/psysh/.styleci.yml
+++ /dev/null
@@ -1,29 +0,0 @@
-preset: symfony
-
-enabled:
-  - align_double_arrow
-  - concat_with_spaces
-  - short_array_syntax
-  - ordered_use
-  - strict
-
-disabled:
-  - blank_line_before_break
-  - blank_line_before_continue
-  - blank_line_before_throw
-  - blank_line_before_try
-  - concat_without_spaces
-  - method_argument_space
-  - pre_increment
-  - unalign_double_arrow
-  - unalign_equals
-  - yoda_style
-  - property_separation
-  - const_separation
-
-finder:
-  name:
-    - "*.php"
-    - ".php_cs"
-    - "build-manual"
-    - "build-phar"
diff --git a/vendor/psy/psysh/.travis.yml b/vendor/psy/psysh/.travis.yml
deleted file mode 100644
index 3a77512aab..0000000000
--- a/vendor/psy/psysh/.travis.yml
+++ /dev/null
@@ -1,44 +0,0 @@
-language: php
-
-sudo: false
-
-matrix:
-  include:
-    - php: 5.4
-    - php: 5.4
-      env: 'COMPOSER_FLAGS="--prefer-lowest --prefer-stable"'
-    - php: 5.5
-    - php: 5.6
-    - php: 7.0
-    - php: 7.1
-    - php: 7.2
-    - php: hhvm
-      dist: trusty
-  allow_failures:
-    - php: 5.4
-      env: 'COMPOSER_FLAGS="--prefer-lowest --prefer-stable"'
-    - php: hhvm
-  fast_finish: true
-
-install: travis_retry composer update --no-interaction $COMPOSER_FLAGS
-
-script:
- - vendor/bin/phpunit --verbose --coverage-clover=coverage.xml
- - '[[ $TRAVIS_PHP_VERSION = 7.2* ]] && make build -j 4 || true'
-
-after_success:
-  - bash <(curl -s https://codecov.io/bash)
-
-before_deploy: make dist -j 4
-
-deploy:
-  provider: releases
-  api_key:
-    secure: LL8koDM1xDqzF9t0URHvmMPyWjojyd4PeZ7IW7XYgyvD6n1H6GYrVAeKCh5wfUKFbwHoa9s5AAn6pLzra00bODVkPTmUH+FSMWz9JKLw9ODAn8HvN7C+IooxmeClGHFZc0TfHfya8/D1E9C1iXtGGEoE/GqtaYq/z0C1DLpO0OU=
-  file_glob: true
-  file: dist/psysh-*.tar.gz
-  skip_cleanup: true
-  on:
-    tags: true
-    repo: bobthecow/psysh
-    condition: $TRAVIS_PHP_VERSION = 7.2*
diff --git a/vendor/psy/psysh/Makefile b/vendor/psy/psysh/Makefile
deleted file mode 100644
index a1fdb42ed2..0000000000
--- a/vendor/psy/psysh/Makefile
+++ /dev/null
@@ -1,95 +0,0 @@
-PSYSH_SRC = bin src box.json.dist composer.json build/stub
-PSYSH_SRC_FILES = $(shell find src -type f -name "*.php")
-VERSION = $(shell git describe --tag --always --dirty=-dev)
-
-COMPOSER_OPTS = --no-interaction --no-progress --verbose
-COMPOSER_REQUIRE_OPTS = $(COMPOSER_OPTS) --no-update
-COMPOSER_UPDATE_OPTS = $(COMPOSER_OPTS) --prefer-stable --no-dev --classmap-authoritative --prefer-dist
-
-
-# Commands
-
-.PHONY: help clean build dist
-.DEFAULT_GOAL := help
-
-help:
-	@echo "\033[33mUsage:\033[0m\n  make TARGET\n\n\033[33mTargets:\033[0m"
-	@grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "  \033[32m%-7s\033[0m %s\n", $$1, $$2}'
-
-clean: ## Clean all created artifacts
-	rm -rf build/*
-	rm -rf dist/*
-	rm -rf vendor-bin/*/vendor/
-
-build: ## Compile PHARs
-build: build/psysh/psysh build/psysh-compat/psysh build/psysh-php54/psysh build/psysh-php54-compat/psysh
-
-dist: ## Build tarballs for distribution
-dist: dist/psysh-$(VERSION).tar.gz dist/psysh-$(VERSION)-compat.tar.gz dist/psysh-$(VERSION)-php54.tar.gz dist/psysh-$(VERSION)-php54-compat.tar.gz
-
-
-# All the composer stuffs
-
-composer.lock: composer.json
-	composer install
-	touch $@
-
-vendor/autoload.php: composer.lock
-	composer install
-	touch $@
-
-vendor/bin/box: vendor/autoload.php
-	composer bin box install
-	touch $@
-
-
-# Lots of PHARs
-
-build/stub: bin/build-stub bin/psysh LICENSE
-	bin/build-stub
-
-build/psysh: $(PSYSH_SRC) $(PSYSH_SRC_FILES)
-	rm -rf $@ || true
-	mkdir $@
-	cp -R $(PSYSH_SRC) $@/
-	composer config --working-dir $@ platform.php 7.0
-	composer require --working-dir $@ $(COMPOSER_REQUIRE_OPTS) php:'>=7.0.0'
-	composer update --working-dir $@ $(COMPOSER_UPDATE_OPTS)
-
-build/psysh-compat: $(PSYSH_SRC) $(PSYSH_SRC_FILES)
-	rm -rf $@ || true
-	mkdir $@
-	cp -R $(PSYSH_SRC) $@/
-	composer config --working-dir $@ platform.php 7.0
-	composer require --working-dir $@ $(COMPOSER_REQUIRE_OPTS) php:'>=7.0.0'
-	composer require --working-dir $@ $(COMPOSER_REQUIRE_OPTS) symfony/polyfill-iconv symfony/polyfill-mbstring hoa/console
-	composer update --working-dir $@ $(COMPOSER_UPDATE_OPTS)
-
-build/psysh-php54: $(PSYSH_SRC) $(PSYSH_SRC_FILES)
-	rm -rf $@ || true
-	mkdir $@
-	cp -R $(PSYSH_SRC) $@/
-	composer config --working-dir $@ platform.php 5.4
-	composer update --working-dir $@ $(COMPOSER_UPDATE_OPTS)
-
-build/psysh-php54-compat: $(PSYSH_SRC) $(PSYSH_SRC_FILES)
-	rm -rf $@ || true
-	mkdir $@
-	cp -R $(PSYSH_SRC) $@/
-	composer config --working-dir $@ platform.php 5.4
-	composer require --working-dir $@ $(COMPOSER_REQUIRE_OPTS) symfony/polyfill-iconv symfony/polyfill-mbstring hoa/console:^2.15
-	composer update --working-dir $@ $(COMPOSER_UPDATE_OPTS)
-
-build/%/psysh: vendor/bin/box build/%
-	vendor/bin/box compile --working-dir $(dir $@)
-
-
-# Dist packages
-
-dist/psysh-$(VERSION).tar.gz: build/psysh/psysh
-	@mkdir -p $(@D)
-	tar -C $(dir $<) -czf $@ $(notdir $<)
-
-dist/psysh-$(VERSION)-%.tar.gz: build/psysh-%/psysh
-	@mkdir -p $(@D)
-	tar -C $(dir $<) -czf $@ $(notdir $<)
diff --git a/vendor/psy/psysh/README.md b/vendor/psy/psysh/README.md
index 710434caf5..f34e8183cd 100644
--- a/vendor/psy/psysh/README.md
+++ b/vendor/psy/psysh/README.md
@@ -24,6 +24,7 @@ PsySH is a runtime developer console, interactive debugger and [REPL](https://en
  * [⏳ Managing history](https://github.com/bobthecow/psysh/wiki/History)
  * [💲 System shell integration](https://github.com/bobthecow/psysh/wiki/Shell-integration)
  * [🎥 Tutorials & guides](https://github.com/bobthecow/psysh/wiki/Tutorials)
+ * [🐛 Troubleshooting](https://github.com/bobthecow/psysh/wiki/Troubleshooting)
 
 ### [📢 Commands](https://github.com/bobthecow/psysh/wiki/Commands)
 
diff --git a/vendor/psy/psysh/bin/build-stub b/vendor/psy/psysh/bin/build-stub
deleted file mode 100755
index 0d26110eab..0000000000
--- a/vendor/psy/psysh/bin/build-stub
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/env php
-<?php
-
-$license = file_get_contents(dirname(__DIR__) . '/LICENSE');
-$license = str_replace('The MIT License (MIT)', '', $license);
-$license = str_replace("\n", "\n * ", trim($license));
-
-$autoload = <<<'EOS'
-    Phar::mapPhar('psysh.phar');
-    require 'phar://psysh.phar/.box/check_requirements.php';
-    require 'phar://psysh.phar/vendor/autoload.php';
-EOS;
-
-$content = file_get_contents(dirname(__DIR__) . '/bin/psysh');
-$content = preg_replace('{/\* <<<.*?>>> \*/}sm', $autoload, $content);
-$content = preg_replace('/\\(c\\) .*?with this source code./sm', $license, $content);
-
-$content .= '__HALT_COMPILER();';
-
-@mkdir(dirname(__DIR__) . '/build');
-
-file_put_contents(dirname(__DIR__) . '/build/stub', $content);
diff --git a/vendor/psy/psysh/bin/psysh b/vendor/psy/psysh/bin/psysh
index 7dbd203e7a..0829481e83 100755
--- a/vendor/psy/psysh/bin/psysh
+++ b/vendor/psy/psysh/bin/psysh
@@ -20,7 +20,7 @@ call_user_func(function () {
     foreach ($argv as $i => $arg) {
         if ($arg === '--cwd') {
             if ($i >= count($argv) - 1) {
-                echo 'Missing --cwd argument.' . PHP_EOL;
+                fwrite(STDERR, 'Missing --cwd argument.' . PHP_EOL);
                 exit(1);
             }
             $cwd = $argv[$i + 1];
@@ -43,14 +43,21 @@ call_user_func(function () {
     $chunks = explode('/', $cwd);
     while (!empty($chunks)) {
         $path = implode('/', $chunks);
+        $prettyPath = $path;
+        if (isset($_SERVER['HOME']) && $_SERVER['HOME']) {
+            $prettyPath = preg_replace('/^' . preg_quote($_SERVER['HOME'], '/') . '/', '~', $path);
+        }
 
         // Find composer.json
         if (is_file($path . '/composer.json')) {
             if ($cfg = json_decode(file_get_contents($path . '/composer.json'), true)) {
                 if (isset($cfg['name']) && $cfg['name'] === 'psy/psysh') {
-                    // We're inside the psysh project. Let's use the local
-                    // Composer autoload.
+                    // We're inside the psysh project. Let's use the local Composer autoload.
                     if (is_file($path . '/vendor/autoload.php')) {
+                        if (realpath($path) !== realpath(__DIR__ . '/..')) {
+                            fwrite(STDERR, 'Using local PsySH version at ' . $prettyPath . PHP_EOL);
+                        }
+
                         require $path . '/vendor/autoload.php';
                     }
 
@@ -64,9 +71,12 @@ call_user_func(function () {
             if ($cfg = json_decode(file_get_contents($path . '/composer.lock'), true)) {
                 foreach (array_merge($cfg['packages'], $cfg['packages-dev']) as $pkg) {
                     if (isset($pkg['name']) && $pkg['name'] === 'psy/psysh') {
-                        // We're inside a project which requires psysh. We'll
-                        // use the local Composer autoload.
+                        // We're inside a project which requires psysh. We'll use the local Composer autoload.
                         if (is_file($path . '/vendor/autoload.php')) {
+                            if (realpath($path . '/vendor') !== realpath(__DIR__ . '/../../..')) {
+                                fwrite(STDERR, 'Using local PsySH version at ' . $prettyPath . PHP_EOL);
+                            }
+
                             require $path . '/vendor/autoload.php';
                         }
 
@@ -89,8 +99,8 @@ if (!class_exists('Psy\Shell')) {
     } elseif (is_file(__DIR__ . '/../../../autoload.php')) {
         require __DIR__ . '/../../../autoload.php';
     } else {
-        echo 'PsySH dependencies not found, be sure to run `composer install`.' . PHP_EOL;
-        echo 'See https://getcomposer.org to get Composer.' . PHP_EOL;
+        fwrite(STDERR, 'PsySH dependencies not found, be sure to run `composer install`.' . PHP_EOL);
+        fwrite(STDERR, 'See https://getcomposer.org to get Composer.' . PHP_EOL);
         exit(1);
     }
 /* >>> */
@@ -99,8 +109,8 @@ if (!class_exists('Psy\Shell')) {
 // If the psysh binary was included directly, assume they just wanted an
 // autoloader and bail early.
 //
-// Keep this PHP 5.3 code around for a while in case someone is using a globally
-// installed psysh as a bin launcher for older local versions.
+// Keep this PHP 5.3 and 5.4 code around for a while in case someone is using a
+// globally installed psysh as a bin launcher for older local versions.
 if (version_compare(PHP_VERSION, '5.3.6', '<')) {
     $trace = debug_backtrace();
 } elseif (version_compare(PHP_VERSION, '5.4.0', '<')) {
@@ -120,17 +130,17 @@ unset($trace);
 
 // If the local version is too old, we can't do this
 if (!function_exists('Psy\bin')) {
-    $argv = $_SERVER['argv'];
+    $argv = isset($_SERVER['argv']) ? $_SERVER['argv'] : array();
     $first = array_shift($argv);
     if (preg_match('/php(\.exe)?$/', $first)) {
         array_shift($argv);
     }
     array_unshift($argv, 'vendor/bin/psysh');
 
-    echo 'A local PsySH dependency was found, but it cannot be loaded. Please update to' . PHP_EOL;
-    echo 'the latest version, or run the local copy directly, e.g.:' . PHP_EOL;
-    echo PHP_EOL;
-    echo '    ' . implode(' ', $argv) . PHP_EOL;
+    fwrite(STDERR, 'A local PsySH dependency was found, but it cannot be loaded. Please update to' . PHP_EOL);
+    fwrite(STDERR, 'the latest version, or run the local copy directly, e.g.:' . PHP_EOL);
+    fwrite(STDERR, PHP_EOL);
+    fwrite(STDERR, '    ' . implode(' ', $argv) . PHP_EOL);
     exit(1);
 }
 
diff --git a/vendor/psy/psysh/box.json.dist b/vendor/psy/psysh/box.json.dist
deleted file mode 100644
index e302f265eb..0000000000
--- a/vendor/psy/psysh/box.json.dist
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-    "stub": "stub",
-    "output": "psysh",
-    "compactors": [
-        "KevinGH\\Box\\Compactor\\Php"
-    ],
-    "blacklist": [
-        "grammar",
-        "test_old",
-        "Documentation"
-    ]
-}
diff --git a/vendor/psy/psysh/composer.json b/vendor/psy/psysh/composer.json
index 4588ba60a5..a097b3dfb8 100644
--- a/vendor/psy/psysh/composer.json
+++ b/vendor/psy/psysh/composer.json
@@ -13,18 +13,16 @@
         }
     ],
     "require": {
-        "php": ">=5.4.0",
+        "php": "^8.0 || ^7.0 || ^5.5.9",
         "ext-json": "*",
         "ext-tokenizer": "*",
-        "symfony/console": "~2.3.10|^2.4.2|~3.0|~4.0",
-        "symfony/var-dumper": "~2.7|~3.0|~4.0",
-        "nikic/php-parser": "~1.3|~2.0|~3.0|~4.0",
-        "dnoegel/php-xdg-base-dir": "0.1",
-        "jakub-onderka/php-console-highlighter": "0.3.*|0.4.*"
+        "symfony/console": "~5.0|~4.0|~3.0|^2.4.2|~2.3.10",
+        "symfony/var-dumper": "~5.0|~4.0|~3.0|~2.7",
+        "nikic/php-parser": "~4.0|~3.0|~2.0|~1.3",
+        "dnoegel/php-xdg-base-dir": "0.1.*"
     },
     "require-dev": {
-        "phpunit/phpunit": "~4.8.35|~5.0|~6.0|~7.0",
-        "hoa/console": "~2.15|~3.16",
+        "hoa/console": "3.17.*",
         "bamarni/composer-bin-plugin": "^1.2"
     },
     "suggest": {
@@ -48,7 +46,7 @@
     "bin": ["bin/psysh"],
     "extra": {
         "branch-alias": {
-            "dev-develop": "0.9.x-dev"
+            "dev-master": "0.10.x-dev"
         }
     }
 }
diff --git a/vendor/psy/psysh/phpunit.xml.dist b/vendor/psy/psysh/phpunit.xml.dist
deleted file mode 100644
index 3534fca270..0000000000
--- a/vendor/psy/psysh/phpunit.xml.dist
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<phpunit backupGlobals="false" colors="true" bootstrap="vendor/autoload.php">
-	<testsuite name="PsySH">
-		<directory suffix="Test.php">./test</directory>
-	</testsuite>
-
-	<filter>
-		<whitelist>
-			<directory suffix=".php">./src</directory>
-		</whitelist>
-	</filter>
-</phpunit>
diff --git a/vendor/psy/psysh/src/CodeCleaner.php b/vendor/psy/psysh/src/CodeCleaner.php
index e44c2c18e0..58876ce8ba 100644
--- a/vendor/psy/psysh/src/CodeCleaner.php
+++ b/vendor/psy/psysh/src/CodeCleaner.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -18,20 +18,22 @@
 use Psy\CodeCleaner\AssignThisVariablePass;
 use Psy\CodeCleaner\CalledClassPass;
 use Psy\CodeCleaner\CallTimePassByReferencePass;
+use Psy\CodeCleaner\EmptyArrayDimFetchPass;
 use Psy\CodeCleaner\ExitPass;
 use Psy\CodeCleaner\FinalClassPass;
 use Psy\CodeCleaner\FunctionContextPass;
 use Psy\CodeCleaner\FunctionReturnInWriteContextPass;
 use Psy\CodeCleaner\ImplicitReturnPass;
 use Psy\CodeCleaner\InstanceOfPass;
+use Psy\CodeCleaner\LabelContextPass;
 use Psy\CodeCleaner\LeavePsyshAlonePass;
-use Psy\CodeCleaner\LegacyEmptyPass;
 use Psy\CodeCleaner\ListPass;
 use Psy\CodeCleaner\LoopContextPass;
 use Psy\CodeCleaner\MagicConstantsPass;
 use Psy\CodeCleaner\NamespacePass;
 use Psy\CodeCleaner\PassableByReferencePass;
 use Psy\CodeCleaner\RequirePass;
+use Psy\CodeCleaner\ReturnTypePass;
 use Psy\CodeCleaner\StrictTypesPass;
 use Psy\CodeCleaner\UseStatementPass;
 use Psy\CodeCleaner\ValidClassNamePass;
@@ -54,9 +56,9 @@ class CodeCleaner
     /**
      * CodeCleaner constructor.
      *
-     * @param Parser        $parser    A PhpParser Parser instance. One will be created if not explicitly supplied
-     * @param Printer       $printer   A PhpParser Printer instance. One will be created if not explicitly supplied
-     * @param NodeTraverser $traverser A PhpParser NodeTraverser instance. One will be created if not explicitly supplied
+     * @param Parser|null        $parser    A PhpParser Parser instance. One will be created if not explicitly supplied
+     * @param Printer|null       $printer   A PhpParser Printer instance. One will be created if not explicitly supplied
+     * @param NodeTraverser|null $traverser A PhpParser NodeTraverser instance. One will be created if not explicitly supplied
      */
     public function __construct(Parser $parser = null, Printer $printer = null, NodeTraverser $traverser = null)
     {
@@ -98,11 +100,13 @@ private function getDefaultPasses()
             new FunctionContextPass(),
             new FunctionReturnInWriteContextPass(),
             new InstanceOfPass(),
+            new LabelContextPass(),
             new LeavePsyshAlonePass(),
-            new LegacyEmptyPass(),
             new ListPass(),
             new LoopContextPass(),
             new PassableByReferencePass(),
+            new ReturnTypePass(),
+            new EmptyArrayDimFetchPass(),
             new ValidConstructorPass(),
 
             // Rewriting shenanigans
@@ -198,8 +202,8 @@ private static function isDebugCall(array $stackFrame)
         $class    = isset($stackFrame['class']) ? $stackFrame['class'] : null;
         $function = isset($stackFrame['function']) ? $stackFrame['function'] : null;
 
-        return ($class === null && $function === 'Psy\debug') ||
-            ($class === 'Psy\Shell' && $function === 'debug');
+        return ($class === null && $function === 'Psy\\debug') ||
+            ($class === Shell::class && $function === 'debug');
     }
 
     /**
@@ -237,9 +241,9 @@ public function clean(array $codeLines, $requireSemicolons = false)
     /**
      * Set the current local namespace.
      *
-     * @param null|array $namespace (default: null)
+     * @param array|null $namespace (default: null)
      *
-     * @return null|array
+     * @return array|null
      */
     public function setNamespace(array $namespace = null)
     {
@@ -249,7 +253,7 @@ public function setNamespace(array $namespace = null)
     /**
      * Get the current local namespace.
      *
-     * @return null|array
+     * @return array|null
      */
     public function getNamespace()
     {
diff --git a/vendor/psy/psysh/src/CodeCleaner/AbstractClassPass.php b/vendor/psy/psysh/src/CodeCleaner/AbstractClassPass.php
index 81d12b6a5f..62f6370d0b 100644
--- a/vendor/psy/psysh/src/CodeCleaner/AbstractClassPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/AbstractClassPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -25,7 +25,7 @@ class AbstractClassPass extends CodeCleanerPass
     private $abstractMethods;
 
     /**
-     * @throws RuntimeException if the node is an abstract function with a body
+     * @throws FatalErrorException if the node is an abstract function with a body
      *
      * @param Node $node
      */
@@ -48,7 +48,7 @@ public function enterNode(Node $node)
     }
 
     /**
-     * @throws RuntimeException if the node is a non-abstract class with abstract methods
+     * @throws FatalErrorException if the node is a non-abstract class with abstract methods
      *
      * @param Node $node
      */
diff --git a/vendor/psy/psysh/src/CodeCleaner/AssignThisVariablePass.php b/vendor/psy/psysh/src/CodeCleaner/AssignThisVariablePass.php
index 4c42d97f3b..b95920c3d0 100644
--- a/vendor/psy/psysh/src/CodeCleaner/AssignThisVariablePass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/AssignThisVariablePass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -26,7 +26,7 @@ class AssignThisVariablePass extends CodeCleanerPass
     /**
      * Validate that the user input does not assign the `$this` variable.
      *
-     * @throws RuntimeException if the user assign the `$this` variable
+     * @throws FatalErrorException if the user assign the `$this` variable
      *
      * @param Node $node
      */
diff --git a/vendor/psy/psysh/src/CodeCleaner/CallTimePassByReferencePass.php b/vendor/psy/psysh/src/CodeCleaner/CallTimePassByReferencePass.php
index cff2c519b9..4fb359a13f 100644
--- a/vendor/psy/psysh/src/CodeCleaner/CallTimePassByReferencePass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/CallTimePassByReferencePass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -31,7 +31,7 @@ class CallTimePassByReferencePass extends CodeCleanerPass
     /**
      * Validate of use call-time pass-by-reference.
      *
-     * @throws RuntimeException if the user used call-time pass-by-reference
+     * @throws FatalErrorException if the user used call-time pass-by-reference
      *
      * @param Node $node
      */
diff --git a/vendor/psy/psysh/src/CodeCleaner/CalledClassPass.php b/vendor/psy/psysh/src/CodeCleaner/CalledClassPass.php
index e78f08d073..d920444eb7 100644
--- a/vendor/psy/psysh/src/CodeCleaner/CalledClassPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/CalledClassPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/CodeCleaner/CodeCleanerPass.php b/vendor/psy/psysh/src/CodeCleaner/CodeCleanerPass.php
index 58e5d05ec2..7d80ac896a 100644
--- a/vendor/psy/psysh/src/CodeCleaner/CodeCleanerPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/CodeCleanerPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/CodeCleaner/EmptyArrayDimFetchPass.php b/vendor/psy/psysh/src/CodeCleaner/EmptyArrayDimFetchPass.php
new file mode 100644
index 0000000000..60f5c56416
--- /dev/null
+++ b/vendor/psy/psysh/src/CodeCleaner/EmptyArrayDimFetchPass.php
@@ -0,0 +1,50 @@
+<?php
+
+/*
+ * This file is part of Psy Shell.
+ *
+ * (c) 2012-2020 Justin Hileman
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Psy\CodeCleaner;
+
+use PhpParser\Node;
+use PhpParser\Node\Expr\ArrayDimFetch;
+use PhpParser\Node\Expr\Assign;
+use Psy\Exception\FatalErrorException;
+
+/**
+ * Validate empty brackets are only used for assignment.
+ */
+class EmptyArrayDimFetchPass extends CodeCleanerPass
+{
+    const EXCEPTION_MESSAGE = 'Cannot use [] for reading';
+
+    private $theseOnesAreFine = [];
+
+    public function beforeTraverse(array $nodes)
+    {
+        $this->theseOnesAreFine = [];
+    }
+
+    /**
+     * @throws FatalErrorException if the user used empty empty array dim fetch outside of assignment
+     *
+     * @param Node $node
+     */
+    public function enterNode(Node $node)
+    {
+        if ($node instanceof Assign && $node->var instanceof ArrayDimFetch) {
+            $this->theseOnesAreFine[] = $node->var;
+        }
+
+        if ($node instanceof ArrayDimFetch && $node->dim === null) {
+            if (!\in_array($node, $this->theseOnesAreFine)) {
+                throw new FatalErrorException(self::EXCEPTION_MESSAGE, $node->getLine());
+            }
+        }
+    }
+}
diff --git a/vendor/psy/psysh/src/CodeCleaner/ExitPass.php b/vendor/psy/psysh/src/CodeCleaner/ExitPass.php
index 349a5c5711..6571bb7556 100644
--- a/vendor/psy/psysh/src/CodeCleaner/ExitPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/ExitPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -15,6 +15,7 @@
 use PhpParser\Node\Expr\Exit_;
 use PhpParser\Node\Expr\StaticCall;
 use PhpParser\Node\Name\FullyQualified as FullyQualifiedName;
+use Psy\Exception\BreakException;
 
 class ExitPass extends CodeCleanerPass
 {
@@ -26,7 +27,7 @@ class ExitPass extends CodeCleanerPass
     public function leaveNode(Node $node)
     {
         if ($node instanceof Exit_) {
-            return new StaticCall(new FullyQualifiedName('Psy\Exception\BreakException'), 'exitShell');
+            return new StaticCall(new FullyQualifiedName(BreakException::class), 'exitShell');
         }
     }
 }
diff --git a/vendor/psy/psysh/src/CodeCleaner/FinalClassPass.php b/vendor/psy/psysh/src/CodeCleaner/FinalClassPass.php
index 23f143be54..648d4c5805 100644
--- a/vendor/psy/psysh/src/CodeCleaner/FinalClassPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/FinalClassPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -31,7 +31,7 @@ public function beforeTraverse(array $nodes)
     }
 
     /**
-     * @throws RuntimeException if the node is a class that extends a final class
+     * @throws FatalErrorException if the node is a class that extends a final class
      *
      * @param Node $node
      */
diff --git a/vendor/psy/psysh/src/CodeCleaner/FunctionContextPass.php b/vendor/psy/psysh/src/CodeCleaner/FunctionContextPass.php
index adff5ca10f..f5b4a61c28 100644
--- a/vendor/psy/psysh/src/CodeCleaner/FunctionContextPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/FunctionContextPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/CodeCleaner/FunctionReturnInWriteContextPass.php b/vendor/psy/psysh/src/CodeCleaner/FunctionReturnInWriteContextPass.php
index 87e5e7abff..e47c60fe7f 100644
--- a/vendor/psy/psysh/src/CodeCleaner/FunctionReturnInWriteContextPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/FunctionReturnInWriteContextPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -14,7 +14,6 @@
 use PhpParser\Node;
 use PhpParser\Node\Expr\Array_;
 use PhpParser\Node\Expr\Assign;
-use PhpParser\Node\Expr\Empty_;
 use PhpParser\Node\Expr\FuncCall;
 use PhpParser\Node\Expr\Isset_;
 use PhpParser\Node\Expr\MethodCall;
@@ -29,22 +28,14 @@
  */
 class FunctionReturnInWriteContextPass extends CodeCleanerPass
 {
-    const PHP55_MESSAGE = 'Cannot use isset() on the result of a function call (you can use "null !== func()" instead)';
+    const ISSET_MESSAGE = 'Cannot use isset() on the result of an expression (you can use "null !== expression" instead)';
     const EXCEPTION_MESSAGE = "Can't use function return value in write context";
 
-    private $atLeastPhp55;
-
-    public function __construct()
-    {
-        $this->atLeastPhp55 = \version_compare(PHP_VERSION, '5.5', '>=');
-    }
-
     /**
      * Validate that the functions are used correctly.
      *
      * @throws FatalErrorException if a function is passed as an argument reference
      * @throws FatalErrorException if a function is used as an argument in the isset
-     * @throws FatalErrorException if a function is used as an argument in the empty, only for PHP < 5.5
      * @throws FatalErrorException if a value is assigned to a function
      *
      * @param Node $node
@@ -64,11 +55,9 @@ public function enterNode(Node $node)
                     continue;
                 }
 
-                $msg = ($node instanceof Isset_ && $this->atLeastPhp55) ? self::PHP55_MESSAGE : self::EXCEPTION_MESSAGE;
+                $msg = $node instanceof Isset_ ? self::ISSET_MESSAGE : self::EXCEPTION_MESSAGE;
                 throw new FatalErrorException($msg, 0, E_ERROR, null, $node->getLine());
             }
-        } elseif ($node instanceof Empty_ && !$this->atLeastPhp55 && $this->isCallNode($node->expr)) {
-            throw new FatalErrorException(self::EXCEPTION_MESSAGE, 0, E_ERROR, null, $node->getLine()); // @codeCoverageIgnore
         } elseif ($node instanceof Assign && $this->isCallNode($node->var)) {
             throw new FatalErrorException(self::EXCEPTION_MESSAGE, 0, E_ERROR, null, $node->getLine());
         }
diff --git a/vendor/psy/psysh/src/CodeCleaner/ImplicitReturnPass.php b/vendor/psy/psysh/src/CodeCleaner/ImplicitReturnPass.php
index 06b069780b..94f886337f 100644
--- a/vendor/psy/psysh/src/CodeCleaner/ImplicitReturnPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/ImplicitReturnPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/CodeCleaner/InstanceOfPass.php b/vendor/psy/psysh/src/CodeCleaner/InstanceOfPass.php
index 44e24cae7c..87028af719 100644
--- a/vendor/psy/psysh/src/CodeCleaner/InstanceOfPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/InstanceOfPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -12,6 +12,9 @@
 namespace Psy\CodeCleaner;
 
 use PhpParser\Node;
+use PhpParser\Node\Expr\Array_;
+use PhpParser\Node\Expr\BinaryOp;
+use PhpParser\Node\Expr\ClassConstFetch;
 use PhpParser\Node\Expr\ConstFetch;
 use PhpParser\Node\Expr\Instanceof_;
 use PhpParser\Node\Scalar;
@@ -40,7 +43,12 @@ public function enterNode(Node $node)
             return;
         }
 
-        if (($node->expr instanceof Scalar && !$node->expr instanceof Encapsed) || $node->expr instanceof ConstFetch) {
+        if (($node->expr instanceof Scalar && !$node->expr instanceof Encapsed) ||
+            $node->expr instanceof BinaryOp ||
+            $node->expr instanceof Array_ ||
+            $node->expr instanceof ConstFetch ||
+            $node->expr instanceof ClassConstFetch
+        ) {
             throw new FatalErrorException(self::EXCEPTION_MSG, 0, E_ERROR, null, $node->getLine());
         }
     }
diff --git a/vendor/psy/psysh/src/CodeCleaner/LabelContextPass.php b/vendor/psy/psysh/src/CodeCleaner/LabelContextPass.php
new file mode 100644
index 0000000000..e54d0cf9e5
--- /dev/null
+++ b/vendor/psy/psysh/src/CodeCleaner/LabelContextPass.php
@@ -0,0 +1,91 @@
+<?php
+
+/*
+ * This file is part of Psy Shell.
+ *
+ * (c) 2012-2020 Justin Hileman
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Psy\CodeCleaner;
+
+use PhpParser\Node;
+use PhpParser\Node\FunctionLike;
+use PhpParser\Node\Stmt\Goto_;
+use PhpParser\Node\Stmt\Label;
+use Psy\Exception\FatalErrorException;
+
+/**
+ * CodeCleanerPass for label context.
+ *
+ * This class partially emulates the PHP label specification.
+ * PsySH can not declare labels by sequentially executing lines with eval,
+ * but since it is not a syntax error, no error is raised.
+ * This class warns before invalid goto causes a fatal error.
+ * Since this is a simple checker, it does not block real fatal error
+ * with complex syntax.  (ex. it does not parse inside function.)
+ *
+ * @see http://php.net/goto
+ */
+class LabelContextPass extends CodeCleanerPass
+{
+    /** @var int */
+    private $functionDepth;
+
+    /** @var array */
+    private $labelDeclarations;
+    /** @var array */
+    private $labelGotos;
+
+    /**
+     * @param array $nodes
+     */
+    public function beforeTraverse(array $nodes)
+    {
+        $this->functionDepth = 0;
+        $this->labelDeclarations = [];
+        $this->labelGotos = [];
+    }
+
+    public function enterNode(Node $node)
+    {
+        if ($node instanceof FunctionLike) {
+            $this->functionDepth++;
+
+            return;
+        }
+
+        // node is inside function context
+        if ($this->functionDepth !== 0) {
+            return;
+        }
+
+        if ($node instanceof Goto_) {
+            $this->labelGotos[\strtolower($node->name)] = $node->getLine();
+        } elseif ($node instanceof Label) {
+            $this->labelDeclarations[\strtolower($node->name)] = $node->getLine();
+        }
+    }
+
+    /**
+     * @param \PhpParser\Node $node
+     */
+    public function leaveNode(Node $node)
+    {
+        if ($node instanceof FunctionLike) {
+            $this->functionDepth--;
+        }
+    }
+
+    public function afterTraverse(array $nodes)
+    {
+        foreach ($this->labelGotos as $name => $line) {
+            if (!isset($this->labelDeclarations[$name])) {
+                $msg = "'goto' to undefined label '{$name}'";
+                throw new FatalErrorException($msg, 0, E_ERROR, null, $line);
+            }
+        }
+    }
+}
diff --git a/vendor/psy/psysh/src/CodeCleaner/LeavePsyshAlonePass.php b/vendor/psy/psysh/src/CodeCleaner/LeavePsyshAlonePass.php
index 08f6fbee0c..2c28238631 100644
--- a/vendor/psy/psysh/src/CodeCleaner/LeavePsyshAlonePass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/LeavePsyshAlonePass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/CodeCleaner/LegacyEmptyPass.php b/vendor/psy/psysh/src/CodeCleaner/LegacyEmptyPass.php
deleted file mode 100644
index 9793d8c4c5..0000000000
--- a/vendor/psy/psysh/src/CodeCleaner/LegacyEmptyPass.php
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\CodeCleaner;
-
-use PhpParser\Node;
-use PhpParser\Node\Expr\Empty_;
-use PhpParser\Node\Expr\Variable;
-use Psy\Exception\ParseErrorException;
-
-/**
- * Validate that the user did not call the language construct `empty()` on a
- * statement in PHP < 5.5.
- *
- * @codeCoverageIgnore
- */
-class LegacyEmptyPass extends CodeCleanerPass
-{
-    private $atLeastPhp55;
-
-    public function __construct()
-    {
-        $this->atLeastPhp55 = \version_compare(PHP_VERSION, '5.5', '>=');
-    }
-
-    /**
-     * Validate use of empty in PHP < 5.5.
-     *
-     * @throws ParseErrorException if the user used empty with anything but a variable
-     *
-     * @param Node $node
-     */
-    public function enterNode(Node $node)
-    {
-        if ($this->atLeastPhp55) {
-            return;
-        }
-
-        if (!$node instanceof Empty_) {
-            return;
-        }
-
-        if (!$node->expr instanceof Variable) {
-            $msg = \sprintf('syntax error, unexpected %s', $this->getUnexpectedThing($node->expr));
-
-            throw new ParseErrorException($msg, $node->expr->getLine());
-        }
-    }
-
-    private function getUnexpectedThing(Node $node)
-    {
-        switch ($node->getType()) {
-            case 'Scalar_String':
-            case 'Scalar_LNumber':
-            case 'Scalar_DNumber':
-                return \json_encode($node->value);
-
-            case 'Expr_ConstFetch':
-                return (string) $node->name;
-
-            default:
-                return $node->getType();
-        }
-    }
-}
diff --git a/vendor/psy/psysh/src/CodeCleaner/ListPass.php b/vendor/psy/psysh/src/CodeCleaner/ListPass.php
index b0d1d73e40..e99faaaa2c 100644
--- a/vendor/psy/psysh/src/CodeCleaner/ListPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/ListPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/CodeCleaner/LoopContextPass.php b/vendor/psy/psysh/src/CodeCleaner/LoopContextPass.php
index 933278e736..c0da7b2cb3 100644
--- a/vendor/psy/psysh/src/CodeCleaner/LoopContextPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/LoopContextPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/CodeCleaner/MagicConstantsPass.php b/vendor/psy/psysh/src/CodeCleaner/MagicConstantsPass.php
index 50936b2ccf..adf92fba1e 100644
--- a/vendor/psy/psysh/src/CodeCleaner/MagicConstantsPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/MagicConstantsPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -29,7 +29,7 @@ class MagicConstantsPass extends CodeCleanerPass
      *
      * @param Node $node
      *
-     * @return null|FuncCall|String_
+     * @return FuncCall|String_|null
      */
     public function enterNode(Node $node)
     {
diff --git a/vendor/psy/psysh/src/CodeCleaner/NamespaceAwarePass.php b/vendor/psy/psysh/src/CodeCleaner/NamespaceAwarePass.php
index 6679206dc0..eb2cfd7b61 100644
--- a/vendor/psy/psysh/src/CodeCleaner/NamespaceAwarePass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/NamespaceAwarePass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/CodeCleaner/NamespacePass.php b/vendor/psy/psysh/src/CodeCleaner/NamespacePass.php
index d26f07cce4..1f11072efa 100644
--- a/vendor/psy/psysh/src/CodeCleaner/NamespacePass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/NamespacePass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -78,7 +78,7 @@ public function beforeTraverse(array $nodes)
      * Remember the namespace and (re)set the namespace on the CodeCleaner as
      * well.
      *
-     * @param null|Name $namespace
+     * @param Name|null $namespace
      */
     private function setNamespace($namespace)
     {
diff --git a/vendor/psy/psysh/src/CodeCleaner/NoReturnValue.php b/vendor/psy/psysh/src/CodeCleaner/NoReturnValue.php
index 90325701e6..d9c920bc7d 100644
--- a/vendor/psy/psysh/src/CodeCleaner/NoReturnValue.php
+++ b/vendor/psy/psysh/src/CodeCleaner/NoReturnValue.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -26,10 +26,10 @@ class NoReturnValue
     /**
      * Get PhpParser AST expression for creating a new NoReturnValue.
      *
-     * @return PhpParser\Node\Expr\New_
+     * @return \PhpParser\Node\Expr\New_
      */
     public static function create()
     {
-        return new New_(new FullyQualifiedName('Psy\CodeCleaner\NoReturnValue'));
+        return new New_(new FullyQualifiedName(self::class));
     }
 }
diff --git a/vendor/psy/psysh/src/CodeCleaner/PassableByReferencePass.php b/vendor/psy/psysh/src/CodeCleaner/PassableByReferencePass.php
index 5b5dc0868b..dc347836b7 100644
--- a/vendor/psy/psysh/src/CodeCleaner/PassableByReferencePass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/PassableByReferencePass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -13,6 +13,7 @@
 
 use PhpParser\Node;
 use PhpParser\Node\Expr;
+use PhpParser\Node\Expr\Array_;
 use PhpParser\Node\Expr\ClassConstFetch;
 use PhpParser\Node\Expr\FuncCall;
 use PhpParser\Node\Expr\MethodCall;
@@ -68,6 +69,11 @@ public function enterNode(Node $node)
 
     private function isPassableByReference(Node $arg)
     {
+        // Unpacked arrays can be passed by reference
+        if ($arg->value instanceof Array_) {
+            return $arg->unpack;
+        }
+
         // FuncCall, MethodCall and StaticCall are all PHP _warnings_ not fatal errors, so we'll let
         // PHP handle those ones :)
         return $arg->value instanceof ClassConstFetch ||
diff --git a/vendor/psy/psysh/src/CodeCleaner/RequirePass.php b/vendor/psy/psysh/src/CodeCleaner/RequirePass.php
index 31c156a37d..902fd343fa 100644
--- a/vendor/psy/psysh/src/CodeCleaner/RequirePass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/RequirePass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -19,7 +19,6 @@
 use PhpParser\Node\Scalar\LNumber;
 use Psy\Exception\ErrorException;
 use Psy\Exception\FatalErrorException;
-use Psy\Shell;
 
 /**
  * Add runtime validation for `require` and `require_once` calls.
@@ -49,7 +48,7 @@ public function enterNode(Node $origNode)
          *   $foo = require \Psy\CodeCleaner\RequirePass::resolve($bar)
          */
         $node->expr = new StaticCall(
-            new FullyQualifiedName('Psy\CodeCleaner\RequirePass'),
+            new FullyQualifiedName(self::class),
             'resolve',
             [new Arg($origNode->expr), new Arg(new LNumber($origNode->getLine()))],
             $origNode->getAttributes()
diff --git a/vendor/psy/psysh/src/CodeCleaner/ReturnTypePass.php b/vendor/psy/psysh/src/CodeCleaner/ReturnTypePass.php
new file mode 100644
index 0000000000..e3a4c96b89
--- /dev/null
+++ b/vendor/psy/psysh/src/CodeCleaner/ReturnTypePass.php
@@ -0,0 +1,118 @@
+<?php
+
+/*
+ * This file is part of Psy Shell.
+ *
+ * (c) 2012-2020 Justin Hileman
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Psy\CodeCleaner;
+
+use PhpParser\Node;
+use PhpParser\Node\Expr\Closure;
+use PhpParser\Node\Expr\ConstFetch;
+use PhpParser\Node\Identifier;
+use PhpParser\Node\NullableType;
+use PhpParser\Node\Stmt\Function_;
+use PhpParser\Node\Stmt\Return_;
+use Psy\Exception\FatalErrorException;
+
+/**
+ * Add runtime validation for return types.
+ */
+class ReturnTypePass extends CodeCleanerPass
+{
+    const MESSAGE = 'A function with return type must return a value';
+    const NULLABLE_MESSAGE = 'A function with return type must return a value (did you mean "return null;" instead of "return;"?)';
+    const VOID_MESSAGE = 'A void function must not return a value';
+    const VOID_NULL_MESSAGE = 'A void function must not return a value (did you mean "return;" instead of "return null;"?)';
+    const NULLABLE_VOID_MESSAGE = 'Void type cannot be nullable';
+
+    private $atLeastPhp71;
+    private $returnTypeStack = [];
+
+    public function __construct()
+    {
+        $this->atLeastPhp71 = \version_compare(PHP_VERSION, '7.1', '>=');
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function enterNode(Node $node)
+    {
+        if (!$this->atLeastPhp71) {
+            return; // @codeCoverageIgnore
+        }
+
+        if ($this->isFunctionNode($node)) {
+            $this->returnTypeStack[] = $node->returnType;
+
+            return;
+        }
+
+        if (!empty($this->returnTypeStack) && $node instanceof Return_) {
+            $expectedType = \end($this->returnTypeStack);
+            if ($expectedType === null) {
+                return;
+            }
+
+            $msg = null;
+
+            if ($this->typeName($expectedType) === 'void') {
+                // Void functions
+                if ($expectedType instanceof NullableType) {
+                    $msg = self::NULLABLE_VOID_MESSAGE;
+                } elseif ($node->expr instanceof ConstFetch && \strtolower($node->expr->name) === 'null') {
+                    $msg = self::VOID_NULL_MESSAGE;
+                } elseif ($node->expr !== null) {
+                    $msg = self::VOID_MESSAGE;
+                }
+            } else {
+                // Everything else
+                if ($node->expr === null) {
+                    $msg = $expectedType instanceof NullableType ? self::NULLABLE_MESSAGE : self::MESSAGE;
+                }
+            }
+
+            if ($msg !== null) {
+                throw new FatalErrorException($msg, 0, E_ERROR, null, $node->getLine());
+            }
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function leaveNode(Node $node)
+    {
+        if (!$this->atLeastPhp71) {
+            return; // @codeCoverageIgnore
+        }
+
+        if (!empty($this->returnTypeStack) && $this->isFunctionNode($node)) {
+            \array_pop($this->returnTypeStack);
+        }
+    }
+
+    private function isFunctionNode(Node $node)
+    {
+        return $node instanceof Function_ || $node instanceof Closure;
+    }
+
+    private function typeName(Node $node)
+    {
+        if ($node instanceof NullableType) {
+            return \strtolower($node->type->name);
+        }
+
+        if ($node instanceof Identifier) {
+            return \strtolower($node->name);
+        }
+
+        throw new \InvalidArgumentException('Unable to find type name');
+    }
+}
diff --git a/vendor/psy/psysh/src/CodeCleaner/StrictTypesPass.php b/vendor/psy/psysh/src/CodeCleaner/StrictTypesPass.php
index 058a5a8290..c71b062c81 100644
--- a/vendor/psy/psysh/src/CodeCleaner/StrictTypesPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/StrictTypesPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -57,7 +57,7 @@ public function beforeTraverse(array $nodes)
 
         $prependStrictTypes = $this->strictTypes;
 
-        foreach ($nodes as $key => $node) {
+        foreach ($nodes as $node) {
             if ($node instanceof Declare_) {
                 foreach ($node->declares as $declare) {
                     // For PHP Parser 4.x
diff --git a/vendor/psy/psysh/src/CodeCleaner/UseStatementPass.php b/vendor/psy/psysh/src/CodeCleaner/UseStatementPass.php
index 64ac5be6d5..c755296ceb 100644
--- a/vendor/psy/psysh/src/CodeCleaner/UseStatementPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/UseStatementPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -17,6 +17,7 @@
 use PhpParser\Node\Stmt\GroupUse;
 use PhpParser\Node\Stmt\Namespace_;
 use PhpParser\Node\Stmt\Use_;
+use PhpParser\Node\Stmt\UseUse;
 use PhpParser\NodeTraverser;
 
 /**
@@ -65,18 +66,18 @@ public function enterNode(Node $node)
      */
     public function leaveNode(Node $node)
     {
+        // Store a reference to every "use" statement, because we'll need them in a bit.
         if ($node instanceof Use_) {
-            // Store a reference to every "use" statement, because we'll need
-            // them in a bit.
             foreach ($node->uses as $use) {
                 $alias = $use->alias ?: \end($use->name->parts);
                 $this->aliases[\strtolower($alias)] = $use->name;
             }
 
             return NodeTraverser::REMOVE_NODE;
-        } elseif ($node instanceof GroupUse) {
-            // Expand every "use" statement in the group into a full, standalone
-            // "use" and store 'em with the others.
+        }
+
+        // Expand every "use" statement in the group into a full, standalone "use" and store 'em with the others.
+        if ($node instanceof GroupUse) {
             foreach ($node->uses as $use) {
                 $alias = $use->alias ?: \end($use->name->parts);
                 $this->aliases[\strtolower($alias)] = Name::concat($node->prefix, $use->name, [
@@ -86,23 +87,32 @@ public function leaveNode(Node $node)
             }
 
             return NodeTraverser::REMOVE_NODE;
-        } elseif ($node instanceof Namespace_) {
-            // Start fresh, since we're done with this namespace.
+        }
+
+        // Start fresh, since we're done with this namespace.
+        if ($node instanceof Namespace_) {
             $this->lastNamespace = $node->name;
             $this->lastAliases   = $this->aliases;
             $this->aliases       = [];
-        } else {
-            foreach ($node as $name => $subNode) {
-                if ($subNode instanceof Name) {
-                    // Implicitly thunk all aliases.
-                    if ($replacement = $this->findAlias($subNode)) {
-                        $node->$name = $replacement;
-                    }
+
+            return;
+        }
+
+        // Do nothing with UseUse; this an entry in the list of uses in the use statement.
+        if ($node instanceof UseUse) {
+            return;
+        }
+
+        // For everything else, we'll implicitly thunk all aliases into fully-qualified names.
+        foreach ($node as $name => $subNode) {
+            if ($subNode instanceof Name) {
+                if ($replacement = $this->findAlias($subNode)) {
+                    $node->$name = $replacement;
                 }
             }
-
-            return $node;
         }
+
+        return $node;
     }
 
     /**
diff --git a/vendor/psy/psysh/src/CodeCleaner/ValidClassNamePass.php b/vendor/psy/psysh/src/CodeCleaner/ValidClassNamePass.php
index 9578c9a86f..c8579721ba 100644
--- a/vendor/psy/psysh/src/CodeCleaner/ValidClassNamePass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/ValidClassNamePass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -39,12 +39,6 @@ class ValidClassNamePass extends NamespaceAwarePass
     const TRAIT_TYPE     = 'trait';
 
     private $conditionalScopes = 0;
-    private $atLeastPhp55;
-
-    public function __construct()
-    {
-        $this->atLeastPhp55 = \version_compare(PHP_VERSION, '5.5', '>=');
-    }
 
     /**
      * Validate class, interface and trait definitions.
@@ -163,8 +157,8 @@ protected function validateNewExpression(New_ $stmt)
      */
     protected function validateClassConstFetchExpression(ClassConstFetch $stmt)
     {
-        // there is no need to check exists for ::class const for php 5.5 or newer
-        if (\strtolower($stmt->name) === 'class' && $this->atLeastPhp55) {
+        // there is no need to check exists for ::class const
+        if (\strtolower($stmt->name) === 'class') {
             return;
         }
 
diff --git a/vendor/psy/psysh/src/CodeCleaner/ValidConstantPass.php b/vendor/psy/psysh/src/CodeCleaner/ValidConstantPass.php
index 2d5e3e6d94..765844a477 100644
--- a/vendor/psy/psysh/src/CodeCleaner/ValidConstantPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/ValidConstantPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/CodeCleaner/ValidConstructorPass.php b/vendor/psy/psysh/src/CodeCleaner/ValidConstructorPass.php
index a079e26c99..6fc2b095e0 100644
--- a/vendor/psy/psysh/src/CodeCleaner/ValidConstructorPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/ValidConstructorPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/CodeCleaner/ValidFunctionNamePass.php b/vendor/psy/psysh/src/CodeCleaner/ValidFunctionNamePass.php
index dd1e057630..318e355aae 100644
--- a/vendor/psy/psysh/src/CodeCleaner/ValidFunctionNamePass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/ValidFunctionNamePass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Command/BufferCommand.php b/vendor/psy/psysh/src/Command/BufferCommand.php
index 83ba34a8a6..6e16ac536f 100644
--- a/vendor/psy/psysh/src/Command/BufferCommand.php
+++ b/vendor/psy/psysh/src/Command/BufferCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -56,6 +56,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
         } else {
             $output->writeln($this->formatLines($buf), ShellOutput::NUMBER_LINES);
         }
+
+        return 0;
     }
 
     /**
diff --git a/vendor/psy/psysh/src/Command/ClearCommand.php b/vendor/psy/psysh/src/Command/ClearCommand.php
index 6b12048a96..d20abab128 100644
--- a/vendor/psy/psysh/src/Command/ClearCommand.php
+++ b/vendor/psy/psysh/src/Command/ClearCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -45,5 +45,7 @@ protected function configure()
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $output->write(\sprintf('%c[2J%c[0;0f', 27, 27));
+
+        return 0;
     }
 }
diff --git a/vendor/psy/psysh/src/Command/Command.php b/vendor/psy/psysh/src/Command/Command.php
index be013a1b92..27017094db 100644
--- a/vendor/psy/psysh/src/Command/Command.php
+++ b/vendor/psy/psysh/src/Command/Command.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -27,7 +27,7 @@ abstract class Command extends BaseCommand
     /**
      * Sets the application instance for this command.
      *
-     * @param Application $application An Application instance
+     * @param Application|null $application An Application instance
      *
      * @api
      */
@@ -232,7 +232,7 @@ private function getMaxWidth()
     private function formatDefaultValue($default)
     {
         if (\is_array($default) && $default === \array_values($default)) {
-            return \sprintf("array('%s')", \implode("', '", $default));
+            return \sprintf("['%s']", \implode("', '", $default));
         }
 
         return \str_replace("\n", '', \var_export($default, true));
@@ -247,15 +247,22 @@ private function formatDefaultValue($default)
      */
     protected function getTable(OutputInterface $output)
     {
-        if (!\class_exists('Symfony\Component\Console\Helper\Table')) {
+        if (!\class_exists(Table::class)) {
             return $this->getTableHelper();
         }
 
         $style = new TableStyle();
-        $style
-            ->setVerticalBorderChar(' ')
-            ->setHorizontalBorderChar('')
-            ->setCrossingChar('');
+
+        // Symfony 4.1 deprecated single-argument style setters.
+        if (\method_exists($style, 'setVerticalBorderChars')) {
+            $style->setVerticalBorderChars(' ');
+            $style->setHorizontalBorderChars('');
+            $style->setCrossingChars('', '', '', '', '', '', '', '', '');
+        } else {
+            $style->setVerticalBorderChar(' ');
+            $style->setHorizontalBorderChar('');
+            $style->setCrossingChar('');
+        }
 
         $table = new Table($output);
 
diff --git a/vendor/psy/psysh/src/Command/DocCommand.php b/vendor/psy/psysh/src/Command/DocCommand.php
index 913634a0ab..ba6c24f340 100644
--- a/vendor/psy/psysh/src/Command/DocCommand.php
+++ b/vendor/psy/psysh/src/Command/DocCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -14,8 +14,11 @@
 use Psy\Formatter\DocblockFormatter;
 use Psy\Formatter\SignatureFormatter;
 use Psy\Input\CodeArgument;
+use Psy\Reflection\ReflectionClassConstant;
+use Psy\Reflection\ReflectionConstant_;
 use Psy\Reflection\ReflectionLanguageConstruct;
 use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
 
 /**
@@ -32,6 +35,7 @@ protected function configure()
             ->setName('doc')
             ->setAliases(['rtfm', 'man'])
             ->setDefinition([
+                new InputOption('all', 'a', InputOption::VALUE_NONE, 'Show documentation for superclasses as well as the current class.'),
                 new CodeArgument('target', CodeArgument::REQUIRED, 'Function, class, instance, constant, method or property to document.'),
             ])
             ->setDescription('Read the documentation for an object, class, constant, method or property.')
@@ -67,49 +71,83 @@ protected function execute(InputInterface $input, OutputInterface $output)
 
         $db = $this->getApplication()->getManualDb();
 
-        $output->page(function ($output) use ($reflector, $doc, $db) {
-            $output->writeln(SignatureFormatter::format($reflector));
-            $output->writeln('');
+        if ($output instanceof ShellOutput) {
+            $output->startPaging();
+        }
+
+        // Maybe include the declaring class
+        if ($reflector instanceof \ReflectionMethod || $reflector instanceof \ReflectionProperty) {
+            $output->writeln(SignatureFormatter::format($reflector->getDeclaringClass()));
+        }
 
-            if (empty($doc) && !$db) {
-                $output->writeln('<warning>PHP manual not found</warning>');
-                $output->writeln('    To document core PHP functionality, download the PHP reference manual:');
-                $output->writeln('    https://github.com/bobthecow/psysh/wiki/PHP-manual');
-            } else {
-                $output->writeln($doc);
+        $output->writeln(SignatureFormatter::format($reflector));
+        $output->writeln('');
+
+        if (empty($doc) && !$db) {
+            $output->writeln('<warning>PHP manual not found</warning>');
+            $output->writeln('    To document core PHP functionality, download the PHP reference manual:');
+            $output->writeln('    https://github.com/bobthecow/psysh/wiki/PHP-manual');
+        } else {
+            $output->writeln($doc);
+        }
+
+        if ($input->getOption('all')) {
+            $parent = $reflector;
+            foreach ($this->getParentReflectors($reflector) as $parent) {
+                $output->writeln('');
+                $output->writeln('---');
+                $output->writeln('');
+
+                // Maybe include the declaring class
+                if ($parent instanceof \ReflectionMethod || $parent instanceof \ReflectionProperty) {
+                    $output->writeln(SignatureFormatter::format($parent->getDeclaringClass()));
+                }
+
+                $output->writeln(SignatureFormatter::format($parent));
+                $output->writeln('');
+
+                if ($doc = $this->getManualDoc($parent) ?: DocblockFormatter::format($parent)) {
+                    $output->writeln($doc);
+                }
             }
-        });
+        }
+
+        if ($output instanceof ShellOutput) {
+            $output->stopPaging();
+        }
 
         // Set some magic local variables
         $this->setCommandScopeVariables($reflector);
+
+        return 0;
     }
 
     private function getManualDoc($reflector)
     {
         switch (\get_class($reflector)) {
-            case 'ReflectionClass':
-            case 'ReflectionObject':
-            case 'ReflectionFunction':
+            case \ReflectionClass::class:
+            case \ReflectionObject::class:
+            case \ReflectionFunction::class:
                 $id = $reflector->name;
                 break;
 
-            case 'ReflectionMethod':
+            case \ReflectionMethod::class:
                 $id = $reflector->class . '::' . $reflector->name;
                 break;
 
-            case 'ReflectionProperty':
+            case \ReflectionProperty::class:
                 $id = $reflector->class . '::$' . $reflector->name;
                 break;
 
-            case 'ReflectionClassConstant':
-            case 'Psy\Reflection\ReflectionClassConstant':
+            case \ReflectionClassConstant::class:
+            case ReflectionClassConstant::class:
                 // @todo this is going to collide with ReflectionMethod ids
                 // someday... start running the query by id + type if the DB
                 // supports it.
                 $id = $reflector->class . '::' . $reflector->name;
                 break;
 
-            case 'Psy\Reflection\ReflectionConstant_':
+            case ReflectionConstant_::class:
                 $id = $reflector->name;
                 break;
 
@@ -120,6 +158,62 @@ private function getManualDoc($reflector)
         return $this->getManualDocById($id);
     }
 
+    /**
+     * Get all all parent Reflectors for a given Reflector.
+     *
+     * For example, passing a Class, Object or TraitReflector will yield all
+     * traits and parent classes. Passing a Method or PropertyReflector will
+     * yield Reflectors for the same-named method or property on all traits and
+     * parent classes.
+     *
+     * @return Generator a whole bunch of \Reflector instances
+     */
+    private function getParentReflectors($reflector)
+    {
+        switch (\get_class($reflector)) {
+            case \ReflectionClass::class:
+            case \ReflectionObject::class:
+                foreach ($reflector->getTraits() as $trait) {
+                    yield $trait;
+                }
+
+                foreach ($reflector->getInterfaces() as $interface) {
+                    yield $interface;
+                }
+
+                while ($reflector = $reflector->getParentClass()) {
+                    yield $reflector;
+
+                    foreach ($reflector->getTraits() as $trait) {
+                        yield $trait;
+                    }
+
+                    foreach ($reflector->getInterfaces() as $interface) {
+                        yield $interface;
+                    }
+                }
+
+                return;
+
+            case \ReflectionMethod::class:
+                foreach ($this->getParentReflectors($reflector->getDeclaringClass()) as $parent) {
+                    if ($parent->hasMethod($reflector->getName())) {
+                        yield $parent->getMethod($reflector->getName());
+                    }
+                }
+
+                return;
+
+            case \ReflectionProperty::class:
+                foreach ($this->getParentReflectors($reflector->getDeclaringClass()) as $parent) {
+                    if ($parent->hasProperty($reflector->getName())) {
+                        yield $parent->getProperty($reflector->getName());
+                    }
+                }
+                break;
+        }
+    }
+
     private function getManualDocById($id)
     {
         if ($db = $this->getApplication()->getManualDb()) {
diff --git a/vendor/psy/psysh/src/Command/DumpCommand.php b/vendor/psy/psysh/src/Command/DumpCommand.php
index 9a8aad826b..5dbfd7d073 100644
--- a/vendor/psy/psysh/src/Command/DumpCommand.php
+++ b/vendor/psy/psysh/src/Command/DumpCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -76,6 +76,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
         if (\is_object($target)) {
             $this->setCommandScopeVariables(new \ReflectionObject($target));
         }
+
+        return 0;
     }
 
     /**
diff --git a/vendor/psy/psysh/src/Command/EditCommand.php b/vendor/psy/psysh/src/Command/EditCommand.php
index 0571414948..0f9d79545e 100644
--- a/vendor/psy/psysh/src/Command/EditCommand.php
+++ b/vendor/psy/psysh/src/Command/EditCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -104,6 +104,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
         if ($execute) {
             $this->getApplication()->addInput($editedContent);
         }
+
+        return 0;
     }
 
     /**
@@ -148,7 +150,7 @@ private function extractFilePath($fileArgument)
 
     /**
      * @param string $filePath
-     * @param string $shouldRemoveFile
+     * @param bool   $shouldRemoveFile
      *
      * @return string
      *
@@ -157,9 +159,10 @@ private function extractFilePath($fileArgument)
     private function editFile($filePath, $shouldRemoveFile)
     {
         $escapedFilePath = \escapeshellarg($filePath);
+        $editor = (isset($_SERVER['EDITOR']) && $_SERVER['EDITOR']) ? $_SERVER['EDITOR'] : 'nano';
 
         $pipes = [];
-        $proc = \proc_open((\getenv('EDITOR') ?: 'nano') . " {$escapedFilePath}", [STDIN, STDOUT, STDERR], $pipes);
+        $proc = \proc_open("{$editor} {$escapedFilePath}", [STDIN, STDOUT, STDERR], $pipes);
         \proc_close($proc);
 
         $editedContent = @\file_get_contents($filePath);
diff --git a/vendor/psy/psysh/src/Command/ExitCommand.php b/vendor/psy/psysh/src/Command/ExitCommand.php
index 4339886123..3e51a3462b 100644
--- a/vendor/psy/psysh/src/Command/ExitCommand.php
+++ b/vendor/psy/psysh/src/Command/ExitCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Command/HelpCommand.php b/vendor/psy/psysh/src/Command/HelpCommand.php
index 82ec3a8359..d3cdb9402a 100644
--- a/vendor/psy/psysh/src/Command/HelpCommand.php
+++ b/vendor/psy/psysh/src/Command/HelpCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -11,6 +11,7 @@
 
 namespace Psy\Command;
 
+use Psy\Output\ShellOutput;
 use Symfony\Component\Console\Helper\TableHelper;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputInterface;
@@ -86,13 +87,21 @@ protected function execute(InputInterface $input, OutputInterface $output)
                 ]);
             }
 
-            $output->startPaging();
+            if ($output instanceof ShellOutput) {
+                $output->startPaging();
+            }
+
             if ($table instanceof TableHelper) {
                 $table->render($output);
             } else {
                 $table->render();
             }
-            $output->stopPaging();
+
+            if ($output instanceof ShellOutput) {
+                $output->stopPaging();
+            }
         }
+
+        return 0;
     }
 }
diff --git a/vendor/psy/psysh/src/Command/HistoryCommand.php b/vendor/psy/psysh/src/Command/HistoryCommand.php
index 23f6899e32..fe4a54b380 100644
--- a/vendor/psy/psysh/src/Command/HistoryCommand.php
+++ b/vendor/psy/psysh/src/Command/HistoryCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -140,11 +140,13 @@ protected function execute(InputInterface $input, OutputInterface $output)
         } else {
             $type = $input->getOption('no-numbers') ? 0 : ShellOutput::NUMBER_LINES;
             if (!$highlighted) {
-                $type = $type | ShellOutput::OUTPUT_RAW;
+                $type = $type | OutputInterface::OUTPUT_RAW;
             }
 
             $output->page($highlighted ?: $history, $type);
         }
+
+        return 0;
     }
 
     /**
diff --git a/vendor/psy/psysh/src/Command/ListCommand.php b/vendor/psy/psysh/src/Command/ListCommand.php
index 67f4e041e8..c2e7b26cb5 100644
--- a/vendor/psy/psysh/src/Command/ListCommand.php
+++ b/vendor/psy/psysh/src/Command/ListCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -22,6 +22,7 @@
 use Psy\Exception\RuntimeException;
 use Psy\Input\CodeArgument;
 use Psy\Input\FilterOptions;
+use Psy\Output\ShellOutput;
 use Psy\VarDumper\Presenter;
 use Psy\VarDumper\PresenterAware;
 use Symfony\Component\Console\Formatter\OutputFormatter;
@@ -57,7 +58,7 @@ protected function configure()
 
         $this
             ->setName('ls')
-            ->setAliases(['list', 'dir'])
+            ->setAliases(['dir'])
             ->setDefinition([
                 new CodeArgument('target', CodeArgument::OPTIONAL, 'A target class or object to list.'),
 
@@ -126,7 +127,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
         }
 
         // @todo something cleaner than this :-/
-        if ($input->getOption('long')) {
+        if ($output instanceof ShellOutput && $input->getOption('long')) {
             $output->startPaging();
         }
 
@@ -134,7 +135,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             $this->$method($output, $enumerator->enumerate($input, $reflector, $target));
         }
 
-        if ($input->getOption('long')) {
+        if ($output instanceof ShellOutput && $input->getOption('long')) {
             $output->stopPaging();
         }
 
@@ -142,6 +143,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
         if ($reflector !== null) {
             $this->setCommandScopeVariables($reflector);
         }
+
+        return 0;
     }
 
     /**
@@ -169,11 +172,11 @@ protected function initEnumerators()
      * Write the list items to $output.
      *
      * @param OutputInterface $output
-     * @param null|array      $result List of enumerated items
+     * @param array           $result List of enumerated items
      */
-    protected function write(OutputInterface $output, array $result = null)
+    protected function write(OutputInterface $output, array $result)
     {
-        if ($result === null) {
+        if (\count($result) === 0) {
             return;
         }
 
@@ -189,11 +192,11 @@ protected function write(OutputInterface $output, array $result = null)
      * Items are listed one per line, and include the item signature.
      *
      * @param OutputInterface $output
-     * @param null|array      $result List of enumerated items
+     * @param array           $result List of enumerated items
      */
-    protected function writeLong(OutputInterface $output, array $result = null)
+    protected function writeLong(OutputInterface $output, array $result)
     {
-        if ($result === null) {
+        if (\count($result) === 0) {
             return;
         }
 
@@ -255,13 +258,14 @@ private function validateInput(InputInterface $input)
             $input->setOption('vars', true);
         } else {
             // if a target is passed, classes, functions, etc don't make sense
-            foreach (['vars', 'globals', 'functions', 'classes', 'interfaces', 'traits'] as $option) {
+            foreach (['vars', 'globals'] as $option) {
                 if ($input->getOption($option)) {
                     throw new RuntimeException('--' . $option . ' does not make sense with a specified target');
                 }
             }
 
-            foreach (['constants', 'properties', 'methods'] as $option) {
+            // @todo ensure that 'functions', 'classes', 'interfaces', 'traits' only accept namespace target?
+            foreach (['constants', 'properties', 'methods', 'functions', 'classes', 'interfaces', 'traits'] as $option) {
                 if ($input->getOption($option)) {
                     return;
                 }
diff --git a/vendor/psy/psysh/src/Command/ListCommand/ClassConstantEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/ClassConstantEnumerator.php
index a1d82ead65..50c4a7090c 100644
--- a/vendor/psy/psysh/src/Command/ListCommand/ClassConstantEnumerator.php
+++ b/vendor/psy/psysh/src/Command/ListCommand/ClassConstantEnumerator.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -25,27 +25,26 @@ class ClassConstantEnumerator extends Enumerator
     protected function listItems(InputInterface $input, \Reflector $reflector = null, $target = null)
     {
         // only list constants when a Reflector is present.
-
         if ($reflector === null) {
-            return;
+            return [];
         }
 
         // We can only list constants on actual class (or object) reflectors.
         if (!$reflector instanceof \ReflectionClass) {
             // @todo handle ReflectionExtension as well
-            return;
+            return [];
         }
 
         // only list constants if we are specifically asked
         if (!$input->getOption('constants')) {
-            return;
+            return [];
         }
 
         $noInherit = $input->getOption('no-inherit');
         $constants = $this->prepareConstants($this->getConstants($reflector, $noInherit));
 
         if (empty($constants)) {
-            return;
+            return [];
         }
 
         $ret = [];
@@ -118,8 +117,6 @@ protected function getKindLabel(\ReflectionClass $reflector)
     {
         if ($reflector->isInterface()) {
             return 'Interface Constants';
-        } elseif (\method_exists($reflector, 'isTrait') && $reflector->isTrait()) {
-            return 'Trait Constants';
         } else {
             return 'Class Constants';
         }
diff --git a/vendor/psy/psysh/src/Command/ListCommand/ClassEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/ClassEnumerator.php
index 8ab6d7a955..49a9c3a961 100644
--- a/vendor/psy/psysh/src/Command/ListCommand/ClassEnumerator.php
+++ b/vendor/psy/psysh/src/Command/ListCommand/ClassEnumerator.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -11,6 +11,7 @@
 
 namespace Psy\Command\ListCommand;
 
+use Psy\Reflection\ReflectionNamespace;
 use Symfony\Component\Console\Input\InputInterface;
 
 /**
@@ -23,35 +24,29 @@ class ClassEnumerator extends Enumerator
      */
     protected function listItems(InputInterface $input, \Reflector $reflector = null, $target = null)
     {
-        // only list classes when no Reflector is present.
-        //
-        // @todo make a NamespaceReflector and pass that in for commands like:
-        //
-        //     ls --classes Foo
-        //
-        // ... for listing classes in the Foo namespace
-
-        if ($reflector !== null || $target !== null) {
-            return;
+        // if we have a reflector, ensure that it's a namespace reflector
+        if (($target !== null || $reflector !== null) && !$reflector instanceof ReflectionNamespace) {
+            return [];
         }
 
-        $user     = $input->getOption('user');
         $internal = $input->getOption('internal');
+        $user     = $input->getOption('user');
+        $prefix   = $reflector === null ? null : \strtolower($reflector->getName()) . '\\';
 
         $ret = [];
 
         // only list classes, interfaces and traits if we are specifically asked
 
         if ($input->getOption('classes')) {
-            $ret = \array_merge($ret, $this->filterClasses('Classes', \get_declared_classes(), $internal, $user));
+            $ret = \array_merge($ret, $this->filterClasses('Classes', \get_declared_classes(), $internal, $user, $prefix));
         }
 
         if ($input->getOption('interfaces')) {
-            $ret = \array_merge($ret, $this->filterClasses('Interfaces', \get_declared_interfaces(), $internal, $user));
+            $ret = \array_merge($ret, $this->filterClasses('Interfaces', \get_declared_interfaces(), $internal, $user, $prefix));
         }
 
         if ($input->getOption('traits')) {
-            $ret = \array_merge($ret, $this->filterClasses('Traits', \get_declared_traits(), $internal, $user));
+            $ret = \array_merge($ret, $this->filterClasses('Traits', \get_declared_traits(), $internal, $user, $prefix));
         }
 
         return \array_map([$this, 'prepareClasses'], \array_filter($ret));
@@ -67,15 +62,20 @@ protected function listItems(InputInterface $input, \Reflector $reflector = null
      * @param array  $classes
      * @param bool   $internal
      * @param bool   $user
+     * @param string $prefix
      *
      * @return array
      */
-    protected function filterClasses($key, $classes, $internal, $user)
+    protected function filterClasses($key, $classes, $internal, $user, $prefix = null)
     {
         $ret = [];
 
         if ($internal) {
-            $ret['Internal ' . $key] = \array_filter($classes, function ($class) {
+            $ret['Internal ' . $key] = \array_filter($classes, function ($class) use ($prefix) {
+                if ($prefix !== null && \strpos(\strtolower($class), $prefix) !== 0) {
+                    return false;
+                }
+
                 $refl = new \ReflectionClass($class);
 
                 return $refl->isInternal();
@@ -83,7 +83,11 @@ protected function filterClasses($key, $classes, $internal, $user)
         }
 
         if ($user) {
-            $ret['User ' . $key] = \array_filter($classes, function ($class) {
+            $ret['User ' . $key] = \array_filter($classes, function ($class) use ($prefix) {
+                if ($prefix !== null && \strpos(\strtolower($class), $prefix) !== 0) {
+                    return false;
+                }
+
                 $refl = new \ReflectionClass($class);
 
                 return !$refl->isInternal();
@@ -91,7 +95,9 @@ protected function filterClasses($key, $classes, $internal, $user)
         }
 
         if (!$user && !$internal) {
-            $ret[$key] = $classes;
+            $ret[$key] = \array_filter($classes, function ($class) use ($prefix) {
+                return $prefix === null || \strpos(\strtolower($class), $prefix) === 0;
+            });
         }
 
         return $ret;
diff --git a/vendor/psy/psysh/src/Command/ListCommand/ConstantEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/ConstantEnumerator.php
index ad4ce0d125..deb6fd1097 100644
--- a/vendor/psy/psysh/src/Command/ListCommand/ConstantEnumerator.php
+++ b/vendor/psy/psysh/src/Command/ListCommand/ConstantEnumerator.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -11,6 +11,7 @@
 
 namespace Psy\Command\ListCommand;
 
+use Psy\Reflection\ReflectionNamespace;
 use Symfony\Component\Console\Input\InputInterface;
 
 /**
@@ -18,31 +19,64 @@
  */
 class ConstantEnumerator extends Enumerator
 {
+    // Because `Json` is ugly.
+    private static $categoryLabels = [
+        'libxml'   => 'libxml',
+        'openssl'  => 'OpenSSL',
+        'pcre'     => 'PCRE',
+        'sqlite3'  => 'SQLite3',
+        'curl'     => 'cURL',
+        'dom'      => 'DOM',
+        'ftp'      => 'FTP',
+        'gd'       => 'GD',
+        'gmp'      => 'GMP',
+        'iconv'    => 'iconv',
+        'json'     => 'JSON',
+        'ldap'     => 'LDAP',
+        'mbstring' => 'mbstring',
+        'odbc'     => 'ODBC',
+        'pcntl'    => 'PCNTL',
+        'pgsql'    => 'pgsql',
+        'posix'    => 'POSIX',
+        'mysqli'   => 'mysqli',
+        'soap'     => 'SOAP',
+        'exif'     => 'EXIF',
+        'sysvmsg'  => 'sysvmsg',
+        'xml'      => 'XML',
+        'xsl'      => 'XSL',
+    ];
+
     /**
      * {@inheritdoc}
      */
     protected function listItems(InputInterface $input, \Reflector $reflector = null, $target = null)
     {
-        // only list constants when no Reflector is present.
-        //
-        // @todo make a NamespaceReflector and pass that in for commands like:
-        //
-        //     ls --constants Foo
-        //
-        // ... for listing constants in the Foo namespace
-        if ($reflector !== null || $target !== null) {
-            return;
+        // if we have a reflector, ensure that it's a namespace reflector
+        if (($target !== null || $reflector !== null) && !$reflector instanceof ReflectionNamespace) {
+            return [];
         }
 
         // only list constants if we are specifically asked
         if (!$input->getOption('constants')) {
-            return;
+            return [];
         }
 
         $user     = $input->getOption('user');
         $internal = $input->getOption('internal');
         $category = $input->getOption('category');
 
+        if ($category) {
+            $category = \strtolower($category);
+
+            if ($category === 'internal') {
+                $internal = true;
+                $category = null;
+            } elseif ($category === 'user') {
+                $user = true;
+                $category = null;
+            }
+        }
+
         $ret = [];
 
         if ($user) {
@@ -50,11 +84,12 @@ protected function listItems(InputInterface $input, \Reflector $reflector = null
         }
 
         if ($internal) {
-            $ret['Interal Constants'] = $this->getConstants('internal');
+            $ret['Internal Constants'] = $this->getConstants('internal');
         }
 
         if ($category) {
-            $label = \ucfirst($category) . ' Constants';
+            $caseCategory = \array_key_exists($category, self::$categoryLabels) ? self::$categoryLabels[$category] : \ucfirst($category);
+            $label = $caseCategory . ' Constants';
             $ret[$label] = $this->getConstants($category);
         }
 
@@ -62,6 +97,18 @@ protected function listItems(InputInterface $input, \Reflector $reflector = null
             $ret['Constants'] = $this->getConstants();
         }
 
+        if ($reflector !== null) {
+            $prefix = \strtolower($reflector->getName()) . '\\';
+
+            foreach ($ret as $key => $names) {
+                foreach (\array_keys($names) as $name) {
+                    if (\strpos(\strtolower($name), $prefix) !== 0) {
+                        unset($ret[$key][$name]);
+                    }
+                }
+            }
+        }
+
         return \array_map([$this, 'prepareConstants'], \array_filter($ret));
     }
 
@@ -89,7 +136,13 @@ protected function getConstants($category = null)
             return \call_user_func_array('array_merge', $consts);
         }
 
-        return isset($consts[$category]) ? $consts[$category] : [];
+        foreach ($consts as $key => $value) {
+            if (\strtolower($key) === $category) {
+                return $value;
+            }
+        }
+
+        return [];
     }
 
     /**
diff --git a/vendor/psy/psysh/src/Command/ListCommand/Enumerator.php b/vendor/psy/psysh/src/Command/ListCommand/Enumerator.php
index 616543d0d5..40832d184a 100644
--- a/vendor/psy/psysh/src/Command/ListCommand/Enumerator.php
+++ b/vendor/psy/psysh/src/Command/ListCommand/Enumerator.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -48,9 +48,9 @@ public function __construct(Presenter $presenter)
     /**
      * Return a list of categorized things with the given input options and target.
      *
-     * @param InputInterface $input
-     * @param \Reflector     $reflector
-     * @param mixed          $target
+     * @param InputInterface  $input
+     * @param \Reflector|null $reflector
+     * @param mixed           $target
      *
      * @return array
      */
@@ -76,9 +76,9 @@ public function enumerate(InputInterface $input, \Reflector $reflector = null, $
      *         ],
      *     ]
      *
-     * @param InputInterface $input
-     * @param \Reflector     $reflector
-     * @param mixed          $target
+     * @param InputInterface  $input
+     * @param \Reflector|null $reflector
+     * @param mixed           $target
      *
      * @return array
      */
diff --git a/vendor/psy/psysh/src/Command/ListCommand/FunctionEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/FunctionEnumerator.php
index 6c3fa5ea92..e979fe0a7d 100644
--- a/vendor/psy/psysh/src/Command/ListCommand/FunctionEnumerator.php
+++ b/vendor/psy/psysh/src/Command/ListCommand/FunctionEnumerator.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -11,6 +11,7 @@
 
 namespace Psy\Command\ListCommand;
 
+use Psy\Reflection\ReflectionNamespace;
 use Symfony\Component\Console\Input\InputInterface;
 
 /**
@@ -23,21 +24,14 @@ class FunctionEnumerator extends Enumerator
      */
     protected function listItems(InputInterface $input, \Reflector $reflector = null, $target = null)
     {
-        // only list functions when no Reflector is present.
-        //
-        // @todo make a NamespaceReflector and pass that in for commands like:
-        //
-        //     ls --functions Foo
-        //
-        // ... for listing functions in the Foo namespace
-
-        if ($reflector !== null || $target !== null) {
-            return;
+        // if we have a reflector, ensure that it's a namespace reflector
+        if (($target !== null || $reflector !== null) && !$reflector instanceof ReflectionNamespace) {
+            return [];
         }
 
         // only list functions if we are specifically asked
         if (!$input->getOption('functions')) {
-            return;
+            return [];
         }
 
         if ($input->getOption('user')) {
@@ -51,10 +45,11 @@ protected function listItems(InputInterface $input, \Reflector $reflector = null
             $functions = $this->getFunctions();
         }
 
-        $functions = $this->prepareFunctions($functions);
+        $prefix = $reflector === null ? null : \strtolower($reflector->getName()) . '\\';
+        $functions = $this->prepareFunctions($functions, $prefix);
 
         if (empty($functions)) {
-            return;
+            return [];
         }
 
         $ret = [];
@@ -68,7 +63,7 @@ protected function listItems(InputInterface $input, \Reflector $reflector = null
      *
      * Optionally limit functions to "user" or "internal" functions.
      *
-     * @param null|string $type "user" or "internal" (default: both)
+     * @param string|null $type "user" or "internal" (default: both)
      *
      * @return array
      */
@@ -86,11 +81,12 @@ protected function getFunctions($type = null)
     /**
      * Prepare formatted function array.
      *
-     * @param array $functions
+     * @param array  $functions
+     * @param string $prefix
      *
      * @return array
      */
-    protected function prepareFunctions(array $functions)
+    protected function prepareFunctions(array $functions, $prefix = null)
     {
         \natcasesort($functions);
 
@@ -98,12 +94,20 @@ protected function prepareFunctions(array $functions)
         $ret = [];
 
         foreach ($functions as $name) {
+            if ($prefix !== null && \strpos(\strtolower($name), $prefix) !== 0) {
+                continue;
+            }
+
             if ($this->showItem($name)) {
-                $ret[$name] = [
-                    'name'  => $name,
-                    'style' => self::IS_FUNCTION,
-                    'value' => $this->presentSignature($name),
-                ];
+                try {
+                    $ret[$name] = [
+                        'name'  => $name,
+                        'style' => self::IS_FUNCTION,
+                        'value' => $this->presentSignature($name),
+                    ];
+                } catch (\Exception $e) {
+                    // Ignore failures. HHVM does this sometimes for internal functions.
+                }
             }
         }
 
diff --git a/vendor/psy/psysh/src/Command/ListCommand/GlobalVariableEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/GlobalVariableEnumerator.php
index f51791cb6d..5ba03f9dc4 100644
--- a/vendor/psy/psysh/src/Command/ListCommand/GlobalVariableEnumerator.php
+++ b/vendor/psy/psysh/src/Command/ListCommand/GlobalVariableEnumerator.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -25,18 +25,18 @@ protected function listItems(InputInterface $input, \Reflector $reflector = null
     {
         // only list globals when no Reflector is present.
         if ($reflector !== null || $target !== null) {
-            return;
+            return [];
         }
 
         // only list globals if we are specifically asked
         if (!$input->getOption('globals')) {
-            return;
+            return [];
         }
 
         $globals = $this->prepareGlobals($this->getGlobals());
 
         if (empty($globals)) {
-            return;
+            return [];
         }
 
         return [
diff --git a/vendor/psy/psysh/src/Command/ListCommand/InterfaceEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/InterfaceEnumerator.php
deleted file mode 100644
index 4531fce83b..0000000000
--- a/vendor/psy/psysh/src/Command/ListCommand/InterfaceEnumerator.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Command\ListCommand;
-
-use Psy\VarDumper\Presenter;
-use Symfony\Component\Console\Input\InputInterface;
-
-/**
- * Interface Enumerator class.
- *
- * @deprecated Nothing should use this anymore
- */
-class InterfaceEnumerator extends Enumerator
-{
-    public function __construct(Presenter $presenter)
-    {
-        @\trigger_error('InterfaceEnumerator is no longer used', E_USER_DEPRECATED);
-        parent::__construct($presenter);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    protected function listItems(InputInterface $input, \Reflector $reflector = null, $target = null)
-    {
-        // only list interfaces when no Reflector is present.
-        //
-        // @todo make a NamespaceReflector and pass that in for commands like:
-        //
-        //     ls --interfaces Foo
-        //
-        // ... for listing interfaces in the Foo namespace
-
-        if ($reflector !== null || $target !== null) {
-            return;
-        }
-
-        // only list interfaces if we are specifically asked
-        if (!$input->getOption('interfaces')) {
-            return;
-        }
-
-        $interfaces = $this->prepareInterfaces(\get_declared_interfaces());
-
-        if (empty($interfaces)) {
-            return;
-        }
-
-        return [
-            'Interfaces' => $interfaces,
-        ];
-    }
-
-    /**
-     * Prepare formatted interface array.
-     *
-     * @param array $interfaces
-     *
-     * @return array
-     */
-    protected function prepareInterfaces(array $interfaces)
-    {
-        \natcasesort($interfaces);
-
-        // My kingdom for a generator.
-        $ret = [];
-
-        foreach ($interfaces as $name) {
-            if ($this->showItem($name)) {
-                $ret[$name] = [
-                    'name'  => $name,
-                    'style' => self::IS_CLASS,
-                    'value' => $this->presentSignature($name),
-                ];
-            }
-        }
-
-        return $ret;
-    }
-}
diff --git a/vendor/psy/psysh/src/Command/ListCommand/MethodEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/MethodEnumerator.php
index 49d7e104e9..7357ab1c95 100644
--- a/vendor/psy/psysh/src/Command/ListCommand/MethodEnumerator.php
+++ b/vendor/psy/psysh/src/Command/ListCommand/MethodEnumerator.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -24,19 +24,18 @@ class MethodEnumerator extends Enumerator
     protected function listItems(InputInterface $input, \Reflector $reflector = null, $target = null)
     {
         // only list methods when a Reflector is present.
-
         if ($reflector === null) {
-            return;
+            return [];
         }
 
         // We can only list methods on actual class (or object) reflectors.
         if (!$reflector instanceof \ReflectionClass) {
-            return;
+            return [];
         }
 
         // only list methods if we are specifically asked
         if (!$input->getOption('methods')) {
-            return;
+            return [];
         }
 
         $showAll   = $input->getOption('all');
@@ -44,7 +43,7 @@ protected function listItems(InputInterface $input, \Reflector $reflector = null
         $methods   = $this->prepareMethods($this->getMethods($showAll, $reflector, $noInherit));
 
         if (empty($methods)) {
-            return;
+            return [];
         }
 
         $ret = [];
@@ -68,7 +67,9 @@ protected function getMethods($showAll, \Reflector $reflector, $noInherit = fals
 
         $methods = [];
         foreach ($reflector->getMethods() as $name => $method) {
-            if ($noInherit && $method->getDeclaringClass()->getName() !== $className) {
+            // For some reason PHP reflection shows private methods from the parent class, even
+            // though they're effectively worthless. Let's suppress them here, like --no-inherit
+            if (($noInherit || $method->isPrivate()) && $method->getDeclaringClass()->getName() !== $className) {
                 continue;
             }
 
diff --git a/vendor/psy/psysh/src/Command/ListCommand/PropertyEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/PropertyEnumerator.php
index d56caded69..186c607c1e 100644
--- a/vendor/psy/psysh/src/Command/ListCommand/PropertyEnumerator.php
+++ b/vendor/psy/psysh/src/Command/ListCommand/PropertyEnumerator.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -26,17 +26,17 @@ protected function listItems(InputInterface $input, \Reflector $reflector = null
         // only list properties when a Reflector is present.
 
         if ($reflector === null) {
-            return;
+            return [];
         }
 
         // We can only list properties on actual class (or object) reflectors.
         if (!$reflector instanceof \ReflectionClass) {
-            return;
+            return [];
         }
 
         // only list properties if we are specifically asked
         if (!$input->getOption('properties')) {
-            return;
+            return [];
         }
 
         $showAll    = $input->getOption('all');
@@ -44,7 +44,7 @@ protected function listItems(InputInterface $input, \Reflector $reflector = null
         $properties = $this->prepareProperties($this->getProperties($showAll, $reflector, $noInherit), $target);
 
         if (empty($properties)) {
-            return;
+            return [];
         }
 
         $ret = [];
@@ -117,9 +117,7 @@ protected function prepareProperties(array $properties, $target = null)
      */
     protected function getKindLabel(\ReflectionClass $reflector)
     {
-        if ($reflector->isInterface()) {
-            return 'Interface Properties';
-        } elseif (\method_exists($reflector, 'isTrait') && $reflector->isTrait()) {
+        if (\method_exists($reflector, 'isTrait') && $reflector->isTrait()) {
             return 'Trait Properties';
         } else {
             return 'Class Properties';
@@ -154,7 +152,7 @@ private function getVisibilityStyle(\ReflectionProperty $property)
      */
     protected function presentValue(\ReflectionProperty $property, $target)
     {
-        // If $target is a class, trait or interface (try to) get the default
+        // If $target is a class or trait (try to) get the default
         // value for the property.
         if (!\is_object($target)) {
             try {
diff --git a/vendor/psy/psysh/src/Command/ListCommand/TraitEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/TraitEnumerator.php
deleted file mode 100644
index 3ee601558d..0000000000
--- a/vendor/psy/psysh/src/Command/ListCommand/TraitEnumerator.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Command\ListCommand;
-
-use Psy\VarDumper\Presenter;
-use Symfony\Component\Console\Input\InputInterface;
-
-/**
- * Trait Enumerator class.
- *
- * @deprecated Nothing should use this anymore
- */
-class TraitEnumerator extends Enumerator
-{
-    public function __construct(Presenter $presenter)
-    {
-        @\trigger_error('TraitEnumerator is no longer used', E_USER_DEPRECATED);
-        parent::__construct($presenter);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    protected function listItems(InputInterface $input, \Reflector $reflector = null, $target = null)
-    {
-        // only list traits when no Reflector is present.
-        //
-        // @todo make a NamespaceReflector and pass that in for commands like:
-        //
-        //     ls --traits Foo
-        //
-        // ... for listing traits in the Foo namespace
-
-        if ($reflector !== null || $target !== null) {
-            return;
-        }
-
-        // only list traits if we are specifically asked
-        if (!$input->getOption('traits')) {
-            return;
-        }
-
-        $traits = $this->prepareTraits(\get_declared_traits());
-
-        if (empty($traits)) {
-            return;
-        }
-
-        return [
-            'Traits' => $traits,
-        ];
-    }
-
-    /**
-     * Prepare formatted trait array.
-     *
-     * @param array $traits
-     *
-     * @return array
-     */
-    protected function prepareTraits(array $traits)
-    {
-        \natcasesort($traits);
-
-        // My kingdom for a generator.
-        $ret = [];
-
-        foreach ($traits as $name) {
-            if ($this->showItem($name)) {
-                $ret[$name] = [
-                    'name'  => $name,
-                    'style' => self::IS_CLASS,
-                    'value' => $this->presentSignature($name),
-                ];
-            }
-        }
-
-        return $ret;
-    }
-}
diff --git a/vendor/psy/psysh/src/Command/ListCommand/VariableEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/VariableEnumerator.php
index 0586c203e6..f39e678f7d 100644
--- a/vendor/psy/psysh/src/Command/ListCommand/VariableEnumerator.php
+++ b/vendor/psy/psysh/src/Command/ListCommand/VariableEnumerator.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -49,19 +49,19 @@ protected function listItems(InputInterface $input, \Reflector $reflector = null
     {
         // only list variables when no Reflector is present.
         if ($reflector !== null || $target !== null) {
-            return;
+            return [];
         }
 
         // only list variables if we are specifically asked
         if (!$input->getOption('vars')) {
-            return;
+            return [];
         }
 
         $showAll   = $input->getOption('all');
         $variables = $this->prepareVariables($this->getVariables($showAll));
 
         if (empty($variables)) {
-            return;
+            return [];
         }
 
         return [
diff --git a/vendor/psy/psysh/src/Command/ParseCommand.php b/vendor/psy/psysh/src/Command/ParseCommand.php
index 3f3286e8af..0849075f6d 100644
--- a/vendor/psy/psysh/src/Command/ParseCommand.php
+++ b/vendor/psy/psysh/src/Command/ParseCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -70,7 +70,7 @@ public function setPresenter(Presenter $presenter)
     {
         $this->presenter = clone $presenter;
         $this->presenter->addCasters([
-            'PhpParser\Node' => function (Node $node, array $a) {
+            Node::class => function (Node $node, array $a) {
                 $a = [
                     Caster::PREFIX_VIRTUAL . 'type'       => $node->getType(),
                     Caster::PREFIX_VIRTUAL . 'attributes' => $node->getAttributes(),
@@ -128,7 +128,7 @@ protected function configure()
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $code = $input->getArgument('code');
-        if (\strpos('<?', $code) === false) {
+        if (\strpos($code, '<?') === false) {
             $code = '<?php ' . $code;
         }
 
@@ -138,6 +138,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $output->page($this->presenter->present($nodes, $depth));
 
         $this->context->setReturnValue($nodes);
+
+        return 0;
     }
 
     /**
diff --git a/vendor/psy/psysh/src/Command/PsyVersionCommand.php b/vendor/psy/psysh/src/Command/PsyVersionCommand.php
index 7d0846c1b4..1355841f14 100644
--- a/vendor/psy/psysh/src/Command/PsyVersionCommand.php
+++ b/vendor/psy/psysh/src/Command/PsyVersionCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -37,5 +37,7 @@ protected function configure()
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $output->writeln($this->getApplication()->getVersion());
+
+        return 0;
     }
 }
diff --git a/vendor/psy/psysh/src/Command/ReflectingCommand.php b/vendor/psy/psysh/src/Command/ReflectingCommand.php
index 3286328058..53b84a8d60 100644
--- a/vendor/psy/psysh/src/Command/ReflectingCommand.php
+++ b/vendor/psy/psysh/src/Command/ReflectingCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -16,6 +16,9 @@
 use Psy\ContextAware;
 use Psy\Exception\ErrorException;
 use Psy\Exception\RuntimeException;
+use Psy\Exception\UnexpectedTargetException;
+use Psy\Reflection\ReflectionClassConstant;
+use Psy\Reflection\ReflectionConstant_;
 use Psy\Util\Mirror;
 
 /**
@@ -114,6 +117,18 @@ protected function resolveName($name, $includeFunctions = false)
             return $name;
         }
 
+        // Check $name against the current namespace and use statements.
+        if (self::couldBeClassName($name)) {
+            try {
+                $maybeAlias = $this->resolveCode($name . '::class');
+                if ($maybeAlias !== $name) {
+                    return $maybeAlias;
+                }
+            } catch (RuntimeException $e) {
+                // /shrug
+            }
+        }
+
         if ($namespace = $shell->getNamespace()) {
             $fullName = $namespace . '\\' . $name;
 
@@ -125,6 +140,15 @@ protected function resolveName($name, $includeFunctions = false)
         return $name;
     }
 
+    /**
+     * Check whether a given name could be a class name.
+     */
+    protected function couldBeClassName($name)
+    {
+        // Regex based on https://www.php.net/manual/en/language.oop5.basic.php#language.oop5.basic.class
+        return \preg_match('/^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*(\\[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*)*$/', $name);
+    }
+
     /**
      * Get a Reflector and documentation for a function, class or instance, constant, method or property.
      *
@@ -166,7 +190,7 @@ protected function resolveCode($code)
     /**
      * Resolve code to an object in the current scope.
      *
-     * @throws RuntimeException when the code resolves to a non-object value
+     * @throws UnexpectedTargetException when the code resolves to a non-object value
      *
      * @param string $code
      *
@@ -177,7 +201,7 @@ private function resolveObject($code)
         $value = $this->resolveCode($code);
 
         if (!\is_object($value)) {
-            throw new RuntimeException('Unable to inspect a non-object');
+            throw new UnexpectedTargetException($value, 'Unable to inspect a non-object');
         }
 
         return $value;
@@ -231,15 +255,15 @@ protected function setCommandScopeVariables(\Reflector $reflector)
         $vars = [];
 
         switch (\get_class($reflector)) {
-            case 'ReflectionClass':
-            case 'ReflectionObject':
+            case \ReflectionClass::class:
+            case \ReflectionObject::class:
                 $vars['__class'] = $reflector->name;
                 if ($reflector->inNamespace()) {
                     $vars['__namespace'] = $reflector->getNamespaceName();
                 }
                 break;
 
-            case 'ReflectionMethod':
+            case \ReflectionMethod::class:
                 $vars['__method'] = \sprintf('%s::%s', $reflector->class, $reflector->name);
                 $vars['__class'] = $reflector->class;
                 $classReflector = $reflector->getDeclaringClass();
@@ -248,14 +272,14 @@ protected function setCommandScopeVariables(\Reflector $reflector)
                 }
                 break;
 
-            case 'ReflectionFunction':
+            case \ReflectionFunction::class:
                 $vars['__function'] = $reflector->name;
                 if ($reflector->inNamespace()) {
                     $vars['__namespace'] = $reflector->getNamespaceName();
                 }
                 break;
 
-            case 'ReflectionGenerator':
+            case \ReflectionGenerator::class:
                 $funcReflector = $reflector->getFunction();
                 $vars['__function'] = $funcReflector->name;
                 if ($funcReflector->inNamespace()) {
@@ -268,9 +292,9 @@ protected function setCommandScopeVariables(\Reflector $reflector)
                 }
                 break;
 
-            case 'ReflectionProperty':
-            case 'ReflectionClassConstant':
-            case 'Psy\Reflection\ReflectionClassConstant':
+            case \ReflectionProperty::class:
+            case \ReflectionClassConstant::class:
+            case ReflectionClassConstant::class:
                 $classReflector = $reflector->getDeclaringClass();
                 $vars['__class'] = $classReflector->name;
                 if ($classReflector->inNamespace()) {
@@ -283,7 +307,7 @@ protected function setCommandScopeVariables(\Reflector $reflector)
                 }
                 break;
 
-            case 'Psy\Reflection\ReflectionConstant_':
+            case ReflectionConstant_::class:
                 if ($reflector->inNamespace()) {
                     $vars['__namespace'] = $reflector->getNamespaceName();
                 }
diff --git a/vendor/psy/psysh/src/Command/ShowCommand.php b/vendor/psy/psysh/src/Command/ShowCommand.php
index 47d1865486..60da02643b 100644
--- a/vendor/psy/psysh/src/Command/ShowCommand.php
+++ b/vendor/psy/psysh/src/Command/ShowCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -11,14 +11,11 @@
 
 namespace Psy\Command;
 
-use JakubOnderka\PhpConsoleHighlighter\Highlighter;
-use Psy\Configuration;
-use Psy\ConsoleColorFactory;
 use Psy\Exception\RuntimeException;
+use Psy\Exception\UnexpectedTargetException;
 use Psy\Formatter\CodeFormatter;
 use Psy\Formatter\SignatureFormatter;
 use Psy\Input\CodeArgument;
-use Psy\Output\ShellOutput;
 use Symfony\Component\Console\Formatter\OutputFormatter;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
@@ -29,18 +26,14 @@
  */
 class ShowCommand extends ReflectingCommand
 {
-    private $colorMode;
-    private $highlighter;
     private $lastException;
     private $lastExceptionIndex;
 
     /**
-     * @param null|string $colorMode (default: null)
+     * @param string|null $colorMode (deprecated and ignored)
      */
     public function __construct($colorMode = null)
     {
-        $this->colorMode = $colorMode ?: Configuration::COLOR_MODE_AUTO;
-
         parent::__construct();
     }
 
@@ -99,11 +92,15 @@ protected function execute(InputInterface $input, OutputInterface $output)
                 throw new \InvalidArgumentException('Too many arguments (supply either "target" or "--ex")');
             }
 
-            return $this->writeExceptionContext($input, $output);
+            $this->writeExceptionContext($input, $output);
+
+            return 0;
         }
 
         if ($input->getArgument('target')) {
-            return $this->writeCodeContext($input, $output);
+            $this->writeCodeContext($input, $output);
+
+            return 0;
         }
 
         throw new RuntimeException('Not enough arguments (missing: "target")');
@@ -111,13 +108,24 @@ protected function execute(InputInterface $input, OutputInterface $output)
 
     private function writeCodeContext(InputInterface $input, OutputInterface $output)
     {
-        list($target, $reflector) = $this->getTargetAndReflector($input->getArgument('target'));
+        try {
+            list($target, $reflector) = $this->getTargetAndReflector($input->getArgument('target'));
+        } catch (UnexpectedTargetException $e) {
+            // If we didn't get a target and Reflector, maybe we got a filename?
+            $target = $e->getTarget();
+            if (\is_string($target) && \is_file($target) && $code = @\file_get_contents($target)) {
+                // @todo maybe set $__file to $target?
+                return $output->page(CodeFormatter::formatCode($code));
+            } else {
+                throw $e;
+            }
+        }
 
         // Set some magic local variables
         $this->setCommandScopeVariables($reflector);
 
         try {
-            $output->page(CodeFormatter::format($reflector, $this->colorMode), ShellOutput::OUTPUT_RAW);
+            $output->page(CodeFormatter::format($reflector));
         } catch (RuntimeException $e) {
             $output->writeln(SignatureFormatter::format($reflector));
             throw $e;
@@ -170,7 +178,7 @@ private function writeTraceLine(OutputInterface $output, array $trace, $index)
         $line = isset($trace[$index]['line']) ? $trace[$index]['line'] : 'n/a';
 
         $output->writeln(\sprintf(
-            'From <info>%s:%d</info> at <strong>level %d</strong> of backtrace (of %d).',
+            'From <info>%s:%d</info> at <strong>level %d</strong> of backtrace (of %d):',
             OutputFormatter::escape($file),
             OutputFormatter::escape($line),
             $index + 1,
@@ -216,17 +224,10 @@ private function writeTraceCodeSnippet(OutputInterface $output, array $trace, $i
             return;
         }
 
-        $output->write($this->getHighlighter()->getCodeSnippet($code, $line, 5, 5), ShellOutput::OUTPUT_RAW);
-    }
-
-    private function getHighlighter()
-    {
-        if (!$this->highlighter) {
-            $factory = new ConsoleColorFactory($this->colorMode);
-            $this->highlighter = new Highlighter($factory->getConsoleColor());
-        }
+        $startLine = \max($line - 5, 0);
+        $endLine = $line + 5;
 
-        return $this->highlighter;
+        $output->write(CodeFormatter::formatCode($code, $startLine, $endLine, $line), false);
     }
 
     private function setCommandScopeVariablesFromContext(array $context)
diff --git a/vendor/psy/psysh/src/Command/SudoCommand.php b/vendor/psy/psysh/src/Command/SudoCommand.php
index 9d5afbf04c..c971a19b6a 100644
--- a/vendor/psy/psysh/src/Command/SudoCommand.php
+++ b/vendor/psy/psysh/src/Command/SudoCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -109,7 +109,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             $code = $history[\count($history) - 2];
         }
 
-        if (\strpos('<?', $code) === false) {
+        if (\strpos($code, '<?') === false) {
             $code = '<?php ' . $code;
         }
 
@@ -118,6 +118,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $sudoCode = $this->printer->prettyPrint($nodes);
         $shell = $this->getApplication();
         $shell->addCode($sudoCode, !$shell->hasCode());
+
+        return 0;
     }
 
     /**
diff --git a/vendor/psy/psysh/src/Command/ThrowUpCommand.php b/vendor/psy/psysh/src/Command/ThrowUpCommand.php
index b37f7573c1..bd672ad684 100644
--- a/vendor/psy/psysh/src/Command/ThrowUpCommand.php
+++ b/vendor/psy/psysh/src/Command/ThrowUpCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -21,6 +21,7 @@
 use PhpParser\PrettyPrinter\Standard as Printer;
 use Psy\Context;
 use Psy\ContextAware;
+use Psy\Exception\ThrowUpException;
 use Psy\Input\CodeArgument;
 use Psy\ParserFactory;
 use Symfony\Component\Console\Input\InputInterface;
@@ -31,18 +32,9 @@
  */
 class ThrowUpCommand extends Command implements ContextAware
 {
-    const THROW_CLASS = 'Psy\Exception\ThrowUpException';
-
     private $parser;
     private $printer;
 
-    /**
-     * Context instance (for ContextAware interface).
-     *
-     * @var Context
-     */
-    protected $context;
-
     /**
      * {@inheritdoc}
      */
@@ -57,13 +49,13 @@ public function __construct($name = null)
     }
 
     /**
-     * ContextAware interface.
+     * @deprecated throwUp no longer needs to be ContextAware
      *
      * @param Context $context
      */
     public function setContext(Context $context)
     {
-        $this->context = $context;
+        // Do nothing
     }
 
     /**
@@ -95,16 +87,18 @@ protected function configure()
     /**
      * {@inheritdoc}
      *
-     * @throws InvalidArgumentException if there is no exception to throw
+     * @throws \InvalidArgumentException if there is no exception to throw
      */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $args = $this->prepareArgs($input->getArgument('exception'));
-        $throwStmt = new Throw_(new StaticCall(new FullyQualifiedName(self::THROW_CLASS), 'fromThrowable', $args));
+        $throwStmt = new Throw_(new StaticCall(new FullyQualifiedName(ThrowUpException::class), 'fromThrowable', $args));
         $throwCode = $this->printer->prettyPrint([$throwStmt]);
 
         $shell = $this->getApplication();
         $shell->addCode($throwCode, !$shell->hasCode());
+
+        return 0;
     }
 
     /**
@@ -112,7 +106,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
      *
      * If no argument was given, this falls back to `$_e`
      *
-     * @throws InvalidArgumentException if there is no exception to throw
+     * @throws \InvalidArgumentException if there is no exception to throw
      *
      * @param string $code
      *
@@ -125,7 +119,7 @@ private function prepareArgs($code = null)
             return [new Arg(new Variable('_e'))];
         }
 
-        if (\strpos('<?', $code) === false) {
+        if (\strpos($code, '<?') === false) {
             $code = '<?php ' . $code;
         }
 
@@ -143,7 +137,7 @@ private function prepareArgs($code = null)
 
         // Allow throwing via a string, e.g. `throw-up "SUP"`
         if ($expr instanceof String_) {
-            return [new New_(new FullyQualifiedName('Exception'), $args)];
+            return [new New_(new FullyQualifiedName(\Exception::class), $args)];
         }
 
         return $args;
diff --git a/vendor/psy/psysh/src/Command/TimeitCommand.php b/vendor/psy/psysh/src/Command/TimeitCommand.php
index c596631311..edaa2b80a2 100644
--- a/vendor/psy/psysh/src/Command/TimeitCommand.php
+++ b/vendor/psy/psysh/src/Command/TimeitCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -106,6 +106,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
 
             $output->writeln(\sprintf(self::AVG_RESULT_MSG, $total / $num, $median, $total));
         }
+
+        return 0;
     }
 
     /**
diff --git a/vendor/psy/psysh/src/Command/TimeitCommand/TimeitVisitor.php b/vendor/psy/psysh/src/Command/TimeitCommand/TimeitVisitor.php
index 841ba135d8..8deb7335ab 100644
--- a/vendor/psy/psysh/src/Command/TimeitCommand/TimeitVisitor.php
+++ b/vendor/psy/psysh/src/Command/TimeitCommand/TimeitVisitor.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -21,6 +21,7 @@
 use PhpParser\Node\Stmt\Return_;
 use PhpParser\NodeVisitorAbstract;
 use Psy\CodeCleaner\NoReturnValue;
+use Psy\Command\TimeitCommand;
 
 /**
  * A node visitor for instrumenting code to be executed by the `timeit` command.
@@ -97,11 +98,11 @@ public function afterTraverse(array $nodes)
     /**
      * Get PhpParser AST nodes for a `markStart` call.
      *
-     * @return PhpParser\Node\Expr\StaticCall
+     * @return \PhpParser\Node\Expr\StaticCall
      */
     private function getStartCall()
     {
-        return new StaticCall(new FullyQualifiedName('Psy\Command\TimeitCommand'), 'markStart');
+        return new StaticCall(new FullyQualifiedName(TimeitCommand::class), 'markStart');
     }
 
     /**
@@ -111,7 +112,7 @@ private function getStartCall()
      *
      * @param Expr|null $arg
      *
-     * @return PhpParser\Node\Expr\StaticCall
+     * @return \PhpParser\Node\Expr\StaticCall
      */
     private function getEndCall(Expr $arg = null)
     {
@@ -119,7 +120,7 @@ private function getEndCall(Expr $arg = null)
             $arg = NoReturnValue::create();
         }
 
-        return new StaticCall(new FullyQualifiedName('Psy\Command\TimeitCommand'), 'markEnd', [new Arg($arg)]);
+        return new StaticCall(new FullyQualifiedName(TimeitCommand::class), 'markEnd', [new Arg($arg)]);
     }
 
     /**
@@ -127,13 +128,13 @@ private function getEndCall(Expr $arg = null)
      *
      * Wrap $expr in a PhpParser\Node\Stmt\Expression if the class exists.
      *
-     * @param PhpParser\Node $expr
-     * @param array          $attrs
+     * @param \PhpParser\Node $expr
+     * @param array           $attrs
      *
-     * @return PhpParser\Node\Expr|PhpParser\Node\Stmt\Expression
+     * @return \PhpParser\Node\Expr|\PhpParser\Node\Stmt\Expression
      */
     private function maybeExpression($expr, $attrs = [])
     {
-        return \class_exists('PhpParser\Node\Stmt\Expression') ? new Expression($expr, $attrs) : $expr;
+        return \class_exists(Expression::class) ? new Expression($expr, $attrs) : $expr;
     }
 }
diff --git a/vendor/psy/psysh/src/Command/TraceCommand.php b/vendor/psy/psysh/src/Command/TraceCommand.php
index c28b0e7288..7aa3c18e36 100644
--- a/vendor/psy/psysh/src/Command/TraceCommand.php
+++ b/vendor/psy/psysh/src/Command/TraceCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -11,9 +11,9 @@
 
 namespace Psy\Command;
 
+use Psy\Formatter\TraceFormatter;
 use Psy\Input\FilterOptions;
 use Psy\Output\ShellOutput;
-use Symfony\Component\Console\Formatter\OutputFormatter;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
@@ -74,6 +74,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $this->filter->bind($input);
         $trace = $this->getBacktrace(new \Exception(), $input->getOption('num'), $input->getOption('include-psy'));
         $output->page($trace, ShellOutput::NUMBER_LINES);
+
+        return 0;
     }
 
     /**
@@ -90,78 +92,6 @@ protected function execute(InputInterface $input, OutputInterface $output)
      */
     protected function getBacktrace(\Exception $e, $count = null, $includePsy = true)
     {
-        if ($cwd = \getcwd()) {
-            $cwd = \rtrim($cwd, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
-        }
-
-        if ($count === null) {
-            $count = PHP_INT_MAX;
-        }
-
-        $lines = [];
-
-        $trace = $e->getTrace();
-        \array_unshift($trace, [
-            'function' => '',
-            'file'     => $e->getFile() !== null ? $e->getFile() : 'n/a',
-            'line'     => $e->getLine() !== null ? $e->getLine() : 'n/a',
-            'args'     => [],
-        ]);
-
-        if (!$includePsy) {
-            for ($i = \count($trace) - 1; $i >= 0; $i--) {
-                $thing = isset($trace[$i]['class']) ? $trace[$i]['class'] : $trace[$i]['function'];
-                if (\preg_match('/\\\\?Psy\\\\/', $thing)) {
-                    $trace = \array_slice($trace, $i + 1);
-                    break;
-                }
-            }
-        }
-
-        for ($i = 0, $count = \min($count, \count($trace)); $i < $count; $i++) {
-            $class    = isset($trace[$i]['class']) ? $trace[$i]['class'] : '';
-            $type     = isset($trace[$i]['type']) ? $trace[$i]['type'] : '';
-            $function = $trace[$i]['function'];
-            $file     = isset($trace[$i]['file']) ? $this->replaceCwd($cwd, $trace[$i]['file']) : 'n/a';
-            $line     = isset($trace[$i]['line']) ? $trace[$i]['line'] : 'n/a';
-
-            // Leave execution loop out of the `eval()'d code` lines
-            if (\preg_match("#/src/Execution(?:Loop)?Closure.php\(\d+\) : eval\(\)'d code$#", \str_replace('\\', '/', $file))) {
-                $file = "eval()'d code";
-            }
-
-            // Skip any lines that don't match our filter options
-            if (!$this->filter->match(\sprintf('%s%s%s() at %s:%s', $class, $type, $function, $file, $line))) {
-                continue;
-            }
-
-            $lines[] = \sprintf(
-                ' <class>%s</class>%s%s() at <info>%s:%s</info>',
-                OutputFormatter::escape($class),
-                OutputFormatter::escape($type),
-                OutputFormatter::escape($function),
-                OutputFormatter::escape($file),
-                OutputFormatter::escape($line)
-            );
-        }
-
-        return $lines;
-    }
-
-    /**
-     * Replace the given directory from the start of a filepath.
-     *
-     * @param string $cwd
-     * @param string $file
-     *
-     * @return string
-     */
-    private function replaceCwd($cwd, $file)
-    {
-        if ($cwd === false) {
-            return $file;
-        } else {
-            return \preg_replace('/^' . \preg_quote($cwd, '/') . '/', '', $file);
-        }
+        return TraceFormatter::formatTrace($e, $this->filter, $count, $includePsy);
     }
 }
diff --git a/vendor/psy/psysh/src/Command/WhereamiCommand.php b/vendor/psy/psysh/src/Command/WhereamiCommand.php
index 98593d13aa..b04a21a410 100644
--- a/vendor/psy/psysh/src/Command/WhereamiCommand.php
+++ b/vendor/psy/psysh/src/Command/WhereamiCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -11,10 +11,9 @@
 
 namespace Psy\Command;
 
-use JakubOnderka\PhpConsoleHighlighter\Highlighter;
-use Psy\Configuration;
-use Psy\ConsoleColorFactory;
+use Psy\Formatter\CodeFormatter;
 use Psy\Output\ShellOutput;
+use Psy\Shell;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
@@ -24,15 +23,13 @@
  */
 class WhereamiCommand extends Command
 {
-    private $colorMode;
     private $backtrace;
 
     /**
-     * @param null|string $colorMode (default: null)
+     * @param string|null $colorMode (deprecated and ignored)
      */
     public function __construct($colorMode = null)
     {
-        $this->colorMode = $colorMode ?: Configuration::COLOR_MODE_AUTO;
         $this->backtrace = \debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
 
         parent::__construct();
@@ -46,18 +43,21 @@ protected function configure()
         $this
             ->setName('whereami')
             ->setDefinition([
-                new InputOption('num', 'n', InputOption::VALUE_OPTIONAL, 'Number of lines before and after.', '5'),
+                new InputOption('num',  'n',   InputOption::VALUE_OPTIONAL, 'Number of lines before and after.', '5'),
+                new InputOption('file', 'f|a', InputOption::VALUE_NONE,     'Show the full source for the current file.'),
             ])
             ->setDescription('Show where you are in the code.')
             ->setHelp(
                 <<<'HELP'
 Show where you are in the code.
 
-Optionally, include how many lines before and after you want to display.
+Optionally, include the number of lines before and after you want to display,
+or --file for the whole file.
 
 e.g.
 <return>> whereami </return>
 <return>> whereami -n10</return>
+<return>> whereami --file</return>
 HELP
             );
     }
@@ -83,8 +83,8 @@ private static function isDebugCall(array $stackFrame)
         $class    = isset($stackFrame['class']) ? $stackFrame['class'] : null;
         $function = isset($stackFrame['function']) ? $stackFrame['function'] : null;
 
-        return ($class === null && $function === 'Psy\debug') ||
-            ($class === 'Psy\Shell' && \in_array($function, ['__construct', 'debug']));
+        return ($class === null && $function === 'Psy\\debug') ||
+            ($class === Shell::class && \in_array($function, ['__construct', 'debug']));
     }
 
     /**
@@ -112,19 +112,30 @@ protected function fileInfo()
      */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        $info        = $this->fileInfo();
-        $num         = $input->getOption('num');
-        $factory     = new ConsoleColorFactory($this->colorMode);
-        $colors      = $factory->getConsoleColor();
-        $highlighter = new Highlighter($colors);
-        $contents    = \file_get_contents($info['file']);
-
-        $output->startPaging();
-        $output->writeln('');
-        $output->writeln(\sprintf('From <info>%s:%s</info>:', $this->replaceCwd($info['file']), $info['line']));
-        $output->writeln('');
-        $output->write($highlighter->getCodeSnippet($contents, $info['line'], $num, $num), ShellOutput::OUTPUT_RAW);
-        $output->stopPaging();
+        $info      = $this->fileInfo();
+        $num       = $input->getOption('num');
+        $lineNum   = $info['line'];
+        $startLine = \max($lineNum - $num, 1);
+        $endLine   = $lineNum + $num;
+        $code      = \file_get_contents($info['file']);
+
+        if ($input->getOption('file')) {
+            $startLine = 1;
+            $endLine   = null;
+        }
+
+        if ($output instanceof ShellOutput) {
+            $output->startPaging();
+        }
+
+        $output->writeln(\sprintf('From <info>%s:%s</info>:', $this->replaceCwd($info['file']), $lineNum));
+        $output->write(CodeFormatter::formatCode($code, $startLine, $endLine, $lineNum), false);
+
+        if ($output instanceof ShellOutput) {
+            $output->stopPaging();
+        }
+
+        return 0;
     }
 
     /**
diff --git a/vendor/psy/psysh/src/Command/WtfCommand.php b/vendor/psy/psysh/src/Command/WtfCommand.php
index c6d53000ed..7bd71707d5 100644
--- a/vendor/psy/psysh/src/Command/WtfCommand.php
+++ b/vendor/psy/psysh/src/Command/WtfCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -95,7 +95,11 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $count     = $input->getOption('all') ? PHP_INT_MAX : \max(3, \pow(2, \strlen($incredulity) + 1));
 
         $shell = $this->getApplication();
-        $output->startPaging();
+
+        if ($output instanceof ShellOutput) {
+            $output->startPaging();
+        }
+
         do {
             $traceCount = \count($exception->getTrace());
             $showLines  = $count;
@@ -120,6 +124,11 @@ protected function execute(InputInterface $input, OutputInterface $output)
                 $output->writeln('');
             }
         } while ($exception = $exception->getPrevious());
-        $output->stopPaging();
+
+        if ($output instanceof ShellOutput) {
+            $output->stopPaging();
+        }
+
+        return 0;
     }
 }
diff --git a/vendor/psy/psysh/src/ConfigPaths.php b/vendor/psy/psysh/src/ConfigPaths.php
index c4de2d5769..8057a3a967 100644
--- a/vendor/psy/psysh/src/ConfigPaths.php
+++ b/vendor/psy/psysh/src/ConfigPaths.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -11,6 +11,7 @@
 
 namespace Psy;
 
+use Psy\Exception\ErrorException;
 use XdgBaseDir\Xdg;
 
 /**
@@ -136,7 +137,7 @@ public static function getRuntimeDir()
     {
         $xdg = new Xdg();
 
-        \set_error_handler(['Psy\Exception\ErrorException', 'throwException']);
+        \set_error_handler([ErrorException::class, 'throwException']);
 
         try {
             // XDG doesn't really work on Windows, sometimes complains about
@@ -161,18 +162,18 @@ private static function getDirNames(array $baseDirs)
         }, $baseDirs);
 
         // Add ~/.psysh
-        if ($home = \getenv('HOME')) {
-            $dirs[] = \strtr($home, '\\', '/') . '/.psysh';
+        if (isset($_SERVER['HOME']) && $_SERVER['HOME']) {
+            $dirs[] = \strtr($_SERVER['HOME'], '\\', '/') . '/.psysh';
         }
 
         // Add some Windows specific ones :)
         if (\defined('PHP_WINDOWS_VERSION_MAJOR')) {
-            if ($appData = \getenv('APPDATA')) {
+            if (isset($_SERVER['APPDATA']) && $_SERVER['APPDATA']) {
                 // AppData gets preference
-                \array_unshift($dirs, \strtr($appData, '\\', '/') . '/PsySH');
+                \array_unshift($dirs, \strtr($_SERVER['APPDATA'], '\\', '/') . '/PsySH');
             }
 
-            $dir = \strtr(\getenv('HOMEDRIVE') . '/' . \getenv('HOMEPATH'), '\\', '/') . '/.psysh';
+            $dir = \strtr($_SERVER['HOMEDRIVE'] . '/' . $_SERVER['HOMEPATH'], '\\', '/') . '/.psysh';
             if (!\in_array($dir, $dirs)) {
                 $dirs[] = $dir;
             }
@@ -196,6 +197,31 @@ private static function getRealFiles(array $dirNames, array $fileNames)
         return $files;
     }
 
+    /**
+     * Ensure that $dir exists and is writable.
+     *
+     * Generates E_USER_NOTICE error if the directory is not writable or creatable.
+     *
+     * @param string $dir
+     *
+     * @return bool False if directory exists but is not writeable, or cannot be created
+     */
+    public static function ensureDir($dir)
+    {
+        if (!\is_dir($dir)) {
+            // Just try making it and see if it works
+            @\mkdir($dir, 0700, true);
+        }
+
+        if (!\is_dir($dir) || !\is_writable($dir)) {
+            \trigger_error(\sprintf('Writing to %s is not allowed.', $dir), E_USER_NOTICE);
+
+            return false;
+        }
+
+        return true;
+    }
+
     /**
      * Ensure that $file exists and is writable, make the parent directory if necessary.
      *
@@ -217,16 +243,7 @@ public static function touchFileWithMkdir($file)
             return false;
         }
 
-        $dir = \dirname($file);
-
-        if (!\is_dir($dir)) {
-            // Just try making it and see if it works
-            @\mkdir($dir, 0700, true);
-        }
-
-        if (!\is_dir($dir) || !\is_writable($dir)) {
-            \trigger_error(\sprintf('Writing to %s is not allowed.', $dir), E_USER_NOTICE);
-
+        if (!self::ensureDir(\dirname($file))) {
             return false;
         }
 
diff --git a/vendor/psy/psysh/src/Configuration.php b/vendor/psy/psysh/src/Configuration.php
index 67c76e7b3d..5236eee5ae 100644
--- a/vendor/psy/psysh/src/Configuration.php
+++ b/vendor/psy/psysh/src/Configuration.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -13,19 +13,19 @@
 
 use Psy\Exception\DeprecatedException;
 use Psy\Exception\RuntimeException;
+use Psy\ExecutionLoop\ProcessForker;
 use Psy\Output\OutputPager;
 use Psy\Output\ShellOutput;
-use Psy\Readline\GNUReadline;
-use Psy\Readline\HoaConsole;
-use Psy\Readline\Libedit;
-use Psy\Readline\Readline;
-use Psy\Readline\Transient;
 use Psy\TabCompletion\AutoCompleter;
 use Psy\VarDumper\Presenter;
 use Psy\VersionUpdater\Checker;
 use Psy\VersionUpdater\GitHubChecker;
 use Psy\VersionUpdater\IntervalChecker;
 use Psy\VersionUpdater\NoopChecker;
+use Symfony\Component\Console\Formatter\OutputFormatterStyle;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
 
 /**
  * The Psy Shell configuration.
@@ -36,6 +36,16 @@ class Configuration
     const COLOR_MODE_FORCED   = 'forced';
     const COLOR_MODE_DISABLED = 'disabled';
 
+    const INTERACTIVE_MODE_AUTO     = 'auto';
+    const INTERACTIVE_MODE_FORCED   = 'forced';
+    const INTERACTIVE_MODE_DISABLED = 'disabled';
+
+    const VERBOSITY_QUIET        = 'quiet';
+    const VERBOSITY_NORMAL       = 'normal';
+    const VERBOSITY_VERBOSE      = 'verbose';
+    const VERBOSITY_VERY_VERBOSE = 'very_verbose';
+    const VERBOSITY_DEBUG        = 'debug';
+
     private static $AVAILABLE_OPTIONS = [
         'codeCleaner',
         'colorMode',
@@ -45,10 +55,13 @@ class Configuration
         'eraseDuplicates',
         'errorLoggingLevel',
         'forceArrayIndexes',
+        'formatterStyles',
         'historySize',
+        'interactiveMode',
         'manualDbFile',
         'pager',
         'prompt',
+        'rawOutput',
         'requireSemicolons',
         'runtimeDir',
         'startupMessage',
@@ -58,6 +71,7 @@ class Configuration
         'useReadline',
         'useTabCompletion',
         'useUnicode',
+        'verbosity',
         'warnOnMultipleConfigs',
     ];
 
@@ -76,17 +90,23 @@ class Configuration
     private $useBracketedPaste;
     private $hasPcntl;
     private $usePcntl;
-    private $newCommands       = [];
+    private $newCommands = [];
+    private $pipedInput;
+    private $pipedOutput;
+    private $rawOutput = false;
     private $requireSemicolons = false;
     private $useUnicode;
     private $useTabCompletion;
     private $newMatchers = [];
     private $errorLoggingLevel = E_ALL;
     private $warnOnMultipleConfigs = false;
-    private $colorMode;
+    private $colorMode = self::COLOR_MODE_AUTO;
+    private $interactiveMode = self::INTERACTIVE_MODE_AUTO;
     private $updateCheck;
     private $startupMessage;
     private $forceArrayIndexes = false;
+    private $formatterStyles = [];
+    private $verbosity = self::VERBOSITY_NORMAL;
 
     // services
     private $readline;
@@ -109,13 +129,11 @@ class Configuration
      */
     public function __construct(array $config = [])
     {
-        $this->setColorMode(self::COLOR_MODE_AUTO);
-
         // explicit configFile option
         if (isset($config['configFile'])) {
             $this->configFile = $config['configFile'];
-        } elseif ($configFile = \getenv('PSYSH_CONFIG')) {
-            $this->configFile = $configFile;
+        } elseif (isset($_SERVER['PSYSH_CONFIG']) && $_SERVER['PSYSH_CONFIG']) {
+            $this->configFile = $_SERVER['PSYSH_CONFIG'];
         }
 
         // legacy baseDir option
@@ -132,6 +150,200 @@ public function __construct(array $config = [])
         $this->init();
     }
 
+    /**
+     * Construct a Configuration object from Symfony Console input.
+     *
+     * This is great for adding psysh-compatible command line options to framework- or app-specific
+     * wrappers.
+     *
+     * $input should already be bound to an appropriate InputDefinition (see self::getInputOptions
+     * if you want to build your own) before calling this method. It's not required, but things work
+     * a lot better if we do.
+     *
+     * @see self::getInputOptions
+     *
+     * @throws \InvalidArgumentException
+     *
+     * @param InputInterface $input
+     *
+     * @return self
+     */
+    public static function fromInput(InputInterface $input)
+    {
+        $config = new self(['configFile' => self::getConfigFileFromInput($input)]);
+
+        // Handle --color and --no-color (and --ansi and --no-ansi aliases)
+        if (self::getOptionFromInput($input, ['color', 'ansi'])) {
+            $config->setColorMode(self::COLOR_MODE_FORCED);
+        } elseif (self::getOptionFromInput($input, ['no-color', 'no-ansi'])) {
+            $config->setColorMode(self::COLOR_MODE_DISABLED);
+        }
+
+        // Handle verbosity options
+        if ($verbosity = self::getVerbosityFromInput($input)) {
+            $config->setVerbosity($verbosity);
+        }
+
+        // Handle interactive mode
+        if (self::getOptionFromInput($input, ['interactive', 'interaction'], ['-a', '-i'])) {
+            $config->setInteractiveMode(self::INTERACTIVE_MODE_FORCED);
+        } elseif (self::getOptionFromInput($input, ['no-interactive', 'no-interaction'], ['-n'])) {
+            $config->setInteractiveMode(self::INTERACTIVE_MODE_DISABLED);
+        }
+
+        // Handle --raw-output
+        // @todo support raw output with interactive input?
+        if (!$config->getInputInteractive()) {
+            if (self::getOptionFromInput($input, ['raw-output'], ['-r'])) {
+                $config->setRawOutput(true);
+            }
+        }
+
+        return $config;
+    }
+
+    /**
+     * Get the desired config file from the given input.
+     *
+     * @return string|null config file path, or null if none is specified
+     */
+    private static function getConfigFileFromInput(InputInterface $input)
+    {
+        // Best case, input is properly bound and validated.
+        if ($input->hasOption('config')) {
+            return $input->getOption('config');
+        }
+
+        return $input->getParameterOption('--config', null, true) ?: $input->getParameterOption('-c', null, true);
+    }
+
+    /**
+     * Get a boolean option from the given input.
+     *
+     * This helper allows fallback for unbound and unvalidated input. It's not perfect--for example,
+     * it can't deal with several short options squished together--but it's better than falling over
+     * any time someone gives us unbound input.
+     *
+     * @return bool true if the option (or an alias) is present
+     */
+    private static function getOptionFromInput(InputInterface $input, array $names, array $otherParams = [])
+    {
+        // Best case, input is properly bound and validated.
+        foreach ($names as $name) {
+            if ($input->hasOption($name) && $input->getOption($name)) {
+                return true;
+            }
+        }
+
+        foreach ($names as $name) {
+            $otherParams[] = '--' . $name;
+        }
+
+        foreach ($otherParams as $name) {
+            if ($input->hasParameterOption($name, true)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Get the desired verbosity from the given input.
+     *
+     * This is a bit more complext than the other options parsers. It handles `--quiet` and
+     * `--verbose`, along with their short aliases, and fancy things like `-vvv`.
+     *
+     * @return string|null configuration constant, or null if no verbosity option is specified
+     */
+    private static function getVerbosityFromInput(InputInterface $input)
+    {
+        // --quiet wins!
+        if (self::getOptionFromInput($input, ['quiet'], ['-q'])) {
+            return self::VERBOSITY_QUIET;
+        }
+
+        // Best case, input is properly bound and validated.
+        //
+        // Note that if the `--verbose` option is incorrectly defined as `VALUE_NONE` rather than
+        // `VALUE_OPTIONAL` (as it is in Symfony Console by default) it doesn't actually work with
+        // multiple verbosity levels as it claims.
+        //
+        // We can detect this by checking whether the the value === true, and fall back to unbound
+        // parsing for this option.
+        if ($input->hasOption('verbose') && $input->getOption('verbose') !== true) {
+            switch ($input->getOption('verbose')) {
+                case '-1':
+                    return self::VERBOSITY_QUIET;
+                case '0': // explicitly normal, overrides config file default
+                    return self::VERBOSITY_NORMAL;
+                case '1':
+                case null: // `--verbose` and `-v`
+                    return self::VERBOSITY_VERBOSE;
+                case '2':
+                case 'v': // `-vv`
+                    return self::VERBOSITY_VERY_VERBOSE;
+                case '3':
+                case 'vv': // `-vvv`
+                    return self::VERBOSITY_DEBUG;
+                default: // implicitly normal, config file default wins
+                    return;
+            }
+        }
+
+        // quiet and normal have to come before verbose, because it eats everything else.
+        if ($input->hasParameterOption('--verbose=-1', true) || $input->getParameterOption('--verbose', false, true) === '-1') {
+            return self::VERBOSITY_QUIET;
+        }
+
+        if ($input->hasParameterOption('--verbose=0', true) || $input->getParameterOption('--verbose', false, true) === '0') {
+            return self::VERBOSITY_NORMAL;
+        }
+
+        // `-vvv`, `-vv` and `-v` have to come in descending length order, because `hasParameterOption` matches prefixes.
+        if ($input->hasParameterOption('-vvv', true) || $input->hasParameterOption('--verbose=3', true) || $input->getParameterOption('--verbose', false, true) === '3') {
+            return self::VERBOSITY_DEBUG;
+        }
+
+        if ($input->hasParameterOption('-vv', true) || $input->hasParameterOption('--verbose=2', true) || $input->getParameterOption('--verbose', false, true) === '2') {
+            return self::VERBOSITY_VERY_VERBOSE;
+        }
+
+        if ($input->hasParameterOption('-v', true) || $input->hasParameterOption('--verbose=1', true) || $input->hasParameterOption('--verbose', true)) {
+            return self::VERBOSITY_VERBOSE;
+        }
+    }
+
+    /**
+     * Get a list of input options expected when initializing Configuration via input.
+     *
+     * @see self::fromInput
+     *
+     * @return InputOption[]
+     */
+    public static function getInputOptions()
+    {
+        return [
+            new InputOption('config',         'c',        InputOption::VALUE_REQUIRED, 'Use an alternate PsySH config file location.'),
+            new InputOption('cwd',            null,       InputOption::VALUE_REQUIRED, 'Use an alternate working directory.'),
+
+            new InputOption('color',          null,       InputOption::VALUE_NONE,     'Force colors in output.'),
+            new InputOption('no-color',       null,       InputOption::VALUE_NONE,     'Disable colors in output.'),
+            // --ansi and --no-ansi aliases to match Symfony, Composer, etc.
+            new InputOption('ansi',           null,       InputOption::VALUE_NONE,     'Force colors in output.'),
+            new InputOption('no-ansi',        null,       InputOption::VALUE_NONE,     'Disable colors in output.'),
+
+            new InputOption('quiet',          'q',        InputOption::VALUE_NONE,     'Shhhhhh.'),
+            new InputOption('verbose',        'v|vv|vvv', InputOption::VALUE_OPTIONAL, 'Increase the verbosity of messages.', '0'),
+            new InputOption('interactive',    'i|a',      InputOption::VALUE_NONE,     'Force PsySH to run in interactive mode.'),
+            new InputOption('no-interactive', 'n',        InputOption::VALUE_NONE,     'Run PsySH without interactive input. Requires input from stdin.'),
+            // --interaction and --no-interaction aliases for compatibility with Symfony, Composer, etc
+            new InputOption('interaction',    null,       InputOption::VALUE_NONE,     'Force PsySH to run in interactive mode.'),
+            new InputOption('no-interaction', null,       InputOption::VALUE_NONE,     'Run PsySH without interactive input. Requires input from stdin.'),
+            new InputOption('raw-output',     'r',        InputOption::VALUE_NONE,     'Print var_export-style return values (for non-interactive input)'),
+        ];
+    }
+
     /**
      * Initialize the configuration.
      *
@@ -146,7 +358,7 @@ public function init()
     {
         // feature detection
         $this->hasReadline = \function_exists('readline');
-        $this->hasPcntl    = \function_exists('pcntl_signal') && \function_exists('posix_getpid');
+        $this->hasPcntl    = ProcessForker::isSupported();
 
         if ($configFile = $this->getConfigFile()) {
             $this->loadConfigFile($configFile);
@@ -181,7 +393,7 @@ public function getConfigFile()
 
         if (!empty($files)) {
             if ($this->warnOnMultipleConfigs && \count($files) > 1) {
-                $msg = \sprintf('Multiple configuration files found: %s. Using %s', \implode($files, ', '), $files[0]);
+                $msg = \sprintf('Multiple configuration files found: %s. Using %s', \implode(', ', $files), $files[0]);
                 \trigger_error($msg, E_USER_NOTICE);
             }
 
@@ -251,12 +463,16 @@ public function loadConfig(array $options)
      * The config file may directly manipulate the configuration, or may return
      * an array of options which will be merged with the current configuration.
      *
-     * @throws \InvalidArgumentException if the config file returns a non-array result
+     * @throws \InvalidArgumentException if the config file does not exist or returns a non-array result
      *
      * @param string $file
      */
     public function loadConfigFile($file)
     {
+        if (!\is_file($file)) {
+            throw new \InvalidArgumentException(\sprintf('Invalid configuration file specified, %s does not exist', $file));
+        }
+
         $__psysh_config_file__ = $file;
         $load = function ($config) use ($__psysh_config_file__) {
             $result = require $__psysh_config_file__;
@@ -360,7 +576,9 @@ public function getRuntimeDir()
         }
 
         if (!\is_dir($this->runtimeDir)) {
-            \mkdir($this->runtimeDir, 0700, true);
+            if (!@\mkdir($this->runtimeDir, 0700, true)) {
+                throw new RuntimeException(sprintf('Unable to create PsySH runtime directory. Make sure PHP is able to write to %s in order to continue.', dirname($this->runtimeDir)));
+            }
         }
 
         return $this->runtimeDir;
@@ -394,7 +612,7 @@ public function getHistoryFile()
 
         if (!empty($files)) {
             if ($this->warnOnMultipleConfigs && \count($files) > 1) {
-                $msg = \sprintf('Multiple history files found: %s. Using %s', \implode($files, ', '), $files[0]);
+                $msg = \sprintf('Multiple history files found: %s. Using %s', \implode(', ', $files), $files[0]);
                 \trigger_error($msg, E_USER_NOTICE);
             }
 
@@ -516,9 +734,9 @@ public function useReadline()
     /**
      * Set the Psy Shell readline service.
      *
-     * @param Readline $readline
+     * @param Readline\Readline $readline
      */
-    public function setReadline(Readline $readline)
+    public function setReadline(Readline\Readline $readline)
     {
         $this->readline = $readline;
     }
@@ -532,7 +750,7 @@ public function setReadline(Readline $readline)
      *  * Libedit
      *  * A transient array-based readline emulation.
      *
-     * @return Readline
+     * @return Readline\Readline
      */
     public function getReadline()
     {
@@ -558,16 +776,16 @@ public function getReadline()
     private function getReadlineClass()
     {
         if ($this->useReadline()) {
-            if (GNUReadline::isSupported()) {
-                return 'Psy\Readline\GNUReadline';
-            } elseif (Libedit::isSupported()) {
-                return 'Psy\Readline\Libedit';
-            } elseif (HoaConsole::isSupported()) {
-                return 'Psy\Readline\HoaConsole';
+            if (Readline\GNUReadline::isSupported()) {
+                return Readline\GNUReadline::class;
+            } elseif (Readline\Libedit::isSupported()) {
+                return Readline\Libedit::class;
+            } elseif (Readline\HoaConsole::isSupported()) {
+                return Readline\HoaConsole::class;
             }
         }
 
-        return 'Psy\Readline\Transient';
+        return Readline\Transient::class;
     }
 
     /**
@@ -600,7 +818,7 @@ public function setUseBracketedPaste($useBracketedPaste)
     public function useBracketedPaste()
     {
         // For now, only the GNU readline implementation supports bracketed paste.
-        $supported = ($this->getReadlineClass() === 'Psy\Readline\GNUReadline');
+        $supported = ($this->getReadlineClass() === Readline\GNUReadline::class);
 
         return $supported && $this->useBracketedPaste;
 
@@ -641,6 +859,29 @@ public function usePcntl()
         return isset($this->usePcntl) ? ($this->hasPcntl && $this->usePcntl) : $this->hasPcntl;
     }
 
+    /**
+     * Check whether to use raw output.
+     *
+     * This is set by the --raw-output (-r) flag, and really only makes sense
+     * when non-interactive, e.g. executing stdin.
+     *
+     * @return bool true if raw output is enabled
+     */
+    public function rawOutput()
+    {
+        return $this->rawOutput;
+    }
+
+    /**
+     * Enable or disable raw output.
+     *
+     * @param bool $rawOutput
+     */
+    public function setRawOutput($rawOutput)
+    {
+        $this->rawOutput = (bool) $rawOutput;
+    }
+
     /**
      * Enable or disable strict requirement of semicolons.
      *
@@ -714,8 +955,7 @@ public function setErrorLoggingLevel($errorLoggingLevel)
      * Get the current error logging level.
      *
      * By default, PsySH will automatically log all errors, regardless of the
-     * current `error_reporting` level. Additionally, if the `error_reporting`
-     * level warrants, an ErrorException will be thrown.
+     * current `error_reporting` level.
      *
      * Set `errorLoggingLevel` to 0 to prevent logging non-thrown errors. Set it
      * to any valid error_reporting value to log only errors which match that
@@ -807,14 +1047,17 @@ public function getTabCompletion()
     public function setOutput(ShellOutput $output)
     {
         $this->output = $output;
+        $this->pipedOutput = null; // Reset cached pipe info
+        $this->applyFormatterStyles();
     }
 
     /**
      * Get a Shell Output service instance.
      *
      * If none has been explicitly provided, this will create a new instance
-     * with VERBOSITY_NORMAL and the output page supplied by self::getPager
+     * with the configured verbosity and output pager supplied by self::getPager
      *
+     * @see self::verbosity
      * @see self::getPager
      *
      * @return ShellOutput
@@ -822,12 +1065,20 @@ public function setOutput(ShellOutput $output)
     public function getOutput()
     {
         if (!isset($this->output)) {
-            $this->output = new ShellOutput(
-                ShellOutput::VERBOSITY_NORMAL,
-                $this->getOutputDecorated(),
+            $this->setOutput(new ShellOutput(
+                $this->getOutputVerbosity(),
+                null,
                 null,
                 $this->getPager()
-            );
+            ));
+
+            // This is racy because `getOutputDecorated` needs access to the
+            // output stream to figure out if it's piped or not, so create it
+            // first, then update after we have a stream.
+            $decorated = $this->getOutputDecorated();
+            if ($decorated !== null) {
+                $this->output->setDecorated($decorated);
+            }
         }
 
         return $this->output;
@@ -836,16 +1087,34 @@ public function getOutput()
     /**
      * Get the decoration (i.e. color) setting for the Shell Output service.
      *
-     * @return null|bool 3-state boolean corresponding to the current color mode
+     * @return bool|null 3-state boolean corresponding to the current color mode
      */
     public function getOutputDecorated()
     {
-        if ($this->colorMode() === self::COLOR_MODE_AUTO) {
-            return;
-        } elseif ($this->colorMode() === self::COLOR_MODE_FORCED) {
-            return true;
-        } elseif ($this->colorMode() === self::COLOR_MODE_DISABLED) {
-            return false;
+        switch ($this->colorMode()) {
+            case self::COLOR_MODE_AUTO:
+                return $this->outputIsPiped() ? false : null;
+            case self::COLOR_MODE_FORCED:
+                return true;
+            case self::COLOR_MODE_DISABLED:
+                return false;
+        }
+    }
+
+    /**
+     * Get the interactive setting for shell input.
+     *
+     * @return bool
+     */
+    public function getInputInteractive()
+    {
+        switch ($this->interactiveMode()) {
+            case self::INTERACTIVE_MODE_AUTO:
+                return !$this->inputIsPiped();
+            case self::INTERACTIVE_MODE_FORCED:
+                return true;
+            case self::INTERACTIVE_MODE_DISABLED:
+                return false;
         }
     }
 
@@ -1034,7 +1303,7 @@ public function getManualDbFile()
         $files = ConfigPaths::getDataFiles(['php_manual.sqlite'], $this->dataDir);
         if (!empty($files)) {
             if ($this->warnOnMultipleConfigs && \count($files) > 1) {
-                $msg = \sprintf('Multiple manual database files found: %s. Using %s', \implode($files, ', '), $files[0]);
+                $msg = \sprintf('Multiple manual database files found: %s. Using %s', \implode(', ', $files), $files[0]);
                 \trigger_error($msg, E_USER_NOTICE);
             }
 
@@ -1133,11 +1402,12 @@ public function setColorMode($colorMode)
             self::COLOR_MODE_DISABLED,
         ];
 
-        if (\in_array($colorMode, $validColorModes)) {
-            $this->colorMode = $colorMode;
-        } else {
+        if (!\in_array($colorMode, $validColorModes)) {
+            // @todo Fix capitalization for 0.11.0
             throw new \InvalidArgumentException('invalid color mode: ' . $colorMode);
         }
+
+        $this->colorMode = $colorMode;
     }
 
     /**
@@ -1150,6 +1420,36 @@ public function colorMode()
         return $this->colorMode;
     }
 
+    /**
+     * Set the shell's interactive mode.
+     *
+     * @param string $interactiveMode
+     */
+    public function setInteractiveMode($interactiveMode)
+    {
+        $validInteractiveModes = [
+            self::INTERACTIVE_MODE_AUTO,
+            self::INTERACTIVE_MODE_FORCED,
+            self::INTERACTIVE_MODE_DISABLED,
+        ];
+
+        if (!\in_array($interactiveMode, $validInteractiveModes)) {
+            throw new \InvalidArgumentException('Invalid interactive mode: ' . $interactiveMode);
+        }
+
+        $this->interactiveMode = $interactiveMode;
+    }
+
+    /**
+     * Get the current interactive mode.
+     *
+     * @return string
+     */
+    public function interactiveMode()
+    {
+        return $this->interactiveMode;
+    }
+
     /**
      * Set an update checker service instance.
      *
@@ -1212,7 +1512,7 @@ public function getUpdateCheck()
     /**
      * Set the update check interval.
      *
-     * @throws \InvalidArgumentDescription if the update check interval is unknown
+     * @throws \InvalidArgumentException if the update check interval is unknown
      *
      * @param string $interval
      */
@@ -1227,6 +1527,7 @@ public function setUpdateCheck($interval)
         ];
 
         if (!\in_array($interval, $validIntervals)) {
+            // @todo Fix capitalization for 0.11.0
             throw new \InvalidArgumentException('invalid update check interval: ' . $interval);
         }
 
@@ -1304,4 +1605,157 @@ public function setForceArrayIndexes($forceArrayIndexes)
     {
         $this->forceArrayIndexes = $forceArrayIndexes;
     }
+
+    /**
+     * Set the shell output formatter styles.
+     *
+     * Accepts a map from style name to [fg, bg, options], for example:
+     *
+     *     [
+     *         'error' => ['white', 'red', ['bold']],
+     *         'warning' => ['black', 'yellow'],
+     *     ]
+     *
+     * Foreground, background or options can be null, or even omitted entirely.
+     *
+     * @see ShellOutput::initFormatters
+     *
+     * @param array $formatterStyles
+     */
+    public function setFormatterStyles(array $formatterStyles)
+    {
+        foreach ($formatterStyles as $name => $style) {
+            list($fg, $bg, $opts) = \array_pad($style, 3, null);
+            $this->formatterStyles[$name] = new OutputFormatterStyle($fg ?: null, $bg ?: null, $opts ?: []);
+        }
+
+        if (isset($this->output)) {
+            $this->applyFormatterStyles();
+        }
+    }
+
+    /**
+     * Internal method for applying output formatter style customization.
+     *
+     * This is called on initialization of the shell output, and again if the
+     * formatter styles config is updated.
+     */
+    private function applyFormatterStyles()
+    {
+        $formatter = $this->output->getFormatter();
+        foreach ($this->formatterStyles as $name => $style) {
+            $formatter->setStyle($name, $style);
+        }
+    }
+
+    /**
+     * Get the configured output verbosity.
+     *
+     * @return string
+     */
+    public function verbosity()
+    {
+        return $this->verbosity;
+    }
+
+    /**
+     * Set the shell output verbosity.
+     *
+     * Accepts OutputInterface verbosity constants.
+     *
+     * @param string $verbosity
+     */
+    public function setVerbosity($verbosity)
+    {
+        $validVerbosityLevels = [
+            self::VERBOSITY_QUIET,
+            self::VERBOSITY_NORMAL,
+            self::VERBOSITY_VERBOSE,
+            self::VERBOSITY_VERY_VERBOSE,
+            self::VERBOSITY_DEBUG,
+        ];
+
+        if (!\in_array($verbosity, $validVerbosityLevels)) {
+            throw new \InvalidArgumentException('Invalid verbosity level: ' . $verbosity);
+        }
+
+        $this->verbosity = $verbosity;
+
+        if (isset($this->output)) {
+            $this->output->setVerbosity($this->getOutputVerbosity());
+        }
+    }
+
+    /**
+     * Map the verbosity configuration to OutputInterface verbosity constants.
+     *
+     * @return int OutputInterface verbosity level
+     */
+    public function getOutputVerbosity()
+    {
+        switch ($this->verbosity()) {
+            case self::VERBOSITY_QUIET:
+                return OutputInterface::VERBOSITY_QUIET;
+            case self::VERBOSITY_VERBOSE:
+                return OutputInterface::VERBOSITY_VERBOSE;
+            case self::VERBOSITY_VERY_VERBOSE:
+                return OutputInterface::VERBOSITY_VERY_VERBOSE;
+            case self::VERBOSITY_DEBUG:
+                return OutputInterface::VERBOSITY_DEBUG;
+            case self::VERBOSITY_NORMAL:
+            default:
+                return OutputInterface::VERBOSITY_NORMAL;
+        }
+    }
+
+    /**
+     * Guess whether stdin is piped.
+     *
+     * This is mostly useful for deciding whether to use non-interactive mode.
+     *
+     * @return bool
+     */
+    public function inputIsPiped()
+    {
+        if ($this->pipedInput === null) {
+            $this->pipedInput = \defined('STDIN') && static::looksLikeAPipe(\STDIN);
+        }
+
+        return $this->pipedInput;
+    }
+
+    /**
+     * Guess whether shell output is piped.
+     *
+     * This is mostly useful for deciding whether to use non-decorated output.
+     *
+     * @return bool
+     */
+    public function outputIsPiped()
+    {
+        if ($this->pipedOutput === null) {
+            $this->pipedOutput = static::looksLikeAPipe($this->getOutput()->getStream());
+        }
+
+        return $this->pipedOutput;
+    }
+
+    /**
+     * Guess whether an input or output stream is piped.
+     *
+     * @param resource|int $stream
+     *
+     * @return bool
+     */
+    private static function looksLikeAPipe($stream)
+    {
+        if (\function_exists('posix_isatty')) {
+            return !\posix_isatty($stream);
+        }
+
+        $stat = \fstat($stream);
+        $mode = $stat['mode'] & 0170000;
+
+        return $mode === 0010000 || $mode === 0040000 || $mode === 0100000 || $mode === 0120000;
+    }
 }
diff --git a/vendor/psy/psysh/src/ConsoleColorFactory.php b/vendor/psy/psysh/src/ConsoleColorFactory.php
index 76ad3b5123..9cfbf40e37 100644
--- a/vendor/psy/psysh/src/ConsoleColorFactory.php
+++ b/vendor/psy/psysh/src/ConsoleColorFactory.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -12,21 +12,18 @@
 namespace Psy;
 
 use JakubOnderka\PhpConsoleColor\ConsoleColor;
-use JakubOnderka\PhpConsoleHighlighter\Highlighter;
 
 /**
- * Builds `ConsoleColor` instances configured according to the given color mode.
+ * @deprecated Nothing should use this anymore
  */
 class ConsoleColorFactory
 {
-    private $colorMode;
-
     /**
      * @param string $colorMode
      */
     public function __construct($colorMode)
     {
-        $this->colorMode = $colorMode;
+        // Nothing to see here
     }
 
     /**
@@ -37,46 +34,6 @@ public function __construct($colorMode)
      */
     public function getConsoleColor()
     {
-        if ($this->colorMode === Configuration::COLOR_MODE_AUTO) {
-            return $this->getDefaultConsoleColor();
-        } elseif ($this->colorMode === Configuration::COLOR_MODE_FORCED) {
-            return $this->getForcedConsoleColor();
-        } elseif ($this->colorMode === Configuration::COLOR_MODE_DISABLED) {
-            return $this->getDisabledConsoleColor();
-        }
-    }
-
-    private function getDefaultConsoleColor()
-    {
-        $color = new ConsoleColor();
-        $color->addTheme(Highlighter::LINE_NUMBER, ['blue']);
-        $color->addTheme(Highlighter::TOKEN_KEYWORD, ['yellow']);
-        $color->addTheme(Highlighter::TOKEN_STRING, ['green']);
-        $color->addTheme(Highlighter::TOKEN_COMMENT, ['dark_gray']);
-
-        return $color;
-    }
-
-    private function getForcedConsoleColor()
-    {
-        $color = $this->getDefaultConsoleColor();
-        $color->setForceStyle(true);
-
-        return $color;
-    }
-
-    private function getDisabledConsoleColor()
-    {
-        $color = new ConsoleColor();
-
-        $color->addTheme(Highlighter::TOKEN_STRING, ['none']);
-        $color->addTheme(Highlighter::TOKEN_COMMENT, ['none']);
-        $color->addTheme(Highlighter::TOKEN_KEYWORD, ['none']);
-        $color->addTheme(Highlighter::TOKEN_DEFAULT, ['none']);
-        $color->addTheme(Highlighter::TOKEN_HTML, ['none']);
-        $color->addTheme(Highlighter::ACTUAL_LINE_MARK, ['none']);
-        $color->addTheme(Highlighter::LINE_NUMBER, ['none']);
-
-        return $color;
+        return new ConsoleColor(); // /shrug
     }
 }
diff --git a/vendor/psy/psysh/src/Context.php b/vendor/psy/psysh/src/Context.php
index 104dc8ffa6..661ff0bc09 100644
--- a/vendor/psy/psysh/src/Context.php
+++ b/vendor/psy/psysh/src/Context.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -38,7 +38,7 @@ class Context
     /**
      * Get a context variable.
      *
-     * @throws InvalidArgumentException If the variable is not found in the current context
+     * @throws \InvalidArgumentException If the variable is not found in the current context
      *
      * @param string $name
      *
@@ -182,7 +182,7 @@ public function setLastException(\Exception $e)
      *
      * @throws \InvalidArgumentException If no Exception has been caught
      *
-     * @return null|\Exception
+     * @return \Exception|null
      */
     public function getLastException()
     {
@@ -208,7 +208,7 @@ public function setLastStdout($lastStdout)
      *
      * @throws \InvalidArgumentException If no output has happened yet
      *
-     * @return null|string
+     * @return string|null
      */
     public function getLastStdout()
     {
diff --git a/vendor/psy/psysh/src/ContextAware.php b/vendor/psy/psysh/src/ContextAware.php
index 748f13aa3e..121d4db18d 100644
--- a/vendor/psy/psysh/src/ContextAware.php
+++ b/vendor/psy/psysh/src/ContextAware.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Exception/BreakException.php b/vendor/psy/psysh/src/Exception/BreakException.php
index 2200e78dc9..6efc7acb77 100644
--- a/vendor/psy/psysh/src/Exception/BreakException.php
+++ b/vendor/psy/psysh/src/Exception/BreakException.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Exception/DeprecatedException.php b/vendor/psy/psysh/src/Exception/DeprecatedException.php
index 8ac0104b9f..d06608ebb3 100644
--- a/vendor/psy/psysh/src/Exception/DeprecatedException.php
+++ b/vendor/psy/psysh/src/Exception/DeprecatedException.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Exception/ErrorException.php b/vendor/psy/psysh/src/Exception/ErrorException.php
index 822fa92758..ae7bd03f1e 100644
--- a/vendor/psy/psysh/src/Exception/ErrorException.php
+++ b/vendor/psy/psysh/src/Exception/ErrorException.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -21,12 +21,12 @@ class ErrorException extends \ErrorException implements Exception
     /**
      * Construct a Psy ErrorException.
      *
-     * @param string    $message  (default: "")
-     * @param int       $code     (default: 0)
-     * @param int       $severity (default: 1)
-     * @param string    $filename (default: null)
-     * @param int       $lineno   (default: null)
-     * @param Exception $previous (default: null)
+     * @param string         $message  (default: "")
+     * @param int            $code     (default: 0)
+     * @param int            $severity (default: 1)
+     * @param string|null    $filename (default: null)
+     * @param int|null       $lineno   (default: null)
+     * @param Exception|null $previous (default: null)
      */
     public function __construct($message = '', $code = 0, $severity = 1, $filename = null, $lineno = null, $previous = null)
     {
@@ -86,7 +86,7 @@ public function getRawMessage()
      *
      * This allows us to:
      *
-     *     set_error_handler(array('Psy\Exception\ErrorException', 'throwException'));
+     *     set_error_handler([ErrorException::class, 'throwException']);
      *
      * @throws ErrorException
      *
diff --git a/vendor/psy/psysh/src/Exception/Exception.php b/vendor/psy/psysh/src/Exception/Exception.php
index de68954793..4b02d1326c 100644
--- a/vendor/psy/psysh/src/Exception/Exception.php
+++ b/vendor/psy/psysh/src/Exception/Exception.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Exception/FatalErrorException.php b/vendor/psy/psysh/src/Exception/FatalErrorException.php
index 48a4e2b81b..6642264e2e 100644
--- a/vendor/psy/psysh/src/Exception/FatalErrorException.php
+++ b/vendor/psy/psysh/src/Exception/FatalErrorException.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -21,12 +21,12 @@ class FatalErrorException extends \ErrorException implements Exception
     /**
      * Create a fatal error.
      *
-     * @param string     $message  (default: "")
-     * @param int        $code     (default: 0)
-     * @param int        $severity (default: 1)
-     * @param string     $filename (default: null)
-     * @param int        $lineno   (default: null)
-     * @param \Exception $previous (default: null)
+     * @param string          $message  (default: "")
+     * @param int             $code     (default: 0)
+     * @param int             $severity (default: 1)
+     * @param string|null     $filename (default: null)
+     * @param int|null        $lineno   (default: null)
+     * @param \Exception|null $previous (default: null)
      */
     public function __construct($message = '', $code = 0, $severity = 1, $filename = null, $lineno = null, $previous = null)
     {
diff --git a/vendor/psy/psysh/src/Exception/ParseErrorException.php b/vendor/psy/psysh/src/Exception/ParseErrorException.php
index cb6380e6b9..cfc5f70ca1 100644
--- a/vendor/psy/psysh/src/Exception/ParseErrorException.php
+++ b/vendor/psy/psysh/src/Exception/ParseErrorException.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Exception/RuntimeException.php b/vendor/psy/psysh/src/Exception/RuntimeException.php
index 09e68483e5..31890517e2 100644
--- a/vendor/psy/psysh/src/Exception/RuntimeException.php
+++ b/vendor/psy/psysh/src/Exception/RuntimeException.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -21,9 +21,9 @@ class RuntimeException extends \RuntimeException implements Exception
     /**
      * Make this bad boy.
      *
-     * @param string     $message  (default: "")
-     * @param int        $code     (default: 0)
-     * @param \Exception $previous (default: null)
+     * @param string          $message  (default: "")
+     * @param int             $code     (default: 0)
+     * @param \Exception|null $previous (default: null)
      */
     public function __construct($message = '', $code = 0, \Exception $previous = null)
     {
diff --git a/vendor/psy/psysh/src/Exception/ThrowUpException.php b/vendor/psy/psysh/src/Exception/ThrowUpException.php
index b0ca490a77..692c4a3c67 100644
--- a/vendor/psy/psysh/src/Exception/ThrowUpException.php
+++ b/vendor/psy/psysh/src/Exception/ThrowUpException.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Exception/TypeErrorException.php b/vendor/psy/psysh/src/Exception/TypeErrorException.php
index b6894983f6..40dccf47e5 100644
--- a/vendor/psy/psysh/src/Exception/TypeErrorException.php
+++ b/vendor/psy/psysh/src/Exception/TypeErrorException.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Exception/UnexpectedTargetException.php b/vendor/psy/psysh/src/Exception/UnexpectedTargetException.php
new file mode 100644
index 0000000000..fd23305086
--- /dev/null
+++ b/vendor/psy/psysh/src/Exception/UnexpectedTargetException.php
@@ -0,0 +1,37 @@
+<?php
+
+/*
+ * This file is part of Psy Shell.
+ *
+ * (c) 2012-2020 Justin Hileman
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Psy\Exception;
+
+class UnexpectedTargetException extends RuntimeException
+{
+    private $target;
+
+    /**
+     * @param mixed           $target
+     * @param string          $message  (default: "")
+     * @param int             $code     (default: 0)
+     * @param \Exception|null $previous (default: null)
+     */
+    public function __construct($target, $message = '', $code = 0, \Exception $previous = null)
+    {
+        $this->target = $target;
+        parent::__construct($message, $code, $previous);
+    }
+
+    /**
+     * @return mixed
+     */
+    public function getTarget()
+    {
+        return $this->target;
+    }
+}
diff --git a/vendor/psy/psysh/src/ExecutionClosure.php b/vendor/psy/psysh/src/ExecutionClosure.php
index 5c7cd25ac7..bebec13492 100644
--- a/vendor/psy/psysh/src/ExecutionClosure.php
+++ b/vendor/psy/psysh/src/ExecutionClosure.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -37,10 +37,9 @@ public function __construct(Shell $__psysh__)
                 \set_error_handler([$__psysh__, 'handleError']);
 
                 // Evaluate the current code buffer
-                $_ = eval($__psysh__->onExecute($__psysh__->flushCode() ?: ExecutionClosure::NOOP_INPUT));
+                $_ = eval($__psysh__->onExecute($__psysh__->flushCode() ?: self::NOOP_INPUT));
             } catch (\Throwable $_e) {
                 // Clean up on our way out.
-                \restore_error_handler();
                 if (\ob_get_level() > 0) {
                     \ob_end_clean();
                 }
@@ -48,17 +47,16 @@ public function __construct(Shell $__psysh__)
                 throw $_e;
             } catch (\Exception $_e) {
                 // Clean up on our way out.
-                \restore_error_handler();
                 if (\ob_get_level() > 0) {
                     \ob_end_clean();
                 }
 
                 throw $_e;
+            } finally {
+                // Won't be needing this anymore
+                \restore_error_handler();
             }
 
-            // Won't be needing this anymore
-            \restore_error_handler();
-
             // Flush stdout (write to shell output, plus save to magic variable)
             \ob_end_flush();
 
@@ -72,21 +70,18 @@ public function __construct(Shell $__psysh__)
     /**
      * Set the closure instance.
      *
-     * @param Shell    $psysh
+     * @param Shell    $shell
      * @param \Closure $closure
      */
     protected function setClosure(Shell $shell, \Closure $closure)
     {
-        if (self::shouldBindClosure()) {
-            $that = $shell->getBoundObject();
-            if (\is_object($that)) {
-                $closure = $closure->bindTo($that, \get_class($that));
-            } else {
-                $closure = $closure->bindTo(null, $shell->getBoundClass());
-            }
-        }
+        $that = $shell->getBoundObject();
 
-        $this->closure = $closure;
+        if (\is_object($that)) {
+            $this->closure = $closure->bindTo($that, \get_class($that));
+        } else {
+            $this->closure = $closure->bindTo(null, $shell->getBoundClass());
+        }
     }
 
     /**
@@ -100,20 +95,4 @@ public function execute()
 
         return $closure();
     }
-
-    /**
-     * Decide whether to bind the execution closure.
-     *
-     * @return bool
-     */
-    protected static function shouldBindClosure()
-    {
-        // skip binding on HHVM < 3.5.0
-        // see https://github.com/facebook/hhvm/issues/1203
-        if (\defined('HHVM_VERSION')) {
-            return \version_compare(HHVM_VERSION, '3.5.0', '>=');
-        }
-
-        return true;
-    }
 }
diff --git a/vendor/psy/psysh/src/ExecutionLoop.php b/vendor/psy/psysh/src/ExecutionLoop.php
deleted file mode 100644
index 2e4307cb77..0000000000
--- a/vendor/psy/psysh/src/ExecutionLoop.php
+++ /dev/null
@@ -1,67 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy;
-
-use Psy\Exception\ErrorException;
-
-/**
- * The Psy Shell execution loop.
- */
-class ExecutionLoop
-{
-    /**
-     * Run the execution loop.
-     *
-     * @throws ThrowUpException if thrown by the `throw-up` command
-     *
-     * @param Shell $shell
-     */
-    public function run(Shell $shell)
-    {
-        $this->loadIncludes($shell);
-
-        $closure = new ExecutionLoopClosure($shell);
-        $closure->execute();
-    }
-
-    /**
-     * Load user-defined includes.
-     *
-     * @param Shell $shell
-     */
-    protected function loadIncludes(Shell $shell)
-    {
-        // Load user-defined includes
-        $load = function (Shell $__psysh__) {
-            \set_error_handler([$__psysh__, 'handleError']);
-            foreach ($__psysh__->getIncludes() as $__psysh_include__) {
-                try {
-                    include $__psysh_include__;
-                } catch (\Error $_e) {
-                    $__psysh__->writeException(ErrorException::fromError($_e));
-                } catch (\Exception $_e) {
-                    $__psysh__->writeException($_e);
-                }
-            }
-            \restore_error_handler();
-            unset($__psysh_include__);
-
-            // Override any new local variables with pre-defined scope variables
-            \extract($__psysh__->getScopeVariables(false));
-
-            // ... then add the whole mess of variables back.
-            $__psysh__->setScopeVariables(\get_defined_vars());
-        };
-
-        $load($shell);
-    }
-}
diff --git a/vendor/psy/psysh/src/ExecutionLoop/AbstractListener.php b/vendor/psy/psysh/src/ExecutionLoop/AbstractListener.php
index 3617fa2438..0bfa3fdf5d 100644
--- a/vendor/psy/psysh/src/ExecutionLoop/AbstractListener.php
+++ b/vendor/psy/psysh/src/ExecutionLoop/AbstractListener.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/ExecutionLoop/Listener.php b/vendor/psy/psysh/src/ExecutionLoop/Listener.php
index 3886a208bc..5bc03c1968 100644
--- a/vendor/psy/psysh/src/ExecutionLoop/Listener.php
+++ b/vendor/psy/psysh/src/ExecutionLoop/Listener.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/ExecutionLoop/ProcessForker.php b/vendor/psy/psysh/src/ExecutionLoop/ProcessForker.php
index 4704795942..5f7fd96962 100644
--- a/vendor/psy/psysh/src/ExecutionLoop/ProcessForker.php
+++ b/vendor/psy/psysh/src/ExecutionLoop/ProcessForker.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -26,6 +26,19 @@ class ProcessForker extends AbstractListener
     private $savegame;
     private $up;
 
+    private static $pcntlFunctions = [
+        'pcntl_fork',
+        'pcntl_signal_dispatch',
+        'pcntl_signal',
+        'pcntl_waitpid',
+        'pcntl_wexitstatus',
+    ];
+
+    private static $posixFunctions = [
+        'posix_getpid',
+        'posix_kill',
+    ];
+
     /**
      * Process forker is supported if pcntl and posix extensions are available.
      *
@@ -33,7 +46,56 @@ class ProcessForker extends AbstractListener
      */
     public static function isSupported()
     {
-        return \function_exists('pcntl_signal') && \function_exists('posix_getpid');
+        return self::isPcntlSupported() && !self::disabledPcntlFunctions() && self::isPosixSupported() && !self::disabledPosixFunctions();
+    }
+
+    /**
+     * Verify that all required pcntl functions are, in fact, available.
+     */
+    public static function isPcntlSupported()
+    {
+        foreach (self::$pcntlFunctions as $func) {
+            if (!\function_exists($func)) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Check whether required pcntl functions are disabled.
+     */
+    public static function disabledPcntlFunctions()
+    {
+        return self::checkDisabledFunctions(self::$pcntlFunctions);
+    }
+
+    /**
+     * Verify that all required posix functions are, in fact, available.
+     */
+    public static function isPosixSupported()
+    {
+        foreach (self::$posixFunctions as $func) {
+            if (!\function_exists($func)) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Check whether required posix functions are disabled.
+     */
+    public static function disabledPosixFunctions()
+    {
+        return self::checkDisabledFunctions(self::$posixFunctions);
+    }
+
+    private static function checkDisabledFunctions(array $functions)
+    {
+        return \array_values(\array_intersect($functions, \array_map('strtolower', \array_map('trim', \explode(',', \ini_get('disable_functions'))))));
     }
 
     /**
@@ -95,8 +157,11 @@ public function beforeRun(Shell $shell)
         }
 
         // This is the child process. It's going to do all the work.
-        if (\function_exists('setproctitle')) {
-            setproctitle('psysh (loop)');
+        if (!@\cli_set_process_title('psysh (loop)')) {
+            // Fall back to `setproctitle` if that wasn't succesful.
+            if (\function_exists('setproctitle')) {
+                @\setproctitle('psysh (loop)');
+            }
         }
 
         // We won't be needing this one.
diff --git a/vendor/psy/psysh/src/ExecutionLoop/RunkitReloader.php b/vendor/psy/psysh/src/ExecutionLoop/RunkitReloader.php
index d80480b0af..de10aa0412 100644
--- a/vendor/psy/psysh/src/ExecutionLoop/RunkitReloader.php
+++ b/vendor/psy/psysh/src/ExecutionLoop/RunkitReloader.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/ExecutionLoopClosure.php b/vendor/psy/psysh/src/ExecutionLoopClosure.php
index 5b8238cf63..0ee316fb70 100644
--- a/vendor/psy/psysh/src/ExecutionLoopClosure.php
+++ b/vendor/psy/psysh/src/ExecutionLoopClosure.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -55,7 +55,6 @@ public function __construct(Shell $__psysh__)
                         $_ = eval($__psysh__->onExecute($__psysh__->flushCode() ?: ExecutionClosure::NOOP_INPUT));
                     } catch (\Throwable $_e) {
                         // Clean up on our way out.
-                        \restore_error_handler();
                         if (\ob_get_level() > 0) {
                             \ob_end_clean();
                         }
@@ -63,17 +62,16 @@ public function __construct(Shell $__psysh__)
                         throw $_e;
                     } catch (\Exception $_e) {
                         // Clean up on our way out.
-                        \restore_error_handler();
                         if (\ob_get_level() > 0) {
                             \ob_end_clean();
                         }
 
                         throw $_e;
+                    } finally {
+                        // Won't be needing this anymore
+                        \restore_error_handler();
                     }
 
-                    // Won't be needing this anymore
-                    \restore_error_handler();
-
                     // Flush stdout (write to shell output, plus save to magic variable)
                     \ob_end_flush();
 
diff --git a/vendor/psy/psysh/src/Formatter/CodeFormatter.php b/vendor/psy/psysh/src/Formatter/CodeFormatter.php
index 2ac37cc9da..03ddde47c6 100644
--- a/vendor/psy/psysh/src/Formatter/CodeFormatter.php
+++ b/vendor/psy/psysh/src/Formatter/CodeFormatter.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -11,48 +11,298 @@
 
 namespace Psy\Formatter;
 
-use JakubOnderka\PhpConsoleHighlighter\Highlighter;
-use Psy\Configuration;
-use Psy\ConsoleColorFactory;
 use Psy\Exception\RuntimeException;
+use Symfony\Component\Console\Formatter\OutputFormatter;
 
 /**
  * A pretty-printer for code.
  */
-class CodeFormatter implements Formatter
+class CodeFormatter implements ReflectorFormatter
 {
+    const LINE_MARKER    = '  <urgent>></urgent> ';
+    const NO_LINE_MARKER = '    ';
+
+    const HIGHLIGHT_DEFAULT     = 'default';
+    const HIGHLIGHT_KEYWORD     = 'keyword';
+
+    const HIGHLIGHT_PUBLIC      = 'public';
+    const HIGHLIGHT_PROTECTED   = 'protected';
+    const HIGHLIGHT_PRIVATE     = 'private';
+
+    const HIGHLIGHT_CONST       = 'const';
+    const HIGHLIGHT_NUMBER      = 'number';
+    const HIGHLIGHT_STRING      = 'string';
+    const HIGHLIGHT_COMMENT     = 'comment';
+    const HIGHLIGHT_INLINE_HTML = 'inline_html';
+
+    private static $tokenMap = [
+        // Not highlighted
+        \T_OPEN_TAG           => self::HIGHLIGHT_DEFAULT,
+        \T_OPEN_TAG_WITH_ECHO => self::HIGHLIGHT_DEFAULT,
+        \T_CLOSE_TAG          => self::HIGHLIGHT_DEFAULT,
+        \T_STRING             => self::HIGHLIGHT_DEFAULT,
+        \T_VARIABLE           => self::HIGHLIGHT_DEFAULT,
+        \T_NS_SEPARATOR       => self::HIGHLIGHT_DEFAULT,
+
+        // Visibility
+        \T_PUBLIC    => self::HIGHLIGHT_PUBLIC,
+        \T_PROTECTED => self::HIGHLIGHT_PROTECTED,
+        \T_PRIVATE   => self::HIGHLIGHT_PRIVATE,
+
+        // Constants
+        \T_DIR      => self::HIGHLIGHT_CONST,
+        \T_FILE     => self::HIGHLIGHT_CONST,
+        \T_METHOD_C => self::HIGHLIGHT_CONST,
+        \T_NS_C     => self::HIGHLIGHT_CONST,
+        \T_LINE     => self::HIGHLIGHT_CONST,
+        \T_CLASS_C  => self::HIGHLIGHT_CONST,
+        \T_FUNC_C   => self::HIGHLIGHT_CONST,
+        \T_TRAIT_C  => self::HIGHLIGHT_CONST,
+
+        // Types
+        \T_DNUMBER                  => self::HIGHLIGHT_NUMBER,
+        \T_LNUMBER                  => self::HIGHLIGHT_NUMBER,
+        \T_ENCAPSED_AND_WHITESPACE  => self::HIGHLIGHT_STRING,
+        \T_CONSTANT_ENCAPSED_STRING => self::HIGHLIGHT_STRING,
+
+        // Comments
+        \T_COMMENT     => self::HIGHLIGHT_COMMENT,
+        \T_DOC_COMMENT => self::HIGHLIGHT_COMMENT,
+
+        // @todo something better here?
+        \T_INLINE_HTML => self::HIGHLIGHT_INLINE_HTML,
+    ];
+
     /**
-     * Format the code represented by $reflector.
+     * Format the code represented by $reflector for shell output.
      *
      * @param \Reflector  $reflector
-     * @param null|string $colorMode (default: null)
+     * @param string|null $colorMode (deprecated and ignored)
      *
      * @return string formatted code
      */
     public static function format(\Reflector $reflector, $colorMode = null)
     {
-        if (!self::isReflectable($reflector)) {
-            throw new RuntimeException('Source code unavailable');
+        if (self::isReflectable($reflector)) {
+            if ($code = @\file_get_contents($reflector->getFileName())) {
+                return self::formatCode($code, self::getStartLine($reflector), $reflector->getEndLine());
+            }
+        }
+
+        throw new RuntimeException('Source code unavailable');
+    }
+
+    /**
+     * Format code for shell output.
+     *
+     * Optionally, restrict by $startLine and $endLine line numbers, or pass $markLine to add a line marker.
+     *
+     * @param string   $code
+     * @param int      $startLine
+     * @param int|null $endLine
+     * @param int|null $markLine
+     *
+     * @return string formatted code
+     */
+    public static function formatCode($code, $startLine = 1, $endLine = null, $markLine = null)
+    {
+        $spans = self::tokenizeSpans($code);
+        $lines = self::splitLines($spans, $startLine, $endLine);
+        $lines = self::formatLines($lines);
+        $lines = self::numberLines($lines, $markLine);
+
+        return \implode('', \iterator_to_array($lines));
+    }
+
+    /**
+     * Get the start line for a given Reflector.
+     *
+     * Tries to incorporate doc comments if possible.
+     *
+     * This is typehinted as \Reflector but we've narrowed the input via self::isReflectable already.
+     *
+     * @param \ReflectionClass|\ReflectionFunctionAbstract $reflector
+     *
+     * @return int
+     */
+    private static function getStartLine(\Reflector $reflector)
+    {
+        $startLine = $reflector->getStartLine();
+
+        if ($docComment = $reflector->getDocComment()) {
+            $startLine -= \preg_match_all('/(\r\n?|\n)/', $docComment) + 1;
         }
 
-        $colorMode = $colorMode ?: Configuration::COLOR_MODE_AUTO;
+        return \max($startLine, 1);
+    }
+
+    /**
+     * Split code into highlight spans.
+     *
+     * Tokenize via \token_get_all, then map these tokens to internal highlight types, combining
+     * adjacent spans of the same highlight type.
+     *
+     * @todo consider switching \token_get_all() out for PHP-Parser-based formatting at some point.
+     *
+     * @param string $code
+     *
+     * @return \Generator [$spanType, $spanText] highlight spans
+     */
+    private static function tokenizeSpans($code)
+    {
+        $spanType = null;
+        $buffer   = '';
+
+        foreach (\token_get_all($code) as $token) {
+            $nextType = self::nextHighlightType($token, $spanType);
+            $spanType = $spanType ?: $nextType;
 
-        if ($fileName = $reflector->getFileName()) {
-            if (!\is_file($fileName)) {
-                throw new RuntimeException('Source code unavailable');
+            if ($spanType !== $nextType) {
+                yield [$spanType, $buffer];
+                $spanType = $nextType;
+                $buffer   = '';
             }
 
-            $file  = \file_get_contents($fileName);
-            $start = $reflector->getStartLine();
-            $end   = $reflector->getEndLine() - $start;
+            $buffer .= \is_array($token) ? $token[1] : $token;
+        }
 
-            $factory     = new ConsoleColorFactory($colorMode);
-            $colors      = $factory->getConsoleColor();
-            $highlighter = new Highlighter($colors);
+        if ($spanType !== null && $buffer !== '') {
+            yield [$spanType, $buffer];
+        }
+    }
+
+    /**
+     * Given a token and the current highlight span type, compute the next type.
+     *
+     * @param array|string $token       \token_get_all token
+     * @param string|null  $currentType
+     *
+     * @return string|null
+     */
+    private static function nextHighlightType($token, $currentType)
+    {
+        if ($token === '"') {
+            return self::HIGHLIGHT_STRING;
+        }
+
+        if (\is_array($token)) {
+            if ($token[0] === \T_WHITESPACE) {
+                return $currentType;
+            }
+
+            if (\array_key_exists($token[0], self::$tokenMap)) {
+                return self::$tokenMap[$token[0]];
+            }
+        }
+
+        return self::HIGHLIGHT_KEYWORD;
+    }
+
+    /**
+     * Group highlight spans into an array of lines.
+     *
+     * Optionally, restrict by start and end line numbers.
+     *
+     * @param \Generator $spans     as [$spanType, $spanText] pairs
+     * @param int        $startLine
+     * @param int|null   $endLine
+     *
+     * @return \Generator lines, each an array of [$spanType, $spanText] pairs
+     */
+    private static function splitLines(\Generator $spans, $startLine = 1, $endLine = null)
+    {
+        $lineNum = 1;
+        $buffer  = [];
+
+        foreach ($spans as list($spanType, $spanText)) {
+            foreach (\preg_split('/(\r\n?|\n)/', $spanText) as $index => $spanLine) {
+                if ($index > 0) {
+                    if ($lineNum >= $startLine) {
+                        yield $lineNum => $buffer;
+                    }
+
+                    $lineNum++;
+                    $buffer = [];
+
+                    if ($endLine !== null && $lineNum > $endLine) {
+                        return;
+                    }
+                }
+
+                if ($spanLine !== '') {
+                    $buffer[] = [$spanType, $spanLine];
+                }
+            }
+        }
+
+        if (!empty($buffer)) {
+            yield $lineNum => $buffer;
+        }
+    }
+
+    /**
+     * Format lines of highlight spans for shell output.
+     *
+     * @param \Generator $spanLines lines, each an array of [$spanType, $spanText] pairs
+     *
+     * @return \Generator Formatted lines
+     */
+    private static function formatLines(\Generator $spanLines)
+    {
+        foreach ($spanLines as $lineNum => $spanLine) {
+            $line = '';
+
+            foreach ($spanLine as list($spanType, $spanText)) {
+                if ($spanType === self::HIGHLIGHT_DEFAULT) {
+                    $line .= OutputFormatter::escape($spanText);
+                } else {
+                    $line .= \sprintf('<%s>%s</%s>', $spanType, OutputFormatter::escape($spanText), $spanType);
+                }
+            }
+
+            yield $lineNum => $line . \PHP_EOL;
+        }
+    }
+
+    /**
+     * Prepend line numbers to formatted lines.
+     *
+     * Lines must be in an associative array with the correct keys in order to be numbered properly.
+     *
+     * Optionally, pass $markLine to add a line marker.
+     *
+     * @param \Generator $lines    Formatted lines
+     * @param int|null   $markLine
+     *
+     * @return \Generator Numbered, formatted lines
+     */
+    private static function numberLines(\Generator $lines, $markLine = null)
+    {
+        $lines = \iterator_to_array($lines);
+
+        // Figure out how much space to reserve for line numbers.
+        \end($lines);
+        $pad = \strlen(\key($lines));
+
+        // If $markLine is before or after our line range, don't bother reserving space for the marker.
+        if ($markLine !== null) {
+            if ($markLine > \key($lines)) {
+                $markLine = null;
+            }
+
+            \reset($lines);
+            if ($markLine < \key($lines)) {
+                $markLine = null;
+            }
+        }
+
+        foreach ($lines as $lineNum => $line) {
+            $mark = '';
+            if ($markLine !== null) {
+                $mark = ($markLine === $lineNum) ? self::LINE_MARKER : self::NO_LINE_MARKER;
+            }
 
-            return $highlighter->getCodeSnippet($file, $start, 0, $end);
-        } else {
-            throw new RuntimeException('Source code unavailable');
+            yield \sprintf("%s<aside>%${pad}s</aside>: %s", $mark, $lineNum, $line);
         }
     }
 
@@ -65,7 +315,6 @@ public static function format(\Reflector $reflector, $colorMode = null)
      */
     private static function isReflectable(\Reflector $reflector)
     {
-        return $reflector instanceof \ReflectionClass ||
-            $reflector instanceof \ReflectionFunctionAbstract;
+        return ($reflector instanceof \ReflectionClass || $reflector instanceof \ReflectionFunctionAbstract) && \is_file($reflector->getFileName());
     }
 }
diff --git a/vendor/psy/psysh/src/Formatter/DocblockFormatter.php b/vendor/psy/psysh/src/Formatter/DocblockFormatter.php
index 39ea60e54a..3ea9f6dd28 100644
--- a/vendor/psy/psysh/src/Formatter/DocblockFormatter.php
+++ b/vendor/psy/psysh/src/Formatter/DocblockFormatter.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -17,7 +17,7 @@
 /**
  * A pretty-printer for docblocks.
  */
-class DocblockFormatter implements Formatter
+class DocblockFormatter implements ReflectorFormatter
 {
     private static $vectorParamTemplates = [
         'type' => 'info',
@@ -89,7 +89,13 @@ private static function formatVector(array $vector, array $lines)
         $template = \implode(' ', $template);
 
         return \implode("\n", \array_map(function ($line) use ($template) {
-            $escaped = \array_map(['Symfony\Component\Console\Formatter\OutputFormatter', 'escape'], $line);
+            $escaped = \array_map(function ($l) {
+                if ($l === null) {
+                    return '';
+                }
+
+                return OutputFormatter::escape($l);
+            }, $line);
 
             return \rtrim(\vsprintf($template, $escaped));
         }, $lines));
diff --git a/vendor/psy/psysh/src/Formatter/Formatter.php b/vendor/psy/psysh/src/Formatter/Formatter.php
index 08a8e4c16d..8800c18663 100644
--- a/vendor/psy/psysh/src/Formatter/Formatter.php
+++ b/vendor/psy/psysh/src/Formatter/Formatter.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -13,13 +13,9 @@
 
 /**
  * Formatter interface.
+ *
+ * @deprecated this interface only exists for backwards compatibility. Use ReflectorFormatter.
  */
-interface Formatter
+interface Formatter extends ReflectorFormatter
 {
-    /**
-     * @param \Reflector $reflector
-     *
-     * @return string
-     */
-    public static function format(\Reflector $reflector);
 }
diff --git a/vendor/psy/psysh/src/Formatter/ReflectorFormatter.php b/vendor/psy/psysh/src/Formatter/ReflectorFormatter.php
new file mode 100644
index 0000000000..cf2f25340b
--- /dev/null
+++ b/vendor/psy/psysh/src/Formatter/ReflectorFormatter.php
@@ -0,0 +1,25 @@
+<?php
+
+/*
+ * This file is part of Psy Shell.
+ *
+ * (c) 2012-2020 Justin Hileman
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Psy\Formatter;
+
+/**
+ * Reflector formatter interface.
+ */
+interface ReflectorFormatter
+{
+    /**
+     * @param \Reflector $reflector
+     *
+     * @return string
+     */
+    public static function format(\Reflector $reflector);
+}
diff --git a/vendor/psy/psysh/src/Formatter/SignatureFormatter.php b/vendor/psy/psysh/src/Formatter/SignatureFormatter.php
index ec8725d9ff..aefa9dae30 100644
--- a/vendor/psy/psysh/src/Formatter/SignatureFormatter.php
+++ b/vendor/psy/psysh/src/Formatter/SignatureFormatter.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -20,7 +20,7 @@
 /**
  * An abstract representation of a function, class or property signature.
  */
-class SignatureFormatter implements Formatter
+class SignatureFormatter implements ReflectorFormatter
 {
     /**
      * Format a signature for the given reflector.
@@ -85,7 +85,7 @@ private static function formatModifiers(\Reflector $reflector)
             // For some reason, PHP 5.x returns `abstract public` modifiers for
             // traits. Let's just ignore that business entirely.
             if (\version_compare(PHP_VERSION, '7.0.0', '<')) {
-                return [];
+                return '';
             }
         }
 
@@ -126,7 +126,7 @@ private static function formatClass(\ReflectionClass $reflector)
         if (!empty($interfaces)) {
             \sort($interfaces);
 
-            $chunks[] = 'implements';
+            $chunks[] = $reflector->isInterface() ? 'extends' : 'implements';
             $chunks[] = \implode(', ', \array_map(function ($name) {
                 return \sprintf('<class>%s</class>', $name);
             }, $interfaces));
@@ -287,7 +287,7 @@ private static function formatFunctionParams(\ReflectionFunctionAbstract $reflec
                 } else {
                     $value     = $param->getDefaultValue();
                     $typeStyle = self::getTypeStyle($value);
-                    $value     = \is_array($value) ? 'array()' : \is_null($value) ? 'null' : \var_export($value, true);
+                    $value     = \is_array($value) ? '[]' : (\is_null($value) ? 'null' : \var_export($value, true));
                 }
                 $default = \sprintf(' = <%s>%s</%s>', $typeStyle, OutputFormatter::escape($value), $typeStyle);
             } else {
diff --git a/vendor/psy/psysh/src/Formatter/TraceFormatter.php b/vendor/psy/psysh/src/Formatter/TraceFormatter.php
new file mode 100644
index 0000000000..e815ab7d77
--- /dev/null
+++ b/vendor/psy/psysh/src/Formatter/TraceFormatter.php
@@ -0,0 +1,116 @@
+<?php
+
+/*
+ * This file is part of Psy Shell.
+ *
+ * (c) 2012-2020 Justin Hileman
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Psy\Formatter;
+
+use Psy\Input\FilterOptions;
+use Symfony\Component\Console\Formatter\OutputFormatter;
+
+/**
+ * Output formatter for exception traces.
+ */
+class TraceFormatter
+{
+    /**
+     * Format the trace of the given exception.
+     *
+     * @throws \InvalidArgumentException if passed a non-Throwable value
+     *
+     * @todo type hint $throwable when we drop support for PHP 5.x
+     *
+     * @param \Throwable    $throwable  The error or exception with a backtrace
+     * @param FilterOptions $filter     (default: null)
+     * @param int           $count      (default: PHP_INT_MAX)
+     * @param bool          $includePsy (default: true)
+     *
+     * @return string[] Formatted stacktrace lines
+     */
+    public static function formatTrace($throwable, FilterOptions $filter = null, $count = null, $includePsy = true)
+    {
+        if (!($throwable instanceof \Throwable || $throwable instanceof \Exception)) {
+            throw new \InvalidArgumentException('Unable to format non-throwable value');
+        }
+
+        if ($cwd = \getcwd()) {
+            $cwd = \rtrim($cwd, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
+        }
+
+        if ($count === null) {
+            $count = PHP_INT_MAX;
+        }
+
+        $lines = [];
+
+        $trace = $throwable->getTrace();
+        \array_unshift($trace, [
+            'function' => '',
+            'file'     => $throwable->getFile() !== null ? $throwable->getFile() : 'n/a',
+            'line'     => $throwable->getLine() !== null ? $throwable->getLine() : 'n/a',
+            'args'     => [],
+        ]);
+
+        if (!$includePsy) {
+            for ($i = \count($trace) - 1; $i >= 0; $i--) {
+                $thing = isset($trace[$i]['class']) ? $trace[$i]['class'] : $trace[$i]['function'];
+                if (\preg_match('/\\\\?Psy\\\\/', $thing)) {
+                    $trace = \array_slice($trace, $i + 1);
+                    break;
+                }
+            }
+        }
+
+        for ($i = 0, $count = \min($count, \count($trace)); $i < $count; $i++) {
+            $class    = isset($trace[$i]['class']) ? $trace[$i]['class'] : '';
+            $type     = isset($trace[$i]['type']) ? $trace[$i]['type'] : '';
+            $function = $trace[$i]['function'];
+            $file     = isset($trace[$i]['file']) ? self::replaceCwd($cwd, $trace[$i]['file']) : 'n/a';
+            $line     = isset($trace[$i]['line']) ? $trace[$i]['line'] : 'n/a';
+
+            // Leave execution loop out of the `eval()'d code` lines
+            if (\preg_match("#/src/Execution(?:Loop)?Closure.php\(\d+\) : eval\(\)'d code$#", \str_replace('\\', '/', $file))) {
+                $file = "eval()'d code";
+            }
+
+            // Skip any lines that don't match our filter options
+            if ($filter !== null && !$filter->match(\sprintf('%s%s%s() at %s:%s', $class, $type, $function, $file, $line))) {
+                continue;
+            }
+
+            $lines[] = \sprintf(
+                ' <class>%s</class>%s%s() at <info>%s:%s</info>',
+                OutputFormatter::escape($class),
+                OutputFormatter::escape($type),
+                OutputFormatter::escape($function),
+                OutputFormatter::escape($file),
+                OutputFormatter::escape($line)
+            );
+        }
+
+        return $lines;
+    }
+
+    /**
+     * Replace the given directory from the start of a filepath.
+     *
+     * @param string $cwd
+     * @param string $file
+     *
+     * @return string
+     */
+    private static function replaceCwd($cwd, $file)
+    {
+        if ($cwd === false) {
+            return $file;
+        } else {
+            return \preg_replace('/^' . \preg_quote($cwd, '/') . '/', '', $file);
+        }
+    }
+}
diff --git a/vendor/psy/psysh/src/Input/CodeArgument.php b/vendor/psy/psysh/src/Input/CodeArgument.php
index cfeb9e16d2..a2189af7fe 100644
--- a/vendor/psy/psysh/src/Input/CodeArgument.php
+++ b/vendor/psy/psysh/src/Input/CodeArgument.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Input/FilterOptions.php b/vendor/psy/psysh/src/Input/FilterOptions.php
index d77a04fb70..53e9b3e5ca 100644
--- a/vendor/psy/psysh/src/Input/FilterOptions.php
+++ b/vendor/psy/psysh/src/Input/FilterOptions.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -97,9 +97,9 @@ public function match($string, array &$matches = null)
     /**
      * Validate that grep, invert and insensitive input options are consistent.
      *
-     * @param InputInterface $input
+     * @throws RuntimeException if input is invalid
      *
-     * @return bool
+     * @param InputInterface $input
      */
     private function validateInput(InputInterface $input)
     {
@@ -127,19 +127,19 @@ private function stringIsRegex($string)
     /**
      * Validate that $pattern is a valid regular expression.
      *
-     * @param string $pattern
+     * @throws RuntimeException if pattern is invalid
      *
-     * @return bool
+     * @param string $pattern
      */
     private function validateRegex($pattern)
     {
-        \set_error_handler(['Psy\Exception\ErrorException', 'throwException']);
+        \set_error_handler([ErrorException::class, 'throwException']);
         try {
             \preg_match($pattern, '');
         } catch (ErrorException $e) {
-            \restore_error_handler();
             throw new RuntimeException(\str_replace('preg_match(): ', 'Invalid regular expression: ', $e->getRawMessage()));
+        } finally {
+            \restore_error_handler();
         }
-        \restore_error_handler();
     }
 }
diff --git a/vendor/psy/psysh/src/Input/ShellInput.php b/vendor/psy/psysh/src/Input/ShellInput.php
index 8675f4d12d..49762d89c4 100644
--- a/vendor/psy/psysh/src/Input/ShellInput.php
+++ b/vendor/psy/psysh/src/Input/ShellInput.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -87,18 +87,18 @@ private function tokenize($input)
         $length = \strlen($input);
         $cursor = 0;
         while ($cursor < $length) {
-            if (\preg_match('/\s+/A', $input, $match, null, $cursor)) {
-            } elseif (\preg_match('/([^="\'\s]+?)(=?)(' . StringInput::REGEX_QUOTED_STRING . '+)/A', $input, $match, null, $cursor)) {
+            if (\preg_match('/\s+/A', $input, $match, 0, $cursor)) {
+            } elseif (\preg_match('/([^="\'\s]+?)(=?)(' . StringInput::REGEX_QUOTED_STRING . '+)/A', $input, $match, 0, $cursor)) {
                 $tokens[] = [
                     $match[1] . $match[2] . \stripcslashes(\str_replace(['"\'', '\'"', '\'\'', '""'], '', \substr($match[3], 1, \strlen($match[3]) - 2))),
                     \stripcslashes(\substr($input, $cursor)),
                 ];
-            } elseif (\preg_match('/' . StringInput::REGEX_QUOTED_STRING . '/A', $input, $match, null, $cursor)) {
+            } elseif (\preg_match('/' . StringInput::REGEX_QUOTED_STRING . '/A', $input, $match, 0, $cursor)) {
                 $tokens[] = [
                     \stripcslashes(\substr($match[0], 1, \strlen($match[0]) - 2)),
                     \stripcslashes(\substr($input, $cursor)),
                 ];
-            } elseif (\preg_match('/' . StringInput::REGEX_STRING . '/A', $input, $match, null, $cursor)) {
+            } elseif (\preg_match('/' . StringInput::REGEX_STRING . '/A', $input, $match, 0, $cursor)) {
                 $tokens[] = [
                     \stripcslashes($match[1]),
                     \stripcslashes(\substr($input, $cursor)),
diff --git a/vendor/psy/psysh/src/Input/SilentInput.php b/vendor/psy/psysh/src/Input/SilentInput.php
index c6f234ba9d..b4804c611a 100644
--- a/vendor/psy/psysh/src/Input/SilentInput.php
+++ b/vendor/psy/psysh/src/Input/SilentInput.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Output/OutputPager.php b/vendor/psy/psysh/src/Output/OutputPager.php
index a2f12aead5..b9dcdf82db 100644
--- a/vendor/psy/psysh/src/Output/OutputPager.php
+++ b/vendor/psy/psysh/src/Output/OutputPager.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Output/PassthruPager.php b/vendor/psy/psysh/src/Output/PassthruPager.php
index 2dcb74398e..3eaa9cf78c 100644
--- a/vendor/psy/psysh/src/Output/PassthruPager.php
+++ b/vendor/psy/psysh/src/Output/PassthruPager.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Output/ProcOutputPager.php b/vendor/psy/psysh/src/Output/ProcOutputPager.php
index a047b1c3f8..a6769890c8 100644
--- a/vendor/psy/psysh/src/Output/ProcOutputPager.php
+++ b/vendor/psy/psysh/src/Output/ProcOutputPager.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -77,7 +77,8 @@ public function close()
             }
         }
 
-        unset($this->pipe, $this->proc);
+        $this->pipe = null;
+        $this->proc = null;
     }
 
     /**
diff --git a/vendor/psy/psysh/src/Output/ShellOutput.php b/vendor/psy/psysh/src/Output/ShellOutput.php
index 5881a5c205..485cef8d3c 100644
--- a/vendor/psy/psysh/src/Output/ShellOutput.php
+++ b/vendor/psy/psysh/src/Output/ShellOutput.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -11,6 +11,7 @@
 
 namespace Psy\Output;
 
+use Symfony\Component\Console\Formatter\OutputFormatter;
 use Symfony\Component\Console\Formatter\OutputFormatterInterface;
 use Symfony\Component\Console\Formatter\OutputFormatterStyle;
 use Symfony\Component\Console\Output\ConsoleOutput;
@@ -28,10 +29,10 @@ class ShellOutput extends ConsoleOutput
     /**
      * Construct a ShellOutput instance.
      *
-     * @param mixed                    $verbosity (default: self::VERBOSITY_NORMAL)
-     * @param bool                     $decorated (default: null)
-     * @param OutputFormatterInterface $formatter (default: null)
-     * @param null|string|OutputPager  $pager     (default: null)
+     * @param mixed                         $verbosity (default: self::VERBOSITY_NORMAL)
+     * @param bool|null                     $decorated (default: null)
+     * @param OutputFormatterInterface|null $formatter (default: null)
+     * @param string|OutputPager|null       $pager     (default: null)
      */
     public function __construct($verbosity = self::VERBOSITY_NORMAL, $decorated = null, OutputFormatterInterface $formatter = null, $pager = null)
     {
@@ -126,7 +127,7 @@ public function write($messages, $newline = false, $type = 0)
             $template = $this->isDecorated() ? "<aside>%{$pad}s</aside>: %s" : "%{$pad}s: %s";
 
             if ($type & self::OUTPUT_RAW) {
-                $messages = \array_map(['Symfony\Component\Console\Formatter\OutputFormatter', 'escape'], $messages);
+                $messages = \array_map([OutputFormatter::class, 'escape'], $messages);
             }
 
             foreach ($messages as $i => $line) {
@@ -175,7 +176,7 @@ private function initFormatters()
         $formatter = $this->getFormatter();
 
         $formatter->setStyle('warning', new OutputFormatterStyle('black', 'yellow'));
-        $formatter->setStyle('error',   new OutputFormatterStyle('black', 'red', ['bold']));
+        $formatter->setStyle('error',   new OutputFormatterStyle('white', 'red', ['bold']));
         $formatter->setStyle('aside',   new OutputFormatterStyle('blue'));
         $formatter->setStyle('strong',  new OutputFormatterStyle(null, null, ['bold']));
         $formatter->setStyle('return',  new OutputFormatterStyle('cyan'));
@@ -200,5 +201,8 @@ private function initFormatters()
         $formatter->setStyle('comment',  new OutputFormatterStyle('blue'));
         $formatter->setStyle('object',   new OutputFormatterStyle('blue'));
         $formatter->setStyle('resource', new OutputFormatterStyle('yellow'));
+
+        // Code-specific formatting
+        $formatter->setStyle('inline_html', new OutputFormatterStyle('cyan'));
     }
 }
diff --git a/vendor/psy/psysh/src/ParserFactory.php b/vendor/psy/psysh/src/ParserFactory.php
index 263da2022b..992ff3790a 100644
--- a/vendor/psy/psysh/src/ParserFactory.php
+++ b/vendor/psy/psysh/src/ParserFactory.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -44,7 +44,7 @@ public static function getPossibleKinds()
      */
     public function hasKindsSupport()
     {
-        return \class_exists('PhpParser\ParserFactory');
+        return \class_exists(OriginalParserFactory::class);
     }
 
     /**
@@ -77,7 +77,7 @@ public function createParser($kind = null)
                 throw new \InvalidArgumentException('Unknown parser kind');
             }
 
-            $parser = $originalFactory->create(\constant('PhpParser\ParserFactory::' . $kind));
+            $parser = $originalFactory->create(\constant(OriginalParserFactory::class . '::' . $kind));
         } else {
             if ($kind !== null) {
                 throw new \InvalidArgumentException('Install PHP Parser v2.x to specify parser kind');
diff --git a/vendor/psy/psysh/src/Readline/GNUReadline.php b/vendor/psy/psysh/src/Readline/GNUReadline.php
index 1cec3c63a0..ef2ea724d8 100644
--- a/vendor/psy/psysh/src/Readline/GNUReadline.php
+++ b/vendor/psy/psysh/src/Readline/GNUReadline.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -51,6 +51,11 @@ public function __construct($historyFile = null, $historySize = 0, $eraseDups =
         $this->historyFile = ($historyFile !== null) ? $historyFile : false;
         $this->historySize = $historySize;
         $this->eraseDups   = $eraseDups;
+
+        // HHVM errors on this, so HHVM doesn't get a readline_name.
+        if (!\defined('HHVM_VERSION')) {
+            \readline_info('readline_name', 'psysh');
+        }
     }
 
     /**
diff --git a/vendor/psy/psysh/src/Readline/HoaConsole.php b/vendor/psy/psysh/src/Readline/HoaConsole.php
index a49b592850..bd4d9d541b 100644
--- a/vendor/psy/psysh/src/Readline/HoaConsole.php
+++ b/vendor/psy/psysh/src/Readline/HoaConsole.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -11,6 +11,8 @@
 
 namespace Psy\Readline;
 
+use Hoa\Console\Console;
+use Hoa\Console\Cursor;
 use Hoa\Console\Readline\Readline as HoaReadline;
 use Psy\Exception\BreakException;
 
@@ -22,17 +24,25 @@ class HoaConsole implements Readline
     /** @var HoaReadline */
     private $hoaReadline;
 
+    /** @var string|null */
+    private $lastPrompt;
+
     /**
      * @return bool
      */
     public static function isSupported()
     {
-        return \class_exists('\Hoa\Console\Console', true);
+        return \class_exists(Console::class, true);
     }
 
     public function __construct()
     {
         $this->hoaReadline = new HoaReadline();
+        $this->hoaReadline->addMapping('\C-l', function () {
+            $this->redisplay();
+
+            return HoaReadline::STATE_NO_ECHO;
+        });
     }
 
     /**
@@ -86,6 +96,8 @@ public function readHistory()
      */
     public function readline($prompt = null)
     {
+        $this->lastPrompt = $prompt;
+
         return $this->hoaReadline->readLine($prompt);
     }
 
@@ -94,7 +106,9 @@ public function readline($prompt = null)
      */
     public function redisplay()
     {
-        // noop
+        $currentLine = $this->hoaReadline->getLine();
+        Cursor::clear('all');
+        echo $this->lastPrompt, $currentLine;
     }
 
     /**
diff --git a/vendor/psy/psysh/src/Readline/Libedit.php b/vendor/psy/psysh/src/Readline/Libedit.php
index d1dc002fd6..bec4cfe51e 100644
--- a/vendor/psy/psysh/src/Readline/Libedit.php
+++ b/vendor/psy/psysh/src/Readline/Libedit.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -22,6 +22,8 @@
  */
 class Libedit extends GNUReadline
 {
+    private $hasWarnedOwnership = false;
+
     /**
      * Let's emulate GNU Readline by manually reading and parsing the history file!
      *
@@ -56,6 +58,28 @@ public function listHistory()
         return \array_values(\array_filter($history));
     }
 
+    /**
+     * {@inheritdoc}
+     */
+    public function writeHistory()
+    {
+        $res = parent::writeHistory();
+
+        // Libedit apparently refuses to save history if the history file is not
+        // owned by the user, even if it is writable. Warn when this happens.
+        //
+        // See https://github.com/bobthecow/psysh/issues/552
+        if ($res === false && !$this->hasWarnedOwnership) {
+            if (\is_file($this->historyFile) && \is_writable($this->historyFile)) {
+                $this->hasWarnedOwnership = true;
+                $msg = \sprintf('Error writing history file, check file ownership: %s', $this->historyFile);
+                \trigger_error($msg, E_USER_NOTICE);
+            }
+        }
+
+        return $res;
+    }
+
     /**
      * From GNUReadline (readline/histfile.c & readline/histexpand.c):
      * lines starting with "\0" are comments or timestamps;
diff --git a/vendor/psy/psysh/src/Readline/Readline.php b/vendor/psy/psysh/src/Readline/Readline.php
index 6d0cb6e6b9..7e404dccc9 100644
--- a/vendor/psy/psysh/src/Readline/Readline.php
+++ b/vendor/psy/psysh/src/Readline/Readline.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -56,7 +56,7 @@ public function readHistory();
     /**
      * Read a single line of input from the user.
      *
-     * @param null|string $prompt
+     * @param string|null $prompt
      *
      * @return false|string
      */
diff --git a/vendor/psy/psysh/src/Readline/Transient.php b/vendor/psy/psysh/src/Readline/Transient.php
index 6623bd9818..c3f3433aeb 100644
--- a/vendor/psy/psysh/src/Readline/Transient.php
+++ b/vendor/psy/psysh/src/Readline/Transient.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Reflection/ReflectionClassConstant.php b/vendor/psy/psysh/src/Reflection/ReflectionClassConstant.php
index 019ad21da8..4d27a1820b 100644
--- a/vendor/psy/psysh/src/Reflection/ReflectionClassConstant.php
+++ b/vendor/psy/psysh/src/Reflection/ReflectionClassConstant.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -52,7 +52,7 @@ public function __construct($class, $name)
      * @param string        $name
      * @param bool          $return pass true to return the export, as opposed to emitting it
      *
-     * @return null|string
+     * @return string|null
      */
     public static function export($class, $name, $return = false)
     {
@@ -219,7 +219,7 @@ public function getEndLine()
      */
     public static function create($class, $name)
     {
-        if (\class_exists('\\ReflectionClassConstant')) {
+        if (\class_exists(\ReflectionClassConstant::class)) {
             return new \ReflectionClassConstant($class, $name);
         }
 
diff --git a/vendor/psy/psysh/src/Reflection/ReflectionConstant.php b/vendor/psy/psysh/src/Reflection/ReflectionConstant.php
index a813fc5736..139b920a7d 100644
--- a/vendor/psy/psysh/src/Reflection/ReflectionConstant.php
+++ b/vendor/psy/psysh/src/Reflection/ReflectionConstant.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Reflection/ReflectionConstant_.php b/vendor/psy/psysh/src/Reflection/ReflectionConstant_.php
index b355e35091..c24e7f74e9 100644
--- a/vendor/psy/psysh/src/Reflection/ReflectionConstant_.php
+++ b/vendor/psy/psysh/src/Reflection/ReflectionConstant_.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -61,7 +61,7 @@ public function __construct($name)
      * @param string $name
      * @param bool   $return pass true to return the export, as opposed to emitting it
      *
-     * @return null|string
+     * @return string|null
      */
     public static function export($name, $return = false)
     {
diff --git a/vendor/psy/psysh/src/Reflection/ReflectionLanguageConstruct.php b/vendor/psy/psysh/src/Reflection/ReflectionLanguageConstruct.php
index 9b8eefc179..3de301adf3 100644
--- a/vendor/psy/psysh/src/Reflection/ReflectionLanguageConstruct.php
+++ b/vendor/psy/psysh/src/Reflection/ReflectionLanguageConstruct.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Reflection/ReflectionLanguageConstructParameter.php b/vendor/psy/psysh/src/Reflection/ReflectionLanguageConstructParameter.php
index 9161aa78b5..b1fcba814a 100644
--- a/vendor/psy/psysh/src/Reflection/ReflectionLanguageConstructParameter.php
+++ b/vendor/psy/psysh/src/Reflection/ReflectionLanguageConstructParameter.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Reflection/ReflectionNamespace.php b/vendor/psy/psysh/src/Reflection/ReflectionNamespace.php
new file mode 100644
index 0000000000..f50a322a84
--- /dev/null
+++ b/vendor/psy/psysh/src/Reflection/ReflectionNamespace.php
@@ -0,0 +1,60 @@
+<?php
+
+/*
+ * This file is part of Psy Shell.
+ *
+ * (c) 2012-2020 Justin Hileman
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Psy\Reflection;
+
+/**
+ * A fake Reflector for namespaces.
+ */
+class ReflectionNamespace implements \Reflector
+{
+    private $name;
+
+    /**
+     * Construct a ReflectionNamespace object.
+     *
+     * @param string $name
+     */
+    public function __construct($name)
+    {
+        $this->name = $name;
+    }
+
+    /**
+     * Gets the constant name.
+     *
+     * @return string
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    /**
+     * This can't (and shouldn't) do anything :).
+     *
+     * @throws \RuntimeException
+     */
+    public static function export($name)
+    {
+        throw new \RuntimeException('Not yet implemented because it\'s unclear what I should do here :)');
+    }
+
+    /**
+     * To string.
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return $this->getName();
+    }
+}
diff --git a/vendor/psy/psysh/src/Shell.php b/vendor/psy/psysh/src/Shell.php
index 7a0fbac28a..c2e9f307d6 100644
--- a/vendor/psy/psysh/src/Shell.php
+++ b/vendor/psy/psysh/src/Shell.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -19,20 +19,21 @@
 use Psy\Exception\TypeErrorException;
 use Psy\ExecutionLoop\ProcessForker;
 use Psy\ExecutionLoop\RunkitReloader;
+use Psy\Formatter\TraceFormatter;
 use Psy\Input\ShellInput;
 use Psy\Input\SilentInput;
-use Psy\Output\ShellOutput;
 use Psy\TabCompletion\Matcher;
 use Psy\VarDumper\PresenterAware;
 use Symfony\Component\Console\Application;
 use Symfony\Component\Console\Command\Command as BaseCommand;
 use Symfony\Component\Console\Formatter\OutputFormatter;
-use Symfony\Component\Console\Input\ArgvInput;
+use Symfony\Component\Console\Input\ArrayInput;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputDefinition;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Input\StringInput;
+use Symfony\Component\Console\Output\ConsoleOutput;
 use Symfony\Component\Console\Output\OutputInterface;
 
 /**
@@ -47,7 +48,7 @@
  */
 class Shell extends Application
 {
-    const VERSION = 'v0.9.9';
+    const VERSION = 'v0.10.4';
 
     const PROMPT      = '>>> ';
     const BUFF_PROMPT = '... ';
@@ -57,6 +58,7 @@ class Shell extends Application
     private $config;
     private $cleaner;
     private $output;
+    private $originalVerbosity;
     private $readline;
     private $inputBuffer;
     private $code;
@@ -66,9 +68,7 @@ class Shell extends Application
     private $stdoutBuffer;
     private $context;
     private $includes;
-    private $loop;
     private $outputWantsNewline = false;
-    private $prompt;
     private $loopListeners;
     private $autoCompleter;
     private $matchers = [];
@@ -78,13 +78,12 @@ class Shell extends Application
     /**
      * Create a new Psy Shell.
      *
-     * @param Configuration $config (default: null)
+     * @param Configuration|null $config (default: null)
      */
     public function __construct(Configuration $config = null)
     {
         $this->config        = $config ?: new Configuration();
         $this->cleaner       = $this->config->getCodeCleaner();
-        $this->loop          = new ExecutionLoop();
         $this->context       = new Context();
         $this->includes      = [];
         $this->readline      = $this->config->getReadline();
@@ -119,7 +118,7 @@ public static function isIncluded(array $trace)
      * @see Psy\debug
      * @deprecated will be removed in 1.0. Use \Psy\debug instead
      *
-     * @param array         $vars   Scope variables from the calling context (default: array())
+     * @param array         $vars   Scope variables from the calling context (default: [])
      * @param object|string $bindTo Bound object ($this) or class (self) value for the shell
      *
      * @return array Scope variables from the debugger session
@@ -188,9 +187,9 @@ protected function getDefaultCommands()
             new Command\ListCommand(),
             new Command\DumpCommand(),
             new Command\DocCommand(),
-            new Command\ShowCommand($this->config->colorMode()),
-            new Command\WtfCommand($this->config->colorMode()),
-            new Command\WhereamiCommand($this->config->colorMode()),
+            new Command\ShowCommand(),
+            new Command\WtfCommand(),
+            new Command\WhereamiCommand(),
             new Command\ThrowUpCommand(),
             new Command\TimeitCommand(),
             new Command\TraceCommand(),
@@ -290,28 +289,29 @@ public function addTabCompletionMatchers(array $matchers)
     public function setOutput(OutputInterface $output)
     {
         $this->output = $output;
+        $this->originalVerbosity = $output->getVerbosity();
     }
 
     /**
-     * Runs the current application.
+     * Runs PsySH.
      *
-     * @param InputInterface  $input  An Input instance
-     * @param OutputInterface $output An Output instance
+     * @param InputInterface|null  $input  An Input instance
+     * @param OutputInterface|null $output An Output instance
      *
      * @return int 0 if everything went fine, or an error code
      */
     public function run(InputInterface $input = null, OutputInterface $output = null)
     {
-        $this->initializeTabCompletion();
-
-        if ($input === null && !isset($_SERVER['argv'])) {
-            $input = new ArgvInput([]);
-        }
+        // We'll just ignore the input passed in, and set up our own!
+        $input = new ArrayInput([]);
 
         if ($output === null) {
             $output = $this->config->getOutput();
         }
 
+        $this->setAutoExit(false);
+        $this->setCatchExceptions(false);
+
         try {
             return parent::run($input, $output);
         } catch (\Exception $e) {
@@ -322,9 +322,9 @@ public function run(InputInterface $input = null, OutputInterface $output = null
     }
 
     /**
-     * Runs the current application.
+     * Runs PsySH.
      *
-     * @throws Exception if thrown via the `throw-up` command
+     * @throws \Exception if thrown via the `throw-up` command
      *
      * @param InputInterface  $input  An Input instance
      * @param OutputInterface $output An Output instance
@@ -334,12 +334,29 @@ public function run(InputInterface $input = null, OutputInterface $output = null
     public function doRun(InputInterface $input, OutputInterface $output)
     {
         $this->setOutput($output);
-
         $this->resetCodeBuffer();
 
-        $this->setAutoExit(false);
-        $this->setCatchExceptions(false);
+        if ($input->isInteractive()) {
+            // @todo should it be possible to have raw output in an interactive run?
+            return $this->doInteractiveRun();
+        } else {
+            return $this->doNonInteractiveRun($this->config->rawOutput());
+        }
+    }
 
+    /**
+     * Run PsySH in interactive mode.
+     *
+     * Initializes tab completion and readline history, then spins up the
+     * execution loop.
+     *
+     * @throws \Exception if thrown via the `throw-up` command
+     *
+     * @return int 0 if everything went fine, or an error code
+     */
+    private function doInteractiveRun()
+    {
+        $this->initializeTabCompletion();
         $this->readline->readHistory();
 
         $this->output->writeln($this->getHeader());
@@ -348,14 +365,101 @@ public function doRun(InputInterface $input, OutputInterface $output)
 
         try {
             $this->beforeRun();
-            $this->loop->run($this);
+            $this->loadIncludes();
+            $loop = new ExecutionLoopClosure($this);
+            $loop->execute();
             $this->afterRun();
         } catch (ThrowUpException $e) {
             throw $e->getPrevious();
         } catch (BreakException $e) {
             // The ProcessForker throws a BreakException to finish the main thread.
-            return;
         }
+
+        return 0;
+    }
+
+    /**
+     * Run PsySH in non-interactive mode.
+     *
+     * Note that this isn't very useful unless you supply "include" arguments at
+     * the command line, or code via stdin.
+     *
+     * @param bool $rawOutput
+     *
+     * @return int 0 if everything went fine, or an error code
+     */
+    private function doNonInteractiveRun($rawOutput)
+    {
+        // If raw output is enabled (or output is piped) we don't want startup messages.
+        if (!$rawOutput && !$this->config->outputIsPiped()) {
+            $this->output->writeln($this->getHeader());
+            $this->writeVersionInfo();
+            $this->writeStartupMessage();
+        }
+
+        $this->beforeRun();
+        $this->loadIncludes();
+
+        // For non-interactive execution, read only from the input buffer or from piped input.
+        // Otherwise it'll try to readline and hang, waiting for user input with no indication of
+        // what's holding things up.
+        if (!empty($this->inputBuffer) || $this->config->inputIsPiped()) {
+            $this->getInput(false);
+        }
+
+        if ($this->hasCode()) {
+            $ret = $this->execute($this->flushCode());
+            $this->writeReturnValue($ret, $rawOutput);
+        }
+
+        $this->afterRun();
+
+        return 0;
+    }
+
+    /**
+     * Configures the input and output instances based on the user arguments and options.
+     */
+    protected function configureIO(InputInterface $input, OutputInterface $output)
+    {
+        // @todo overrides via environment variables (or should these happen in config? ... probably config)
+        $input->setInteractive($this->config->getInputInteractive());
+
+        if ($this->config->getOutputDecorated() !== null) {
+            $output->setDecorated($this->config->getOutputDecorated());
+        }
+
+        $output->setVerbosity($this->config->getOutputVerbosity());
+    }
+
+    /**
+     * Load user-defined includes.
+     */
+    private function loadIncludes()
+    {
+        // Load user-defined includes
+        $load = function (self $__psysh__) {
+            \set_error_handler([$__psysh__, 'handleError']);
+            foreach ($__psysh__->getIncludes() as $__psysh_include__) {
+                try {
+                    include $__psysh_include__;
+                } catch (\Error $_e) {
+                    $__psysh__->writeException(ErrorException::fromError($_e));
+                } catch (\Exception $_e) {
+                    $__psysh__->writeException($_e);
+                }
+            }
+            \restore_error_handler();
+            unset($__psysh_include__);
+
+            // Override any new local variables with pre-defined scope variables
+            \extract($__psysh__->getScopeVariables(false));
+
+            // ... then add the whole mess of variables back.
+            $__psysh__->setScopeVariables(\get_defined_vars());
+        };
+
+        $load($this);
     }
 
     /**
@@ -365,14 +469,16 @@ public function doRun(InputInterface $input, OutputInterface $output)
      * valid code.
      *
      * @throws BreakException if user hits Ctrl+D
+     *
+     * @param bool $interactive
      */
-    public function getInput()
+    public function getInput($interactive = true)
     {
         $this->codeBufferOpen = false;
 
         do {
             // reset output verbosity (in case it was altered by a subcommand)
-            $this->output->setVerbosity(ShellOutput::VERBOSITY_VERBOSE);
+            $this->output->setVerbosity($this->originalVerbosity);
 
             $input = $this->readline();
 
@@ -381,8 +487,13 @@ public function getInput()
              *
              *   1) In an expression, like a function or "if" block, clear the input buffer
              *   2) At top-level session, behave like the exit command
+             *   3) When non-interactive, return, because that's the end of stdin
              */
             if ($input === false) {
+                if (!$interactive) {
+                    return;
+                }
+
                 $this->output->writeln('');
 
                 if ($this->hasCode()) {
@@ -408,7 +519,7 @@ public function getInput()
             }
 
             $this->addCode($input);
-        } while (!$this->hasValidCode());
+        } while (!$interactive || !$this->hasValidCode());
     }
 
     /**
@@ -421,7 +532,7 @@ public function getInput()
     private function inputInOpenStringOrComment($input)
     {
         if (!$this->hasCode()) {
-            return;
+            return false;
         }
 
         $code = $this->codeBuffer;
@@ -777,7 +888,7 @@ public function getCodeBuffer()
     /**
      * Run a Psy Shell command given the user input.
      *
-     * @throws InvalidArgumentException if the input is not a valid command
+     * @throws \InvalidArgumentException if the input is not a valid command
      *
      * @param string $input User input string
      *
@@ -797,7 +908,7 @@ protected function runCommand($input)
             $helpCommand = $this->get('help');
             $helpCommand->setCommand($command);
 
-            return $helpCommand->run($input, $this->output);
+            return $helpCommand->run(new StringInput(''), $this->output);
         }
 
         return $command->run($input, $this->output);
@@ -931,7 +1042,7 @@ public function writeStdout($out, $phase = PHP_OUTPUT_HANDLER_END)
 
         // Incremental flush
         if ($out !== '' && !$isCleaning) {
-            $this->output->write($out, false, ShellOutput::OUTPUT_RAW);
+            $this->output->write($out, false, OutputInterface::OUTPUT_RAW);
             $this->outputWantsNewline = (\substr($out, -1) !== "\n");
             $this->stdoutBuffer .= $out;
         }
@@ -940,7 +1051,11 @@ public function writeStdout($out, $phase = PHP_OUTPUT_HANDLER_END)
         if ($phase & PHP_OUTPUT_HANDLER_END) {
             // Write an extra newline if stdout didn't end with one
             if ($this->outputWantsNewline) {
-                $this->output->writeln(\sprintf('<aside>%s</aside>', $this->config->useUnicode() ? '⏎' : '\\n'));
+                if (!$this->config->rawOutput() && !$this->config->outputIsPiped()) {
+                    $this->output->writeln(\sprintf('<aside>%s</aside>', $this->config->useUnicode() ? '⏎' : '\\n'));
+                } else {
+                    $this->output->writeln('');
+                }
                 $this->outputWantsNewline = false;
             }
 
@@ -961,8 +1076,9 @@ public function writeStdout($out, $phase = PHP_OUTPUT_HANDLER_END)
      * @see self::presentValue
      *
      * @param mixed $ret
+     * @param bool  $rawOutput Write raw var_export-style values
      */
-    public function writeReturnValue($ret)
+    public function writeReturnValue($ret, $rawOutput = false)
     {
         $this->lastExecSuccess = true;
 
@@ -971,10 +1087,16 @@ public function writeReturnValue($ret)
         }
 
         $this->context->setReturnValue($ret);
-        $ret    = $this->presentValue($ret);
-        $indent = \str_repeat(' ', \strlen(static::RETVAL));
 
-        $this->output->writeln(static::RETVAL . \str_replace(PHP_EOL, PHP_EOL . $indent, $ret));
+        if ($rawOutput) {
+            $formatted = \var_export($ret, true);
+        } else {
+            $indent = \str_repeat(' ', \strlen(static::RETVAL));
+            $formatted = $this->presentValue($ret);
+            $formatted = static::RETVAL . \str_replace(PHP_EOL, PHP_EOL . $indent, $formatted);
+        }
+
+        $this->output->writeln($formatted);
     }
 
     /**
@@ -991,7 +1113,23 @@ public function writeException(\Exception $e)
     {
         $this->lastExecSuccess = false;
         $this->context->setLastException($e);
-        $this->output->writeln($this->formatException($e));
+
+        $output = $this->output;
+        if ($output instanceof ConsoleOutput) {
+            $output = $output->getErrorOutput();
+        }
+        $output->writeln($this->formatException($e));
+
+        // Include an exception trace (as long as this isn't a BreakException).
+        if (!$e instanceof BreakException && $output->getVerbosity() >= OutputInterface::VERBOSITY_VERBOSE) {
+            $trace = TraceFormatter::formatTrace($e);
+            if (\count($trace) !== 0) {
+                $output->writeln('--');
+                $output->write($trace, true);
+                $output->writeln('');
+            }
+        }
+
         $this->resetCodeBuffer();
     }
 
@@ -1103,13 +1241,12 @@ public function execute($code, $throwExceptions = false)
      *
      * This allows us to:
      *
-     *     set_error_handler(array($psysh, 'handleError'));
+     *     set_error_handler([$psysh, 'handleError']);
      *
-     * Unlike ErrorException::throwException, this error handler respects the
-     * current error_reporting level; i.e. it logs warnings and notices, but
-     * doesn't throw an exception unless it's above the current error_reporting
-     * threshold. This should probably only be used in the inner execution loop
-     * of the shell, as most of the time a thrown exception is much more useful.
+     * Unlike ErrorException::throwException, this error handler respects error
+     * levels; i.e. it logs warnings and notices, but doesn't throw exceptions.
+     * This should probably only be used in the inner execution loop of the
+     * shell, as most of the time a thrown exception is much more useful.
      *
      * If the error type matches the `errorLoggingLevel` config, it will be
      * logged as well, regardless of the `error_reporting` level.
@@ -1117,7 +1254,7 @@ public function execute($code, $throwExceptions = false)
      * @see \Psy\Exception\ErrorException::throwException
      * @see \Psy\Shell::writeException
      *
-     * @throws \Psy\Exception\ErrorException depending on the current error_reporting level
+     * @throws \Psy\Exception\ErrorException depending on the error level
      *
      * @param int    $errno   Error type
      * @param string $errstr  Message
@@ -1126,10 +1263,16 @@ public function execute($code, $throwExceptions = false)
      */
     public function handleError($errno, $errstr, $errfile, $errline)
     {
-        if ($errno & \error_reporting()) {
+        // This is an error worth throwing.
+        //
+        // n.b. Technically we can't handle all of these in userland code, but
+        // we'll list 'em all for good measure
+        if ($errno & (E_ERROR | E_PARSE | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR | E_RECOVERABLE_ERROR)) {
             ErrorException::throwException($errno, $errstr, $errfile, $errline);
-        } elseif ($errno & $this->config->errorLoggingLevel()) {
-            // log it and continue...
+        }
+
+        // Otherwise log it and continue.
+        if ($errno & \error_reporting() || $errno & $this->config->errorLoggingLevel()) {
             $this->writeException(new ErrorException($errstr, 0, $errno, $errfile, $errline));
         }
     }
@@ -1153,7 +1296,7 @@ protected function presentValue($val)
      *
      * @param string $input
      *
-     * @return null|BaseCommand
+     * @return BaseCommand|null
      */
     protected function getCommand($input)
     {
@@ -1182,10 +1325,14 @@ protected function hasCommand($input)
     /**
      * Get the current input prompt.
      *
-     * @return string
+     * @return string | null
      */
     protected function getPrompt()
     {
+        if ($this->output->isQuiet()) {
+            return null;
+        }
+
         if ($this->hasCode()) {
             return static::BUFF_PROMPT;
         }
@@ -1202,9 +1349,11 @@ protected function getPrompt()
      * If readline is enabled, this delegates to readline. Otherwise, it's an
      * ugly `fgets` call.
      *
+     * @param bool $interactive
+     *
      * @return string One line of user input
      */
-    protected function readline()
+    protected function readline($interactive = true)
     {
         if (!empty($this->inputBuffer)) {
             $line = \array_shift($this->inputBuffer);
@@ -1215,7 +1364,9 @@ protected function readline()
             return $line;
         }
 
-        if ($bracketedPaste = $this->config->useBracketedPaste()) {
+        $bracketedPaste = $interactive && $this->config->useBracketedPaste();
+
+        if ($bracketedPaste) {
             \printf("\e[?2004h"); // Enable bracketed paste
         }
 
@@ -1241,11 +1392,25 @@ protected function getHeader()
     /**
      * Get the current version of Psy Shell.
      *
+     * @deprecated call self::getVersionHeader instead
+     *
      * @return string
      */
     public function getVersion()
     {
-        $separator = $this->config->useUnicode() ? '—' : '-';
+        return self::getVersionHeader($this->config->useUnicode());
+    }
+
+    /**
+     * Get a pretty header including the current version of Psy Shell.
+     *
+     * @param bool $useUnicode
+     *
+     * @return string
+     */
+    public static function getVersionHeader($useUnicode = false)
+    {
+        $separator = $useUnicode ? '—' : '-';
 
         return \sprintf('Psy Shell %s (PHP %s %s %s)', self::VERSION, PHP_VERSION, $separator, PHP_SAPI);
     }
diff --git a/vendor/psy/psysh/src/Sudo.php b/vendor/psy/psysh/src/Sudo.php
index be354bef97..b06e1b320f 100644
--- a/vendor/psy/psysh/src/Sudo.php
+++ b/vendor/psy/psysh/src/Sudo.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Sudo/SudoVisitor.php b/vendor/psy/psysh/src/Sudo/SudoVisitor.php
index 2b78a423ed..1d4cb15591 100644
--- a/vendor/psy/psysh/src/Sudo/SudoVisitor.php
+++ b/vendor/psy/psysh/src/Sudo/SudoVisitor.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -24,6 +24,7 @@
 use PhpParser\Node\Name\FullyQualified as FullyQualifiedName;
 use PhpParser\Node\Scalar\String_;
 use PhpParser\NodeVisitorAbstract;
+use Psy\Sudo;
 
 /**
  * A PHP Parser node visitor which rewrites property and method access to use
@@ -33,8 +34,6 @@
  */
 class SudoVisitor extends NodeVisitorAbstract
 {
-    const SUDO_CLASS = 'Psy\Sudo';
-
     const PROPERTY_FETCH         = 'fetchProperty';
     const PROPERTY_ASSIGN        = 'assignProperty';
     const METHOD_CALL            = 'callMethod';
@@ -73,7 +72,7 @@ public function enterNode(Node $node)
             \array_unshift($args, new Arg($node->var));
 
             // not using prepareCall because the $node->args we started with are already Arg instances
-            return new StaticCall(new FullyQualifiedName(self::SUDO_CLASS), self::METHOD_CALL, $args);
+            return new StaticCall(new FullyQualifiedName(Sudo::class), self::METHOD_CALL, $args);
         } elseif ($node instanceof StaticPropertyFetch) {
             $class = $node->class instanceof Name ? $node->class->toString() : $node->class;
             $name = $node->name instanceof Identifier ? $node->name->toString() : $node->name;
@@ -102,7 +101,7 @@ public function enterNode(Node $node)
             \array_unshift($args, new Arg(\is_string($class) ? new String_($class) : $class));
 
             // not using prepareCall because the $node->args we started with are already Arg instances
-            return new StaticCall(new FullyQualifiedName(self::SUDO_CLASS), self::STATIC_CALL, $args);
+            return new StaticCall(new FullyQualifiedName(Sudo::class), self::STATIC_CALL, $args);
         } elseif ($node instanceof ClassConstFetch) {
             $class = $node->class instanceof Name ? $node->class->toString() : $node->class;
             $name  = $node->name instanceof Identifier ? $node->name->toString() : $node->name;
@@ -117,7 +116,7 @@ public function enterNode(Node $node)
 
     private function prepareCall($method, $args)
     {
-        return new StaticCall(new FullyQualifiedName(self::SUDO_CLASS), $method, \array_map(function ($arg) {
+        return new StaticCall(new FullyQualifiedName(Sudo::class), $method, \array_map(function ($arg) {
             return new Arg($arg);
         }, $args));
     }
diff --git a/vendor/psy/psysh/src/TabCompletion/AutoCompleter.php b/vendor/psy/psysh/src/TabCompletion/AutoCompleter.php
index 0751aa78bf..d5cc1f6651 100644
--- a/vendor/psy/psysh/src/TabCompletion/AutoCompleter.php
+++ b/vendor/psy/psysh/src/TabCompletion/AutoCompleter.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractContextAwareMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractContextAwareMatcher.php
index 91816b2026..f7da443b96 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractContextAwareMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractContextAwareMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractDefaultParametersMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractDefaultParametersMatcher.php
index c44af36ad2..a93c7f7f29 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractDefaultParametersMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractDefaultParametersMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractMatcher.php
index 63b7154738..e42588945c 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -141,8 +141,8 @@ public static function hasSyntax($token, $syntax = self::VAR_SYNTAX)
     /**
      * Check whether $token type is $which.
      *
-     * @param string $which A PHP token type
      * @param mixed  $token A PHP token (see token_get_all)
+     * @param string $which A PHP token type
      *
      * @return bool
      */
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/ClassAttributesMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/ClassAttributesMatcher.php
index 8e976b0a26..e4244009ad 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/ClassAttributesMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/ClassAttributesMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/ClassMethodDefaultParametersMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/ClassMethodDefaultParametersMatcher.php
index 3a269a3534..0860e0dc1e 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/ClassMethodDefaultParametersMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/ClassMethodDefaultParametersMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/ClassMethodsMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/ClassMethodsMatcher.php
index d278c18bfd..e3778fdf0b 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/ClassMethodsMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/ClassMethodsMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/ClassNamesMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/ClassNamesMatcher.php
index 844b3d2ae3..ec11326b65 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/ClassNamesMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/ClassNamesMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -40,7 +40,7 @@ function ($className) use ($class) {
                 return \implode('\\', \array_slice($pieces, $nsPos, \count($pieces)));
             },
             \array_filter(
-                \get_declared_classes(),
+                \array_merge(\get_declared_classes(), \get_declared_interfaces()),
                 function ($className) use ($quotedClass) {
                     return AbstractMatcher::startsWith($quotedClass, $className);
                 }
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/CommandsMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/CommandsMatcher.php
index e3d8423a60..bdeb45d4c3 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/CommandsMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/CommandsMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/ConstantsMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/ConstantsMatcher.php
index 71be18f58c..5d5381260b 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/ConstantsMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/ConstantsMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/FunctionDefaultParametersMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/FunctionDefaultParametersMatcher.php
index 66d9ea1dc7..e1277c2eec 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/FunctionDefaultParametersMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/FunctionDefaultParametersMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/FunctionsMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/FunctionsMatcher.php
index 3aa12a1f05..7045423a2f 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/FunctionsMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/FunctionsMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/KeywordsMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/KeywordsMatcher.php
index 9d0deeeea0..3c84b3dc15 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/KeywordsMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/KeywordsMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/MongoClientMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/MongoClientMatcher.php
index fb51bf7d27..69c7e9bbd4 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/MongoClientMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/MongoClientMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/MongoDatabaseMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/MongoDatabaseMatcher.php
index fb1b9bbfb6..8775e22118 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/MongoDatabaseMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/MongoDatabaseMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectAttributesMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectAttributesMatcher.php
index ff44f5ac12..5a96444f57 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectAttributesMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectAttributesMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectMethodDefaultParametersMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectMethodDefaultParametersMatcher.php
index 16fa0189fe..9c62fcfcbc 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectMethodDefaultParametersMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectMethodDefaultParametersMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectMethodsMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectMethodsMatcher.php
index 23c751c7b0..01300c78bc 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectMethodsMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectMethodsMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/VariablesMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/VariablesMatcher.php
index a142b7b2e1..f2438d3d1a 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/VariablesMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/VariablesMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Util/Docblock.php b/vendor/psy/psysh/src/Util/Docblock.php
index 750210baa1..f251c864db 100644
--- a/vendor/psy/psysh/src/Util/Docblock.php
+++ b/vendor/psy/psysh/src/Util/Docblock.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -111,6 +111,11 @@ protected static function prefixLength(array $lines)
         $first = \reset($lines);
         $last  = \end($lines);
 
+        // Special case for single-line comments
+        if (\count($lines) === 1) {
+            return \strspn($first, "* \t\n\r\0\x0B");
+        }
+
         // find the longest common substring
         $count = \min(\strlen($first), \strlen($last));
         for ($i = 0; $i < $count; $i++) {
diff --git a/vendor/psy/psysh/src/Util/Json.php b/vendor/psy/psysh/src/Util/Json.php
index 471f10e7d8..b7059033a6 100644
--- a/vendor/psy/psysh/src/Util/Json.php
+++ b/vendor/psy/psysh/src/Util/Json.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Util/Mirror.php b/vendor/psy/psysh/src/Util/Mirror.php
index 09c0b5b9af..d7d02836a8 100644
--- a/vendor/psy/psysh/src/Util/Mirror.php
+++ b/vendor/psy/psysh/src/Util/Mirror.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -14,6 +14,7 @@
 use Psy\Exception\RuntimeException;
 use Psy\Reflection\ReflectionClassConstant;
 use Psy\Reflection\ReflectionConstant_;
+use Psy\Reflection\ReflectionNamespace;
 
 /**
  * A utility class for getting Reflectors.
@@ -65,22 +66,18 @@ public static function get($value, $member = null, $filter = 15)
         } elseif ($filter & self::STATIC_PROPERTY && $class->hasProperty($member) && $class->getProperty($member)->isStatic()) {
             return $class->getProperty($member);
         } else {
-            throw new RuntimeException(\sprintf(
-                'Unknown member %s on class %s',
-                $member,
-                \is_object($value) ? \get_class($value) : $value
-            ));
+            throw new RuntimeException(\sprintf('Unknown member %s on class %s', $member, \is_object($value) ? \get_class($value) : $value));
         }
     }
 
     /**
-     * Get a ReflectionClass (or ReflectionObject) if possible.
+     * Get a ReflectionClass (or ReflectionObject, or ReflectionNamespace) if possible.
      *
-     * @throws \InvalidArgumentException if $value is not a class name or instance
+     * @throws \InvalidArgumentException if $value is not a namespace or class name or instance
      *
      * @param mixed $value
      *
-     * @return \ReflectionClass
+     * @return \ReflectionClass|ReflectionNamespace
      */
     private static function getClass($value)
     {
@@ -90,10 +87,64 @@ private static function getClass($value)
 
         if (!\is_string($value)) {
             throw new \InvalidArgumentException('Mirror expects an object or class');
-        } elseif (!\class_exists($value) && !\interface_exists($value) && !\trait_exists($value)) {
-            throw new \InvalidArgumentException('Unknown class or function: ' . $value);
         }
 
-        return new \ReflectionClass($value);
+        if (\class_exists($value) || \interface_exists($value) || \trait_exists($value)) {
+            return new \ReflectionClass($value);
+        }
+
+        $namespace = \preg_replace('/(^\\\\|\\\\$)/', '', $value);
+        if (self::namespaceExists($namespace)) {
+            return new ReflectionNamespace($namespace);
+        }
+
+        throw new \InvalidArgumentException('Unknown namespace, class or function: ' . $value);
+    }
+
+    /**
+     * Check declared namespaces for a given namespace.
+     */
+    private static function namespaceExists($value)
+    {
+        return \in_array(\strtolower($value), self::getDeclaredNamespaces());
+    }
+
+    /**
+     * Get an array of all currently declared namespaces.
+     *
+     * Note that this relies on at least one function, class, interface, trait
+     * or constant to have been declared in that namespace.
+     */
+    private static function getDeclaredNamespaces()
+    {
+        $functions = \get_defined_functions();
+
+        $allNames = \array_merge(
+            $functions['internal'],
+            $functions['user'],
+            \get_declared_classes(),
+            \get_declared_interfaces(),
+            \get_declared_traits(),
+            \array_keys(\get_defined_constants())
+        );
+
+        $namespaces = [];
+        foreach ($allNames as $name) {
+            $chunks = \explode('\\', \strtolower($name));
+
+            // the last one is the function or class or whatever...
+            \array_pop($chunks);
+
+            while (!empty($chunks)) {
+                $namespaces[\implode('\\', $chunks)] = true;
+                \array_pop($chunks);
+            }
+        }
+
+        $namespaceNames = \array_keys($namespaces);
+
+        \sort($namespaceNames);
+
+        return $namespaceNames;
     }
 }
diff --git a/vendor/psy/psysh/src/Util/Str.php b/vendor/psy/psysh/src/Util/Str.php
index 47d5239968..8fc0abc1a4 100644
--- a/vendor/psy/psysh/src/Util/Str.php
+++ b/vendor/psy/psysh/src/Util/Str.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/VarDumper/Cloner.php b/vendor/psy/psysh/src/VarDumper/Cloner.php
index eb6c65e195..bbb658f82a 100644
--- a/vendor/psy/psysh/src/VarDumper/Cloner.php
+++ b/vendor/psy/psysh/src/VarDumper/Cloner.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/VarDumper/Dumper.php b/vendor/psy/psysh/src/VarDumper/Dumper.php
index cc13b265a5..0dbddb0ec2 100644
--- a/vendor/psy/psysh/src/VarDumper/Dumper.php
+++ b/vendor/psy/psysh/src/VarDumper/Dumper.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/VarDumper/Presenter.php b/vendor/psy/psysh/src/VarDumper/Presenter.php
index 4f821e0cd8..1e8095017c 100644
--- a/vendor/psy/psysh/src/VarDumper/Presenter.php
+++ b/vendor/psy/psysh/src/VarDumper/Presenter.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/VarDumper/PresenterAware.php b/vendor/psy/psysh/src/VarDumper/PresenterAware.php
index 1645c604e4..d0c02ae333 100644
--- a/vendor/psy/psysh/src/VarDumper/PresenterAware.php
+++ b/vendor/psy/psysh/src/VarDumper/PresenterAware.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/VersionUpdater/Checker.php b/vendor/psy/psysh/src/VersionUpdater/Checker.php
index c4044870df..ffefc912b5 100644
--- a/vendor/psy/psysh/src/VersionUpdater/Checker.php
+++ b/vendor/psy/psysh/src/VersionUpdater/Checker.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/VersionUpdater/GitHubChecker.php b/vendor/psy/psysh/src/VersionUpdater/GitHubChecker.php
index 40cfc2e2f8..923a0ec9b8 100644
--- a/vendor/psy/psysh/src/VersionUpdater/GitHubChecker.php
+++ b/vendor/psy/psysh/src/VersionUpdater/GitHubChecker.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/VersionUpdater/IntervalChecker.php b/vendor/psy/psysh/src/VersionUpdater/IntervalChecker.php
index 7e0da4327a..ea5ceef47f 100644
--- a/vendor/psy/psysh/src/VersionUpdater/IntervalChecker.php
+++ b/vendor/psy/psysh/src/VersionUpdater/IntervalChecker.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/VersionUpdater/NoopChecker.php b/vendor/psy/psysh/src/VersionUpdater/NoopChecker.php
index c5c9bcb4ee..22340f7634 100644
--- a/vendor/psy/psysh/src/VersionUpdater/NoopChecker.php
+++ b/vendor/psy/psysh/src/VersionUpdater/NoopChecker.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/functions.php b/vendor/psy/psysh/src/functions.php
index 4e875bbabc..b42dcdb246 100644
--- a/vendor/psy/psysh/src/functions.php
+++ b/vendor/psy/psysh/src/functions.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -11,6 +11,7 @@
 
 namespace Psy;
 
+use Psy\ExecutionLoop\ProcessForker;
 use Psy\VersionUpdater\GitHubChecker;
 use Symfony\Component\Console\Input\ArgvInput;
 use Symfony\Component\Console\Input\InputArgument;
@@ -18,7 +19,7 @@
 use Symfony\Component\Console\Input\InputOption;
 use XdgBaseDir\Xdg;
 
-if (!\function_exists('Psy\sh')) {
+if (!\function_exists('Psy\\sh')) {
     /**
      * Command to return the eval-able code to startup PsySH.
      *
@@ -32,7 +33,7 @@ function sh()
     }
 }
 
-if (!\function_exists('Psy\debug')) {
+if (!\function_exists('Psy\\debug')) {
     /**
      * Invoke a Psy Shell from the current context.
      *
@@ -70,7 +71,7 @@ function sh()
      *         }
      *     }
      *
-     * @param array         $vars   Scope variables from the calling context (default: array())
+     * @param array         $vars   Scope variables from the calling context (default: [])
      * @param object|string $bindTo Bound object ($this) or class (self) value for the shell
      *
      * @return array Scope variables from the debugger session
@@ -101,7 +102,7 @@ function debug(array $vars = [], $bindTo = null)
     }
 }
 
-if (!\function_exists('Psy\info')) {
+if (!\function_exists('Psy\\info')) {
     /**
      * Get a bunch of debugging info about the current PsySH environment and
      * configuration.
@@ -135,6 +136,7 @@ function info(Configuration $config = null)
         };
 
         $config = $lastConfig ?: new Configuration();
+        $configEnv = (isset($_SERVER['PSYSH_CONFIG']) && $_SERVER['PSYSH_CONFIG']) ? $_SERVER['PSYSH_CONFIG'] : false;
 
         $core = [
             'PsySH version'       => Shell::VERSION,
@@ -146,7 +148,7 @@ function info(Configuration $config = null)
             'config file'         => [
                 'default config file' => $prettyPath($config->getConfigFile()),
                 'local config file'   => $prettyPath($config->getLocalConfigFile()),
-                'PSYSH_CONFIG env'    => $prettyPath(\getenv('PSYSH_CONFIG')),
+                'PSYSH_CONFIG env'    => $prettyPath($configEnv),
             ],
             // 'config dir'  => $config->getConfigDir(),
             // 'data dir'    => $config->getDataDir(),
@@ -170,6 +172,11 @@ function info(Configuration $config = null)
             'update cache file'      => $prettyPath($config->getUpdateCheckCacheFile()),
         ];
 
+        $input = [
+            'interactive mode'  => $config->interactiveMode(),
+            'input interactive' => $config->getInputInteractive(),
+        ];
+
         if ($config->hasReadline()) {
             $info = \readline_info();
 
@@ -192,16 +199,27 @@ function info(Configuration $config = null)
             ];
         }
 
+        $output = [
+            'color mode'       => $config->colorMode(),
+            'output decorated' => $config->getOutputDecorated(),
+            'output verbosity' => $config->verbosity(),
+        ];
+
         $pcntl = [
-            'pcntl available' => \function_exists('pcntl_signal'),
-            'posix available' => \function_exists('posix_getpid'),
+            'pcntl available' => ProcessForker::isPcntlSupported(),
+            'posix available' => ProcessForker::isPosixSupported(),
         ];
 
-        $disabledFuncs = \array_map('trim', \explode(',', \ini_get('disable_functions')));
-        if (\in_array('pcntl_signal', $disabledFuncs) || \in_array('pcntl_fork', $disabledFuncs)) {
-            $pcntl['pcntl disabled'] = true;
+        if ($disabledPcntl = ProcessForker::disabledPcntlFunctions()) {
+            $pcntl['disabled pcntl functions'] = $disabledPcntl;
         }
 
+        if ($disabledPosix = ProcessForker::disabledPosixFunctions()) {
+            $pcntl['disabled posix functions'] = $disabledPosix;
+        }
+
+        $pcntl['use pcntl'] = $config->usePcntl();
+
         $history = [
             'history file'     => $prettyPath($config->getHistoryFile()),
             'history size'     => $config->getHistorySize(),
@@ -243,7 +261,6 @@ function info(Configuration $config = null)
 
         $autocomplete = [
             'tab completion enabled' => $config->useTabCompletion(),
-            'custom matchers'        => \array_map('get_class', $config->getTabCompletionMatchers()),
             'bracketed paste'        => $config->useBracketedPaste(),
         ];
 
@@ -257,11 +274,11 @@ function info(Configuration $config = null)
 
         // @todo Show Presenter / custom casters.
 
-        return \array_merge($core, \compact('updates', 'pcntl', 'readline', 'history', 'docs', 'autocomplete'));
+        return \array_merge($core, \compact('updates', 'pcntl', 'input', 'readline', 'output', 'history', 'docs', 'autocomplete'));
     }
 }
 
-if (!\function_exists('Psy\bin')) {
+if (!\function_exists('Psy\\bin')) {
     /**
      * `psysh` command line executable.
      *
@@ -270,50 +287,68 @@ function info(Configuration $config = null)
     function bin()
     {
         return function () {
+            if (!isset($_SERVER['PSYSH_IGNORE_ENV']) || !$_SERVER['PSYSH_IGNORE_ENV']) {
+                if (defined('HHVM_VERSION_ID') && \HHVM_VERSION_ID < 31800) {
+                    fwrite(STDERR, 'HHVM 3.18 or higher is required. You can set the environment variable PSYSH_IGNORE_ENV=1 to override this restriction and proceed anyway.' . PHP_EOL);
+                    exit(1);
+                }
+
+                if (defined('HHVM_VERSION_ID') && \HHVM_VERSION_ID > 39999) {
+                    fwrite(STDERR, 'HHVM 4 or higher is not supported. You can set the environment variable PSYSH_IGNORE_ENV=1 to override this restriction and proceed anyway.' . PHP_EOL);
+                    exit(1);
+                }
+
+                if (\PHP_VERSION_ID < 50509) {
+                    fwrite(STDERR, 'PHP 5.5.9 or higher is required. You can set the environment variable PSYSH_IGNORE_ENV=1 to override this restriction and proceed anyway.' . PHP_EOL);
+                    exit(1);
+                }
+
+                if (\PHP_VERSION_ID > 89999) {
+                    fwrite(STDERR, 'PHP 9 or higher is not supported. You can set the environment variable PSYSH_IGNORE_ENV=1 to override this restriction and proceed anyway.' . PHP_EOL);
+                    exit(1);
+                }
+
+                if (!function_exists('json_encode')) {
+                    fwrite(STDERR, 'The JSON extension is required. Please install it. You can set the environment variable PSYSH_IGNORE_ENV=1 to override this restriction and proceed anyway.' . PHP_EOL);
+                    exit(1);
+                }
+
+                if (!function_exists('token_get_all')) {
+                    fwrite(STDERR, 'The Tokenizer extension is required. Please install it. You can set the environment variable PSYSH_IGNORE_ENV=1 to override this restriction and proceed anyway.' . PHP_EOL);
+                    exit(1);
+                }
+            }
+
             $usageException = null;
 
             $input = new ArgvInput();
             try {
-                $input->bind(new InputDefinition([
-                    new InputOption('help',     'h',  InputOption::VALUE_NONE),
-                    new InputOption('config',   'c',  InputOption::VALUE_REQUIRED),
-                    new InputOption('version',  'v',  InputOption::VALUE_NONE),
-                    new InputOption('cwd',      null, InputOption::VALUE_REQUIRED),
-                    new InputOption('color',    null, InputOption::VALUE_NONE),
-                    new InputOption('no-color', null, InputOption::VALUE_NONE),
+                $input->bind(new InputDefinition(\array_merge(Configuration::getInputOptions(), [
+                    new InputOption('help',    'h', InputOption::VALUE_NONE),
+                    new InputOption('version', 'V', InputOption::VALUE_NONE),
 
                     new InputArgument('include', InputArgument::IS_ARRAY),
-                ]));
+                ])));
             } catch (\RuntimeException $e) {
                 $usageException = $e;
             }
 
-            $config = [];
-
-            // Handle --config
-            if ($configFile = $input->getOption('config')) {
-                $config['configFile'] = $configFile;
-            }
-
-            // Handle --color and --no-color
-            if ($input->getOption('color') && $input->getOption('no-color')) {
-                $usageException = new \RuntimeException('Using both "--color" and "--no-color" options is invalid');
-            } elseif ($input->getOption('color')) {
-                $config['colorMode'] = Configuration::COLOR_MODE_FORCED;
-            } elseif ($input->getOption('no-color')) {
-                $config['colorMode'] = Configuration::COLOR_MODE_DISABLED;
+            try {
+                $config = Configuration::fromInput($input);
+            } catch (\InvalidArgumentException $e) {
+                $usageException = $e;
             }
 
-            $shell = new Shell(new Configuration($config));
-
             // Handle --help
             if ($usageException !== null || $input->getOption('help')) {
                 if ($usageException !== null) {
                     echo $usageException->getMessage() . PHP_EOL . PHP_EOL;
                 }
 
-                $version = $shell->getVersion();
-                $name    = \basename(\reset($_SERVER['argv']));
+                $version = Shell::getVersionHeader(false);
+                $argv    = isset($_SERVER['argv']) ? $_SERVER['argv'] : [];
+                $name    = $argv ? \basename(\reset($argv)) : 'psysh';
+
                 echo <<<EOL
 $version
 
@@ -321,12 +356,17 @@ function bin()
   $name [--version] [--help] [files...]
 
 Options:
-  --help     -h Display this help message.
-  --config   -c Use an alternate PsySH config file location.
-  --cwd         Use an alternate working directory.
-  --version  -v Display the PsySH version.
-  --color       Force colors in output.
-  --no-color    Disable colors in output.
+  -h, --help            Display this help message.
+  -c, --config FILE     Use an alternate PsySH config file location.
+      --cwd PATH        Use an alternate working directory.
+  -V, --version         Display the PsySH version.
+      --color           Force colors in output.
+      --no-color        Disable colors in output.
+  -i, --interactive     Force PsySH to run in interactive mode.
+  -n, --no-interactive  Run PsySH without interactive input. Requires input from stdin.
+  -r, --raw-output      Print var_export-style return values (for non-interactive input)
+  -q, --quiet           Shhhhhh.
+  -v|vv|vvv, --verbose  Increase the verbosity of messages.
 
 EOL;
                 exit($usageException === null ? 0 : 1);
@@ -334,10 +374,12 @@ function bin()
 
             // Handle --version
             if ($input->getOption('version')) {
-                echo $shell->getVersion() . PHP_EOL;
+                echo Shell::getVersionHeader($config->useUnicode()) . PHP_EOL;
                 exit(0);
             }
 
+            $shell = new Shell($config);
+
             // Pass additional arguments to Shell as 'includes'
             $shell->setIncludes($input->getArgument('include'));
 
@@ -345,7 +387,7 @@ function bin()
                 // And go!
                 $shell->run();
             } catch (\Exception $e) {
-                echo $e->getMessage() . PHP_EOL;
+                fwrite(STDERR, $e->getMessage() . PHP_EOL);
 
                 // @todo this triggers the "exited unexpectedly" logic in the
                 // ForkingLoop, so we can't exit(1) after starting the shell...
diff --git a/vendor/psy/psysh/test/ClassWithSecrets.php b/vendor/psy/psysh/test/ClassWithSecrets.php
deleted file mode 100644
index adf27e3fd9..0000000000
--- a/vendor/psy/psysh/test/ClassWithSecrets.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test;
-
-class ClassWithSecrets
-{
-    private const PRIVATE_CONST = 'private and const';
-    private static $privateStaticProp = 'private and static and prop';
-    private $privateProp = 'private and prop';
-
-    private static function privateStaticMethod($extra = null)
-    {
-        if ($extra !== null) {
-            return 'private and static and method with ' . \json_encode($extra);
-        }
-
-        return 'private and static and method';
-    }
-
-    private function privateMethod($extra = null)
-    {
-        if ($extra !== null) {
-            return 'private and method with ' . \json_encode($extra);
-        }
-
-        return 'private and method';
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/AbstractClassPassTest.php b/vendor/psy/psysh/test/CodeCleaner/AbstractClassPassTest.php
deleted file mode 100644
index 1925c38037..0000000000
--- a/vendor/psy/psysh/test/CodeCleaner/AbstractClassPassTest.php
+++ /dev/null
@@ -1,57 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\AbstractClassPass;
-
-class AbstractClassPassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new AbstractClassPass());
-    }
-
-    /**
-     * @dataProvider invalidStatements
-     * @expectedException \Psy\Exception\FatalErrorException
-     */
-    public function testProcessStatementFails($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function invalidStatements()
-    {
-        return [
-            ['class A { abstract function a(); }'],
-            ['abstract class B { abstract function b() {} }'],
-            ['abstract class B { abstract function b() { echo "yep"; } }'],
-        ];
-    }
-
-    /**
-     * @dataProvider validStatements
-     */
-    public function testProcessStatementPasses($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function validStatements()
-    {
-        return [
-            ['abstract class C { function c() {} }'],
-            ['abstract class D { abstract function d(); }'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/AssignThisVariablePassTest.php b/vendor/psy/psysh/test/CodeCleaner/AssignThisVariablePassTest.php
deleted file mode 100644
index 1ff15c571d..0000000000
--- a/vendor/psy/psysh/test/CodeCleaner/AssignThisVariablePassTest.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\AssignThisVariablePass;
-
-class AssignThisVariablePassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new AssignThisVariablePass());
-    }
-
-    /**
-     * @dataProvider invalidStatements
-     * @expectedException \Psy\Exception\FatalErrorException
-     */
-    public function testProcessStatementFails($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function invalidStatements()
-    {
-        return [
-            ['$this = 3'],
-            ['strtolower($this = "this")'],
-        ];
-    }
-
-    /**
-     * @dataProvider validStatements
-     */
-    public function testProcessStatementPasses($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function validStatements()
-    {
-        return [
-            ['$this'],
-            ['$a = $this'],
-            ['$a = "this"; $$a = 3'],
-            ['$$this = "b"'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/CallTimePassByReferencePassTest.php b/vendor/psy/psysh/test/CodeCleaner/CallTimePassByReferencePassTest.php
deleted file mode 100644
index cd321b5def..0000000000
--- a/vendor/psy/psysh/test/CodeCleaner/CallTimePassByReferencePassTest.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\CallTimePassByReferencePass;
-
-class CallTimePassByReferencePassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new CallTimePassByReferencePass());
-    }
-
-    /**
-     * @dataProvider invalidStatements
-     * @expectedException \Psy\Exception\FatalErrorException
-     */
-    public function testProcessStatementFails($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function invalidStatements()
-    {
-        return [
-            ['f(&$arg)'],
-            ['$object->method($first, &$arg)'],
-            ['$closure($first, &$arg, $last)'],
-            ['A::b(&$arg)'],
-        ];
-    }
-
-    /**
-     * @dataProvider validStatements
-     */
-    public function testProcessStatementPasses($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function validStatements()
-    {
-        return [
-            ['array(&$var)'],
-            ['$a = &$b'],
-            ['f(array(&$b))'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/CalledClassPassTest.php b/vendor/psy/psysh/test/CodeCleaner/CalledClassPassTest.php
deleted file mode 100644
index c80f257ac9..0000000000
--- a/vendor/psy/psysh/test/CodeCleaner/CalledClassPassTest.php
+++ /dev/null
@@ -1,90 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\CalledClassPass;
-
-class CalledClassPassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new CalledClassPass());
-    }
-
-    /**
-     * @dataProvider invalidStatements
-     * @expectedException \Psy\Exception\ErrorException
-     */
-    public function testProcessStatementFails($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function invalidStatements()
-    {
-        return [
-            ['get_class()'],
-            ['get_class(null)'],
-            ['get_called_class()'],
-            ['get_called_class(null)'],
-            ['function foo() { return get_class(); }'],
-            ['function foo() { return get_class(null); }'],
-            ['function foo() { return get_called_class(); }'],
-            ['function foo() { return get_called_class(null); }'],
-        ];
-    }
-
-    /**
-     * @dataProvider validStatements
-     */
-    public function testProcessStatementPasses($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function validStatements()
-    {
-        return [
-            ['get_class($foo)'],
-            ['get_class(bar())'],
-            ['get_called_class($foo)'],
-            ['get_called_class(bar())'],
-            ['function foo($bar) { return get_class($bar); }'],
-            ['function foo($bar) { return get_called_class($bar); }'],
-            ['class Foo { function bar() { return get_class(); } }'],
-            ['class Foo { function bar() { return get_class(null); } }'],
-            ['class Foo { function bar() { return get_called_class(); } }'],
-            ['class Foo { function bar() { return get_called_class(null); } }'],
-            ['$foo = function () {}; $foo()'],
-        ];
-    }
-
-    /**
-     * @dataProvider validTraitStatements
-     */
-    public function testProcessTraitStatementPasses($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function validTraitStatements()
-    {
-        return [
-            ['trait Foo { function bar() { return get_class(); } }'],
-            ['trait Foo { function bar() { return get_class(null); } }'],
-            ['trait Foo { function bar() { return get_called_class(); } }'],
-            ['trait Foo { function bar() { return get_called_class(null); } }'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/CodeCleanerTestCase.php b/vendor/psy/psysh/test/CodeCleaner/CodeCleanerTestCase.php
deleted file mode 100644
index 6962c11414..0000000000
--- a/vendor/psy/psysh/test/CodeCleaner/CodeCleanerTestCase.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use PhpParser\NodeTraverser;
-use Psy\CodeCleaner\CodeCleanerPass;
-use Psy\Test\ParserTestCase;
-
-class CodeCleanerTestCase extends ParserTestCase
-{
-    protected $pass;
-
-    public function tearDown()
-    {
-        $this->pass = null;
-        parent::tearDown();
-    }
-
-    protected function setPass(CodeCleanerPass $pass)
-    {
-        $this->pass = $pass;
-        if (!isset($this->traverser)) {
-            $this->traverser = new NodeTraverser();
-        }
-        $this->traverser->addVisitor($this->pass);
-    }
-
-    protected function parseAndTraverse($code, $prefix = '<?php ')
-    {
-        return $this->traverse($this->parse($code, $prefix));
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/ExitPassTest.php b/vendor/psy/psysh/test/CodeCleaner/ExitPassTest.php
deleted file mode 100644
index b22766c76e..0000000000
--- a/vendor/psy/psysh/test/CodeCleaner/ExitPassTest.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\ExitPass;
-
-class ExitPassTest extends CodeCleanerTestCase
-{
-    /**
-     * @var string
-     */
-    private $expectedExceptionString = '\\Psy\\Exception\\BreakException::exitShell()';
-
-    public function setUp()
-    {
-        $this->setPass(new ExitPass());
-    }
-
-    /**
-     * @dataProvider dataProviderExitStatement
-     */
-    public function testExitStatement($from, $to)
-    {
-        $this->assertProcessesAs($from, $to);
-    }
-
-    /**
-     * Data provider for testExitStatement.
-     *
-     * @return array
-     */
-    public function dataProviderExitStatement()
-    {
-        return [
-            ['exit;', "{$this->expectedExceptionString};"],
-            ['exit();', "{$this->expectedExceptionString};"],
-            ['die;', "{$this->expectedExceptionString};"],
-            ['exit(die(die));', "{$this->expectedExceptionString};"],
-            ['if (true) { exit; }', "if (true) {\n    {$this->expectedExceptionString};\n}"],
-            ['if (false) { exit; }', "if (false) {\n    {$this->expectedExceptionString};\n}"],
-            ['1 and exit();', "1 and {$this->expectedExceptionString};"],
-            ['foo() or die', "foo() or {$this->expectedExceptionString};"],
-            ['exit and 1;', "{$this->expectedExceptionString} and 1;"],
-            ['if (exit) { echo $wat; }', "if ({$this->expectedExceptionString}) {\n    echo \$wat;\n}"],
-            ['exit or die;', "{$this->expectedExceptionString} or {$this->expectedExceptionString};"],
-            ['switch (die) { }', "switch ({$this->expectedExceptionString}) {\n}"],
-            ['for ($i = 1; $i < 10; die) {}', "for (\$i = 1; \$i < 10; {$this->expectedExceptionString}) {\n}"],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/FinalClassPassTest.php b/vendor/psy/psysh/test/CodeCleaner/FinalClassPassTest.php
deleted file mode 100644
index 1808d11fb1..0000000000
--- a/vendor/psy/psysh/test/CodeCleaner/FinalClassPassTest.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\FinalClassPass;
-
-class FinalClassPassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new FinalClassPass());
-    }
-
-    /**
-     * @dataProvider invalidStatements
-     * @expectedException \Psy\Exception\FatalErrorException
-     */
-    public function testProcessStatementFails($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function invalidStatements()
-    {
-        $data = [
-            ['final class A {} class B extends A {}'],
-            ['class A {} final class B extends A {} class C extends B {}'],
-            // array('namespace A { final class B {} } namespace C { class D extends \\A\\B {} }'),
-        ];
-
-        if (!\defined('HHVM_VERSION')) {
-            // For some reason Closure isn't final in HHVM?
-            $data[] = ['class A extends \\Closure {}'];
-        }
-
-        return $data;
-    }
-
-    /**
-     * @dataProvider validStatements
-     */
-    public function testProcessStatementPasses($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function validStatements()
-    {
-        return [
-            ['class A extends \\stdClass {}'],
-            ['final class A extends \\stdClass {}'],
-            ['class A {} class B extends A {}'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/Fixtures/ClassWithCallStatic.php b/vendor/psy/psysh/test/CodeCleaner/Fixtures/ClassWithCallStatic.php
deleted file mode 100644
index 0c674c0ed1..0000000000
--- a/vendor/psy/psysh/test/CodeCleaner/Fixtures/ClassWithCallStatic.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner\Fixtures;
-
-class ClassWithCallStatic
-{
-    public static function __callStatic($name, $arguments)
-    {
-        // wheee!
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/Fixtures/ClassWithStatic.php b/vendor/psy/psysh/test/CodeCleaner/Fixtures/ClassWithStatic.php
deleted file mode 100644
index 64c64c76cb..0000000000
--- a/vendor/psy/psysh/test/CodeCleaner/Fixtures/ClassWithStatic.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner\Fixtures;
-
-class ClassWithStatic
-{
-    public static function doStuff()
-    {
-        // Don't actually do stuff.
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/Fixtures/TraitWithStatic.php b/vendor/psy/psysh/test/CodeCleaner/Fixtures/TraitWithStatic.php
deleted file mode 100644
index 132dc061cb..0000000000
--- a/vendor/psy/psysh/test/CodeCleaner/Fixtures/TraitWithStatic.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner\Fixtures;
-
-trait TraitWithStatic
-{
-    public static function doStuff()
-    {
-        // Don't actually do stuff.
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/FunctionContextPassTest.php b/vendor/psy/psysh/test/CodeCleaner/FunctionContextPassTest.php
deleted file mode 100644
index 851eb2284e..0000000000
--- a/vendor/psy/psysh/test/CodeCleaner/FunctionContextPassTest.php
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\FunctionContextPass;
-
-class FunctionContextPassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new FunctionContextPass());
-    }
-
-    /**
-     * @dataProvider validStatements
-     */
-    public function testProcessStatementPasses($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function validStatements()
-    {
-        return [
-            ['function foo() { yield; }'],
-            ['if (function(){ yield; })'],
-        ];
-    }
-
-    /**
-     * @dataProvider invalidYieldStatements
-     * @expectedException \Psy\Exception\FatalErrorException
-     */
-    public function testInvalidYield($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function invalidYieldStatements()
-    {
-        return [
-            ['yield'],
-            ['if (yield)'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/FunctionReturnInWriteContextPassTest.php b/vendor/psy/psysh/test/CodeCleaner/FunctionReturnInWriteContextPassTest.php
deleted file mode 100644
index 85f6a04c06..0000000000
--- a/vendor/psy/psysh/test/CodeCleaner/FunctionReturnInWriteContextPassTest.php
+++ /dev/null
@@ -1,91 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\FunctionReturnInWriteContextPass;
-use Psy\Exception\FatalErrorException;
-
-class FunctionReturnInWriteContextPassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new FunctionReturnInWriteContextPass());
-    }
-
-    /**
-     * @dataProvider invalidStatements
-     * @expectedException \Psy\Exception\FatalErrorException
-     * @expectedExceptionMessage Can't use function return value in write context
-     */
-    public function testProcessStatementFails($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function invalidStatements()
-    {
-        return [
-            ['f(&g())'],
-            ['array(& $object->method())'],
-            ['$a->method(& $closure())'],
-            ['array(& A::b())'],
-            ['f() = 5'],
-            ['unset(h())'],
-        ];
-    }
-
-    public function testIsset()
-    {
-        try {
-            $this->traverser->traverse($this->parse('isset(strtolower("A"))'));
-            $this->fail();
-        } catch (FatalErrorException $e) {
-            if (\version_compare(PHP_VERSION, '5.5', '>=')) {
-                $this->assertContains(
-                    'Cannot use isset() on the result of a function call (you can use "null !== func()" instead)',
-                    $e->getMessage()
-                );
-            } else {
-                $this->assertContains("Can't use function return value in write context", $e->getMessage());
-            }
-        }
-    }
-
-    /**
-     * @expectedException \Psy\Exception\FatalErrorException
-     * @expectedExceptionMessage Can't use function return value in write context
-     */
-    public function testEmpty()
-    {
-        if (\version_compare(PHP_VERSION, '5.5', '>=')) {
-            $this->markTestSkipped();
-        }
-
-        $this->traverser->traverse($this->parse('empty(strtolower("A"))'));
-    }
-
-    /**
-     * @dataProvider validStatements
-     */
-    public function testValidStatements($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function validStatements()
-    {
-        return [
-            ['isset($foo)'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/ImplicitReturnPassTest.php b/vendor/psy/psysh/test/CodeCleaner/ImplicitReturnPassTest.php
deleted file mode 100644
index 1c28b4a859..0000000000
--- a/vendor/psy/psysh/test/CodeCleaner/ImplicitReturnPassTest.php
+++ /dev/null
@@ -1,112 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\ImplicitReturnPass;
-
-class ImplicitReturnPassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new ImplicitReturnPass());
-    }
-
-    /**
-     * @dataProvider implicitReturns
-     */
-    public function testProcess($from, $to)
-    {
-        $this->assertProcessesAs($from, $to);
-    }
-
-    public function implicitReturns()
-    {
-        $data = [
-            ['4',        'return 4;'],
-            ['foo()',    'return foo();'],
-            ['return 1', 'return 1;'],
-            ['',         'return new \Psy\CodeCleaner\NoReturnValue();'],
-        ];
-
-        $from = 'echo "foo";';
-        $to   = <<<'EOS'
-echo "foo";
-return new \Psy\CodeCleaner\NoReturnValue();
-EOS;
-        $data[] = [$from, $to];
-
-        $from = 'if (true) { 1; } elseif (true) { 2; } else { 3; }';
-        $to   = <<<'EOS'
-if (true) {
-    return 1;
-} elseif (true) {
-    return 2;
-} else {
-    return 3;
-}
-return new \Psy\CodeCleaner\NoReturnValue();
-EOS;
-        $data[] = [$from, $to];
-
-        $from = 'class A {}';
-        $to   = <<<'EOS'
-class A
-{
-}
-return new \Psy\CodeCleaner\NoReturnValue();
-EOS;
-        $data[] = [$from, $to];
-
-        $from = <<<'EOS'
-switch (false) {
-    case 0:
-        0;
-    case 1:
-        1;
-        break;
-    case 2:
-        2;
-        return;
-}
-EOS;
-        $to = <<<'EOS'
-switch (false) {
-    case 0:
-        0;
-    case 1:
-        return 1;
-        break;
-    case 2:
-        2;
-        return;
-}
-return new \Psy\CodeCleaner\NoReturnValue();
-EOS;
-        $data[] = [$from, $to];
-
-        $from = <<<'EOS'
-namespace Foo {
-    1 + 1;
-}
-EOS;
-        $to = <<<'EOS'
-namespace Foo;
-
-return 1 + 1;
-EOS;
-        $data[] = [$from, $to];
-
-        $data[] = ['exit()', 'exit;'];
-
-        return $data;
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/InstanceOfPassTest.php b/vendor/psy/psysh/test/CodeCleaner/InstanceOfPassTest.php
deleted file mode 100644
index b8c63313ed..0000000000
--- a/vendor/psy/psysh/test/CodeCleaner/InstanceOfPassTest.php
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\InstanceOfPass;
-
-class InstanceOfPassTest extends CodeCleanerTestCase
-{
-    protected function setUp()
-    {
-        $this->setPass(new InstanceOfPass());
-    }
-
-    /**
-     * @dataProvider invalidStatements
-     * @expectedException \Psy\Exception\FatalErrorException
-     */
-    public function testProcessInvalidStatement($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function invalidStatements()
-    {
-        return [
-            ['null instanceof stdClass'],
-            ['true instanceof stdClass'],
-            ['9 instanceof stdClass'],
-            ['1.0 instanceof stdClass'],
-            ['"foo" instanceof stdClass'],
-            ['__DIR__ instanceof stdClass'],
-            ['PHP_SAPI instanceof stdClass'],
-            ['1+1 instanceof stdClass'],
-            ['true && false instanceof stdClass'],
-            ['"a"."b" instanceof stdClass'],
-            ['!5 instanceof stdClass'],
-        ];
-    }
-
-    /**
-     * @dataProvider validStatements
-     */
-    public function testProcessValidStatement($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function validStatements()
-    {
-        $data = [
-            ['$a instanceof stdClass'],
-            ['strtolower("foo") instanceof stdClass'],
-            ['array(1) instanceof stdClass'],
-            ['(string) "foo" instanceof stdClass'],
-            ['(1+1) instanceof stdClass'],
-            ['"foo ${foo} $bar" instanceof stdClass'],
-            ['DateTime::ISO8601 instanceof stdClass'],
-        ];
-
-        return $data;
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/LeavePsyshAlonePassTest.php b/vendor/psy/psysh/test/CodeCleaner/LeavePsyshAlonePassTest.php
deleted file mode 100644
index 9df633e89a..0000000000
--- a/vendor/psy/psysh/test/CodeCleaner/LeavePsyshAlonePassTest.php
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\LeavePsyshAlonePass;
-
-class LeavePsyshAlonePassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new LeavePsyshAlonePass());
-    }
-
-    public function testPassesInlineHtmlThroughJustFine()
-    {
-        $inline = $this->parse('not php at all!', '');
-        $this->traverse($inline);
-        $this->assertTrue(true);
-    }
-
-    /**
-     * @dataProvider validStatements
-     */
-    public function testProcessStatementPasses($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function validStatements()
-    {
-        return [
-            ['array_merge()'],
-            ['__psysh__()'],
-            ['$this'],
-            ['$psysh'],
-            ['$__psysh'],
-            ['$banana'],
-        ];
-    }
-
-    /**
-     * @dataProvider invalidStatements
-     * @expectedException \Psy\Exception\RuntimeException
-     */
-    public function testProcessStatementFails($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function invalidStatements()
-    {
-        return [
-            ['$__psysh__'],
-            ['var_dump($__psysh__)'],
-            ['$__psysh__ = "your mom"'],
-            ['$__psysh__->fakeFunctionCall()'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/LegacyEmptyPassTest.php b/vendor/psy/psysh/test/CodeCleaner/LegacyEmptyPassTest.php
deleted file mode 100644
index 5c4c7b0590..0000000000
--- a/vendor/psy/psysh/test/CodeCleaner/LegacyEmptyPassTest.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\LegacyEmptyPass;
-
-class LegacyEmptyPassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new LegacyEmptyPass());
-    }
-
-    /**
-     * @dataProvider invalidStatements
-     * @expectedException \Psy\Exception\ParseErrorException
-     */
-    public function testProcessInvalidStatement($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function invalidStatements()
-    {
-        if (\version_compare(PHP_VERSION, '5.5', '>=')) {
-            return [
-                ['empty()'],
-            ];
-        }
-
-        return [
-            ['empty()'],
-            ['empty(null)'],
-            ['empty(PHP_EOL)'],
-            ['empty("wat")'],
-            ['empty(1.1)'],
-            ['empty(Foo::$bar)'],
-        ];
-    }
-
-    /**
-     * @dataProvider validStatements
-     */
-    public function testProcessValidStatement($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function validStatements()
-    {
-        if (\version_compare(PHP_VERSION, '5.5', '<')) {
-            return [
-                ['empty($foo)'],
-            ];
-        }
-
-        return [
-            ['empty($foo)'],
-            ['empty(null)'],
-            ['empty(PHP_EOL)'],
-            ['empty("wat")'],
-            ['empty(1.1)'],
-            ['empty(Foo::$bar)'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/ListPassTest.php b/vendor/psy/psysh/test/CodeCleaner/ListPassTest.php
deleted file mode 100644
index b7a360d690..0000000000
--- a/vendor/psy/psysh/test/CodeCleaner/ListPassTest.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\ListPass;
-
-class ListPassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new ListPass());
-    }
-
-    /**
-     * @dataProvider invalidStatements
-     * @expectedException \Psy\Exception\ParseErrorException
-     */
-    public function testProcessInvalidStatement($code, $expectedMessage)
-    {
-        if (\method_exists($this, 'setExpectedException')) {
-            $this->setExpectedException('Psy\Exception\ParseErrorException', $expectedMessage);
-        } else {
-            $this->expectExceptionMessage($expectedMessage);
-        }
-
-        $stmts = $this->parse($code);
-        $this->traverser->traverse($stmts);
-    }
-
-    public function invalidStatements()
-    {
-        // Not typo.  It is ambiguous whether "Syntax" or "syntax".
-        $errorShortListAssign = "yntax error, unexpected '='";
-        $errorEmptyList = 'Cannot use empty list';
-        $errorAssocListAssign = 'Syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting \',\' or \')\'';
-        $errorNonVariableAssign = 'Assignments can only happen to writable values';
-        $errorPhpParserSyntax = 'PHP Parse error: Syntax error, unexpected';
-
-        $invalidExpr = [
-            ['list() = array()', $errorEmptyList],
-            ['list("a") = array(1)', $errorPhpParserSyntax],
-        ];
-
-        if (\version_compare(PHP_VERSION, '7.1', '<')) {
-            return \array_merge($invalidExpr, [
-                ['list("a" => _) = array("a" => 1)', $errorPhpParserSyntax],
-                ['[] = []', $errorShortListAssign],
-                ['[$a] = [1]', $errorShortListAssign],
-                ['list("a" => $a) = array("a" => 1)', $errorAssocListAssign],
-                ['[$a[0], $a[1]] = [1, 2]', $errorShortListAssign],
-                ['[$a->b, $a->c] = [1, 2]', $errorShortListAssign],
-            ]);
-        }
-
-        return \array_merge($invalidExpr, [
-            ['list("a" => _) = array("a" => 1)', $errorPhpParserSyntax],
-            ['["a"] = [1]', $errorNonVariableAssign],
-            ['[] = []', $errorEmptyList],
-            ['[,] = [1,2]', $errorEmptyList],
-            ['[,,] = [1,2,3]', $errorEmptyList],
-        ]);
-    }
-
-    /**
-     * @dataProvider validStatements
-     */
-    public function testProcessValidStatement($code)
-    {
-        $stmts = $this->parse($code);
-        $this->traverser->traverse($stmts);
-        $this->assertTrue(true);
-    }
-
-    public function validStatements()
-    {
-        $validExpr = [
-            ['list($a) = array(1)'],
-            ['list($x, $y) = array(1, 2)'],
-        ];
-
-        if (\version_compare(PHP_VERSION, '7.1', '>=')) {
-            return \array_merge($validExpr, [
-                ['[$a] = array(1)'],
-                ['list($b) = [2]'],
-                ['[$x, $y] = array(1, 2)'],
-                ['[$a] = [1]'],
-                ['[$x, $y] = [1, 2]'],
-                ['["_" => $v] = ["_" => 1]'],
-                ['[$a,] = [1,2,3]'],
-                ['[,$b] = [1,2,3]'],
-                ['[$a,,$c] = [1,2,3]'],
-                ['[$a,,,] = [1,2,3]'],
-                ['[$a[0], $a[1]] = [1, 2]'],
-                ['[$a[0][0][0], $a[0][0][1]] = [1, 2]'],
-                ['[$a->b, $a->c] = [1, 2]'],
-                ['[$a->b[0], $a->c[1]] = [1, 2]'],
-                ['[$a[0]->b[0], $a[0]->c[1]] = [1, 2]'],
-                ['[$a[$b->c + $b->d]] = [1]'],
-                ['[$a->c()->d, $a->c()->e] = [1, 2]'],
-                ['[x()->a, x()->b] = [1, 2]'],
-            ]);
-        }
-
-        return $validExpr;
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/LoopContextPassTest.php b/vendor/psy/psysh/test/CodeCleaner/LoopContextPassTest.php
deleted file mode 100644
index 3b36306833..0000000000
--- a/vendor/psy/psysh/test/CodeCleaner/LoopContextPassTest.php
+++ /dev/null
@@ -1,108 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\LoopContextPass;
-
-class LoopContextPassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new LoopContextPass());
-    }
-
-    /**
-     * @dataProvider invalidStatements
-     * @expectedException \Psy\Exception\FatalErrorException
-     */
-    public function testProcessStatementFails($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function invalidStatements()
-    {
-        return [
-            ['continue'],
-            ['break'],
-            ['if (true) { continue; }'],
-            ['if (true) { break; }'],
-            ['if (false) { continue; }'],
-            ['if (false) { break; }'],
-            ['function foo() { break; }'],
-            ['function foo() { continue; }'],
-
-            // actually enforce break/continue depth argument
-            ['do { break 2; } while (true)'],
-            ['do { continue 2; } while (true)'],
-            ['for ($a; $b; $c) { break 2; }'],
-            ['for ($a; $b; $c) { continue 2; }'],
-            ['foreach ($a as $b) { break 2; }'],
-            ['foreach ($a as $b) { continue 2; }'],
-            ['switch (true) { default: break 2; }'],
-            ['switch (true) { default: continue 2; }'],
-            ['while (true) { break 2; }'],
-            ['while (true) { continue 2; }'],
-
-            // In PHP 5.4+, only positive literal integers are allowed
-            ['while (true) { break $n; }'],
-            ['while (true) { continue $n; }'],
-            ['while (true) { break N; }'],
-            ['while (true) { continue N; }'],
-            ['while (true) { break 0; }'],
-            ['while (true) { continue 0; }'],
-            ['while (true) { break -1; }'],
-            ['while (true) { continue -1; }'],
-            ['while (true) { break 1.0; }'],
-            ['while (true) { continue 1.0; }'],
-            ['while (true) { break 2.0; }'],
-            ['while (true) { continue 2.0; }'],
-
-            // and once with nested loops, just for good measure
-            ['while (true) { while (true) { break 3; } }'],
-            ['while (true) { while (true) { continue 3; } }'],
-        ];
-    }
-
-    /**
-     * @dataProvider validStatements
-     */
-    public function testProcessStatementPasses($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function validStatements()
-    {
-        return [
-            ['do { break; } while (true)'],
-            ['do { continue; } while (true)'],
-            ['for ($a; $b; $c) { break; }'],
-            ['for ($a; $b; $c) { continue; }'],
-            ['foreach ($a as $b) { break; }'],
-            ['foreach ($a as $b) { continue; }'],
-            ['switch (true) { default: break; }'],
-            ['switch (true) { default: continue; }'],
-            ['while (true) { break; }'],
-            ['while (true) { continue; }'],
-
-            // `break 1` is redundant, but not invalid
-            ['while (true) { break 1; }'],
-            ['while (true) { continue 1; }'],
-
-            // and once with nested loops just for good measure
-            ['while (true) { while (true) { break 2; } }'],
-            ['while (true) { while (true) { continue 2; } }'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/MagicConstantsPassTest.php b/vendor/psy/psysh/test/CodeCleaner/MagicConstantsPassTest.php
deleted file mode 100644
index 321ac6ff3d..0000000000
--- a/vendor/psy/psysh/test/CodeCleaner/MagicConstantsPassTest.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\MagicConstantsPass;
-
-class MagicConstantsPassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new MagicConstantsPass());
-    }
-
-    /**
-     * @dataProvider magicConstants
-     */
-    public function testProcess($from, $to)
-    {
-        $this->assertProcessesAs($from, $to);
-    }
-
-    public function magicConstants()
-    {
-        return [
-            ['__DIR__;', 'getcwd();'],
-            ['__FILE__;', "'';"],
-            ['___FILE___;', '___FILE___;'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/NamespacePassTest.php b/vendor/psy/psysh/test/CodeCleaner/NamespacePassTest.php
deleted file mode 100644
index e8f013961c..0000000000
--- a/vendor/psy/psysh/test/CodeCleaner/NamespacePassTest.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner;
-use Psy\CodeCleaner\NamespacePass;
-
-class NamespacePassTest extends CodeCleanerTestCase
-{
-    private $cleaner;
-
-    public function setUp()
-    {
-        $this->cleaner = new CodeCleaner();
-        $this->setPass(new NamespacePass($this->cleaner));
-    }
-
-    public function testProcess()
-    {
-        $this->parseAndTraverse('');
-        $this->assertNull($this->cleaner->getNamespace());
-
-        $this->parseAndTraverse('array_merge()');
-        $this->assertNull($this->cleaner->getNamespace());
-
-        // A non-block namespace statement should set the current namespace.
-        $this->parseAndTraverse('namespace Alpha');
-        $this->assertSame(['Alpha'], $this->cleaner->getNamespace());
-
-        // A new non-block namespace statement should override the current namespace.
-        $this->parseAndTraverse('namespace Beta; class B {}');
-        $this->assertSame(['Beta'], $this->cleaner->getNamespace());
-
-        // A new block namespace clears out the current namespace...
-        $this->parseAndTraverse('namespace Gamma { array_merge(); }');
-
-        if (\defined('PhpParser\\Node\\Stmt\\Namespace_::KIND_SEMICOLON')) {
-            $this->assertNull($this->cleaner->getNamespace());
-        } else {
-            // But not for PHP-Parser < v3.1.2 :(
-            $this->assertSame(['Gamma'], $this->cleaner->getNamespace());
-        }
-
-        $this->parseAndTraverse('namespace Delta');
-
-        // A null namespace clears out the current namespace.
-        $this->parseAndTraverse('namespace { array_merge(); }');
-        $this->assertNull($this->cleaner->getNamespace());
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/NoReturnValueTest.php b/vendor/psy/psysh/test/CodeCleaner/NoReturnValueTest.php
deleted file mode 100644
index 11e9d013f4..0000000000
--- a/vendor/psy/psysh/test/CodeCleaner/NoReturnValueTest.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use PhpParser\Node\Stmt\Expression;
-use Psy\CodeCleaner\NoReturnValue;
-use Psy\Test\ParserTestCase;
-
-class NoReturnValueTest extends ParserTestCase
-{
-    public function testCreate()
-    {
-        $stmt = NoReturnValue::create();
-        if (\class_exists('PhpParser\Node\Stmt\Expression')) {
-            $stmt = new Expression($stmt);
-        }
-
-        $this->assertSame(
-            $this->prettyPrint($this->parse('new \\Psy\CodeCleaner\\NoReturnValue()')),
-            $this->prettyPrint([$stmt])
-        );
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/PassableByReferencePassTest.php b/vendor/psy/psysh/test/CodeCleaner/PassableByReferencePassTest.php
deleted file mode 100644
index a73ad471f8..0000000000
--- a/vendor/psy/psysh/test/CodeCleaner/PassableByReferencePassTest.php
+++ /dev/null
@@ -1,104 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\PassableByReferencePass;
-
-class PassableByReferencePassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new PassableByReferencePass());
-    }
-
-    /**
-     * @dataProvider invalidStatements
-     * @expectedException \Psy\Exception\FatalErrorException
-     */
-    public function testProcessStatementFails($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function invalidStatements()
-    {
-        return [
-            ['array_pop(array())'],
-            ['array_pop(array($foo))'],
-            ['array_shift(array())'],
-        ];
-    }
-
-    /**
-     * @dataProvider validStatements
-     */
-    public function testProcessStatementPasses($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function validStatements()
-    {
-        return [
-            ['array_pop(json_decode("[]"))'],
-            ['array_pop($foo)'],
-            ['array_pop($foo->bar)'],
-            ['array_pop($foo::baz)'],
-            ['array_pop(Foo::qux)'],
-        ];
-    }
-
-    /**
-     * @dataProvider validArrayMultisort
-     */
-    public function testArrayMultisort($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function validArrayMultisort()
-    {
-        return [
-            ['array_multisort($a)'],
-            ['array_multisort($a, $b)'],
-            ['array_multisort($a, SORT_NATURAL, $b)'],
-            ['array_multisort($a, SORT_NATURAL | SORT_FLAG_CASE, $b)'],
-            ['array_multisort($a, SORT_ASC, SORT_NATURAL | SORT_FLAG_CASE, $b)'],
-            ['array_multisort($a, SORT_NATURAL | SORT_FLAG_CASE, SORT_ASC, $b)'],
-            ['array_multisort($a, $b, SORT_ASC, SORT_NATURAL | SORT_FLAG_CASE)'],
-            ['array_multisort($a, SORT_NATURAL | SORT_FLAG_CASE, $b, SORT_ASC, SORT_NATURAL | SORT_FLAG_CASE)'],
-            ['array_multisort($a, 1, $b)'],
-            ['array_multisort($a, 1 + 2, $b)'],
-            ['array_multisort($a, getMultisortFlags(), $b)'],
-        ];
-    }
-
-    /**
-     * @dataProvider invalidArrayMultisort
-     * @expectedException \Psy\Exception\FatalErrorException
-     */
-    public function testInvalidArrayMultisort($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function invalidArrayMultisort()
-    {
-        return [
-            ['array_multisort(1)'],
-            ['array_multisort(array(1, 2, 3))'],
-            ['array_multisort($a, SORT_NATURAL, SORT_ASC, SORT_NATURAL, $b)'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/RequirePassTest.php b/vendor/psy/psysh/test/CodeCleaner/RequirePassTest.php
deleted file mode 100644
index 6640e639b9..0000000000
--- a/vendor/psy/psysh/test/CodeCleaner/RequirePassTest.php
+++ /dev/null
@@ -1,93 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\RequirePass;
-
-class RequirePassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new RequirePass());
-    }
-
-    /**
-     * @dataProvider exitStatements
-     */
-    public function testExitStatement($from, $to)
-    {
-        $this->assertProcessesAs($from, $to);
-    }
-
-    public function exitStatements()
-    {
-        $resolve = '\\Psy\\CodeCleaner\\RequirePass::resolve';
-
-        return [
-            // The basics
-            ['require "a"', "require $resolve(\"a\", 1);"],
-            ['require "b.php"', "require $resolve(\"b.php\", 1);"],
-            ['require_once "c"', "require_once $resolve(\"c\", 1);"],
-            ['require_once "d.php"', "require_once $resolve(\"d.php\", 1);"],
-
-            // Ensure that line numbers work correctly
-            ["null;\nrequire \"e.php\"", "null;\nrequire $resolve(\"e.php\", 2);"],
-            ["null;\nrequire_once \"f.php\"", "null;\nrequire_once $resolve(\"f.php\", 2);"],
-
-            // Things with expressions
-            ['require $foo', "require $resolve(\$foo, 1);"],
-            ['require_once $foo', "require_once $resolve(\$foo, 1);"],
-            ['require ($bar = "g.php")', "require $resolve(\$bar = \"g.php\", 1);"],
-            ['require_once ($bar = "h.php")', "require_once $resolve(\$bar = \"h.php\", 1);"],
-            ['$bar = require ($baz = "i.php")', "\$bar = (require $resolve(\$baz = \"i.php\", 1));"],
-            ['$bar = require_once ($baz = "j.php")', "\$bar = (require_once $resolve(\$baz = \"j.php\", 1));"],
-        ];
-    }
-
-    /**
-     * @expectedException \Psy\Exception\FatalErrorException
-     * @expectedExceptionMessage Failed opening required 'not a file name' in eval()'d code on line 2
-     */
-    public function testResolve()
-    {
-        RequirePass::resolve('not a file name', 2);
-    }
-
-    /**
-     * @dataProvider emptyWarnings
-     *
-     * @expectedException \Psy\Exception\ErrorException
-     * @expectedExceptionMessage Filename cannot be empty on line 1
-     */
-    public function testResolveEmptyWarnings($file)
-    {
-        if (!E_WARNING & \error_reporting()) {
-            $this->markTestSkipped();
-        }
-
-        RequirePass::resolve($file, 1);
-    }
-
-    public function emptyWarnings()
-    {
-        return [
-            [null],
-            [false],
-            [''],
-        ];
-    }
-
-    public function testResolveWorks()
-    {
-        $this->assertEquals(__FILE__, RequirePass::resolve(__FILE__, 3));
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/StrictTypesPassTest.php b/vendor/psy/psysh/test/CodeCleaner/StrictTypesPassTest.php
deleted file mode 100644
index 54186190d5..0000000000
--- a/vendor/psy/psysh/test/CodeCleaner/StrictTypesPassTest.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\StrictTypesPass;
-
-class StrictTypesPassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        if (\version_compare(PHP_VERSION, '7.0', '<')) {
-            $this->markTestSkipped();
-        }
-
-        $this->setPass(new StrictTypesPass());
-    }
-
-    public function testProcess()
-    {
-        $this->assertProcessesAs('declare(strict_types=1)', 'declare (strict_types=1);');
-        $this->assertProcessesAs('null', "declare (strict_types=1);\nnull;");
-        $this->assertProcessesAs('declare(strict_types=0)', 'declare (strict_types=0);');
-        $this->assertProcessesAs('null', 'null;');
-    }
-
-    /**
-     * @dataProvider invalidDeclarations
-     * @expectedException \Psy\Exception\FatalErrorException
-     */
-    public function testInvalidDeclarations($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function invalidDeclarations()
-    {
-        return [
-            ['declare(strict_types=-1)'],
-            ['declare(strict_types=2)'],
-            ['declare(strict_types="foo")'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/UseStatementPassTest.php b/vendor/psy/psysh/test/CodeCleaner/UseStatementPassTest.php
deleted file mode 100644
index 4d5ac3420d..0000000000
--- a/vendor/psy/psysh/test/CodeCleaner/UseStatementPassTest.php
+++ /dev/null
@@ -1,102 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\UseStatementPass;
-
-class UseStatementPassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new UseStatementPass());
-    }
-
-    /**
-     * @dataProvider useStatements
-     */
-    public function testProcess($from, $to)
-    {
-        $this->assertProcessesAs($from, $to);
-    }
-
-    public function useStatements()
-    {
-        return [
-            [
-                "use StdClass as NotSoStd;\n\$std = new NotSoStd();",
-                '$std = new \\StdClass();',
-            ],
-            [
-                "namespace Foo;\n\nuse StdClass as S;\n\$std = new S();",
-                "namespace Foo;\n\n\$std = new \\StdClass();",
-            ],
-            [
-                "namespace Foo;\n\nuse \\StdClass as S;\n\$std = new S();",
-                "namespace Foo;\n\n\$std = new \\StdClass();",
-            ],
-            [
-                "use Foo\\Bar as fb;\n\$baz = new fb\\Baz();",
-                '$baz = new \\Foo\\Bar\\Baz();',
-            ],
-            [
-                "use Foo\\Bar;\n\$baz = new Bar\\Baz();",
-                '$baz = new \\Foo\\Bar\\Baz();',
-            ],
-            [
-                "namespace Foo;\nuse Bar;\n\$baz = new Bar\\Baz();",
-                "namespace Foo;\n\n\$baz = new \\Bar\\Baz();",
-            ],
-            [
-                "namespace Foo;\n\nuse \\StdClass as S;\n\$std = new S();\nnamespace Foo;\n\n\$std = new S();",
-                "namespace Foo;\n\n\$std = new \\StdClass();\nnamespace Foo;\n\n\$std = new \\StdClass();",
-            ],
-            [
-                "namespace Foo;\n\nuse \\StdClass as S;\n\$std = new S();\nnamespace Bar;\n\n\$std = new S();",
-                "namespace Foo;\n\n\$std = new \\StdClass();\nnamespace Bar;\n\n\$std = new S();",
-            ],
-            [
-                "use Foo\\Bar as fb, Qux as Q;\n\$baz = new fb\\Baz();\n\$qux = new Q();",
-                "\$baz = new \\Foo\\Bar\\Baz();\n\$qux = new \\Qux();",
-            ],
-        ];
-    }
-
-    /**
-     * @dataProvider groupUseStatements
-     */
-    public function testGroupUseProcess($from, $to)
-    {
-        $this->assertProcessesAs($from, $to);
-    }
-
-    public function groupUseStatements()
-    {
-        if (\version_compare(PHP_VERSION, '7.0', '<')) {
-            $this->markTestSkipped();
-        }
-
-        return [
-            [
-                "use Foo\\{Bar, Baz, Qux as Q};\n\$bar = new Bar();\n\$baz = new Baz();\n\$qux = new Q();",
-                "\$bar = new \\Foo\\Bar();\n\$baz = new \\Foo\\Baz();\n\$qux = new \\Foo\\Qux();",
-            ],
-            [
-                "use X\\{Foo, Bar as B};\n\$foo = new Foo();\n\$baz = new B\\Baz();",
-                "\$foo = new \\X\\Foo();\n\$baz = new \\X\\Bar\\Baz();",
-            ],
-            [
-                "use X\\{Foo, Bar as B};\n\$foo = new Foo();\n\$bar = new Bar();\n\$baz = new B\\Baz();",
-                "\$foo = new \\X\\Foo();\n\$bar = new Bar();\n\$baz = new \\X\\Bar\\Baz();",
-            ],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/ValidClassNamePassTest.php b/vendor/psy/psysh/test/CodeCleaner/ValidClassNamePassTest.php
deleted file mode 100644
index 2d9ed60b58..0000000000
--- a/vendor/psy/psysh/test/CodeCleaner/ValidClassNamePassTest.php
+++ /dev/null
@@ -1,325 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\ValidClassNamePass;
-
-class ValidClassNamePassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new ValidClassNamePass());
-    }
-
-    /**
-     * @dataProvider getInvalid
-     * @expectedException \Psy\Exception\FatalErrorException
-     */
-    public function testProcessInvalid($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function getInvalid()
-    {
-        // class declarations
-        return [
-            // core class
-            ['class stdClass {}'],
-            // capitalization
-            ['class stdClass {}'],
-
-            // collisions with interfaces and traits
-            ['interface stdClass {}'],
-            ['trait stdClass {}'],
-
-            // collisions inside the same code snippet
-            ['
-                class Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {}
-                class Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {}
-            '],
-            ['
-                class Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {}
-                trait Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {}
-            '],
-            ['
-                trait Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {}
-                class Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {}
-            '],
-            ['
-                trait Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {}
-                interface Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {}
-            '],
-            ['
-                interface Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {}
-                trait Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {}
-            '],
-            ['
-                interface Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {}
-                class Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {}
-            '],
-            ['
-                class Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {}
-                interface Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {}
-            '],
-
-            // namespaced collisions
-            ['
-                namespace Psy\\Test\\CodeCleaner {
-                    class ValidClassNamePassTest {}
-                }
-            '],
-            ['
-                namespace Psy\\Test\\CodeCleaner\\ValidClassNamePass {
-                    class Beta {}
-                }
-                namespace Psy\\Test\\CodeCleaner\\ValidClassNamePass {
-                    class Beta {}
-                }
-            '],
-
-            // extends and implements
-            ['class ValidClassNamePassTest extends NotAClass {}'],
-            ['class ValidClassNamePassTest extends ArrayAccess {}'],
-            ['class ValidClassNamePassTest implements stdClass {}'],
-            ['class ValidClassNamePassTest implements ArrayAccess, stdClass {}'],
-            ['interface ValidClassNamePassTest extends stdClass {}'],
-            ['interface ValidClassNamePassTest extends ArrayAccess, stdClass {}'],
-
-            // class instantiations
-            ['new Psy_Test_CodeCleaner_ValidClassNamePass_Gamma();'],
-            ['
-                namespace Psy\\Test\\CodeCleaner\\ValidClassNamePass {
-                    new Psy_Test_CodeCleaner_ValidClassNamePass_Delta();
-                }
-            '],
-
-            // class constant fetch
-            ['Psy\\Test\\CodeCleaner\\ValidClassNamePass\\NotAClass::FOO'],
-
-            // static call
-            ['Psy\\Test\\CodeCleaner\\ValidClassNamePass\\NotAClass::foo()'],
-            ['Psy\\Test\\CodeCleaner\\ValidClassNamePass\\NotAClass::$foo()'],
-            ['Psy\\Test\\CodeCleaner\\ValidClassNamePassTest::notAMethod()'],
-        ];
-    }
-
-    /**
-     * @dataProvider getValid
-     */
-    public function testProcessValid($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function getValid()
-    {
-        $valid = [
-            // class declarations
-            ['class Psy_Test_CodeCleaner_ValidClassNamePass_Epsilon {}'],
-            ['namespace Psy\Test\CodeCleaner\ValidClassNamePass; class Zeta {}'],
-            ['
-                namespace { class Psy_Test_CodeCleaner_ValidClassNamePass_Eta {}; }
-                namespace Psy\\Test\\CodeCleaner\\ValidClassNamePass {
-                    class Psy_Test_CodeCleaner_ValidClassNamePass_Eta {}
-                }
-            '],
-            ['namespace Psy\Test\CodeCleaner\ValidClassNamePass { class stdClass {} }'],
-
-            // class instantiations
-            ['new stdClass();'],
-            ['new stdClass();'],
-            ['
-                namespace Psy\\Test\\CodeCleaner\\ValidClassNamePass {
-                    class Theta {}
-                }
-                namespace Psy\\Test\\CodeCleaner\\ValidClassNamePass {
-                    new Theta();
-                }
-            '],
-            ['
-                namespace Psy\\Test\\CodeCleaner\\ValidClassNamePass {
-                    class Iota {}
-                    new Iota();
-                }
-            '],
-            ['
-                namespace Psy\\Test\\CodeCleaner\\ValidClassNamePass {
-                    class Kappa {}
-                }
-                namespace {
-                    new \\Psy\\Test\\CodeCleaner\\ValidClassNamePass\\Kappa();
-                }
-            '],
-
-            // Class constant fetch (ValidConstantPassTest validates the actual constant)
-            ['class A {} A::FOO'],
-            ['$a = new DateTime; $a::ATOM'],
-            ['interface A { const B = 1; } A::B'],
-
-            // static call
-            ['DateTime::createFromFormat()'],
-            ['DateTime::$someMethod()'],
-            ['Psy\Test\CodeCleaner\Fixtures\ClassWithStatic::doStuff()'],
-            ['Psy\Test\CodeCleaner\Fixtures\ClassWithCallStatic::doStuff()'],
-            ['Psy\Test\CodeCleaner\Fixtures\TraitWithStatic::doStuff()'],
-
-            // Allow `self` and `static` as class names.
-            ['
-                class Psy_Test_CodeCleaner_ValidClassNamePass_ClassWithStatic {
-                    public static function getInstance() {
-                        return new self();
-                    }
-                }
-            '],
-            ['
-                class Psy_Test_CodeCleaner_ValidClassNamePass_ClassWithStatic {
-                    public static function getInstance() {
-                        return new SELF();
-                    }
-                }
-            '],
-            ['
-                class Psy_Test_CodeCleaner_ValidClassNamePass_ClassWithStatic {
-                    public static function getInstance() {
-                        return new self;
-                    }
-                }
-            '],
-            ['
-                class Psy_Test_CodeCleaner_ValidClassNamePass_ClassWithStatic {
-                    public static function getInstance() {
-                        return new static();
-                    }
-                }
-            '],
-            ['
-                class Psy_Test_CodeCleaner_ValidClassNamePass_ClassWithStatic {
-                    public static function getInstance() {
-                        return new Static();
-                    }
-                }
-            '],
-            ['
-                class Psy_Test_CodeCleaner_ValidClassNamePass_ClassWithStatic {
-                    public static function getInstance() {
-                        return new static;
-                    }
-                }
-            '],
-            ['
-                class Psy_Test_CodeCleaner_ValidClassNamePass_ClassWithStatic {
-                    public static function foo() {
-                        return parent::bar();
-                    }
-                }
-            '],
-            ['
-                class Psy_Test_CodeCleaner_ValidClassNamePass_ClassWithStatic {
-                    public static function foo() {
-                        return self::bar();
-                    }
-                }
-            '],
-            ['
-                class Psy_Test_CodeCleaner_ValidClassNamePass_ClassWithStatic {
-                    public static function foo() {
-                        return static::bar();
-                    }
-                }
-            '],
-
-            ['class A { static function b() { return new A; } }'],
-            ['
-                class A {
-                    const B = 123;
-                    function c() {
-                        return A::B;
-                    }
-                }
-            '],
-            ['class A {} class B { function c() { return new A; } }'],
-
-            // recursion
-            ['class A { function a() { A::a(); } }'],
-
-            // conditionally defined classes
-            ['
-                class A {}
-                if (false) {
-                    class A {}
-                }
-            '],
-            ['
-                class A {}
-                if (true) {
-                    class A {}
-                } else if (false) {
-                    class A {}
-                } else {
-                    class A {}
-                }
-            '],
-            // ewww
-            ['
-                class A {}
-                if (true):
-                    class A {}
-                elseif (false):
-                    class A {}
-                else:
-                    class A {}
-                endif;
-            '],
-            ['
-                class A {}
-                while (false) { class A {} }
-            '],
-            ['
-                class A {}
-                do { class A {} } while (false);
-            '],
-            ['
-                class A {}
-                switch (1) {
-                    case 0:
-                        class A {}
-                        break;
-                    case 1:
-                        class A {}
-                        break;
-                    case 2:
-                        class A {}
-                        break;
-                }
-            '],
-        ];
-
-        // Ugh. There's gotta be a better way to test for this.
-        if (\class_exists('PhpParser\ParserFactory')) {
-            // PHP 7.0 anonymous classes, only supported by PHP Parser v2.x
-            $valid[] = ['$obj = new class() {}'];
-        }
-
-        if (\version_compare(PHP_VERSION, '5.5', '>=')) {
-            $valid[] = ['interface A {} A::class'];
-            $valid[] = ['interface A {} A::CLASS'];
-            $valid[] = ['class A {} A::class'];
-            $valid[] = ['class A {} A::CLASS'];
-            $valid[] = ['A::class'];
-            $valid[] = ['A::CLASS'];
-        }
-
-        return $valid;
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/ValidConstantPassTest.php b/vendor/psy/psysh/test/CodeCleaner/ValidConstantPassTest.php
deleted file mode 100644
index a6c52e0419..0000000000
--- a/vendor/psy/psysh/test/CodeCleaner/ValidConstantPassTest.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\ValidConstantPass;
-
-class ValidConstantPassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new ValidConstantPass());
-    }
-
-    /**
-     * @dataProvider getInvalidReferences
-     * @expectedException \Psy\Exception\FatalErrorException
-     */
-    public function testProcessInvalidConstantReferences($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function getInvalidReferences()
-    {
-        return [
-            ['Foo\BAR'],
-
-            // class constant fetch
-            ['Psy\Test\CodeCleaner\ValidConstantPassTest::FOO'],
-            ['DateTime::BACON'],
-        ];
-    }
-
-    /**
-     * @dataProvider getValidReferences
-     */
-    public function testProcessValidConstantReferences($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function getValidReferences()
-    {
-        return [
-            ['PHP_EOL'],
-
-            // class constant fetch
-            ['NotAClass::FOO'],
-            ['DateTime::ATOM'],
-            ['$a = new DateTime; $a::ATOM'],
-            ['DateTime::class'],
-            ['$a = new DateTime; $a::class'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/ValidConstructorPassTest.php b/vendor/psy/psysh/test/CodeCleaner/ValidConstructorPassTest.php
deleted file mode 100644
index 4f7e40c441..0000000000
--- a/vendor/psy/psysh/test/CodeCleaner/ValidConstructorPassTest.php
+++ /dev/null
@@ -1,93 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\ValidConstructorPass;
-
-class ValidConstructorPassTest extends CodeCleanerTestCase
-{
-    protected function setUp()
-    {
-        $this->setPass(new ValidConstructorPass());
-    }
-
-    /**
-     * @dataProvider invalidStatements
-     * @expectedException \Psy\Exception\FatalErrorException
-     */
-    public function testProcessInvalidStatement($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    /**
-     * @dataProvider invalidParserStatements
-     * @expectedException \Psy\Exception\ParseErrorException
-     */
-    public function testProcessInvalidStatementCatchedByParser($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function invalidStatements()
-    {
-        $data = [
-            ['class A { public static function A() {}}'],
-            ['class A { public static function a() {}}'],
-            ['class A { private static function A() {}}'],
-            ['class A { private static function a() {}}'],
-        ];
-
-        if (\version_compare(PHP_VERSION, '7.0', '>=')) {
-            $data[] = ['class A { public function A(): ?array {}}'];
-            $data[] = ['class A { public function a(): ?array {}}'];
-        }
-
-        return $data;
-    }
-
-    public function invalidParserStatements()
-    {
-        return [
-            ['class A { public static function __construct() {}}'],
-            ['class A { private static function __construct() {}}'],
-            ['class A { private static function __construct() {} public function A() {}}'],
-            ['namespace B; class A { private static function __construct() {}}'],
-        ];
-    }
-
-    /**
-     * @dataProvider validStatements
-     */
-    public function testProcessValidStatement($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function validStatements()
-    {
-        $data = [
-            ['class A { public static function A() {} public function __construct() {}}'],
-            ['class A { private function __construct() {} public static function A() {}}'],
-            ['namespace B; class A { private static function A() {}}'],
-        ];
-
-        if (\version_compare(PHP_VERSION, '7.0', '>=')) {
-            $data[] = ['class A { public static function A() {} public function __construct() {}}'];
-            $data[] = ['class A { private function __construct() {} public static function A(): ?array {}}'];
-            $data[] = ['namespace B; class A { private static function A(): ?array {}}'];
-        }
-
-        return $data;
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/ValidFunctionNamePassTest.php b/vendor/psy/psysh/test/CodeCleaner/ValidFunctionNamePassTest.php
deleted file mode 100644
index 70a17315d8..0000000000
--- a/vendor/psy/psysh/test/CodeCleaner/ValidFunctionNamePassTest.php
+++ /dev/null
@@ -1,180 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\ValidFunctionNamePass;
-
-class ValidFunctionNamePassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new ValidFunctionNamePass());
-    }
-
-    /**
-     * @dataProvider getInvalidFunctions
-     * @expectedException \Psy\Exception\FatalErrorException
-     */
-    public function testProcessInvalidFunctionCallsAndDeclarations($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function getInvalidFunctions()
-    {
-        return [
-            // function declarations
-            ['function array_merge() {}'],
-            ['function Array_Merge() {}'],
-            ['
-                function psy_test_codecleaner_validfunctionnamepass_alpha() {}
-                function psy_test_codecleaner_validfunctionnamepass_alpha() {}
-            '],
-            ['
-                namespace Psy\\Test\\CodeCleaner\\ValidFunctionNamePass {
-                    function beta() {}
-                }
-                namespace Psy\\Test\\CodeCleaner\\ValidFunctionNamePass {
-                    function beta() {}
-                }
-            '],
-
-            // function calls
-            ['psy_test_codecleaner_validfunctionnamepass_gamma()'],
-            ['
-                namespace Psy\\Test\\CodeCleaner\\ValidFunctionNamePass {
-                    delta();
-                }
-            '],
-
-            // recursion
-            ['function a() { a(); } function a() {}'],
-        ];
-    }
-
-    /**
-     * @dataProvider getValidFunctions
-     */
-    public function testProcessValidFunctionCallsAndDeclarations($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function getValidFunctions()
-    {
-        return [
-            ['function psy_test_codecleaner_validfunctionnamepass_epsilon() {}'],
-            ['
-                namespace Psy\\Test\\CodeCleaner\\ValidFunctionNamePass {
-                    function zeta() {}
-                }
-            '],
-            ['
-                namespace {
-                    function psy_test_codecleaner_validfunctionnamepass_eta() {}
-                }
-                namespace Psy\\Test\\CodeCleaner\\ValidFunctionNamePass {
-                    function psy_test_codecleaner_validfunctionnamepass_eta() {}
-                }
-            '],
-            ['
-                namespace Psy\\Test\\CodeCleaner\\ValidFunctionNamePass {
-                    function psy_test_codecleaner_validfunctionnamepass_eta() {}
-                }
-                namespace {
-                    function psy_test_codecleaner_validfunctionnamepass_eta() {}
-                }
-            '],
-            ['
-                namespace Psy\\Test\\CodeCleaner\\ValidFunctionNamePass {
-                    function array_merge() {}
-                }
-            '],
-
-            // function calls
-            ['array_merge();'],
-            ['
-                namespace Psy\\Test\\CodeCleaner\\ValidFunctionNamePass {
-                    function theta() {}
-                }
-                namespace Psy\\Test\\CodeCleaner\\ValidFunctionNamePass {
-                    theta();
-                }
-            '],
-            // closures
-            ['$test = function(){};$test()'],
-            ['
-                namespace Psy\\Test\\CodeCleaner\\ValidFunctionNamePass {
-                    function theta() {}
-                }
-                namespace {
-                    Psy\\Test\\CodeCleaner\\ValidFunctionNamePass\\theta();
-                }
-            '],
-
-            // recursion
-            ['function a() { a(); }'],
-
-            // conditionally defined functions
-            ['
-                function a() {}
-                if (false) {
-                    function a() {}
-                }
-            '],
-            ['
-                function a() {}
-                if (true) {
-                    function a() {}
-                } else if (false) {
-                    function a() {}
-                } else {
-                    function a() {}
-                }
-            '],
-            // ewww
-            ['
-                function a() {}
-                if (true):
-                    function a() {}
-                elseif (false):
-                    function a() {}
-                else:
-                    function a() {}
-                endif;
-            '],
-            ['
-                function a() {}
-                while (false) { function a() {} }
-            '],
-            ['
-                function a() {}
-                do { function a() {} } while (false);
-            '],
-            ['
-                function a() {}
-                switch (1) {
-                    case 0:
-                        function a() {}
-                        break;
-                    case 1:
-                        function a() {}
-                        break;
-                    case 2:
-                        function a() {}
-                        break;
-                }
-            '],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleanerTest.php b/vendor/psy/psysh/test/CodeCleanerTest.php
deleted file mode 100644
index 2195a4ff87..0000000000
--- a/vendor/psy/psysh/test/CodeCleanerTest.php
+++ /dev/null
@@ -1,131 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test;
-
-use Psy\CodeCleaner;
-
-class CodeCleanerTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @dataProvider semicolonCodeProvider
-     */
-    public function testAutomaticSemicolons(array $lines, $requireSemicolons, $expected)
-    {
-        $cc = new CodeCleaner();
-        $this->assertSame($expected, $cc->clean($lines, $requireSemicolons));
-    }
-
-    public function semicolonCodeProvider()
-    {
-        return [
-            [['true'],  false, 'return true;'],
-            [['true;'], false, 'return true;'],
-            [['true;'], true,  'return true;'],
-            [['true'],  true,  false],
-
-            [['echo "foo";', 'true'], true,  false],
-
-            [['echo "foo";', 'true'], false, "echo \"foo\";\nreturn true;"],
-        ];
-    }
-
-    /**
-     * @dataProvider unclosedStatementsProvider
-     */
-    public function testUnclosedStatements(array $lines, $isUnclosed)
-    {
-        $cc  = new CodeCleaner();
-        $res = $cc->clean($lines);
-
-        if ($isUnclosed) {
-            $this->assertFalse($res);
-        } else {
-            $this->assertNotFalse($res);
-        }
-    }
-
-    public function unclosedStatementsProvider()
-    {
-        return [
-            [['echo "'],   true],
-            [['echo \''],  true],
-            [['if (1) {'], true],
-
-            [['echo "foo",'], true],
-
-            [['echo ""'],   false],
-            [["echo ''"],   false],
-            [['if (1) {}'], false],
-
-            [['// closed comment'],    false],
-            [['function foo() { /**'], true],
-
-            [['var_dump(1, 2,'], true],
-            [['var_dump(1, 2,', '3)'], false],
-        ];
-    }
-
-    /**
-     * @dataProvider moreUnclosedStatementsProvider
-     */
-    public function testMoreUnclosedStatements(array $lines)
-    {
-        if (\defined('HHVM_VERSION')) {
-            $this->markTestSkipped('HHVM not supported.');
-        }
-
-        $cc  = new CodeCleaner();
-        $res = $cc->clean($lines);
-
-        $this->assertFalse($res);
-    }
-
-    public function moreUnclosedStatementsProvider()
-    {
-        return [
-            [["\$content = <<<EOS\n"]],
-            [["\$content = <<<'EOS'\n"]],
-
-            [['/* unclosed comment']],
-            [['/** unclosed comment']],
-        ];
-    }
-
-    /**
-     * @dataProvider invalidStatementsProvider
-     * @expectedException \Psy\Exception\ParseErrorException
-     */
-    public function testInvalidStatementsThrowParseErrors($code)
-    {
-        $cc = new CodeCleaner();
-        $cc->clean([$code]);
-    }
-
-    public function invalidStatementsProvider()
-    {
-        // n.b. We used to check that `var_dump(1,2,)` failed, but PHP Parser
-        // 4.x backported trailing comma function calls from PHP 7.3 for free!
-        // so we're not going to spend too much time worrying about it :)
-
-        return [
-            ['function "what'],
-            ["function 'what"],
-            ['echo }'],
-            ['echo {'],
-            ['if (1) }'],
-            ['echo """'],
-            ["echo '''"],
-            ['$foo "bar'],
-            ['$foo \'bar'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/Command/ExitCommandTest.php b/vendor/psy/psysh/test/Command/ExitCommandTest.php
deleted file mode 100644
index 45626be2ca..0000000000
--- a/vendor/psy/psysh/test/Command/ExitCommandTest.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Console\Tests\Command;
-
-use Psy\Command\ExitCommand;
-use Symfony\Component\Console\Tester\CommandTester;
-
-class ExitCommandTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @expectedException \Psy\Exception\BreakException
-     * @expectedExceptionMessage Goodbye
-     */
-    public function testExecute()
-    {
-        $command = new ExitCommand();
-        $tester = new CommandTester($command);
-        $tester->execute([]);
-    }
-}
diff --git a/vendor/psy/psysh/test/Command/ThrowUpCommandTest.php b/vendor/psy/psysh/test/Command/ThrowUpCommandTest.php
deleted file mode 100644
index 511c5809c2..0000000000
--- a/vendor/psy/psysh/test/Command/ThrowUpCommandTest.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Console\Tests\Command;
-
-use Psy\Command\ThrowUpCommand;
-use Psy\Shell;
-use Symfony\Component\Console\Tester\CommandTester;
-
-class ThrowUpCommandTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @dataProvider executeThis
-     */
-    public function testExecute($args, $hasCode, $expect, $addSilent = true)
-    {
-        $shell = $this->getMockBuilder('Psy\\Shell')
-            ->setMethods(['hasCode', 'addCode'])
-            ->getMock();
-
-        $shell->expects($this->once())->method('hasCode')->willReturn($hasCode);
-        $shell->expects($this->once())
-            ->method('addCode')
-            ->with($this->equalTo($expect), $this->equalTo($addSilent));
-
-        $command = new ThrowUpCommand();
-        $command->setApplication($shell);
-        $tester = new CommandTester($command);
-        $tester->execute($args);
-        $this->assertEquals('', $tester->getDisplay());
-    }
-
-    public function executeThis()
-    {
-        $throw = 'throw \Psy\Exception\ThrowUpException::fromThrowable';
-
-        return [
-            [[], false, $throw . '($_e);'],
-
-            [['exception' => '$ex'], false, $throw . '($ex);'],
-            [['exception' => 'getException()'], false, $throw . '(getException());'],
-            [['exception' => 'new \\Exception("WAT")'], false, $throw . '(new \\Exception("WAT"));'],
-
-            [['exception' => '\'some string\''], false, $throw . '(new \\Exception(\'some string\'));'],
-            [['exception' => '"WHEEEEEEE!"'], false, $throw . '(new \\Exception("WHEEEEEEE!"));'],
-
-            // Everything should work with or without semicolons.
-            [['exception' => '$ex;'], false, $throw . '($ex);'],
-            [['exception' => '"WHEEEEEEE!";'], false, $throw . '(new \\Exception("WHEEEEEEE!"));'],
-
-            // Don't add as silent code if we've already got code.
-            [[], true, $throw . '($_e);', false],
-            [['exception' => 'getException()'], true, $throw . '(getException());', false],
-            [['exception' => '\'some string\''], true, $throw . '(new \\Exception(\'some string\'));', false],
-        ];
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage No idea how to throw this
-     */
-    public function testMultipleArgsThrowsException()
-    {
-        $command = new ThrowUpCommand();
-        $command->setApplication(new Shell());
-        $tester = new CommandTester($command);
-        $tester->execute(['exception' => 'foo(); bar()']);
-    }
-
-    /**
-     * @expectedException \PhpParser\Error
-     * @expectedExceptionMessage Syntax error, unexpected ')' on line 1
-     */
-    public function testParseErrorThrowsException()
-    {
-        $command = new ThrowUpCommand();
-        $command->setApplication(new Shell());
-        $tester = new CommandTester($command);
-        $tester->execute(['exception' => 'foo)']);
-    }
-}
diff --git a/vendor/psy/psysh/test/Command/TimeitCommand/TimeitVisitorTest.php b/vendor/psy/psysh/test/Command/TimeitCommand/TimeitVisitorTest.php
deleted file mode 100644
index 1f317350ee..0000000000
--- a/vendor/psy/psysh/test/Command/TimeitCommand/TimeitVisitorTest.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Command\TimeitCommand;
-
-use PhpParser\NodeTraverser;
-use Psy\Command\TimeitCommand\TimeitVisitor;
-use Psy\Test\ParserTestCase;
-
-class TimeitVisitorTest extends ParserTestCase
-{
-    public function setUp()
-    {
-        $this->traverser = new NodeTraverser();
-        $this->traverser->addVisitor(new TimeitVisitor());
-    }
-
-    /**
-     * @dataProvider codez
-     */
-    public function testProcess($from, $to)
-    {
-        $this->assertProcessesAs($from, $to);
-    }
-
-    public function codez()
-    {
-        $start = '\Psy\Command\TimeitCommand::markStart';
-        $end = '\Psy\Command\TimeitCommand::markEnd';
-        $noReturn = 'new \Psy\CodeCleaner\NoReturnValue()';
-
-        return [
-            ['', "$end($start());"], // heh
-            ['a()', "$start(); $end(a());"],
-            ['$b()', "$start(); $end(\$b());"],
-            ['$c->d()', "$start(); $end(\$c->d());"],
-            ['e(); f()', "$start(); e(); $end(f());"],
-            ['function g() { return 1; }', "$start(); function g() {return 1;} $end($noReturn);"],
-            ['return 1', "$start(); return $end(1);"],
-            ['return 1; 2', "$start(); return $end(1); $end(2);"],
-            ['return 1; function h() {}', "$start(); return $end(1); function h() {} $end($noReturn);"],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/ConfigurationTest.php b/vendor/psy/psysh/test/ConfigurationTest.php
deleted file mode 100644
index b7b6c0c013..0000000000
--- a/vendor/psy/psysh/test/ConfigurationTest.php
+++ /dev/null
@@ -1,256 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test;
-
-use Psy\CodeCleaner;
-use Psy\Configuration;
-use Psy\Output\PassthruPager;
-use Psy\VersionUpdater\GitHubChecker;
-use Symfony\Component\Console\Output\ConsoleOutput;
-
-class ConfigurationTest extends \PHPUnit\Framework\TestCase
-{
-    private function getConfig($configFile = null)
-    {
-        return new Configuration([
-            'configFile' => $configFile ?: __DIR__ . '/fixtures/empty.php',
-        ]);
-    }
-
-    public function testDefaults()
-    {
-        $config = $this->getConfig();
-
-        $this->assertSame(\function_exists('readline'), $config->hasReadline());
-        $this->assertSame(\function_exists('readline'), $config->useReadline());
-        $this->assertSame(\function_exists('pcntl_signal'), $config->hasPcntl());
-        $this->assertSame(\function_exists('pcntl_signal'), $config->usePcntl());
-        $this->assertFalse($config->requireSemicolons());
-        $this->assertSame(Configuration::COLOR_MODE_AUTO, $config->colorMode());
-        $this->assertNull($config->getStartupMessage());
-    }
-
-    public function testGettersAndSetters()
-    {
-        $config = $this->getConfig();
-
-        $this->assertNull($config->getDataDir());
-        $config->setDataDir('wheee');
-        $this->assertSame('wheee', $config->getDataDir());
-
-        $this->assertNull($config->getConfigDir());
-        $config->setConfigDir('wheee');
-        $this->assertSame('wheee', $config->getConfigDir());
-    }
-
-    /**
-     * @dataProvider directories
-     */
-    public function testFilesAndDirectories($home, $configFile, $historyFile, $manualDbFile)
-    {
-        $oldHome = \getenv('HOME');
-        \putenv("HOME=$home");
-
-        $config = new Configuration();
-        $this->assertSame(\realpath($configFile),   \realpath($config->getConfigFile()));
-        $this->assertSame(\realpath($historyFile),  \realpath($config->getHistoryFile()));
-        $this->assertSame(\realpath($manualDbFile), \realpath($config->getManualDbFile()));
-
-        \putenv("HOME=$oldHome");
-    }
-
-    public function directories()
-    {
-        $base = \realpath(__DIR__ . '/fixtures');
-
-        return [
-            [
-                $base . '/default',
-                $base . '/default/.config/psysh/config.php',
-                $base . '/default/.config/psysh/psysh_history',
-                $base . '/default/.local/share/psysh/php_manual.sqlite',
-            ],
-            [
-                $base . '/legacy',
-                $base . '/legacy/.psysh/rc.php',
-                $base . '/legacy/.psysh/history',
-                $base . '/legacy/.psysh/php_manual.sqlite',
-            ],
-            [
-                $base . '/mixed',
-                $base . '/mixed/.psysh/config.php',
-                $base . '/mixed/.psysh/psysh_history',
-                null,
-            ],
-        ];
-    }
-
-    public function testLoadConfig()
-    {
-        $config  = $this->getConfig();
-        $cleaner = new CodeCleaner();
-        $pager   = new PassthruPager(new ConsoleOutput());
-
-        $config->loadConfig([
-            'useReadline'       => false,
-            'usePcntl'          => false,
-            'codeCleaner'       => $cleaner,
-            'pager'             => $pager,
-            'requireSemicolons' => true,
-            'errorLoggingLevel' => E_ERROR | E_WARNING,
-            'colorMode'         => Configuration::COLOR_MODE_FORCED,
-            'startupMessage'    => 'Psysh is awesome!',
-        ]);
-
-        $this->assertFalse($config->useReadline());
-        $this->assertFalse($config->usePcntl());
-        $this->assertSame($cleaner, $config->getCodeCleaner());
-        $this->assertSame($pager, $config->getPager());
-        $this->assertTrue($config->requireSemicolons());
-        $this->assertSame(E_ERROR | E_WARNING, $config->errorLoggingLevel());
-        $this->assertSame(Configuration::COLOR_MODE_FORCED, $config->colorMode());
-        $this->assertSame('Psysh is awesome!', $config->getStartupMessage());
-    }
-
-    public function testLoadConfigFile()
-    {
-        $config = $this->getConfig(__DIR__ . '/fixtures/config.php');
-
-        $runtimeDir = $this->joinPath(\realpath(\sys_get_temp_dir()), 'psysh_test', 'withconfig', 'temp');
-
-        $this->assertStringStartsWith($runtimeDir, \realpath($config->getTempFile('foo', 123)));
-        $this->assertStringStartsWith($runtimeDir, \realpath(\dirname($config->getPipe('pipe', 123))));
-        $this->assertStringStartsWith($runtimeDir, \realpath($config->getRuntimeDir()));
-
-        $this->assertSame(\function_exists('readline'), $config->useReadline());
-        $this->assertFalse($config->usePcntl());
-        $this->assertSame(E_ALL & ~E_NOTICE, $config->errorLoggingLevel());
-    }
-
-    public function testLoadLocalConfigFile()
-    {
-        $oldPwd = \getcwd();
-        \chdir(\realpath(__DIR__ . '/fixtures/project/'));
-
-        $config = new Configuration();
-
-        // When no configuration file is specified local project config is merged
-        $this->assertTrue($config->requireSemicolons());
-        $this->assertFalse($config->useUnicode());
-
-        $config = new Configuration(['configFile' => __DIR__ . '/fixtures/config.php']);
-
-        // Defining a configuration file skips loading local project config
-        $this->assertFalse($config->requireSemicolons());
-        $this->assertTrue($config->useUnicode());
-
-        \chdir($oldPwd);
-    }
-
-    /**
-     * @expectedException \Psy\Exception\DeprecatedException
-     */
-    public function testBaseDirConfigIsDeprecated()
-    {
-        $config = new Configuration(['baseDir' => 'fake']);
-    }
-
-    private function joinPath()
-    {
-        return \implode(DIRECTORY_SEPARATOR, \func_get_args());
-    }
-
-    public function testConfigIncludes()
-    {
-        $config = new Configuration([
-            'defaultIncludes' => ['/file.php'],
-            'configFile'      => __DIR__ . '/fixtures/empty.php',
-        ]);
-
-        $includes = $config->getDefaultIncludes();
-        $this->assertCount(1, $includes);
-        $this->assertSame('/file.php', $includes[0]);
-    }
-
-    public function testGetOutput()
-    {
-        $config = $this->getConfig();
-        $output = $config->getOutput();
-
-        $this->assertInstanceOf('Psy\Output\ShellOutput', $output);
-    }
-
-    public function getOutputDecoratedProvider()
-    {
-        return [
-            'auto' => [
-                null,
-                Configuration::COLOR_MODE_AUTO,
-            ],
-            'forced' => [
-                true,
-                Configuration::COLOR_MODE_FORCED,
-            ],
-            'disabled' => [
-                false,
-                Configuration::COLOR_MODE_DISABLED,
-            ],
-        ];
-    }
-
-    /** @dataProvider getOutputDecoratedProvider */
-    public function testGetOutputDecorated($expectation, $colorMode)
-    {
-        $config = $this->getConfig();
-        $config->setColorMode($colorMode);
-
-        $this->assertSame($expectation, $config->getOutputDecorated());
-    }
-
-    public function setColorModeValidProvider()
-    {
-        return [
-            'auto'     => [Configuration::COLOR_MODE_AUTO],
-            'forced'   => [Configuration::COLOR_MODE_FORCED],
-            'disabled' => [Configuration::COLOR_MODE_DISABLED],
-        ];
-    }
-
-    /** @dataProvider setColorModeValidProvider */
-    public function testSetColorModeValid($colorMode)
-    {
-        $config = $this->getConfig();
-        $config->setColorMode($colorMode);
-
-        $this->assertSame($colorMode, $config->colorMode());
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage invalid color mode: some invalid mode
-     */
-    public function testSetColorModeInvalid()
-    {
-        $config = $this->getConfig();
-        $config->setColorMode('some invalid mode');
-    }
-
-    public function testSetCheckerValid()
-    {
-        $config  = $this->getConfig();
-        $checker = new GitHubChecker();
-
-        $config->setChecker($checker);
-
-        $this->assertSame($checker, $config->getChecker());
-    }
-}
diff --git a/vendor/psy/psysh/test/ConsoleColorFactoryTest.php b/vendor/psy/psysh/test/ConsoleColorFactoryTest.php
deleted file mode 100644
index d58a48d369..0000000000
--- a/vendor/psy/psysh/test/ConsoleColorFactoryTest.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test;
-
-use Psy\Configuration;
-use Psy\ConsoleColorFactory;
-
-class ConsoleColorFactoryTest extends \PHPUnit\Framework\TestCase
-{
-    public function testGetConsoleColorAuto()
-    {
-        $colorMode = Configuration::COLOR_MODE_AUTO;
-        $factory   = new ConsoleColorFactory($colorMode);
-        $colors    = $factory->getConsoleColor();
-        $themes    = $colors->getThemes();
-
-        $this->assertFalse($colors->isStyleForced());
-        $this->assertSame(['blue'], $themes['line_number']);
-    }
-
-    public function testGetConsoleColorForced()
-    {
-        $colorMode = Configuration::COLOR_MODE_FORCED;
-        $factory   = new ConsoleColorFactory($colorMode);
-        $colors    = $factory->getConsoleColor();
-        $themes    = $colors->getThemes();
-
-        $this->assertTrue($colors->isStyleForced());
-        $this->assertSame(['blue'], $themes['line_number']);
-    }
-
-    public function testGetConsoleColorDisabled()
-    {
-        $colorMode = Configuration::COLOR_MODE_DISABLED;
-        $factory   = new ConsoleColorFactory($colorMode);
-        $colors    = $factory->getConsoleColor();
-        $themes    = $colors->getThemes();
-
-        $this->assertFalse($colors->isStyleForced());
-        $this->assertSame(['none'], $themes['line_number']);
-    }
-}
diff --git a/vendor/psy/psysh/test/ContextTest.php b/vendor/psy/psysh/test/ContextTest.php
deleted file mode 100644
index d193703670..0000000000
--- a/vendor/psy/psysh/test/ContextTest.php
+++ /dev/null
@@ -1,325 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test;
-
-use Psy\Context;
-
-class ContextTest extends \PHPUnit\Framework\TestCase
-{
-    public function testGet()
-    {
-        $this->assertTrue(true);
-    }
-
-    public function testGetAll()
-    {
-        $this->assertTrue(true);
-    }
-
-    public function testGetSpecialVariables()
-    {
-        $context = new Context();
-
-        $this->assertNull($context->get('_'));
-        $this->assertNull($context->getReturnValue());
-
-        $this->assertEquals(['_' => null], $context->getAll());
-
-        $e = new \Exception('eeeeeee');
-        $obj = new \StdClass();
-        $context->setLastException($e);
-        $context->setLastStdout('out');
-        $context->setBoundObject($obj);
-
-        $context->setCommandScopeVariables([
-            '__function'  => 'function',
-            '__method'    => 'method',
-            '__class'     => 'class',
-            '__namespace' => 'namespace',
-            '__file'      => 'file',
-            '__line'      => 'line',
-            '__dir'       => 'dir',
-        ]);
-
-        $expected = [
-            '_'           => null,
-            '_e'          => $e,
-            '__out'       => 'out',
-            'this'        => $obj,
-            '__function'  => 'function',
-            '__method'    => 'method',
-            '__class'     => 'class',
-            '__namespace' => 'namespace',
-            '__file'      => 'file',
-            '__line'      => 'line',
-            '__dir'       => 'dir',
-        ];
-
-        $this->assertEquals($expected, $context->getAll());
-    }
-
-    public function testSetAll()
-    {
-        $context = new Context();
-
-        $baz = new \StdClass();
-        $vars = [
-            'foo' => 'Foo',
-            'bar' => 123,
-            'baz' => $baz,
-
-            '_'         => 'fail',
-            '_e'        => 'fail',
-            '__out'     => 'fail',
-            'this'      => 'fail',
-            '__psysh__' => 'fail',
-
-            '__function'  => 'fail',
-            '__method'    => 'fail',
-            '__class'     => 'fail',
-            '__namespace' => 'fail',
-            '__file'      => 'fail',
-            '__line'      => 'fail',
-            '__dir'       => 'fail',
-        ];
-
-        $context->setAll($vars);
-
-        $this->assertEquals('Foo', $context->get('foo'));
-        $this->assertEquals(123, $context->get('bar'));
-        $this->assertSame($baz, $context->get('baz'));
-
-        $this->assertEquals(['foo' => 'Foo', 'bar' => 123, 'baz' => $baz, '_' => null], $context->getAll());
-    }
-
-    /**
-     * @dataProvider specialNames
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessageRegEx /Unknown variable: \$\w+/
-     */
-    public function testSetAllDoesNotSetSpecial($name)
-    {
-        $context = new Context();
-        $context->setAll([$name => 'fail']);
-        $context->get($name);
-    }
-
-    public function specialNames()
-    {
-        return [
-            ['_e'],
-            ['__out'],
-            ['this'],
-            ['__psysh__'],
-            ['__function'],
-            ['__method'],
-            ['__class'],
-            ['__namespace'],
-            ['__file'],
-            ['__line'],
-            ['__dir'],
-        ];
-    }
-
-    public function testReturnValue()
-    {
-        $context = new Context();
-        $this->assertNull($context->getReturnValue());
-
-        $val = 'some string';
-        $context->setReturnValue($val);
-        $this->assertEquals($val, $context->getReturnValue());
-        $this->assertEquals($val, $context->get('_'));
-
-        $obj = new \StdClass();
-        $context->setReturnValue($obj);
-        $this->assertSame($obj, $context->getReturnValue());
-        $this->assertSame($obj, $context->get('_'));
-
-        $context->setReturnValue(null);
-        $this->assertNull($context->getReturnValue());
-    }
-
-    public function testLastException()
-    {
-        $context = new Context();
-        $e = new \Exception('wat');
-        $context->setLastException($e);
-        $this->assertSame($e, $context->getLastException());
-        $this->assertSame($e, $context->get('_e'));
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage No most-recent exception
-     */
-    public function testLastExceptionThrowsSometimes()
-    {
-        $context = new Context();
-        $context->getLastException();
-    }
-
-    public function testLastStdout()
-    {
-        $context = new Context();
-        $context->setLastStdout('ouuuuut');
-        $this->assertEquals('ouuuuut', $context->getLastStdout());
-        $this->assertEquals('ouuuuut', $context->get('__out'));
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage No most-recent output
-     */
-    public function testLastStdoutThrowsSometimes()
-    {
-        $context = new Context();
-        $context->getLastStdout();
-    }
-
-    public function testBoundObject()
-    {
-        $context = new Context();
-        $this->assertNull($context->getBoundObject());
-
-        $obj = new \StdClass();
-        $context->setBoundObject($obj);
-        $this->assertSame($obj, $context->getBoundObject());
-        $this->assertSame($obj, $context->get('this'));
-
-        $context->setBoundObject(null);
-        $this->assertNull($context->getBoundObject());
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage Unknown variable: $this
-     */
-    public function testBoundObjectThrowsSometimes()
-    {
-        $context = new Context();
-        $context->get('this');
-    }
-
-    public function testBoundClass()
-    {
-        $context = new Context();
-        $this->assertNull($context->getBoundClass());
-
-        $context->setBoundClass('');
-        $this->assertNull($context->getBoundClass());
-
-        $context->setBoundClass('Psy\Shell');
-        $this->assertEquals('Psy\Shell', $context->getBoundClass());
-
-        $context->setBoundObject(new \StdClass());
-        $this->assertNotNull($context->getBoundObject());
-        $this->assertNull($context->getBoundClass());
-
-        $context->setBoundClass('Psy\Shell');
-        $this->assertEquals('Psy\Shell', $context->getBoundClass());
-        $this->assertNull($context->getBoundObject());
-
-        $context->setBoundClass(null);
-        $this->assertNull($context->getBoundClass());
-        $this->assertNull($context->getBoundObject());
-    }
-
-    public function testCommandScopeVariables()
-    {
-        $__function  = 'donkey';
-        $__method    = 'diddy';
-        $__class     = 'cranky';
-        $__namespace = 'funky';
-        $__file      = 'candy';
-        $__line      = 'dixie';
-        $__dir       = 'wrinkly';
-
-        $vars = \compact('__function', '__method', '__class', '__namespace', '__file', '__line', '__dir');
-
-        $context = new Context();
-        $context->setCommandScopeVariables($vars);
-
-        $this->assertEquals($vars, $context->getCommandScopeVariables());
-
-        $this->assertEquals($__function, $context->get('__function'));
-        $this->assertEquals($__method, $context->get('__method'));
-        $this->assertEquals($__class, $context->get('__class'));
-        $this->assertEquals($__namespace, $context->get('__namespace'));
-        $this->assertEquals($__file, $context->get('__file'));
-        $this->assertEquals($__line, $context->get('__line'));
-        $this->assertEquals($__dir, $context->get('__dir'));
-
-        $someVars = \compact('__function', '__namespace', '__file', '__line', '__dir');
-        $context->setCommandScopeVariables($someVars);
-    }
-
-    public function testGetUnusedCommandScopeVariableNames()
-    {
-        $context = new Context();
-
-        $this->assertEquals(
-            ['__function', '__method', '__class', '__namespace', '__file', '__line', '__dir'],
-            $context->getUnusedCommandScopeVariableNames()
-        );
-
-        $context->setCommandScopeVariables([
-            '__function'  => 'foo',
-            '__namespace' => 'bar',
-            '__file'      => 'baz',
-            '__line'      => 123,
-            '__dir'       => 'qux',
-        ]);
-
-        $this->assertEquals(
-            ['__method', '__class'],
-            \array_values($context->getUnusedCommandScopeVariableNames())
-        );
-    }
-
-    /**
-     * @dataProvider specialAndNotSpecialVariableNames
-     */
-    public function testIsSpecialVariableName($name, $isSpecial)
-    {
-        $context = new Context();
-
-        if ($isSpecial) {
-            $this->assertTrue($context->isSpecialVariableName($name));
-        } else {
-            $this->assertFalse($context->isSpecialVariableName($name));
-        }
-    }
-
-    public function specialAndNotSpecialVariableNames()
-    {
-        return [
-            ['foo', false],
-            ['psysh', false],
-            ['__psysh', false],
-
-            ['_', true],
-            ['_e', true],
-            ['__out', true],
-            ['this', true],
-            ['__psysh__', true],
-
-            ['__function', true],
-            ['__method', true],
-            ['__class', true],
-            ['__namespace', true],
-            ['__file', true],
-            ['__line', true],
-            ['__dir', true],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/Exception/BreakExceptionTest.php b/vendor/psy/psysh/test/Exception/BreakExceptionTest.php
deleted file mode 100644
index ae39fb1f48..0000000000
--- a/vendor/psy/psysh/test/Exception/BreakExceptionTest.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Exception;
-
-use Psy\Exception\BreakException;
-
-class BreakExceptionTest extends \PHPUnit\Framework\TestCase
-{
-    public function testInstance()
-    {
-        $e = new BreakException();
-
-        $this->assertInstanceOf('Psy\Exception\Exception', $e);
-        $this->assertInstanceOf('Psy\Exception\BreakException', $e);
-    }
-
-    public function testMessage()
-    {
-        $e = new BreakException('foo');
-
-        $this->assertContains('foo', $e->getMessage());
-        $this->assertSame('foo', $e->getRawMessage());
-    }
-
-    /**
-     * @expectedException \Psy\Exception\BreakException
-     * @expectedExceptionMessage Goodbye
-     */
-    public function testExitShell()
-    {
-        BreakException::exitShell();
-    }
-}
diff --git a/vendor/psy/psysh/test/Exception/ErrorExceptionTest.php b/vendor/psy/psysh/test/Exception/ErrorExceptionTest.php
deleted file mode 100644
index ef9fb9ab4d..0000000000
--- a/vendor/psy/psysh/test/Exception/ErrorExceptionTest.php
+++ /dev/null
@@ -1,125 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Exception;
-
-use Psy\Exception\ErrorException;
-
-class ErrorExceptionTest extends \PHPUnit\Framework\TestCase
-{
-    public function testInstance()
-    {
-        $e = new ErrorException();
-
-        $this->assertInstanceOf('Psy\Exception\Exception', $e);
-        $this->assertInstanceOf('ErrorException', $e);
-        $this->assertInstanceOf('Psy\Exception\ErrorException', $e);
-    }
-
-    public function testMessage()
-    {
-        $e = new ErrorException('foo');
-
-        $this->assertContains('foo', $e->getMessage());
-        $this->assertSame('foo', $e->getRawMessage());
-    }
-
-    /**
-     * @dataProvider getLevels
-     */
-    public function testErrorLevels($level, $type)
-    {
-        $e = new ErrorException('foo', 0, $level);
-        $this->assertContains('PHP ' . $type, $e->getMessage());
-    }
-
-    /**
-     * @dataProvider getLevels
-     */
-    public function testThrowException($level, $type)
-    {
-        try {
-            ErrorException::throwException($level, '{whot}', '{file}', '13');
-        } catch (ErrorException $e) {
-            $this->assertContains('PHP ' . $type, $e->getMessage());
-            $this->assertContains('{whot}', $e->getMessage());
-            $this->assertContains('in {file}', $e->getMessage());
-            $this->assertContains('on line 13', $e->getMessage());
-        }
-    }
-
-    public function getLevels()
-    {
-        return [
-            [E_WARNING,           'Warning'],
-            [E_CORE_WARNING,      'Warning'],
-            [E_COMPILE_WARNING,   'Warning'],
-            [E_USER_WARNING,      'Warning'],
-            [E_STRICT,            'Strict error'],
-            [E_DEPRECATED,        'Deprecated'],
-            [E_USER_DEPRECATED,   'Deprecated'],
-            [E_RECOVERABLE_ERROR, 'Recoverable fatal error'],
-            [0,                   'Error'],
-        ];
-    }
-
-    /**
-     * @dataProvider getUserLevels
-     */
-    public function testThrowExceptionAsErrorHandler($level, $type)
-    {
-        \set_error_handler(['Psy\Exception\ErrorException', 'throwException']);
-        try {
-            \trigger_error('{whot}', $level);
-        } catch (ErrorException $e) {
-            $this->assertContains('PHP ' . $type, $e->getMessage());
-            $this->assertContains('{whot}', $e->getMessage());
-        }
-        \restore_error_handler();
-    }
-
-    public function getUserLevels()
-    {
-        return [
-            [E_USER_ERROR,      'Error'],
-            [E_USER_WARNING,    'Warning'],
-            [E_USER_NOTICE,     'Notice'],
-            [E_USER_DEPRECATED, 'Deprecated'],
-        ];
-    }
-
-    public function testIgnoreExecutionLoopFilename()
-    {
-        $e = new ErrorException('{{message}}', 0, 1, '/fake/path/to/Psy/ExecutionLoop.php');
-        $this->assertEmpty($e->getFile());
-
-        $e = new ErrorException('{{message}}', 0, 1, 'c:\fake\path\to\Psy\ExecutionLoop.php');
-        $this->assertEmpty($e->getFile());
-
-        $e = new ErrorException('{{message}}', 0, 1, '/fake/path/to/Psy/File.php');
-        $this->assertNotEmpty($e->getFile());
-    }
-
-    public function testFromError()
-    {
-        if (\version_compare(PHP_VERSION, '7.0.0', '<')) {
-            $this->markTestSkipped();
-        }
-
-        $error = new \Error('{{message}}', 0);
-        $exception = ErrorException::fromError($error);
-
-        $this->assertContains('PHP Error:  {{message}}', $exception->getMessage());
-        $this->assertEquals(0, $exception->getCode());
-        $this->assertEquals($error->getFile(), $exception->getFile());
-        $this->assertSame($exception->getPrevious(), $error);
-    }
-}
diff --git a/vendor/psy/psysh/test/Exception/FatalErrorExceptionTest.php b/vendor/psy/psysh/test/Exception/FatalErrorExceptionTest.php
deleted file mode 100644
index 36c7dd8c11..0000000000
--- a/vendor/psy/psysh/test/Exception/FatalErrorExceptionTest.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Exception;
-
-use Psy\Exception\FatalErrorException;
-
-class FatalErrorExceptionTest extends \PHPUnit\Framework\TestCase
-{
-    public function testInstance()
-    {
-        $e = new FatalErrorException();
-
-        $this->assertInstanceOf('Psy\Exception\Exception', $e);
-        $this->assertInstanceOf('ErrorException', $e);
-        $this->assertInstanceOf('Psy\Exception\FatalErrorException', $e);
-    }
-
-    public function testMessage()
-    {
-        $e = new FatalErrorException('{msg}', 0, 0, '{filename}', 13);
-
-        $this->assertSame('{msg}', $e->getRawMessage());
-        $this->assertContains('{msg}', $e->getMessage());
-        $this->assertContains('{filename}', $e->getMessage());
-        $this->assertContains('line 13', $e->getMessage());
-    }
-
-    public function testMessageWithNoFilename()
-    {
-        $e = new FatalErrorException('{msg}');
-
-        $this->assertSame('{msg}', $e->getRawMessage());
-        $this->assertContains('{msg}', $e->getMessage());
-        $this->assertContains('eval()\'d code', $e->getMessage());
-    }
-
-    public function testNegativeOneLineNumberIgnored()
-    {
-        $e = new FatalErrorException('{msg}', 0, 1, null, -1);
-        $this->assertEquals(0, $e->getLine());
-    }
-}
diff --git a/vendor/psy/psysh/test/Exception/ParseErrorExceptionTest.php b/vendor/psy/psysh/test/Exception/ParseErrorExceptionTest.php
deleted file mode 100644
index 446b9389c4..0000000000
--- a/vendor/psy/psysh/test/Exception/ParseErrorExceptionTest.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Exception;
-
-use Psy\Exception\ParseErrorException;
-
-class ParseErrorExceptionTest extends \PHPUnit\Framework\TestCase
-{
-    public function testInstance()
-    {
-        $e = new ParseErrorException();
-
-        $this->assertInstanceOf('Psy\Exception\Exception', $e);
-        $this->assertInstanceOf('PhpParser\Error', $e);
-        $this->assertInstanceOf('Psy\Exception\ParseErrorException', $e);
-    }
-
-    public function testMessage()
-    {
-        $e = new ParseErrorException('{msg}', 1);
-
-        $this->assertContains('{msg}', $e->getMessage());
-        $this->assertContains('PHP Parse error:', $e->getMessage());
-    }
-
-    public function testConstructFromParseError()
-    {
-        $e = ParseErrorException::fromParseError(new \PhpParser\Error('{msg}'));
-
-        $this->assertContains('{msg}', $e->getRawMessage());
-        $this->assertContains('PHP Parse error:', $e->getMessage());
-    }
-}
diff --git a/vendor/psy/psysh/test/Exception/RuntimeExceptionTest.php b/vendor/psy/psysh/test/Exception/RuntimeExceptionTest.php
deleted file mode 100644
index 1121ea4e5b..0000000000
--- a/vendor/psy/psysh/test/Exception/RuntimeExceptionTest.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Exception;
-
-use Psy\Exception\RuntimeException;
-
-class RuntimeExceptionTest extends \PHPUnit\Framework\TestCase
-{
-    public function testException()
-    {
-        $msg = 'bananas';
-        $e   = new RuntimeException($msg);
-
-        $this->assertInstanceOf('Psy\Exception\Exception', $e);
-        $this->assertInstanceOf('RuntimeException', $e);
-        $this->assertInstanceOf('Psy\Exception\RuntimeException', $e);
-
-        $this->assertSame($msg, $e->getMessage());
-        $this->assertSame($msg, $e->getRawMessage());
-    }
-}
diff --git a/vendor/psy/psysh/test/Exception/ThrowUpExceptionTest.php b/vendor/psy/psysh/test/Exception/ThrowUpExceptionTest.php
deleted file mode 100644
index 09c3373240..0000000000
--- a/vendor/psy/psysh/test/Exception/ThrowUpExceptionTest.php
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Exception;
-
-use Psy\Exception\ThrowUpException;
-
-class ThrowUpExceptionTest extends \PHPUnit\Framework\TestCase
-{
-    public function testException()
-    {
-        $previous = new \Exception('{{message}}', 123);
-        $e = new ThrowUpException($previous);
-
-        $this->assertInstanceOf('Psy\Exception\Exception', $e);
-        $this->assertInstanceOf('Psy\Exception\ThrowUpException', $e);
-
-        $this->assertEquals("Throwing Exception with message '{{message}}'", $e->getMessage());
-        $this->assertEquals('{{message}}', $e->getRawMessage());
-        $this->assertEquals(123, $e->getCode());
-        $this->assertSame($previous, $e->getPrevious());
-    }
-
-    public function testFromThrowable()
-    {
-        $previous = new \Exception('{{message}}');
-        $e = ThrowUpException::fromThrowable($previous);
-
-        $this->assertInstanceOf('Psy\Exception\ThrowUpException', $e);
-        $this->assertSame($previous, $e->getPrevious());
-    }
-
-    public function testFromThrowableWithError()
-    {
-        if (\version_compare(PHP_VERSION, '7.0.0', '<')) {
-            $this->markTestSkipped();
-        }
-
-        $previous = new \Error('{{message}}');
-        $e = ThrowUpException::fromThrowable($previous);
-
-        $this->assertInstanceOf('Psy\Exception\ThrowUpException', $e);
-        $this->assertInstanceOf('Psy\Exception\ErrorException', $e->getPrevious());
-
-        $this->assertNotSame($previous, $e->getPrevious());
-        $this->assertSame($previous, $e->getPrevious()->getPrevious());
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage throw-up can only throw Exceptions and Errors
-     */
-    public function testFromThrowableThrowsError()
-    {
-        $notThrowable = new \StdClass();
-        ThrowUpException::fromThrowable($notThrowable);
-    }
-}
diff --git a/vendor/psy/psysh/test/Exception/TypeErrorExceptionTest.php b/vendor/psy/psysh/test/Exception/TypeErrorExceptionTest.php
deleted file mode 100644
index 01f251bb88..0000000000
--- a/vendor/psy/psysh/test/Exception/TypeErrorExceptionTest.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Exception;
-
-use Psy\Exception\TypeErrorException;
-
-class TypeErrorExceptionTest extends \PHPUnit\Framework\TestCase
-{
-    public function testException()
-    {
-        $e = new TypeErrorException('{{message}}', 13);
-
-        $this->assertInstanceOf('Psy\Exception\Exception', $e);
-        $this->assertInstanceOf('Psy\Exception\TypeErrorException', $e);
-
-        $this->assertEquals('TypeError: {{message}}', $e->getMessage());
-        $this->assertEquals('{{message}}', $e->getRawMessage());
-        $this->assertEquals(13, $e->getCode());
-    }
-
-    public function testStripsEvalFromMessage()
-    {
-        $message = 'Something or other, called in line 10: eval()\'d code';
-        $e = new TypeErrorException($message);
-        $this->assertEquals($message, $e->getRawMessage());
-        $this->assertEquals('TypeError: Something or other', $e->getMessage());
-    }
-
-    public function testFromTypeError()
-    {
-        if (\version_compare(PHP_VERSION, '7.0.0', '<')) {
-            $this->markTestSkipped();
-        }
-
-        $previous = new \TypeError('{{message}}', 13);
-        $e = TypeErrorException::fromTypeError($previous);
-
-        $this->assertInstanceOf('Psy\Exception\TypeErrorException', $e);
-        $this->assertEquals('TypeError: {{message}}', $e->getMessage());
-        $this->assertEquals('{{message}}', $e->getRawMessage());
-        $this->assertEquals(13, $e->getCode());
-    }
-}
diff --git a/vendor/psy/psysh/test/FakeShell.php b/vendor/psy/psysh/test/FakeShell.php
deleted file mode 100644
index 9f6fa97fc6..0000000000
--- a/vendor/psy/psysh/test/FakeShell.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test;
-
-use Psy\Shell;
-
-class FakeShell extends Shell
-{
-    public $matchers;
-
-    public function __construct(Configuration $config = null)
-    {
-        // This space intentionally left blank
-    }
-
-    public function addMatchers(array $matchers)
-    {
-        $this->matchers = $matchers;
-    }
-}
diff --git a/vendor/psy/psysh/test/Formatter/CodeFormatterTest.php b/vendor/psy/psysh/test/Formatter/CodeFormatterTest.php
deleted file mode 100644
index 87f56dfd70..0000000000
--- a/vendor/psy/psysh/test/Formatter/CodeFormatterTest.php
+++ /dev/null
@@ -1,129 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Formatter;
-
-use Psy\Formatter\CodeFormatter;
-use Psy\Test\Formatter\Fixtures\SomeClass;
-
-class CodeFormatterTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @dataProvider reflectors
-     */
-    public function testFormat($reflector, $expected)
-    {
-        $formatted = CodeFormatter::format($reflector);
-        $formattedWithoutColors = \preg_replace('#' . \chr(27) . '\[\d\d?m#', '', $formatted);
-
-        $this->assertEquals($expected, self::trimLines($formattedWithoutColors));
-        $this->assertNotEquals($expected, self::trimLines($formatted));
-    }
-
-    public function reflectors()
-    {
-        $expectClass = <<<'EOS'
-  > 14| class SomeClass
-    15| {
-    16|     const SOME_CONST = 'some const';
-    17|     private $someProp = 'some prop';
-    18|
-    19|     public function someMethod($someParam)
-    20|     {
-    21|         return 'some method';
-    22|     }
-    23|
-    24|     public static function someClosure()
-    25|     {
-    26|         return function () {
-    27|             return 'some closure';
-    28|         };
-    29|     }
-    30| }
-EOS;
-
-        $expectMethod = <<<'EOS'
-  > 19|     public function someMethod($someParam)
-    20|     {
-    21|         return 'some method';
-    22|     }
-EOS;
-
-        $expectClosure = <<<'EOS'
-  > 26|         return function () {
-    27|             return 'some closure';
-    28|         };
-EOS;
-
-        return [
-            [new \ReflectionClass('Psy\Test\Formatter\Fixtures\SomeClass'), $expectClass],
-            [new \ReflectionObject(new SomeClass()), $expectClass],
-            [new \ReflectionMethod('Psy\Test\Formatter\Fixtures\SomeClass', 'someMethod'), $expectMethod],
-            [new \ReflectionFunction(SomeClass::someClosure()), $expectClosure],
-        ];
-    }
-
-    /**
-     * @dataProvider invalidReflectors
-     * @expectedException \Psy\Exception\RuntimeException
-     */
-    public function testCodeFormatterThrowsExceptionForReflectorsItDoesntUnderstand($reflector)
-    {
-        CodeFormatter::format($reflector);
-    }
-
-    public function invalidReflectors()
-    {
-        $reflectors = [
-            [new \ReflectionExtension('json')],
-            [new \ReflectionParameter(['Psy\Test\Formatter\Fixtures\SomeClass', 'someMethod'], 'someParam')],
-            [new \ReflectionProperty('Psy\Test\Formatter\Fixtures\SomeClass', 'someProp')],
-        ];
-
-        if (\version_compare(PHP_VERSION, '7.1.0', '>=')) {
-            $reflectors[] = [new \ReflectionClassConstant('Psy\Test\Formatter\Fixtures\SomeClass', 'SOME_CONST')];
-        }
-
-        return $reflectors;
-    }
-
-    /**
-     * @dataProvider filenames
-     * @expectedException \Psy\Exception\RuntimeException
-     */
-    public function testCodeFormatterThrowsExceptionForMissingFile($filename)
-    {
-        $reflector = $this->getMockBuilder('ReflectionClass')
-            ->disableOriginalConstructor()
-            ->getMock();
-
-        $reflector
-            ->expects($this->once())
-            ->method('getFileName')
-            ->will($this->returnValue($filename));
-
-        CodeFormatter::format($reflector);
-    }
-
-    public function filenames()
-    {
-        if (\defined('HHVM_VERSION')) {
-            $this->markTestSkipped('We have issues with PHPUnit mocks on HHVM.');
-        }
-
-        return [[null], ['not a file']];
-    }
-
-    private static function trimLines($code)
-    {
-        return \rtrim(\implode("\n", \array_map('rtrim', \explode("\n", $code))));
-    }
-}
diff --git a/vendor/psy/psysh/test/Formatter/DocblockFormatterTest.php b/vendor/psy/psysh/test/Formatter/DocblockFormatterTest.php
deleted file mode 100644
index 134c76d02f..0000000000
--- a/vendor/psy/psysh/test/Formatter/DocblockFormatterTest.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Formatter;
-
-use Psy\Formatter\DocblockFormatter;
-
-class DocblockFormatterTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * This is a docblock!
-     *
-     * @author Justin Hileman <justin@justinhileman.info>
-     *
-     * @throws InvalidArgumentException if $foo is empty
-     *
-     * @param mixed $foo It's a foo thing
-     * @param int   $bar This is definitely bar
-     *
-     * @return string A string of no consequence
-     */
-    private function methodWithDocblock($foo, $bar = 1)
-    {
-        if (empty($foo)) {
-            throw new \InvalidArgumentException();
-        }
-
-        return 'method called';
-    }
-
-    public function testFormat()
-    {
-        $expected = <<<EOS
-<comment>Description:</comment>
-  This is a docblock!
-
-<comment>Throws:</comment>
-  <info>InvalidArgumentException </info> if \$foo is empty
-
-<comment>Param:</comment>
-  <info>mixed </info> <strong>\$foo </strong> It's a foo thing
-  <info>int   </info> <strong>\$bar </strong> This is definitely bar
-
-<comment>Return:</comment>
-  <info>string </info> A string of no consequence
-
-<comment>Author:</comment> Justin Hileman \<justin@justinhileman.info>
-EOS;
-
-        $this->assertSame(
-            $expected,
-            DocblockFormatter::format(new \ReflectionMethod($this, 'methodWithDocblock'))
-        );
-    }
-}
diff --git a/vendor/psy/psysh/test/Formatter/Fixtures/BoringTrait.php b/vendor/psy/psysh/test/Formatter/Fixtures/BoringTrait.php
deleted file mode 100644
index 9f13ab9325..0000000000
--- a/vendor/psy/psysh/test/Formatter/Fixtures/BoringTrait.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Formatter\Fixtures;
-
-trait BoringTrait
-{
-    public function boringMethod($one = 1)
-    {
-        // Do nothing.
-    }
-}
diff --git a/vendor/psy/psysh/test/Formatter/Fixtures/SomeClass.php b/vendor/psy/psysh/test/Formatter/Fixtures/SomeClass.php
deleted file mode 100644
index 8208fe348d..0000000000
--- a/vendor/psy/psysh/test/Formatter/Fixtures/SomeClass.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Formatter\Fixtures;
-
-class SomeClass
-{
-    const SOME_CONST = 'some const';
-    private $someProp = 'some prop';
-
-    public function someMethod($someParam)
-    {
-        return 'some method';
-    }
-
-    public static function someClosure()
-    {
-        return function () {
-            return 'some closure';
-        };
-    }
-}
diff --git a/vendor/psy/psysh/test/Formatter/SignatureFormatterTest.php b/vendor/psy/psysh/test/Formatter/SignatureFormatterTest.php
deleted file mode 100644
index 096e6ae786..0000000000
--- a/vendor/psy/psysh/test/Formatter/SignatureFormatterTest.php
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Formatter;
-
-use Psy\Formatter\SignatureFormatter;
-use Psy\Reflection\ReflectionClassConstant;
-use Psy\Reflection\ReflectionConstant_;
-
-class SignatureFormatterTest extends \PHPUnit\Framework\TestCase
-{
-    const FOO = 'foo value';
-    private static $bar = 'bar value';
-
-    private function someFakeMethod(array $one, $two = 'TWO', \Reflector $three = null)
-    {
-    }
-
-    /**
-     * @dataProvider signatureReflectors
-     */
-    public function testFormat($reflector, $expected)
-    {
-        $this->assertSame($expected, \strip_tags(SignatureFormatter::format($reflector)));
-    }
-
-    public function signatureReflectors()
-    {
-        return [
-            [
-                new \ReflectionFunction('implode'),
-                \defined('HHVM_VERSION') ? 'function implode($arg1, $arg2 = null)' : 'function implode($glue, $pieces)',
-            ],
-            [
-                ReflectionClassConstant::create($this, 'FOO'),
-                'const FOO = "foo value"',
-            ],
-            [
-                new \ReflectionMethod($this, 'someFakeMethod'),
-                'private function someFakeMethod(array $one, $two = \'TWO\', Reflector $three = null)',
-            ],
-            [
-                new \ReflectionProperty($this, 'bar'),
-                'private static $bar',
-            ],
-            [
-                new \ReflectionClass('Psy\CodeCleaner\CodeCleanerPass'),
-                'abstract class Psy\CodeCleaner\CodeCleanerPass '
-                . 'extends PhpParser\NodeVisitorAbstract '
-                . 'implements PhpParser\NodeVisitor',
-            ],
-            [
-                new \ReflectionFunction('array_chunk'),
-                'function array_chunk($arg, $size, $preserve_keys = unknown)',
-            ],
-            [
-                new \ReflectionClass('Psy\Test\Formatter\Fixtures\BoringTrait'),
-                'trait Psy\Test\Formatter\Fixtures\BoringTrait',
-            ],
-            [
-                new \ReflectionMethod('Psy\Test\Formatter\Fixtures\BoringTrait', 'boringMethod'),
-                'public function boringMethod($one = 1)',
-            ],
-            [
-                new ReflectionConstant_('E_ERROR'),
-                'define("E_ERROR", 1)',
-            ],
-            [
-                new ReflectionConstant_('PHP_VERSION'),
-                'define("PHP_VERSION", "' . PHP_VERSION . '")',
-            ],
-            [
-                new ReflectionConstant_('__LINE__'),
-                'define("__LINE__", null)', // @todo show this as `unknown` in red or something?
-            ],
-        ];
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testSignatureFormatterThrowsUnknownReflectorExpeption()
-    {
-        $refl = $this->getMockBuilder('Reflector')->getMock();
-        SignatureFormatter::format($refl);
-    }
-}
diff --git a/vendor/psy/psysh/test/Input/CodeArgumentTest.php b/vendor/psy/psysh/test/Input/CodeArgumentTest.php
deleted file mode 100644
index c39615208d..0000000000
--- a/vendor/psy/psysh/test/Input/CodeArgumentTest.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Input;
-
-use Psy\Input\CodeArgument;
-use Symfony\Component\Console\Input\InputArgument;
-
-class CodeArgumentTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @dataProvider getInvalidModes
-     * @expectedException \InvalidArgumentException
-     */
-    public function testInvalidModes($mode)
-    {
-        new CodeArgument('wat', $mode);
-    }
-
-    public function getInvalidModes()
-    {
-        return [
-            [InputArgument::IS_ARRAY],
-            [InputArgument::IS_ARRAY | InputArgument::REQUIRED],
-            [InputArgument::IS_ARRAY | InputArgument::OPTIONAL],
-        ];
-    }
-
-    /**
-     * @dataProvider getValidModes
-     */
-    public function testValidModes($mode)
-    {
-        $this->assertInstanceOf('Psy\Input\CodeArgument', new CodeArgument('yeah', $mode));
-    }
-
-    public function getValidModes()
-    {
-        return [
-            [InputArgument::REQUIRED],
-            [InputArgument::OPTIONAL],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/Input/FilterOptionsTest.php b/vendor/psy/psysh/test/Input/FilterOptionsTest.php
deleted file mode 100644
index 7ed8919bd1..0000000000
--- a/vendor/psy/psysh/test/Input/FilterOptionsTest.php
+++ /dev/null
@@ -1,105 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Input;
-
-use Psy\Input\FilterOptions;
-use Symfony\Component\Console\Input\InputDefinition;
-use Symfony\Component\Console\Input\StringInput;
-
-class FilterOptionsTest extends \PHPUnit\Framework\TestCase
-{
-    public function testGetOptions()
-    {
-        $opts = FilterOptions::getOptions();
-        $this->assertCount(3, $opts);
-    }
-
-    /**
-     * @dataProvider validInputs
-     */
-    public function testBindValidInput($input, $hasFilter = true)
-    {
-        $input = $this->getInput($input);
-        $filterOptions = new FilterOptions();
-        $filterOptions->bind($input);
-
-        $this->assertEquals($hasFilter, $filterOptions->hasFilter());
-    }
-
-    public function validInputs()
-    {
-        return [
-            ['--grep="bar"'],
-            ['--grep="bar" --invert'],
-            ['--grep="bar" --insensitive'],
-            ['--grep="bar" --invert --insensitive'],
-            ['', false],
-        ];
-    }
-
-    /**
-     * @dataProvider invalidInputs
-     * @expectedException \Psy\Exception\RuntimeException
-     */
-    public function testBindInvalidInput($input)
-    {
-        $input = $this->getInput($input);
-        $filterOptions = new FilterOptions();
-        $filterOptions->bind($input);
-    }
-
-    public function invalidInputs()
-    {
-        return [
-            ['--invert'],
-            ['--insensitive'],
-            ['--invert --insensitive'],
-
-            // invalid because regex
-            ['--grep /*/'],
-        ];
-    }
-
-    /**
-     * @dataProvider matchData
-     */
-    public function testMatch($input, $str, $matches)
-    {
-        $input = $this->getInput($input);
-        $filterOptions = new FilterOptions();
-        $filterOptions->bind($input);
-
-        $this->assertEquals($matches, $filterOptions->match($str));
-    }
-
-    public function matchData()
-    {
-        return [
-            ['', 'whatever', true],
-            ['--grep FOO', 'foo', false],
-            ['--grep foo', 'foo', true],
-            ['--grep foo', 'food', true],
-            ['--grep oo', 'Food', true],
-            ['--grep oo -i', 'FOOD', true],
-            ['--grep foo -v', 'food', false],
-            ['--grep foo -v', 'whatever', true],
-        ];
-    }
-
-    private function getInput($input)
-    {
-        $input = new StringInput($input);
-        $input->bind(new InputDefinition(FilterOptions::getOptions()));
-
-        return $input;
-    }
-}
diff --git a/vendor/psy/psysh/test/Input/ShellInputTest.php b/vendor/psy/psysh/test/Input/ShellInputTest.php
deleted file mode 100644
index f19d126180..0000000000
--- a/vendor/psy/psysh/test/Input/ShellInputTest.php
+++ /dev/null
@@ -1,254 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Input;
-
-use Psy\Input\CodeArgument;
-use Psy\Input\ShellInput;
-use Symfony\Component\Console\Input\InputArgument;
-use Symfony\Component\Console\Input\InputDefinition;
-use Symfony\Component\Console\Input\InputOption;
-
-class ShellInputTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage Unexpected CodeArgument before the final position: a
-     */
-    public function testThrowsWhenCodeArgumentNotInFinalPosition()
-    {
-        $definition = new InputDefinition([
-            new CodeArgument('a', null, CodeArgument::REQUIRED),
-            new InputArgument('b', null, InputArgument::REQUIRED),
-        ]);
-
-        $input = new ShellInput('foo bar');
-        $input->bind($definition);
-    }
-
-    public function testInputOptionWithGivenString()
-    {
-        $definition = new InputDefinition([
-            new InputOption('foo', null, InputOption::VALUE_REQUIRED),
-            new CodeArgument('code', null, CodeArgument::REQUIRED),
-        ]);
-
-        $input = new ShellInput('--foo=bar echo "baz\\\\n";');
-        $input->bind($definition);
-        $this->assertSame('bar', $input->getOption('foo'));
-        $this->assertSame('echo "baz\n";', $input->getArgument('code'));
-    }
-
-    public function testInputOptionWithoutCodeArguments()
-    {
-        $definition = new InputDefinition([
-            new InputOption('foo', null, InputOption::VALUE_REQUIRED),
-            new InputOption('qux', 'q', InputOption::VALUE_REQUIRED),
-            new InputArgument('bar', null, InputArgument::REQUIRED),
-            new InputArgument('baz', null, InputArgument::REQUIRED),
-        ]);
-
-        $input = new ShellInput('--foo=foo -q qux bar "baz\\\\n"');
-        $input->bind($definition);
-        $this->assertSame('foo', $input->getOption('foo'));
-        $this->assertSame('qux', $input->getOption('qux'));
-        $this->assertSame('bar', $input->getArgument('bar'));
-        $this->assertSame('baz\\n', $input->getArgument('baz'));
-    }
-
-    public function testInputWithDashDash()
-    {
-        $definition = new InputDefinition([
-            new InputOption('foo', null, InputOption::VALUE_REQUIRED),
-            new CodeArgument('code', null, CodeArgument::REQUIRED),
-        ]);
-
-        $input = new ShellInput('-- echo --foo::$bar');
-        $input->bind($definition);
-        $this->assertNull($input->getOption('foo'));
-        $this->assertSame('echo --foo::$bar', $input->getArgument('code'));
-    }
-
-    public function testInputWithEmptyString()
-    {
-        $definition = new InputDefinition([
-            new InputOption('foo', null, InputOption::VALUE_REQUIRED),
-            new CodeArgument('code', null, CodeArgument::REQUIRED),
-        ]);
-
-        $input = new ShellInput('"" --foo bar');
-        $input->bind($definition);
-        $this->assertSame('"" --foo bar', $input->getArgument('code'));
-    }
-
-    /**
-     * @dataProvider getTokenizeData
-     */
-    public function testTokenize($input, $tokens, $message)
-    {
-        $input = new ShellInput($input);
-        $r = new \ReflectionClass('Psy\Input\ShellInput');
-        $p = $r->getProperty('tokenPairs');
-        $p->setAccessible(true);
-        $this->assertSame($tokens, $p->getValue($input), $message);
-    }
-
-    public function getTokenizeData()
-    {
-        // Test all the cases from StringInput test, ensuring they have an appropriate $rest token.
-        return [
-            [
-                '',
-                [],
-                '->tokenize() parses an empty string',
-            ],
-            [
-                'foo',
-                [['foo', 'foo']],
-                '->tokenize() parses arguments',
-            ],
-            [
-                '  foo  bar  ',
-                [['foo', 'foo  bar  '], ['bar', 'bar  ']],
-                '->tokenize() ignores whitespaces between arguments',
-            ],
-            [
-                '"quoted"',
-                [['quoted', '"quoted"']],
-                '->tokenize() parses quoted arguments',
-            ],
-            [
-                "'quoted'",
-                [['quoted', "'quoted'"]],
-                '->tokenize() parses quoted arguments',
-            ],
-            [
-                "'a\rb\nc\td'",
-                [["a\rb\nc\td", "'a\rb\nc\td'"]],
-                '->tokenize() parses whitespace chars in strings',
-            ],
-            [
-                "'a'\r'b'\n'c'\t'd'",
-                [
-                    ['a', "'a'\r'b'\n'c'\t'd'"],
-                    ['b', "'b'\n'c'\t'd'"],
-                    ['c', "'c'\t'd'"],
-                    ['d', "'d'"],
-                ],
-                '->tokenize() parses whitespace chars between args as spaces',
-            ],
-
-            /*
-             * These don't play nice with unescaping input, but the end result
-             * is correct, so disable the tests for now.
-             *
-             * @todo Sort this out and re-enable these test cases.
-             */
-            // [
-            //     '\"quoted\"',
-            //     [['"quoted"', '\"quoted\"']],
-            //     '->tokenize() parses escaped-quoted arguments',
-            // ],
-            // [
-            //     "\'quoted\'",
-            //     [['\'quoted\'', "\'quoted\'"]],
-            //     '->tokenize() parses escaped-quoted arguments',
-            // ],
-
-            [
-                '-a',
-                 [['-a', '-a']],
-                 '->tokenize() parses short options',
-             ],
-            [
-                '-azc',
-                [['-azc', '-azc']],
-                '->tokenize() parses aggregated short options',
-            ],
-            [
-                '-awithavalue',
-                [['-awithavalue', '-awithavalue']],
-                '->tokenize() parses short options with a value',
-            ],
-            [
-                '-a"foo bar"',
-                [['-afoo bar', '-a"foo bar"']],
-                '->tokenize() parses short options with a value',
-            ],
-            [
-                '-a"foo bar""foo bar"',
-                [['-afoo barfoo bar', '-a"foo bar""foo bar"']],
-                '->tokenize() parses short options with a value',
-            ],
-            [
-                '-a\'foo bar\'',
-                [['-afoo bar', '-a\'foo bar\'']],
-                '->tokenize() parses short options with a value',
-            ],
-            [
-                '-a\'foo bar\'\'foo bar\'',
-                [['-afoo barfoo bar', '-a\'foo bar\'\'foo bar\'']],
-                '->tokenize() parses short options with a value',
-            ],
-            [
-                '-a\'foo bar\'"foo bar"',
-                [['-afoo barfoo bar', '-a\'foo bar\'"foo bar"']],
-                '->tokenize() parses short options with a value',
-            ],
-            [
-                '--long-option',
-                [['--long-option', '--long-option']],
-                '->tokenize() parses long options',
-            ],
-            [
-                '--long-option=foo',
-                [['--long-option=foo', '--long-option=foo']],
-                '->tokenize() parses long options with a value',
-            ],
-            [
-                '--long-option="foo bar"',
-                [['--long-option=foo bar', '--long-option="foo bar"']],
-                '->tokenize() parses long options with a value',
-            ],
-            [
-                '--long-option="foo bar""another"',
-                [['--long-option=foo baranother', '--long-option="foo bar""another"']],
-                '->tokenize() parses long options with a value',
-            ],
-            [
-                '--long-option=\'foo bar\'',
-                [['--long-option=foo bar', '--long-option=\'foo bar\'']],
-                '->tokenize() parses long options with a value',
-            ],
-            [
-                "--long-option='foo bar''another'",
-                [['--long-option=foo baranother', "--long-option='foo bar''another'"]],
-                '->tokenize() parses long options with a value',
-            ],
-            [
-                "--long-option='foo bar'\"another\"",
-                [['--long-option=foo baranother', "--long-option='foo bar'\"another\""]],
-                '->tokenize() parses long options with a value',
-            ],
-            [
-                'foo -a -ffoo --long bar',
-                [
-                    ['foo', 'foo -a -ffoo --long bar'],
-                    ['-a', '-a -ffoo --long bar'],
-                    ['-ffoo', '-ffoo --long bar'],
-                    ['--long', '--long bar'],
-                    ['bar', 'bar'],
-                ],
-                '->tokenize() parses when several arguments and options',
-            ],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/ParserTestCase.php b/vendor/psy/psysh/test/ParserTestCase.php
deleted file mode 100644
index a0740b6636..0000000000
--- a/vendor/psy/psysh/test/ParserTestCase.php
+++ /dev/null
@@ -1,97 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test;
-
-use PhpParser\PrettyPrinter\Standard as Printer;
-use Psy\Exception\ParseErrorException;
-use Psy\ParserFactory;
-
-class ParserTestCase extends \PHPUnit\Framework\TestCase
-{
-    protected $traverser;
-    private $parser;
-    private $printer;
-
-    public function tearDown()
-    {
-        $this->traverser = null;
-        $this->parser = null;
-        $this->printer = null;
-    }
-
-    protected function parse($code, $prefix = '<?php ')
-    {
-        $code = $prefix . $code;
-        try {
-            return $this->getParser()->parse($code);
-        } catch (\PhpParser\Error $e) {
-            if (!$this->parseErrorIsEOF($e)) {
-                throw ParseErrorException::fromParseError($e);
-            }
-
-            try {
-                // Unexpected EOF, try again with an implicit semicolon
-                return $this->getParser()->parse($code . ';');
-            } catch (\PhpParser\Error $e) {
-                return false;
-            }
-        }
-    }
-
-    protected function traverse(array $stmts)
-    {
-        if (!isset($this->traverser)) {
-            throw new \RuntimeException('Test cases must provide a traverser');
-        }
-
-        return $this->traverser->traverse($stmts);
-    }
-
-    protected function prettyPrint(array $stmts)
-    {
-        return $this->getPrinter()->prettyPrint($stmts);
-    }
-
-    protected function assertProcessesAs($from, $to)
-    {
-        $stmts = $this->parse($from);
-        $stmts = $this->traverse($stmts);
-        $toStmts = $this->parse($to);
-        $this->assertSame($this->prettyPrint($toStmts), $this->prettyPrint($stmts));
-    }
-
-    private function getParser()
-    {
-        if (!isset($this->parser)) {
-            $parserFactory = new ParserFactory();
-            $this->parser  = $parserFactory->createParser();
-        }
-
-        return $this->parser;
-    }
-
-    private function getPrinter()
-    {
-        if (!isset($this->printer)) {
-            $this->printer = new Printer();
-        }
-
-        return $this->printer;
-    }
-
-    private function parseErrorIsEOF(\PhpParser\Error $e)
-    {
-        $msg = $e->getRawMessage();
-
-        return ($msg === 'Unexpected token EOF') || (\strpos($msg, 'Syntax error, unexpected EOF') !== false);
-    }
-}
diff --git a/vendor/psy/psysh/test/Readline/GNUReadlineTest.php b/vendor/psy/psysh/test/Readline/GNUReadlineTest.php
deleted file mode 100644
index 406377fcc6..0000000000
--- a/vendor/psy/psysh/test/Readline/GNUReadlineTest.php
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Readline;
-
-use Psy\Readline\GNUReadline;
-
-class GNUReadlineTest extends \PHPUnit\Framework\TestCase
-{
-    private $historyFile;
-
-    public function setUp()
-    {
-        if (!GNUReadline::isSupported()) {
-            $this->markTestSkipped('GNUReadline not enabled');
-        }
-
-        $this->historyFile = \tempnam(\sys_get_temp_dir(), 'psysh_test_history');
-        \file_put_contents($this->historyFile, "_HiStOrY_V2_\n");
-    }
-
-    public function testHistory()
-    {
-        $readline = new GNUReadline($this->historyFile);
-        $this->assertEmpty($readline->listHistory());
-        $readline->addHistory('foo');
-        $this->assertSame(['foo'], $readline->listHistory());
-        $readline->addHistory('bar');
-        $this->assertSame(['foo', 'bar'], $readline->listHistory());
-        $readline->addHistory('baz');
-        $this->assertSame(['foo', 'bar', 'baz'], $readline->listHistory());
-        $readline->clearHistory();
-        $this->assertEmpty($readline->listHistory());
-    }
-
-    /**
-     * @depends testHistory
-     */
-    public function testHistorySize()
-    {
-        $readline = new GNUReadline($this->historyFile, 2);
-        $this->assertEmpty($readline->listHistory());
-        $readline->addHistory('foo');
-        $readline->addHistory('bar');
-        $this->assertSame(['foo', 'bar'], $readline->listHistory());
-        $readline->addHistory('baz');
-        $this->assertSame(['bar', 'baz'], $readline->listHistory());
-        $readline->addHistory('w00t');
-        $this->assertSame(['baz', 'w00t'], $readline->listHistory());
-        $readline->clearHistory();
-        $this->assertEmpty($readline->listHistory());
-    }
-
-    /**
-     * @depends testHistory
-     */
-    public function testHistoryEraseDups()
-    {
-        $readline = new GNUReadline($this->historyFile, 0, true);
-        $this->assertEmpty($readline->listHistory());
-        $readline->addHistory('foo');
-        $readline->addHistory('bar');
-        $readline->addHistory('foo');
-        $this->assertSame(['bar', 'foo'], $readline->listHistory());
-        $readline->addHistory('baz');
-        $readline->addHistory('w00t');
-        $readline->addHistory('baz');
-        $this->assertSame(['bar', 'foo', 'w00t', 'baz'], $readline->listHistory());
-        $readline->clearHistory();
-        $this->assertEmpty($readline->listHistory());
-    }
-}
diff --git a/vendor/psy/psysh/test/Readline/HoaConsoleTest.php b/vendor/psy/psysh/test/Readline/HoaConsoleTest.php
deleted file mode 100644
index ecf444f396..0000000000
--- a/vendor/psy/psysh/test/Readline/HoaConsoleTest.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Readline;
-
-use Psy\Readline\HoaConsole;
-
-class HoaConsoleTest extends \PHPUnit\Framework\TestCase
-{
-    public function testHistory()
-    {
-        $readline = new HoaConsole();
-        $this->assertEmpty($readline->listHistory());
-        $readline->addHistory('foo');
-        $this->assertSame(['foo'], $readline->listHistory());
-        $readline->addHistory('bar');
-        $this->assertSame(['foo', 'bar'], $readline->listHistory());
-        $readline->addHistory('baz');
-        $this->assertSame(['foo', 'bar', 'baz'], $readline->listHistory());
-        $readline->clearHistory();
-        $this->assertEmpty($readline->listHistory());
-    }
-}
diff --git a/vendor/psy/psysh/test/Readline/LibeditTest.php b/vendor/psy/psysh/test/Readline/LibeditTest.php
deleted file mode 100644
index 2d7be2889a..0000000000
--- a/vendor/psy/psysh/test/Readline/LibeditTest.php
+++ /dev/null
@@ -1,128 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Readline;
-
-use Psy\Readline\Libedit;
-
-class LibeditTest extends \PHPUnit\Framework\TestCase
-{
-    private $historyFile;
-
-    public function setUp()
-    {
-        if (!Libedit::isSupported()) {
-            $this->markTestSkipped('Libedit not enabled');
-        }
-
-        $this->historyFile = \tempnam(\sys_get_temp_dir(), 'psysh_test_history');
-        if (false === \file_put_contents($this->historyFile, "_HiStOrY_V2_\n")) {
-            $this->fail('Unable to write history file: ' . $this->historyFile);
-        }
-        // Calling readline_read_history before readline_clear_history
-        // avoids segfault with PHP 5.5.7 & libedit v3.1
-        \readline_read_history($this->historyFile);
-        \readline_clear_history();
-    }
-
-    public function tearDown()
-    {
-        if (\is_file($this->historyFile)) {
-            \unlink($this->historyFile);
-        }
-    }
-
-    public function testHistory()
-    {
-        $readline = new Libedit($this->historyFile);
-        $this->assertEmpty($readline->listHistory());
-        $readline->addHistory('foo');
-        $this->assertSame(['foo'], $readline->listHistory());
-        $readline->addHistory('bar');
-        $this->assertSame(['foo', 'bar'], $readline->listHistory());
-        $readline->addHistory('baz');
-        $this->assertSame(['foo', 'bar', 'baz'], $readline->listHistory());
-        $readline->clearHistory();
-        $this->assertEmpty($readline->listHistory());
-    }
-
-    /**
-     * @depends testHistory
-     */
-    public function testHistorySize()
-    {
-        $readline = new Libedit($this->historyFile, 2);
-        $this->assertEmpty($readline->listHistory());
-        $readline->addHistory('foo');
-        $readline->addHistory('bar');
-        $this->assertSame(['foo', 'bar'], $readline->listHistory());
-        $readline->addHistory('baz');
-        $this->assertSame(['bar', 'baz'], $readline->listHistory());
-        $readline->addHistory('w00t');
-        $this->assertSame(['baz', 'w00t'], $readline->listHistory());
-        $readline->clearHistory();
-        $this->assertEmpty($readline->listHistory());
-    }
-
-    /**
-     * @depends testHistory
-     */
-    public function testHistoryEraseDups()
-    {
-        $readline = new Libedit($this->historyFile, 0, true);
-        $this->assertEmpty($readline->listHistory());
-        $readline->addHistory('foo');
-        $readline->addHistory('bar');
-        $readline->addHistory('foo');
-        $this->assertSame(['bar', 'foo'], $readline->listHistory());
-        $readline->addHistory('baz');
-        $readline->addHistory('w00t');
-        $readline->addHistory('baz');
-        $this->assertSame(['bar', 'foo', 'w00t', 'baz'], $readline->listHistory());
-        $readline->clearHistory();
-        $this->assertEmpty($readline->listHistory());
-    }
-
-    public function testListHistory()
-    {
-        $readline = new Libedit($this->historyFile);
-        \file_put_contents(
-            $this->historyFile,
-            "This is an entry\n\0This is a comment\nThis is an entry\0With a comment\n",
-            FILE_APPEND
-        );
-        $this->assertSame([
-            'This is an entry',
-            'This is an entry',
-        ], $readline->listHistory());
-        $readline->clearHistory();
-    }
-
-    /**
-     * Libedit being a BSD library,
-     * it doesn't support non-unix line separators.
-     */
-    public function testLinebreaksSupport()
-    {
-        $readline = new Libedit($this->historyFile);
-        \file_put_contents(
-            $this->historyFile,
-            "foo\rbar\nbaz\r\nw00t",
-            FILE_APPEND
-        );
-        $this->assertSame([
-            "foo\rbar",
-            "baz\r",
-            'w00t',
-        ], $readline->listHistory());
-        $readline->clearHistory();
-    }
-}
diff --git a/vendor/psy/psysh/test/Readline/TransientTest.php b/vendor/psy/psysh/test/Readline/TransientTest.php
deleted file mode 100644
index 24fcba0b2a..0000000000
--- a/vendor/psy/psysh/test/Readline/TransientTest.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Readline;
-
-use Psy\Readline\Transient;
-
-class TransientTest extends \PHPUnit\Framework\TestCase
-{
-    public function testHistory()
-    {
-        $readline = new Transient();
-        $this->assertEmpty($readline->listHistory());
-        $readline->addHistory('foo');
-        $this->assertSame(['foo'], $readline->listHistory());
-        $readline->addHistory('bar');
-        $this->assertSame(['foo', 'bar'], $readline->listHistory());
-        $readline->addHistory('baz');
-        $this->assertSame(['foo', 'bar', 'baz'], $readline->listHistory());
-        $readline->clearHistory();
-        $this->assertEmpty($readline->listHistory());
-    }
-
-    /**
-     * @depends testHistory
-     */
-    public function testHistorySize()
-    {
-        $readline = new Transient(null, 2);
-        $this->assertEmpty($readline->listHistory());
-        $readline->addHistory('foo');
-        $readline->addHistory('bar');
-        $this->assertSame(['foo', 'bar'], $readline->listHistory());
-        $readline->addHistory('baz');
-        $this->assertSame(['bar', 'baz'], $readline->listHistory());
-        $readline->addHistory('w00t');
-        $this->assertSame(['baz', 'w00t'], $readline->listHistory());
-        $readline->clearHistory();
-        $this->assertEmpty($readline->listHistory());
-    }
-
-    /**
-     * @depends testHistory
-     */
-    public function testHistoryEraseDups()
-    {
-        $readline = new Transient(null, 0, true);
-        $this->assertEmpty($readline->listHistory());
-        $readline->addHistory('foo');
-        $readline->addHistory('bar');
-        $readline->addHistory('foo');
-        $this->assertSame(['bar', 'foo'], $readline->listHistory());
-        $readline->addHistory('baz');
-        $readline->addHistory('w00t');
-        $readline->addHistory('baz');
-        $this->assertSame(['bar', 'foo', 'w00t', 'baz'], $readline->listHistory());
-        $readline->clearHistory();
-        $this->assertEmpty($readline->listHistory());
-    }
-
-    public function testSomeThingsAreAlwaysTrue()
-    {
-        $readline = new Transient();
-        $this->assertTrue(Transient::isSupported());
-        $this->assertTrue($readline->readHistory());
-        $this->assertTrue($readline->writeHistory());
-    }
-}
diff --git a/vendor/psy/psysh/test/Reflection/ReflectionClassConstantTest.php b/vendor/psy/psysh/test/Reflection/ReflectionClassConstantTest.php
deleted file mode 100644
index 87d4f7520b..0000000000
--- a/vendor/psy/psysh/test/Reflection/ReflectionClassConstantTest.php
+++ /dev/null
@@ -1,81 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Reflection;
-
-use Psy\Reflection\ReflectionClassConstant;
-
-class ReflectionClassConstantTest extends \PHPUnit\Framework\TestCase
-{
-    const CONSTANT_ONE = 'one';
-
-    public function testConstruction()
-    {
-        $refl  = new ReflectionClassConstant($this, 'CONSTANT_ONE');
-        $class = $refl->getDeclaringClass();
-
-        $this->assertInstanceOf('ReflectionClass', $class);
-        $this->assertSame('Psy\Test\Reflection\ReflectionClassConstantTest', $class->getName());
-        $this->assertSame('CONSTANT_ONE', $refl->getName());
-        $this->assertSame('CONSTANT_ONE', (string) $refl);
-        $this->assertSame('one', $refl->getValue());
-        $this->assertNull($refl->getFileName());
-        $this->assertFalse($refl->getDocComment());
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testUnknownConstantThrowsException()
-    {
-        new ReflectionClassConstant($this, 'UNKNOWN_CONSTANT');
-    }
-
-    public function testExport()
-    {
-        $ret = ReflectionClassConstant::export($this, 'CONSTANT_ONE', true);
-        $this->assertEquals($ret, 'Constant [ public string CONSTANT_ONE ] { one }');
-    }
-
-    public function testExportOutput()
-    {
-        $this->expectOutputString("Constant [ public string CONSTANT_ONE ] { one }\n");
-        ReflectionClassConstant::export($this, 'CONSTANT_ONE', false);
-    }
-
-    public function testModifiers()
-    {
-        $refl = new ReflectionClassConstant($this, 'CONSTANT_ONE');
-
-        $this->assertEquals(\ReflectionMethod::IS_PUBLIC, $refl->getModifiers());
-        $this->assertFalse($refl->isPrivate());
-        $this->assertFalse($refl->isProtected());
-        $this->assertTrue($refl->isPublic());
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     * @dataProvider notYetImplemented
-     */
-    public function testNotYetImplemented($method)
-    {
-        $refl = new ReflectionClassConstant($this, 'CONSTANT_ONE');
-        $refl->$method();
-    }
-
-    public function notYetImplemented()
-    {
-        return [
-            ['getStartLine'],
-            ['getEndLine'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/Reflection/ReflectionConstantBCTest.php b/vendor/psy/psysh/test/Reflection/ReflectionConstantBCTest.php
deleted file mode 100644
index 69d2797099..0000000000
--- a/vendor/psy/psysh/test/Reflection/ReflectionConstantBCTest.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Reflection;
-
-use Psy\Reflection\ReflectionConstant;
-
-class ReflectionConstantBCTest extends \PHPUnit\Framework\TestCase
-{
-    const CONSTANT_ONE = 'one';
-
-    public function testConstruction()
-    {
-        $refl = new ReflectionConstant($this, 'CONSTANT_ONE');
-        $this->assertInstanceOf('Psy\Reflection\ReflectionConstant', $refl);
-        $this->assertInstanceOf('Psy\Reflection\ReflectionClassConstant', $refl);
-    }
-}
diff --git a/vendor/psy/psysh/test/Reflection/ReflectionConstantTest.php b/vendor/psy/psysh/test/Reflection/ReflectionConstantTest.php
deleted file mode 100644
index 02c1a8442e..0000000000
--- a/vendor/psy/psysh/test/Reflection/ReflectionConstantTest.php
+++ /dev/null
@@ -1,114 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Reflection;
-
-use Psy\Reflection\ReflectionConstant_;
-
-\define('Psy\\Test\\Reflection\\SOME_CONSTANT', 'yep');
-
-class ReflectionConstantTest extends \PHPUnit\Framework\TestCase
-{
-    public function testConstruction()
-    {
-        $refl = new ReflectionConstant_('Psy\\Test\\Reflection\\SOME_CONSTANT');
-
-        $this->assertFalse($refl->getDocComment());
-        $this->assertEquals('Psy\\Test\\Reflection\\SOME_CONSTANT', $refl->getName());
-        $this->assertEquals('Psy\\Test\\Reflection', $refl->getNamespaceName());
-        $this->assertEquals('yep', $refl->getValue());
-        $this->assertTrue($refl->inNamespace());
-        $this->assertEquals('Psy\\Test\\Reflection\\SOME_CONSTANT', (string) $refl);
-        $this->assertNull($refl->getFileName());
-    }
-
-    public function testBuiltInConstant()
-    {
-        $refl = new ReflectionConstant_('PHP_VERSION');
-
-        $this->assertEquals('PHP_VERSION', $refl->getName());
-        $this->assertEquals('PHP_VERSION', (string) $refl);
-        $this->assertEquals(PHP_VERSION, $refl->getValue());
-        $this->assertFalse($refl->inNamespace());
-        $this->assertSame('', $refl->getNamespaceName());
-    }
-
-    /**
-     * @dataProvider magicConstants
-     */
-    public function testIsMagicConstant($name, $is)
-    {
-        $this->assertEquals($is, ReflectionConstant_::isMagicConstant($name));
-    }
-
-    public function magicConstants()
-    {
-        return [
-            ['__LINE__', true],
-            ['__FILE__', true],
-            ['__DIR__', true],
-            ['__FUNCTION__', true],
-            ['__CLASS__', true],
-            ['__TRAIT__', true],
-            ['__METHOD__', true],
-            ['__NAMESPACE__', true],
-            ['__COMPILER_HALT_OFFSET__', true],
-            ['PHP_VERSION', false],
-            ['PHP_EOL', false],
-            ['Psy\\Test\\Reflection\\SOME_CONSTANT', false],
-            ['What if it isn\'t even a valid constant name?', false],
-        ];
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testUnknownConstantThrowsException()
-    {
-        new ReflectionConstant_('UNKNOWN_CONSTANT');
-    }
-
-    public function testExport()
-    {
-        $ret = ReflectionConstant_::export('Psy\\Test\\Reflection\\SOME_CONSTANT', true);
-        $this->assertEquals($ret, 'Constant [ string Psy\\Test\\Reflection\\SOME_CONSTANT ] { yep }');
-    }
-
-    public function testExportOutput()
-    {
-        $this->expectOutputString("Constant [ string Psy\\Test\\Reflection\\SOME_CONSTANT ] { yep }\n");
-        ReflectionConstant_::export('Psy\\Test\\Reflection\\SOME_CONSTANT', false);
-    }
-
-    public function testGetFileName()
-    {
-        $refl = new ReflectionConstant_('Psy\\Test\\Reflection\\SOME_CONSTANT');
-        $this->assertNull($refl->getFileName());
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     * @dataProvider notYetImplemented
-     */
-    public function testNotYetImplemented($method)
-    {
-        $refl = new ReflectionConstant_('Psy\\Test\\Reflection\\SOME_CONSTANT');
-        $refl->$method();
-    }
-
-    public function notYetImplemented()
-    {
-        return [
-            ['getStartLine'],
-            ['getEndLine'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/Reflection/ReflectionLanguageConstructParameterTest.php b/vendor/psy/psysh/test/Reflection/ReflectionLanguageConstructParameterTest.php
deleted file mode 100644
index 223432f8c9..0000000000
--- a/vendor/psy/psysh/test/Reflection/ReflectionLanguageConstructParameterTest.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Reflection;
-
-use Psy\Reflection\ReflectionLanguageConstruct;
-use Psy\Reflection\ReflectionLanguageConstructParameter;
-
-class ReflectionLanguageConstructParameterTest extends \PHPUnit\Framework\TestCase
-{
-    public function testOptions()
-    {
-        $keyword = new ReflectionLanguageConstruct('die');
-
-        $refl = new ReflectionLanguageConstructParameter($keyword, 'one', [
-            'isArray'             => false,
-            'defaultValue'        => null,
-            'isOptional'          => false,
-            'isPassedByReference' => false,
-        ]);
-
-        $this->assertNull($refl->getClass());
-        $this->assertEquals('one', $refl->getName());
-        $this->assertFalse($refl->isArray());
-        $this->assertTrue($refl->isDefaultValueAvailable());
-        $this->assertNull($refl->getDefaultValue());
-        $this->assertFalse($refl->isOptional());
-        $this->assertFalse($refl->isPassedByReference());
-
-        $reflTwo = new ReflectionLanguageConstructParameter($keyword, 'two', [
-            'isArray'             => true,
-            'isOptional'          => true,
-            'isPassedByReference' => true,
-        ]);
-
-        $this->assertNull($refl->getClass());
-        $this->assertEquals('two', $reflTwo->getName());
-        $this->assertTrue($reflTwo->isArray());
-        $this->assertFalse($reflTwo->isDefaultValueAvailable());
-        $this->assertNull($reflTwo->getDefaultValue());
-        $this->assertTrue($reflTwo->isOptional());
-        $this->assertTrue($reflTwo->isPassedByReference());
-
-        $refl = new ReflectionLanguageConstructParameter($keyword, 'three', [
-            'defaultValue' => 3,
-        ]);
-
-        $this->assertNull($refl->getClass());
-        $this->assertEquals('three', $refl->getName());
-        $this->assertFalse($refl->isArray());
-        $this->assertTrue($refl->isDefaultValueAvailable());
-        $this->assertEquals(3, $refl->getDefaultValue());
-        $this->assertFalse($refl->isOptional());
-        $this->assertFalse($refl->isPassedByReference());
-    }
-}
diff --git a/vendor/psy/psysh/test/Reflection/ReflectionLanguageConstructTest.php b/vendor/psy/psysh/test/Reflection/ReflectionLanguageConstructTest.php
deleted file mode 100644
index 872a726d64..0000000000
--- a/vendor/psy/psysh/test/Reflection/ReflectionLanguageConstructTest.php
+++ /dev/null
@@ -1,102 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Reflection;
-
-use Psy\Reflection\ReflectionLanguageConstruct;
-
-class ReflectionLanguageConstructTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @dataProvider languageConstructs
-     */
-    public function testConstruction($keyword)
-    {
-        $refl = new ReflectionLanguageConstruct($keyword);
-        $this->assertEquals($keyword, $refl->getName());
-        $this->assertEquals($keyword, (string) $refl);
-    }
-
-    /**
-     * @dataProvider languageConstructs
-     */
-    public function testKnownLanguageConstructs($keyword)
-    {
-        $this->assertTrue(ReflectionLanguageConstruct::isLanguageConstruct($keyword));
-    }
-
-    /**
-     * @dataProvider languageConstructs
-     */
-    public function testFileName($keyword)
-    {
-        $refl = new ReflectionLanguageConstruct($keyword);
-        $this->assertFalse($refl->getFileName());
-    }
-
-    /**
-     * @dataProvider languageConstructs
-     */
-    public function testReturnsReference($keyword)
-    {
-        $refl = new ReflectionLanguageConstruct($keyword);
-        $this->assertFalse($refl->returnsReference());
-    }
-
-    /**
-     * @dataProvider languageConstructs
-     */
-    public function testGetParameters($keyword)
-    {
-        $refl = new ReflectionLanguageConstruct($keyword);
-        $this->assertNotEmpty($refl->getParameters());
-    }
-
-    /**
-     * @dataProvider languageConstructs
-     * @expectedException \RuntimeException
-     */
-    public function testExportThrows($keyword)
-    {
-        ReflectionLanguageConstruct::export($keyword);
-    }
-
-    public function languageConstructs()
-    {
-        return [
-            ['isset'],
-            ['unset'],
-            ['empty'],
-            ['echo'],
-            ['print'],
-            ['die'],
-            ['exit'],
-        ];
-    }
-
-    /**
-     * @dataProvider unknownLanguageConstructs
-     * @expectedException \InvalidArgumentException
-     */
-    public function testUnknownLanguageConstructsThrowExceptions($keyword)
-    {
-        new ReflectionLanguageConstruct($keyword);
-    }
-
-    public function unknownLanguageConstructs()
-    {
-        return [
-            ['async'],
-            ['await'],
-            ['comefrom'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/ShellTest.php b/vendor/psy/psysh/test/ShellTest.php
deleted file mode 100644
index 809af021e4..0000000000
--- a/vendor/psy/psysh/test/ShellTest.php
+++ /dev/null
@@ -1,442 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test;
-
-use Psy\Configuration;
-use Psy\Exception\ErrorException;
-use Psy\Exception\ParseErrorException;
-use Psy\Shell;
-use Psy\TabCompletion\Matcher\ClassMethodsMatcher;
-use Symfony\Component\Console\Output\StreamOutput;
-
-class ShellTest extends \PHPUnit\Framework\TestCase
-{
-    private $streams = [];
-
-    public function tearDown()
-    {
-        foreach ($this->streams as $stream) {
-            \fclose($stream);
-        }
-    }
-
-    public function testScopeVariables()
-    {
-        $one       = 'banana';
-        $two       = 123;
-        $three     = new \StdClass();
-        $__psysh__ = 'ignore this';
-        $_         = 'ignore this';
-        $_e        = 'ignore this';
-
-        $shell = new Shell($this->getConfig());
-        $shell->setScopeVariables(\compact('one', 'two', 'three', '__psysh__', '_', '_e', 'this'));
-
-        $this->assertNotContains('__psysh__', $shell->getScopeVariableNames());
-        $this->assertSame(['one', 'two', 'three', '_'], $shell->getScopeVariableNames());
-        $this->assertSame('banana', $shell->getScopeVariable('one'));
-        $this->assertSame(123, $shell->getScopeVariable('two'));
-        $this->assertSame($three, $shell->getScopeVariable('three'));
-        $this->assertNull($shell->getScopeVariable('_'));
-
-        $diff = $shell->getScopeVariablesDiff(['one' => $one, 'two' => 'not two']);
-        $this->assertSame(['two' => $two, 'three' => $three, '_' => null], $diff);
-
-        $shell->setScopeVariables([]);
-        $this->assertSame(['_'], $shell->getScopeVariableNames());
-
-        $shell->setBoundObject($this);
-        $this->assertSame(['_', 'this'], $shell->getScopeVariableNames());
-        $this->assertSame($this, $shell->getScopeVariable('this'));
-        $this->assertSame(['_' => null], $shell->getScopeVariables(false));
-        $this->assertSame(['_' => null, 'this' => $this], $shell->getScopeVariables());
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testUnknownScopeVariablesThrowExceptions()
-    {
-        $shell = new Shell($this->getConfig());
-        $shell->setScopeVariables(['foo' => 'FOO', 'bar' => 1]);
-        $shell->getScopeVariable('baz');
-    }
-
-    public function testIncludesWithScopeVariables()
-    {
-        $one       = 'banana';
-        $two       = 123;
-        $three     = new \StdClass();
-        $__psysh__ = 'ignore this';
-        $_         = 'ignore this';
-        $_e        = 'ignore this';
-
-        $config = $this->getConfig(['usePcntl' => false]);
-
-        $shell = new Shell($config);
-        $shell->setScopeVariables(\compact('one', 'two', 'three', '__psysh__', '_', '_e', 'this'));
-        $shell->addInput('exit', true);
-
-        // This is super slow and we shouldn't do this :(
-        $shell->run(null, $this->getOutput());
-
-        $this->assertNotContains('__psysh__', $shell->getScopeVariableNames());
-        $this->assertSame(['one', 'two', 'three', '_', '_e'], $shell->getScopeVariableNames());
-        $this->assertSame('banana', $shell->getScopeVariable('one'));
-        $this->assertSame(123, $shell->getScopeVariable('two'));
-        $this->assertSame($three, $shell->getScopeVariable('three'));
-        $this->assertNull($shell->getScopeVariable('_'));
-    }
-
-    public function testIncludes()
-    {
-        $config = $this->getConfig(['configFile' => __DIR__ . '/fixtures/empty.php']);
-
-        $shell = new Shell($config);
-        $this->assertEmpty($shell->getIncludes());
-        $shell->setIncludes(['foo', 'bar', 'baz']);
-        $this->assertSame(['foo', 'bar', 'baz'], $shell->getIncludes());
-    }
-
-    public function testIncludesConfig()
-    {
-        $config = $this->getConfig([
-            'defaultIncludes' => ['/file.php'],
-            'configFile'      => __DIR__ . '/fixtures/empty.php',
-        ]);
-
-        $shell = new Shell($config);
-
-        $includes = $shell->getIncludes();
-        $this->assertSame('/file.php', $includes[0]);
-    }
-
-    public function testAddMatchersViaConfig()
-    {
-        $shell = new FakeShell();
-        $matcher = new ClassMethodsMatcher();
-
-        $config = $this->getConfig([
-            'matchers' => [$matcher],
-        ]);
-        $config->setShell($shell);
-
-        $this->assertSame([$matcher], $shell->matchers);
-    }
-
-    public function testAddMatchersViaConfigAfterShell()
-    {
-        $shell = new FakeShell();
-        $matcher = new ClassMethodsMatcher();
-
-        $config = $this->getConfig([]);
-        $config->setShell($shell);
-        $config->addMatchers([$matcher]);
-
-        $this->assertSame([$matcher], $shell->matchers);
-    }
-
-    public function testRenderingExceptions()
-    {
-        $shell  = new Shell($this->getConfig());
-        $output = $this->getOutput();
-        $stream = $output->getStream();
-        $e      = new ParseErrorException('message', 13);
-
-        $shell->setOutput($output);
-        $shell->addCode('code');
-        $this->assertTrue($shell->hasCode());
-        $this->assertNotEmpty($shell->getCodeBuffer());
-
-        $shell->writeException($e);
-
-        $this->assertSame($e, $shell->getScopeVariable('_e'));
-        $this->assertFalse($shell->hasCode());
-        $this->assertEmpty($shell->getCodeBuffer());
-
-        \rewind($stream);
-        $streamContents = \stream_get_contents($stream);
-
-        $this->assertContains('PHP Parse error', $streamContents);
-        $this->assertContains('message', $streamContents);
-        $this->assertContains('line 13', $streamContents);
-    }
-
-    public function testHandlingErrors()
-    {
-        $shell  = new Shell($this->getConfig());
-        $output = $this->getOutput();
-        $stream = $output->getStream();
-        $shell->setOutput($output);
-
-        $oldLevel = \error_reporting();
-        \error_reporting($oldLevel & ~E_USER_NOTICE);
-
-        try {
-            $shell->handleError(E_USER_NOTICE, 'wheee', null, 13);
-        } catch (ErrorException $e) {
-            \error_reporting($oldLevel);
-            $this->fail('Unexpected error exception');
-        }
-        \error_reporting($oldLevel);
-
-        \rewind($stream);
-        $streamContents = \stream_get_contents($stream);
-
-        $this->assertContains('PHP Notice:', $streamContents);
-        $this->assertContains('wheee',       $streamContents);
-        $this->assertContains('line 13',     $streamContents);
-    }
-
-    /**
-     * @expectedException \Psy\Exception\ErrorException
-     */
-    public function testNotHandlingErrors()
-    {
-        $shell    = new Shell($this->getConfig());
-        $oldLevel = \error_reporting();
-        \error_reporting($oldLevel | E_USER_NOTICE);
-
-        try {
-            $shell->handleError(E_USER_NOTICE, 'wheee', null, 13);
-        } catch (ErrorException $e) {
-            \error_reporting($oldLevel);
-            throw $e;
-        }
-    }
-
-    public function testVersion()
-    {
-        $shell = new Shell($this->getConfig());
-
-        $this->assertInstanceOf('Symfony\Component\Console\Application', $shell);
-        $this->assertContains(Shell::VERSION, $shell->getVersion());
-        $this->assertContains(PHP_VERSION, $shell->getVersion());
-        $this->assertContains(PHP_SAPI, $shell->getVersion());
-    }
-
-    public function testCodeBuffer()
-    {
-        $shell = new Shell($this->getConfig());
-
-        $shell->addCode('class');
-        $this->assertNull($shell->flushCode());
-        $this->assertTrue($shell->hasCode());
-
-        $shell->addCode('a');
-        $this->assertNull($shell->flushCode());
-        $this->assertTrue($shell->hasCode());
-
-        $shell->addCode('{}');
-        $code = $shell->flushCode();
-        $this->assertFalse($shell->hasCode());
-        $code = \preg_replace('/\s+/', ' ', $code);
-        $this->assertNotNull($code);
-        $this->assertSame('class a { } return new \\Psy\\CodeCleaner\\NoReturnValue();', $code);
-    }
-
-    public function testKeepCodeBufferOpen()
-    {
-        $shell = new Shell($this->getConfig());
-
-        $shell->addCode('1 \\');
-        $this->assertNull($shell->flushCode());
-        $this->assertTrue($shell->hasCode());
-
-        $shell->addCode('+ 1 \\');
-        $this->assertNull($shell->flushCode());
-        $this->assertTrue($shell->hasCode());
-
-        $shell->addCode('+ 1');
-        $code = $shell->flushCode();
-        $this->assertFalse($shell->hasCode());
-        $code = \preg_replace('/\s+/', ' ', $code);
-        $this->assertNotNull($code);
-        $this->assertSame('return 1 + 1 + 1;', $code);
-    }
-
-    /**
-     * @expectedException \Psy\Exception\ParseErrorException
-     */
-    public function testCodeBufferThrowsParseExceptions()
-    {
-        $shell = new Shell($this->getConfig());
-        $shell->addCode('this is not valid');
-        $shell->flushCode();
-    }
-
-    public function testClosuresSupport()
-    {
-        $shell = new Shell($this->getConfig());
-        $code = '$test = function () {}';
-        $shell->addCode($code);
-        $shell->flushCode();
-        $code = '$test()';
-        $shell->addCode($code);
-        $this->assertSame($shell->flushCode(), 'return $test();');
-    }
-
-    public function testWriteStdout()
-    {
-        $output = $this->getOutput();
-        $stream = $output->getStream();
-        $shell  = new Shell($this->getConfig());
-        $shell->setOutput($output);
-
-        $shell->writeStdout("{{stdout}}\n");
-
-        \rewind($stream);
-        $streamContents = \stream_get_contents($stream);
-
-        $this->assertSame('{{stdout}}' . PHP_EOL, $streamContents);
-    }
-
-    public function testWriteStdoutWithoutNewline()
-    {
-        $output = $this->getOutput();
-        $stream = $output->getStream();
-        $shell  = new Shell($this->getConfig());
-        $shell->setOutput($output);
-
-        $shell->writeStdout('{{stdout}}');
-
-        \rewind($stream);
-        $streamContents = \stream_get_contents($stream);
-
-        $this->assertSame('{{stdout}}<aside>⏎</aside>' . PHP_EOL, $streamContents);
-    }
-
-    /**
-     * @dataProvider getReturnValues
-     */
-    public function testWriteReturnValue($input, $expected)
-    {
-        $output = $this->getOutput();
-        $stream = $output->getStream();
-        $shell  = new Shell($this->getConfig());
-        $shell->setOutput($output);
-
-        $shell->writeReturnValue($input);
-        \rewind($stream);
-        $this->assertEquals($expected, \stream_get_contents($stream));
-    }
-
-    public function getReturnValues()
-    {
-        return [
-            ['{{return value}}', "=> \"\033[32m{{return value}}\033[39m\"" . PHP_EOL],
-            [1, "=> \033[35m1\033[39m" . PHP_EOL],
-        ];
-    }
-
-    /**
-     * @dataProvider getRenderedExceptions
-     */
-    public function testWriteException($exception, $expected)
-    {
-        $output = $this->getOutput();
-        $stream = $output->getStream();
-        $shell  = new Shell($this->getConfig());
-        $shell->setOutput($output);
-
-        $shell->writeException($exception);
-        \rewind($stream);
-        $this->assertSame($expected, \stream_get_contents($stream));
-    }
-
-    public function getRenderedExceptions()
-    {
-        return [
-            [new \Exception('{{message}}'), "Exception with message '{{message}}'" . PHP_EOL],
-        ];
-    }
-
-    /**
-     * @dataProvider getExecuteValues
-     */
-    public function testShellExecute($input, $expected)
-    {
-        $output = $this->getOutput();
-        $stream = $output->getStream();
-        $shell  = new Shell($this->getConfig());
-        $shell->setOutput($output);
-        $this->assertEquals($expected, $shell->execute($input));
-        \rewind($stream);
-        $this->assertSame('', \stream_get_contents($stream));
-    }
-
-    public function getExecuteValues()
-    {
-        return [
-            ['return 12', 12],
-            ['"{{return value}}"', '{{return value}}'],
-            ['1', '1'],
-        ];
-    }
-
-    /**
-     * @dataProvider commandsToHas
-     */
-    public function testHasCommand($command, $has)
-    {
-        $shell = new Shell($this->getConfig());
-
-        // :-/
-        $refl = new \ReflectionClass('Psy\\Shell');
-        $method = $refl->getMethod('hasCommand');
-        $method->setAccessible(true);
-
-        $this->assertEquals($method->invokeArgs($shell, [$command]), $has);
-    }
-
-    public function commandsToHas()
-    {
-        return [
-            ['help', true],
-            ['help help', true],
-            ['"help"', false],
-            ['"help help"', false],
-            ['ls -al ', true],
-            ['ls "-al" ', true],
-            ['ls"-al"', false],
-            [' q', true],
-            ['   q  --help', true],
-            ['"q"', false],
-            ['"q",', false],
-        ];
-    }
-
-    private function getOutput()
-    {
-        $stream = \fopen('php://memory', 'w+');
-        $this->streams[] = $stream;
-
-        $output = new StreamOutput($stream, StreamOutput::VERBOSITY_NORMAL, false);
-
-        return $output;
-    }
-
-    private function getConfig(array $config = [])
-    {
-        // Mebbe there's a better way than this?
-        $dir = \tempnam(\sys_get_temp_dir(), 'psysh_shell_test_');
-        \unlink($dir);
-
-        $defaults = [
-            'configDir'  => $dir,
-            'dataDir'    => $dir,
-            'runtimeDir' => $dir,
-        ];
-
-        return new Configuration(\array_merge($defaults, $config));
-    }
-}
diff --git a/vendor/psy/psysh/test/Sudo/SudoVisitorTest.php b/vendor/psy/psysh/test/Sudo/SudoVisitorTest.php
deleted file mode 100644
index 1f2042c866..0000000000
--- a/vendor/psy/psysh/test/Sudo/SudoVisitorTest.php
+++ /dev/null
@@ -1,142 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Sudo;
-
-use PhpParser\NodeTraverser;
-use Psy\Sudo\SudoVisitor;
-use Psy\Test\ParserTestCase;
-
-class SudoVisitorTest extends ParserTestCase
-{
-    public function setUp()
-    {
-        $this->traverser = new NodeTraverser();
-        $this->traverser->addVisitor(new SudoVisitor());
-    }
-
-    /**
-     * @dataProvider propertyFetches
-     */
-    public function testPropertyFetch($from, $to)
-    {
-        $this->assertProcessesAs($from, $to);
-    }
-
-    public function propertyFetches()
-    {
-        return [
-            ['$a->b', "\Psy\Sudo::fetchProperty(\$a, 'b');"],
-            ['$a->$b', '\Psy\Sudo::fetchProperty($a, $b);'],
-            ["\$a->{'b'}", "\Psy\Sudo::fetchProperty(\$a, 'b');"],
-        ];
-    }
-
-    /**
-     * @dataProvider propertyAssigns
-     */
-    public function testPropertyAssign($from, $to)
-    {
-        $this->assertProcessesAs($from, $to);
-    }
-
-    public function propertyAssigns()
-    {
-        return [
-            ['$a->b = $c', "\Psy\Sudo::assignProperty(\$a, 'b', \$c);"],
-            ['$a->$b = $c', '\Psy\Sudo::assignProperty($a, $b, $c);'],
-            ["\$a->{'b'} = \$c", "\Psy\Sudo::assignProperty(\$a, 'b', \$c);"],
-        ];
-    }
-
-    /**
-     * @dataProvider methodCalls
-     */
-    public function testMethodCall($from, $to)
-    {
-        $this->assertProcessesAs($from, $to);
-    }
-
-    public function methodCalls()
-    {
-        return [
-            ['$a->b()', "\Psy\Sudo::callMethod(\$a, 'b');"],
-            ['$a->$b()', '\Psy\Sudo::callMethod($a, $b);'],
-            ["\$a->b(\$c, 'd')", "\Psy\Sudo::callMethod(\$a, 'b', \$c, 'd');"],
-            ["\$a->\$b(\$c, 'd')", "\Psy\Sudo::callMethod(\$a, \$b, \$c, 'd');"],
-        ];
-    }
-
-    /**
-     * @dataProvider staticPropertyFetches
-     */
-    public function testStaticPropertyFetch($from, $to)
-    {
-        $this->assertProcessesAs($from, $to);
-    }
-
-    public function staticPropertyFetches()
-    {
-        return [
-            ['A::$b', "\Psy\Sudo::fetchStaticProperty('A', 'b');"],
-            ['$a::$b', "\Psy\Sudo::fetchStaticProperty(\$a, 'b');"],
-        ];
-    }
-
-    /**
-     * @dataProvider staticPropertyAssigns
-     */
-    public function testStaticPropertyAssign($from, $to)
-    {
-        $this->assertProcessesAs($from, $to);
-    }
-
-    public function staticPropertyAssigns()
-    {
-        return [
-            ['A::$b = $c', "\Psy\Sudo::assignStaticProperty('A', 'b', \$c);"],
-            ['$a::$b = $c', "\Psy\Sudo::assignStaticProperty(\$a, 'b', \$c);"],
-        ];
-    }
-
-    /**
-     * @dataProvider staticCalls
-     */
-    public function testStaticCall($from, $to)
-    {
-        $this->assertProcessesAs($from, $to);
-    }
-
-    public function staticCalls()
-    {
-        return [
-            ['A::b()', "\Psy\Sudo::callStatic('A', 'b');"],
-            ['A::$b()', "\Psy\Sudo::callStatic('A', \$b);"],
-            ["A::b(\$c, 'd')", "\Psy\Sudo::callStatic('A', 'b', \$c, 'd');"],
-            ["A::\$b(\$c, 'd')", "\Psy\Sudo::callStatic('A', \$b, \$c, 'd');"],
-        ];
-    }
-
-    /**
-     * @dataProvider classConstFetches
-     */
-    public function testClassConstFetch($from, $to)
-    {
-        $this->assertProcessesAs($from, $to);
-    }
-
-    public function classConstFetches()
-    {
-        return [
-            ['A::B', "\Psy\Sudo::fetchClassConst('A', 'B');"],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/SudoTest.php b/vendor/psy/psysh/test/SudoTest.php
deleted file mode 100644
index 6123db04e6..0000000000
--- a/vendor/psy/psysh/test/SudoTest.php
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test;
-
-use Psy\Sudo;
-
-class SudoTest extends \PHPUnit\Framework\TestCase
-{
-    public function setUp()
-    {
-        if (\version_compare(PHP_VERSION, '7.1.0', '<')) {
-            $this->markTestSkipped('YOLO');
-        }
-    }
-
-    public function testFetchProperty()
-    {
-        $obj = new ClassWithSecrets();
-        $this->assertSame('private and prop', Sudo::fetchProperty($obj, 'privateProp'));
-    }
-
-    public function testAssignProperty()
-    {
-        $obj = new ClassWithSecrets();
-        $this->assertSame('private and prop', Sudo::fetchProperty($obj, 'privateProp'));
-        $this->assertSame('not so private now', Sudo::assignProperty($obj, 'privateProp', 'not so private now'));
-        $this->assertSame('not so private now', Sudo::fetchProperty($obj, 'privateProp'));
-    }
-
-    public function testCallMethod()
-    {
-        $obj = new ClassWithSecrets();
-        $this->assertSame('private and method', Sudo::callMethod($obj, 'privateMethod'));
-        $this->assertSame('private and method with 1', Sudo::callMethod($obj, 'privateMethod', 1));
-        $this->assertSame(
-            'private and method with ["foo",2]',
-            Sudo::callMethod($obj, 'privateMethod', ['foo', 2]
-        ));
-    }
-
-    public function testFetchStaticProperty()
-    {
-        $obj = new ClassWithSecrets();
-        $this->assertSame('private and static and prop', Sudo::fetchStaticProperty($obj, 'privateStaticProp'));
-    }
-
-    public function testAssignStaticProperty()
-    {
-        $obj = new ClassWithSecrets();
-        $this->assertSame('private and static and prop', Sudo::fetchStaticProperty($obj, 'privateStaticProp'));
-        $this->assertSame('not so private now', Sudo::assignStaticProperty($obj, 'privateStaticProp', 'not so private now'));
-        $this->assertSame('not so private now', Sudo::fetchStaticProperty($obj, 'privateStaticProp'));
-    }
-
-    public function testCallStatic()
-    {
-        $obj = new ClassWithSecrets();
-        $this->assertSame('private and static and method', Sudo::callStatic($obj, 'privateStaticMethod'));
-        $this->assertSame('private and static and method with 1', Sudo::callStatic($obj, 'privateStaticMethod', 1));
-        $this->assertSame(
-            'private and static and method with ["foo",2]',
-            Sudo::callStatic($obj, 'privateStaticMethod', ['foo', 2]
-        ));
-    }
-
-    public function testFetchClassConst()
-    {
-        $obj = new ClassWithSecrets();
-        $this->assertSame('private and const', Sudo::fetchClassConst($obj, 'PRIVATE_CONST'));
-    }
-}
diff --git a/vendor/psy/psysh/test/TabCompletion/AutoCompleterTest.php b/vendor/psy/psysh/test/TabCompletion/AutoCompleterTest.php
deleted file mode 100644
index d98d452c43..0000000000
--- a/vendor/psy/psysh/test/TabCompletion/AutoCompleterTest.php
+++ /dev/null
@@ -1,145 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\TabCompletion;
-
-use Psy\Command\ListCommand;
-use Psy\Command\ShowCommand;
-use Psy\Configuration;
-use Psy\Context;
-use Psy\ContextAware;
-use Psy\TabCompletion\Matcher;
-
-class AutoCompleterTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @param string $line
-     * @param array  $mustContain
-     * @param array  $mustNotContain
-     * @dataProvider classesInput
-     */
-    public function testClassesCompletion($line, $mustContain, $mustNotContain)
-    {
-        $context = new Context();
-
-        $commands = [
-            new ShowCommand(),
-            new ListCommand(),
-        ];
-
-        $matchers = [
-            new Matcher\VariablesMatcher(),
-            new Matcher\ClassNamesMatcher(),
-            new Matcher\ConstantsMatcher(),
-            new Matcher\FunctionsMatcher(),
-            new Matcher\ObjectMethodsMatcher(),
-            new Matcher\ObjectAttributesMatcher(),
-            new Matcher\KeywordsMatcher(),
-            new Matcher\ClassAttributesMatcher(),
-            new Matcher\ClassMethodsMatcher(),
-            new Matcher\CommandsMatcher($commands),
-        ];
-
-        $config = new Configuration();
-        $tabCompletion = $config->getAutoCompleter();
-        foreach ($matchers as $matcher) {
-            if ($matcher instanceof ContextAware) {
-                $matcher->setContext($context);
-            }
-            $tabCompletion->addMatcher($matcher);
-        }
-
-        $context->setAll(['foo' => 12, 'bar' => new \DOMDocument()]);
-
-        $code = $tabCompletion->processCallback('', 0, [
-           'line_buffer' => $line,
-           'point'       => 0,
-           'end'         => \strlen($line),
-        ]);
-
-        foreach ($mustContain as $mc) {
-            $this->assertContains($mc, $code);
-        }
-
-        foreach ($mustNotContain as $mnc) {
-            $this->assertNotContains($mnc, $code);
-        }
-    }
-
-    /**
-     * TODO
-     * ====
-     * draft, open to modifications
-     * - [ ] if the variable is an array, return the square bracket for completion
-     * - [ ] if the variable is a constructor or method, reflect to complete as a function call
-     * - [ ] if the preceding token is a variable, call operators or keywords compatible for completion
-     * - [X] a command always should be the second token after php_open_tag
-     * - [X] keywords are never consecutive
-     * - [X] namespacing completion should work just fine
-     * - [X] after a new keyword, should always be a class constructor, never a function call or keyword, constant,
-     *       or variable that does not contain a existing class name.
-     * - [X] on a namespaced constructor the completion must show the classes related, not constants.
-     *
-     * @return array
-     */
-    public function classesInput()
-    {
-        return [
-            // input, must had, must not had
-            ['T_OPE', ['T_OPEN_TAG'], []],
-            ['st', ['stdClass'], []],
-            ['stdCla', ['stdClass'], []],
-            ['new s', ['stdClass'], []],
-            [
-                'new ',
-                ['stdClass', 'Psy\\Context', 'Psy\\Configuration'],
-                ['require', 'array_search', 'T_OPEN_TAG', '$foo'],
-            ],
-            ['new Psy\\C', ['Context'], ['CASE_LOWER']],
-            ['\s', ['stdClass'], []],
-            ['array_', ['array_search', 'array_map', 'array_merge'], []],
-            ['$bar->', ['load'], []],
-            ['$b', ['bar'], []],
-            ['6 + $b', ['bar'], []],
-            ['$f', ['foo'], []],
-            ['l', ['ls'], []],
-            ['ls ', [], ['ls']],
-            ['sho', ['show'], []],
-            ['12 + clone $', ['foo'], []],
-            // array(
-            //   '$foo ',
-            //   array('+', 'clone'),
-            //   array('$foo', 'DOMDocument', 'array_map')
-            // ), requires a operator matcher?
-            ['$', ['foo', 'bar'], ['require', 'array_search', 'T_OPEN_TAG', 'Psy']],
-            [
-                'Psy\\',
-                ['Context', 'TabCompletion\\Matcher\\AbstractMatcher'],
-                ['require', 'array_search'],
-            ],
-            [
-                'Psy\Test\TabCompletion\StaticSample::CO',
-                ['StaticSample::CONSTANT_VALUE'],
-                [],
-            ],
-            [
-                'Psy\Test\TabCompletion\StaticSample::',
-                ['StaticSample::$staticVariable'],
-                [],
-            ],
-            [
-                'Psy\Test\TabCompletion\StaticSample::',
-                ['StaticSample::staticFunction'],
-                [],
-            ],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/TabCompletion/StaticSample.php b/vendor/psy/psysh/test/TabCompletion/StaticSample.php
deleted file mode 100644
index e0de2f0bb3..0000000000
--- a/vendor/psy/psysh/test/TabCompletion/StaticSample.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\TabCompletion;
-
-/**
- * Class StaticSample.
- */
-class StaticSample
-{
-    const CONSTANT_VALUE = 12;
-
-    public static $staticVariable;
-
-    public static function staticFunction()
-    {
-        return self::CONSTANT_VALUE;
-    }
-}
diff --git a/vendor/psy/psysh/test/Util/DocblockTest.php b/vendor/psy/psysh/test/Util/DocblockTest.php
deleted file mode 100644
index 82e12feded..0000000000
--- a/vendor/psy/psysh/test/Util/DocblockTest.php
+++ /dev/null
@@ -1,100 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Util;
-
-use Psy\Util\Docblock;
-
-class DocblockTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @dataProvider comments
-     */
-    public function testDocblockParsing($comment, $body, $tags)
-    {
-        $reflector = $this
-            ->getMockBuilder('ReflectionClass')
-            ->disableOriginalConstructor()
-            ->getMock();
-
-        $reflector->expects($this->once())
-            ->method('getDocComment')
-            ->will($this->returnValue($comment));
-
-        $docblock = new Docblock($reflector);
-
-        $this->assertSame($body, $docblock->desc);
-
-        foreach ($tags as $tag => $value) {
-            $this->assertTrue($docblock->hasTag($tag));
-            $this->assertEquals($value, $docblock->tag($tag));
-        }
-    }
-
-    public function comments()
-    {
-        if (\defined('HHVM_VERSION')) {
-            $this->markTestSkipped('We have issues with PHPUnit mocks on HHVM.');
-        }
-
-        return [
-            ['', '', []],
-            [
-                '/**
-                 * This is a docblock
-                 *
-                 * @throws \Exception with a description
-                 */',
-                'This is a docblock',
-                [
-                    'throws' => [['type' => '\Exception', 'desc' => 'with a description']],
-                ],
-            ],
-            [
-                '/**
-                 * This is a slightly longer docblock
-                 *
-                 * @param int         $foo Is a Foo
-                 * @param string      $bar With some sort of description
-                 * @param \ClassName $baz is cool too
-                 *
-                 * @return int At least it isn\'t a string
-                 */',
-                'This is a slightly longer docblock',
-                [
-                    'param' => [
-                        ['type' => 'int', 'desc' => 'Is a Foo', 'var' => '$foo'],
-                        ['type' => 'string', 'desc' => 'With some sort of description', 'var' => '$bar'],
-                        ['type' => '\ClassName', 'desc' => 'is cool too', 'var' => '$baz'],
-                    ],
-                    'return' => [
-                        ['type' => 'int', 'desc' => 'At least it isn\'t a string'],
-                    ],
-                ],
-            ],
-            [
-                '/**
-                 * This is a docblock!
-                 *
-                 * It spans lines, too!
-                 *
-                 * @tagname plus a description
-                 *
-                 * @return
-                 */',
-                "This is a docblock!\n\nIt spans lines, too!",
-                [
-                    'tagname' => ['plus a description'],
-                ],
-            ],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/Util/MirrorTest.php b/vendor/psy/psysh/test/Util/MirrorTest.php
deleted file mode 100644
index 585fffbb2d..0000000000
--- a/vendor/psy/psysh/test/Util/MirrorTest.php
+++ /dev/null
@@ -1,86 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Util;
-
-use Psy\Util\Mirror;
-
-class MirrorTest extends \PHPUnit\Framework\TestCase
-{
-    const FOO           = 1;
-    private $bar        = 2;
-    private static $baz = 3;
-
-    public function aPublicMethod()
-    {
-        // nada
-    }
-
-    public function testMirror()
-    {
-        $refl = Mirror::get('sort');
-        $this->assertInstanceOf('ReflectionFunction', $refl);
-
-        $refl = Mirror::get('Psy\Test\Util\MirrorTest');
-        $this->assertInstanceOf('ReflectionClass', $refl);
-
-        $refl = Mirror::get($this);
-        $this->assertInstanceOf('ReflectionObject', $refl);
-
-        $refl = Mirror::get($this, 'FOO');
-        if (\version_compare(PHP_VERSION, '7.1.0', '>=')) {
-            $this->assertInstanceOf('ReflectionClassConstant', $refl);
-        } else {
-            $this->assertInstanceOf('Psy\Reflection\ReflectionClassConstant', $refl);
-        }
-
-        $refl = Mirror::get('PHP_VERSION');
-        $this->assertInstanceOf('Psy\Reflection\ReflectionConstant_', $refl);
-
-        $refl = Mirror::get($this, 'bar');
-        $this->assertInstanceOf('ReflectionProperty', $refl);
-
-        $refl = Mirror::get($this, 'baz');
-        $this->assertInstanceOf('ReflectionProperty', $refl);
-
-        $refl = Mirror::get($this, 'aPublicMethod');
-        $this->assertInstanceOf('ReflectionMethod', $refl);
-
-        $refl = Mirror::get($this, 'baz', Mirror::STATIC_PROPERTY);
-        $this->assertInstanceOf('ReflectionProperty', $refl);
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     */
-    public function testMirrorThrowsExceptions()
-    {
-        Mirror::get($this, 'notAMethod');
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @dataProvider invalidArguments
-     */
-    public function testMirrorThrowsInvalidArgumentExceptions($value)
-    {
-        Mirror::get($value);
-    }
-
-    public function invalidArguments()
-    {
-        return [
-            ['not_a_function_or_class'],
-            [[]],
-            [1],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/Util/StrTest.php b/vendor/psy/psysh/test/Util/StrTest.php
deleted file mode 100644
index 4f99a79b37..0000000000
--- a/vendor/psy/psysh/test/Util/StrTest.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Util;
-
-use Psy\Util\Str;
-
-class StrTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @dataProvider unvisProvider
-     */
-    public function testUnvis($input, $expected)
-    {
-        $this->assertSame($expected, Str::unvis($input));
-    }
-
-    public function unvisProvider()
-    {
-        //return require_once(__DIR__.'/../fixtures/unvis_fixtures.php');
-        return \json_decode(\file_get_contents(__DIR__ . '/../fixtures/unvis_fixtures.json'));
-    }
-}
diff --git a/vendor/psy/psysh/test/VersionUpdater/GitHubCheckerTest.php b/vendor/psy/psysh/test/VersionUpdater/GitHubCheckerTest.php
deleted file mode 100644
index 7d12d47d60..0000000000
--- a/vendor/psy/psysh/test/VersionUpdater/GitHubCheckerTest.php
+++ /dev/null
@@ -1,82 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\VersionUpdater;
-
-use Psy\Shell;
-
-class GitHubCheckerTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @dataProvider malformedResults
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage Unable to check for updates
-     *
-     * @param mixed $input
-     */
-    public function testExceptionInvocation($input)
-    {
-        $checker = $this->getMockBuilder('Psy\\VersionUpdater\\GitHubChecker')
-            ->setMethods(['fetchLatestRelease'])
-            ->getMock();
-        $checker->expects($this->once())->method('fetchLatestRelease')->willReturn($input);
-        $checker->isLatest();
-    }
-
-    /**
-     * @dataProvider jsonResults
-     *
-     * @param bool  $assertion
-     * @param mixed $input
-     */
-    public function testDataSetResults($assertion, $input)
-    {
-        $checker = $this->getMockBuilder('Psy\\VersionUpdater\\GitHubChecker')
-            ->setMethods(['fetchLatestRelease'])
-            ->getMock();
-        $checker->expects($this->once())->method('fetchLatestRelease')->willReturn($input);
-        $this->assertSame($assertion, $checker->isLatest());
-    }
-
-    /**
-     * @return array
-     */
-    public function jsonResults()
-    {
-        return [
-            [false, \json_decode('{"tag_name":"v9.0.0"}')],
-            [true, \json_decode('{"tag_name":"v' . Shell::VERSION . '"}')],
-            [true, \json_decode('{"tag_name":"v0.0.1"}')],
-            [true, \json_decode('{"tag_name":"v0.4.1-alpha"}')],
-            [true, \json_decode('{"tag_name":"v0.4.2-beta3"}')],
-            [true, \json_decode('{"tag_name":"v0.0.1"}')],
-            [true, \json_decode('{"tag_name":""}')],
-        ];
-    }
-
-    /**
-     * @return array
-     */
-    public function malformedResults()
-    {
-        return [
-            [null],
-            [false],
-            [true],
-            [\json_decode('{"foo":"bar"}')],
-            [\json_decode('{}')],
-            [\json_decode('[]')],
-            [[]],
-            [\json_decode('{"tag_name":false"}')],
-            [\json_decode('{"tag_name":true"}')],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/VersionUpdater/NoopCheckerTest.php b/vendor/psy/psysh/test/VersionUpdater/NoopCheckerTest.php
deleted file mode 100644
index b9ba568c7a..0000000000
--- a/vendor/psy/psysh/test/VersionUpdater/NoopCheckerTest.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\VersionUpdater;
-
-use Psy\Shell;
-use Psy\VersionUpdater\NoopChecker;
-
-class NoopCheckerTest extends \PHPUnit\Framework\TestCase
-{
-    public function testTheThings()
-    {
-        $checker = new NoopChecker();
-        $this->assertTrue($checker->isLatest());
-        $this->assertEquals(Shell::VERSION, $checker->getLatest());
-    }
-}
diff --git a/vendor/psy/psysh/test/fixtures/config.php b/vendor/psy/psysh/test/fixtures/config.php
deleted file mode 100644
index 4c74b79d02..0000000000
--- a/vendor/psy/psysh/test/fixtures/config.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-$config->setRuntimeDir(\sys_get_temp_dir() . '/psysh_test/withconfig/temp');
-
-return [
-    'useReadline'       => true,
-    'usePcntl'          => false,
-    'requireSemicolons' => false,
-    'useUnicode'        => true,
-    'errorLoggingLevel' => E_ALL & ~E_NOTICE,
-];
diff --git a/vendor/psy/psysh/test/fixtures/default/.config/psysh/config.php b/vendor/psy/psysh/test/fixtures/default/.config/psysh/config.php
deleted file mode 100644
index b3d9bbc7f3..0000000000
--- a/vendor/psy/psysh/test/fixtures/default/.config/psysh/config.php
+++ /dev/null
@@ -1 +0,0 @@
-<?php
diff --git a/vendor/psy/psysh/test/fixtures/default/.config/psysh/psysh_history b/vendor/psy/psysh/test/fixtures/default/.config/psysh/psysh_history
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/vendor/psy/psysh/test/fixtures/default/.local/share/psysh/php_manual.sqlite b/vendor/psy/psysh/test/fixtures/default/.local/share/psysh/php_manual.sqlite
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/vendor/psy/psysh/test/fixtures/empty.php b/vendor/psy/psysh/test/fixtures/empty.php
deleted file mode 100644
index ba4e5784ce..0000000000
--- a/vendor/psy/psysh/test/fixtures/empty.php
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-/* this space intentionally left blank */
diff --git a/vendor/psy/psysh/test/fixtures/legacy/.psysh/history b/vendor/psy/psysh/test/fixtures/legacy/.psysh/history
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/vendor/psy/psysh/test/fixtures/legacy/.psysh/php_manual.sqlite b/vendor/psy/psysh/test/fixtures/legacy/.psysh/php_manual.sqlite
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/vendor/psy/psysh/test/fixtures/legacy/.psysh/rc.php b/vendor/psy/psysh/test/fixtures/legacy/.psysh/rc.php
deleted file mode 100644
index b3d9bbc7f3..0000000000
--- a/vendor/psy/psysh/test/fixtures/legacy/.psysh/rc.php
+++ /dev/null
@@ -1 +0,0 @@
-<?php
diff --git a/vendor/psy/psysh/test/fixtures/mixed/.psysh/config.php b/vendor/psy/psysh/test/fixtures/mixed/.psysh/config.php
deleted file mode 100644
index b3d9bbc7f3..0000000000
--- a/vendor/psy/psysh/test/fixtures/mixed/.psysh/config.php
+++ /dev/null
@@ -1 +0,0 @@
-<?php
diff --git a/vendor/psy/psysh/test/fixtures/mixed/.psysh/psysh_history b/vendor/psy/psysh/test/fixtures/mixed/.psysh/psysh_history
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/vendor/psy/psysh/test/fixtures/mixed/.psysh/rc.php b/vendor/psy/psysh/test/fixtures/mixed/.psysh/rc.php
deleted file mode 100644
index b3d9bbc7f3..0000000000
--- a/vendor/psy/psysh/test/fixtures/mixed/.psysh/rc.php
+++ /dev/null
@@ -1 +0,0 @@
-<?php
diff --git a/vendor/psy/psysh/test/fixtures/project/.psysh.php b/vendor/psy/psysh/test/fixtures/project/.psysh.php
deleted file mode 100644
index 8ba668c812..0000000000
--- a/vendor/psy/psysh/test/fixtures/project/.psysh.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell
- *
- * (c) 2012-2017 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-return array(
-    'useReadline'       => false,
-    'usePcntl'          => true,
-    'requireSemicolons' => true,
-    'useUnicode'        => false,
-);
diff --git a/vendor/psy/psysh/test/fixtures/unvis_fixtures.json b/vendor/psy/psysh/test/fixtures/unvis_fixtures.json
deleted file mode 100644
index 960fb02a13..0000000000
--- a/vendor/psy/psysh/test/fixtures/unvis_fixtures.json
+++ /dev/null
@@ -1 +0,0 @@
-[["", ""], ["\\^A", "\u0001"], ["\\^B", "\u0002"], ["\\^C", "\u0003"], ["\\^D", "\u0004"], ["\\^E", "\u0005"], ["\\^F", "\u0006"], ["\\^G", "\u0007"], ["\\^H", "\b"], ["\\^I", "\t"], ["\\^J", "\n"], ["\\^K", "\u000b"], ["\\^L", "\f"], ["\\^M", "\r"], ["\\^N", "\u000e"], ["\\^O", "\u000f"], ["\\^P", "\u0010"], ["\\^Q", "\u0011"], ["\\^R", "\u0012"], ["\\^S", "\u0013"], ["\\^T", "\u0014"], ["\\^U", "\u0015"], ["\\^V", "\u0016"], ["\\^W", "\u0017"], ["\\^X", "\u0018"], ["\\^Y", "\u0019"], ["\\^Z", "\u001a"], ["\\^[", "\u001b"], ["\\^\\", "\u001c"], ["\\^]", "\u001d"], ["\\^^", "\u001e"], ["\\^_", "\u001f"], ["\\040", " "], ["!", "!"], ["\"", "\""], ["#", "#"], ["$", "$"], ["%", "%"], ["&", "&"], ["'", "'"], ["(", "("], [")", ")"], ["*", "*"], ["+", "+"], [",", ","], ["-", "-"], [".", "."], ["/", "/"], ["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"], [":", ":"], [";", ";"], ["<", "<"], ["=", "="], [">", ">"], ["?", "?"], ["@", "@"], ["A", "A"], ["B", "B"], ["C", "C"], ["D", "D"], ["E", "E"], ["F", "F"], ["G", "G"], ["H", "H"], ["I", "I"], ["J", "J"], ["K", "K"], ["L", "L"], ["M", "M"], ["N", "N"], ["O", "O"], ["P", "P"], ["Q", "Q"], ["R", "R"], ["S", "S"], ["T", "T"], ["U", "U"], ["V", "V"], ["W", "W"], ["X", "X"], ["Y", "Y"], ["Z", "Z"], ["[", "["], ["\\\\", "\\"], ["]", "]"], ["^", "^"], ["_", "_"], ["`", "`"], ["a", "a"], ["b", "b"], ["c", "c"], ["d", "d"], ["e", "e"], ["f", "f"], ["g", "g"], ["h", "h"], ["i", "i"], ["j", "j"], ["k", "k"], ["l", "l"], ["m", "m"], ["n", "n"], ["o", "o"], ["p", "p"], ["q", "q"], ["r", "r"], ["s", "s"], ["t", "t"], ["u", "u"], ["v", "v"], ["w", "w"], ["x", "x"], ["y", "y"], ["z", "z"], ["{", "{"], ["|", "|"], ["}", "}"], ["~", "~"], ["\\^?", "\u007f"], ["\\M-B\\M^@", "\u0080"], ["\\M-B\\M^A", "\u0081"], ["\\M-B\\M^B", "\u0082"], ["\\M-B\\M^C", "\u0083"], ["\\M-B\\M^D", "\u0084"], ["\\M-B\\M^E", "\u0085"], ["\\M-B\\M^F", "\u0086"], ["\\M-B\\M^G", "\u0087"], ["\\M-B\\M^H", "\u0088"], ["\\M-B\\M^I", "\u0089"], ["\\M-B\\M^J", "\u008a"], ["\\M-B\\M^K", "\u008b"], ["\\M-B\\M^L", "\u008c"], ["\\M-B\\M^M", "\u008d"], ["\\M-B\\M^N", "\u008e"], ["\\M-B\\M^O", "\u008f"], ["\\M-B\\M^P", "\u0090"], ["\\M-B\\M^Q", "\u0091"], ["\\M-B\\M^R", "\u0092"], ["\\M-B\\M^S", "\u0093"], ["\\M-B\\M^T", "\u0094"], ["\\M-B\\M^U", "\u0095"], ["\\M-B\\M^V", "\u0096"], ["\\M-B\\M^W", "\u0097"], ["\\M-B\\M^X", "\u0098"], ["\\M-B\\M^Y", "\u0099"], ["\\M-B\\M^Z", "\u009a"], ["\\M-B\\M^[", "\u009b"], ["\\M-B\\M^\\", "\u009c"], ["\\M-B\\M^]", "\u009d"], ["\\M-B\\M^^", "\u009e"], ["\\M-B\\M^_", "\u009f"], ["\\M-B\\240", "\u00a0"], ["\\M-B\\M-!", "\u00a1"], ["\\M-B\\M-\"", "\u00a2"], ["\\M-B\\M-#", "\u00a3"], ["\\M-B\\M-$", "\u00a4"], ["\\M-B\\M-%", "\u00a5"], ["\\M-B\\M-&", "\u00a6"], ["\\M-B\\M-'", "\u00a7"], ["\\M-B\\M-(", "\u00a8"], ["\\M-B\\M-)", "\u00a9"], ["\\M-B\\M-*", "\u00aa"], ["\\M-B\\M-+", "\u00ab"], ["\\M-B\\M-,", "\u00ac"], ["\\M-B\\M--", "\u00ad"], ["\\M-B\\M-.", "\u00ae"], ["\\M-B\\M-/", "\u00af"], ["\\M-B\\M-0", "\u00b0"], ["\\M-B\\M-1", "\u00b1"], ["\\M-B\\M-2", "\u00b2"], ["\\M-B\\M-3", "\u00b3"], ["\\M-B\\M-4", "\u00b4"], ["\\M-B\\M-5", "\u00b5"], ["\\M-B\\M-6", "\u00b6"], ["\\M-B\\M-7", "\u00b7"], ["\\M-B\\M-8", "\u00b8"], ["\\M-B\\M-9", "\u00b9"], ["\\M-B\\M-:", "\u00ba"], ["\\M-B\\M-;", "\u00bb"], ["\\M-B\\M-<", "\u00bc"], ["\\M-B\\M-=", "\u00bd"], ["\\M-B\\M->", "\u00be"], ["\\M-B\\M-?", "\u00bf"], ["\\M-C\\M^@", "\u00c0"], ["\\M-C\\M^A", "\u00c1"], ["\\M-C\\M^B", "\u00c2"], ["\\M-C\\M^C", "\u00c3"], ["\\M-C\\M^D", "\u00c4"], ["\\M-C\\M^E", "\u00c5"], ["\\M-C\\M^F", "\u00c6"], ["\\M-C\\M^G", "\u00c7"], ["\\M-C\\M^H", "\u00c8"], ["\\M-C\\M^I", "\u00c9"], ["\\M-C\\M^J", "\u00ca"], ["\\M-C\\M^K", "\u00cb"], ["\\M-C\\M^L", "\u00cc"], ["\\M-C\\M^M", "\u00cd"], ["\\M-C\\M^N", "\u00ce"], ["\\M-C\\M^O", "\u00cf"], ["\\M-C\\M^P", "\u00d0"], ["\\M-C\\M^Q", "\u00d1"], ["\\M-C\\M^R", "\u00d2"], ["\\M-C\\M^S", "\u00d3"], ["\\M-C\\M^T", "\u00d4"], ["\\M-C\\M^U", "\u00d5"], ["\\M-C\\M^V", "\u00d6"], ["\\M-C\\M^W", "\u00d7"], ["\\M-C\\M^X", "\u00d8"], ["\\M-C\\M^Y", "\u00d9"], ["\\M-C\\M^Z", "\u00da"], ["\\M-C\\M^[", "\u00db"], ["\\M-C\\M^\\", "\u00dc"], ["\\M-C\\M^]", "\u00dd"], ["\\M-C\\M^^", "\u00de"], ["\\M-C\\M^_", "\u00df"], ["\\M-C\\240", "\u00e0"], ["\\M-C\\M-!", "\u00e1"], ["\\M-C\\M-\"", "\u00e2"], ["\\M-C\\M-#", "\u00e3"], ["\\M-C\\M-$", "\u00e4"], ["\\M-C\\M-%", "\u00e5"], ["\\M-C\\M-&", "\u00e6"], ["\\M-C\\M-'", "\u00e7"], ["\\M-C\\M-(", "\u00e8"], ["\\M-C\\M-)", "\u00e9"], ["\\M-C\\M-*", "\u00ea"], ["\\M-C\\M-+", "\u00eb"], ["\\M-C\\M-,", "\u00ec"], ["\\M-C\\M--", "\u00ed"], ["\\M-C\\M-.", "\u00ee"], ["\\M-C\\M-/", "\u00ef"], ["\\M-C\\M-0", "\u00f0"], ["\\M-C\\M-1", "\u00f1"], ["\\M-C\\M-2", "\u00f2"], ["\\M-C\\M-3", "\u00f3"], ["\\M-C\\M-4", "\u00f4"], ["\\M-C\\M-5", "\u00f5"], ["\\M-C\\M-6", "\u00f6"], ["\\M-C\\M-7", "\u00f7"], ["\\M-C\\M-8", "\u00f8"], ["\\M-C\\M-9", "\u00f9"], ["\\M-C\\M-:", "\u00fa"], ["\\M-C\\M-;", "\u00fb"], ["\\M-C\\M-<", "\u00fc"], ["\\M-C\\M-=", "\u00fd"], ["\\M-C\\M->", "\u00fe"], ["\\M-C\\M-?", "\u00ff"], ["\\M-D\\M^@", "\u0100"], ["\\M-D\\M^A", "\u0101"], ["\\M-D\\M^B", "\u0102"], ["\\M-D\\M^C", "\u0103"], ["\\M-D\\M^D", "\u0104"], ["\\M-D\\M^E", "\u0105"], ["\\M-D\\M^F", "\u0106"], ["\\M-D\\M^G", "\u0107"], ["\\M-D\\M^H", "\u0108"], ["\\M-D\\M^I", "\u0109"], ["\\M-D\\M^J", "\u010a"], ["\\M-D\\M^K", "\u010b"], ["\\M-D\\M^L", "\u010c"], ["\\M-D\\M^M", "\u010d"], ["\\M-D\\M^N", "\u010e"], ["\\M-D\\M^O", "\u010f"], ["\\M-D\\M^P", "\u0110"], ["\\M-D\\M^Q", "\u0111"], ["\\M-D\\M^R", "\u0112"], ["\\M-D\\M^S", "\u0113"], ["\\M-D\\M^T", "\u0114"], ["\\M-D\\M^U", "\u0115"], ["\\M-D\\M^V", "\u0116"], ["\\M-D\\M^W", "\u0117"], ["\\M-D\\M^X", "\u0118"], ["\\M-D\\M^Y", "\u0119"], ["\\M-D\\M^Z", "\u011a"], ["\\M-D\\M^[", "\u011b"], ["\\M-D\\M^\\", "\u011c"], ["\\M-D\\M^]", "\u011d"], ["\\M-D\\M^^", "\u011e"], ["\\M-D\\M^_", "\u011f"], ["\\M-D\\240", "\u0120"], ["\\M-D\\M-!", "\u0121"], ["\\M-D\\M-\"", "\u0122"], ["\\M-D\\M-#", "\u0123"], ["\\M-D\\M-$", "\u0124"], ["\\M-D\\M-%", "\u0125"], ["\\M-D\\M-&", "\u0126"], ["\\M-D\\M-'", "\u0127"], ["\\M-D\\M-(", "\u0128"], ["\\M-D\\M-)", "\u0129"], ["\\M-D\\M-*", "\u012a"], ["\\M-D\\M-+", "\u012b"], ["\\M-D\\M-,", "\u012c"], ["\\M-D\\M--", "\u012d"], ["\\M-D\\M-.", "\u012e"], ["\\M-D\\M-/", "\u012f"], ["\\M-D\\M-0", "\u0130"], ["\\M-D\\M-1", "\u0131"], ["\\M-D\\M-2", "\u0132"], ["\\M-D\\M-3", "\u0133"], ["\\M-D\\M-4", "\u0134"], ["\\M-D\\M-5", "\u0135"], ["\\M-D\\M-6", "\u0136"], ["\\M-D\\M-7", "\u0137"], ["\\M-D\\M-8", "\u0138"], ["\\M-D\\M-9", "\u0139"], ["\\M-D\\M-:", "\u013a"], ["\\M-D\\M-;", "\u013b"], ["\\M-D\\M-<", "\u013c"], ["\\M-D\\M-=", "\u013d"], ["\\M-D\\M->", "\u013e"], ["\\M-D\\M-?", "\u013f"], ["\\M-E\\M^@", "\u0140"], ["\\M-E\\M^A", "\u0141"], ["\\M-E\\M^B", "\u0142"], ["\\M-E\\M^C", "\u0143"], ["\\M-E\\M^D", "\u0144"], ["\\M-E\\M^E", "\u0145"], ["\\M-E\\M^F", "\u0146"], ["\\M-E\\M^G", "\u0147"], ["\\M-E\\M^H", "\u0148"], ["\\M-E\\M^I", "\u0149"], ["\\M-E\\M^J", "\u014a"], ["\\M-E\\M^K", "\u014b"], ["\\M-E\\M^L", "\u014c"], ["\\M-E\\M^M", "\u014d"], ["\\M-E\\M^N", "\u014e"], ["\\M-E\\M^O", "\u014f"], ["\\M-E\\M^P", "\u0150"], ["\\M-E\\M^Q", "\u0151"], ["\\M-E\\M^R", "\u0152"], ["\\M-E\\M^S", "\u0153"], ["\\M-E\\M^T", "\u0154"], ["\\M-E\\M^U", "\u0155"], ["\\M-E\\M^V", "\u0156"], ["\\M-E\\M^W", "\u0157"], ["\\M-E\\M^X", "\u0158"], ["\\M-E\\M^Y", "\u0159"], ["\\M-E\\M^Z", "\u015a"], ["\\M-E\\M^[", "\u015b"], ["\\M-E\\M^\\", "\u015c"], ["\\M-E\\M^]", "\u015d"], ["\\M-E\\M^^", "\u015e"], ["\\M-E\\M^_", "\u015f"], ["\\M-E\\240", "\u0160"], ["\\M-E\\M-!", "\u0161"], ["\\M-E\\M-\"", "\u0162"], ["\\M-E\\M-#", "\u0163"], ["\\M-E\\M-$", "\u0164"], ["\\M-E\\M-%", "\u0165"], ["\\M-E\\M-&", "\u0166"], ["\\M-E\\M-'", "\u0167"], ["\\M-E\\M-(", "\u0168"], ["\\M-E\\M-)", "\u0169"], ["\\M-E\\M-*", "\u016a"], ["\\M-E\\M-+", "\u016b"], ["\\M-E\\M-,", "\u016c"], ["\\M-E\\M--", "\u016d"], ["\\M-E\\M-.", "\u016e"], ["\\M-E\\M-/", "\u016f"], ["\\M-E\\M-0", "\u0170"], ["\\M-E\\M-1", "\u0171"], ["\\M-E\\M-2", "\u0172"], ["\\M-E\\M-3", "\u0173"], ["\\M-E\\M-4", "\u0174"], ["\\M-E\\M-5", "\u0175"], ["\\M-E\\M-6", "\u0176"], ["\\M-E\\M-7", "\u0177"], ["\\M-E\\M-8", "\u0178"], ["\\M-E\\M-9", "\u0179"], ["\\M-E\\M-:", "\u017a"], ["\\M-E\\M-;", "\u017b"], ["\\M-E\\M-<", "\u017c"], ["\\M-E\\M-=", "\u017d"], ["\\M-E\\M->", "\u017e"], ["\\M-E\\M-?", "\u017f"], ["\\M-F\\M^@", "\u0180"], ["\\M-F\\M^A", "\u0181"], ["\\M-F\\M^B", "\u0182"], ["\\M-F\\M^C", "\u0183"], ["\\M-F\\M^D", "\u0184"], ["\\M-F\\M^E", "\u0185"], ["\\M-F\\M^F", "\u0186"], ["\\M-F\\M^G", "\u0187"], ["\\M-F\\M^H", "\u0188"], ["\\M-F\\M^I", "\u0189"], ["\\M-F\\M^J", "\u018a"], ["\\M-F\\M^K", "\u018b"], ["\\M-F\\M^L", "\u018c"], ["\\M-F\\M^M", "\u018d"], ["\\M-F\\M^N", "\u018e"], ["\\M-F\\M^O", "\u018f"], ["\\M-F\\M^P", "\u0190"], ["\\M-F\\M^Q", "\u0191"], ["\\M-F\\M^R", "\u0192"], ["\\M-F\\M^S", "\u0193"], ["\\M-F\\M^T", "\u0194"], ["\\M-F\\M^U", "\u0195"], ["\\M-F\\M^V", "\u0196"], ["\\M-F\\M^W", "\u0197"], ["\\M-F\\M^X", "\u0198"], ["\\M-F\\M^Y", "\u0199"], ["\\M-F\\M^Z", "\u019a"], ["\\M-F\\M^[", "\u019b"], ["\\M-F\\M^\\", "\u019c"], ["\\M-F\\M^]", "\u019d"], ["\\M-F\\M^^", "\u019e"], ["\\M-F\\M^_", "\u019f"], ["\\M-F\\240", "\u01a0"], ["\\M-F\\M-!", "\u01a1"], ["\\M-F\\M-\"", "\u01a2"], ["\\M-F\\M-#", "\u01a3"], ["\\M-F\\M-$", "\u01a4"], ["\\M-F\\M-%", "\u01a5"], ["\\M-F\\M-&", "\u01a6"], ["\\M-F\\M-'", "\u01a7"], ["\\M-F\\M-(", "\u01a8"], ["\\M-F\\M-)", "\u01a9"], ["\\M-F\\M-*", "\u01aa"], ["\\M-F\\M-+", "\u01ab"], ["\\M-F\\M-,", "\u01ac"], ["\\M-F\\M--", "\u01ad"], ["\\M-F\\M-.", "\u01ae"], ["\\M-F\\M-/", "\u01af"], ["\\M-F\\M-0", "\u01b0"], ["\\M-F\\M-1", "\u01b1"], ["\\M-F\\M-2", "\u01b2"], ["\\M-F\\M-3", "\u01b3"], ["\\M-F\\M-4", "\u01b4"], ["\\M-F\\M-5", "\u01b5"], ["\\M-F\\M-6", "\u01b6"], ["\\M-F\\M-7", "\u01b7"], ["\\M-F\\M-8", "\u01b8"], ["\\M-F\\M-9", "\u01b9"], ["\\M-F\\M-:", "\u01ba"], ["\\M-F\\M-;", "\u01bb"], ["\\M-F\\M-<", "\u01bc"], ["\\M-F\\M-=", "\u01bd"], ["\\M-F\\M->", "\u01be"], ["\\M-F\\M-?", "\u01bf"], ["\\M-G\\M^@", "\u01c0"], ["\\M-G\\M^A", "\u01c1"], ["\\M-G\\M^B", "\u01c2"], ["\\M-G\\M^C", "\u01c3"], ["\\M-G\\M^D", "\u01c4"], ["\\M-G\\M^E", "\u01c5"], ["\\M-G\\M^F", "\u01c6"], ["\\M-G\\M^G", "\u01c7"], ["\\M-G\\M^H", "\u01c8"], ["\\M-G\\M^I", "\u01c9"], ["\\M-G\\M^J", "\u01ca"], ["\\M-G\\M^K", "\u01cb"], ["\\M-G\\M^L", "\u01cc"], ["\\M-G\\M^M", "\u01cd"], ["\\M-G\\M^N", "\u01ce"], ["\\M-G\\M^O", "\u01cf"], ["\\M-G\\M^P", "\u01d0"], ["\\M-G\\M^Q", "\u01d1"], ["\\M-G\\M^R", "\u01d2"], ["\\M-G\\M^S", "\u01d3"], ["\\M-G\\M^T", "\u01d4"], ["\\M-G\\M^U", "\u01d5"], ["\\M-G\\M^V", "\u01d6"], ["\\M-G\\M^W", "\u01d7"], ["\\M-G\\M^X", "\u01d8"], ["\\M-G\\M^Y", "\u01d9"], ["\\M-G\\M^Z", "\u01da"], ["\\M-G\\M^[", "\u01db"], ["\\M-G\\M^\\", "\u01dc"], ["\\M-G\\M^]", "\u01dd"], ["\\M-G\\M^^", "\u01de"], ["\\M-G\\M^_", "\u01df"], ["\\M-G\\240", "\u01e0"], ["\\M-G\\M-!", "\u01e1"], ["\\M-G\\M-\"", "\u01e2"], ["\\M-G\\M-#", "\u01e3"], ["\\M-G\\M-$", "\u01e4"], ["\\M-G\\M-%", "\u01e5"], ["\\M-G\\M-&", "\u01e6"], ["\\M-G\\M-'", "\u01e7"], ["\\M-G\\M-(", "\u01e8"], ["\\M-G\\M-)", "\u01e9"], ["\\M-G\\M-*", "\u01ea"], ["\\M-G\\M-+", "\u01eb"], ["\\M-G\\M-,", "\u01ec"], ["\\M-G\\M--", "\u01ed"], ["\\M-G\\M-.", "\u01ee"], ["\\M-G\\M-/", "\u01ef"], ["\\M-G\\M-0", "\u01f0"], ["\\M-G\\M-1", "\u01f1"], ["\\M-G\\M-2", "\u01f2"], ["\\M-G\\M-3", "\u01f3"], ["\\M-G\\M-4", "\u01f4"], ["\\M-G\\M-5", "\u01f5"], ["\\M-G\\M-6", "\u01f6"], ["\\M-G\\M-7", "\u01f7"], ["\\M-G\\M-8", "\u01f8"], ["\\M-G\\M-9", "\u01f9"], ["\\M-G\\M-:", "\u01fa"], ["\\M-G\\M-;", "\u01fb"], ["\\M-G\\M-<", "\u01fc"], ["\\M-G\\M-=", "\u01fd"], ["\\M-G\\M->", "\u01fe"], ["\\M-G\\M-?", "\u01ff"], ["\\M-H\\M^@", "\u0200"], ["\\M-H\\M^A", "\u0201"], ["\\M-H\\M^B", "\u0202"], ["\\M-H\\M^C", "\u0203"], ["\\M-H\\M^D", "\u0204"], ["\\M-H\\M^E", "\u0205"], ["\\M-H\\M^F", "\u0206"], ["\\M-H\\M^G", "\u0207"], ["\\M-H\\M^H", "\u0208"], ["\\M-H\\M^I", "\u0209"], ["\\M-H\\M^J", "\u020a"], ["\\M-H\\M^K", "\u020b"], ["\\M-H\\M^L", "\u020c"], ["\\M-H\\M^M", "\u020d"], ["\\M-H\\M^N", "\u020e"], ["\\M-H\\M^O", "\u020f"], ["\\M-H\\M^P", "\u0210"], ["\\M-H\\M^Q", "\u0211"], ["\\M-H\\M^R", "\u0212"], ["\\M-H\\M^S", "\u0213"], ["\\M-H\\M^T", "\u0214"], ["\\M-H\\M^U", "\u0215"], ["\\M-H\\M^V", "\u0216"], ["\\M-H\\M^W", "\u0217"], ["\\M-H\\M^X", "\u0218"], ["\\M-H\\M^Y", "\u0219"], ["\\M-H\\M^Z", "\u021a"], ["\\M-H\\M^[", "\u021b"], ["\\M-H\\M^\\", "\u021c"], ["\\M-H\\M^]", "\u021d"], ["\\M-H\\M^^", "\u021e"], ["\\M-H\\M^_", "\u021f"], ["\\M-H\\240", "\u0220"], ["\\M-H\\M-!", "\u0221"], ["\\M-H\\M-\"", "\u0222"], ["\\M-H\\M-#", "\u0223"], ["\\M-H\\M-$", "\u0224"], ["\\M-H\\M-%", "\u0225"], ["\\M-H\\M-&", "\u0226"], ["\\M-H\\M-'", "\u0227"], ["\\M-H\\M-(", "\u0228"], ["\\M-H\\M-)", "\u0229"], ["\\M-H\\M-*", "\u022a"], ["\\M-H\\M-+", "\u022b"], ["\\M-H\\M-,", "\u022c"], ["\\M-H\\M--", "\u022d"], ["\\M-H\\M-.", "\u022e"], ["\\M-H\\M-/", "\u022f"], ["\\M-H\\M-0", "\u0230"], ["\\M-H\\M-1", "\u0231"], ["\\M-H\\M-2", "\u0232"], ["\\M-H\\M-3", "\u0233"], ["\\M-H\\M-4", "\u0234"], ["\\M-H\\M-5", "\u0235"], ["\\M-H\\M-6", "\u0236"], ["\\M-H\\M-7", "\u0237"], ["\\M-H\\M-8", "\u0238"], ["\\M-H\\M-9", "\u0239"], ["\\M-H\\M-:", "\u023a"], ["\\M-H\\M-;", "\u023b"], ["\\M-H\\M-<", "\u023c"], ["\\M-H\\M-=", "\u023d"], ["\\M-H\\M->", "\u023e"], ["\\M-H\\M-?", "\u023f"], ["\\M-I\\M^@", "\u0240"], ["\\M-I\\M^A", "\u0241"], ["\\M-I\\M^B", "\u0242"], ["\\M-I\\M^C", "\u0243"], ["\\M-I\\M^D", "\u0244"], ["\\M-I\\M^E", "\u0245"], ["\\M-I\\M^F", "\u0246"], ["\\M-I\\M^G", "\u0247"], ["\\M-I\\M^H", "\u0248"], ["\\M-I\\M^I", "\u0249"], ["\\M-I\\M^J", "\u024a"], ["\\M-I\\M^K", "\u024b"], ["\\M-I\\M^L", "\u024c"], ["\\M-I\\M^M", "\u024d"], ["\\M-I\\M^N", "\u024e"], ["\\M-I\\M^O", "\u024f"], ["\\M-M\\M-0", "\u0370"], ["\\M-M\\M-1", "\u0371"], ["\\M-M\\M-2", "\u0372"], ["\\M-M\\M-3", "\u0373"], ["\\M-M\\M-4", "\u0374"], ["\\M-M\\M-5", "\u0375"], ["\\M-M\\M-6", "\u0376"], ["\\M-M\\M-7", "\u0377"], ["\\M-M\\M-8", "\u0378"], ["\\M-M\\M-9", "\u0379"], ["\\M-M\\M-:", "\u037a"], ["\\M-M\\M-;", "\u037b"], ["\\M-M\\M-<", "\u037c"], ["\\M-M\\M-=", "\u037d"], ["\\M-M\\M->", "\u037e"], ["\\M-M\\M-?", "\u037f"], ["\\M-N\\M^@", "\u0380"], ["\\M-N\\M^A", "\u0381"], ["\\M-N\\M^B", "\u0382"], ["\\M-N\\M^C", "\u0383"], ["\\M-N\\M^D", "\u0384"], ["\\M-N\\M^E", "\u0385"], ["\\M-N\\M^F", "\u0386"], ["\\M-N\\M^G", "\u0387"], ["\\M-N\\M^H", "\u0388"], ["\\M-N\\M^I", "\u0389"], ["\\M-N\\M^J", "\u038a"], ["\\M-N\\M^K", "\u038b"], ["\\M-N\\M^L", "\u038c"], ["\\M-N\\M^M", "\u038d"], ["\\M-N\\M^N", "\u038e"], ["\\M-N\\M^O", "\u038f"], ["\\M-N\\M^P", "\u0390"], ["\\M-N\\M^Q", "\u0391"], ["\\M-N\\M^R", "\u0392"], ["\\M-N\\M^S", "\u0393"], ["\\M-N\\M^T", "\u0394"], ["\\M-N\\M^U", "\u0395"], ["\\M-N\\M^V", "\u0396"], ["\\M-N\\M^W", "\u0397"], ["\\M-N\\M^X", "\u0398"], ["\\M-N\\M^Y", "\u0399"], ["\\M-N\\M^Z", "\u039a"], ["\\M-N\\M^[", "\u039b"], ["\\M-N\\M^\\", "\u039c"], ["\\M-N\\M^]", "\u039d"], ["\\M-N\\M^^", "\u039e"], ["\\M-N\\M^_", "\u039f"], ["\\M-N\\240", "\u03a0"], ["\\M-N\\M-!", "\u03a1"], ["\\M-N\\M-\"", "\u03a2"], ["\\M-N\\M-#", "\u03a3"], ["\\M-N\\M-$", "\u03a4"], ["\\M-N\\M-%", "\u03a5"], ["\\M-N\\M-&", "\u03a6"], ["\\M-N\\M-'", "\u03a7"], ["\\M-N\\M-(", "\u03a8"], ["\\M-N\\M-)", "\u03a9"], ["\\M-N\\M-*", "\u03aa"], ["\\M-N\\M-+", "\u03ab"], ["\\M-N\\M-,", "\u03ac"], ["\\M-N\\M--", "\u03ad"], ["\\M-N\\M-.", "\u03ae"], ["\\M-N\\M-/", "\u03af"], ["\\M-N\\M-0", "\u03b0"], ["\\M-N\\M-1", "\u03b1"], ["\\M-N\\M-2", "\u03b2"], ["\\M-N\\M-3", "\u03b3"], ["\\M-N\\M-4", "\u03b4"], ["\\M-N\\M-5", "\u03b5"], ["\\M-N\\M-6", "\u03b6"], ["\\M-N\\M-7", "\u03b7"], ["\\M-N\\M-8", "\u03b8"], ["\\M-N\\M-9", "\u03b9"], ["\\M-N\\M-:", "\u03ba"], ["\\M-N\\M-;", "\u03bb"], ["\\M-N\\M-<", "\u03bc"], ["\\M-N\\M-=", "\u03bd"], ["\\M-N\\M->", "\u03be"], ["\\M-N\\M-?", "\u03bf"], ["\\M-O\\M^@", "\u03c0"], ["\\M-O\\M^A", "\u03c1"], ["\\M-O\\M^B", "\u03c2"], ["\\M-O\\M^C", "\u03c3"], ["\\M-O\\M^D", "\u03c4"], ["\\M-O\\M^E", "\u03c5"], ["\\M-O\\M^F", "\u03c6"], ["\\M-O\\M^G", "\u03c7"], ["\\M-O\\M^H", "\u03c8"], ["\\M-O\\M^I", "\u03c9"], ["\\M-O\\M^J", "\u03ca"], ["\\M-O\\M^K", "\u03cb"], ["\\M-O\\M^L", "\u03cc"], ["\\M-O\\M^M", "\u03cd"], ["\\M-O\\M^N", "\u03ce"], ["\\M-O\\M^O", "\u03cf"], ["\\M-O\\M^P", "\u03d0"], ["\\M-O\\M^Q", "\u03d1"], ["\\M-O\\M^R", "\u03d2"], ["\\M-O\\M^S", "\u03d3"], ["\\M-O\\M^T", "\u03d4"], ["\\M-O\\M^U", "\u03d5"], ["\\M-O\\M^V", "\u03d6"], ["\\M-O\\M^W", "\u03d7"], ["\\M-O\\M^X", "\u03d8"], ["\\M-O\\M^Y", "\u03d9"], ["\\M-O\\M^Z", "\u03da"], ["\\M-O\\M^[", "\u03db"], ["\\M-O\\M^\\", "\u03dc"], ["\\M-O\\M^]", "\u03dd"], ["\\M-O\\M^^", "\u03de"], ["\\M-O\\M^_", "\u03df"], ["\\M-O\\240", "\u03e0"], ["\\M-O\\M-!", "\u03e1"], ["\\M-O\\M-\"", "\u03e2"], ["\\M-O\\M-#", "\u03e3"], ["\\M-O\\M-$", "\u03e4"], ["\\M-O\\M-%", "\u03e5"], ["\\M-O\\M-&", "\u03e6"], ["\\M-O\\M-'", "\u03e7"], ["\\M-O\\M-(", "\u03e8"], ["\\M-O\\M-)", "\u03e9"], ["\\M-O\\M-*", "\u03ea"], ["\\M-O\\M-+", "\u03eb"], ["\\M-O\\M-,", "\u03ec"], ["\\M-O\\M--", "\u03ed"], ["\\M-O\\M-.", "\u03ee"], ["\\M-O\\M-/", "\u03ef"], ["\\M-O\\M-0", "\u03f0"], ["\\M-O\\M-1", "\u03f1"], ["\\M-O\\M-2", "\u03f2"], ["\\M-O\\M-3", "\u03f3"], ["\\M-O\\M-4", "\u03f4"], ["\\M-O\\M-5", "\u03f5"], ["\\M-O\\M-6", "\u03f6"], ["\\M-O\\M-7", "\u03f7"], ["\\M-O\\M-8", "\u03f8"], ["\\M-O\\M-9", "\u03f9"], ["\\M-O\\M-:", "\u03fa"], ["\\M-O\\M-;", "\u03fb"], ["\\M-O\\M-<", "\u03fc"], ["\\M-O\\M-=", "\u03fd"], ["\\M-O\\M->", "\u03fe"], ["\\M-O\\M-?", "\u03ff"], ["\\M-P\\M^@", "\u0400"], ["\\M-P\\M^A", "\u0401"], ["\\M-P\\M^B", "\u0402"], ["\\M-P\\M^C", "\u0403"], ["\\M-P\\M^D", "\u0404"], ["\\M-P\\M^E", "\u0405"], ["\\M-P\\M^F", "\u0406"], ["\\M-P\\M^G", "\u0407"], ["\\M-P\\M^H", "\u0408"], ["\\M-P\\M^I", "\u0409"], ["\\M-P\\M^J", "\u040a"], ["\\M-P\\M^K", "\u040b"], ["\\M-P\\M^L", "\u040c"], ["\\M-P\\M^M", "\u040d"], ["\\M-P\\M^N", "\u040e"], ["\\M-P\\M^O", "\u040f"], ["\\M-P\\M^P", "\u0410"], ["\\M-P\\M^Q", "\u0411"], ["\\M-P\\M^R", "\u0412"], ["\\M-P\\M^S", "\u0413"], ["\\M-P\\M^T", "\u0414"], ["\\M-P\\M^U", "\u0415"], ["\\M-P\\M^V", "\u0416"], ["\\M-P\\M^W", "\u0417"], ["\\M-P\\M^X", "\u0418"], ["\\M-P\\M^Y", "\u0419"], ["\\M-P\\M^Z", "\u041a"], ["\\M-P\\M^[", "\u041b"], ["\\M-P\\M^\\", "\u041c"], ["\\M-P\\M^]", "\u041d"], ["\\M-P\\M^^", "\u041e"], ["\\M-P\\M^_", "\u041f"], ["\\M-P\\240", "\u0420"], ["\\M-P\\M-!", "\u0421"], ["\\M-P\\M-\"", "\u0422"], ["\\M-P\\M-#", "\u0423"], ["\\M-P\\M-$", "\u0424"], ["\\M-P\\M-%", "\u0425"], ["\\M-P\\M-&", "\u0426"], ["\\M-P\\M-'", "\u0427"], ["\\M-P\\M-(", "\u0428"], ["\\M-P\\M-)", "\u0429"], ["\\M-P\\M-*", "\u042a"], ["\\M-P\\M-+", "\u042b"], ["\\M-P\\M-,", "\u042c"], ["\\M-P\\M--", "\u042d"], ["\\M-P\\M-.", "\u042e"], ["\\M-P\\M-/", "\u042f"], ["\\M-P\\M-0", "\u0430"], ["\\M-P\\M-1", "\u0431"], ["\\M-P\\M-2", "\u0432"], ["\\M-P\\M-3", "\u0433"], ["\\M-P\\M-4", "\u0434"], ["\\M-P\\M-5", "\u0435"], ["\\M-P\\M-6", "\u0436"], ["\\M-P\\M-7", "\u0437"], ["\\M-P\\M-8", "\u0438"], ["\\M-P\\M-9", "\u0439"], ["\\M-P\\M-:", "\u043a"], ["\\M-P\\M-;", "\u043b"], ["\\M-P\\M-<", "\u043c"], ["\\M-P\\M-=", "\u043d"], ["\\M-P\\M->", "\u043e"], ["\\M-P\\M-?", "\u043f"], ["\\M-Q\\M^@", "\u0440"], ["\\M-Q\\M^A", "\u0441"], ["\\M-Q\\M^B", "\u0442"], ["\\M-Q\\M^C", "\u0443"], ["\\M-Q\\M^D", "\u0444"], ["\\M-Q\\M^E", "\u0445"], ["\\M-Q\\M^F", "\u0446"], ["\\M-Q\\M^G", "\u0447"], ["\\M-Q\\M^H", "\u0448"], ["\\M-Q\\M^I", "\u0449"], ["\\M-Q\\M^J", "\u044a"], ["\\M-Q\\M^K", "\u044b"], ["\\M-Q\\M^L", "\u044c"], ["\\M-Q\\M^M", "\u044d"], ["\\M-Q\\M^N", "\u044e"], ["\\M-Q\\M^O", "\u044f"], ["\\M-Q\\M^P", "\u0450"], ["\\M-Q\\M^Q", "\u0451"], ["\\M-Q\\M^R", "\u0452"], ["\\M-Q\\M^S", "\u0453"], ["\\M-Q\\M^T", "\u0454"], ["\\M-Q\\M^U", "\u0455"], ["\\M-Q\\M^V", "\u0456"], ["\\M-Q\\M^W", "\u0457"], ["\\M-Q\\M^X", "\u0458"], ["\\M-Q\\M^Y", "\u0459"], ["\\M-Q\\M^Z", "\u045a"], ["\\M-Q\\M^[", "\u045b"], ["\\M-Q\\M^\\", "\u045c"], ["\\M-Q\\M^]", "\u045d"], ["\\M-Q\\M^^", "\u045e"], ["\\M-Q\\M^_", "\u045f"], ["\\M-Q\\240", "\u0460"], ["\\M-Q\\M-!", "\u0461"], ["\\M-Q\\M-\"", "\u0462"], ["\\M-Q\\M-#", "\u0463"], ["\\M-Q\\M-$", "\u0464"], ["\\M-Q\\M-%", "\u0465"], ["\\M-Q\\M-&", "\u0466"], ["\\M-Q\\M-'", "\u0467"], ["\\M-Q\\M-(", "\u0468"], ["\\M-Q\\M-)", "\u0469"], ["\\M-Q\\M-*", "\u046a"], ["\\M-Q\\M-+", "\u046b"], ["\\M-Q\\M-,", "\u046c"], ["\\M-Q\\M--", "\u046d"], ["\\M-Q\\M-.", "\u046e"], ["\\M-Q\\M-/", "\u046f"], ["\\M-Q\\M-0", "\u0470"], ["\\M-Q\\M-1", "\u0471"], ["\\M-Q\\M-2", "\u0472"], ["\\M-Q\\M-3", "\u0473"], ["\\M-Q\\M-4", "\u0474"], ["\\M-Q\\M-5", "\u0475"], ["\\M-Q\\M-6", "\u0476"], ["\\M-Q\\M-7", "\u0477"], ["\\M-Q\\M-8", "\u0478"], ["\\M-Q\\M-9", "\u0479"], ["\\M-Q\\M-:", "\u047a"], ["\\M-Q\\M-;", "\u047b"], ["\\M-Q\\M-<", "\u047c"], ["\\M-Q\\M-=", "\u047d"], ["\\M-Q\\M->", "\u047e"], ["\\M-Q\\M-?", "\u047f"], ["\\M-R\\M^@", "\u0480"], ["\\M-R\\M^A", "\u0481"], ["\\M-R\\M^B", "\u0482"], ["\\M-R\\M^C", "\u0483"], ["\\M-R\\M^D", "\u0484"], ["\\M-R\\M^E", "\u0485"], ["\\M-R\\M^F", "\u0486"], ["\\M-R\\M^G", "\u0487"], ["\\M-R\\M^H", "\u0488"], ["\\M-R\\M^I", "\u0489"], ["\\M-R\\M^J", "\u048a"], ["\\M-R\\M^K", "\u048b"], ["\\M-R\\M^L", "\u048c"], ["\\M-R\\M^M", "\u048d"], ["\\M-R\\M^N", "\u048e"], ["\\M-R\\M^O", "\u048f"], ["\\M-R\\M^P", "\u0490"], ["\\M-R\\M^Q", "\u0491"], ["\\M-R\\M^R", "\u0492"], ["\\M-R\\M^S", "\u0493"], ["\\M-R\\M^T", "\u0494"], ["\\M-R\\M^U", "\u0495"], ["\\M-R\\M^V", "\u0496"], ["\\M-R\\M^W", "\u0497"], ["\\M-R\\M^X", "\u0498"], ["\\M-R\\M^Y", "\u0499"], ["\\M-R\\M^Z", "\u049a"], ["\\M-R\\M^[", "\u049b"], ["\\M-R\\M^\\", "\u049c"], ["\\M-R\\M^]", "\u049d"], ["\\M-R\\M^^", "\u049e"], ["\\M-R\\M^_", "\u049f"], ["\\M-R\\240", "\u04a0"], ["\\M-R\\M-!", "\u04a1"], ["\\M-R\\M-\"", "\u04a2"], ["\\M-R\\M-#", "\u04a3"], ["\\M-R\\M-$", "\u04a4"], ["\\M-R\\M-%", "\u04a5"], ["\\M-R\\M-&", "\u04a6"], ["\\M-R\\M-'", "\u04a7"], ["\\M-R\\M-(", "\u04a8"], ["\\M-R\\M-)", "\u04a9"], ["\\M-R\\M-*", "\u04aa"], ["\\M-R\\M-+", "\u04ab"], ["\\M-R\\M-,", "\u04ac"], ["\\M-R\\M--", "\u04ad"], ["\\M-R\\M-.", "\u04ae"], ["\\M-R\\M-/", "\u04af"], ["\\M-R\\M-0", "\u04b0"], ["\\M-R\\M-1", "\u04b1"], ["\\M-R\\M-2", "\u04b2"], ["\\M-R\\M-3", "\u04b3"], ["\\M-R\\M-4", "\u04b4"], ["\\M-R\\M-5", "\u04b5"], ["\\M-R\\M-6", "\u04b6"], ["\\M-R\\M-7", "\u04b7"], ["\\M-R\\M-8", "\u04b8"], ["\\M-R\\M-9", "\u04b9"], ["\\M-R\\M-:", "\u04ba"], ["\\M-R\\M-;", "\u04bb"], ["\\M-R\\M-<", "\u04bc"], ["\\M-R\\M-=", "\u04bd"], ["\\M-R\\M->", "\u04be"], ["\\M-R\\M-?", "\u04bf"], ["\\M-S\\M^@", "\u04c0"], ["\\M-S\\M^A", "\u04c1"], ["\\M-S\\M^B", "\u04c2"], ["\\M-S\\M^C", "\u04c3"], ["\\M-S\\M^D", "\u04c4"], ["\\M-S\\M^E", "\u04c5"], ["\\M-S\\M^F", "\u04c6"], ["\\M-S\\M^G", "\u04c7"], ["\\M-S\\M^H", "\u04c8"], ["\\M-S\\M^I", "\u04c9"], ["\\M-S\\M^J", "\u04ca"], ["\\M-S\\M^K", "\u04cb"], ["\\M-S\\M^L", "\u04cc"], ["\\M-S\\M^M", "\u04cd"], ["\\M-S\\M^N", "\u04ce"], ["\\M-S\\M^O", "\u04cf"], ["\\M-S\\M^P", "\u04d0"], ["\\M-S\\M^Q", "\u04d1"], ["\\M-S\\M^R", "\u04d2"], ["\\M-S\\M^S", "\u04d3"], ["\\M-S\\M^T", "\u04d4"], ["\\M-S\\M^U", "\u04d5"], ["\\M-S\\M^V", "\u04d6"], ["\\M-S\\M^W", "\u04d7"], ["\\M-S\\M^X", "\u04d8"], ["\\M-S\\M^Y", "\u04d9"], ["\\M-S\\M^Z", "\u04da"], ["\\M-S\\M^[", "\u04db"], ["\\M-S\\M^\\", "\u04dc"], ["\\M-S\\M^]", "\u04dd"], ["\\M-S\\M^^", "\u04de"], ["\\M-S\\M^_", "\u04df"], ["\\M-S\\240", "\u04e0"], ["\\M-S\\M-!", "\u04e1"], ["\\M-S\\M-\"", "\u04e2"], ["\\M-S\\M-#", "\u04e3"], ["\\M-S\\M-$", "\u04e4"], ["\\M-S\\M-%", "\u04e5"], ["\\M-S\\M-&", "\u04e6"], ["\\M-S\\M-'", "\u04e7"], ["\\M-S\\M-(", "\u04e8"], ["\\M-S\\M-)", "\u04e9"], ["\\M-S\\M-*", "\u04ea"], ["\\M-S\\M-+", "\u04eb"], ["\\M-S\\M-,", "\u04ec"], ["\\M-S\\M--", "\u04ed"], ["\\M-S\\M-.", "\u04ee"], ["\\M-S\\M-/", "\u04ef"], ["\\M-S\\M-0", "\u04f0"], ["\\M-S\\M-1", "\u04f1"], ["\\M-S\\M-2", "\u04f2"], ["\\M-S\\M-3", "\u04f3"], ["\\M-S\\M-4", "\u04f4"], ["\\M-S\\M-5", "\u04f5"], ["\\M-S\\M-6", "\u04f6"], ["\\M-S\\M-7", "\u04f7"], ["\\M-S\\M-8", "\u04f8"], ["\\M-S\\M-9", "\u04f9"], ["\\M-S\\M-:", "\u04fa"], ["\\M-S\\M-;", "\u04fb"], ["\\M-S\\M-<", "\u04fc"], ["\\M-S\\M-=", "\u04fd"], ["\\M-S\\M->", "\u04fe"], ["\\M-S\\M-?", "\u04ff"], ["\\M-T\\M^@", "\u0500"], ["\\M-T\\M^A", "\u0501"], ["\\M-T\\M^B", "\u0502"], ["\\M-T\\M^C", "\u0503"], ["\\M-T\\M^D", "\u0504"], ["\\M-T\\M^E", "\u0505"], ["\\M-T\\M^F", "\u0506"], ["\\M-T\\M^G", "\u0507"], ["\\M-T\\M^H", "\u0508"], ["\\M-T\\M^I", "\u0509"], ["\\M-T\\M^J", "\u050a"], ["\\M-T\\M^K", "\u050b"], ["\\M-T\\M^L", "\u050c"], ["\\M-T\\M^M", "\u050d"], ["\\M-T\\M^N", "\u050e"], ["\\M-T\\M^O", "\u050f"], ["\\M-T\\M^P", "\u0510"], ["\\M-T\\M^Q", "\u0511"], ["\\M-T\\M^R", "\u0512"], ["\\M-T\\M^S", "\u0513"], ["\\M-T\\M^T", "\u0514"], ["\\M-T\\M^U", "\u0515"], ["\\M-T\\M^V", "\u0516"], ["\\M-T\\M^W", "\u0517"], ["\\M-T\\M^X", "\u0518"], ["\\M-T\\M^Y", "\u0519"], ["\\M-T\\M^Z", "\u051a"], ["\\M-T\\M^[", "\u051b"], ["\\M-T\\M^\\", "\u051c"], ["\\M-T\\M^]", "\u051d"], ["\\M-T\\M^^", "\u051e"], ["\\M-T\\M^_", "\u051f"], ["\\M-T\\240", "\u0520"], ["\\M-T\\M-!", "\u0521"], ["\\M-T\\M-\"", "\u0522"], ["\\M-T\\M-#", "\u0523"], ["\\M-T\\M-$", "\u0524"], ["\\M-T\\M-%", "\u0525"], ["\\M-T\\M-&", "\u0526"], ["\\M-T\\M-'", "\u0527"], ["\\M-T\\M-(", "\u0528"], ["\\M-T\\M-)", "\u0529"], ["\\M-T\\M-*", "\u052a"], ["\\M-T\\M-+", "\u052b"], ["\\M-T\\M-,", "\u052c"], ["\\M-T\\M--", "\u052d"], ["\\M-T\\M-.", "\u052e"], ["\\M-T\\M-/", "\u052f"], ["\\M-V\\M^P", "\u0590"], ["\\M-V\\M^Q", "\u0591"], ["\\M-V\\M^R", "\u0592"], ["\\M-V\\M^S", "\u0593"], ["\\M-V\\M^T", "\u0594"], ["\\M-V\\M^U", "\u0595"], ["\\M-V\\M^V", "\u0596"], ["\\M-V\\M^W", "\u0597"], ["\\M-V\\M^X", "\u0598"], ["\\M-V\\M^Y", "\u0599"], ["\\M-V\\M^Z", "\u059a"], ["\\M-V\\M^[", "\u059b"], ["\\M-V\\M^\\", "\u059c"], ["\\M-V\\M^]", "\u059d"], ["\\M-V\\M^^", "\u059e"], ["\\M-V\\M^_", "\u059f"], ["\\M-V\\240", "\u05a0"], ["\\M-V\\M-!", "\u05a1"], ["\\M-V\\M-\"", "\u05a2"], ["\\M-V\\M-#", "\u05a3"], ["\\M-V\\M-$", "\u05a4"], ["\\M-V\\M-%", "\u05a5"], ["\\M-V\\M-&", "\u05a6"], ["\\M-V\\M-'", "\u05a7"], ["\\M-V\\M-(", "\u05a8"], ["\\M-V\\M-)", "\u05a9"], ["\\M-V\\M-*", "\u05aa"], ["\\M-V\\M-+", "\u05ab"], ["\\M-V\\M-,", "\u05ac"], ["\\M-V\\M--", "\u05ad"], ["\\M-V\\M-.", "\u05ae"], ["\\M-V\\M-/", "\u05af"], ["\\M-V\\M-0", "\u05b0"], ["\\M-V\\M-1", "\u05b1"], ["\\M-V\\M-2", "\u05b2"], ["\\M-V\\M-3", "\u05b3"], ["\\M-V\\M-4", "\u05b4"], ["\\M-V\\M-5", "\u05b5"], ["\\M-V\\M-6", "\u05b6"], ["\\M-V\\M-7", "\u05b7"], ["\\M-V\\M-8", "\u05b8"], ["\\M-V\\M-9", "\u05b9"], ["\\M-V\\M-:", "\u05ba"], ["\\M-V\\M-;", "\u05bb"], ["\\M-V\\M-<", "\u05bc"], ["\\M-V\\M-=", "\u05bd"], ["\\M-V\\M->", "\u05be"], ["\\M-V\\M-?", "\u05bf"], ["\\M-W\\M^@", "\u05c0"], ["\\M-W\\M^A", "\u05c1"], ["\\M-W\\M^B", "\u05c2"], ["\\M-W\\M^C", "\u05c3"], ["\\M-W\\M^D", "\u05c4"], ["\\M-W\\M^E", "\u05c5"], ["\\M-W\\M^F", "\u05c6"], ["\\M-W\\M^G", "\u05c7"], ["\\M-W\\M^H", "\u05c8"], ["\\M-W\\M^I", "\u05c9"], ["\\M-W\\M^J", "\u05ca"], ["\\M-W\\M^K", "\u05cb"], ["\\M-W\\M^L", "\u05cc"], ["\\M-W\\M^M", "\u05cd"], ["\\M-W\\M^N", "\u05ce"], ["\\M-W\\M^O", "\u05cf"], ["\\M-W\\M^P", "\u05d0"], ["\\M-W\\M^Q", "\u05d1"], ["\\M-W\\M^R", "\u05d2"], ["\\M-W\\M^S", "\u05d3"], ["\\M-W\\M^T", "\u05d4"], ["\\M-W\\M^U", "\u05d5"], ["\\M-W\\M^V", "\u05d6"], ["\\M-W\\M^W", "\u05d7"], ["\\M-W\\M^X", "\u05d8"], ["\\M-W\\M^Y", "\u05d9"], ["\\M-W\\M^Z", "\u05da"], ["\\M-W\\M^[", "\u05db"], ["\\M-W\\M^\\", "\u05dc"], ["\\M-W\\M^]", "\u05dd"], ["\\M-W\\M^^", "\u05de"], ["\\M-W\\M^_", "\u05df"], ["\\M-W\\240", "\u05e0"], ["\\M-W\\M-!", "\u05e1"], ["\\M-W\\M-\"", "\u05e2"], ["\\M-W\\M-#", "\u05e3"], ["\\M-W\\M-$", "\u05e4"], ["\\M-W\\M-%", "\u05e5"], ["\\M-W\\M-&", "\u05e6"], ["\\M-W\\M-'", "\u05e7"], ["\\M-W\\M-(", "\u05e8"], ["\\M-W\\M-)", "\u05e9"], ["\\M-W\\M-*", "\u05ea"], ["\\M-W\\M-+", "\u05eb"], ["\\M-W\\M-,", "\u05ec"], ["\\M-W\\M--", "\u05ed"], ["\\M-W\\M-.", "\u05ee"], ["\\M-W\\M-/", "\u05ef"], ["\\M-W\\M-0", "\u05f0"], ["\\M-W\\M-1", "\u05f1"], ["\\M-W\\M-2", "\u05f2"], ["\\M-W\\M-3", "\u05f3"], ["\\M-W\\M-4", "\u05f4"], ["\\M-W\\M-5", "\u05f5"], ["\\M-W\\M-6", "\u05f6"], ["\\M-W\\M-7", "\u05f7"], ["\\M-W\\M-8", "\u05f8"], ["\\M-W\\M-9", "\u05f9"], ["\\M-W\\M-:", "\u05fa"], ["\\M-W\\M-;", "\u05fb"], ["\\M-W\\M-<", "\u05fc"], ["\\M-W\\M-=", "\u05fd"], ["\\M-W\\M->", "\u05fe"], ["\\M-W\\M-?", "\u05ff"], ["\\M-X\\M^@", "\u0600"], ["\\M-X\\M^A", "\u0601"], ["\\M-X\\M^B", "\u0602"], ["\\M-X\\M^C", "\u0603"], ["\\M-X\\M^D", "\u0604"], ["\\M-X\\M^E", "\u0605"], ["\\M-X\\M^F", "\u0606"], ["\\M-X\\M^G", "\u0607"], ["\\M-X\\M^H", "\u0608"], ["\\M-X\\M^I", "\u0609"], ["\\M-X\\M^J", "\u060a"], ["\\M-X\\M^K", "\u060b"], ["\\M-X\\M^L", "\u060c"], ["\\M-X\\M^M", "\u060d"], ["\\M-X\\M^N", "\u060e"], ["\\M-X\\M^O", "\u060f"], ["\\M-X\\M^P", "\u0610"], ["\\M-X\\M^Q", "\u0611"], ["\\M-X\\M^R", "\u0612"], ["\\M-X\\M^S", "\u0613"], ["\\M-X\\M^T", "\u0614"], ["\\M-X\\M^U", "\u0615"], ["\\M-X\\M^V", "\u0616"], ["\\M-X\\M^W", "\u0617"], ["\\M-X\\M^X", "\u0618"], ["\\M-X\\M^Y", "\u0619"], ["\\M-X\\M^Z", "\u061a"], ["\\M-X\\M^[", "\u061b"], ["\\M-X\\M^\\", "\u061c"], ["\\M-X\\M^]", "\u061d"], ["\\M-X\\M^^", "\u061e"], ["\\M-X\\M^_", "\u061f"], ["\\M-X\\240", "\u0620"], ["\\M-X\\M-!", "\u0621"], ["\\M-X\\M-\"", "\u0622"], ["\\M-X\\M-#", "\u0623"], ["\\M-X\\M-$", "\u0624"], ["\\M-X\\M-%", "\u0625"], ["\\M-X\\M-&", "\u0626"], ["\\M-X\\M-'", "\u0627"], ["\\M-X\\M-(", "\u0628"], ["\\M-X\\M-)", "\u0629"], ["\\M-X\\M-*", "\u062a"], ["\\M-X\\M-+", "\u062b"], ["\\M-X\\M-,", "\u062c"], ["\\M-X\\M--", "\u062d"], ["\\M-X\\M-.", "\u062e"], ["\\M-X\\M-/", "\u062f"], ["\\M-X\\M-0", "\u0630"], ["\\M-X\\M-1", "\u0631"], ["\\M-X\\M-2", "\u0632"], ["\\M-X\\M-3", "\u0633"], ["\\M-X\\M-4", "\u0634"], ["\\M-X\\M-5", "\u0635"], ["\\M-X\\M-6", "\u0636"], ["\\M-X\\M-7", "\u0637"], ["\\M-X\\M-8", "\u0638"], ["\\M-X\\M-9", "\u0639"], ["\\M-X\\M-:", "\u063a"], ["\\M-X\\M-;", "\u063b"], ["\\M-X\\M-<", "\u063c"], ["\\M-X\\M-=", "\u063d"], ["\\M-X\\M->", "\u063e"], ["\\M-X\\M-?", "\u063f"], ["\\M-Y\\M^@", "\u0640"], ["\\M-Y\\M^A", "\u0641"], ["\\M-Y\\M^B", "\u0642"], ["\\M-Y\\M^C", "\u0643"], ["\\M-Y\\M^D", "\u0644"], ["\\M-Y\\M^E", "\u0645"], ["\\M-Y\\M^F", "\u0646"], ["\\M-Y\\M^G", "\u0647"], ["\\M-Y\\M^H", "\u0648"], ["\\M-Y\\M^I", "\u0649"], ["\\M-Y\\M^J", "\u064a"], ["\\M-Y\\M^K", "\u064b"], ["\\M-Y\\M^L", "\u064c"], ["\\M-Y\\M^M", "\u064d"], ["\\M-Y\\M^N", "\u064e"], ["\\M-Y\\M^O", "\u064f"], ["\\M-Y\\M^P", "\u0650"], ["\\M-Y\\M^Q", "\u0651"], ["\\M-Y\\M^R", "\u0652"], ["\\M-Y\\M^S", "\u0653"], ["\\M-Y\\M^T", "\u0654"], ["\\M-Y\\M^U", "\u0655"], ["\\M-Y\\M^V", "\u0656"], ["\\M-Y\\M^W", "\u0657"], ["\\M-Y\\M^X", "\u0658"], ["\\M-Y\\M^Y", "\u0659"], ["\\M-Y\\M^Z", "\u065a"], ["\\M-Y\\M^[", "\u065b"], ["\\M-Y\\M^\\", "\u065c"], ["\\M-Y\\M^]", "\u065d"], ["\\M-Y\\M^^", "\u065e"], ["\\M-Y\\M^_", "\u065f"], ["\\M-Y\\240", "\u0660"], ["\\M-Y\\M-!", "\u0661"], ["\\M-Y\\M-\"", "\u0662"], ["\\M-Y\\M-#", "\u0663"], ["\\M-Y\\M-$", "\u0664"], ["\\M-Y\\M-%", "\u0665"], ["\\M-Y\\M-&", "\u0666"], ["\\M-Y\\M-'", "\u0667"], ["\\M-Y\\M-(", "\u0668"], ["\\M-Y\\M-)", "\u0669"], ["\\M-Y\\M-*", "\u066a"], ["\\M-Y\\M-+", "\u066b"], ["\\M-Y\\M-,", "\u066c"], ["\\M-Y\\M--", "\u066d"], ["\\M-Y\\M-.", "\u066e"], ["\\M-Y\\M-/", "\u066f"], ["\\M-Y\\M-0", "\u0670"], ["\\M-Y\\M-1", "\u0671"], ["\\M-Y\\M-2", "\u0672"], ["\\M-Y\\M-3", "\u0673"], ["\\M-Y\\M-4", "\u0674"], ["\\M-Y\\M-5", "\u0675"], ["\\M-Y\\M-6", "\u0676"], ["\\M-Y\\M-7", "\u0677"], ["\\M-Y\\M-8", "\u0678"], ["\\M-Y\\M-9", "\u0679"], ["\\M-Y\\M-:", "\u067a"], ["\\M-Y\\M-;", "\u067b"], ["\\M-Y\\M-<", "\u067c"], ["\\M-Y\\M-=", "\u067d"], ["\\M-Y\\M->", "\u067e"], ["\\M-Y\\M-?", "\u067f"], ["\\M-Z\\M^@", "\u0680"], ["\\M-Z\\M^A", "\u0681"], ["\\M-Z\\M^B", "\u0682"], ["\\M-Z\\M^C", "\u0683"], ["\\M-Z\\M^D", "\u0684"], ["\\M-Z\\M^E", "\u0685"], ["\\M-Z\\M^F", "\u0686"], ["\\M-Z\\M^G", "\u0687"], ["\\M-Z\\M^H", "\u0688"], ["\\M-Z\\M^I", "\u0689"], ["\\M-Z\\M^J", "\u068a"], ["\\M-Z\\M^K", "\u068b"], ["\\M-Z\\M^L", "\u068c"], ["\\M-Z\\M^M", "\u068d"], ["\\M-Z\\M^N", "\u068e"], ["\\M-Z\\M^O", "\u068f"], ["\\M-Z\\M^P", "\u0690"], ["\\M-Z\\M^Q", "\u0691"], ["\\M-Z\\M^R", "\u0692"], ["\\M-Z\\M^S", "\u0693"], ["\\M-Z\\M^T", "\u0694"], ["\\M-Z\\M^U", "\u0695"], ["\\M-Z\\M^V", "\u0696"], ["\\M-Z\\M^W", "\u0697"], ["\\M-Z\\M^X", "\u0698"], ["\\M-Z\\M^Y", "\u0699"], ["\\M-Z\\M^Z", "\u069a"], ["\\M-Z\\M^[", "\u069b"], ["\\M-Z\\M^\\", "\u069c"], ["\\M-Z\\M^]", "\u069d"], ["\\M-Z\\M^^", "\u069e"], ["\\M-Z\\M^_", "\u069f"], ["\\M-Z\\240", "\u06a0"], ["\\M-Z\\M-!", "\u06a1"], ["\\M-Z\\M-\"", "\u06a2"], ["\\M-Z\\M-#", "\u06a3"], ["\\M-Z\\M-$", "\u06a4"], ["\\M-Z\\M-%", "\u06a5"], ["\\M-Z\\M-&", "\u06a6"], ["\\M-Z\\M-'", "\u06a7"], ["\\M-Z\\M-(", "\u06a8"], ["\\M-Z\\M-)", "\u06a9"], ["\\M-Z\\M-*", "\u06aa"], ["\\M-Z\\M-+", "\u06ab"], ["\\M-Z\\M-,", "\u06ac"], ["\\M-Z\\M--", "\u06ad"], ["\\M-Z\\M-.", "\u06ae"], ["\\M-Z\\M-/", "\u06af"], ["\\M-Z\\M-0", "\u06b0"], ["\\M-Z\\M-1", "\u06b1"], ["\\M-Z\\M-2", "\u06b2"], ["\\M-Z\\M-3", "\u06b3"], ["\\M-Z\\M-4", "\u06b4"], ["\\M-Z\\M-5", "\u06b5"], ["\\M-Z\\M-6", "\u06b6"], ["\\M-Z\\M-7", "\u06b7"], ["\\M-Z\\M-8", "\u06b8"], ["\\M-Z\\M-9", "\u06b9"], ["\\M-Z\\M-:", "\u06ba"], ["\\M-Z\\M-;", "\u06bb"], ["\\M-Z\\M-<", "\u06bc"], ["\\M-Z\\M-=", "\u06bd"], ["\\M-Z\\M->", "\u06be"], ["\\M-Z\\M-?", "\u06bf"], ["\\M-[\\M^@", "\u06c0"], ["\\M-[\\M^A", "\u06c1"], ["\\M-[\\M^B", "\u06c2"], ["\\M-[\\M^C", "\u06c3"], ["\\M-[\\M^D", "\u06c4"], ["\\M-[\\M^E", "\u06c5"], ["\\M-[\\M^F", "\u06c6"], ["\\M-[\\M^G", "\u06c7"], ["\\M-[\\M^H", "\u06c8"], ["\\M-[\\M^I", "\u06c9"], ["\\M-[\\M^J", "\u06ca"], ["\\M-[\\M^K", "\u06cb"], ["\\M-[\\M^L", "\u06cc"], ["\\M-[\\M^M", "\u06cd"], ["\\M-[\\M^N", "\u06ce"], ["\\M-[\\M^O", "\u06cf"], ["\\M-[\\M^P", "\u06d0"], ["\\M-[\\M^Q", "\u06d1"], ["\\M-[\\M^R", "\u06d2"], ["\\M-[\\M^S", "\u06d3"], ["\\M-[\\M^T", "\u06d4"], ["\\M-[\\M^U", "\u06d5"], ["\\M-[\\M^V", "\u06d6"], ["\\M-[\\M^W", "\u06d7"], ["\\M-[\\M^X", "\u06d8"], ["\\M-[\\M^Y", "\u06d9"], ["\\M-[\\M^Z", "\u06da"], ["\\M-[\\M^[", "\u06db"], ["\\M-[\\M^\\", "\u06dc"], ["\\M-[\\M^]", "\u06dd"], ["\\M-[\\M^^", "\u06de"], ["\\M-[\\M^_", "\u06df"], ["\\M-[\\240", "\u06e0"], ["\\M-[\\M-!", "\u06e1"], ["\\M-[\\M-\"", "\u06e2"], ["\\M-[\\M-#", "\u06e3"], ["\\M-[\\M-$", "\u06e4"], ["\\M-[\\M-%", "\u06e5"], ["\\M-[\\M-&", "\u06e6"], ["\\M-[\\M-'", "\u06e7"], ["\\M-[\\M-(", "\u06e8"], ["\\M-[\\M-)", "\u06e9"], ["\\M-[\\M-*", "\u06ea"], ["\\M-[\\M-+", "\u06eb"], ["\\M-[\\M-,", "\u06ec"], ["\\M-[\\M--", "\u06ed"], ["\\M-[\\M-.", "\u06ee"], ["\\M-[\\M-/", "\u06ef"], ["\\M-[\\M-0", "\u06f0"], ["\\M-[\\M-1", "\u06f1"], ["\\M-[\\M-2", "\u06f2"], ["\\M-[\\M-3", "\u06f3"], ["\\M-[\\M-4", "\u06f4"], ["\\M-[\\M-5", "\u06f5"], ["\\M-[\\M-6", "\u06f6"], ["\\M-[\\M-7", "\u06f7"], ["\\M-[\\M-8", "\u06f8"], ["\\M-[\\M-9", "\u06f9"], ["\\M-[\\M-:", "\u06fa"], ["\\M-[\\M-;", "\u06fb"], ["\\M-[\\M-<", "\u06fc"], ["\\M-[\\M-=", "\u06fd"], ["\\M-[\\M->", "\u06fe"], ["\\M-[\\M-?", "\u06ff"], ["\\M-b\\M-:\\M^@", "\u2e80"], ["\\M-b\\M-:\\M^A", "\u2e81"], ["\\M-b\\M-:\\M^B", "\u2e82"], ["\\M-b\\M-:\\M^C", "\u2e83"], ["\\M-b\\M-:\\M^D", "\u2e84"], ["\\M-b\\M-:\\M^E", "\u2e85"], ["\\M-b\\M-:\\M^F", "\u2e86"], ["\\M-b\\M-:\\M^G", "\u2e87"], ["\\M-b\\M-:\\M^H", "\u2e88"], ["\\M-b\\M-:\\M^I", "\u2e89"], ["\\M-b\\M-:\\M^J", "\u2e8a"], ["\\M-b\\M-:\\M^K", "\u2e8b"], ["\\M-b\\M-:\\M^L", "\u2e8c"], ["\\M-b\\M-:\\M^M", "\u2e8d"], ["\\M-b\\M-:\\M^N", "\u2e8e"], ["\\M-b\\M-:\\M^O", "\u2e8f"], ["\\M-b\\M-:\\M^P", "\u2e90"], ["\\M-b\\M-:\\M^Q", "\u2e91"], ["\\M-b\\M-:\\M^R", "\u2e92"], ["\\M-b\\M-:\\M^S", "\u2e93"], ["\\M-b\\M-:\\M^T", "\u2e94"], ["\\M-b\\M-:\\M^U", "\u2e95"], ["\\M-b\\M-:\\M^V", "\u2e96"], ["\\M-b\\M-:\\M^W", "\u2e97"], ["\\M-b\\M-:\\M^X", "\u2e98"], ["\\M-b\\M-:\\M^Y", "\u2e99"], ["\\M-b\\M-:\\M^Z", "\u2e9a"], ["\\M-b\\M-:\\M^[", "\u2e9b"], ["\\M-b\\M-:\\M^\\", "\u2e9c"], ["\\M-b\\M-:\\M^]", "\u2e9d"], ["\\M-b\\M-:\\M^^", "\u2e9e"], ["\\M-b\\M-:\\M^_", "\u2e9f"], ["\\M-b\\M-:\\240", "\u2ea0"], ["\\M-b\\M-:\\M-!", "\u2ea1"], ["\\M-b\\M-:\\M-\"", "\u2ea2"], ["\\M-b\\M-:\\M-#", "\u2ea3"], ["\\M-b\\M-:\\M-$", "\u2ea4"], ["\\M-b\\M-:\\M-%", "\u2ea5"], ["\\M-b\\M-:\\M-&", "\u2ea6"], ["\\M-b\\M-:\\M-'", "\u2ea7"], ["\\M-b\\M-:\\M-(", "\u2ea8"], ["\\M-b\\M-:\\M-)", "\u2ea9"], ["\\M-b\\M-:\\M-*", "\u2eaa"], ["\\M-b\\M-:\\M-+", "\u2eab"], ["\\M-b\\M-:\\M-,", "\u2eac"], ["\\M-b\\M-:\\M--", "\u2ead"], ["\\M-b\\M-:\\M-.", "\u2eae"], ["\\M-b\\M-:\\M-/", "\u2eaf"], ["\\M-b\\M-:\\M-0", "\u2eb0"], ["\\M-b\\M-:\\M-1", "\u2eb1"], ["\\M-b\\M-:\\M-2", "\u2eb2"], ["\\M-b\\M-:\\M-3", "\u2eb3"], ["\\M-b\\M-:\\M-4", "\u2eb4"], ["\\M-b\\M-:\\M-5", "\u2eb5"], ["\\M-b\\M-:\\M-6", "\u2eb6"], ["\\M-b\\M-:\\M-7", "\u2eb7"], ["\\M-b\\M-:\\M-8", "\u2eb8"], ["\\M-b\\M-:\\M-9", "\u2eb9"], ["\\M-b\\M-:\\M-:", "\u2eba"], ["\\M-b\\M-:\\M-;", "\u2ebb"], ["\\M-b\\M-:\\M-<", "\u2ebc"], ["\\M-b\\M-:\\M-=", "\u2ebd"], ["\\M-b\\M-:\\M->", "\u2ebe"], ["\\M-b\\M-:\\M-?", "\u2ebf"], ["\\M-b\\M-;\\M^@", "\u2ec0"], ["\\M-b\\M-;\\M^A", "\u2ec1"], ["\\M-b\\M-;\\M^B", "\u2ec2"], ["\\M-b\\M-;\\M^C", "\u2ec3"], ["\\M-b\\M-;\\M^D", "\u2ec4"], ["\\M-b\\M-;\\M^E", "\u2ec5"], ["\\M-b\\M-;\\M^F", "\u2ec6"], ["\\M-b\\M-;\\M^G", "\u2ec7"], ["\\M-b\\M-;\\M^H", "\u2ec8"], ["\\M-b\\M-;\\M^I", "\u2ec9"], ["\\M-b\\M-;\\M^J", "\u2eca"], ["\\M-b\\M-;\\M^K", "\u2ecb"], ["\\M-b\\M-;\\M^L", "\u2ecc"], ["\\M-b\\M-;\\M^M", "\u2ecd"], ["\\M-b\\M-;\\M^N", "\u2ece"], ["\\M-b\\M-;\\M^O", "\u2ecf"], ["\\M-b\\M-;\\M^P", "\u2ed0"], ["\\M-b\\M-;\\M^Q", "\u2ed1"], ["\\M-b\\M-;\\M^R", "\u2ed2"], ["\\M-b\\M-;\\M^S", "\u2ed3"], ["\\M-b\\M-;\\M^T", "\u2ed4"], ["\\M-b\\M-;\\M^U", "\u2ed5"], ["\\M-b\\M-;\\M^V", "\u2ed6"], ["\\M-b\\M-;\\M^W", "\u2ed7"], ["\\M-b\\M-;\\M^X", "\u2ed8"], ["\\M-b\\M-;\\M^Y", "\u2ed9"], ["\\M-b\\M-;\\M^Z", "\u2eda"], ["\\M-b\\M-;\\M^[", "\u2edb"], ["\\M-b\\M-;\\M^\\", "\u2edc"], ["\\M-b\\M-;\\M^]", "\u2edd"], ["\\M-b\\M-;\\M^^", "\u2ede"], ["\\M-b\\M-;\\M^_", "\u2edf"], ["\\M-b\\M-;\\240", "\u2ee0"], ["\\M-b\\M-;\\M-!", "\u2ee1"], ["\\M-b\\M-;\\M-\"", "\u2ee2"], ["\\M-b\\M-;\\M-#", "\u2ee3"], ["\\M-b\\M-;\\M-$", "\u2ee4"], ["\\M-b\\M-;\\M-%", "\u2ee5"], ["\\M-b\\M-;\\M-&", "\u2ee6"], ["\\M-b\\M-;\\M-'", "\u2ee7"], ["\\M-b\\M-;\\M-(", "\u2ee8"], ["\\M-b\\M-;\\M-)", "\u2ee9"], ["\\M-b\\M-;\\M-*", "\u2eea"], ["\\M-b\\M-;\\M-+", "\u2eeb"], ["\\M-b\\M-;\\M-,", "\u2eec"], ["\\M-b\\M-;\\M--", "\u2eed"], ["\\M-b\\M-;\\M-.", "\u2eee"], ["\\M-b\\M-;\\M-/", "\u2eef"], ["\\M-b\\M-;\\M-0", "\u2ef0"], ["\\M-b\\M-;\\M-1", "\u2ef1"], ["\\M-b\\M-;\\M-2", "\u2ef2"], ["\\M-b\\M-;\\M-3", "\u2ef3"], ["\\M-b\\M-;\\M-4", "\u2ef4"], ["\\M-b\\M-;\\M-5", "\u2ef5"], ["\\M-b\\M-;\\M-6", "\u2ef6"], ["\\M-b\\M-;\\M-7", "\u2ef7"], ["\\M-b\\M-;\\M-8", "\u2ef8"], ["\\M-b\\M-;\\M-9", "\u2ef9"], ["\\M-b\\M-;\\M-:", "\u2efa"], ["\\M-b\\M-;\\M-;", "\u2efb"], ["\\M-b\\M-;\\M-<", "\u2efc"], ["\\M-b\\M-;\\M-=", "\u2efd"], ["\\M-b\\M-;\\M->", "\u2efe"], ["\\M-b\\M-;\\M-?", "\u2eff"], ["\\M-c\\M^A\\M^@", "\u3040"], ["\\M-c\\M^A\\M^A", "\u3041"], ["\\M-c\\M^A\\M^B", "\u3042"], ["\\M-c\\M^A\\M^C", "\u3043"], ["\\M-c\\M^A\\M^D", "\u3044"], ["\\M-c\\M^A\\M^E", "\u3045"], ["\\M-c\\M^A\\M^F", "\u3046"], ["\\M-c\\M^A\\M^G", "\u3047"], ["\\M-c\\M^A\\M^H", "\u3048"], ["\\M-c\\M^A\\M^I", "\u3049"], ["\\M-c\\M^A\\M^J", "\u304a"], ["\\M-c\\M^A\\M^K", "\u304b"], ["\\M-c\\M^A\\M^L", "\u304c"], ["\\M-c\\M^A\\M^M", "\u304d"], ["\\M-c\\M^A\\M^N", "\u304e"], ["\\M-c\\M^A\\M^O", "\u304f"], ["\\M-c\\M^A\\M^P", "\u3050"], ["\\M-c\\M^A\\M^Q", "\u3051"], ["\\M-c\\M^A\\M^R", "\u3052"], ["\\M-c\\M^A\\M^S", "\u3053"], ["\\M-c\\M^A\\M^T", "\u3054"], ["\\M-c\\M^A\\M^U", "\u3055"], ["\\M-c\\M^A\\M^V", "\u3056"], ["\\M-c\\M^A\\M^W", "\u3057"], ["\\M-c\\M^A\\M^X", "\u3058"], ["\\M-c\\M^A\\M^Y", "\u3059"], ["\\M-c\\M^A\\M^Z", "\u305a"], ["\\M-c\\M^A\\M^[", "\u305b"], ["\\M-c\\M^A\\M^\\", "\u305c"], ["\\M-c\\M^A\\M^]", "\u305d"], ["\\M-c\\M^A\\M^^", "\u305e"], ["\\M-c\\M^A\\M^_", "\u305f"], ["\\M-c\\M^A\\240", "\u3060"], ["\\M-c\\M^A\\M-!", "\u3061"], ["\\M-c\\M^A\\M-\"", "\u3062"], ["\\M-c\\M^A\\M-#", "\u3063"], ["\\M-c\\M^A\\M-$", "\u3064"], ["\\M-c\\M^A\\M-%", "\u3065"], ["\\M-c\\M^A\\M-&", "\u3066"], ["\\M-c\\M^A\\M-'", "\u3067"], ["\\M-c\\M^A\\M-(", "\u3068"], ["\\M-c\\M^A\\M-)", "\u3069"], ["\\M-c\\M^A\\M-*", "\u306a"], ["\\M-c\\M^A\\M-+", "\u306b"], ["\\M-c\\M^A\\M-,", "\u306c"], ["\\M-c\\M^A\\M--", "\u306d"], ["\\M-c\\M^A\\M-.", "\u306e"], ["\\M-c\\M^A\\M-/", "\u306f"], ["\\M-c\\M^A\\M-0", "\u3070"], ["\\M-c\\M^A\\M-1", "\u3071"], ["\\M-c\\M^A\\M-2", "\u3072"], ["\\M-c\\M^A\\M-3", "\u3073"], ["\\M-c\\M^A\\M-4", "\u3074"], ["\\M-c\\M^A\\M-5", "\u3075"], ["\\M-c\\M^A\\M-6", "\u3076"], ["\\M-c\\M^A\\M-7", "\u3077"], ["\\M-c\\M^A\\M-8", "\u3078"], ["\\M-c\\M^A\\M-9", "\u3079"], ["\\M-c\\M^A\\M-:", "\u307a"], ["\\M-c\\M^A\\M-;", "\u307b"], ["\\M-c\\M^A\\M-<", "\u307c"], ["\\M-c\\M^A\\M-=", "\u307d"], ["\\M-c\\M^A\\M->", "\u307e"], ["\\M-c\\M^A\\M-?", "\u307f"], ["\\M-c\\M^B\\M^@", "\u3080"], ["\\M-c\\M^B\\M^A", "\u3081"], ["\\M-c\\M^B\\M^B", "\u3082"], ["\\M-c\\M^B\\M^C", "\u3083"], ["\\M-c\\M^B\\M^D", "\u3084"], ["\\M-c\\M^B\\M^E", "\u3085"], ["\\M-c\\M^B\\M^F", "\u3086"], ["\\M-c\\M^B\\M^G", "\u3087"], ["\\M-c\\M^B\\M^H", "\u3088"], ["\\M-c\\M^B\\M^I", "\u3089"], ["\\M-c\\M^B\\M^J", "\u308a"], ["\\M-c\\M^B\\M^K", "\u308b"], ["\\M-c\\M^B\\M^L", "\u308c"], ["\\M-c\\M^B\\M^M", "\u308d"], ["\\M-c\\M^B\\M^N", "\u308e"], ["\\M-c\\M^B\\M^O", "\u308f"], ["\\M-c\\M^B\\M^P", "\u3090"], ["\\M-c\\M^B\\M^Q", "\u3091"], ["\\M-c\\M^B\\M^R", "\u3092"], ["\\M-c\\M^B\\M^S", "\u3093"], ["\\M-c\\M^B\\M^T", "\u3094"], ["\\M-c\\M^B\\M^U", "\u3095"], ["\\M-c\\M^B\\M^V", "\u3096"], ["\\M-c\\M^B\\M^W", "\u3097"], ["\\M-c\\M^B\\M^X", "\u3098"], ["\\M-c\\M^B\\M^Y", "\u3099"], ["\\M-c\\M^B\\M^Z", "\u309a"], ["\\M-c\\M^B\\M^[", "\u309b"], ["\\M-c\\M^B\\M^\\", "\u309c"], ["\\M-c\\M^B\\M^]", "\u309d"], ["\\M-c\\M^B\\M^^", "\u309e"], ["\\M-c\\M^B\\M^_", "\u309f"], ["\\M-c\\M^B\\240", "\u30a0"], ["\\M-c\\M^B\\M-!", "\u30a1"], ["\\M-c\\M^B\\M-\"", "\u30a2"], ["\\M-c\\M^B\\M-#", "\u30a3"], ["\\M-c\\M^B\\M-$", "\u30a4"], ["\\M-c\\M^B\\M-%", "\u30a5"], ["\\M-c\\M^B\\M-&", "\u30a6"], ["\\M-c\\M^B\\M-'", "\u30a7"], ["\\M-c\\M^B\\M-(", "\u30a8"], ["\\M-c\\M^B\\M-)", "\u30a9"], ["\\M-c\\M^B\\M-*", "\u30aa"], ["\\M-c\\M^B\\M-+", "\u30ab"], ["\\M-c\\M^B\\M-,", "\u30ac"], ["\\M-c\\M^B\\M--", "\u30ad"], ["\\M-c\\M^B\\M-.", "\u30ae"], ["\\M-c\\M^B\\M-/", "\u30af"], ["\\M-c\\M^B\\M-0", "\u30b0"], ["\\M-c\\M^B\\M-1", "\u30b1"], ["\\M-c\\M^B\\M-2", "\u30b2"], ["\\M-c\\M^B\\M-3", "\u30b3"], ["\\M-c\\M^B\\M-4", "\u30b4"], ["\\M-c\\M^B\\M-5", "\u30b5"], ["\\M-c\\M^B\\M-6", "\u30b6"], ["\\M-c\\M^B\\M-7", "\u30b7"], ["\\M-c\\M^B\\M-8", "\u30b8"], ["\\M-c\\M^B\\M-9", "\u30b9"], ["\\M-c\\M^B\\M-:", "\u30ba"], ["\\M-c\\M^B\\M-;", "\u30bb"], ["\\M-c\\M^B\\M-<", "\u30bc"], ["\\M-c\\M^B\\M-=", "\u30bd"], ["\\M-c\\M^B\\M->", "\u30be"], ["\\M-c\\M^B\\M-?", "\u30bf"], ["\\M-c\\M^C\\M^@", "\u30c0"], ["\\M-c\\M^C\\M^A", "\u30c1"], ["\\M-c\\M^C\\M^B", "\u30c2"], ["\\M-c\\M^C\\M^C", "\u30c3"], ["\\M-c\\M^C\\M^D", "\u30c4"], ["\\M-c\\M^C\\M^E", "\u30c5"], ["\\M-c\\M^C\\M^F", "\u30c6"], ["\\M-c\\M^C\\M^G", "\u30c7"], ["\\M-c\\M^C\\M^H", "\u30c8"], ["\\M-c\\M^C\\M^I", "\u30c9"], ["\\M-c\\M^C\\M^J", "\u30ca"], ["\\M-c\\M^C\\M^K", "\u30cb"], ["\\M-c\\M^C\\M^L", "\u30cc"], ["\\M-c\\M^C\\M^M", "\u30cd"], ["\\M-c\\M^C\\M^N", "\u30ce"], ["\\M-c\\M^C\\M^O", "\u30cf"], ["\\M-c\\M^C\\M^P", "\u30d0"], ["\\M-c\\M^C\\M^Q", "\u30d1"], ["\\M-c\\M^C\\M^R", "\u30d2"], ["\\M-c\\M^C\\M^S", "\u30d3"], ["\\M-c\\M^C\\M^T", "\u30d4"], ["\\M-c\\M^C\\M^U", "\u30d5"], ["\\M-c\\M^C\\M^V", "\u30d6"], ["\\M-c\\M^C\\M^W", "\u30d7"], ["\\M-c\\M^C\\M^X", "\u30d8"], ["\\M-c\\M^C\\M^Y", "\u30d9"], ["\\M-c\\M^C\\M^Z", "\u30da"], ["\\M-c\\M^C\\M^[", "\u30db"], ["\\M-c\\M^C\\M^\\", "\u30dc"], ["\\M-c\\M^C\\M^]", "\u30dd"], ["\\M-c\\M^C\\M^^", "\u30de"], ["\\M-c\\M^C\\M^_", "\u30df"], ["\\M-c\\M^C\\240", "\u30e0"], ["\\M-c\\M^C\\M-!", "\u30e1"], ["\\M-c\\M^C\\M-\"", "\u30e2"], ["\\M-c\\M^C\\M-#", "\u30e3"], ["\\M-c\\M^C\\M-$", "\u30e4"], ["\\M-c\\M^C\\M-%", "\u30e5"], ["\\M-c\\M^C\\M-&", "\u30e6"], ["\\M-c\\M^C\\M-'", "\u30e7"], ["\\M-c\\M^C\\M-(", "\u30e8"], ["\\M-c\\M^C\\M-)", "\u30e9"], ["\\M-c\\M^C\\M-*", "\u30ea"], ["\\M-c\\M^C\\M-+", "\u30eb"], ["\\M-c\\M^C\\M-,", "\u30ec"], ["\\M-c\\M^C\\M--", "\u30ed"], ["\\M-c\\M^C\\M-.", "\u30ee"], ["\\M-c\\M^C\\M-/", "\u30ef"], ["\\M-c\\M^C\\M-0", "\u30f0"], ["\\M-c\\M^C\\M-1", "\u30f1"], ["\\M-c\\M^C\\M-2", "\u30f2"], ["\\M-c\\M^C\\M-3", "\u30f3"], ["\\M-c\\M^C\\M-4", "\u30f4"], ["\\M-c\\M^C\\M-5", "\u30f5"], ["\\M-c\\M^C\\M-6", "\u30f6"], ["\\M-c\\M^C\\M-7", "\u30f7"], ["\\M-c\\M^C\\M-8", "\u30f8"], ["\\M-c\\M^C\\M-9", "\u30f9"], ["\\M-c\\M^C\\M-:", "\u30fa"], ["\\M-c\\M^C\\M-;", "\u30fb"], ["\\M-c\\M^C\\M-<", "\u30fc"], ["\\M-c\\M^C\\M-=", "\u30fd"], ["\\M-c\\M^C\\M->", "\u30fe"], ["\\M-c\\M^C\\M-?", "\u30ff"], ["foo\\040bar", "foo bar"], ["foo\\^Jbar", "foo\nbar"], ["$bar\\040=\\040'baz';", "$bar = 'baz';"], ["$foo\\040=\\040\"\\\\x20\\\\\\\\x20\\\\\\\\\\\\x20\\\\\\\\\\\\\\\\x20\"", "$foo = \"\\x20\\\\x20\\\\\\x20\\\\\\\\x20\""], ["$foo\\040=\\040function($bar)\\040use($baz)\\040{\\^J\\^Ireturn\\040$baz->getFoo()\\^J};", "$foo = function($bar) use($baz) {\n\treturn $baz->getFoo()\n};"], ["", ""]]
\ No newline at end of file
diff --git a/vendor/psy/psysh/test/tools/gen_unvis_fixtures.py b/vendor/psy/psysh/test/tools/gen_unvis_fixtures.py
deleted file mode 100755
index e02a741459..0000000000
--- a/vendor/psy/psysh/test/tools/gen_unvis_fixtures.py
+++ /dev/null
@@ -1,94 +0,0 @@
-#! /usr/bin/env python3
-import sys
-from os.path import abspath, expanduser, dirname, join
-from itertools import chain
-import json
-import argparse
-
-from vis import vis, unvis, VIS_WHITE
-
-
-__dir__ = dirname(abspath(__file__))
-
-OUTPUT_FILE = join(__dir__, '..', 'fixtures', 'unvis_fixtures.json')
-
-# Add custom fixtures here
-CUSTOM_FIXTURES = [
-    # test long multibyte string
-    ''.join(chr(cp) for cp in range(1024)),
-    'foo bar',
-    'foo\nbar',
-    "$bar = 'baz';",
-    r'$foo = "\x20\\x20\\\x20\\\\x20"',
-    '$foo = function($bar) use($baz) {\n\treturn $baz->getFoo()\n};'
-]
-
-RANGES = {
-    # All valid codepoints in the BMP
-    'bmp': chain(range(0x0000, 0xD800), range(0xE000, 0xFFFF)),
-    # Smaller set of pertinent? codepoints inside BMP
-    # see: http://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_Multilingual_Plane
-    'small': chain(
-        # latin blocks
-        range(0x0000, 0x0250),
-        # Greek, Cyrillic
-        range(0x0370, 0x0530),
-        # Hebrew, Arabic
-        range(0x590, 0x0700),
-        # CJK radicals
-        range(0x2E80, 0x2F00),
-        # Hiragana, Katakana
-        range(0x3040, 0x3100)
-    )
-}
-
-
-if __name__ == '__main__':
-
-    argp = argparse.ArgumentParser(
-        description='Generates test data for Psy\\Test\\Util\\StrTest')
-    argp.add_argument('-f', '--format-output', action='store_true',
-                      help='Indent JSON output to ease debugging')
-    argp.add_argument('-a', '--all', action='store_true',
-                      help="""Generates test data for all codepoints of the BMP.
-                      (same as --range=bmp). WARNING: You will need quite
-                      a lot of RAM to run the testsuite !
-                      """)
-    argp.add_argument('-r', '--range',
-                      help="""Choose the range of codepoints used to generate
-                      test data.""",
-                      choices=list(RANGES.keys()),
-                      default='small')
-    argp.add_argument('-o', '--output-file',
-                      help="""Write test data to OUTPUT_FILE
-                      (defaults to PSYSH_DIR/test/fixtures)""")
-    args = argp.parse_args()
-
-    cp_range = RANGES['bmp'] if args.all else RANGES[args.range]
-    indent = 2 if args.format_output else None
-    if args.output_file:
-        OUTPUT_FILE = abspath(expanduser(args.output_file))
-
-    fixtures = []
-
-    # use SMALL_RANGE by default, it should be enough.
-    # use BMP_RANGE for a more complete smoke test
-    for codepoint in cp_range:
-        char = chr(codepoint)
-        encoded = vis(char, VIS_WHITE)
-        decoded = unvis(encoded)
-        fixtures.append((encoded, decoded))
-
-    # Add our own custom fixtures at the end,
-    # since they would fail anyway if one of the previous did.
-    for fixture in CUSTOM_FIXTURES:
-        encoded = vis(fixture, VIS_WHITE)
-        decoded = unvis(encoded)
-        fixtures.append((encoded, decoded))
-
-    with open(OUTPUT_FILE, 'w') as fp:
-        # dump as json to avoid backslashin and quotin nightmare
-        # between php and python
-        json.dump(fixtures, fp, indent=indent)
-
-    sys.exit(0)
diff --git a/vendor/psy/psysh/test/tools/vis.py b/vendor/psy/psysh/test/tools/vis.py
deleted file mode 100644
index 4e45c4c93f..0000000000
--- a/vendor/psy/psysh/test/tools/vis.py
+++ /dev/null
@@ -1,126 +0,0 @@
-"""
-vis.py
-======
-
-Ctypes based module to access libbsd's strvis & strunvis functions.
-
-The `vis` function is the equivalent of strvis.
-The `unvis` function is the equivalent of strunvis.
-All functions accept unicode string as input and return a unicode string.
-
-Constants:
-----------
-
-* to select alternate encoding format
-  `VIS_OCTAL`:      use octal \ddd format
-  `VIS_CSTYLE`:     use \[nrft0..] where appropiate
-
-* to alter set of characters encoded
-  (default is to encode all non-graphic except space, tab, and newline).
-  `VIS_SP`:         also encode space
-  `VIS_TAB`:        also encode tab
-  `VIS_NL`:         also encode newline
-  `VIS_WHITE`:      same as (VIS_SP | VIS_TAB | VIS_NL)
-  `VIS_SAFE`:       only encode "unsafe" characters
-
-* other
-  `VIS_NOSLASH`:    inhibit printing '\'
-  `VIS_HTTP1808`:   http-style escape % hex hex
-  `VIS_HTTPSTYLE`:  http-style escape % hex hex
-  `VIS_MIMESTYLE`:  mime-style escape = HEX HEX
-  `VIS_HTTP1866`:   http-style &#num; or &string;
-  `VIS_NOESCAPE`:   don't decode `\'
-  `VIS_GLOB`:       encode glob(3) magic characters
-
-:Authors:
-    - ju1ius (http://github.com/ju1ius)
-:Version: 1
-:Date: 2014-01-05
-"""
-from ctypes import CDLL, c_char_p, c_int
-from ctypes.util import find_library
-
-
-__all__ = [
-    'vis', 'unvis',
-    'VIS_OCTAL', 'VIS_CSTYLE',
-    'VIS_SP', 'VIS_TAB', 'VIS_NL', 'VIS_WHITE', 'VIS_SAFE',
-    'VIS_NOSLASH', 'VIS_HTTP1808', 'VIS_HTTPSTYLE', 'VIS_MIMESTYLE',
-    'VIS_HTTP1866', 'VIS_NOESCAPE', 'VIS_GLOB'
-]
-
-
-#############################################################
-# Constants from bsd/vis.h
-#############################################################
-
-#to select alternate encoding format
-VIS_OCTAL = 0x0001
-VIS_CSTYLE = 0x0002
-# to alter set of characters encoded
-# (default is to encode all non-graphic except space, tab, and newline).
-VIS_SP = 0x0004
-VIS_TAB = 0x0008
-VIS_NL = 0x0010
-VIS_WHITE = VIS_SP | VIS_TAB | VIS_NL
-VIS_SAFE = 0x0020
-# other
-VIS_NOSLASH = 0x0040
-VIS_HTTP1808 = 0x0080
-VIS_HTTPSTYLE = 0x0080
-VIS_MIMESTYLE = 0x0100
-VIS_HTTP1866 = 0x0200
-VIS_NOESCAPE = 0x0400
-VIS_GLOB = 0x1000
-
-#############################################################
-# Import libbsd/vis functions
-#############################################################
-
-_libbsd = CDLL(find_library('bsd'))
-
-_strvis = _libbsd.strvis
-_strvis.argtypes = [c_char_p, c_char_p, c_int]
-_strvis.restype = c_int
-
-_strunvis = _libbsd.strunvis
-_strvis.argtypes = [c_char_p, c_char_p]
-_strvis.restype = c_int
-
-
-def vis(src, flags=VIS_WHITE):
-    """
-    Encodes the string `src` into libbsd's vis encoding.
-    `flags` must be one of the VIS_* constants
-
-    C definition:
-    int strvis(char *dst, char *src, int flags);
-    """
-    src = bytes(src, 'utf-8')
-    dst_p = c_char_p(bytes(len(src) * 4))
-    src_p = c_char_p(src)
-    flags = c_int(flags)
-
-    bytes_written = _strvis(dst_p, src_p, flags)
-    if -1 == bytes_written:
-        raise RuntimeError('vis failed to encode string "{}"'.format(src))
-
-    return dst_p.value.decode('utf-8')
-
-
-def unvis(src):
-    """
-    Decodes a string encoded by vis.
-
-    C definition:
-    int strunvis(char *dst, char *src);
-    """
-    src = bytes(src, 'utf-8')
-    dst_p = c_char_p(bytes(len(src)))
-    src_p = c_char_p(src)
-
-    bytes_written = _strunvis(dst_p, src_p)
-    if -1 == bytes_written:
-        raise RuntimeError('unvis failed to decode string "{}"'.format(src))
-
-    return dst_p.value.decode('utf-8')
diff --git a/vendor/psy/psysh/vendor-bin/box/composer.json b/vendor/psy/psysh/vendor-bin/box/composer.json
deleted file mode 100644
index 13b78794fb..0000000000
--- a/vendor/psy/psysh/vendor-bin/box/composer.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-    "minimum-stability": "dev",
-    "prefer-stable": true,
-    "require": {
-        "humbug/box": "^3.1"
-    }
-}
diff --git a/vendor/psy/psysh/vendor-bin/box/composer.lock b/vendor/psy/psysh/vendor-bin/box/composer.lock
deleted file mode 100644
index 3c4496384a..0000000000
--- a/vendor/psy/psysh/vendor-bin/box/composer.lock
+++ /dev/null
@@ -1,2524 +0,0 @@
-{
-    "_readme": [
-        "This file locks the dependencies of your project to a known state",
-        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
-        "This file is @generated automatically"
-    ],
-    "content-hash": "d98ffe050f0ba4e81c2d1a98ca945200",
-    "packages": [
-        {
-            "name": "amphp/amp",
-            "version": "v2.0.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/amp.git",
-                "reference": "d561cc9736bc18dd94a2fc9cdae98b616bd92c43"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/amp/zipball/d561cc9736bc18dd94a2fc9cdae98b616bd92c43",
-                "reference": "d561cc9736bc18dd94a2fc9cdae98b616bd92c43",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7"
-            },
-            "require-dev": {
-                "amphp/phpunit-util": "^1",
-                "friendsofphp/php-cs-fixer": "^2.3",
-                "phpstan/phpstan": "^0.8.5",
-                "phpunit/phpunit": "^6.0.9",
-                "react/promise": "^2"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Amp\\": "lib"
-                },
-                "files": [
-                    "lib/functions.php",
-                    "lib/Internal/functions.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Bob Weinand",
-                    "email": "bobwei9@hotmail.com"
-                },
-                {
-                    "name": "Niklas Keller",
-                    "email": "me@kelunik.com"
-                },
-                {
-                    "name": "Daniel Lowrey",
-                    "email": "rdlowrey@php.net"
-                },
-                {
-                    "name": "Aaron Piotrowski",
-                    "email": "aaron@trowski.com"
-                }
-            ],
-            "description": "A non-blocking concurrency framework for PHP applications.",
-            "homepage": "http://amphp.org/amp",
-            "keywords": [
-                "async",
-                "asynchronous",
-                "awaitable",
-                "concurrency",
-                "event",
-                "event-loop",
-                "future",
-                "non-blocking",
-                "promise"
-            ],
-            "time": "2018-04-30T20:49:57+00:00"
-        },
-        {
-            "name": "amphp/byte-stream",
-            "version": "v1.3.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/byte-stream.git",
-                "reference": "1b75b122e6f069e7d102eef065dc192119d99ca7"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/byte-stream/zipball/1b75b122e6f069e7d102eef065dc192119d99ca7",
-                "reference": "1b75b122e6f069e7d102eef065dc192119d99ca7",
-                "shasum": ""
-            },
-            "require": {
-                "amphp/amp": "^2"
-            },
-            "require-dev": {
-                "amphp/phpunit-util": "^1",
-                "friendsofphp/php-cs-fixer": "^2.3",
-                "phpunit/phpunit": "^6"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Amp\\ByteStream\\": "lib"
-                },
-                "files": [
-                    "lib/functions.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Niklas Keller",
-                    "email": "me@kelunik.com"
-                },
-                {
-                    "name": "Aaron Piotrowski",
-                    "email": "aaron@trowski.com"
-                }
-            ],
-            "description": "A stream abstraction to make working with non-blocking I/O simple.",
-            "homepage": "http://amphp.org/byte-stream",
-            "keywords": [
-                "amp",
-                "amphp",
-                "async",
-                "io",
-                "non-blocking",
-                "stream"
-            ],
-            "time": "2018-04-04T05:33:09+00:00"
-        },
-        {
-            "name": "amphp/parallel",
-            "version": "v0.2.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/parallel.git",
-                "reference": "732694688461936bec02c0ccf020dfee10c4f7ee"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/parallel/zipball/732694688461936bec02c0ccf020dfee10c4f7ee",
-                "reference": "732694688461936bec02c0ccf020dfee10c4f7ee",
-                "shasum": ""
-            },
-            "require": {
-                "amphp/amp": "^2",
-                "amphp/byte-stream": "^1.2",
-                "amphp/parser": "^1",
-                "amphp/process": "^0.2 || ^0.3",
-                "amphp/sync": "^1.0.1"
-            },
-            "require-dev": {
-                "amphp/phpunit-util": "^1",
-                "friendsofphp/php-cs-fixer": "^2.3",
-                "phpunit/phpunit": "^6"
-            },
-            "suggest": {
-                "ext-pthreads": "Required for thread contexts"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Amp\\Parallel\\": "lib"
-                },
-                "files": [
-                    "lib/Worker/functions.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Stephen Coakley",
-                    "email": "me@stephencoakley.com"
-                },
-                {
-                    "name": "Aaron Piotrowski",
-                    "email": "aaron@trowski.com"
-                }
-            ],
-            "description": "Parallel processing component for Amp.",
-            "homepage": "https://github.com/amphp/parallel",
-            "keywords": [
-                "async",
-                "asynchronous",
-                "concurrent",
-                "multi-processing",
-                "multi-threading"
-            ],
-            "time": "2018-03-21T14:37:51+00:00"
-        },
-        {
-            "name": "amphp/parallel-functions",
-            "version": "v0.1.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/parallel-functions.git",
-                "reference": "999ba8a00adaf4d1fd3a7cb40bf7e565e507ff48"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/parallel-functions/zipball/999ba8a00adaf4d1fd3a7cb40bf7e565e507ff48",
-                "reference": "999ba8a00adaf4d1fd3a7cb40bf7e565e507ff48",
-                "shasum": ""
-            },
-            "require": {
-                "amphp/amp": "^2.0.3",
-                "amphp/parallel": "^0.1.8 || ^0.2",
-                "opis/closure": "^3.0.7",
-                "php": ">=7"
-            },
-            "require-dev": {
-                "amphp/phpunit-util": "^1.0",
-                "friendsofphp/php-cs-fixer": "^2.9",
-                "phpunit/phpunit": "^6.5"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Amp\\ParallelFunctions\\": "src"
-                },
-                "files": [
-                    "src/functions.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Niklas Keller",
-                    "email": "me@kelunik.com"
-                }
-            ],
-            "description": "Parallel processing made simple.",
-            "time": "2017-12-17T18:33:29+00:00"
-        },
-        {
-            "name": "amphp/parser",
-            "version": "v1.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/parser.git",
-                "reference": "f83e68f03d5b8e8e0365b8792985a7f341c57ae1"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/parser/zipball/f83e68f03d5b8e8e0365b8792985a7f341c57ae1",
-                "reference": "f83e68f03d5b8e8e0365b8792985a7f341c57ae1",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7"
-            },
-            "require-dev": {
-                "friendsofphp/php-cs-fixer": "^2.3",
-                "phpunit/phpunit": "^6"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Amp\\Parser\\": "lib"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Niklas Keller",
-                    "email": "me@kelunik.com"
-                },
-                {
-                    "name": "Aaron Piotrowski",
-                    "email": "aaron@trowski.com"
-                }
-            ],
-            "description": "A generator parser to make streaming parsers simple.",
-            "homepage": "https://github.com/amphp/parser",
-            "keywords": [
-                "async",
-                "non-blocking",
-                "parser",
-                "stream"
-            ],
-            "time": "2017-06-06T05:29:10+00:00"
-        },
-        {
-            "name": "amphp/process",
-            "version": "v0.3.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/process.git",
-                "reference": "b795d20a7f6d5a0637128a02be613f520f1705fc"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/process/zipball/b795d20a7f6d5a0637128a02be613f520f1705fc",
-                "reference": "b795d20a7f6d5a0637128a02be613f520f1705fc",
-                "shasum": ""
-            },
-            "require": {
-                "amphp/amp": "^2",
-                "amphp/byte-stream": "^1",
-                "php": ">=7"
-            },
-            "require-dev": {
-                "amphp/phpunit-util": "^1",
-                "friendsofphp/php-cs-fixer": "^2.3",
-                "phpunit/phpunit": "^6"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Amp\\Process\\": "lib"
-                },
-                "files": [
-                    "lib/constants.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Bob Weinand",
-                    "email": "bobwei9@hotmail.com"
-                },
-                {
-                    "name": "Niklas Keller",
-                    "email": "me@kelunik.com"
-                },
-                {
-                    "name": "Aaron Piotrowski",
-                    "email": "aaron@trowski.com"
-                }
-            ],
-            "description": "Asynchronous process manager.",
-            "homepage": "https://github.com/amphp/process",
-            "time": "2018-04-08T18:55:42+00:00"
-        },
-        {
-            "name": "amphp/sync",
-            "version": "v1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/sync.git",
-                "reference": "a1d8f244eb19e3e2a96abc4686cebc80995bbc90"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/sync/zipball/a1d8f244eb19e3e2a96abc4686cebc80995bbc90",
-                "reference": "a1d8f244eb19e3e2a96abc4686cebc80995bbc90",
-                "shasum": ""
-            },
-            "require": {
-                "amphp/amp": "^2"
-            },
-            "require-dev": {
-                "amphp/phpunit-util": "^1",
-                "friendsofphp/php-cs-fixer": "^2.3",
-                "phpunit/phpunit": "^6"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Amp\\Sync\\": "lib"
-                },
-                "files": [
-                    "lib/functions.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Stephen Coakley",
-                    "email": "me@stephencoakley.com"
-                },
-                {
-                    "name": "Aaron Piotrowski",
-                    "email": "aaron@trowski.com"
-                }
-            ],
-            "description": "Mutex, Semaphore, and other synchronization tools for Amp.",
-            "homepage": "https://github.com/amphp/sync",
-            "keywords": [
-                "async",
-                "asynchronous",
-                "mutex",
-                "semaphore",
-                "synchronization"
-            ],
-            "time": "2017-11-29T21:48:53+00:00"
-        },
-        {
-            "name": "beberlei/assert",
-            "version": "v2.9.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/beberlei/assert.git",
-                "reference": "c07fe163d6a3b3e4b1275981ec004397954afa89"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/beberlei/assert/zipball/c07fe163d6a3b3e4b1275981ec004397954afa89",
-                "reference": "c07fe163d6a3b3e4b1275981ec004397954afa89",
-                "shasum": ""
-            },
-            "require": {
-                "ext-mbstring": "*",
-                "php": ">=5.3"
-            },
-            "require-dev": {
-                "friendsofphp/php-cs-fixer": "^2.1.1",
-                "phpunit/phpunit": "^4.8.35|^5.7"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Assert\\": "lib/Assert"
-                },
-                "files": [
-                    "lib/Assert/functions.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-2-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Benjamin Eberlei",
-                    "email": "kontakt@beberlei.de",
-                    "role": "Lead Developer"
-                },
-                {
-                    "name": "Richard Quadling",
-                    "email": "rquadling@gmail.com",
-                    "role": "Collaborator"
-                }
-            ],
-            "description": "Thin assertion library for input validation in business models.",
-            "keywords": [
-                "assert",
-                "assertion",
-                "validation"
-            ],
-            "time": "2018-04-16T11:18:27+00:00"
-        },
-        {
-            "name": "composer/ca-bundle",
-            "version": "1.1.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/ca-bundle.git",
-                "reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/ca-bundle/zipball/d2c0a83b7533d6912e8d516756ebd34f893e9169",
-                "reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169",
-                "shasum": ""
-            },
-            "require": {
-                "ext-openssl": "*",
-                "ext-pcre": "*",
-                "php": "^5.3.2 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5",
-                "psr/log": "^1.0",
-                "symfony/process": "^2.5 || ^3.0 || ^4.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Composer\\CaBundle\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
-                }
-            ],
-            "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
-            "keywords": [
-                "cabundle",
-                "cacert",
-                "certificate",
-                "ssl",
-                "tls"
-            ],
-            "time": "2018-03-29T19:57:20+00:00"
-        },
-        {
-            "name": "composer/composer",
-            "version": "1.6.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/composer.git",
-                "reference": "b184a92419cc9a9c4c6a09db555a94d441cb11c9"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/composer/zipball/b184a92419cc9a9c4c6a09db555a94d441cb11c9",
-                "reference": "b184a92419cc9a9c4c6a09db555a94d441cb11c9",
-                "shasum": ""
-            },
-            "require": {
-                "composer/ca-bundle": "^1.0",
-                "composer/semver": "^1.0",
-                "composer/spdx-licenses": "^1.2",
-                "justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0",
-                "php": "^5.3.2 || ^7.0",
-                "psr/log": "^1.0",
-                "seld/cli-prompt": "^1.0",
-                "seld/jsonlint": "^1.4",
-                "seld/phar-utils": "^1.0",
-                "symfony/console": "^2.7 || ^3.0 || ^4.0",
-                "symfony/filesystem": "^2.7 || ^3.0 || ^4.0",
-                "symfony/finder": "^2.7 || ^3.0 || ^4.0",
-                "symfony/process": "^2.7 || ^3.0 || ^4.0"
-            },
-            "conflict": {
-                "symfony/console": "2.8.38"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7",
-                "phpunit/phpunit-mock-objects": "^2.3 || ^3.0"
-            },
-            "suggest": {
-                "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
-                "ext-zip": "Enabling the zip extension allows you to unzip archives",
-                "ext-zlib": "Allow gzip compression of HTTP requests"
-            },
-            "bin": [
-                "bin/composer"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.6-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Composer\\": "src/Composer"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nils Adermann",
-                    "email": "naderman@naderman.de",
-                    "homepage": "http://www.naderman.de"
-                },
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
-                }
-            ],
-            "description": "Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere.",
-            "homepage": "https://getcomposer.org/",
-            "keywords": [
-                "autoload",
-                "dependency",
-                "package"
-            ],
-            "time": "2018-05-04T09:44:59+00:00"
-        },
-        {
-            "name": "composer/semver",
-            "version": "1.4.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/semver.git",
-                "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/semver/zipball/c7cb9a2095a074d131b65a8a0cd294479d785573",
-                "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.3.2 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.5 || ^5.0.5",
-                "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Composer\\Semver\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nils Adermann",
-                    "email": "naderman@naderman.de",
-                    "homepage": "http://www.naderman.de"
-                },
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
-                },
-                {
-                    "name": "Rob Bast",
-                    "email": "rob.bast@gmail.com",
-                    "homepage": "http://robbast.nl"
-                }
-            ],
-            "description": "Semver library that offers utilities, version constraint parsing and validation.",
-            "keywords": [
-                "semantic",
-                "semver",
-                "validation",
-                "versioning"
-            ],
-            "time": "2016-08-30T16:08:34+00:00"
-        },
-        {
-            "name": "composer/spdx-licenses",
-            "version": "1.4.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/spdx-licenses.git",
-                "reference": "cb17687e9f936acd7e7245ad3890f953770dec1b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/cb17687e9f936acd7e7245ad3890f953770dec1b",
-                "reference": "cb17687e9f936acd7e7245ad3890f953770dec1b",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.3.2 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5",
-                "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Composer\\Spdx\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nils Adermann",
-                    "email": "naderman@naderman.de",
-                    "homepage": "http://www.naderman.de"
-                },
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
-                },
-                {
-                    "name": "Rob Bast",
-                    "email": "rob.bast@gmail.com",
-                    "homepage": "http://robbast.nl"
-                }
-            ],
-            "description": "SPDX licenses list and validation library.",
-            "keywords": [
-                "license",
-                "spdx",
-                "validator"
-            ],
-            "time": "2018-04-30T10:33:04+00:00"
-        },
-        {
-            "name": "composer/xdebug-handler",
-            "version": "1.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/xdebug-handler.git",
-                "reference": "c919dc6c62e221fc6406f861ea13433c0aa24f08"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/c919dc6c62e221fc6406f861ea13433c0aa24f08",
-                "reference": "c919dc6c62e221fc6406f861ea13433c0aa24f08",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.3.2 || ^7.0",
-                "psr/log": "^1.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Composer\\XdebugHandler\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "John Stevenson",
-                    "email": "john-stevenson@blueyonder.co.uk"
-                }
-            ],
-            "description": "Restarts a process without xdebug.",
-            "keywords": [
-                "Xdebug",
-                "performance"
-            ],
-            "time": "2018-04-11T15:42:36+00:00"
-        },
-        {
-            "name": "doctrine/annotations",
-            "version": "v1.6.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/annotations.git",
-                "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/annotations/zipball/c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5",
-                "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/lexer": "1.*",
-                "php": "^7.1"
-            },
-            "require-dev": {
-                "doctrine/cache": "1.*",
-                "phpunit/phpunit": "^6.4"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.6.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
-                },
-                {
-                    "name": "Benjamin Eberlei",
-                    "email": "kontakt@beberlei.de"
-                },
-                {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
-                },
-                {
-                    "name": "Jonathan Wage",
-                    "email": "jonwage@gmail.com"
-                },
-                {
-                    "name": "Johannes Schmitt",
-                    "email": "schmittjoh@gmail.com"
-                }
-            ],
-            "description": "Docblock Annotations Parser",
-            "homepage": "http://www.doctrine-project.org",
-            "keywords": [
-                "annotations",
-                "docblock",
-                "parser"
-            ],
-            "time": "2017-12-06T07:11:42+00:00"
-        },
-        {
-            "name": "doctrine/lexer",
-            "version": "v1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/lexer.git",
-                "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c",
-                "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.2"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Doctrine\\Common\\Lexer\\": "lib/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
-                },
-                {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
-                },
-                {
-                    "name": "Johannes Schmitt",
-                    "email": "schmittjoh@gmail.com"
-                }
-            ],
-            "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.",
-            "homepage": "http://www.doctrine-project.org",
-            "keywords": [
-                "lexer",
-                "parser"
-            ],
-            "time": "2014-09-09T13:34:57+00:00"
-        },
-        {
-            "name": "herrera-io/annotations",
-            "version": "1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/kherge-abandoned/php-annotations.git",
-                "reference": "7d8b9a536da7f12aad8de7f28b2cb5266bde8da1"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/kherge-abandoned/php-annotations/zipball/7d8b9a536da7f12aad8de7f28b2cb5266bde8da1",
-                "reference": "7d8b9a536da7f12aad8de7f28b2cb5266bde8da1",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/annotations": "~1.0",
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "herrera-io/phpunit-test-case": "1.*",
-                "phpunit/phpunit": "3.7.*"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Herrera\\Annotations": "src/lib"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Kevin Herrera",
-                    "email": "kevin@herrera.io",
-                    "homepage": "http://kevin.herrera.io"
-                }
-            ],
-            "description": "A tokenizer for Doctrine annotations.",
-            "homepage": "https://github.com/herrera-io/php-annotations",
-            "keywords": [
-                "annotations",
-                "doctrine",
-                "tokenizer"
-            ],
-            "abandoned": true,
-            "time": "2014-02-03T17:34:08+00:00"
-        },
-        {
-            "name": "humbug/box",
-            "version": "3.0.0-alpha.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/humbug/box.git",
-                "reference": "26b3f481e3b375f55c0644f501b831f7c05d8058"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/humbug/box/zipball/26b3f481e3b375f55c0644f501b831f7c05d8058",
-                "reference": "26b3f481e3b375f55c0644f501b831f7c05d8058",
-                "shasum": ""
-            },
-            "require": {
-                "amphp/parallel-functions": "^0.1.2",
-                "beberlei/assert": "^2.8",
-                "composer/composer": "^1.6",
-                "composer/xdebug-handler": "^1.1.0",
-                "ext-phar": "*",
-                "herrera-io/annotations": "~1.0",
-                "humbug/php-scoper": "^1.0@dev",
-                "justinrainbow/json-schema": "^5.2",
-                "nikic/iter": "^1.6",
-                "php": "^7.1",
-                "phpseclib/phpseclib": "~2.0",
-                "seld/jsonlint": "^1.6",
-                "symfony/console": "^3.4 || ^4.0",
-                "symfony/filesystem": "^3.4 || ^4.0",
-                "symfony/finder": "^3.4 || ^4.0",
-                "symfony/var-dumper": "^3.4 || ^4.0",
-                "webmozart/path-util": "^2.3"
-            },
-            "require-dev": {
-                "bamarni/composer-bin-plugin": "^1.2",
-                "infection/infection": "^0.8",
-                "mikey179/vfsstream": "^1.1",
-                "phpunit/phpunit": "^7.0"
-            },
-            "suggest": {
-                "ext-openssl": "To accelerate private key generation."
-            },
-            "bin": [
-                "bin/box"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.x-dev"
-                },
-                "bamarni-bin": {
-                    "bin-links": false
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "KevinGH\\Box\\": "src"
-                },
-                "files": [
-                    "src/FileSystem/file_system.php",
-                    "src/functions.php"
-                ],
-                "exclude-from-classmap": [
-                    "/Test/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Kevin Herrera",
-                    "email": "kevin@herrera.io",
-                    "homepage": "http://kevin.herrera.io"
-                },
-                {
-                    "name": "Théo Fidry",
-                    "email": "theo.fidry@gmail.com"
-                }
-            ],
-            "description": "Fast, zero config application bundler with PHARs.",
-            "keywords": [
-                "phar"
-            ],
-            "time": "2018-05-04T22:04:10+00:00"
-        },
-        {
-            "name": "humbug/php-scoper",
-            "version": "dev-master",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/humbug/php-scoper.git",
-                "reference": "450fe36a7457847d0cb431e7379b5df9d05992a4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/humbug/php-scoper/zipball/450fe36a7457847d0cb431e7379b5df9d05992a4",
-                "reference": "450fe36a7457847d0cb431e7379b5df9d05992a4",
-                "shasum": ""
-            },
-            "require": {
-                "nikic/php-parser": "^3.0",
-                "ocramius/package-versions": "^1.1",
-                "padraic/phar-updater": "^1.0",
-                "php": "^7.1",
-                "roave/better-reflection": "^2.0",
-                "symfony/console": "^3.2 || ^4.0",
-                "symfony/filesystem": "^3.2 || ^4.0",
-                "symfony/finder": "^3.2 || ^4.0"
-            },
-            "require-dev": {
-                "bamarni/composer-bin-plugin": "^1.1",
-                "phpunit/phpunit": "^6.1"
-            },
-            "bin": [
-                "bin/php-scoper"
-            ],
-            "type": "library",
-            "extra": {
-                "bamarni-bin": {
-                    "bin-links": false
-                },
-                "branch-alias": {
-                    "dev-master": "1.0-dev"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "src/functions.php"
-                ],
-                "psr-4": {
-                    "Humbug\\PhpScoper\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@gmail.com"
-                },
-                {
-                    "name": "Théo Fidry",
-                    "email": "theo.fidry@gmail.com"
-                },
-                {
-                    "name": "Pádraic Brady",
-                    "email": "padraic.brady@gmail.com"
-                }
-            ],
-            "description": "Prefixes all PHP namespaces in a file or directory.",
-            "time": "2018-04-25T21:59:07+00:00"
-        },
-        {
-            "name": "justinrainbow/json-schema",
-            "version": "5.2.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/justinrainbow/json-schema.git",
-                "reference": "8560d4314577199ba51bf2032f02cd1315587c23"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/8560d4314577199ba51bf2032f02cd1315587c23",
-                "reference": "8560d4314577199ba51bf2032f02cd1315587c23",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "friendsofphp/php-cs-fixer": "^2.1",
-                "json-schema/json-schema-test-suite": "1.2.0",
-                "phpunit/phpunit": "^4.8.35"
-            },
-            "bin": [
-                "bin/validate-json"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "5.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "JsonSchema\\": "src/JsonSchema/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Bruno Prieto Reis",
-                    "email": "bruno.p.reis@gmail.com"
-                },
-                {
-                    "name": "Justin Rainbow",
-                    "email": "justin.rainbow@gmail.com"
-                },
-                {
-                    "name": "Igor Wiedler",
-                    "email": "igor@wiedler.ch"
-                },
-                {
-                    "name": "Robert Schönthal",
-                    "email": "seroscho@googlemail.com"
-                }
-            ],
-            "description": "A library to validate a json schema.",
-            "homepage": "https://github.com/justinrainbow/json-schema",
-            "keywords": [
-                "json",
-                "schema"
-            ],
-            "time": "2018-02-14T22:26:30+00:00"
-        },
-        {
-            "name": "nikic/iter",
-            "version": "v1.6.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/nikic/iter.git",
-                "reference": "fed36b417ea93fe9b4b7cb2e2abf98d91092564c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/nikic/iter/zipball/fed36b417ea93fe9b4b7cb2e2abf98d91092564c",
-                "reference": "fed36b417ea93fe9b4b7cb2e2abf98d91092564c",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.5.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.0|~5.0"
-            },
-            "type": "library",
-            "autoload": {
-                "files": [
-                    "src/bootstrap.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Nikita Popov",
-                    "email": "nikic@php.net"
-                }
-            ],
-            "description": "Iteration primitives using generators",
-            "keywords": [
-                "functional",
-                "generator",
-                "iterator"
-            ],
-            "time": "2017-11-10T22:56:03+00:00"
-        },
-        {
-            "name": "nikic/php-parser",
-            "version": "v3.1.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/nikic/PHP-Parser.git",
-                "reference": "bb87e28e7d7b8d9a7fda231d37457c9210faf6ce"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/bb87e28e7d7b8d9a7fda231d37457c9210faf6ce",
-                "reference": "bb87e28e7d7b8d9a7fda231d37457c9210faf6ce",
-                "shasum": ""
-            },
-            "require": {
-                "ext-tokenizer": "*",
-                "php": ">=5.5"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.0|~5.0"
-            },
-            "bin": [
-                "bin/php-parse"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "PhpParser\\": "lib/PhpParser"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Nikita Popov"
-                }
-            ],
-            "description": "A PHP parser written in PHP",
-            "keywords": [
-                "parser",
-                "php"
-            ],
-            "time": "2018-02-28T20:30:58+00:00"
-        },
-        {
-            "name": "ocramius/package-versions",
-            "version": "1.3.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Ocramius/PackageVersions.git",
-                "reference": "4489d5002c49d55576fa0ba786f42dbb009be46f"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/4489d5002c49d55576fa0ba786f42dbb009be46f",
-                "reference": "4489d5002c49d55576fa0ba786f42dbb009be46f",
-                "shasum": ""
-            },
-            "require": {
-                "composer-plugin-api": "^1.0.0",
-                "php": "^7.1.0"
-            },
-            "require-dev": {
-                "composer/composer": "^1.6.3",
-                "ext-zip": "*",
-                "infection/infection": "^0.7.1",
-                "phpunit/phpunit": "^7.0.0"
-            },
-            "type": "composer-plugin",
-            "extra": {
-                "class": "PackageVersions\\Installer",
-                "branch-alias": {
-                    "dev-master": "2.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "PackageVersions\\": "src/PackageVersions"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Marco Pivetta",
-                    "email": "ocramius@gmail.com"
-                }
-            ],
-            "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)",
-            "time": "2018-02-05T13:05:30+00:00"
-        },
-        {
-            "name": "opis/closure",
-            "version": "3.0.12",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/opis/closure.git",
-                "reference": "507a28d15e79258d404ba76e73976ba895d0eb11"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/opis/closure/zipball/507a28d15e79258d404ba76e73976ba895d0eb11",
-                "reference": "507a28d15e79258d404ba76e73976ba895d0eb11",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.4.0"
-            },
-            "require-dev": {
-                "jeremeamia/superclosure": "^2.0",
-                "phpunit/phpunit": "^4.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Opis\\Closure\\": "src/"
-                },
-                "files": [
-                    "functions.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Marius Sarca",
-                    "email": "marius.sarca@gmail.com"
-                }
-            ],
-            "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.",
-            "homepage": "http://www.opis.io/closure",
-            "keywords": [
-                "anonymous functions",
-                "closure",
-                "function",
-                "serializable",
-                "serialization",
-                "serialize"
-            ],
-            "time": "2018-02-23T08:08:14+00:00"
-        },
-        {
-            "name": "padraic/humbug_get_contents",
-            "version": "1.1.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/humbug/file_get_contents.git",
-                "reference": "dcb086060c9dd6b2f51d8f7a895500307110b7a7"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/humbug/file_get_contents/zipball/dcb086060c9dd6b2f51d8f7a895500307110b7a7",
-                "reference": "dcb086060c9dd6b2f51d8f7a895500307110b7a7",
-                "shasum": ""
-            },
-            "require": {
-                "composer/ca-bundle": "^1.0",
-                "ext-openssl": "*",
-                "php": "^5.3 || ^7.0 || ^7.1 || ^7.2"
-            },
-            "require-dev": {
-                "bamarni/composer-bin-plugin": "^1.1",
-                "mikey179/vfsstream": "^1.6",
-                "phpunit/phpunit": "^4.8 || ^5.7 || ^6.5"
-            },
-            "type": "library",
-            "extra": {
-                "bamarni-bin": {
-                    "bin-links": false
-                },
-                "branch-alias": {
-                    "dev-master": "2.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Humbug\\": "src/"
-                },
-                "files": [
-                    "src/function.php",
-                    "src/functions.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Padraic Brady",
-                    "email": "padraic.brady@gmail.com",
-                    "homepage": "http://blog.astrumfutura.com"
-                },
-                {
-                    "name": "Théo Fidry",
-                    "email": "theo.fidry@gmail.com"
-                }
-            ],
-            "description": "Secure wrapper for accessing HTTPS resources with file_get_contents for PHP 5.3+",
-            "homepage": "https://github.com/padraic/file_get_contents",
-            "keywords": [
-                "download",
-                "file_get_contents",
-                "http",
-                "https",
-                "ssl",
-                "tls"
-            ],
-            "time": "2018-02-12T18:47:17+00:00"
-        },
-        {
-            "name": "padraic/phar-updater",
-            "version": "v1.0.6",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/humbug/phar-updater.git",
-                "reference": "d01d3b8f26e541ac9b9eeba1e18d005d852f7ff1"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/humbug/phar-updater/zipball/d01d3b8f26e541ac9b9eeba1e18d005d852f7ff1",
-                "reference": "d01d3b8f26e541ac9b9eeba1e18d005d852f7ff1",
-                "shasum": ""
-            },
-            "require": {
-                "padraic/humbug_get_contents": "^1.0",
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Humbug\\SelfUpdate\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Pádraic Brady",
-                    "email": "padraic.brady@gmail.com",
-                    "homepage": "http://blog.astrumfutura.com"
-                }
-            ],
-            "description": "A thing to make PHAR self-updating easy and secure.",
-            "keywords": [
-                "humbug",
-                "phar",
-                "self-update",
-                "update"
-            ],
-            "time": "2018-03-30T12:52:15+00:00"
-        },
-        {
-            "name": "phpdocumentor/reflection-common",
-            "version": "1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
-                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
-                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.5"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.6"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src"
-                    ]
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jaap van Otterdijk",
-                    "email": "opensource@ijaap.nl"
-                }
-            ],
-            "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
-            "homepage": "http://www.phpdoc.org",
-            "keywords": [
-                "FQSEN",
-                "phpDocumentor",
-                "phpdoc",
-                "reflection",
-                "static analysis"
-            ],
-            "time": "2017-09-11T18:02:19+00:00"
-        },
-        {
-            "name": "phpdocumentor/reflection-docblock",
-            "version": "4.3.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "94fd0001232e47129dd3504189fa1c7225010d08"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08",
-                "reference": "94fd0001232e47129dd3504189fa1c7225010d08",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.0",
-                "phpdocumentor/reflection-common": "^1.0.0",
-                "phpdocumentor/type-resolver": "^0.4.0",
-                "webmozart/assert": "^1.0"
-            },
-            "require-dev": {
-                "doctrine/instantiator": "~1.0.5",
-                "mockery/mockery": "^1.0",
-                "phpunit/phpunit": "^6.4"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src/"
-                    ]
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Mike van Riel",
-                    "email": "me@mikevanriel.com"
-                }
-            ],
-            "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
-            "time": "2017-11-30T07:14:17+00:00"
-        },
-        {
-            "name": "phpdocumentor/type-resolver",
-            "version": "0.4.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpDocumentor/TypeResolver.git",
-                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7",
-                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.5 || ^7.0",
-                "phpdocumentor/reflection-common": "^1.0"
-            },
-            "require-dev": {
-                "mockery/mockery": "^0.9.4",
-                "phpunit/phpunit": "^5.2||^4.8.24"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src/"
-                    ]
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Mike van Riel",
-                    "email": "me@mikevanriel.com"
-                }
-            ],
-            "time": "2017-07-14T14:27:02+00:00"
-        },
-        {
-            "name": "phpseclib/phpseclib",
-            "version": "2.0.11",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpseclib/phpseclib.git",
-                "reference": "7053f06f91b3de78e143d430e55a8f7889efc08b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/7053f06f91b3de78e143d430e55a8f7889efc08b",
-                "reference": "7053f06f91b3de78e143d430e55a8f7889efc08b",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "phing/phing": "~2.7",
-                "phpunit/phpunit": "^4.8.35|^5.7|^6.0",
-                "sami/sami": "~2.0",
-                "squizlabs/php_codesniffer": "~2.0"
-            },
-            "suggest": {
-                "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.",
-                "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.",
-                "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.",
-                "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations."
-            },
-            "type": "library",
-            "autoload": {
-                "files": [
-                    "phpseclib/bootstrap.php"
-                ],
-                "psr-4": {
-                    "phpseclib\\": "phpseclib/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jim Wigginton",
-                    "email": "terrafrost@php.net",
-                    "role": "Lead Developer"
-                },
-                {
-                    "name": "Patrick Monnerat",
-                    "email": "pm@datasphere.ch",
-                    "role": "Developer"
-                },
-                {
-                    "name": "Andreas Fischer",
-                    "email": "bantu@phpbb.com",
-                    "role": "Developer"
-                },
-                {
-                    "name": "Hans-Jürgen Petrich",
-                    "email": "petrich@tronic-media.com",
-                    "role": "Developer"
-                },
-                {
-                    "name": "Graham Campbell",
-                    "email": "graham@alt-three.com",
-                    "role": "Developer"
-                }
-            ],
-            "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.",
-            "homepage": "http://phpseclib.sourceforge.net",
-            "keywords": [
-                "BigInteger",
-                "aes",
-                "asn.1",
-                "asn1",
-                "blowfish",
-                "crypto",
-                "cryptography",
-                "encryption",
-                "rsa",
-                "security",
-                "sftp",
-                "signature",
-                "signing",
-                "ssh",
-                "twofish",
-                "x.509",
-                "x509"
-            ],
-            "time": "2018-04-15T16:55:05+00:00"
-        },
-        {
-            "name": "psr/log",
-            "version": "1.0.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/log.git",
-                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
-                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Psr\\Log\\": "Psr/Log/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "http://www.php-fig.org/"
-                }
-            ],
-            "description": "Common interface for logging libraries",
-            "homepage": "https://github.com/php-fig/log",
-            "keywords": [
-                "log",
-                "psr",
-                "psr-3"
-            ],
-            "time": "2016-10-10T12:19:37+00:00"
-        },
-        {
-            "name": "roave/better-reflection",
-            "version": "2.0.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Roave/BetterReflection.git",
-                "reference": "efc45b50cb52d5eeaacab15741376e981e28738b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Roave/BetterReflection/zipball/efc45b50cb52d5eeaacab15741376e981e28738b",
-                "reference": "efc45b50cb52d5eeaacab15741376e981e28738b",
-                "shasum": ""
-            },
-            "require": {
-                "nikic/php-parser": "^3.1.1",
-                "php": ">=7.1.0,<7.3.0",
-                "phpdocumentor/reflection-docblock": "^4.1.1",
-                "phpdocumentor/type-resolver": "^0.4.0",
-                "roave/signature": "^1.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^6.3.0"
-            },
-            "suggest": {
-                "composer/composer": "Required to use the ComposerSourceLocator"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Roave\\BetterReflection\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Marco Pivetta",
-                    "email": "ocramius@gmail.com",
-                    "homepage": "http://ocramius.github.io/"
-                },
-                {
-                    "name": "James Titcumb",
-                    "email": "james@asgrim.com",
-                    "homepage": "https://github.com/asgrim"
-                },
-                {
-                    "name": "Gary Hockin",
-                    "email": "gary@roave.com",
-                    "homepage": "https://github.com/geeh"
-                },
-                {
-                    "name": "Jaroslav Hanslík",
-                    "email": "kukulich@kukulich.cz",
-                    "homepage": "https://github.com/kukulich"
-                }
-            ],
-            "description": "Better Reflection - an improved code reflection API",
-            "time": "2018-02-05T08:08:57+00:00"
-        },
-        {
-            "name": "roave/signature",
-            "version": "1.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Roave/Signature.git",
-                "reference": "bed4ecbdd7f312ab6bb39561ac191f520bcee386"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Roave/Signature/zipball/bed4ecbdd7f312ab6bb39561ac191f520bcee386",
-                "reference": "bed4ecbdd7f312ab6bb39561ac191f520bcee386",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.0|^7.1"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^5.6"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Roave\\Signature\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "Sign and verify stuff",
-            "time": "2017-02-17T13:53:21+00:00"
-        },
-        {
-            "name": "seld/cli-prompt",
-            "version": "1.0.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Seldaek/cli-prompt.git",
-                "reference": "a19a7376a4689d4d94cab66ab4f3c816019ba8dd"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/cli-prompt/zipball/a19a7376a4689d4d94cab66ab4f3c816019ba8dd",
-                "reference": "a19a7376a4689d4d94cab66ab4f3c816019ba8dd",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Seld\\CliPrompt\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be"
-                }
-            ],
-            "description": "Allows you to prompt for user input on the command line, and optionally hide the characters they type",
-            "keywords": [
-                "cli",
-                "console",
-                "hidden",
-                "input",
-                "prompt"
-            ],
-            "time": "2017-03-18T11:32:45+00:00"
-        },
-        {
-            "name": "seld/jsonlint",
-            "version": "1.7.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Seldaek/jsonlint.git",
-                "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/d15f59a67ff805a44c50ea0516d2341740f81a38",
-                "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.3 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
-            },
-            "bin": [
-                "bin/jsonlint"
-            ],
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Seld\\JsonLint\\": "src/Seld/JsonLint/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
-                }
-            ],
-            "description": "JSON Linter",
-            "keywords": [
-                "json",
-                "linter",
-                "parser",
-                "validator"
-            ],
-            "time": "2018-01-24T12:46:19+00:00"
-        },
-        {
-            "name": "seld/phar-utils",
-            "version": "1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Seldaek/phar-utils.git",
-                "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/7009b5139491975ef6486545a39f3e6dad5ac30a",
-                "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Seld\\PharUtils\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be"
-                }
-            ],
-            "description": "PHAR file format utilities, for when PHP phars you up",
-            "keywords": [
-                "phra"
-            ],
-            "time": "2015-10-13T18:44:15+00:00"
-        },
-        {
-            "name": "symfony/console",
-            "version": "v4.0.9",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/console.git",
-                "reference": "3e820bc2c520a87ca209ad8fa961c97f42e0b4ae"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/3e820bc2c520a87ca209ad8fa961c97f42e0b4ae",
-                "reference": "3e820bc2c520a87ca209ad8fa961c97f42e0b4ae",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.1.3",
-                "symfony/polyfill-mbstring": "~1.0"
-            },
-            "conflict": {
-                "symfony/dependency-injection": "<3.4",
-                "symfony/process": "<3.3"
-            },
-            "require-dev": {
-                "psr/log": "~1.0",
-                "symfony/config": "~3.4|~4.0",
-                "symfony/dependency-injection": "~3.4|~4.0",
-                "symfony/event-dispatcher": "~3.4|~4.0",
-                "symfony/lock": "~3.4|~4.0",
-                "symfony/process": "~3.4|~4.0"
-            },
-            "suggest": {
-                "psr/log-implementation": "For using the console logger",
-                "symfony/event-dispatcher": "",
-                "symfony/lock": "",
-                "symfony/process": ""
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Console\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Console Component",
-            "homepage": "https://symfony.com",
-            "time": "2018-04-30T01:23:47+00:00"
-        },
-        {
-            "name": "symfony/filesystem",
-            "version": "v4.0.9",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/filesystem.git",
-                "reference": "5d2d655b2c72fc4d9bf7e9bf14f72a447b940f21"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/5d2d655b2c72fc4d9bf7e9bf14f72a447b940f21",
-                "reference": "5d2d655b2c72fc4d9bf7e9bf14f72a447b940f21",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.1.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Filesystem\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Filesystem Component",
-            "homepage": "https://symfony.com",
-            "time": "2018-02-22T10:50:29+00:00"
-        },
-        {
-            "name": "symfony/finder",
-            "version": "v4.0.9",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/finder.git",
-                "reference": "ca27c02b7a3fef4828c998c2ff9ba7aae1641c49"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/ca27c02b7a3fef4828c998c2ff9ba7aae1641c49",
-                "reference": "ca27c02b7a3fef4828c998c2ff9ba7aae1641c49",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.1.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Finder\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Finder Component",
-            "homepage": "https://symfony.com",
-            "time": "2018-04-04T05:10:37+00:00"
-        },
-        {
-            "name": "symfony/polyfill-mbstring",
-            "version": "v1.8.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "3296adf6a6454a050679cde90f95350ad604b171"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171",
-                "reference": "3296adf6a6454a050679cde90f95350ad604b171",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "suggest": {
-                "ext-mbstring": "For best performance"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.8-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Polyfill\\Mbstring\\": ""
-                },
-                "files": [
-                    "bootstrap.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill for the Mbstring extension",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "mbstring",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "time": "2018-04-26T10:06:28+00:00"
-        },
-        {
-            "name": "symfony/polyfill-php72",
-            "version": "v1.8.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-php72.git",
-                "reference": "a4576e282d782ad82397f3e4ec1df8e0f0cafb46"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/a4576e282d782ad82397f3e4ec1df8e0f0cafb46",
-                "reference": "a4576e282d782ad82397f3e4ec1df8e0f0cafb46",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.8-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Polyfill\\Php72\\": ""
-                },
-                "files": [
-                    "bootstrap.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "time": "2018-04-26T10:06:28+00:00"
-        },
-        {
-            "name": "symfony/process",
-            "version": "v4.0.9",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/process.git",
-                "reference": "d7dc1ee5dfe9f732cb1bba7310f5b99f2b7a6d25"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/d7dc1ee5dfe9f732cb1bba7310f5b99f2b7a6d25",
-                "reference": "d7dc1ee5dfe9f732cb1bba7310f5b99f2b7a6d25",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.1.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Process\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Process Component",
-            "homepage": "https://symfony.com",
-            "time": "2018-04-03T05:24:00+00:00"
-        },
-        {
-            "name": "symfony/var-dumper",
-            "version": "v4.0.9",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/var-dumper.git",
-                "reference": "3c34cf3f4bbac9e003d9325225e9ef1a49180a18"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/3c34cf3f4bbac9e003d9325225e9ef1a49180a18",
-                "reference": "3c34cf3f4bbac9e003d9325225e9ef1a49180a18",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.1.3",
-                "symfony/polyfill-mbstring": "~1.0",
-                "symfony/polyfill-php72": "~1.5"
-            },
-            "conflict": {
-                "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0"
-            },
-            "require-dev": {
-                "ext-iconv": "*",
-                "twig/twig": "~1.34|~2.4"
-            },
-            "suggest": {
-                "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
-                "ext-intl": "To show region name in time zone dump"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.0-dev"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "Resources/functions/dump.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Component\\VarDumper\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony mechanism for exploring and dumping PHP variables",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "debug",
-                "dump"
-            ],
-            "time": "2018-04-26T16:12:06+00:00"
-        },
-        {
-            "name": "webmozart/assert",
-            "version": "1.3.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/webmozart/assert.git",
-                "reference": "0df1908962e7a3071564e857d86874dad1ef204a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a",
-                "reference": "0df1908962e7a3071564e857d86874dad1ef204a",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.3.3 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.6",
-                "sebastian/version": "^1.0.1"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Webmozart\\Assert\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@gmail.com"
-                }
-            ],
-            "description": "Assertions to validate method input/output with nice error messages.",
-            "keywords": [
-                "assert",
-                "check",
-                "validate"
-            ],
-            "time": "2018-01-29T19:49:41+00:00"
-        },
-        {
-            "name": "webmozart/path-util",
-            "version": "2.3.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/webmozart/path-util.git",
-                "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
-                "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3",
-                "webmozart/assert": "~1.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.6",
-                "sebastian/version": "^1.0.1"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.3-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Webmozart\\PathUtil\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@gmail.com"
-                }
-            ],
-            "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.",
-            "time": "2015-12-17T08:42:14+00:00"
-        }
-    ],
-    "packages-dev": [],
-    "aliases": [],
-    "minimum-stability": "dev",
-    "stability-flags": {
-        "humbug/box": 15
-    },
-    "prefer-stable": true,
-    "prefer-lowest": false,
-    "platform": [],
-    "platform-dev": []
-}
diff --git a/vendor/symfony/filesystem/Filesystem.php b/vendor/symfony/filesystem/Filesystem.php
index 0b5297ecf0..96b2e96009 100644
--- a/vendor/symfony/filesystem/Filesystem.php
+++ b/vendor/symfony/filesystem/Filesystem.php
@@ -47,7 +47,7 @@ public function copy($originFile, $targetFile, $overwriteNewerFiles = false)
         $this->mkdir(\dirname($targetFile));
 
         $doCopy = true;
-        if (!$overwriteNewerFiles && null === parse_url($originFile, PHP_URL_HOST) && is_file($targetFile)) {
+        if (!$overwriteNewerFiles && null === parse_url($originFile, \PHP_URL_HOST) && is_file($targetFile)) {
             $doCopy = filemtime($originFile) > filemtime($targetFile);
         }
 
@@ -118,7 +118,7 @@ public function mkdir($dirs, $mode = 0777)
      */
     public function exists($files)
     {
-        $maxPathLength = PHP_MAXPATHLEN - 2;
+        $maxPathLength = \PHP_MAXPATHLEN - 2;
 
         foreach ($this->toIterable($files) as $file) {
             if (\strlen($file) > $maxPathLength) {
@@ -179,7 +179,7 @@ public function remove($files)
                 if (!self::box('rmdir', $file) && file_exists($file)) {
                     throw new IOException(sprintf('Failed to remove directory "%s": ', $file).self::$lastError);
                 }
-            } elseif (!self::box('unlink', $file) && file_exists($file)) {
+            } elseif (!self::box('unlink', $file) && (false !== strpos(self::$lastError, 'Permission denied') || file_exists($file))) {
                 throw new IOException(sprintf('Failed to remove file "%s": ', $file).self::$lastError);
             }
         }
@@ -198,7 +198,7 @@ public function remove($files)
     public function chmod($files, $mode, $umask = 0000, $recursive = false)
     {
         foreach ($this->toIterable($files) as $file) {
-            if (true !== @chmod($file, $mode & ~$umask)) {
+            if ((\PHP_VERSION_ID < 80000 || \is_int($mode)) && true !== @chmod($file, $mode & ~$umask)) {
                 throw new IOException(sprintf('Failed to chmod file "%s".', $file), 0, null, $file);
             }
             if ($recursive && is_dir($file) && !is_link($file)) {
@@ -301,7 +301,7 @@ public function rename($origin, $target, $overwrite = false)
      */
     private function isReadable($filename)
     {
-        $maxPathLength = PHP_MAXPATHLEN - 2;
+        $maxPathLength = \PHP_MAXPATHLEN - 2;
 
         if (\strlen($filename) > $maxPathLength) {
             throw new IOException(sprintf('Could not check if file is readable because path length exceeds %d characters.', $maxPathLength), 0, null, $filename);
@@ -446,7 +446,7 @@ public function readlink($path, $canonicalize = false)
     public function makePathRelative($endPath, $startPath)
     {
         if (!$this->isAbsolutePath($endPath) || !$this->isAbsolutePath($startPath)) {
-            @trigger_error(sprintf('Support for passing relative paths to %s() is deprecated since Symfony 3.4 and will be removed in 4.0.', __METHOD__), E_USER_DEPRECATED);
+            @trigger_error(sprintf('Support for passing relative paths to %s() is deprecated since Symfony 3.4 and will be removed in 4.0.', __METHOD__), \E_USER_DEPRECATED);
         }
 
         // Normalize separators on Windows
@@ -599,13 +599,13 @@ public function mirror($originDir, $targetDir, \Traversable $iterator = null, $o
      */
     public function isAbsolutePath($file)
     {
-        return strspn($file, '/\\', 0, 1)
+        return '' !== (string) $file && (strspn($file, '/\\', 0, 1)
             || (\strlen($file) > 3 && ctype_alpha($file[0])
                 && ':' === $file[1]
                 && strspn($file, '/\\', 2, 1)
             )
-            || null !== parse_url($file, PHP_URL_SCHEME)
-        ;
+            || null !== parse_url($file, \PHP_URL_SCHEME)
+        );
     }
 
     /**
@@ -713,7 +713,7 @@ public function appendToFile($filename, $content)
             throw new IOException(sprintf('Unable to write to the "%s" directory.', $dir), 0, null, $dir);
         }
 
-        if (false === @file_put_contents($filename, $content, FILE_APPEND)) {
+        if (false === @file_put_contents($filename, $content, \FILE_APPEND)) {
             throw new IOException(sprintf('Failed to write file "%s".', $filename), 0, null, $filename);
         }
     }
diff --git a/vendor/symfony/filesystem/LockHandler.php b/vendor/symfony/filesystem/LockHandler.php
index 8e0eb74121..2aacfa719b 100644
--- a/vendor/symfony/filesystem/LockHandler.php
+++ b/vendor/symfony/filesystem/LockHandler.php
@@ -15,7 +15,7 @@
 use Symfony\Component\Lock\Store\FlockStore;
 use Symfony\Component\Lock\Store\SemaphoreStore;
 
-@trigger_error(sprintf('The %s class is deprecated since Symfony 3.4 and will be removed in 4.0. Use %s or %s instead.', LockHandler::class, SemaphoreStore::class, FlockStore::class), E_USER_DEPRECATED);
+@trigger_error(sprintf('The %s class is deprecated since Symfony 3.4 and will be removed in 4.0. Use %s or %s instead.', LockHandler::class, SemaphoreStore::class, FlockStore::class), \E_USER_DEPRECATED);
 
 /**
  * LockHandler class provides a simple abstraction to lock anything by means of
@@ -97,7 +97,7 @@ public function lock($blocking = false)
 
         // On Windows, even if PHP doc says the contrary, LOCK_NB works, see
         // https://bugs.php.net/54129
-        if (!flock($this->handle, LOCK_EX | ($blocking ? 0 : LOCK_NB))) {
+        if (!flock($this->handle, \LOCK_EX | ($blocking ? 0 : \LOCK_NB))) {
             fclose($this->handle);
             $this->handle = null;
 
@@ -113,7 +113,7 @@ public function lock($blocking = false)
     public function release()
     {
         if ($this->handle) {
-            flock($this->handle, LOCK_UN | LOCK_NB);
+            flock($this->handle, \LOCK_UN | \LOCK_NB);
             fclose($this->handle);
             $this->handle = null;
         }
diff --git a/vendor/symfony/filesystem/Tests/FilesystemTest.php b/vendor/symfony/filesystem/Tests/FilesystemTest.php
index 8ac80437fe..b157cc4ed3 100644
--- a/vendor/symfony/filesystem/Tests/FilesystemTest.php
+++ b/vendor/symfony/filesystem/Tests/FilesystemTest.php
@@ -11,6 +11,8 @@
 
 namespace Symfony\Component\Filesystem\Tests;
 
+use Symfony\Component\Filesystem\Exception\IOException;
+
 /**
  * Test class for Filesystem.
  */
@@ -282,7 +284,7 @@ public function testRemoveCleansFilesAndDirectoriesIteratively()
 
         $this->filesystem->remove($basePath);
 
-        $this->assertFileNotExists($basePath);
+        $this->assertFileDoesNotExist($basePath);
     }
 
     public function testRemoveCleansArrayOfFilesAndDirectories()
@@ -298,8 +300,8 @@ public function testRemoveCleansArrayOfFilesAndDirectories()
 
         $this->filesystem->remove($files);
 
-        $this->assertFileNotExists($basePath.'dir');
-        $this->assertFileNotExists($basePath.'file');
+        $this->assertFileDoesNotExist($basePath.'dir');
+        $this->assertFileDoesNotExist($basePath.'file');
     }
 
     public function testRemoveCleansTraversableObjectOfFilesAndDirectories()
@@ -315,8 +317,8 @@ public function testRemoveCleansTraversableObjectOfFilesAndDirectories()
 
         $this->filesystem->remove($files);
 
-        $this->assertFileNotExists($basePath.'dir');
-        $this->assertFileNotExists($basePath.'file');
+        $this->assertFileDoesNotExist($basePath.'dir');
+        $this->assertFileDoesNotExist($basePath.'file');
     }
 
     public function testRemoveIgnoresNonExistingFiles()
@@ -331,7 +333,29 @@ public function testRemoveIgnoresNonExistingFiles()
 
         $this->filesystem->remove($files);
 
-        $this->assertFileNotExists($basePath.'dir');
+        $this->assertFileDoesNotExist($basePath.'dir');
+    }
+
+    public function testRemoveThrowsExceptionOnPermissionDenied()
+    {
+        $this->markAsSkippedIfChmodIsMissing();
+
+        $basePath = $this->workspace.\DIRECTORY_SEPARATOR.'dir_permissions';
+        mkdir($basePath);
+        $file = $basePath.\DIRECTORY_SEPARATOR.'file';
+        touch($file);
+        chmod($basePath, 0400);
+
+        try {
+            $this->filesystem->remove($file);
+            $this->fail('Filesystem::remove() should throw an exception');
+        } catch (IOException $e) {
+            $this->assertStringContainsString('Failed to remove file "'.$file.'"', $e->getMessage());
+            $this->assertStringContainsString('Permission denied', $e->getMessage());
+        } finally {
+            // Make sure we can clean up this file
+            chmod($basePath, 0777);
+        }
     }
 
     public function testRemoveCleansInvalidLinks()
@@ -355,7 +379,7 @@ public function testRemoveCleansInvalidLinks()
 
         $this->filesystem->remove($basePath);
 
-        $this->assertFileNotExists($basePath);
+        $this->assertFileDoesNotExist($basePath);
     }
 
     public function testFilesExists()
@@ -377,7 +401,7 @@ public function testFilesExistsFails()
             $this->markTestSkipped('Long file names are an issue on Windows');
         }
         $basePath = $this->workspace.'\\directory\\';
-        $maxPathLength = PHP_MAXPATHLEN - 2;
+        $maxPathLength = \PHP_MAXPATHLEN - 2;
 
         $oldPath = getcwd();
         mkdir($basePath);
@@ -753,7 +777,7 @@ public function testRename()
 
         $this->filesystem->rename($file, $newPath);
 
-        $this->assertFileNotExists($file);
+        $this->assertFileDoesNotExist($file);
         $this->assertFileExists($newPath);
     }
 
@@ -779,7 +803,7 @@ public function testRenameOverwritesTheTargetIfItAlreadyExists()
 
         $this->filesystem->rename($file, $newPath, true);
 
-        $this->assertFileNotExists($file);
+        $this->assertFileDoesNotExist($file);
         $this->assertFileExists($newPath);
     }
 
@@ -825,7 +849,7 @@ public function testRemoveSymlink()
 
         $this->assertFalse(is_link($link));
         $this->assertFalse(is_file($link));
-        $this->assertDirectoryNotExists($link);
+        $this->assertDirectoryDoesNotExist($link);
     }
 
     public function testSymlinkIsOverwrittenIfPointsToDifferentTarget()
@@ -1321,7 +1345,7 @@ public function testMirrorContentsWithSameNameAsSourceOrTargetWithDeleteOption()
 
         $this->assertDirectoryExists($targetPath);
         $this->assertFileExists($targetPath.'source');
-        $this->assertFileNotExists($targetPath.'target');
+        $this->assertFileDoesNotExist($targetPath.'target');
     }
 
     public function testMirrorFromSubdirectoryInToParentDirectory()
@@ -1416,7 +1440,7 @@ public function testTempnamWithPHPTempSchemeFails()
         $this->assertStringStartsWith($scheme, $filename);
 
         // The php://temp stream deletes the file after close
-        $this->assertFileNotExists($filename);
+        $this->assertFileDoesNotExist($filename);
     }
 
     public function testTempnamWithPharSchemeFails()
diff --git a/vendor/symfony/filesystem/Tests/FilesystemTestCase.php b/vendor/symfony/filesystem/Tests/FilesystemTestCase.php
index 6fb9eba733..b7038550d8 100644
--- a/vendor/symfony/filesystem/Tests/FilesystemTestCase.php
+++ b/vendor/symfony/filesystem/Tests/FilesystemTestCase.php
@@ -144,7 +144,7 @@ protected function markAsSkippedIfSymlinkIsMissing($relative = false)
         }
 
         // https://bugs.php.net/69473
-        if ($relative && '\\' === \DIRECTORY_SEPARATOR && 1 === PHP_ZTS) {
+        if ($relative && '\\' === \DIRECTORY_SEPARATOR && 1 === \PHP_ZTS) {
             $this->markTestSkipped('symlink does not support relative paths on thread safe Windows PHP versions');
         }
     }
diff --git a/vendor/symfony/filesystem/composer.json b/vendor/symfony/filesystem/composer.json
index 0fc8043cc0..ee48b0b238 100644
--- a/vendor/symfony/filesystem/composer.json
+++ b/vendor/symfony/filesystem/composer.json
@@ -25,10 +25,5 @@
             "/Tests/"
         ]
     },
-    "minimum-stability": "dev",
-    "extra": {
-        "branch-alias": {
-            "dev-master": "3.4-dev"
-        }
-    }
+    "minimum-stability": "dev"
 }
diff --git a/vendor/symfony/finder/Finder.php b/vendor/symfony/finder/Finder.php
index 133c4b8c50..3e8a9483ea 100644
--- a/vendor/symfony/finder/Finder.php
+++ b/vendor/symfony/finder/Finder.php
@@ -528,7 +528,7 @@ public function ignoreUnreadableDirs($ignore = true)
     /**
      * Searches files and directories which match defined rules.
      *
-     * @param string|array $dirs A directory path or an array of directories
+     * @param string|string[] $dirs A directory path or an array of directories
      *
      * @return $this
      *
@@ -541,7 +541,8 @@ public function in($dirs)
         foreach ((array) $dirs as $dir) {
             if (is_dir($dir)) {
                 $resolvedDirs[] = $this->normalizeDir($dir);
-            } elseif ($glob = glob($dir, (\defined('GLOB_BRACE') ? GLOB_BRACE : 0) | GLOB_ONLYDIR)) {
+            } elseif ($glob = glob($dir, (\defined('GLOB_BRACE') ? \GLOB_BRACE : 0) | \GLOB_ONLYDIR | \GLOB_NOSORT)) {
+                sort($glob);
                 $resolvedDirs = array_merge($resolvedDirs, array_map([$this, 'normalizeDir'], $glob));
             } else {
                 throw new \InvalidArgumentException(sprintf('The "%s" directory does not exist.', $dir));
@@ -657,7 +658,7 @@ private function searchInDirectory($dir)
         }
 
         $minDepth = 0;
-        $maxDepth = PHP_INT_MAX;
+        $maxDepth = \PHP_INT_MAX;
 
         foreach ($this->depths as $comparator) {
             switch ($comparator->getOperator()) {
@@ -692,7 +693,7 @@ private function searchInDirectory($dir)
 
         $iterator = new \RecursiveIteratorIterator($iterator, \RecursiveIteratorIterator::SELF_FIRST);
 
-        if ($minDepth > 0 || $maxDepth < PHP_INT_MAX) {
+        if ($minDepth > 0 || $maxDepth < \PHP_INT_MAX) {
             $iterator = new Iterator\DepthRangeFilterIterator($iterator, $minDepth, $maxDepth);
         }
 
@@ -735,7 +736,7 @@ private function searchInDirectory($dir)
     /**
      * Normalizes given directory names by removing trailing slashes.
      *
-     * Excluding: (s)ftp:// wrapper
+     * Excluding: (s)ftp:// or ssh2.(s)ftp:// wrapper
      *
      * @param string $dir
      *
@@ -743,9 +744,13 @@ private function searchInDirectory($dir)
      */
     private function normalizeDir($dir)
     {
+        if ('/' === $dir) {
+            return $dir;
+        }
+
         $dir = rtrim($dir, '/'.\DIRECTORY_SEPARATOR);
 
-        if (preg_match('#^s?ftp://#', $dir)) {
+        if (preg_match('#^(ssh2\.)?s?ftp://#', $dir)) {
             $dir .= '/';
         }
 
diff --git a/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php b/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php
index ce9d3aa73a..d9bbeb48f1 100644
--- a/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php
+++ b/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php
@@ -25,10 +25,10 @@ class DepthRangeFilterIterator extends FilterIterator
      * @param int                        $minDepth The min depth
      * @param int                        $maxDepth The max depth
      */
-    public function __construct(\RecursiveIteratorIterator $iterator, $minDepth = 0, $maxDepth = PHP_INT_MAX)
+    public function __construct(\RecursiveIteratorIterator $iterator, $minDepth = 0, $maxDepth = \PHP_INT_MAX)
     {
         $this->minDepth = $minDepth;
-        $iterator->setMaxDepth(PHP_INT_MAX === $maxDepth ? -1 : $maxDepth);
+        $iterator->setMaxDepth(\PHP_INT_MAX === $maxDepth ? -1 : $maxDepth);
 
         parent::__construct($iterator);
     }
diff --git a/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php b/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php
index bc0e6fc1e1..60bc4e814c 100644
--- a/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php
+++ b/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php
@@ -25,7 +25,7 @@ class ExcludeDirectoryFilterIterator extends FilterIterator implements \Recursiv
 
     /**
      * @param \Iterator $iterator    The Iterator to filter
-     * @param array     $directories An array of directories to exclude
+     * @param string[]  $directories An array of directories to exclude
      */
     public function __construct(\Iterator $iterator, array $directories)
     {
diff --git a/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php b/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php
index ab48a2b8a1..63764d407d 100644
--- a/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php
+++ b/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php
@@ -74,7 +74,11 @@ public function current()
         }
         $subPathname .= $this->getFilename();
 
-        return new SplFileInfo($this->rootPath.$this->directorySeparator.$subPathname, $this->subPath, $subPathname);
+        if ('/' !== $basePath = $this->rootPath) {
+            $basePath .= $this->directorySeparator;
+        }
+
+        return new SplFileInfo($basePath.$subPathname, $this->subPath, $subPathname);
     }
 
     /**
diff --git a/vendor/symfony/finder/Iterator/SortableIterator.php b/vendor/symfony/finder/Iterator/SortableIterator.php
index 3c7157adb9..e67997d117 100644
--- a/vendor/symfony/finder/Iterator/SortableIterator.php
+++ b/vendor/symfony/finder/Iterator/SortableIterator.php
@@ -38,11 +38,11 @@ public function __construct(\Traversable $iterator, $sort)
         $this->iterator = $iterator;
 
         if (self::SORT_BY_NAME === $sort) {
-            $this->sort = function ($a, $b) {
+            $this->sort = static function ($a, $b) {
                 return strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname());
             };
         } elseif (self::SORT_BY_TYPE === $sort) {
-            $this->sort = function ($a, $b) {
+            $this->sort = static function ($a, $b) {
                 if ($a->isDir() && $b->isFile()) {
                     return -1;
                 } elseif ($a->isFile() && $b->isDir()) {
@@ -52,15 +52,15 @@ public function __construct(\Traversable $iterator, $sort)
                 return strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname());
             };
         } elseif (self::SORT_BY_ACCESSED_TIME === $sort) {
-            $this->sort = function ($a, $b) {
+            $this->sort = static function ($a, $b) {
                 return $a->getATime() - $b->getATime();
             };
         } elseif (self::SORT_BY_CHANGED_TIME === $sort) {
-            $this->sort = function ($a, $b) {
+            $this->sort = static function ($a, $b) {
                 return $a->getCTime() - $b->getCTime();
             };
         } elseif (self::SORT_BY_MODIFIED_TIME === $sort) {
-            $this->sort = function ($a, $b) {
+            $this->sort = static function ($a, $b) {
                 return $a->getMTime() - $b->getMTime();
             };
         } elseif (\is_callable($sort)) {
diff --git a/vendor/symfony/finder/LICENSE b/vendor/symfony/finder/LICENSE
index a677f43763..9e936ec044 100644
--- a/vendor/symfony/finder/LICENSE
+++ b/vendor/symfony/finder/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2004-2019 Fabien Potencier
+Copyright (c) 2004-2020 Fabien Potencier
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/vendor/symfony/finder/Tests/FinderTest.php b/vendor/symfony/finder/Tests/FinderTest.php
index c0eac6da12..442186d2be 100644
--- a/vendor/symfony/finder/Tests/FinderTest.php
+++ b/vendor/symfony/finder/Tests/FinderTest.php
@@ -311,11 +311,9 @@ public function testIn()
         $this->assertIterator($expected, $iterator);
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testInWithNonExistentDirectory()
     {
+        $this->expectException('InvalidArgumentException');
         $finder = new Finder();
         $finder->in('foobar');
     }
@@ -328,11 +326,9 @@ public function testInWithGlob()
         $this->assertIterator($this->toAbsoluteFixtures(['A/B/C/abc.dat', 'copy/A/B/C/abc.dat.copy']), $finder);
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testInWithNonDirectoryGlob()
     {
+        $this->expectException('InvalidArgumentException');
         $finder = new Finder();
         $finder->in(__DIR__.'/Fixtures/A/a*');
     }
@@ -349,11 +345,9 @@ public function testInWithGlobBrace()
         $this->assertIterator($this->toAbsoluteFixtures(['A/B/C/abc.dat', 'copy/A/B/C/abc.dat.copy']), $finder);
     }
 
-    /**
-     * @expectedException \LogicException
-     */
     public function testGetIteratorWithoutIn()
     {
+        $this->expectException('LogicException');
         $finder = Finder::create();
         $finder->getIterator();
     }
@@ -481,11 +475,9 @@ public function testCountFiles()
         $this->assertCount($i, $files);
     }
 
-    /**
-     * @expectedException \LogicException
-     */
     public function testCountWithoutIn()
     {
+        $this->expectException('LogicException');
         $finder = Finder::create()->files();
         \count($finder);
     }
@@ -710,12 +702,8 @@ public function testAccessDeniedException()
                 $this->fail('Finder should throw an exception when opening a non-readable directory.');
             } catch (\Exception $e) {
                 $expectedExceptionClass = 'Symfony\\Component\\Finder\\Exception\\AccessDeniedException';
-                if ($e instanceof \PHPUnit_Framework_ExpectationFailedException) {
-                    $this->fail(sprintf("Expected exception:\n%s\nGot:\n%s\nWith comparison failure:\n%s", $expectedExceptionClass, 'PHPUnit_Framework_ExpectationFailedException', $e->getComparisonFailure()->getExpectedAsString()));
-                }
-
                 if ($e instanceof \PHPUnit\Framework\ExpectationFailedException) {
-                    $this->fail(sprintf("Expected exception:\n%s\nGot:\n%s\nWith comparison failure:\n%s", $expectedExceptionClass, '\PHPUnit\Framework\ExpectationFailedException', $e->getComparisonFailure()->getExpectedAsString()));
+                    $this->fail(sprintf("Expected exception:\n%s\nGot:\n%s\nWith comparison failure:\n%s", $expectedExceptionClass, 'PHPUnit\Framework\ExpectationFailedException', $e->getComparisonFailure()->getExpectedAsString()));
                 }
 
                 $this->assertInstanceOf($expectedExceptionClass, $e);
diff --git a/vendor/symfony/finder/Tests/Iterator/CustomFilterIteratorTest.php b/vendor/symfony/finder/Tests/Iterator/CustomFilterIteratorTest.php
index ad0187e032..56d958cb60 100644
--- a/vendor/symfony/finder/Tests/Iterator/CustomFilterIteratorTest.php
+++ b/vendor/symfony/finder/Tests/Iterator/CustomFilterIteratorTest.php
@@ -15,11 +15,9 @@
 
 class CustomFilterIteratorTest extends IteratorTestCase
 {
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testWithInvalidFilter()
     {
+        $this->expectException('InvalidArgumentException');
         new CustomFilterIterator(new Iterator(), ['foo']);
     }
 
diff --git a/vendor/symfony/finder/Tests/Iterator/DepthRangeFilterIteratorTest.php b/vendor/symfony/finder/Tests/Iterator/DepthRangeFilterIteratorTest.php
index dab9723d7e..5ef2ed41b3 100644
--- a/vendor/symfony/finder/Tests/Iterator/DepthRangeFilterIteratorTest.php
+++ b/vendor/symfony/finder/Tests/Iterator/DepthRangeFilterIteratorTest.php
@@ -75,8 +75,8 @@ public function getAcceptData()
         return [
             [0, 0, $this->toAbsolute($lessThan1)],
             [0, 1, $this->toAbsolute($lessThanOrEqualTo1)],
-            [2, PHP_INT_MAX, []],
-            [1, PHP_INT_MAX, $this->toAbsolute($graterThanOrEqualTo1)],
+            [2, \PHP_INT_MAX, []],
+            [1, \PHP_INT_MAX, $this->toAbsolute($graterThanOrEqualTo1)],
             [1, 1, $this->toAbsolute($equalTo1)],
         ];
     }
diff --git a/vendor/symfony/finder/Tests/Iterator/FilterIteratorTest.php b/vendor/symfony/finder/Tests/Iterator/FilterIteratorTest.php
index b26f7ba6bd..181b1464fc 100644
--- a/vendor/symfony/finder/Tests/Iterator/FilterIteratorTest.php
+++ b/vendor/symfony/finder/Tests/Iterator/FilterIteratorTest.php
@@ -26,9 +26,9 @@ public function testFilterFilesystemIterators()
         $i = $this->getMockForAbstractClass('Symfony\Component\Finder\Iterator\FilterIterator', [$i]);
         $i->expects($this->any())
             ->method('accept')
-            ->will($this->returnCallback(function () use ($i) {
+            ->willReturnCallback(function () use ($i) {
                 return (bool) preg_match('/\.php/', (string) $i->current());
-            })
+            }
         );
 
         $c = 0;
diff --git a/vendor/symfony/finder/Tests/Iterator/IteratorTestCase.php b/vendor/symfony/finder/Tests/Iterator/IteratorTestCase.php
index 796dc6ac36..c7dfd79e30 100644
--- a/vendor/symfony/finder/Tests/Iterator/IteratorTestCase.php
+++ b/vendor/symfony/finder/Tests/Iterator/IteratorTestCase.php
@@ -44,9 +44,8 @@ protected function assertOrderedIterator($expected, \Traversable $iterator)
      *      $a and $b such that $a goes before $b in $expected, the method
      *      asserts that any element of $a goes before any element of $b
      *      in the sequence generated by $iterator
-     *  @param \Traversable $iterator
      */
-    protected function assertOrderedIteratorForGroups($expected, \Traversable $iterator)
+    protected function assertOrderedIteratorForGroups(array $expected, \Traversable $iterator)
     {
         $values = array_values(array_map(function (\SplFileInfo $fileinfo) { return $fileinfo->getPathname(); }, iterator_to_array($iterator)));
 
@@ -63,11 +62,8 @@ protected function assertOrderedIteratorForGroups($expected, \Traversable $itera
 
     /**
      * Same as IteratorTestCase::assertIterator with foreach usage.
-     *
-     * @param array        $expected
-     * @param \Traversable $iterator
      */
-    protected function assertIteratorInForeach($expected, \Traversable $iterator)
+    protected function assertIteratorInForeach(array $expected, \Traversable $iterator)
     {
         $values = [];
         foreach ($iterator as $file) {
@@ -83,11 +79,8 @@ protected function assertIteratorInForeach($expected, \Traversable $iterator)
 
     /**
      * Same as IteratorTestCase::assertOrderedIterator with foreach usage.
-     *
-     * @param array        $expected
-     * @param \Traversable $iterator
      */
-    protected function assertOrderedIteratorInForeach($expected, \Traversable $iterator)
+    protected function assertOrderedIteratorInForeach(array $expected, \Traversable $iterator)
     {
         $values = [];
         foreach ($iterator as $file) {
diff --git a/vendor/symfony/finder/Tests/Iterator/SortableIteratorTest.php b/vendor/symfony/finder/Tests/Iterator/SortableIteratorTest.php
index 57f1e096a5..118c4769f2 100644
--- a/vendor/symfony/finder/Tests/Iterator/SortableIteratorTest.php
+++ b/vendor/symfony/finder/Tests/Iterator/SortableIteratorTest.php
@@ -33,11 +33,7 @@ public function testAccept($mode, $expected)
         if (!\is_callable($mode)) {
             switch ($mode) {
                 case SortableIterator::SORT_BY_ACCESSED_TIME:
-                    if ('\\' === \DIRECTORY_SEPARATOR) {
-                        touch(self::toAbsolute('.git'));
-                    } else {
-                        file_get_contents(self::toAbsolute('.git'));
-                    }
+                    touch(self::toAbsolute('.git'));
                     sleep(1);
                     file_get_contents(self::toAbsolute('.bar'));
                     break;
diff --git a/vendor/symfony/finder/composer.json b/vendor/symfony/finder/composer.json
index de19826f73..b0895524be 100644
--- a/vendor/symfony/finder/composer.json
+++ b/vendor/symfony/finder/composer.json
@@ -24,10 +24,5 @@
             "/Tests/"
         ]
     },
-    "minimum-stability": "dev",
-    "extra": {
-        "branch-alias": {
-            "dev-master": "3.4-dev"
-        }
-    }
+    "minimum-stability": "dev"
 }
diff --git a/vendor/symfony/var-dumper/Caster/AmqpCaster.php b/vendor/symfony/var-dumper/Caster/AmqpCaster.php
index 19bdc29525..dc7a6414fc 100644
--- a/vendor/symfony/var-dumper/Caster/AmqpCaster.php
+++ b/vendor/symfony/var-dumper/Caster/AmqpCaster.php
@@ -21,27 +21,27 @@
 class AmqpCaster
 {
     private static $flags = [
-        AMQP_DURABLE => 'AMQP_DURABLE',
-        AMQP_PASSIVE => 'AMQP_PASSIVE',
-        AMQP_EXCLUSIVE => 'AMQP_EXCLUSIVE',
-        AMQP_AUTODELETE => 'AMQP_AUTODELETE',
-        AMQP_INTERNAL => 'AMQP_INTERNAL',
-        AMQP_NOLOCAL => 'AMQP_NOLOCAL',
-        AMQP_AUTOACK => 'AMQP_AUTOACK',
-        AMQP_IFEMPTY => 'AMQP_IFEMPTY',
-        AMQP_IFUNUSED => 'AMQP_IFUNUSED',
-        AMQP_MANDATORY => 'AMQP_MANDATORY',
-        AMQP_IMMEDIATE => 'AMQP_IMMEDIATE',
-        AMQP_MULTIPLE => 'AMQP_MULTIPLE',
-        AMQP_NOWAIT => 'AMQP_NOWAIT',
-        AMQP_REQUEUE => 'AMQP_REQUEUE',
+        \AMQP_DURABLE => 'AMQP_DURABLE',
+        \AMQP_PASSIVE => 'AMQP_PASSIVE',
+        \AMQP_EXCLUSIVE => 'AMQP_EXCLUSIVE',
+        \AMQP_AUTODELETE => 'AMQP_AUTODELETE',
+        \AMQP_INTERNAL => 'AMQP_INTERNAL',
+        \AMQP_NOLOCAL => 'AMQP_NOLOCAL',
+        \AMQP_AUTOACK => 'AMQP_AUTOACK',
+        \AMQP_IFEMPTY => 'AMQP_IFEMPTY',
+        \AMQP_IFUNUSED => 'AMQP_IFUNUSED',
+        \AMQP_MANDATORY => 'AMQP_MANDATORY',
+        \AMQP_IMMEDIATE => 'AMQP_IMMEDIATE',
+        \AMQP_MULTIPLE => 'AMQP_MULTIPLE',
+        \AMQP_NOWAIT => 'AMQP_NOWAIT',
+        \AMQP_REQUEUE => 'AMQP_REQUEUE',
     ];
 
     private static $exchangeTypes = [
-        AMQP_EX_TYPE_DIRECT => 'AMQP_EX_TYPE_DIRECT',
-        AMQP_EX_TYPE_FANOUT => 'AMQP_EX_TYPE_FANOUT',
-        AMQP_EX_TYPE_TOPIC => 'AMQP_EX_TYPE_TOPIC',
-        AMQP_EX_TYPE_HEADERS => 'AMQP_EX_TYPE_HEADERS',
+        \AMQP_EX_TYPE_DIRECT => 'AMQP_EX_TYPE_DIRECT',
+        \AMQP_EX_TYPE_FANOUT => 'AMQP_EX_TYPE_FANOUT',
+        \AMQP_EX_TYPE_TOPIC => 'AMQP_EX_TYPE_TOPIC',
+        \AMQP_EX_TYPE_HEADERS => 'AMQP_EX_TYPE_HEADERS',
     ];
 
     public static function castConnection(\AMQPConnection $c, array $a, Stub $stub, $isNested)
diff --git a/vendor/symfony/var-dumper/Caster/Caster.php b/vendor/symfony/var-dumper/Caster/Caster.php
index 93d0ce2b41..a6ebc25bdd 100644
--- a/vendor/symfony/var-dumper/Caster/Caster.php
+++ b/vendor/symfony/var-dumper/Caster/Caster.php
@@ -46,41 +46,57 @@ class Caster
      *
      * @return array The array-cast of the object, with prefixed dynamic properties
      */
-    public static function castObject($obj, $class, $hasDebugInfo = false)
+    public static function castObject($obj, $class, $hasDebugInfo = false, $debugClass = null)
     {
         if ($class instanceof \ReflectionClass) {
-            @trigger_error(sprintf('Passing a ReflectionClass to "%s()" is deprecated since Symfony 3.3 and will be unsupported in 4.0. Pass the class name as string instead.', __METHOD__), E_USER_DEPRECATED);
+            @trigger_error(sprintf('Passing a ReflectionClass to "%s()" is deprecated since Symfony 3.3 and will be unsupported in 4.0. Pass the class name as string instead.', __METHOD__), \E_USER_DEPRECATED);
             $hasDebugInfo = $class->hasMethod('__debugInfo');
             $class = $class->name;
         }
+
         if ($hasDebugInfo) {
-            $a = $obj->__debugInfo();
-        } elseif ($obj instanceof \Closure) {
-            $a = [];
-        } else {
-            $a = (array) $obj;
+            try {
+                $debugInfo = $obj->__debugInfo();
+            } catch (\Exception $e) {
+                // ignore failing __debugInfo()
+                $hasDebugInfo = false;
+            }
         }
+
+        $a = $obj instanceof \Closure ? [] : (array) $obj;
+
         if ($obj instanceof \__PHP_Incomplete_Class) {
             return $a;
         }
 
         if ($a) {
             static $publicProperties = [];
+            if (null === $debugClass) {
+                if (\PHP_VERSION_ID >= 80000) {
+                    $debugClass = get_debug_type($obj);
+                } else {
+                    $debugClass = $class;
+
+                    if (isset($debugClass[15]) && "\0" === $debugClass[15]) {
+                        $debugClass = (get_parent_class($debugClass) ?: key(class_implements($debugClass)) ?: 'class').'@anonymous';
+                    }
+                }
+            }
 
             $i = 0;
             $prefixedKeys = [];
             foreach ($a as $k => $v) {
                 if (isset($k[0]) ? "\0" !== $k[0] : \PHP_VERSION_ID >= 70200) {
                     if (!isset($publicProperties[$class])) {
-                        foreach (get_class_vars($class) as $prop => $v) {
-                            $publicProperties[$class][$prop] = true;
+                        foreach ((new \ReflectionClass($class))->getProperties(\ReflectionProperty::IS_PUBLIC) as $prop) {
+                            $publicProperties[$class][$prop->name] = true;
                         }
                     }
                     if (!isset($publicProperties[$class][$k])) {
                         $prefixedKeys[$i] = self::PREFIX_DYNAMIC.$k;
                     }
-                } elseif (isset($k[16]) && "\0" === $k[16] && 0 === strpos($k, "\0class@anonymous\0")) {
-                    $prefixedKeys[$i] = "\0".get_parent_class($class).'@anonymous'.strrchr($k, "\0");
+                } elseif ($debugClass !== $class && 1 === strpos($k, $class)) {
+                    $prefixedKeys[$i] = "\0".$debugClass.strrchr($k, "\0");
                 }
                 ++$i;
             }
@@ -93,6 +109,20 @@ public static function castObject($obj, $class, $hasDebugInfo = false)
             }
         }
 
+        if ($hasDebugInfo && \is_array($debugInfo)) {
+            foreach ($debugInfo as $k => $v) {
+                if (!isset($k[0]) || "\0" !== $k[0]) {
+                    if (\array_key_exists(self::PREFIX_DYNAMIC.$k, $a)) {
+                        continue;
+                    }
+                    $k = self::PREFIX_VIRTUAL.$k;
+                }
+
+                unset($a[$k]);
+                $a[$k] = $v;
+            }
+        }
+
         return $a;
     }
 
diff --git a/vendor/symfony/var-dumper/Caster/DOMCaster.php b/vendor/symfony/var-dumper/Caster/DOMCaster.php
index 65151b4f4f..fef3d432a7 100644
--- a/vendor/symfony/var-dumper/Caster/DOMCaster.php
+++ b/vendor/symfony/var-dumper/Caster/DOMCaster.php
@@ -21,44 +21,44 @@
 class DOMCaster
 {
     private static $errorCodes = [
-        DOM_PHP_ERR => 'DOM_PHP_ERR',
-        DOM_INDEX_SIZE_ERR => 'DOM_INDEX_SIZE_ERR',
-        DOMSTRING_SIZE_ERR => 'DOMSTRING_SIZE_ERR',
-        DOM_HIERARCHY_REQUEST_ERR => 'DOM_HIERARCHY_REQUEST_ERR',
-        DOM_WRONG_DOCUMENT_ERR => 'DOM_WRONG_DOCUMENT_ERR',
-        DOM_INVALID_CHARACTER_ERR => 'DOM_INVALID_CHARACTER_ERR',
-        DOM_NO_DATA_ALLOWED_ERR => 'DOM_NO_DATA_ALLOWED_ERR',
-        DOM_NO_MODIFICATION_ALLOWED_ERR => 'DOM_NO_MODIFICATION_ALLOWED_ERR',
-        DOM_NOT_FOUND_ERR => 'DOM_NOT_FOUND_ERR',
-        DOM_NOT_SUPPORTED_ERR => 'DOM_NOT_SUPPORTED_ERR',
-        DOM_INUSE_ATTRIBUTE_ERR => 'DOM_INUSE_ATTRIBUTE_ERR',
-        DOM_INVALID_STATE_ERR => 'DOM_INVALID_STATE_ERR',
-        DOM_SYNTAX_ERR => 'DOM_SYNTAX_ERR',
-        DOM_INVALID_MODIFICATION_ERR => 'DOM_INVALID_MODIFICATION_ERR',
-        DOM_NAMESPACE_ERR => 'DOM_NAMESPACE_ERR',
-        DOM_INVALID_ACCESS_ERR => 'DOM_INVALID_ACCESS_ERR',
-        DOM_VALIDATION_ERR => 'DOM_VALIDATION_ERR',
+        \DOM_PHP_ERR => 'DOM_PHP_ERR',
+        \DOM_INDEX_SIZE_ERR => 'DOM_INDEX_SIZE_ERR',
+        \DOMSTRING_SIZE_ERR => 'DOMSTRING_SIZE_ERR',
+        \DOM_HIERARCHY_REQUEST_ERR => 'DOM_HIERARCHY_REQUEST_ERR',
+        \DOM_WRONG_DOCUMENT_ERR => 'DOM_WRONG_DOCUMENT_ERR',
+        \DOM_INVALID_CHARACTER_ERR => 'DOM_INVALID_CHARACTER_ERR',
+        \DOM_NO_DATA_ALLOWED_ERR => 'DOM_NO_DATA_ALLOWED_ERR',
+        \DOM_NO_MODIFICATION_ALLOWED_ERR => 'DOM_NO_MODIFICATION_ALLOWED_ERR',
+        \DOM_NOT_FOUND_ERR => 'DOM_NOT_FOUND_ERR',
+        \DOM_NOT_SUPPORTED_ERR => 'DOM_NOT_SUPPORTED_ERR',
+        \DOM_INUSE_ATTRIBUTE_ERR => 'DOM_INUSE_ATTRIBUTE_ERR',
+        \DOM_INVALID_STATE_ERR => 'DOM_INVALID_STATE_ERR',
+        \DOM_SYNTAX_ERR => 'DOM_SYNTAX_ERR',
+        \DOM_INVALID_MODIFICATION_ERR => 'DOM_INVALID_MODIFICATION_ERR',
+        \DOM_NAMESPACE_ERR => 'DOM_NAMESPACE_ERR',
+        \DOM_INVALID_ACCESS_ERR => 'DOM_INVALID_ACCESS_ERR',
+        \DOM_VALIDATION_ERR => 'DOM_VALIDATION_ERR',
     ];
 
     private static $nodeTypes = [
-        XML_ELEMENT_NODE => 'XML_ELEMENT_NODE',
-        XML_ATTRIBUTE_NODE => 'XML_ATTRIBUTE_NODE',
-        XML_TEXT_NODE => 'XML_TEXT_NODE',
-        XML_CDATA_SECTION_NODE => 'XML_CDATA_SECTION_NODE',
-        XML_ENTITY_REF_NODE => 'XML_ENTITY_REF_NODE',
-        XML_ENTITY_NODE => 'XML_ENTITY_NODE',
-        XML_PI_NODE => 'XML_PI_NODE',
-        XML_COMMENT_NODE => 'XML_COMMENT_NODE',
-        XML_DOCUMENT_NODE => 'XML_DOCUMENT_NODE',
-        XML_DOCUMENT_TYPE_NODE => 'XML_DOCUMENT_TYPE_NODE',
-        XML_DOCUMENT_FRAG_NODE => 'XML_DOCUMENT_FRAG_NODE',
-        XML_NOTATION_NODE => 'XML_NOTATION_NODE',
-        XML_HTML_DOCUMENT_NODE => 'XML_HTML_DOCUMENT_NODE',
-        XML_DTD_NODE => 'XML_DTD_NODE',
-        XML_ELEMENT_DECL_NODE => 'XML_ELEMENT_DECL_NODE',
-        XML_ATTRIBUTE_DECL_NODE => 'XML_ATTRIBUTE_DECL_NODE',
-        XML_ENTITY_DECL_NODE => 'XML_ENTITY_DECL_NODE',
-        XML_NAMESPACE_DECL_NODE => 'XML_NAMESPACE_DECL_NODE',
+        \XML_ELEMENT_NODE => 'XML_ELEMENT_NODE',
+        \XML_ATTRIBUTE_NODE => 'XML_ATTRIBUTE_NODE',
+        \XML_TEXT_NODE => 'XML_TEXT_NODE',
+        \XML_CDATA_SECTION_NODE => 'XML_CDATA_SECTION_NODE',
+        \XML_ENTITY_REF_NODE => 'XML_ENTITY_REF_NODE',
+        \XML_ENTITY_NODE => 'XML_ENTITY_NODE',
+        \XML_PI_NODE => 'XML_PI_NODE',
+        \XML_COMMENT_NODE => 'XML_COMMENT_NODE',
+        \XML_DOCUMENT_NODE => 'XML_DOCUMENT_NODE',
+        \XML_DOCUMENT_TYPE_NODE => 'XML_DOCUMENT_TYPE_NODE',
+        \XML_DOCUMENT_FRAG_NODE => 'XML_DOCUMENT_FRAG_NODE',
+        \XML_NOTATION_NODE => 'XML_NOTATION_NODE',
+        \XML_HTML_DOCUMENT_NODE => 'XML_HTML_DOCUMENT_NODE',
+        \XML_DTD_NODE => 'XML_DTD_NODE',
+        \XML_ELEMENT_DECL_NODE => 'XML_ELEMENT_DECL_NODE',
+        \XML_ATTRIBUTE_DECL_NODE => 'XML_ATTRIBUTE_DECL_NODE',
+        \XML_ENTITY_DECL_NODE => 'XML_ENTITY_DECL_NODE',
+        \XML_NAMESPACE_DECL_NODE => 'XML_NAMESPACE_DECL_NODE',
     ];
 
     public static function castException(\DOMException $e, array $a, Stub $stub, $isNested)
diff --git a/vendor/symfony/var-dumper/Caster/DateCaster.php b/vendor/symfony/var-dumper/Caster/DateCaster.php
index 3b030b734a..70f229a0d8 100644
--- a/vendor/symfony/var-dumper/Caster/DateCaster.php
+++ b/vendor/symfony/var-dumper/Caster/DateCaster.php
@@ -31,7 +31,11 @@ public static function castDateTime(\DateTimeInterface $d, array $a, Stub $stub,
             .($location ? ($d->format('I') ? "\nDST On" : "\nDST Off") : '')
         ;
 
-        $a = [];
+        unset(
+            $a[Caster::PREFIX_DYNAMIC.'date'],
+            $a[Caster::PREFIX_DYNAMIC.'timezone'],
+            $a[Caster::PREFIX_DYNAMIC.'timezone_type']
+        );
         $a[$prefix.'date'] = new ConstStub(self::formatDateTime($d, $location ? ' e (P)' : ' P'), $title);
 
         $stub->class .= $d->format(' @U');
@@ -85,17 +89,17 @@ public static function castTimeZone(\DateTimeZone $timeZone, array $a, Stub $stu
 
     public static function castPeriod(\DatePeriod $p, array $a, Stub $stub, $isNested, $filter)
     {
-        if (\defined('HHVM_VERSION_ID') || \PHP_VERSION_ID < 50620 || (\PHP_VERSION_ID >= 70000 && \PHP_VERSION_ID < 70005)) { // see https://bugs.php.net/bug.php?id=71635
+        if (\defined('HHVM_VERSION_ID') || \PHP_VERSION_ID < 50620 || (\PHP_VERSION_ID >= 70000 && \PHP_VERSION_ID < 70005)) { // see https://bugs.php.net/71635
             return $a;
         }
 
         $dates = [];
-        if (\PHP_VERSION_ID >= 70107) { // see https://bugs.php.net/bug.php?id=74639
+        if (\PHP_VERSION_ID >= 70107) { // see https://bugs.php.net/74639
             foreach (clone $p as $i => $d) {
                 if (3 === $i) {
                     $now = new \DateTimeImmutable();
                     $dates[] = sprintf('%s more', ($end = $p->getEndDate())
-                        ? ceil(($end->format('U.u') - $d->format('U.u')) / ($now->add($p->getDateInterval())->format('U.u') - $now->format('U.u')))
+                        ? ceil(($end->format('U.u') - $d->format('U.u')) / ((int) $now->add($p->getDateInterval())->format('U.u') - (int) $now->format('U.u')))
                         : $p->recurrences - $i
                     );
                     break;
diff --git a/vendor/symfony/var-dumper/Caster/ExceptionCaster.php b/vendor/symfony/var-dumper/Caster/ExceptionCaster.php
index e0acbe39df..62b57402f8 100644
--- a/vendor/symfony/var-dumper/Caster/ExceptionCaster.php
+++ b/vendor/symfony/var-dumper/Caster/ExceptionCaster.php
@@ -25,21 +25,21 @@ class ExceptionCaster
     public static $srcContext = 1;
     public static $traceArgs = true;
     public static $errorTypes = [
-        E_DEPRECATED => 'E_DEPRECATED',
-        E_USER_DEPRECATED => 'E_USER_DEPRECATED',
-        E_RECOVERABLE_ERROR => 'E_RECOVERABLE_ERROR',
-        E_ERROR => 'E_ERROR',
-        E_WARNING => 'E_WARNING',
-        E_PARSE => 'E_PARSE',
-        E_NOTICE => 'E_NOTICE',
-        E_CORE_ERROR => 'E_CORE_ERROR',
-        E_CORE_WARNING => 'E_CORE_WARNING',
-        E_COMPILE_ERROR => 'E_COMPILE_ERROR',
-        E_COMPILE_WARNING => 'E_COMPILE_WARNING',
-        E_USER_ERROR => 'E_USER_ERROR',
-        E_USER_WARNING => 'E_USER_WARNING',
-        E_USER_NOTICE => 'E_USER_NOTICE',
-        E_STRICT => 'E_STRICT',
+        \E_DEPRECATED => 'E_DEPRECATED',
+        \E_USER_DEPRECATED => 'E_USER_DEPRECATED',
+        \E_RECOVERABLE_ERROR => 'E_RECOVERABLE_ERROR',
+        \E_ERROR => 'E_ERROR',
+        \E_WARNING => 'E_WARNING',
+        \E_PARSE => 'E_PARSE',
+        \E_NOTICE => 'E_NOTICE',
+        \E_CORE_ERROR => 'E_CORE_ERROR',
+        \E_CORE_WARNING => 'E_CORE_WARNING',
+        \E_COMPILE_ERROR => 'E_COMPILE_ERROR',
+        \E_COMPILE_WARNING => 'E_COMPILE_WARNING',
+        \E_USER_ERROR => 'E_USER_ERROR',
+        \E_USER_WARNING => 'E_USER_WARNING',
+        \E_USER_NOTICE => 'E_USER_NOTICE',
+        \E_STRICT => 'E_STRICT',
     ];
 
     private static $framesCache = [];
diff --git a/vendor/symfony/var-dumper/Caster/MongoCaster.php b/vendor/symfony/var-dumper/Caster/MongoCaster.php
index 3b8fb338e5..98f1b8e25d 100644
--- a/vendor/symfony/var-dumper/Caster/MongoCaster.php
+++ b/vendor/symfony/var-dumper/Caster/MongoCaster.php
@@ -13,7 +13,7 @@
 
 use Symfony\Component\VarDumper\Cloner\Stub;
 
-@trigger_error('The '.__NAMESPACE__.'\MongoCaster class is deprecated since Symfony 3.4 and will be removed in 4.0.', E_USER_DEPRECATED);
+@trigger_error('The '.__NAMESPACE__.'\MongoCaster class is deprecated since Symfony 3.4 and will be removed in 4.0.', \E_USER_DEPRECATED);
 
 /**
  * Casts classes from the MongoDb extension to array representation.
diff --git a/vendor/symfony/var-dumper/Caster/PgSqlCaster.php b/vendor/symfony/var-dumper/Caster/PgSqlCaster.php
index cd6bf5b5fe..fe1f0cc8d9 100644
--- a/vendor/symfony/var-dumper/Caster/PgSqlCaster.php
+++ b/vendor/symfony/var-dumper/Caster/PgSqlCaster.php
@@ -34,37 +34,37 @@ class PgSqlCaster
     ];
 
     private static $transactionStatus = [
-        PGSQL_TRANSACTION_IDLE => 'PGSQL_TRANSACTION_IDLE',
-        PGSQL_TRANSACTION_ACTIVE => 'PGSQL_TRANSACTION_ACTIVE',
-        PGSQL_TRANSACTION_INTRANS => 'PGSQL_TRANSACTION_INTRANS',
-        PGSQL_TRANSACTION_INERROR => 'PGSQL_TRANSACTION_INERROR',
-        PGSQL_TRANSACTION_UNKNOWN => 'PGSQL_TRANSACTION_UNKNOWN',
+        \PGSQL_TRANSACTION_IDLE => 'PGSQL_TRANSACTION_IDLE',
+        \PGSQL_TRANSACTION_ACTIVE => 'PGSQL_TRANSACTION_ACTIVE',
+        \PGSQL_TRANSACTION_INTRANS => 'PGSQL_TRANSACTION_INTRANS',
+        \PGSQL_TRANSACTION_INERROR => 'PGSQL_TRANSACTION_INERROR',
+        \PGSQL_TRANSACTION_UNKNOWN => 'PGSQL_TRANSACTION_UNKNOWN',
     ];
 
     private static $resultStatus = [
-        PGSQL_EMPTY_QUERY => 'PGSQL_EMPTY_QUERY',
-        PGSQL_COMMAND_OK => 'PGSQL_COMMAND_OK',
-        PGSQL_TUPLES_OK => 'PGSQL_TUPLES_OK',
-        PGSQL_COPY_OUT => 'PGSQL_COPY_OUT',
-        PGSQL_COPY_IN => 'PGSQL_COPY_IN',
-        PGSQL_BAD_RESPONSE => 'PGSQL_BAD_RESPONSE',
-        PGSQL_NONFATAL_ERROR => 'PGSQL_NONFATAL_ERROR',
-        PGSQL_FATAL_ERROR => 'PGSQL_FATAL_ERROR',
+        \PGSQL_EMPTY_QUERY => 'PGSQL_EMPTY_QUERY',
+        \PGSQL_COMMAND_OK => 'PGSQL_COMMAND_OK',
+        \PGSQL_TUPLES_OK => 'PGSQL_TUPLES_OK',
+        \PGSQL_COPY_OUT => 'PGSQL_COPY_OUT',
+        \PGSQL_COPY_IN => 'PGSQL_COPY_IN',
+        \PGSQL_BAD_RESPONSE => 'PGSQL_BAD_RESPONSE',
+        \PGSQL_NONFATAL_ERROR => 'PGSQL_NONFATAL_ERROR',
+        \PGSQL_FATAL_ERROR => 'PGSQL_FATAL_ERROR',
     ];
 
     private static $diagCodes = [
-        'severity' => PGSQL_DIAG_SEVERITY,
-        'sqlstate' => PGSQL_DIAG_SQLSTATE,
-        'message' => PGSQL_DIAG_MESSAGE_PRIMARY,
-        'detail' => PGSQL_DIAG_MESSAGE_DETAIL,
-        'hint' => PGSQL_DIAG_MESSAGE_HINT,
-        'statement position' => PGSQL_DIAG_STATEMENT_POSITION,
-        'internal position' => PGSQL_DIAG_INTERNAL_POSITION,
-        'internal query' => PGSQL_DIAG_INTERNAL_QUERY,
-        'context' => PGSQL_DIAG_CONTEXT,
-        'file' => PGSQL_DIAG_SOURCE_FILE,
-        'line' => PGSQL_DIAG_SOURCE_LINE,
-        'function' => PGSQL_DIAG_SOURCE_FUNCTION,
+        'severity' => \PGSQL_DIAG_SEVERITY,
+        'sqlstate' => \PGSQL_DIAG_SQLSTATE,
+        'message' => \PGSQL_DIAG_MESSAGE_PRIMARY,
+        'detail' => \PGSQL_DIAG_MESSAGE_DETAIL,
+        'hint' => \PGSQL_DIAG_MESSAGE_HINT,
+        'statement position' => \PGSQL_DIAG_STATEMENT_POSITION,
+        'internal position' => \PGSQL_DIAG_INTERNAL_POSITION,
+        'internal query' => \PGSQL_DIAG_INTERNAL_QUERY,
+        'context' => \PGSQL_DIAG_CONTEXT,
+        'file' => \PGSQL_DIAG_SOURCE_FILE,
+        'line' => \PGSQL_DIAG_SOURCE_LINE,
+        'function' => \PGSQL_DIAG_SOURCE_FUNCTION,
     ];
 
     public static function castLargeObject($lo, array $a, Stub $stub, $isNested)
@@ -77,7 +77,7 @@ public static function castLargeObject($lo, array $a, Stub $stub, $isNested)
     public static function castLink($link, array $a, Stub $stub, $isNested)
     {
         $a['status'] = pg_connection_status($link);
-        $a['status'] = new ConstStub(PGSQL_CONNECTION_OK === $a['status'] ? 'PGSQL_CONNECTION_OK' : 'PGSQL_CONNECTION_BAD', $a['status']);
+        $a['status'] = new ConstStub(\PGSQL_CONNECTION_OK === $a['status'] ? 'PGSQL_CONNECTION_OK' : 'PGSQL_CONNECTION_BAD', $a['status']);
         $a['busy'] = pg_connection_busy($link);
 
         $a['transaction'] = pg_transaction_status($link);
@@ -113,7 +113,7 @@ public static function castResult($result, array $a, Stub $stub, $isNested)
         if (isset(self::$resultStatus[$a['status']])) {
             $a['status'] = new ConstStub(self::$resultStatus[$a['status']], $a['status']);
         }
-        $a['command-completion tag'] = pg_result_status($result, PGSQL_STATUS_STRING);
+        $a['command-completion tag'] = pg_result_status($result, \PGSQL_STATUS_STRING);
 
         if (-1 === $a['num rows']) {
             foreach (self::$diagCodes as $k => $v) {
diff --git a/vendor/symfony/var-dumper/Caster/ReflectionCaster.php b/vendor/symfony/var-dumper/Caster/ReflectionCaster.php
index 1543bbfdfa..f19886172a 100644
--- a/vendor/symfony/var-dumper/Caster/ReflectionCaster.php
+++ b/vendor/symfony/var-dumper/Caster/ReflectionCaster.php
@@ -91,7 +91,7 @@ public static function castType(\ReflectionType $c, array $a, Stub $stub, $isNes
         $prefix = Caster::PREFIX_VIRTUAL;
 
         $a += [
-            $prefix.'name' => $c instanceof \ReflectionNamedType ? $c->getName() : $c->__toString(),
+            $prefix.'name' => $c instanceof \ReflectionNamedType ? $c->getName() : (string) $c,
             $prefix.'allowsNull' => $c->allowsNull(),
             $prefix.'isBuiltin' => $c->isBuiltin(),
         ];
@@ -114,7 +114,7 @@ public static function castReflectionGenerator(\ReflectionGenerator $c, array $a
             'file' => $c->getExecutingFile(),
             'line' => $c->getExecutingLine(),
         ];
-        if ($trace = $c->getTrace(DEBUG_BACKTRACE_IGNORE_ARGS)) {
+        if ($trace = $c->getTrace(\DEBUG_BACKTRACE_IGNORE_ARGS)) {
             $function = new \ReflectionGenerator($c->getExecutingGenerator());
             array_unshift($trace, [
                 'function' => 'yield',
@@ -178,7 +178,7 @@ public static function castFunctionAbstract(\ReflectionFunctionAbstract $c, arra
 
         if (isset($a[$prefix.'returnType'])) {
             $v = $a[$prefix.'returnType'];
-            $v = $v instanceof \ReflectionNamedType ? $v->getName() : $v->__toString();
+            $v = $v instanceof \ReflectionNamedType ? $v->getName() : (string) $v;
             $a[$prefix.'returnType'] = new ClassStub($a[$prefix.'returnType']->allowsNull() ? '?'.$v : $v, [class_exists($v, false) || interface_exists($v, false) || trait_exists($v, false) ? $v : '', '']);
         }
         if (isset($a[$prefix.'class'])) {
@@ -247,7 +247,7 @@ public static function castParameter(\ReflectionParameter $c, array $a, Stub $st
 
         if (method_exists($c, 'getType')) {
             if ($v = $c->getType()) {
-                $a[$prefix.'typeHint'] = $v instanceof \ReflectionNamedType ? $v->getName() : $v->__toString();
+                $a[$prefix.'typeHint'] = $v instanceof \ReflectionNamedType ? $v->getName() : (string) $v;
             }
         } elseif (preg_match('/^(?:[^ ]++ ){4}([a-zA-Z_\x7F-\xFF][^ ]++)/', $c, $v)) {
             $a[$prefix.'typeHint'] = $v[1];
@@ -333,6 +333,10 @@ private static function addExtra(&$a, \Reflector $c)
     private static function addMap(&$a, \Reflector $c, $map, $prefix = Caster::PREFIX_VIRTUAL)
     {
         foreach ($map as $k => $m) {
+            if (\PHP_VERSION_ID >= 80000 && 'isDisabled' === $k) {
+                continue;
+            }
+
             if (method_exists($c, $m) && false !== ($m = $c->$m()) && null !== $m) {
                 $a[$prefix.$k] = $m instanceof \Reflector ? $m->name : $m;
             }
diff --git a/vendor/symfony/var-dumper/Caster/ResourceCaster.php b/vendor/symfony/var-dumper/Caster/ResourceCaster.php
index 3cdb27c308..eb11aee1f0 100644
--- a/vendor/symfony/var-dumper/Caster/ResourceCaster.php
+++ b/vendor/symfony/var-dumper/Caster/ResourceCaster.php
@@ -20,6 +20,11 @@
  */
 class ResourceCaster
 {
+    /**
+     * @param \CurlHandle|resource $h
+     *
+     * @return array
+     */
     public static function castCurl($h, array $a, Stub $stub, $isNested)
     {
         return curl_getinfo($h);
diff --git a/vendor/symfony/var-dumper/Caster/SplCaster.php b/vendor/symfony/var-dumper/Caster/SplCaster.php
index a223adb7f2..360a1a416e 100644
--- a/vendor/symfony/var-dumper/Caster/SplCaster.php
+++ b/vendor/symfony/var-dumper/Caster/SplCaster.php
@@ -89,6 +89,36 @@ public static function castFileInfo(\SplFileInfo $c, array $a, Stub $stub, $isNe
         ];
 
         $prefix = Caster::PREFIX_VIRTUAL;
+        unset($a["\0SplFileInfo\0fileName"]);
+        unset($a["\0SplFileInfo\0pathName"]);
+
+        if (\PHP_VERSION_ID < 80000) {
+            if (false === $c->getPathname()) {
+                $a[$prefix.'⚠'] = 'The parent constructor was not called: the object is in an invalid state';
+
+                return $a;
+            }
+        } else {
+            try {
+                $c->isReadable();
+            } catch (\RuntimeException $e) {
+                if ('Object not initialized' !== $e->getMessage()) {
+                    throw $e;
+                }
+
+                $a[$prefix.'⚠'] = 'The parent constructor was not called: the object is in an invalid state';
+
+                return $a;
+            } catch (\Error $e) {
+                if ('Object not initialized' !== $e->getMessage()) {
+                    throw $e;
+                }
+
+                $a[$prefix.'⚠'] = 'The parent constructor was not called: the object is in an invalid state';
+
+                return $a;
+            }
+        }
 
         foreach ($map as $key => $accessor) {
             try {
@@ -152,19 +182,11 @@ public static function castFileObject(\SplFileObject $c, array $a, Stub $stub, $
         return $a;
     }
 
-    public static function castFixedArray(\SplFixedArray $c, array $a, Stub $stub, $isNested)
-    {
-        $a += [
-            Caster::PREFIX_VIRTUAL.'storage' => $c->toArray(),
-        ];
-
-        return $a;
-    }
-
     public static function castObjectStorage(\SplObjectStorage $c, array $a, Stub $stub, $isNested)
     {
         $storage = [];
         unset($a[Caster::PREFIX_DYNAMIC."\0gcdata"]); // Don't hit https://bugs.php.net/65967
+        unset($a["\0SplObjectStorage\0storage"]);
 
         $clone = clone $c;
         foreach ($clone as $obj) {
@@ -191,14 +213,16 @@ public static function castOuterIterator(\OuterIterator $c, array $a, Stub $stub
     private static function castSplArray($c, array $a, Stub $stub, $isNested)
     {
         $prefix = Caster::PREFIX_VIRTUAL;
-        $class = $stub->class;
         $flags = $c->getFlags();
 
         if (!($flags & \ArrayObject::STD_PROP_LIST)) {
             $c->setFlags(\ArrayObject::STD_PROP_LIST);
-            $a = Caster::castObject($c, $class);
+            $a = Caster::castObject($c, \get_class($c), method_exists($c, '__debugInfo'), $stub->class);
             $c->setFlags($flags);
         }
+        if (\PHP_VERSION_ID < 70400) {
+            $a[$prefix.'storage'] = $c->getArrayCopy();
+        }
         $a += [
             $prefix.'flag::STD_PROP_LIST' => (bool) ($flags & \ArrayObject::STD_PROP_LIST),
             $prefix.'flag::ARRAY_AS_PROPS' => (bool) ($flags & \ArrayObject::ARRAY_AS_PROPS),
@@ -206,7 +230,6 @@ private static function castSplArray($c, array $a, Stub $stub, $isNested)
         if ($c instanceof \ArrayObject) {
             $a[$prefix.'iteratorClass'] = new ClassStub($c->getIteratorClass());
         }
-        $a[$prefix.'storage'] = $c->getArrayCopy();
 
         return $a;
     }
diff --git a/vendor/symfony/var-dumper/Caster/XmlResourceCaster.php b/vendor/symfony/var-dumper/Caster/XmlResourceCaster.php
index 117138c784..99c1486483 100644
--- a/vendor/symfony/var-dumper/Caster/XmlResourceCaster.php
+++ b/vendor/symfony/var-dumper/Caster/XmlResourceCaster.php
@@ -21,28 +21,28 @@
 class XmlResourceCaster
 {
     private static $xmlErrors = [
-        XML_ERROR_NONE => 'XML_ERROR_NONE',
-        XML_ERROR_NO_MEMORY => 'XML_ERROR_NO_MEMORY',
-        XML_ERROR_SYNTAX => 'XML_ERROR_SYNTAX',
-        XML_ERROR_NO_ELEMENTS => 'XML_ERROR_NO_ELEMENTS',
-        XML_ERROR_INVALID_TOKEN => 'XML_ERROR_INVALID_TOKEN',
-        XML_ERROR_UNCLOSED_TOKEN => 'XML_ERROR_UNCLOSED_TOKEN',
-        XML_ERROR_PARTIAL_CHAR => 'XML_ERROR_PARTIAL_CHAR',
-        XML_ERROR_TAG_MISMATCH => 'XML_ERROR_TAG_MISMATCH',
-        XML_ERROR_DUPLICATE_ATTRIBUTE => 'XML_ERROR_DUPLICATE_ATTRIBUTE',
-        XML_ERROR_JUNK_AFTER_DOC_ELEMENT => 'XML_ERROR_JUNK_AFTER_DOC_ELEMENT',
-        XML_ERROR_PARAM_ENTITY_REF => 'XML_ERROR_PARAM_ENTITY_REF',
-        XML_ERROR_UNDEFINED_ENTITY => 'XML_ERROR_UNDEFINED_ENTITY',
-        XML_ERROR_RECURSIVE_ENTITY_REF => 'XML_ERROR_RECURSIVE_ENTITY_REF',
-        XML_ERROR_ASYNC_ENTITY => 'XML_ERROR_ASYNC_ENTITY',
-        XML_ERROR_BAD_CHAR_REF => 'XML_ERROR_BAD_CHAR_REF',
-        XML_ERROR_BINARY_ENTITY_REF => 'XML_ERROR_BINARY_ENTITY_REF',
-        XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF => 'XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF',
-        XML_ERROR_MISPLACED_XML_PI => 'XML_ERROR_MISPLACED_XML_PI',
-        XML_ERROR_UNKNOWN_ENCODING => 'XML_ERROR_UNKNOWN_ENCODING',
-        XML_ERROR_INCORRECT_ENCODING => 'XML_ERROR_INCORRECT_ENCODING',
-        XML_ERROR_UNCLOSED_CDATA_SECTION => 'XML_ERROR_UNCLOSED_CDATA_SECTION',
-        XML_ERROR_EXTERNAL_ENTITY_HANDLING => 'XML_ERROR_EXTERNAL_ENTITY_HANDLING',
+        \XML_ERROR_NONE => 'XML_ERROR_NONE',
+        \XML_ERROR_NO_MEMORY => 'XML_ERROR_NO_MEMORY',
+        \XML_ERROR_SYNTAX => 'XML_ERROR_SYNTAX',
+        \XML_ERROR_NO_ELEMENTS => 'XML_ERROR_NO_ELEMENTS',
+        \XML_ERROR_INVALID_TOKEN => 'XML_ERROR_INVALID_TOKEN',
+        \XML_ERROR_UNCLOSED_TOKEN => 'XML_ERROR_UNCLOSED_TOKEN',
+        \XML_ERROR_PARTIAL_CHAR => 'XML_ERROR_PARTIAL_CHAR',
+        \XML_ERROR_TAG_MISMATCH => 'XML_ERROR_TAG_MISMATCH',
+        \XML_ERROR_DUPLICATE_ATTRIBUTE => 'XML_ERROR_DUPLICATE_ATTRIBUTE',
+        \XML_ERROR_JUNK_AFTER_DOC_ELEMENT => 'XML_ERROR_JUNK_AFTER_DOC_ELEMENT',
+        \XML_ERROR_PARAM_ENTITY_REF => 'XML_ERROR_PARAM_ENTITY_REF',
+        \XML_ERROR_UNDEFINED_ENTITY => 'XML_ERROR_UNDEFINED_ENTITY',
+        \XML_ERROR_RECURSIVE_ENTITY_REF => 'XML_ERROR_RECURSIVE_ENTITY_REF',
+        \XML_ERROR_ASYNC_ENTITY => 'XML_ERROR_ASYNC_ENTITY',
+        \XML_ERROR_BAD_CHAR_REF => 'XML_ERROR_BAD_CHAR_REF',
+        \XML_ERROR_BINARY_ENTITY_REF => 'XML_ERROR_BINARY_ENTITY_REF',
+        \XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF => 'XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF',
+        \XML_ERROR_MISPLACED_XML_PI => 'XML_ERROR_MISPLACED_XML_PI',
+        \XML_ERROR_UNKNOWN_ENCODING => 'XML_ERROR_UNKNOWN_ENCODING',
+        \XML_ERROR_INCORRECT_ENCODING => 'XML_ERROR_INCORRECT_ENCODING',
+        \XML_ERROR_UNCLOSED_CDATA_SECTION => 'XML_ERROR_UNCLOSED_CDATA_SECTION',
+        \XML_ERROR_EXTERNAL_ENTITY_HANDLING => 'XML_ERROR_EXTERNAL_ENTITY_HANDLING',
     ];
 
     public static function castXml($h, array $a, Stub $stub, $isNested)
diff --git a/vendor/symfony/var-dumper/Cloner/AbstractCloner.php b/vendor/symfony/var-dumper/Cloner/AbstractCloner.php
index de09f1803d..76b55b478b 100644
--- a/vendor/symfony/var-dumper/Cloner/AbstractCloner.php
+++ b/vendor/symfony/var-dumper/Cloner/AbstractCloner.php
@@ -45,6 +45,7 @@ abstract class AbstractCloner implements ClonerInterface
         'Doctrine\Common\Proxy\Proxy' => ['Symfony\Component\VarDumper\Caster\DoctrineCaster', 'castCommonProxy'],
         'Doctrine\ORM\Proxy\Proxy' => ['Symfony\Component\VarDumper\Caster\DoctrineCaster', 'castOrmProxy'],
         'Doctrine\ORM\PersistentCollection' => ['Symfony\Component\VarDumper\Caster\DoctrineCaster', 'castPersistentCollection'],
+        'Doctrine\Persistence\ObjectManager' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'cutInternals'],
 
         'DOMException' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castException'],
         'DOMStringList' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castLength'],
@@ -82,6 +83,8 @@ abstract class AbstractCloner implements ClonerInterface
         'Symfony\Component\Debug\Exception\SilencedErrorContext' => ['Symfony\Component\VarDumper\Caster\ExceptionCaster', 'castSilencedErrorContext'],
 
         'PHPUnit_Framework_MockObject_MockObject' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'cutInternals'],
+        'PHPUnit\Framework\MockObject\MockObject' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'cutInternals'],
+        'PHPUnit\Framework\MockObject\Stub' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'cutInternals'],
         'Prophecy\Prophecy\ProphecySubjectInterface' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'cutInternals'],
         'Mockery\MockInterface' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'cutInternals'],
 
@@ -99,7 +102,6 @@ abstract class AbstractCloner implements ClonerInterface
         'SplDoublyLinkedList' => ['Symfony\Component\VarDumper\Caster\SplCaster', 'castDoublyLinkedList'],
         'SplFileInfo' => ['Symfony\Component\VarDumper\Caster\SplCaster', 'castFileInfo'],
         'SplFileObject' => ['Symfony\Component\VarDumper\Caster\SplCaster', 'castFileObject'],
-        'SplFixedArray' => ['Symfony\Component\VarDumper\Caster\SplCaster', 'castFixedArray'],
         'SplHeap' => ['Symfony\Component\VarDumper\Caster\SplCaster', 'castHeap'],
         'SplObjectStorage' => ['Symfony\Component\VarDumper\Caster\SplCaster', 'castObjectStorage'],
         'SplPriorityQueue' => ['Symfony\Component\VarDumper\Caster\SplCaster', 'castHeap'],
@@ -115,7 +117,9 @@ abstract class AbstractCloner implements ClonerInterface
         'DateTimeZone' => ['Symfony\Component\VarDumper\Caster\DateCaster', 'castTimeZone'],
         'DatePeriod' => ['Symfony\Component\VarDumper\Caster\DateCaster', 'castPeriod'],
 
+        'CurlHandle' => ['Symfony\Component\VarDumper\Caster\ResourceCaster', 'castCurl'],
         ':curl' => ['Symfony\Component\VarDumper\Caster\ResourceCaster', 'castCurl'],
+
         ':dba' => ['Symfony\Component\VarDumper\Caster\ResourceCaster', 'castDba'],
         ':dba persistent' => ['Symfony\Component\VarDumper\Caster\ResourceCaster', 'castDba'],
         ':gd' => ['Symfony\Component\VarDumper\Caster\ResourceCaster', 'castGd'],
@@ -214,7 +218,7 @@ public function setMinDepth($minDepth)
     public function cloneVar($var, $filter = 0)
     {
         $this->prevErrorHandler = set_error_handler(function ($type, $msg, $file, $line, $context = []) {
-            if (E_RECOVERABLE_ERROR === $type || E_USER_ERROR === $type) {
+            if (\E_RECOVERABLE_ERROR === $type || \E_USER_ERROR === $type) {
                 // Cloner never dies
                 throw new \ErrorException($msg, 0, $type, $file, $line);
             }
@@ -263,8 +267,8 @@ protected function castObject(Stub $stub, $isNested)
         $obj = $stub->value;
         $class = $stub->class;
 
-        if (isset($class[15]) && "\0" === $class[15] && 0 === strpos($class, "class@anonymous\x00")) {
-            $stub->class = get_parent_class($class).'@anonymous';
+        if ((\PHP_VERSION_ID >= 80000 || (isset($class[15]) && "\0" === $class[15])) && false !== strpos($class, "@anonymous\0")) {
+            $stub->class = \PHP_VERSION_ID < 80000 ? (get_parent_class($class) ?: key(class_implements($class)) ?: 'class').'@anonymous' : get_debug_type($obj);
         }
         if (isset($this->classInfo[$class])) {
             list($i, $parents, $hasDebugInfo) = $this->classInfo[$class];
@@ -286,7 +290,7 @@ protected function castObject(Stub $stub, $isNested)
             $this->classInfo[$class] = [$i, $parents, $hasDebugInfo];
         }
 
-        $a = Caster::castObject($obj, $class, $hasDebugInfo);
+        $a = Caster::castObject($obj, $class, $hasDebugInfo, $stub->class);
 
         try {
             while ($i--) {
diff --git a/vendor/symfony/var-dumper/Cloner/Data.php b/vendor/symfony/var-dumper/Cloner/Data.php
index bb5ee94d8b..3973720794 100644
--- a/vendor/symfony/var-dumper/Cloner/Data.php
+++ b/vendor/symfony/var-dumper/Cloner/Data.php
@@ -34,7 +34,7 @@ public function __construct(array $data)
     }
 
     /**
-     * @return string The type of the value
+     * @return string|null The type of the value
      */
     public function getType()
     {
@@ -58,10 +58,12 @@ public function getType()
         if (Stub::TYPE_RESOURCE === $item->type) {
             return $item->class.' resource';
         }
+
+        return null;
     }
 
     /**
-     * @param bool $recursive Whether values should be resolved recursively or not
+     * @param array|bool $recursive Whether values should be resolved recursively or not
      *
      * @return string|int|float|bool|array|Data[]|null A native representation of the original value
      */
@@ -112,7 +114,7 @@ public function count()
     public function getIterator()
     {
         if (!\is_array($value = $this->getValue())) {
-            throw new \LogicException(sprintf('%s object holds non-iterable type "%s".', self::class, \gettype($value)));
+            throw new \LogicException(sprintf('"%s" object holds non-iterable type "%s".', self::class, \gettype($value)));
         }
 
         foreach ($value as $k => $v) {
@@ -127,6 +129,8 @@ public function __get($key)
 
             return $item instanceof Stub || [] === $item ? $data : $item;
         }
+
+        return null;
     }
 
     public function __isset($key)
@@ -182,7 +186,7 @@ public function getRawData()
      *
      * @param int $maxDepth The max dumped depth level
      *
-     * @return self A clone of $this
+     * @return static
      */
     public function withMaxDepth($maxDepth)
     {
@@ -197,7 +201,7 @@ public function withMaxDepth($maxDepth)
      *
      * @param int $maxItemsPerDepth The max number of items dumped per depth level
      *
-     * @return self A clone of $this
+     * @return static
      */
     public function withMaxItemsPerDepth($maxItemsPerDepth)
     {
@@ -212,7 +216,7 @@ public function withMaxItemsPerDepth($maxItemsPerDepth)
      *
      * @param bool $useRefHandles False to hide global ref. handles
      *
-     * @return self A clone of $this
+     * @return static
      */
     public function withRefHandles($useRefHandles)
     {
@@ -227,7 +231,7 @@ public function withRefHandles($useRefHandles)
      *
      * @param string|int $key The key to seek to
      *
-     * @return self|null A clone of $this or null if the key is not set
+     * @return static|null Null if the key is not set
      */
     public function seek($key)
     {
@@ -237,7 +241,7 @@ public function seek($key)
             $item = $item->value;
         }
         if (!($item = $this->getStub($item)) instanceof Stub || !$item->position) {
-            return;
+            return null;
         }
         $keys = [$key];
 
@@ -252,7 +256,7 @@ public function seek($key)
             case Stub::TYPE_RESOURCE:
                 break;
             default:
-                return;
+                return null;
         }
 
         $data = null;
@@ -302,7 +306,7 @@ private function dumpItem($dumper, $cursor, &$refs, $item)
             }
         } elseif (Stub::TYPE_REF === $item->type) {
             if ($item->handle) {
-                if (!isset($refs[$r = $item->handle - (PHP_INT_MAX >> 1)])) {
+                if (!isset($refs[$r = $item->handle - (\PHP_INT_MAX >> 1)])) {
                     $cursor->refIndex = $refs[$r] = $cursor->refIndex ?: ++$refs[0];
                 } else {
                     $firstSeen = false;
@@ -370,7 +374,7 @@ private function dumpItem($dumper, $cursor, &$refs, $item)
                     break;
 
                 default:
-                    throw new \RuntimeException(sprintf('Unexpected Stub type: %s', $item->type));
+                    throw new \RuntimeException(sprintf('Unexpected Stub type: "%s".', $item->type));
             }
         } elseif ('array' === $type) {
             $dumper->enterHash($cursor, Cursor::HASH_INDEXED, 0, false);
diff --git a/vendor/symfony/var-dumper/Cloner/DumperInterface.php b/vendor/symfony/var-dumper/Cloner/DumperInterface.php
index cb498ff706..912bb52139 100644
--- a/vendor/symfony/var-dumper/Cloner/DumperInterface.php
+++ b/vendor/symfony/var-dumper/Cloner/DumperInterface.php
@@ -40,21 +40,21 @@ public function dumpString(Cursor $cursor, $str, $bin, $cut);
     /**
      * Dumps while entering an hash.
      *
-     * @param Cursor $cursor   The Cursor position in the dump
-     * @param int    $type     A Cursor::HASH_* const for the type of hash
-     * @param string $class    The object class, resource type or array count
-     * @param bool   $hasChild When the dump of the hash has child item
+     * @param Cursor     $cursor   The Cursor position in the dump
+     * @param int        $type     A Cursor::HASH_* const for the type of hash
+     * @param string|int $class    The object class, resource type or array count
+     * @param bool       $hasChild When the dump of the hash has child item
      */
     public function enterHash(Cursor $cursor, $type, $class, $hasChild);
 
     /**
      * Dumps while leaving an hash.
      *
-     * @param Cursor $cursor   The Cursor position in the dump
-     * @param int    $type     A Cursor::HASH_* const for the type of hash
-     * @param string $class    The object class, resource type or array count
-     * @param bool   $hasChild When the dump of the hash has child item
-     * @param int    $cut      The number of items the hash has been cut by
+     * @param Cursor     $cursor   The Cursor position in the dump
+     * @param int        $type     A Cursor::HASH_* const for the type of hash
+     * @param string|int $class    The object class, resource type or array count
+     * @param bool       $hasChild When the dump of the hash has child item
+     * @param int        $cut      The number of items the hash has been cut by
      */
     public function leaveHash(Cursor $cursor, $type, $class, $hasChild, $cut);
 }
diff --git a/vendor/symfony/var-dumper/Cloner/Stub.php b/vendor/symfony/var-dumper/Cloner/Stub.php
index 27dd3ef32c..a56120ce36 100644
--- a/vendor/symfony/var-dumper/Cloner/Stub.php
+++ b/vendor/symfony/var-dumper/Cloner/Stub.php
@@ -48,7 +48,7 @@ public function __sleep()
     {
         $properties = [];
 
-        if (!isset(self::$defaultProperties[$c = \get_class($this)])) {
+        if (!isset(self::$defaultProperties[$c = static::class])) {
             self::$defaultProperties[$c] = get_class_vars($c);
 
             foreach ((new \ReflectionClass($c))->getStaticProperties() as $k => $v) {
diff --git a/vendor/symfony/var-dumper/Cloner/VarCloner.php b/vendor/symfony/var-dumper/Cloner/VarCloner.php
index f418aa0894..8c4221220e 100644
--- a/vendor/symfony/var-dumper/Cloner/VarCloner.php
+++ b/vendor/symfony/var-dumper/Cloner/VarCloner.php
@@ -42,14 +42,14 @@ protected function doClone($var)
         $currentDepth = 0;              // Current tree depth
         $currentDepthFinalIndex = 0;    // Final $queue index for current tree depth
         $minimumDepthReached = 0 === $minDepth; // Becomes true when minimum tree depth has been reached
-        $cookie = (object) [];     // Unique object used to detect hard references
+        $cookie = (object) [];          // Unique object used to detect hard references
         $a = null;                      // Array cast for nested structures
         $stub = null;                   // Stub capturing the main properties of an original item value
                                         // or null if the original value is used directly
 
         if (!self::$hashMask) {
-            self::$gid = uniqid(mt_rand(), true); // Unique string used to detect the special $GLOBALS variable
             self::initHashMask();
+            self::$gid = md5(dechex(self::$hashMask)); // Unique string used to detect the special $GLOBALS variable
         }
         $gid = self::$gid;
         $hashMask = self::$hashMask;
@@ -79,18 +79,25 @@ protected function doClone($var)
                     }
                     if ($gk !== $k) {
                         $fromObjCast = true;
-                        $refs = $vals = \array_values($queue[$i]);
+                        $refs = $vals = array_values($queue[$i]);
                         break;
                     }
                 }
             }
             foreach ($vals as $k => $v) {
                 // $v is the original value or a stub object in case of hard references
-                $refs[$k] = $cookie;
-                if ($zvalIsRef = $vals[$k] === $cookie) {
+
+                if (\PHP_VERSION_ID >= 70400) {
+                    $zvalIsRef = null !== \ReflectionReference::fromArrayElement($vals, $k);
+                } else {
+                    $refs[$k] = $cookie;
+                    $zvalIsRef = $vals[$k] === $cookie;
+                }
+
+                if ($zvalIsRef) {
                     $vals[$k] = &$stub;         // Break hard references to make $queue completely
                     unset($stub);               // independent from the original structure
-                    if ($v instanceof Stub && isset($hardRefs[\spl_object_hash($v)])) {
+                    if ($v instanceof Stub && isset($hardRefs[spl_object_hash($v)])) {
                         $vals[$k] = $refs[$k] = $v;
                         if ($v->value instanceof Stub && (Stub::TYPE_OBJECT === $v->value->type || Stub::TYPE_RESOURCE === $v->value->type)) {
                             ++$v->value->refCount;
@@ -100,7 +107,7 @@ protected function doClone($var)
                     }
                     $refs[$k] = $vals[$k] = new Stub();
                     $refs[$k]->value = $v;
-                    $h = \spl_object_hash($refs[$k]);
+                    $h = spl_object_hash($refs[$k]);
                     $hardRefs[$h] = &$refs[$k];
                     $values[$h] = $v;
                     $vals[$k]->handle = ++$refsCounter;
@@ -113,27 +120,26 @@ protected function doClone($var)
                     case \is_int($v):
                     case \is_float($v):
                         continue 2;
-
                     case \is_string($v):
                         if ('' === $v) {
                             continue 2;
                         }
-                        if (!\preg_match('//u', $v)) {
+                        if (!preg_match('//u', $v)) {
                             $stub = new Stub();
                             $stub->type = Stub::TYPE_STRING;
                             $stub->class = Stub::STRING_BINARY;
                             if (0 <= $maxString && 0 < $cut = \strlen($v) - $maxString) {
                                 $stub->cut = $cut;
-                                $stub->value = \substr($v, 0, -$cut);
+                                $stub->value = substr($v, 0, -$cut);
                             } else {
                                 $stub->value = $v;
                             }
-                        } elseif (0 <= $maxString && isset($v[1 + ($maxString >> 2)]) && 0 < $cut = \mb_strlen($v, 'UTF-8') - $maxString) {
+                        } elseif (0 <= $maxString && isset($v[1 + ($maxString >> 2)]) && 0 < $cut = mb_strlen($v, 'UTF-8') - $maxString) {
                             $stub = new Stub();
                             $stub->type = Stub::TYPE_STRING;
                             $stub->class = Stub::STRING_UTF8;
                             $stub->cut = $cut;
-                            $stub->value = \mb_substr($v, 0, $maxString, 'UTF-8');
+                            $stub->value = mb_substr($v, 0, $maxString, 'UTF-8');
                         } else {
                             continue 2;
                         }
@@ -179,7 +185,7 @@ protected function doClone($var)
 
                     case \is_object($v):
                     case $v instanceof \__PHP_Incomplete_Class:
-                        if (empty($objRefs[$h = $hashMask ^ \hexdec(\substr(\spl_object_hash($v), $hashOffset, \PHP_INT_SIZE))])) {
+                        if (empty($objRefs[$h = $hashMask ^ hexdec(substr(spl_object_hash($v), $hashOffset, \PHP_INT_SIZE))])) {
                             $stub = new Stub();
                             $stub->type = Stub::TYPE_OBJECT;
                             $stub->class = \get_class($v);
@@ -190,7 +196,7 @@ protected function doClone($var)
                                 if (Stub::TYPE_OBJECT !== $stub->type || null === $stub->value) {
                                     break;
                                 }
-                                $h = $hashMask ^ \hexdec(\substr(\spl_object_hash($stub->value), $hashOffset, \PHP_INT_SIZE));
+                                $h = $hashMask ^ hexdec(substr(spl_object_hash($stub->value), $hashOffset, \PHP_INT_SIZE));
                                 $stub->handle = $h;
                             }
                             $stub->value = null;
@@ -213,7 +219,7 @@ protected function doClone($var)
                         if (empty($resRefs[$h = (int) $v])) {
                             $stub = new Stub();
                             $stub->type = Stub::TYPE_RESOURCE;
-                            if ('Unknown' === $stub->class = @\get_resource_type($v)) {
+                            if ('Unknown' === $stub->class = @get_resource_type($v)) {
                                 $stub->class = 'Closed';
                             }
                             $stub->value = $v;
@@ -241,7 +247,7 @@ protected function doClone($var)
                         $stub->position = $len++;
                     } elseif ($pos < $maxItems) {
                         if ($maxItems < $pos += \count($a)) {
-                            $a = \array_slice($a, 0, $maxItems - $pos);
+                            $a = \array_slice($a, 0, $maxItems - $pos, true);
                             if ($stub->cut >= 0) {
                                 $stub->cut += $pos - $maxItems;
                             }
@@ -303,7 +309,7 @@ protected function doClone($var)
     private static function initHashMask()
     {
         $obj = (object) [];
-        self::$hashOffset = 16 - PHP_INT_SIZE;
+        self::$hashOffset = 16 - \PHP_INT_SIZE;
         self::$hashMask = -1;
 
         if (\defined('HHVM_VERSION')) {
@@ -311,7 +317,7 @@ private static function initHashMask()
         } else {
             // check if we are nested in an output buffering handler to prevent a fatal error with ob_start() below
             $obFuncs = ['ob_clean', 'ob_end_clean', 'ob_flush', 'ob_end_flush', 'ob_get_contents', 'ob_get_flush'];
-            foreach (debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS) as $frame) {
+            foreach (debug_backtrace(\DEBUG_BACKTRACE_IGNORE_ARGS) as $frame) {
                 if (isset($frame['function'][0]) && !isset($frame['class']) && 'o' === $frame['function'][0] && \in_array($frame['function'], $obFuncs)) {
                     $frame['line'] = 0;
                     break;
@@ -324,6 +330,6 @@ private static function initHashMask()
             }
         }
 
-        self::$hashMask ^= hexdec(substr(spl_object_hash($obj), self::$hashOffset, PHP_INT_SIZE));
+        self::$hashMask ^= hexdec(substr(spl_object_hash($obj), self::$hashOffset, \PHP_INT_SIZE));
     }
 }
diff --git a/vendor/symfony/var-dumper/Dumper/AbstractDumper.php b/vendor/symfony/var-dumper/Dumper/AbstractDumper.php
index 30cd1a1b19..5ea6294f3d 100644
--- a/vendor/symfony/var-dumper/Dumper/AbstractDumper.php
+++ b/vendor/symfony/var-dumper/Dumper/AbstractDumper.php
@@ -35,7 +35,7 @@ abstract class AbstractDumper implements DataDumperInterface, DumperInterface
     protected $indentPad = '  ';
     protected $flags;
 
-    private $charset;
+    private $charset = '';
 
     /**
      * @param callable|resource|string|null $output  A line dumper callable, an opened stream or an output path, defaults to static::$defaultOutput
@@ -126,8 +126,8 @@ public function dump(Data $data, $output = null)
         $this->decimalPoint = localeconv();
         $this->decimalPoint = $this->decimalPoint['decimal_point'];
 
-        if ($locale = $this->flags & (self::DUMP_COMMA_SEPARATOR | self::DUMP_TRAILING_COMMA) ? setlocale(LC_NUMERIC, 0) : null) {
-            setlocale(LC_NUMERIC, 'C');
+        if ($locale = $this->flags & (self::DUMP_COMMA_SEPARATOR | self::DUMP_TRAILING_COMMA) ? setlocale(\LC_NUMERIC, 0) : null) {
+            setlocale(\LC_NUMERIC, 'C');
         }
 
         if ($returnDump = true === $output) {
@@ -151,9 +151,11 @@ public function dump(Data $data, $output = null)
                 $this->setOutput($prevOutput);
             }
             if ($locale) {
-                setlocale(LC_NUMERIC, $locale);
+                setlocale(\LC_NUMERIC, $locale);
             }
         }
+
+        return null;
     }
 
     /**
@@ -185,13 +187,13 @@ protected function echoLine($line, $depth, $indentPad)
     /**
      * Converts a non-UTF-8 string to UTF-8.
      *
-     * @param string $s The non-UTF-8 string to convert
+     * @param string|null $s The non-UTF-8 string to convert
      *
-     * @return string The string converted to UTF-8
+     * @return string|null The string converted to UTF-8
      */
     protected function utf8Encode($s)
     {
-        if (preg_match('//u', $s)) {
+        if (null === $s || preg_match('//u', $s)) {
             return $s;
         }
 
diff --git a/vendor/symfony/var-dumper/Dumper/CliDumper.php b/vendor/symfony/var-dumper/Dumper/CliDumper.php
index 2bd347d96a..4c48ab7cc8 100644
--- a/vendor/symfony/var-dumper/Dumper/CliDumper.php
+++ b/vendor/symfony/var-dumper/Dumper/CliDumper.php
@@ -28,7 +28,7 @@ class CliDumper extends AbstractDumper
     protected $maxStringWidth = 0;
     protected $styles = [
         // See http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
-        'default' => '38;5;208',
+        'default' => '0;38;5;208',
         'num' => '1;38;5;38',
         'const' => '1;38;5;208',
         'str' => '1;38;5;113',
@@ -131,8 +131,8 @@ public function dumpScalar(Cursor $cursor, $type, $value)
                 $style = 'num';
 
                 switch (true) {
-                    case INF === $value:  $value = 'INF'; break;
-                    case -INF === $value: $value = '-INF'; break;
+                    case \INF === $value:  $value = 'INF'; break;
+                    case -\INF === $value: $value = '-INF'; break;
                     case is_nan($value):  $value = 'NAN'; break;
                     default:
                         $value = (string) $value;
@@ -255,6 +255,10 @@ public function dumpString(Cursor $cursor, $str, $bin, $cut)
      */
     public function enterHash(Cursor $cursor, $type, $class, $hasChild)
     {
+        if (null === $this->colors) {
+            $this->colors = $this->supportsColors();
+        }
+
         $this->dumpKey($cursor);
 
         if ($this->collapseNextHash) {
diff --git a/vendor/symfony/var-dumper/Dumper/HtmlDumper.php b/vendor/symfony/var-dumper/Dumper/HtmlDumper.php
index 37d50a884d..ccbdc96f23 100644
--- a/vendor/symfony/var-dumper/Dumper/HtmlDumper.php
+++ b/vendor/symfony/var-dumper/Dumper/HtmlDumper.php
@@ -128,7 +128,7 @@ protected function getDumpHeader()
             return $this->dumpHeader;
         }
 
-        $line = str_replace('{$options}', json_encode($this->displayOptions, JSON_FORCE_OBJECT), <<<'EOHTML'
+        $line = str_replace('{$options}', json_encode($this->displayOptions, \JSON_FORCE_OBJECT), <<<'EOHTML'
 <script>
 Sfdump = window.Sfdump || (function (doc) {
 
@@ -438,7 +438,7 @@ function xpathHasClass(className) {
                     return this.current();
                 }
                 this.idx = this.idx < (this.nodes.length - 1) ? this.idx + 1 : 0;
-        
+
                 return this.current();
             },
             previous: function () {
@@ -446,7 +446,7 @@ function xpathHasClass(className) {
                     return this.current();
                 }
                 this.idx = this.idx > 0 ? this.idx - 1 : (this.nodes.length - 1);
-        
+
                 return this.current();
             },
             isEmpty: function () {
@@ -522,11 +522,11 @@ function showCurrent(state)
                     "sf-dump-protected",
                     "sf-dump-private",
                 ].map(xpathHasClass).join(' or ');
-                
+
                 var xpathResult = doc.evaluate('.//span[' + classMatches + '][contains(translate(child::text(), ' + xpathString(searchQuery.toUpperCase()) + ', ' + xpathString(searchQuery.toLowerCase()) + '), ' + xpathString(searchQuery.toLowerCase()) + ')]', root, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
 
                 while (node = xpathResult.iterateNext()) state.nodes.push(node);
-                
+
                 showCurrent(state);
             }, 400);
         });
@@ -871,7 +871,7 @@ protected function dumpLine($depth, $endOfValue = false)
         if (-1 === $depth) {
             $args = ['"'.$this->dumpId.'"'];
             if ($this->extraDisplayOptions) {
-                $args[] = json_encode($this->extraDisplayOptions, JSON_FORCE_OBJECT);
+                $args[] = json_encode($this->extraDisplayOptions, \JSON_FORCE_OBJECT);
             }
             // Replace is for BC
             $this->line .= sprintf(str_replace('"%s"', '%s', $this->dumpSuffix), implode(', ', $args));
@@ -900,5 +900,5 @@ private function getSourceLink($file, $line)
 
 function esc($str)
 {
-    return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
+    return htmlspecialchars($str, \ENT_QUOTES, 'UTF-8');
 }
diff --git a/vendor/symfony/var-dumper/LICENSE b/vendor/symfony/var-dumper/LICENSE
index cf8b3ebe87..684fbf94df 100644
--- a/vendor/symfony/var-dumper/LICENSE
+++ b/vendor/symfony/var-dumper/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2014-2019 Fabien Potencier
+Copyright (c) 2014-2020 Fabien Potencier
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/vendor/symfony/var-dumper/Test/VarDumperTestTrait.php b/vendor/symfony/var-dumper/Test/VarDumperTestTrait.php
index aae113b6c5..b8f12c5e45 100644
--- a/vendor/symfony/var-dumper/Test/VarDumperTestTrait.php
+++ b/vendor/symfony/var-dumper/Test/VarDumperTestTrait.php
@@ -22,7 +22,7 @@ trait VarDumperTestTrait
     public function assertDumpEquals($dump, $data, $filter = 0, $message = '')
     {
         if (\is_string($filter)) {
-            @trigger_error(sprintf('The $message argument of the "%s()" method at the 3rd position is deprecated since Symfony 3.4 and will be moved at the 4th position in 4.0.', __METHOD__), E_USER_DEPRECATED);
+            @trigger_error(sprintf('The $message argument of the "%s()" method at the 3rd position is deprecated since Symfony 3.4 and will be moved at the 4th position in 4.0.', __METHOD__), \E_USER_DEPRECATED);
             $message = $filter;
             $filter = 0;
         }
@@ -33,7 +33,7 @@ public function assertDumpEquals($dump, $data, $filter = 0, $message = '')
     public function assertDumpMatchesFormat($dump, $data, $filter = 0, $message = '')
     {
         if (\is_string($filter)) {
-            @trigger_error(sprintf('The $message argument of the "%s()" method at the 3rd position is deprecated since Symfony 3.4 and will be moved at the 4th position in 4.0.', __METHOD__), E_USER_DEPRECATED);
+            @trigger_error(sprintf('The $message argument of the "%s()" method at the 3rd position is deprecated since Symfony 3.4 and will be moved at the 4th position in 4.0.', __METHOD__), \E_USER_DEPRECATED);
             $message = $filter;
             $filter = 0;
         }
@@ -41,6 +41,9 @@ public function assertDumpMatchesFormat($dump, $data, $filter = 0, $message = ''
         $this->assertStringMatchesFormat(rtrim($dump), $this->getDump($data, null, $filter), $message);
     }
 
+    /**
+     * @return string|null
+     */
     protected function getDump($data, $key = null, $filter = 0)
     {
         $flags = getenv('DUMP_LIGHT_ARRAY') ? CliDumper::DUMP_LIGHT_ARRAY : 0;
@@ -52,7 +55,7 @@ protected function getDump($data, $key = null, $filter = 0)
         $dumper->setColors(false);
         $data = $cloner->cloneVar($data, $filter)->withRefHandles(false);
         if (null !== $key && null === $data = $data->seek($key)) {
-            return;
+            return null;
         }
 
         return rtrim($dumper->dump($data, true));
diff --git a/vendor/symfony/var-dumper/Tests/Caster/CasterTest.php b/vendor/symfony/var-dumper/Tests/Caster/CasterTest.php
index 728697b413..73800e5f9d 100644
--- a/vendor/symfony/var-dumper/Tests/Caster/CasterTest.php
+++ b/vendor/symfony/var-dumper/Tests/Caster/CasterTest.php
@@ -171,7 +171,7 @@ public function testAnonymousClass()
 
         $this->assertDumpMatchesFormat(
             <<<'EOTXT'
-@anonymous {
+class@anonymous {
   -foo: "foo"
 }
 EOTXT
diff --git a/vendor/symfony/var-dumper/Tests/Caster/DateCasterTest.php b/vendor/symfony/var-dumper/Tests/Caster/DateCasterTest.php
index da8b4d0fa5..8c685f6b7b 100644
--- a/vendor/symfony/var-dumper/Tests/Caster/DateCasterTest.php
+++ b/vendor/symfony/var-dumper/Tests/Caster/DateCasterTest.php
@@ -16,6 +16,7 @@
 use Symfony\Component\VarDumper\Caster\DateCaster;
 use Symfony\Component\VarDumper\Cloner\Stub;
 use Symfony\Component\VarDumper\Test\VarDumperTestTrait;
+use Symfony\Component\VarDumper\Tests\Fixtures\DateTimeChild;
 
 /**
  * @author Dany Maillard <danymaillard93b@gmail.com>
@@ -55,7 +56,7 @@ public function testCastDateTime($time, $timezone, $xDate, $xTimestamp, $xInfos)
 
         $stub = new Stub();
         $date = new \DateTime($time, new \DateTimeZone($timezone));
-        $cast = DateCaster::castDateTime($date, ['foo' => 'bar'], $stub, false, 0);
+        $cast = DateCaster::castDateTime($date, Caster::castObject($date, \DateTime::class), $stub, false, 0);
 
         $xDump = <<<EODUMP
 array:1 [
@@ -97,12 +98,46 @@ public function provideDateTimes()
         ];
     }
 
+    public function testCastDateTimeWithAdditionalChildProperty()
+    {
+        $stub = new Stub();
+        $date = new DateTimeChild('2020-02-13 00:00:00.123456', new \DateTimeZone('Europe/Paris'));
+        $objectCast = Caster::castObject($date, DateTimeChild::class);
+        $dateCast = DateCaster::castDateTime($date, $objectCast, $stub, false, 0);
+
+        $xDate = '2020-02-13 00:00:00.123456 Europe/Paris (+01:00)';
+        $xInfo = 'Thursday, February 13, 2020%Afrom now';
+        $xDump = <<<EODUMP
+array:2 [
+  "\\x00Symfony\Component\VarDumper\Tests\Fixtures\DateTimeChild\\x00addedProperty" => "foo"
+  "\\x00~\\x00date" => $xDate
+]
+EODUMP;
+
+        $this->assertDumpEquals($xDump, $dateCast);
+
+        $xDump = <<<EODUMP
+Symfony\Component\VarDumper\Caster\ConstStub {
+  +type: 1
+  +class: "$xDate"
+  +value: "%A$xInfo%A"
+  +cut: 0
+  +handle: 0
+  +refCount: 0
+  +position: 0
+  +attr: []
+}
+EODUMP;
+
+        $this->assertDumpMatchesFormat($xDump, $dateCast["\0~\0date"]);
+    }
+
     /**
      * @dataProvider provideIntervals
      */
     public function testDumpInterval($intervalSpec, $ms, $invert, $expected)
     {
-        if ($ms && \PHP_VERSION_ID >= 70200 && version_compare(PHP_VERSION, '7.2.0rc3', '<=')) {
+        if ($ms && \PHP_VERSION_ID >= 70200 && version_compare(\PHP_VERSION, '7.2.0rc3', '<=')) {
             $this->markTestSkipped('Skipped on 7.2 before rc4 because of php bug #75354.');
         }
 
@@ -122,7 +157,7 @@ public function testDumpInterval($intervalSpec, $ms, $invert, $expected)
      */
     public function testDumpIntervalExcludingVerbosity($intervalSpec, $ms, $invert, $expected)
     {
-        if ($ms && \PHP_VERSION_ID >= 70200 && version_compare(PHP_VERSION, '7.2.0rc3', '<=')) {
+        if ($ms && \PHP_VERSION_ID >= 70200 && version_compare(\PHP_VERSION, '7.2.0rc3', '<=')) {
             $this->markTestSkipped('Skipped on 7.2 before rc4 because of php bug #75354.');
         }
 
@@ -142,7 +177,7 @@ public function testDumpIntervalExcludingVerbosity($intervalSpec, $ms, $invert,
      */
     public function testCastInterval($intervalSpec, $ms, $invert, $xInterval, $xSeconds)
     {
-        if ($ms && \PHP_VERSION_ID >= 70200 && version_compare(PHP_VERSION, '7.2.0rc3', '<=')) {
+        if ($ms && \PHP_VERSION_ID >= 70200 && version_compare(\PHP_VERSION, '7.2.0rc3', '<=')) {
             $this->markTestSkipped('Skipped on 7.2 before rc4 because of php bug #75354.');
         }
 
diff --git a/vendor/symfony/var-dumper/Tests/Caster/ExceptionCasterTest.php b/vendor/symfony/var-dumper/Tests/Caster/ExceptionCasterTest.php
index ea83e77163..738180f5b2 100644
--- a/vendor/symfony/var-dumper/Tests/Caster/ExceptionCasterTest.php
+++ b/vendor/symfony/var-dumper/Tests/Caster/ExceptionCasterTest.php
@@ -52,7 +52,6 @@ public function testDefaultSettings()
       › }
     }
     %s%eTests%eCaster%eExceptionCasterTest.php:40 { …}
-    Symfony\Component\VarDumper\Tests\Caster\ExceptionCasterTest->testDefaultSettings() {}
 %A
 EODUMP;
 
@@ -71,8 +70,7 @@ public function testSeek()
     ›     return new \Exception(''.$msg);
     › }
   }
-  %s%eTests%eCaster%eExceptionCasterTest.php:65 { …}
-  Symfony\Component\VarDumper\Tests\Caster\ExceptionCasterTest->testSeek() {}
+  %s%eTests%eCaster%eExceptionCasterTest.php:64 { …}
 %A
 EODUMP;
 
@@ -96,8 +94,7 @@ public function testNoArgs()
       ›     return new \Exception(''.$msg);
       › }
     }
-    %s%eTests%eCaster%eExceptionCasterTest.php:84 { …}
-    Symfony\Component\VarDumper\Tests\Caster\ExceptionCasterTest->testNoArgs() {}
+    %s%eTests%eCaster%eExceptionCasterTest.php:82 { …}
 %A
 EODUMP;
 
diff --git a/vendor/symfony/var-dumper/Tests/Caster/PdoCasterTest.php b/vendor/symfony/var-dumper/Tests/Caster/PdoCasterTest.php
index 19bbe0f80c..fca242cfc6 100644
--- a/vendor/symfony/var-dumper/Tests/Caster/PdoCasterTest.php
+++ b/vendor/symfony/var-dumper/Tests/Caster/PdoCasterTest.php
@@ -30,6 +30,7 @@ public function testCastPdo()
     {
         $pdo = new \PDO('sqlite::memory:');
         $pdo->setAttribute(\PDO::ATTR_STATEMENT_CLASS, ['PDOStatement', [$pdo]]);
+        $pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
 
         $cast = PdoCaster::castPdo($pdo, [], new Stub(), false);
 
@@ -45,7 +46,7 @@ public function testCastPdo()
   "\x00~\x00inTransaction" => false
   "\x00~\x00attributes" => array:9 [
     "CASE" => NATURAL
-    "ERRMODE" => SILENT
+    "ERRMODE" => EXCEPTION
     "PERSISTENT" => false
     "DRIVER_NAME" => "sqlite"
     "ORACLE_NULLS" => NATURAL
diff --git a/vendor/symfony/var-dumper/Tests/Caster/ReflectionCasterTest.php b/vendor/symfony/var-dumper/Tests/Caster/ReflectionCasterTest.php
index 37e14966f4..17ad5434be 100644
--- a/vendor/symfony/var-dumper/Tests/Caster/ReflectionCasterTest.php
+++ b/vendor/symfony/var-dumper/Tests/Caster/ReflectionCasterTest.php
@@ -49,8 +49,8 @@ public function testReflectionCaster()
 %A]
   methods: array:%d [
 %A
-    "export" => ReflectionMethod {
-      +name: "export"
+    "__construct" => ReflectionMethod {
+      +name: "__construct"
       +class: "ReflectionClass"
 %A    parameters: {
         $%s: ReflectionParameter {
@@ -129,7 +129,7 @@ class: "Symfony\Component\VarDumper\Tests\Caster\ReflectionCasterTest"
 
     public function testReflectionParameter()
     {
-        $var = new \ReflectionParameter(__NAMESPACE__.'\reflectionParameterFixture', 0);
+        $var = new \ReflectionParameter(reflectionParameterFixture::class, 0);
 
         $this->assertDumpMatchesFormat(
             <<<'EOTXT'
diff --git a/vendor/symfony/var-dumper/Tests/Caster/SplCasterTest.php b/vendor/symfony/var-dumper/Tests/Caster/SplCasterTest.php
index 984b340c6d..a8c37faf3f 100644
--- a/vendor/symfony/var-dumper/Tests/Caster/SplCasterTest.php
+++ b/vendor/symfony/var-dumper/Tests/Caster/SplCasterTest.php
@@ -50,12 +50,12 @@ public function getCastFileInfoTests()
 %A}
 EOTXT
             ],
-            ['https://google.com/about', <<<'EOTXT'
+            ['https://example.com/about', <<<'EOTXT'
 SplFileInfo {
-%Apath: "https://google.com"
+%Apath: "https://example.com"
   filename: "about"
   basename: "about"
-  pathname: "https://google.com/about"
+  pathname: "https://example.com/about"
   extension: ""
   realPath: false
 %A}
@@ -175,14 +175,17 @@ public function testCastArrayObject()
         $expected = <<<EOTXT
 ArrayObject {
   +"foo": 234
+  -storage: array:1 [
+    0 => 123
+  ]
   flag::STD_PROP_LIST: false
   flag::ARRAY_AS_PROPS: false
   iteratorClass: "ArrayIterator"
-  storage: array:1 [
-    0 => 123
-  ]
 }
 EOTXT;
+        if (\PHP_VERSION_ID < 70400) {
+            $expected = str_replace('-storage:', 'storage:', $expected);
+        }
         $this->assertDumpEquals($expected, $var);
     }
 
@@ -196,11 +199,26 @@ public function testArrayIterator()
         $expected = <<<EOTXT
 Symfony\Component\VarDumper\Tests\Caster\MyArrayIterator {
   -foo: 123
-  flag::STD_PROP_LIST: false
-  flag::ARRAY_AS_PROPS: false
-  storage: array:1 [
+  -storage: array:1 [
     0 => 234
   ]
+  flag::STD_PROP_LIST: false
+  flag::ARRAY_AS_PROPS: false
+}
+EOTXT;
+        if (\PHP_VERSION_ID < 70400) {
+            $expected = str_replace('-storage:', 'storage:', $expected);
+        }
+        $this->assertDumpEquals($expected, $var);
+    }
+
+    public function testBadSplFileInfo()
+    {
+        $var = new BadSplFileInfo();
+
+        $expected = <<<EOTXT
+Symfony\Component\VarDumper\Tests\Caster\BadSplFileInfo {
+  ⚠: "The parent constructor was not called: the object is in an invalid state"
 }
 EOTXT;
         $this->assertDumpEquals($expected, $var);
@@ -211,3 +229,10 @@ class MyArrayIterator extends \ArrayIterator
 {
     private $foo = 123;
 }
+
+class BadSplFileInfo extends \SplFileInfo
+{
+    public function __construct()
+    {
+    }
+}
diff --git a/vendor/symfony/var-dumper/Tests/Cloner/DataTest.php b/vendor/symfony/var-dumper/Tests/Cloner/DataTest.php
index 7d20bced35..d4b6c24c11 100644
--- a/vendor/symfony/var-dumper/Tests/Cloner/DataTest.php
+++ b/vendor/symfony/var-dumper/Tests/Cloner/DataTest.php
@@ -69,7 +69,7 @@ public function testArray()
 
         $children = $data->getValue();
 
-        $this->assertInternalType('array', $children);
+        $this->assertIsArray($children);
 
         $this->assertInstanceOf(Data::class, $children[0]);
         $this->assertInstanceOf(Data::class, $children[1]);
diff --git a/vendor/symfony/var-dumper/Tests/Cloner/VarClonerTest.php b/vendor/symfony/var-dumper/Tests/Cloner/VarClonerTest.php
index 3b180af498..e37482fca9 100644
--- a/vendor/symfony/var-dumper/Tests/Cloner/VarClonerTest.php
+++ b/vendor/symfony/var-dumper/Tests/Cloner/VarClonerTest.php
@@ -13,6 +13,7 @@
 
 use PHPUnit\Framework\TestCase;
 use Symfony\Component\VarDumper\Cloner\VarCloner;
+use Symfony\Component\VarDumper\Tests\Fixtures\Php74;
 
 /**
  * @author Nicolas Grekas <p@tchwork.com>
@@ -21,7 +22,7 @@ class VarClonerTest extends TestCase
 {
     public function testMaxIntBoundary()
     {
-        $data = [PHP_INT_MAX => 123];
+        $data = [\PHP_INT_MAX => 123];
 
         $cloner = new VarCloner();
         $clone = $cloner->cloneVar($data);
@@ -55,7 +56,7 @@ public function testMaxIntBoundary()
 )
 
 EOTXT;
-        $this->assertSame(sprintf($expected, PHP_INT_MAX), print_r($clone, true));
+        $this->assertSame(sprintf($expected, \PHP_INT_MAX), print_r($clone, true));
     }
 
     public function testClone()
@@ -161,7 +162,7 @@ public function testLimits()
                     'Level 3 Item 3',
                 ],
                 [
-                    'Level 3 Item 4',
+                    999 => 'Level 3 Item 4',
                     'Level 3 Item 5',
                     'Level 3 Item 6',
                 ],
@@ -241,7 +242,7 @@ public function testLimits()
                     [1] => Array
                         (
                             [0] => 2
-                            [2] => 7
+                            [1] => 7
                         )
 
                     [2] => Array
@@ -298,7 +299,7 @@ public function testLimits()
 
             [7] => Array
                 (
-                    [0] => Level 3 Item 4
+                    [999] => Level 3 Item 4
                 )
 
         )
@@ -431,6 +432,73 @@ public function testCaster()
     [useRefHandles:Symfony\Component\VarDumper\Cloner\Data:private] => -1
 )
 
+EOTXT;
+        $this->assertStringMatchesFormat($expected, print_r($clone, true));
+    }
+
+    /**
+     * @requires PHP 7.4
+     */
+    public function testPhp74()
+    {
+        $data = new Php74();
+
+        $cloner = new VarCloner();
+        $clone = $cloner->cloneVar($data);
+
+        $expected = <<<'EOTXT'
+Symfony\Component\VarDumper\Cloner\Data Object
+(
+    [data:Symfony\Component\VarDumper\Cloner\Data:private] => Array
+        (
+            [0] => Array
+                (
+                    [0] => Symfony\Component\VarDumper\Cloner\Stub Object
+                        (
+                            [type] => 4
+                            [class] => Symfony\Component\VarDumper\Tests\Fixtures\Php74
+                            [value] => 
+                            [cut] => 0
+                            [handle] => %i
+                            [refCount] => 0
+                            [position] => 1
+                            [attr] => Array
+                                (
+                                )
+
+                        )
+
+                )
+
+            [1] => Array
+                (
+                    [p1] => 123
+                    [p2] => Symfony\Component\VarDumper\Cloner\Stub Object
+                        (
+                            [type] => 4
+                            [class] => stdClass
+                            [value] => 
+                            [cut] => 0
+                            [handle] => %i
+                            [refCount] => 0
+                            [position] => 0
+                            [attr] => Array
+                                (
+                                )
+
+                        )
+
+                )
+
+        )
+
+    [position:Symfony\Component\VarDumper\Cloner\Data:private] => 0
+    [key:Symfony\Component\VarDumper\Cloner\Data:private] => 0
+    [maxDepth:Symfony\Component\VarDumper\Cloner\Data:private] => 20
+    [maxItemsPerDepth:Symfony\Component\VarDumper\Cloner\Data:private] => -1
+    [useRefHandles:Symfony\Component\VarDumper\Cloner\Data:private] => -1
+)
+
 EOTXT;
         $this->assertStringMatchesFormat($expected, print_r($clone, true));
     }
diff --git a/vendor/symfony/var-dumper/Tests/Dumper/CliDumperTest.php b/vendor/symfony/var-dumper/Tests/Dumper/CliDumperTest.php
index 9520b4fe10..6fae0843a9 100644
--- a/vendor/symfony/var-dumper/Tests/Dumper/CliDumperTest.php
+++ b/vendor/symfony/var-dumper/Tests/Dumper/CliDumperTest.php
@@ -13,6 +13,7 @@
 
 use PHPUnit\Framework\TestCase;
 use Symfony\Component\VarDumper\Cloner\VarCloner;
+use Symfony\Component\VarDumper\Dumper\AbstractDumper;
 use Symfony\Component\VarDumper\Dumper\CliDumper;
 use Symfony\Component\VarDumper\Test\VarDumperTestTrait;
 use Twig\Environment;
@@ -45,7 +46,7 @@ public function testGet()
         $dumper->dump($data);
         $out = ob_get_clean();
         $out = preg_replace('/[ \t]+$/m', '', $out);
-        $intMax = PHP_INT_MAX;
+        $intMax = \PHP_INT_MAX;
         $res = (int) $var['res'];
 
         $r = \defined('HHVM_VERSION') ? '' : '#%d';
@@ -203,6 +204,7 @@ public function provideDumpWithCommaFlagTests()
 
     /**
      * @requires extension xml
+     * @requires PHP < 8.0
      */
     public function testXmlResource()
     {
@@ -571,6 +573,57 @@ public function testIncompleteClass()
         );
     }
 
+    public function provideDumpArrayWithColor()
+    {
+        yield [
+            ['foo' => 'bar'],
+            0,
+            <<<EOTXT
+\e[0;38;5;208m\e[38;5;38marray:1\e[0;38;5;208m [\e[m
+  \e[0;38;5;208m"\e[38;5;113mfoo\e[0;38;5;208m" => "\e[1;38;5;113mbar\e[0;38;5;208m"\e[m
+\e[0;38;5;208m]\e[m
+
+EOTXT
+        ];
+
+        yield [[], AbstractDumper::DUMP_LIGHT_ARRAY, "\e[0;38;5;208m[]\e[m\n"];
+
+        yield [
+            ['foo' => 'bar'],
+            AbstractDumper::DUMP_LIGHT_ARRAY,
+            <<<EOTXT
+\e[0;38;5;208m[\e[m
+  \e[0;38;5;208m"\e[38;5;113mfoo\e[0;38;5;208m" => "\e[1;38;5;113mbar\e[0;38;5;208m"\e[m
+\e[0;38;5;208m]\e[m
+
+EOTXT
+        ];
+
+        yield [[], 0, "\e[0;38;5;208m[]\e[m\n"];
+    }
+
+    /**
+     * @dataProvider provideDumpArrayWithColor
+     */
+    public function testDumpArrayWithColor($value, $flags, $expectedOut)
+    {
+        if ('\\' === \DIRECTORY_SEPARATOR) {
+            $this->markTestSkipped('Windows console does not support coloration');
+        }
+
+        $out = '';
+        $dumper = new CliDumper(function ($line, $depth) use (&$out) {
+            if ($depth >= 0) {
+                $out .= str_repeat('  ', $depth).$line."\n";
+            }
+        }, null, $flags);
+        $dumper->setColors(true);
+        $cloner = new VarCloner();
+        $dumper->dump($cloner->cloneVar($value));
+
+        $this->assertSame($expectedOut, $out);
+    }
+
     private function getSpecialVars()
     {
         foreach (array_keys($GLOBALS) as $var) {
diff --git a/vendor/symfony/var-dumper/Tests/Dumper/FunctionsTest.php b/vendor/symfony/var-dumper/Tests/Dumper/FunctionsTest.php
index 0bd596c2ad..7444d4bf58 100644
--- a/vendor/symfony/var-dumper/Tests/Dumper/FunctionsTest.php
+++ b/vendor/symfony/var-dumper/Tests/Dumper/FunctionsTest.php
@@ -26,7 +26,7 @@ public function testDumpReturnsFirstArg()
 
         ob_start();
         $return = dump($var1);
-        $out = ob_get_clean();
+        ob_end_clean();
 
         $this->assertEquals($var1, $return);
     }
@@ -41,7 +41,7 @@ public function testDumpReturnsAllArgsInArray()
 
         ob_start();
         $return = dump($var1, $var2, $var3);
-        $out = ob_get_clean();
+        ob_end_clean();
 
         $this->assertEquals([$var1, $var2, $var3], $return);
     }
diff --git a/vendor/symfony/var-dumper/Tests/Dumper/HtmlDumperTest.php b/vendor/symfony/var-dumper/Tests/Dumper/HtmlDumperTest.php
index 8a7e68ebf0..d91fda265b 100644
--- a/vendor/symfony/var-dumper/Tests/Dumper/HtmlDumperTest.php
+++ b/vendor/symfony/var-dumper/Tests/Dumper/HtmlDumperTest.php
@@ -45,8 +45,8 @@ public function testGet()
         $dumper->dump($data);
         $out = ob_get_clean();
         $out = preg_replace('/[ \t]+$/m', '', $out);
-        $var['file'] = htmlspecialchars($var['file'], ENT_QUOTES, 'UTF-8');
-        $intMax = PHP_INT_MAX;
+        $var['file'] = htmlspecialchars($var['file'], \ENT_QUOTES, 'UTF-8');
+        $intMax = \PHP_INT_MAX;
         preg_match('/sf-dump-\d+/', $out, $dumpId);
         $dumpId = $dumpId[0];
         $res = (int) $var['res'];
diff --git a/vendor/symfony/var-dumper/Tests/Fixtures/DateTimeChild.php b/vendor/symfony/var-dumper/Tests/Fixtures/DateTimeChild.php
new file mode 100644
index 0000000000..2ea2df6514
--- /dev/null
+++ b/vendor/symfony/var-dumper/Tests/Fixtures/DateTimeChild.php
@@ -0,0 +1,8 @@
+<?php
+
+namespace Symfony\Component\VarDumper\Tests\Fixtures;
+
+class DateTimeChild extends \DateTime
+{
+    private $addedProperty = 'foo';
+}
diff --git a/vendor/symfony/var-dumper/Tests/Fixtures/Php74.php b/vendor/symfony/var-dumper/Tests/Fixtures/Php74.php
new file mode 100644
index 0000000000..724fbeb7bd
--- /dev/null
+++ b/vendor/symfony/var-dumper/Tests/Fixtures/Php74.php
@@ -0,0 +1,14 @@
+<?php
+
+namespace Symfony\Component\VarDumper\Tests\Fixtures;
+
+class Php74
+{
+    public $p1 = 123;
+    public \stdClass $p2;
+
+    public function __construct()
+    {
+        $this->p2 = new \stdClass();
+    }
+}
diff --git a/vendor/symfony/var-dumper/composer.json b/vendor/symfony/var-dumper/composer.json
index d31e0b495a..9f2352ee25 100644
--- a/vendor/symfony/var-dumper/composer.json
+++ b/vendor/symfony/var-dumper/composer.json
@@ -38,10 +38,5 @@
             "/Tests/"
         ]
     },
-    "minimum-stability": "dev",
-    "extra": {
-        "branch-alias": {
-            "dev-master": "3.4-dev"
-        }
-    }
+    "minimum-stability": "dev"
 }
diff --git a/vendor/webflo/drupal-finder/.travis.yml b/vendor/webflo/drupal-finder/.travis.yml
index fa99cec6c4..e54f94b5d5 100644
--- a/vendor/webflo/drupal-finder/.travis.yml
+++ b/vendor/webflo/drupal-finder/.travis.yml
@@ -1,6 +1,5 @@
 language: php
 php:
-  - 5.5
   - 5.6
   - 7.0
 
diff --git a/vendor/webflo/drupal-finder/LICENSE.txt b/vendor/webflo/drupal-finder/LICENSE.txt
new file mode 100644
index 0000000000..94fb84639c
--- /dev/null
+++ b/vendor/webflo/drupal-finder/LICENSE.txt
@@ -0,0 +1,339 @@
+        GNU GENERAL PUBLIC LICENSE
+           Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+          Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+        GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+          NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+         END OF TERMS AND CONDITIONS
+
+      How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/vendor/webflo/drupal-finder/composer.json b/vendor/webflo/drupal-finder/composer.json
index fe0558892d..d07d9de710 100644
--- a/vendor/webflo/drupal-finder/composer.json
+++ b/vendor/webflo/drupal-finder/composer.json
@@ -1,7 +1,7 @@
 {
     "name": "webflo/drupal-finder",
     "description": "Helper class to locate a Drupal installation from a given path.",
-    "license": "GPL-2.0+",
+    "license": "GPL-2.0-or-later",
     "type": "library",
     "authors": [
         {
@@ -9,7 +9,9 @@
             "email": "florian@webflo.org"
         }
     ],
-    "require": {},
+    "require": {
+        "ext-json": "*"
+    },
     "autoload": {
         "classmap": [
             "src/DrupalFinder.php"
@@ -22,6 +24,6 @@
     },
     "require-dev": {
         "phpunit/phpunit": "^4.8",
-        "mikey179/vfsStream": "^1.6"
+        "mikey179/vfsstream": "^1.6"
     }
 }
diff --git a/vendor/webflo/drupal-finder/src/DrupalFinder.php b/vendor/webflo/drupal-finder/src/DrupalFinder.php
index 642ea8f78c..fe62ec45d4 100644
--- a/vendor/webflo/drupal-finder/src/DrupalFinder.php
+++ b/vendor/webflo/drupal-finder/src/DrupalFinder.php
@@ -102,6 +102,11 @@ protected function isValidRoot($path)
                 file_get_contents($path . '/' . $this->getComposerFileName()),
                 true
             );
+
+            if (is_null($json)) {
+                throw new \Exception('Unable to decode ' . $path . '/' . $this->getComposerFileName());
+            }
+
             if (is_array($json)) {
                 if (isset($json['extra']['installer-paths']) && is_array($json['extra']['installer-paths'])) {
                     foreach ($json['extra']['installer-paths'] as $install_path => $items) {
@@ -110,8 +115,8 @@ protected function isValidRoot($path)
                             in_array('drupal/drupal', $items)) {
                             $this->composerRoot = $path;
                             // @todo: Remove this magic and detect the major version instead.
-                            if ($install_path == 'core') {
-                                $install_path = null;
+                            if (($install_path == 'core') || ((isset($json['name'])) && ($json['name'] == 'drupal/drupal'))) {
+                                $install_path = '';
                             } elseif (substr($install_path, -5) == '/core') {
                                 $install_path = substr($install_path, 0, -5);
                             }
diff --git a/vendor/webflo/drupal-finder/tests/Drupal8FinderTest.php b/vendor/webflo/drupal-finder/tests/Drupal8FinderTest.php
index ad8495489e..87a0cca323 100644
--- a/vendor/webflo/drupal-finder/tests/Drupal8FinderTest.php
+++ b/vendor/webflo/drupal-finder/tests/Drupal8FinderTest.php
@@ -30,6 +30,34 @@ class Drupal8FinderTest extends DrupalFinderTestBase
         'vendor' => [],
     ];
 
+    protected static $fileStructureDrupal_8_8_x = [
+        'autoload.php' => '',
+        'composer.json' => [
+            'name' => 'drupal/drupal',
+            'require' => [
+                'drupal/core' => 'self.version',
+            ],
+            'extra' => [
+                'installer-paths' => [
+                    'vendor/drupal/core' => [
+                        'type:drupal-core',
+                    ],
+                ],
+            ],
+        ],
+        'core' => [
+            'includes' => [
+                'common.inc' => '',
+            ],
+            'misc' => [
+                'drupal.js' => '',
+            ],
+            'core.services.yml' => '',
+        ],
+        'modules' => [],
+        'vendor' => [],
+    ];
+
     /**
      * @return array
      */
@@ -91,6 +119,34 @@ public function testDrupalDefaultStructure()
         $this->assertFalse($this->finder->getVendorDir());
     }
 
+    public function testDrupalDefaultStructure_8_8_x()
+    {
+        $root = vfsStream::setup('root', null, $this->prepareFileStructure(static::$fileStructureDrupal_8_8_x));
+
+        $this->assertTrue($this->finder->locateRoot($root->url()));
+        $this->assertSame('vfs://root', $this->finder->getDrupalRoot());
+        $this->assertSame('vfs://root', $this->finder->getComposerRoot());
+        $this->assertSame('vfs://root/vendor', $this->finder->getVendorDir());
+
+        $this->assertTrue($this->finder->locateRoot($root->url() . '/misc'));
+        $this->assertSame('vfs://root', $this->finder->getDrupalRoot());
+        $this->assertSame('vfs://root', $this->finder->getComposerRoot());
+        $this->assertSame('vfs://root/vendor', $this->finder->getVendorDir());
+
+        $root = vfsStream::setup(
+          'root',
+          null,
+          ['project' => $this->prepareFileStructure(static::$fileStructure)]
+        );
+        $this->assertFalse(
+          $this->finder->locateRoot($root->url()),
+          'Not in the scope of the project'
+        );
+        $this->assertFalse($this->finder->getDrupalRoot());
+        $this->assertFalse($this->finder->getComposerRoot());
+        $this->assertFalse($this->finder->getVendorDir());
+    }
+
     public function testDrupalComposerStructure()
     {
         $fileStructure = $this->getDrupalComposerStructure();
-- 
GitLab


From e6d581f9bfe314e19c8df9dfe470db2b6c4f84dc Mon Sep 17 00:00:00 2001
From: Brian Weaver <weaver.299@osu.edu>
Date: Tue, 24 Nov 2020 13:48:08 -0500
Subject: [PATCH 13/23] Upgrade to PHP 7.3

---
 pantheon.upstream.yml | 2 +-
 pantheon.yml          | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/pantheon.upstream.yml b/pantheon.upstream.yml
index bae7d740a6..cf639b4133 100644
--- a/pantheon.upstream.yml
+++ b/pantheon.upstream.yml
@@ -3,4 +3,4 @@
 # Override the defaults specified here in a site-specific `pantheon.yml` file.
 # For more information see: https://pantheon.io/docs/pantheon-upstream-yml
 api_version: 1
-php_version: 7.0
+php_version: 7.3
diff --git a/pantheon.yml b/pantheon.yml
index a94478e4ce..eb3a23e273 100644
--- a/pantheon.yml
+++ b/pantheon.yml
@@ -1,3 +1,3 @@
 api_version: 1
 web_docroot: true
-php_version: 7.2
+php_version: 7.3
-- 
GitLab


From c67d523c1554ebf10519ac8a6fad4a394973c9c9 Mon Sep 17 00:00:00 2001
From: Brian Weaver <weaver.299@osu.edu>
Date: Fri, 27 Nov 2020 00:48:02 -0500
Subject: [PATCH 14/23] SECURITY update: drupal core 8.9.10

---
 composer.json                                 |    3 +-
 composer.lock                                 |   38 +-
 vendor/composer/installed.json                |   42 +-
 vendor/dimsemenov/magnific-popup/.gitignore   |   24 +
 vendor/dimsemenov/magnific-popup/.jshintrc    |   21 +
 vendor/dimsemenov/magnific-popup/.travis.yml  |    7 +
 vendor/dimsemenov/magnific-popup/Gruntfile.js |  213 +
 vendor/dimsemenov/magnific-popup/LICENSE      |   20 +
 vendor/dimsemenov/magnific-popup/README.md    |   76 +
 vendor/dimsemenov/magnific-popup/bower.json   |   16 +
 .../dimsemenov/magnific-popup/composer.json   |    5 +
 .../dist/jquery.magnific-popup.js             | 1860 ++++
 .../dist/jquery.magnific-popup.min.js         |    4 +
 .../magnific-popup/dist/magnific-popup.css    |  351 +
 .../magnific-popup/libs/jquery-loader.js      |   12 +
 .../magnific-popup/libs/jquery/jquery.js      | 9555 ++++++++++++++++
 .../magnific-popup/libs/qunit/qunit.css       |  244 +
 .../magnific-popup/libs/qunit/qunit.js        | 2152 ++++
 .../magnific-popup/magnific-popup.jquery.json |   29 +
 vendor/dimsemenov/magnific-popup/package.json |   55 +
 .../magnific-popup/src/css/_settings.scss     |   44 +
 .../magnific-popup/src/css/main.scss          |  543 +
 .../dimsemenov/magnific-popup/src/js/ajax.js  |   77 +
 .../dimsemenov/magnific-popup/src/js/core.js  |  939 ++
 .../magnific-popup/src/js/gallery.js          |  164 +
 .../magnific-popup/src/js/iframe.js           |  102 +
 .../dimsemenov/magnific-popup/src/js/image.js |  244 +
 .../magnific-popup/src/js/inline.js           |   66 +
 .../magnific-popup/src/js/retina.js           |   35 +
 .../dimsemenov/magnific-popup/src/js/zoom.js  |  183 +
 .../website/_includes/analytics.html          |   24 +
 .../website/_includes/build-tool.html         |  273 +
 .../website/_includes/examples.html           |  676 ++
 .../website/_includes/logo.html               |   50 +
 .../website/_includes/signup.html             |   99 +
 .../website/_layouts/default.html             |   77 +
 .../magnific-popup/website/documentation.md   | 1222 +++
 .../magnific-popup/website/index.html         |  101 +
 .../website/site-assets/ajax/test-ajax-2.html |   29 +
 .../website/site-assets/ajax/test-ajax.html   |   10 +
 .../website/site-assets/site.css              |  861 ++
 .../website/third-party-libs/jquery.js        | 9597 +++++++++++++++++
 .../website/third-party-libs/jquery.min.js    |    4 +
 .../website/third-party-libs/uglify.js        |   13 +
 .../website/third-party-libs/zepto.js         | 1565 +++
 .../website/third-party-libs/zepto.min.js     |    2 +
 .../magnific-popup/website/wordpress.html     |   24 +
 vendor/enyo/dropzone/.gitignore               |    7 +
 vendor/enyo/dropzone/.tagconfig               |   52 +
 vendor/enyo/dropzone/.travis.yml              |   10 +
 vendor/enyo/dropzone/CONTRIBUTING.md          |    6 +
 vendor/enyo/dropzone/LICENSE                  |   12 +
 vendor/enyo/dropzone/README.md                |   36 +
 vendor/enyo/dropzone/bower.json               |   16 +
 vendor/enyo/dropzone/component.json           |   10 +
 vendor/enyo/dropzone/composer.json            |   18 +
 vendor/enyo/dropzone/dist/basic.css           |   39 +
 .../enyo/dropzone/dist/dropzone-amd-module.js | 2067 ++++
 vendor/enyo/dropzone/dist/dropzone.css        |  388 +
 vendor/enyo/dropzone/dist/dropzone.js         | 2052 ++++
 vendor/enyo/dropzone/dist/min/basic.min.css   |    1 +
 .../dist/min/dropzone-amd-module.min.js       |    2 +
 .../enyo/dropzone/dist/min/dropzone.min.css   |    1 +
 vendor/enyo/dropzone/dist/min/dropzone.min.js |    2 +
 vendor/enyo/dropzone/dist/readme.md           |   10 +
 vendor/enyo/dropzone/index.js                 |    1 +
 vendor/enyo/dropzone/package.json             |   54 +
 vendor/pear/archive_tar/.gitignore            |    5 +
 vendor/pear/archive_tar/.travis.yml           |   18 +-
 vendor/pear/archive_tar/Archive/Tar.php       |   21 +-
 vendor/pear/archive_tar/package.xml           |   40 +-
 .../pear/archive_tar/tests/512nbytesfile.phpt |   33 +
 .../pear/archive_tar/tests/dirtraversal.phpt  |   48 +-
 .../tests/testblock3/1024bytes.txt            |   16 +
 .../tests/testblock3/randombytes.txt          |    2 +
 web/core/composer.json                        |    2 +-
 web/core/lib/Drupal.php                       |    2 +-
 77 files changed, 36629 insertions(+), 93 deletions(-)
 create mode 100644 vendor/dimsemenov/magnific-popup/.gitignore
 create mode 100644 vendor/dimsemenov/magnific-popup/.jshintrc
 create mode 100644 vendor/dimsemenov/magnific-popup/.travis.yml
 create mode 100644 vendor/dimsemenov/magnific-popup/Gruntfile.js
 create mode 100644 vendor/dimsemenov/magnific-popup/LICENSE
 create mode 100644 vendor/dimsemenov/magnific-popup/README.md
 create mode 100644 vendor/dimsemenov/magnific-popup/bower.json
 create mode 100644 vendor/dimsemenov/magnific-popup/composer.json
 create mode 100644 vendor/dimsemenov/magnific-popup/dist/jquery.magnific-popup.js
 create mode 100644 vendor/dimsemenov/magnific-popup/dist/jquery.magnific-popup.min.js
 create mode 100644 vendor/dimsemenov/magnific-popup/dist/magnific-popup.css
 create mode 100644 vendor/dimsemenov/magnific-popup/libs/jquery-loader.js
 create mode 100644 vendor/dimsemenov/magnific-popup/libs/jquery/jquery.js
 create mode 100644 vendor/dimsemenov/magnific-popup/libs/qunit/qunit.css
 create mode 100644 vendor/dimsemenov/magnific-popup/libs/qunit/qunit.js
 create mode 100644 vendor/dimsemenov/magnific-popup/magnific-popup.jquery.json
 create mode 100644 vendor/dimsemenov/magnific-popup/package.json
 create mode 100644 vendor/dimsemenov/magnific-popup/src/css/_settings.scss
 create mode 100644 vendor/dimsemenov/magnific-popup/src/css/main.scss
 create mode 100644 vendor/dimsemenov/magnific-popup/src/js/ajax.js
 create mode 100644 vendor/dimsemenov/magnific-popup/src/js/core.js
 create mode 100644 vendor/dimsemenov/magnific-popup/src/js/gallery.js
 create mode 100644 vendor/dimsemenov/magnific-popup/src/js/iframe.js
 create mode 100644 vendor/dimsemenov/magnific-popup/src/js/image.js
 create mode 100644 vendor/dimsemenov/magnific-popup/src/js/inline.js
 create mode 100644 vendor/dimsemenov/magnific-popup/src/js/retina.js
 create mode 100644 vendor/dimsemenov/magnific-popup/src/js/zoom.js
 create mode 100644 vendor/dimsemenov/magnific-popup/website/_includes/analytics.html
 create mode 100644 vendor/dimsemenov/magnific-popup/website/_includes/build-tool.html
 create mode 100644 vendor/dimsemenov/magnific-popup/website/_includes/examples.html
 create mode 100644 vendor/dimsemenov/magnific-popup/website/_includes/logo.html
 create mode 100644 vendor/dimsemenov/magnific-popup/website/_includes/signup.html
 create mode 100644 vendor/dimsemenov/magnific-popup/website/_layouts/default.html
 create mode 100644 vendor/dimsemenov/magnific-popup/website/documentation.md
 create mode 100644 vendor/dimsemenov/magnific-popup/website/index.html
 create mode 100644 vendor/dimsemenov/magnific-popup/website/site-assets/ajax/test-ajax-2.html
 create mode 100644 vendor/dimsemenov/magnific-popup/website/site-assets/ajax/test-ajax.html
 create mode 100644 vendor/dimsemenov/magnific-popup/website/site-assets/site.css
 create mode 100644 vendor/dimsemenov/magnific-popup/website/third-party-libs/jquery.js
 create mode 100644 vendor/dimsemenov/magnific-popup/website/third-party-libs/jquery.min.js
 create mode 100644 vendor/dimsemenov/magnific-popup/website/third-party-libs/uglify.js
 create mode 100644 vendor/dimsemenov/magnific-popup/website/third-party-libs/zepto.js
 create mode 100644 vendor/dimsemenov/magnific-popup/website/third-party-libs/zepto.min.js
 create mode 100644 vendor/dimsemenov/magnific-popup/website/wordpress.html
 create mode 100644 vendor/enyo/dropzone/.gitignore
 create mode 100644 vendor/enyo/dropzone/.tagconfig
 create mode 100644 vendor/enyo/dropzone/.travis.yml
 create mode 100644 vendor/enyo/dropzone/CONTRIBUTING.md
 create mode 100644 vendor/enyo/dropzone/LICENSE
 create mode 100644 vendor/enyo/dropzone/README.md
 create mode 100644 vendor/enyo/dropzone/bower.json
 create mode 100644 vendor/enyo/dropzone/component.json
 create mode 100644 vendor/enyo/dropzone/composer.json
 create mode 100644 vendor/enyo/dropzone/dist/basic.css
 create mode 100644 vendor/enyo/dropzone/dist/dropzone-amd-module.js
 create mode 100644 vendor/enyo/dropzone/dist/dropzone.css
 create mode 100644 vendor/enyo/dropzone/dist/dropzone.js
 create mode 100644 vendor/enyo/dropzone/dist/min/basic.min.css
 create mode 100644 vendor/enyo/dropzone/dist/min/dropzone-amd-module.min.js
 create mode 100644 vendor/enyo/dropzone/dist/min/dropzone.min.css
 create mode 100644 vendor/enyo/dropzone/dist/min/dropzone.min.js
 create mode 100644 vendor/enyo/dropzone/dist/readme.md
 create mode 100644 vendor/enyo/dropzone/index.js
 create mode 100644 vendor/enyo/dropzone/package.json
 create mode 100644 vendor/pear/archive_tar/tests/512nbytesfile.phpt
 create mode 100644 vendor/pear/archive_tar/tests/testblock3/1024bytes.txt
 create mode 100644 vendor/pear/archive_tar/tests/testblock3/randombytes.txt

diff --git a/composer.json b/composer.json
index 57663a158d..c1048b013d 100644
--- a/composer.json
+++ b/composer.json
@@ -106,7 +106,7 @@
         "drupal/config_update": "1.5",
         "drupal/console": "1.8",
         "drupal/content_access": "1.0-alpha1",
-        "drupal/core-recommended": "8.9.9",
+        "drupal/core-recommended": "8.9.10",
         "drupal/crop": "2.1",
         "drupal/ctools": "3.4",
         "drupal/devel": "2.0",
@@ -237,7 +237,6 @@
         ]
     },
     "extra": {
-        "installer-types": ["library"],
         "installer-paths": {
             "web/core": ["type:drupal-core"],
             "web/libraries/{$name}": ["type:drupal-library", "enyo/dropzone", "desandro/masonry", "dimsemenov/magnific-popup"],
diff --git a/composer.lock b/composer.lock
index 9a7c89264c..6839540dee 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "dc4b94b862b277119bee8b3d4c29fdf5",
+    "content-hash": "1ff4061238e54e23d2b0e3f191c601bb",
     "packages": [
         {
             "name": "alchemy/zippy",
@@ -3402,16 +3402,16 @@
         },
         {
             "name": "drupal/core",
-            "version": "8.9.9",
+            "version": "8.9.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/drupal/core.git",
-                "reference": "724ada1a6c497a663797c40e4ee3d0c7c618371d"
+                "reference": "e725c01cdf6fb6d8b330a27fa75caab91034805a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/drupal/core/zipball/724ada1a6c497a663797c40e4ee3d0c7c618371d",
-                "reference": "724ada1a6c497a663797c40e4ee3d0c7c618371d",
+                "url": "https://api.github.com/repos/drupal/core/zipball/e725c01cdf6fb6d8b330a27fa75caab91034805a",
+                "reference": "e725c01cdf6fb6d8b330a27fa75caab91034805a",
                 "shasum": ""
             },
             "require": {
@@ -3438,7 +3438,7 @@
                 "laminas/laminas-diactoros": "^1.8",
                 "laminas/laminas-feed": "^2.12",
                 "masterminds/html5": "^2.1",
-                "pear/archive_tar": "^1.4.9",
+                "pear/archive_tar": "^1.4.11",
                 "php": ">=7.0.8",
                 "psr/log": "^1.0",
                 "stack/builder": "^1.0",
@@ -3634,20 +3634,20 @@
                 "GPL-2.0-or-later"
             ],
             "description": "Drupal is an open source content management platform powering millions of websites and applications.",
-            "time": "2020-11-17T22:05:46+00:00"
+            "time": "2020-11-26T01:49:15+00:00"
         },
         {
             "name": "drupal/core-recommended",
-            "version": "8.9.9",
+            "version": "8.9.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/drupal/core-recommended.git",
-                "reference": "875f16a071119e0b26cb8a2b6f44314107110f28"
+                "reference": "106e2a3e6f00f8867d1867e9d7b1376961a264f7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/drupal/core-recommended/zipball/875f16a071119e0b26cb8a2b6f44314107110f28",
-                "reference": "875f16a071119e0b26cb8a2b6f44314107110f28",
+                "url": "https://api.github.com/repos/drupal/core-recommended/zipball/106e2a3e6f00f8867d1867e9d7b1376961a264f7",
+                "reference": "106e2a3e6f00f8867d1867e9d7b1376961a264f7",
                 "shasum": ""
             },
             "require": {
@@ -3659,7 +3659,7 @@
                 "doctrine/common": "v2.7.3",
                 "doctrine/inflector": "v1.2.0",
                 "doctrine/lexer": "1.0.2",
-                "drupal/core": "8.9.9",
+                "drupal/core": "8.9.10",
                 "easyrdf/easyrdf": "0.9.1",
                 "egulias/email-validator": "2.1.17",
                 "guzzlehttp/guzzle": "6.5.4",
@@ -3672,7 +3672,7 @@
                 "laminas/laminas-zendframework-bridge": "1.0.4",
                 "masterminds/html5": "2.3.0",
                 "paragonie/random_compat": "v9.99.99",
-                "pear/archive_tar": "1.4.9",
+                "pear/archive_tar": "1.4.11",
                 "pear/console_getopt": "v1.4.3",
                 "pear/pear-core-minimal": "v1.10.10",
                 "pear/pear_exception": "v1.0.1",
@@ -3716,7 +3716,7 @@
                 "GPL-2.0-or-later"
             ],
             "description": "Locked core dependencies; require this project INSTEAD OF drupal/core.",
-            "time": "2020-11-17T22:05:46+00:00"
+            "time": "2020-11-26T01:49:15+00:00"
         },
         {
             "name": "drupal/crop",
@@ -10352,16 +10352,16 @@
         },
         {
             "name": "pear/archive_tar",
-            "version": "1.4.9",
+            "version": "1.4.11",
             "source": {
                 "type": "git",
                 "url": "https://github.com/pear/Archive_Tar.git",
-                "reference": "c5b00053770e1d72128252c62c2c1a12c26639f0"
+                "reference": "17d355cb7d3c4ff08e5729f29cd7660145208d9d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/c5b00053770e1d72128252c62c2c1a12c26639f0",
-                "reference": "c5b00053770e1d72128252c62c2c1a12c26639f0",
+                "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/17d355cb7d3c4ff08e5729f29cd7660145208d9d",
+                "reference": "17d355cb7d3c4ff08e5729f29cd7660145208d9d",
                 "shasum": ""
             },
             "require": {
@@ -10414,7 +10414,7 @@
                 "archive",
                 "tar"
             ],
-            "time": "2019-12-04T10:17:28+00:00"
+            "time": "2020-11-19T22:10:24+00:00"
         },
         {
             "name": "pear/console_getopt",
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 68ecf487c0..5c769559df 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -3511,17 +3511,17 @@
     },
     {
         "name": "drupal/core",
-        "version": "8.9.9",
-        "version_normalized": "8.9.9.0",
+        "version": "8.9.10",
+        "version_normalized": "8.9.10.0",
         "source": {
             "type": "git",
             "url": "https://github.com/drupal/core.git",
-            "reference": "724ada1a6c497a663797c40e4ee3d0c7c618371d"
+            "reference": "e725c01cdf6fb6d8b330a27fa75caab91034805a"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/drupal/core/zipball/724ada1a6c497a663797c40e4ee3d0c7c618371d",
-            "reference": "724ada1a6c497a663797c40e4ee3d0c7c618371d",
+            "url": "https://api.github.com/repos/drupal/core/zipball/e725c01cdf6fb6d8b330a27fa75caab91034805a",
+            "reference": "e725c01cdf6fb6d8b330a27fa75caab91034805a",
             "shasum": ""
         },
         "require": {
@@ -3548,7 +3548,7 @@
             "laminas/laminas-diactoros": "^1.8",
             "laminas/laminas-feed": "^2.12",
             "masterminds/html5": "^2.1",
-            "pear/archive_tar": "^1.4.9",
+            "pear/archive_tar": "^1.4.11",
             "php": ">=7.0.8",
             "psr/log": "^1.0",
             "stack/builder": "^1.0",
@@ -3688,7 +3688,7 @@
             "drupal/workflows": "self.version",
             "drupal/workspaces": "self.version"
         },
-        "time": "2020-11-17T22:05:46+00:00",
+        "time": "2020-11-26T01:49:15+00:00",
         "type": "drupal-core",
         "extra": {
             "drupal-scaffold": {
@@ -3749,17 +3749,17 @@
     },
     {
         "name": "drupal/core-recommended",
-        "version": "8.9.9",
-        "version_normalized": "8.9.9.0",
+        "version": "8.9.10",
+        "version_normalized": "8.9.10.0",
         "source": {
             "type": "git",
             "url": "https://github.com/drupal/core-recommended.git",
-            "reference": "875f16a071119e0b26cb8a2b6f44314107110f28"
+            "reference": "106e2a3e6f00f8867d1867e9d7b1376961a264f7"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/drupal/core-recommended/zipball/875f16a071119e0b26cb8a2b6f44314107110f28",
-            "reference": "875f16a071119e0b26cb8a2b6f44314107110f28",
+            "url": "https://api.github.com/repos/drupal/core-recommended/zipball/106e2a3e6f00f8867d1867e9d7b1376961a264f7",
+            "reference": "106e2a3e6f00f8867d1867e9d7b1376961a264f7",
             "shasum": ""
         },
         "require": {
@@ -3771,7 +3771,7 @@
             "doctrine/common": "v2.7.3",
             "doctrine/inflector": "v1.2.0",
             "doctrine/lexer": "1.0.2",
-            "drupal/core": "8.9.9",
+            "drupal/core": "8.9.10",
             "easyrdf/easyrdf": "0.9.1",
             "egulias/email-validator": "2.1.17",
             "guzzlehttp/guzzle": "6.5.4",
@@ -3784,7 +3784,7 @@
             "laminas/laminas-zendframework-bridge": "1.0.4",
             "masterminds/html5": "2.3.0",
             "paragonie/random_compat": "v9.99.99",
-            "pear/archive_tar": "1.4.9",
+            "pear/archive_tar": "1.4.11",
             "pear/console_getopt": "v1.4.3",
             "pear/pear-core-minimal": "v1.10.10",
             "pear/pear_exception": "v1.0.1",
@@ -3822,7 +3822,7 @@
         "conflict": {
             "webflo/drupal-core-strict": "*"
         },
-        "time": "2020-11-17T22:05:46+00:00",
+        "time": "2020-11-26T01:49:15+00:00",
         "type": "metapackage",
         "notification-url": "https://packagist.org/downloads/",
         "license": [
@@ -10683,17 +10683,17 @@
     },
     {
         "name": "pear/archive_tar",
-        "version": "1.4.9",
-        "version_normalized": "1.4.9.0",
+        "version": "1.4.11",
+        "version_normalized": "1.4.11.0",
         "source": {
             "type": "git",
             "url": "https://github.com/pear/Archive_Tar.git",
-            "reference": "c5b00053770e1d72128252c62c2c1a12c26639f0"
+            "reference": "17d355cb7d3c4ff08e5729f29cd7660145208d9d"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/c5b00053770e1d72128252c62c2c1a12c26639f0",
-            "reference": "c5b00053770e1d72128252c62c2c1a12c26639f0",
+            "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/17d355cb7d3c4ff08e5729f29cd7660145208d9d",
+            "reference": "17d355cb7d3c4ff08e5729f29cd7660145208d9d",
             "shasum": ""
         },
         "require": {
@@ -10708,7 +10708,7 @@
             "ext-xz": "Lzma2 compression support.",
             "ext-zlib": "Gzip compression support."
         },
-        "time": "2019-12-04T10:17:28+00:00",
+        "time": "2020-11-19T22:10:24+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
diff --git a/vendor/dimsemenov/magnific-popup/.gitignore b/vendor/dimsemenov/magnific-popup/.gitignore
new file mode 100644
index 0000000000..029644a21a
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/.gitignore
@@ -0,0 +1,24 @@
+Gemfile.lock
+test/dest
+*.gem
+pkg/
+*.swp
+*~
+_site/
+.bundle/
+.DS_Store
+bbin/
+sftp-config*
+_site
+.htaccess
+private-*
+__article/
+node_modules
+_production
+all.min.css
+*.sublime-*
+website/dist/
+*.idea
+/.idea
+.node-version
+.sass-cache/
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/.jshintrc b/vendor/dimsemenov/magnific-popup/.jshintrc
new file mode 100644
index 0000000000..ba44597221
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/.jshintrc
@@ -0,0 +1,21 @@
+{
+  "curly": false,
+  "eqeqeq": true,
+  "immed": true,
+  "latedef": true,
+  "newcap": true,
+  "noarg": true,
+  "sub": true,
+  "undef": false,
+  "unused": true,
+  "boss": true,
+  "eqnull": true,
+  "browser": true,
+
+  "predef": [
+    "define",
+    "module",
+    "mfp"
+  ],
+  "jquery": true
+}
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/.travis.yml b/vendor/dimsemenov/magnific-popup/.travis.yml
new file mode 100644
index 0000000000..70f3170790
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/.travis.yml
@@ -0,0 +1,7 @@
+language: node_js
+
+node_js:
+  - "0.10"
+
+before_install:
+  - npm install grunt-cli -g
diff --git a/vendor/dimsemenov/magnific-popup/Gruntfile.js b/vendor/dimsemenov/magnific-popup/Gruntfile.js
new file mode 100644
index 0000000000..643ba4992c
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/Gruntfile.js
@@ -0,0 +1,213 @@
+/**
+ * 
+ * Run 'grunt' to generate JS and CSS in folder 'dist' and site in folder '_site'
+ * *
+ * Run 'grunt watch' to automatically regenerate '_site' when you change files in 'src' or in 'website'
+ * 
+ */
+
+module.exports = function(grunt) {
+
+  'use strict';
+
+  var jekyllConfig = "isLocal : false \r\n"+
+"permalink: /:title/ \r\n"+
+"exclude: ['.json', '.rvmrc', '.rbenv-version', 'README.md', 'Rakefile', 'changelog.md', 'compiler.jar', 'private', 'magnific-popup.sublime-project', 'magnific-popup.sublime-workspace', '.htaccess'] \r\n"+
+"auto: true \r\n"+
+"mfpversion: <%= pkg.version %> \r\n"+
+"pygments: true \r\n";
+
+  // Project configuration.
+  grunt.initConfig({
+    // Metadata.
+    pkg: grunt.file.readJSON('magnific-popup.jquery.json'),
+
+    banner: '/*! <%= pkg.title || pkg.name %> - v<%= pkg.version %> - ' +
+      '<%= grunt.template.today("yyyy-mm-dd") %>\n' +
+      '<%= pkg.homepage ? "* " + pkg.homepage + "\\n" : "" %>' +
+      '* Copyright (c) <%= grunt.template.today("yyyy") %> <%= pkg.author.name %>; */\n',
+
+    // Task configuration.
+    clean: {
+      files: ['dist']
+    },
+    
+    sass: {                            
+      dist: {                      
+        files: {      
+          'dist/magnific-popup.css': 'src/css/main.scss'
+        }
+      }
+    },
+
+    jshint: {
+      all: [
+        'Gruntfile.js',
+        'src/js/*.js'
+      ],
+      options: {
+        jshintrc: '.jshintrc'
+      }
+    },
+
+    mfpbuild: {
+      all: {
+        src: [
+          'inline',
+          'ajax',
+          'image',
+          'zoom',
+          'iframe',
+          'gallery',
+          'retina',
+        ],
+        basePath: 'src/js/',
+        dest: 'dist/jquery.magnific-popup.js',
+        banner: '<%= banner %>'
+      }
+    },
+    jekyll: {
+      dev: {
+        options: {
+          src: 'website',
+          dest: '_site',
+          url: 'local',
+          raw: jekyllConfig + "url: local"
+        }
+      },
+      production: {
+        options: {
+          src: 'website',
+          dest: '_production',
+          url: 'production',
+          raw: jekyllConfig + "url: production"
+        }
+        
+      }
+    },
+
+    copy: {
+      main: {
+        files: [
+          {expand:true, src: ['dist/**'], dest: 'website/'}
+        ]
+      },
+      dev: {
+        files: [
+          {expand:true, src: ['dist/**'], dest: '_site/'}
+        ]
+      }
+    },
+
+    uglify: {
+      my_target: {
+        files: {
+          'dist/jquery.magnific-popup.min.js': ['dist/jquery.magnific-popup.js']
+        },
+        preserveComments: 'some'
+      },
+      options: {
+        preserveComments: 'some'
+      }
+    },
+
+    watch: { // for development run 'grunt watch'
+      jekyll: {
+        files: ['website/**'],
+        tasks: ['jekyll:dev', 'copy:dev']
+      },
+      files: ['src/**'],
+      tasks: [ 'sass', 'mfpbuild', 'copy:dev', 'uglify']
+    },
+
+    cssmin: {
+      compress: {
+        files: {
+          "website/site-assets/all.min.css": ["website/site-assets/site.css", "website/dist/magnific-popup.css"]
+        }
+      }
+    }
+
+  });
+
+
+  // Makes Magnific Popup JS file.
+  // grunt mfpbuild --mfp-exclude=ajax,image
+  grunt.task.registerMultiTask('mfpbuild', 'Makes Magnific Popup JS file.', function() {
+
+    var files = this.data.src,
+        includes = grunt.option('mfp-exclude'),
+        basePath = this.data.basePath,
+        newContents = this.data.banner + ";(function (factory) { \n" +
+            "if (typeof define === 'function' && define.amd) { \n" +
+            " // AMD. Register as an anonymous module. \n" + 
+            " define(['jquery'], factory); \n" + 
+            " } else if (typeof exports === 'object') { \n" +
+            " // Node/CommonJS \n" +
+            " factory(require('jquery')); \n" +
+            " } else { \n" +
+            " // Browser globals \n" +
+            " factory(window.jQuery || window.Zepto); \n" +
+            " } \n" +
+            " }(function($) { \n";
+
+    if(includes) {
+      includes = includes.split(/[\s,]+/); // 'a,b,c' => ['a','b','c']
+      var removeA = function (arr) {
+          var what, a = arguments, L = a.length, ax;
+          while (L > 1 && arr.length) {
+              what = a[--L];
+              while ((ax= arr.indexOf(what)) !== -1) {
+                  arr.splice(ax, 1);
+              }
+          }
+          return arr;
+      };
+
+      includes.forEach(function( name ) {
+        if(name) {
+           
+           grunt.log.writeln( 'removed "'+name +'"' );
+           files = removeA(files, name);
+         }
+      });
+    }
+    
+    files.unshift('core');
+
+    grunt.log.writeln( 'Your build is made of:'+files );
+
+    files.forEach(function( name ) {
+      // Wrap each module with a pience of code to be able to exlude it, stolen for modernizr.com
+      newContents += "\n/*>>"+name+"*/\n"; 
+      newContents += grunt.file.read( basePath + name + '.js' ) + '\n';
+      newContents += "\n/*>>"+name+"*/\n"; 
+    });
+    newContents+= " _checkInstance(); }));";
+
+    grunt.file.write( this.data.dest, newContents );
+  });
+
+
+
+
+
+  // These plugins provide necessary tasks.
+  grunt.loadNpmTasks('grunt-contrib-clean');
+  grunt.loadNpmTasks('grunt-contrib-concat');
+  grunt.loadNpmTasks('grunt-contrib-uglify');
+  grunt.loadNpmTasks('grunt-contrib-jshint');
+  grunt.loadNpmTasks('grunt-contrib-watch');
+  grunt.loadNpmTasks('grunt-sass');
+  grunt.loadNpmTasks('grunt-contrib-copy');
+  grunt.loadNpmTasks('grunt-jekyll');
+  grunt.loadNpmTasks('grunt-contrib-cssmin');
+
+  // Default task.
+  grunt.registerTask('default', ['sass', 'mfpbuild', 'uglify', 'copy', 'jekyll:dev']);
+
+  grunt.registerTask('production', ['sass', 'mfpbuild', 'uglify', 'copy', 'cssmin', 'jekyll:production']);
+  grunt.registerTask('nosite', ['sass', 'mfpbuild', 'uglify']);
+  grunt.registerTask('hint', ['jshint']);
+
+};
diff --git a/vendor/dimsemenov/magnific-popup/LICENSE b/vendor/dimsemenov/magnific-popup/LICENSE
new file mode 100644
index 0000000000..da7ee0c3f2
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/LICENSE
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2016 Dmitry Semenov, http://dimsemenov.com
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/vendor/dimsemenov/magnific-popup/README.md b/vendor/dimsemenov/magnific-popup/README.md
new file mode 100644
index 0000000000..2c0314964f
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/README.md
@@ -0,0 +1,76 @@
+# Magnific Popup Repository
+
+[![Build Status](https://travis-ci.org/dimsemenov/Magnific-Popup.png)](https://travis-ci.org/dimsemenov/Magnific-Popup) 
+[![Flattr](http://api.flattr.com/button/flattr-badge-large.png)](https://flattr.com/thing/1310305/Magnific-Popup-by-dimsemenov)
+
+Fast, light and responsive lightbox plugin, for jQuery and Zepto.js.
+
+- [Documentation and getting started guide](http://dimsemenov.com/plugins/magnific-popup/documentation.html).
+- [Examples and plugin home page](http://dimsemenov.com/plugins/magnific-popup/).
+- More examples in [CodePen collection](http://codepen.io/collection/nLcqo).
+
+Optionally, install via Bower `bower install magnific-popup` or npm: `npm install magnific-popup`.
+[Ruby gem](https://rubygems.org/gems/magnific-popup-rails): `gem install magnific-popup-rails`.
+
+## Extensions
+
+- WordPress plugin - [under development](http://dimsemenov.com/plugins/magnific-popup/wordpress.html).
+- [Drupal module](https://drupal.org/project/magnific_popup).
+- [Concrete5 add-on](https://github.com/cdowdy/concrete5-Magnific-Popup).
+- [Redaxo add-on](http://www.redaxo.org/de/download/addons/?addon_id=1131).
+- [Contao extension](https://github.com/fritzmg/contao-magnific-popup).
+
+If you created an extension for some CMS, email me and I'll add it to this list.
+
+## Location of stuff
+
+- Generated popup JS and CSS files are in folder [dist/](https://github.com/dimsemenov/Magnific-Popup/tree/master/dist). (Online build tool is on [documentation page](http://dimsemenov.com/plugins/magnific-popup/documentation.html)).
+- Source files are in folder [src/](https://github.com/dimsemenov/Magnific-Popup/tree/master/src). They include [Sass CSS file](https://github.com/dimsemenov/Magnific-Popup/blob/master/src/css/main.scss) and js parts (edit them if you wish to submit commit). 
+- Website (examples & documentation) is in folder [website/](https://github.com/dimsemenov/Magnific-Popup/tree/master/website).
+- Documentation page itself is in [website/documentation.md](https://github.com/dimsemenov/Magnific-Popup/blob/master/website/documentation.md) (contributions to it are very welcome).
+
+
+
+## Using Magnific Popup?
+
+If you used Magnific Popup in some interesting way, or on site of popular brand, I'd be very grateful if you <a href="mailto:diiiimaaaa@gmail.com?subject="Site that uses Magnific Popup"">shoot me</a> a link to it.
+
+
+## Build 
+
+To compile Magnific Popup by yourself, first of make sure that you have [Node.js](http://nodejs.org/), [Grunt.js](https://github.com/cowboy/grunt), [Ruby](http://www.ruby-lang.org/) and [Jekyll](https://github.com/mojombo/jekyll/) installed, then:
+
+1) Copy repository
+
+	git clone https://github.com/dimsemenov/Magnific-Popup.git
+
+2) Go inside Magnific Popup folder that you fetched and install Node dependencies
+
+	cd Magnific-Popup && npm install
+
+3) Now simply run `grunt` to generate JS and CSS in folder `dist` and site in folder `_site/`.
+
+	grunt
+
+Optionally:
+
+- Run `grunt watch` to automatically rebuild script when you change files in `src/` or in `website/`.
+- If you don't have and don't want to install Jekyll, run `grunt nosite` to just build JS and CSS files related to popup in `dist/`.
+
+
+
+## [Changelog](https://github.com/dimsemenov/Magnific-Popup/releases)
+
+## License
+
+Script is MIT licensed and free and will always be kept this way. But has a small restriction from me - please do not create public WordPress plugin based on it(or at least contact me before creating it), because I will make it and it'll be open source too ([want to get notified?](http://dimsemenov.com/subscribe.html)).
+
+Created by [@dimsemenov](http://twitter.com/dimsemenov) & [contributors](https://github.com/dimsemenov/Magnific-Popup/contributors).
+
+[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/dimsemenov/magnific-popup/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
+
+## Bugs & contributing
+
+Please report bugs via GitHub and ask general questions through [StackOverflow](http://stackoverflow.com/questions/tagged/magnific-popup). Feel free to submit commit [pull-request](https://github.com/dimsemenov/Magnific-Popup/pulls), even the tiniest contributions to the script or to the documentation are very welcome.
+
+
diff --git a/vendor/dimsemenov/magnific-popup/bower.json b/vendor/dimsemenov/magnific-popup/bower.json
new file mode 100644
index 0000000000..58d3b63951
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/bower.json
@@ -0,0 +1,16 @@
+{
+  "name": "magnific-popup",
+  "main": [
+    "dist/jquery.magnific-popup.js",
+    "dist/magnific-popup.css"
+  ],
+  "dependencies": {
+    "jquery": ">=1.8.0"
+  },
+  "ignore": [
+    "node_modules/",
+    "components/",
+    "website/",
+    "libs/"
+  ]
+}
diff --git a/vendor/dimsemenov/magnific-popup/composer.json b/vendor/dimsemenov/magnific-popup/composer.json
new file mode 100644
index 0000000000..6c23723419
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/composer.json
@@ -0,0 +1,5 @@
+{
+    "name": "dimsemenov/magnific-popup",
+    "description": "Light and responsive lightbox script with focus on performance.",
+    "homepage": "http://dimsemenov.com/plugins/magnific-popup/"
+}
diff --git a/vendor/dimsemenov/magnific-popup/dist/jquery.magnific-popup.js b/vendor/dimsemenov/magnific-popup/dist/jquery.magnific-popup.js
new file mode 100644
index 0000000000..927b3c1f80
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/dist/jquery.magnific-popup.js
@@ -0,0 +1,1860 @@
+/*! Magnific Popup - v1.1.0 - 2016-02-20
+* http://dimsemenov.com/plugins/magnific-popup/
+* Copyright (c) 2016 Dmitry Semenov; */
+;(function (factory) { 
+if (typeof define === 'function' && define.amd) { 
+ // AMD. Register as an anonymous module. 
+ define(['jquery'], factory); 
+ } else if (typeof exports === 'object') { 
+ // Node/CommonJS 
+ factory(require('jquery')); 
+ } else { 
+ // Browser globals 
+ factory(window.jQuery || window.Zepto); 
+ } 
+ }(function($) { 
+
+/*>>core*/
+/**
+ * 
+ * Magnific Popup Core JS file
+ * 
+ */
+
+
+/**
+ * Private static constants
+ */
+var CLOSE_EVENT = 'Close',
+	BEFORE_CLOSE_EVENT = 'BeforeClose',
+	AFTER_CLOSE_EVENT = 'AfterClose',
+	BEFORE_APPEND_EVENT = 'BeforeAppend',
+	MARKUP_PARSE_EVENT = 'MarkupParse',
+	OPEN_EVENT = 'Open',
+	CHANGE_EVENT = 'Change',
+	NS = 'mfp',
+	EVENT_NS = '.' + NS,
+	READY_CLASS = 'mfp-ready',
+	REMOVING_CLASS = 'mfp-removing',
+	PREVENT_CLOSE_CLASS = 'mfp-prevent-close';
+
+
+/**
+ * Private vars 
+ */
+/*jshint -W079 */
+var mfp, // As we have only one instance of MagnificPopup object, we define it locally to not to use 'this'
+	MagnificPopup = function(){},
+	_isJQ = !!(window.jQuery),
+	_prevStatus,
+	_window = $(window),
+	_document,
+	_prevContentType,
+	_wrapClasses,
+	_currPopupType;
+
+
+/**
+ * Private functions
+ */
+var _mfpOn = function(name, f) {
+		mfp.ev.on(NS + name + EVENT_NS, f);
+	},
+	_getEl = function(className, appendTo, html, raw) {
+		var el = document.createElement('div');
+		el.className = 'mfp-'+className;
+		if(html) {
+			el.innerHTML = html;
+		}
+		if(!raw) {
+			el = $(el);
+			if(appendTo) {
+				el.appendTo(appendTo);
+			}
+		} else if(appendTo) {
+			appendTo.appendChild(el);
+		}
+		return el;
+	},
+	_mfpTrigger = function(e, data) {
+		mfp.ev.triggerHandler(NS + e, data);
+
+		if(mfp.st.callbacks) {
+			// converts "mfpEventName" to "eventName" callback and triggers it if it's present
+			e = e.charAt(0).toLowerCase() + e.slice(1);
+			if(mfp.st.callbacks[e]) {
+				mfp.st.callbacks[e].apply(mfp, $.isArray(data) ? data : [data]);
+			}
+		}
+	},
+	_getCloseBtn = function(type) {
+		if(type !== _currPopupType || !mfp.currTemplate.closeBtn) {
+			mfp.currTemplate.closeBtn = $( mfp.st.closeMarkup.replace('%title%', mfp.st.tClose ) );
+			_currPopupType = type;
+		}
+		return mfp.currTemplate.closeBtn;
+	},
+	// Initialize Magnific Popup only when called at least once
+	_checkInstance = function() {
+		if(!$.magnificPopup.instance) {
+			/*jshint -W020 */
+			mfp = new MagnificPopup();
+			mfp.init();
+			$.magnificPopup.instance = mfp;
+		}
+	},
+	// CSS transition detection, http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr
+	supportsTransitions = function() {
+		var s = document.createElement('p').style, // 's' for style. better to create an element if body yet to exist
+			v = ['ms','O','Moz','Webkit']; // 'v' for vendor
+
+		if( s['transition'] !== undefined ) {
+			return true; 
+		}
+			
+		while( v.length ) {
+			if( v.pop() + 'Transition' in s ) {
+				return true;
+			}
+		}
+				
+		return false;
+	};
+
+
+
+/**
+ * Public functions
+ */
+MagnificPopup.prototype = {
+
+	constructor: MagnificPopup,
+
+	/**
+	 * Initializes Magnific Popup plugin. 
+	 * This function is triggered only once when $.fn.magnificPopup or $.magnificPopup is executed
+	 */
+	init: function() {
+		var appVersion = navigator.appVersion;
+		mfp.isLowIE = mfp.isIE8 = document.all && !document.addEventListener;
+		mfp.isAndroid = (/android/gi).test(appVersion);
+		mfp.isIOS = (/iphone|ipad|ipod/gi).test(appVersion);
+		mfp.supportsTransition = supportsTransitions();
+
+		// We disable fixed positioned lightbox on devices that don't handle it nicely.
+		// If you know a better way of detecting this - let me know.
+		mfp.probablyMobile = (mfp.isAndroid || mfp.isIOS || /(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent) );
+		_document = $(document);
+
+		mfp.popupsCache = {};
+	},
+
+	/**
+	 * Opens popup
+	 * @param  data [description]
+	 */
+	open: function(data) {
+
+		var i;
+
+		if(data.isObj === false) { 
+			// convert jQuery collection to array to avoid conflicts later
+			mfp.items = data.items.toArray();
+
+			mfp.index = 0;
+			var items = data.items,
+				item;
+			for(i = 0; i < items.length; i++) {
+				item = items[i];
+				if(item.parsed) {
+					item = item.el[0];
+				}
+				if(item === data.el[0]) {
+					mfp.index = i;
+					break;
+				}
+			}
+		} else {
+			mfp.items = $.isArray(data.items) ? data.items : [data.items];
+			mfp.index = data.index || 0;
+		}
+
+		// if popup is already opened - we just update the content
+		if(mfp.isOpen) {
+			mfp.updateItemHTML();
+			return;
+		}
+		
+		mfp.types = []; 
+		_wrapClasses = '';
+		if(data.mainEl && data.mainEl.length) {
+			mfp.ev = data.mainEl.eq(0);
+		} else {
+			mfp.ev = _document;
+		}
+
+		if(data.key) {
+			if(!mfp.popupsCache[data.key]) {
+				mfp.popupsCache[data.key] = {};
+			}
+			mfp.currTemplate = mfp.popupsCache[data.key];
+		} else {
+			mfp.currTemplate = {};
+		}
+
+
+
+		mfp.st = $.extend(true, {}, $.magnificPopup.defaults, data ); 
+		mfp.fixedContentPos = mfp.st.fixedContentPos === 'auto' ? !mfp.probablyMobile : mfp.st.fixedContentPos;
+
+		if(mfp.st.modal) {
+			mfp.st.closeOnContentClick = false;
+			mfp.st.closeOnBgClick = false;
+			mfp.st.showCloseBtn = false;
+			mfp.st.enableEscapeKey = false;
+		}
+		
+
+		// Building markup
+		// main containers are created only once
+		if(!mfp.bgOverlay) {
+
+			// Dark overlay
+			mfp.bgOverlay = _getEl('bg').on('click'+EVENT_NS, function() {
+				mfp.close();
+			});
+
+			mfp.wrap = _getEl('wrap').attr('tabindex', -1).on('click'+EVENT_NS, function(e) {
+				if(mfp._checkIfClose(e.target)) {
+					mfp.close();
+				}
+			});
+
+			mfp.container = _getEl('container', mfp.wrap);
+		}
+
+		mfp.contentContainer = _getEl('content');
+		if(mfp.st.preloader) {
+			mfp.preloader = _getEl('preloader', mfp.container, mfp.st.tLoading);
+		}
+
+
+		// Initializing modules
+		var modules = $.magnificPopup.modules;
+		for(i = 0; i < modules.length; i++) {
+			var n = modules[i];
+			n = n.charAt(0).toUpperCase() + n.slice(1);
+			mfp['init'+n].call(mfp);
+		}
+		_mfpTrigger('BeforeOpen');
+
+
+		if(mfp.st.showCloseBtn) {
+			// Close button
+			if(!mfp.st.closeBtnInside) {
+				mfp.wrap.append( _getCloseBtn() );
+			} else {
+				_mfpOn(MARKUP_PARSE_EVENT, function(e, template, values, item) {
+					values.close_replaceWith = _getCloseBtn(item.type);
+				});
+				_wrapClasses += ' mfp-close-btn-in';
+			}
+		}
+
+		if(mfp.st.alignTop) {
+			_wrapClasses += ' mfp-align-top';
+		}
+
+	
+
+		if(mfp.fixedContentPos) {
+			mfp.wrap.css({
+				overflow: mfp.st.overflowY,
+				overflowX: 'hidden',
+				overflowY: mfp.st.overflowY
+			});
+		} else {
+			mfp.wrap.css({ 
+				top: _window.scrollTop(),
+				position: 'absolute'
+			});
+		}
+		if( mfp.st.fixedBgPos === false || (mfp.st.fixedBgPos === 'auto' && !mfp.fixedContentPos) ) {
+			mfp.bgOverlay.css({
+				height: _document.height(),
+				position: 'absolute'
+			});
+		}
+
+		
+
+		if(mfp.st.enableEscapeKey) {
+			// Close on ESC key
+			_document.on('keyup' + EVENT_NS, function(e) {
+				if(e.keyCode === 27) {
+					mfp.close();
+				}
+			});
+		}
+
+		_window.on('resize' + EVENT_NS, function() {
+			mfp.updateSize();
+		});
+
+
+		if(!mfp.st.closeOnContentClick) {
+			_wrapClasses += ' mfp-auto-cursor';
+		}
+		
+		if(_wrapClasses)
+			mfp.wrap.addClass(_wrapClasses);
+
+
+		// this triggers recalculation of layout, so we get it once to not to trigger twice
+		var windowHeight = mfp.wH = _window.height();
+
+		
+		var windowStyles = {};
+
+		if( mfp.fixedContentPos ) {
+            if(mfp._hasScrollBar(windowHeight)){
+                var s = mfp._getScrollbarSize();
+                if(s) {
+                    windowStyles.marginRight = s;
+                }
+            }
+        }
+
+		if(mfp.fixedContentPos) {
+			if(!mfp.isIE7) {
+				windowStyles.overflow = 'hidden';
+			} else {
+				// ie7 double-scroll bug
+				$('body, html').css('overflow', 'hidden');
+			}
+		}
+
+		
+		
+		var classesToadd = mfp.st.mainClass;
+		if(mfp.isIE7) {
+			classesToadd += ' mfp-ie7';
+		}
+		if(classesToadd) {
+			mfp._addClassToMFP( classesToadd );
+		}
+
+		// add content
+		mfp.updateItemHTML();
+
+		_mfpTrigger('BuildControls');
+
+		// remove scrollbar, add margin e.t.c
+		$('html').css(windowStyles);
+		
+		// add everything to DOM
+		mfp.bgOverlay.add(mfp.wrap).prependTo( mfp.st.prependTo || $(document.body) );
+
+		// Save last focused element
+		mfp._lastFocusedEl = document.activeElement;
+		
+		// Wait for next cycle to allow CSS transition
+		setTimeout(function() {
+			
+			if(mfp.content) {
+				mfp._addClassToMFP(READY_CLASS);
+				mfp._setFocus();
+			} else {
+				// if content is not defined (not loaded e.t.c) we add class only for BG
+				mfp.bgOverlay.addClass(READY_CLASS);
+			}
+			
+			// Trap the focus in popup
+			_document.on('focusin' + EVENT_NS, mfp._onFocusIn);
+
+		}, 16);
+
+		mfp.isOpen = true;
+		mfp.updateSize(windowHeight);
+		_mfpTrigger(OPEN_EVENT);
+
+		return data;
+	},
+
+	/**
+	 * Closes the popup
+	 */
+	close: function() {
+		if(!mfp.isOpen) return;
+		_mfpTrigger(BEFORE_CLOSE_EVENT);
+
+		mfp.isOpen = false;
+		// for CSS3 animation
+		if(mfp.st.removalDelay && !mfp.isLowIE && mfp.supportsTransition )  {
+			mfp._addClassToMFP(REMOVING_CLASS);
+			setTimeout(function() {
+				mfp._close();
+			}, mfp.st.removalDelay);
+		} else {
+			mfp._close();
+		}
+	},
+
+	/**
+	 * Helper for close() function
+	 */
+	_close: function() {
+		_mfpTrigger(CLOSE_EVENT);
+
+		var classesToRemove = REMOVING_CLASS + ' ' + READY_CLASS + ' ';
+
+		mfp.bgOverlay.detach();
+		mfp.wrap.detach();
+		mfp.container.empty();
+
+		if(mfp.st.mainClass) {
+			classesToRemove += mfp.st.mainClass + ' ';
+		}
+
+		mfp._removeClassFromMFP(classesToRemove);
+
+		if(mfp.fixedContentPos) {
+			var windowStyles = {marginRight: ''};
+			if(mfp.isIE7) {
+				$('body, html').css('overflow', '');
+			} else {
+				windowStyles.overflow = '';
+			}
+			$('html').css(windowStyles);
+		}
+		
+		_document.off('keyup' + EVENT_NS + ' focusin' + EVENT_NS);
+		mfp.ev.off(EVENT_NS);
+
+		// clean up DOM elements that aren't removed
+		mfp.wrap.attr('class', 'mfp-wrap').removeAttr('style');
+		mfp.bgOverlay.attr('class', 'mfp-bg');
+		mfp.container.attr('class', 'mfp-container');
+
+		// remove close button from target element
+		if(mfp.st.showCloseBtn &&
+		(!mfp.st.closeBtnInside || mfp.currTemplate[mfp.currItem.type] === true)) {
+			if(mfp.currTemplate.closeBtn)
+				mfp.currTemplate.closeBtn.detach();
+		}
+
+
+		if(mfp.st.autoFocusLast && mfp._lastFocusedEl) {
+			$(mfp._lastFocusedEl).focus(); // put tab focus back
+		}
+		mfp.currItem = null;	
+		mfp.content = null;
+		mfp.currTemplate = null;
+		mfp.prevHeight = 0;
+
+		_mfpTrigger(AFTER_CLOSE_EVENT);
+	},
+	
+	updateSize: function(winHeight) {
+
+		if(mfp.isIOS) {
+			// fixes iOS nav bars https://github.com/dimsemenov/Magnific-Popup/issues/2
+			var zoomLevel = document.documentElement.clientWidth / window.innerWidth;
+			var height = window.innerHeight * zoomLevel;
+			mfp.wrap.css('height', height);
+			mfp.wH = height;
+		} else {
+			mfp.wH = winHeight || _window.height();
+		}
+		// Fixes #84: popup incorrectly positioned with position:relative on body
+		if(!mfp.fixedContentPos) {
+			mfp.wrap.css('height', mfp.wH);
+		}
+
+		_mfpTrigger('Resize');
+
+	},
+
+	/**
+	 * Set content of popup based on current index
+	 */
+	updateItemHTML: function() {
+		var item = mfp.items[mfp.index];
+
+		// Detach and perform modifications
+		mfp.contentContainer.detach();
+
+		if(mfp.content)
+			mfp.content.detach();
+
+		if(!item.parsed) {
+			item = mfp.parseEl( mfp.index );
+		}
+
+		var type = item.type;
+
+		_mfpTrigger('BeforeChange', [mfp.currItem ? mfp.currItem.type : '', type]);
+		// BeforeChange event works like so:
+		// _mfpOn('BeforeChange', function(e, prevType, newType) { });
+
+		mfp.currItem = item;
+
+		if(!mfp.currTemplate[type]) {
+			var markup = mfp.st[type] ? mfp.st[type].markup : false;
+
+			// allows to modify markup
+			_mfpTrigger('FirstMarkupParse', markup);
+
+			if(markup) {
+				mfp.currTemplate[type] = $(markup);
+			} else {
+				// if there is no markup found we just define that template is parsed
+				mfp.currTemplate[type] = true;
+			}
+		}
+
+		if(_prevContentType && _prevContentType !== item.type) {
+			mfp.container.removeClass('mfp-'+_prevContentType+'-holder');
+		}
+
+		var newContent = mfp['get' + type.charAt(0).toUpperCase() + type.slice(1)](item, mfp.currTemplate[type]);
+		mfp.appendContent(newContent, type);
+
+		item.preloaded = true;
+
+		_mfpTrigger(CHANGE_EVENT, item);
+		_prevContentType = item.type;
+
+		// Append container back after its content changed
+		mfp.container.prepend(mfp.contentContainer);
+
+		_mfpTrigger('AfterChange');
+	},
+
+
+	/**
+	 * Set HTML content of popup
+	 */
+	appendContent: function(newContent, type) {
+		mfp.content = newContent;
+
+		if(newContent) {
+			if(mfp.st.showCloseBtn && mfp.st.closeBtnInside &&
+				mfp.currTemplate[type] === true) {
+				// if there is no markup, we just append close button element inside
+				if(!mfp.content.find('.mfp-close').length) {
+					mfp.content.append(_getCloseBtn());
+				}
+			} else {
+				mfp.content = newContent;
+			}
+		} else {
+			mfp.content = '';
+		}
+
+		_mfpTrigger(BEFORE_APPEND_EVENT);
+		mfp.container.addClass('mfp-'+type+'-holder');
+
+		mfp.contentContainer.append(mfp.content);
+	},
+
+
+	/**
+	 * Creates Magnific Popup data object based on given data
+	 * @param  {int} index Index of item to parse
+	 */
+	parseEl: function(index) {
+		var item = mfp.items[index],
+			type;
+
+		if(item.tagName) {
+			item = { el: $(item) };
+		} else {
+			type = item.type;
+			item = { data: item, src: item.src };
+		}
+
+		if(item.el) {
+			var types = mfp.types;
+
+			// check for 'mfp-TYPE' class
+			for(var i = 0; i < types.length; i++) {
+				if( item.el.hasClass('mfp-'+types[i]) ) {
+					type = types[i];
+					break;
+				}
+			}
+
+			item.src = item.el.attr('data-mfp-src');
+			if(!item.src) {
+				item.src = item.el.attr('href');
+			}
+		}
+
+		item.type = type || mfp.st.type || 'inline';
+		item.index = index;
+		item.parsed = true;
+		mfp.items[index] = item;
+		_mfpTrigger('ElementParse', item);
+
+		return mfp.items[index];
+	},
+
+
+	/**
+	 * Initializes single popup or a group of popups
+	 */
+	addGroup: function(el, options) {
+		var eHandler = function(e) {
+			e.mfpEl = this;
+			mfp._openClick(e, el, options);
+		};
+
+		if(!options) {
+			options = {};
+		}
+
+		var eName = 'click.magnificPopup';
+		options.mainEl = el;
+
+		if(options.items) {
+			options.isObj = true;
+			el.off(eName).on(eName, eHandler);
+		} else {
+			options.isObj = false;
+			if(options.delegate) {
+				el.off(eName).on(eName, options.delegate , eHandler);
+			} else {
+				options.items = el;
+				el.off(eName).on(eName, eHandler);
+			}
+		}
+	},
+	_openClick: function(e, el, options) {
+		var midClick = options.midClick !== undefined ? options.midClick : $.magnificPopup.defaults.midClick;
+
+
+		if(!midClick && ( e.which === 2 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey ) ) {
+			return;
+		}
+
+		var disableOn = options.disableOn !== undefined ? options.disableOn : $.magnificPopup.defaults.disableOn;
+
+		if(disableOn) {
+			if($.isFunction(disableOn)) {
+				if( !disableOn.call(mfp) ) {
+					return true;
+				}
+			} else { // else it's number
+				if( _window.width() < disableOn ) {
+					return true;
+				}
+			}
+		}
+
+		if(e.type) {
+			e.preventDefault();
+
+			// This will prevent popup from closing if element is inside and popup is already opened
+			if(mfp.isOpen) {
+				e.stopPropagation();
+			}
+		}
+
+		options.el = $(e.mfpEl);
+		if(options.delegate) {
+			options.items = el.find(options.delegate);
+		}
+		mfp.open(options);
+	},
+
+
+	/**
+	 * Updates text on preloader
+	 */
+	updateStatus: function(status, text) {
+
+		if(mfp.preloader) {
+			if(_prevStatus !== status) {
+				mfp.container.removeClass('mfp-s-'+_prevStatus);
+			}
+
+			if(!text && status === 'loading') {
+				text = mfp.st.tLoading;
+			}
+
+			var data = {
+				status: status,
+				text: text
+			};
+			// allows to modify status
+			_mfpTrigger('UpdateStatus', data);
+
+			status = data.status;
+			text = data.text;
+
+			mfp.preloader.html(text);
+
+			mfp.preloader.find('a').on('click', function(e) {
+				e.stopImmediatePropagation();
+			});
+
+			mfp.container.addClass('mfp-s-'+status);
+			_prevStatus = status;
+		}
+	},
+
+
+	/*
+		"Private" helpers that aren't private at all
+	 */
+	// Check to close popup or not
+	// "target" is an element that was clicked
+	_checkIfClose: function(target) {
+
+		if($(target).hasClass(PREVENT_CLOSE_CLASS)) {
+			return;
+		}
+
+		var closeOnContent = mfp.st.closeOnContentClick;
+		var closeOnBg = mfp.st.closeOnBgClick;
+
+		if(closeOnContent && closeOnBg) {
+			return true;
+		} else {
+
+			// We close the popup if click is on close button or on preloader. Or if there is no content.
+			if(!mfp.content || $(target).hasClass('mfp-close') || (mfp.preloader && target === mfp.preloader[0]) ) {
+				return true;
+			}
+
+			// if click is outside the content
+			if(  (target !== mfp.content[0] && !$.contains(mfp.content[0], target))  ) {
+				if(closeOnBg) {
+					// last check, if the clicked element is in DOM, (in case it's removed onclick)
+					if( $.contains(document, target) ) {
+						return true;
+					}
+				}
+			} else if(closeOnContent) {
+				return true;
+			}
+
+		}
+		return false;
+	},
+	_addClassToMFP: function(cName) {
+		mfp.bgOverlay.addClass(cName);
+		mfp.wrap.addClass(cName);
+	},
+	_removeClassFromMFP: function(cName) {
+		this.bgOverlay.removeClass(cName);
+		mfp.wrap.removeClass(cName);
+	},
+	_hasScrollBar: function(winHeight) {
+		return (  (mfp.isIE7 ? _document.height() : document.body.scrollHeight) > (winHeight || _window.height()) );
+	},
+	_setFocus: function() {
+		(mfp.st.focus ? mfp.content.find(mfp.st.focus).eq(0) : mfp.wrap).focus();
+	},
+	_onFocusIn: function(e) {
+		if( e.target !== mfp.wrap[0] && !$.contains(mfp.wrap[0], e.target) ) {
+			mfp._setFocus();
+			return false;
+		}
+	},
+	_parseMarkup: function(template, values, item) {
+		var arr;
+		if(item.data) {
+			values = $.extend(item.data, values);
+		}
+		_mfpTrigger(MARKUP_PARSE_EVENT, [template, values, item] );
+
+		$.each(values, function(key, value) {
+			if(value === undefined || value === false) {
+				return true;
+			}
+			arr = key.split('_');
+			if(arr.length > 1) {
+				var el = template.find(EVENT_NS + '-'+arr[0]);
+
+				if(el.length > 0) {
+					var attr = arr[1];
+					if(attr === 'replaceWith') {
+						if(el[0] !== value[0]) {
+							el.replaceWith(value);
+						}
+					} else if(attr === 'img') {
+						if(el.is('img')) {
+							el.attr('src', value);
+						} else {
+							el.replaceWith( $('<img>').attr('src', value).attr('class', el.attr('class')) );
+						}
+					} else {
+						el.attr(arr[1], value);
+					}
+				}
+
+			} else {
+				template.find(EVENT_NS + '-'+key).html(value);
+			}
+		});
+	},
+
+	_getScrollbarSize: function() {
+		// thx David
+		if(mfp.scrollbarSize === undefined) {
+			var scrollDiv = document.createElement("div");
+			scrollDiv.style.cssText = 'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;';
+			document.body.appendChild(scrollDiv);
+			mfp.scrollbarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth;
+			document.body.removeChild(scrollDiv);
+		}
+		return mfp.scrollbarSize;
+	}
+
+}; /* MagnificPopup core prototype end */
+
+
+
+
+/**
+ * Public static functions
+ */
+$.magnificPopup = {
+	instance: null,
+	proto: MagnificPopup.prototype,
+	modules: [],
+
+	open: function(options, index) {
+		_checkInstance();
+
+		if(!options) {
+			options = {};
+		} else {
+			options = $.extend(true, {}, options);
+		}
+
+		options.isObj = true;
+		options.index = index || 0;
+		return this.instance.open(options);
+	},
+
+	close: function() {
+		return $.magnificPopup.instance && $.magnificPopup.instance.close();
+	},
+
+	registerModule: function(name, module) {
+		if(module.options) {
+			$.magnificPopup.defaults[name] = module.options;
+		}
+		$.extend(this.proto, module.proto);
+		this.modules.push(name);
+	},
+
+	defaults: {
+
+		// Info about options is in docs:
+		// http://dimsemenov.com/plugins/magnific-popup/documentation.html#options
+
+		disableOn: 0,
+
+		key: null,
+
+		midClick: false,
+
+		mainClass: '',
+
+		preloader: true,
+
+		focus: '', // CSS selector of input to focus after popup is opened
+
+		closeOnContentClick: false,
+
+		closeOnBgClick: true,
+
+		closeBtnInside: true,
+
+		showCloseBtn: true,
+
+		enableEscapeKey: true,
+
+		modal: false,
+
+		alignTop: false,
+
+		removalDelay: 0,
+
+		prependTo: null,
+
+		fixedContentPos: 'auto',
+
+		fixedBgPos: 'auto',
+
+		overflowY: 'auto',
+
+		closeMarkup: '<button title="%title%" type="button" class="mfp-close">&#215;</button>',
+
+		tClose: 'Close (Esc)',
+
+		tLoading: 'Loading...',
+
+		autoFocusLast: true
+
+	}
+};
+
+
+
+$.fn.magnificPopup = function(options) {
+	_checkInstance();
+
+	var jqEl = $(this);
+
+	// We call some API method of first param is a string
+	if (typeof options === "string" ) {
+
+		if(options === 'open') {
+			var items,
+				itemOpts = _isJQ ? jqEl.data('magnificPopup') : jqEl[0].magnificPopup,
+				index = parseInt(arguments[1], 10) || 0;
+
+			if(itemOpts.items) {
+				items = itemOpts.items[index];
+			} else {
+				items = jqEl;
+				if(itemOpts.delegate) {
+					items = items.find(itemOpts.delegate);
+				}
+				items = items.eq( index );
+			}
+			mfp._openClick({mfpEl:items}, jqEl, itemOpts);
+		} else {
+			if(mfp.isOpen)
+				mfp[options].apply(mfp, Array.prototype.slice.call(arguments, 1));
+		}
+
+	} else {
+		// clone options obj
+		options = $.extend(true, {}, options);
+
+		/*
+		 * As Zepto doesn't support .data() method for objects
+		 * and it works only in normal browsers
+		 * we assign "options" object directly to the DOM element. FTW!
+		 */
+		if(_isJQ) {
+			jqEl.data('magnificPopup', options);
+		} else {
+			jqEl[0].magnificPopup = options;
+		}
+
+		mfp.addGroup(jqEl, options);
+
+	}
+	return jqEl;
+};
+
+/*>>core*/
+
+/*>>inline*/
+
+var INLINE_NS = 'inline',
+	_hiddenClass,
+	_inlinePlaceholder,
+	_lastInlineElement,
+	_putInlineElementsBack = function() {
+		if(_lastInlineElement) {
+			_inlinePlaceholder.after( _lastInlineElement.addClass(_hiddenClass) ).detach();
+			_lastInlineElement = null;
+		}
+	};
+
+$.magnificPopup.registerModule(INLINE_NS, {
+	options: {
+		hiddenClass: 'hide', // will be appended with `mfp-` prefix
+		markup: '',
+		tNotFound: 'Content not found'
+	},
+	proto: {
+
+		initInline: function() {
+			mfp.types.push(INLINE_NS);
+
+			_mfpOn(CLOSE_EVENT+'.'+INLINE_NS, function() {
+				_putInlineElementsBack();
+			});
+		},
+
+		getInline: function(item, template) {
+
+			_putInlineElementsBack();
+
+			if(item.src) {
+				var inlineSt = mfp.st.inline,
+					el = $(item.src);
+
+				if(el.length) {
+
+					// If target element has parent - we replace it with placeholder and put it back after popup is closed
+					var parent = el[0].parentNode;
+					if(parent && parent.tagName) {
+						if(!_inlinePlaceholder) {
+							_hiddenClass = inlineSt.hiddenClass;
+							_inlinePlaceholder = _getEl(_hiddenClass);
+							_hiddenClass = 'mfp-'+_hiddenClass;
+						}
+						// replace target inline element with placeholder
+						_lastInlineElement = el.after(_inlinePlaceholder).detach().removeClass(_hiddenClass);
+					}
+
+					mfp.updateStatus('ready');
+				} else {
+					mfp.updateStatus('error', inlineSt.tNotFound);
+					el = $('<div>');
+				}
+
+				item.inlineElement = el;
+				return el;
+			}
+
+			mfp.updateStatus('ready');
+			mfp._parseMarkup(template, {}, item);
+			return template;
+		}
+	}
+});
+
+/*>>inline*/
+
+/*>>ajax*/
+var AJAX_NS = 'ajax',
+	_ajaxCur,
+	_removeAjaxCursor = function() {
+		if(_ajaxCur) {
+			$(document.body).removeClass(_ajaxCur);
+		}
+	},
+	_destroyAjaxRequest = function() {
+		_removeAjaxCursor();
+		if(mfp.req) {
+			mfp.req.abort();
+		}
+	};
+
+$.magnificPopup.registerModule(AJAX_NS, {
+
+	options: {
+		settings: null,
+		cursor: 'mfp-ajax-cur',
+		tError: '<a href="%url%">The content</a> could not be loaded.'
+	},
+
+	proto: {
+		initAjax: function() {
+			mfp.types.push(AJAX_NS);
+			_ajaxCur = mfp.st.ajax.cursor;
+
+			_mfpOn(CLOSE_EVENT+'.'+AJAX_NS, _destroyAjaxRequest);
+			_mfpOn('BeforeChange.' + AJAX_NS, _destroyAjaxRequest);
+		},
+		getAjax: function(item) {
+
+			if(_ajaxCur) {
+				$(document.body).addClass(_ajaxCur);
+			}
+
+			mfp.updateStatus('loading');
+
+			var opts = $.extend({
+				url: item.src,
+				success: function(data, textStatus, jqXHR) {
+					var temp = {
+						data:data,
+						xhr:jqXHR
+					};
+
+					_mfpTrigger('ParseAjax', temp);
+
+					mfp.appendContent( $(temp.data), AJAX_NS );
+
+					item.finished = true;
+
+					_removeAjaxCursor();
+
+					mfp._setFocus();
+
+					setTimeout(function() {
+						mfp.wrap.addClass(READY_CLASS);
+					}, 16);
+
+					mfp.updateStatus('ready');
+
+					_mfpTrigger('AjaxContentAdded');
+				},
+				error: function() {
+					_removeAjaxCursor();
+					item.finished = item.loadError = true;
+					mfp.updateStatus('error', mfp.st.ajax.tError.replace('%url%', item.src));
+				}
+			}, mfp.st.ajax.settings);
+
+			mfp.req = $.ajax(opts);
+
+			return '';
+		}
+	}
+});
+
+/*>>ajax*/
+
+/*>>image*/
+var _imgInterval,
+	_getTitle = function(item) {
+		if(item.data && item.data.title !== undefined)
+			return item.data.title;
+
+		var src = mfp.st.image.titleSrc;
+
+		if(src) {
+			if($.isFunction(src)) {
+				return src.call(mfp, item);
+			} else if(item.el) {
+				return item.el.attr(src) || '';
+			}
+		}
+		return '';
+	};
+
+$.magnificPopup.registerModule('image', {
+
+	options: {
+		markup: '<div class="mfp-figure">'+
+					'<div class="mfp-close"></div>'+
+					'<figure>'+
+						'<div class="mfp-img"></div>'+
+						'<figcaption>'+
+							'<div class="mfp-bottom-bar">'+
+								'<div class="mfp-title"></div>'+
+								'<div class="mfp-counter"></div>'+
+							'</div>'+
+						'</figcaption>'+
+					'</figure>'+
+				'</div>',
+		cursor: 'mfp-zoom-out-cur',
+		titleSrc: 'title',
+		verticalFit: true,
+		tError: '<a href="%url%">The image</a> could not be loaded.'
+	},
+
+	proto: {
+		initImage: function() {
+			var imgSt = mfp.st.image,
+				ns = '.image';
+
+			mfp.types.push('image');
+
+			_mfpOn(OPEN_EVENT+ns, function() {
+				if(mfp.currItem.type === 'image' && imgSt.cursor) {
+					$(document.body).addClass(imgSt.cursor);
+				}
+			});
+
+			_mfpOn(CLOSE_EVENT+ns, function() {
+				if(imgSt.cursor) {
+					$(document.body).removeClass(imgSt.cursor);
+				}
+				_window.off('resize' + EVENT_NS);
+			});
+
+			_mfpOn('Resize'+ns, mfp.resizeImage);
+			if(mfp.isLowIE) {
+				_mfpOn('AfterChange', mfp.resizeImage);
+			}
+		},
+		resizeImage: function() {
+			var item = mfp.currItem;
+			if(!item || !item.img) return;
+
+			if(mfp.st.image.verticalFit) {
+				var decr = 0;
+				// fix box-sizing in ie7/8
+				if(mfp.isLowIE) {
+					decr = parseInt(item.img.css('padding-top'), 10) + parseInt(item.img.css('padding-bottom'),10);
+				}
+				item.img.css('max-height', mfp.wH-decr);
+			}
+		},
+		_onImageHasSize: function(item) {
+			if(item.img) {
+
+				item.hasSize = true;
+
+				if(_imgInterval) {
+					clearInterval(_imgInterval);
+				}
+
+				item.isCheckingImgSize = false;
+
+				_mfpTrigger('ImageHasSize', item);
+
+				if(item.imgHidden) {
+					if(mfp.content)
+						mfp.content.removeClass('mfp-loading');
+
+					item.imgHidden = false;
+				}
+
+			}
+		},
+
+		/**
+		 * Function that loops until the image has size to display elements that rely on it asap
+		 */
+		findImageSize: function(item) {
+
+			var counter = 0,
+				img = item.img[0],
+				mfpSetInterval = function(delay) {
+
+					if(_imgInterval) {
+						clearInterval(_imgInterval);
+					}
+					// decelerating interval that checks for size of an image
+					_imgInterval = setInterval(function() {
+						if(img.naturalWidth > 0) {
+							mfp._onImageHasSize(item);
+							return;
+						}
+
+						if(counter > 200) {
+							clearInterval(_imgInterval);
+						}
+
+						counter++;
+						if(counter === 3) {
+							mfpSetInterval(10);
+						} else if(counter === 40) {
+							mfpSetInterval(50);
+						} else if(counter === 100) {
+							mfpSetInterval(500);
+						}
+					}, delay);
+				};
+
+			mfpSetInterval(1);
+		},
+
+		getImage: function(item, template) {
+
+			var guard = 0,
+
+				// image load complete handler
+				onLoadComplete = function() {
+					if(item) {
+						if (item.img[0].complete) {
+							item.img.off('.mfploader');
+
+							if(item === mfp.currItem){
+								mfp._onImageHasSize(item);
+
+								mfp.updateStatus('ready');
+							}
+
+							item.hasSize = true;
+							item.loaded = true;
+
+							_mfpTrigger('ImageLoadComplete');
+
+						}
+						else {
+							// if image complete check fails 200 times (20 sec), we assume that there was an error.
+							guard++;
+							if(guard < 200) {
+								setTimeout(onLoadComplete,100);
+							} else {
+								onLoadError();
+							}
+						}
+					}
+				},
+
+				// image error handler
+				onLoadError = function() {
+					if(item) {
+						item.img.off('.mfploader');
+						if(item === mfp.currItem){
+							mfp._onImageHasSize(item);
+							mfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );
+						}
+
+						item.hasSize = true;
+						item.loaded = true;
+						item.loadError = true;
+					}
+				},
+				imgSt = mfp.st.image;
+
+
+			var el = template.find('.mfp-img');
+			if(el.length) {
+				var img = document.createElement('img');
+				img.className = 'mfp-img';
+				if(item.el && item.el.find('img').length) {
+					img.alt = item.el.find('img').attr('alt');
+				}
+				item.img = $(img).on('load.mfploader', onLoadComplete).on('error.mfploader', onLoadError);
+				img.src = item.src;
+
+				// without clone() "error" event is not firing when IMG is replaced by new IMG
+				// TODO: find a way to avoid such cloning
+				if(el.is('img')) {
+					item.img = item.img.clone();
+				}
+
+				img = item.img[0];
+				if(img.naturalWidth > 0) {
+					item.hasSize = true;
+				} else if(!img.width) {
+					item.hasSize = false;
+				}
+			}
+
+			mfp._parseMarkup(template, {
+				title: _getTitle(item),
+				img_replaceWith: item.img
+			}, item);
+
+			mfp.resizeImage();
+
+			if(item.hasSize) {
+				if(_imgInterval) clearInterval(_imgInterval);
+
+				if(item.loadError) {
+					template.addClass('mfp-loading');
+					mfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );
+				} else {
+					template.removeClass('mfp-loading');
+					mfp.updateStatus('ready');
+				}
+				return template;
+			}
+
+			mfp.updateStatus('loading');
+			item.loading = true;
+
+			if(!item.hasSize) {
+				item.imgHidden = true;
+				template.addClass('mfp-loading');
+				mfp.findImageSize(item);
+			}
+
+			return template;
+		}
+	}
+});
+
+/*>>image*/
+
+/*>>zoom*/
+var hasMozTransform,
+	getHasMozTransform = function() {
+		if(hasMozTransform === undefined) {
+			hasMozTransform = document.createElement('p').style.MozTransform !== undefined;
+		}
+		return hasMozTransform;
+	};
+
+$.magnificPopup.registerModule('zoom', {
+
+	options: {
+		enabled: false,
+		easing: 'ease-in-out',
+		duration: 300,
+		opener: function(element) {
+			return element.is('img') ? element : element.find('img');
+		}
+	},
+
+	proto: {
+
+		initZoom: function() {
+			var zoomSt = mfp.st.zoom,
+				ns = '.zoom',
+				image;
+
+			if(!zoomSt.enabled || !mfp.supportsTransition) {
+				return;
+			}
+
+			var duration = zoomSt.duration,
+				getElToAnimate = function(image) {
+					var newImg = image.clone().removeAttr('style').removeAttr('class').addClass('mfp-animated-image'),
+						transition = 'all '+(zoomSt.duration/1000)+'s ' + zoomSt.easing,
+						cssObj = {
+							position: 'fixed',
+							zIndex: 9999,
+							left: 0,
+							top: 0,
+							'-webkit-backface-visibility': 'hidden'
+						},
+						t = 'transition';
+
+					cssObj['-webkit-'+t] = cssObj['-moz-'+t] = cssObj['-o-'+t] = cssObj[t] = transition;
+
+					newImg.css(cssObj);
+					return newImg;
+				},
+				showMainContent = function() {
+					mfp.content.css('visibility', 'visible');
+				},
+				openTimeout,
+				animatedImg;
+
+			_mfpOn('BuildControls'+ns, function() {
+				if(mfp._allowZoom()) {
+
+					clearTimeout(openTimeout);
+					mfp.content.css('visibility', 'hidden');
+
+					// Basically, all code below does is clones existing image, puts in on top of the current one and animated it
+
+					image = mfp._getItemToZoom();
+
+					if(!image) {
+						showMainContent();
+						return;
+					}
+
+					animatedImg = getElToAnimate(image);
+
+					animatedImg.css( mfp._getOffset() );
+
+					mfp.wrap.append(animatedImg);
+
+					openTimeout = setTimeout(function() {
+						animatedImg.css( mfp._getOffset( true ) );
+						openTimeout = setTimeout(function() {
+
+							showMainContent();
+
+							setTimeout(function() {
+								animatedImg.remove();
+								image = animatedImg = null;
+								_mfpTrigger('ZoomAnimationEnded');
+							}, 16); // avoid blink when switching images
+
+						}, duration); // this timeout equals animation duration
+
+					}, 16); // by adding this timeout we avoid short glitch at the beginning of animation
+
+
+					// Lots of timeouts...
+				}
+			});
+			_mfpOn(BEFORE_CLOSE_EVENT+ns, function() {
+				if(mfp._allowZoom()) {
+
+					clearTimeout(openTimeout);
+
+					mfp.st.removalDelay = duration;
+
+					if(!image) {
+						image = mfp._getItemToZoom();
+						if(!image) {
+							return;
+						}
+						animatedImg = getElToAnimate(image);
+					}
+
+					animatedImg.css( mfp._getOffset(true) );
+					mfp.wrap.append(animatedImg);
+					mfp.content.css('visibility', 'hidden');
+
+					setTimeout(function() {
+						animatedImg.css( mfp._getOffset() );
+					}, 16);
+				}
+
+			});
+
+			_mfpOn(CLOSE_EVENT+ns, function() {
+				if(mfp._allowZoom()) {
+					showMainContent();
+					if(animatedImg) {
+						animatedImg.remove();
+					}
+					image = null;
+				}
+			});
+		},
+
+		_allowZoom: function() {
+			return mfp.currItem.type === 'image';
+		},
+
+		_getItemToZoom: function() {
+			if(mfp.currItem.hasSize) {
+				return mfp.currItem.img;
+			} else {
+				return false;
+			}
+		},
+
+		// Get element postion relative to viewport
+		_getOffset: function(isLarge) {
+			var el;
+			if(isLarge) {
+				el = mfp.currItem.img;
+			} else {
+				el = mfp.st.zoom.opener(mfp.currItem.el || mfp.currItem);
+			}
+
+			var offset = el.offset();
+			var paddingTop = parseInt(el.css('padding-top'),10);
+			var paddingBottom = parseInt(el.css('padding-bottom'),10);
+			offset.top -= ( $(window).scrollTop() - paddingTop );
+
+
+			/*
+
+			Animating left + top + width/height looks glitchy in Firefox, but perfect in Chrome. And vice-versa.
+
+			 */
+			var obj = {
+				width: el.width(),
+				// fix Zepto height+padding issue
+				height: (_isJQ ? el.innerHeight() : el[0].offsetHeight) - paddingBottom - paddingTop
+			};
+
+			// I hate to do this, but there is no another option
+			if( getHasMozTransform() ) {
+				obj['-moz-transform'] = obj['transform'] = 'translate(' + offset.left + 'px,' + offset.top + 'px)';
+			} else {
+				obj.left = offset.left;
+				obj.top = offset.top;
+			}
+			return obj;
+		}
+
+	}
+});
+
+
+
+/*>>zoom*/
+
+/*>>iframe*/
+
+var IFRAME_NS = 'iframe',
+	_emptyPage = '//about:blank',
+
+	_fixIframeBugs = function(isShowing) {
+		if(mfp.currTemplate[IFRAME_NS]) {
+			var el = mfp.currTemplate[IFRAME_NS].find('iframe');
+			if(el.length) {
+				// reset src after the popup is closed to avoid "video keeps playing after popup is closed" bug
+				if(!isShowing) {
+					el[0].src = _emptyPage;
+				}
+
+				// IE8 black screen bug fix
+				if(mfp.isIE8) {
+					el.css('display', isShowing ? 'block' : 'none');
+				}
+			}
+		}
+	};
+
+$.magnificPopup.registerModule(IFRAME_NS, {
+
+	options: {
+		markup: '<div class="mfp-iframe-scaler">'+
+					'<div class="mfp-close"></div>'+
+					'<iframe class="mfp-iframe" src="//about:blank" frameborder="0" allowfullscreen></iframe>'+
+				'</div>',
+
+		srcAction: 'iframe_src',
+
+		// we don't care and support only one default type of URL by default
+		patterns: {
+			youtube: {
+				index: 'youtube.com',
+				id: 'v=',
+				src: '//www.youtube.com/embed/%id%?autoplay=1'
+			},
+			vimeo: {
+				index: 'vimeo.com/',
+				id: '/',
+				src: '//player.vimeo.com/video/%id%?autoplay=1'
+			},
+			gmaps: {
+				index: '//maps.google.',
+				src: '%id%&output=embed'
+			}
+		}
+	},
+
+	proto: {
+		initIframe: function() {
+			mfp.types.push(IFRAME_NS);
+
+			_mfpOn('BeforeChange', function(e, prevType, newType) {
+				if(prevType !== newType) {
+					if(prevType === IFRAME_NS) {
+						_fixIframeBugs(); // iframe if removed
+					} else if(newType === IFRAME_NS) {
+						_fixIframeBugs(true); // iframe is showing
+					}
+				}// else {
+					// iframe source is switched, don't do anything
+				//}
+			});
+
+			_mfpOn(CLOSE_EVENT + '.' + IFRAME_NS, function() {
+				_fixIframeBugs();
+			});
+		},
+
+		getIframe: function(item, template) {
+			var embedSrc = item.src;
+			var iframeSt = mfp.st.iframe;
+
+			$.each(iframeSt.patterns, function() {
+				if(embedSrc.indexOf( this.index ) > -1) {
+					if(this.id) {
+						if(typeof this.id === 'string') {
+							embedSrc = embedSrc.substr(embedSrc.lastIndexOf(this.id)+this.id.length, embedSrc.length);
+						} else {
+							embedSrc = this.id.call( this, embedSrc );
+						}
+					}
+					embedSrc = this.src.replace('%id%', embedSrc );
+					return false; // break;
+				}
+			});
+
+			var dataObj = {};
+			if(iframeSt.srcAction) {
+				dataObj[iframeSt.srcAction] = embedSrc;
+			}
+			mfp._parseMarkup(template, dataObj, item);
+
+			mfp.updateStatus('ready');
+
+			return template;
+		}
+	}
+});
+
+
+
+/*>>iframe*/
+
+/*>>gallery*/
+/**
+ * Get looped index depending on number of slides
+ */
+var _getLoopedId = function(index) {
+		var numSlides = mfp.items.length;
+		if(index > numSlides - 1) {
+			return index - numSlides;
+		} else  if(index < 0) {
+			return numSlides + index;
+		}
+		return index;
+	},
+	_replaceCurrTotal = function(text, curr, total) {
+		return text.replace(/%curr%/gi, curr + 1).replace(/%total%/gi, total);
+	};
+
+$.magnificPopup.registerModule('gallery', {
+
+	options: {
+		enabled: false,
+		arrowMarkup: '<button title="%title%" type="button" class="mfp-arrow mfp-arrow-%dir%"></button>',
+		preload: [0,2],
+		navigateByImgClick: true,
+		arrows: true,
+
+		tPrev: 'Previous (Left arrow key)',
+		tNext: 'Next (Right arrow key)',
+		tCounter: '%curr% of %total%'
+	},
+
+	proto: {
+		initGallery: function() {
+
+			var gSt = mfp.st.gallery,
+				ns = '.mfp-gallery';
+
+			mfp.direction = true; // true - next, false - prev
+
+			if(!gSt || !gSt.enabled ) return false;
+
+			_wrapClasses += ' mfp-gallery';
+
+			_mfpOn(OPEN_EVENT+ns, function() {
+
+				if(gSt.navigateByImgClick) {
+					mfp.wrap.on('click'+ns, '.mfp-img', function() {
+						if(mfp.items.length > 1) {
+							mfp.next();
+							return false;
+						}
+					});
+				}
+
+				_document.on('keydown'+ns, function(e) {
+					if (e.keyCode === 37) {
+						mfp.prev();
+					} else if (e.keyCode === 39) {
+						mfp.next();
+					}
+				});
+			});
+
+			_mfpOn('UpdateStatus'+ns, function(e, data) {
+				if(data.text) {
+					data.text = _replaceCurrTotal(data.text, mfp.currItem.index, mfp.items.length);
+				}
+			});
+
+			_mfpOn(MARKUP_PARSE_EVENT+ns, function(e, element, values, item) {
+				var l = mfp.items.length;
+				values.counter = l > 1 ? _replaceCurrTotal(gSt.tCounter, item.index, l) : '';
+			});
+
+			_mfpOn('BuildControls' + ns, function() {
+				if(mfp.items.length > 1 && gSt.arrows && !mfp.arrowLeft) {
+					var markup = gSt.arrowMarkup,
+						arrowLeft = mfp.arrowLeft = $( markup.replace(/%title%/gi, gSt.tPrev).replace(/%dir%/gi, 'left') ).addClass(PREVENT_CLOSE_CLASS),
+						arrowRight = mfp.arrowRight = $( markup.replace(/%title%/gi, gSt.tNext).replace(/%dir%/gi, 'right') ).addClass(PREVENT_CLOSE_CLASS);
+
+					arrowLeft.click(function() {
+						mfp.prev();
+					});
+					arrowRight.click(function() {
+						mfp.next();
+					});
+
+					mfp.container.append(arrowLeft.add(arrowRight));
+				}
+			});
+
+			_mfpOn(CHANGE_EVENT+ns, function() {
+				if(mfp._preloadTimeout) clearTimeout(mfp._preloadTimeout);
+
+				mfp._preloadTimeout = setTimeout(function() {
+					mfp.preloadNearbyImages();
+					mfp._preloadTimeout = null;
+				}, 16);
+			});
+
+
+			_mfpOn(CLOSE_EVENT+ns, function() {
+				_document.off(ns);
+				mfp.wrap.off('click'+ns);
+				mfp.arrowRight = mfp.arrowLeft = null;
+			});
+
+		},
+		next: function() {
+			mfp.direction = true;
+			mfp.index = _getLoopedId(mfp.index + 1);
+			mfp.updateItemHTML();
+		},
+		prev: function() {
+			mfp.direction = false;
+			mfp.index = _getLoopedId(mfp.index - 1);
+			mfp.updateItemHTML();
+		},
+		goTo: function(newIndex) {
+			mfp.direction = (newIndex >= mfp.index);
+			mfp.index = newIndex;
+			mfp.updateItemHTML();
+		},
+		preloadNearbyImages: function() {
+			var p = mfp.st.gallery.preload,
+				preloadBefore = Math.min(p[0], mfp.items.length),
+				preloadAfter = Math.min(p[1], mfp.items.length),
+				i;
+
+			for(i = 1; i <= (mfp.direction ? preloadAfter : preloadBefore); i++) {
+				mfp._preloadItem(mfp.index+i);
+			}
+			for(i = 1; i <= (mfp.direction ? preloadBefore : preloadAfter); i++) {
+				mfp._preloadItem(mfp.index-i);
+			}
+		},
+		_preloadItem: function(index) {
+			index = _getLoopedId(index);
+
+			if(mfp.items[index].preloaded) {
+				return;
+			}
+
+			var item = mfp.items[index];
+			if(!item.parsed) {
+				item = mfp.parseEl( index );
+			}
+
+			_mfpTrigger('LazyLoad', item);
+
+			if(item.type === 'image') {
+				item.img = $('<img class="mfp-img" />').on('load.mfploader', function() {
+					item.hasSize = true;
+				}).on('error.mfploader', function() {
+					item.hasSize = true;
+					item.loadError = true;
+					_mfpTrigger('LazyLoadError', item);
+				}).attr('src', item.src);
+			}
+
+
+			item.preloaded = true;
+		}
+	}
+});
+
+/*>>gallery*/
+
+/*>>retina*/
+
+var RETINA_NS = 'retina';
+
+$.magnificPopup.registerModule(RETINA_NS, {
+	options: {
+		replaceSrc: function(item) {
+			return item.src.replace(/\.\w+$/, function(m) { return '@2x' + m; });
+		},
+		ratio: 1 // Function or number.  Set to 1 to disable.
+	},
+	proto: {
+		initRetina: function() {
+			if(window.devicePixelRatio > 1) {
+
+				var st = mfp.st.retina,
+					ratio = st.ratio;
+
+				ratio = !isNaN(ratio) ? ratio : ratio();
+
+				if(ratio > 1) {
+					_mfpOn('ImageHasSize' + '.' + RETINA_NS, function(e, item) {
+						item.img.css({
+							'max-width': item.img[0].naturalWidth / ratio,
+							'width': '100%'
+						});
+					});
+					_mfpOn('ElementParse' + '.' + RETINA_NS, function(e, item) {
+						item.src = st.replaceSrc(item, ratio);
+					});
+				}
+			}
+
+		}
+	}
+});
+
+/*>>retina*/
+ _checkInstance(); }));
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/dist/jquery.magnific-popup.min.js b/vendor/dimsemenov/magnific-popup/dist/jquery.magnific-popup.min.js
new file mode 100644
index 0000000000..6ee3a3bd5b
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/dist/jquery.magnific-popup.min.js
@@ -0,0 +1,4 @@
+/*! Magnific Popup - v1.1.0 - 2016-02-20
+* http://dimsemenov.com/plugins/magnific-popup/
+* Copyright (c) 2016 Dmitry Semenov; */
+!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):window.jQuery||window.Zepto)}(function(a){var b,c,d,e,f,g,h="Close",i="BeforeClose",j="AfterClose",k="BeforeAppend",l="MarkupParse",m="Open",n="Change",o="mfp",p="."+o,q="mfp-ready",r="mfp-removing",s="mfp-prevent-close",t=function(){},u=!!window.jQuery,v=a(window),w=function(a,c){b.ev.on(o+a+p,c)},x=function(b,c,d,e){var f=document.createElement("div");return f.className="mfp-"+b,d&&(f.innerHTML=d),e?c&&c.appendChild(f):(f=a(f),c&&f.appendTo(c)),f},y=function(c,d){b.ev.triggerHandler(o+c,d),b.st.callbacks&&(c=c.charAt(0).toLowerCase()+c.slice(1),b.st.callbacks[c]&&b.st.callbacks[c].apply(b,a.isArray(d)?d:[d]))},z=function(c){return c===g&&b.currTemplate.closeBtn||(b.currTemplate.closeBtn=a(b.st.closeMarkup.replace("%title%",b.st.tClose)),g=c),b.currTemplate.closeBtn},A=function(){a.magnificPopup.instance||(b=new t,b.init(),a.magnificPopup.instance=b)},B=function(){var a=document.createElement("p").style,b=["ms","O","Moz","Webkit"];if(void 0!==a.transition)return!0;for(;b.length;)if(b.pop()+"Transition"in a)return!0;return!1};t.prototype={constructor:t,init:function(){var c=navigator.appVersion;b.isLowIE=b.isIE8=document.all&&!document.addEventListener,b.isAndroid=/android/gi.test(c),b.isIOS=/iphone|ipad|ipod/gi.test(c),b.supportsTransition=B(),b.probablyMobile=b.isAndroid||b.isIOS||/(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent),d=a(document),b.popupsCache={}},open:function(c){var e;if(c.isObj===!1){b.items=c.items.toArray(),b.index=0;var g,h=c.items;for(e=0;e<h.length;e++)if(g=h[e],g.parsed&&(g=g.el[0]),g===c.el[0]){b.index=e;break}}else b.items=a.isArray(c.items)?c.items:[c.items],b.index=c.index||0;if(b.isOpen)return void b.updateItemHTML();b.types=[],f="",c.mainEl&&c.mainEl.length?b.ev=c.mainEl.eq(0):b.ev=d,c.key?(b.popupsCache[c.key]||(b.popupsCache[c.key]={}),b.currTemplate=b.popupsCache[c.key]):b.currTemplate={},b.st=a.extend(!0,{},a.magnificPopup.defaults,c),b.fixedContentPos="auto"===b.st.fixedContentPos?!b.probablyMobile:b.st.fixedContentPos,b.st.modal&&(b.st.closeOnContentClick=!1,b.st.closeOnBgClick=!1,b.st.showCloseBtn=!1,b.st.enableEscapeKey=!1),b.bgOverlay||(b.bgOverlay=x("bg").on("click"+p,function(){b.close()}),b.wrap=x("wrap").attr("tabindex",-1).on("click"+p,function(a){b._checkIfClose(a.target)&&b.close()}),b.container=x("container",b.wrap)),b.contentContainer=x("content"),b.st.preloader&&(b.preloader=x("preloader",b.container,b.st.tLoading));var i=a.magnificPopup.modules;for(e=0;e<i.length;e++){var j=i[e];j=j.charAt(0).toUpperCase()+j.slice(1),b["init"+j].call(b)}y("BeforeOpen"),b.st.showCloseBtn&&(b.st.closeBtnInside?(w(l,function(a,b,c,d){c.close_replaceWith=z(d.type)}),f+=" mfp-close-btn-in"):b.wrap.append(z())),b.st.alignTop&&(f+=" mfp-align-top"),b.fixedContentPos?b.wrap.css({overflow:b.st.overflowY,overflowX:"hidden",overflowY:b.st.overflowY}):b.wrap.css({top:v.scrollTop(),position:"absolute"}),(b.st.fixedBgPos===!1||"auto"===b.st.fixedBgPos&&!b.fixedContentPos)&&b.bgOverlay.css({height:d.height(),position:"absolute"}),b.st.enableEscapeKey&&d.on("keyup"+p,function(a){27===a.keyCode&&b.close()}),v.on("resize"+p,function(){b.updateSize()}),b.st.closeOnContentClick||(f+=" mfp-auto-cursor"),f&&b.wrap.addClass(f);var k=b.wH=v.height(),n={};if(b.fixedContentPos&&b._hasScrollBar(k)){var o=b._getScrollbarSize();o&&(n.marginRight=o)}b.fixedContentPos&&(b.isIE7?a("body, html").css("overflow","hidden"):n.overflow="hidden");var r=b.st.mainClass;return b.isIE7&&(r+=" mfp-ie7"),r&&b._addClassToMFP(r),b.updateItemHTML(),y("BuildControls"),a("html").css(n),b.bgOverlay.add(b.wrap).prependTo(b.st.prependTo||a(document.body)),b._lastFocusedEl=document.activeElement,setTimeout(function(){b.content?(b._addClassToMFP(q),b._setFocus()):b.bgOverlay.addClass(q),d.on("focusin"+p,b._onFocusIn)},16),b.isOpen=!0,b.updateSize(k),y(m),c},close:function(){b.isOpen&&(y(i),b.isOpen=!1,b.st.removalDelay&&!b.isLowIE&&b.supportsTransition?(b._addClassToMFP(r),setTimeout(function(){b._close()},b.st.removalDelay)):b._close())},_close:function(){y(h);var c=r+" "+q+" ";if(b.bgOverlay.detach(),b.wrap.detach(),b.container.empty(),b.st.mainClass&&(c+=b.st.mainClass+" "),b._removeClassFromMFP(c),b.fixedContentPos){var e={marginRight:""};b.isIE7?a("body, html").css("overflow",""):e.overflow="",a("html").css(e)}d.off("keyup"+p+" focusin"+p),b.ev.off(p),b.wrap.attr("class","mfp-wrap").removeAttr("style"),b.bgOverlay.attr("class","mfp-bg"),b.container.attr("class","mfp-container"),!b.st.showCloseBtn||b.st.closeBtnInside&&b.currTemplate[b.currItem.type]!==!0||b.currTemplate.closeBtn&&b.currTemplate.closeBtn.detach(),b.st.autoFocusLast&&b._lastFocusedEl&&a(b._lastFocusedEl).focus(),b.currItem=null,b.content=null,b.currTemplate=null,b.prevHeight=0,y(j)},updateSize:function(a){if(b.isIOS){var c=document.documentElement.clientWidth/window.innerWidth,d=window.innerHeight*c;b.wrap.css("height",d),b.wH=d}else b.wH=a||v.height();b.fixedContentPos||b.wrap.css("height",b.wH),y("Resize")},updateItemHTML:function(){var c=b.items[b.index];b.contentContainer.detach(),b.content&&b.content.detach(),c.parsed||(c=b.parseEl(b.index));var d=c.type;if(y("BeforeChange",[b.currItem?b.currItem.type:"",d]),b.currItem=c,!b.currTemplate[d]){var f=b.st[d]?b.st[d].markup:!1;y("FirstMarkupParse",f),f?b.currTemplate[d]=a(f):b.currTemplate[d]=!0}e&&e!==c.type&&b.container.removeClass("mfp-"+e+"-holder");var g=b["get"+d.charAt(0).toUpperCase()+d.slice(1)](c,b.currTemplate[d]);b.appendContent(g,d),c.preloaded=!0,y(n,c),e=c.type,b.container.prepend(b.contentContainer),y("AfterChange")},appendContent:function(a,c){b.content=a,a?b.st.showCloseBtn&&b.st.closeBtnInside&&b.currTemplate[c]===!0?b.content.find(".mfp-close").length||b.content.append(z()):b.content=a:b.content="",y(k),b.container.addClass("mfp-"+c+"-holder"),b.contentContainer.append(b.content)},parseEl:function(c){var d,e=b.items[c];if(e.tagName?e={el:a(e)}:(d=e.type,e={data:e,src:e.src}),e.el){for(var f=b.types,g=0;g<f.length;g++)if(e.el.hasClass("mfp-"+f[g])){d=f[g];break}e.src=e.el.attr("data-mfp-src"),e.src||(e.src=e.el.attr("href"))}return e.type=d||b.st.type||"inline",e.index=c,e.parsed=!0,b.items[c]=e,y("ElementParse",e),b.items[c]},addGroup:function(a,c){var d=function(d){d.mfpEl=this,b._openClick(d,a,c)};c||(c={});var e="click.magnificPopup";c.mainEl=a,c.items?(c.isObj=!0,a.off(e).on(e,d)):(c.isObj=!1,c.delegate?a.off(e).on(e,c.delegate,d):(c.items=a,a.off(e).on(e,d)))},_openClick:function(c,d,e){var f=void 0!==e.midClick?e.midClick:a.magnificPopup.defaults.midClick;if(f||!(2===c.which||c.ctrlKey||c.metaKey||c.altKey||c.shiftKey)){var g=void 0!==e.disableOn?e.disableOn:a.magnificPopup.defaults.disableOn;if(g)if(a.isFunction(g)){if(!g.call(b))return!0}else if(v.width()<g)return!0;c.type&&(c.preventDefault(),b.isOpen&&c.stopPropagation()),e.el=a(c.mfpEl),e.delegate&&(e.items=d.find(e.delegate)),b.open(e)}},updateStatus:function(a,d){if(b.preloader){c!==a&&b.container.removeClass("mfp-s-"+c),d||"loading"!==a||(d=b.st.tLoading);var e={status:a,text:d};y("UpdateStatus",e),a=e.status,d=e.text,b.preloader.html(d),b.preloader.find("a").on("click",function(a){a.stopImmediatePropagation()}),b.container.addClass("mfp-s-"+a),c=a}},_checkIfClose:function(c){if(!a(c).hasClass(s)){var d=b.st.closeOnContentClick,e=b.st.closeOnBgClick;if(d&&e)return!0;if(!b.content||a(c).hasClass("mfp-close")||b.preloader&&c===b.preloader[0])return!0;if(c===b.content[0]||a.contains(b.content[0],c)){if(d)return!0}else if(e&&a.contains(document,c))return!0;return!1}},_addClassToMFP:function(a){b.bgOverlay.addClass(a),b.wrap.addClass(a)},_removeClassFromMFP:function(a){this.bgOverlay.removeClass(a),b.wrap.removeClass(a)},_hasScrollBar:function(a){return(b.isIE7?d.height():document.body.scrollHeight)>(a||v.height())},_setFocus:function(){(b.st.focus?b.content.find(b.st.focus).eq(0):b.wrap).focus()},_onFocusIn:function(c){return c.target===b.wrap[0]||a.contains(b.wrap[0],c.target)?void 0:(b._setFocus(),!1)},_parseMarkup:function(b,c,d){var e;d.data&&(c=a.extend(d.data,c)),y(l,[b,c,d]),a.each(c,function(c,d){if(void 0===d||d===!1)return!0;if(e=c.split("_"),e.length>1){var f=b.find(p+"-"+e[0]);if(f.length>0){var g=e[1];"replaceWith"===g?f[0]!==d[0]&&f.replaceWith(d):"img"===g?f.is("img")?f.attr("src",d):f.replaceWith(a("<img>").attr("src",d).attr("class",f.attr("class"))):f.attr(e[1],d)}}else b.find(p+"-"+c).html(d)})},_getScrollbarSize:function(){if(void 0===b.scrollbarSize){var a=document.createElement("div");a.style.cssText="width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;",document.body.appendChild(a),b.scrollbarSize=a.offsetWidth-a.clientWidth,document.body.removeChild(a)}return b.scrollbarSize}},a.magnificPopup={instance:null,proto:t.prototype,modules:[],open:function(b,c){return A(),b=b?a.extend(!0,{},b):{},b.isObj=!0,b.index=c||0,this.instance.open(b)},close:function(){return a.magnificPopup.instance&&a.magnificPopup.instance.close()},registerModule:function(b,c){c.options&&(a.magnificPopup.defaults[b]=c.options),a.extend(this.proto,c.proto),this.modules.push(b)},defaults:{disableOn:0,key:null,midClick:!1,mainClass:"",preloader:!0,focus:"",closeOnContentClick:!1,closeOnBgClick:!0,closeBtnInside:!0,showCloseBtn:!0,enableEscapeKey:!0,modal:!1,alignTop:!1,removalDelay:0,prependTo:null,fixedContentPos:"auto",fixedBgPos:"auto",overflowY:"auto",closeMarkup:'<button title="%title%" type="button" class="mfp-close">&#215;</button>',tClose:"Close (Esc)",tLoading:"Loading...",autoFocusLast:!0}},a.fn.magnificPopup=function(c){A();var d=a(this);if("string"==typeof c)if("open"===c){var e,f=u?d.data("magnificPopup"):d[0].magnificPopup,g=parseInt(arguments[1],10)||0;f.items?e=f.items[g]:(e=d,f.delegate&&(e=e.find(f.delegate)),e=e.eq(g)),b._openClick({mfpEl:e},d,f)}else b.isOpen&&b[c].apply(b,Array.prototype.slice.call(arguments,1));else c=a.extend(!0,{},c),u?d.data("magnificPopup",c):d[0].magnificPopup=c,b.addGroup(d,c);return d};var C,D,E,F="inline",G=function(){E&&(D.after(E.addClass(C)).detach(),E=null)};a.magnificPopup.registerModule(F,{options:{hiddenClass:"hide",markup:"",tNotFound:"Content not found"},proto:{initInline:function(){b.types.push(F),w(h+"."+F,function(){G()})},getInline:function(c,d){if(G(),c.src){var e=b.st.inline,f=a(c.src);if(f.length){var g=f[0].parentNode;g&&g.tagName&&(D||(C=e.hiddenClass,D=x(C),C="mfp-"+C),E=f.after(D).detach().removeClass(C)),b.updateStatus("ready")}else b.updateStatus("error",e.tNotFound),f=a("<div>");return c.inlineElement=f,f}return b.updateStatus("ready"),b._parseMarkup(d,{},c),d}}});var H,I="ajax",J=function(){H&&a(document.body).removeClass(H)},K=function(){J(),b.req&&b.req.abort()};a.magnificPopup.registerModule(I,{options:{settings:null,cursor:"mfp-ajax-cur",tError:'<a href="%url%">The content</a> could not be loaded.'},proto:{initAjax:function(){b.types.push(I),H=b.st.ajax.cursor,w(h+"."+I,K),w("BeforeChange."+I,K)},getAjax:function(c){H&&a(document.body).addClass(H),b.updateStatus("loading");var d=a.extend({url:c.src,success:function(d,e,f){var g={data:d,xhr:f};y("ParseAjax",g),b.appendContent(a(g.data),I),c.finished=!0,J(),b._setFocus(),setTimeout(function(){b.wrap.addClass(q)},16),b.updateStatus("ready"),y("AjaxContentAdded")},error:function(){J(),c.finished=c.loadError=!0,b.updateStatus("error",b.st.ajax.tError.replace("%url%",c.src))}},b.st.ajax.settings);return b.req=a.ajax(d),""}}});var L,M=function(c){if(c.data&&void 0!==c.data.title)return c.data.title;var d=b.st.image.titleSrc;if(d){if(a.isFunction(d))return d.call(b,c);if(c.el)return c.el.attr(d)||""}return""};a.magnificPopup.registerModule("image",{options:{markup:'<div class="mfp-figure"><div class="mfp-close"></div><figure><div class="mfp-img"></div><figcaption><div class="mfp-bottom-bar"><div class="mfp-title"></div><div class="mfp-counter"></div></div></figcaption></figure></div>',cursor:"mfp-zoom-out-cur",titleSrc:"title",verticalFit:!0,tError:'<a href="%url%">The image</a> could not be loaded.'},proto:{initImage:function(){var c=b.st.image,d=".image";b.types.push("image"),w(m+d,function(){"image"===b.currItem.type&&c.cursor&&a(document.body).addClass(c.cursor)}),w(h+d,function(){c.cursor&&a(document.body).removeClass(c.cursor),v.off("resize"+p)}),w("Resize"+d,b.resizeImage),b.isLowIE&&w("AfterChange",b.resizeImage)},resizeImage:function(){var a=b.currItem;if(a&&a.img&&b.st.image.verticalFit){var c=0;b.isLowIE&&(c=parseInt(a.img.css("padding-top"),10)+parseInt(a.img.css("padding-bottom"),10)),a.img.css("max-height",b.wH-c)}},_onImageHasSize:function(a){a.img&&(a.hasSize=!0,L&&clearInterval(L),a.isCheckingImgSize=!1,y("ImageHasSize",a),a.imgHidden&&(b.content&&b.content.removeClass("mfp-loading"),a.imgHidden=!1))},findImageSize:function(a){var c=0,d=a.img[0],e=function(f){L&&clearInterval(L),L=setInterval(function(){return d.naturalWidth>0?void b._onImageHasSize(a):(c>200&&clearInterval(L),c++,void(3===c?e(10):40===c?e(50):100===c&&e(500)))},f)};e(1)},getImage:function(c,d){var e=0,f=function(){c&&(c.img[0].complete?(c.img.off(".mfploader"),c===b.currItem&&(b._onImageHasSize(c),b.updateStatus("ready")),c.hasSize=!0,c.loaded=!0,y("ImageLoadComplete")):(e++,200>e?setTimeout(f,100):g()))},g=function(){c&&(c.img.off(".mfploader"),c===b.currItem&&(b._onImageHasSize(c),b.updateStatus("error",h.tError.replace("%url%",c.src))),c.hasSize=!0,c.loaded=!0,c.loadError=!0)},h=b.st.image,i=d.find(".mfp-img");if(i.length){var j=document.createElement("img");j.className="mfp-img",c.el&&c.el.find("img").length&&(j.alt=c.el.find("img").attr("alt")),c.img=a(j).on("load.mfploader",f).on("error.mfploader",g),j.src=c.src,i.is("img")&&(c.img=c.img.clone()),j=c.img[0],j.naturalWidth>0?c.hasSize=!0:j.width||(c.hasSize=!1)}return b._parseMarkup(d,{title:M(c),img_replaceWith:c.img},c),b.resizeImage(),c.hasSize?(L&&clearInterval(L),c.loadError?(d.addClass("mfp-loading"),b.updateStatus("error",h.tError.replace("%url%",c.src))):(d.removeClass("mfp-loading"),b.updateStatus("ready")),d):(b.updateStatus("loading"),c.loading=!0,c.hasSize||(c.imgHidden=!0,d.addClass("mfp-loading"),b.findImageSize(c)),d)}}});var N,O=function(){return void 0===N&&(N=void 0!==document.createElement("p").style.MozTransform),N};a.magnificPopup.registerModule("zoom",{options:{enabled:!1,easing:"ease-in-out",duration:300,opener:function(a){return a.is("img")?a:a.find("img")}},proto:{initZoom:function(){var a,c=b.st.zoom,d=".zoom";if(c.enabled&&b.supportsTransition){var e,f,g=c.duration,j=function(a){var b=a.clone().removeAttr("style").removeAttr("class").addClass("mfp-animated-image"),d="all "+c.duration/1e3+"s "+c.easing,e={position:"fixed",zIndex:9999,left:0,top:0,"-webkit-backface-visibility":"hidden"},f="transition";return e["-webkit-"+f]=e["-moz-"+f]=e["-o-"+f]=e[f]=d,b.css(e),b},k=function(){b.content.css("visibility","visible")};w("BuildControls"+d,function(){if(b._allowZoom()){if(clearTimeout(e),b.content.css("visibility","hidden"),a=b._getItemToZoom(),!a)return void k();f=j(a),f.css(b._getOffset()),b.wrap.append(f),e=setTimeout(function(){f.css(b._getOffset(!0)),e=setTimeout(function(){k(),setTimeout(function(){f.remove(),a=f=null,y("ZoomAnimationEnded")},16)},g)},16)}}),w(i+d,function(){if(b._allowZoom()){if(clearTimeout(e),b.st.removalDelay=g,!a){if(a=b._getItemToZoom(),!a)return;f=j(a)}f.css(b._getOffset(!0)),b.wrap.append(f),b.content.css("visibility","hidden"),setTimeout(function(){f.css(b._getOffset())},16)}}),w(h+d,function(){b._allowZoom()&&(k(),f&&f.remove(),a=null)})}},_allowZoom:function(){return"image"===b.currItem.type},_getItemToZoom:function(){return b.currItem.hasSize?b.currItem.img:!1},_getOffset:function(c){var d;d=c?b.currItem.img:b.st.zoom.opener(b.currItem.el||b.currItem);var e=d.offset(),f=parseInt(d.css("padding-top"),10),g=parseInt(d.css("padding-bottom"),10);e.top-=a(window).scrollTop()-f;var h={width:d.width(),height:(u?d.innerHeight():d[0].offsetHeight)-g-f};return O()?h["-moz-transform"]=h.transform="translate("+e.left+"px,"+e.top+"px)":(h.left=e.left,h.top=e.top),h}}});var P="iframe",Q="//about:blank",R=function(a){if(b.currTemplate[P]){var c=b.currTemplate[P].find("iframe");c.length&&(a||(c[0].src=Q),b.isIE8&&c.css("display",a?"block":"none"))}};a.magnificPopup.registerModule(P,{options:{markup:'<div class="mfp-iframe-scaler"><div class="mfp-close"></div><iframe class="mfp-iframe" src="//about:blank" frameborder="0" allowfullscreen></iframe></div>',srcAction:"iframe_src",patterns:{youtube:{index:"youtube.com",id:"v=",src:"//www.youtube.com/embed/%id%?autoplay=1"},vimeo:{index:"vimeo.com/",id:"/",src:"//player.vimeo.com/video/%id%?autoplay=1"},gmaps:{index:"//maps.google.",src:"%id%&output=embed"}}},proto:{initIframe:function(){b.types.push(P),w("BeforeChange",function(a,b,c){b!==c&&(b===P?R():c===P&&R(!0))}),w(h+"."+P,function(){R()})},getIframe:function(c,d){var e=c.src,f=b.st.iframe;a.each(f.patterns,function(){return e.indexOf(this.index)>-1?(this.id&&(e="string"==typeof this.id?e.substr(e.lastIndexOf(this.id)+this.id.length,e.length):this.id.call(this,e)),e=this.src.replace("%id%",e),!1):void 0});var g={};return f.srcAction&&(g[f.srcAction]=e),b._parseMarkup(d,g,c),b.updateStatus("ready"),d}}});var S=function(a){var c=b.items.length;return a>c-1?a-c:0>a?c+a:a},T=function(a,b,c){return a.replace(/%curr%/gi,b+1).replace(/%total%/gi,c)};a.magnificPopup.registerModule("gallery",{options:{enabled:!1,arrowMarkup:'<button title="%title%" type="button" class="mfp-arrow mfp-arrow-%dir%"></button>',preload:[0,2],navigateByImgClick:!0,arrows:!0,tPrev:"Previous (Left arrow key)",tNext:"Next (Right arrow key)",tCounter:"%curr% of %total%"},proto:{initGallery:function(){var c=b.st.gallery,e=".mfp-gallery";return b.direction=!0,c&&c.enabled?(f+=" mfp-gallery",w(m+e,function(){c.navigateByImgClick&&b.wrap.on("click"+e,".mfp-img",function(){return b.items.length>1?(b.next(),!1):void 0}),d.on("keydown"+e,function(a){37===a.keyCode?b.prev():39===a.keyCode&&b.next()})}),w("UpdateStatus"+e,function(a,c){c.text&&(c.text=T(c.text,b.currItem.index,b.items.length))}),w(l+e,function(a,d,e,f){var g=b.items.length;e.counter=g>1?T(c.tCounter,f.index,g):""}),w("BuildControls"+e,function(){if(b.items.length>1&&c.arrows&&!b.arrowLeft){var d=c.arrowMarkup,e=b.arrowLeft=a(d.replace(/%title%/gi,c.tPrev).replace(/%dir%/gi,"left")).addClass(s),f=b.arrowRight=a(d.replace(/%title%/gi,c.tNext).replace(/%dir%/gi,"right")).addClass(s);e.click(function(){b.prev()}),f.click(function(){b.next()}),b.container.append(e.add(f))}}),w(n+e,function(){b._preloadTimeout&&clearTimeout(b._preloadTimeout),b._preloadTimeout=setTimeout(function(){b.preloadNearbyImages(),b._preloadTimeout=null},16)}),void w(h+e,function(){d.off(e),b.wrap.off("click"+e),b.arrowRight=b.arrowLeft=null})):!1},next:function(){b.direction=!0,b.index=S(b.index+1),b.updateItemHTML()},prev:function(){b.direction=!1,b.index=S(b.index-1),b.updateItemHTML()},goTo:function(a){b.direction=a>=b.index,b.index=a,b.updateItemHTML()},preloadNearbyImages:function(){var a,c=b.st.gallery.preload,d=Math.min(c[0],b.items.length),e=Math.min(c[1],b.items.length);for(a=1;a<=(b.direction?e:d);a++)b._preloadItem(b.index+a);for(a=1;a<=(b.direction?d:e);a++)b._preloadItem(b.index-a)},_preloadItem:function(c){if(c=S(c),!b.items[c].preloaded){var d=b.items[c];d.parsed||(d=b.parseEl(c)),y("LazyLoad",d),"image"===d.type&&(d.img=a('<img class="mfp-img" />').on("load.mfploader",function(){d.hasSize=!0}).on("error.mfploader",function(){d.hasSize=!0,d.loadError=!0,y("LazyLoadError",d)}).attr("src",d.src)),d.preloaded=!0}}}});var U="retina";a.magnificPopup.registerModule(U,{options:{replaceSrc:function(a){return a.src.replace(/\.\w+$/,function(a){return"@2x"+a})},ratio:1},proto:{initRetina:function(){if(window.devicePixelRatio>1){var a=b.st.retina,c=a.ratio;c=isNaN(c)?c():c,c>1&&(w("ImageHasSize."+U,function(a,b){b.img.css({"max-width":b.img[0].naturalWidth/c,width:"100%"})}),w("ElementParse."+U,function(b,d){d.src=a.replaceSrc(d,c)}))}}}}),A()});
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/dist/magnific-popup.css b/vendor/dimsemenov/magnific-popup/dist/magnific-popup.css
new file mode 100644
index 0000000000..8561e181ad
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/dist/magnific-popup.css
@@ -0,0 +1,351 @@
+/* Magnific Popup CSS */
+.mfp-bg {
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  z-index: 1042;
+  overflow: hidden;
+  position: fixed;
+  background: #0b0b0b;
+  opacity: 0.8; }
+
+.mfp-wrap {
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  z-index: 1043;
+  position: fixed;
+  outline: none !important;
+  -webkit-backface-visibility: hidden; }
+
+.mfp-container {
+  text-align: center;
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  left: 0;
+  top: 0;
+  padding: 0 8px;
+  box-sizing: border-box; }
+
+.mfp-container:before {
+  content: '';
+  display: inline-block;
+  height: 100%;
+  vertical-align: middle; }
+
+.mfp-align-top .mfp-container:before {
+  display: none; }
+
+.mfp-content {
+  position: relative;
+  display: inline-block;
+  vertical-align: middle;
+  margin: 0 auto;
+  text-align: left;
+  z-index: 1045; }
+
+.mfp-inline-holder .mfp-content,
+.mfp-ajax-holder .mfp-content {
+  width: 100%;
+  cursor: auto; }
+
+.mfp-ajax-cur {
+  cursor: progress; }
+
+.mfp-zoom-out-cur, .mfp-zoom-out-cur .mfp-image-holder .mfp-close {
+  cursor: -moz-zoom-out;
+  cursor: -webkit-zoom-out;
+  cursor: zoom-out; }
+
+.mfp-zoom {
+  cursor: pointer;
+  cursor: -webkit-zoom-in;
+  cursor: -moz-zoom-in;
+  cursor: zoom-in; }
+
+.mfp-auto-cursor .mfp-content {
+  cursor: auto; }
+
+.mfp-close,
+.mfp-arrow,
+.mfp-preloader,
+.mfp-counter {
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  user-select: none; }
+
+.mfp-loading.mfp-figure {
+  display: none; }
+
+.mfp-hide {
+  display: none !important; }
+
+.mfp-preloader {
+  color: #CCC;
+  position: absolute;
+  top: 50%;
+  width: auto;
+  text-align: center;
+  margin-top: -0.8em;
+  left: 8px;
+  right: 8px;
+  z-index: 1044; }
+  .mfp-preloader a {
+    color: #CCC; }
+    .mfp-preloader a:hover {
+      color: #FFF; }
+
+.mfp-s-ready .mfp-preloader {
+  display: none; }
+
+.mfp-s-error .mfp-content {
+  display: none; }
+
+button.mfp-close,
+button.mfp-arrow {
+  overflow: visible;
+  cursor: pointer;
+  background: transparent;
+  border: 0;
+  -webkit-appearance: none;
+  display: block;
+  outline: none;
+  padding: 0;
+  z-index: 1046;
+  box-shadow: none;
+  touch-action: manipulation; }
+
+button::-moz-focus-inner {
+  padding: 0;
+  border: 0; }
+
+.mfp-close {
+  width: 44px;
+  height: 44px;
+  line-height: 44px;
+  position: absolute;
+  right: 0;
+  top: 0;
+  text-decoration: none;
+  text-align: center;
+  opacity: 0.65;
+  padding: 0 0 18px 10px;
+  color: #FFF;
+  font-style: normal;
+  font-size: 28px;
+  font-family: Arial, Baskerville, monospace; }
+  .mfp-close:hover,
+  .mfp-close:focus {
+    opacity: 1; }
+  .mfp-close:active {
+    top: 1px; }
+
+.mfp-close-btn-in .mfp-close {
+  color: #333; }
+
+.mfp-image-holder .mfp-close,
+.mfp-iframe-holder .mfp-close {
+  color: #FFF;
+  right: -6px;
+  text-align: right;
+  padding-right: 6px;
+  width: 100%; }
+
+.mfp-counter {
+  position: absolute;
+  top: 0;
+  right: 0;
+  color: #CCC;
+  font-size: 12px;
+  line-height: 18px;
+  white-space: nowrap; }
+
+.mfp-arrow {
+  position: absolute;
+  opacity: 0.65;
+  margin: 0;
+  top: 50%;
+  margin-top: -55px;
+  padding: 0;
+  width: 90px;
+  height: 110px;
+  -webkit-tap-highlight-color: transparent; }
+  .mfp-arrow:active {
+    margin-top: -54px; }
+  .mfp-arrow:hover,
+  .mfp-arrow:focus {
+    opacity: 1; }
+  .mfp-arrow:before,
+  .mfp-arrow:after {
+    content: '';
+    display: block;
+    width: 0;
+    height: 0;
+    position: absolute;
+    left: 0;
+    top: 0;
+    margin-top: 35px;
+    margin-left: 35px;
+    border: medium inset transparent; }
+  .mfp-arrow:after {
+    border-top-width: 13px;
+    border-bottom-width: 13px;
+    top: 8px; }
+  .mfp-arrow:before {
+    border-top-width: 21px;
+    border-bottom-width: 21px;
+    opacity: 0.7; }
+
+.mfp-arrow-left {
+  left: 0; }
+  .mfp-arrow-left:after {
+    border-right: 17px solid #FFF;
+    margin-left: 31px; }
+  .mfp-arrow-left:before {
+    margin-left: 25px;
+    border-right: 27px solid #3F3F3F; }
+
+.mfp-arrow-right {
+  right: 0; }
+  .mfp-arrow-right:after {
+    border-left: 17px solid #FFF;
+    margin-left: 39px; }
+  .mfp-arrow-right:before {
+    border-left: 27px solid #3F3F3F; }
+
+.mfp-iframe-holder {
+  padding-top: 40px;
+  padding-bottom: 40px; }
+  .mfp-iframe-holder .mfp-content {
+    line-height: 0;
+    width: 100%;
+    max-width: 900px; }
+  .mfp-iframe-holder .mfp-close {
+    top: -40px; }
+
+.mfp-iframe-scaler {
+  width: 100%;
+  height: 0;
+  overflow: hidden;
+  padding-top: 56.25%; }
+  .mfp-iframe-scaler iframe {
+    position: absolute;
+    display: block;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    box-shadow: 0 0 8px rgba(0, 0, 0, 0.6);
+    background: #000; }
+
+/* Main image in popup */
+img.mfp-img {
+  width: auto;
+  max-width: 100%;
+  height: auto;
+  display: block;
+  line-height: 0;
+  box-sizing: border-box;
+  padding: 40px 0 40px;
+  margin: 0 auto; }
+
+/* The shadow behind the image */
+.mfp-figure {
+  line-height: 0; }
+  .mfp-figure:after {
+    content: '';
+    position: absolute;
+    left: 0;
+    top: 40px;
+    bottom: 40px;
+    display: block;
+    right: 0;
+    width: auto;
+    height: auto;
+    z-index: -1;
+    box-shadow: 0 0 8px rgba(0, 0, 0, 0.6);
+    background: #444; }
+  .mfp-figure small {
+    color: #BDBDBD;
+    display: block;
+    font-size: 12px;
+    line-height: 14px; }
+  .mfp-figure figure {
+    margin: 0; }
+
+.mfp-bottom-bar {
+  margin-top: -36px;
+  position: absolute;
+  top: 100%;
+  left: 0;
+  width: 100%;
+  cursor: auto; }
+
+.mfp-title {
+  text-align: left;
+  line-height: 18px;
+  color: #F3F3F3;
+  word-wrap: break-word;
+  padding-right: 36px; }
+
+.mfp-image-holder .mfp-content {
+  max-width: 100%; }
+
+.mfp-gallery .mfp-image-holder .mfp-figure {
+  cursor: pointer; }
+
+@media screen and (max-width: 800px) and (orientation: landscape), screen and (max-height: 300px) {
+  /**
+       * Remove all paddings around the image on small screen
+       */
+  .mfp-img-mobile .mfp-image-holder {
+    padding-left: 0;
+    padding-right: 0; }
+  .mfp-img-mobile img.mfp-img {
+    padding: 0; }
+  .mfp-img-mobile .mfp-figure:after {
+    top: 0;
+    bottom: 0; }
+  .mfp-img-mobile .mfp-figure small {
+    display: inline;
+    margin-left: 5px; }
+  .mfp-img-mobile .mfp-bottom-bar {
+    background: rgba(0, 0, 0, 0.6);
+    bottom: 0;
+    margin: 0;
+    top: auto;
+    padding: 3px 5px;
+    position: fixed;
+    box-sizing: border-box; }
+    .mfp-img-mobile .mfp-bottom-bar:empty {
+      padding: 0; }
+  .mfp-img-mobile .mfp-counter {
+    right: 5px;
+    top: 3px; }
+  .mfp-img-mobile .mfp-close {
+    top: 0;
+    right: 0;
+    width: 35px;
+    height: 35px;
+    line-height: 35px;
+    background: rgba(0, 0, 0, 0.6);
+    position: fixed;
+    text-align: center;
+    padding: 0; } }
+
+@media all and (max-width: 900px) {
+  .mfp-arrow {
+    -webkit-transform: scale(0.75);
+    transform: scale(0.75); }
+  .mfp-arrow-left {
+    -webkit-transform-origin: 0;
+    transform-origin: 0; }
+  .mfp-arrow-right {
+    -webkit-transform-origin: 100%;
+    transform-origin: 100%; }
+  .mfp-container {
+    padding-left: 6px;
+    padding-right: 6px; } }
diff --git a/vendor/dimsemenov/magnific-popup/libs/jquery-loader.js b/vendor/dimsemenov/magnific-popup/libs/jquery-loader.js
new file mode 100644
index 0000000000..84a0601604
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/libs/jquery-loader.js
@@ -0,0 +1,12 @@
+(function() {
+  // Default to the local version.
+  var path = '../libs/jquery/jquery.js';
+  // Get any jquery=___ param from the query string.
+  var jqversion = location.search.match(/[?&]jquery=(.*?)(?=&|$)/);
+  // If a version was specified, use that version from code.jquery.com.
+  if (jqversion) {
+    path = 'http://code.jquery.com/jquery-' + jqversion[1] + '.js';
+  }
+  // This is the only time I'll ever use document.write, I promise!
+  document.write('<script src="' + path + '"></script>');
+}());
diff --git a/vendor/dimsemenov/magnific-popup/libs/jquery/jquery.js b/vendor/dimsemenov/magnific-popup/libs/jquery/jquery.js
new file mode 100644
index 0000000000..299d3e365a
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/libs/jquery/jquery.js
@@ -0,0 +1,9555 @@
+/*!
+ * jQuery JavaScript Library v1.9.0
+ * http://jquery.com/
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ *
+ * Copyright 2005, 2012 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2013-1-14
+ */
+(function( window, undefined ) {
+"use strict";
+var
+	// A central reference to the root jQuery(document)
+	rootjQuery,
+
+	// The deferred used on DOM ready
+	readyList,
+
+	// Use the correct document accordingly with window argument (sandbox)
+	document = window.document,
+	location = window.location,
+
+	// Map over jQuery in case of overwrite
+	_jQuery = window.jQuery,
+
+	// Map over the $ in case of overwrite
+	_$ = window.$,
+
+	// [[Class]] -> type pairs
+	class2type = {},
+
+	// List of deleted data cache ids, so we can reuse them
+	core_deletedIds = [],
+
+	core_version = "1.9.0",
+
+	// Save a reference to some core methods
+	core_concat = core_deletedIds.concat,
+	core_push = core_deletedIds.push,
+	core_slice = core_deletedIds.slice,
+	core_indexOf = core_deletedIds.indexOf,
+	core_toString = class2type.toString,
+	core_hasOwn = class2type.hasOwnProperty,
+	core_trim = core_version.trim,
+
+	// Define a local copy of jQuery
+	jQuery = function( selector, context ) {
+		// The jQuery object is actually just the init constructor 'enhanced'
+		return new jQuery.fn.init( selector, context, rootjQuery );
+	},
+
+	// Used for matching numbers
+	core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
+
+	// Used for splitting on whitespace
+	core_rnotwhite = /\S+/g,
+
+	// Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)
+	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+	// A simple way to check for HTML strings
+	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+	// Strict HTML recognition (#11290: must start with <)
+	rquickExpr = /^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,
+
+	// Match a standalone tag
+	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
+
+	// JSON RegExp
+	rvalidchars = /^[\],:{}\s]*$/,
+	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+	rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
+	rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,
+
+	// Matches dashed string for camelizing
+	rmsPrefix = /^-ms-/,
+	rdashAlpha = /-([\da-z])/gi,
+
+	// Used by jQuery.camelCase as callback to replace()
+	fcamelCase = function( all, letter ) {
+		return letter.toUpperCase();
+	},
+
+	// The ready event handler and self cleanup method
+	DOMContentLoaded = function() {
+		if ( document.addEventListener ) {
+			document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+			jQuery.ready();
+		} else if ( document.readyState === "complete" ) {
+			// we're here because readyState === "complete" in oldIE
+			// which is good enough for us to call the dom ready!
+			document.detachEvent( "onreadystatechange", DOMContentLoaded );
+			jQuery.ready();
+		}
+	};
+
+jQuery.fn = jQuery.prototype = {
+	// The current version of jQuery being used
+	jquery: core_version,
+
+	constructor: jQuery,
+	init: function( selector, context, rootjQuery ) {
+		var match, elem;
+
+		// HANDLE: $(""), $(null), $(undefined), $(false)
+		if ( !selector ) {
+			return this;
+		}
+
+		// Handle HTML strings
+		if ( typeof selector === "string" ) {
+			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+				// Assume that strings that start and end with <> are HTML and skip the regex check
+				match = [ null, selector, null ];
+
+			} else {
+				match = rquickExpr.exec( selector );
+			}
+
+			// Match html or make sure no context is specified for #id
+			if ( match && (match[1] || !context) ) {
+
+				// HANDLE: $(html) -> $(array)
+				if ( match[1] ) {
+					context = context instanceof jQuery ? context[0] : context;
+
+					// scripts is true for back-compat
+					jQuery.merge( this, jQuery.parseHTML(
+						match[1],
+						context && context.nodeType ? context.ownerDocument || context : document,
+						true
+					) );
+
+					// HANDLE: $(html, props)
+					if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
+						for ( match in context ) {
+							// Properties of context are called as methods if possible
+							if ( jQuery.isFunction( this[ match ] ) ) {
+								this[ match ]( context[ match ] );
+
+							// ...and otherwise set as attributes
+							} else {
+								this.attr( match, context[ match ] );
+							}
+						}
+					}
+
+					return this;
+
+				// HANDLE: $(#id)
+				} else {
+					elem = document.getElementById( match[2] );
+
+					// Check parentNode to catch when Blackberry 4.6 returns
+					// nodes that are no longer in the document #6963
+					if ( elem && elem.parentNode ) {
+						// Handle the case where IE and Opera return items
+						// by name instead of ID
+						if ( elem.id !== match[2] ) {
+							return rootjQuery.find( selector );
+						}
+
+						// Otherwise, we inject the element directly into the jQuery object
+						this.length = 1;
+						this[0] = elem;
+					}
+
+					this.context = document;
+					this.selector = selector;
+					return this;
+				}
+
+			// HANDLE: $(expr, $(...))
+			} else if ( !context || context.jquery ) {
+				return ( context || rootjQuery ).find( selector );
+
+			// HANDLE: $(expr, context)
+			// (which is just equivalent to: $(context).find(expr)
+			} else {
+				return this.constructor( context ).find( selector );
+			}
+
+		// HANDLE: $(DOMElement)
+		} else if ( selector.nodeType ) {
+			this.context = this[0] = selector;
+			this.length = 1;
+			return this;
+
+		// HANDLE: $(function)
+		// Shortcut for document ready
+		} else if ( jQuery.isFunction( selector ) ) {
+			return rootjQuery.ready( selector );
+		}
+
+		if ( selector.selector !== undefined ) {
+			this.selector = selector.selector;
+			this.context = selector.context;
+		}
+
+		return jQuery.makeArray( selector, this );
+	},
+
+	// Start with an empty selector
+	selector: "",
+
+	// The default length of a jQuery object is 0
+	length: 0,
+
+	// The number of elements contained in the matched element set
+	size: function() {
+		return this.length;
+	},
+
+	toArray: function() {
+		return core_slice.call( this );
+	},
+
+	// Get the Nth element in the matched element set OR
+	// Get the whole matched element set as a clean array
+	get: function( num ) {
+		return num == null ?
+
+			// Return a 'clean' array
+			this.toArray() :
+
+			// Return just the object
+			( num < 0 ? this[ this.length + num ] : this[ num ] );
+	},
+
+	// Take an array of elements and push it onto the stack
+	// (returning the new matched element set)
+	pushStack: function( elems ) {
+
+		// Build a new jQuery matched element set
+		var ret = jQuery.merge( this.constructor(), elems );
+
+		// Add the old object onto the stack (as a reference)
+		ret.prevObject = this;
+		ret.context = this.context;
+
+		// Return the newly-formed element set
+		return ret;
+	},
+
+	// Execute a callback for every element in the matched set.
+	// (You can seed the arguments with an array of args, but this is
+	// only used internally.)
+	each: function( callback, args ) {
+		return jQuery.each( this, callback, args );
+	},
+
+	ready: function( fn ) {
+		// Add the callback
+		jQuery.ready.promise().done( fn );
+
+		return this;
+	},
+
+	slice: function() {
+		return this.pushStack( core_slice.apply( this, arguments ) );
+	},
+
+	first: function() {
+		return this.eq( 0 );
+	},
+
+	last: function() {
+		return this.eq( -1 );
+	},
+
+	eq: function( i ) {
+		var len = this.length,
+			j = +i + ( i < 0 ? len : 0 );
+		return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
+	},
+
+	map: function( callback ) {
+		return this.pushStack( jQuery.map(this, function( elem, i ) {
+			return callback.call( elem, i, elem );
+		}));
+	},
+
+	end: function() {
+		return this.prevObject || this.constructor(null);
+	},
+
+	// For internal use only.
+	// Behaves like an Array's method, not like a jQuery method.
+	push: core_push,
+	sort: [].sort,
+	splice: [].splice
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+jQuery.extend = jQuery.fn.extend = function() {
+	var options, name, src, copy, copyIsArray, clone,
+		target = arguments[0] || {},
+		i = 1,
+		length = arguments.length,
+		deep = false;
+
+	// Handle a deep copy situation
+	if ( typeof target === "boolean" ) {
+		deep = target;
+		target = arguments[1] || {};
+		// skip the boolean and the target
+		i = 2;
+	}
+
+	// Handle case when target is a string or something (possible in deep copy)
+	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+		target = {};
+	}
+
+	// extend jQuery itself if only one argument is passed
+	if ( length === i ) {
+		target = this;
+		--i;
+	}
+
+	for ( ; i < length; i++ ) {
+		// Only deal with non-null/undefined values
+		if ( (options = arguments[ i ]) != null ) {
+			// Extend the base object
+			for ( name in options ) {
+				src = target[ name ];
+				copy = options[ name ];
+
+				// Prevent never-ending loop
+				if ( target === copy ) {
+					continue;
+				}
+
+				// Recurse if we're merging plain objects or arrays
+				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+					if ( copyIsArray ) {
+						copyIsArray = false;
+						clone = src && jQuery.isArray(src) ? src : [];
+
+					} else {
+						clone = src && jQuery.isPlainObject(src) ? src : {};
+					}
+
+					// Never move original objects, clone them
+					target[ name ] = jQuery.extend( deep, clone, copy );
+
+				// Don't bring in undefined values
+				} else if ( copy !== undefined ) {
+					target[ name ] = copy;
+				}
+			}
+		}
+	}
+
+	// Return the modified object
+	return target;
+};
+
+jQuery.extend({
+	noConflict: function( deep ) {
+		if ( window.$ === jQuery ) {
+			window.$ = _$;
+		}
+
+		if ( deep && window.jQuery === jQuery ) {
+			window.jQuery = _jQuery;
+		}
+
+		return jQuery;
+	},
+
+	// Is the DOM ready to be used? Set to true once it occurs.
+	isReady: false,
+
+	// A counter to track how many items to wait for before
+	// the ready event fires. See #6781
+	readyWait: 1,
+
+	// Hold (or release) the ready event
+	holdReady: function( hold ) {
+		if ( hold ) {
+			jQuery.readyWait++;
+		} else {
+			jQuery.ready( true );
+		}
+	},
+
+	// Handle when the DOM is ready
+	ready: function( wait ) {
+
+		// Abort if there are pending holds or we're already ready
+		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+			return;
+		}
+
+		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+		if ( !document.body ) {
+			return setTimeout( jQuery.ready );
+		}
+
+		// Remember that the DOM is ready
+		jQuery.isReady = true;
+
+		// If a normal DOM Ready event fired, decrement, and wait if need be
+		if ( wait !== true && --jQuery.readyWait > 0 ) {
+			return;
+		}
+
+		// If there are functions bound, to execute
+		readyList.resolveWith( document, [ jQuery ] );
+
+		// Trigger any bound ready events
+		if ( jQuery.fn.trigger ) {
+			jQuery( document ).trigger("ready").off("ready");
+		}
+	},
+
+	// See test/unit/core.js for details concerning isFunction.
+	// Since version 1.3, DOM methods and functions like alert
+	// aren't supported. They return false on IE (#2968).
+	isFunction: function( obj ) {
+		return jQuery.type(obj) === "function";
+	},
+
+	isArray: Array.isArray || function( obj ) {
+		return jQuery.type(obj) === "array";
+	},
+
+	isWindow: function( obj ) {
+		return obj != null && obj == obj.window;
+	},
+
+	isNumeric: function( obj ) {
+		return !isNaN( parseFloat(obj) ) && isFinite( obj );
+	},
+
+	type: function( obj ) {
+		if ( obj == null ) {
+			return String( obj );
+		}
+		return typeof obj === "object" || typeof obj === "function" ?
+			class2type[ core_toString.call(obj) ] || "object" :
+			typeof obj;
+	},
+
+	isPlainObject: function( obj ) {
+		// Must be an Object.
+		// Because of IE, we also have to check the presence of the constructor property.
+		// Make sure that DOM nodes and window objects don't pass through, as well
+		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+			return false;
+		}
+
+		try {
+			// Not own constructor property must be Object
+			if ( obj.constructor &&
+				!core_hasOwn.call(obj, "constructor") &&
+				!core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+				return false;
+			}
+		} catch ( e ) {
+			// IE8,9 Will throw exceptions on certain host objects #9897
+			return false;
+		}
+
+		// Own properties are enumerated firstly, so to speed up,
+		// if last one is own, then all properties are own.
+
+		var key;
+		for ( key in obj ) {}
+
+		return key === undefined || core_hasOwn.call( obj, key );
+	},
+
+	isEmptyObject: function( obj ) {
+		var name;
+		for ( name in obj ) {
+			return false;
+		}
+		return true;
+	},
+
+	error: function( msg ) {
+		throw new Error( msg );
+	},
+
+	// data: string of html
+	// context (optional): If specified, the fragment will be created in this context, defaults to document
+	// keepScripts (optional): If true, will include scripts passed in the html string
+	parseHTML: function( data, context, keepScripts ) {
+		if ( !data || typeof data !== "string" ) {
+			return null;
+		}
+		if ( typeof context === "boolean" ) {
+			keepScripts = context;
+			context = false;
+		}
+		context = context || document;
+
+		var parsed = rsingleTag.exec( data ),
+			scripts = !keepScripts && [];
+
+		// Single tag
+		if ( parsed ) {
+			return [ context.createElement( parsed[1] ) ];
+		}
+
+		parsed = jQuery.buildFragment( [ data ], context, scripts );
+		if ( scripts ) {
+			jQuery( scripts ).remove();
+		}
+		return jQuery.merge( [], parsed.childNodes );
+	},
+
+	parseJSON: function( data ) {
+		// Attempt to parse using the native JSON parser first
+		if ( window.JSON && window.JSON.parse ) {
+			return window.JSON.parse( data );
+		}
+
+		if ( data === null ) {
+			return data;
+		}
+
+		if ( typeof data === "string" ) {
+
+			// Make sure leading/trailing whitespace is removed (IE can't handle it)
+			data = jQuery.trim( data );
+
+			if ( data ) {
+				// Make sure the incoming data is actual JSON
+				// Logic borrowed from http://json.org/json2.js
+				if ( rvalidchars.test( data.replace( rvalidescape, "@" )
+					.replace( rvalidtokens, "]" )
+					.replace( rvalidbraces, "")) ) {
+
+					return ( new Function( "return " + data ) )();
+				}
+			}
+		}
+
+		jQuery.error( "Invalid JSON: " + data );
+	},
+
+	// Cross-browser xml parsing
+	parseXML: function( data ) {
+		var xml, tmp;
+		if ( !data || typeof data !== "string" ) {
+			return null;
+		}
+		try {
+			if ( window.DOMParser ) { // Standard
+				tmp = new DOMParser();
+				xml = tmp.parseFromString( data , "text/xml" );
+			} else { // IE
+				xml = new ActiveXObject( "Microsoft.XMLDOM" );
+				xml.async = "false";
+				xml.loadXML( data );
+			}
+		} catch( e ) {
+			xml = undefined;
+		}
+		if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
+			jQuery.error( "Invalid XML: " + data );
+		}
+		return xml;
+	},
+
+	noop: function() {},
+
+	// Evaluates a script in a global context
+	// Workarounds based on findings by Jim Driscoll
+	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+	globalEval: function( data ) {
+		if ( data && jQuery.trim( data ) ) {
+			// We use execScript on Internet Explorer
+			// We use an anonymous function so that context is window
+			// rather than jQuery in Firefox
+			( window.execScript || function( data ) {
+				window[ "eval" ].call( window, data );
+			} )( data );
+		}
+	},
+
+	// Convert dashed to camelCase; used by the css and data modules
+	// Microsoft forgot to hump their vendor prefix (#9572)
+	camelCase: function( string ) {
+		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+	},
+
+	nodeName: function( elem, name ) {
+		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+	},
+
+	// args is for internal usage only
+	each: function( obj, callback, args ) {
+		var value,
+			i = 0,
+			length = obj.length,
+			isArray = isArraylike( obj );
+
+		if ( args ) {
+			if ( isArray ) {
+				for ( ; i < length; i++ ) {
+					value = callback.apply( obj[ i ], args );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( i in obj ) {
+					value = callback.apply( obj[ i ], args );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			}
+
+		// A special, fast, case for the most common use of each
+		} else {
+			if ( isArray ) {
+				for ( ; i < length; i++ ) {
+					value = callback.call( obj[ i ], i, obj[ i ] );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( i in obj ) {
+					value = callback.call( obj[ i ], i, obj[ i ] );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			}
+		}
+
+		return obj;
+	},
+
+	// Use native String.trim function wherever possible
+	trim: core_trim && !core_trim.call("\uFEFF\xA0") ?
+		function( text ) {
+			return text == null ?
+				"" :
+				core_trim.call( text );
+		} :
+
+		// Otherwise use our own trimming functionality
+		function( text ) {
+			return text == null ?
+				"" :
+				( text + "" ).replace( rtrim, "" );
+		},
+
+	// results is for internal usage only
+	makeArray: function( arr, results ) {
+		var ret = results || [];
+
+		if ( arr != null ) {
+			if ( isArraylike( Object(arr) ) ) {
+				jQuery.merge( ret,
+					typeof arr === "string" ?
+					[ arr ] : arr
+				);
+			} else {
+				core_push.call( ret, arr );
+			}
+		}
+
+		return ret;
+	},
+
+	inArray: function( elem, arr, i ) {
+		var len;
+
+		if ( arr ) {
+			if ( core_indexOf ) {
+				return core_indexOf.call( arr, elem, i );
+			}
+
+			len = arr.length;
+			i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
+
+			for ( ; i < len; i++ ) {
+				// Skip accessing in sparse arrays
+				if ( i in arr && arr[ i ] === elem ) {
+					return i;
+				}
+			}
+		}
+
+		return -1;
+	},
+
+	merge: function( first, second ) {
+		var l = second.length,
+			i = first.length,
+			j = 0;
+
+		if ( typeof l === "number" ) {
+			for ( ; j < l; j++ ) {
+				first[ i++ ] = second[ j ];
+			}
+		} else {
+			while ( second[j] !== undefined ) {
+				first[ i++ ] = second[ j++ ];
+			}
+		}
+
+		first.length = i;
+
+		return first;
+	},
+
+	grep: function( elems, callback, inv ) {
+		var retVal,
+			ret = [],
+			i = 0,
+			length = elems.length;
+		inv = !!inv;
+
+		// Go through the array, only saving the items
+		// that pass the validator function
+		for ( ; i < length; i++ ) {
+			retVal = !!callback( elems[ i ], i );
+			if ( inv !== retVal ) {
+				ret.push( elems[ i ] );
+			}
+		}
+
+		return ret;
+	},
+
+	// arg is for internal usage only
+	map: function( elems, callback, arg ) {
+		var value,
+			i = 0,
+			length = elems.length,
+			isArray = isArraylike( elems ),
+			ret = [];
+
+		// Go through the array, translating each of the items to their
+		if ( isArray ) {
+			for ( ; i < length; i++ ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret[ ret.length ] = value;
+				}
+			}
+
+		// Go through every key on the object,
+		} else {
+			for ( i in elems ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret[ ret.length ] = value;
+				}
+			}
+		}
+
+		// Flatten any nested arrays
+		return core_concat.apply( [], ret );
+	},
+
+	// A global GUID counter for objects
+	guid: 1,
+
+	// Bind a function to a context, optionally partially applying any
+	// arguments.
+	proxy: function( fn, context ) {
+		var tmp, args, proxy;
+
+		if ( typeof context === "string" ) {
+			tmp = fn[ context ];
+			context = fn;
+			fn = tmp;
+		}
+
+		// Quick check to determine if target is callable, in the spec
+		// this throws a TypeError, but we will just return undefined.
+		if ( !jQuery.isFunction( fn ) ) {
+			return undefined;
+		}
+
+		// Simulated bind
+		args = core_slice.call( arguments, 2 );
+		proxy = function() {
+			return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );
+		};
+
+		// Set the guid of unique handler to the same of original handler, so it can be removed
+		proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+		return proxy;
+	},
+
+	// Multifunctional method to get and set values of a collection
+	// The value/s can optionally be executed if it's a function
+	access: function( elems, fn, key, value, chainable, emptyGet, raw ) {
+		var i = 0,
+			length = elems.length,
+			bulk = key == null;
+
+		// Sets many values
+		if ( jQuery.type( key ) === "object" ) {
+			chainable = true;
+			for ( i in key ) {
+				jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
+			}
+
+		// Sets one value
+		} else if ( value !== undefined ) {
+			chainable = true;
+
+			if ( !jQuery.isFunction( value ) ) {
+				raw = true;
+			}
+
+			if ( bulk ) {
+				// Bulk operations run against the entire set
+				if ( raw ) {
+					fn.call( elems, value );
+					fn = null;
+
+				// ...except when executing function values
+				} else {
+					bulk = fn;
+					fn = function( elem, key, value ) {
+						return bulk.call( jQuery( elem ), value );
+					};
+				}
+			}
+
+			if ( fn ) {
+				for ( ; i < length; i++ ) {
+					fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
+				}
+			}
+		}
+
+		return chainable ?
+			elems :
+
+			// Gets
+			bulk ?
+				fn.call( elems ) :
+				length ? fn( elems[0], key ) : emptyGet;
+	},
+
+	now: function() {
+		return ( new Date() ).getTime();
+	}
+});
+
+jQuery.ready.promise = function( obj ) {
+	if ( !readyList ) {
+
+		readyList = jQuery.Deferred();
+
+		// Catch cases where $(document).ready() is called after the browser event has already occurred.
+		// we once tried to use readyState "interactive" here, but it caused issues like the one
+		// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
+		if ( document.readyState === "complete" ) {
+			// Handle it asynchronously to allow scripts the opportunity to delay ready
+			setTimeout( jQuery.ready );
+
+		// Standards-based browsers support DOMContentLoaded
+		} else if ( document.addEventListener ) {
+			// Use the handy event callback
+			document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+
+			// A fallback to window.onload, that will always work
+			window.addEventListener( "load", jQuery.ready, false );
+
+		// If IE event model is used
+		} else {
+			// Ensure firing before onload, maybe late but safe also for iframes
+			document.attachEvent( "onreadystatechange", DOMContentLoaded );
+
+			// A fallback to window.onload, that will always work
+			window.attachEvent( "onload", jQuery.ready );
+
+			// If IE and not a frame
+			// continually check to see if the document is ready
+			var top = false;
+
+			try {
+				top = window.frameElement == null && document.documentElement;
+			} catch(e) {}
+
+			if ( top && top.doScroll ) {
+				(function doScrollCheck() {
+					if ( !jQuery.isReady ) {
+
+						try {
+							// Use the trick by Diego Perini
+							// http://javascript.nwbox.com/IEContentLoaded/
+							top.doScroll("left");
+						} catch(e) {
+							return setTimeout( doScrollCheck, 50 );
+						}
+
+						// and execute any waiting functions
+						jQuery.ready();
+					}
+				})();
+			}
+		}
+	}
+	return readyList.promise( obj );
+};
+
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
+	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
+
+function isArraylike( obj ) {
+	var length = obj.length,
+		type = jQuery.type( obj );
+
+	if ( jQuery.isWindow( obj ) ) {
+		return false;
+	}
+
+	if ( obj.nodeType === 1 && length ) {
+		return true;
+	}
+
+	return type === "array" || type !== "function" &&
+		( length === 0 ||
+		typeof length === "number" && length > 0 && ( length - 1 ) in obj );
+}
+
+// All jQuery objects should point back to these
+rootjQuery = jQuery(document);
+// String to Object options format cache
+var optionsCache = {};
+
+// Convert String-formatted options into Object-formatted ones and store in cache
+function createOptions( options ) {
+	var object = optionsCache[ options ] = {};
+	jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {
+		object[ flag ] = true;
+	});
+	return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *	options: an optional list of space-separated options that will change how
+ *			the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ *	once:			will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *	memory:			will keep track of previous values and will call any callback added
+ *					after the list has been fired right away with the latest "memorized"
+ *					values (like a Deferred)
+ *
+ *	unique:			will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *	stopOnFalse:	interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+	// Convert options from String-formatted to Object-formatted if needed
+	// (we check in cache first)
+	options = typeof options === "string" ?
+		( optionsCache[ options ] || createOptions( options ) ) :
+		jQuery.extend( {}, options );
+
+	var // Last fire value (for non-forgettable lists)
+		memory,
+		// Flag to know if list was already fired
+		fired,
+		// Flag to know if list is currently firing
+		firing,
+		// First callback to fire (used internally by add and fireWith)
+		firingStart,
+		// End of the loop when firing
+		firingLength,
+		// Index of currently firing callback (modified by remove if needed)
+		firingIndex,
+		// Actual callback list
+		list = [],
+		// Stack of fire calls for repeatable lists
+		stack = !options.once && [],
+		// Fire callbacks
+		fire = function( data ) {
+			memory = options.memory && data;
+			fired = true;
+			firingIndex = firingStart || 0;
+			firingStart = 0;
+			firingLength = list.length;
+			firing = true;
+			for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+				if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
+					memory = false; // To prevent further calls using add
+					break;
+				}
+			}
+			firing = false;
+			if ( list ) {
+				if ( stack ) {
+					if ( stack.length ) {
+						fire( stack.shift() );
+					}
+				} else if ( memory ) {
+					list = [];
+				} else {
+					self.disable();
+				}
+			}
+		},
+		// Actual Callbacks object
+		self = {
+			// Add a callback or a collection of callbacks to the list
+			add: function() {
+				if ( list ) {
+					// First, we save the current length
+					var start = list.length;
+					(function add( args ) {
+						jQuery.each( args, function( _, arg ) {
+							var type = jQuery.type( arg );
+							if ( type === "function" ) {
+								if ( !options.unique || !self.has( arg ) ) {
+									list.push( arg );
+								}
+							} else if ( arg && arg.length && type !== "string" ) {
+								// Inspect recursively
+								add( arg );
+							}
+						});
+					})( arguments );
+					// Do we need to add the callbacks to the
+					// current firing batch?
+					if ( firing ) {
+						firingLength = list.length;
+					// With memory, if we're not firing then
+					// we should call right away
+					} else if ( memory ) {
+						firingStart = start;
+						fire( memory );
+					}
+				}
+				return this;
+			},
+			// Remove a callback from the list
+			remove: function() {
+				if ( list ) {
+					jQuery.each( arguments, function( _, arg ) {
+						var index;
+						while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+							list.splice( index, 1 );
+							// Handle firing indexes
+							if ( firing ) {
+								if ( index <= firingLength ) {
+									firingLength--;
+								}
+								if ( index <= firingIndex ) {
+									firingIndex--;
+								}
+							}
+						}
+					});
+				}
+				return this;
+			},
+			// Control if a given callback is in the list
+			has: function( fn ) {
+				return jQuery.inArray( fn, list ) > -1;
+			},
+			// Remove all callbacks from the list
+			empty: function() {
+				list = [];
+				return this;
+			},
+			// Have the list do nothing anymore
+			disable: function() {
+				list = stack = memory = undefined;
+				return this;
+			},
+			// Is it disabled?
+			disabled: function() {
+				return !list;
+			},
+			// Lock the list in its current state
+			lock: function() {
+				stack = undefined;
+				if ( !memory ) {
+					self.disable();
+				}
+				return this;
+			},
+			// Is it locked?
+			locked: function() {
+				return !stack;
+			},
+			// Call all callbacks with the given context and arguments
+			fireWith: function( context, args ) {
+				args = args || [];
+				args = [ context, args.slice ? args.slice() : args ];
+				if ( list && ( !fired || stack ) ) {
+					if ( firing ) {
+						stack.push( args );
+					} else {
+						fire( args );
+					}
+				}
+				return this;
+			},
+			// Call all the callbacks with the given arguments
+			fire: function() {
+				self.fireWith( this, arguments );
+				return this;
+			},
+			// To know if the callbacks have already been called at least once
+			fired: function() {
+				return !!fired;
+			}
+		};
+
+	return self;
+};
+jQuery.extend({
+
+	Deferred: function( func ) {
+		var tuples = [
+				// action, add listener, listener list, final state
+				[ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
+				[ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
+				[ "notify", "progress", jQuery.Callbacks("memory") ]
+			],
+			state = "pending",
+			promise = {
+				state: function() {
+					return state;
+				},
+				always: function() {
+					deferred.done( arguments ).fail( arguments );
+					return this;
+				},
+				then: function( /* fnDone, fnFail, fnProgress */ ) {
+					var fns = arguments;
+					return jQuery.Deferred(function( newDefer ) {
+						jQuery.each( tuples, function( i, tuple ) {
+							var action = tuple[ 0 ],
+								fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
+							// deferred[ done | fail | progress ] for forwarding actions to newDefer
+							deferred[ tuple[1] ](function() {
+								var returned = fn && fn.apply( this, arguments );
+								if ( returned && jQuery.isFunction( returned.promise ) ) {
+									returned.promise()
+										.done( newDefer.resolve )
+										.fail( newDefer.reject )
+										.progress( newDefer.notify );
+								} else {
+									newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
+								}
+							});
+						});
+						fns = null;
+					}).promise();
+				},
+				// Get a promise for this deferred
+				// If obj is provided, the promise aspect is added to the object
+				promise: function( obj ) {
+					return obj != null ? jQuery.extend( obj, promise ) : promise;
+				}
+			},
+			deferred = {};
+
+		// Keep pipe for back-compat
+		promise.pipe = promise.then;
+
+		// Add list-specific methods
+		jQuery.each( tuples, function( i, tuple ) {
+			var list = tuple[ 2 ],
+				stateString = tuple[ 3 ];
+
+			// promise[ done | fail | progress ] = list.add
+			promise[ tuple[1] ] = list.add;
+
+			// Handle state
+			if ( stateString ) {
+				list.add(function() {
+					// state = [ resolved | rejected ]
+					state = stateString;
+
+				// [ reject_list | resolve_list ].disable; progress_list.lock
+				}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
+			}
+
+			// deferred[ resolve | reject | notify ]
+			deferred[ tuple[0] ] = function() {
+				deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
+				return this;
+			};
+			deferred[ tuple[0] + "With" ] = list.fireWith;
+		});
+
+		// Make the deferred a promise
+		promise.promise( deferred );
+
+		// Call given func if any
+		if ( func ) {
+			func.call( deferred, deferred );
+		}
+
+		// All done!
+		return deferred;
+	},
+
+	// Deferred helper
+	when: function( subordinate /* , ..., subordinateN */ ) {
+		var i = 0,
+			resolveValues = core_slice.call( arguments ),
+			length = resolveValues.length,
+
+			// the count of uncompleted subordinates
+			remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
+
+			// the master Deferred. If resolveValues consist of only a single Deferred, just use that.
+			deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
+
+			// Update function for both resolve and progress values
+			updateFunc = function( i, contexts, values ) {
+				return function( value ) {
+					contexts[ i ] = this;
+					values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;
+					if( values === progressValues ) {
+						deferred.notifyWith( contexts, values );
+					} else if ( !( --remaining ) ) {
+						deferred.resolveWith( contexts, values );
+					}
+				};
+			},
+
+			progressValues, progressContexts, resolveContexts;
+
+		// add listeners to Deferred subordinates; treat others as resolved
+		if ( length > 1 ) {
+			progressValues = new Array( length );
+			progressContexts = new Array( length );
+			resolveContexts = new Array( length );
+			for ( ; i < length; i++ ) {
+				if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
+					resolveValues[ i ].promise()
+						.done( updateFunc( i, resolveContexts, resolveValues ) )
+						.fail( deferred.reject )
+						.progress( updateFunc( i, progressContexts, progressValues ) );
+				} else {
+					--remaining;
+				}
+			}
+		}
+
+		// if we're not waiting on anything, resolve the master
+		if ( !remaining ) {
+			deferred.resolveWith( resolveContexts, resolveValues );
+		}
+
+		return deferred.promise();
+	}
+});
+jQuery.support = (function() {
+
+	var support, all, a, select, opt, input, fragment, eventName, isSupported, i,
+		div = document.createElement("div");
+
+	// Setup
+	div.setAttribute( "className", "t" );
+	div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
+
+	// Support tests won't run in some limited or non-browser environments
+	all = div.getElementsByTagName("*");
+	a = div.getElementsByTagName("a")[ 0 ];
+	if ( !all || !a || !all.length ) {
+		return {};
+	}
+
+	// First batch of tests
+	select = document.createElement("select");
+	opt = select.appendChild( document.createElement("option") );
+	input = div.getElementsByTagName("input")[ 0 ];
+
+	a.style.cssText = "top:1px;float:left;opacity:.5";
+	support = {
+		// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+		getSetAttribute: div.className !== "t",
+
+		// IE strips leading whitespace when .innerHTML is used
+		leadingWhitespace: div.firstChild.nodeType === 3,
+
+		// Make sure that tbody elements aren't automatically inserted
+		// IE will insert them into empty tables
+		tbody: !div.getElementsByTagName("tbody").length,
+
+		// Make sure that link elements get serialized correctly by innerHTML
+		// This requires a wrapper element in IE
+		htmlSerialize: !!div.getElementsByTagName("link").length,
+
+		// Get the style information from getAttribute
+		// (IE uses .cssText instead)
+		style: /top/.test( a.getAttribute("style") ),
+
+		// Make sure that URLs aren't manipulated
+		// (IE normalizes it by default)
+		hrefNormalized: a.getAttribute("href") === "/a",
+
+		// Make sure that element opacity exists
+		// (IE uses filter instead)
+		// Use a regex to work around a WebKit issue. See #5145
+		opacity: /^0.5/.test( a.style.opacity ),
+
+		// Verify style float existence
+		// (IE uses styleFloat instead of cssFloat)
+		cssFloat: !!a.style.cssFloat,
+
+		// Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
+		checkOn: !!input.value,
+
+		// Make sure that a selected-by-default option has a working selected property.
+		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+		optSelected: opt.selected,
+
+		// Tests for enctype support on a form (#6743)
+		enctype: !!document.createElement("form").enctype,
+
+		// Makes sure cloning an html5 element does not cause problems
+		// Where outerHTML is undefined, this still works
+		html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
+
+		// jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode
+		boxModel: document.compatMode === "CSS1Compat",
+
+		// Will be defined later
+		deleteExpando: true,
+		noCloneEvent: true,
+		inlineBlockNeedsLayout: false,
+		shrinkWrapBlocks: false,
+		reliableMarginRight: true,
+		boxSizingReliable: true,
+		pixelPosition: false
+	};
+
+	// Make sure checked status is properly cloned
+	input.checked = true;
+	support.noCloneChecked = input.cloneNode( true ).checked;
+
+	// Make sure that the options inside disabled selects aren't marked as disabled
+	// (WebKit marks them as disabled)
+	select.disabled = true;
+	support.optDisabled = !opt.disabled;
+
+	// Support: IE<9
+	try {
+		delete div.test;
+	} catch( e ) {
+		support.deleteExpando = false;
+	}
+
+	// Check if we can trust getAttribute("value")
+	input = document.createElement("input");
+	input.setAttribute( "value", "" );
+	support.input = input.getAttribute( "value" ) === "";
+
+	// Check if an input maintains its value after becoming a radio
+	input.value = "t";
+	input.setAttribute( "type", "radio" );
+	support.radioValue = input.value === "t";
+
+	// #11217 - WebKit loses check when the name is after the checked attribute
+	input.setAttribute( "checked", "t" );
+	input.setAttribute( "name", "t" );
+
+	fragment = document.createDocumentFragment();
+	fragment.appendChild( input );
+
+	// Check if a disconnected checkbox will retain its checked
+	// value of true after appended to the DOM (IE6/7)
+	support.appendChecked = input.checked;
+
+	// WebKit doesn't clone checked state correctly in fragments
+	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+	// Support: IE<9
+	// Opera does not clone events (and typeof div.attachEvent === undefined).
+	// IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
+	if ( div.attachEvent ) {
+		div.attachEvent( "onclick", function() {
+			support.noCloneEvent = false;
+		});
+
+		div.cloneNode( true ).click();
+	}
+
+	// Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)
+	// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP), test/csp.php
+	for ( i in { submit: true, change: true, focusin: true }) {
+		div.setAttribute( eventName = "on" + i, "t" );
+
+		support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false;
+	}
+
+	div.style.backgroundClip = "content-box";
+	div.cloneNode( true ).style.backgroundClip = "";
+	support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+	// Run tests that need a body at doc ready
+	jQuery(function() {
+		var container, marginDiv, tds,
+			divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",
+			body = document.getElementsByTagName("body")[0];
+
+		if ( !body ) {
+			// Return for frameset docs that don't have a body
+			return;
+		}
+
+		container = document.createElement("div");
+		container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px";
+
+		body.appendChild( container ).appendChild( div );
+
+		// Support: IE8
+		// Check if table cells still have offsetWidth/Height when they are set
+		// to display:none and there are still other visible table cells in a
+		// table row; if so, offsetWidth/Height are not reliable for use when
+		// determining if an element has been hidden directly using
+		// display:none (it is still safe to use offsets if a parent element is
+		// hidden; don safety goggles and see bug #4512 for more information).
+		div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
+		tds = div.getElementsByTagName("td");
+		tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none";
+		isSupported = ( tds[ 0 ].offsetHeight === 0 );
+
+		tds[ 0 ].style.display = "";
+		tds[ 1 ].style.display = "none";
+
+		// Support: IE8
+		// Check if empty table cells still have offsetWidth/Height
+		support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
+
+		// Check box-sizing and margin behavior
+		div.innerHTML = "";
+		div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;";
+		support.boxSizing = ( div.offsetWidth === 4 );
+		support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 );
+
+		// Use window.getComputedStyle because jsdom on node.js will break without it.
+		if ( window.getComputedStyle ) {
+			support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
+			support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
+
+			// Check if div with explicit width and no margin-right incorrectly
+			// gets computed margin-right based on width of container. (#3333)
+			// Fails in WebKit before Feb 2011 nightlies
+			// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+			marginDiv = div.appendChild( document.createElement("div") );
+			marginDiv.style.cssText = div.style.cssText = divReset;
+			marginDiv.style.marginRight = marginDiv.style.width = "0";
+			div.style.width = "1px";
+
+			support.reliableMarginRight =
+				!parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );
+		}
+
+		if ( typeof div.style.zoom !== "undefined" ) {
+			// Support: IE<8
+			// Check if natively block-level elements act like inline-block
+			// elements when setting their display to 'inline' and giving
+			// them layout
+			div.innerHTML = "";
+			div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1";
+			support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
+
+			// Support: IE6
+			// Check if elements with layout shrink-wrap their children
+			div.style.display = "block";
+			div.innerHTML = "<div></div>";
+			div.firstChild.style.width = "5px";
+			support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
+
+			// Prevent IE 6 from affecting layout for positioned elements #11048
+			// Prevent IE from shrinking the body in IE 7 mode #12869
+			body.style.zoom = 1;
+		}
+
+		body.removeChild( container );
+
+		// Null elements to avoid leaks in IE
+		container = div = tds = marginDiv = null;
+	});
+
+	// Null elements to avoid leaks in IE
+	all = select = fragment = opt = a = input = null;
+
+	return support;
+})();
+
+var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
+	rmultiDash = /([A-Z])/g;
+
+function internalData( elem, name, data, pvt /* Internal Use Only */ ){
+	if ( !jQuery.acceptData( elem ) ) {
+		return;
+	}
+
+	var thisCache, ret,
+		internalKey = jQuery.expando,
+		getByName = typeof name === "string",
+
+		// We have to handle DOM nodes and JS objects differently because IE6-7
+		// can't GC object references properly across the DOM-JS boundary
+		isNode = elem.nodeType,
+
+		// Only DOM nodes need the global jQuery cache; JS object data is
+		// attached directly to the object so GC can occur automatically
+		cache = isNode ? jQuery.cache : elem,
+
+		// Only defining an ID for JS objects if its cache already exists allows
+		// the code to shortcut on the same path as a DOM node with no cache
+		id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
+
+	// Avoid doing any more work than we need to when trying to get data on an
+	// object that has no data at all
+	if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) {
+		return;
+	}
+
+	if ( !id ) {
+		// Only DOM nodes need a new unique ID for each element since their data
+		// ends up in the global cache
+		if ( isNode ) {
+			elem[ internalKey ] = id = core_deletedIds.pop() || jQuery.guid++;
+		} else {
+			id = internalKey;
+		}
+	}
+
+	if ( !cache[ id ] ) {
+		cache[ id ] = {};
+
+		// Avoids exposing jQuery metadata on plain JS objects when the object
+		// is serialized using JSON.stringify
+		if ( !isNode ) {
+			cache[ id ].toJSON = jQuery.noop;
+		}
+	}
+
+	// An object can be passed to jQuery.data instead of a key/value pair; this gets
+	// shallow copied over onto the existing cache
+	if ( typeof name === "object" || typeof name === "function" ) {
+		if ( pvt ) {
+			cache[ id ] = jQuery.extend( cache[ id ], name );
+		} else {
+			cache[ id ].data = jQuery.extend( cache[ id ].data, name );
+		}
+	}
+
+	thisCache = cache[ id ];
+
+	// jQuery data() is stored in a separate object inside the object's internal data
+	// cache in order to avoid key collisions between internal data and user-defined
+	// data.
+	if ( !pvt ) {
+		if ( !thisCache.data ) {
+			thisCache.data = {};
+		}
+
+		thisCache = thisCache.data;
+	}
+
+	if ( data !== undefined ) {
+		thisCache[ jQuery.camelCase( name ) ] = data;
+	}
+
+	// Check for both converted-to-camel and non-converted data property names
+	// If a data property was specified
+	if ( getByName ) {
+
+		// First Try to find as-is property data
+		ret = thisCache[ name ];
+
+		// Test for null|undefined property data
+		if ( ret == null ) {
+
+			// Try to find the camelCased property
+			ret = thisCache[ jQuery.camelCase( name ) ];
+		}
+	} else {
+		ret = thisCache;
+	}
+
+	return ret;
+}
+
+function internalRemoveData( elem, name, pvt /* For internal use only */ ){
+	if ( !jQuery.acceptData( elem ) ) {
+		return;
+	}
+
+	var thisCache, i, l,
+
+		isNode = elem.nodeType,
+
+		// See jQuery.data for more information
+		cache = isNode ? jQuery.cache : elem,
+		id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
+
+	// If there is already no cache entry for this object, there is no
+	// purpose in continuing
+	if ( !cache[ id ] ) {
+		return;
+	}
+
+	if ( name ) {
+
+		thisCache = pvt ? cache[ id ] : cache[ id ].data;
+
+		if ( thisCache ) {
+
+			// Support array or space separated string names for data keys
+			if ( !jQuery.isArray( name ) ) {
+
+				// try the string as a key before any manipulation
+				if ( name in thisCache ) {
+					name = [ name ];
+				} else {
+
+					// split the camel cased version by spaces unless a key with the spaces exists
+					name = jQuery.camelCase( name );
+					if ( name in thisCache ) {
+						name = [ name ];
+					} else {
+						name = name.split(" ");
+					}
+				}
+			} else {
+				// If "name" is an array of keys...
+				// When data is initially created, via ("key", "val") signature,
+				// keys will be converted to camelCase.
+				// Since there is no way to tell _how_ a key was added, remove
+				// both plain key and camelCase key. #12786
+				// This will only penalize the array argument path.
+				name = name.concat( jQuery.map( name, jQuery.camelCase ) );
+			}
+
+			for ( i = 0, l = name.length; i < l; i++ ) {
+				delete thisCache[ name[i] ];
+			}
+
+			// If there is no data left in the cache, we want to continue
+			// and let the cache object itself get destroyed
+			if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
+				return;
+			}
+		}
+	}
+
+	// See jQuery.data for more information
+	if ( !pvt ) {
+		delete cache[ id ].data;
+
+		// Don't destroy the parent cache unless the internal data object
+		// had been the only thing left in it
+		if ( !isEmptyDataObject( cache[ id ] ) ) {
+			return;
+		}
+	}
+
+	// Destroy the cache
+	if ( isNode ) {
+		jQuery.cleanData( [ elem ], true );
+
+	// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
+	} else if ( jQuery.support.deleteExpando || cache != cache.window ) {
+		delete cache[ id ];
+
+	// When all else fails, null
+	} else {
+		cache[ id ] = null;
+	}
+}
+
+jQuery.extend({
+	cache: {},
+
+	// Unique for each copy of jQuery on the page
+	// Non-digits removed to match rinlinejQuery
+	expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ),
+
+	// The following elements throw uncatchable exceptions if you
+	// attempt to add expando properties to them.
+	noData: {
+		"embed": true,
+		// Ban all objects except for Flash (which handle expandos)
+		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
+		"applet": true
+	},
+
+	hasData: function( elem ) {
+		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+		return !!elem && !isEmptyDataObject( elem );
+	},
+
+	data: function( elem, name, data ) {
+		return internalData( elem, name, data, false );
+	},
+
+	removeData: function( elem, name ) {
+		return internalRemoveData( elem, name, false );
+	},
+
+	// For internal use only.
+	_data: function( elem, name, data ) {
+		return internalData( elem, name, data, true );
+	},
+
+	_removeData: function( elem, name ) {
+		return internalRemoveData( elem, name, true );
+	},
+
+	// A method for determining if a DOM node can handle the data expando
+	acceptData: function( elem ) {
+		var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];
+
+		// nodes accept data unless otherwise specified; rejection can be conditional
+		return !noData || noData !== true && elem.getAttribute("classid") === noData;
+	}
+});
+
+jQuery.fn.extend({
+	data: function( key, value ) {
+		var attrs, name,
+			elem = this[0],
+			i = 0,
+			data = null;
+
+		// Gets all values
+		if ( key === undefined ) {
+			if ( this.length ) {
+				data = jQuery.data( elem );
+
+				if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
+					attrs = elem.attributes;
+					for ( ; i < attrs.length; i++ ) {
+						name = attrs[i].name;
+
+						if ( !name.indexOf( "data-" ) ) {
+							name = jQuery.camelCase( name.substring(5) );
+
+							dataAttr( elem, name, data[ name ] );
+						}
+					}
+					jQuery._data( elem, "parsedAttrs", true );
+				}
+			}
+
+			return data;
+		}
+
+		// Sets multiple values
+		if ( typeof key === "object" ) {
+			return this.each(function() {
+				jQuery.data( this, key );
+			});
+		}
+
+		return jQuery.access( this, function( value ) {
+
+			if ( value === undefined ) {
+				// Try to fetch any internally stored data first
+				return elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;
+			}
+
+			this.each(function() {
+				jQuery.data( this, key, value );
+			});
+		}, null, value, arguments.length > 1, null, true );
+	},
+
+	removeData: function( key ) {
+		return this.each(function() {
+			jQuery.removeData( this, key );
+		});
+	}
+});
+
+function dataAttr( elem, key, data ) {
+	// If nothing was found internally, try to fetch any
+	// data from the HTML5 data-* attribute
+	if ( data === undefined && elem.nodeType === 1 ) {
+
+		var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
+
+		data = elem.getAttribute( name );
+
+		if ( typeof data === "string" ) {
+			try {
+				data = data === "true" ? true :
+				data === "false" ? false :
+				data === "null" ? null :
+				// Only convert to a number if it doesn't change the string
+				+data + "" === data ? +data :
+				rbrace.test( data ) ? jQuery.parseJSON( data ) :
+					data;
+			} catch( e ) {}
+
+			// Make sure we set the data so it isn't changed later
+			jQuery.data( elem, key, data );
+
+		} else {
+			data = undefined;
+		}
+	}
+
+	return data;
+}
+
+// checks a cache object for emptiness
+function isEmptyDataObject( obj ) {
+	var name;
+	for ( name in obj ) {
+
+		// if the public data object is empty, the private is still empty
+		if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
+			continue;
+		}
+		if ( name !== "toJSON" ) {
+			return false;
+		}
+	}
+
+	return true;
+}
+jQuery.extend({
+	queue: function( elem, type, data ) {
+		var queue;
+
+		if ( elem ) {
+			type = ( type || "fx" ) + "queue";
+			queue = jQuery._data( elem, type );
+
+			// Speed up dequeue by getting out quickly if this is just a lookup
+			if ( data ) {
+				if ( !queue || jQuery.isArray(data) ) {
+					queue = jQuery._data( elem, type, jQuery.makeArray(data) );
+				} else {
+					queue.push( data );
+				}
+			}
+			return queue || [];
+		}
+	},
+
+	dequeue: function( elem, type ) {
+		type = type || "fx";
+
+		var queue = jQuery.queue( elem, type ),
+			startLength = queue.length,
+			fn = queue.shift(),
+			hooks = jQuery._queueHooks( elem, type ),
+			next = function() {
+				jQuery.dequeue( elem, type );
+			};
+
+		// If the fx queue is dequeued, always remove the progress sentinel
+		if ( fn === "inprogress" ) {
+			fn = queue.shift();
+			startLength--;
+		}
+
+		hooks.cur = fn;
+		if ( fn ) {
+
+			// Add a progress sentinel to prevent the fx queue from being
+			// automatically dequeued
+			if ( type === "fx" ) {
+				queue.unshift( "inprogress" );
+			}
+
+			// clear up the last queue stop function
+			delete hooks.stop;
+			fn.call( elem, next, hooks );
+		}
+
+		if ( !startLength && hooks ) {
+			hooks.empty.fire();
+		}
+	},
+
+	// not intended for public consumption - generates a queueHooks object, or returns the current one
+	_queueHooks: function( elem, type ) {
+		var key = type + "queueHooks";
+		return jQuery._data( elem, key ) || jQuery._data( elem, key, {
+			empty: jQuery.Callbacks("once memory").add(function() {
+				jQuery._removeData( elem, type + "queue" );
+				jQuery._removeData( elem, key );
+			})
+		});
+	}
+});
+
+jQuery.fn.extend({
+	queue: function( type, data ) {
+		var setter = 2;
+
+		if ( typeof type !== "string" ) {
+			data = type;
+			type = "fx";
+			setter--;
+		}
+
+		if ( arguments.length < setter ) {
+			return jQuery.queue( this[0], type );
+		}
+
+		return data === undefined ?
+			this :
+			this.each(function() {
+				var queue = jQuery.queue( this, type, data );
+
+				// ensure a hooks for this queue
+				jQuery._queueHooks( this, type );
+
+				if ( type === "fx" && queue[0] !== "inprogress" ) {
+					jQuery.dequeue( this, type );
+				}
+			});
+	},
+	dequeue: function( type ) {
+		return this.each(function() {
+			jQuery.dequeue( this, type );
+		});
+	},
+	// Based off of the plugin by Clint Helfers, with permission.
+	// http://blindsignals.com/index.php/2009/07/jquery-delay/
+	delay: function( time, type ) {
+		time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+		type = type || "fx";
+
+		return this.queue( type, function( next, hooks ) {
+			var timeout = setTimeout( next, time );
+			hooks.stop = function() {
+				clearTimeout( timeout );
+			};
+		});
+	},
+	clearQueue: function( type ) {
+		return this.queue( type || "fx", [] );
+	},
+	// Get a promise resolved when queues of a certain type
+	// are emptied (fx is the type by default)
+	promise: function( type, obj ) {
+		var tmp,
+			count = 1,
+			defer = jQuery.Deferred(),
+			elements = this,
+			i = this.length,
+			resolve = function() {
+				if ( !( --count ) ) {
+					defer.resolveWith( elements, [ elements ] );
+				}
+			};
+
+		if ( typeof type !== "string" ) {
+			obj = type;
+			type = undefined;
+		}
+		type = type || "fx";
+
+		while( i-- ) {
+			tmp = jQuery._data( elements[ i ], type + "queueHooks" );
+			if ( tmp && tmp.empty ) {
+				count++;
+				tmp.empty.add( resolve );
+			}
+		}
+		resolve();
+		return defer.promise( obj );
+	}
+});
+var nodeHook, boolHook,
+	rclass = /[\t\r\n]/g,
+	rreturn = /\r/g,
+	rfocusable = /^(?:input|select|textarea|button|object)$/i,
+	rclickable = /^(?:a|area)$/i,
+	rboolean = /^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,
+	ruseDefault = /^(?:checked|selected)$/i,
+	getSetAttribute = jQuery.support.getSetAttribute,
+	getSetInput = jQuery.support.input;
+
+jQuery.fn.extend({
+	attr: function( name, value ) {
+		return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
+	},
+
+	removeAttr: function( name ) {
+		return this.each(function() {
+			jQuery.removeAttr( this, name );
+		});
+	},
+
+	prop: function( name, value ) {
+		return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
+	},
+
+	removeProp: function( name ) {
+		name = jQuery.propFix[ name ] || name;
+		return this.each(function() {
+			// try/catch handles cases where IE balks (such as removing a property on window)
+			try {
+				this[ name ] = undefined;
+				delete this[ name ];
+			} catch( e ) {}
+		});
+	},
+
+	addClass: function( value ) {
+		var classes, elem, cur, clazz, j,
+			i = 0,
+			len = this.length,
+			proceed = typeof value === "string" && value;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( j ) {
+				jQuery( this ).addClass( value.call( this, j, this.className ) );
+			});
+		}
+
+		if ( proceed ) {
+			// The disjunction here is for better compressibility (see removeClass)
+			classes = ( value || "" ).match( core_rnotwhite ) || [];
+
+			for ( ; i < len; i++ ) {
+				elem = this[ i ];
+				cur = elem.nodeType === 1 && ( elem.className ?
+					( " " + elem.className + " " ).replace( rclass, " " ) :
+					" "
+				);
+
+				if ( cur ) {
+					j = 0;
+					while ( (clazz = classes[j++]) ) {
+						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+							cur += clazz + " ";
+						}
+					}
+					elem.className = jQuery.trim( cur );
+
+				}
+			}
+		}
+
+		return this;
+	},
+
+	removeClass: function( value ) {
+		var classes, elem, cur, clazz, j,
+			i = 0,
+			len = this.length,
+			proceed = arguments.length === 0 || typeof value === "string" && value;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( j ) {
+				jQuery( this ).removeClass( value.call( this, j, this.className ) );
+			});
+		}
+		if ( proceed ) {
+			classes = ( value || "" ).match( core_rnotwhite ) || [];
+
+			for ( ; i < len; i++ ) {
+				elem = this[ i ];
+				// This expression is here for better compressibility (see addClass)
+				cur = elem.nodeType === 1 && ( elem.className ?
+					( " " + elem.className + " " ).replace( rclass, " " ) :
+					""
+				);
+
+				if ( cur ) {
+					j = 0;
+					while ( (clazz = classes[j++]) ) {
+						// Remove *all* instances
+						while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
+							cur = cur.replace( " " + clazz + " ", " " );
+						}
+					}
+					elem.className = value ? jQuery.trim( cur ) : "";
+				}
+			}
+		}
+
+		return this;
+	},
+
+	toggleClass: function( value, stateVal ) {
+		var type = typeof value,
+			isBool = typeof stateVal === "boolean";
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( i ) {
+				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
+			});
+		}
+
+		return this.each(function() {
+			if ( type === "string" ) {
+				// toggle individual class names
+				var className,
+					i = 0,
+					self = jQuery( this ),
+					state = stateVal,
+					classNames = value.match( core_rnotwhite ) || [];
+
+				while ( (className = classNames[ i++ ]) ) {
+					// check each className given, space separated list
+					state = isBool ? state : !self.hasClass( className );
+					self[ state ? "addClass" : "removeClass" ]( className );
+				}
+
+			// Toggle whole class name
+			} else if ( type === "undefined" || type === "boolean" ) {
+				if ( this.className ) {
+					// store className if set
+					jQuery._data( this, "__className__", this.className );
+				}
+
+				// If the element has a class name or if we're passed "false",
+				// then remove the whole classname (if there was one, the above saved it).
+				// Otherwise bring back whatever was previously saved (if anything),
+				// falling back to the empty string if nothing was stored.
+				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
+			}
+		});
+	},
+
+	hasClass: function( selector ) {
+		var className = " " + selector + " ",
+			i = 0,
+			l = this.length;
+		for ( ; i < l; i++ ) {
+			if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
+				return true;
+			}
+		}
+
+		return false;
+	},
+
+	val: function( value ) {
+		var hooks, ret, isFunction,
+			elem = this[0];
+
+		if ( !arguments.length ) {
+			if ( elem ) {
+				hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+					return ret;
+				}
+
+				ret = elem.value;
+
+				return typeof ret === "string" ?
+					// handle most common string cases
+					ret.replace(rreturn, "") :
+					// handle cases where value is null/undef or number
+					ret == null ? "" : ret;
+			}
+
+			return;
+		}
+
+		isFunction = jQuery.isFunction( value );
+
+		return this.each(function( i ) {
+			var val,
+				self = jQuery(this);
+
+			if ( this.nodeType !== 1 ) {
+				return;
+			}
+
+			if ( isFunction ) {
+				val = value.call( this, i, self.val() );
+			} else {
+				val = value;
+			}
+
+			// Treat null/undefined as ""; convert numbers to string
+			if ( val == null ) {
+				val = "";
+			} else if ( typeof val === "number" ) {
+				val += "";
+			} else if ( jQuery.isArray( val ) ) {
+				val = jQuery.map(val, function ( value ) {
+					return value == null ? "" : value + "";
+				});
+			}
+
+			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+			// If set returns undefined, fall back to normal setting
+			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+				this.value = val;
+			}
+		});
+	}
+});
+
+jQuery.extend({
+	valHooks: {
+		option: {
+			get: function( elem ) {
+				// attributes.value is undefined in Blackberry 4.7 but
+				// uses .value. See #6932
+				var val = elem.attributes.value;
+				return !val || val.specified ? elem.value : elem.text;
+			}
+		},
+		select: {
+			get: function( elem ) {
+				var value, option,
+					options = elem.options,
+					index = elem.selectedIndex,
+					one = elem.type === "select-one" || index < 0,
+					values = one ? null : [],
+					max = one ? index + 1 : options.length,
+					i = index < 0 ?
+						max :
+						one ? index : 0;
+
+				// Loop through all the selected options
+				for ( ; i < max; i++ ) {
+					option = options[ i ];
+
+					// oldIE doesn't update selected after form reset (#2551)
+					if ( ( option.selected || i === index ) &&
+							// Don't return options that are disabled or in a disabled optgroup
+							( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
+							( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
+
+						// Get the specific value for the option
+						value = jQuery( option ).val();
+
+						// We don't need an array for one selects
+						if ( one ) {
+							return value;
+						}
+
+						// Multi-Selects return an array
+						values.push( value );
+					}
+				}
+
+				return values;
+			},
+
+			set: function( elem, value ) {
+				var values = jQuery.makeArray( value );
+
+				jQuery(elem).find("option").each(function() {
+					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+				});
+
+				if ( !values.length ) {
+					elem.selectedIndex = -1;
+				}
+				return values;
+			}
+		}
+	},
+
+	attr: function( elem, name, value ) {
+		var ret, hooks, notxml,
+			nType = elem.nodeType;
+
+		// don't get/set attributes on text, comment and attribute nodes
+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		// Fallback to prop when attributes are not supported
+		if ( typeof elem.getAttribute === "undefined" ) {
+			return jQuery.prop( elem, name, value );
+		}
+
+		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+		// All attributes are lowercase
+		// Grab necessary hook if one is defined
+		if ( notxml ) {
+			name = name.toLowerCase();
+			hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
+		}
+
+		if ( value !== undefined ) {
+
+			if ( value === null ) {
+				jQuery.removeAttr( elem, name );
+
+			} else if ( hooks && notxml && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+				return ret;
+
+			} else {
+				elem.setAttribute( name, value + "" );
+				return value;
+			}
+
+		} else if ( hooks && notxml && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+			return ret;
+
+		} else {
+
+			// In IE9+, Flash objects don't have .getAttribute (#12945)
+			// Support: IE9+
+			if ( typeof elem.getAttribute !== "undefined" ) {
+				ret =  elem.getAttribute( name );
+			}
+
+			// Non-existent attributes return null, we normalize to undefined
+			return ret == null ?
+				undefined :
+				ret;
+		}
+	},
+
+	removeAttr: function( elem, value ) {
+		var name, propName,
+			i = 0,
+			attrNames = value && value.match( core_rnotwhite );
+
+		if ( attrNames && elem.nodeType === 1 ) {
+			while ( (name = attrNames[i++]) ) {
+				propName = jQuery.propFix[ name ] || name;
+
+				// Boolean attributes get special treatment (#10870)
+				if ( rboolean.test( name ) ) {
+					// Set corresponding property to false for boolean attributes
+					// Also clear defaultChecked/defaultSelected (if appropriate) for IE<8
+					if ( !getSetAttribute && ruseDefault.test( name ) ) {
+						elem[ jQuery.camelCase( "default-" + name ) ] =
+							elem[ propName ] = false;
+					} else {
+						elem[ propName ] = false;
+					}
+
+				// See #9699 for explanation of this approach (setting first, then removal)
+				} else {
+					jQuery.attr( elem, name, "" );
+				}
+
+				elem.removeAttribute( getSetAttribute ? name : propName );
+			}
+		}
+	},
+
+	attrHooks: {
+		type: {
+			set: function( elem, value ) {
+				if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+					// Setting the type on a radio button after the value resets the value in IE6-9
+					// Reset value to default in case type is set after value during creation
+					var val = elem.value;
+					elem.setAttribute( "type", value );
+					if ( val ) {
+						elem.value = val;
+					}
+					return value;
+				}
+			}
+		}
+	},
+
+	propFix: {
+		tabindex: "tabIndex",
+		readonly: "readOnly",
+		"for": "htmlFor",
+		"class": "className",
+		maxlength: "maxLength",
+		cellspacing: "cellSpacing",
+		cellpadding: "cellPadding",
+		rowspan: "rowSpan",
+		colspan: "colSpan",
+		usemap: "useMap",
+		frameborder: "frameBorder",
+		contenteditable: "contentEditable"
+	},
+
+	prop: function( elem, name, value ) {
+		var ret, hooks, notxml,
+			nType = elem.nodeType;
+
+		// don't get/set properties on text, comment and attribute nodes
+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+		if ( notxml ) {
+			// Fix name and attach hooks
+			name = jQuery.propFix[ name ] || name;
+			hooks = jQuery.propHooks[ name ];
+		}
+
+		if ( value !== undefined ) {
+			if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+				return ret;
+
+			} else {
+				return ( elem[ name ] = value );
+			}
+
+		} else {
+			if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+				return ret;
+
+			} else {
+				return elem[ name ];
+			}
+		}
+	},
+
+	propHooks: {
+		tabIndex: {
+			get: function( elem ) {
+				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+				var attributeNode = elem.getAttributeNode("tabindex");
+
+				return attributeNode && attributeNode.specified ?
+					parseInt( attributeNode.value, 10 ) :
+					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+						0 :
+						undefined;
+			}
+		}
+	}
+});
+
+// Hook for boolean attributes
+boolHook = {
+	get: function( elem, name ) {
+		var
+			// Use .prop to determine if this attribute is understood as boolean
+			prop = jQuery.prop( elem, name ),
+
+			// Fetch it accordingly
+			attr = typeof prop === "boolean" && elem.getAttribute( name ),
+			detail = typeof prop === "boolean" ?
+
+				getSetInput && getSetAttribute ?
+					attr != null :
+					// oldIE fabricates an empty string for missing boolean attributes
+					// and conflates checked/selected into attroperties
+					ruseDefault.test( name ) ?
+						elem[ jQuery.camelCase( "default-" + name ) ] :
+						!!attr :
+
+				// fetch an attribute node for properties not recognized as boolean
+				elem.getAttributeNode( name );
+
+		return detail && detail.value !== false ?
+			name.toLowerCase() :
+			undefined;
+	},
+	set: function( elem, value, name ) {
+		if ( value === false ) {
+			// Remove boolean attributes when set to false
+			jQuery.removeAttr( elem, name );
+		} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
+			// IE<8 needs the *property* name
+			elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
+
+		// Use defaultChecked and defaultSelected for oldIE
+		} else {
+			elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
+		}
+
+		return name;
+	}
+};
+
+// fix oldIE value attroperty
+if ( !getSetInput || !getSetAttribute ) {
+	jQuery.attrHooks.value = {
+		get: function( elem, name ) {
+			var ret = elem.getAttributeNode( name );
+			return jQuery.nodeName( elem, "input" ) ?
+
+				// Ignore the value *property* by using defaultValue
+				elem.defaultValue :
+
+				ret && ret.specified ? ret.value : undefined;
+		},
+		set: function( elem, value, name ) {
+			if ( jQuery.nodeName( elem, "input" ) ) {
+				// Does not return so that setAttribute is also used
+				elem.defaultValue = value;
+			} else {
+				// Use nodeHook if defined (#1954); otherwise setAttribute is fine
+				return nodeHook && nodeHook.set( elem, value, name );
+			}
+		}
+	};
+}
+
+// IE6/7 do not support getting/setting some attributes with get/setAttribute
+if ( !getSetAttribute ) {
+
+	// Use this for any attribute in IE6/7
+	// This fixes almost every IE6/7 issue
+	nodeHook = jQuery.valHooks.button = {
+		get: function( elem, name ) {
+			var ret = elem.getAttributeNode( name );
+			return ret && ( name === "id" || name === "name" || name === "coords" ? ret.value !== "" : ret.specified ) ?
+				ret.value :
+				undefined;
+		},
+		set: function( elem, value, name ) {
+			// Set the existing or create a new attribute node
+			var ret = elem.getAttributeNode( name );
+			if ( !ret ) {
+				elem.setAttributeNode(
+					(ret = elem.ownerDocument.createAttribute( name ))
+				);
+			}
+
+			ret.value = value += "";
+
+			// Break association with cloned elements by also using setAttribute (#9646)
+			return name === "value" || value === elem.getAttribute( name ) ?
+				value :
+				undefined;
+		}
+	};
+
+	// Set contenteditable to false on removals(#10429)
+	// Setting to empty string throws an error as an invalid value
+	jQuery.attrHooks.contenteditable = {
+		get: nodeHook.get,
+		set: function( elem, value, name ) {
+			nodeHook.set( elem, value === "" ? false : value, name );
+		}
+	};
+
+	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
+	// This is for removals
+	jQuery.each([ "width", "height" ], function( i, name ) {
+		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+			set: function( elem, value ) {
+				if ( value === "" ) {
+					elem.setAttribute( name, "auto" );
+					return value;
+				}
+			}
+		});
+	});
+}
+
+
+// Some attributes require a special call on IE
+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !jQuery.support.hrefNormalized ) {
+	jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
+		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+			get: function( elem ) {
+				var ret = elem.getAttribute( name, 2 );
+				return ret == null ? undefined : ret;
+			}
+		});
+	});
+
+	// href/src property should get the full normalized URL (#10299/#12915)
+	jQuery.each([ "href", "src" ], function( i, name ) {
+		jQuery.propHooks[ name ] = {
+			get: function( elem ) {
+				return elem.getAttribute( name, 4 );
+			}
+		};
+	});
+}
+
+if ( !jQuery.support.style ) {
+	jQuery.attrHooks.style = {
+		get: function( elem ) {
+			// Return undefined in the case of empty string
+			// Note: IE uppercases css property names, but if we were to .toLowerCase()
+			// .cssText, that would destroy case senstitivity in URL's, like in "background"
+			return elem.style.cssText || undefined;
+		},
+		set: function( elem, value ) {
+			return ( elem.style.cssText = value + "" );
+		}
+	};
+}
+
+// Safari mis-reports the default selected property of an option
+// Accessing the parent's selectedIndex property fixes it
+if ( !jQuery.support.optSelected ) {
+	jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
+		get: function( elem ) {
+			var parent = elem.parentNode;
+
+			if ( parent ) {
+				parent.selectedIndex;
+
+				// Make sure that it also works with optgroups, see #5701
+				if ( parent.parentNode ) {
+					parent.parentNode.selectedIndex;
+				}
+			}
+			return null;
+		}
+	});
+}
+
+// IE6/7 call enctype encoding
+if ( !jQuery.support.enctype ) {
+	jQuery.propFix.enctype = "encoding";
+}
+
+// Radios and checkboxes getter/setter
+if ( !jQuery.support.checkOn ) {
+	jQuery.each([ "radio", "checkbox" ], function() {
+		jQuery.valHooks[ this ] = {
+			get: function( elem ) {
+				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+				return elem.getAttribute("value") === null ? "on" : elem.value;
+			}
+		};
+	});
+}
+jQuery.each([ "radio", "checkbox" ], function() {
+	jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
+		set: function( elem, value ) {
+			if ( jQuery.isArray( value ) ) {
+				return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
+			}
+		}
+	});
+});
+var rformElems = /^(?:input|select|textarea)$/i,
+	rkeyEvent = /^key/,
+	rmouseEvent = /^(?:mouse|contextmenu)|click/,
+	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+	rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
+
+function returnTrue() {
+	return true;
+}
+
+function returnFalse() {
+	return false;
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+	global: {},
+
+	add: function( elem, types, handler, data, selector ) {
+
+		var handleObjIn, eventHandle, tmp,
+			events, t, handleObj,
+			special, handlers, type, namespaces, origType,
+			// Don't attach events to noData or text/comment nodes (but allow plain objects)
+			elemData = elem.nodeType !== 3 && elem.nodeType !== 8 && jQuery._data( elem );
+
+		if ( !elemData ) {
+			return;
+		}
+
+		// Caller can pass in an object of custom data in lieu of the handler
+		if ( handler.handler ) {
+			handleObjIn = handler;
+			handler = handleObjIn.handler;
+			selector = handleObjIn.selector;
+		}
+
+		// Make sure that the handler has a unique ID, used to find/remove it later
+		if ( !handler.guid ) {
+			handler.guid = jQuery.guid++;
+		}
+
+		// Init the element's event structure and main handler, if this is the first
+		if ( !(events = elemData.events) ) {
+			events = elemData.events = {};
+		}
+		if ( !(eventHandle = elemData.handle) ) {
+			eventHandle = elemData.handle = function( e ) {
+				// Discard the second event of a jQuery.event.trigger() and
+				// when an event is called after a page has unloaded
+				return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
+					jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
+					undefined;
+			};
+			// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
+			eventHandle.elem = elem;
+		}
+
+		// Handle multiple events separated by a space
+		// jQuery(...).bind("mouseover mouseout", fn);
+		types = ( types || "" ).match( core_rnotwhite ) || [""];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[t] ) || [];
+			type = origType = tmp[1];
+			namespaces = ( tmp[2] || "" ).split( "." ).sort();
+
+			// If event changes its type, use the special event handlers for the changed type
+			special = jQuery.event.special[ type ] || {};
+
+			// If selector defined, determine special event api type, otherwise given type
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+
+			// Update special based on newly reset type
+			special = jQuery.event.special[ type ] || {};
+
+			// handleObj is passed to all event handlers
+			handleObj = jQuery.extend({
+				type: type,
+				origType: origType,
+				data: data,
+				handler: handler,
+				guid: handler.guid,
+				selector: selector,
+				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+				namespace: namespaces.join(".")
+			}, handleObjIn );
+
+			// Init the event handler queue if we're the first
+			if ( !(handlers = events[ type ]) ) {
+				handlers = events[ type ] = [];
+				handlers.delegateCount = 0;
+
+				// Only use addEventListener/attachEvent if the special events handler returns false
+				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+					// Bind the global event handler to the element
+					if ( elem.addEventListener ) {
+						elem.addEventListener( type, eventHandle, false );
+
+					} else if ( elem.attachEvent ) {
+						elem.attachEvent( "on" + type, eventHandle );
+					}
+				}
+			}
+
+			if ( special.add ) {
+				special.add.call( elem, handleObj );
+
+				if ( !handleObj.handler.guid ) {
+					handleObj.handler.guid = handler.guid;
+				}
+			}
+
+			// Add to the element's handler list, delegates in front
+			if ( selector ) {
+				handlers.splice( handlers.delegateCount++, 0, handleObj );
+			} else {
+				handlers.push( handleObj );
+			}
+
+			// Keep track of which events have ever been used, for event optimization
+			jQuery.event.global[ type ] = true;
+		}
+
+		// Nullify elem to prevent memory leaks in IE
+		elem = null;
+	},
+
+	// Detach an event or set of events from an element
+	remove: function( elem, types, handler, selector, mappedTypes ) {
+
+		var j, origCount, tmp,
+			events, t, handleObj,
+			special, handlers, type, namespaces, origType,
+			elemData = jQuery.hasData( elem ) && jQuery._data( elem );
+
+		if ( !elemData || !(events = elemData.events) ) {
+			return;
+		}
+
+		// Once for each type.namespace in types; type may be omitted
+		types = ( types || "" ).match( core_rnotwhite ) || [""];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[t] ) || [];
+			type = origType = tmp[1];
+			namespaces = ( tmp[2] || "" ).split( "." ).sort();
+
+			// Unbind all events (on this namespace, if provided) for the element
+			if ( !type ) {
+				for ( type in events ) {
+					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+				}
+				continue;
+			}
+
+			special = jQuery.event.special[ type ] || {};
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+			handlers = events[ type ] || [];
+			tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
+
+			// Remove matching events
+			origCount = j = handlers.length;
+			while ( j-- ) {
+				handleObj = handlers[ j ];
+
+				if ( ( mappedTypes || origType === handleObj.origType ) &&
+					( !handler || handler.guid === handleObj.guid ) &&
+					( !tmp || tmp.test( handleObj.namespace ) ) &&
+					( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
+					handlers.splice( j, 1 );
+
+					if ( handleObj.selector ) {
+						handlers.delegateCount--;
+					}
+					if ( special.remove ) {
+						special.remove.call( elem, handleObj );
+					}
+				}
+			}
+
+			// Remove generic event handler if we removed something and no more handlers exist
+			// (avoids potential for endless recursion during removal of special event handlers)
+			if ( origCount && !handlers.length ) {
+				if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+					jQuery.removeEvent( elem, type, elemData.handle );
+				}
+
+				delete events[ type ];
+			}
+		}
+
+		// Remove the expando if it's no longer used
+		if ( jQuery.isEmptyObject( events ) ) {
+			delete elemData.handle;
+
+			// removeData also checks for emptiness and clears the expando if empty
+			// so use it instead of delete
+			jQuery._removeData( elem, "events" );
+		}
+	},
+
+	trigger: function( event, data, elem, onlyHandlers ) {
+
+		var i, cur, tmp, bubbleType, ontype, handle, special,
+			eventPath = [ elem || document ],
+			type = event.type || event,
+			namespaces = event.namespace ? event.namespace.split(".") : [];
+
+		cur = tmp = elem = elem || document;
+
+		// Don't do events on text and comment nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		// focus/blur morphs to focusin/out; ensure we're not firing them right now
+		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+			return;
+		}
+
+		if ( type.indexOf(".") >= 0 ) {
+			// Namespaced trigger; create a regexp to match event type in handle()
+			namespaces = type.split(".");
+			type = namespaces.shift();
+			namespaces.sort();
+		}
+		ontype = type.indexOf(":") < 0 && "on" + type;
+
+		// Caller can pass in a jQuery.Event object, Object, or just an event type string
+		event = event[ jQuery.expando ] ?
+			event :
+			new jQuery.Event( type, typeof event === "object" && event );
+
+		event.isTrigger = true;
+		event.namespace = namespaces.join(".");
+		event.namespace_re = event.namespace ?
+			new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
+			null;
+
+		// Clean up the event in case it is being reused
+		event.result = undefined;
+		if ( !event.target ) {
+			event.target = elem;
+		}
+
+		// Clone any incoming data and prepend the event, creating the handler arg list
+		data = data == null ?
+			[ event ] :
+			jQuery.makeArray( data, [ event ] );
+
+		// Allow special events to draw outside the lines
+		special = jQuery.event.special[ type ] || {};
+		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+			return;
+		}
+
+		// Determine event propagation path in advance, per W3C events spec (#9951)
+		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+			bubbleType = special.delegateType || type;
+			if ( !rfocusMorph.test( bubbleType + type ) ) {
+				cur = cur.parentNode;
+			}
+			for ( ; cur; cur = cur.parentNode ) {
+				eventPath.push( cur );
+				tmp = cur;
+			}
+
+			// Only add window if we got to document (e.g., not plain obj or detached DOM)
+			if ( tmp === (elem.ownerDocument || document) ) {
+				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+			}
+		}
+
+		// Fire handlers on the event path
+		i = 0;
+		while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
+
+			event.type = i > 1 ?
+				bubbleType :
+				special.bindType || type;
+
+			// jQuery handler
+			handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
+			if ( handle ) {
+				handle.apply( cur, data );
+			}
+
+			// Native handler
+			handle = ontype && cur[ ontype ];
+			if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {
+				event.preventDefault();
+			}
+		}
+		event.type = type;
+
+		// If nobody prevented the default action, do it now
+		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+			if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
+				!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
+
+				// Call a native DOM method on the target with the same name name as the event.
+				// Can't use an .isFunction() check here because IE6/7 fails that test.
+				// Don't do default actions on window, that's where global variables be (#6170)
+				if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
+
+					// Don't re-trigger an onFOO event when we call its FOO() method
+					tmp = elem[ ontype ];
+
+					if ( tmp ) {
+						elem[ ontype ] = null;
+					}
+
+					// Prevent re-triggering of the same event, since we already bubbled it above
+					jQuery.event.triggered = type;
+					try {
+						elem[ type ]();
+					} catch ( e ) {
+						// IE<9 dies on focus/blur to hidden element (#1486,#12518)
+						// only reproducible on winXP IE8 native, not IE9 in IE8 mode
+					}
+					jQuery.event.triggered = undefined;
+
+					if ( tmp ) {
+						elem[ ontype ] = tmp;
+					}
+				}
+			}
+		}
+
+		return event.result;
+	},
+
+	dispatch: function( event ) {
+
+		// Make a writable jQuery.Event from the native event object
+		event = jQuery.event.fix( event );
+
+		var i, j, ret, matched, handleObj,
+			handlerQueue = [],
+			args = core_slice.call( arguments ),
+			handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
+			special = jQuery.event.special[ event.type ] || {};
+
+		// Use the fix-ed jQuery.Event rather than the (read-only) native event
+		args[0] = event;
+		event.delegateTarget = this;
+
+		// Call the preDispatch hook for the mapped type, and let it bail if desired
+		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+			return;
+		}
+
+		// Determine handlers
+		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+		// Run delegates first; they may want to stop propagation beneath us
+		i = 0;
+		while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
+			event.currentTarget = matched.elem;
+
+			j = 0;
+			while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
+
+				// Triggered event must either 1) have no namespace, or
+				// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
+				if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
+
+					event.handleObj = handleObj;
+					event.data = handleObj.data;
+
+					ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
+							.apply( matched.elem, args );
+
+					if ( ret !== undefined ) {
+						if ( (event.result = ret) === false ) {
+							event.preventDefault();
+							event.stopPropagation();
+						}
+					}
+				}
+			}
+		}
+
+		// Call the postDispatch hook for the mapped type
+		if ( special.postDispatch ) {
+			special.postDispatch.call( this, event );
+		}
+
+		return event.result;
+	},
+
+	handlers: function( event, handlers ) {
+		var i, matches, sel, handleObj,
+			handlerQueue = [],
+			delegateCount = handlers.delegateCount,
+			cur = event.target;
+
+		// Find delegate handlers
+		// Black-hole SVG <use> instance trees (#13180)
+		// Avoid non-left-click bubbling in Firefox (#3861)
+		if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
+
+			for ( ; cur != this; cur = cur.parentNode || this ) {
+
+				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+				if ( cur.disabled !== true || event.type !== "click" ) {
+					matches = [];
+					for ( i = 0; i < delegateCount; i++ ) {
+						handleObj = handlers[ i ];
+
+						// Don't conflict with Object.prototype properties (#13203)
+						sel = handleObj.selector + " ";
+
+						if ( matches[ sel ] === undefined ) {
+							matches[ sel ] = handleObj.needsContext ?
+								jQuery( sel, this ).index( cur ) >= 0 :
+								jQuery.find( sel, this, null, [ cur ] ).length;
+						}
+						if ( matches[ sel ] ) {
+							matches.push( handleObj );
+						}
+					}
+					if ( matches.length ) {
+						handlerQueue.push({ elem: cur, handlers: matches });
+					}
+				}
+			}
+		}
+
+		// Add the remaining (directly-bound) handlers
+		if ( delegateCount < handlers.length ) {
+			handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
+		}
+
+		return handlerQueue;
+	},
+
+	fix: function( event ) {
+		if ( event[ jQuery.expando ] ) {
+			return event;
+		}
+
+		// Create a writable copy of the event object and normalize some properties
+		var i, prop,
+			originalEvent = event,
+			fixHook = jQuery.event.fixHooks[ event.type ] || {},
+			copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+
+		event = new jQuery.Event( originalEvent );
+
+		i = copy.length;
+		while ( i-- ) {
+			prop = copy[ i ];
+			event[ prop ] = originalEvent[ prop ];
+		}
+
+		// Support: IE<9
+		// Fix target property (#1925)
+		if ( !event.target ) {
+			event.target = originalEvent.srcElement || document;
+		}
+
+		// Support: Chrome 23+, Safari?
+		// Target should not be a text node (#504, #13143)
+		if ( event.target.nodeType === 3 ) {
+			event.target = event.target.parentNode;
+		}
+
+		// Support: IE<9
+		// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
+		event.metaKey = !!event.metaKey;
+
+		return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
+	},
+
+	// Includes some event props shared by KeyEvent and MouseEvent
+	props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+
+	fixHooks: {},
+
+	keyHooks: {
+		props: "char charCode key keyCode".split(" "),
+		filter: function( event, original ) {
+
+			// Add which for key events
+			if ( event.which == null ) {
+				event.which = original.charCode != null ? original.charCode : original.keyCode;
+			}
+
+			return event;
+		}
+	},
+
+	mouseHooks: {
+		props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+		filter: function( event, original ) {
+			var eventDoc, doc, body,
+				button = original.button,
+				fromElement = original.fromElement;
+
+			// Calculate pageX/Y if missing and clientX/Y available
+			if ( event.pageX == null && original.clientX != null ) {
+				eventDoc = event.target.ownerDocument || document;
+				doc = eventDoc.documentElement;
+				body = eventDoc.body;
+
+				event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
+				event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
+			}
+
+			// Add relatedTarget, if necessary
+			if ( !event.relatedTarget && fromElement ) {
+				event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
+			}
+
+			// Add which for click: 1 === left; 2 === middle; 3 === right
+			// Note: button is not normalized, so don't use it
+			if ( !event.which && button !== undefined ) {
+				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+			}
+
+			return event;
+		}
+	},
+
+	special: {
+		load: {
+			// Prevent triggered image.load events from bubbling to window.load
+			noBubble: true
+		},
+		click: {
+			// For checkbox, fire native event so checked state will be right
+			trigger: function() {
+				if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
+					this.click();
+					return false;
+				}
+			}
+		},
+		focus: {
+			// Fire native event if possible so blur/focus sequence is correct
+			trigger: function() {
+				if ( this !== document.activeElement && this.focus ) {
+					try {
+						this.focus();
+						return false;
+					} catch ( e ) {
+						// Support: IE<9
+						// If we error on focus to hidden element (#1486, #12518),
+						// let .trigger() run the handlers
+					}
+				}
+			},
+			delegateType: "focusin"
+		},
+		blur: {
+			trigger: function() {
+				if ( this === document.activeElement && this.blur ) {
+					this.blur();
+					return false;
+				}
+			},
+			delegateType: "focusout"
+		},
+
+		beforeunload: {
+			postDispatch: function( event ) {
+
+				// Even when returnValue equals to undefined Firefox will still show alert
+				if ( event.result !== undefined ) {
+					event.originalEvent.returnValue = event.result;
+				}
+			}
+		}
+	},
+
+	simulate: function( type, elem, event, bubble ) {
+		// Piggyback on a donor event to simulate a different one.
+		// Fake originalEvent to avoid donor's stopPropagation, but if the
+		// simulated event prevents default then we do the same on the donor.
+		var e = jQuery.extend(
+			new jQuery.Event(),
+			event,
+			{ type: type,
+				isSimulated: true,
+				originalEvent: {}
+			}
+		);
+		if ( bubble ) {
+			jQuery.event.trigger( e, null, elem );
+		} else {
+			jQuery.event.dispatch.call( elem, e );
+		}
+		if ( e.isDefaultPrevented() ) {
+			event.preventDefault();
+		}
+	}
+};
+
+jQuery.removeEvent = document.removeEventListener ?
+	function( elem, type, handle ) {
+		if ( elem.removeEventListener ) {
+			elem.removeEventListener( type, handle, false );
+		}
+	} :
+	function( elem, type, handle ) {
+		var name = "on" + type;
+
+		if ( elem.detachEvent ) {
+
+			// #8545, #7054, preventing memory leaks for custom events in IE6-8
+			// detachEvent needed property on element, by name of that event, to properly expose it to GC
+			if ( typeof elem[ name ] === "undefined" ) {
+				elem[ name ] = null;
+			}
+
+			elem.detachEvent( name, handle );
+		}
+	};
+
+jQuery.Event = function( src, props ) {
+	// Allow instantiation without the 'new' keyword
+	if ( !(this instanceof jQuery.Event) ) {
+		return new jQuery.Event( src, props );
+	}
+
+	// Event object
+	if ( src && src.type ) {
+		this.originalEvent = src;
+		this.type = src.type;
+
+		// Events bubbling up the document may have been marked as prevented
+		// by a handler lower down the tree; reflect the correct value.
+		this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
+			src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
+
+	// Event type
+	} else {
+		this.type = src;
+	}
+
+	// Put explicitly provided properties onto the event object
+	if ( props ) {
+		jQuery.extend( this, props );
+	}
+
+	// Create a timestamp if incoming event doesn't have one
+	this.timeStamp = src && src.timeStamp || jQuery.now();
+
+	// Mark it as fixed
+	this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+	isDefaultPrevented: returnFalse,
+	isPropagationStopped: returnFalse,
+	isImmediatePropagationStopped: returnFalse,
+
+	preventDefault: function() {
+		var e = this.originalEvent;
+
+		this.isDefaultPrevented = returnTrue;
+		if ( !e ) {
+			return;
+		}
+
+		// If preventDefault exists, run it on the original event
+		if ( e.preventDefault ) {
+			e.preventDefault();
+
+		// Support: IE
+		// Otherwise set the returnValue property of the original event to false
+		} else {
+			e.returnValue = false;
+		}
+	},
+	stopPropagation: function() {
+		var e = this.originalEvent;
+
+		this.isPropagationStopped = returnTrue;
+		if ( !e ) {
+			return;
+		}
+		// If stopPropagation exists, run it on the original event
+		if ( e.stopPropagation ) {
+			e.stopPropagation();
+		}
+
+		// Support: IE
+		// Set the cancelBubble property of the original event to true
+		e.cancelBubble = true;
+	},
+	stopImmediatePropagation: function() {
+		this.isImmediatePropagationStopped = returnTrue;
+		this.stopPropagation();
+	}
+};
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+jQuery.each({
+	mouseenter: "mouseover",
+	mouseleave: "mouseout"
+}, function( orig, fix ) {
+	jQuery.event.special[ orig ] = {
+		delegateType: fix,
+		bindType: fix,
+
+		handle: function( event ) {
+			var ret,
+				target = this,
+				related = event.relatedTarget,
+				handleObj = event.handleObj;
+
+			// For mousenter/leave call the handler if related is outside the target.
+			// NB: No relatedTarget if the mouse left/entered the browser window
+			if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
+				event.type = handleObj.origType;
+				ret = handleObj.handler.apply( this, arguments );
+				event.type = fix;
+			}
+			return ret;
+		}
+	};
+});
+
+// IE submit delegation
+if ( !jQuery.support.submitBubbles ) {
+
+	jQuery.event.special.submit = {
+		setup: function() {
+			// Only need this for delegated form submit events
+			if ( jQuery.nodeName( this, "form" ) ) {
+				return false;
+			}
+
+			// Lazy-add a submit handler when a descendant form may potentially be submitted
+			jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
+				// Node name check avoids a VML-related crash in IE (#9807)
+				var elem = e.target,
+					form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
+				if ( form && !jQuery._data( form, "submitBubbles" ) ) {
+					jQuery.event.add( form, "submit._submit", function( event ) {
+						event._submit_bubble = true;
+					});
+					jQuery._data( form, "submitBubbles", true );
+				}
+			});
+			// return undefined since we don't need an event listener
+		},
+
+		postDispatch: function( event ) {
+			// If form was submitted by the user, bubble the event up the tree
+			if ( event._submit_bubble ) {
+				delete event._submit_bubble;
+				if ( this.parentNode && !event.isTrigger ) {
+					jQuery.event.simulate( "submit", this.parentNode, event, true );
+				}
+			}
+		},
+
+		teardown: function() {
+			// Only need this for delegated form submit events
+			if ( jQuery.nodeName( this, "form" ) ) {
+				return false;
+			}
+
+			// Remove delegated handlers; cleanData eventually reaps submit handlers attached above
+			jQuery.event.remove( this, "._submit" );
+		}
+	};
+}
+
+// IE change delegation and checkbox/radio fix
+if ( !jQuery.support.changeBubbles ) {
+
+	jQuery.event.special.change = {
+
+		setup: function() {
+
+			if ( rformElems.test( this.nodeName ) ) {
+				// IE doesn't fire change on a check/radio until blur; trigger it on click
+				// after a propertychange. Eat the blur-change in special.change.handle.
+				// This still fires onchange a second time for check/radio after blur.
+				if ( this.type === "checkbox" || this.type === "radio" ) {
+					jQuery.event.add( this, "propertychange._change", function( event ) {
+						if ( event.originalEvent.propertyName === "checked" ) {
+							this._just_changed = true;
+						}
+					});
+					jQuery.event.add( this, "click._change", function( event ) {
+						if ( this._just_changed && !event.isTrigger ) {
+							this._just_changed = false;
+						}
+						// Allow triggered, simulated change events (#11500)
+						jQuery.event.simulate( "change", this, event, true );
+					});
+				}
+				return false;
+			}
+			// Delegated event; lazy-add a change handler on descendant inputs
+			jQuery.event.add( this, "beforeactivate._change", function( e ) {
+				var elem = e.target;
+
+				if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {
+					jQuery.event.add( elem, "change._change", function( event ) {
+						if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
+							jQuery.event.simulate( "change", this.parentNode, event, true );
+						}
+					});
+					jQuery._data( elem, "changeBubbles", true );
+				}
+			});
+		},
+
+		handle: function( event ) {
+			var elem = event.target;
+
+			// Swallow native change events from checkbox/radio, we already triggered them above
+			if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
+				return event.handleObj.handler.apply( this, arguments );
+			}
+		},
+
+		teardown: function() {
+			jQuery.event.remove( this, "._change" );
+
+			return !rformElems.test( this.nodeName );
+		}
+	};
+}
+
+// Create "bubbling" focus and blur events
+if ( !jQuery.support.focusinBubbles ) {
+	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+		// Attach a single capturing handler while someone wants focusin/focusout
+		var attaches = 0,
+			handler = function( event ) {
+				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
+			};
+
+		jQuery.event.special[ fix ] = {
+			setup: function() {
+				if ( attaches++ === 0 ) {
+					document.addEventListener( orig, handler, true );
+				}
+			},
+			teardown: function() {
+				if ( --attaches === 0 ) {
+					document.removeEventListener( orig, handler, true );
+				}
+			}
+		};
+	});
+}
+
+jQuery.fn.extend({
+
+	on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
+		var origFn, type;
+
+		// Types can be a map of types/handlers
+		if ( typeof types === "object" ) {
+			// ( types-Object, selector, data )
+			if ( typeof selector !== "string" ) {
+				// ( types-Object, data )
+				data = data || selector;
+				selector = undefined;
+			}
+			for ( type in types ) {
+				this.on( type, selector, data, types[ type ], one );
+			}
+			return this;
+		}
+
+		if ( data == null && fn == null ) {
+			// ( types, fn )
+			fn = selector;
+			data = selector = undefined;
+		} else if ( fn == null ) {
+			if ( typeof selector === "string" ) {
+				// ( types, selector, fn )
+				fn = data;
+				data = undefined;
+			} else {
+				// ( types, data, fn )
+				fn = data;
+				data = selector;
+				selector = undefined;
+			}
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		} else if ( !fn ) {
+			return this;
+		}
+
+		if ( one === 1 ) {
+			origFn = fn;
+			fn = function( event ) {
+				// Can use an empty set, since event contains the info
+				jQuery().off( event );
+				return origFn.apply( this, arguments );
+			};
+			// Use same guid so caller can remove using origFn
+			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+		}
+		return this.each( function() {
+			jQuery.event.add( this, types, fn, data, selector );
+		});
+	},
+	one: function( types, selector, data, fn ) {
+		return this.on( types, selector, data, fn, 1 );
+	},
+	off: function( types, selector, fn ) {
+		var handleObj, type;
+		if ( types && types.preventDefault && types.handleObj ) {
+			// ( event )  dispatched jQuery.Event
+			handleObj = types.handleObj;
+			jQuery( types.delegateTarget ).off(
+				handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
+				handleObj.selector,
+				handleObj.handler
+			);
+			return this;
+		}
+		if ( typeof types === "object" ) {
+			// ( types-object [, selector] )
+			for ( type in types ) {
+				this.off( type, selector, types[ type ] );
+			}
+			return this;
+		}
+		if ( selector === false || typeof selector === "function" ) {
+			// ( types [, fn] )
+			fn = selector;
+			selector = undefined;
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		}
+		return this.each(function() {
+			jQuery.event.remove( this, types, fn, selector );
+		});
+	},
+
+	bind: function( types, data, fn ) {
+		return this.on( types, null, data, fn );
+	},
+	unbind: function( types, fn ) {
+		return this.off( types, null, fn );
+	},
+
+	delegate: function( selector, types, data, fn ) {
+		return this.on( types, selector, data, fn );
+	},
+	undelegate: function( selector, types, fn ) {
+		// ( namespace ) or ( selector, types [, fn] )
+		return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
+	},
+
+	trigger: function( type, data ) {
+		return this.each(function() {
+			jQuery.event.trigger( type, data, this );
+		});
+	},
+	triggerHandler: function( type, data ) {
+		var elem = this[0];
+		if ( elem ) {
+			return jQuery.event.trigger( type, data, elem, true );
+		}
+	},
+
+	hover: function( fnOver, fnOut ) {
+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+	}
+});
+
+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+	"change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
+
+	// Handle event binding
+	jQuery.fn[ name ] = function( data, fn ) {
+		return arguments.length > 0 ?
+			this.on( name, null, data, fn ) :
+			this.trigger( name );
+	};
+
+	if ( rkeyEvent.test( name ) ) {
+		jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
+	}
+
+	if ( rmouseEvent.test( name ) ) {
+		jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
+	}
+});
+/*!
+ * Sizzle CSS Selector Engine
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://sizzlejs.com/
+ */
+(function( window, undefined ) {
+
+var i,
+	cachedruns,
+	Expr,
+	getText,
+	isXML,
+	compile,
+	hasDuplicate,
+	outermostContext,
+
+	// Local document vars
+	setDocument,
+	document,
+	docElem,
+	documentIsXML,
+	rbuggyQSA,
+	rbuggyMatches,
+	matches,
+	contains,
+	sortOrder,
+
+	// Instance-specific data
+	expando = "sizzle" + -(new Date()),
+	preferredDoc = window.document,
+	support = {},
+	dirruns = 0,
+	done = 0,
+	classCache = createCache(),
+	tokenCache = createCache(),
+	compilerCache = createCache(),
+
+	// General-purpose constants
+	strundefined = typeof undefined,
+	MAX_NEGATIVE = 1 << 31,
+
+	// Array methods
+	arr = [],
+	pop = arr.pop,
+	push = arr.push,
+	slice = arr.slice,
+	// Use a stripped-down indexOf if we can't use a native one
+	indexOf = arr.indexOf || function( elem ) {
+		var i = 0,
+			len = this.length;
+		for ( ; i < len; i++ ) {
+			if ( this[i] === elem ) {
+				return i;
+			}
+		}
+		return -1;
+	},
+
+
+	// Regular expressions
+
+	// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
+	whitespace = "[\\x20\\t\\r\\n\\f]",
+	// http://www.w3.org/TR/css3-syntax/#characters
+	characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
+
+	// Loosely modeled on CSS identifier characters
+	// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
+	// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+	identifier = characterEncoding.replace( "w", "w#" ),
+
+	// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors
+	operators = "([*^$|!~]?=)",
+	attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +
+		"*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",
+
+	// Prefer arguments quoted,
+	//   then not containing pseudos/brackets,
+	//   then attribute selectors/non-parenthetical expressions,
+	//   then anything else
+	// These preferences are here to reduce the number of selectors
+	//   needing tokenize in the PSEUDO preFilter
+	pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)",
+
+	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+	rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ),
+	rpseudo = new RegExp( pseudos ),
+	ridentifier = new RegExp( "^" + identifier + "$" ),
+
+	matchExpr = {
+		"ID": new RegExp( "^#(" + characterEncoding + ")" ),
+		"CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
+		"NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ),
+		"TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
+		"ATTR": new RegExp( "^" + attributes ),
+		"PSEUDO": new RegExp( "^" + pseudos ),
+		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+		// For use in libraries implementing .is()
+		// We use this for POS matching in `select`
+		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+	},
+
+	rsibling = /[\x20\t\r\n\f]*[+~]/,
+
+	rnative = /\{\s*\[native code\]\s*\}/,
+
+	// Easily-parseable/retrievable ID or TAG or CLASS selectors
+	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+	rinputs = /^(?:input|select|textarea|button)$/i,
+	rheader = /^h\d$/i,
+
+	rescape = /'|\\/g,
+	rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,
+
+	// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+	runescape = /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,
+	funescape = function( _, escaped ) {
+		var high = "0x" + escaped - 0x10000;
+		// NaN means non-codepoint
+		return high !== high ?
+			escaped :
+			// BMP codepoint
+			high < 0 ?
+				String.fromCharCode( high + 0x10000 ) :
+				// Supplemental Plane codepoint (surrogate pair)
+				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+	};
+
+// Use a stripped-down slice if we can't use a native one
+try {
+	slice.call( docElem.childNodes, 0 )[0].nodeType;
+} catch ( e ) {
+	slice = function( i ) {
+		var elem,
+			results = [];
+		for ( ; (elem = this[i]); i++ ) {
+			results.push( elem );
+		}
+		return results;
+	};
+}
+
+/**
+ * For feature detection
+ * @param {Function} fn The function to test for native support
+ */
+function isNative( fn ) {
+	return rnative.test( fn + "" );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
+ *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ *	deleting the oldest entry
+ */
+function createCache() {
+	var cache,
+		keys = [];
+
+	return (cache = function( key, value ) {
+		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+		if ( keys.push( key += " " ) > Expr.cacheLength ) {
+			// Only keep the most recent entries
+			delete cache[ keys.shift() ];
+		}
+		return (cache[ key ] = value);
+	});
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+	fn[ expando ] = true;
+	return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created div and expects a boolean result
+ */
+function assert( fn ) {
+	var div = document.createElement("div");
+
+	try {
+		return fn( div );
+	} catch (e) {
+		return false;
+	} finally {
+		// release memory in IE
+		div = null;
+	}
+}
+
+function Sizzle( selector, context, results, seed ) {
+	var match, elem, m, nodeType,
+		// QSA vars
+		i, groups, old, nid, newContext, newSelector;
+
+	if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+		setDocument( context );
+	}
+
+	context = context || document;
+	results = results || [];
+
+	if ( !selector || typeof selector !== "string" ) {
+		return results;
+	}
+
+	if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
+		return [];
+	}
+
+	if ( !documentIsXML && !seed ) {
+
+		// Shortcuts
+		if ( (match = rquickExpr.exec( selector )) ) {
+			// Speed-up: Sizzle("#ID")
+			if ( (m = match[1]) ) {
+				if ( nodeType === 9 ) {
+					elem = context.getElementById( m );
+					// Check parentNode to catch when Blackberry 4.6 returns
+					// nodes that are no longer in the document #6963
+					if ( elem && elem.parentNode ) {
+						// Handle the case where IE, Opera, and Webkit return items
+						// by name instead of ID
+						if ( elem.id === m ) {
+							results.push( elem );
+							return results;
+						}
+					} else {
+						return results;
+					}
+				} else {
+					// Context is not a document
+					if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
+						contains( context, elem ) && elem.id === m ) {
+						results.push( elem );
+						return results;
+					}
+				}
+
+			// Speed-up: Sizzle("TAG")
+			} else if ( match[2] ) {
+				push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) );
+				return results;
+
+			// Speed-up: Sizzle(".CLASS")
+			} else if ( (m = match[3]) && support.getByClassName && context.getElementsByClassName ) {
+				push.apply( results, slice.call(context.getElementsByClassName( m ), 0) );
+				return results;
+			}
+		}
+
+		// QSA path
+		if ( support.qsa && !rbuggyQSA.test(selector) ) {
+			old = true;
+			nid = expando;
+			newContext = context;
+			newSelector = nodeType === 9 && selector;
+
+			// qSA works strangely on Element-rooted queries
+			// We can work around this by specifying an extra ID on the root
+			// and working up from there (Thanks to Andrew Dupont for the technique)
+			// IE 8 doesn't work on object elements
+			if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+				groups = tokenize( selector );
+
+				if ( (old = context.getAttribute("id")) ) {
+					nid = old.replace( rescape, "\\$&" );
+				} else {
+					context.setAttribute( "id", nid );
+				}
+				nid = "[id='" + nid + "'] ";
+
+				i = groups.length;
+				while ( i-- ) {
+					groups[i] = nid + toSelector( groups[i] );
+				}
+				newContext = rsibling.test( selector ) && context.parentNode || context;
+				newSelector = groups.join(",");
+			}
+
+			if ( newSelector ) {
+				try {
+					push.apply( results, slice.call( newContext.querySelectorAll(
+						newSelector
+					), 0 ) );
+					return results;
+				} catch(qsaError) {
+				} finally {
+					if ( !old ) {
+						context.removeAttribute("id");
+					}
+				}
+			}
+		}
+	}
+
+	// All others
+	return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Detect xml
+ * @param {Element|Object} elem An element or a document
+ */
+isXML = Sizzle.isXML = function( elem ) {
+	// documentElement is verified for cases where it doesn't yet exist
+	// (such as loading iframes in IE - #4833)
+	var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+	return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+	var doc = node ? node.ownerDocument || node : preferredDoc;
+
+	// If no document and documentElement is available, return
+	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+		return document;
+	}
+
+	// Set our document
+	document = doc;
+	docElem = doc.documentElement;
+
+	// Support tests
+	documentIsXML = isXML( doc );
+
+	// Check if getElementsByTagName("*") returns only elements
+	support.tagNameNoComments = assert(function( div ) {
+		div.appendChild( doc.createComment("") );
+		return !div.getElementsByTagName("*").length;
+	});
+
+	// Check if attributes should be retrieved by attribute nodes
+	support.attributes = assert(function( div ) {
+		div.innerHTML = "<select></select>";
+		var type = typeof div.lastChild.getAttribute("multiple");
+		// IE8 returns a string for some attributes even when not present
+		return type !== "boolean" && type !== "string";
+	});
+
+	// Check if getElementsByClassName can be trusted
+	support.getByClassName = assert(function( div ) {
+		// Opera can't find a second classname (in 9.6)
+		div.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>";
+		if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) {
+			return false;
+		}
+
+		// Safari 3.2 caches class attributes and doesn't catch changes
+		div.lastChild.className = "e";
+		return div.getElementsByClassName("e").length === 2;
+	});
+
+	// Check if getElementById returns elements by name
+	// Check if getElementsByName privileges form controls or returns elements by ID
+	support.getByName = assert(function( div ) {
+		// Inject content
+		div.id = expando + 0;
+		div.innerHTML = "<a name='" + expando + "'></a><div name='" + expando + "'></div>";
+		docElem.insertBefore( div, docElem.firstChild );
+
+		// Test
+		var pass = doc.getElementsByName &&
+			// buggy browsers will return fewer than the correct 2
+			doc.getElementsByName( expando ).length === 2 +
+			// buggy browsers will return more than the correct 0
+			doc.getElementsByName( expando + 0 ).length;
+		support.getIdNotName = !doc.getElementById( expando );
+
+		// Cleanup
+		docElem.removeChild( div );
+
+		return pass;
+	});
+
+	// IE6/7 return modified attributes
+	Expr.attrHandle = assert(function( div ) {
+		div.innerHTML = "<a href='#'></a>";
+		return div.firstChild && typeof div.firstChild.getAttribute !== strundefined &&
+			div.firstChild.getAttribute("href") === "#";
+	}) ?
+		{} :
+		{
+			"href": function( elem ) {
+				return elem.getAttribute( "href", 2 );
+			},
+			"type": function( elem ) {
+				return elem.getAttribute("type");
+			}
+		};
+
+	// ID find and filter
+	if ( support.getIdNotName ) {
+		Expr.find["ID"] = function( id, context ) {
+			if ( typeof context.getElementById !== strundefined && !documentIsXML ) {
+				var m = context.getElementById( id );
+				// Check parentNode to catch when Blackberry 4.6 returns
+				// nodes that are no longer in the document #6963
+				return m && m.parentNode ? [m] : [];
+			}
+		};
+		Expr.filter["ID"] = function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				return elem.getAttribute("id") === attrId;
+			};
+		};
+	} else {
+		Expr.find["ID"] = function( id, context ) {
+			if ( typeof context.getElementById !== strundefined && !documentIsXML ) {
+				var m = context.getElementById( id );
+
+				return m ?
+					m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ?
+						[m] :
+						undefined :
+					[];
+			}
+		};
+		Expr.filter["ID"] =  function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
+				return node && node.value === attrId;
+			};
+		};
+	}
+
+	// Tag
+	Expr.find["TAG"] = support.tagNameNoComments ?
+		function( tag, context ) {
+			if ( typeof context.getElementsByTagName !== strundefined ) {
+				return context.getElementsByTagName( tag );
+			}
+		} :
+		function( tag, context ) {
+			var elem,
+				tmp = [],
+				i = 0,
+				results = context.getElementsByTagName( tag );
+
+			// Filter out possible comments
+			if ( tag === "*" ) {
+				for ( ; (elem = results[i]); i++ ) {
+					if ( elem.nodeType === 1 ) {
+						tmp.push( elem );
+					}
+				}
+
+				return tmp;
+			}
+			return results;
+		};
+
+	// Name
+	Expr.find["NAME"] = support.getByName && function( tag, context ) {
+		if ( typeof context.getElementsByName !== strundefined ) {
+			return context.getElementsByName( name );
+		}
+	};
+
+	// Class
+	Expr.find["CLASS"] = support.getByClassName && function( className, context ) {
+		if ( typeof context.getElementsByClassName !== strundefined && !documentIsXML ) {
+			return context.getElementsByClassName( className );
+		}
+	};
+
+	// QSA and matchesSelector support
+
+	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+	rbuggyMatches = [];
+
+	// qSa(:focus) reports false when true (Chrome 21),
+	// no need to also add to buggyMatches since matches checks buggyQSA
+	// A support test would require too much code (would include document ready)
+	rbuggyQSA = [ ":focus" ];
+
+	if ( (support.qsa = isNative(doc.querySelectorAll)) ) {
+		// Build QSA regex
+		// Regex strategy adopted from Diego Perini
+		assert(function( div ) {
+			// Select is set to empty string on purpose
+			// This is to test IE's treatment of not explictly
+			// setting a boolean content attribute,
+			// since its presence should be enough
+			// http://bugs.jquery.com/ticket/12359
+			div.innerHTML = "<select><option selected=''></option></select>";
+
+			// IE8 - Some boolean attributes are not treated correctly
+			if ( !div.querySelectorAll("[selected]").length ) {
+				rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" );
+			}
+
+			// Webkit/Opera - :checked should return selected option elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			// IE8 throws error here and will not see later tests
+			if ( !div.querySelectorAll(":checked").length ) {
+				rbuggyQSA.push(":checked");
+			}
+		});
+
+		assert(function( div ) {
+
+			// Opera 10-12/IE8 - ^= $= *= and empty values
+			// Should not select anything
+			div.innerHTML = "<input type='hidden' i=''/>";
+			if ( div.querySelectorAll("[i^='']").length ) {
+				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" );
+			}
+
+			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+			// IE8 throws error here and will not see later tests
+			if ( !div.querySelectorAll(":enabled").length ) {
+				rbuggyQSA.push( ":enabled", ":disabled" );
+			}
+
+			// Opera 10-11 does not throw on post-comma invalid pseudos
+			div.querySelectorAll("*,:x");
+			rbuggyQSA.push(",.*:");
+		});
+	}
+
+	if ( (support.matchesSelector = isNative( (matches = docElem.matchesSelector ||
+		docElem.mozMatchesSelector ||
+		docElem.webkitMatchesSelector ||
+		docElem.oMatchesSelector ||
+		docElem.msMatchesSelector) )) ) {
+
+		assert(function( div ) {
+			// Check to see if it's possible to do matchesSelector
+			// on a disconnected node (IE 9)
+			support.disconnectedMatch = matches.call( div, "div" );
+
+			// This should fail with an exception
+			// Gecko does not error, returns false instead
+			matches.call( div, "[s!='']:x" );
+			rbuggyMatches.push( "!=", pseudos );
+		});
+	}
+
+	rbuggyQSA = new RegExp( rbuggyQSA.join("|") );
+	rbuggyMatches = new RegExp( rbuggyMatches.join("|") );
+
+	// Element contains another
+	// Purposefully does not implement inclusive descendent
+	// As in, an element does not contain itself
+	contains = isNative(docElem.contains) || docElem.compareDocumentPosition ?
+		function( a, b ) {
+			var adown = a.nodeType === 9 ? a.documentElement : a,
+				bup = b && b.parentNode;
+			return a === bup || !!( bup && bup.nodeType === 1 && (
+				adown.contains ?
+					adown.contains( bup ) :
+					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+			));
+		} :
+		function( a, b ) {
+			if ( b ) {
+				while ( (b = b.parentNode) ) {
+					if ( b === a ) {
+						return true;
+					}
+				}
+			}
+			return false;
+		};
+
+	// Document order sorting
+	sortOrder = docElem.compareDocumentPosition ?
+	function( a, b ) {
+		var compare;
+
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		if ( (compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b )) ) {
+			if ( compare & 1 || a.parentNode && a.parentNode.nodeType === 11 ) {
+				if ( a === doc || contains( preferredDoc, a ) ) {
+					return -1;
+				}
+				if ( b === doc || contains( preferredDoc, b ) ) {
+					return 1;
+				}
+				return 0;
+			}
+			return compare & 4 ? -1 : 1;
+		}
+
+		return a.compareDocumentPosition ? -1 : 1;
+	} :
+	function( a, b ) {
+		var cur,
+			i = 0,
+			aup = a.parentNode,
+			bup = b.parentNode,
+			ap = [ a ],
+			bp = [ b ];
+
+		// The nodes are identical, we can exit early
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+
+		// Fallback to using sourceIndex (in IE) if it's available on both nodes
+		} else if ( a.sourceIndex && b.sourceIndex ) {
+			return ( ~b.sourceIndex || MAX_NEGATIVE ) - ( contains( preferredDoc, a ) && ~a.sourceIndex || MAX_NEGATIVE );
+
+		// Parentless nodes are either documents or disconnected
+		} else if ( !aup || !bup ) {
+			return a === doc ? -1 :
+				b === doc ? 1 :
+				aup ? -1 :
+				bup ? 1 :
+				0;
+
+		// If the nodes are siblings, we can do a quick check
+		} else if ( aup === bup ) {
+			return siblingCheck( a, b );
+		}
+
+		// Otherwise we need full lists of their ancestors for comparison
+		cur = a;
+		while ( (cur = cur.parentNode) ) {
+			ap.unshift( cur );
+		}
+		cur = b;
+		while ( (cur = cur.parentNode) ) {
+			bp.unshift( cur );
+		}
+
+		// Walk down the tree looking for a discrepancy
+		while ( ap[i] === bp[i] ) {
+			i++;
+		}
+
+		return i ?
+			// Do a sibling check if the nodes have a common ancestor
+			siblingCheck( ap[i], bp[i] ) :
+
+			// Otherwise nodes in our document sort first
+			ap[i] === preferredDoc ? -1 :
+			bp[i] === preferredDoc ? 1 :
+			0;
+	};
+
+	// Always assume the presence of duplicates if sort doesn't
+	// pass them to our comparison function (as in Google Chrome).
+	hasDuplicate = false;
+	[0, 0].sort( sortOrder );
+	support.detectDuplicates = hasDuplicate;
+
+	return document;
+};
+
+Sizzle.matches = function( expr, elements ) {
+	return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	// Make sure that attribute selectors are quoted
+	expr = expr.replace( rattributeQuotes, "='$1']" );
+
+	// rbuggyQSA always contains :focus, so no need for an existence check
+	if ( support.matchesSelector && !documentIsXML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && !rbuggyQSA.test(expr) ) {
+		try {
+			var ret = matches.call( elem, expr );
+
+			// IE 9's matchesSelector returns false on disconnected nodes
+			if ( ret || support.disconnectedMatch ||
+					// As well, disconnected nodes are said to be in a document
+					// fragment in IE 9
+					elem.document && elem.document.nodeType !== 11 ) {
+				return ret;
+			}
+		} catch(e) {}
+	}
+
+	return Sizzle( expr, document, null, [elem] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+	// Set document vars if needed
+	if ( ( context.ownerDocument || context ) !== document ) {
+		setDocument( context );
+	}
+	return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+	var val;
+
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	if ( !documentIsXML ) {
+		name = name.toLowerCase();
+	}
+	if ( (val = Expr.attrHandle[ name ]) ) {
+		return val( elem );
+	}
+	if ( documentIsXML || support.attributes ) {
+		return elem.getAttribute( name );
+	}
+	return ( (val = elem.getAttributeNode( name )) || elem.getAttribute( name ) ) && elem[ name ] === true ?
+		name :
+		val && val.specified ? val.value : null;
+};
+
+Sizzle.error = function( msg ) {
+	throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+// Document sorting and removing duplicates
+Sizzle.uniqueSort = function( results ) {
+	var elem,
+		duplicates = [],
+		i = 1,
+		j = 0;
+
+	// Unless we *know* we can detect duplicates, assume their presence
+	hasDuplicate = !support.detectDuplicates;
+	results.sort( sortOrder );
+
+	if ( hasDuplicate ) {
+		for ( ; (elem = results[i]); i++ ) {
+			if ( elem === results[ i - 1 ] ) {
+				j = duplicates.push( i );
+			}
+		}
+		while ( j-- ) {
+			results.splice( duplicates[ j ], 1 );
+		}
+	}
+
+	return results;
+};
+
+function siblingCheck( a, b ) {
+	var cur = a && b && a.nextSibling;
+
+	for ( ; cur; cur = cur.nextSibling ) {
+		if ( cur === b ) {
+			return -1;
+		}
+	}
+
+	return a ? 1 : -1;
+}
+
+// Returns a function to use in pseudos for input types
+function createInputPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return name === "input" && elem.type === type;
+	};
+}
+
+// Returns a function to use in pseudos for buttons
+function createButtonPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return (name === "input" || name === "button") && elem.type === type;
+	};
+}
+
+// Returns a function to use in pseudos for positionals
+function createPositionalPseudo( fn ) {
+	return markFunction(function( argument ) {
+		argument = +argument;
+		return markFunction(function( seed, matches ) {
+			var j,
+				matchIndexes = fn( [], seed.length, argument ),
+				i = matchIndexes.length;
+
+			// Match elements found at the specified indexes
+			while ( i-- ) {
+				if ( seed[ (j = matchIndexes[i]) ] ) {
+					seed[j] = !(matches[j] = seed[j]);
+				}
+			}
+		});
+	});
+}
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+	var node,
+		ret = "",
+		i = 0,
+		nodeType = elem.nodeType;
+
+	if ( !nodeType ) {
+		// If no nodeType, this is expected to be an array
+		for ( ; (node = elem[i]); i++ ) {
+			// Do not traverse comment nodes
+			ret += getText( node );
+		}
+	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+		// Use textContent for elements
+		// innerText usage removed for consistency of new lines (see #11153)
+		if ( typeof elem.textContent === "string" ) {
+			return elem.textContent;
+		} else {
+			// Traverse its children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				ret += getText( elem );
+			}
+		}
+	} else if ( nodeType === 3 || nodeType === 4 ) {
+		return elem.nodeValue;
+	}
+	// Do not include comment or processing instruction nodes
+
+	return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+	// Can be adjusted by the user
+	cacheLength: 50,
+
+	createPseudo: markFunction,
+
+	match: matchExpr,
+
+	find: {},
+
+	relative: {
+		">": { dir: "parentNode", first: true },
+		" ": { dir: "parentNode" },
+		"+": { dir: "previousSibling", first: true },
+		"~": { dir: "previousSibling" }
+	},
+
+	preFilter: {
+		"ATTR": function( match ) {
+			match[1] = match[1].replace( runescape, funescape );
+
+			// Move the given value to match[3] whether quoted or unquoted
+			match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape );
+
+			if ( match[2] === "~=" ) {
+				match[3] = " " + match[3] + " ";
+			}
+
+			return match.slice( 0, 4 );
+		},
+
+		"CHILD": function( match ) {
+			/* matches from matchExpr["CHILD"]
+				1 type (only|nth|...)
+				2 what (child|of-type)
+				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+				4 xn-component of xn+y argument ([+-]?\d*n|)
+				5 sign of xn-component
+				6 x of xn-component
+				7 sign of y-component
+				8 y of y-component
+			*/
+			match[1] = match[1].toLowerCase();
+
+			if ( match[1].slice( 0, 3 ) === "nth" ) {
+				// nth-* requires argument
+				if ( !match[3] ) {
+					Sizzle.error( match[0] );
+				}
+
+				// numeric x and y parameters for Expr.filter.CHILD
+				// remember that false/true cast respectively to 0/1
+				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+
+			// other types prohibit arguments
+			} else if ( match[3] ) {
+				Sizzle.error( match[0] );
+			}
+
+			return match;
+		},
+
+		"PSEUDO": function( match ) {
+			var excess,
+				unquoted = !match[5] && match[2];
+
+			if ( matchExpr["CHILD"].test( match[0] ) ) {
+				return null;
+			}
+
+			// Accept quoted arguments as-is
+			if ( match[4] ) {
+				match[2] = match[4];
+
+			// Strip excess characters from unquoted arguments
+			} else if ( unquoted && rpseudo.test( unquoted ) &&
+				// Get excess from tokenize (recursively)
+				(excess = tokenize( unquoted, true )) &&
+				// advance to the next closing parenthesis
+				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+
+				// excess is a negative index
+				match[0] = match[0].slice( 0, excess );
+				match[2] = unquoted.slice( 0, excess );
+			}
+
+			// Return only captures needed by the pseudo filter method (type and argument)
+			return match.slice( 0, 3 );
+		}
+	},
+
+	filter: {
+
+		"TAG": function( nodeName ) {
+			if ( nodeName === "*" ) {
+				return function() { return true; };
+			}
+
+			nodeName = nodeName.replace( runescape, funescape ).toLowerCase();
+			return function( elem ) {
+				return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+			};
+		},
+
+		"CLASS": function( className ) {
+			var pattern = classCache[ className + " " ];
+
+			return pattern ||
+				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+				classCache( className, function( elem ) {
+					return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" );
+				});
+		},
+
+		"ATTR": function( name, operator, check ) {
+			return function( elem ) {
+				var result = Sizzle.attr( elem, name );
+
+				if ( result == null ) {
+					return operator === "!=";
+				}
+				if ( !operator ) {
+					return true;
+				}
+
+				result += "";
+
+				return operator === "=" ? result === check :
+					operator === "!=" ? result !== check :
+					operator === "^=" ? check && result.indexOf( check ) === 0 :
+					operator === "*=" ? check && result.indexOf( check ) > -1 :
+					operator === "$=" ? check && result.substr( result.length - check.length ) === check :
+					operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
+					operator === "|=" ? result === check || result.substr( 0, check.length + 1 ) === check + "-" :
+					false;
+			};
+		},
+
+		"CHILD": function( type, what, argument, first, last ) {
+			var simple = type.slice( 0, 3 ) !== "nth",
+				forward = type.slice( -4 ) !== "last",
+				ofType = what === "of-type";
+
+			return first === 1 && last === 0 ?
+
+				// Shortcut for :nth-*(n)
+				function( elem ) {
+					return !!elem.parentNode;
+				} :
+
+				function( elem, context, xml ) {
+					var cache, outerCache, node, diff, nodeIndex, start,
+						dir = simple !== forward ? "nextSibling" : "previousSibling",
+						parent = elem.parentNode,
+						name = ofType && elem.nodeName.toLowerCase(),
+						useCache = !xml && !ofType;
+
+					if ( parent ) {
+
+						// :(first|last|only)-(child|of-type)
+						if ( simple ) {
+							while ( dir ) {
+								node = elem;
+								while ( (node = node[ dir ]) ) {
+									if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
+										return false;
+									}
+								}
+								// Reverse direction for :only-* (if we haven't yet done so)
+								start = dir = type === "only" && !start && "nextSibling";
+							}
+							return true;
+						}
+
+						start = [ forward ? parent.firstChild : parent.lastChild ];
+
+						// non-xml :nth-child(...) stores cache data on `parent`
+						if ( forward && useCache ) {
+							// Seek `elem` from a previously-cached index
+							outerCache = parent[ expando ] || (parent[ expando ] = {});
+							cache = outerCache[ type ] || [];
+							nodeIndex = cache[0] === dirruns && cache[1];
+							diff = cache[0] === dirruns && cache[2];
+							node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+							while ( (node = ++nodeIndex && node && node[ dir ] ||
+
+								// Fallback to seeking `elem` from the start
+								(diff = nodeIndex = 0) || start.pop()) ) {
+
+								// When found, cache indexes on `parent` and break
+								if ( node.nodeType === 1 && ++diff && node === elem ) {
+									outerCache[ type ] = [ dirruns, nodeIndex, diff ];
+									break;
+								}
+							}
+
+						// Use previously-cached element index if available
+						} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
+							diff = cache[1];
+
+						// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
+						} else {
+							// Use the same loop as above to seek `elem` from the start
+							while ( (node = ++nodeIndex && node && node[ dir ] ||
+								(diff = nodeIndex = 0) || start.pop()) ) {
+
+								if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
+									// Cache the index of each encountered element
+									if ( useCache ) {
+										(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
+									}
+
+									if ( node === elem ) {
+										break;
+									}
+								}
+							}
+						}
+
+						// Incorporate the offset, then check against cycle size
+						diff -= last;
+						return diff === first || ( diff % first === 0 && diff / first >= 0 );
+					}
+				};
+		},
+
+		"PSEUDO": function( pseudo, argument ) {
+			// pseudo-class names are case-insensitive
+			// http://www.w3.org/TR/selectors/#pseudo-classes
+			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+			// Remember that setFilters inherits from pseudos
+			var args,
+				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+					Sizzle.error( "unsupported pseudo: " + pseudo );
+
+			// The user may use createPseudo to indicate that
+			// arguments are needed to create the filter function
+			// just as Sizzle does
+			if ( fn[ expando ] ) {
+				return fn( argument );
+			}
+
+			// But maintain support for old signatures
+			if ( fn.length > 1 ) {
+				args = [ pseudo, pseudo, "", argument ];
+				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+					markFunction(function( seed, matches ) {
+						var idx,
+							matched = fn( seed, argument ),
+							i = matched.length;
+						while ( i-- ) {
+							idx = indexOf.call( seed, matched[i] );
+							seed[ idx ] = !( matches[ idx ] = matched[i] );
+						}
+					}) :
+					function( elem ) {
+						return fn( elem, 0, args );
+					};
+			}
+
+			return fn;
+		}
+	},
+
+	pseudos: {
+		// Potentially complex pseudos
+		"not": markFunction(function( selector ) {
+			// Trim the selector passed to compile
+			// to avoid treating leading and trailing
+			// spaces as combinators
+			var input = [],
+				results = [],
+				matcher = compile( selector.replace( rtrim, "$1" ) );
+
+			return matcher[ expando ] ?
+				markFunction(function( seed, matches, context, xml ) {
+					var elem,
+						unmatched = matcher( seed, null, xml, [] ),
+						i = seed.length;
+
+					// Match elements unmatched by `matcher`
+					while ( i-- ) {
+						if ( (elem = unmatched[i]) ) {
+							seed[i] = !(matches[i] = elem);
+						}
+					}
+				}) :
+				function( elem, context, xml ) {
+					input[0] = elem;
+					matcher( input, null, xml, results );
+					return !results.pop();
+				};
+		}),
+
+		"has": markFunction(function( selector ) {
+			return function( elem ) {
+				return Sizzle( selector, elem ).length > 0;
+			};
+		}),
+
+		"contains": markFunction(function( text ) {
+			return function( elem ) {
+				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+			};
+		}),
+
+		// "Whether an element is represented by a :lang() selector
+		// is based solely on the element's language value
+		// being equal to the identifier C,
+		// or beginning with the identifier C immediately followed by "-".
+		// The matching of C against the element's language value is performed case-insensitively.
+		// The identifier C does not have to be a valid language name."
+		// http://www.w3.org/TR/selectors/#lang-pseudo
+		"lang": markFunction( function( lang ) {
+			// lang value must be a valid identifider
+			if ( !ridentifier.test(lang || "") ) {
+				Sizzle.error( "unsupported lang: " + lang );
+			}
+			lang = lang.replace( runescape, funescape ).toLowerCase();
+			return function( elem ) {
+				var elemLang;
+				do {
+					if ( (elemLang = documentIsXML ?
+						elem.getAttribute("xml:lang") || elem.getAttribute("lang") :
+						elem.lang) ) {
+
+						elemLang = elemLang.toLowerCase();
+						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+					}
+				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+				return false;
+			};
+		}),
+
+		// Miscellaneous
+		"target": function( elem ) {
+			var hash = window.location && window.location.hash;
+			return hash && hash.slice( 1 ) === elem.id;
+		},
+
+		"root": function( elem ) {
+			return elem === docElem;
+		},
+
+		"focus": function( elem ) {
+			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+		},
+
+		// Boolean properties
+		"enabled": function( elem ) {
+			return elem.disabled === false;
+		},
+
+		"disabled": function( elem ) {
+			return elem.disabled === true;
+		},
+
+		"checked": function( elem ) {
+			// In CSS3, :checked should return both checked and selected elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			var nodeName = elem.nodeName.toLowerCase();
+			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+		},
+
+		"selected": function( elem ) {
+			// Accessing this property makes selected-by-default
+			// options in Safari work properly
+			if ( elem.parentNode ) {
+				elem.parentNode.selectedIndex;
+			}
+
+			return elem.selected === true;
+		},
+
+		// Contents
+		"empty": function( elem ) {
+			// http://www.w3.org/TR/selectors/#empty-pseudo
+			// :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),
+			//   not comment, processing instructions, or others
+			// Thanks to Diego Perini for the nodeName shortcut
+			//   Greater than "@" means alpha characters (specifically not starting with "#" or "?")
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) {
+					return false;
+				}
+			}
+			return true;
+		},
+
+		"parent": function( elem ) {
+			return !Expr.pseudos["empty"]( elem );
+		},
+
+		// Element/input types
+		"header": function( elem ) {
+			return rheader.test( elem.nodeName );
+		},
+
+		"input": function( elem ) {
+			return rinputs.test( elem.nodeName );
+		},
+
+		"button": function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return name === "input" && elem.type === "button" || name === "button";
+		},
+
+		"text": function( elem ) {
+			var attr;
+			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
+			// use getAttribute instead to test this case
+			return elem.nodeName.toLowerCase() === "input" &&
+				elem.type === "text" &&
+				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type );
+		},
+
+		// Position-in-collection
+		"first": createPositionalPseudo(function() {
+			return [ 0 ];
+		}),
+
+		"last": createPositionalPseudo(function( matchIndexes, length ) {
+			return [ length - 1 ];
+		}),
+
+		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			return [ argument < 0 ? argument + length : argument ];
+		}),
+
+		"even": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 0;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"odd": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 1;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; --i >= 0; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; ++i < length; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		})
+	}
+};
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+	Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+	Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+function tokenize( selector, parseOnly ) {
+	var matched, match, tokens, type,
+		soFar, groups, preFilters,
+		cached = tokenCache[ selector + " " ];
+
+	if ( cached ) {
+		return parseOnly ? 0 : cached.slice( 0 );
+	}
+
+	soFar = selector;
+	groups = [];
+	preFilters = Expr.preFilter;
+
+	while ( soFar ) {
+
+		// Comma and first run
+		if ( !matched || (match = rcomma.exec( soFar )) ) {
+			if ( match ) {
+				// Don't consume trailing commas as valid
+				soFar = soFar.slice( match[0].length ) || soFar;
+			}
+			groups.push( tokens = [] );
+		}
+
+		matched = false;
+
+		// Combinators
+		if ( (match = rcombinators.exec( soFar )) ) {
+			matched = match.shift();
+			tokens.push( {
+				value: matched,
+				// Cast descendant combinators to space
+				type: match[0].replace( rtrim, " " )
+			} );
+			soFar = soFar.slice( matched.length );
+		}
+
+		// Filters
+		for ( type in Expr.filter ) {
+			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+				(match = preFilters[ type ]( match ))) ) {
+				matched = match.shift();
+				tokens.push( {
+					value: matched,
+					type: type,
+					matches: match
+				} );
+				soFar = soFar.slice( matched.length );
+			}
+		}
+
+		if ( !matched ) {
+			break;
+		}
+	}
+
+	// Return the length of the invalid excess
+	// if we're just parsing
+	// Otherwise, throw an error or return tokens
+	return parseOnly ?
+		soFar.length :
+		soFar ?
+			Sizzle.error( selector ) :
+			// Cache the tokens
+			tokenCache( selector, groups ).slice( 0 );
+}
+
+function toSelector( tokens ) {
+	var i = 0,
+		len = tokens.length,
+		selector = "";
+	for ( ; i < len; i++ ) {
+		selector += tokens[i].value;
+	}
+	return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+	var dir = combinator.dir,
+		checkNonElements = base && combinator.dir === "parentNode",
+		doneName = done++;
+
+	return combinator.first ?
+		// Check against closest ancestor/preceding element
+		function( elem, context, xml ) {
+			while ( (elem = elem[ dir ]) ) {
+				if ( elem.nodeType === 1 || checkNonElements ) {
+					return matcher( elem, context, xml );
+				}
+			}
+		} :
+
+		// Check against all ancestor/preceding elements
+		function( elem, context, xml ) {
+			var data, cache, outerCache,
+				dirkey = dirruns + " " + doneName;
+
+			// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
+			if ( xml ) {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						if ( matcher( elem, context, xml ) ) {
+							return true;
+						}
+					}
+				}
+			} else {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						outerCache = elem[ expando ] || (elem[ expando ] = {});
+						if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {
+							if ( (data = cache[1]) === true || data === cachedruns ) {
+								return data === true;
+							}
+						} else {
+							cache = outerCache[ dir ] = [ dirkey ];
+							cache[1] = matcher( elem, context, xml ) || cachedruns;
+							if ( cache[1] === true ) {
+								return true;
+							}
+						}
+					}
+				}
+			}
+		};
+}
+
+function elementMatcher( matchers ) {
+	return matchers.length > 1 ?
+		function( elem, context, xml ) {
+			var i = matchers.length;
+			while ( i-- ) {
+				if ( !matchers[i]( elem, context, xml ) ) {
+					return false;
+				}
+			}
+			return true;
+		} :
+		matchers[0];
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+	var elem,
+		newUnmatched = [],
+		i = 0,
+		len = unmatched.length,
+		mapped = map != null;
+
+	for ( ; i < len; i++ ) {
+		if ( (elem = unmatched[i]) ) {
+			if ( !filter || filter( elem, context, xml ) ) {
+				newUnmatched.push( elem );
+				if ( mapped ) {
+					map.push( i );
+				}
+			}
+		}
+	}
+
+	return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+	if ( postFilter && !postFilter[ expando ] ) {
+		postFilter = setMatcher( postFilter );
+	}
+	if ( postFinder && !postFinder[ expando ] ) {
+		postFinder = setMatcher( postFinder, postSelector );
+	}
+	return markFunction(function( seed, results, context, xml ) {
+		var temp, i, elem,
+			preMap = [],
+			postMap = [],
+			preexisting = results.length,
+
+			// Get initial elements from seed or context
+			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+
+			// Prefilter to get matcher input, preserving a map for seed-results synchronization
+			matcherIn = preFilter && ( seed || !selector ) ?
+				condense( elems, preMap, preFilter, context, xml ) :
+				elems,
+
+			matcherOut = matcher ?
+				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+					// ...intermediate processing is necessary
+					[] :
+
+					// ...otherwise use results directly
+					results :
+				matcherIn;
+
+		// Find primary matches
+		if ( matcher ) {
+			matcher( matcherIn, matcherOut, context, xml );
+		}
+
+		// Apply postFilter
+		if ( postFilter ) {
+			temp = condense( matcherOut, postMap );
+			postFilter( temp, [], context, xml );
+
+			// Un-match failing elements by moving them back to matcherIn
+			i = temp.length;
+			while ( i-- ) {
+				if ( (elem = temp[i]) ) {
+					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+				}
+			}
+		}
+
+		if ( seed ) {
+			if ( postFinder || preFilter ) {
+				if ( postFinder ) {
+					// Get the final matcherOut by condensing this intermediate into postFinder contexts
+					temp = [];
+					i = matcherOut.length;
+					while ( i-- ) {
+						if ( (elem = matcherOut[i]) ) {
+							// Restore matcherIn since elem is not yet a final match
+							temp.push( (matcherIn[i] = elem) );
+						}
+					}
+					postFinder( null, (matcherOut = []), temp, xml );
+				}
+
+				// Move matched elements from seed to results to keep them synchronized
+				i = matcherOut.length;
+				while ( i-- ) {
+					if ( (elem = matcherOut[i]) &&
+						(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
+
+						seed[temp] = !(results[temp] = elem);
+					}
+				}
+			}
+
+		// Add elements to results, through postFinder if defined
+		} else {
+			matcherOut = condense(
+				matcherOut === results ?
+					matcherOut.splice( preexisting, matcherOut.length ) :
+					matcherOut
+			);
+			if ( postFinder ) {
+				postFinder( null, results, matcherOut, xml );
+			} else {
+				push.apply( results, matcherOut );
+			}
+		}
+	});
+}
+
+function matcherFromTokens( tokens ) {
+	var checkContext, matcher, j,
+		len = tokens.length,
+		leadingRelative = Expr.relative[ tokens[0].type ],
+		implicitRelative = leadingRelative || Expr.relative[" "],
+		i = leadingRelative ? 1 : 0,
+
+		// The foundational matcher ensures that elements are reachable from top-level context(s)
+		matchContext = addCombinator( function( elem ) {
+			return elem === checkContext;
+		}, implicitRelative, true ),
+		matchAnyContext = addCombinator( function( elem ) {
+			return indexOf.call( checkContext, elem ) > -1;
+		}, implicitRelative, true ),
+		matchers = [ function( elem, context, xml ) {
+			return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+				(checkContext = context).nodeType ?
+					matchContext( elem, context, xml ) :
+					matchAnyContext( elem, context, xml ) );
+		} ];
+
+	for ( ; i < len; i++ ) {
+		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+		} else {
+			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+			// Return special upon seeing a positional matcher
+			if ( matcher[ expando ] ) {
+				// Find the next relative operator (if any) for proper handling
+				j = ++i;
+				for ( ; j < len; j++ ) {
+					if ( Expr.relative[ tokens[j].type ] ) {
+						break;
+					}
+				}
+				return setMatcher(
+					i > 1 && elementMatcher( matchers ),
+					i > 1 && toSelector( tokens.slice( 0, i - 1 ) ).replace( rtrim, "$1" ),
+					matcher,
+					i < j && matcherFromTokens( tokens.slice( i, j ) ),
+					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+					j < len && toSelector( tokens )
+				);
+			}
+			matchers.push( matcher );
+		}
+	}
+
+	return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+	// A counter to specify which element is currently being matched
+	var matcherCachedRuns = 0,
+		bySet = setMatchers.length > 0,
+		byElement = elementMatchers.length > 0,
+		superMatcher = function( seed, context, xml, results, expandContext ) {
+			var elem, j, matcher,
+				setMatched = [],
+				matchedCount = 0,
+				i = "0",
+				unmatched = seed && [],
+				outermost = expandContext != null,
+				contextBackup = outermostContext,
+				// We must always have either seed elements or context
+				elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),
+				// Nested matchers should use non-integer dirruns
+				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.E);
+
+			if ( outermost ) {
+				outermostContext = context !== document && context;
+				cachedruns = matcherCachedRuns;
+			}
+
+			// Add elements passing elementMatchers directly to results
+			for ( ; (elem = elems[i]) != null; i++ ) {
+				if ( byElement && elem ) {
+					for ( j = 0; (matcher = elementMatchers[j]); j++ ) {
+						if ( matcher( elem, context, xml ) ) {
+							results.push( elem );
+							break;
+						}
+					}
+					if ( outermost ) {
+						dirruns = dirrunsUnique;
+						cachedruns = ++matcherCachedRuns;
+					}
+				}
+
+				// Track unmatched elements for set filters
+				if ( bySet ) {
+					// They will have gone through all possible matchers
+					if ( (elem = !matcher && elem) ) {
+						matchedCount--;
+					}
+
+					// Lengthen the array for every element, matched or not
+					if ( seed ) {
+						unmatched.push( elem );
+					}
+				}
+			}
+
+			// Apply set filters to unmatched elements
+			// `i` starts as a string, so matchedCount would equal "00" if there are no elements
+			matchedCount += i;
+			if ( bySet && i !== matchedCount ) {
+				for ( j = 0; (matcher = setMatchers[j]); j++ ) {
+					matcher( unmatched, setMatched, context, xml );
+				}
+
+				if ( seed ) {
+					// Reintegrate element matches to eliminate the need for sorting
+					if ( matchedCount > 0 ) {
+						while ( i-- ) {
+							if ( !(unmatched[i] || setMatched[i]) ) {
+								setMatched[i] = pop.call( results );
+							}
+						}
+					}
+
+					// Discard index placeholder values to get only actual matches
+					setMatched = condense( setMatched );
+				}
+
+				// Add matches to results
+				push.apply( results, setMatched );
+
+				// Seedless set matches succeeding multiple successful matchers stipulate sorting
+				if ( outermost && !seed && setMatched.length > 0 &&
+					( matchedCount + setMatchers.length ) > 1 ) {
+
+					Sizzle.uniqueSort( results );
+				}
+			}
+
+			// Override manipulation of globals by nested matchers
+			if ( outermost ) {
+				dirruns = dirrunsUnique;
+				outermostContext = contextBackup;
+			}
+
+			return unmatched;
+		};
+
+	return bySet ?
+		markFunction( superMatcher ) :
+		superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
+	var i,
+		setMatchers = [],
+		elementMatchers = [],
+		cached = compilerCache[ selector + " " ];
+
+	if ( !cached ) {
+		// Generate a function of recursive functions that can be used to check each element
+		if ( !group ) {
+			group = tokenize( selector );
+		}
+		i = group.length;
+		while ( i-- ) {
+			cached = matcherFromTokens( group[i] );
+			if ( cached[ expando ] ) {
+				setMatchers.push( cached );
+			} else {
+				elementMatchers.push( cached );
+			}
+		}
+
+		// Cache the compiled function
+		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+	}
+	return cached;
+};
+
+function multipleContexts( selector, contexts, results ) {
+	var i = 0,
+		len = contexts.length;
+	for ( ; i < len; i++ ) {
+		Sizzle( selector, contexts[i], results );
+	}
+	return results;
+}
+
+function select( selector, context, results, seed ) {
+	var i, tokens, token, type, find,
+		match = tokenize( selector );
+
+	if ( !seed ) {
+		// Try to minimize operations if there is only one group
+		if ( match.length === 1 ) {
+
+			// Take a shortcut and set the context if the root selector is an ID
+			tokens = match[0] = match[0].slice( 0 );
+			if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+					context.nodeType === 9 && !documentIsXML &&
+					Expr.relative[ tokens[1].type ] ) {
+
+				context = Expr.find["ID"]( token.matches[0].replace( runescape, funescape ), context )[0];
+				if ( !context ) {
+					return results;
+				}
+
+				selector = selector.slice( tokens.shift().value.length );
+			}
+
+			// Fetch a seed set for right-to-left matching
+			for ( i = matchExpr["needsContext"].test( selector ) ? -1 : tokens.length - 1; i >= 0; i-- ) {
+				token = tokens[i];
+
+				// Abort if we hit a combinator
+				if ( Expr.relative[ (type = token.type) ] ) {
+					break;
+				}
+				if ( (find = Expr.find[ type ]) ) {
+					// Search, expanding context for leading sibling combinators
+					if ( (seed = find(
+						token.matches[0].replace( runescape, funescape ),
+						rsibling.test( tokens[0].type ) && context.parentNode || context
+					)) ) {
+
+						// If seed is empty or no tokens remain, we can return early
+						tokens.splice( i, 1 );
+						selector = seed.length && toSelector( tokens );
+						if ( !selector ) {
+							push.apply( results, slice.call( seed, 0 ) );
+							return results;
+						}
+
+						break;
+					}
+				}
+			}
+		}
+	}
+
+	// Compile and execute a filtering function
+	// Provide `match` to avoid retokenization if we modified the selector above
+	compile( selector, match )(
+		seed,
+		context,
+		documentIsXML,
+		results,
+		rsibling.test( selector )
+	);
+	return results;
+}
+
+// Deprecated
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Easy API for creating new setFilters
+function setFilters() {}
+Expr.filters = setFilters.prototype = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+// Initialize with the default document
+setDocument();
+
+// Override sizzle attribute retrieval
+Sizzle.attr = jQuery.attr;
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.pseudos;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+})( window );
+var runtil = /Until$/,
+	rparentsprev = /^(?:parents|prev(?:Until|All))/,
+	isSimple = /^.[^:#\[\.,]*$/,
+	rneedsContext = jQuery.expr.match.needsContext,
+	// methods guaranteed to produce a unique set when starting from a unique set
+	guaranteedUnique = {
+		children: true,
+		contents: true,
+		next: true,
+		prev: true
+	};
+
+jQuery.fn.extend({
+	find: function( selector ) {
+		var i, ret, self;
+
+		if ( typeof selector !== "string" ) {
+			self = this;
+			return this.pushStack( jQuery( selector ).filter(function() {
+				for ( i = 0; i < self.length; i++ ) {
+					if ( jQuery.contains( self[ i ], this ) ) {
+						return true;
+					}
+				}
+			}) );
+		}
+
+		ret = [];
+		for ( i = 0; i < this.length; i++ ) {
+			jQuery.find( selector, this[ i ], ret );
+		}
+
+		// Needed because $( selector, context ) becomes $( context ).find( selector )
+		ret = this.pushStack( jQuery.unique( ret ) );
+		ret.selector = ( this.selector ? this.selector + " " : "" ) + selector;
+		return ret;
+	},
+
+	has: function( target ) {
+		var i,
+			targets = jQuery( target, this ),
+			len = targets.length;
+
+		return this.filter(function() {
+			for ( i = 0; i < len; i++ ) {
+				if ( jQuery.contains( this, targets[i] ) ) {
+					return true;
+				}
+			}
+		});
+	},
+
+	not: function( selector ) {
+		return this.pushStack( winnow(this, selector, false) );
+	},
+
+	filter: function( selector ) {
+		return this.pushStack( winnow(this, selector, true) );
+	},
+
+	is: function( selector ) {
+		return !!selector && (
+			typeof selector === "string" ?
+				// If this is a positional/relative selector, check membership in the returned set
+				// so $("p:first").is("p:last") won't return true for a doc with two "p".
+				rneedsContext.test( selector ) ?
+					jQuery( selector, this.context ).index( this[0] ) >= 0 :
+					jQuery.filter( selector, this ).length > 0 :
+				this.filter( selector ).length > 0 );
+	},
+
+	closest: function( selectors, context ) {
+		var cur,
+			i = 0,
+			l = this.length,
+			ret = [],
+			pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
+				jQuery( selectors, context || this.context ) :
+				0;
+
+		for ( ; i < l; i++ ) {
+			cur = this[i];
+
+			while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) {
+				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
+					ret.push( cur );
+					break;
+				}
+				cur = cur.parentNode;
+			}
+		}
+
+		return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret );
+	},
+
+	// Determine the position of an element within
+	// the matched set of elements
+	index: function( elem ) {
+
+		// No argument, return index in parent
+		if ( !elem ) {
+			return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
+		}
+
+		// index in selector
+		if ( typeof elem === "string" ) {
+			return jQuery.inArray( this[0], jQuery( elem ) );
+		}
+
+		// Locate the position of the desired element
+		return jQuery.inArray(
+			// If it receives a jQuery object, the first element is used
+			elem.jquery ? elem[0] : elem, this );
+	},
+
+	add: function( selector, context ) {
+		var set = typeof selector === "string" ?
+				jQuery( selector, context ) :
+				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
+			all = jQuery.merge( this.get(), set );
+
+		return this.pushStack( jQuery.unique(all) );
+	},
+
+	addBack: function( selector ) {
+		return this.add( selector == null ?
+			this.prevObject : this.prevObject.filter(selector)
+		);
+	}
+});
+
+jQuery.fn.andSelf = jQuery.fn.addBack;
+
+function sibling( cur, dir ) {
+	do {
+		cur = cur[ dir ];
+	} while ( cur && cur.nodeType !== 1 );
+
+	return cur;
+}
+
+jQuery.each({
+	parent: function( elem ) {
+		var parent = elem.parentNode;
+		return parent && parent.nodeType !== 11 ? parent : null;
+	},
+	parents: function( elem ) {
+		return jQuery.dir( elem, "parentNode" );
+	},
+	parentsUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "parentNode", until );
+	},
+	next: function( elem ) {
+		return sibling( elem, "nextSibling" );
+	},
+	prev: function( elem ) {
+		return sibling( elem, "previousSibling" );
+	},
+	nextAll: function( elem ) {
+		return jQuery.dir( elem, "nextSibling" );
+	},
+	prevAll: function( elem ) {
+		return jQuery.dir( elem, "previousSibling" );
+	},
+	nextUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "nextSibling", until );
+	},
+	prevUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "previousSibling", until );
+	},
+	siblings: function( elem ) {
+		return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
+	},
+	children: function( elem ) {
+		return jQuery.sibling( elem.firstChild );
+	},
+	contents: function( elem ) {
+		return jQuery.nodeName( elem, "iframe" ) ?
+			elem.contentDocument || elem.contentWindow.document :
+			jQuery.merge( [], elem.childNodes );
+	}
+}, function( name, fn ) {
+	jQuery.fn[ name ] = function( until, selector ) {
+		var ret = jQuery.map( this, fn, until );
+
+		if ( !runtil.test( name ) ) {
+			selector = until;
+		}
+
+		if ( selector && typeof selector === "string" ) {
+			ret = jQuery.filter( selector, ret );
+		}
+
+		ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
+
+		if ( this.length > 1 && rparentsprev.test( name ) ) {
+			ret = ret.reverse();
+		}
+
+		return this.pushStack( ret );
+	};
+});
+
+jQuery.extend({
+	filter: function( expr, elems, not ) {
+		if ( not ) {
+			expr = ":not(" + expr + ")";
+		}
+
+		return elems.length === 1 ?
+			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
+			jQuery.find.matches(expr, elems);
+	},
+
+	dir: function( elem, dir, until ) {
+		var matched = [],
+			cur = elem[ dir ];
+
+		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+			if ( cur.nodeType === 1 ) {
+				matched.push( cur );
+			}
+			cur = cur[dir];
+		}
+		return matched;
+	},
+
+	sibling: function( n, elem ) {
+		var r = [];
+
+		for ( ; n; n = n.nextSibling ) {
+			if ( n.nodeType === 1 && n !== elem ) {
+				r.push( n );
+			}
+		}
+
+		return r;
+	}
+});
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, keep ) {
+
+	// Can't pass null or undefined to indexOf in Firefox 4
+	// Set to 0 to skip string check
+	qualifier = qualifier || 0;
+
+	if ( jQuery.isFunction( qualifier ) ) {
+		return jQuery.grep(elements, function( elem, i ) {
+			var retVal = !!qualifier.call( elem, i, elem );
+			return retVal === keep;
+		});
+
+	} else if ( qualifier.nodeType ) {
+		return jQuery.grep(elements, function( elem ) {
+			return ( elem === qualifier ) === keep;
+		});
+
+	} else if ( typeof qualifier === "string" ) {
+		var filtered = jQuery.grep(elements, function( elem ) {
+			return elem.nodeType === 1;
+		});
+
+		if ( isSimple.test( qualifier ) ) {
+			return jQuery.filter(qualifier, filtered, !keep);
+		} else {
+			qualifier = jQuery.filter( qualifier, filtered );
+		}
+	}
+
+	return jQuery.grep(elements, function( elem ) {
+		return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
+	});
+}
+function createSafeFragment( document ) {
+	var list = nodeNames.split( "|" ),
+		safeFrag = document.createDocumentFragment();
+
+	if ( safeFrag.createElement ) {
+		while ( list.length ) {
+			safeFrag.createElement(
+				list.pop()
+			);
+		}
+	}
+	return safeFrag;
+}
+
+var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
+		"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
+	rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
+	rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
+	rleadingWhitespace = /^\s+/,
+	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
+	rtagName = /<([\w:]+)/,
+	rtbody = /<tbody/i,
+	rhtml = /<|&#?\w+;/,
+	rnoInnerhtml = /<(?:script|style|link)/i,
+	manipulation_rcheckableType = /^(?:checkbox|radio)$/i,
+	// checked="checked" or checked
+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+	rscriptType = /^$|\/(?:java|ecma)script/i,
+	rscriptTypeMasked = /^true\/(.*)/,
+	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
+
+	// We have to close these tags to support XHTML (#13200)
+	wrapMap = {
+		option: [ 1, "<select multiple='multiple'>", "</select>" ],
+		legend: [ 1, "<fieldset>", "</fieldset>" ],
+		area: [ 1, "<map>", "</map>" ],
+		param: [ 1, "<object>", "</object>" ],
+		thead: [ 1, "<table>", "</table>" ],
+		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
+		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+
+		// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
+		// unless wrapped in a div with non-breaking characters in front of it.
+		_default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>"  ]
+	},
+	safeFragment = createSafeFragment( document ),
+	fragmentDiv = safeFragment.appendChild( document.createElement("div") );
+
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+jQuery.fn.extend({
+	text: function( value ) {
+		return jQuery.access( this, function( value ) {
+			return value === undefined ?
+				jQuery.text( this ) :
+				this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
+		}, null, value, arguments.length );
+	},
+
+	wrapAll: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function(i) {
+				jQuery(this).wrapAll( html.call(this, i) );
+			});
+		}
+
+		if ( this[0] ) {
+			// The elements to wrap the target around
+			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+
+			if ( this[0].parentNode ) {
+				wrap.insertBefore( this[0] );
+			}
+
+			wrap.map(function() {
+				var elem = this;
+
+				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+					elem = elem.firstChild;
+				}
+
+				return elem;
+			}).append( this );
+		}
+
+		return this;
+	},
+
+	wrapInner: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function(i) {
+				jQuery(this).wrapInner( html.call(this, i) );
+			});
+		}
+
+		return this.each(function() {
+			var self = jQuery( this ),
+				contents = self.contents();
+
+			if ( contents.length ) {
+				contents.wrapAll( html );
+
+			} else {
+				self.append( html );
+			}
+		});
+	},
+
+	wrap: function( html ) {
+		var isFunction = jQuery.isFunction( html );
+
+		return this.each(function(i) {
+			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
+		});
+	},
+
+	unwrap: function() {
+		return this.parent().each(function() {
+			if ( !jQuery.nodeName( this, "body" ) ) {
+				jQuery( this ).replaceWith( this.childNodes );
+			}
+		}).end();
+	},
+
+	append: function() {
+		return this.domManip(arguments, true, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				this.appendChild( elem );
+			}
+		});
+	},
+
+	prepend: function() {
+		return this.domManip(arguments, true, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				this.insertBefore( elem, this.firstChild );
+			}
+		});
+	},
+
+	before: function() {
+		return this.domManip( arguments, false, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this );
+			}
+		});
+	},
+
+	after: function() {
+		return this.domManip( arguments, false, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this.nextSibling );
+			}
+		});
+	},
+
+	// keepData is for internal use only--do not document
+	remove: function( selector, keepData ) {
+		var elem,
+			i = 0;
+
+		for ( ; (elem = this[i]) != null; i++ ) {
+			if ( !selector || jQuery.filter( selector, [ elem ] ).length > 0 ) {
+				if ( !keepData && elem.nodeType === 1 ) {
+					jQuery.cleanData( getAll( elem ) );
+				}
+
+				if ( elem.parentNode ) {
+					if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
+						setGlobalEval( getAll( elem, "script" ) );
+					}
+					elem.parentNode.removeChild( elem );
+				}
+			}
+		}
+
+		return this;
+	},
+
+	empty: function() {
+		var elem,
+			i = 0;
+
+		for ( ; (elem = this[i]) != null; i++ ) {
+			// Remove element nodes and prevent memory leaks
+			if ( elem.nodeType === 1 ) {
+				jQuery.cleanData( getAll( elem, false ) );
+			}
+
+			// Remove any remaining nodes
+			while ( elem.firstChild ) {
+				elem.removeChild( elem.firstChild );
+			}
+
+			// If this is a select, ensure that it displays empty (#12336)
+			// Support: IE<9
+			if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
+				elem.options.length = 0;
+			}
+		}
+
+		return this;
+	},
+
+	clone: function( dataAndEvents, deepDataAndEvents ) {
+		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+		return this.map( function () {
+			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+		});
+	},
+
+	html: function( value ) {
+		return jQuery.access( this, function( value ) {
+			var elem = this[0] || {},
+				i = 0,
+				l = this.length;
+
+			if ( value === undefined ) {
+				return elem.nodeType === 1 ?
+					elem.innerHTML.replace( rinlinejQuery, "" ) :
+					undefined;
+			}
+
+			// See if we can take a shortcut and just use innerHTML
+			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+				( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&
+				( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
+				!wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
+
+				value = value.replace( rxhtmlTag, "<$1></$2>" );
+
+				try {
+					for (; i < l; i++ ) {
+						// Remove element nodes and prevent memory leaks
+						elem = this[i] || {};
+						if ( elem.nodeType === 1 ) {
+							jQuery.cleanData( getAll( elem, false ) );
+							elem.innerHTML = value;
+						}
+					}
+
+					elem = 0;
+
+				// If using innerHTML throws an exception, use the fallback method
+				} catch(e) {}
+			}
+
+			if ( elem ) {
+				this.empty().append( value );
+			}
+		}, null, value, arguments.length );
+	},
+
+	replaceWith: function( value ) {
+		var isFunc = jQuery.isFunction( value );
+
+		// Make sure that the elements are removed from the DOM before they are inserted
+		// this can help fix replacing a parent with child elements
+		if ( !isFunc && typeof value !== "string" ) {
+			value = jQuery( value ).not( this ).detach();
+		}
+
+		return this.domManip( [ value ], true, function( elem ) {
+			var next = this.nextSibling,
+				parent = this.parentNode;
+
+			if ( parent && this.nodeType === 1 || this.nodeType === 11 ) {
+
+				jQuery( this ).remove();
+
+				if ( next ) {
+					next.parentNode.insertBefore( elem, next );
+				} else {
+					parent.appendChild( elem );
+				}
+			}
+		});
+	},
+
+	detach: function( selector ) {
+		return this.remove( selector, true );
+	},
+
+	domManip: function( args, table, callback ) {
+
+		// Flatten any nested arrays
+		args = core_concat.apply( [], args );
+
+		var fragment, first, scripts, hasScripts, node, doc,
+			i = 0,
+			l = this.length,
+			set = this,
+			iNoClone = l - 1,
+			value = args[0],
+			isFunction = jQuery.isFunction( value );
+
+		// We can't cloneNode fragments that contain checked, in WebKit
+		if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) {
+			return this.each(function( index ) {
+				var self = set.eq( index );
+				if ( isFunction ) {
+					args[0] = value.call( this, index, table ? self.html() : undefined );
+				}
+				self.domManip( args, table, callback );
+			});
+		}
+
+		if ( l ) {
+			fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
+			first = fragment.firstChild;
+
+			if ( fragment.childNodes.length === 1 ) {
+				fragment = first;
+			}
+
+			if ( first ) {
+				table = table && jQuery.nodeName( first, "tr" );
+				scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+				hasScripts = scripts.length;
+
+				// Use the original fragment for the last item instead of the first because it can end up
+				// being emptied incorrectly in certain situations (#8070).
+				for ( ; i < l; i++ ) {
+					node = fragment;
+
+					if ( i !== iNoClone ) {
+						node = jQuery.clone( node, true, true );
+
+						// Keep references to cloned scripts for later restoration
+						if ( hasScripts ) {
+							jQuery.merge( scripts, getAll( node, "script" ) );
+						}
+					}
+
+					callback.call(
+						table && jQuery.nodeName( this[i], "table" ) ?
+							findOrAppend( this[i], "tbody" ) :
+							this[i],
+						node,
+						i
+					);
+				}
+
+				if ( hasScripts ) {
+					doc = scripts[ scripts.length - 1 ].ownerDocument;
+
+					// Reenable scripts
+					jQuery.map( scripts, restoreScript );
+
+					// Evaluate executable scripts on first document insertion
+					for ( i = 0; i < hasScripts; i++ ) {
+						node = scripts[ i ];
+						if ( rscriptType.test( node.type || "" ) &&
+							!jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
+
+							if ( node.src ) {
+								// Hope ajax is available...
+								jQuery.ajax({
+									url: node.src,
+									type: "GET",
+									dataType: "script",
+									async: false,
+									global: false,
+									"throws": true
+								});
+							} else {
+								jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );
+							}
+						}
+					}
+				}
+
+				// Fix #11809: Avoid leaking memory
+				fragment = first = null;
+			}
+		}
+
+		return this;
+	}
+});
+
+function findOrAppend( elem, tag ) {
+	return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) );
+}
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+	var attr = elem.getAttributeNode("type");
+	elem.type = ( attr && attr.specified ) + "/" + elem.type;
+	return elem;
+}
+function restoreScript( elem ) {
+	var match = rscriptTypeMasked.exec( elem.type );
+	if ( match ) {
+		elem.type = match[1];
+	} else {
+		elem.removeAttribute("type");
+	}
+	return elem;
+}
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+	var elem,
+		i = 0;
+	for ( ; (elem = elems[i]) != null; i++ ) {
+		jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );
+	}
+}
+
+function cloneCopyEvent( src, dest ) {
+
+	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+		return;
+	}
+
+	var type, i, l,
+		oldData = jQuery._data( src ),
+		curData = jQuery._data( dest, oldData ),
+		events = oldData.events;
+
+	if ( events ) {
+		delete curData.handle;
+		curData.events = {};
+
+		for ( type in events ) {
+			for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+				jQuery.event.add( dest, type, events[ type ][ i ] );
+			}
+		}
+	}
+
+	// make the cloned public data object a copy from the original
+	if ( curData.data ) {
+		curData.data = jQuery.extend( {}, curData.data );
+	}
+}
+
+function fixCloneNodeIssues( src, dest ) {
+	var nodeName, data, e;
+
+	// We do not need to do anything for non-Elements
+	if ( dest.nodeType !== 1 ) {
+		return;
+	}
+
+	nodeName = dest.nodeName.toLowerCase();
+
+	// IE6-8 copies events bound via attachEvent when using cloneNode.
+	if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) {
+		data = jQuery._data( dest );
+
+		for ( e in data.events ) {
+			jQuery.removeEvent( dest, e, data.handle );
+		}
+
+		// Event data gets referenced instead of copied if the expando gets copied too
+		dest.removeAttribute( jQuery.expando );
+	}
+
+	// IE blanks contents when cloning scripts, and tries to evaluate newly-set text
+	if ( nodeName === "script" && dest.text !== src.text ) {
+		disableScript( dest ).text = src.text;
+		restoreScript( dest );
+
+	// IE6-10 improperly clones children of object elements using classid.
+	// IE10 throws NoModificationAllowedError if parent is null, #12132.
+	} else if ( nodeName === "object" ) {
+		if ( dest.parentNode ) {
+			dest.outerHTML = src.outerHTML;
+		}
+
+		// This path appears unavoidable for IE9. When cloning an object
+		// element in IE9, the outerHTML strategy above is not sufficient.
+		// If the src has innerHTML and the destination does not,
+		// copy the src.innerHTML into the dest.innerHTML. #10324
+		if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {
+			dest.innerHTML = src.innerHTML;
+		}
+
+	} else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) {
+		// IE6-8 fails to persist the checked state of a cloned checkbox
+		// or radio button. Worse, IE6-7 fail to give the cloned element
+		// a checked appearance if the defaultChecked value isn't also set
+
+		dest.defaultChecked = dest.checked = src.checked;
+
+		// IE6-7 get confused and end up setting the value of a cloned
+		// checkbox/radio button to an empty string instead of "on"
+		if ( dest.value !== src.value ) {
+			dest.value = src.value;
+		}
+
+	// IE6-8 fails to return the selected option to the default selected
+	// state when cloning options
+	} else if ( nodeName === "option" ) {
+		dest.defaultSelected = dest.selected = src.defaultSelected;
+
+	// IE6-8 fails to set the defaultValue to the correct value when
+	// cloning other types of input fields
+	} else if ( nodeName === "input" || nodeName === "textarea" ) {
+		dest.defaultValue = src.defaultValue;
+	}
+}
+
+jQuery.each({
+	appendTo: "append",
+	prependTo: "prepend",
+	insertBefore: "before",
+	insertAfter: "after",
+	replaceAll: "replaceWith"
+}, function( name, original ) {
+	jQuery.fn[ name ] = function( selector ) {
+		var elems,
+			i = 0,
+			ret = [],
+			insert = jQuery( selector ),
+			last = insert.length - 1;
+
+		for ( ; i <= last; i++ ) {
+			elems = i === last ? this : this.clone(true);
+			jQuery( insert[i] )[ original ]( elems );
+
+			// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
+			core_push.apply( ret, elems.get() );
+		}
+
+		return this.pushStack( ret );
+	};
+});
+
+function getAll( context, tag ) {
+	var elems, elem,
+		i = 0,
+		found = typeof context.getElementsByTagName !== "undefined" ? context.getElementsByTagName( tag || "*" ) :
+			typeof context.querySelectorAll !== "undefined" ? context.querySelectorAll( tag || "*" ) :
+			undefined;
+
+	if ( !found ) {
+		for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {
+			if ( !tag || jQuery.nodeName( elem, tag ) ) {
+				found.push( elem );
+			} else {
+				jQuery.merge( found, getAll( elem, tag ) );
+			}
+		}
+	}
+
+	return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
+		jQuery.merge( [ context ], found ) :
+		found;
+}
+
+// Used in buildFragment, fixes the defaultChecked property
+function fixDefaultChecked( elem ) {
+	if ( manipulation_rcheckableType.test( elem.type ) ) {
+		elem.defaultChecked = elem.checked;
+	}
+}
+
+jQuery.extend({
+	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+		var destElements, srcElements, node, i, clone,
+			inPage = jQuery.contains( elem.ownerDocument, elem );
+
+		if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
+			clone = elem.cloneNode( true );
+
+		// IE<=8 does not properly clone detached, unknown element nodes
+		} else {
+			fragmentDiv.innerHTML = elem.outerHTML;
+			fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
+		}
+
+		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
+				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
+
+			// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
+			destElements = getAll( clone );
+			srcElements = getAll( elem );
+
+			// Fix all IE cloning issues
+			for ( i = 0; (node = srcElements[i]) != null; ++i ) {
+				// Ensure that the destination node is not null; Fixes #9587
+				if ( destElements[i] ) {
+					fixCloneNodeIssues( node, destElements[i] );
+				}
+			}
+		}
+
+		// Copy the events from the original to the clone
+		if ( dataAndEvents ) {
+			if ( deepDataAndEvents ) {
+				srcElements = srcElements || getAll( elem );
+				destElements = destElements || getAll( clone );
+
+				for ( i = 0; (node = srcElements[i]) != null; i++ ) {
+					cloneCopyEvent( node, destElements[i] );
+				}
+			} else {
+				cloneCopyEvent( elem, clone );
+			}
+		}
+
+		// Preserve script evaluation history
+		destElements = getAll( clone, "script" );
+		if ( destElements.length > 0 ) {
+			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+		}
+
+		destElements = srcElements = node = null;
+
+		// Return the cloned set
+		return clone;
+	},
+
+	buildFragment: function( elems, context, scripts, selection ) {
+		var contains, elem, tag, tmp, wrap, tbody, j,
+			l = elems.length,
+
+			// Ensure a safe fragment
+			safe = createSafeFragment( context ),
+
+			nodes = [],
+			i = 0;
+
+		for ( ; i < l; i++ ) {
+			elem = elems[ i ];
+
+			if ( elem || elem === 0 ) {
+
+				// Add nodes directly
+				if ( jQuery.type( elem ) === "object" ) {
+					jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+				// Convert non-html into a text node
+				} else if ( !rhtml.test( elem ) ) {
+					nodes.push( context.createTextNode( elem ) );
+
+				// Convert html into DOM nodes
+				} else {
+					tmp = tmp || safe.appendChild( context.createElement("div") );
+
+					// Deserialize a standard representation
+					tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase();
+					wrap = wrapMap[ tag ] || wrapMap._default;
+
+					tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];
+
+					// Descend through wrappers to the right content
+					j = wrap[0];
+					while ( j-- ) {
+						tmp = tmp.lastChild;
+					}
+
+					// Manually add leading whitespace removed by IE
+					if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+						nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
+					}
+
+					// Remove IE's autoinserted <tbody> from table fragments
+					if ( !jQuery.support.tbody ) {
+
+						// String was a <table>, *may* have spurious <tbody>
+						elem = tag === "table" && !rtbody.test( elem ) ?
+							tmp.firstChild :
+
+							// String was a bare <thead> or <tfoot>
+							wrap[1] === "<table>" && !rtbody.test( elem ) ?
+								tmp :
+								0;
+
+						j = elem && elem.childNodes.length;
+						while ( j-- ) {
+							if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {
+								elem.removeChild( tbody );
+							}
+						}
+					}
+
+					jQuery.merge( nodes, tmp.childNodes );
+
+					// Fix #12392 for WebKit and IE > 9
+					tmp.textContent = "";
+
+					// Fix #12392 for oldIE
+					while ( tmp.firstChild ) {
+						tmp.removeChild( tmp.firstChild );
+					}
+
+					// Remember the top-level container for proper cleanup
+					tmp = safe.lastChild;
+				}
+			}
+		}
+
+		// Fix #11356: Clear elements from fragment
+		if ( tmp ) {
+			safe.removeChild( tmp );
+		}
+
+		// Reset defaultChecked for any radios and checkboxes
+		// about to be appended to the DOM in IE 6/7 (#8060)
+		if ( !jQuery.support.appendChecked ) {
+			jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
+		}
+
+		i = 0;
+		while ( (elem = nodes[ i++ ]) ) {
+
+			// #4087 - If origin and destination elements are the same, and this is
+			// that element, do not do anything
+			if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
+				continue;
+			}
+
+			contains = jQuery.contains( elem.ownerDocument, elem );
+
+			// Append to fragment
+			tmp = getAll( safe.appendChild( elem ), "script" );
+
+			// Preserve script evaluation history
+			if ( contains ) {
+				setGlobalEval( tmp );
+			}
+
+			// Capture executables
+			if ( scripts ) {
+				j = 0;
+				while ( (elem = tmp[ j++ ]) ) {
+					if ( rscriptType.test( elem.type || "" ) ) {
+						scripts.push( elem );
+					}
+				}
+			}
+		}
+
+		tmp = null;
+
+		return safe;
+	},
+
+	cleanData: function( elems, /* internal */ acceptData ) {
+		var data, id, elem, type,
+			i = 0,
+			internalKey = jQuery.expando,
+			cache = jQuery.cache,
+			deleteExpando = jQuery.support.deleteExpando,
+			special = jQuery.event.special;
+
+		for ( ; (elem = elems[i]) != null; i++ ) {
+
+			if ( acceptData || jQuery.acceptData( elem ) ) {
+
+				id = elem[ internalKey ];
+				data = id && cache[ id ];
+
+				if ( data ) {
+					if ( data.events ) {
+						for ( type in data.events ) {
+							if ( special[ type ] ) {
+								jQuery.event.remove( elem, type );
+
+							// This is a shortcut to avoid jQuery.event.remove's overhead
+							} else {
+								jQuery.removeEvent( elem, type, data.handle );
+							}
+						}
+					}
+
+					// Remove cache only if it was not already removed by jQuery.event.remove
+					if ( cache[ id ] ) {
+
+						delete cache[ id ];
+
+						// IE does not allow us to delete expando properties from nodes,
+						// nor does it have a removeAttribute function on Document nodes;
+						// we must handle all of these cases
+						if ( deleteExpando ) {
+							delete elem[ internalKey ];
+
+						} else if ( typeof elem.removeAttribute !== "undefined" ) {
+							elem.removeAttribute( internalKey );
+
+						} else {
+							elem[ internalKey ] = null;
+						}
+
+						core_deletedIds.push( id );
+					}
+				}
+			}
+		}
+	}
+});
+var curCSS, getStyles, iframe,
+	ralpha = /alpha\([^)]*\)/i,
+	ropacity = /opacity\s*=\s*([^)]*)/,
+	rposition = /^(top|right|bottom|left)$/,
+	// swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
+	// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+	rmargin = /^margin/,
+	rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),
+	rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),
+	rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ),
+	elemdisplay = { BODY: "block" },
+
+	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+	cssNormalTransform = {
+		letterSpacing: 0,
+		fontWeight: 400
+	},
+
+	cssExpand = [ "Top", "Right", "Bottom", "Left" ],
+	cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
+
+// return a css property mapped to a potentially vendor prefixed property
+function vendorPropName( style, name ) {
+
+	// shortcut for names that are not vendor prefixed
+	if ( name in style ) {
+		return name;
+	}
+
+	// check for vendor prefixed names
+	var capName = name.charAt(0).toUpperCase() + name.slice(1),
+		origName = name,
+		i = cssPrefixes.length;
+
+	while ( i-- ) {
+		name = cssPrefixes[ i ] + capName;
+		if ( name in style ) {
+			return name;
+		}
+	}
+
+	return origName;
+}
+
+function isHidden( elem, el ) {
+	// isHidden might be called from jQuery#filter function;
+	// in that case, element will be second argument
+	elem = el || elem;
+	return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
+}
+
+function showHide( elements, show ) {
+	var elem,
+		values = [],
+		index = 0,
+		length = elements.length;
+
+	for ( ; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+		values[ index ] = jQuery._data( elem, "olddisplay" );
+		if ( show ) {
+			// Reset the inline display of this element to learn if it is
+			// being hidden by cascaded rules or not
+			if ( !values[ index ] && elem.style.display === "none" ) {
+				elem.style.display = "";
+			}
+
+			// Set elements which have been overridden with display: none
+			// in a stylesheet to whatever the default browser style is
+			// for such an element
+			if ( elem.style.display === "" && isHidden( elem ) ) {
+				values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );
+			}
+		} else if ( !values[ index ] && !isHidden( elem ) ) {
+			jQuery._data( elem, "olddisplay", jQuery.css( elem, "display" ) );
+		}
+	}
+
+	// Set the display of most of the elements in a second loop
+	// to avoid the constant reflow
+	for ( index = 0; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+		if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
+			elem.style.display = show ? values[ index ] || "" : "none";
+		}
+	}
+
+	return elements;
+}
+
+jQuery.fn.extend({
+	css: function( name, value ) {
+		return jQuery.access( this, function( elem, name, value ) {
+			var styles, len,
+				map = {},
+				i = 0;
+
+			if ( jQuery.isArray( name ) ) {
+				styles = getStyles( elem );
+				len = name.length;
+
+				for ( ; i < len; i++ ) {
+					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+				}
+
+				return map;
+			}
+
+			return value !== undefined ?
+				jQuery.style( elem, name, value ) :
+				jQuery.css( elem, name );
+		}, name, value, arguments.length > 1 );
+	},
+	show: function() {
+		return showHide( this, true );
+	},
+	hide: function() {
+		return showHide( this );
+	},
+	toggle: function( state ) {
+		var bool = typeof state === "boolean";
+
+		return this.each(function() {
+			if ( bool ? state : isHidden( this ) ) {
+				jQuery( this ).show();
+			} else {
+				jQuery( this ).hide();
+			}
+		});
+	}
+});
+
+jQuery.extend({
+	// Add in style property hooks for overriding the default
+	// behavior of getting and setting a style property
+	cssHooks: {
+		opacity: {
+			get: function( elem, computed ) {
+				if ( computed ) {
+					// We should always get a number back from opacity
+					var ret = curCSS( elem, "opacity" );
+					return ret === "" ? "1" : ret;
+				}
+			}
+		}
+	},
+
+	// Exclude the following css properties to add px
+	cssNumber: {
+		"columnCount": true,
+		"fillOpacity": true,
+		"fontWeight": true,
+		"lineHeight": true,
+		"opacity": true,
+		"orphans": true,
+		"widows": true,
+		"zIndex": true,
+		"zoom": true
+	},
+
+	// Add in properties whose names you wish to fix before
+	// setting or getting the value
+	cssProps: {
+		// normalize float css property
+		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
+	},
+
+	// Get and set the style property on a DOM Node
+	style: function( elem, name, value, extra ) {
+		// Don't set styles on text and comment nodes
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+			return;
+		}
+
+		// Make sure that we're working with the right name
+		var ret, type, hooks,
+			origName = jQuery.camelCase( name ),
+			style = elem.style;
+
+		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
+
+		// gets hook for the prefixed version
+		// followed by the unprefixed version
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// Check if we're setting a value
+		if ( value !== undefined ) {
+			type = typeof value;
+
+			// convert relative number strings (+= or -=) to relative numbers. #7345
+			if ( type === "string" && (ret = rrelNum.exec( value )) ) {
+				value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
+				// Fixes bug #9237
+				type = "number";
+			}
+
+			// Make sure that NaN and null values aren't set. See: #7116
+			if ( value == null || type === "number" && isNaN( value ) ) {
+				return;
+			}
+
+			// If a number was passed in, add 'px' to the (except for certain CSS properties)
+			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+				value += "px";
+			}
+
+			// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
+			// but it would mean to define eight (for every problematic property) identical functions
+			if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
+				style[ name ] = "inherit";
+			}
+
+			// If a hook was provided, use that value, otherwise just set the specified value
+			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
+
+				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
+				// Fixes bug #5509
+				try {
+					style[ name ] = value;
+				} catch(e) {}
+			}
+
+		} else {
+			// If a hook was provided get the non-computed value from there
+			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+				return ret;
+			}
+
+			// Otherwise just get the value from the style object
+			return style[ name ];
+		}
+	},
+
+	css: function( elem, name, extra, styles ) {
+		var val, num, hooks,
+			origName = jQuery.camelCase( name );
+
+		// Make sure that we're working with the right name
+		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
+
+		// gets hook for the prefixed version
+		// followed by the unprefixed version
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// If a hook was provided get the computed value from there
+		if ( hooks && "get" in hooks ) {
+			val = hooks.get( elem, true, extra );
+		}
+
+		// Otherwise, if a way to get the computed value exists, use that
+		if ( val === undefined ) {
+			val = curCSS( elem, name, styles );
+		}
+
+		//convert "normal" to computed value
+		if ( val === "normal" && name in cssNormalTransform ) {
+			val = cssNormalTransform[ name ];
+		}
+
+		// Return, converting to number if forced or a qualifier was provided and val looks numeric
+		if ( extra ) {
+			num = parseFloat( val );
+			return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
+		}
+		return val;
+	},
+
+	// A method for quickly swapping in/out CSS properties to get correct calculations
+	swap: function( elem, options, callback, args ) {
+		var ret, name,
+			old = {};
+
+		// Remember the old values, and insert the new ones
+		for ( name in options ) {
+			old[ name ] = elem.style[ name ];
+			elem.style[ name ] = options[ name ];
+		}
+
+		ret = callback.apply( elem, args || [] );
+
+		// Revert the old values
+		for ( name in options ) {
+			elem.style[ name ] = old[ name ];
+		}
+
+		return ret;
+	}
+});
+
+// NOTE: we've included the "window" in window.getComputedStyle
+// because jsdom on node.js will break without it.
+if ( window.getComputedStyle ) {
+	getStyles = function( elem ) {
+		return window.getComputedStyle( elem, null );
+	};
+
+	curCSS = function( elem, name, _computed ) {
+		var width, minWidth, maxWidth,
+			computed = _computed || getStyles( elem ),
+
+			// getPropertyValue is only needed for .css('filter') in IE9, see #12537
+			ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,
+			style = elem.style;
+
+		if ( computed ) {
+
+			if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
+				ret = jQuery.style( elem, name );
+			}
+
+			// A tribute to the "awesome hack by Dean Edwards"
+			// Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
+			// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
+			// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
+			if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+
+				// Remember the original values
+				width = style.width;
+				minWidth = style.minWidth;
+				maxWidth = style.maxWidth;
+
+				// Put in the new values to get a computed value out
+				style.minWidth = style.maxWidth = style.width = ret;
+				ret = computed.width;
+
+				// Revert the changed values
+				style.width = width;
+				style.minWidth = minWidth;
+				style.maxWidth = maxWidth;
+			}
+		}
+
+		return ret;
+	};
+} else if ( document.documentElement.currentStyle ) {
+	getStyles = function( elem ) {
+		return elem.currentStyle;
+	};
+
+	curCSS = function( elem, name, _computed ) {
+		var left, rs, rsLeft,
+			computed = _computed || getStyles( elem ),
+			ret = computed ? computed[ name ] : undefined,
+			style = elem.style;
+
+		// Avoid setting ret to empty string here
+		// so we don't default to auto
+		if ( ret == null && style && style[ name ] ) {
+			ret = style[ name ];
+		}
+
+		// From the awesome hack by Dean Edwards
+		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+		// If we're not dealing with a regular pixel number
+		// but a number that has a weird ending, we need to convert it to pixels
+		// but not position css attributes, as those are proportional to the parent element instead
+		// and we can't measure the parent instead because it might trigger a "stacking dolls" problem
+		if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
+
+			// Remember the original values
+			left = style.left;
+			rs = elem.runtimeStyle;
+			rsLeft = rs && rs.left;
+
+			// Put in the new values to get a computed value out
+			if ( rsLeft ) {
+				rs.left = elem.currentStyle.left;
+			}
+			style.left = name === "fontSize" ? "1em" : ret;
+			ret = style.pixelLeft + "px";
+
+			// Revert the changed values
+			style.left = left;
+			if ( rsLeft ) {
+				rs.left = rsLeft;
+			}
+		}
+
+		return ret === "" ? "auto" : ret;
+	};
+}
+
+function setPositiveNumber( elem, value, subtract ) {
+	var matches = rnumsplit.exec( value );
+	return matches ?
+		// Guard against undefined "subtract", e.g., when used as in cssHooks
+		Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
+		value;
+}
+
+function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
+	var i = extra === ( isBorderBox ? "border" : "content" ) ?
+		// If we already have the right measurement, avoid augmentation
+		4 :
+		// Otherwise initialize for horizontal or vertical properties
+		name === "width" ? 1 : 0,
+
+		val = 0;
+
+	for ( ; i < 4; i += 2 ) {
+		// both box models exclude margin, so add it if we want it
+		if ( extra === "margin" ) {
+			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
+		}
+
+		if ( isBorderBox ) {
+			// border-box includes padding, so remove it if we want content
+			if ( extra === "content" ) {
+				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+			}
+
+			// at this point, extra isn't border nor margin, so remove border
+			if ( extra !== "margin" ) {
+				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		} else {
+			// at this point, extra isn't content, so add padding
+			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+			// at this point, extra isn't content nor padding, so add border
+			if ( extra !== "padding" ) {
+				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		}
+	}
+
+	return val;
+}
+
+function getWidthOrHeight( elem, name, extra ) {
+
+	// Start with offset property, which is equivalent to the border-box value
+	var valueIsBorderBox = true,
+		val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+		styles = getStyles( elem ),
+		isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+
+	// some non-html elements return undefined for offsetWidth, so check for null/undefined
+	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
+	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
+	if ( val <= 0 || val == null ) {
+		// Fall back to computed then uncomputed css if necessary
+		val = curCSS( elem, name, styles );
+		if ( val < 0 || val == null ) {
+			val = elem.style[ name ];
+		}
+
+		// Computed unit is not pixels. Stop here and return.
+		if ( rnumnonpx.test(val) ) {
+			return val;
+		}
+
+		// we need the check for style in case a browser which returns unreliable values
+		// for getComputedStyle silently falls back to the reliable elem.style
+		valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );
+
+		// Normalize "", auto, and prepare for extra
+		val = parseFloat( val ) || 0;
+	}
+
+	// use the active box-sizing model to add/subtract irrelevant styles
+	return ( val +
+		augmentWidthOrHeight(
+			elem,
+			name,
+			extra || ( isBorderBox ? "border" : "content" ),
+			valueIsBorderBox,
+			styles
+		)
+	) + "px";
+}
+
+// Try to determine the default display value of an element
+function css_defaultDisplay( nodeName ) {
+	var doc = document,
+		display = elemdisplay[ nodeName ];
+
+	if ( !display ) {
+		display = actualDisplay( nodeName, doc );
+
+		// If the simple way fails, read from inside an iframe
+		if ( display === "none" || !display ) {
+			// Use the already-created iframe if possible
+			iframe = ( iframe ||
+				jQuery("<iframe frameborder='0' width='0' height='0'/>")
+				.css( "cssText", "display:block !important" )
+			).appendTo( doc.documentElement );
+
+			// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
+			doc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;
+			doc.write("<!doctype html><html><body>");
+			doc.close();
+
+			display = actualDisplay( nodeName, doc );
+			iframe.detach();
+		}
+
+		// Store the correct default display
+		elemdisplay[ nodeName ] = display;
+	}
+
+	return display;
+}
+
+// Called ONLY from within css_defaultDisplay
+function actualDisplay( name, doc ) {
+	var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
+		display = jQuery.css( elem[0], "display" );
+	elem.remove();
+	return display;
+}
+
+jQuery.each([ "height", "width" ], function( i, name ) {
+	jQuery.cssHooks[ name ] = {
+		get: function( elem, computed, extra ) {
+			if ( computed ) {
+				// certain elements can have dimension info if we invisibly show them
+				// however, it must have a current display style that would benefit from this
+				return elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, "display" ) ) ?
+					jQuery.swap( elem, cssShow, function() {
+						return getWidthOrHeight( elem, name, extra );
+					}) :
+					getWidthOrHeight( elem, name, extra );
+			}
+		},
+
+		set: function( elem, value, extra ) {
+			var styles = extra && getStyles( elem );
+			return setPositiveNumber( elem, value, extra ?
+				augmentWidthOrHeight(
+					elem,
+					name,
+					extra,
+					jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+					styles
+				) : 0
+			);
+		}
+	};
+});
+
+if ( !jQuery.support.opacity ) {
+	jQuery.cssHooks.opacity = {
+		get: function( elem, computed ) {
+			// IE uses filters for opacity
+			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
+				( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
+				computed ? "1" : "";
+		},
+
+		set: function( elem, value ) {
+			var style = elem.style,
+				currentStyle = elem.currentStyle,
+				opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
+				filter = currentStyle && currentStyle.filter || style.filter || "";
+
+			// IE has trouble with opacity if it does not have layout
+			// Force it by setting the zoom level
+			style.zoom = 1;
+
+			// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
+			// if value === "", then remove inline opacity #12685
+			if ( ( value >= 1 || value === "" ) &&
+					jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
+					style.removeAttribute ) {
+
+				// Setting style.filter to null, "" & " " still leave "filter:" in the cssText
+				// if "filter:" is present at all, clearType is disabled, we want to avoid this
+				// style.removeAttribute is IE Only, but so apparently is this code path...
+				style.removeAttribute( "filter" );
+
+				// if there is no filter style applied in a css rule or unset inline opacity, we are done
+				if ( value === "" || currentStyle && !currentStyle.filter ) {
+					return;
+				}
+			}
+
+			// otherwise, set new filter values
+			style.filter = ralpha.test( filter ) ?
+				filter.replace( ralpha, opacity ) :
+				filter + " " + opacity;
+		}
+	};
+}
+
+// These hooks cannot be added until DOM ready because the support test
+// for it is not run until after DOM ready
+jQuery(function() {
+	if ( !jQuery.support.reliableMarginRight ) {
+		jQuery.cssHooks.marginRight = {
+			get: function( elem, computed ) {
+				if ( computed ) {
+					// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+					// Work around by temporarily setting element display to inline-block
+					return jQuery.swap( elem, { "display": "inline-block" },
+						curCSS, [ elem, "marginRight" ] );
+				}
+			}
+		};
+	}
+
+	// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+	// getComputedStyle returns percent when specified for top/left/bottom/right
+	// rather than make the css module depend on the offset module, we just check for it here
+	if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {
+		jQuery.each( [ "top", "left" ], function( i, prop ) {
+			jQuery.cssHooks[ prop ] = {
+				get: function( elem, computed ) {
+					if ( computed ) {
+						computed = curCSS( elem, prop );
+						// if curCSS returns percentage, fallback to offset
+						return rnumnonpx.test( computed ) ?
+							jQuery( elem ).position()[ prop ] + "px" :
+							computed;
+					}
+				}
+			};
+		});
+	}
+
+});
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+	jQuery.expr.filters.hidden = function( elem ) {
+		return ( elem.offsetWidth === 0 && elem.offsetHeight === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
+	};
+
+	jQuery.expr.filters.visible = function( elem ) {
+		return !jQuery.expr.filters.hidden( elem );
+	};
+}
+
+// These hooks are used by animate to expand properties
+jQuery.each({
+	margin: "",
+	padding: "",
+	border: "Width"
+}, function( prefix, suffix ) {
+	jQuery.cssHooks[ prefix + suffix ] = {
+		expand: function( value ) {
+			var i = 0,
+				expanded = {},
+
+				// assumes a single number if not a string
+				parts = typeof value === "string" ? value.split(" ") : [ value ];
+
+			for ( ; i < 4; i++ ) {
+				expanded[ prefix + cssExpand[ i ] + suffix ] =
+					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+			}
+
+			return expanded;
+		}
+	};
+
+	if ( !rmargin.test( prefix ) ) {
+		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+	}
+});
+var r20 = /%20/g,
+	rbracket = /\[\]$/,
+	rCRLF = /\r?\n/g,
+	rsubmitterTypes = /^(?:submit|button|image|reset)$/i,
+	rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+jQuery.fn.extend({
+	serialize: function() {
+		return jQuery.param( this.serializeArray() );
+	},
+	serializeArray: function() {
+		return this.map(function(){
+			// Can add propHook for "elements" to filter or add form elements
+			var elements = jQuery.prop( this, "elements" );
+			return elements ? jQuery.makeArray( elements ) : this;
+		})
+		.filter(function(){
+			var type = this.type;
+			// Use .is(":disabled") so that fieldset[disabled] works
+			return this.name && !jQuery( this ).is( ":disabled" ) &&
+				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+				( this.checked || !manipulation_rcheckableType.test( type ) );
+		})
+		.map(function( i, elem ){
+			var val = jQuery( this ).val();
+
+			return val == null ?
+				null :
+				jQuery.isArray( val ) ?
+					jQuery.map( val, function( val ){
+						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+					}) :
+					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+		}).get();
+	}
+});
+
+//Serialize an array of form elements or a set of
+//key/values into a query string
+jQuery.param = function( a, traditional ) {
+	var prefix,
+		s = [],
+		add = function( key, value ) {
+			// If value is a function, invoke it and return its value
+			value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
+			s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+		};
+
+	// Set traditional to true for jQuery <= 1.3.2 behavior.
+	if ( traditional === undefined ) {
+		traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
+	}
+
+	// If an array was passed in, assume that it is an array of form elements.
+	if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+		// Serialize the form elements
+		jQuery.each( a, function() {
+			add( this.name, this.value );
+		});
+
+	} else {
+		// If traditional, encode the "old" way (the way 1.3.2 or older
+		// did it), otherwise encode params recursively.
+		for ( prefix in a ) {
+			buildParams( prefix, a[ prefix ], traditional, add );
+		}
+	}
+
+	// Return the resulting serialization
+	return s.join( "&" ).replace( r20, "+" );
+};
+
+function buildParams( prefix, obj, traditional, add ) {
+	var name;
+
+	if ( jQuery.isArray( obj ) ) {
+		// Serialize array item.
+		jQuery.each( obj, function( i, v ) {
+			if ( traditional || rbracket.test( prefix ) ) {
+				// Treat each array item as a scalar.
+				add( prefix, v );
+
+			} else {
+				// Item is non-scalar (array or object), encode its numeric index.
+				buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
+			}
+		});
+
+	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
+		// Serialize object item.
+		for ( name in obj ) {
+			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+		}
+
+	} else {
+		// Serialize scalar item.
+		add( prefix, obj );
+	}
+}
+var
+	// Document location
+	ajaxLocParts,
+	ajaxLocation,
+
+	ajax_nonce = jQuery.now(),
+
+	ajax_rquery = /\?/,
+	rhash = /#.*$/,
+	rts = /([?&])_=[^&]*/,
+	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+	// #7653, #8125, #8152: local protocol detection
+	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+	rnoContent = /^(?:GET|HEAD)$/,
+	rprotocol = /^\/\//,
+	rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,
+
+	// Keep a copy of the old load method
+	_load = jQuery.fn.load,
+
+	/* Prefilters
+	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+	 * 2) These are called:
+	 *    - BEFORE asking for a transport
+	 *    - AFTER param serialization (s.data is a string if s.processData is true)
+	 * 3) key is the dataType
+	 * 4) the catchall symbol "*" can be used
+	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+	 */
+	prefilters = {},
+
+	/* Transports bindings
+	 * 1) key is the dataType
+	 * 2) the catchall symbol "*" can be used
+	 * 3) selection will start with transport dataType and THEN go to "*" if needed
+	 */
+	transports = {},
+
+	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+	allTypes = "*/".concat("*");
+
+// #8138, IE may throw an exception when accessing
+// a field from window.location if document.domain has been set
+try {
+	ajaxLocation = location.href;
+} catch( e ) {
+	// Use the href attribute of an A element
+	// since IE will modify it given document.location
+	ajaxLocation = document.createElement( "a" );
+	ajaxLocation.href = "";
+	ajaxLocation = ajaxLocation.href;
+}
+
+// Segment location into parts
+ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+	// dataTypeExpression is optional and defaults to "*"
+	return function( dataTypeExpression, func ) {
+
+		if ( typeof dataTypeExpression !== "string" ) {
+			func = dataTypeExpression;
+			dataTypeExpression = "*";
+		}
+
+		var dataType,
+			i = 0,
+			dataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || [];
+
+		if ( jQuery.isFunction( func ) ) {
+			// For each dataType in the dataTypeExpression
+			while ( (dataType = dataTypes[i++]) ) {
+				// Prepend if requested
+				if ( dataType[0] === "+" ) {
+					dataType = dataType.slice( 1 ) || "*";
+					(structure[ dataType ] = structure[ dataType ] || []).unshift( func );
+
+				// Otherwise append
+				} else {
+					(structure[ dataType ] = structure[ dataType ] || []).push( func );
+				}
+			}
+		}
+	};
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+
+	var inspected = {},
+		seekingTransport = ( structure === transports );
+
+	function inspect( dataType ) {
+		var selected;
+		inspected[ dataType ] = true;
+		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+			if( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+				options.dataTypes.unshift( dataTypeOrTransport );
+				inspect( dataTypeOrTransport );
+				return false;
+			} else if ( seekingTransport ) {
+				return !( selected = dataTypeOrTransport );
+			}
+		});
+		return selected;
+	}
+
+	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+	var key, deep,
+		flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+	for ( key in src ) {
+		if ( src[ key ] !== undefined ) {
+			( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
+		}
+	}
+	if ( deep ) {
+		jQuery.extend( true, target, deep );
+	}
+
+	return target;
+}
+
+jQuery.fn.load = function( url, params, callback ) {
+	if ( typeof url !== "string" && _load ) {
+		return _load.apply( this, arguments );
+	}
+
+	var selector, type, response,
+		self = this,
+		off = url.indexOf(" ");
+
+	if ( off >= 0 ) {
+		selector = url.slice( off, url.length );
+		url = url.slice( 0, off );
+	}
+
+	// If it's a function
+	if ( jQuery.isFunction( params ) ) {
+
+		// We assume that it's the callback
+		callback = params;
+		params = undefined;
+
+	// Otherwise, build a param string
+	} else if ( params && typeof params === "object" ) {
+		type = "POST";
+	}
+
+	// If we have elements to modify, make the request
+	if ( self.length > 0 ) {
+		jQuery.ajax({
+			url: url,
+
+			// if "type" variable is undefined, then "GET" method will be used
+			type: type,
+			dataType: "html",
+			data: params
+		}).done(function( responseText ) {
+
+			// Save response for use in complete callback
+			response = arguments;
+
+			self.html( selector ?
+
+				// If a selector was specified, locate the right elements in a dummy div
+				// Exclude scripts to avoid IE 'Permission Denied' errors
+				jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
+
+				// Otherwise use the full result
+				responseText );
+
+		}).complete( callback && function( jqXHR, status ) {
+			self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
+		});
+	}
+
+	return this;
+};
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ){
+	jQuery.fn[ type ] = function( fn ){
+		return this.on( type, fn );
+	};
+});
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+	jQuery[ method ] = function( url, data, callback, type ) {
+		// shift arguments if data argument was omitted
+		if ( jQuery.isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = undefined;
+		}
+
+		return jQuery.ajax({
+			url: url,
+			type: method,
+			dataType: type,
+			data: data,
+			success: callback
+		});
+	};
+});
+
+jQuery.extend({
+
+	// Counter for holding the number of active queries
+	active: 0,
+
+	// Last-Modified header cache for next request
+	lastModified: {},
+	etag: {},
+
+	ajaxSettings: {
+		url: ajaxLocation,
+		type: "GET",
+		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+		global: true,
+		processData: true,
+		async: true,
+		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+		/*
+		timeout: 0,
+		data: null,
+		dataType: null,
+		username: null,
+		password: null,
+		cache: null,
+		throws: false,
+		traditional: false,
+		headers: {},
+		*/
+
+		accepts: {
+			"*": allTypes,
+			text: "text/plain",
+			html: "text/html",
+			xml: "application/xml, text/xml",
+			json: "application/json, text/javascript"
+		},
+
+		contents: {
+			xml: /xml/,
+			html: /html/,
+			json: /json/
+		},
+
+		responseFields: {
+			xml: "responseXML",
+			text: "responseText"
+		},
+
+		// Data converters
+		// Keys separate source (or catchall "*") and destination types with a single space
+		converters: {
+
+			// Convert anything to text
+			"* text": window.String,
+
+			// Text to html (true = no transformation)
+			"text html": true,
+
+			// Evaluate text as a json expression
+			"text json": jQuery.parseJSON,
+
+			// Parse text as xml
+			"text xml": jQuery.parseXML
+		},
+
+		// For options that shouldn't be deep extended:
+		// you can add your own custom options here if
+		// and when you create one that shouldn't be
+		// deep extended (see ajaxExtend)
+		flatOptions: {
+			url: true,
+			context: true
+		}
+	},
+
+	// Creates a full fledged settings object into target
+	// with both ajaxSettings and settings fields.
+	// If target is omitted, writes into ajaxSettings.
+	ajaxSetup: function( target, settings ) {
+		return settings ?
+
+			// Building a settings object
+			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+
+			// Extending ajaxSettings
+			ajaxExtend( jQuery.ajaxSettings, target );
+	},
+
+	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+	ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+	// Main method
+	ajax: function( url, options ) {
+
+		// If url is an object, simulate pre-1.5 signature
+		if ( typeof url === "object" ) {
+			options = url;
+			url = undefined;
+		}
+
+		// Force options to be an object
+		options = options || {};
+
+		var transport,
+			// URL without anti-cache param
+			cacheURL,
+			// Response headers
+			responseHeadersString,
+			responseHeaders,
+			// timeout handle
+			timeoutTimer,
+			// Cross-domain detection vars
+			parts,
+			// To know if global events are to be dispatched
+			fireGlobals,
+			// Loop variable
+			i,
+			// Create the final options object
+			s = jQuery.ajaxSetup( {}, options ),
+			// Callbacks context
+			callbackContext = s.context || s,
+			// Context for global events is callbackContext if it is a DOM node or jQuery collection
+			globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
+				jQuery( callbackContext ) :
+				jQuery.event,
+			// Deferreds
+			deferred = jQuery.Deferred(),
+			completeDeferred = jQuery.Callbacks("once memory"),
+			// Status-dependent callbacks
+			statusCode = s.statusCode || {},
+			// Headers (they are sent all at once)
+			requestHeaders = {},
+			requestHeadersNames = {},
+			// The jqXHR state
+			state = 0,
+			// Default abort message
+			strAbort = "canceled",
+			// Fake xhr
+			jqXHR = {
+				readyState: 0,
+
+				// Builds headers hashtable if needed
+				getResponseHeader: function( key ) {
+					var match;
+					if ( state === 2 ) {
+						if ( !responseHeaders ) {
+							responseHeaders = {};
+							while ( (match = rheaders.exec( responseHeadersString )) ) {
+								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+							}
+						}
+						match = responseHeaders[ key.toLowerCase() ];
+					}
+					return match == null ? null : match;
+				},
+
+				// Raw string
+				getAllResponseHeaders: function() {
+					return state === 2 ? responseHeadersString : null;
+				},
+
+				// Caches the header
+				setRequestHeader: function( name, value ) {
+					var lname = name.toLowerCase();
+					if ( !state ) {
+						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+						requestHeaders[ name ] = value;
+					}
+					return this;
+				},
+
+				// Overrides response content-type header
+				overrideMimeType: function( type ) {
+					if ( !state ) {
+						s.mimeType = type;
+					}
+					return this;
+				},
+
+				// Status-dependent callbacks
+				statusCode: function( map ) {
+					var code;
+					if ( map ) {
+						if ( state < 2 ) {
+							for ( code in map ) {
+								// Lazy-add the new callback in a way that preserves old ones
+								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+							}
+						} else {
+							// Execute the appropriate callbacks
+							jqXHR.always( map[ jqXHR.status ] );
+						}
+					}
+					return this;
+				},
+
+				// Cancel the request
+				abort: function( statusText ) {
+					var finalText = statusText || strAbort;
+					if ( transport ) {
+						transport.abort( finalText );
+					}
+					done( 0, finalText );
+					return this;
+				}
+			};
+
+		// Attach deferreds
+		deferred.promise( jqXHR ).complete = completeDeferred.add;
+		jqXHR.success = jqXHR.done;
+		jqXHR.error = jqXHR.fail;
+
+		// Remove hash character (#7531: and string promotion)
+		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+		// Handle falsy url in the settings object (#10093: consistency with old signature)
+		// We also use the url parameter if available
+		s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+
+		// Alias method option to type as per ticket #12004
+		s.type = options.method || options.type || s.method || s.type;
+
+		// Extract dataTypes list
+		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( core_rnotwhite ) || [""];
+
+		// A cross-domain request is in order when we have a protocol:host:port mismatch
+		if ( s.crossDomain == null ) {
+			parts = rurl.exec( s.url.toLowerCase() );
+			s.crossDomain = !!( parts &&
+				( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
+					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
+						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
+			);
+		}
+
+		// Convert data if not already a string
+		if ( s.data && s.processData && typeof s.data !== "string" ) {
+			s.data = jQuery.param( s.data, s.traditional );
+		}
+
+		// Apply prefilters
+		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+		// If request was aborted inside a prefilter, stop there
+		if ( state === 2 ) {
+			return jqXHR;
+		}
+
+		// We can fire global events as of now if asked to
+		fireGlobals = s.global;
+
+		// Watch for a new set of requests
+		if ( fireGlobals && jQuery.active++ === 0 ) {
+			jQuery.event.trigger("ajaxStart");
+		}
+
+		// Uppercase the type
+		s.type = s.type.toUpperCase();
+
+		// Determine if request has content
+		s.hasContent = !rnoContent.test( s.type );
+
+		// Save the URL in case we're toying with the If-Modified-Since
+		// and/or If-None-Match header later on
+		cacheURL = s.url;
+
+		// More options handling for requests with no content
+		if ( !s.hasContent ) {
+
+			// If data is available, append data to url
+			if ( s.data ) {
+				cacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
+				// #9682: remove data so that it's not used in an eventual retry
+				delete s.data;
+			}
+
+			// Add anti-cache in url if needed
+			if ( s.cache === false ) {
+				s.url = rts.test( cacheURL ) ?
+
+					// If there is already a '_' parameter, set its value
+					cacheURL.replace( rts, "$1_=" + ajax_nonce++ ) :
+
+					// Otherwise add one to the end
+					cacheURL + ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ajax_nonce++;
+			}
+		}
+
+		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+		if ( s.ifModified ) {
+			if ( jQuery.lastModified[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+			}
+			if ( jQuery.etag[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+			}
+		}
+
+		// Set the correct header, if data is being sent
+		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+			jqXHR.setRequestHeader( "Content-Type", s.contentType );
+		}
+
+		// Set the Accepts header for the server, depending on the dataType
+		jqXHR.setRequestHeader(
+			"Accept",
+			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+				s.accepts[ "*" ]
+		);
+
+		// Check for headers option
+		for ( i in s.headers ) {
+			jqXHR.setRequestHeader( i, s.headers[ i ] );
+		}
+
+		// Allow custom headers/mimetypes and early abort
+		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+			// Abort if not done already and return
+			return jqXHR.abort();
+		}
+
+		// aborting is no longer a cancellation
+		strAbort = "abort";
+
+		// Install callbacks on deferreds
+		for ( i in { success: 1, error: 1, complete: 1 } ) {
+			jqXHR[ i ]( s[ i ] );
+		}
+
+		// Get transport
+		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+		// If no transport, we auto-abort
+		if ( !transport ) {
+			done( -1, "No Transport" );
+		} else {
+			jqXHR.readyState = 1;
+
+			// Send global event
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+			}
+			// Timeout
+			if ( s.async && s.timeout > 0 ) {
+				timeoutTimer = setTimeout(function() {
+					jqXHR.abort("timeout");
+				}, s.timeout );
+			}
+
+			try {
+				state = 1;
+				transport.send( requestHeaders, done );
+			} catch ( e ) {
+				// Propagate exception as error if not done
+				if ( state < 2 ) {
+					done( -1, e );
+				// Simply rethrow otherwise
+				} else {
+					throw e;
+				}
+			}
+		}
+
+		// Callback for when everything is done
+		function done( status, nativeStatusText, responses, headers ) {
+			var isSuccess, success, error, response, modified,
+				statusText = nativeStatusText;
+
+			// Called once
+			if ( state === 2 ) {
+				return;
+			}
+
+			// State is "done" now
+			state = 2;
+
+			// Clear timeout if it exists
+			if ( timeoutTimer ) {
+				clearTimeout( timeoutTimer );
+			}
+
+			// Dereference transport for early garbage collection
+			// (no matter how long the jqXHR object will be used)
+			transport = undefined;
+
+			// Cache response headers
+			responseHeadersString = headers || "";
+
+			// Set readyState
+			jqXHR.readyState = status > 0 ? 4 : 0;
+
+			// Get response data
+			if ( responses ) {
+				response = ajaxHandleResponses( s, jqXHR, responses );
+			}
+
+			// If successful, handle type chaining
+			if ( status >= 200 && status < 300 || status === 304 ) {
+
+				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+				if ( s.ifModified ) {
+					modified = jqXHR.getResponseHeader("Last-Modified");
+					if ( modified ) {
+						jQuery.lastModified[ cacheURL ] = modified;
+					}
+					modified = jqXHR.getResponseHeader("etag");
+					if ( modified ) {
+						jQuery.etag[ cacheURL ] = modified;
+					}
+				}
+
+				// If not modified
+				if ( status === 304 ) {
+					isSuccess = true;
+					statusText = "notmodified";
+
+				// If we have data
+				} else {
+					isSuccess = ajaxConvert( s, response );
+					statusText = isSuccess.state;
+					success = isSuccess.data;
+					error = isSuccess.error;
+					isSuccess = !error;
+				}
+			} else {
+				// We extract error from statusText
+				// then normalize statusText and status for non-aborts
+				error = statusText;
+				if ( status || !statusText ) {
+					statusText = "error";
+					if ( status < 0 ) {
+						status = 0;
+					}
+				}
+			}
+
+			// Set data for the fake xhr object
+			jqXHR.status = status;
+			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+			// Success/Error
+			if ( isSuccess ) {
+				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+			} else {
+				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+			}
+
+			// Status-dependent callbacks
+			jqXHR.statusCode( statusCode );
+			statusCode = undefined;
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+					[ jqXHR, s, isSuccess ? success : error ] );
+			}
+
+			// Complete
+			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+				// Handle the global AJAX counter
+				if ( !( --jQuery.active ) ) {
+					jQuery.event.trigger("ajaxStop");
+				}
+			}
+		}
+
+		return jqXHR;
+	},
+
+	getScript: function( url, callback ) {
+		return jQuery.get( url, undefined, callback, "script" );
+	},
+
+	getJSON: function( url, data, callback ) {
+		return jQuery.get( url, data, callback, "json" );
+	}
+});
+
+/* Handles responses to an ajax request:
+ * - sets all responseXXX fields accordingly
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+	var ct, type, finalDataType, firstDataType,
+		contents = s.contents,
+		dataTypes = s.dataTypes,
+		responseFields = s.responseFields;
+
+	// Fill responseXXX fields
+	for ( type in responseFields ) {
+		if ( type in responses ) {
+			jqXHR[ responseFields[type] ] = responses[ type ];
+		}
+	}
+
+	// Remove auto dataType and get content-type in the process
+	while( dataTypes[ 0 ] === "*" ) {
+		dataTypes.shift();
+		if ( ct === undefined ) {
+			ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
+		}
+	}
+
+	// Check if we're dealing with a known content-type
+	if ( ct ) {
+		for ( type in contents ) {
+			if ( contents[ type ] && contents[ type ].test( ct ) ) {
+				dataTypes.unshift( type );
+				break;
+			}
+		}
+	}
+
+	// Check to see if we have a response for the expected dataType
+	if ( dataTypes[ 0 ] in responses ) {
+		finalDataType = dataTypes[ 0 ];
+	} else {
+		// Try convertible dataTypes
+		for ( type in responses ) {
+			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+				finalDataType = type;
+				break;
+			}
+			if ( !firstDataType ) {
+				firstDataType = type;
+			}
+		}
+		// Or just use first one
+		finalDataType = finalDataType || firstDataType;
+	}
+
+	// If we found a dataType
+	// We add the dataType to the list if needed
+	// and return the corresponding response
+	if ( finalDataType ) {
+		if ( finalDataType !== dataTypes[ 0 ] ) {
+			dataTypes.unshift( finalDataType );
+		}
+		return responses[ finalDataType ];
+	}
+}
+
+// Chain conversions given the request and the original response
+function ajaxConvert( s, response ) {
+
+	var conv, conv2, current, tmp,
+		converters = {},
+		i = 0,
+		// Work with a copy of dataTypes in case we need to modify it for conversion
+		dataTypes = s.dataTypes.slice(),
+		prev = dataTypes[ 0 ];
+
+	// Apply the dataFilter if provided
+	if ( s.dataFilter ) {
+		response = s.dataFilter( response, s.dataType );
+	}
+
+	// Create converters map with lowercased keys
+	if ( dataTypes[ 1 ] ) {
+		for ( conv in s.converters ) {
+			converters[ conv.toLowerCase() ] = s.converters[ conv ];
+		}
+	}
+
+	// Convert to each sequential dataType, tolerating list modification
+	for ( ; (current = dataTypes[++i]); ) {
+
+		// There's only work to do if current dataType is non-auto
+		if ( current !== "*" ) {
+
+			// Convert response if prev dataType is non-auto and differs from current
+			if ( prev !== "*" && prev !== current ) {
+
+				// Seek a direct converter
+				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+				// If none found, seek a pair
+				if ( !conv ) {
+					for ( conv2 in converters ) {
+
+						// If conv2 outputs current
+						tmp = conv2.split(" ");
+						if ( tmp[ 1 ] === current ) {
+
+							// If prev can be converted to accepted input
+							conv = converters[ prev + " " + tmp[ 0 ] ] ||
+								converters[ "* " + tmp[ 0 ] ];
+							if ( conv ) {
+								// Condense equivalence converters
+								if ( conv === true ) {
+									conv = converters[ conv2 ];
+
+								// Otherwise, insert the intermediate dataType
+								} else if ( converters[ conv2 ] !== true ) {
+									current = tmp[ 0 ];
+									dataTypes.splice( i--, 0, current );
+								}
+
+								break;
+							}
+						}
+					}
+				}
+
+				// Apply converter (if not an equivalence)
+				if ( conv !== true ) {
+
+					// Unless errors are allowed to bubble, catch and return them
+					if ( conv && s["throws"] ) {
+						response = conv( response );
+					} else {
+						try {
+							response = conv( response );
+						} catch ( e ) {
+							return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
+						}
+					}
+				}
+			}
+
+			// Update prev for next iteration
+			prev = current;
+		}
+	}
+
+	return { state: "success", data: response };
+}
+// Install script dataType
+jQuery.ajaxSetup({
+	accepts: {
+		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+	},
+	contents: {
+		script: /(?:java|ecma)script/
+	},
+	converters: {
+		"text script": function( text ) {
+			jQuery.globalEval( text );
+			return text;
+		}
+	}
+});
+
+// Handle cache's special case and global
+jQuery.ajaxPrefilter( "script", function( s ) {
+	if ( s.cache === undefined ) {
+		s.cache = false;
+	}
+	if ( s.crossDomain ) {
+		s.type = "GET";
+		s.global = false;
+	}
+});
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function(s) {
+
+	// This transport only deals with cross domain requests
+	if ( s.crossDomain ) {
+
+		var script,
+			head = document.head || jQuery("head")[0] || document.documentElement;
+
+		return {
+
+			send: function( _, callback ) {
+
+				script = document.createElement("script");
+
+				script.async = true;
+
+				if ( s.scriptCharset ) {
+					script.charset = s.scriptCharset;
+				}
+
+				script.src = s.url;
+
+				// Attach handlers for all browsers
+				script.onload = script.onreadystatechange = function( _, isAbort ) {
+
+					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+
+						// Handle memory leak in IE
+						script.onload = script.onreadystatechange = null;
+
+						// Remove the script
+						if ( script.parentNode ) {
+							script.parentNode.removeChild( script );
+						}
+
+						// Dereference the script
+						script = null;
+
+						// Callback if not abort
+						if ( !isAbort ) {
+							callback( 200, "success" );
+						}
+					}
+				};
+
+				// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
+				// Use native DOM manipulation to avoid our domManip AJAX trickery
+				head.insertBefore( script, head.firstChild );
+			},
+
+			abort: function() {
+				if ( script ) {
+					script.onload( undefined, true );
+				}
+			}
+		};
+	}
+});
+var oldCallbacks = [],
+	rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+jQuery.ajaxSetup({
+	jsonp: "callback",
+	jsonpCallback: function() {
+		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( ajax_nonce++ ) );
+		this[ callback ] = true;
+		return callback;
+	}
+});
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+	var callbackName, overwritten, responseContainer,
+		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+			"url" :
+			typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
+		);
+
+	// Handle iff the expected data type is "jsonp" or we have a parameter to set
+	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+
+		// Get callback name, remembering preexisting value associated with it
+		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
+			s.jsonpCallback() :
+			s.jsonpCallback;
+
+		// Insert callback into url or form data
+		if ( jsonProp ) {
+			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+		} else if ( s.jsonp !== false ) {
+			s.url += ( ajax_rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+		}
+
+		// Use data converter to retrieve json after script execution
+		s.converters["script json"] = function() {
+			if ( !responseContainer ) {
+				jQuery.error( callbackName + " was not called" );
+			}
+			return responseContainer[ 0 ];
+		};
+
+		// force json dataType
+		s.dataTypes[ 0 ] = "json";
+
+		// Install callback
+		overwritten = window[ callbackName ];
+		window[ callbackName ] = function() {
+			responseContainer = arguments;
+		};
+
+		// Clean-up function (fires after converters)
+		jqXHR.always(function() {
+			// Restore preexisting value
+			window[ callbackName ] = overwritten;
+
+			// Save back as free
+			if ( s[ callbackName ] ) {
+				// make sure that re-using the options doesn't screw things around
+				s.jsonpCallback = originalSettings.jsonpCallback;
+
+				// save the callback name for future use
+				oldCallbacks.push( callbackName );
+			}
+
+			// Call if it was a function and we have a response
+			if ( responseContainer && jQuery.isFunction( overwritten ) ) {
+				overwritten( responseContainer[ 0 ] );
+			}
+
+			responseContainer = overwritten = undefined;
+		});
+
+		// Delegate to script
+		return "script";
+	}
+});
+var xhrCallbacks, xhrSupported,
+	xhrId = 0,
+	// #5280: Internet Explorer will keep connections alive if we don't abort on unload
+	xhrOnUnloadAbort = window.ActiveXObject && function() {
+		// Abort all pending requests
+		var key;
+		for ( key in xhrCallbacks ) {
+			xhrCallbacks[ key ]( undefined, true );
+		}
+	};
+
+// Functions to create xhrs
+function createStandardXHR() {
+	try {
+		return new window.XMLHttpRequest();
+	} catch( e ) {}
+}
+
+function createActiveXHR() {
+	try {
+		return new window.ActiveXObject("Microsoft.XMLHTTP");
+	} catch( e ) {}
+}
+
+// Create the request object
+// (This is still attached to ajaxSettings for backward compatibility)
+jQuery.ajaxSettings.xhr = window.ActiveXObject ?
+	/* Microsoft failed to properly
+	 * implement the XMLHttpRequest in IE7 (can't request local files),
+	 * so we use the ActiveXObject when it is available
+	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
+	 * we need a fallback.
+	 */
+	function() {
+		return !this.isLocal && createStandardXHR() || createActiveXHR();
+	} :
+	// For all other browsers, use the standard XMLHttpRequest object
+	createStandardXHR;
+
+// Determine support properties
+xhrSupported = jQuery.ajaxSettings.xhr();
+jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+xhrSupported = jQuery.support.ajax = !!xhrSupported;
+
+// Create transport if the browser can provide an xhr
+if ( xhrSupported ) {
+
+	jQuery.ajaxTransport(function( s ) {
+		// Cross domain only allowed if supported through XMLHttpRequest
+		if ( !s.crossDomain || jQuery.support.cors ) {
+
+			var callback;
+
+			return {
+				send: function( headers, complete ) {
+
+					// Get a new xhr
+					var handle, i,
+						xhr = s.xhr();
+
+					// Open the socket
+					// Passing null username, generates a login popup on Opera (#2865)
+					if ( s.username ) {
+						xhr.open( s.type, s.url, s.async, s.username, s.password );
+					} else {
+						xhr.open( s.type, s.url, s.async );
+					}
+
+					// Apply custom fields if provided
+					if ( s.xhrFields ) {
+						for ( i in s.xhrFields ) {
+							xhr[ i ] = s.xhrFields[ i ];
+						}
+					}
+
+					// Override mime type if needed
+					if ( s.mimeType && xhr.overrideMimeType ) {
+						xhr.overrideMimeType( s.mimeType );
+					}
+
+					// X-Requested-With header
+					// For cross-domain requests, seeing as conditions for a preflight are
+					// akin to a jigsaw puzzle, we simply never set it to be sure.
+					// (it can always be set on a per-request basis or even using ajaxSetup)
+					// For same-domain requests, won't change header if already provided.
+					if ( !s.crossDomain && !headers["X-Requested-With"] ) {
+						headers["X-Requested-With"] = "XMLHttpRequest";
+					}
+
+					// Need an extra try/catch for cross domain requests in Firefox 3
+					try {
+						for ( i in headers ) {
+							xhr.setRequestHeader( i, headers[ i ] );
+						}
+					} catch( err ) {}
+
+					// Do send the request
+					// This may raise an exception which is actually
+					// handled in jQuery.ajax (so no try/catch here)
+					xhr.send( ( s.hasContent && s.data ) || null );
+
+					// Listener
+					callback = function( _, isAbort ) {
+
+						var status,
+							statusText,
+							responseHeaders,
+							responses,
+							xml;
+
+						// Firefox throws exceptions when accessing properties
+						// of an xhr when a network error occurred
+						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
+						try {
+
+							// Was never called and is aborted or complete
+							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
+
+								// Only called once
+								callback = undefined;
+
+								// Do not keep as active anymore
+								if ( handle ) {
+									xhr.onreadystatechange = jQuery.noop;
+									if ( xhrOnUnloadAbort ) {
+										delete xhrCallbacks[ handle ];
+									}
+								}
+
+								// If it's an abort
+								if ( isAbort ) {
+									// Abort it manually if needed
+									if ( xhr.readyState !== 4 ) {
+										xhr.abort();
+									}
+								} else {
+									responses = {};
+									status = xhr.status;
+									xml = xhr.responseXML;
+									responseHeaders = xhr.getAllResponseHeaders();
+
+									// Construct response list
+									if ( xml && xml.documentElement /* #4958 */ ) {
+										responses.xml = xml;
+									}
+
+									// When requesting binary data, IE6-9 will throw an exception
+									// on any attempt to access responseText (#11426)
+									if ( typeof xhr.responseText === "string" ) {
+										responses.text = xhr.responseText;
+									}
+
+									// Firefox throws an exception when accessing
+									// statusText for faulty cross-domain requests
+									try {
+										statusText = xhr.statusText;
+									} catch( e ) {
+										// We normalize with Webkit giving an empty statusText
+										statusText = "";
+									}
+
+									// Filter status for non standard behaviors
+
+									// If the request is local and we have data: assume a success
+									// (success with no data won't get notified, that's the best we
+									// can do given current implementations)
+									if ( !status && s.isLocal && !s.crossDomain ) {
+										status = responses.text ? 200 : 404;
+									// IE - #1450: sometimes returns 1223 when it should be 204
+									} else if ( status === 1223 ) {
+										status = 204;
+									}
+								}
+							}
+						} catch( firefoxAccessException ) {
+							if ( !isAbort ) {
+								complete( -1, firefoxAccessException );
+							}
+						}
+
+						// Call complete if needed
+						if ( responses ) {
+							complete( status, statusText, responses, responseHeaders );
+						}
+					};
+
+					if ( !s.async ) {
+						// if we're in sync mode we fire the callback
+						callback();
+					} else if ( xhr.readyState === 4 ) {
+						// (IE6 & IE7) if it's in cache and has been
+						// retrieved directly we need to fire the callback
+						setTimeout( callback );
+					} else {
+						handle = ++xhrId;
+						if ( xhrOnUnloadAbort ) {
+							// Create the active xhrs callbacks list if needed
+							// and attach the unload handler
+							if ( !xhrCallbacks ) {
+								xhrCallbacks = {};
+								jQuery( window ).unload( xhrOnUnloadAbort );
+							}
+							// Add to list of active xhrs callbacks
+							xhrCallbacks[ handle ] = callback;
+						}
+						xhr.onreadystatechange = callback;
+					}
+				},
+
+				abort: function() {
+					if ( callback ) {
+						callback( undefined, true );
+					}
+				}
+			};
+		}
+	});
+}
+var fxNow, timerId,
+	rfxtypes = /^(?:toggle|show|hide)$/,
+	rfxnum = new RegExp( "^(?:([+-])=|)(" + core_pnum + ")([a-z%]*)$", "i" ),
+	rrun = /queueHooks$/,
+	animationPrefilters = [ defaultPrefilter ],
+	tweeners = {
+		"*": [function( prop, value ) {
+			var end, unit,
+				tween = this.createTween( prop, value ),
+				parts = rfxnum.exec( value ),
+				target = tween.cur(),
+				start = +target || 0,
+				scale = 1,
+				maxIterations = 20;
+
+			if ( parts ) {
+				end = +parts[2];
+				unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+
+				// We need to compute starting value
+				if ( unit !== "px" && start ) {
+					// Iteratively approximate from a nonzero starting point
+					// Prefer the current property, because this process will be trivial if it uses the same units
+					// Fallback to end or a simple constant
+					start = jQuery.css( tween.elem, prop, true ) || end || 1;
+
+					do {
+						// If previous iteration zeroed out, double until we get *something*
+						// Use a string for doubling factor so we don't accidentally see scale as unchanged below
+						scale = scale || ".5";
+
+						// Adjust and apply
+						start = start / scale;
+						jQuery.style( tween.elem, prop, start + unit );
+
+					// Update scale, tolerating zero or NaN from tween.cur()
+					// And breaking the loop if scale is unchanged or perfect, or if we've just had enough
+					} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
+				}
+
+				tween.unit = unit;
+				tween.start = start;
+				// If a +=/-= token was provided, we're doing a relative animation
+				tween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end;
+			}
+			return tween;
+		}]
+	};
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+	setTimeout(function() {
+		fxNow = undefined;
+	});
+	return ( fxNow = jQuery.now() );
+}
+
+function createTweens( animation, props ) {
+	jQuery.each( props, function( prop, value ) {
+		var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
+			index = 0,
+			length = collection.length;
+		for ( ; index < length; index++ ) {
+			if ( collection[ index ].call( animation, prop, value ) ) {
+
+				// we're done with this property
+				return;
+			}
+		}
+	});
+}
+
+function Animation( elem, properties, options ) {
+	var result,
+		stopped,
+		index = 0,
+		length = animationPrefilters.length,
+		deferred = jQuery.Deferred().always( function() {
+			// don't match elem in the :animated selector
+			delete tick.elem;
+		}),
+		tick = function() {
+			if ( stopped ) {
+				return false;
+			}
+			var currentTime = fxNow || createFxNow(),
+				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+				// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
+				temp = remaining / animation.duration || 0,
+				percent = 1 - temp,
+				index = 0,
+				length = animation.tweens.length;
+
+			for ( ; index < length ; index++ ) {
+				animation.tweens[ index ].run( percent );
+			}
+
+			deferred.notifyWith( elem, [ animation, percent, remaining ]);
+
+			if ( percent < 1 && length ) {
+				return remaining;
+			} else {
+				deferred.resolveWith( elem, [ animation ] );
+				return false;
+			}
+		},
+		animation = deferred.promise({
+			elem: elem,
+			props: jQuery.extend( {}, properties ),
+			opts: jQuery.extend( true, { specialEasing: {} }, options ),
+			originalProperties: properties,
+			originalOptions: options,
+			startTime: fxNow || createFxNow(),
+			duration: options.duration,
+			tweens: [],
+			createTween: function( prop, end ) {
+				var tween = jQuery.Tween( elem, animation.opts, prop, end,
+						animation.opts.specialEasing[ prop ] || animation.opts.easing );
+				animation.tweens.push( tween );
+				return tween;
+			},
+			stop: function( gotoEnd ) {
+				var index = 0,
+					// if we are going to the end, we want to run all the tweens
+					// otherwise we skip this part
+					length = gotoEnd ? animation.tweens.length : 0;
+				if ( stopped ) {
+					return this;
+				}
+				stopped = true;
+				for ( ; index < length ; index++ ) {
+					animation.tweens[ index ].run( 1 );
+				}
+
+				// resolve when we played the last frame
+				// otherwise, reject
+				if ( gotoEnd ) {
+					deferred.resolveWith( elem, [ animation, gotoEnd ] );
+				} else {
+					deferred.rejectWith( elem, [ animation, gotoEnd ] );
+				}
+				return this;
+			}
+		}),
+		props = animation.props;
+
+	propFilter( props, animation.opts.specialEasing );
+
+	for ( ; index < length ; index++ ) {
+		result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
+		if ( result ) {
+			return result;
+		}
+	}
+
+	createTweens( animation, props );
+
+	if ( jQuery.isFunction( animation.opts.start ) ) {
+		animation.opts.start.call( elem, animation );
+	}
+
+	jQuery.fx.timer(
+		jQuery.extend( tick, {
+			elem: elem,
+			anim: animation,
+			queue: animation.opts.queue
+		})
+	);
+
+	// attach callbacks from options
+	return animation.progress( animation.opts.progress )
+		.done( animation.opts.done, animation.opts.complete )
+		.fail( animation.opts.fail )
+		.always( animation.opts.always );
+}
+
+function propFilter( props, specialEasing ) {
+	var index, name, easing, value, hooks;
+
+	// camelCase, specialEasing and expand cssHook pass
+	for ( index in props ) {
+		name = jQuery.camelCase( index );
+		easing = specialEasing[ name ];
+		value = props[ index ];
+		if ( jQuery.isArray( value ) ) {
+			easing = value[ 1 ];
+			value = props[ index ] = value[ 0 ];
+		}
+
+		if ( index !== name ) {
+			props[ name ] = value;
+			delete props[ index ];
+		}
+
+		hooks = jQuery.cssHooks[ name ];
+		if ( hooks && "expand" in hooks ) {
+			value = hooks.expand( value );
+			delete props[ name ];
+
+			// not quite $.extend, this wont overwrite keys already present.
+			// also - reusing 'index' from above because we have the correct "name"
+			for ( index in value ) {
+				if ( !( index in props ) ) {
+					props[ index ] = value[ index ];
+					specialEasing[ index ] = easing;
+				}
+			}
+		} else {
+			specialEasing[ name ] = easing;
+		}
+	}
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+
+	tweener: function( props, callback ) {
+		if ( jQuery.isFunction( props ) ) {
+			callback = props;
+			props = [ "*" ];
+		} else {
+			props = props.split(" ");
+		}
+
+		var prop,
+			index = 0,
+			length = props.length;
+
+		for ( ; index < length ; index++ ) {
+			prop = props[ index ];
+			tweeners[ prop ] = tweeners[ prop ] || [];
+			tweeners[ prop ].unshift( callback );
+		}
+	},
+
+	prefilter: function( callback, prepend ) {
+		if ( prepend ) {
+			animationPrefilters.unshift( callback );
+		} else {
+			animationPrefilters.push( callback );
+		}
+	}
+});
+
+function defaultPrefilter( elem, props, opts ) {
+	/*jshint validthis:true */
+	var index, prop, value, length, dataShow, toggle, tween, hooks, oldfire,
+		anim = this,
+		style = elem.style,
+		orig = {},
+		handled = [],
+		hidden = elem.nodeType && isHidden( elem );
+
+	// handle queue: false promises
+	if ( !opts.queue ) {
+		hooks = jQuery._queueHooks( elem, "fx" );
+		if ( hooks.unqueued == null ) {
+			hooks.unqueued = 0;
+			oldfire = hooks.empty.fire;
+			hooks.empty.fire = function() {
+				if ( !hooks.unqueued ) {
+					oldfire();
+				}
+			};
+		}
+		hooks.unqueued++;
+
+		anim.always(function() {
+			// doing this makes sure that the complete handler will be called
+			// before this completes
+			anim.always(function() {
+				hooks.unqueued--;
+				if ( !jQuery.queue( elem, "fx" ).length ) {
+					hooks.empty.fire();
+				}
+			});
+		});
+	}
+
+	// height/width overflow pass
+	if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
+		// Make sure that nothing sneaks out
+		// Record all 3 overflow attributes because IE does not
+		// change the overflow attribute when overflowX and
+		// overflowY are set to the same value
+		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+		// Set display property to inline-block for height/width
+		// animations on inline elements that are having width/height animated
+		if ( jQuery.css( elem, "display" ) === "inline" &&
+				jQuery.css( elem, "float" ) === "none" ) {
+
+			// inline-level elements accept inline-block;
+			// block-level elements need to be inline with layout
+			if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) {
+				style.display = "inline-block";
+
+			} else {
+				style.zoom = 1;
+			}
+		}
+	}
+
+	if ( opts.overflow ) {
+		style.overflow = "hidden";
+		if ( !jQuery.support.shrinkWrapBlocks ) {
+			anim.done(function() {
+				style.overflow = opts.overflow[ 0 ];
+				style.overflowX = opts.overflow[ 1 ];
+				style.overflowY = opts.overflow[ 2 ];
+			});
+		}
+	}
+
+
+	// show/hide pass
+	for ( index in props ) {
+		value = props[ index ];
+		if ( rfxtypes.exec( value ) ) {
+			delete props[ index ];
+			toggle = toggle || value === "toggle";
+			if ( value === ( hidden ? "hide" : "show" ) ) {
+				continue;
+			}
+			handled.push( index );
+		}
+	}
+
+	length = handled.length;
+	if ( length ) {
+		dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} );
+		if ( "hidden" in dataShow ) {
+			hidden = dataShow.hidden;
+		}
+
+		// store state if its toggle - enables .stop().toggle() to "reverse"
+		if ( toggle ) {
+			dataShow.hidden = !hidden;
+		}
+		if ( hidden ) {
+			jQuery( elem ).show();
+		} else {
+			anim.done(function() {
+				jQuery( elem ).hide();
+			});
+		}
+		anim.done(function() {
+			var prop;
+			jQuery._removeData( elem, "fxshow" );
+			for ( prop in orig ) {
+				jQuery.style( elem, prop, orig[ prop ] );
+			}
+		});
+		for ( index = 0 ; index < length ; index++ ) {
+			prop = handled[ index ];
+			tween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 );
+			orig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop );
+
+			if ( !( prop in dataShow ) ) {
+				dataShow[ prop ] = tween.start;
+				if ( hidden ) {
+					tween.end = tween.start;
+					tween.start = prop === "width" || prop === "height" ? 1 : 0;
+				}
+			}
+		}
+	}
+}
+
+function Tween( elem, options, prop, end, easing ) {
+	return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+	constructor: Tween,
+	init: function( elem, options, prop, end, easing, unit ) {
+		this.elem = elem;
+		this.prop = prop;
+		this.easing = easing || "swing";
+		this.options = options;
+		this.start = this.now = this.cur();
+		this.end = end;
+		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+	},
+	cur: function() {
+		var hooks = Tween.propHooks[ this.prop ];
+
+		return hooks && hooks.get ?
+			hooks.get( this ) :
+			Tween.propHooks._default.get( this );
+	},
+	run: function( percent ) {
+		var eased,
+			hooks = Tween.propHooks[ this.prop ];
+
+		if ( this.options.duration ) {
+			this.pos = eased = jQuery.easing[ this.easing ](
+				percent, this.options.duration * percent, 0, 1, this.options.duration
+			);
+		} else {
+			this.pos = eased = percent;
+		}
+		this.now = ( this.end - this.start ) * eased + this.start;
+
+		if ( this.options.step ) {
+			this.options.step.call( this.elem, this.now, this );
+		}
+
+		if ( hooks && hooks.set ) {
+			hooks.set( this );
+		} else {
+			Tween.propHooks._default.set( this );
+		}
+		return this;
+	}
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+	_default: {
+		get: function( tween ) {
+			var result;
+
+			if ( tween.elem[ tween.prop ] != null &&
+				(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
+				return tween.elem[ tween.prop ];
+			}
+
+			// passing a non empty string as a 3rd parameter to .css will automatically
+			// attempt a parseFloat and fallback to a string if the parse fails
+			// so, simple values such as "10px" are parsed to Float.
+			// complex values such as "rotate(1rad)" are returned as is.
+			result = jQuery.css( tween.elem, tween.prop, "auto" );
+			// Empty strings, null, undefined and "auto" are converted to 0.
+			return !result || result === "auto" ? 0 : result;
+		},
+		set: function( tween ) {
+			// use step hook for back compat - use cssHook if its there - use .style if its
+			// available and use plain properties where available
+			if ( jQuery.fx.step[ tween.prop ] ) {
+				jQuery.fx.step[ tween.prop ]( tween );
+			} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
+				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+			} else {
+				tween.elem[ tween.prop ] = tween.now;
+			}
+		}
+	}
+};
+
+// Remove in 2.0 - this supports IE8's panic based approach
+// to setting things on disconnected nodes
+
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+	set: function( tween ) {
+		if ( tween.elem.nodeType && tween.elem.parentNode ) {
+			tween.elem[ tween.prop ] = tween.now;
+		}
+	}
+};
+
+jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
+	var cssFn = jQuery.fn[ name ];
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return speed == null || typeof speed === "boolean" ?
+			cssFn.apply( this, arguments ) :
+			this.animate( genFx( name, true ), speed, easing, callback );
+	};
+});
+
+jQuery.fn.extend({
+	fadeTo: function( speed, to, easing, callback ) {
+
+		// show any hidden elements after setting opacity to 0
+		return this.filter( isHidden ).css( "opacity", 0 ).show()
+
+			// animate to the value specified
+			.end().animate({ opacity: to }, speed, easing, callback );
+	},
+	animate: function( prop, speed, easing, callback ) {
+		var empty = jQuery.isEmptyObject( prop ),
+			optall = jQuery.speed( speed, easing, callback ),
+			doAnimation = function() {
+				// Operate on a copy of prop so per-property easing won't be lost
+				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+				doAnimation.finish = function() {
+					anim.stop( true );
+				};
+				// Empty animations, or finishing resolves immediately
+				if ( empty || jQuery._data( this, "finish" ) ) {
+					anim.stop( true );
+				}
+			};
+			doAnimation.finish = doAnimation;
+
+		return empty || optall.queue === false ?
+			this.each( doAnimation ) :
+			this.queue( optall.queue, doAnimation );
+	},
+	stop: function( type, clearQueue, gotoEnd ) {
+		var stopQueue = function( hooks ) {
+			var stop = hooks.stop;
+			delete hooks.stop;
+			stop( gotoEnd );
+		};
+
+		if ( typeof type !== "string" ) {
+			gotoEnd = clearQueue;
+			clearQueue = type;
+			type = undefined;
+		}
+		if ( clearQueue && type !== false ) {
+			this.queue( type || "fx", [] );
+		}
+
+		return this.each(function() {
+			var dequeue = true,
+				index = type != null && type + "queueHooks",
+				timers = jQuery.timers,
+				data = jQuery._data( this );
+
+			if ( index ) {
+				if ( data[ index ] && data[ index ].stop ) {
+					stopQueue( data[ index ] );
+				}
+			} else {
+				for ( index in data ) {
+					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+						stopQueue( data[ index ] );
+					}
+				}
+			}
+
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
+					timers[ index ].anim.stop( gotoEnd );
+					dequeue = false;
+					timers.splice( index, 1 );
+				}
+			}
+
+			// start the next in the queue if the last step wasn't forced
+			// timers currently will call their complete callbacks, which will dequeue
+			// but only if they were gotoEnd
+			if ( dequeue || !gotoEnd ) {
+				jQuery.dequeue( this, type );
+			}
+		});
+	},
+	finish: function( type ) {
+		if ( type !== false ) {
+			type = type || "fx";
+		}
+		return this.each(function() {
+			var index,
+				data = jQuery._data( this ),
+				queue = data[ type + "queue" ],
+				hooks = data[ type + "queueHooks" ],
+				timers = jQuery.timers,
+				length = queue ? queue.length : 0;
+
+			// enable finishing flag on private data
+			data.finish = true;
+
+			// empty the queue first
+			jQuery.queue( this, type, [] );
+
+			if ( hooks && hooks.cur && hooks.cur.finish ) {
+				hooks.cur.finish.call( this );
+			}
+
+			// look for any active animations, and finish them
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+					timers[ index ].anim.stop( true );
+					timers.splice( index, 1 );
+				}
+			}
+
+			// look for any animations in the old queue and finish them
+			for ( index = 0; index < length; index++ ) {
+				if ( queue[ index ] && queue[ index ].finish ) {
+					queue[ index ].finish.call( this );
+				}
+			}
+
+			// turn off finishing flag
+			delete data.finish;
+		});
+	}
+});
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+	var which,
+		attrs = { height: type },
+		i = 0;
+
+	// if we include width, step value is 1 to do all cssExpand values,
+	// if we don't include width, step value is 2 to skip over Left and Right
+	includeWidth = includeWidth? 1 : 0;
+	for( ; i < 4 ; i += 2 - includeWidth ) {
+		which = cssExpand[ i ];
+		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+	}
+
+	if ( includeWidth ) {
+		attrs.opacity = attrs.width = type;
+	}
+
+	return attrs;
+}
+
+// Generate shortcuts for custom animations
+jQuery.each({
+	slideDown: genFx("show"),
+	slideUp: genFx("hide"),
+	slideToggle: genFx("toggle"),
+	fadeIn: { opacity: "show" },
+	fadeOut: { opacity: "hide" },
+	fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return this.animate( props, speed, easing, callback );
+	};
+});
+
+jQuery.speed = function( speed, easing, fn ) {
+	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+		complete: fn || !fn && easing ||
+			jQuery.isFunction( speed ) && speed,
+		duration: speed,
+		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+	};
+
+	opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+		opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+
+	// normalize opt.queue - true/undefined/null -> "fx"
+	if ( opt.queue == null || opt.queue === true ) {
+		opt.queue = "fx";
+	}
+
+	// Queueing
+	opt.old = opt.complete;
+
+	opt.complete = function() {
+		if ( jQuery.isFunction( opt.old ) ) {
+			opt.old.call( this );
+		}
+
+		if ( opt.queue ) {
+			jQuery.dequeue( this, opt.queue );
+		}
+	};
+
+	return opt;
+};
+
+jQuery.easing = {
+	linear: function( p ) {
+		return p;
+	},
+	swing: function( p ) {
+		return 0.5 - Math.cos( p*Math.PI ) / 2;
+	}
+};
+
+jQuery.timers = [];
+jQuery.fx = Tween.prototype.init;
+jQuery.fx.tick = function() {
+	var timer,
+		timers = jQuery.timers,
+		i = 0;
+
+	fxNow = jQuery.now();
+
+	for ( ; i < timers.length; i++ ) {
+		timer = timers[ i ];
+		// Checks the timer has not already been removed
+		if ( !timer() && timers[ i ] === timer ) {
+			timers.splice( i--, 1 );
+		}
+	}
+
+	if ( !timers.length ) {
+		jQuery.fx.stop();
+	}
+	fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+	if ( timer() && jQuery.timers.push( timer ) ) {
+		jQuery.fx.start();
+	}
+};
+
+jQuery.fx.interval = 13;
+
+jQuery.fx.start = function() {
+	if ( !timerId ) {
+		timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
+	}
+};
+
+jQuery.fx.stop = function() {
+	clearInterval( timerId );
+	timerId = null;
+};
+
+jQuery.fx.speeds = {
+	slow: 600,
+	fast: 200,
+	// Default speed
+	_default: 400
+};
+
+// Back Compat <1.8 extension point
+jQuery.fx.step = {};
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+	jQuery.expr.filters.animated = function( elem ) {
+		return jQuery.grep(jQuery.timers, function( fn ) {
+			return elem === fn.elem;
+		}).length;
+	};
+}
+jQuery.fn.offset = function( options ) {
+	if ( arguments.length ) {
+		return options === undefined ?
+			this :
+			this.each(function( i ) {
+				jQuery.offset.setOffset( this, options, i );
+			});
+	}
+
+	var docElem, win,
+		box = { top: 0, left: 0 },
+		elem = this[ 0 ],
+		doc = elem && elem.ownerDocument;
+
+	if ( !doc ) {
+		return;
+	}
+
+	docElem = doc.documentElement;
+
+	// Make sure it's not a disconnected DOM node
+	if ( !jQuery.contains( docElem, elem ) ) {
+		return box;
+	}
+
+	// If we don't have gBCR, just use 0,0 rather than error
+	// BlackBerry 5, iOS 3 (original iPhone)
+	if ( typeof elem.getBoundingClientRect !== "undefined" ) {
+		box = elem.getBoundingClientRect();
+	}
+	win = getWindow( doc );
+	return {
+		top: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),
+		left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
+	};
+};
+
+jQuery.offset = {
+
+	setOffset: function( elem, options, i ) {
+		var position = jQuery.css( elem, "position" );
+
+		// set position first, in-case top/left are set even on static elem
+		if ( position === "static" ) {
+			elem.style.position = "relative";
+		}
+
+		var curElem = jQuery( elem ),
+			curOffset = curElem.offset(),
+			curCSSTop = jQuery.css( elem, "top" ),
+			curCSSLeft = jQuery.css( elem, "left" ),
+			calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
+			props = {}, curPosition = {}, curTop, curLeft;
+
+		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+		if ( calculatePosition ) {
+			curPosition = curElem.position();
+			curTop = curPosition.top;
+			curLeft = curPosition.left;
+		} else {
+			curTop = parseFloat( curCSSTop ) || 0;
+			curLeft = parseFloat( curCSSLeft ) || 0;
+		}
+
+		if ( jQuery.isFunction( options ) ) {
+			options = options.call( elem, i, curOffset );
+		}
+
+		if ( options.top != null ) {
+			props.top = ( options.top - curOffset.top ) + curTop;
+		}
+		if ( options.left != null ) {
+			props.left = ( options.left - curOffset.left ) + curLeft;
+		}
+
+		if ( "using" in options ) {
+			options.using.call( elem, props );
+		} else {
+			curElem.css( props );
+		}
+	}
+};
+
+
+jQuery.fn.extend({
+
+	position: function() {
+		if ( !this[ 0 ] ) {
+			return;
+		}
+
+		var offsetParent, offset,
+			parentOffset = { top: 0, left: 0 },
+			elem = this[ 0 ];
+
+		// fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent
+		if ( jQuery.css( elem, "position" ) === "fixed" ) {
+			// we assume that getBoundingClientRect is available when computed position is fixed
+			offset = elem.getBoundingClientRect();
+		} else {
+			// Get *real* offsetParent
+			offsetParent = this.offsetParent();
+
+			// Get correct offsets
+			offset = this.offset();
+			if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
+				parentOffset = offsetParent.offset();
+			}
+
+			// Add offsetParent borders
+			parentOffset.top  += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
+			parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
+		}
+
+		// Subtract parent offsets and element margins
+		// note: when an element has margin: auto the offsetLeft and marginLeft
+		// are the same in Safari causing offset.left to incorrectly be 0
+		return {
+			top:  offset.top  - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)
+		};
+	},
+
+	offsetParent: function() {
+		return this.map(function() {
+			var offsetParent = this.offsetParent || document.documentElement;
+			while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position") === "static" ) ) {
+				offsetParent = offsetParent.offsetParent;
+			}
+			return offsetParent || document.documentElement;
+		});
+	}
+});
+
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
+	var top = /Y/.test( prop );
+
+	jQuery.fn[ method ] = function( val ) {
+		return jQuery.access( this, function( elem, method, val ) {
+			var win = getWindow( elem );
+
+			if ( val === undefined ) {
+				return win ? (prop in win) ? win[ prop ] :
+					win.document.documentElement[ method ] :
+					elem[ method ];
+			}
+
+			if ( win ) {
+				win.scrollTo(
+					!top ? val : jQuery( win ).scrollLeft(),
+					top ? val : jQuery( win ).scrollTop()
+				);
+
+			} else {
+				elem[ method ] = val;
+			}
+		}, method, val, arguments.length, null );
+	};
+});
+
+function getWindow( elem ) {
+	return jQuery.isWindow( elem ) ?
+		elem :
+		elem.nodeType === 9 ?
+			elem.defaultView || elem.parentWindow :
+			false;
+}
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
+		// margin is only for outerHeight, outerWidth
+		jQuery.fn[ funcName ] = function( margin, value ) {
+			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+			return jQuery.access( this, function( elem, type, value ) {
+				var doc;
+
+				if ( jQuery.isWindow( elem ) ) {
+					// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
+					// isn't a whole lot we can do. See pull request at this URL for discussion:
+					// https://github.com/jquery/jquery/pull/764
+					return elem.document.documentElement[ "client" + name ];
+				}
+
+				// Get document width or height
+				if ( elem.nodeType === 9 ) {
+					doc = elem.documentElement;
+
+					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
+					// unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
+					return Math.max(
+						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+						elem.body[ "offset" + name ], doc[ "offset" + name ],
+						doc[ "client" + name ]
+					);
+				}
+
+				return value === undefined ?
+					// Get width or height on the element, requesting but not forcing parseFloat
+					jQuery.css( elem, type, extra ) :
+
+					// Set width or height on the element
+					jQuery.style( elem, type, value, extra );
+			}, type, chainable ? margin : undefined, chainable, null );
+		};
+	});
+});
+// Limit scope pollution from any deprecated API
+// (function() {
+
+// })();
+// Expose jQuery to the global object
+window.jQuery = window.$ = jQuery;
+
+// Expose jQuery as an AMD module, but only for AMD loaders that
+// understand the issues with loading multiple versions of jQuery
+// in a page that all might call define(). The loader will indicate
+// they have special allowances for multiple jQuery versions by
+// specifying define.amd.jQuery = true. Register as a named module,
+// since jQuery can be concatenated with other files that may use define,
+// but not use a proper concatenation script that understands anonymous
+// AMD modules. A named AMD is safest and most robust way to register.
+// Lowercase jquery is used because AMD module names are derived from
+// file names, and jQuery is normally delivered in a lowercase file name.
+// Do this after creating the global so that if an AMD module wants to call
+// noConflict to hide this version of jQuery, it will work.
+if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
+	define( "jquery", [], function () { return jQuery; } );
+}
+
+})( window );
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/libs/qunit/qunit.css b/vendor/dimsemenov/magnific-popup/libs/qunit/qunit.css
new file mode 100644
index 0000000000..d7fc0c8ecc
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/libs/qunit/qunit.css
@@ -0,0 +1,244 @@
+/**
+ * QUnit v1.11.0 - A JavaScript Unit Testing Framework
+ *
+ * http://qunitjs.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+/** Font Family and Sizes */
+
+#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
+	font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
+}
+
+#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
+#qunit-tests { font-size: smaller; }
+
+
+/** Resets */
+
+#qunit-tests, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
+	margin: 0;
+	padding: 0;
+}
+
+
+/** Header */
+
+#qunit-header {
+	padding: 0.5em 0 0.5em 1em;
+
+	color: #8699a4;
+	background-color: #0d3349;
+
+	font-size: 1.5em;
+	line-height: 1em;
+	font-weight: normal;
+
+	border-radius: 5px 5px 0 0;
+	-moz-border-radius: 5px 5px 0 0;
+	-webkit-border-top-right-radius: 5px;
+	-webkit-border-top-left-radius: 5px;
+}
+
+#qunit-header a {
+	text-decoration: none;
+	color: #c2ccd1;
+}
+
+#qunit-header a:hover,
+#qunit-header a:focus {
+	color: #fff;
+}
+
+#qunit-testrunner-toolbar label {
+	display: inline-block;
+	padding: 0 .5em 0 .1em;
+}
+
+#qunit-banner {
+	height: 5px;
+}
+
+#qunit-testrunner-toolbar {
+	padding: 0.5em 0 0.5em 2em;
+	color: #5E740B;
+	background-color: #eee;
+	overflow: hidden;
+}
+
+#qunit-userAgent {
+	padding: 0.5em 0 0.5em 2.5em;
+	background-color: #2b81af;
+	color: #fff;
+	text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
+}
+
+#qunit-modulefilter-container {
+	float: right;
+}
+
+/** Tests: Pass/Fail */
+
+#qunit-tests {
+	list-style-position: inside;
+}
+
+#qunit-tests li {
+	padding: 0.4em 0.5em 0.4em 2.5em;
+	border-bottom: 1px solid #fff;
+	list-style-position: inside;
+}
+
+#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running  {
+	display: none;
+}
+
+#qunit-tests li strong {
+	cursor: pointer;
+}
+
+#qunit-tests li a {
+	padding: 0.5em;
+	color: #c2ccd1;
+	text-decoration: none;
+}
+#qunit-tests li a:hover,
+#qunit-tests li a:focus {
+	color: #000;
+}
+
+#qunit-tests li .runtime {
+	float: right;
+	font-size: smaller;
+}
+
+.qunit-assert-list {
+	margin-top: 0.5em;
+	padding: 0.5em;
+
+	background-color: #fff;
+
+	border-radius: 5px;
+	-moz-border-radius: 5px;
+	-webkit-border-radius: 5px;
+}
+
+.qunit-collapsed {
+	display: none;
+}
+
+#qunit-tests table {
+	border-collapse: collapse;
+	margin-top: .2em;
+}
+
+#qunit-tests th {
+	text-align: right;
+	vertical-align: top;
+	padding: 0 .5em 0 0;
+}
+
+#qunit-tests td {
+	vertical-align: top;
+}
+
+#qunit-tests pre {
+	margin: 0;
+	white-space: pre-wrap;
+	word-wrap: break-word;
+}
+
+#qunit-tests del {
+	background-color: #e0f2be;
+	color: #374e0c;
+	text-decoration: none;
+}
+
+#qunit-tests ins {
+	background-color: #ffcaca;
+	color: #500;
+	text-decoration: none;
+}
+
+/*** Test Counts */
+
+#qunit-tests b.counts                       { color: black; }
+#qunit-tests b.passed                       { color: #5E740B; }
+#qunit-tests b.failed                       { color: #710909; }
+
+#qunit-tests li li {
+	padding: 5px;
+	background-color: #fff;
+	border-bottom: none;
+	list-style-position: inside;
+}
+
+/*** Passing Styles */
+
+#qunit-tests li li.pass {
+	color: #3c510c;
+	background-color: #fff;
+	border-left: 10px solid #C6E746;
+}
+
+#qunit-tests .pass                          { color: #528CE0; background-color: #D2E0E6; }
+#qunit-tests .pass .test-name               { color: #366097; }
+
+#qunit-tests .pass .test-actual,
+#qunit-tests .pass .test-expected           { color: #999999; }
+
+#qunit-banner.qunit-pass                    { background-color: #C6E746; }
+
+/*** Failing Styles */
+
+#qunit-tests li li.fail {
+	color: #710909;
+	background-color: #fff;
+	border-left: 10px solid #EE5757;
+	white-space: pre;
+}
+
+#qunit-tests > li:last-child {
+	border-radius: 0 0 5px 5px;
+	-moz-border-radius: 0 0 5px 5px;
+	-webkit-border-bottom-right-radius: 5px;
+	-webkit-border-bottom-left-radius: 5px;
+}
+
+#qunit-tests .fail                          { color: #000000; background-color: #EE5757; }
+#qunit-tests .fail .test-name,
+#qunit-tests .fail .module-name             { color: #000000; }
+
+#qunit-tests .fail .test-actual             { color: #EE5757; }
+#qunit-tests .fail .test-expected           { color: green;   }
+
+#qunit-banner.qunit-fail                    { background-color: #EE5757; }
+
+
+/** Result */
+
+#qunit-testresult {
+	padding: 0.5em 0.5em 0.5em 2.5em;
+
+	color: #2b81af;
+	background-color: #D2E0E6;
+
+	border-bottom: 1px solid white;
+}
+#qunit-testresult .module-name {
+	font-weight: bold;
+}
+
+/** Fixture */
+
+#qunit-fixture {
+	position: absolute;
+	top: -10000px;
+	left: -10000px;
+	width: 1000px;
+	height: 1000px;
+}
diff --git a/vendor/dimsemenov/magnific-popup/libs/qunit/qunit.js b/vendor/dimsemenov/magnific-popup/libs/qunit/qunit.js
new file mode 100644
index 0000000000..302545f403
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/libs/qunit/qunit.js
@@ -0,0 +1,2152 @@
+/**
+ * QUnit v1.11.0 - A JavaScript Unit Testing Framework
+ *
+ * http://qunitjs.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+(function( window ) {
+
+var QUnit,
+	assert,
+	config,
+	onErrorFnPrev,
+	testId = 0,
+	fileName = (sourceFromStacktrace( 0 ) || "" ).replace(/(:\d+)+\)?/, "").replace(/.+\//, ""),
+	toString = Object.prototype.toString,
+	hasOwn = Object.prototype.hasOwnProperty,
+	// Keep a local reference to Date (GH-283)
+	Date = window.Date,
+	defined = {
+		setTimeout: typeof window.setTimeout !== "undefined",
+		sessionStorage: (function() {
+			var x = "qunit-test-string";
+			try {
+				sessionStorage.setItem( x, x );
+				sessionStorage.removeItem( x );
+				return true;
+			} catch( e ) {
+				return false;
+			}
+		}())
+	},
+	/**
+	 * Provides a normalized error string, correcting an issue
+	 * with IE 7 (and prior) where Error.prototype.toString is
+	 * not properly implemented
+	 *
+	 * Based on http://es5.github.com/#x15.11.4.4
+	 *
+	 * @param {String|Error} error
+	 * @return {String} error message
+	 */
+	errorString = function( error ) {
+		var name, message,
+			errorString = error.toString();
+		if ( errorString.substring( 0, 7 ) === "[object" ) {
+			name = error.name ? error.name.toString() : "Error";
+			message = error.message ? error.message.toString() : "";
+			if ( name && message ) {
+				return name + ": " + message;
+			} else if ( name ) {
+				return name;
+			} else if ( message ) {
+				return message;
+			} else {
+				return "Error";
+			}
+		} else {
+			return errorString;
+		}
+	},
+	/**
+	 * Makes a clone of an object using only Array or Object as base,
+	 * and copies over the own enumerable properties.
+	 *
+	 * @param {Object} obj
+	 * @return {Object} New object with only the own properties (recursively).
+	 */
+	objectValues = function( obj ) {
+		// Grunt 0.3.x uses an older version of jshint that still has jshint/jshint#392.
+		/*jshint newcap: false */
+		var key, val,
+			vals = QUnit.is( "array", obj ) ? [] : {};
+		for ( key in obj ) {
+			if ( hasOwn.call( obj, key ) ) {
+				val = obj[key];
+				vals[key] = val === Object(val) ? objectValues(val) : val;
+			}
+		}
+		return vals;
+	};
+
+function Test( settings ) {
+	extend( this, settings );
+	this.assertions = [];
+	this.testNumber = ++Test.count;
+}
+
+Test.count = 0;
+
+Test.prototype = {
+	init: function() {
+		var a, b, li,
+			tests = id( "qunit-tests" );
+
+		if ( tests ) {
+			b = document.createElement( "strong" );
+			b.innerHTML = this.nameHtml;
+
+			// `a` initialized at top of scope
+			a = document.createElement( "a" );
+			a.innerHTML = "Rerun";
+			a.href = QUnit.url({ testNumber: this.testNumber });
+
+			li = document.createElement( "li" );
+			li.appendChild( b );
+			li.appendChild( a );
+			li.className = "running";
+			li.id = this.id = "qunit-test-output" + testId++;
+
+			tests.appendChild( li );
+		}
+	},
+	setup: function() {
+		if ( this.module !== config.previousModule ) {
+			if ( config.previousModule ) {
+				runLoggingCallbacks( "moduleDone", QUnit, {
+					name: config.previousModule,
+					failed: config.moduleStats.bad,
+					passed: config.moduleStats.all - config.moduleStats.bad,
+					total: config.moduleStats.all
+				});
+			}
+			config.previousModule = this.module;
+			config.moduleStats = { all: 0, bad: 0 };
+			runLoggingCallbacks( "moduleStart", QUnit, {
+				name: this.module
+			});
+		} else if ( config.autorun ) {
+			runLoggingCallbacks( "moduleStart", QUnit, {
+				name: this.module
+			});
+		}
+
+		config.current = this;
+
+		this.testEnvironment = extend({
+			setup: function() {},
+			teardown: function() {}
+		}, this.moduleTestEnvironment );
+
+		this.started = +new Date();
+		runLoggingCallbacks( "testStart", QUnit, {
+			name: this.testName,
+			module: this.module
+		});
+
+		// allow utility functions to access the current test environment
+		// TODO why??
+		QUnit.current_testEnvironment = this.testEnvironment;
+
+		if ( !config.pollution ) {
+			saveGlobal();
+		}
+		if ( config.notrycatch ) {
+			this.testEnvironment.setup.call( this.testEnvironment );
+			return;
+		}
+		try {
+			this.testEnvironment.setup.call( this.testEnvironment );
+		} catch( e ) {
+			QUnit.pushFailure( "Setup failed on " + this.testName + ": " + ( e.message || e ), extractStacktrace( e, 1 ) );
+		}
+	},
+	run: function() {
+		config.current = this;
+
+		var running = id( "qunit-testresult" );
+
+		if ( running ) {
+			running.innerHTML = "Running: <br/>" + this.nameHtml;
+		}
+
+		if ( this.async ) {
+			QUnit.stop();
+		}
+
+		this.callbackStarted = +new Date();
+
+		if ( config.notrycatch ) {
+			this.callback.call( this.testEnvironment, QUnit.assert );
+			this.callbackRuntime = +new Date() - this.callbackStarted;
+			return;
+		}
+
+		try {
+			this.callback.call( this.testEnvironment, QUnit.assert );
+			this.callbackRuntime = +new Date() - this.callbackStarted;
+		} catch( e ) {
+			this.callbackRuntime = +new Date() - this.callbackStarted;
+
+			QUnit.pushFailure( "Died on test #" + (this.assertions.length + 1) + " " + this.stack + ": " + ( e.message || e ), extractStacktrace( e, 0 ) );
+			// else next test will carry the responsibility
+			saveGlobal();
+
+			// Restart the tests if they're blocking
+			if ( config.blocking ) {
+				QUnit.start();
+			}
+		}
+	},
+	teardown: function() {
+		config.current = this;
+		if ( config.notrycatch ) {
+			if ( typeof this.callbackRuntime === "undefined" ) {
+				this.callbackRuntime = +new Date() - this.callbackStarted;
+			}
+			this.testEnvironment.teardown.call( this.testEnvironment );
+			return;
+		} else {
+			try {
+				this.testEnvironment.teardown.call( this.testEnvironment );
+			} catch( e ) {
+				QUnit.pushFailure( "Teardown failed on " + this.testName + ": " + ( e.message || e ), extractStacktrace( e, 1 ) );
+			}
+		}
+		checkPollution();
+	},
+	finish: function() {
+		config.current = this;
+		if ( config.requireExpects && this.expected === null ) {
+			QUnit.pushFailure( "Expected number of assertions to be defined, but expect() was not called.", this.stack );
+		} else if ( this.expected !== null && this.expected !== this.assertions.length ) {
+			QUnit.pushFailure( "Expected " + this.expected + " assertions, but " + this.assertions.length + " were run", this.stack );
+		} else if ( this.expected === null && !this.assertions.length ) {
+			QUnit.pushFailure( "Expected at least one assertion, but none were run - call expect(0) to accept zero assertions.", this.stack );
+		}
+
+		var i, assertion, a, b, time, li, ol,
+			test = this,
+			good = 0,
+			bad = 0,
+			tests = id( "qunit-tests" );
+
+		this.runtime = +new Date() - this.started;
+		config.stats.all += this.assertions.length;
+		config.moduleStats.all += this.assertions.length;
+
+		if ( tests ) {
+			ol = document.createElement( "ol" );
+			ol.className = "qunit-assert-list";
+
+			for ( i = 0; i < this.assertions.length; i++ ) {
+				assertion = this.assertions[i];
+
+				li = document.createElement( "li" );
+				li.className = assertion.result ? "pass" : "fail";
+				li.innerHTML = assertion.message || ( assertion.result ? "okay" : "failed" );
+				ol.appendChild( li );
+
+				if ( assertion.result ) {
+					good++;
+				} else {
+					bad++;
+					config.stats.bad++;
+					config.moduleStats.bad++;
+				}
+			}
+
+			// store result when possible
+			if ( QUnit.config.reorder && defined.sessionStorage ) {
+				if ( bad ) {
+					sessionStorage.setItem( "qunit-test-" + this.module + "-" + this.testName, bad );
+				} else {
+					sessionStorage.removeItem( "qunit-test-" + this.module + "-" + this.testName );
+				}
+			}
+
+			if ( bad === 0 ) {
+				addClass( ol, "qunit-collapsed" );
+			}
+
+			// `b` initialized at top of scope
+			b = document.createElement( "strong" );
+			b.innerHTML = this.nameHtml + " <b class='counts'>(<b class='failed'>" + bad + "</b>, <b class='passed'>" + good + "</b>, " + this.assertions.length + ")</b>";
+
+			addEvent(b, "click", function() {
+				var next = b.parentNode.lastChild,
+					collapsed = hasClass( next, "qunit-collapsed" );
+				( collapsed ? removeClass : addClass )( next, "qunit-collapsed" );
+			});
+
+			addEvent(b, "dblclick", function( e ) {
+				var target = e && e.target ? e.target : window.event.srcElement;
+				if ( target.nodeName.toLowerCase() === "span" || target.nodeName.toLowerCase() === "b" ) {
+					target = target.parentNode;
+				}
+				if ( window.location && target.nodeName.toLowerCase() === "strong" ) {
+					window.location = QUnit.url({ testNumber: test.testNumber });
+				}
+			});
+
+			// `time` initialized at top of scope
+			time = document.createElement( "span" );
+			time.className = "runtime";
+			time.innerHTML = this.runtime + " ms";
+
+			// `li` initialized at top of scope
+			li = id( this.id );
+			li.className = bad ? "fail" : "pass";
+			li.removeChild( li.firstChild );
+			a = li.firstChild;
+			li.appendChild( b );
+			li.appendChild( a );
+			li.appendChild( time );
+			li.appendChild( ol );
+
+		} else {
+			for ( i = 0; i < this.assertions.length; i++ ) {
+				if ( !this.assertions[i].result ) {
+					bad++;
+					config.stats.bad++;
+					config.moduleStats.bad++;
+				}
+			}
+		}
+
+		runLoggingCallbacks( "testDone", QUnit, {
+			name: this.testName,
+			module: this.module,
+			failed: bad,
+			passed: this.assertions.length - bad,
+			total: this.assertions.length,
+			duration: this.runtime
+		});
+
+		QUnit.reset();
+
+		config.current = undefined;
+	},
+
+	queue: function() {
+		var bad,
+			test = this;
+
+		synchronize(function() {
+			test.init();
+		});
+		function run() {
+			// each of these can by async
+			synchronize(function() {
+				test.setup();
+			});
+			synchronize(function() {
+				test.run();
+			});
+			synchronize(function() {
+				test.teardown();
+			});
+			synchronize(function() {
+				test.finish();
+			});
+		}
+
+		// `bad` initialized at top of scope
+		// defer when previous test run passed, if storage is available
+		bad = QUnit.config.reorder && defined.sessionStorage &&
+						+sessionStorage.getItem( "qunit-test-" + this.module + "-" + this.testName );
+
+		if ( bad ) {
+			run();
+		} else {
+			synchronize( run, true );
+		}
+	}
+};
+
+// Root QUnit object.
+// `QUnit` initialized at top of scope
+QUnit = {
+
+	// call on start of module test to prepend name to all tests
+	module: function( name, testEnvironment ) {
+		config.currentModule = name;
+		config.currentModuleTestEnvironment = testEnvironment;
+		config.modules[name] = true;
+	},
+
+	asyncTest: function( testName, expected, callback ) {
+		if ( arguments.length === 2 ) {
+			callback = expected;
+			expected = null;
+		}
+
+		QUnit.test( testName, expected, callback, true );
+	},
+
+	test: function( testName, expected, callback, async ) {
+		var test,
+			nameHtml = "<span class='test-name'>" + escapeText( testName ) + "</span>";
+
+		if ( arguments.length === 2 ) {
+			callback = expected;
+			expected = null;
+		}
+
+		if ( config.currentModule ) {
+			nameHtml = "<span class='module-name'>" + escapeText( config.currentModule ) + "</span>: " + nameHtml;
+		}
+
+		test = new Test({
+			nameHtml: nameHtml,
+			testName: testName,
+			expected: expected,
+			async: async,
+			callback: callback,
+			module: config.currentModule,
+			moduleTestEnvironment: config.currentModuleTestEnvironment,
+			stack: sourceFromStacktrace( 2 )
+		});
+
+		if ( !validTest( test ) ) {
+			return;
+		}
+
+		test.queue();
+	},
+
+	// Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through.
+	expect: function( asserts ) {
+		if (arguments.length === 1) {
+			config.current.expected = asserts;
+		} else {
+			return config.current.expected;
+		}
+	},
+
+	start: function( count ) {
+		// QUnit hasn't been initialized yet.
+		// Note: RequireJS (et al) may delay onLoad
+		if ( config.semaphore === undefined ) {
+			QUnit.begin(function() {
+				// This is triggered at the top of QUnit.load, push start() to the event loop, to allow QUnit.load to finish first
+				setTimeout(function() {
+					QUnit.start( count );
+				});
+			});
+			return;
+		}
+
+		config.semaphore -= count || 1;
+		// don't start until equal number of stop-calls
+		if ( config.semaphore > 0 ) {
+			return;
+		}
+		// ignore if start is called more often then stop
+		if ( config.semaphore < 0 ) {
+			config.semaphore = 0;
+			QUnit.pushFailure( "Called start() while already started (QUnit.config.semaphore was 0 already)", null, sourceFromStacktrace(2) );
+			return;
+		}
+		// A slight delay, to avoid any current callbacks
+		if ( defined.setTimeout ) {
+			window.setTimeout(function() {
+				if ( config.semaphore > 0 ) {
+					return;
+				}
+				if ( config.timeout ) {
+					clearTimeout( config.timeout );
+				}
+
+				config.blocking = false;
+				process( true );
+			}, 13);
+		} else {
+			config.blocking = false;
+			process( true );
+		}
+	},
+
+	stop: function( count ) {
+		config.semaphore += count || 1;
+		config.blocking = true;
+
+		if ( config.testTimeout && defined.setTimeout ) {
+			clearTimeout( config.timeout );
+			config.timeout = window.setTimeout(function() {
+				QUnit.ok( false, "Test timed out" );
+				config.semaphore = 1;
+				QUnit.start();
+			}, config.testTimeout );
+		}
+	}
+};
+
+// `assert` initialized at top of scope
+// Asssert helpers
+// All of these must either call QUnit.push() or manually do:
+// - runLoggingCallbacks( "log", .. );
+// - config.current.assertions.push({ .. });
+// We attach it to the QUnit object *after* we expose the public API,
+// otherwise `assert` will become a global variable in browsers (#341).
+assert = {
+	/**
+	 * Asserts rough true-ish result.
+	 * @name ok
+	 * @function
+	 * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" );
+	 */
+	ok: function( result, msg ) {
+		if ( !config.current ) {
+			throw new Error( "ok() assertion outside test context, was " + sourceFromStacktrace(2) );
+		}
+		result = !!result;
+
+		var source,
+			details = {
+				module: config.current.module,
+				name: config.current.testName,
+				result: result,
+				message: msg
+			};
+
+		msg = escapeText( msg || (result ? "okay" : "failed" ) );
+		msg = "<span class='test-message'>" + msg + "</span>";
+
+		if ( !result ) {
+			source = sourceFromStacktrace( 2 );
+			if ( source ) {
+				details.source = source;
+				msg += "<table><tr class='test-source'><th>Source: </th><td><pre>" + escapeText( source ) + "</pre></td></tr></table>";
+			}
+		}
+		runLoggingCallbacks( "log", QUnit, details );
+		config.current.assertions.push({
+			result: result,
+			message: msg
+		});
+	},
+
+	/**
+	 * Assert that the first two arguments are equal, with an optional message.
+	 * Prints out both actual and expected values.
+	 * @name equal
+	 * @function
+	 * @example equal( format( "Received {0} bytes.", 2), "Received 2 bytes.", "format() replaces {0} with next argument" );
+	 */
+	equal: function( actual, expected, message ) {
+		/*jshint eqeqeq:false */
+		QUnit.push( expected == actual, actual, expected, message );
+	},
+
+	/**
+	 * @name notEqual
+	 * @function
+	 */
+	notEqual: function( actual, expected, message ) {
+		/*jshint eqeqeq:false */
+		QUnit.push( expected != actual, actual, expected, message );
+	},
+
+	/**
+	 * @name propEqual
+	 * @function
+	 */
+	propEqual: function( actual, expected, message ) {
+		actual = objectValues(actual);
+		expected = objectValues(expected);
+		QUnit.push( QUnit.equiv(actual, expected), actual, expected, message );
+	},
+
+	/**
+	 * @name notPropEqual
+	 * @function
+	 */
+	notPropEqual: function( actual, expected, message ) {
+		actual = objectValues(actual);
+		expected = objectValues(expected);
+		QUnit.push( !QUnit.equiv(actual, expected), actual, expected, message );
+	},
+
+	/**
+	 * @name deepEqual
+	 * @function
+	 */
+	deepEqual: function( actual, expected, message ) {
+		QUnit.push( QUnit.equiv(actual, expected), actual, expected, message );
+	},
+
+	/**
+	 * @name notDeepEqual
+	 * @function
+	 */
+	notDeepEqual: function( actual, expected, message ) {
+		QUnit.push( !QUnit.equiv(actual, expected), actual, expected, message );
+	},
+
+	/**
+	 * @name strictEqual
+	 * @function
+	 */
+	strictEqual: function( actual, expected, message ) {
+		QUnit.push( expected === actual, actual, expected, message );
+	},
+
+	/**
+	 * @name notStrictEqual
+	 * @function
+	 */
+	notStrictEqual: function( actual, expected, message ) {
+		QUnit.push( expected !== actual, actual, expected, message );
+	},
+
+	"throws": function( block, expected, message ) {
+		var actual,
+			expectedOutput = expected,
+			ok = false;
+
+		// 'expected' is optional
+		if ( typeof expected === "string" ) {
+			message = expected;
+			expected = null;
+		}
+
+		config.current.ignoreGlobalErrors = true;
+		try {
+			block.call( config.current.testEnvironment );
+		} catch (e) {
+			actual = e;
+		}
+		config.current.ignoreGlobalErrors = false;
+
+		if ( actual ) {
+			// we don't want to validate thrown error
+			if ( !expected ) {
+				ok = true;
+				expectedOutput = null;
+			// expected is a regexp
+			} else if ( QUnit.objectType( expected ) === "regexp" ) {
+				ok = expected.test( errorString( actual ) );
+			// expected is a constructor
+			} else if ( actual instanceof expected ) {
+				ok = true;
+			// expected is a validation function which returns true is validation passed
+			} else if ( expected.call( {}, actual ) === true ) {
+				expectedOutput = null;
+				ok = true;
+			}
+
+			QUnit.push( ok, actual, expectedOutput, message );
+		} else {
+			QUnit.pushFailure( message, null, 'No exception was thrown.' );
+		}
+	}
+};
+
+/**
+ * @deprecate since 1.8.0
+ * Kept assertion helpers in root for backwards compatibility.
+ */
+extend( QUnit, assert );
+
+/**
+ * @deprecated since 1.9.0
+ * Kept root "raises()" for backwards compatibility.
+ * (Note that we don't introduce assert.raises).
+ */
+QUnit.raises = assert[ "throws" ];
+
+/**
+ * @deprecated since 1.0.0, replaced with error pushes since 1.3.0
+ * Kept to avoid TypeErrors for undefined methods.
+ */
+QUnit.equals = function() {
+	QUnit.push( false, false, false, "QUnit.equals has been deprecated since 2009 (e88049a0), use QUnit.equal instead" );
+};
+QUnit.same = function() {
+	QUnit.push( false, false, false, "QUnit.same has been deprecated since 2009 (e88049a0), use QUnit.deepEqual instead" );
+};
+
+// We want access to the constructor's prototype
+(function() {
+	function F() {}
+	F.prototype = QUnit;
+	QUnit = new F();
+	// Make F QUnit's constructor so that we can add to the prototype later
+	QUnit.constructor = F;
+}());
+
+/**
+ * Config object: Maintain internal state
+ * Later exposed as QUnit.config
+ * `config` initialized at top of scope
+ */
+config = {
+	// The queue of tests to run
+	queue: [],
+
+	// block until document ready
+	blocking: true,
+
+	// when enabled, show only failing tests
+	// gets persisted through sessionStorage and can be changed in UI via checkbox
+	hidepassed: false,
+
+	// by default, run previously failed tests first
+	// very useful in combination with "Hide passed tests" checked
+	reorder: true,
+
+	// by default, modify document.title when suite is done
+	altertitle: true,
+
+	// when enabled, all tests must call expect()
+	requireExpects: false,
+
+	// add checkboxes that are persisted in the query-string
+	// when enabled, the id is set to `true` as a `QUnit.config` property
+	urlConfig: [
+		{
+			id: "noglobals",
+			label: "Check for Globals",
+			tooltip: "Enabling this will test if any test introduces new properties on the `window` object. Stored as query-strings."
+		},
+		{
+			id: "notrycatch",
+			label: "No try-catch",
+			tooltip: "Enabling this will run tests outside of a try-catch block. Makes debugging exceptions in IE reasonable. Stored as query-strings."
+		}
+	],
+
+	// Set of all modules.
+	modules: {},
+
+	// logging callback queues
+	begin: [],
+	done: [],
+	log: [],
+	testStart: [],
+	testDone: [],
+	moduleStart: [],
+	moduleDone: []
+};
+
+// Export global variables, unless an 'exports' object exists,
+// in that case we assume we're in CommonJS (dealt with on the bottom of the script)
+if ( typeof exports === "undefined" ) {
+	extend( window, QUnit );
+
+	// Expose QUnit object
+	window.QUnit = QUnit;
+}
+
+// Initialize more QUnit.config and QUnit.urlParams
+(function() {
+	var i,
+		location = window.location || { search: "", protocol: "file:" },
+		params = location.search.slice( 1 ).split( "&" ),
+		length = params.length,
+		urlParams = {},
+		current;
+
+	if ( params[ 0 ] ) {
+		for ( i = 0; i < length; i++ ) {
+			current = params[ i ].split( "=" );
+			current[ 0 ] = decodeURIComponent( current[ 0 ] );
+			// allow just a key to turn on a flag, e.g., test.html?noglobals
+			current[ 1 ] = current[ 1 ] ? decodeURIComponent( current[ 1 ] ) : true;
+			urlParams[ current[ 0 ] ] = current[ 1 ];
+		}
+	}
+
+	QUnit.urlParams = urlParams;
+
+	// String search anywhere in moduleName+testName
+	config.filter = urlParams.filter;
+
+	// Exact match of the module name
+	config.module = urlParams.module;
+
+	config.testNumber = parseInt( urlParams.testNumber, 10 ) || null;
+
+	// Figure out if we're running the tests from a server or not
+	QUnit.isLocal = location.protocol === "file:";
+}());
+
+// Extend QUnit object,
+// these after set here because they should not be exposed as global functions
+extend( QUnit, {
+	assert: assert,
+
+	config: config,
+
+	// Initialize the configuration options
+	init: function() {
+		extend( config, {
+			stats: { all: 0, bad: 0 },
+			moduleStats: { all: 0, bad: 0 },
+			started: +new Date(),
+			updateRate: 1000,
+			blocking: false,
+			autostart: true,
+			autorun: false,
+			filter: "",
+			queue: [],
+			semaphore: 1
+		});
+
+		var tests, banner, result,
+			qunit = id( "qunit" );
+
+		if ( qunit ) {
+			qunit.innerHTML =
+				"<h1 id='qunit-header'>" + escapeText( document.title ) + "</h1>" +
+				"<h2 id='qunit-banner'></h2>" +
+				"<div id='qunit-testrunner-toolbar'></div>" +
+				"<h2 id='qunit-userAgent'></h2>" +
+				"<ol id='qunit-tests'></ol>";
+		}
+
+		tests = id( "qunit-tests" );
+		banner = id( "qunit-banner" );
+		result = id( "qunit-testresult" );
+
+		if ( tests ) {
+			tests.innerHTML = "";
+		}
+
+		if ( banner ) {
+			banner.className = "";
+		}
+
+		if ( result ) {
+			result.parentNode.removeChild( result );
+		}
+
+		if ( tests ) {
+			result = document.createElement( "p" );
+			result.id = "qunit-testresult";
+			result.className = "result";
+			tests.parentNode.insertBefore( result, tests );
+			result.innerHTML = "Running...<br/>&nbsp;";
+		}
+	},
+
+	// Resets the test setup. Useful for tests that modify the DOM.
+	reset: function() {
+		var fixture = id( "qunit-fixture" );
+		if ( fixture ) {
+			fixture.innerHTML = config.fixture;
+		}
+	},
+
+	// Trigger an event on an element.
+	// @example triggerEvent( document.body, "click" );
+	triggerEvent: function( elem, type, event ) {
+		if ( document.createEvent ) {
+			event = document.createEvent( "MouseEvents" );
+			event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView,
+				0, 0, 0, 0, 0, false, false, false, false, 0, null);
+
+			elem.dispatchEvent( event );
+		} else if ( elem.fireEvent ) {
+			elem.fireEvent( "on" + type );
+		}
+	},
+
+	// Safe object type checking
+	is: function( type, obj ) {
+		return QUnit.objectType( obj ) === type;
+	},
+
+	objectType: function( obj ) {
+		if ( typeof obj === "undefined" ) {
+				return "undefined";
+		// consider: typeof null === object
+		}
+		if ( obj === null ) {
+				return "null";
+		}
+
+		var match = toString.call( obj ).match(/^\[object\s(.*)\]$/),
+			type = match && match[1] || "";
+
+		switch ( type ) {
+			case "Number":
+				if ( isNaN(obj) ) {
+					return "nan";
+				}
+				return "number";
+			case "String":
+			case "Boolean":
+			case "Array":
+			case "Date":
+			case "RegExp":
+			case "Function":
+				return type.toLowerCase();
+		}
+		if ( typeof obj === "object" ) {
+			return "object";
+		}
+		return undefined;
+	},
+
+	push: function( result, actual, expected, message ) {
+		if ( !config.current ) {
+			throw new Error( "assertion outside test context, was " + sourceFromStacktrace() );
+		}
+
+		var output, source,
+			details = {
+				module: config.current.module,
+				name: config.current.testName,
+				result: result,
+				message: message,
+				actual: actual,
+				expected: expected
+			};
+
+		message = escapeText( message ) || ( result ? "okay" : "failed" );
+		message = "<span class='test-message'>" + message + "</span>";
+		output = message;
+
+		if ( !result ) {
+			expected = escapeText( QUnit.jsDump.parse(expected) );
+			actual = escapeText( QUnit.jsDump.parse(actual) );
+			output += "<table><tr class='test-expected'><th>Expected: </th><td><pre>" + expected + "</pre></td></tr>";
+
+			if ( actual !== expected ) {
+				output += "<tr class='test-actual'><th>Result: </th><td><pre>" + actual + "</pre></td></tr>";
+				output += "<tr class='test-diff'><th>Diff: </th><td><pre>" + QUnit.diff( expected, actual ) + "</pre></td></tr>";
+			}
+
+			source = sourceFromStacktrace();
+
+			if ( source ) {
+				details.source = source;
+				output += "<tr class='test-source'><th>Source: </th><td><pre>" + escapeText( source ) + "</pre></td></tr>";
+			}
+
+			output += "</table>";
+		}
+
+		runLoggingCallbacks( "log", QUnit, details );
+
+		config.current.assertions.push({
+			result: !!result,
+			message: output
+		});
+	},
+
+	pushFailure: function( message, source, actual ) {
+		if ( !config.current ) {
+			throw new Error( "pushFailure() assertion outside test context, was " + sourceFromStacktrace(2) );
+		}
+
+		var output,
+			details = {
+				module: config.current.module,
+				name: config.current.testName,
+				result: false,
+				message: message
+			};
+
+		message = escapeText( message ) || "error";
+		message = "<span class='test-message'>" + message + "</span>";
+		output = message;
+
+		output += "<table>";
+
+		if ( actual ) {
+			output += "<tr class='test-actual'><th>Result: </th><td><pre>" + escapeText( actual ) + "</pre></td></tr>";
+		}
+
+		if ( source ) {
+			details.source = source;
+			output += "<tr class='test-source'><th>Source: </th><td><pre>" + escapeText( source ) + "</pre></td></tr>";
+		}
+
+		output += "</table>";
+
+		runLoggingCallbacks( "log", QUnit, details );
+
+		config.current.assertions.push({
+			result: false,
+			message: output
+		});
+	},
+
+	url: function( params ) {
+		params = extend( extend( {}, QUnit.urlParams ), params );
+		var key,
+			querystring = "?";
+
+		for ( key in params ) {
+			if ( !hasOwn.call( params, key ) ) {
+				continue;
+			}
+			querystring += encodeURIComponent( key ) + "=" +
+				encodeURIComponent( params[ key ] ) + "&";
+		}
+		return window.location.protocol + "//" + window.location.host +
+			window.location.pathname + querystring.slice( 0, -1 );
+	},
+
+	extend: extend,
+	id: id,
+	addEvent: addEvent
+	// load, equiv, jsDump, diff: Attached later
+});
+
+/**
+ * @deprecated: Created for backwards compatibility with test runner that set the hook function
+ * into QUnit.{hook}, instead of invoking it and passing the hook function.
+ * QUnit.constructor is set to the empty F() above so that we can add to it's prototype here.
+ * Doing this allows us to tell if the following methods have been overwritten on the actual
+ * QUnit object.
+ */
+extend( QUnit.constructor.prototype, {
+
+	// Logging callbacks; all receive a single argument with the listed properties
+	// run test/logs.html for any related changes
+	begin: registerLoggingCallback( "begin" ),
+
+	// done: { failed, passed, total, runtime }
+	done: registerLoggingCallback( "done" ),
+
+	// log: { result, actual, expected, message }
+	log: registerLoggingCallback( "log" ),
+
+	// testStart: { name }
+	testStart: registerLoggingCallback( "testStart" ),
+
+	// testDone: { name, failed, passed, total, duration }
+	testDone: registerLoggingCallback( "testDone" ),
+
+	// moduleStart: { name }
+	moduleStart: registerLoggingCallback( "moduleStart" ),
+
+	// moduleDone: { name, failed, passed, total }
+	moduleDone: registerLoggingCallback( "moduleDone" )
+});
+
+if ( typeof document === "undefined" || document.readyState === "complete" ) {
+	config.autorun = true;
+}
+
+QUnit.load = function() {
+	runLoggingCallbacks( "begin", QUnit, {} );
+
+	// Initialize the config, saving the execution queue
+	var banner, filter, i, label, len, main, ol, toolbar, userAgent, val,
+		urlConfigCheckboxesContainer, urlConfigCheckboxes, moduleFilter,
+		numModules = 0,
+		moduleFilterHtml = "",
+		urlConfigHtml = "",
+		oldconfig = extend( {}, config );
+
+	QUnit.init();
+	extend(config, oldconfig);
+
+	config.blocking = false;
+
+	len = config.urlConfig.length;
+
+	for ( i = 0; i < len; i++ ) {
+		val = config.urlConfig[i];
+		if ( typeof val === "string" ) {
+			val = {
+				id: val,
+				label: val,
+				tooltip: "[no tooltip available]"
+			};
+		}
+		config[ val.id ] = QUnit.urlParams[ val.id ];
+		urlConfigHtml += "<input id='qunit-urlconfig-" + escapeText( val.id ) +
+			"' name='" + escapeText( val.id ) +
+			"' type='checkbox'" + ( config[ val.id ] ? " checked='checked'" : "" ) +
+			" title='" + escapeText( val.tooltip ) +
+			"'><label for='qunit-urlconfig-" + escapeText( val.id ) +
+			"' title='" + escapeText( val.tooltip ) + "'>" + val.label + "</label>";
+	}
+
+	moduleFilterHtml += "<label for='qunit-modulefilter'>Module: </label><select id='qunit-modulefilter' name='modulefilter'><option value='' " +
+		( config.module === undefined  ? "selected='selected'" : "" ) +
+		">< All Modules ></option>";
+
+	for ( i in config.modules ) {
+		if ( config.modules.hasOwnProperty( i ) ) {
+			numModules += 1;
+			moduleFilterHtml += "<option value='" + escapeText( encodeURIComponent(i) ) + "' " +
+				( config.module === i ? "selected='selected'" : "" ) +
+				">" + escapeText(i) + "</option>";
+		}
+	}
+	moduleFilterHtml += "</select>";
+
+	// `userAgent` initialized at top of scope
+	userAgent = id( "qunit-userAgent" );
+	if ( userAgent ) {
+		userAgent.innerHTML = navigator.userAgent;
+	}
+
+	// `banner` initialized at top of scope
+	banner = id( "qunit-header" );
+	if ( banner ) {
+		banner.innerHTML = "<a href='" + QUnit.url({ filter: undefined, module: undefined, testNumber: undefined }) + "'>" + banner.innerHTML + "</a> ";
+	}
+
+	// `toolbar` initialized at top of scope
+	toolbar = id( "qunit-testrunner-toolbar" );
+	if ( toolbar ) {
+		// `filter` initialized at top of scope
+		filter = document.createElement( "input" );
+		filter.type = "checkbox";
+		filter.id = "qunit-filter-pass";
+
+		addEvent( filter, "click", function() {
+			var tmp,
+				ol = document.getElementById( "qunit-tests" );
+
+			if ( filter.checked ) {
+				ol.className = ol.className + " hidepass";
+			} else {
+				tmp = " " + ol.className.replace( /[\n\t\r]/g, " " ) + " ";
+				ol.className = tmp.replace( / hidepass /, " " );
+			}
+			if ( defined.sessionStorage ) {
+				if (filter.checked) {
+					sessionStorage.setItem( "qunit-filter-passed-tests", "true" );
+				} else {
+					sessionStorage.removeItem( "qunit-filter-passed-tests" );
+				}
+			}
+		});
+
+		if ( config.hidepassed || defined.sessionStorage && sessionStorage.getItem( "qunit-filter-passed-tests" ) ) {
+			filter.checked = true;
+			// `ol` initialized at top of scope
+			ol = document.getElementById( "qunit-tests" );
+			ol.className = ol.className + " hidepass";
+		}
+		toolbar.appendChild( filter );
+
+		// `label` initialized at top of scope
+		label = document.createElement( "label" );
+		label.setAttribute( "for", "qunit-filter-pass" );
+		label.setAttribute( "title", "Only show tests and assertons that fail. Stored in sessionStorage." );
+		label.innerHTML = "Hide passed tests";
+		toolbar.appendChild( label );
+
+		urlConfigCheckboxesContainer = document.createElement("span");
+		urlConfigCheckboxesContainer.innerHTML = urlConfigHtml;
+		urlConfigCheckboxes = urlConfigCheckboxesContainer.getElementsByTagName("input");
+		// For oldIE support:
+		// * Add handlers to the individual elements instead of the container
+		// * Use "click" instead of "change"
+		// * Fallback from event.target to event.srcElement
+		addEvents( urlConfigCheckboxes, "click", function( event ) {
+			var params = {},
+				target = event.target || event.srcElement;
+			params[ target.name ] = target.checked ? true : undefined;
+			window.location = QUnit.url( params );
+		});
+		toolbar.appendChild( urlConfigCheckboxesContainer );
+
+		if (numModules > 1) {
+			moduleFilter = document.createElement( 'span' );
+			moduleFilter.setAttribute( 'id', 'qunit-modulefilter-container' );
+			moduleFilter.innerHTML = moduleFilterHtml;
+			addEvent( moduleFilter.lastChild, "change", function() {
+				var selectBox = moduleFilter.getElementsByTagName("select")[0],
+					selectedModule = decodeURIComponent(selectBox.options[selectBox.selectedIndex].value);
+
+				window.location = QUnit.url( { module: ( selectedModule === "" ) ? undefined : selectedModule } );
+			});
+			toolbar.appendChild(moduleFilter);
+		}
+	}
+
+	// `main` initialized at top of scope
+	main = id( "qunit-fixture" );
+	if ( main ) {
+		config.fixture = main.innerHTML;
+	}
+
+	if ( config.autostart ) {
+		QUnit.start();
+	}
+};
+
+addEvent( window, "load", QUnit.load );
+
+// `onErrorFnPrev` initialized at top of scope
+// Preserve other handlers
+onErrorFnPrev = window.onerror;
+
+// Cover uncaught exceptions
+// Returning true will surpress the default browser handler,
+// returning false will let it run.
+window.onerror = function ( error, filePath, linerNr ) {
+	var ret = false;
+	if ( onErrorFnPrev ) {
+		ret = onErrorFnPrev( error, filePath, linerNr );
+	}
+
+	// Treat return value as window.onerror itself does,
+	// Only do our handling if not surpressed.
+	if ( ret !== true ) {
+		if ( QUnit.config.current ) {
+			if ( QUnit.config.current.ignoreGlobalErrors ) {
+				return true;
+			}
+			QUnit.pushFailure( error, filePath + ":" + linerNr );
+		} else {
+			QUnit.test( "global failure", extend( function() {
+				QUnit.pushFailure( error, filePath + ":" + linerNr );
+			}, { validTest: validTest } ) );
+		}
+		return false;
+	}
+
+	return ret;
+};
+
+function done() {
+	config.autorun = true;
+
+	// Log the last module results
+	if ( config.currentModule ) {
+		runLoggingCallbacks( "moduleDone", QUnit, {
+			name: config.currentModule,
+			failed: config.moduleStats.bad,
+			passed: config.moduleStats.all - config.moduleStats.bad,
+			total: config.moduleStats.all
+		});
+	}
+
+	var i, key,
+		banner = id( "qunit-banner" ),
+		tests = id( "qunit-tests" ),
+		runtime = +new Date() - config.started,
+		passed = config.stats.all - config.stats.bad,
+		html = [
+			"Tests completed in ",
+			runtime,
+			" milliseconds.<br/>",
+			"<span class='passed'>",
+			passed,
+			"</span> assertions of <span class='total'>",
+			config.stats.all,
+			"</span> passed, <span class='failed'>",
+			config.stats.bad,
+			"</span> failed."
+		].join( "" );
+
+	if ( banner ) {
+		banner.className = ( config.stats.bad ? "qunit-fail" : "qunit-pass" );
+	}
+
+	if ( tests ) {
+		id( "qunit-testresult" ).innerHTML = html;
+	}
+
+	if ( config.altertitle && typeof document !== "undefined" && document.title ) {
+		// show ✖ for good, ✔ for bad suite result in title
+		// use escape sequences in case file gets loaded with non-utf-8-charset
+		document.title = [
+			( config.stats.bad ? "\u2716" : "\u2714" ),
+			document.title.replace( /^[\u2714\u2716] /i, "" )
+		].join( " " );
+	}
+
+	// clear own sessionStorage items if all tests passed
+	if ( config.reorder && defined.sessionStorage && config.stats.bad === 0 ) {
+		// `key` & `i` initialized at top of scope
+		for ( i = 0; i < sessionStorage.length; i++ ) {
+			key = sessionStorage.key( i++ );
+			if ( key.indexOf( "qunit-test-" ) === 0 ) {
+				sessionStorage.removeItem( key );
+			}
+		}
+	}
+
+	// scroll back to top to show results
+	if ( window.scrollTo ) {
+		window.scrollTo(0, 0);
+	}
+
+	runLoggingCallbacks( "done", QUnit, {
+		failed: config.stats.bad,
+		passed: passed,
+		total: config.stats.all,
+		runtime: runtime
+	});
+}
+
+/** @return Boolean: true if this test should be ran */
+function validTest( test ) {
+	var include,
+		filter = config.filter && config.filter.toLowerCase(),
+		module = config.module && config.module.toLowerCase(),
+		fullName = (test.module + ": " + test.testName).toLowerCase();
+
+	// Internally-generated tests are always valid
+	if ( test.callback && test.callback.validTest === validTest ) {
+		delete test.callback.validTest;
+		return true;
+	}
+
+	if ( config.testNumber ) {
+		return test.testNumber === config.testNumber;
+	}
+
+	if ( module && ( !test.module || test.module.toLowerCase() !== module ) ) {
+		return false;
+	}
+
+	if ( !filter ) {
+		return true;
+	}
+
+	include = filter.charAt( 0 ) !== "!";
+	if ( !include ) {
+		filter = filter.slice( 1 );
+	}
+
+	// If the filter matches, we need to honour include
+	if ( fullName.indexOf( filter ) !== -1 ) {
+		return include;
+	}
+
+	// Otherwise, do the opposite
+	return !include;
+}
+
+// so far supports only Firefox, Chrome and Opera (buggy), Safari (for real exceptions)
+// Later Safari and IE10 are supposed to support error.stack as well
+// See also https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error/Stack
+function extractStacktrace( e, offset ) {
+	offset = offset === undefined ? 3 : offset;
+
+	var stack, include, i;
+
+	if ( e.stacktrace ) {
+		// Opera
+		return e.stacktrace.split( "\n" )[ offset + 3 ];
+	} else if ( e.stack ) {
+		// Firefox, Chrome
+		stack = e.stack.split( "\n" );
+		if (/^error$/i.test( stack[0] ) ) {
+			stack.shift();
+		}
+		if ( fileName ) {
+			include = [];
+			for ( i = offset; i < stack.length; i++ ) {
+				if ( stack[ i ].indexOf( fileName ) !== -1 ) {
+					break;
+				}
+				include.push( stack[ i ] );
+			}
+			if ( include.length ) {
+				return include.join( "\n" );
+			}
+		}
+		return stack[ offset ];
+	} else if ( e.sourceURL ) {
+		// Safari, PhantomJS
+		// hopefully one day Safari provides actual stacktraces
+		// exclude useless self-reference for generated Error objects
+		if ( /qunit.js$/.test( e.sourceURL ) ) {
+			return;
+		}
+		// for actual exceptions, this is useful
+		return e.sourceURL + ":" + e.line;
+	}
+}
+function sourceFromStacktrace( offset ) {
+	try {
+		throw new Error();
+	} catch ( e ) {
+		return extractStacktrace( e, offset );
+	}
+}
+
+/**
+ * Escape text for attribute or text content.
+ */
+function escapeText( s ) {
+	if ( !s ) {
+		return "";
+	}
+	s = s + "";
+	// Both single quotes and double quotes (for attributes)
+	return s.replace( /['"<>&]/g, function( s ) {
+		switch( s ) {
+			case '\'':
+				return '&#039;';
+			case '"':
+				return '&quot;';
+			case '<':
+				return '&lt;';
+			case '>':
+				return '&gt;';
+			case '&':
+				return '&amp;';
+		}
+	});
+}
+
+function synchronize( callback, last ) {
+	config.queue.push( callback );
+
+	if ( config.autorun && !config.blocking ) {
+		process( last );
+	}
+}
+
+function process( last ) {
+	function next() {
+		process( last );
+	}
+	var start = new Date().getTime();
+	config.depth = config.depth ? config.depth + 1 : 1;
+
+	while ( config.queue.length && !config.blocking ) {
+		if ( !defined.setTimeout || config.updateRate <= 0 || ( ( new Date().getTime() - start ) < config.updateRate ) ) {
+			config.queue.shift()();
+		} else {
+			window.setTimeout( next, 13 );
+			break;
+		}
+	}
+	config.depth--;
+	if ( last && !config.blocking && !config.queue.length && config.depth === 0 ) {
+		done();
+	}
+}
+
+function saveGlobal() {
+	config.pollution = [];
+
+	if ( config.noglobals ) {
+		for ( var key in window ) {
+			// in Opera sometimes DOM element ids show up here, ignore them
+			if ( !hasOwn.call( window, key ) || /^qunit-test-output/.test( key ) ) {
+				continue;
+			}
+			config.pollution.push( key );
+		}
+	}
+}
+
+function checkPollution() {
+	var newGlobals,
+		deletedGlobals,
+		old = config.pollution;
+
+	saveGlobal();
+
+	newGlobals = diff( config.pollution, old );
+	if ( newGlobals.length > 0 ) {
+		QUnit.pushFailure( "Introduced global variable(s): " + newGlobals.join(", ") );
+	}
+
+	deletedGlobals = diff( old, config.pollution );
+	if ( deletedGlobals.length > 0 ) {
+		QUnit.pushFailure( "Deleted global variable(s): " + deletedGlobals.join(", ") );
+	}
+}
+
+// returns a new Array with the elements that are in a but not in b
+function diff( a, b ) {
+	var i, j,
+		result = a.slice();
+
+	for ( i = 0; i < result.length; i++ ) {
+		for ( j = 0; j < b.length; j++ ) {
+			if ( result[i] === b[j] ) {
+				result.splice( i, 1 );
+				i--;
+				break;
+			}
+		}
+	}
+	return result;
+}
+
+function extend( a, b ) {
+	for ( var prop in b ) {
+		if ( b[ prop ] === undefined ) {
+			delete a[ prop ];
+
+		// Avoid "Member not found" error in IE8 caused by setting window.constructor
+		} else if ( prop !== "constructor" || a !== window ) {
+			a[ prop ] = b[ prop ];
+		}
+	}
+
+	return a;
+}
+
+/**
+ * @param {HTMLElement} elem
+ * @param {string} type
+ * @param {Function} fn
+ */
+function addEvent( elem, type, fn ) {
+	// Standards-based browsers
+	if ( elem.addEventListener ) {
+		elem.addEventListener( type, fn, false );
+	// IE
+	} else {
+		elem.attachEvent( "on" + type, fn );
+	}
+}
+
+/**
+ * @param {Array|NodeList} elems
+ * @param {string} type
+ * @param {Function} fn
+ */
+function addEvents( elems, type, fn ) {
+	var i = elems.length;
+	while ( i-- ) {
+		addEvent( elems[i], type, fn );
+	}
+}
+
+function hasClass( elem, name ) {
+	return (" " + elem.className + " ").indexOf(" " + name + " ") > -1;
+}
+
+function addClass( elem, name ) {
+	if ( !hasClass( elem, name ) ) {
+		elem.className += (elem.className ? " " : "") + name;
+	}
+}
+
+function removeClass( elem, name ) {
+	var set = " " + elem.className + " ";
+	// Class name may appear multiple times
+	while ( set.indexOf(" " + name + " ") > -1 ) {
+		set = set.replace(" " + name + " " , " ");
+	}
+	// If possible, trim it for prettiness, but not neccecarily
+	elem.className = window.jQuery ? jQuery.trim( set ) : ( set.trim ? set.trim() : set );
+}
+
+function id( name ) {
+	return !!( typeof document !== "undefined" && document && document.getElementById ) &&
+		document.getElementById( name );
+}
+
+function registerLoggingCallback( key ) {
+	return function( callback ) {
+		config[key].push( callback );
+	};
+}
+
+// Supports deprecated method of completely overwriting logging callbacks
+function runLoggingCallbacks( key, scope, args ) {
+	var i, callbacks;
+	if ( QUnit.hasOwnProperty( key ) ) {
+		QUnit[ key ].call(scope, args );
+	} else {
+		callbacks = config[ key ];
+		for ( i = 0; i < callbacks.length; i++ ) {
+			callbacks[ i ].call( scope, args );
+		}
+	}
+}
+
+// Test for equality any JavaScript type.
+// Author: Philippe Rathé <prathe@gmail.com>
+QUnit.equiv = (function() {
+
+	// Call the o related callback with the given arguments.
+	function bindCallbacks( o, callbacks, args ) {
+		var prop = QUnit.objectType( o );
+		if ( prop ) {
+			if ( QUnit.objectType( callbacks[ prop ] ) === "function" ) {
+				return callbacks[ prop ].apply( callbacks, args );
+			} else {
+				return callbacks[ prop ]; // or undefined
+			}
+		}
+	}
+
+	// the real equiv function
+	var innerEquiv,
+		// stack to decide between skip/abort functions
+		callers = [],
+		// stack to avoiding loops from circular referencing
+		parents = [],
+
+		getProto = Object.getPrototypeOf || function ( obj ) {
+			return obj.__proto__;
+		},
+		callbacks = (function () {
+
+			// for string, boolean, number and null
+			function useStrictEquality( b, a ) {
+				/*jshint eqeqeq:false */
+				if ( b instanceof a.constructor || a instanceof b.constructor ) {
+					// to catch short annotaion VS 'new' annotation of a
+					// declaration
+					// e.g. var i = 1;
+					// var j = new Number(1);
+					return a == b;
+				} else {
+					return a === b;
+				}
+			}
+
+			return {
+				"string": useStrictEquality,
+				"boolean": useStrictEquality,
+				"number": useStrictEquality,
+				"null": useStrictEquality,
+				"undefined": useStrictEquality,
+
+				"nan": function( b ) {
+					return isNaN( b );
+				},
+
+				"date": function( b, a ) {
+					return QUnit.objectType( b ) === "date" && a.valueOf() === b.valueOf();
+				},
+
+				"regexp": function( b, a ) {
+					return QUnit.objectType( b ) === "regexp" &&
+						// the regex itself
+						a.source === b.source &&
+						// and its modifers
+						a.global === b.global &&
+						// (gmi) ...
+						a.ignoreCase === b.ignoreCase &&
+						a.multiline === b.multiline &&
+						a.sticky === b.sticky;
+				},
+
+				// - skip when the property is a method of an instance (OOP)
+				// - abort otherwise,
+				// initial === would have catch identical references anyway
+				"function": function() {
+					var caller = callers[callers.length - 1];
+					return caller !== Object && typeof caller !== "undefined";
+				},
+
+				"array": function( b, a ) {
+					var i, j, len, loop;
+
+					// b could be an object literal here
+					if ( QUnit.objectType( b ) !== "array" ) {
+						return false;
+					}
+
+					len = a.length;
+					if ( len !== b.length ) {
+						// safe and faster
+						return false;
+					}
+
+					// track reference to avoid circular references
+					parents.push( a );
+					for ( i = 0; i < len; i++ ) {
+						loop = false;
+						for ( j = 0; j < parents.length; j++ ) {
+							if ( parents[j] === a[i] ) {
+								loop = true;// dont rewalk array
+							}
+						}
+						if ( !loop && !innerEquiv(a[i], b[i]) ) {
+							parents.pop();
+							return false;
+						}
+					}
+					parents.pop();
+					return true;
+				},
+
+				"object": function( b, a ) {
+					var i, j, loop,
+						// Default to true
+						eq = true,
+						aProperties = [],
+						bProperties = [];
+
+					// comparing constructors is more strict than using
+					// instanceof
+					if ( a.constructor !== b.constructor ) {
+						// Allow objects with no prototype to be equivalent to
+						// objects with Object as their constructor.
+						if ( !(( getProto(a) === null && getProto(b) === Object.prototype ) ||
+							( getProto(b) === null && getProto(a) === Object.prototype ) ) ) {
+								return false;
+						}
+					}
+
+					// stack constructor before traversing properties
+					callers.push( a.constructor );
+					// track reference to avoid circular references
+					parents.push( a );
+
+					for ( i in a ) { // be strict: don't ensures hasOwnProperty
+									// and go deep
+						loop = false;
+						for ( j = 0; j < parents.length; j++ ) {
+							if ( parents[j] === a[i] ) {
+								// don't go down the same path twice
+								loop = true;
+							}
+						}
+						aProperties.push(i); // collect a's properties
+
+						if (!loop && !innerEquiv( a[i], b[i] ) ) {
+							eq = false;
+							break;
+						}
+					}
+
+					callers.pop(); // unstack, we are done
+					parents.pop();
+
+					for ( i in b ) {
+						bProperties.push( i ); // collect b's properties
+					}
+
+					// Ensures identical properties name
+					return eq && innerEquiv( aProperties.sort(), bProperties.sort() );
+				}
+			};
+		}());
+
+	innerEquiv = function() { // can take multiple arguments
+		var args = [].slice.apply( arguments );
+		if ( args.length < 2 ) {
+			return true; // end transition
+		}
+
+		return (function( a, b ) {
+			if ( a === b ) {
+				return true; // catch the most you can
+			} else if ( a === null || b === null || typeof a === "undefined" ||
+					typeof b === "undefined" ||
+					QUnit.objectType(a) !== QUnit.objectType(b) ) {
+				return false; // don't lose time with error prone cases
+			} else {
+				return bindCallbacks(a, callbacks, [ b, a ]);
+			}
+
+			// apply transition with (1..n) arguments
+		}( args[0], args[1] ) && arguments.callee.apply( this, args.splice(1, args.length - 1 )) );
+	};
+
+	return innerEquiv;
+}());
+
+/**
+ * jsDump Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com |
+ * http://flesler.blogspot.com Licensed under BSD
+ * (http://www.opensource.org/licenses/bsd-license.php) Date: 5/15/2008
+ *
+ * @projectDescription Advanced and extensible data dumping for Javascript.
+ * @version 1.0.0
+ * @author Ariel Flesler
+ * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html}
+ */
+QUnit.jsDump = (function() {
+	function quote( str ) {
+		return '"' + str.toString().replace( /"/g, '\\"' ) + '"';
+	}
+	function literal( o ) {
+		return o + "";
+	}
+	function join( pre, arr, post ) {
+		var s = jsDump.separator(),
+			base = jsDump.indent(),
+			inner = jsDump.indent(1);
+		if ( arr.join ) {
+			arr = arr.join( "," + s + inner );
+		}
+		if ( !arr ) {
+			return pre + post;
+		}
+		return [ pre, inner + arr, base + post ].join(s);
+	}
+	function array( arr, stack ) {
+		var i = arr.length, ret = new Array(i);
+		this.up();
+		while ( i-- ) {
+			ret[i] = this.parse( arr[i] , undefined , stack);
+		}
+		this.down();
+		return join( "[", ret, "]" );
+	}
+
+	var reName = /^function (\w+)/,
+		jsDump = {
+			// type is used mostly internally, you can fix a (custom)type in advance
+			parse: function( obj, type, stack ) {
+				stack = stack || [ ];
+				var inStack, res,
+					parser = this.parsers[ type || this.typeOf(obj) ];
+
+				type = typeof parser;
+				inStack = inArray( obj, stack );
+
+				if ( inStack !== -1 ) {
+					return "recursion(" + (inStack - stack.length) + ")";
+				}
+				if ( type === "function" )  {
+					stack.push( obj );
+					res = parser.call( this, obj, stack );
+					stack.pop();
+					return res;
+				}
+				return ( type === "string" ) ? parser : this.parsers.error;
+			},
+			typeOf: function( obj ) {
+				var type;
+				if ( obj === null ) {
+					type = "null";
+				} else if ( typeof obj === "undefined" ) {
+					type = "undefined";
+				} else if ( QUnit.is( "regexp", obj) ) {
+					type = "regexp";
+				} else if ( QUnit.is( "date", obj) ) {
+					type = "date";
+				} else if ( QUnit.is( "function", obj) ) {
+					type = "function";
+				} else if ( typeof obj.setInterval !== undefined && typeof obj.document !== "undefined" && typeof obj.nodeType === "undefined" ) {
+					type = "window";
+				} else if ( obj.nodeType === 9 ) {
+					type = "document";
+				} else if ( obj.nodeType ) {
+					type = "node";
+				} else if (
+					// native arrays
+					toString.call( obj ) === "[object Array]" ||
+					// NodeList objects
+					( typeof obj.length === "number" && typeof obj.item !== "undefined" && ( obj.length ? obj.item(0) === obj[0] : ( obj.item( 0 ) === null && typeof obj[0] === "undefined" ) ) )
+				) {
+					type = "array";
+				} else if ( obj.constructor === Error.prototype.constructor ) {
+					type = "error";
+				} else {
+					type = typeof obj;
+				}
+				return type;
+			},
+			separator: function() {
+				return this.multiline ?	this.HTML ? "<br />" : "\n" : this.HTML ? "&nbsp;" : " ";
+			},
+			// extra can be a number, shortcut for increasing-calling-decreasing
+			indent: function( extra ) {
+				if ( !this.multiline ) {
+					return "";
+				}
+				var chr = this.indentChar;
+				if ( this.HTML ) {
+					chr = chr.replace( /\t/g, "   " ).replace( / /g, "&nbsp;" );
+				}
+				return new Array( this._depth_ + (extra||0) ).join(chr);
+			},
+			up: function( a ) {
+				this._depth_ += a || 1;
+			},
+			down: function( a ) {
+				this._depth_ -= a || 1;
+			},
+			setParser: function( name, parser ) {
+				this.parsers[name] = parser;
+			},
+			// The next 3 are exposed so you can use them
+			quote: quote,
+			literal: literal,
+			join: join,
+			//
+			_depth_: 1,
+			// This is the list of parsers, to modify them, use jsDump.setParser
+			parsers: {
+				window: "[Window]",
+				document: "[Document]",
+				error: function(error) {
+					return "Error(\"" + error.message + "\")";
+				},
+				unknown: "[Unknown]",
+				"null": "null",
+				"undefined": "undefined",
+				"function": function( fn ) {
+					var ret = "function",
+						// functions never have name in IE
+						name = "name" in fn ? fn.name : (reName.exec(fn) || [])[1];
+
+					if ( name ) {
+						ret += " " + name;
+					}
+					ret += "( ";
+
+					ret = [ ret, QUnit.jsDump.parse( fn, "functionArgs" ), "){" ].join( "" );
+					return join( ret, QUnit.jsDump.parse(fn,"functionCode" ), "}" );
+				},
+				array: array,
+				nodelist: array,
+				"arguments": array,
+				object: function( map, stack ) {
+					var ret = [ ], keys, key, val, i;
+					QUnit.jsDump.up();
+					keys = [];
+					for ( key in map ) {
+						keys.push( key );
+					}
+					keys.sort();
+					for ( i = 0; i < keys.length; i++ ) {
+						key = keys[ i ];
+						val = map[ key ];
+						ret.push( QUnit.jsDump.parse( key, "key" ) + ": " + QUnit.jsDump.parse( val, undefined, stack ) );
+					}
+					QUnit.jsDump.down();
+					return join( "{", ret, "}" );
+				},
+				node: function( node ) {
+					var len, i, val,
+						open = QUnit.jsDump.HTML ? "&lt;" : "<",
+						close = QUnit.jsDump.HTML ? "&gt;" : ">",
+						tag = node.nodeName.toLowerCase(),
+						ret = open + tag,
+						attrs = node.attributes;
+
+					if ( attrs ) {
+						for ( i = 0, len = attrs.length; i < len; i++ ) {
+							val = attrs[i].nodeValue;
+							// IE6 includes all attributes in .attributes, even ones not explicitly set.
+							// Those have values like undefined, null, 0, false, "" or "inherit".
+							if ( val && val !== "inherit" ) {
+								ret += " " + attrs[i].nodeName + "=" + QUnit.jsDump.parse( val, "attribute" );
+							}
+						}
+					}
+					ret += close;
+
+					// Show content of TextNode or CDATASection
+					if ( node.nodeType === 3 || node.nodeType === 4 ) {
+						ret += node.nodeValue;
+					}
+
+					return ret + open + "/" + tag + close;
+				},
+				// function calls it internally, it's the arguments part of the function
+				functionArgs: function( fn ) {
+					var args,
+						l = fn.length;
+
+					if ( !l ) {
+						return "";
+					}
+
+					args = new Array(l);
+					while ( l-- ) {
+						// 97 is 'a'
+						args[l] = String.fromCharCode(97+l);
+					}
+					return " " + args.join( ", " ) + " ";
+				},
+				// object calls it internally, the key part of an item in a map
+				key: quote,
+				// function calls it internally, it's the content of the function
+				functionCode: "[code]",
+				// node calls it internally, it's an html attribute value
+				attribute: quote,
+				string: quote,
+				date: quote,
+				regexp: literal,
+				number: literal,
+				"boolean": literal
+			},
+			// if true, entities are escaped ( <, >, \t, space and \n )
+			HTML: false,
+			// indentation unit
+			indentChar: "  ",
+			// if true, items in a collection, are separated by a \n, else just a space.
+			multiline: true
+		};
+
+	return jsDump;
+}());
+
+// from jquery.js
+function inArray( elem, array ) {
+	if ( array.indexOf ) {
+		return array.indexOf( elem );
+	}
+
+	for ( var i = 0, length = array.length; i < length; i++ ) {
+		if ( array[ i ] === elem ) {
+			return i;
+		}
+	}
+
+	return -1;
+}
+
+/*
+ * Javascript Diff Algorithm
+ *  By John Resig (http://ejohn.org/)
+ *  Modified by Chu Alan "sprite"
+ *
+ * Released under the MIT license.
+ *
+ * More Info:
+ *  http://ejohn.org/projects/javascript-diff-algorithm/
+ *
+ * Usage: QUnit.diff(expected, actual)
+ *
+ * QUnit.diff( "the quick brown fox jumped over", "the quick fox jumps over" ) == "the  quick <del>brown </del> fox <del>jumped </del><ins>jumps </ins> over"
+ */
+QUnit.diff = (function() {
+	/*jshint eqeqeq:false, eqnull:true */
+	function diff( o, n ) {
+		var i,
+			ns = {},
+			os = {};
+
+		for ( i = 0; i < n.length; i++ ) {
+			if ( !hasOwn.call( ns, n[i] ) ) {
+				ns[ n[i] ] = {
+					rows: [],
+					o: null
+				};
+			}
+			ns[ n[i] ].rows.push( i );
+		}
+
+		for ( i = 0; i < o.length; i++ ) {
+			if ( !hasOwn.call( os, o[i] ) ) {
+				os[ o[i] ] = {
+					rows: [],
+					n: null
+				};
+			}
+			os[ o[i] ].rows.push( i );
+		}
+
+		for ( i in ns ) {
+			if ( !hasOwn.call( ns, i ) ) {
+				continue;
+			}
+			if ( ns[i].rows.length === 1 && hasOwn.call( os, i ) && os[i].rows.length === 1 ) {
+				n[ ns[i].rows[0] ] = {
+					text: n[ ns[i].rows[0] ],
+					row: os[i].rows[0]
+				};
+				o[ os[i].rows[0] ] = {
+					text: o[ os[i].rows[0] ],
+					row: ns[i].rows[0]
+				};
+			}
+		}
+
+		for ( i = 0; i < n.length - 1; i++ ) {
+			if ( n[i].text != null && n[ i + 1 ].text == null && n[i].row + 1 < o.length && o[ n[i].row + 1 ].text == null &&
+						n[ i + 1 ] == o[ n[i].row + 1 ] ) {
+
+				n[ i + 1 ] = {
+					text: n[ i + 1 ],
+					row: n[i].row + 1
+				};
+				o[ n[i].row + 1 ] = {
+					text: o[ n[i].row + 1 ],
+					row: i + 1
+				};
+			}
+		}
+
+		for ( i = n.length - 1; i > 0; i-- ) {
+			if ( n[i].text != null && n[ i - 1 ].text == null && n[i].row > 0 && o[ n[i].row - 1 ].text == null &&
+						n[ i - 1 ] == o[ n[i].row - 1 ]) {
+
+				n[ i - 1 ] = {
+					text: n[ i - 1 ],
+					row: n[i].row - 1
+				};
+				o[ n[i].row - 1 ] = {
+					text: o[ n[i].row - 1 ],
+					row: i - 1
+				};
+			}
+		}
+
+		return {
+			o: o,
+			n: n
+		};
+	}
+
+	return function( o, n ) {
+		o = o.replace( /\s+$/, "" );
+		n = n.replace( /\s+$/, "" );
+
+		var i, pre,
+			str = "",
+			out = diff( o === "" ? [] : o.split(/\s+/), n === "" ? [] : n.split(/\s+/) ),
+			oSpace = o.match(/\s+/g),
+			nSpace = n.match(/\s+/g);
+
+		if ( oSpace == null ) {
+			oSpace = [ " " ];
+		}
+		else {
+			oSpace.push( " " );
+		}
+
+		if ( nSpace == null ) {
+			nSpace = [ " " ];
+		}
+		else {
+			nSpace.push( " " );
+		}
+
+		if ( out.n.length === 0 ) {
+			for ( i = 0; i < out.o.length; i++ ) {
+				str += "<del>" + out.o[i] + oSpace[i] + "</del>";
+			}
+		}
+		else {
+			if ( out.n[0].text == null ) {
+				for ( n = 0; n < out.o.length && out.o[n].text == null; n++ ) {
+					str += "<del>" + out.o[n] + oSpace[n] + "</del>";
+				}
+			}
+
+			for ( i = 0; i < out.n.length; i++ ) {
+				if (out.n[i].text == null) {
+					str += "<ins>" + out.n[i] + nSpace[i] + "</ins>";
+				}
+				else {
+					// `pre` initialized at top of scope
+					pre = "";
+
+					for ( n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++ ) {
+						pre += "<del>" + out.o[n] + oSpace[n] + "</del>";
+					}
+					str += " " + out.n[i].text + nSpace[i] + pre;
+				}
+			}
+		}
+
+		return str;
+	};
+}());
+
+// for CommonJS enviroments, export everything
+if ( typeof exports !== "undefined" ) {
+	extend( exports, QUnit );
+}
+
+// get at whatever the global object is, like window in browsers
+}( (function() {return this;}.call()) ));
diff --git a/vendor/dimsemenov/magnific-popup/magnific-popup.jquery.json b/vendor/dimsemenov/magnific-popup/magnific-popup.jquery.json
new file mode 100644
index 0000000000..a6cc092e98
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/magnific-popup.jquery.json
@@ -0,0 +1,29 @@
+{
+  "name": "magnific-popup",
+  "title": "Magnific Popup",
+  "description": "Fast, light, mobile-friendly and responsive lightbox and modal dialog plugin. Open inline HTML, ajax loaded content, image, form, iframe (YouTube video, Vimeo, Google Maps), photo gallery. Animation effects added with CSS3 transitions. For jQuery or Zepto.",
+  "version": "1.1.0",
+  "homepage": "http://dimsemenov.com/plugins/magnific-popup/",
+  "demo": "http://dimsemenov.com/plugins/magnific-popup/",
+  "docs": "http://dimsemenov.com/plugins/magnific-popup/documentation.html",
+  "author": {
+    "name": "Dmitry Semenov",
+    "email": "diiiimaaaa@gmail.com",
+    "url": "http://dimsemenov.com"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/dimsemenov/Magnific-Popup.git"
+  },
+  "bugs": "https://github.com/dimsemenov/Magnific-Popup/issues",
+  "dependencies": {
+    "jquery": ">=1.8.0"
+  },
+  "keywords": ["lightbox","popup","modal","window","dialog","ui","gallery","slideshow","video","image","ajax","html5","animation","jquery","photo","responsive","mobile"],
+  "licenses": [
+    {
+      "type": "MIT",
+      "url": "http://www.opensource.org/licenses/mit-license.php"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/package.json b/vendor/dimsemenov/magnific-popup/package.json
new file mode 100644
index 0000000000..52cffd0394
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/package.json
@@ -0,0 +1,55 @@
+{
+  "name": "magnific-popup",
+  "version": "1.1.0",
+  "title": "Magnific Popup",
+  "description": "Lightbox and modal dialog plugin. Can display inline HTML, iframes (YouTube video, Vimeo, Google Maps), or an image gallery. Animation effects are added with CSS3 transitions. For jQuery or Zepto.",
+  "keywords": [
+    "ecosystem:jquery",
+    "jquery-plugin",
+    "zepto",
+    "lightbox",
+    "popup",
+    "modal",
+    "window",
+    "dialog",
+    "gallery",
+    "jquery",
+    "photo",
+    "responsive",
+    "mobile"
+  ],
+  "author": {
+    "name": "Dmitry Semenov",
+    "email": "diiiimaaaa@gmail.com",
+    "web": "http://dimsemenov.com"
+  },
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/dimsemenov/Magnific-Popup/issues"
+  },
+  "main": "dist/jquery.magnific-popup.js",
+  "style": "dist/magnific-popup.css",
+  "homepage": "http://dimsemenov.com/plugins/magnific-popup/",
+  "engines": {
+    "node": ">= 0.8.0"
+  },
+  "scripts": {
+    "test": "grunt jshint"
+  },
+  "devDependencies": {
+    "grunt": "~0.4.5",
+    "grunt-contrib-clean": "~0.6.0",
+    "grunt-contrib-concat": "^0.5.1",
+    "grunt-contrib-copy": "~0.8.1",
+    "grunt-contrib-cssmin": "^0.14.0",
+    "grunt-contrib-jshint": "~0.11.3",
+    "grunt-contrib-uglify": "~0.9.2",
+    "grunt-contrib-watch": "~0.6.1",
+    "grunt-jekyll": "~0.4.2",
+    "grunt-sass": "~1.0.0"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/dimsemenov/Magnific-Popup.git"
+  }
+}
diff --git a/vendor/dimsemenov/magnific-popup/src/css/_settings.scss b/vendor/dimsemenov/magnific-popup/src/css/_settings.scss
new file mode 100644
index 0000000000..75eadbc77e
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/src/css/_settings.scss
@@ -0,0 +1,44 @@
+////////////////////////
+//      Settings      //
+////////////////////////
+
+// overlay
+$mfp-overlay-color:                   #0b0b0b !default;                    // Color of overlay screen
+$mfp-overlay-opacity:                 0.8 !default;                        // Opacity of overlay screen
+$mfp-shadow:                          0 0 8px rgba(0, 0, 0, 0.6) !default; // Shadow on image or iframe
+
+// spacing
+$mfp-popup-padding-left:              8px !default;                        // Padding from left and from right side
+$mfp-popup-padding-left-mobile:       6px !default;                        // Same as above, but is applied when width of window is less than 800px
+
+$mfp-z-index-base:                    1040 !default;                       // Base z-index of popup
+
+// controls
+$mfp-include-arrows:                  true !default;                       // Include styles for nav arrows
+$mfp-controls-opacity:                0.65 !default;                       // Opacity of controls
+$mfp-controls-color:                  #FFF !default;                       // Color of controls
+$mfp-controls-border-color:           #3F3F3F !default; 	                 // Border color of controls
+$mfp-inner-close-icon-color:          #333 !default;                       // Color of close button when inside
+$mfp-controls-text-color:             #CCC !default;                       // Color of preloader and "1 of X" indicator
+$mfp-controls-text-color-hover:       #FFF !default;                       // Hover color of preloader and "1 of X" indicator
+
+// Iframe-type options
+$mfp-include-iframe-type:             true !default;                       // Enable Iframe-type popups
+$mfp-iframe-padding-top:              40px !default;                       // Iframe padding top
+$mfp-iframe-background:               #000 !default;                       // Background color of iframes
+$mfp-iframe-max-width:                900px !default;                      // Maximum width of iframes
+$mfp-iframe-ratio:                    9/16 !default;                       // Ratio of iframe (9/16 = widescreen, 3/4 = standard, etc.)
+
+// Image-type options
+$mfp-include-image-type:              true !default;                       // Enable Image-type popups
+$mfp-image-background:                #444 !default;
+$mfp-image-padding-top:               40px !default;                       // Image padding top
+$mfp-image-padding-bottom:            40px !default;                       // Image padding bottom
+$mfp-include-mobile-layout-for-image: true !default;                       // Removes paddings from top and bottom
+
+// Image caption options
+$mfp-caption-title-color:             #F3F3F3 !default;                    // Caption title color
+$mfp-caption-subtitle-color:          #BDBDBD !default;                    // Caption subtitle color
+
+// A11y
+$mfp-use-visuallyhidden:              false !default;                      // Hide content from browsers, but make it available for screen readers
diff --git a/vendor/dimsemenov/magnific-popup/src/css/main.scss b/vendor/dimsemenov/magnific-popup/src/css/main.scss
new file mode 100644
index 0000000000..54964dfba4
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/src/css/main.scss
@@ -0,0 +1,543 @@
+/* Magnific Popup CSS */
+
+@import "settings";
+
+////////////////////////
+//
+// Contents:
+//
+// 1. General styles
+//    - Transluscent overlay
+//    - Containers, wrappers
+//    - Cursors
+//    - Helper classes
+// 2. Appearance
+//    - Preloader & text that displays error messages
+//    - CSS reset for buttons
+//    - Close icon
+//    - "1 of X" counter
+//    - Navigation (left/right) arrows
+//    - Iframe content type styles
+//    - Image content type styles
+//    - Media query where size of arrows is reduced
+//    - IE7 support
+//
+////////////////////////
+
+
+
+////////////////////////
+// 1. General styles
+////////////////////////
+
+// Transluscent overlay
+.mfp-bg {
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  z-index: $mfp-z-index-base + 2;
+  overflow: hidden;
+  position: fixed;
+
+  background: $mfp-overlay-color;
+  opacity: $mfp-overlay-opacity;
+}
+
+// Wrapper for popup
+.mfp-wrap {
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  z-index: $mfp-z-index-base + 3;
+  position: fixed;
+  outline: none !important;
+  -webkit-backface-visibility: hidden; // fixes webkit bug that can cause "false" scrollbar
+}
+
+// Root container
+.mfp-container {
+  text-align: center;
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  left: 0;
+  top: 0;
+  padding: 0 $mfp-popup-padding-left;
+  box-sizing: border-box;
+}
+
+// Vertical centerer helper
+.mfp-container {
+  &:before {
+    content: '';
+    display: inline-block;
+    height: 100%;
+    vertical-align: middle;
+  }
+}
+
+// Remove vertical centering when popup has class `mfp-align-top`
+.mfp-align-top {
+  .mfp-container {
+    &:before {
+      display: none;
+    }
+  }
+}
+
+// Popup content holder
+.mfp-content {
+  position: relative;
+  display: inline-block;
+  vertical-align: middle;
+  margin: 0 auto;
+  text-align: left;
+  z-index: $mfp-z-index-base + 5;
+}
+.mfp-inline-holder,
+.mfp-ajax-holder {
+  .mfp-content {
+    width: 100%;
+    cursor: auto;
+  }
+}
+
+// Cursors
+.mfp-ajax-cur {
+  cursor: progress;
+}
+.mfp-zoom-out-cur {
+  &, .mfp-image-holder .mfp-close {
+    cursor: -moz-zoom-out;
+    cursor: -webkit-zoom-out;
+    cursor: zoom-out;
+  }
+}
+.mfp-zoom {
+  cursor: pointer;
+  cursor: -webkit-zoom-in;
+  cursor: -moz-zoom-in;
+  cursor: zoom-in;
+}
+.mfp-auto-cursor {
+  .mfp-content {
+    cursor: auto;
+  }
+}
+
+.mfp-close,
+.mfp-arrow,
+.mfp-preloader,
+.mfp-counter {
+  -webkit-user-select:none;
+  -moz-user-select: none;
+  user-select: none;
+}
+
+// Hide the image during the loading
+.mfp-loading {
+  &.mfp-figure {
+    display: none;
+  }
+}
+
+// Helper class that hides stuff
+@if $mfp-use-visuallyhidden {
+  // From HTML5 Boilerplate https://github.com/h5bp/html5-boilerplate/blob/v4.2.0/doc/css.md#visuallyhidden
+  .mfp-hide {
+    border: 0 !important;
+    clip: rect(0 0 0 0) !important;
+    height: 1px !important;
+    margin: -1px !important;
+    overflow: hidden !important;
+    padding: 0 !important;
+    position: absolute !important;
+    width: 1px !important;
+  }
+} @else {
+  .mfp-hide {
+    display: none !important;
+  }
+}
+
+
+////////////////////////
+// 2. Appearance
+////////////////////////
+
+// Preloader and text that displays error messages
+.mfp-preloader {
+  color: $mfp-controls-text-color;
+  position: absolute;
+  top: 50%;
+  width: auto;
+  text-align: center;
+  margin-top: -0.8em;
+  left: 8px;
+  right: 8px;
+  z-index: $mfp-z-index-base + 4;
+  a {
+    color: $mfp-controls-text-color;
+    &:hover {
+      color: $mfp-controls-text-color-hover;
+    }
+  }
+}
+
+// Hide preloader when content successfully loaded
+.mfp-s-ready {
+  .mfp-preloader {
+    display: none;
+  }
+}
+
+// Hide content when it was not loaded
+.mfp-s-error {
+  .mfp-content {
+    display: none;
+  }
+}
+
+// CSS-reset for buttons
+button {
+  &.mfp-close,
+  &.mfp-arrow {
+    overflow: visible;
+    cursor: pointer;
+    background: transparent;
+    border: 0;
+    -webkit-appearance: none;
+    display: block;
+    outline: none;
+    padding: 0;
+    z-index: $mfp-z-index-base + 6;
+    box-shadow: none;
+    touch-action: manipulation;
+  }
+  &::-moz-focus-inner {
+      padding: 0;
+      border: 0
+  }
+}
+
+
+// Close icon
+.mfp-close {
+  width: 44px;
+  height: 44px;
+  line-height: 44px;
+
+  position: absolute;
+  right: 0;
+  top: 0;
+  text-decoration: none;
+  text-align: center;
+  opacity: $mfp-controls-opacity;
+  padding: 0 0 18px 10px;
+  color: $mfp-controls-color;
+
+  font-style: normal;
+  font-size: 28px;
+  font-family: Arial, Baskerville, monospace;
+
+  &:hover,
+  &:focus {
+    opacity: 1;
+  }
+
+  &:active {
+    top: 1px;
+  }
+}
+.mfp-close-btn-in {
+  .mfp-close {
+    color: $mfp-inner-close-icon-color;
+  }
+}
+.mfp-image-holder,
+.mfp-iframe-holder {
+  .mfp-close {
+    color: $mfp-controls-color;
+    right: -6px;
+    text-align: right;
+    padding-right: 6px;
+    width: 100%;
+  }
+}
+
+// "1 of X" counter
+.mfp-counter {
+  position: absolute;
+  top: 0;
+  right: 0;
+  color: $mfp-controls-text-color;
+  font-size: 12px;
+  line-height: 18px;
+  white-space: nowrap;
+}
+
+// Navigation arrows
+@if $mfp-include-arrows {
+  .mfp-arrow {
+    position: absolute;
+    opacity: $mfp-controls-opacity;
+    margin: 0;
+    top: 50%;
+    margin-top: -55px;
+    padding: 0;
+    width: 90px;
+    height: 110px;
+    -webkit-tap-highlight-color: rgba(0,0,0,0);
+    &:active {
+      margin-top: -54px;
+    }
+    &:hover,
+    &:focus {
+      opacity: 1;
+    }
+    &:before,
+    &:after {
+      content: '';
+      display: block;
+      width: 0;
+      height: 0;
+      position: absolute;
+      left: 0;
+      top: 0;
+      margin-top: 35px;
+      margin-left: 35px;
+      border: medium inset transparent;
+    }
+
+    &:after {
+
+      border-top-width: 13px;
+      border-bottom-width: 13px;
+      top:8px;
+    }
+
+    &:before {
+      border-top-width: 21px;
+      border-bottom-width: 21px;
+      opacity: 0.7;
+    }
+
+  }
+
+  .mfp-arrow-left {
+    left: 0;
+    &:after {
+      border-right: 17px solid $mfp-controls-color;
+      margin-left: 31px;
+    }
+    &:before {
+      margin-left: 25px;
+      border-right: 27px solid $mfp-controls-border-color;
+    }
+  }
+
+  .mfp-arrow-right {
+    right: 0;
+    &:after {
+      border-left: 17px solid $mfp-controls-color;
+      margin-left: 39px
+    }
+    &:before {
+      border-left: 27px solid $mfp-controls-border-color;
+    }
+  }
+}
+
+
+
+// Iframe content type
+@if $mfp-include-iframe-type {
+  .mfp-iframe-holder {
+    padding-top: $mfp-iframe-padding-top;
+    padding-bottom: $mfp-iframe-padding-top;
+    .mfp-content {
+      line-height: 0;
+      width: 100%;
+      max-width: $mfp-iframe-max-width;
+    }
+    .mfp-close {
+      top: -40px;
+    }
+  }
+  .mfp-iframe-scaler {
+    width: 100%;
+    height: 0;
+    overflow: hidden;
+    padding-top: $mfp-iframe-ratio * 100%;
+    iframe {
+      position: absolute;
+      display: block;
+      top: 0;
+      left: 0;
+      width: 100%;
+      height: 100%;
+      box-shadow: $mfp-shadow;
+      background: $mfp-iframe-background;
+    }
+  }
+}
+
+
+
+// Image content type
+@if $mfp-include-image-type {
+
+  /* Main image in popup */
+  img {
+    &.mfp-img {
+      width: auto;
+      max-width: 100%;
+      height: auto;
+      display: block;
+      line-height: 0;
+      box-sizing: border-box;
+      padding: $mfp-image-padding-top 0 $mfp-image-padding-bottom;
+      margin: 0 auto;
+    }
+  }
+
+  /* The shadow behind the image */
+  .mfp-figure {
+    line-height: 0;
+    &:after {
+      content: '';
+      position: absolute;
+      left: 0;
+      top: $mfp-image-padding-top;
+      bottom: $mfp-image-padding-bottom;
+      display: block;
+      right: 0;
+      width: auto;
+      height: auto;
+      z-index: -1;
+      box-shadow: $mfp-shadow;
+      background: $mfp-image-background;
+    }
+    small {
+      color: $mfp-caption-subtitle-color;
+      display: block;
+      font-size: 12px;
+      line-height: 14px;
+    }
+    figure {
+      margin: 0;
+    }
+  }
+  .mfp-bottom-bar {
+    margin-top: -$mfp-image-padding-bottom + 4;
+    position: absolute;
+    top: 100%;
+    left: 0;
+    width: 100%;
+    cursor: auto;
+  }
+  .mfp-title {
+    text-align: left;
+    line-height: 18px;
+    color: $mfp-caption-title-color;
+    word-wrap: break-word;
+    padding-right: 36px; // leave some space for counter at right side
+  }
+
+  .mfp-image-holder {
+    .mfp-content {
+      max-width: 100%;
+    }
+  }
+
+  .mfp-gallery {
+    .mfp-image-holder {
+      .mfp-figure {
+        cursor: pointer;
+      }
+    }
+  }
+
+
+  @if $mfp-include-mobile-layout-for-image {
+    @media screen and (max-width: 800px) and (orientation:landscape), screen and (max-height: 300px) {
+      /**
+       * Remove all paddings around the image on small screen
+       */
+      .mfp-img-mobile {
+        .mfp-image-holder {
+          padding-left: 0;
+          padding-right: 0;
+        }
+        img {
+          &.mfp-img {
+            padding: 0;
+          }
+        }
+        .mfp-figure {
+          // The shadow behind the image
+          &:after {
+            top: 0;
+            bottom: 0;
+          }
+          small {
+            display: inline;
+            margin-left: 5px;
+          }
+        }
+        .mfp-bottom-bar {
+          background: rgba(0,0,0,0.6);
+          bottom: 0;
+          margin: 0;
+          top: auto;
+          padding: 3px 5px;
+          position: fixed;
+          box-sizing: border-box;
+          &:empty {
+            padding: 0;
+          }
+        }
+        .mfp-counter {
+          right: 5px;
+          top: 3px;
+        }
+        .mfp-close {
+          top: 0;
+          right: 0;
+          width: 35px;
+          height: 35px;
+          line-height: 35px;
+          background: rgba(0, 0, 0, 0.6);
+          position: fixed;
+          text-align: center;
+          padding: 0;
+        }
+      }
+    }
+  }
+}
+
+
+
+// Scale navigation arrows and reduce padding from sides
+@media all and (max-width: 900px) {
+  .mfp-arrow {
+    -webkit-transform: scale(0.75);
+    transform: scale(0.75);
+  }
+  .mfp-arrow-left {
+    -webkit-transform-origin: 0;
+    transform-origin: 0;
+  }
+  .mfp-arrow-right {
+    -webkit-transform-origin: 100%;
+    transform-origin: 100%;
+  }
+  .mfp-container {
+    padding-left: $mfp-popup-padding-left-mobile;
+    padding-right: $mfp-popup-padding-left-mobile;
+  }
+}
+
diff --git a/vendor/dimsemenov/magnific-popup/src/js/ajax.js b/vendor/dimsemenov/magnific-popup/src/js/ajax.js
new file mode 100644
index 0000000000..471d7a0446
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/src/js/ajax.js
@@ -0,0 +1,77 @@
+var AJAX_NS = 'ajax',
+	_ajaxCur,
+	_removeAjaxCursor = function() {
+		if(_ajaxCur) {
+			$(document.body).removeClass(_ajaxCur);
+		}
+	},
+	_destroyAjaxRequest = function() {
+		_removeAjaxCursor();
+		if(mfp.req) {
+			mfp.req.abort();
+		}
+	};
+
+$.magnificPopup.registerModule(AJAX_NS, {
+
+	options: {
+		settings: null,
+		cursor: 'mfp-ajax-cur',
+		tError: '<a href="%url%">The content</a> could not be loaded.'
+	},
+
+	proto: {
+		initAjax: function() {
+			mfp.types.push(AJAX_NS);
+			_ajaxCur = mfp.st.ajax.cursor;
+
+			_mfpOn(CLOSE_EVENT+'.'+AJAX_NS, _destroyAjaxRequest);
+			_mfpOn('BeforeChange.' + AJAX_NS, _destroyAjaxRequest);
+		},
+		getAjax: function(item) {
+
+			if(_ajaxCur) {
+				$(document.body).addClass(_ajaxCur);
+			}
+
+			mfp.updateStatus('loading');
+
+			var opts = $.extend({
+				url: item.src,
+				success: function(data, textStatus, jqXHR) {
+					var temp = {
+						data:data,
+						xhr:jqXHR
+					};
+
+					_mfpTrigger('ParseAjax', temp);
+
+					mfp.appendContent( $(temp.data), AJAX_NS );
+
+					item.finished = true;
+
+					_removeAjaxCursor();
+
+					mfp._setFocus();
+
+					setTimeout(function() {
+						mfp.wrap.addClass(READY_CLASS);
+					}, 16);
+
+					mfp.updateStatus('ready');
+
+					_mfpTrigger('AjaxContentAdded');
+				},
+				error: function() {
+					_removeAjaxCursor();
+					item.finished = item.loadError = true;
+					mfp.updateStatus('error', mfp.st.ajax.tError.replace('%url%', item.src));
+				}
+			}, mfp.st.ajax.settings);
+
+			mfp.req = $.ajax(opts);
+
+			return '';
+		}
+	}
+});
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/src/js/core.js b/vendor/dimsemenov/magnific-popup/src/js/core.js
new file mode 100644
index 0000000000..7cdfd6f0bf
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/src/js/core.js
@@ -0,0 +1,939 @@
+/**
+ * 
+ * Magnific Popup Core JS file
+ * 
+ */
+
+
+/**
+ * Private static constants
+ */
+var CLOSE_EVENT = 'Close',
+	BEFORE_CLOSE_EVENT = 'BeforeClose',
+	AFTER_CLOSE_EVENT = 'AfterClose',
+	BEFORE_APPEND_EVENT = 'BeforeAppend',
+	MARKUP_PARSE_EVENT = 'MarkupParse',
+	OPEN_EVENT = 'Open',
+	CHANGE_EVENT = 'Change',
+	NS = 'mfp',
+	EVENT_NS = '.' + NS,
+	READY_CLASS = 'mfp-ready',
+	REMOVING_CLASS = 'mfp-removing',
+	PREVENT_CLOSE_CLASS = 'mfp-prevent-close';
+
+
+/**
+ * Private vars 
+ */
+/*jshint -W079 */
+var mfp, // As we have only one instance of MagnificPopup object, we define it locally to not to use 'this'
+	MagnificPopup = function(){},
+	_isJQ = !!(window.jQuery),
+	_prevStatus,
+	_window = $(window),
+	_document,
+	_prevContentType,
+	_wrapClasses,
+	_currPopupType;
+
+
+/**
+ * Private functions
+ */
+var _mfpOn = function(name, f) {
+		mfp.ev.on(NS + name + EVENT_NS, f);
+	},
+	_getEl = function(className, appendTo, html, raw) {
+		var el = document.createElement('div');
+		el.className = 'mfp-'+className;
+		if(html) {
+			el.innerHTML = html;
+		}
+		if(!raw) {
+			el = $(el);
+			if(appendTo) {
+				el.appendTo(appendTo);
+			}
+		} else if(appendTo) {
+			appendTo.appendChild(el);
+		}
+		return el;
+	},
+	_mfpTrigger = function(e, data) {
+		mfp.ev.triggerHandler(NS + e, data);
+
+		if(mfp.st.callbacks) {
+			// converts "mfpEventName" to "eventName" callback and triggers it if it's present
+			e = e.charAt(0).toLowerCase() + e.slice(1);
+			if(mfp.st.callbacks[e]) {
+				mfp.st.callbacks[e].apply(mfp, $.isArray(data) ? data : [data]);
+			}
+		}
+	},
+	_getCloseBtn = function(type) {
+		if(type !== _currPopupType || !mfp.currTemplate.closeBtn) {
+			mfp.currTemplate.closeBtn = $( mfp.st.closeMarkup.replace('%title%', mfp.st.tClose ) );
+			_currPopupType = type;
+		}
+		return mfp.currTemplate.closeBtn;
+	},
+	// Initialize Magnific Popup only when called at least once
+	_checkInstance = function() {
+		if(!$.magnificPopup.instance) {
+			/*jshint -W020 */
+			mfp = new MagnificPopup();
+			mfp.init();
+			$.magnificPopup.instance = mfp;
+		}
+	},
+	// CSS transition detection, http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr
+	supportsTransitions = function() {
+		var s = document.createElement('p').style, // 's' for style. better to create an element if body yet to exist
+			v = ['ms','O','Moz','Webkit']; // 'v' for vendor
+
+		if( s['transition'] !== undefined ) {
+			return true; 
+		}
+			
+		while( v.length ) {
+			if( v.pop() + 'Transition' in s ) {
+				return true;
+			}
+		}
+				
+		return false;
+	};
+
+
+
+/**
+ * Public functions
+ */
+MagnificPopup.prototype = {
+
+	constructor: MagnificPopup,
+
+	/**
+	 * Initializes Magnific Popup plugin. 
+	 * This function is triggered only once when $.fn.magnificPopup or $.magnificPopup is executed
+	 */
+	init: function() {
+		var appVersion = navigator.appVersion;
+		mfp.isLowIE = mfp.isIE8 = document.all && !document.addEventListener;
+		mfp.isAndroid = (/android/gi).test(appVersion);
+		mfp.isIOS = (/iphone|ipad|ipod/gi).test(appVersion);
+		mfp.supportsTransition = supportsTransitions();
+
+		// We disable fixed positioned lightbox on devices that don't handle it nicely.
+		// If you know a better way of detecting this - let me know.
+		mfp.probablyMobile = (mfp.isAndroid || mfp.isIOS || /(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent) );
+		_document = $(document);
+
+		mfp.popupsCache = {};
+	},
+
+	/**
+	 * Opens popup
+	 * @param  data [description]
+	 */
+	open: function(data) {
+
+		var i;
+
+		if(data.isObj === false) { 
+			// convert jQuery collection to array to avoid conflicts later
+			mfp.items = data.items.toArray();
+
+			mfp.index = 0;
+			var items = data.items,
+				item;
+			for(i = 0; i < items.length; i++) {
+				item = items[i];
+				if(item.parsed) {
+					item = item.el[0];
+				}
+				if(item === data.el[0]) {
+					mfp.index = i;
+					break;
+				}
+			}
+		} else {
+			mfp.items = $.isArray(data.items) ? data.items : [data.items];
+			mfp.index = data.index || 0;
+		}
+
+		// if popup is already opened - we just update the content
+		if(mfp.isOpen) {
+			mfp.updateItemHTML();
+			return;
+		}
+		
+		mfp.types = []; 
+		_wrapClasses = '';
+		if(data.mainEl && data.mainEl.length) {
+			mfp.ev = data.mainEl.eq(0);
+		} else {
+			mfp.ev = _document;
+		}
+
+		if(data.key) {
+			if(!mfp.popupsCache[data.key]) {
+				mfp.popupsCache[data.key] = {};
+			}
+			mfp.currTemplate = mfp.popupsCache[data.key];
+		} else {
+			mfp.currTemplate = {};
+		}
+
+
+
+		mfp.st = $.extend(true, {}, $.magnificPopup.defaults, data ); 
+		mfp.fixedContentPos = mfp.st.fixedContentPos === 'auto' ? !mfp.probablyMobile : mfp.st.fixedContentPos;
+
+		if(mfp.st.modal) {
+			mfp.st.closeOnContentClick = false;
+			mfp.st.closeOnBgClick = false;
+			mfp.st.showCloseBtn = false;
+			mfp.st.enableEscapeKey = false;
+		}
+		
+
+		// Building markup
+		// main containers are created only once
+		if(!mfp.bgOverlay) {
+
+			// Dark overlay
+			mfp.bgOverlay = _getEl('bg').on('click'+EVENT_NS, function() {
+				mfp.close();
+			});
+
+			mfp.wrap = _getEl('wrap').attr('tabindex', -1).on('click'+EVENT_NS, function(e) {
+				if(mfp._checkIfClose(e.target)) {
+					mfp.close();
+				}
+			});
+
+			mfp.container = _getEl('container', mfp.wrap);
+		}
+
+		mfp.contentContainer = _getEl('content');
+		if(mfp.st.preloader) {
+			mfp.preloader = _getEl('preloader', mfp.container, mfp.st.tLoading);
+		}
+
+
+		// Initializing modules
+		var modules = $.magnificPopup.modules;
+		for(i = 0; i < modules.length; i++) {
+			var n = modules[i];
+			n = n.charAt(0).toUpperCase() + n.slice(1);
+			mfp['init'+n].call(mfp);
+		}
+		_mfpTrigger('BeforeOpen');
+
+
+		if(mfp.st.showCloseBtn) {
+			// Close button
+			if(!mfp.st.closeBtnInside) {
+				mfp.wrap.append( _getCloseBtn() );
+			} else {
+				_mfpOn(MARKUP_PARSE_EVENT, function(e, template, values, item) {
+					values.close_replaceWith = _getCloseBtn(item.type);
+				});
+				_wrapClasses += ' mfp-close-btn-in';
+			}
+		}
+
+		if(mfp.st.alignTop) {
+			_wrapClasses += ' mfp-align-top';
+		}
+
+	
+
+		if(mfp.fixedContentPos) {
+			mfp.wrap.css({
+				overflow: mfp.st.overflowY,
+				overflowX: 'hidden',
+				overflowY: mfp.st.overflowY
+			});
+		} else {
+			mfp.wrap.css({ 
+				top: _window.scrollTop(),
+				position: 'absolute'
+			});
+		}
+		if( mfp.st.fixedBgPos === false || (mfp.st.fixedBgPos === 'auto' && !mfp.fixedContentPos) ) {
+			mfp.bgOverlay.css({
+				height: _document.height(),
+				position: 'absolute'
+			});
+		}
+
+		
+
+		if(mfp.st.enableEscapeKey) {
+			// Close on ESC key
+			_document.on('keyup' + EVENT_NS, function(e) {
+				if(e.keyCode === 27) {
+					mfp.close();
+				}
+			});
+		}
+
+		_window.on('resize' + EVENT_NS, function() {
+			mfp.updateSize();
+		});
+
+
+		if(!mfp.st.closeOnContentClick) {
+			_wrapClasses += ' mfp-auto-cursor';
+		}
+		
+		if(_wrapClasses)
+			mfp.wrap.addClass(_wrapClasses);
+
+
+		// this triggers recalculation of layout, so we get it once to not to trigger twice
+		var windowHeight = mfp.wH = _window.height();
+
+		
+		var windowStyles = {};
+
+		if( mfp.fixedContentPos ) {
+            if(mfp._hasScrollBar(windowHeight)){
+                var s = mfp._getScrollbarSize();
+                if(s) {
+                    windowStyles.marginRight = s;
+                }
+            }
+        }
+
+		if(mfp.fixedContentPos) {
+			if(!mfp.isIE7) {
+				windowStyles.overflow = 'hidden';
+			} else {
+				// ie7 double-scroll bug
+				$('body, html').css('overflow', 'hidden');
+			}
+		}
+
+		
+		
+		var classesToadd = mfp.st.mainClass;
+		if(mfp.isIE7) {
+			classesToadd += ' mfp-ie7';
+		}
+		if(classesToadd) {
+			mfp._addClassToMFP( classesToadd );
+		}
+
+		// add content
+		mfp.updateItemHTML();
+
+		_mfpTrigger('BuildControls');
+
+		// remove scrollbar, add margin e.t.c
+		$('html').css(windowStyles);
+		
+		// add everything to DOM
+		mfp.bgOverlay.add(mfp.wrap).prependTo( mfp.st.prependTo || $(document.body) );
+
+		// Save last focused element
+		mfp._lastFocusedEl = document.activeElement;
+		
+		// Wait for next cycle to allow CSS transition
+		setTimeout(function() {
+			
+			if(mfp.content) {
+				mfp._addClassToMFP(READY_CLASS);
+				mfp._setFocus();
+			} else {
+				// if content is not defined (not loaded e.t.c) we add class only for BG
+				mfp.bgOverlay.addClass(READY_CLASS);
+			}
+			
+			// Trap the focus in popup
+			_document.on('focusin' + EVENT_NS, mfp._onFocusIn);
+
+		}, 16);
+
+		mfp.isOpen = true;
+		mfp.updateSize(windowHeight);
+		_mfpTrigger(OPEN_EVENT);
+
+		return data;
+	},
+
+	/**
+	 * Closes the popup
+	 */
+	close: function() {
+		if(!mfp.isOpen) return;
+		_mfpTrigger(BEFORE_CLOSE_EVENT);
+
+		mfp.isOpen = false;
+		// for CSS3 animation
+		if(mfp.st.removalDelay && !mfp.isLowIE && mfp.supportsTransition )  {
+			mfp._addClassToMFP(REMOVING_CLASS);
+			setTimeout(function() {
+				mfp._close();
+			}, mfp.st.removalDelay);
+		} else {
+			mfp._close();
+		}
+	},
+
+	/**
+	 * Helper for close() function
+	 */
+	_close: function() {
+		_mfpTrigger(CLOSE_EVENT);
+
+		var classesToRemove = REMOVING_CLASS + ' ' + READY_CLASS + ' ';
+
+		mfp.bgOverlay.detach();
+		mfp.wrap.detach();
+		mfp.container.empty();
+
+		if(mfp.st.mainClass) {
+			classesToRemove += mfp.st.mainClass + ' ';
+		}
+
+		mfp._removeClassFromMFP(classesToRemove);
+
+		if(mfp.fixedContentPos) {
+			var windowStyles = {marginRight: ''};
+			if(mfp.isIE7) {
+				$('body, html').css('overflow', '');
+			} else {
+				windowStyles.overflow = '';
+			}
+			$('html').css(windowStyles);
+		}
+		
+		_document.off('keyup' + EVENT_NS + ' focusin' + EVENT_NS);
+		mfp.ev.off(EVENT_NS);
+
+		// clean up DOM elements that aren't removed
+		mfp.wrap.attr('class', 'mfp-wrap').removeAttr('style');
+		mfp.bgOverlay.attr('class', 'mfp-bg');
+		mfp.container.attr('class', 'mfp-container');
+
+		// remove close button from target element
+		if(mfp.st.showCloseBtn &&
+		(!mfp.st.closeBtnInside || mfp.currTemplate[mfp.currItem.type] === true)) {
+			if(mfp.currTemplate.closeBtn)
+				mfp.currTemplate.closeBtn.detach();
+		}
+
+
+		if(mfp.st.autoFocusLast && mfp._lastFocusedEl) {
+			$(mfp._lastFocusedEl).focus(); // put tab focus back
+		}
+		mfp.currItem = null;	
+		mfp.content = null;
+		mfp.currTemplate = null;
+		mfp.prevHeight = 0;
+
+		_mfpTrigger(AFTER_CLOSE_EVENT);
+	},
+	
+	updateSize: function(winHeight) {
+
+		if(mfp.isIOS) {
+			// fixes iOS nav bars https://github.com/dimsemenov/Magnific-Popup/issues/2
+			var zoomLevel = document.documentElement.clientWidth / window.innerWidth;
+			var height = window.innerHeight * zoomLevel;
+			mfp.wrap.css('height', height);
+			mfp.wH = height;
+		} else {
+			mfp.wH = winHeight || _window.height();
+		}
+		// Fixes #84: popup incorrectly positioned with position:relative on body
+		if(!mfp.fixedContentPos) {
+			mfp.wrap.css('height', mfp.wH);
+		}
+
+		_mfpTrigger('Resize');
+
+	},
+
+	/**
+	 * Set content of popup based on current index
+	 */
+	updateItemHTML: function() {
+		var item = mfp.items[mfp.index];
+
+		// Detach and perform modifications
+		mfp.contentContainer.detach();
+
+		if(mfp.content)
+			mfp.content.detach();
+
+		if(!item.parsed) {
+			item = mfp.parseEl( mfp.index );
+		}
+
+		var type = item.type;
+
+		_mfpTrigger('BeforeChange', [mfp.currItem ? mfp.currItem.type : '', type]);
+		// BeforeChange event works like so:
+		// _mfpOn('BeforeChange', function(e, prevType, newType) { });
+
+		mfp.currItem = item;
+
+		if(!mfp.currTemplate[type]) {
+			var markup = mfp.st[type] ? mfp.st[type].markup : false;
+
+			// allows to modify markup
+			_mfpTrigger('FirstMarkupParse', markup);
+
+			if(markup) {
+				mfp.currTemplate[type] = $(markup);
+			} else {
+				// if there is no markup found we just define that template is parsed
+				mfp.currTemplate[type] = true;
+			}
+		}
+
+		if(_prevContentType && _prevContentType !== item.type) {
+			mfp.container.removeClass('mfp-'+_prevContentType+'-holder');
+		}
+
+		var newContent = mfp['get' + type.charAt(0).toUpperCase() + type.slice(1)](item, mfp.currTemplate[type]);
+		mfp.appendContent(newContent, type);
+
+		item.preloaded = true;
+
+		_mfpTrigger(CHANGE_EVENT, item);
+		_prevContentType = item.type;
+
+		// Append container back after its content changed
+		mfp.container.prepend(mfp.contentContainer);
+
+		_mfpTrigger('AfterChange');
+	},
+
+
+	/**
+	 * Set HTML content of popup
+	 */
+	appendContent: function(newContent, type) {
+		mfp.content = newContent;
+
+		if(newContent) {
+			if(mfp.st.showCloseBtn && mfp.st.closeBtnInside &&
+				mfp.currTemplate[type] === true) {
+				// if there is no markup, we just append close button element inside
+				if(!mfp.content.find('.mfp-close').length) {
+					mfp.content.append(_getCloseBtn());
+				}
+			} else {
+				mfp.content = newContent;
+			}
+		} else {
+			mfp.content = '';
+		}
+
+		_mfpTrigger(BEFORE_APPEND_EVENT);
+		mfp.container.addClass('mfp-'+type+'-holder');
+
+		mfp.contentContainer.append(mfp.content);
+	},
+
+
+	/**
+	 * Creates Magnific Popup data object based on given data
+	 * @param  {int} index Index of item to parse
+	 */
+	parseEl: function(index) {
+		var item = mfp.items[index],
+			type;
+
+		if(item.tagName) {
+			item = { el: $(item) };
+		} else {
+			type = item.type;
+			item = { data: item, src: item.src };
+		}
+
+		if(item.el) {
+			var types = mfp.types;
+
+			// check for 'mfp-TYPE' class
+			for(var i = 0; i < types.length; i++) {
+				if( item.el.hasClass('mfp-'+types[i]) ) {
+					type = types[i];
+					break;
+				}
+			}
+
+			item.src = item.el.attr('data-mfp-src');
+			if(!item.src) {
+				item.src = item.el.attr('href');
+			}
+		}
+
+		item.type = type || mfp.st.type || 'inline';
+		item.index = index;
+		item.parsed = true;
+		mfp.items[index] = item;
+		_mfpTrigger('ElementParse', item);
+
+		return mfp.items[index];
+	},
+
+
+	/**
+	 * Initializes single popup or a group of popups
+	 */
+	addGroup: function(el, options) {
+		var eHandler = function(e) {
+			e.mfpEl = this;
+			mfp._openClick(e, el, options);
+		};
+
+		if(!options) {
+			options = {};
+		}
+
+		var eName = 'click.magnificPopup';
+		options.mainEl = el;
+
+		if(options.items) {
+			options.isObj = true;
+			el.off(eName).on(eName, eHandler);
+		} else {
+			options.isObj = false;
+			if(options.delegate) {
+				el.off(eName).on(eName, options.delegate , eHandler);
+			} else {
+				options.items = el;
+				el.off(eName).on(eName, eHandler);
+			}
+		}
+	},
+	_openClick: function(e, el, options) {
+		var midClick = options.midClick !== undefined ? options.midClick : $.magnificPopup.defaults.midClick;
+
+
+		if(!midClick && ( e.which === 2 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey ) ) {
+			return;
+		}
+
+		var disableOn = options.disableOn !== undefined ? options.disableOn : $.magnificPopup.defaults.disableOn;
+
+		if(disableOn) {
+			if($.isFunction(disableOn)) {
+				if( !disableOn.call(mfp) ) {
+					return true;
+				}
+			} else { // else it's number
+				if( _window.width() < disableOn ) {
+					return true;
+				}
+			}
+		}
+
+		if(e.type) {
+			e.preventDefault();
+
+			// This will prevent popup from closing if element is inside and popup is already opened
+			if(mfp.isOpen) {
+				e.stopPropagation();
+			}
+		}
+
+		options.el = $(e.mfpEl);
+		if(options.delegate) {
+			options.items = el.find(options.delegate);
+		}
+		mfp.open(options);
+	},
+
+
+	/**
+	 * Updates text on preloader
+	 */
+	updateStatus: function(status, text) {
+
+		if(mfp.preloader) {
+			if(_prevStatus !== status) {
+				mfp.container.removeClass('mfp-s-'+_prevStatus);
+			}
+
+			if(!text && status === 'loading') {
+				text = mfp.st.tLoading;
+			}
+
+			var data = {
+				status: status,
+				text: text
+			};
+			// allows to modify status
+			_mfpTrigger('UpdateStatus', data);
+
+			status = data.status;
+			text = data.text;
+
+			mfp.preloader.html(text);
+
+			mfp.preloader.find('a').on('click', function(e) {
+				e.stopImmediatePropagation();
+			});
+
+			mfp.container.addClass('mfp-s-'+status);
+			_prevStatus = status;
+		}
+	},
+
+
+	/*
+		"Private" helpers that aren't private at all
+	 */
+	// Check to close popup or not
+	// "target" is an element that was clicked
+	_checkIfClose: function(target) {
+
+		if($(target).hasClass(PREVENT_CLOSE_CLASS)) {
+			return;
+		}
+
+		var closeOnContent = mfp.st.closeOnContentClick;
+		var closeOnBg = mfp.st.closeOnBgClick;
+
+		if(closeOnContent && closeOnBg) {
+			return true;
+		} else {
+
+			// We close the popup if click is on close button or on preloader. Or if there is no content.
+			if(!mfp.content || $(target).hasClass('mfp-close') || (mfp.preloader && target === mfp.preloader[0]) ) {
+				return true;
+			}
+
+			// if click is outside the content
+			if(  (target !== mfp.content[0] && !$.contains(mfp.content[0], target))  ) {
+				if(closeOnBg) {
+					// last check, if the clicked element is in DOM, (in case it's removed onclick)
+					if( $.contains(document, target) ) {
+						return true;
+					}
+				}
+			} else if(closeOnContent) {
+				return true;
+			}
+
+		}
+		return false;
+	},
+	_addClassToMFP: function(cName) {
+		mfp.bgOverlay.addClass(cName);
+		mfp.wrap.addClass(cName);
+	},
+	_removeClassFromMFP: function(cName) {
+		this.bgOverlay.removeClass(cName);
+		mfp.wrap.removeClass(cName);
+	},
+	_hasScrollBar: function(winHeight) {
+		return (  (mfp.isIE7 ? _document.height() : document.body.scrollHeight) > (winHeight || _window.height()) );
+	},
+	_setFocus: function() {
+		(mfp.st.focus ? mfp.content.find(mfp.st.focus).eq(0) : mfp.wrap).focus();
+	},
+	_onFocusIn: function(e) {
+		if( e.target !== mfp.wrap[0] && !$.contains(mfp.wrap[0], e.target) ) {
+			mfp._setFocus();
+			return false;
+		}
+	},
+	_parseMarkup: function(template, values, item) {
+		var arr;
+		if(item.data) {
+			values = $.extend(item.data, values);
+		}
+		_mfpTrigger(MARKUP_PARSE_EVENT, [template, values, item] );
+
+		$.each(values, function(key, value) {
+			if(value === undefined || value === false) {
+				return true;
+			}
+			arr = key.split('_');
+			if(arr.length > 1) {
+				var el = template.find(EVENT_NS + '-'+arr[0]);
+
+				if(el.length > 0) {
+					var attr = arr[1];
+					if(attr === 'replaceWith') {
+						if(el[0] !== value[0]) {
+							el.replaceWith(value);
+						}
+					} else if(attr === 'img') {
+						if(el.is('img')) {
+							el.attr('src', value);
+						} else {
+							el.replaceWith( $('<img>').attr('src', value).attr('class', el.attr('class')) );
+						}
+					} else {
+						el.attr(arr[1], value);
+					}
+				}
+
+			} else {
+				template.find(EVENT_NS + '-'+key).html(value);
+			}
+		});
+	},
+
+	_getScrollbarSize: function() {
+		// thx David
+		if(mfp.scrollbarSize === undefined) {
+			var scrollDiv = document.createElement("div");
+			scrollDiv.style.cssText = 'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;';
+			document.body.appendChild(scrollDiv);
+			mfp.scrollbarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth;
+			document.body.removeChild(scrollDiv);
+		}
+		return mfp.scrollbarSize;
+	}
+
+}; /* MagnificPopup core prototype end */
+
+
+
+
+/**
+ * Public static functions
+ */
+$.magnificPopup = {
+	instance: null,
+	proto: MagnificPopup.prototype,
+	modules: [],
+
+	open: function(options, index) {
+		_checkInstance();
+
+		if(!options) {
+			options = {};
+		} else {
+			options = $.extend(true, {}, options);
+		}
+
+		options.isObj = true;
+		options.index = index || 0;
+		return this.instance.open(options);
+	},
+
+	close: function() {
+		return $.magnificPopup.instance && $.magnificPopup.instance.close();
+	},
+
+	registerModule: function(name, module) {
+		if(module.options) {
+			$.magnificPopup.defaults[name] = module.options;
+		}
+		$.extend(this.proto, module.proto);
+		this.modules.push(name);
+	},
+
+	defaults: {
+
+		// Info about options is in docs:
+		// http://dimsemenov.com/plugins/magnific-popup/documentation.html#options
+
+		disableOn: 0,
+
+		key: null,
+
+		midClick: false,
+
+		mainClass: '',
+
+		preloader: true,
+
+		focus: '', // CSS selector of input to focus after popup is opened
+
+		closeOnContentClick: false,
+
+		closeOnBgClick: true,
+
+		closeBtnInside: true,
+
+		showCloseBtn: true,
+
+		enableEscapeKey: true,
+
+		modal: false,
+
+		alignTop: false,
+
+		removalDelay: 0,
+
+		prependTo: null,
+
+		fixedContentPos: 'auto',
+
+		fixedBgPos: 'auto',
+
+		overflowY: 'auto',
+
+		closeMarkup: '<button title="%title%" type="button" class="mfp-close">&#215;</button>',
+
+		tClose: 'Close (Esc)',
+
+		tLoading: 'Loading...',
+
+		autoFocusLast: true
+
+	}
+};
+
+
+
+$.fn.magnificPopup = function(options) {
+	_checkInstance();
+
+	var jqEl = $(this);
+
+	// We call some API method of first param is a string
+	if (typeof options === "string" ) {
+
+		if(options === 'open') {
+			var items,
+				itemOpts = _isJQ ? jqEl.data('magnificPopup') : jqEl[0].magnificPopup,
+				index = parseInt(arguments[1], 10) || 0;
+
+			if(itemOpts.items) {
+				items = itemOpts.items[index];
+			} else {
+				items = jqEl;
+				if(itemOpts.delegate) {
+					items = items.find(itemOpts.delegate);
+				}
+				items = items.eq( index );
+			}
+			mfp._openClick({mfpEl:items}, jqEl, itemOpts);
+		} else {
+			if(mfp.isOpen)
+				mfp[options].apply(mfp, Array.prototype.slice.call(arguments, 1));
+		}
+
+	} else {
+		// clone options obj
+		options = $.extend(true, {}, options);
+
+		/*
+		 * As Zepto doesn't support .data() method for objects
+		 * and it works only in normal browsers
+		 * we assign "options" object directly to the DOM element. FTW!
+		 */
+		if(_isJQ) {
+			jqEl.data('magnificPopup', options);
+		} else {
+			jqEl[0].magnificPopup = options;
+		}
+
+		mfp.addGroup(jqEl, options);
+
+	}
+	return jqEl;
+};
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/src/js/gallery.js b/vendor/dimsemenov/magnific-popup/src/js/gallery.js
new file mode 100644
index 0000000000..f73d68c772
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/src/js/gallery.js
@@ -0,0 +1,164 @@
+/**
+ * Get looped index depending on number of slides
+ */
+var _getLoopedId = function(index) {
+		var numSlides = mfp.items.length;
+		if(index > numSlides - 1) {
+			return index - numSlides;
+		} else  if(index < 0) {
+			return numSlides + index;
+		}
+		return index;
+	},
+	_replaceCurrTotal = function(text, curr, total) {
+		return text.replace(/%curr%/gi, curr + 1).replace(/%total%/gi, total);
+	};
+
+$.magnificPopup.registerModule('gallery', {
+
+	options: {
+		enabled: false,
+		arrowMarkup: '<button title="%title%" type="button" class="mfp-arrow mfp-arrow-%dir%"></button>',
+		preload: [0,2],
+		navigateByImgClick: true,
+		arrows: true,
+
+		tPrev: 'Previous (Left arrow key)',
+		tNext: 'Next (Right arrow key)',
+		tCounter: '%curr% of %total%'
+	},
+
+	proto: {
+		initGallery: function() {
+
+			var gSt = mfp.st.gallery,
+				ns = '.mfp-gallery';
+
+			mfp.direction = true; // true - next, false - prev
+
+			if(!gSt || !gSt.enabled ) return false;
+
+			_wrapClasses += ' mfp-gallery';
+
+			_mfpOn(OPEN_EVENT+ns, function() {
+
+				if(gSt.navigateByImgClick) {
+					mfp.wrap.on('click'+ns, '.mfp-img', function() {
+						if(mfp.items.length > 1) {
+							mfp.next();
+							return false;
+						}
+					});
+				}
+
+				_document.on('keydown'+ns, function(e) {
+					if (e.keyCode === 37) {
+						mfp.prev();
+					} else if (e.keyCode === 39) {
+						mfp.next();
+					}
+				});
+			});
+
+			_mfpOn('UpdateStatus'+ns, function(e, data) {
+				if(data.text) {
+					data.text = _replaceCurrTotal(data.text, mfp.currItem.index, mfp.items.length);
+				}
+			});
+
+			_mfpOn(MARKUP_PARSE_EVENT+ns, function(e, element, values, item) {
+				var l = mfp.items.length;
+				values.counter = l > 1 ? _replaceCurrTotal(gSt.tCounter, item.index, l) : '';
+			});
+
+			_mfpOn('BuildControls' + ns, function() {
+				if(mfp.items.length > 1 && gSt.arrows && !mfp.arrowLeft) {
+					var markup = gSt.arrowMarkup,
+						arrowLeft = mfp.arrowLeft = $( markup.replace(/%title%/gi, gSt.tPrev).replace(/%dir%/gi, 'left') ).addClass(PREVENT_CLOSE_CLASS),
+						arrowRight = mfp.arrowRight = $( markup.replace(/%title%/gi, gSt.tNext).replace(/%dir%/gi, 'right') ).addClass(PREVENT_CLOSE_CLASS);
+
+					arrowLeft.click(function() {
+						mfp.prev();
+					});
+					arrowRight.click(function() {
+						mfp.next();
+					});
+
+					mfp.container.append(arrowLeft.add(arrowRight));
+				}
+			});
+
+			_mfpOn(CHANGE_EVENT+ns, function() {
+				if(mfp._preloadTimeout) clearTimeout(mfp._preloadTimeout);
+
+				mfp._preloadTimeout = setTimeout(function() {
+					mfp.preloadNearbyImages();
+					mfp._preloadTimeout = null;
+				}, 16);
+			});
+
+
+			_mfpOn(CLOSE_EVENT+ns, function() {
+				_document.off(ns);
+				mfp.wrap.off('click'+ns);
+				mfp.arrowRight = mfp.arrowLeft = null;
+			});
+
+		},
+		next: function() {
+			mfp.direction = true;
+			mfp.index = _getLoopedId(mfp.index + 1);
+			mfp.updateItemHTML();
+		},
+		prev: function() {
+			mfp.direction = false;
+			mfp.index = _getLoopedId(mfp.index - 1);
+			mfp.updateItemHTML();
+		},
+		goTo: function(newIndex) {
+			mfp.direction = (newIndex >= mfp.index);
+			mfp.index = newIndex;
+			mfp.updateItemHTML();
+		},
+		preloadNearbyImages: function() {
+			var p = mfp.st.gallery.preload,
+				preloadBefore = Math.min(p[0], mfp.items.length),
+				preloadAfter = Math.min(p[1], mfp.items.length),
+				i;
+
+			for(i = 1; i <= (mfp.direction ? preloadAfter : preloadBefore); i++) {
+				mfp._preloadItem(mfp.index+i);
+			}
+			for(i = 1; i <= (mfp.direction ? preloadBefore : preloadAfter); i++) {
+				mfp._preloadItem(mfp.index-i);
+			}
+		},
+		_preloadItem: function(index) {
+			index = _getLoopedId(index);
+
+			if(mfp.items[index].preloaded) {
+				return;
+			}
+
+			var item = mfp.items[index];
+			if(!item.parsed) {
+				item = mfp.parseEl( index );
+			}
+
+			_mfpTrigger('LazyLoad', item);
+
+			if(item.type === 'image') {
+				item.img = $('<img class="mfp-img" />').on('load.mfploader', function() {
+					item.hasSize = true;
+				}).on('error.mfploader', function() {
+					item.hasSize = true;
+					item.loadError = true;
+					_mfpTrigger('LazyLoadError', item);
+				}).attr('src', item.src);
+			}
+
+
+			item.preloaded = true;
+		}
+	}
+});
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/src/js/iframe.js b/vendor/dimsemenov/magnific-popup/src/js/iframe.js
new file mode 100644
index 0000000000..a339ca06e6
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/src/js/iframe.js
@@ -0,0 +1,102 @@
+
+var IFRAME_NS = 'iframe',
+	_emptyPage = '//about:blank',
+
+	_fixIframeBugs = function(isShowing) {
+		if(mfp.currTemplate[IFRAME_NS]) {
+			var el = mfp.currTemplate[IFRAME_NS].find('iframe');
+			if(el.length) {
+				// reset src after the popup is closed to avoid "video keeps playing after popup is closed" bug
+				if(!isShowing) {
+					el[0].src = _emptyPage;
+				}
+
+				// IE8 black screen bug fix
+				if(mfp.isIE8) {
+					el.css('display', isShowing ? 'block' : 'none');
+				}
+			}
+		}
+	};
+
+$.magnificPopup.registerModule(IFRAME_NS, {
+
+	options: {
+		markup: '<div class="mfp-iframe-scaler">'+
+					'<div class="mfp-close"></div>'+
+					'<iframe class="mfp-iframe" src="//about:blank" frameborder="0" allowfullscreen></iframe>'+
+				'</div>',
+
+		srcAction: 'iframe_src',
+
+		// we don't care and support only one default type of URL by default
+		patterns: {
+			youtube: {
+				index: 'youtube.com',
+				id: 'v=',
+				src: '//www.youtube.com/embed/%id%?autoplay=1'
+			},
+			vimeo: {
+				index: 'vimeo.com/',
+				id: '/',
+				src: '//player.vimeo.com/video/%id%?autoplay=1'
+			},
+			gmaps: {
+				index: '//maps.google.',
+				src: '%id%&output=embed'
+			}
+		}
+	},
+
+	proto: {
+		initIframe: function() {
+			mfp.types.push(IFRAME_NS);
+
+			_mfpOn('BeforeChange', function(e, prevType, newType) {
+				if(prevType !== newType) {
+					if(prevType === IFRAME_NS) {
+						_fixIframeBugs(); // iframe if removed
+					} else if(newType === IFRAME_NS) {
+						_fixIframeBugs(true); // iframe is showing
+					}
+				}// else {
+					// iframe source is switched, don't do anything
+				//}
+			});
+
+			_mfpOn(CLOSE_EVENT + '.' + IFRAME_NS, function() {
+				_fixIframeBugs();
+			});
+		},
+
+		getIframe: function(item, template) {
+			var embedSrc = item.src;
+			var iframeSt = mfp.st.iframe;
+
+			$.each(iframeSt.patterns, function() {
+				if(embedSrc.indexOf( this.index ) > -1) {
+					if(this.id) {
+						if(typeof this.id === 'string') {
+							embedSrc = embedSrc.substr(embedSrc.lastIndexOf(this.id)+this.id.length, embedSrc.length);
+						} else {
+							embedSrc = this.id.call( this, embedSrc );
+						}
+					}
+					embedSrc = this.src.replace('%id%', embedSrc );
+					return false; // break;
+				}
+			});
+
+			var dataObj = {};
+			if(iframeSt.srcAction) {
+				dataObj[iframeSt.srcAction] = embedSrc;
+			}
+			mfp._parseMarkup(template, dataObj, item);
+
+			mfp.updateStatus('ready');
+
+			return template;
+		}
+	}
+});
+
diff --git a/vendor/dimsemenov/magnific-popup/src/js/image.js b/vendor/dimsemenov/magnific-popup/src/js/image.js
new file mode 100644
index 0000000000..f5687c85cc
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/src/js/image.js
@@ -0,0 +1,244 @@
+var _imgInterval,
+	_getTitle = function(item) {
+		if(item.data && item.data.title !== undefined)
+			return item.data.title;
+
+		var src = mfp.st.image.titleSrc;
+
+		if(src) {
+			if($.isFunction(src)) {
+				return src.call(mfp, item);
+			} else if(item.el) {
+				return item.el.attr(src) || '';
+			}
+		}
+		return '';
+	};
+
+$.magnificPopup.registerModule('image', {
+
+	options: {
+		markup: '<div class="mfp-figure">'+
+					'<div class="mfp-close"></div>'+
+					'<figure>'+
+						'<div class="mfp-img"></div>'+
+						'<figcaption>'+
+							'<div class="mfp-bottom-bar">'+
+								'<div class="mfp-title"></div>'+
+								'<div class="mfp-counter"></div>'+
+							'</div>'+
+						'</figcaption>'+
+					'</figure>'+
+				'</div>',
+		cursor: 'mfp-zoom-out-cur',
+		titleSrc: 'title',
+		verticalFit: true,
+		tError: '<a href="%url%">The image</a> could not be loaded.'
+	},
+
+	proto: {
+		initImage: function() {
+			var imgSt = mfp.st.image,
+				ns = '.image';
+
+			mfp.types.push('image');
+
+			_mfpOn(OPEN_EVENT+ns, function() {
+				if(mfp.currItem.type === 'image' && imgSt.cursor) {
+					$(document.body).addClass(imgSt.cursor);
+				}
+			});
+
+			_mfpOn(CLOSE_EVENT+ns, function() {
+				if(imgSt.cursor) {
+					$(document.body).removeClass(imgSt.cursor);
+				}
+				_window.off('resize' + EVENT_NS);
+			});
+
+			_mfpOn('Resize'+ns, mfp.resizeImage);
+			if(mfp.isLowIE) {
+				_mfpOn('AfterChange', mfp.resizeImage);
+			}
+		},
+		resizeImage: function() {
+			var item = mfp.currItem;
+			if(!item || !item.img) return;
+
+			if(mfp.st.image.verticalFit) {
+				var decr = 0;
+				// fix box-sizing in ie7/8
+				if(mfp.isLowIE) {
+					decr = parseInt(item.img.css('padding-top'), 10) + parseInt(item.img.css('padding-bottom'),10);
+				}
+				item.img.css('max-height', mfp.wH-decr);
+			}
+		},
+		_onImageHasSize: function(item) {
+			if(item.img) {
+
+				item.hasSize = true;
+
+				if(_imgInterval) {
+					clearInterval(_imgInterval);
+				}
+
+				item.isCheckingImgSize = false;
+
+				_mfpTrigger('ImageHasSize', item);
+
+				if(item.imgHidden) {
+					if(mfp.content)
+						mfp.content.removeClass('mfp-loading');
+
+					item.imgHidden = false;
+				}
+
+			}
+		},
+
+		/**
+		 * Function that loops until the image has size to display elements that rely on it asap
+		 */
+		findImageSize: function(item) {
+
+			var counter = 0,
+				img = item.img[0],
+				mfpSetInterval = function(delay) {
+
+					if(_imgInterval) {
+						clearInterval(_imgInterval);
+					}
+					// decelerating interval that checks for size of an image
+					_imgInterval = setInterval(function() {
+						if(img.naturalWidth > 0) {
+							mfp._onImageHasSize(item);
+							return;
+						}
+
+						if(counter > 200) {
+							clearInterval(_imgInterval);
+						}
+
+						counter++;
+						if(counter === 3) {
+							mfpSetInterval(10);
+						} else if(counter === 40) {
+							mfpSetInterval(50);
+						} else if(counter === 100) {
+							mfpSetInterval(500);
+						}
+					}, delay);
+				};
+
+			mfpSetInterval(1);
+		},
+
+		getImage: function(item, template) {
+
+			var guard = 0,
+
+				// image load complete handler
+				onLoadComplete = function() {
+					if(item) {
+						if (item.img[0].complete) {
+							item.img.off('.mfploader');
+
+							if(item === mfp.currItem){
+								mfp._onImageHasSize(item);
+
+								mfp.updateStatus('ready');
+							}
+
+							item.hasSize = true;
+							item.loaded = true;
+
+							_mfpTrigger('ImageLoadComplete');
+
+						}
+						else {
+							// if image complete check fails 200 times (20 sec), we assume that there was an error.
+							guard++;
+							if(guard < 200) {
+								setTimeout(onLoadComplete,100);
+							} else {
+								onLoadError();
+							}
+						}
+					}
+				},
+
+				// image error handler
+				onLoadError = function() {
+					if(item) {
+						item.img.off('.mfploader');
+						if(item === mfp.currItem){
+							mfp._onImageHasSize(item);
+							mfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );
+						}
+
+						item.hasSize = true;
+						item.loaded = true;
+						item.loadError = true;
+					}
+				},
+				imgSt = mfp.st.image;
+
+
+			var el = template.find('.mfp-img');
+			if(el.length) {
+				var img = document.createElement('img');
+				img.className = 'mfp-img';
+				if(item.el && item.el.find('img').length) {
+					img.alt = item.el.find('img').attr('alt');
+				}
+				item.img = $(img).on('load.mfploader', onLoadComplete).on('error.mfploader', onLoadError);
+				img.src = item.src;
+
+				// without clone() "error" event is not firing when IMG is replaced by new IMG
+				// TODO: find a way to avoid such cloning
+				if(el.is('img')) {
+					item.img = item.img.clone();
+				}
+
+				img = item.img[0];
+				if(img.naturalWidth > 0) {
+					item.hasSize = true;
+				} else if(!img.width) {
+					item.hasSize = false;
+				}
+			}
+
+			mfp._parseMarkup(template, {
+				title: _getTitle(item),
+				img_replaceWith: item.img
+			}, item);
+
+			mfp.resizeImage();
+
+			if(item.hasSize) {
+				if(_imgInterval) clearInterval(_imgInterval);
+
+				if(item.loadError) {
+					template.addClass('mfp-loading');
+					mfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );
+				} else {
+					template.removeClass('mfp-loading');
+					mfp.updateStatus('ready');
+				}
+				return template;
+			}
+
+			mfp.updateStatus('loading');
+			item.loading = true;
+
+			if(!item.hasSize) {
+				item.imgHidden = true;
+				template.addClass('mfp-loading');
+				mfp.findImageSize(item);
+			}
+
+			return template;
+		}
+	}
+});
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/src/js/inline.js b/vendor/dimsemenov/magnific-popup/src/js/inline.js
new file mode 100644
index 0000000000..299e9a4ba2
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/src/js/inline.js
@@ -0,0 +1,66 @@
+
+var INLINE_NS = 'inline',
+	_hiddenClass,
+	_inlinePlaceholder,
+	_lastInlineElement,
+	_putInlineElementsBack = function() {
+		if(_lastInlineElement) {
+			_inlinePlaceholder.after( _lastInlineElement.addClass(_hiddenClass) ).detach();
+			_lastInlineElement = null;
+		}
+	};
+
+$.magnificPopup.registerModule(INLINE_NS, {
+	options: {
+		hiddenClass: 'hide', // will be appended with `mfp-` prefix
+		markup: '',
+		tNotFound: 'Content not found'
+	},
+	proto: {
+
+		initInline: function() {
+			mfp.types.push(INLINE_NS);
+
+			_mfpOn(CLOSE_EVENT+'.'+INLINE_NS, function() {
+				_putInlineElementsBack();
+			});
+		},
+
+		getInline: function(item, template) {
+
+			_putInlineElementsBack();
+
+			if(item.src) {
+				var inlineSt = mfp.st.inline,
+					el = $(item.src);
+
+				if(el.length) {
+
+					// If target element has parent - we replace it with placeholder and put it back after popup is closed
+					var parent = el[0].parentNode;
+					if(parent && parent.tagName) {
+						if(!_inlinePlaceholder) {
+							_hiddenClass = inlineSt.hiddenClass;
+							_inlinePlaceholder = _getEl(_hiddenClass);
+							_hiddenClass = 'mfp-'+_hiddenClass;
+						}
+						// replace target inline element with placeholder
+						_lastInlineElement = el.after(_inlinePlaceholder).detach().removeClass(_hiddenClass);
+					}
+
+					mfp.updateStatus('ready');
+				} else {
+					mfp.updateStatus('error', inlineSt.tNotFound);
+					el = $('<div>');
+				}
+
+				item.inlineElement = el;
+				return el;
+			}
+
+			mfp.updateStatus('ready');
+			mfp._parseMarkup(template, {}, item);
+			return template;
+		}
+	}
+});
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/src/js/retina.js b/vendor/dimsemenov/magnific-popup/src/js/retina.js
new file mode 100644
index 0000000000..f18fc96462
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/src/js/retina.js
@@ -0,0 +1,35 @@
+
+var RETINA_NS = 'retina';
+
+$.magnificPopup.registerModule(RETINA_NS, {
+	options: {
+		replaceSrc: function(item) {
+			return item.src.replace(/\.\w+$/, function(m) { return '@2x' + m; });
+		},
+		ratio: 1 // Function or number.  Set to 1 to disable.
+	},
+	proto: {
+		initRetina: function() {
+			if(window.devicePixelRatio > 1) {
+
+				var st = mfp.st.retina,
+					ratio = st.ratio;
+
+				ratio = !isNaN(ratio) ? ratio : ratio();
+
+				if(ratio > 1) {
+					_mfpOn('ImageHasSize' + '.' + RETINA_NS, function(e, item) {
+						item.img.css({
+							'max-width': item.img[0].naturalWidth / ratio,
+							'width': '100%'
+						});
+					});
+					_mfpOn('ElementParse' + '.' + RETINA_NS, function(e, item) {
+						item.src = st.replaceSrc(item, ratio);
+					});
+				}
+			}
+
+		}
+	}
+});
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/src/js/zoom.js b/vendor/dimsemenov/magnific-popup/src/js/zoom.js
new file mode 100644
index 0000000000..5894a66c75
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/src/js/zoom.js
@@ -0,0 +1,183 @@
+var hasMozTransform,
+	getHasMozTransform = function() {
+		if(hasMozTransform === undefined) {
+			hasMozTransform = document.createElement('p').style.MozTransform !== undefined;
+		}
+		return hasMozTransform;
+	};
+
+$.magnificPopup.registerModule('zoom', {
+
+	options: {
+		enabled: false,
+		easing: 'ease-in-out',
+		duration: 300,
+		opener: function(element) {
+			return element.is('img') ? element : element.find('img');
+		}
+	},
+
+	proto: {
+
+		initZoom: function() {
+			var zoomSt = mfp.st.zoom,
+				ns = '.zoom',
+				image;
+
+			if(!zoomSt.enabled || !mfp.supportsTransition) {
+				return;
+			}
+
+			var duration = zoomSt.duration,
+				getElToAnimate = function(image) {
+					var newImg = image.clone().removeAttr('style').removeAttr('class').addClass('mfp-animated-image'),
+						transition = 'all '+(zoomSt.duration/1000)+'s ' + zoomSt.easing,
+						cssObj = {
+							position: 'fixed',
+							zIndex: 9999,
+							left: 0,
+							top: 0,
+							'-webkit-backface-visibility': 'hidden'
+						},
+						t = 'transition';
+
+					cssObj['-webkit-'+t] = cssObj['-moz-'+t] = cssObj['-o-'+t] = cssObj[t] = transition;
+
+					newImg.css(cssObj);
+					return newImg;
+				},
+				showMainContent = function() {
+					mfp.content.css('visibility', 'visible');
+				},
+				openTimeout,
+				animatedImg;
+
+			_mfpOn('BuildControls'+ns, function() {
+				if(mfp._allowZoom()) {
+
+					clearTimeout(openTimeout);
+					mfp.content.css('visibility', 'hidden');
+
+					// Basically, all code below does is clones existing image, puts in on top of the current one and animated it
+
+					image = mfp._getItemToZoom();
+
+					if(!image) {
+						showMainContent();
+						return;
+					}
+
+					animatedImg = getElToAnimate(image);
+
+					animatedImg.css( mfp._getOffset() );
+
+					mfp.wrap.append(animatedImg);
+
+					openTimeout = setTimeout(function() {
+						animatedImg.css( mfp._getOffset( true ) );
+						openTimeout = setTimeout(function() {
+
+							showMainContent();
+
+							setTimeout(function() {
+								animatedImg.remove();
+								image = animatedImg = null;
+								_mfpTrigger('ZoomAnimationEnded');
+							}, 16); // avoid blink when switching images
+
+						}, duration); // this timeout equals animation duration
+
+					}, 16); // by adding this timeout we avoid short glitch at the beginning of animation
+
+
+					// Lots of timeouts...
+				}
+			});
+			_mfpOn(BEFORE_CLOSE_EVENT+ns, function() {
+				if(mfp._allowZoom()) {
+
+					clearTimeout(openTimeout);
+
+					mfp.st.removalDelay = duration;
+
+					if(!image) {
+						image = mfp._getItemToZoom();
+						if(!image) {
+							return;
+						}
+						animatedImg = getElToAnimate(image);
+					}
+
+					animatedImg.css( mfp._getOffset(true) );
+					mfp.wrap.append(animatedImg);
+					mfp.content.css('visibility', 'hidden');
+
+					setTimeout(function() {
+						animatedImg.css( mfp._getOffset() );
+					}, 16);
+				}
+
+			});
+
+			_mfpOn(CLOSE_EVENT+ns, function() {
+				if(mfp._allowZoom()) {
+					showMainContent();
+					if(animatedImg) {
+						animatedImg.remove();
+					}
+					image = null;
+				}
+			});
+		},
+
+		_allowZoom: function() {
+			return mfp.currItem.type === 'image';
+		},
+
+		_getItemToZoom: function() {
+			if(mfp.currItem.hasSize) {
+				return mfp.currItem.img;
+			} else {
+				return false;
+			}
+		},
+
+		// Get element postion relative to viewport
+		_getOffset: function(isLarge) {
+			var el;
+			if(isLarge) {
+				el = mfp.currItem.img;
+			} else {
+				el = mfp.st.zoom.opener(mfp.currItem.el || mfp.currItem);
+			}
+
+			var offset = el.offset();
+			var paddingTop = parseInt(el.css('padding-top'),10);
+			var paddingBottom = parseInt(el.css('padding-bottom'),10);
+			offset.top -= ( $(window).scrollTop() - paddingTop );
+
+
+			/*
+
+			Animating left + top + width/height looks glitchy in Firefox, but perfect in Chrome. And vice-versa.
+
+			 */
+			var obj = {
+				width: el.width(),
+				// fix Zepto height+padding issue
+				height: (_isJQ ? el.innerHeight() : el[0].offsetHeight) - paddingBottom - paddingTop
+			};
+
+			// I hate to do this, but there is no another option
+			if( getHasMozTransform() ) {
+				obj['-moz-transform'] = obj['transform'] = 'translate(' + offset.left + 'px,' + offset.top + 'px)';
+			} else {
+				obj.left = offset.left;
+				obj.top = offset.top;
+			}
+			return obj;
+		}
+
+	}
+});
+
diff --git a/vendor/dimsemenov/magnific-popup/website/_includes/analytics.html b/vendor/dimsemenov/magnific-popup/website/_includes/analytics.html
new file mode 100644
index 0000000000..b36899f4d2
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/_includes/analytics.html
@@ -0,0 +1,24 @@
+{% if site.url == 'local' %}
+  <!-- analytics removed -->
+{% else %}
+<!-- Analytics start -->
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+    _gaq.push(['_setAccount', 'UA-25969065-1']);
+    _gaq.push(['_trackPageview']);
+
+    (function() {
+      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+      ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+    })();
+
+    function recordOutboundLink(link, category, action) {
+      _gat._getTrackerByName()._trackEvent(category, action);
+      setTimeout('document.location = "' + link.href + '"', 100);
+    }
+</script>
+
+<!-- ya metrika -->
+<script type="text/javascript">(function (d, w, c) { (w[c] = w[c] || []).push(function() { try { w.yaCounter11382601 = new Ya.Metrika({id:11382601, webvisor:true, clickmap:true, trackLinks:true, accurateTrackBounce:true}); } catch(e) { } }); var n = d.getElementsByTagName("script")[0], s = d.createElement("script"), f = function () { n.parentNode.insertBefore(s, n); }; s.type = "text/javascript"; s.async = true; s.src = (d.location.protocol == "https:" ? "https:" : "http:") + "//mc.yandex.ru/metrika/watch.js"; if (w.opera == "[object Opera]") { d.addEventListener("DOMContentLoaded", f, false); } else { f(); } })(document, window, "yandex_metrika_callbacks");</script><noscript><div><img src="//mc.yandex.ru/watch/11382601" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+{% endif %}
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/website/_includes/build-tool.html b/vendor/dimsemenov/magnific-popup/website/_includes/build-tool.html
new file mode 100644
index 0000000000..386a745ba7
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/_includes/build-tool.html
@@ -0,0 +1,273 @@
+<!-- Basic idea of such build tool is stolen from modernizr.com -->
+<div id="mfp-build-tool" class="mfp-hide">
+  <h2>Magnific Popup v{{site.mfpversion}} Build Tool</h2>
+  <form id="mfp-build-form">
+    <p class="help-block">Here you can generate optimized version of main JS file. Please note that CSS you should download directly: <a target="_blank"  href="https://raw.github.com/dimsemenov/Magnific-Popup/master/src/css/main.scss">Sass version</a> or <a target="_blank" href="https://raw.github.com/dimsemenov/Magnific-Popup/master/dist/magnific-popup.css">CSS version</a>.</p>
+     <label class="checkbox">
+      <input type="checkbox" name="inline" checked> Inline
+    </label>
+    <label class="checkbox">
+      <input type="checkbox" name="image" checked> Image
+    </label>
+    <label class="checkbox">
+      <input type="checkbox" name="ajax" checked> Ajax
+    </label>
+    <label class="checkbox">
+      <input type="checkbox" name="iframe" checked> Iframe
+    </label>
+    <label class="checkbox">
+      <input type="checkbox" name="gallery" checked> Gallery
+    </label>
+    <label class="checkbox">
+      <input type="checkbox" name="retina" checked> High-DPI (retina) support for image type
+    </label>
+    <label class="checkbox">
+      <input type="checkbox" name="imagezoom" checked> Image zoom animation
+    </label>
+  </form> 
+     
+  <br/>
+  <div>
+    <button id="mfp-build-button">Generate build</button>  
+  	<label class="checkbox">
+      <input id="mfp-minify" type="checkbox" name="minify" checked="checked"> Minify code
+    </label> 
+  </div>
+  <br/>
+  <p id="mfp-build-status" style="display:none"></p>
+  <br/>
+  <textarea id="mfp-build-tool-out" style="width: 100%; height: 300px; display:none;"></textarea>
+</div>
+
+
+
+<script type="text/javascript">
+	$(document).ready(function($) {
+		
+		$('.mfp-build-tool-link').magnificPopup({closeBtnInside:true, type:'inline', midClick: true});
+
+		var h = window.location.hash;
+		if(h.indexOf('build=') > -1) {
+			var formInputs = $('#mfp-build-form input');
+			
+		    if(h.indexOf('&') > 0) {
+		       h = h.substr(0, h.indexOf('&'));
+		    }
+		    var items = h.substr(h.indexOf('build=') + 6, h.length).split('+');
+		    for(var i = 0; i < items.length; i++) {
+		      var name = items[i];
+		      if(name) {
+		        formInputs.filter('[name="' +name+ '"]').addClass('present');
+		      }
+		    }
+	    	formInputs.not('.present').prop('checked', false);
+    	}
+
+
+	    var button = $('#mfp-build-button').click(function(e) {
+	    	e.preventDefault();
+
+	    	button.attr('disabled', 'disabled');
+
+	    	var statusTimeout;
+	    	var setStatus = function(msg, type) {
+	    		clearTimeout(statusTimeout);
+	    		$('#mfp-build-status').html('<span class="'+type+'">'+msg+'</span>').show();
+	    	};
+	    	setStatus('Wait a moment please...', 'progress');
+	    	$('#mfp-build-tool-out').val( '' );
+
+	    	
+
+	    	var minify = $('#mfp-minify')[0].checked;
+	    	var removeModule = function(source, key) {
+			        source = source.replace(new RegExp("\\/\\*>>"+key+"\\*\\/[\\s|\\S]*?\\/\\*>>"+key+"\\*\\/", "ig"), "");
+			        return source;
+			    };
+
+
+
+
+
+			var onError = function() {
+				setStatus("Error: Build tool wasn't able to GET the js file. Please try again or make file by yourself using Grunt.", 'error');
+			};
+
+			var version = '{{site.mfpversion}}';
+			var loadedScripts = [];
+		    var onScriptsLoaded = function() {
+
+		    	
+			    var src = loadedScripts[0];
+
+			    var hash = '',
+		            name;
+
+		        $('#mfp-build-form input').each(function() {
+		          name = $(this).attr('name');
+
+		          if( this.checked ) {
+		            hash += name + '+';
+		          } else {
+		            src = removeModule(src, name);
+		          }
+
+		        });
+
+		        var output = '';
+
+		        if(hash) {
+		        	hash = hash.substr(0, hash.length-1);
+		        }
+		        
+		        if(minify) {
+					src = uglify(src, ["--extra","--unsafe"]);
+					output = '// Magnific Popup v'+version+' by Dmitry Semenov' + "\n";
+		        	output += '// http://bit.ly/magnific-popup' + (hash ? '#build=' + hash : '') + "\n" + src;
+		        } else {
+		        	output = src;
+		        }
+		        
+		        if(!hash) {
+		        	hash = 'core';
+		        } else {
+		       		hash = 'core+' + hash;
+		        }
+
+		        $('#mfp-build-tool-out').val( output ).show();
+
+		        button.removeAttr('disabled');
+
+		        setStatus('Magnific Popup main js file successfully generated! You can copy generated code from textarea below.' + (hash ? (' Your build includes: <strong>' + hash.split('+').join(', ')) + '</strong>. ' : ''), 'success');
+		    };
+
+
+		    $.ajax({
+			 	url:"dist/jquery.magnific-popup.js?v="+version, 
+			 	dataType: 'text',
+			 	success: function( data) {
+			 		loadedScripts[0] = data;
+			 		if(loadedScripts[1]) {
+			 			onScriptsLoaded();
+			 		}
+			 	},
+			 	error: onError
+			});
+
+			$.ajax({
+			 	url:"third-party-libs/uglify.js", 
+			 	dataType: 'script',
+			 	cache: true,
+			 	success: function(data) {
+			 		loadedScripts[1] = data;
+			 		if(loadedScripts[0]) {
+			 			onScriptsLoaded();
+			 		}
+			 	},
+			 	error: onError
+			});
+
+		});
+		/* build tool END */
+
+
+
+
+
+
+		/**
+		 * Popup with source code for each example
+		 */
+		var example,
+		      getCode,
+		      CSS,
+		      JS,
+		      HTML,
+		      highlighterLoaded;
+
+		  var formatCode = function (str) {
+		      if(str) {
+		        // replace special chars
+		        str = str.replace(/[&<>"']/g, function($0) {
+		            return "&" + {"&":"amp", "<":"lt", ">":"gt", '"':"quot", "'":"#39"}[$0] + ";";
+		        });
+		        
+		        // remove spaces from each line based on spaces on first line
+		        var firstLineLength = str.match(/^(\s*)/)[1].length;
+		        var regExp = new RegExp('^ {' + (firstLineLength-1) + '}', "gm");
+		        str = str.replace(regExp, '');
+
+		        // replace spaces with tabs
+		        str = str.replace(/  /g,'\t');
+
+		        str = $.trim(str);
+		      }
+		      return str;
+		    };
+
+		  var highlight = function() {
+		    hljs.highlightBlock(JS.find('code')[0]);
+
+		    if(CSS)
+		      hljs.highlightBlock(CSS.find('code')[0]);
+
+		    if(HTML)
+		      hljs.highlightBlock(HTML.find('code')[0]);
+		  };
+
+		$('.example').each(function() {
+		    $(this).find('h3').click(function() {
+				var example = $(this).parent('.example');
+				var getCodeWindow = $('<div class="get-code-window"><h1>'+example.find('h3').text()+'</h1></div>');
+				JS = $('<div class="highlight"><pre><code class="javascript">'+formatCode(example.find('script').eq(0).html())+'</code></pre></div>');
+
+				CSS = example.find('style');
+				if(CSS.length) {
+					CSS = $('<div class="highlight"><pre><code class="css">'+formatCode(CSS.html())+'</code></pre></div>');
+				} else {
+					CSS = '';
+				}
+
+				HTML = example.find('.html-code');
+				if(HTML.length) {
+					HTML = $('<div class="highlight"><pre><code class="xml html">'+formatCode(HTML.html())+'</code></pre></div>');
+				} else {
+					HTML = '';
+				}
+
+				if(!highlighterLoaded) {
+					highlighterLoaded = true;
+					var script = document.createElement("script"),
+						$script = $(script);
+						script.src = 'http://yandex.st/highlightjs/7.3/highlight.min.js';
+					if(window.jQuery) {
+						$.getScript(script.src , function() {
+							highlight();
+						});
+					} else {
+						$(script).appendTo("head").on("load", function() {
+							highlight();
+						});
+					}
+				} else {
+					highlight();
+				}
+
+				getCodeWindow.append(JS);
+				getCodeWindow.append(HTML);
+				getCodeWindow.append(CSS);
+
+				getCodeWindow.append('<p>Code above is dynamically generated directly from the source of this example.<br/>Please read <a href="documentation.html">the documentation</a> before using it.</p>');
+
+				$.magnificPopup.open({
+					items: {
+						src: getCodeWindow,
+						type: 'inline'
+					}
+				});
+
+		});
+
+	});
+});
+</script>
diff --git a/vendor/dimsemenov/magnific-popup/website/_includes/examples.html b/vendor/dimsemenov/magnific-popup/website/_includes/examples.html
new file mode 100644
index 0000000000..0d510032fa
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/_includes/examples.html
@@ -0,0 +1,676 @@
+{% if site.url == 'local' %}
+   <!-- <script  src="third-party-libs/zepto.js"></script> -->
+   <script>
+    document.write('<script src=third-party-libs/' +
+    ('__proto__' in {} ? 'zepto' : 'jquery') +
+    '.min.js><\/script>')
+  </script>
+  <script src="dist/jquery.magnific-popup.js?v={{site.mfpversion}}"></script>
+  
+{% else %}
+  <script>
+    document.write('<script src=third-party-libs/' +
+    ('__proto__' in {} ? 'zepto' : 'jquery') +
+    '.min.js><\/script>')
+  </script>
+  <script src="dist/jquery.magnific-popup.min.js?v={{site.mfpversion}}"></script>
+{% endif %}
+
+<!--
+
+Each '.example' block contains JS, HTML and optionally CSS for popup. 
+
+-->
+<h2 id="examples">Examples</h2>
+
+<div class="grid-c">
+  <div class="example gc3">
+    <h3>Single image lightbox</h3> 
+    <p>Three simple popups with different scaling settings.<br/>
+      1 &mdash; fits horizontally and vertically,<br/>
+      2 &mdash; only horizontally,<br/>
+      3 &mdash; no gaps, zoom animation, close icon in top-right corner.<br/>
+    </p>
+    <div class="html-code grid-of-images">
+      <a class="image-popup-vertical-fit" href="http://farm9.staticflickr.com/8241/8589392310_7b6127e243_b.jpg" title="Caption. Can be aligned to any side and contain any HTML.">
+        <img src="http://farm9.staticflickr.com/8241/8589392310_7b6127e243_s.jpg" width="75" height="75" />
+      </a>
+      <a class="image-popup-fit-width" href="http://farm9.staticflickr.com/8379/8588290361_ecf8c27021_b.jpg" title="This image fits only horizontally.">
+        <img src="http://farm9.staticflickr.com/8379/8588290361_ecf8c27021_s.jpg" width="75" height="75" />
+      </a>
+      <a class="image-popup-no-margins" href="http://farm4.staticflickr.com/3721/9207329484_ba28755ec4_o.jpg">
+        <img src="http://farm4.staticflickr.com/3721/9207329484_ba28755ec4_o.jpg" width="107" height="75" />
+      </a>
+    </div>
+    <script type="text/javascript">
+      $(document).ready(function() {
+
+        $('.image-popup-vertical-fit').magnificPopup({
+          type: 'image',
+          closeOnContentClick: true,
+          mainClass: 'mfp-img-mobile',
+          image: {
+            verticalFit: true
+          }
+          
+        });
+
+        $('.image-popup-fit-width').magnificPopup({
+          type: 'image',
+          closeOnContentClick: true,
+          image: {
+            verticalFit: false
+          }
+        });
+
+        $('.image-popup-no-margins').magnificPopup({
+          type: 'image',
+          closeOnContentClick: true,
+          closeBtnInside: false,
+          fixedContentPos: true,
+          mainClass: 'mfp-no-margins mfp-with-zoom', // class to remove default margin from left and right side
+          image: {
+            verticalFit: true
+          },
+          zoom: {
+            enabled: true,
+            duration: 300 // don't foget to change the duration also in CSS
+          }
+        });
+
+      });
+    </script>
+    <style type="text/css">
+    /* padding-bottom and top for image */
+    .mfp-no-margins img.mfp-img {
+      padding: 0;
+    }
+    /* position of shadow behind the image */
+    .mfp-no-margins .mfp-figure:after {
+      top: 0;
+      bottom: 0;
+    }
+    /* padding for main container */
+    .mfp-no-margins .mfp-container {
+      padding: 0;
+    }
+
+
+    /* 
+
+    for zoom animation 
+    uncomment this part if you haven't added this code anywhere else
+
+    */
+    /*
+    
+    .mfp-with-zoom .mfp-container,
+    .mfp-with-zoom.mfp-bg {
+      opacity: 0;
+      -webkit-backface-visibility: hidden;
+      -webkit-transition: all 0.3s ease-out; 
+      -moz-transition: all 0.3s ease-out; 
+      -o-transition: all 0.3s ease-out; 
+      transition: all 0.3s ease-out;
+    }
+    
+    .mfp-with-zoom.mfp-ready .mfp-container {
+        opacity: 1;
+    }
+    .mfp-with-zoom.mfp-ready.mfp-bg {
+        opacity: 0.8;
+    }
+    
+    .mfp-with-zoom.mfp-removing .mfp-container, 
+    .mfp-with-zoom.mfp-removing.mfp-bg {
+      opacity: 0;
+    }
+    */
+    </style>
+  </div>
+
+
+
+
+
+  <div class="example gc3">
+    <h3>Lightbox gallery</h3>
+    <p>You may put any HTML content in each gallery item and <a href="http://codepen.io/dimsemenov/pen/vKrqs">mix content types</a>. In this example lazy-loading of images is enabled for the next image based on move direction. If you wish to add touch-swipe support, check <a href="http://coding.smashingmagazine.com/2013/05/02/truly-responsive-lightbox/">my article</a> on the Smashing Magazine, or <a href="http://photoswipe.com">new PhotoSwipe</a> script.</p>
+    <div class="html-code grid-of-images">
+      <div class="popup-gallery">
+        <a href="http://farm9.staticflickr.com/8242/8558295633_f34a55c1c6_b.jpg" title="The Cleaner"><img src="http://farm9.staticflickr.com/8242/8558295633_f34a55c1c6_s.jpg" width="75" height="75" /></a>
+        <a href="http://farm9.staticflickr.com/8382/8558295631_0f56c1284f_b.jpg" title="Winter Dance"><img src="http://farm9.staticflickr.com/8382/8558295631_0f56c1284f_s.jpg" width="75" height="75" /></a>
+        <a href="http://farm9.staticflickr.com/8225/8558295635_b1c5ce2794_b.jpg" title="The Uninvited Guest"><img src="http://farm9.staticflickr.com/8225/8558295635_b1c5ce2794_s.jpg" width="75" height="75" /></a>
+        <a href="http://farm9.staticflickr.com/8383/8563475581_df05e9906d_b.jpg" title="Oh no, not again!"><img src="http://farm9.staticflickr.com/8383/8563475581_df05e9906d_s.jpg" width="75" height="75" /></a>
+        <a href="http://farm9.staticflickr.com/8235/8559402846_8b7f82e05d_b.jpg" title="Swan Lake"><img src="http://farm9.staticflickr.com/8235/8559402846_8b7f82e05d_s.jpg" width="75" height="75" /></a>
+        <a href="http://farm9.staticflickr.com/8235/8558295467_e89e95e05a_b.jpg" title="The Shake"><img src="http://farm9.staticflickr.com/8235/8558295467_e89e95e05a_s.jpg" width="75" height="75" /></a>
+        <a href="http://farm9.staticflickr.com/8378/8559402848_9fcd90d20b_b.jpg" title="Who's that, mommy?"><img src="http://farm9.staticflickr.com/8378/8559402848_9fcd90d20b_s.jpg" width="75" height="75" /></a>
+      </div>
+    </div>
+    <script type="text/javascript">
+      $(document).ready(function() {
+        $('.popup-gallery').magnificPopup({
+          delegate: 'a',
+          type: 'image',
+          tLoading: 'Loading image #%curr%...',
+          mainClass: 'mfp-img-mobile',
+          gallery: {
+            enabled: true,
+            navigateByImgClick: true,
+            preload: [0,1] // Will preload 0 - before current, and 1 after the current image
+          },
+          image: {
+            tError: '<a href="%url%">The image #%curr%</a> could not be loaded.',
+            titleSrc: function(item) {
+              return item.el.attr('title') + '<small>by Marsel Van Oosten</small>';
+            }
+          }
+        });
+      });
+    </script>
+  </div>
+
+
+
+
+
+  <div class="example gc3">
+    <h3>Zoom-gallery</h3> 
+    <p>If you wish to open the popup only after image is fully loaded, you may preload image via JS. Or use scaled down image instead of thumbnail. Zoom effect works only with images, for now.</p>
+    <div class="html-code grid-of-images">
+      <div class="zoom-gallery">
+        <!--
+
+        Width/height ratio of thumbnail and the main image must match to avoid glitches.
+
+        If ratios are different, you may add CSS3 opacity transition to the main image to make the change less noticable.
+
+         -->
+        <a href="http://farm4.staticflickr.com/3763/9204547649_0472680945_o.jpg" data-source="http://500px.com/photo/32736307" title="Into The Blue" style="width:193px;height:125px;">
+          <img src="http://farm4.staticflickr.com/3763/9204547649_7de96ee188_t.jpg" width="193" height="125" />
+        </a>
+        <a href="http://farm3.staticflickr.com/2856/9207329420_7f2a668b06_o.jpg" data-source="http://500px.com/photo/32554131" title="Light Sabre" style="width:82px;height:125px;">
+          <img src="http://farm3.staticflickr.com/2856/9207329420_e485948b01_t.jpg" width="82px" height="125" />
+        </a>
+      </div>
+    </div>
+    <script type="text/javascript">
+      $(document).ready(function() {
+        $('.zoom-gallery').magnificPopup({
+          delegate: 'a',
+          type: 'image',
+          closeOnContentClick: false,
+          closeBtnInside: false,
+          mainClass: 'mfp-with-zoom mfp-img-mobile',
+          image: {
+            verticalFit: true,
+            titleSrc: function(item) {
+              return item.el.attr('title') + ' &middot; <a class="image-source-link" href="'+item.el.attr('data-source')+'" target="_blank">image source</a>';
+            }
+          },
+          gallery: {
+            enabled: true
+          },
+          zoom: {
+            enabled: true,
+            duration: 300, // don't foget to change the duration also in CSS
+            opener: function(element) {
+              return element.find('img');
+            }
+          }
+          
+        });
+      });
+    </script>
+    <style type="text/css">
+    .image-source-link {
+      color: #98C3D1;
+    }
+
+    .mfp-with-zoom .mfp-container,
+    .mfp-with-zoom.mfp-bg {
+      opacity: 0;
+      -webkit-backface-visibility: hidden;
+      /* ideally, transition speed should match zoom duration */
+      -webkit-transition: all 0.3s ease-out; 
+      -moz-transition: all 0.3s ease-out; 
+      -o-transition: all 0.3s ease-out; 
+      transition: all 0.3s ease-out;
+    }
+    
+    .mfp-with-zoom.mfp-ready .mfp-container {
+        opacity: 1;
+    }
+    .mfp-with-zoom.mfp-ready.mfp-bg {
+        opacity: 0.8;
+    }
+    
+    .mfp-with-zoom.mfp-removing .mfp-container, 
+    .mfp-with-zoom.mfp-removing.mfp-bg {
+      opacity: 0;
+    }
+
+
+    </style>
+  </div>
+
+
+
+
+
+  <div class="example gc3">
+    <h3>Popup with video or map</h3>
+    <p>In this example lightboxes are automatically disabled on small screen size and default behavior of link is triggered.</p>
+    <div class="html-code">
+      <a class="popup-youtube" href="http://www.youtube.com/watch?v=0O2aH4XLbto">Open YouTube video</a><br/>
+      <a class="popup-vimeo" href="https://vimeo.com/45830194" >Open Vimeo video</a><br/>
+      <a class="popup-gmaps" href="https://maps.google.com/maps?q=221B+Baker+Street,+London,+United+Kingdom&hl=en&t=v&hnear=221B+Baker+St,+London+NW1+6XE,+United+Kingdom">Open Google Map</a>
+    </div>
+    <style type="text/css">
+      /**
+       * Simple fade transition,
+       */
+      .mfp-fade.mfp-bg {
+        opacity: 0;
+        -webkit-transition: all 0.15s ease-out; 
+        -moz-transition: all 0.15s ease-out; 
+        transition: all 0.15s ease-out;
+      }
+      .mfp-fade.mfp-bg.mfp-ready {
+        opacity: 0.8;
+      }
+      .mfp-fade.mfp-bg.mfp-removing {
+        opacity: 0;
+      }
+
+      .mfp-fade.mfp-wrap .mfp-content {
+        opacity: 0;
+        -webkit-transition: all 0.15s ease-out; 
+        -moz-transition: all 0.15s ease-out; 
+        transition: all 0.15s ease-out;
+      }
+      .mfp-fade.mfp-wrap.mfp-ready .mfp-content {
+        opacity: 1;
+      }
+      .mfp-fade.mfp-wrap.mfp-removing .mfp-content {
+        opacity: 0;
+      }
+    </style>
+    <script type="text/javascript">
+      $(document).ready(function() {
+        $('.popup-youtube, .popup-vimeo, .popup-gmaps').magnificPopup({
+          disableOn: 700,
+          type: 'iframe',
+          mainClass: 'mfp-fade',
+          removalDelay: 160,
+          preloader: false,
+
+          fixedContentPos: false
+        });
+      });
+    </script>
+  </div>
+
+
+
+
+
+  <div class="example gc3">
+    <h3>Dialog with CSS animation</h3>
+    <p>Animations are added with simple CSS transitions, you can make them look however you wish.<br/>More <a href="http://codepen.io/dimsemenov/pen/GAIkt">animation effects on CodePen</a>.</p>
+    <div class="html-code">
+      <a class="popup-with-zoom-anim" href="#small-dialog" >Open with fade-zoom animation</a><br/>
+      <a class="popup-with-move-anim" href="#small-dialog" >Open with fade-slide animation</a>
+
+      <!-- dialog itself, mfp-hide class is required to make dialog hidden -->
+      <div id="small-dialog" class="zoom-anim-dialog mfp-hide">
+        <h1>Dialog example</h1>
+        <p>This is dummy copy. It is not meant to be read. It has been placed here solely to demonstrate the look and feel of finished, typeset text. Only for show. He who searches for meaning here will be sorely disappointed.</p>
+      </div>
+    </div>
+
+    <script type="text/javascript">
+      $(document).ready(function() {
+        $('.popup-with-zoom-anim').magnificPopup({
+          type: 'inline',
+
+          fixedContentPos: false,
+          fixedBgPos: true,
+
+          overflowY: 'auto',
+
+          closeBtnInside: true,
+          preloader: false,
+          
+          midClick: true,
+          removalDelay: 300,
+          mainClass: 'my-mfp-zoom-in'
+        });
+
+        $('.popup-with-move-anim').magnificPopup({
+          type: 'inline',
+
+          fixedContentPos: false,
+          fixedBgPos: true,
+
+          overflowY: 'auto',
+
+          closeBtnInside: true,
+          preloader: false,
+          
+          midClick: true,
+          removalDelay: 300,
+          mainClass: 'my-mfp-slide-bottom'
+        });
+      });
+    </script>
+
+    <style type="text/css">
+      /* Styles for dialog window */
+      #small-dialog {
+        background: white;
+        padding: 20px 30px;
+        text-align: left;
+        max-width: 400px;
+        margin: 40px auto;
+        position: relative;
+      }
+
+
+      /**
+       * Fade-zoom animation for first dialog
+       */
+      
+      /* start state */
+      .my-mfp-zoom-in .zoom-anim-dialog {
+        opacity: 0;
+
+        -webkit-transition: all 0.2s ease-in-out; 
+        -moz-transition: all 0.2s ease-in-out; 
+        -o-transition: all 0.2s ease-in-out; 
+        transition: all 0.2s ease-in-out; 
+
+
+
+        -webkit-transform: scale(0.8); 
+        -moz-transform: scale(0.8); 
+        -ms-transform: scale(0.8); 
+        -o-transform: scale(0.8); 
+        transform: scale(0.8); 
+      }
+
+      /* animate in */
+      .my-mfp-zoom-in.mfp-ready .zoom-anim-dialog {
+        opacity: 1;
+
+        -webkit-transform: scale(1); 
+        -moz-transform: scale(1); 
+        -ms-transform: scale(1); 
+        -o-transform: scale(1); 
+        transform: scale(1); 
+      }
+
+      /* animate out */
+      .my-mfp-zoom-in.mfp-removing .zoom-anim-dialog {
+        -webkit-transform: scale(0.8); 
+        -moz-transform: scale(0.8); 
+        -ms-transform: scale(0.8); 
+        -o-transform: scale(0.8); 
+        transform: scale(0.8); 
+
+        opacity: 0;
+      }
+
+      /* Dark overlay, start state */
+      .my-mfp-zoom-in.mfp-bg {
+        opacity: 0;
+        -webkit-transition: opacity 0.3s ease-out; 
+        -moz-transition: opacity 0.3s ease-out; 
+        -o-transition: opacity 0.3s ease-out; 
+        transition: opacity 0.3s ease-out;
+      }
+      /* animate in */
+      .my-mfp-zoom-in.mfp-ready.mfp-bg {
+        opacity: 0.8;
+      }
+      /* animate out */
+      .my-mfp-zoom-in.mfp-removing.mfp-bg {
+        opacity: 0;
+      }
+
+
+
+      /**
+       * Fade-move animation for second dialog
+       */
+      
+      /* at start */
+      .my-mfp-slide-bottom .zoom-anim-dialog {
+        opacity: 0;
+        -webkit-transition: all 0.2s ease-out;
+        -moz-transition: all 0.2s ease-out;
+        -o-transition: all 0.2s ease-out;
+        transition: all 0.2s ease-out;
+
+        -webkit-transform: translateY(-20px) perspective( 600px ) rotateX( 10deg );
+        -moz-transform: translateY(-20px) perspective( 600px ) rotateX( 10deg );
+        -ms-transform: translateY(-20px) perspective( 600px ) rotateX( 10deg );
+        -o-transform: translateY(-20px) perspective( 600px ) rotateX( 10deg );
+        transform: translateY(-20px) perspective( 600px ) rotateX( 10deg );
+
+      }
+      
+      /* animate in */
+      .my-mfp-slide-bottom.mfp-ready .zoom-anim-dialog {
+        opacity: 1;
+        -webkit-transform: translateY(0) perspective( 600px ) rotateX( 0 ); 
+        -moz-transform: translateY(0) perspective( 600px ) rotateX( 0 ); 
+        -ms-transform: translateY(0) perspective( 600px ) rotateX( 0 ); 
+        -o-transform: translateY(0) perspective( 600px ) rotateX( 0 ); 
+        transform: translateY(0) perspective( 600px ) rotateX( 0 ); 
+      }
+
+      /* animate out */
+      .my-mfp-slide-bottom.mfp-removing .zoom-anim-dialog {
+        opacity: 0;
+
+        -webkit-transform: translateY(-10px) perspective( 600px ) rotateX( 10deg ); 
+        -moz-transform: translateY(-10px) perspective( 600px ) rotateX( 10deg ); 
+        -ms-transform: translateY(-10px) perspective( 600px ) rotateX( 10deg ); 
+        -o-transform: translateY(-10px) perspective( 600px ) rotateX( 10deg ); 
+        transform: translateY(-10px) perspective( 600px ) rotateX( 10deg ); 
+      }
+
+      /* Dark overlay, start state */
+      .my-mfp-slide-bottom.mfp-bg {
+        opacity: 0;
+
+        -webkit-transition: opacity 0.3s ease-out; 
+        -moz-transition: opacity 0.3s ease-out; 
+        -o-transition: opacity 0.3s ease-out; 
+        transition: opacity 0.3s ease-out;
+      }
+      /* animate in */
+      .my-mfp-slide-bottom.mfp-ready.mfp-bg {
+        opacity: 0.8;
+      }
+      /* animate out */
+      .my-mfp-slide-bottom.mfp-removing.mfp-bg {
+        opacity: 0;
+      }
+    </style>
+  </div>
+
+
+
+
+
+  <div class="example gc3">
+    <h3>Popup with form</h3>
+    <p>Entered data is not lost if you open and close the popup or if you go to another page and then press back browser button.</p>
+    <div class="html-code">
+      <!-- link that opens popup -->
+      <a class="popup-with-form" href="#test-form">Open form</a>
+
+      <!-- form itself -->
+      <form id="test-form" class="mfp-hide white-popup-block">
+        <h1>Form</h1>
+        <fieldset style="border:0;">
+          <p>Lightbox has an option to automatically focus on the first input. It's strongly recommended to use <code>inline</code> popup type for lightboxes with form instead of <code>ajax</code> (to keep entered data if the user accidentally refreshed the page).</p>
+          <ol>
+            <li>
+              <label for="name">Name</label>
+              <input id="name" name="name" type="text" placeholder="Name" required>
+            </li>
+            <li>
+              <label for="email">Email</label>
+              <input id="email" name="email" type="email" placeholder="example@domain.com" required>
+            </li>
+            <li>
+              <label for="phone">Phone</label>
+              <input id="phone" name="phone" type="tel" placeholder="Eg. +447500000000" required>
+            </li>
+            <li>
+              <label for="textarea">Textarea</label><br/>
+              <textarea id="textarea">Try to resize me to see how popup CSS-based resizing works.</textarea>
+            </li>
+          </ol>
+        </fieldset>
+      </form>
+    </div>
+    <script type="text/javascript">
+      $(document).ready(function() {
+        $('.popup-with-form').magnificPopup({
+          type: 'inline',
+          preloader: false,
+          focus: '#name',
+
+          // When elemened is focused, some mobile browsers in some cases zoom in
+          // It looks not nice, so we disable it:
+          callbacks: {
+            beforeOpen: function() {
+              if($(window).width() < 700) {
+                this.st.focus = false;
+              } else {
+                this.st.focus = '#name';
+              }
+            }
+          }
+        });
+      });
+    </script>
+  </div>
+
+
+
+
+
+  <div class="example gc3">
+    <h3>Ajax popup</h3>
+    <p>You have full control of what is displayed in popup, align it to any side via CSS, enable or disable scroll on right side of window - whatever.</p>
+    <div class="html-code">
+      <a class="simple-ajax-popup-align-top" href="site-assets/ajax/test-ajax.html" >Load content via ajax</a><br/>
+      <a class="simple-ajax-popup" href="site-assets/ajax/test-ajax-2.html" >Load another content via ajax</a>
+    </div>
+    <script type="text/javascript">
+      $(document).ready(function() {
+
+        $('.simple-ajax-popup-align-top').magnificPopup({
+          type: 'ajax',
+          alignTop: true,
+          overflowY: 'scroll' // as we know that popup content is tall we set scroll overflow by default to avoid jump
+        });
+
+        $('.simple-ajax-popup').magnificPopup({
+          type: 'ajax'
+        });
+        
+      });
+    </script>
+  </div>
+
+
+
+
+
+  <div class="example gc3">
+    <h3>Modal popup</h3>
+    <p>A modal popup disables the usual ways to close popups.</p>
+    <div class="html-code">
+      <a class="popup-modal" href="#test-modal">Open modal</a>
+
+      <div id="test-modal" class="mfp-hide white-popup-block">
+        <h1>Modal dialog</h1>
+        <p>You won't be able to dismiss this by usual means (escape or
+          click button), but you can close it programatically based on
+          user choices or actions.</p>
+        <p><a class="popup-modal-dismiss" href="#">Dismiss</a></p>
+      </div>
+    </div>
+    <script type="text/javascript">
+      $(function () {
+        $('.popup-modal').magnificPopup({
+          type: 'inline',
+          preloader: false,
+          focus: '#username',
+          modal: true
+        });
+        $(document).on('click', '.popup-modal-dismiss', function (e) {
+          e.preventDefault();
+          $.magnificPopup.close();
+        });
+      });
+    </script>
+  </div>
+
+
+
+
+
+  <div class="example gc3">
+    <h3>Error handling</h3>
+    <p>This is just basic example of how error messages are displayed. Surely, you can change text or style them.</p>
+    <div class="html-code">
+      <!-- classes mfp-image and mfp-ajax define type of the popup -->
+      <a id="broken-image" class="mfp-image" href="http://upload.wikimedia.org/wikipedia/commons/thumb/f/f3/Blois_Loire_Panorama_-_July_2011.jpg/640px-Blois_Loire_Panorama_-_July_2011-fake.jpg" >Broken image</a><br/>
+      <a id="broken-ajax" class="mfp-ajax" href="http://example.com/fakeg" >Broken ajax request</a>
+    </div>
+    <script type="text/javascript">
+      $(document).ready(function() {
+        $('#broken-image, #broken-ajax').magnificPopup({});
+      });
+    </script>
+  </div>
+
+
+
+
+
+  <!-- <div class="example gc3">
+    <h3>Other variations</h3>
+    <div class="html-code">
+      <a id="inline-html-content" class="mfp-inline" data-mfp-src="#custom-content" href="#custom-content" >Open inline text block</a>
+    </div>
+    <script type="text/javascript">
+      $(document).ready(function() {
+        $('#inline-html-content').magnificPopup({
+          disableOn:0,
+          alignTop: true,
+          marTop: 0,
+          marBottom: 0,
+          closeBtnInside: true,
+          mainClass: 'mfp-dark-close-button mfp-with-40-margin',
+          preloader: false
+        });
+      });
+    </script>
+  </div> -->
+
+
+</div>
+
+<!--
+
+Examples end.
+
+-->
diff --git a/vendor/dimsemenov/magnific-popup/website/_includes/logo.html b/vendor/dimsemenov/magnific-popup/website/_includes/logo.html
new file mode 100644
index 0000000000..b994cca9c7
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/_includes/logo.html
@@ -0,0 +1,50 @@
+<script type="text/javascript">
+  (function() {
+
+    var isCanvasSupported = function () {
+      var elem = document.createElement('canvas');
+      return !!(elem.getContext && elem.getContext('2d'));
+    };
+
+    if( isCanvasSupported() ) {
+
+      var canvas = document.getElementById('broken-glass'),
+          context = canvas.getContext('2d'),
+          width = canvas.width = Math.min(800, window.innerWidth),
+          height = canvas.height,  
+          numTriangles = 100,
+          rand = function(min, max){
+            return Math.floor( (Math.random() * (max - min + 1) ) + min);
+          };
+          
+      window.drawTriangles = function(){
+        context.clearRect(0, 0, width, height);
+        var hue = rand(0,360);
+        var increment = 80 / numTriangles;
+        for(var i = 0; i < numTriangles; i++) { 
+            context.beginPath();      
+            context.moveTo(rand(0,width), rand(0,height) );  
+            context.lineTo(rand(0,width), rand(0,height) );
+            context.lineTo(rand(0,width), rand(0,height) );
+            context.globalAlpha = 0.5;
+            context.fillStyle = 'hsl('+Math.round(hue)+', '+rand(15,60)+'%, '+ rand(10, 60) +'%)';      
+            context.closePath();    
+            context.fill();
+
+            hue+=increment;
+            if(hue > 360) hue = 0;
+        }
+        canvas.style.cssText = '-webkit-filter: contrast(115%);';
+      };
+
+      document.getElementById('logo-title').style.color = 'rgba(250, 250, 250, 0.95)';
+      drawTriangles();
+
+      var el = document.getElementById('logo');
+      el.onclick = function() {
+        drawTriangles();
+      };
+    }
+
+  })();
+</script>
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/website/_includes/signup.html b/vendor/dimsemenov/magnific-popup/website/_includes/signup.html
new file mode 100644
index 0000000000..05ac4ea31d
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/_includes/signup.html
@@ -0,0 +1,99 @@
+<div id="mc_embed_signup" class="embed-form zoom-anim-dialog mfp-hide">
+	<style>
+	#mc_embed_signup h4 {
+		font-size: 30px;
+		line-height: 1.2;
+		margin-bottom: 12px;
+	}
+	#mc_embed_signup input[type="email"] {
+		border: 1px solid #CCC;
+		border-top: 1px solid #999;
+		padding: 5px;
+		font-size: 18px;
+		width: 200px;
+		margin-right: 10px;
+		height: 25px;
+		transition: all 0.3s ease;
+		-moz-transition: all 0.3s ease;
+		-webkit-transition: all 0.3s ease;
+		border-radius: 2px;
+		-moz-border-radius: 2px;
+		-webkit-border-radius: 2px;
+	}
+	#mc_embed_signup input[type="email"]:focus {
+		background-color: #FFF;
+		border: 1px solid #3169B3;
+		box-shadow: #3169B3 0px 0px 5px;
+		-moz-box-shadow: #3169B3 0px 0px 5px;
+		-webkit-box-shadow: #3169B3 0px 0px 5px;
+		outline: none;
+	}
+	#mc_embed_signup input[type="submit"] {
+		border: 1px solid #3169B3;
+		font-size: 13px;
+		font-weight: bold;
+		color: #FFF;
+		height: auto;
+		padding: 8px 13px;
+		cursor: pointer;
+		background-color: #3169B3;
+		display: inline-block;
+		width: auto;
+		-webkit-appearance: none;
+		border-radius: 2px;
+		-moz-border-radius: 2px;
+		-webkit-border-radius: 2px;
+		vertical-align: top;
+	}
+	.embed-form {
+		padding: 30px;
+		background: #FFF;
+		margin: 30px auto;
+		display: block;
+		width: auto;
+		max-width: 350px;
+		position: relative;
+	}
+	#mc_embed_signup .mc-field-group {
+		margin-top: 20px;
+	}
+	#mc_embed_signup p {
+		font-size: 15px;
+		color: #4F4F4F;
+	}
+	</style>
+	<script>
+	if(window.$) {
+		$(document).ready(function() {
+	        $('.wp-version-link').magnificPopup({
+	          type: 'inline',
+
+	          fixedContentPos: false,
+	          fixedBgPos: true,
+
+	          overflowY: 'auto',
+
+	          closeBtnInside: true,
+	          preloader: false,
+	          
+	          removalDelay: 300,
+	          mainClass: 'my-mfp-zoom-in'
+	        });
+	    });
+	}
+    </script>
+	<form action="http://dimsemenov.us1.list-manage.com/subscribe/post?u=ef6026d946a7b5d41d92c02e4&amp;id=54fae727da" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>
+		<h4>Magnific WordPress Plugin is under development!</h4>
+		<p>To get notified about the release, subscribe to my Mailchimp list that I send 3-4 times a year. Any feature requests are welcome.</p>
+		<div class="mc-field-group">
+			<input type="email" value="" name="EMAIL" placeholder="Your email" class="required email" id="mce-EMAIL">
+			<input type="hidden" id="group_2" name="group[2065][2]" value="true">
+			<input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="button">
+		</div>
+		
+		<div id="mce-responses" class="clear">
+			<div class="response" id="mce-error-response" style="display:none"></div>
+			<div class="response" id="mce-success-response" style="display:none"></div>
+		</div>	
+	</form>
+</div>
diff --git a/vendor/dimsemenov/magnific-popup/website/_layouts/default.html b/vendor/dimsemenov/magnific-popup/website/_layouts/default.html
new file mode 100644
index 0000000000..5917e6ec4e
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/_layouts/default.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html>
+<html lang="en" prefix="og: http://ogp.me/ns#">
+  <head>
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">    
+
+    <title>{{ page.title }}</title>
+    
+    <meta charset="utf-8"> 
+    <meta name="description" content="{{page.description}}"/>
+    <meta name="viewport" content="width = device-width, initial-scale = 1.0" />
+    <meta name="author" content="Dmitry Semenov">
+    <link rel="canonical" href="{{page.canonical_url}}" />
+
+    <meta property="og:url" content="{{page.canonical_url}}">
+    <meta property="og:title" content="{{page.title}}">
+    <meta property="og:description" content="{{page.description}}">
+    <meta property="og:image" content="http://dimsemenov.com/magnific-og-400x400.jpg">
+
+    <link href="https://plus.google.com/102586375605352607718" rel="publisher" />
+
+    {% if site.url == 'local' %}
+      <link href="site-assets/site.css?v={{site.mfpversion}}" rel="stylesheet" />
+      <link href="dist/magnific-popup.css?v={{site.mfpversion}}" rel="stylesheet" />
+    {% else %}
+      <link href="site-assets/all.min.css?v={{site.mfpversion}}" rel="stylesheet" />
+    {% endif %}
+
+
+    {% if page.title == 'Magnific Popup Documentation' %}
+    <style type="text/css"> #main-wrapper{background: #FFF;} </style>
+    {% endif %}
+
+  </head>
+
+  <body>
+    
+  <div id="main-wrapper">
+
+    {{ content | markdown }}
+
+    <div id="footer">
+      Created by <a href="http://dimsemenov.com" rel="author">Dmitry Semenov</a>.{% if page.include_credit %} Photography in demo by <a href="http://www.squiver.com">Marsel Van Oosten</a>{% endif %}
+    </div>
+
+  </div>
+  
+  {{page.footer}}
+
+  {% if page.addjs %}
+    {% if site.url == 'local' %}
+      <script>
+        document.write('<script src=third-party-libs/' +
+        ('__proto__' in {} ? 'zepto' : 'jquery') +
+        '.js><\/script>')
+      </script>
+      <script src="dist/jquery.magnific-popup.js?v={{site.mfpversion}}"></script>
+    {% else %}
+      <script>
+        document.write('<script src=third-party-libs/' +
+        ('__proto__' in {} ? 'zepto' : 'jquery') +
+        '.min.js><\/script>')
+      </script>
+      <script src="dist/jquery.magnific-popup.min.js?v={{site.mfpversion}}"></script>
+    {% endif %}
+  {% endif %}
+
+  {% include analytics.html %}
+
+  {% if page.buildtool %}
+    {% include build-tool.html %}
+  {% endif %}
+
+  {% if site.url == 'local' %}
+    <strong style="display:block; width:100%;text-align:center;">This page is just for tests and should not be used for production!</strong>
+  {% endif %}
+  </body>
+</html>
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/website/documentation.md b/vendor/dimsemenov/magnific-popup/website/documentation.md
new file mode 100644
index 0000000000..eecff3a263
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/documentation.md
@@ -0,0 +1,1222 @@
+---
+
+layout: default
+
+title: Magnific Popup Documentation
+
+description: The complete guide on how to use Magnific Popup - the open source responsive lightbox plugin.
+
+addjs: true
+
+canonical_url: http://dimsemenov.com/plugins/magnific-popup/documentation.html
+
+buildtool: true
+
+---
+
+<div id="documentation-intro">
+  <h1><a href="http://dimsemenov.com/plugins/magnific-popup/">Magnific Popup</a> Documentation</h1>
+  <p><a href="https://github.com/dimsemenov/Magnific-Popup/">Project on GitHub</a> &middot; <a href="#mfp-build-tool" class="mfp-build-tool-link">Build tool</a> &middot; <a href="http://twitter.com/dimsemenov">Twitter of developer</a> &middot; <a href="http://dimsemenov.com/subscribe.html">Newsletter of developer</a></p>
+</div>
+
+
+<!-- DOCUMENTATION START -->
+
+
+Here you can find the guide on how to use Magnific Popup. Besides this docs page, you can <a href="http://codepen.io/collection/nLcqo">play with examples on CodePen</a>. If you've found any mistake in this site or you know how to improve some part of this documentation - please <a href="https://github.com/dimsemenov/Magnific-Popup/blob/master/website/documentation.md">commit on GitHub</a>.
+
+Please ask general questions through <a href="http://stackoverflow.com/questions/ask?tags=magnific-popup">Stack Overflow</a> tagged with `magnific-popup`.
+
+If you're looking for touch-friendly popup just for images, <a href="http://photoswipe.com">PhotoSwipe</a> might be a better choice.
+
+
+# magnific popup docs
+
+* This will become a table of contents (this text will be scraped).
+{:toc}
+
+## Including files
+
+You can get Magnific Popup JS and CSS file from the <a href="#mfp-build-tool" class="mfp-build-tool-link">build tool</a>, from the `dist/` folder in the <a href="https://github.com/dimsemenov/Magnific-Popup">GitHub repository</a>, or by compiling it yourself with Grunt.
+
+{% highlight html %}
+<!-- Magnific Popup core CSS file -->
+<link rel="stylesheet" href="magnific-popup/magnific-popup.css">
+
+<!-- jQuery 1.7.2+ or Zepto.js 1.0+ -->
+<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
+
+<!-- Magnific Popup core JS file -->
+<script src="magnific-popup/jquery.magnific-popup.js"></script>
+{% endhighlight %}
+
+It's not required, but we recommend placing CSS files in `<head>` and JavaScript files and initialization code in the footer of your site (before the closing `</body>` tag).<br/> If you already have `jquery.js` on your site, don't include it a second time, or use `jQuery.noConflict();` mode. Optionally, you can include [Zepto.js](http://zeptojs.com/) instead of [jQuery](http://jquery.com), or [choose which one to include](http://stackoverflow.com/questions/8725905/zepto-fallback-to-jquery) based on browser support.
+
+
+## Initializing popup
+
+Popup initialization code should be executed after document ready, for example:
+{% highlight javascript %}
+$(document).ready(function() {
+  $('.image-link').magnificPopup({type:'image'});
+});
+{% endhighlight %}
+
+There are three ways to initialize a popup:
+
+### 1. From an HTML element
+
+{% highlight html %}
+<a class="test-popup-link" href="path-to-image.jpg">Open popup</a>
+{% endhighlight %}
+
+{% highlight javascript %}
+$('.test-popup-link').magnificPopup({
+  type: 'image'
+  // other options
+});
+{% endhighlight %}
+
+
+
+### 2. From a group of elements with one parent
+Same as first one, but use this method if you are creating a popup from a list of elements in one container. Note that this method does not enable gallery mode, it just reduces the number of click event handlers; each item will be opened as a single popup. If you wish to enable gallery, add the `gallery:{enabled:true}` option.
+
+{% highlight html %}
+<div class="parent-container">
+  <a href="path-to-image-1.jpg">Open popup 1</a>
+  <a href="path-to-image-2.jpg">Open popup 2</a>
+  <a href="path-to-image-3.jpg">Open popup 3</a>
+</div>
+{% endhighlight %}
+
+{% highlight javascript %}
+$('.parent-container').magnificPopup({
+  delegate: 'a', // child items selector, by clicking on it popup will open
+  type: 'image'
+  // other options
+});
+{% endhighlight %}
+
+
+
+### 3. From the 'items' option
+The `items` option defines data for the popup item(s) and makes Magnific Popup ignore all attributes on the target DOM element. The value for `items` can be a single object or an array of objects.
+
+{% highlight javascript %}
+// Example with single object
+$('#some-button').magnificPopup({
+    items: {
+      src: 'path-to-image-1.jpg'
+    },
+    type: 'image' // this is default type
+});
+
+// Example with multiple objects
+$('#some-button').magnificPopup({
+    items: [
+      {
+        src: 'path-to-image-1.jpg'
+      },
+      {
+        src: 'http://vimeo.com/123123',
+        type: 'iframe' // this overrides default type
+      },
+      {
+        src: $('<div>Dynamically created element</div>'), // Dynamically created element
+        type: 'inline'
+      },
+      {
+        src: '<div>HTML string</div>',
+        type: 'inline'
+      },
+      {
+        src: '#my-popup', // CSS selector of an element on page that should be used as a popup
+        type: 'inline'
+      }
+    ],
+    gallery: {
+      enabled: true
+    },
+    type: 'image' // this is default type
+});
+{% endhighlight %}
+
+Play with [this example on CodePen](http://codepen.io/dimsemenov/pen/vKrqs).
+
+
+
+## Content Types
+
+By default, Magnific Popup has four types of content: `image`, `iframe`, `inline`, and `ajax`. There is no any "auto-detection" of type based on URL, so you should define it manually.
+
+The type of a popup can be defined in a two ways:
+
+1. Using the `type` option. E.g.: `$('.image-link').magnificPopup({type:'image'})`.
+
+2. Using the `mfp-TYPE` CSS class (where `TYPE` is the desired content type). For example: `<a class="mfp-image image-link">Open image</a>`, `$('.image-link').magnificPopup()`.
+
+The second option always overrides the first, so you may initialize popups with multiple content types from one call.
+
+`inline` is the default content type (from v0.8.4), so you may skip its definition.
+
+<br/>
+
+**The source of the the popup content** (for example, a path to an image, a path to an HTML file, a path to a video page) can be defined in a few ways:
+
+Method #1: From the `href` attribute:
+
+{% highlight html %}<a href="image-for-popup.jpg">Open image</a>{% endhighlight %}
+
+Method #2: From the `data-mfp-src` attribute (overrides the first method):
+
+{% highlight html %}<a href="some-image.jpg" data-mfp-src="image-for-popup.jpg">Open image</a>{% endhighlight %}
+
+Method #3: From the <code>items</code> option
+
+{% highlight javascript %}
+$.magnificPopup.open({
+  items: {
+    src: 'some-image.jpg'
+  },
+  type: 'image'
+});
+{% endhighlight %}
+
+
+If you want to modify how the source is parsed, you may hook into the `elementParse` callback. For example:
+
+{% highlight javascript %}
+$('.image-link').magnificPopup({
+  type:'image',
+  callbacks: {
+    elementParse: function(item) {
+      // Function will fire for each target element
+      // "item.el" is a target DOM element (if present)
+      // "item.src" is a source that you may modify
+
+      console.log(item); // Do whatever you want with "item" object
+    }
+  }
+});
+{% endhighlight %}
+
+## Image Type
+
+The path to the image must be set as the main source if you selected this type. If your popup doesn't have an image source and doesn't have an image that shouldn't be preloaded (and retina-ized, etc.), use the `inline` type.
+
+{% highlight javascript %}
+image: {
+  markup: '<div class="mfp-figure">'+
+            '<div class="mfp-close"></div>'+
+            '<div class="mfp-img"></div>'+
+            '<div class="mfp-bottom-bar">'+
+              '<div class="mfp-title"></div>'+
+              '<div class="mfp-counter"></div>'+
+            '</div>'+
+          '</div>', // Popup HTML markup. `.mfp-img` div will be replaced with img tag, `.mfp-close` by close button
+
+  cursor: 'mfp-zoom-out-cur', // Class that adds zoom cursor, will be added to body. Set to null to disable zoom out cursor.
+
+  titleSrc: 'title', // Attribute of the target element that contains caption for the slide.
+  // Or the function that should return the title. For example:
+  // titleSrc: function(item) {
+  //   return item.el.attr('title') + '<small>by Marsel Van Oosten</small>';
+  // }
+
+  verticalFit: true, // Fits image in area vertically
+
+  tError: '<a href="%url%">The image</a> could not be loaded.' // Error message
+}
+{% endhighlight %}
+
+Please note that Magnific Popup doesn't implement any JavaScript-based client-side caching for images. So make sure that your server [adds expires headers](https://developers.google.com/speed/docs/best-practices/caching#LeverageBrowserCaching) so the image won't be downloaded each time. 
+
+## Iframe Type
+
+By default Magnific Popup supports only one type of URL for each service:
+
+{% highlight javascript %}
+// YouTube
+"http://www.youtube.com/watch?v=7HKoqNJtMTQ"
+
+// Vimeo
+"http://vimeo.com/123123"
+
+// Google Maps
+"https://maps.google.com/maps?q=221B+Baker+Street,+London,+United+Kingdom&hl=en&t=v&hnear=221B+Baker+St,+London+NW1+6XE,+United+Kingdom"
+{% endhighlight %}
+
+But you can extend it and make it support absolutely any URL or any other service (view [example that adds Dailymotion support](http://codepen.io/dimsemenov/pen/jnohA)). Iframe options:
+
+{% highlight javascript %}
+iframe: {
+  markup: '<div class="mfp-iframe-scaler">'+
+            '<div class="mfp-close"></div>'+
+            '<iframe class="mfp-iframe" frameborder="0" allowfullscreen></iframe>'+
+          '</div>', // HTML markup of popup, `mfp-close` will be replaced by the close button
+
+  patterns: {
+    youtube: {
+      index: 'youtube.com/', // String that detects type of video (in this case YouTube). Simply via url.indexOf(index).
+
+      id: 'v=', // String that splits URL in a two parts, second part should be %id%
+      // Or null - full URL will be returned
+      // Or a function that should return %id%, for example:
+      // id: function(url) { return 'parsed id'; }
+
+      src: '//www.youtube.com/embed/%id%?autoplay=1' // URL that will be set as a source for iframe.
+    },
+    vimeo: {
+      index: 'vimeo.com/',
+      id: '/',
+      src: '//player.vimeo.com/video/%id%?autoplay=1'
+    },
+    gmaps: {
+      index: '//maps.google.',
+      src: '%id%&output=embed'
+    }
+
+    // you may add here more sources
+
+  },
+
+  srcAction: 'iframe_src', // Templating object key. First part defines CSS selector, second attribute. "iframe_src" means: find "iframe" and set attribute "src".
+}
+{% endhighlight %}
+
+
+
+## Inline Type
+
+To create popup from inline element you need to:
+
+1) Create a HTML element that you wish to display in popup and add it somewhere. Class `mfp-hide` is required to hide the popup from the page.
+
+{% highlight html %}
+<div id="test-popup" class="white-popup mfp-hide">
+  Popup content
+</div>
+{% endhighlight %}
+
+2) Style this element. Magnific Popup by default doesn't apply any styles to it, except vertical centering (if `alignTop:false`). Close button will be automatically appended inside (if `closeBtnInside:true`).
+
+{% highlight css %}
+.white-popup {
+  position: relative;
+  background: #FFF;
+  padding: 20px;
+  width: auto;
+  max-width: 500px;
+  margin: 20px auto;
+}
+{% endhighlight %}
+
+
+3) Add button that will open the popup (source must match CSS id of an element (`#test-popup` in our case).
+
+{% highlight html %}
+<!-- Like so: -->
+<a href="#test-popup" class="open-popup-link">Show inline popup</a>
+
+<!-- Or like so: -->
+<a href="mobile-friendly-page.html" data-mfp-src="#test-popup" class="open-popup-link">Show inline popup</a>
+{% endhighlight %}
+
+4) Initialize script.
+
+{% highlight javascript %}
+$('.open-popup-link').magnificPopup({
+  type:'inline',
+  midClick: true // Allow opening popup on middle mouse click. Always set it to true if you don't provide alternative source in href.
+});
+{% endhighlight %}
+
+Here are some other ways to initialize popup:
+
+{% highlight javascript %}
+// From HTML string
+$('button').magnificPopup({
+  items: {
+      src: '<div class="white-popup">Dynamically created popup</div>',
+      type: 'inline'
+  }
+});
+
+// From an element with ID #popup
+$('button').magnificPopup({
+  items: {
+      src: '#popup',
+      type: 'inline'
+  }
+});
+
+// From jQuery object
+$('button').magnificPopup({
+  items: {
+      src: $('<div class="white-popup">Dynamically created popup</div>'),
+      type: 'inline'
+  }
+});
+
+// Open directly via API
+$.magnificPopup.open({
+  items: {
+    src: '<div class="white-popup">Dynamically created popup</div>', // can be a HTML string, jQuery object, or CSS selector
+    type: 'inline'
+  }
+});
+{% endhighlight %}
+
+I have created two examples on CodePen that will help you better understand how it works:
+
+- [Simple inline popup](http://codepen.io/dimsemenov/pen/GEKgb)
+- [Advanced popup with markup and gallery mode](http://codepen.io/dimsemenov/pen/sHoxp)
+
+## Ajax Type
+
+To create such type of popup, first of define the path to the file that you wish to display and select `ajax` type of the popup. Popup itself should be styled in exactly the same way as an [inline popup type](#inline-type).
+
+**Important note!** The contents of the file that you load is already a popup itself, so there must be **only one root element**.
+
+{% highlight html %}
+<a href="path-to-file.html" class="ajax-popup-link">Show inline popup</a>
+{% endhighlight %}
+
+{% highlight javascript %}
+$('.ajax-popup-link').magnificPopup({
+  type: 'ajax'
+});
+{% endhighlight %}
+
+Note that path to the file that will be loaded should have the same origin (e.g. be on the same domain), [learn more](http://stackoverflow.com/questions/3076414/ways-to-circumvent-the-same-origin-policy).
+
+Ajax options:
+
+{% highlight javascript %}
+ajax: {
+  settings: null, // Ajax settings object that will extend default one - http://api.jquery.com/jQuery.ajax/#jQuery-ajax-settings
+  // For example:
+  // settings: {cache:false, async:false}
+
+  cursor: 'mfp-ajax-cur', // CSS class that will be added to body during the loading (adds "progress" cursor)
+  tError: '<a href="%url%">The content</a> could not be loaded.' //  Error message, can contain %curr% and %total% tags if gallery is enabled
+}
+{% endhighlight %}
+
+To modify content after it's loaded, or to select and show just specific element from loaded file, there is a `parseAjax` callback:
+
+{% highlight javascript %}
+callbacks: {
+  parseAjax: function(mfpResponse) {
+    // mfpResponse.data is a "data" object from ajax "success" callback
+    // for simple HTML file, it will be just String
+    // You may modify it to change contents of the popup
+    // For example, to show just #some-element:
+    // mfpResponse.data = $(mfpResponse.data).find('#some-element');
+
+    // mfpResponse.data must be a String or a DOM (jQuery) element
+
+    console.log('Ajax content loaded:', mfpResponse);
+  },
+  ajaxContentAdded: function() {
+    // Ajax content is loaded and appended to DOM
+    console.log(this.content);
+  }
+}
+{% endhighlight %}
+
+
+
+
+
+
+
+
+
+
+## Options
+
+Options should be passed to the initialization code and separated by comma, e.g.:
+
+{% highlight javascript %}
+$('.some-link').magnificPopup({
+  // main options
+  disableOn: 400,
+  key: 'some-key',
+
+  gallery: {
+    // options for gallery
+    enabled: true
+  },
+  image: {
+    // options for image content type
+    titleSrc: 'title'
+  }
+
+});
+{% endhighlight %}
+
+Options for specific modules are explained in their sections of documentation (e.g. related to text are in <a href="#translating">translating section</a>, related to gallery are in <a href="#gallery">gallery section</a>. Here you can find the list of general options:
+
+### disableOn
+
+<code class="def">null</code>
+
+If window width is less than the number in this option lightbox will not be opened and the default behavior of the element will be triggered. Set to `0` to disable behavior. Option works only when you initialize Magnific Popup from DOM element.
+
+Can also accept Function as a parameter, which should return `true` if lightbox can be opened and `false` otherwise. For example:
+
+{% highlight javascript %}
+disableOn: function() {
+  if( $(window).width() < 600 ) {
+    return false;
+  }
+  return true;
+}
+{% endhighlight %}
+
+
+
+### key
+
+<code class="def">null</code>
+
+"Key" option is a unique identifier of a single or a group of popups with the same structure. If you will not define it, DOM elements will be created and destroyed each time when you open and close popup.
+
+You may (and should) set an equal key to different popups if their markup matches. By markup I mean options that change HTML structure of the popup (e.g. close icon placement and HTML code of it).
+
+For example: you have many popups that show title, some text and button - you may use one key for all of them, so only one instance of this element is created. Same for popup that always contains image and caption.
+
+You can delete cached templates like so:
+
+    // delete template with key "your-key"
+    delete $.magnificPopup.instance.popupsCache['your-key'];
+
+    // delete all templates
+    $.magnificPopup.instance.popupsCache = {};
+
+
+
+
+
+### midClick
+
+<code class="def">false</code>
+
+If set to `true` lightbox is opened if the user clicked on the middle mouse button, or click with Command/Ctrl key. Option works only when you initialize Magnific Popup from DOM element.
+
+
+### mainClass
+
+<code class="def">empty string</code>
+
+String that contains classes that will be added to the root element of popup wrapper and to dark overlay. For example `"myClass"`, can also contain multiple classes - `'myClassOne myClassTwo'`.
+
+### preloader
+
+<code class="def">true</code>
+
+Preloader in Magnific Popup is used as an indicator of current status. If option enabled, it's always present in DOM only text inside of it changes. Below you can see explanation of CSS names that are applied to container that holds preloader and content area depending on the state of current item:
+
+{% highlight css %}
+
+/* Content loading is in progress */
+.mfp-s-loading { }
+
+/* Content successfully loaded */
+.mfp-s-ready { }
+
+/* Error during loading  */
+.mfp-s-error { }
+{% endhighlight %}
+
+For example, if you want your error message to be in red add such CSS:
+
+{% highlight css %}
+.mfp-s-error .mfp-preloader {
+  color: red;
+}
+{% endhighlight %}
+
+You can trigger change of status manually by calling `instance.updateStatus('error', 'error message')`.
+
+
+### focus
+
+<code class="def">empty string</code>
+
+String with CSS selector of an element inside popup that should be focused. Ideally it should be the first element of popup that can be focused. For example `'input'` or `'#login-input'`. Leave empty to focus the popup itself.
+
+### closeOnContentClick
+
+<code class="def">false</code>
+
+Close popup when user clicks on content of it. It's recommended to enable this option when you have only image in popup.
+
+
+### closeOnBgClick
+
+<code class="def">true</code>
+
+Close the popup when user clicks on the dark overlay.
+
+
+### closeBtnInside
+
+<code class="def">true</code>
+
+If enabled, Magnific Popup will put close button inside content of popup, and wrapper will get class `mfp-close-btn-in` (which in default CSS file makes color of it change). If markup of popup item is defined element with class `mfp-close` it will be replaced with this button, otherwise close button will be appended directly.
+
+
+### showCloseBtn
+
+<code class="def">true</code>
+
+Controls whether the close button will be displayed or not.
+
+
+### enableEscapeKey
+
+<code class="def">true</code>
+
+Controls whether pressing the escape key will dismiss the active popup or
+not.
+
+
+### modal
+
+<code class="def">false</code>
+
+When set to `true`, the popup will have a modal-like behavior: it won't be
+possible to dismiss it by usual means (close button, escape key, or
+clicking in the overlay).
+
+This is a shortcut to set ``closeOnContentClick``, ``closeOnBgClick``,
+``showCloseBtn``, and ``enableEscapeKey`` to ``false``.
+
+
+### alignTop
+
+<code class="def">false</code>
+
+If set to `true` popup is aligned to top instead of to center. (basically all this option does is adds `mfp-align-top` CSS class to popup which removes styles that align popup to center).
+
+### index
+
+<code class="def">null</code>
+
+Used for gallery. Defines starting index. If popup is initialised from DOM element, this option will be ignored.
+
+
+### fixedContentPos
+
+<code class="def">auto</code>
+
+Popup content position. Can be `"auto"`, `true` or `false`.  If set to `true` - fixed position will be used, to `false` - absolute position based on current scroll. If set to `"auto"` popup will automatically disable this option when browser doesn't support fixed position properly.
+
+### fixedBgPos
+
+<code class="def">auto</code>
+
+Same as an option above, but it defines position property of the dark transluscent overlay. If set to `false` - huge tall overlay will be generated that equals height of window to emulate fixed position. It's recommended to set this option to `true` if you animate this dark overlay and content is most likely will not be zoomed, as size of it will be much smaller.
+
+### overflowY
+
+<code class="def">auto</code>
+
+Defines scrollbar of the popup, works as overflow-y CSS property - any <a href="https://developer.mozilla.org/en-US/docs/CSS/overflow-y">CSS acceptable value</a> is allowed (e.g. `auto`, `scroll`, `hidden`). Option is applied only when fixed position is enabled.
+
+There is no option `overflowX`, but you may easily emulate it just via CSS.
+
+### removalDelay
+
+<code class="def">0</code>
+
+Delay before popup is removed from DOM. Used for the [animation](#animation).
+
+### closeMarkup
+
+<code class="def">&lt;button title=&quot;%title%&quot; type=&quot;button&quot; class=&quot;mfp-close&quot;&gt;&amp;#215;&lt;/button&gt;</code>
+
+Markup of close button. %title% will be replaced with option `tClose`.
+
+### prependTo
+
+<code class="def">document.body</code>
+
+The DOM element to which popup will be added. Useful when you're using ASP.NET where popup should be inside `form`. Option available since 2013/12/04.
+
+### autoFocusLast 
+
+<code class="def">true</code>
+
+If set to `true` last focused element before popup showup will be focused after popup close. Option available since 2015/12/16.
+
+
+## Gallery
+
+The gallery module allows you to switch the content of the popup and adds navigation arrows. It can switch and mix any types of content, not just images. Gallery options:
+
+{% highlight javascript %}
+gallery: {
+  enabled: false, // set to true to enable gallery
+
+  preload: [0,2], // read about this option in next Lazy-loading section
+
+  navigateByImgClick: true,
+
+  arrowMarkup: '<button title="%title%" type="button" class="mfp-arrow mfp-arrow-%dir%"></button>', // markup of an arrow button
+
+  tPrev: 'Previous (Left arrow key)', // title for left button
+  tNext: 'Next (Right arrow key)', // title for right button
+  tCounter: '<span class="mfp-counter">%curr% of %total%</span>' // markup of counter
+}
+{% endhighlight %}
+
+Example:
+
+{% highlight javascript %}
+// This will create a single gallery from all elements that have class "gallery-item"
+$('.gallery-item').magnificPopup({
+  type: 'image',
+  gallery:{
+    enabled:true
+  }
+});
+{% endhighlight %}
+
+### Multiple galleries
+
+To have multiple galleries on a page, you need to create a new instance of Magnific Popup for each separate gallery. For example
+
+{% highlight html %}
+<div class="gallery">
+    <a href="path-to-image.jpg">Open image 1 (gallery #1)</a>
+    <a href="path-to-image.jpg">Open image 2 (gallery #1)</a>
+</div>
+<div class="gallery">
+    <a href="path-to-image.jpg">Open image 1 (gallery #2)</a>
+    <a href="path-to-image.jpg">Open image 2 (gallery #2)</a>
+    <a href="http://vimeo.com/123123" class="mfp-iframe">Open video (gallery #2). Class mfp-iframe forces "iframe" content type on this item.</a>
+</div>
+{% endhighlight %}
+
+{% highlight javascript %}
+$('.gallery').each(function() { // the containers for all your galleries
+    $(this).magnificPopup({
+        delegate: 'a', // the selector for gallery item
+        type: 'image',
+        gallery: {
+          enabled:true
+        }
+    });
+});
+{% endhighlight %}
+
+You don't necessarily need to use `delegate` option, it can be just `$(this).find('a').magnificPopup( ...`.
+
+### Lazy-loading
+
+Lazy-loading option preloads nearby items. It accepts an array with two integers. The first is the number of items to preload before the current. The second is the number of images to preload after the current. For example, `preload: [1,3]` will load 3 next items and 1 that is before current. These values are automatically switched based on direction of movement. 
+
+By default all what it does is just searches for an image tag and preloads it with JavaScript. But you can extend it and do your custom preloading logic with help of `lazyLoad` event, like so:
+
+{% highlight javascript %}
+callbacks: {
+  lazyLoad: function(item) {
+    console.log(item); // Magnific Popup data object that should be loaded
+  }
+}
+{% endhighlight %}
+
+"Preload" option can be changed dynamically. To disable it set `preload:0`.
+
+
+## Animation
+
+Animation can be added to any example. For Ajax based popup content animation is fired only after content is loaded.
+
+After popup is opened popup wrapper and background overlay get class `mfp-ready`. Before popup is removed they get class `mfp-removing`.
+
+For example:
+
+{% highlight javascript %}
+// Initialize popup as usual
+$('.popup-link').magnificPopup({
+  // Delay in milliseconds before popup is removed
+  removalDelay: 300,
+
+  // Class that is added to popup wrapper and background
+  // make it unique to apply your CSS animations just to this exact popup
+  mainClass: 'mfp-fade'
+});
+{% endhighlight %}
+
+
+Then just play with CSS3 transitions:
+
+{% highlight css %}
+/* overlay at start */
+.mfp-fade.mfp-bg {
+  opacity: 0;
+
+  -webkit-transition: all 0.15s ease-out;
+  -moz-transition: all 0.15s ease-out;
+  transition: all 0.15s ease-out;
+}
+/* overlay animate in */
+.mfp-fade.mfp-bg.mfp-ready {
+  opacity: 0.8;
+}
+/* overlay animate out */
+.mfp-fade.mfp-bg.mfp-removing {
+  opacity: 0;
+}
+
+/* content at start */
+.mfp-fade.mfp-wrap .mfp-content {
+  opacity: 0;
+
+  -webkit-transition: all 0.15s ease-out;
+  -moz-transition: all 0.15s ease-out;
+  transition: all 0.15s ease-out;
+}
+/* content animate it */
+.mfp-fade.mfp-wrap.mfp-ready .mfp-content {
+  opacity: 1;
+}
+/* content animate out */
+.mfp-fade.mfp-wrap.mfp-removing .mfp-content {
+  opacity: 0;
+}
+{% endhighlight %}
+
+Please use animation wisely and when it's really required. Do not enable it when your popup may contain large image or a lot of HTML text.
+
+
+## Retina
+
+"Retina" module allows you to display high-resolution images on high-dpi screens with different `devicePixelRatio`. Module works only with "image" type and only when `window.devicePixelRatio > 1`.
+
+First of prepare two sets of images. Default supported syntax requires `@2x` at the end of the image file name, e.g.: `image.jpg` > `image@2x.jpg`. Then initialize popup as usual and add `ratio` in retina set of options.
+
+{% highlight html %}
+<a href="image.jpg" class="image-link">Open popup</a>
+{% endhighlight %}
+
+{% highlight javascript %}
+// Initialize popup as usual
+$('.image-link').magnificPopup({
+  type: 'image',
+
+  retina: {
+    ratio: 1, // Increase this number to enable retina image support.
+    // Image in popup will be scaled down by this number.
+    // Option can also be a function which should return a number (in case you support multiple ratios). For example:
+    // ratio: function() { return window.devicePixelRatio === 1.5 ? 1.5 : 2  }
+
+
+    replaceSrc: function(item, ratio) {
+      return item.src.replace(/\.\w+$/, function(m) { return '@2x' + m; });
+    } // function that changes image source
+  }
+
+});
+{% endhighlight %}
+
+View [example of retina popup on CodePen](http://codepen.io/dimsemenov/pen/Dohka).
+
+## Zoom effect
+
+Zooming only works for images, for now. To add zooming effect, first of make sure that you included "zoom" module to Magnific Popup build (since v0.9.1.). Then follow steps:
+
+1) Add the thumbnail with link that will open the popup, for example:
+
+{% highlight html %}
+<a href="image.jpg" class="image-link">
+   <img src="thumbnails.jpg" />
+</a>
+{% endhighlight %}
+
+You need to make sure that ratio of your thumbnail matches the ratio of the big image, to avoid "jumps" at the end of zoom-out animation.
+
+2) Initialize popup with `zoom` options:
+
+{% highlight javascript %}
+// Initialize popup as usual
+$('.image-link').magnificPopup({
+  type: 'image',
+  mainClass: 'mfp-with-zoom', // this class is for CSS animation below
+
+  zoom: {
+    enabled: true, // By default it's false, so don't forget to enable it
+
+    duration: 300, // duration of the effect, in milliseconds
+    easing: 'ease-in-out', // CSS transition easing function
+
+    // The "opener" function should return the element from which popup will be zoomed in
+    // and to which popup will be scaled down
+    // By defailt it looks for an image tag:
+    opener: function(openerElement) {
+      // openerElement is the element on which popup was initialized, in this case its <a> tag
+      // you don't need to add "opener" option if this code matches your needs, it's defailt one.
+      return openerElement.is('img') ? openerElement : openerElement.find('img');
+    }
+  }
+
+});
+{% endhighlight %}
+
+3) Optionally, add CSS fading animation to background overlay
+
+{% highlight css %}
+.mfp-with-zoom .mfp-container,
+.mfp-with-zoom.mfp-bg {
+  opacity: 0;
+  -webkit-backface-visibility: hidden;
+  /* ideally, transition speed should match zoom duration */
+  -webkit-transition: all 0.3s ease-out;
+  -moz-transition: all 0.3s ease-out;
+  -o-transition: all 0.3s ease-out;
+  transition: all 0.3s ease-out;
+}
+
+.mfp-with-zoom.mfp-ready .mfp-container {
+    opacity: 1;
+}
+.mfp-with-zoom.mfp-ready.mfp-bg {
+    opacity: 0.8;
+}
+
+.mfp-with-zoom.mfp-removing .mfp-container,
+.mfp-with-zoom.mfp-removing.mfp-bg {
+  opacity: 0;
+}
+{% endhighlight %}
+
+Zoom module adds `zoomAnimationEnded` callback, which fires when zoom-in animation is finished.
+
+
+
+
+## API
+
+There is a much bigger list of public events, methods and variables than provided here which is used for module development, look inside code or type in console `$.magnificPopup.instance.` to find them, if you think that something should be added to docs - please submit commit.
+
+### Events
+
+You can define callbacks in `callbacks` option. Besides that, all Magnific Popup events are also dispatched using `triggerHandler` on target element (or to document if the element doesn't exist).
+
+{% highlight javascript %}
+$('.image-link').magnificPopup({
+  // you may add other options here, e.g.:
+  preloader: true,
+
+  callbacks: {
+    open: function() {
+      // Will fire when this exact popup is opened
+      // this - is Magnific Popup object
+    },
+    close: function() {
+      // Will fire when popup is closed
+    }
+    // e.t.c.
+  }
+});
+
+// Alternative method: using events
+// Name of event should start from  `mfp` and the first letter should be uppercase.
+// e.g. 'open' becomes 'mfpOpen', 'beforeOpen' becomes 'mfpBeforeOpen'.
+$('.image-link').on('mfpOpen', function(e /*, params */) {
+  console.log('Popup opened',  $.magnificPopup.instance);
+});
+{% endhighlight %}
+
+List of callbacks. In each callback `this` is `$.magnificPopup.instance`, so you can execute methods (`this.close()`) or access public variables  (`this.currItem`).
+
+{% highlight javascript %}
+callbacks: {
+  beforeOpen: function() {
+    console.log('Start of popup initialization');
+  },
+  elementParse: function(item) {
+    // Function will fire for each target element
+    // "item.el" is a target DOM element (if present)
+    // "item.src" is a source that you may modify
+
+    console.log('Parsing content. Item object that is being parsed:', item);
+  },
+  change: function() {
+    console.log('Content changed');
+    console.log(this.content); // Direct reference to your popup element
+  },
+  resize: function() {
+    console.log('Popup resized');
+    // resize event triggers only when height is changed or layout forced
+  },
+  open: function() {
+    console.log('Popup is opened');
+  },
+
+  beforeClose: function() {
+    // Callback available since v0.9.0
+    console.log('Popup close has been initiated');
+  },
+  close: function() {
+    console.log('Popup removal initiated (after removalDelay timer finished)');
+  },
+  afterClose: function() {
+    console.log('Popup is completely closed');
+  },
+
+  markupParse: function(template, values, item) {
+    // Triggers each time when content of popup changes
+    // console.log('Parsing:', template, values, item);
+  },
+  updateStatus: function(data) {
+    console.log('Status changed', data);
+    // "data" is an object that has two properties:
+    // "data.status" - current status type, can be "loading", "error", "ready"
+    // "data.text" - text that will be displayed (e.g. "Loading...")
+    // you may modify this properties to change current status or its text dynamically
+  },
+  imageLoadComplete: function() {
+    // fires when image in current popup finished loading
+    // avaiable since v0.9.0
+    console.log('Image loaded');
+  },
+
+
+  // Only for ajax popup type
+  parseAjax: function(mfpResponse) {
+    // mfpResponse.data is a "data" object from ajax "success" callback
+    // for simple HTML file, it will be just String
+    // You may modify it to change contents of the popup
+    // For example, to show just #some-element:
+    // mfpResponse.data = $(mfpResponse.data).find('#some-element');
+
+    // mfpResponse.data must be a String or a DOM (jQuery) element
+
+    console.log('Ajax content loaded:', mfpResponse);
+  },
+  ajaxContentAdded: function() {
+    // Ajax content is loaded and appended to DOM
+    console.log(this.content);
+  }
+}
+{% endhighlight %}
+
+
+
+### Public methods
+
+{% highlight javascript %}
+// Open popup immediately. If popup is already opened - it'll just overwite the content (but old options will be kept).
+// - first parameter: options object
+// - second parameter (optional): index of item to open
+$.magnificPopup.open({
+  items: {
+    src: 'someimage.jpg'
+  },
+  type: 'image'
+
+  // You may add options here, they're exactly the same as for $.fn.magnificPopup call
+  // Note that some settings that rely on click event (like disableOn or midClick) will not work here
+}, 0);
+
+$.magnificPopup.close(); // Close popup that is currently opened (shorthand)
+
+
+
+/*
+  Methods below don't have shorthand like "open" and "close".
+  They should be called through "instance" object.
+  "instance" is available only when at least one popup was opened.
+  For example: $.magnificPopup.instance.doSomething();
+*/
+
+var magnificPopup = $.magnificPopup.instance; // save instance in magnificPopup variable
+
+
+magnificPopup.close(); // Close popup that is currently opened
+
+
+// Navigation when gallery is enabled
+magnificPopup.next(); // go to next item
+magnificPopup.prev(); // go to prev item
+magnificPopup.goTo(4); // go to item #4
+
+
+magnificPopup.updateItemHTML(); // updates the popup content. Useful after you change "items" array
+
+
+// Update status of popup
+// First param: status type, can be: 'loading', 'error' or 'ready'.
+// Second param: message that will be displayed.
+magnificPopup.updateStatus('loading', 'The loading text...');
+{% endhighlight %}
+
+You may also call ANY method via `$.fn.magnificPopup('methodName' /*, param1, param2 ... */)` after you initialized the popup, for example:
+
+{% highlight javascript %}
+// First of make sure that you initialized popup on element $('.element-with-popup')
+
+// Then
+$('.element-with-popup').magnificPopup('open'); // Will open the popup
+$('.element-with-popup').magnificPopup('open', 5); // Will open popup with 5th item
+$('.element-with-popup').magnificPopup('next');
+$('.element-with-popup').magnificPopup('goTo', 3);
+{% endhighlight %}
+
+You may also open the popup directly at initialization:
+
+{% highlight javascript %}
+$('.element-with-popup').magnificPopup({
+  items: {
+    src: 'path-to-image.jpg',
+    type: 'image'
+  }
+  // (optionally) other options
+}).magnificPopup('open');
+{% endhighlight %}
+
+
+### Public properties
+
+Most properties are available only after the popup is opened. Only most used are listed here.
+
+{% highlight javascript %}
+var magnificPopup = $.magnificPopup.instance;
+
+
+magnificPopup.items // array that holds data for popup items
+magnificPopup.currItem // data for current item
+magnificPopup.index // current item index (integer)
+
+magnificPopup.content // direct reference to jQuery DOM element that you open in popup
+magnificPopup.bgOverlay // transluscent overlay
+magnificPopup.wrap // container that holds all controls and contentContainer
+magnificPopup.contentContainer // container that holds popup content, child of wrap
+
+
+magnificPopup.st.el // Target clicked element that opened popup (works if popup is initialized from DOM element)
+magnificPopup.st.mainEl // Main element (or collection of elements) from which popup was initialized (--''--)
+
+
+
+magnificPopup.isIE7
+magnificPopup.isIOS
+
+{% endhighlight %}
+
+## Translating
+
+Internationalization of Magnific Popup is very simple, all you need is to extend default settings object with new values, or just pass options to your initialization code. If you're making some public plugin or theme, it's strongly recommended to use only second method to avoid conflicts.
+
+Some properties contain %keys% that should not be translated, but may be reordered or removed.
+
+{% highlight javascript %}
+// Add it after jquery.magnific-popup.js and before first initialization code
+$.extend(true, $.magnificPopup.defaults, {
+  tClose: 'Close (Esc)', // Alt text on close button
+  tLoading: 'Loading...', // Text that is displayed during loading. Can contain %curr% and %total% keys
+  gallery: {
+    tPrev: 'Previous (Left arrow key)', // Alt text on left arrow
+    tNext: 'Next (Right arrow key)', // Alt text on right arrow
+    tCounter: '%curr% of %total%' // Markup for "1 of 7" counter
+  },
+  image: {
+    tError: '<a href="%url%">The image</a> could not be loaded.' // Error message when image could not be loaded
+  },
+  ajax: {
+    tError: '<a href="%url%">The content</a> could not be loaded.' // Error message when ajax request failed
+  }
+});
+{% endhighlight %}
+
+Same thing, but applied only to specific slider:
+
+{% highlight javascript %}
+$('.some-button').magnificPopup({
+  tClose: 'Close (Esc)',
+  tLoading: 'Loading...',
+  gallery: {
+    tPrev: 'Previous (Left arrow key)',
+    tNext: 'Next (Right arrow key)',
+    tCounter: '%curr% of %total%'
+  },
+  image: {
+    tError: '<a href="%url%">The image</a> could not be loaded.'
+  },
+  ajax: {
+    tError: '<a href="%url%">The request</a> failed.'
+  }
+
+  // surely, you may add other options here
+
+});
+{% endhighlight %}
+
+## FAQ
+
+### How to place gallery navigation arrows "inside" the image?
+
+See [example on CodePen](http://codepen.io/dimsemenov/pen/JGjHK).
+
+### How to override some function without modifying the source files?
+
+Rewrite the function that you wish to modify by editing Magnific Popup object, you can access it like so `$.magnificPopup.instance`. For example to override function that goes to "next" item in gallery:
+
+{% highlight javascript %}
+// add this code after popup JS file is included
+$.magnificPopup.instance.next = function() {
+
+  // Do something
+
+  // You may call parent ("original") method like so:
+  $.magnificPopup.proto.next.call(this /*, optional arguments */);
+};
+{% endhighlight %}
+
+You may override any public function, just note that this change applies globally.
+
+### How to add spinner indicator instead of "Loading..." text?
+
+Just style element with class `.mfp-preloader`. [Example on CodePen](http://codepen.io/dimsemenov/pen/aKwxt). [Another example](http://codepen.io/dimsemenov/pen/HdjtL) (if you want to show image only after its fully loaded).
+
+
+## Known issues
+
+### When popup is opened scrollbar of window disappears and creates empty space or shifts some fixed-positioned menu (or whatever)
+
+Solution 1: add [overflowY:'scroll'](#overflowy) option to force the scrollbar. Solution 2: use open/close popup callbacks to apply custom styling to menu that behaves incorrectly.
+
+### Text input in [Select2](http://ivaynberg.github.io/select2/) plugin is inactive when added inside popup
+
+Refer to [this discussion on GitHub](https://github.com/dimsemenov/Magnific-Popup/issues/280).
+
+
+
+
+
+<h2 id="contribute">Make Magnific Popup better!</h2>
+
+Improve this documentation page (simply submit commit <a href="https://github.com/dimsemenov/Magnific-Popup/edit/master/website/documentation.md">via GitHub</a>). Any improvements, including your own CodePen examples are very welcome. And, lastly, don't forget to star the script on GitHub:
+
+<div>
+  <iframe src="http://ghbtns.com/github-btn.html?user=dimsemenov&amp;repo=magnific-popup&amp;type=watch&amp;count=true&amp;size=large" allowtransparency="true" frameborder="0" scrolling="0" width="170" height="30">&nbsp;</iframe>
+</div>
+
+<h2>Keep updated</h2>
+<div id="mc_embed_signup" class="embed-form">
+  <form action="http://dimsemenov.us1.list-manage.com/subscribe/post?u=ef6026d946a7b5d41d92c02e4&amp;id=54fae727da" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate="">
+    <p>Get notified about important update or new release.</p>
+    <div class="mc-field-group">
+      <input type="email" value="" name="EMAIL" placeholder="Your email" class="required email" id="mce-EMAIL">
+      <input type="hidden" id="group_2" name="group[2065][2]" value="true">
+      <input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="button">
+    </div>
+    <p style="font-size: 12px; margin: 4px 0 0 0;">Newsletter is sent 3 times a year at max. Powered by Mailchimp.</p>
+  </form>
+ </div>
diff --git a/vendor/dimsemenov/magnific-popup/website/index.html b/vendor/dimsemenov/magnific-popup/website/index.html
new file mode 100644
index 0000000000..b439bf7ab3
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/index.html
@@ -0,0 +1,101 @@
+---
+layout: default
+title: Magnific Popup&#58; Responsive jQuery Lightbox Plugin
+description: Light and open source responsive lightbox plugin with focus on performance, for jQuery and Zepto.js. High-DPI (retina) display support, fast tap for touch devices.
+canonical_url: http://dimsemenov.com/plugins/magnific-popup/
+include_credit: true
+buildtool: true
+---
+
+<div id="logo">
+  <canvas id="broken-glass"></canvas>
+  <h1 id="logo-title">Magnific Popup</h1>
+</div>
+{% include logo.html %}
+<div>
+  <h2 class="intro">Magnific Popup is a responsive lightbox &amp; dialog script with focus on performance and providing best experience for user with any device<br/>(for jQuery or Zepto.js).</h2>
+  <div id="header-links">
+    <a href="documentation.html">Documentation</a> &middot; <a href="https://github.com/dimsemenov/Magnific-Popup">GitHub</a> &middot; <a href="wordpress.html" class="wp-version-link" data-mfp-src="#mc_embed_signup">WordPress plugin</a> &middot; <a href="#mfp-build-tool" class="mfp-build-tool-link">Build tool</a> &middot; <a class="smashing-link" href="http://coding.smashingmagazine.com/2013/05/02/truly-responsive-lightbox/">How it was made</a>
+  </div>
+</div>
+
+{% include examples.html %}
+
+<p id="smashing">Don't forget to check out <a href="http://coding.smashingmagazine.com/2013/05/02/truly-responsive-lightbox/">my new article</a> about this plugin on the <a class="smashing-link" href="http://coding.smashingmagazine.com/2013/05/02/truly-responsive-lightbox/">Smashing Magazine</a>.</p>
+
+
+<h2>What makes this plugin different?</h2>
+<div class="features grid-c">
+
+  <div class="gc3">
+    <h3>Light and modular</h3>
+    <p>You can choose to include only the features that you need using the <a href="#mfp-build-tool" class="mfp-build-tool-link popup-link">online build tool</a> or by compiling it yourself with <a href="http://gruntjs.com">Grunt.js</a>. Size of core JS file is about <strong>3KB</strong> + each module weighs about 0.5KB (gzipped). Sass CSS preprocessor is used for easier skinning, but you're not obligated to use it.</p>
+  </div>
+  <div class="gc3">
+    <h3>Content is resized with CSS</h3>
+    <p>The majority of lightbox plugins require you to define size of it via JS option. Magnific Popup does not -  feel free to use relative units like EM's or resize lightbox with help of CSS media queries. Update content inside lightbox without worrying about how it'll resize and center.</p>
+  </div>
+  <div class="gc3">
+    <h3>Fast</h3>
+    <p>Magnific Popup displays images before they're completely loaded to take full advantage of progressive loading. For in and out transitions CSS3 is used instead of slow JavaScript animation.</p>
+  </div>
+  <div class="gc3">
+    <h3>High-DPI (Retina) display support</h3>
+    <p>Default controls are made with pure CSS, without external graphics. For the main image there is a built in way to provide appropriate source for different pixel density displays.</p>
+  </div>
+  <div class="gc3">
+    <h3>Conditional lightbox</h3>
+    <p>Plugin has an option to automatically switch to alternative mobile-friendly source on small screen size. Brad Frost has a <a href="http://bradfrostweb.com/blog/post/conditional-lightbox/">terrific article</a> about this technique.</p>
+  </div>
+  <div class="gc3">
+    <h3>Memory management</h3>
+    <p>Popup has an extendable micro templating engine that reuses existing DOM elements (<a href="http://codepen.io/dimsemenov/pen/sHoxp">example</a>), which is especially useful when your popups same pattern.</p>
+  </div>
+</div><br/>
+
+{% include signup.html %}
+
+
+<h2>Browser support</h2>
+<p>Tested on desktop: Chrome, Safari, FF, Opera, IE8+, partial support of IE7 (works, but some visual layout features, like vertical centering, are missing). Mobile: default browser in Android 2.3+, iOS5+, Blackberry
+10+, WP7+, mobile Opera and Chrome on Android. If you noticed any bug, please open an <a href="https://github.com/dimsemenov/Magnific-Popup/issues?state=open">issue on GitHub</a></p>
+
+<h2 id="license">License</h2>
+<p>Script is available under MIT license and will always be kept this way.<br/>But please do me a favor and do not create a public WordPress plugin based on it,  because I will make it soon and it will be open souce too. (<a href="http://dimsemenov.com/subscribe.html">Want to get notified?</a>).
+</p>
+
+<h2>Bugs & contributing</h2>
+<p>Please report bugs via <a href="https://github.com/dimsemenov/Magnific-Popup/issues">GitHub</a> and ask general questions through <a href="http://stackoverflow.com/questions/ask?tags=magnific-popup">StackOverflow</a>. Feel free to submit commit, even the tiniest contributions to the script or to the documentation are very welcome.</p>
+<p>Special thanks to:</p>
+<ul>
+  <li><a href="https://twitter.com/lokesh">Lokesh Dhakar</a> for original Lightbox script.</li>
+  <li><a href="https://twitter.com/chriscoyier">Chris Coyier</a> for awesome CSS techniques.</li>
+  <li><a href="https://twitter.com/brad_frost">Brad Frost</a> for conditional lightbox technique.</li>
+</uL>
+
+<h2>Updates</h2>
+<p>If you wish to get notified about important plugin updates, you may star and watch the repository on <a href="https://github.com/dimsemenov/Magnific-Popup">GitHub</a>, follow <a href="http://twitter.com/dimsemenov">me on Twitter</a>, or join my tiny Mailchimp <a href="http://dimsemenov.com/subscribe.html">email newsletter</a> that I send 3-4 times a year.</p>
+
+
+<div class="share-buttons">
+  <h2>Please spread the word if you find the plugin useful</h2>
+  <div id="buttons-row">
+    <a id="tweet" rel="nofollow" href="https://twitter.com/intent/tweet?text=Magnific%20Popup%20-%20responsive%20lightbox%20plugin&amp;url=http%3A%2F%2Fbit.ly%2Fmagnificpopup&amp;via=dimsemenov">Tweet!</a>
+    <a id="like" rel="nofollow" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fdimsemenov.com%2Fplugins%2Fmagnific-popup%2F%3Futm_source%3Dfb%26utm_medium%3Dsocial%26utm_campaign%3Dmfp">Like!</a> 
+    <a id="gplus" rel="nofollow" href="https://plus.google.com/share?url=http%3A%2F%2Fdimsemenov.com%2Fplugins%2Fmagnific-popup%2F%3Futm_source%3Dgplus%26utm_medium%3Dsocial%26utm_campaign%3Dmfp">+1</a>
+    <iframe src="http://ghbtns.com/github-btn.html?user=dimsemenov&amp;repo=magnific-popup&amp;type=watch&amp;count=true&amp;size=large" allowtransparency="true" frameborder="0" scrolling="0" width="155" height="30" style="transform: translateY(8px);-moz-transform: translateY(8px);-webkit-transform: translateY(8px); margin-left: 9px;"></iframe>
+  </div>
+</div>
+<script>
+(function(){
+  var openWindowPopup = function(e) {
+    if(!e) return;
+    e.preventDefault();
+    window.open(e.target.href, "intent", "scrollbars=yes,resizable=yes,toolbar=no,location=yes,width=550,height=420,left=" + (window.screen ? Math.round(screen.width / 2 - 275) : 50) + ",top=" + 100);
+  };
+  var ids = ['tweet', 'like', 'gplus'];
+  for(var i = 0; i < ids.length; i++) {
+    document.getElementById(ids[i]).onclick = openWindowPopup;
+  }
+})();
+</script>
diff --git a/vendor/dimsemenov/magnific-popup/website/site-assets/ajax/test-ajax-2.html b/vendor/dimsemenov/magnific-popup/website/site-assets/ajax/test-ajax-2.html
new file mode 100644
index 0000000000..a2ae7a52be
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/site-assets/ajax/test-ajax-2.html
@@ -0,0 +1,29 @@
+<div class="ajax-text-and-image white-popup-block">
+	<style>
+	.ajax-text-and-image {
+		max-width:800px; margin: 20px auto; background: #FFF; padding: 0; line-height: 0;
+	}
+	.ajcol {
+		width: 50%; float:left;
+	}
+	.ajcol img {
+		width: 100%; height: auto;
+	}
+	@media all and (max-width:30em) {
+		.ajcol { 
+			width: 100%;
+			float:none;
+		}
+	}
+	</style>
+	<div class="ajcol">
+		<img src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/e7/Marabou_stork%2C_Leptoptilos_crumeniferus_edit1.jpg/603px-Marabou_stork%2C_Leptoptilos_crumeniferus_edit1.jpg"/>
+	</div>
+	<div class="ajcol" style="line-height: 1.231;">
+		<div style="padding: 1em">
+			<h1>This is just block of HTML, loaded via ajax</h1>
+		    <p>You can put absolutely any HTML here and resize it dynamically just with help of CSS.</p>
+		</div>
+	</div>
+	<div style="clear:both; line-height: 0;"></div>
+</div>
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/website/site-assets/ajax/test-ajax.html b/vendor/dimsemenov/magnific-popup/website/site-assets/ajax/test-ajax.html
new file mode 100644
index 0000000000..8175e9146e
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/site-assets/ajax/test-ajax.html
@@ -0,0 +1,10 @@
+<div id="custom-content" class="white-popup-block" style="max-width:600px; margin: 20px auto;">
+    <h1>HTML content, loaded via ajax</h1>
+    <style>
+    #custom-content img {max-width: 100%;margin-bottom: 10px;}
+    </style>
+    <p>This is dummy copy. It is not meant to be read. It has been placed here solely to demonstrate the look and feel of finished, typeset text. Only for show. He who searches for meaning here will be sorely disappointed.  These words are here to provide the reader with a basic impression of how actual text will appear in its final presentation. </p>
+   	<p>This is dummy copy. It's Greek to you. Unless, of course, you're Greek, in which case, it really makes no sense. Why, you can't even read it!  It is strictly for mock-ups. You may mock it up as strictly as you wish.</p>
+	<img src="http://farm9.staticflickr.com/8242/8558295633_f34a55c1c6_b.jpg" />
+	<img src="http://farm9.staticflickr.com/8382/8558295631_0f56c1284f_b.jpg" />
+</div>
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/website/site-assets/site.css b/vendor/dimsemenov/magnific-popup/website/site-assets/site.css
new file mode 100644
index 0000000000..9a36429234
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/site-assets/site.css
@@ -0,0 +1,861 @@
+/* Demo site CSS. Not mobile first, not semantic, not optimized, made for 20 minutes, mess */
+html, body, div, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, ol, ul, li, form, fieldset, legend, label, table, header, footer, nav, section, figure {
+  margin: 0;
+  padding: 0; 
+}
+html {
+  overflow-y: scroll;
+}
+body {
+  font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
+  font-size: 14px;
+  line-height: 1.6;
+  color: #5A6064;
+}
+pre,code{
+  tab-size: 4;
+}
+p {
+  margin: 0 0 11px;
+}
+ul {
+  list-style: disc;
+}
+ul, ol {
+  padding: 0;
+  margin: 0 0 11px 25px;
+}
+li {
+  line-height: 22px;
+  margin: 0 0 .5em 0;
+}
+h1, h2, h3, h4, h5, h6 {
+  margin: 0;
+  font-weight: normal;
+  text-rendering: optimizelegibility;
+
+  color: #282B30;
+  font-family:Calibri, "PT Sans", "Trebuchet MS", 'Helvetica Neue', Arial
+}
+.mfp-preloader {
+  font-size: 13px;
+}
+img {
+  border: 0;
+}
+h1 {
+  margin-bottom: 5px;
+}
+.get-code-window {
+  position: relative;
+  background: #FFF;
+  padding: 2em 3em;
+  width: auto;
+  margin: 20px auto;
+  max-width: 600px;
+}
+#magnific_popup_documentation {
+  font-size: 3em;
+  margin-bottom: 1em;
+  font-weight: bold;
+  text-align: center;
+}
+
+
+h2 {
+  font-weight: bold;
+margin-top: 2em;
+margin-bottom: .3em;
+border-bottom: 1px solid #DDD;
+padding-bottom: 0.2em;
+font-size: 1.8em;
+}
+h3 {
+  font-size: 22px;
+line-height: 24px;
+margin-bottom: 12px;
+  margin-top: 20px;
+}
+h4 {
+  margin-bottom: 5px;
+}
+a {
+  color: #3169B3;
+  text-decoration: underline;
+}
+a:hover {
+  color: #C00;
+  text-decoration: underline;
+}
+
+
+
+body {
+  background: #fafafa;
+}
+
+
+.grid-c h3 {
+  margin-top: 0;
+}
+.grid-c {
+  clear: both;
+}
+.grid-c p {
+  margin-bottom: .5em;
+}
+.grid-c {
+  overflow: hidden;
+  margin: 0 -1em;
+}
+.gc3 {
+  -moz-box-sizing: border-box;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  width: 50%;
+  float: left;
+  padding: 1em;
+  overflow: hidden;
+}
+.grid-c .gc3:nth-of-type(2n+1) {
+clear: left;
+}
+
+h1#magnific-popup-docs {
+  display: none;
+}
+
+#logo {
+  height: 150px;
+  text-align: center;
+  position: relative;
+  width: 100%;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  padding: 0 3em;
+  margin-left: -3em;
+  cursor: pointer;
+  margin-top: 50px;
+  margin-bottom: 50px;
+}
+#broken-glass {
+  height: 100%;
+  -webkit-tap-highlight-color: transparent;
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 100%;
+}
+#logo:active h1 {
+  top: 1px;
+}
+
+#logo h1 {
+  margin-top: 27px;
+font-size: 63px;
+line-height: 1.4;
+top: 0;
+}
+
+#logo h1 {
+  text-align: center;
+  font-weight: bold;
+  width: 100%;
+  color: #000;
+  position: absolute;
+  left: 0;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  cursor: pointer;
+}
+
+
+h2.intro {
+  font-size: 22px;
+  line-height: 1.2;
+  font-weight: normal;
+  border: 0;
+  margin-top: 0;
+}
+#header-links {
+  font-size: 16px;
+}
+/*#header-links a {
+  color: #A5CCFF;
+}
+#header-links a:hover {
+  opacity: 0.8;
+}*/
+
+
+#markdown-toc {
+  position: fixed;
+  left: 0;
+  top: 50px;
+  padding: 20px 20px;
+  background: rgba(255, 255, 255, 0.71);
+  -webkit-backface-visibility:hidden;
+  list-style: none;
+}
+#markdown-toc a[href="#magnific-popup-docs"] {
+  display: none;
+}
+#markdown-toc ul {
+  list-style: none;
+}
+#markdown-toc ul ul {
+  display: none;
+}
+#markdown-toc:before {
+  content: 'Table of contents';
+  font-weight: bold;
+  display: block;
+  margin-bottom: 10px;
+}
+@media all and (max-width: 75em) {
+  #markdown-toc {
+    position: static;
+    padding: 0;
+    background: none;
+  } 
+}
+#markdown-toc a {
+  text-decoration: none;
+  border-bottom: 1px dotted;
+}
+#markdown-toc ul {
+  margin: 0;
+  padding: 0;
+}
+#markdown-toc .active a{
+  text-decoration: none;
+  color: #666;
+}
+/*h2:target {
+  font-weight: bold;
+  margin-top: 0;
+  border-top: 1.8em solid transparent;
+  margin-bottom: .3em;
+  border-bottom: 0;
+
+  -webkit-background-clip: padding-box;
+  -moz-background-clip: padding;
+  background-clip: padding-box;
+  background-color: #FFF6BF;
+  padding-top: .2em;
+  padding-left: .5em;
+}*/
+code,pre {
+   font-family: Consolas, "Liberation Mono", Courier, monospace;
+}
+code {
+  background: #F8F8F8;
+  padding: .1em .4em;
+  color: #c82829;
+  font-size: 13px;
+}
+
+pre {
+  background: none;
+  line-height: 18px;
+  overflow: auto;
+  padding: 20px 25px;
+ 
+  border-radius: 2px;
+}
+pre code {
+  border: 0;
+  padding: 0;
+  background: none;
+  color: #000;
+  font-size: 13px;
+}
+.highlight {
+position: relative;
+margin-bottom: 0.5em;
+margin-left: -1.5em;
+width: 100%;
+padding: 0 1.5em;
+background-color: #F5FAFC;
+
+}
+pre code:before {
+display: block;
+position: absolute;
+right: 3px;
+top: 6px;
+padding: 3px 7px 0;
+color: #889499;
+font-size: 12px;
+line-height: 13px;
+}
+
+
+code.html:before {
+content: 'HTML';
+}
+code.javascript:before {
+content: 'JS';
+}
+code.css:before {
+content: 'CSS';
+}
+
+
+#mc_embed_signup {
+  max-width: 350px;
+  padding: 32px;
+  background: #EEE;
+}
+#mc_embed_signup input[type="email"] {
+  border: 1px solid #CCC;
+  border-top: 1px solid #999;
+  padding: 5px;
+  font-size: 18px;
+  width: 200px;
+  margin-right: 10px;
+  height: 25px;
+  transition: all 0.3s ease;
+  -moz-transition: all 0.3s ease;
+  -webkit-transition: all 0.3s ease;
+  border-radius: 2px;
+  -moz-border-radius: 2px;
+  -webkit-border-radius: 2px;
+}
+#mc_embed_signup input[type="email"]:focus {
+  background-color: #FFF;
+  border: 1px solid #3169B3;
+  box-shadow: #3169B3 0px 0px 5px;
+  -moz-box-shadow: #3169B3 0px 0px 5px;
+  -webkit-box-shadow: #3169B3 0px 0px 5px;
+  outline: none;
+}
+#mc_embed_signup input[type="submit"] {
+  border: 1px solid #3169B3;
+  font-size: 13px;
+  font-weight: bold;
+  color: #FFF;
+  height: auto;
+  padding: 8px 13px;
+  cursor: pointer;
+  background-color: #3169B3;
+  display: inline-block;
+  width: auto;
+  -webkit-appearance: none;
+  border-radius: 2px;
+  -moz-border-radius: 2px;
+  -webkit-border-radius: 2px;
+  vertical-align: top;
+}
+.embed-form {
+  position: relative;
+}
+#mc_embed_signup p {
+  font-size: 15px;
+  color: #4F4F4F;
+}
+
+
+
+#main-wrapper {
+ 
+  background: none;
+	max-width: 800px;
+	width: 100%;
+	margin: 2em auto 4em;
+  padding: 3em;
+   padding-top: 0;
+  -moz-box-sizing: border-box;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  position: relative;
+}
+
+
+.white-popup-block {
+  background: #FFF;
+  padding: 20px 30px;
+  text-align: left;
+  max-width: 650px;
+  margin: 40px auto;
+  position: relative;
+}
+
+#examples:after {
+  content: 'to view source click on the title of example';
+opacity: 0.4;
+font-weight: normal;
+font-size: 14px;
+margin-top: 13px;
+float: right;
+}
+.example {
+  margin-bottom: 20px;
+  position: relative;
+}
+.example h3 {
+  display: inline-block;
+  cursor: pointer;
+  border-bottom: 1px dotted #949494;
+}
+.example h3:hover {
+  color: #C00;
+}
+.example h3:hover:after {
+  content: 'view source';
+  padding-left: 8px;
+  color: #999;
+  position: absolute;
+  top: 16px;
+  font-family: Consolas, "Liberation Mono", Courier, monospace;
+  font-size: 12px;
+}
+
+/*button.get-code-btn {
+  cursor: pointer;
+  background: transparent;
+  border: 0;
+  -webkit-appearance: none;
+  display: block;
+  z-index: 1;
+  padding: 0;
+  outline: none;
+  background: red;
+  position: absolute;
+  right: 0;
+  top: 0;
+}*/
+
+.square-tmb {
+  margin: 0 10px 0 0;
+  cursor: pointer;
+}
+.zoom-cursor {
+  cursor: -webkit-zoom-in;
+  cursor: -moz-zoom-in;
+  cursor: zoom-in;
+}
+.example a,
+a.popup-link {
+  text-decoration: none;
+  border-bottom: 1px dotted;
+}
+.example a:hover,
+a.popup-link:hover {
+  text-decoration: none;
+}
+
+.example a {
+  line-height: 26px;
+}
+.example p a {
+  text-decoration: underline;
+  border: 0;
+  line-height: 1.6;
+}
+
+#image-gallery a,
+#single-image {
+  border-bottom: none;
+}
+.not-ready-yet-notice {
+  padding: 20px 20px;
+  background: #EEE;
+}
+
+#footer {
+  border-top: 1px solid #DDD;
+  padding-top: 3em;
+  margin: 5em 0 0;
+  width: 100%;
+  text-align: center;
+  opacity: 0.9;
+}
+
+#conditional-lightbox-notice {
+  display: none;
+}
+
+#logo-status {
+  opacity: 0;
+  -webkit-transition: opacity 0.5s;
+  -moz-transition: opacity 0.5s;
+  transition: opacity 0.5s;
+  width: 100%;
+  text-align: center;
+}
+#logo-status.down {
+    opacity: 1;
+}
+
+.grid-of-images a {
+  cursor: -webkit-zoom-in;
+  cursor: -moz-zoom-in;
+  cursor: zoom-in;
+  border-bottom: 0;
+  height: 75px;
+  display: block;
+  float: left;
+  margin: 0 5px 5px 0;
+  width: 75px;
+}
+.grid-of-images a:hover {
+  opacity: 0.9;
+}
+
+h3 em {
+  opacity: 0.3;
+}
+
+code.def {
+ padding: 0;
+background: #FFF;
+border: 0;
+display: block;
+margin-bottom: 8px;
+margin-top: -10px;
+color: #A3A3A3;
+}
+
+@media all and (max-width: 50em) {
+  #logo h1 {
+    font-size: 52px;
+    margin-top: 36px;
+  }
+}
+
+@media all and (max-width: 30em) {
+  #examples:after {
+    display: none;
+  }
+  .gc3 { 
+    width: 100%;
+  }
+  .grid-c .gc3:nth-of-type(2n+1) {
+  clear: none;
+  }
+  #main-wrapper { 
+    padding: 1em;
+    margin-top: 0;
+  }
+  .highlight {
+    padding: 0.2em 1em;
+    margin: 1em -1em;
+  }
+  #logo {
+    height: 95px;
+    width: 100%;
+    padding: 0;
+    margin: 0 auto;
+    margin-top: 0;
+    margin-bottom: 2em;
+  }
+  #logo h1 {
+    font-size: 32px;
+  margin-top: 23px;
+  }
+  h2.intro {
+    font-size: 20px;
+  }
+}
+
+@media all and (max-width: 700px) {
+  .zoom-cursor {
+    cursor: pointer;
+  }
+  #conditional-lightbox-notice {
+    display: block;
+    padding: 10px;
+    background: #FFEAEA;
+  }
+}
+
+
+
+#logo-overlay {
+  width: 100%;
+  height: 75px;
+  
+}
+#logo-overlay {
+  opacity: 1;
+  background: red;
+  position: absolute;
+  left: 0;
+  top: 0;
+  opacity: 0;
+}
+#mfp-build-tool {
+  background: #FFF;
+  padding: 30px 40px 40px 40px;
+  max-width: 500px;
+  text-align: left;
+  margin: 10px auto;
+  position: relative;
+}
+
+#mfp-build-tool h2 {
+  margin-top: 0;
+  margin-bottom: 0.7em;
+}
+#mfp-build-form label {
+  display: block;
+margin-bottom: 5px;
+min-height: 18px;
+padding-left: 18px;
+}
+#mfp-build-form input[type="checkbox"] {
+  margin: 3px 0;
+line-height: normal;
+cursor: pointer;
+width: auto;
+margin-right: 5px;
+float: left;
+margin-left: -18px;
+}
+#mfp-build-status {
+  min-height: 40px;
+}
+#mfp-build-status .error {
+  color: #830C0C;
+}
+#mfp-build-status .success {
+  color: #014B04;
+}
+#mfp-build-status .progress {
+  color: #000;
+}
+
+
+#smashing {
+  text-align: center;
+  font-weight: bold;
+}
+#smashing a {
+  color: #EF4A35;
+}
+#smashing a:hover {
+  color: #FF9369;
+}
+#smashing strong {
+  color: #EF4A35;
+}
+.smashing-link {
+  margin-left: 29px;
+  position: relative;
+}
+.smashing-link:before {
+  content: '';
+  display: inline-block;
+  width: 24px;
+  height: 24px;
+  background: url("http://dimsemenov.com/images/sm-logo-24x24.png");
+  position: absolute;
+  top: -4px;
+  left: -28px;
+}
+#hackernews {
+  margin-left: 24px;
+}
+#hackernews:before {
+  background: url("http://dimsemenov.com/images/hn-logo-18x18.gif");
+  width: 18px;
+  height: 18px;
+  top: -1px;
+  left: -22px;
+}
+
+
+.share-buttons {
+  text-align: center;
+}
+.share-buttons h2 {
+  text-align: center;
+  border: 0;
+  
+}
+.share-buttons {
+  position: relative;
+  margin: 70px 0;
+}
+.share-buttons a {
+  -moz-border-radius: 2px;
+  border-radius: 2px;
+  display: inline-block;
+  padding: 10px 20px;
+  margin: 10px;
+  color: #FFF;
+  text-decoration: none;
+  background: #5AAF63;
+  font-size: 16px;
+  line-height: 22px;
+  cursor: pointer;
+}
+.share-buttons a:hover {
+  opacity: 0.7;
+}
+#tweet {
+  background: #0096c4;
+}
+#like {
+  background: #3b5998;
+}
+#gplus {
+  background: #d34836;
+}
+#vkcom {
+  background: #6e8fb1;
+}
+
+
+
+pre .comment,
+pre .template_comment,
+pre .diff .header,
+pre .javadoc {
+  color: #998;
+  font-style: italic
+}
+
+pre .keyword,
+pre .css .rule .keyword,
+pre .winutils,
+pre .javascript .title,
+pre .nginx .title,
+pre .subst,
+pre .request,
+pre .status {
+  color: #333;
+  font-weight: bold
+}
+
+pre .number,
+pre .hexcolor,
+pre .ruby .constant {
+  color: #099;
+}
+
+pre .string,
+pre .tag .value,
+pre .phpdoc,
+pre .tex .formula {
+  color: #D01040;
+}
+
+pre .title,
+pre .id {
+  color: #900;
+  font-weight: bold
+}
+
+pre .javascript .title,
+pre .lisp .title,
+pre .clojure .title,
+pre .subst {
+  font-weight: normal
+}
+
+pre .class .title,
+pre .haskell .type,
+pre .vhdl .literal,
+pre .tex .command {
+  color: #458;
+  font-weight: bold
+}
+
+pre .tag,
+pre .tag .title,
+pre .rules .property,
+pre .django .tag .keyword {
+  color: #000080;
+  font-weight: normal
+}
+
+pre .attribute,
+pre .variable,
+pre .lisp .body {
+  color: teal;
+}
+
+pre .regexp {
+  color: #009926
+}
+
+pre .class {
+  color: #458;
+  font-weight: bold
+}
+
+pre .symbol,
+pre .ruby .symbol .string,
+pre .lisp .keyword,
+pre .tex .special,
+pre .prompt {
+ 
+
+}
+
+pre .built_in,
+pre .lisp .title,
+pre .clojure .built_in {
+  color: #0086b3
+}
+
+pre .preprocessor,
+pre .pi,
+pre .doctype,
+pre .shebang,
+pre .cdata {
+  color: #999;
+  font-weight: bold
+}
+
+pre .deletion {
+  background: #fdd
+}
+
+pre .addition {
+  background: #dfd
+}
+
+pre .diff .change {
+  background: #0086b3
+}
+
+pre .chunk {
+  color: #aaa
+}
+
+#documentation-intro {
+  background: #2b2b2b;
+  text-align: center;
+  padding: 3em;
+  width: 100%;
+  margin-left: -3em;
+  margin-bottom: 3em;
+}
+#documentation-intro h1 {
+  color: #FFF;
+  width: 100%;
+  text-align: center;
+  font-size: 44px;
+  line-height: 1.1em;
+}
+#id1 {
+  display: none;
+}
+#documentation-intro h1 a {
+  text-decoration: none;
+  color: #FFF;
+}
+#documentation-intro p a {
+  font-size: 15px;
+  color: #7CB5FF;
+}
+#documentation-intro a:hover {
+  opacity: 0.75;
+  text-decoration: underline;
+}
+
+/* Syntax highlighter */
+.hll{background-color:#ffc}.c{color:#998;font-style:italic}.err{color:#a61717;background-color:#e3d2d2}.k{color:#000;font-weight:bold}.o{color:#000;font-weight:bold}.cm{color:#998;font-style:italic}.cp{color:#999;font-weight:bold;font-style:italic}.c1{color:#998;font-style:italic}.cs{color:#999;font-weight:bold;font-style:italic}.gd{color:#000;background-color:#fdd}.ge{color:#000;font-style:italic}.gr{color:#a00}.gh{color:#999}.gi{color:#000;background-color:#dfd}.go{color:#888}.gp{color:#555}.gs{font-weight:bold}.gu{color:#aaa}.gt{color:#a00}.kc{color:#000;font-weight:bold}.kd{color:#000;font-weight:bold}.kn{color:#000;font-weight:bold}.kp{color:#000;font-weight:bold}.kr{color:#000;font-weight:bold}.kt{color:#458;font-weight:bold}.m{color:#099}.s{color:#d01040}.na{color:#008080}.nb{color:#0086b3}.nc{color:#458;font-weight:bold}.no{color:#008080}.nd{color:#3c5d5d;font-weight:bold}.ni{color:#800080}.ne{color:#900;font-weight:bold}.nf{color:#900;font-weight:bold}.nl{color:#900;font-weight:bold}.nn{color:#555}.nt{color:#000080}.nv{color:#008080}.ow{color:#000;font-weight:bold}.w{color:#bbb}.mf{color:#099}.mh{color:#099}.mi{color:#099}.mo{color:#099}.sb{color:#d01040}.sc{color:#d01040}.sd{color:#d01040}.s2{color:#d01040}.se{color:#d01040}.sh{color:#d01040}.si{color:#d01040}.sx{color:#d01040}.sr{color:#009926}.s1{color:#d01040}.ss{color:#990073}.bp{color:#999}.vc{color:#008080}.vg{color:#008080}.vi{color:#008080}.il{color:#099}
diff --git a/vendor/dimsemenov/magnific-popup/website/third-party-libs/jquery.js b/vendor/dimsemenov/magnific-popup/website/third-party-libs/jquery.js
new file mode 100644
index 0000000000..c695ad9940
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/third-party-libs/jquery.js
@@ -0,0 +1,9597 @@
+/*!
+ * jQuery JavaScript Library v1.9.1
+ * http://jquery.com/
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ *
+ * Copyright 2005, 2012 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2013-2-4
+ */
+(function( window, undefined ) {
+
+// Can't do this because several apps including ASP.NET trace
+// the stack via arguments.caller.callee and Firefox dies if
+// you try to trace through "use strict" call chains. (#13335)
+// Support: Firefox 18+
+//"use strict";
+var
+	// The deferred used on DOM ready
+	readyList,
+
+	// A central reference to the root jQuery(document)
+	rootjQuery,
+
+	// Support: IE<9
+	// For `typeof node.method` instead of `node.method !== undefined`
+	core_strundefined = typeof undefined,
+
+	// Use the correct document accordingly with window argument (sandbox)
+	document = window.document,
+	location = window.location,
+
+	// Map over jQuery in case of overwrite
+	_jQuery = window.jQuery,
+
+	// Map over the $ in case of overwrite
+	_$ = window.$,
+
+	// [[Class]] -> type pairs
+	class2type = {},
+
+	// List of deleted data cache ids, so we can reuse them
+	core_deletedIds = [],
+
+	core_version = "1.9.1",
+
+	// Save a reference to some core methods
+	core_concat = core_deletedIds.concat,
+	core_push = core_deletedIds.push,
+	core_slice = core_deletedIds.slice,
+	core_indexOf = core_deletedIds.indexOf,
+	core_toString = class2type.toString,
+	core_hasOwn = class2type.hasOwnProperty,
+	core_trim = core_version.trim,
+
+	// Define a local copy of jQuery
+	jQuery = function( selector, context ) {
+		// The jQuery object is actually just the init constructor 'enhanced'
+		return new jQuery.fn.init( selector, context, rootjQuery );
+	},
+
+	// Used for matching numbers
+	core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
+
+	// Used for splitting on whitespace
+	core_rnotwhite = /\S+/g,
+
+	// Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)
+	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+	// A simple way to check for HTML strings
+	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+	// Strict HTML recognition (#11290: must start with <)
+	rquickExpr = /^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,
+
+	// Match a standalone tag
+	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
+
+	// JSON RegExp
+	rvalidchars = /^[\],:{}\s]*$/,
+	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+	rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
+	rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,
+
+	// Matches dashed string for camelizing
+	rmsPrefix = /^-ms-/,
+	rdashAlpha = /-([\da-z])/gi,
+
+	// Used by jQuery.camelCase as callback to replace()
+	fcamelCase = function( all, letter ) {
+		return letter.toUpperCase();
+	},
+
+	// The ready event handler
+	completed = function( event ) {
+
+		// readyState === "complete" is good enough for us to call the dom ready in oldIE
+		if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {
+			detach();
+			jQuery.ready();
+		}
+	},
+	// Clean-up method for dom ready events
+	detach = function() {
+		if ( document.addEventListener ) {
+			document.removeEventListener( "DOMContentLoaded", completed, false );
+			window.removeEventListener( "load", completed, false );
+
+		} else {
+			document.detachEvent( "onreadystatechange", completed );
+			window.detachEvent( "onload", completed );
+		}
+	};
+
+jQuery.fn = jQuery.prototype = {
+	// The current version of jQuery being used
+	jquery: core_version,
+
+	constructor: jQuery,
+	init: function( selector, context, rootjQuery ) {
+		var match, elem;
+
+		// HANDLE: $(""), $(null), $(undefined), $(false)
+		if ( !selector ) {
+			return this;
+		}
+
+		// Handle HTML strings
+		if ( typeof selector === "string" ) {
+			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+				// Assume that strings that start and end with <> are HTML and skip the regex check
+				match = [ null, selector, null ];
+
+			} else {
+				match = rquickExpr.exec( selector );
+			}
+
+			// Match html or make sure no context is specified for #id
+			if ( match && (match[1] || !context) ) {
+
+				// HANDLE: $(html) -> $(array)
+				if ( match[1] ) {
+					context = context instanceof jQuery ? context[0] : context;
+
+					// scripts is true for back-compat
+					jQuery.merge( this, jQuery.parseHTML(
+						match[1],
+						context && context.nodeType ? context.ownerDocument || context : document,
+						true
+					) );
+
+					// HANDLE: $(html, props)
+					if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
+						for ( match in context ) {
+							// Properties of context are called as methods if possible
+							if ( jQuery.isFunction( this[ match ] ) ) {
+								this[ match ]( context[ match ] );
+
+							// ...and otherwise set as attributes
+							} else {
+								this.attr( match, context[ match ] );
+							}
+						}
+					}
+
+					return this;
+
+				// HANDLE: $(#id)
+				} else {
+					elem = document.getElementById( match[2] );
+
+					// Check parentNode to catch when Blackberry 4.6 returns
+					// nodes that are no longer in the document #6963
+					if ( elem && elem.parentNode ) {
+						// Handle the case where IE and Opera return items
+						// by name instead of ID
+						if ( elem.id !== match[2] ) {
+							return rootjQuery.find( selector );
+						}
+
+						// Otherwise, we inject the element directly into the jQuery object
+						this.length = 1;
+						this[0] = elem;
+					}
+
+					this.context = document;
+					this.selector = selector;
+					return this;
+				}
+
+			// HANDLE: $(expr, $(...))
+			} else if ( !context || context.jquery ) {
+				return ( context || rootjQuery ).find( selector );
+
+			// HANDLE: $(expr, context)
+			// (which is just equivalent to: $(context).find(expr)
+			} else {
+				return this.constructor( context ).find( selector );
+			}
+
+		// HANDLE: $(DOMElement)
+		} else if ( selector.nodeType ) {
+			this.context = this[0] = selector;
+			this.length = 1;
+			return this;
+
+		// HANDLE: $(function)
+		// Shortcut for document ready
+		} else if ( jQuery.isFunction( selector ) ) {
+			return rootjQuery.ready( selector );
+		}
+
+		if ( selector.selector !== undefined ) {
+			this.selector = selector.selector;
+			this.context = selector.context;
+		}
+
+		return jQuery.makeArray( selector, this );
+	},
+
+	// Start with an empty selector
+	selector: "",
+
+	// The default length of a jQuery object is 0
+	length: 0,
+
+	// The number of elements contained in the matched element set
+	size: function() {
+		return this.length;
+	},
+
+	toArray: function() {
+		return core_slice.call( this );
+	},
+
+	// Get the Nth element in the matched element set OR
+	// Get the whole matched element set as a clean array
+	get: function( num ) {
+		return num == null ?
+
+			// Return a 'clean' array
+			this.toArray() :
+
+			// Return just the object
+			( num < 0 ? this[ this.length + num ] : this[ num ] );
+	},
+
+	// Take an array of elements and push it onto the stack
+	// (returning the new matched element set)
+	pushStack: function( elems ) {
+
+		// Build a new jQuery matched element set
+		var ret = jQuery.merge( this.constructor(), elems );
+
+		// Add the old object onto the stack (as a reference)
+		ret.prevObject = this;
+		ret.context = this.context;
+
+		// Return the newly-formed element set
+		return ret;
+	},
+
+	// Execute a callback for every element in the matched set.
+	// (You can seed the arguments with an array of args, but this is
+	// only used internally.)
+	each: function( callback, args ) {
+		return jQuery.each( this, callback, args );
+	},
+
+	ready: function( fn ) {
+		// Add the callback
+		jQuery.ready.promise().done( fn );
+
+		return this;
+	},
+
+	slice: function() {
+		return this.pushStack( core_slice.apply( this, arguments ) );
+	},
+
+	first: function() {
+		return this.eq( 0 );
+	},
+
+	last: function() {
+		return this.eq( -1 );
+	},
+
+	eq: function( i ) {
+		var len = this.length,
+			j = +i + ( i < 0 ? len : 0 );
+		return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
+	},
+
+	map: function( callback ) {
+		return this.pushStack( jQuery.map(this, function( elem, i ) {
+			return callback.call( elem, i, elem );
+		}));
+	},
+
+	end: function() {
+		return this.prevObject || this.constructor(null);
+	},
+
+	// For internal use only.
+	// Behaves like an Array's method, not like a jQuery method.
+	push: core_push,
+	sort: [].sort,
+	splice: [].splice
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+jQuery.extend = jQuery.fn.extend = function() {
+	var src, copyIsArray, copy, name, options, clone,
+		target = arguments[0] || {},
+		i = 1,
+		length = arguments.length,
+		deep = false;
+
+	// Handle a deep copy situation
+	if ( typeof target === "boolean" ) {
+		deep = target;
+		target = arguments[1] || {};
+		// skip the boolean and the target
+		i = 2;
+	}
+
+	// Handle case when target is a string or something (possible in deep copy)
+	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+		target = {};
+	}
+
+	// extend jQuery itself if only one argument is passed
+	if ( length === i ) {
+		target = this;
+		--i;
+	}
+
+	for ( ; i < length; i++ ) {
+		// Only deal with non-null/undefined values
+		if ( (options = arguments[ i ]) != null ) {
+			// Extend the base object
+			for ( name in options ) {
+				src = target[ name ];
+				copy = options[ name ];
+
+				// Prevent never-ending loop
+				if ( target === copy ) {
+					continue;
+				}
+
+				// Recurse if we're merging plain objects or arrays
+				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+					if ( copyIsArray ) {
+						copyIsArray = false;
+						clone = src && jQuery.isArray(src) ? src : [];
+
+					} else {
+						clone = src && jQuery.isPlainObject(src) ? src : {};
+					}
+
+					// Never move original objects, clone them
+					target[ name ] = jQuery.extend( deep, clone, copy );
+
+				// Don't bring in undefined values
+				} else if ( copy !== undefined ) {
+					target[ name ] = copy;
+				}
+			}
+		}
+	}
+
+	// Return the modified object
+	return target;
+};
+
+jQuery.extend({
+	noConflict: function( deep ) {
+		if ( window.$ === jQuery ) {
+			window.$ = _$;
+		}
+
+		if ( deep && window.jQuery === jQuery ) {
+			window.jQuery = _jQuery;
+		}
+
+		return jQuery;
+	},
+
+	// Is the DOM ready to be used? Set to true once it occurs.
+	isReady: false,
+
+	// A counter to track how many items to wait for before
+	// the ready event fires. See #6781
+	readyWait: 1,
+
+	// Hold (or release) the ready event
+	holdReady: function( hold ) {
+		if ( hold ) {
+			jQuery.readyWait++;
+		} else {
+			jQuery.ready( true );
+		}
+	},
+
+	// Handle when the DOM is ready
+	ready: function( wait ) {
+
+		// Abort if there are pending holds or we're already ready
+		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+			return;
+		}
+
+		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+		if ( !document.body ) {
+			return setTimeout( jQuery.ready );
+		}
+
+		// Remember that the DOM is ready
+		jQuery.isReady = true;
+
+		// If a normal DOM Ready event fired, decrement, and wait if need be
+		if ( wait !== true && --jQuery.readyWait > 0 ) {
+			return;
+		}
+
+		// If there are functions bound, to execute
+		readyList.resolveWith( document, [ jQuery ] );
+
+		// Trigger any bound ready events
+		if ( jQuery.fn.trigger ) {
+			jQuery( document ).trigger("ready").off("ready");
+		}
+	},
+
+	// See test/unit/core.js for details concerning isFunction.
+	// Since version 1.3, DOM methods and functions like alert
+	// aren't supported. They return false on IE (#2968).
+	isFunction: function( obj ) {
+		return jQuery.type(obj) === "function";
+	},
+
+	isArray: Array.isArray || function( obj ) {
+		return jQuery.type(obj) === "array";
+	},
+
+	isWindow: function( obj ) {
+		return obj != null && obj == obj.window;
+	},
+
+	isNumeric: function( obj ) {
+		return !isNaN( parseFloat(obj) ) && isFinite( obj );
+	},
+
+	type: function( obj ) {
+		if ( obj == null ) {
+			return String( obj );
+		}
+		return typeof obj === "object" || typeof obj === "function" ?
+			class2type[ core_toString.call(obj) ] || "object" :
+			typeof obj;
+	},
+
+	isPlainObject: function( obj ) {
+		// Must be an Object.
+		// Because of IE, we also have to check the presence of the constructor property.
+		// Make sure that DOM nodes and window objects don't pass through, as well
+		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+			return false;
+		}
+
+		try {
+			// Not own constructor property must be Object
+			if ( obj.constructor &&
+				!core_hasOwn.call(obj, "constructor") &&
+				!core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+				return false;
+			}
+		} catch ( e ) {
+			// IE8,9 Will throw exceptions on certain host objects #9897
+			return false;
+		}
+
+		// Own properties are enumerated firstly, so to speed up,
+		// if last one is own, then all properties are own.
+
+		var key;
+		for ( key in obj ) {}
+
+		return key === undefined || core_hasOwn.call( obj, key );
+	},
+
+	isEmptyObject: function( obj ) {
+		var name;
+		for ( name in obj ) {
+			return false;
+		}
+		return true;
+	},
+
+	error: function( msg ) {
+		throw new Error( msg );
+	},
+
+	// data: string of html
+	// context (optional): If specified, the fragment will be created in this context, defaults to document
+	// keepScripts (optional): If true, will include scripts passed in the html string
+	parseHTML: function( data, context, keepScripts ) {
+		if ( !data || typeof data !== "string" ) {
+			return null;
+		}
+		if ( typeof context === "boolean" ) {
+			keepScripts = context;
+			context = false;
+		}
+		context = context || document;
+
+		var parsed = rsingleTag.exec( data ),
+			scripts = !keepScripts && [];
+
+		// Single tag
+		if ( parsed ) {
+			return [ context.createElement( parsed[1] ) ];
+		}
+
+		parsed = jQuery.buildFragment( [ data ], context, scripts );
+		if ( scripts ) {
+			jQuery( scripts ).remove();
+		}
+		return jQuery.merge( [], parsed.childNodes );
+	},
+
+	parseJSON: function( data ) {
+		// Attempt to parse using the native JSON parser first
+		if ( window.JSON && window.JSON.parse ) {
+			return window.JSON.parse( data );
+		}
+
+		if ( data === null ) {
+			return data;
+		}
+
+		if ( typeof data === "string" ) {
+
+			// Make sure leading/trailing whitespace is removed (IE can't handle it)
+			data = jQuery.trim( data );
+
+			if ( data ) {
+				// Make sure the incoming data is actual JSON
+				// Logic borrowed from http://json.org/json2.js
+				if ( rvalidchars.test( data.replace( rvalidescape, "@" )
+					.replace( rvalidtokens, "]" )
+					.replace( rvalidbraces, "")) ) {
+
+					return ( new Function( "return " + data ) )();
+				}
+			}
+		}
+
+		jQuery.error( "Invalid JSON: " + data );
+	},
+
+	// Cross-browser xml parsing
+	parseXML: function( data ) {
+		var xml, tmp;
+		if ( !data || typeof data !== "string" ) {
+			return null;
+		}
+		try {
+			if ( window.DOMParser ) { // Standard
+				tmp = new DOMParser();
+				xml = tmp.parseFromString( data , "text/xml" );
+			} else { // IE
+				xml = new ActiveXObject( "Microsoft.XMLDOM" );
+				xml.async = "false";
+				xml.loadXML( data );
+			}
+		} catch( e ) {
+			xml = undefined;
+		}
+		if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
+			jQuery.error( "Invalid XML: " + data );
+		}
+		return xml;
+	},
+
+	noop: function() {},
+
+	// Evaluates a script in a global context
+	// Workarounds based on findings by Jim Driscoll
+	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+	globalEval: function( data ) {
+		if ( data && jQuery.trim( data ) ) {
+			// We use execScript on Internet Explorer
+			// We use an anonymous function so that context is window
+			// rather than jQuery in Firefox
+			( window.execScript || function( data ) {
+				window[ "eval" ].call( window, data );
+			} )( data );
+		}
+	},
+
+	// Convert dashed to camelCase; used by the css and data modules
+	// Microsoft forgot to hump their vendor prefix (#9572)
+	camelCase: function( string ) {
+		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+	},
+
+	nodeName: function( elem, name ) {
+		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+	},
+
+	// args is for internal usage only
+	each: function( obj, callback, args ) {
+		var value,
+			i = 0,
+			length = obj.length,
+			isArray = isArraylike( obj );
+
+		if ( args ) {
+			if ( isArray ) {
+				for ( ; i < length; i++ ) {
+					value = callback.apply( obj[ i ], args );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( i in obj ) {
+					value = callback.apply( obj[ i ], args );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			}
+
+		// A special, fast, case for the most common use of each
+		} else {
+			if ( isArray ) {
+				for ( ; i < length; i++ ) {
+					value = callback.call( obj[ i ], i, obj[ i ] );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( i in obj ) {
+					value = callback.call( obj[ i ], i, obj[ i ] );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			}
+		}
+
+		return obj;
+	},
+
+	// Use native String.trim function wherever possible
+	trim: core_trim && !core_trim.call("\uFEFF\xA0") ?
+		function( text ) {
+			return text == null ?
+				"" :
+				core_trim.call( text );
+		} :
+
+		// Otherwise use our own trimming functionality
+		function( text ) {
+			return text == null ?
+				"" :
+				( text + "" ).replace( rtrim, "" );
+		},
+
+	// results is for internal usage only
+	makeArray: function( arr, results ) {
+		var ret = results || [];
+
+		if ( arr != null ) {
+			if ( isArraylike( Object(arr) ) ) {
+				jQuery.merge( ret,
+					typeof arr === "string" ?
+					[ arr ] : arr
+				);
+			} else {
+				core_push.call( ret, arr );
+			}
+		}
+
+		return ret;
+	},
+
+	inArray: function( elem, arr, i ) {
+		var len;
+
+		if ( arr ) {
+			if ( core_indexOf ) {
+				return core_indexOf.call( arr, elem, i );
+			}
+
+			len = arr.length;
+			i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
+
+			for ( ; i < len; i++ ) {
+				// Skip accessing in sparse arrays
+				if ( i in arr && arr[ i ] === elem ) {
+					return i;
+				}
+			}
+		}
+
+		return -1;
+	},
+
+	merge: function( first, second ) {
+		var l = second.length,
+			i = first.length,
+			j = 0;
+
+		if ( typeof l === "number" ) {
+			for ( ; j < l; j++ ) {
+				first[ i++ ] = second[ j ];
+			}
+		} else {
+			while ( second[j] !== undefined ) {
+				first[ i++ ] = second[ j++ ];
+			}
+		}
+
+		first.length = i;
+
+		return first;
+	},
+
+	grep: function( elems, callback, inv ) {
+		var retVal,
+			ret = [],
+			i = 0,
+			length = elems.length;
+		inv = !!inv;
+
+		// Go through the array, only saving the items
+		// that pass the validator function
+		for ( ; i < length; i++ ) {
+			retVal = !!callback( elems[ i ], i );
+			if ( inv !== retVal ) {
+				ret.push( elems[ i ] );
+			}
+		}
+
+		return ret;
+	},
+
+	// arg is for internal usage only
+	map: function( elems, callback, arg ) {
+		var value,
+			i = 0,
+			length = elems.length,
+			isArray = isArraylike( elems ),
+			ret = [];
+
+		// Go through the array, translating each of the items to their
+		if ( isArray ) {
+			for ( ; i < length; i++ ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret[ ret.length ] = value;
+				}
+			}
+
+		// Go through every key on the object,
+		} else {
+			for ( i in elems ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret[ ret.length ] = value;
+				}
+			}
+		}
+
+		// Flatten any nested arrays
+		return core_concat.apply( [], ret );
+	},
+
+	// A global GUID counter for objects
+	guid: 1,
+
+	// Bind a function to a context, optionally partially applying any
+	// arguments.
+	proxy: function( fn, context ) {
+		var args, proxy, tmp;
+
+		if ( typeof context === "string" ) {
+			tmp = fn[ context ];
+			context = fn;
+			fn = tmp;
+		}
+
+		// Quick check to determine if target is callable, in the spec
+		// this throws a TypeError, but we will just return undefined.
+		if ( !jQuery.isFunction( fn ) ) {
+			return undefined;
+		}
+
+		// Simulated bind
+		args = core_slice.call( arguments, 2 );
+		proxy = function() {
+			return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );
+		};
+
+		// Set the guid of unique handler to the same of original handler, so it can be removed
+		proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+		return proxy;
+	},
+
+	// Multifunctional method to get and set values of a collection
+	// The value/s can optionally be executed if it's a function
+	access: function( elems, fn, key, value, chainable, emptyGet, raw ) {
+		var i = 0,
+			length = elems.length,
+			bulk = key == null;
+
+		// Sets many values
+		if ( jQuery.type( key ) === "object" ) {
+			chainable = true;
+			for ( i in key ) {
+				jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
+			}
+
+		// Sets one value
+		} else if ( value !== undefined ) {
+			chainable = true;
+
+			if ( !jQuery.isFunction( value ) ) {
+				raw = true;
+			}
+
+			if ( bulk ) {
+				// Bulk operations run against the entire set
+				if ( raw ) {
+					fn.call( elems, value );
+					fn = null;
+
+				// ...except when executing function values
+				} else {
+					bulk = fn;
+					fn = function( elem, key, value ) {
+						return bulk.call( jQuery( elem ), value );
+					};
+				}
+			}
+
+			if ( fn ) {
+				for ( ; i < length; i++ ) {
+					fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
+				}
+			}
+		}
+
+		return chainable ?
+			elems :
+
+			// Gets
+			bulk ?
+				fn.call( elems ) :
+				length ? fn( elems[0], key ) : emptyGet;
+	},
+
+	now: function() {
+		return ( new Date() ).getTime();
+	}
+});
+
+jQuery.ready.promise = function( obj ) {
+	if ( !readyList ) {
+
+		readyList = jQuery.Deferred();
+
+		// Catch cases where $(document).ready() is called after the browser event has already occurred.
+		// we once tried to use readyState "interactive" here, but it caused issues like the one
+		// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
+		if ( document.readyState === "complete" ) {
+			// Handle it asynchronously to allow scripts the opportunity to delay ready
+			setTimeout( jQuery.ready );
+
+		// Standards-based browsers support DOMContentLoaded
+		} else if ( document.addEventListener ) {
+			// Use the handy event callback
+			document.addEventListener( "DOMContentLoaded", completed, false );
+
+			// A fallback to window.onload, that will always work
+			window.addEventListener( "load", completed, false );
+
+		// If IE event model is used
+		} else {
+			// Ensure firing before onload, maybe late but safe also for iframes
+			document.attachEvent( "onreadystatechange", completed );
+
+			// A fallback to window.onload, that will always work
+			window.attachEvent( "onload", completed );
+
+			// If IE and not a frame
+			// continually check to see if the document is ready
+			var top = false;
+
+			try {
+				top = window.frameElement == null && document.documentElement;
+			} catch(e) {}
+
+			if ( top && top.doScroll ) {
+				(function doScrollCheck() {
+					if ( !jQuery.isReady ) {
+
+						try {
+							// Use the trick by Diego Perini
+							// http://javascript.nwbox.com/IEContentLoaded/
+							top.doScroll("left");
+						} catch(e) {
+							return setTimeout( doScrollCheck, 50 );
+						}
+
+						// detach all dom ready events
+						detach();
+
+						// and execute any waiting functions
+						jQuery.ready();
+					}
+				})();
+			}
+		}
+	}
+	return readyList.promise( obj );
+};
+
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
+	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
+
+function isArraylike( obj ) {
+	var length = obj.length,
+		type = jQuery.type( obj );
+
+	if ( jQuery.isWindow( obj ) ) {
+		return false;
+	}
+
+	if ( obj.nodeType === 1 && length ) {
+		return true;
+	}
+
+	return type === "array" || type !== "function" &&
+		( length === 0 ||
+		typeof length === "number" && length > 0 && ( length - 1 ) in obj );
+}
+
+// All jQuery objects should point back to these
+rootjQuery = jQuery(document);
+// String to Object options format cache
+var optionsCache = {};
+
+// Convert String-formatted options into Object-formatted ones and store in cache
+function createOptions( options ) {
+	var object = optionsCache[ options ] = {};
+	jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {
+		object[ flag ] = true;
+	});
+	return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *	options: an optional list of space-separated options that will change how
+ *			the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ *	once:			will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *	memory:			will keep track of previous values and will call any callback added
+ *					after the list has been fired right away with the latest "memorized"
+ *					values (like a Deferred)
+ *
+ *	unique:			will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *	stopOnFalse:	interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+	// Convert options from String-formatted to Object-formatted if needed
+	// (we check in cache first)
+	options = typeof options === "string" ?
+		( optionsCache[ options ] || createOptions( options ) ) :
+		jQuery.extend( {}, options );
+
+	var // Flag to know if list is currently firing
+		firing,
+		// Last fire value (for non-forgettable lists)
+		memory,
+		// Flag to know if list was already fired
+		fired,
+		// End of the loop when firing
+		firingLength,
+		// Index of currently firing callback (modified by remove if needed)
+		firingIndex,
+		// First callback to fire (used internally by add and fireWith)
+		firingStart,
+		// Actual callback list
+		list = [],
+		// Stack of fire calls for repeatable lists
+		stack = !options.once && [],
+		// Fire callbacks
+		fire = function( data ) {
+			memory = options.memory && data;
+			fired = true;
+			firingIndex = firingStart || 0;
+			firingStart = 0;
+			firingLength = list.length;
+			firing = true;
+			for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+				if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
+					memory = false; // To prevent further calls using add
+					break;
+				}
+			}
+			firing = false;
+			if ( list ) {
+				if ( stack ) {
+					if ( stack.length ) {
+						fire( stack.shift() );
+					}
+				} else if ( memory ) {
+					list = [];
+				} else {
+					self.disable();
+				}
+			}
+		},
+		// Actual Callbacks object
+		self = {
+			// Add a callback or a collection of callbacks to the list
+			add: function() {
+				if ( list ) {
+					// First, we save the current length
+					var start = list.length;
+					(function add( args ) {
+						jQuery.each( args, function( _, arg ) {
+							var type = jQuery.type( arg );
+							if ( type === "function" ) {
+								if ( !options.unique || !self.has( arg ) ) {
+									list.push( arg );
+								}
+							} else if ( arg && arg.length && type !== "string" ) {
+								// Inspect recursively
+								add( arg );
+							}
+						});
+					})( arguments );
+					// Do we need to add the callbacks to the
+					// current firing batch?
+					if ( firing ) {
+						firingLength = list.length;
+					// With memory, if we're not firing then
+					// we should call right away
+					} else if ( memory ) {
+						firingStart = start;
+						fire( memory );
+					}
+				}
+				return this;
+			},
+			// Remove a callback from the list
+			remove: function() {
+				if ( list ) {
+					jQuery.each( arguments, function( _, arg ) {
+						var index;
+						while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+							list.splice( index, 1 );
+							// Handle firing indexes
+							if ( firing ) {
+								if ( index <= firingLength ) {
+									firingLength--;
+								}
+								if ( index <= firingIndex ) {
+									firingIndex--;
+								}
+							}
+						}
+					});
+				}
+				return this;
+			},
+			// Check if a given callback is in the list.
+			// If no argument is given, return whether or not list has callbacks attached.
+			has: function( fn ) {
+				return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
+			},
+			// Remove all callbacks from the list
+			empty: function() {
+				list = [];
+				return this;
+			},
+			// Have the list do nothing anymore
+			disable: function() {
+				list = stack = memory = undefined;
+				return this;
+			},
+			// Is it disabled?
+			disabled: function() {
+				return !list;
+			},
+			// Lock the list in its current state
+			lock: function() {
+				stack = undefined;
+				if ( !memory ) {
+					self.disable();
+				}
+				return this;
+			},
+			// Is it locked?
+			locked: function() {
+				return !stack;
+			},
+			// Call all callbacks with the given context and arguments
+			fireWith: function( context, args ) {
+				args = args || [];
+				args = [ context, args.slice ? args.slice() : args ];
+				if ( list && ( !fired || stack ) ) {
+					if ( firing ) {
+						stack.push( args );
+					} else {
+						fire( args );
+					}
+				}
+				return this;
+			},
+			// Call all the callbacks with the given arguments
+			fire: function() {
+				self.fireWith( this, arguments );
+				return this;
+			},
+			// To know if the callbacks have already been called at least once
+			fired: function() {
+				return !!fired;
+			}
+		};
+
+	return self;
+};
+jQuery.extend({
+
+	Deferred: function( func ) {
+		var tuples = [
+				// action, add listener, listener list, final state
+				[ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
+				[ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
+				[ "notify", "progress", jQuery.Callbacks("memory") ]
+			],
+			state = "pending",
+			promise = {
+				state: function() {
+					return state;
+				},
+				always: function() {
+					deferred.done( arguments ).fail( arguments );
+					return this;
+				},
+				then: function( /* fnDone, fnFail, fnProgress */ ) {
+					var fns = arguments;
+					return jQuery.Deferred(function( newDefer ) {
+						jQuery.each( tuples, function( i, tuple ) {
+							var action = tuple[ 0 ],
+								fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
+							// deferred[ done | fail | progress ] for forwarding actions to newDefer
+							deferred[ tuple[1] ](function() {
+								var returned = fn && fn.apply( this, arguments );
+								if ( returned && jQuery.isFunction( returned.promise ) ) {
+									returned.promise()
+										.done( newDefer.resolve )
+										.fail( newDefer.reject )
+										.progress( newDefer.notify );
+								} else {
+									newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
+								}
+							});
+						});
+						fns = null;
+					}).promise();
+				},
+				// Get a promise for this deferred
+				// If obj is provided, the promise aspect is added to the object
+				promise: function( obj ) {
+					return obj != null ? jQuery.extend( obj, promise ) : promise;
+				}
+			},
+			deferred = {};
+
+		// Keep pipe for back-compat
+		promise.pipe = promise.then;
+
+		// Add list-specific methods
+		jQuery.each( tuples, function( i, tuple ) {
+			var list = tuple[ 2 ],
+				stateString = tuple[ 3 ];
+
+			// promise[ done | fail | progress ] = list.add
+			promise[ tuple[1] ] = list.add;
+
+			// Handle state
+			if ( stateString ) {
+				list.add(function() {
+					// state = [ resolved | rejected ]
+					state = stateString;
+
+				// [ reject_list | resolve_list ].disable; progress_list.lock
+				}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
+			}
+
+			// deferred[ resolve | reject | notify ]
+			deferred[ tuple[0] ] = function() {
+				deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
+				return this;
+			};
+			deferred[ tuple[0] + "With" ] = list.fireWith;
+		});
+
+		// Make the deferred a promise
+		promise.promise( deferred );
+
+		// Call given func if any
+		if ( func ) {
+			func.call( deferred, deferred );
+		}
+
+		// All done!
+		return deferred;
+	},
+
+	// Deferred helper
+	when: function( subordinate /* , ..., subordinateN */ ) {
+		var i = 0,
+			resolveValues = core_slice.call( arguments ),
+			length = resolveValues.length,
+
+			// the count of uncompleted subordinates
+			remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
+
+			// the master Deferred. If resolveValues consist of only a single Deferred, just use that.
+			deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
+
+			// Update function for both resolve and progress values
+			updateFunc = function( i, contexts, values ) {
+				return function( value ) {
+					contexts[ i ] = this;
+					values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;
+					if( values === progressValues ) {
+						deferred.notifyWith( contexts, values );
+					} else if ( !( --remaining ) ) {
+						deferred.resolveWith( contexts, values );
+					}
+				};
+			},
+
+			progressValues, progressContexts, resolveContexts;
+
+		// add listeners to Deferred subordinates; treat others as resolved
+		if ( length > 1 ) {
+			progressValues = new Array( length );
+			progressContexts = new Array( length );
+			resolveContexts = new Array( length );
+			for ( ; i < length; i++ ) {
+				if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
+					resolveValues[ i ].promise()
+						.done( updateFunc( i, resolveContexts, resolveValues ) )
+						.fail( deferred.reject )
+						.progress( updateFunc( i, progressContexts, progressValues ) );
+				} else {
+					--remaining;
+				}
+			}
+		}
+
+		// if we're not waiting on anything, resolve the master
+		if ( !remaining ) {
+			deferred.resolveWith( resolveContexts, resolveValues );
+		}
+
+		return deferred.promise();
+	}
+});
+jQuery.support = (function() {
+
+	var support, all, a,
+		input, select, fragment,
+		opt, eventName, isSupported, i,
+		div = document.createElement("div");
+
+	// Setup
+	div.setAttribute( "className", "t" );
+	div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
+
+	// Support tests won't run in some limited or non-browser environments
+	all = div.getElementsByTagName("*");
+	a = div.getElementsByTagName("a")[ 0 ];
+	if ( !all || !a || !all.length ) {
+		return {};
+	}
+
+	// First batch of tests
+	select = document.createElement("select");
+	opt = select.appendChild( document.createElement("option") );
+	input = div.getElementsByTagName("input")[ 0 ];
+
+	a.style.cssText = "top:1px;float:left;opacity:.5";
+	support = {
+		// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+		getSetAttribute: div.className !== "t",
+
+		// IE strips leading whitespace when .innerHTML is used
+		leadingWhitespace: div.firstChild.nodeType === 3,
+
+		// Make sure that tbody elements aren't automatically inserted
+		// IE will insert them into empty tables
+		tbody: !div.getElementsByTagName("tbody").length,
+
+		// Make sure that link elements get serialized correctly by innerHTML
+		// This requires a wrapper element in IE
+		htmlSerialize: !!div.getElementsByTagName("link").length,
+
+		// Get the style information from getAttribute
+		// (IE uses .cssText instead)
+		style: /top/.test( a.getAttribute("style") ),
+
+		// Make sure that URLs aren't manipulated
+		// (IE normalizes it by default)
+		hrefNormalized: a.getAttribute("href") === "/a",
+
+		// Make sure that element opacity exists
+		// (IE uses filter instead)
+		// Use a regex to work around a WebKit issue. See #5145
+		opacity: /^0.5/.test( a.style.opacity ),
+
+		// Verify style float existence
+		// (IE uses styleFloat instead of cssFloat)
+		cssFloat: !!a.style.cssFloat,
+
+		// Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
+		checkOn: !!input.value,
+
+		// Make sure that a selected-by-default option has a working selected property.
+		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+		optSelected: opt.selected,
+
+		// Tests for enctype support on a form (#6743)
+		enctype: !!document.createElement("form").enctype,
+
+		// Makes sure cloning an html5 element does not cause problems
+		// Where outerHTML is undefined, this still works
+		html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
+
+		// jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode
+		boxModel: document.compatMode === "CSS1Compat",
+
+		// Will be defined later
+		deleteExpando: true,
+		noCloneEvent: true,
+		inlineBlockNeedsLayout: false,
+		shrinkWrapBlocks: false,
+		reliableMarginRight: true,
+		boxSizingReliable: true,
+		pixelPosition: false
+	};
+
+	// Make sure checked status is properly cloned
+	input.checked = true;
+	support.noCloneChecked = input.cloneNode( true ).checked;
+
+	// Make sure that the options inside disabled selects aren't marked as disabled
+	// (WebKit marks them as disabled)
+	select.disabled = true;
+	support.optDisabled = !opt.disabled;
+
+	// Support: IE<9
+	try {
+		delete div.test;
+	} catch( e ) {
+		support.deleteExpando = false;
+	}
+
+	// Check if we can trust getAttribute("value")
+	input = document.createElement("input");
+	input.setAttribute( "value", "" );
+	support.input = input.getAttribute( "value" ) === "";
+
+	// Check if an input maintains its value after becoming a radio
+	input.value = "t";
+	input.setAttribute( "type", "radio" );
+	support.radioValue = input.value === "t";
+
+	// #11217 - WebKit loses check when the name is after the checked attribute
+	input.setAttribute( "checked", "t" );
+	input.setAttribute( "name", "t" );
+
+	fragment = document.createDocumentFragment();
+	fragment.appendChild( input );
+
+	// Check if a disconnected checkbox will retain its checked
+	// value of true after appended to the DOM (IE6/7)
+	support.appendChecked = input.checked;
+
+	// WebKit doesn't clone checked state correctly in fragments
+	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+	// Support: IE<9
+	// Opera does not clone events (and typeof div.attachEvent === undefined).
+	// IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
+	if ( div.attachEvent ) {
+		div.attachEvent( "onclick", function() {
+			support.noCloneEvent = false;
+		});
+
+		div.cloneNode( true ).click();
+	}
+
+	// Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)
+	// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP), test/csp.php
+	for ( i in { submit: true, change: true, focusin: true }) {
+		div.setAttribute( eventName = "on" + i, "t" );
+
+		support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false;
+	}
+
+	div.style.backgroundClip = "content-box";
+	div.cloneNode( true ).style.backgroundClip = "";
+	support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+	// Run tests that need a body at doc ready
+	jQuery(function() {
+		var container, marginDiv, tds,
+			divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",
+			body = document.getElementsByTagName("body")[0];
+
+		if ( !body ) {
+			// Return for frameset docs that don't have a body
+			return;
+		}
+
+		container = document.createElement("div");
+		container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px";
+
+		body.appendChild( container ).appendChild( div );
+
+		// Support: IE8
+		// Check if table cells still have offsetWidth/Height when they are set
+		// to display:none and there are still other visible table cells in a
+		// table row; if so, offsetWidth/Height are not reliable for use when
+		// determining if an element has been hidden directly using
+		// display:none (it is still safe to use offsets if a parent element is
+		// hidden; don safety goggles and see bug #4512 for more information).
+		div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
+		tds = div.getElementsByTagName("td");
+		tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none";
+		isSupported = ( tds[ 0 ].offsetHeight === 0 );
+
+		tds[ 0 ].style.display = "";
+		tds[ 1 ].style.display = "none";
+
+		// Support: IE8
+		// Check if empty table cells still have offsetWidth/Height
+		support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
+
+		// Check box-sizing and margin behavior
+		div.innerHTML = "";
+		div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;";
+		support.boxSizing = ( div.offsetWidth === 4 );
+		support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 );
+
+		// Use window.getComputedStyle because jsdom on node.js will break without it.
+		if ( window.getComputedStyle ) {
+			support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
+			support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
+
+			// Check if div with explicit width and no margin-right incorrectly
+			// gets computed margin-right based on width of container. (#3333)
+			// Fails in WebKit before Feb 2011 nightlies
+			// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+			marginDiv = div.appendChild( document.createElement("div") );
+			marginDiv.style.cssText = div.style.cssText = divReset;
+			marginDiv.style.marginRight = marginDiv.style.width = "0";
+			div.style.width = "1px";
+
+			support.reliableMarginRight =
+				!parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );
+		}
+
+		if ( typeof div.style.zoom !== core_strundefined ) {
+			// Support: IE<8
+			// Check if natively block-level elements act like inline-block
+			// elements when setting their display to 'inline' and giving
+			// them layout
+			div.innerHTML = "";
+			div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1";
+			support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
+
+			// Support: IE6
+			// Check if elements with layout shrink-wrap their children
+			div.style.display = "block";
+			div.innerHTML = "<div></div>";
+			div.firstChild.style.width = "5px";
+			support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
+
+			if ( support.inlineBlockNeedsLayout ) {
+				// Prevent IE 6 from affecting layout for positioned elements #11048
+				// Prevent IE from shrinking the body in IE 7 mode #12869
+				// Support: IE<8
+				body.style.zoom = 1;
+			}
+		}
+
+		body.removeChild( container );
+
+		// Null elements to avoid leaks in IE
+		container = div = tds = marginDiv = null;
+	});
+
+	// Null elements to avoid leaks in IE
+	all = select = fragment = opt = a = input = null;
+
+	return support;
+})();
+
+var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
+	rmultiDash = /([A-Z])/g;
+
+function internalData( elem, name, data, pvt /* Internal Use Only */ ){
+	if ( !jQuery.acceptData( elem ) ) {
+		return;
+	}
+
+	var thisCache, ret,
+		internalKey = jQuery.expando,
+		getByName = typeof name === "string",
+
+		// We have to handle DOM nodes and JS objects differently because IE6-7
+		// can't GC object references properly across the DOM-JS boundary
+		isNode = elem.nodeType,
+
+		// Only DOM nodes need the global jQuery cache; JS object data is
+		// attached directly to the object so GC can occur automatically
+		cache = isNode ? jQuery.cache : elem,
+
+		// Only defining an ID for JS objects if its cache already exists allows
+		// the code to shortcut on the same path as a DOM node with no cache
+		id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
+
+	// Avoid doing any more work than we need to when trying to get data on an
+	// object that has no data at all
+	if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) {
+		return;
+	}
+
+	if ( !id ) {
+		// Only DOM nodes need a new unique ID for each element since their data
+		// ends up in the global cache
+		if ( isNode ) {
+			elem[ internalKey ] = id = core_deletedIds.pop() || jQuery.guid++;
+		} else {
+			id = internalKey;
+		}
+	}
+
+	if ( !cache[ id ] ) {
+		cache[ id ] = {};
+
+		// Avoids exposing jQuery metadata on plain JS objects when the object
+		// is serialized using JSON.stringify
+		if ( !isNode ) {
+			cache[ id ].toJSON = jQuery.noop;
+		}
+	}
+
+	// An object can be passed to jQuery.data instead of a key/value pair; this gets
+	// shallow copied over onto the existing cache
+	if ( typeof name === "object" || typeof name === "function" ) {
+		if ( pvt ) {
+			cache[ id ] = jQuery.extend( cache[ id ], name );
+		} else {
+			cache[ id ].data = jQuery.extend( cache[ id ].data, name );
+		}
+	}
+
+	thisCache = cache[ id ];
+
+	// jQuery data() is stored in a separate object inside the object's internal data
+	// cache in order to avoid key collisions between internal data and user-defined
+	// data.
+	if ( !pvt ) {
+		if ( !thisCache.data ) {
+			thisCache.data = {};
+		}
+
+		thisCache = thisCache.data;
+	}
+
+	if ( data !== undefined ) {
+		thisCache[ jQuery.camelCase( name ) ] = data;
+	}
+
+	// Check for both converted-to-camel and non-converted data property names
+	// If a data property was specified
+	if ( getByName ) {
+
+		// First Try to find as-is property data
+		ret = thisCache[ name ];
+
+		// Test for null|undefined property data
+		if ( ret == null ) {
+
+			// Try to find the camelCased property
+			ret = thisCache[ jQuery.camelCase( name ) ];
+		}
+	} else {
+		ret = thisCache;
+	}
+
+	return ret;
+}
+
+function internalRemoveData( elem, name, pvt ) {
+	if ( !jQuery.acceptData( elem ) ) {
+		return;
+	}
+
+	var i, l, thisCache,
+		isNode = elem.nodeType,
+
+		// See jQuery.data for more information
+		cache = isNode ? jQuery.cache : elem,
+		id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
+
+	// If there is already no cache entry for this object, there is no
+	// purpose in continuing
+	if ( !cache[ id ] ) {
+		return;
+	}
+
+	if ( name ) {
+
+		thisCache = pvt ? cache[ id ] : cache[ id ].data;
+
+		if ( thisCache ) {
+
+			// Support array or space separated string names for data keys
+			if ( !jQuery.isArray( name ) ) {
+
+				// try the string as a key before any manipulation
+				if ( name in thisCache ) {
+					name = [ name ];
+				} else {
+
+					// split the camel cased version by spaces unless a key with the spaces exists
+					name = jQuery.camelCase( name );
+					if ( name in thisCache ) {
+						name = [ name ];
+					} else {
+						name = name.split(" ");
+					}
+				}
+			} else {
+				// If "name" is an array of keys...
+				// When data is initially created, via ("key", "val") signature,
+				// keys will be converted to camelCase.
+				// Since there is no way to tell _how_ a key was added, remove
+				// both plain key and camelCase key. #12786
+				// This will only penalize the array argument path.
+				name = name.concat( jQuery.map( name, jQuery.camelCase ) );
+			}
+
+			for ( i = 0, l = name.length; i < l; i++ ) {
+				delete thisCache[ name[i] ];
+			}
+
+			// If there is no data left in the cache, we want to continue
+			// and let the cache object itself get destroyed
+			if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
+				return;
+			}
+		}
+	}
+
+	// See jQuery.data for more information
+	if ( !pvt ) {
+		delete cache[ id ].data;
+
+		// Don't destroy the parent cache unless the internal data object
+		// had been the only thing left in it
+		if ( !isEmptyDataObject( cache[ id ] ) ) {
+			return;
+		}
+	}
+
+	// Destroy the cache
+	if ( isNode ) {
+		jQuery.cleanData( [ elem ], true );
+
+	// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
+	} else if ( jQuery.support.deleteExpando || cache != cache.window ) {
+		delete cache[ id ];
+
+	// When all else fails, null
+	} else {
+		cache[ id ] = null;
+	}
+}
+
+jQuery.extend({
+	cache: {},
+
+	// Unique for each copy of jQuery on the page
+	// Non-digits removed to match rinlinejQuery
+	expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ),
+
+	// The following elements throw uncatchable exceptions if you
+	// attempt to add expando properties to them.
+	noData: {
+		"embed": true,
+		// Ban all objects except for Flash (which handle expandos)
+		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
+		"applet": true
+	},
+
+	hasData: function( elem ) {
+		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+		return !!elem && !isEmptyDataObject( elem );
+	},
+
+	data: function( elem, name, data ) {
+		return internalData( elem, name, data );
+	},
+
+	removeData: function( elem, name ) {
+		return internalRemoveData( elem, name );
+	},
+
+	// For internal use only.
+	_data: function( elem, name, data ) {
+		return internalData( elem, name, data, true );
+	},
+
+	_removeData: function( elem, name ) {
+		return internalRemoveData( elem, name, true );
+	},
+
+	// A method for determining if a DOM node can handle the data expando
+	acceptData: function( elem ) {
+		// Do not set data on non-element because it will not be cleared (#8335).
+		if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) {
+			return false;
+		}
+
+		var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];
+
+		// nodes accept data unless otherwise specified; rejection can be conditional
+		return !noData || noData !== true && elem.getAttribute("classid") === noData;
+	}
+});
+
+jQuery.fn.extend({
+	data: function( key, value ) {
+		var attrs, name,
+			elem = this[0],
+			i = 0,
+			data = null;
+
+		// Gets all values
+		if ( key === undefined ) {
+			if ( this.length ) {
+				data = jQuery.data( elem );
+
+				if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
+					attrs = elem.attributes;
+					for ( ; i < attrs.length; i++ ) {
+						name = attrs[i].name;
+
+						if ( !name.indexOf( "data-" ) ) {
+							name = jQuery.camelCase( name.slice(5) );
+
+							dataAttr( elem, name, data[ name ] );
+						}
+					}
+					jQuery._data( elem, "parsedAttrs", true );
+				}
+			}
+
+			return data;
+		}
+
+		// Sets multiple values
+		if ( typeof key === "object" ) {
+			return this.each(function() {
+				jQuery.data( this, key );
+			});
+		}
+
+		return jQuery.access( this, function( value ) {
+
+			if ( value === undefined ) {
+				// Try to fetch any internally stored data first
+				return elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;
+			}
+
+			this.each(function() {
+				jQuery.data( this, key, value );
+			});
+		}, null, value, arguments.length > 1, null, true );
+	},
+
+	removeData: function( key ) {
+		return this.each(function() {
+			jQuery.removeData( this, key );
+		});
+	}
+});
+
+function dataAttr( elem, key, data ) {
+	// If nothing was found internally, try to fetch any
+	// data from the HTML5 data-* attribute
+	if ( data === undefined && elem.nodeType === 1 ) {
+
+		var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
+
+		data = elem.getAttribute( name );
+
+		if ( typeof data === "string" ) {
+			try {
+				data = data === "true" ? true :
+					data === "false" ? false :
+					data === "null" ? null :
+					// Only convert to a number if it doesn't change the string
+					+data + "" === data ? +data :
+					rbrace.test( data ) ? jQuery.parseJSON( data ) :
+						data;
+			} catch( e ) {}
+
+			// Make sure we set the data so it isn't changed later
+			jQuery.data( elem, key, data );
+
+		} else {
+			data = undefined;
+		}
+	}
+
+	return data;
+}
+
+// checks a cache object for emptiness
+function isEmptyDataObject( obj ) {
+	var name;
+	for ( name in obj ) {
+
+		// if the public data object is empty, the private is still empty
+		if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
+			continue;
+		}
+		if ( name !== "toJSON" ) {
+			return false;
+		}
+	}
+
+	return true;
+}
+jQuery.extend({
+	queue: function( elem, type, data ) {
+		var queue;
+
+		if ( elem ) {
+			type = ( type || "fx" ) + "queue";
+			queue = jQuery._data( elem, type );
+
+			// Speed up dequeue by getting out quickly if this is just a lookup
+			if ( data ) {
+				if ( !queue || jQuery.isArray(data) ) {
+					queue = jQuery._data( elem, type, jQuery.makeArray(data) );
+				} else {
+					queue.push( data );
+				}
+			}
+			return queue || [];
+		}
+	},
+
+	dequeue: function( elem, type ) {
+		type = type || "fx";
+
+		var queue = jQuery.queue( elem, type ),
+			startLength = queue.length,
+			fn = queue.shift(),
+			hooks = jQuery._queueHooks( elem, type ),
+			next = function() {
+				jQuery.dequeue( elem, type );
+			};
+
+		// If the fx queue is dequeued, always remove the progress sentinel
+		if ( fn === "inprogress" ) {
+			fn = queue.shift();
+			startLength--;
+		}
+
+		hooks.cur = fn;
+		if ( fn ) {
+
+			// Add a progress sentinel to prevent the fx queue from being
+			// automatically dequeued
+			if ( type === "fx" ) {
+				queue.unshift( "inprogress" );
+			}
+
+			// clear up the last queue stop function
+			delete hooks.stop;
+			fn.call( elem, next, hooks );
+		}
+
+		if ( !startLength && hooks ) {
+			hooks.empty.fire();
+		}
+	},
+
+	// not intended for public consumption - generates a queueHooks object, or returns the current one
+	_queueHooks: function( elem, type ) {
+		var key = type + "queueHooks";
+		return jQuery._data( elem, key ) || jQuery._data( elem, key, {
+			empty: jQuery.Callbacks("once memory").add(function() {
+				jQuery._removeData( elem, type + "queue" );
+				jQuery._removeData( elem, key );
+			})
+		});
+	}
+});
+
+jQuery.fn.extend({
+	queue: function( type, data ) {
+		var setter = 2;
+
+		if ( typeof type !== "string" ) {
+			data = type;
+			type = "fx";
+			setter--;
+		}
+
+		if ( arguments.length < setter ) {
+			return jQuery.queue( this[0], type );
+		}
+
+		return data === undefined ?
+			this :
+			this.each(function() {
+				var queue = jQuery.queue( this, type, data );
+
+				// ensure a hooks for this queue
+				jQuery._queueHooks( this, type );
+
+				if ( type === "fx" && queue[0] !== "inprogress" ) {
+					jQuery.dequeue( this, type );
+				}
+			});
+	},
+	dequeue: function( type ) {
+		return this.each(function() {
+			jQuery.dequeue( this, type );
+		});
+	},
+	// Based off of the plugin by Clint Helfers, with permission.
+	// http://blindsignals.com/index.php/2009/07/jquery-delay/
+	delay: function( time, type ) {
+		time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+		type = type || "fx";
+
+		return this.queue( type, function( next, hooks ) {
+			var timeout = setTimeout( next, time );
+			hooks.stop = function() {
+				clearTimeout( timeout );
+			};
+		});
+	},
+	clearQueue: function( type ) {
+		return this.queue( type || "fx", [] );
+	},
+	// Get a promise resolved when queues of a certain type
+	// are emptied (fx is the type by default)
+	promise: function( type, obj ) {
+		var tmp,
+			count = 1,
+			defer = jQuery.Deferred(),
+			elements = this,
+			i = this.length,
+			resolve = function() {
+				if ( !( --count ) ) {
+					defer.resolveWith( elements, [ elements ] );
+				}
+			};
+
+		if ( typeof type !== "string" ) {
+			obj = type;
+			type = undefined;
+		}
+		type = type || "fx";
+
+		while( i-- ) {
+			tmp = jQuery._data( elements[ i ], type + "queueHooks" );
+			if ( tmp && tmp.empty ) {
+				count++;
+				tmp.empty.add( resolve );
+			}
+		}
+		resolve();
+		return defer.promise( obj );
+	}
+});
+var nodeHook, boolHook,
+	rclass = /[\t\r\n]/g,
+	rreturn = /\r/g,
+	rfocusable = /^(?:input|select|textarea|button|object)$/i,
+	rclickable = /^(?:a|area)$/i,
+	rboolean = /^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,
+	ruseDefault = /^(?:checked|selected)$/i,
+	getSetAttribute = jQuery.support.getSetAttribute,
+	getSetInput = jQuery.support.input;
+
+jQuery.fn.extend({
+	attr: function( name, value ) {
+		return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
+	},
+
+	removeAttr: function( name ) {
+		return this.each(function() {
+			jQuery.removeAttr( this, name );
+		});
+	},
+
+	prop: function( name, value ) {
+		return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
+	},
+
+	removeProp: function( name ) {
+		name = jQuery.propFix[ name ] || name;
+		return this.each(function() {
+			// try/catch handles cases where IE balks (such as removing a property on window)
+			try {
+				this[ name ] = undefined;
+				delete this[ name ];
+			} catch( e ) {}
+		});
+	},
+
+	addClass: function( value ) {
+		var classes, elem, cur, clazz, j,
+			i = 0,
+			len = this.length,
+			proceed = typeof value === "string" && value;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( j ) {
+				jQuery( this ).addClass( value.call( this, j, this.className ) );
+			});
+		}
+
+		if ( proceed ) {
+			// The disjunction here is for better compressibility (see removeClass)
+			classes = ( value || "" ).match( core_rnotwhite ) || [];
+
+			for ( ; i < len; i++ ) {
+				elem = this[ i ];
+				cur = elem.nodeType === 1 && ( elem.className ?
+					( " " + elem.className + " " ).replace( rclass, " " ) :
+					" "
+				);
+
+				if ( cur ) {
+					j = 0;
+					while ( (clazz = classes[j++]) ) {
+						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+							cur += clazz + " ";
+						}
+					}
+					elem.className = jQuery.trim( cur );
+
+				}
+			}
+		}
+
+		return this;
+	},
+
+	removeClass: function( value ) {
+		var classes, elem, cur, clazz, j,
+			i = 0,
+			len = this.length,
+			proceed = arguments.length === 0 || typeof value === "string" && value;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( j ) {
+				jQuery( this ).removeClass( value.call( this, j, this.className ) );
+			});
+		}
+		if ( proceed ) {
+			classes = ( value || "" ).match( core_rnotwhite ) || [];
+
+			for ( ; i < len; i++ ) {
+				elem = this[ i ];
+				// This expression is here for better compressibility (see addClass)
+				cur = elem.nodeType === 1 && ( elem.className ?
+					( " " + elem.className + " " ).replace( rclass, " " ) :
+					""
+				);
+
+				if ( cur ) {
+					j = 0;
+					while ( (clazz = classes[j++]) ) {
+						// Remove *all* instances
+						while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
+							cur = cur.replace( " " + clazz + " ", " " );
+						}
+					}
+					elem.className = value ? jQuery.trim( cur ) : "";
+				}
+			}
+		}
+
+		return this;
+	},
+
+	toggleClass: function( value, stateVal ) {
+		var type = typeof value,
+			isBool = typeof stateVal === "boolean";
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( i ) {
+				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
+			});
+		}
+
+		return this.each(function() {
+			if ( type === "string" ) {
+				// toggle individual class names
+				var className,
+					i = 0,
+					self = jQuery( this ),
+					state = stateVal,
+					classNames = value.match( core_rnotwhite ) || [];
+
+				while ( (className = classNames[ i++ ]) ) {
+					// check each className given, space separated list
+					state = isBool ? state : !self.hasClass( className );
+					self[ state ? "addClass" : "removeClass" ]( className );
+				}
+
+			// Toggle whole class name
+			} else if ( type === core_strundefined || type === "boolean" ) {
+				if ( this.className ) {
+					// store className if set
+					jQuery._data( this, "__className__", this.className );
+				}
+
+				// If the element has a class name or if we're passed "false",
+				// then remove the whole classname (if there was one, the above saved it).
+				// Otherwise bring back whatever was previously saved (if anything),
+				// falling back to the empty string if nothing was stored.
+				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
+			}
+		});
+	},
+
+	hasClass: function( selector ) {
+		var className = " " + selector + " ",
+			i = 0,
+			l = this.length;
+		for ( ; i < l; i++ ) {
+			if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
+				return true;
+			}
+		}
+
+		return false;
+	},
+
+	val: function( value ) {
+		var ret, hooks, isFunction,
+			elem = this[0];
+
+		if ( !arguments.length ) {
+			if ( elem ) {
+				hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+					return ret;
+				}
+
+				ret = elem.value;
+
+				return typeof ret === "string" ?
+					// handle most common string cases
+					ret.replace(rreturn, "") :
+					// handle cases where value is null/undef or number
+					ret == null ? "" : ret;
+			}
+
+			return;
+		}
+
+		isFunction = jQuery.isFunction( value );
+
+		return this.each(function( i ) {
+			var val,
+				self = jQuery(this);
+
+			if ( this.nodeType !== 1 ) {
+				return;
+			}
+
+			if ( isFunction ) {
+				val = value.call( this, i, self.val() );
+			} else {
+				val = value;
+			}
+
+			// Treat null/undefined as ""; convert numbers to string
+			if ( val == null ) {
+				val = "";
+			} else if ( typeof val === "number" ) {
+				val += "";
+			} else if ( jQuery.isArray( val ) ) {
+				val = jQuery.map(val, function ( value ) {
+					return value == null ? "" : value + "";
+				});
+			}
+
+			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+			// If set returns undefined, fall back to normal setting
+			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+				this.value = val;
+			}
+		});
+	}
+});
+
+jQuery.extend({
+	valHooks: {
+		option: {
+			get: function( elem ) {
+				// attributes.value is undefined in Blackberry 4.7 but
+				// uses .value. See #6932
+				var val = elem.attributes.value;
+				return !val || val.specified ? elem.value : elem.text;
+			}
+		},
+		select: {
+			get: function( elem ) {
+				var value, option,
+					options = elem.options,
+					index = elem.selectedIndex,
+					one = elem.type === "select-one" || index < 0,
+					values = one ? null : [],
+					max = one ? index + 1 : options.length,
+					i = index < 0 ?
+						max :
+						one ? index : 0;
+
+				// Loop through all the selected options
+				for ( ; i < max; i++ ) {
+					option = options[ i ];
+
+					// oldIE doesn't update selected after form reset (#2551)
+					if ( ( option.selected || i === index ) &&
+							// Don't return options that are disabled or in a disabled optgroup
+							( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
+							( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
+
+						// Get the specific value for the option
+						value = jQuery( option ).val();
+
+						// We don't need an array for one selects
+						if ( one ) {
+							return value;
+						}
+
+						// Multi-Selects return an array
+						values.push( value );
+					}
+				}
+
+				return values;
+			},
+
+			set: function( elem, value ) {
+				var values = jQuery.makeArray( value );
+
+				jQuery(elem).find("option").each(function() {
+					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+				});
+
+				if ( !values.length ) {
+					elem.selectedIndex = -1;
+				}
+				return values;
+			}
+		}
+	},
+
+	attr: function( elem, name, value ) {
+		var hooks, notxml, ret,
+			nType = elem.nodeType;
+
+		// don't get/set attributes on text, comment and attribute nodes
+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		// Fallback to prop when attributes are not supported
+		if ( typeof elem.getAttribute === core_strundefined ) {
+			return jQuery.prop( elem, name, value );
+		}
+
+		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+		// All attributes are lowercase
+		// Grab necessary hook if one is defined
+		if ( notxml ) {
+			name = name.toLowerCase();
+			hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
+		}
+
+		if ( value !== undefined ) {
+
+			if ( value === null ) {
+				jQuery.removeAttr( elem, name );
+
+			} else if ( hooks && notxml && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+				return ret;
+
+			} else {
+				elem.setAttribute( name, value + "" );
+				return value;
+			}
+
+		} else if ( hooks && notxml && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+			return ret;
+
+		} else {
+
+			// In IE9+, Flash objects don't have .getAttribute (#12945)
+			// Support: IE9+
+			if ( typeof elem.getAttribute !== core_strundefined ) {
+				ret =  elem.getAttribute( name );
+			}
+
+			// Non-existent attributes return null, we normalize to undefined
+			return ret == null ?
+				undefined :
+				ret;
+		}
+	},
+
+	removeAttr: function( elem, value ) {
+		var name, propName,
+			i = 0,
+			attrNames = value && value.match( core_rnotwhite );
+
+		if ( attrNames && elem.nodeType === 1 ) {
+			while ( (name = attrNames[i++]) ) {
+				propName = jQuery.propFix[ name ] || name;
+
+				// Boolean attributes get special treatment (#10870)
+				if ( rboolean.test( name ) ) {
+					// Set corresponding property to false for boolean attributes
+					// Also clear defaultChecked/defaultSelected (if appropriate) for IE<8
+					if ( !getSetAttribute && ruseDefault.test( name ) ) {
+						elem[ jQuery.camelCase( "default-" + name ) ] =
+							elem[ propName ] = false;
+					} else {
+						elem[ propName ] = false;
+					}
+
+				// See #9699 for explanation of this approach (setting first, then removal)
+				} else {
+					jQuery.attr( elem, name, "" );
+				}
+
+				elem.removeAttribute( getSetAttribute ? name : propName );
+			}
+		}
+	},
+
+	attrHooks: {
+		type: {
+			set: function( elem, value ) {
+				if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+					// Setting the type on a radio button after the value resets the value in IE6-9
+					// Reset value to default in case type is set after value during creation
+					var val = elem.value;
+					elem.setAttribute( "type", value );
+					if ( val ) {
+						elem.value = val;
+					}
+					return value;
+				}
+			}
+		}
+	},
+
+	propFix: {
+		tabindex: "tabIndex",
+		readonly: "readOnly",
+		"for": "htmlFor",
+		"class": "className",
+		maxlength: "maxLength",
+		cellspacing: "cellSpacing",
+		cellpadding: "cellPadding",
+		rowspan: "rowSpan",
+		colspan: "colSpan",
+		usemap: "useMap",
+		frameborder: "frameBorder",
+		contenteditable: "contentEditable"
+	},
+
+	prop: function( elem, name, value ) {
+		var ret, hooks, notxml,
+			nType = elem.nodeType;
+
+		// don't get/set properties on text, comment and attribute nodes
+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+		if ( notxml ) {
+			// Fix name and attach hooks
+			name = jQuery.propFix[ name ] || name;
+			hooks = jQuery.propHooks[ name ];
+		}
+
+		if ( value !== undefined ) {
+			if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+				return ret;
+
+			} else {
+				return ( elem[ name ] = value );
+			}
+
+		} else {
+			if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+				return ret;
+
+			} else {
+				return elem[ name ];
+			}
+		}
+	},
+
+	propHooks: {
+		tabIndex: {
+			get: function( elem ) {
+				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+				var attributeNode = elem.getAttributeNode("tabindex");
+
+				return attributeNode && attributeNode.specified ?
+					parseInt( attributeNode.value, 10 ) :
+					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+						0 :
+						undefined;
+			}
+		}
+	}
+});
+
+// Hook for boolean attributes
+boolHook = {
+	get: function( elem, name ) {
+		var
+			// Use .prop to determine if this attribute is understood as boolean
+			prop = jQuery.prop( elem, name ),
+
+			// Fetch it accordingly
+			attr = typeof prop === "boolean" && elem.getAttribute( name ),
+			detail = typeof prop === "boolean" ?
+
+				getSetInput && getSetAttribute ?
+					attr != null :
+					// oldIE fabricates an empty string for missing boolean attributes
+					// and conflates checked/selected into attroperties
+					ruseDefault.test( name ) ?
+						elem[ jQuery.camelCase( "default-" + name ) ] :
+						!!attr :
+
+				// fetch an attribute node for properties not recognized as boolean
+				elem.getAttributeNode( name );
+
+		return detail && detail.value !== false ?
+			name.toLowerCase() :
+			undefined;
+	},
+	set: function( elem, value, name ) {
+		if ( value === false ) {
+			// Remove boolean attributes when set to false
+			jQuery.removeAttr( elem, name );
+		} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
+			// IE<8 needs the *property* name
+			elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
+
+		// Use defaultChecked and defaultSelected for oldIE
+		} else {
+			elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
+		}
+
+		return name;
+	}
+};
+
+// fix oldIE value attroperty
+if ( !getSetInput || !getSetAttribute ) {
+	jQuery.attrHooks.value = {
+		get: function( elem, name ) {
+			var ret = elem.getAttributeNode( name );
+			return jQuery.nodeName( elem, "input" ) ?
+
+				// Ignore the value *property* by using defaultValue
+				elem.defaultValue :
+
+				ret && ret.specified ? ret.value : undefined;
+		},
+		set: function( elem, value, name ) {
+			if ( jQuery.nodeName( elem, "input" ) ) {
+				// Does not return so that setAttribute is also used
+				elem.defaultValue = value;
+			} else {
+				// Use nodeHook if defined (#1954); otherwise setAttribute is fine
+				return nodeHook && nodeHook.set( elem, value, name );
+			}
+		}
+	};
+}
+
+// IE6/7 do not support getting/setting some attributes with get/setAttribute
+if ( !getSetAttribute ) {
+
+	// Use this for any attribute in IE6/7
+	// This fixes almost every IE6/7 issue
+	nodeHook = jQuery.valHooks.button = {
+		get: function( elem, name ) {
+			var ret = elem.getAttributeNode( name );
+			return ret && ( name === "id" || name === "name" || name === "coords" ? ret.value !== "" : ret.specified ) ?
+				ret.value :
+				undefined;
+		},
+		set: function( elem, value, name ) {
+			// Set the existing or create a new attribute node
+			var ret = elem.getAttributeNode( name );
+			if ( !ret ) {
+				elem.setAttributeNode(
+					(ret = elem.ownerDocument.createAttribute( name ))
+				);
+			}
+
+			ret.value = value += "";
+
+			// Break association with cloned elements by also using setAttribute (#9646)
+			return name === "value" || value === elem.getAttribute( name ) ?
+				value :
+				undefined;
+		}
+	};
+
+	// Set contenteditable to false on removals(#10429)
+	// Setting to empty string throws an error as an invalid value
+	jQuery.attrHooks.contenteditable = {
+		get: nodeHook.get,
+		set: function( elem, value, name ) {
+			nodeHook.set( elem, value === "" ? false : value, name );
+		}
+	};
+
+	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
+	// This is for removals
+	jQuery.each([ "width", "height" ], function( i, name ) {
+		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+			set: function( elem, value ) {
+				if ( value === "" ) {
+					elem.setAttribute( name, "auto" );
+					return value;
+				}
+			}
+		});
+	});
+}
+
+
+// Some attributes require a special call on IE
+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !jQuery.support.hrefNormalized ) {
+	jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
+		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+			get: function( elem ) {
+				var ret = elem.getAttribute( name, 2 );
+				return ret == null ? undefined : ret;
+			}
+		});
+	});
+
+	// href/src property should get the full normalized URL (#10299/#12915)
+	jQuery.each([ "href", "src" ], function( i, name ) {
+		jQuery.propHooks[ name ] = {
+			get: function( elem ) {
+				return elem.getAttribute( name, 4 );
+			}
+		};
+	});
+}
+
+if ( !jQuery.support.style ) {
+	jQuery.attrHooks.style = {
+		get: function( elem ) {
+			// Return undefined in the case of empty string
+			// Note: IE uppercases css property names, but if we were to .toLowerCase()
+			// .cssText, that would destroy case senstitivity in URL's, like in "background"
+			return elem.style.cssText || undefined;
+		},
+		set: function( elem, value ) {
+			return ( elem.style.cssText = value + "" );
+		}
+	};
+}
+
+// Safari mis-reports the default selected property of an option
+// Accessing the parent's selectedIndex property fixes it
+if ( !jQuery.support.optSelected ) {
+	jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
+		get: function( elem ) {
+			var parent = elem.parentNode;
+
+			if ( parent ) {
+				parent.selectedIndex;
+
+				// Make sure that it also works with optgroups, see #5701
+				if ( parent.parentNode ) {
+					parent.parentNode.selectedIndex;
+				}
+			}
+			return null;
+		}
+	});
+}
+
+// IE6/7 call enctype encoding
+if ( !jQuery.support.enctype ) {
+	jQuery.propFix.enctype = "encoding";
+}
+
+// Radios and checkboxes getter/setter
+if ( !jQuery.support.checkOn ) {
+	jQuery.each([ "radio", "checkbox" ], function() {
+		jQuery.valHooks[ this ] = {
+			get: function( elem ) {
+				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+				return elem.getAttribute("value") === null ? "on" : elem.value;
+			}
+		};
+	});
+}
+jQuery.each([ "radio", "checkbox" ], function() {
+	jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
+		set: function( elem, value ) {
+			if ( jQuery.isArray( value ) ) {
+				return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
+			}
+		}
+	});
+});
+var rformElems = /^(?:input|select|textarea)$/i,
+	rkeyEvent = /^key/,
+	rmouseEvent = /^(?:mouse|contextmenu)|click/,
+	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+	rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
+
+function returnTrue() {
+	return true;
+}
+
+function returnFalse() {
+	return false;
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+	global: {},
+
+	add: function( elem, types, handler, data, selector ) {
+		var tmp, events, t, handleObjIn,
+			special, eventHandle, handleObj,
+			handlers, type, namespaces, origType,
+			elemData = jQuery._data( elem );
+
+		// Don't attach events to noData or text/comment nodes (but allow plain objects)
+		if ( !elemData ) {
+			return;
+		}
+
+		// Caller can pass in an object of custom data in lieu of the handler
+		if ( handler.handler ) {
+			handleObjIn = handler;
+			handler = handleObjIn.handler;
+			selector = handleObjIn.selector;
+		}
+
+		// Make sure that the handler has a unique ID, used to find/remove it later
+		if ( !handler.guid ) {
+			handler.guid = jQuery.guid++;
+		}
+
+		// Init the element's event structure and main handler, if this is the first
+		if ( !(events = elemData.events) ) {
+			events = elemData.events = {};
+		}
+		if ( !(eventHandle = elemData.handle) ) {
+			eventHandle = elemData.handle = function( e ) {
+				// Discard the second event of a jQuery.event.trigger() and
+				// when an event is called after a page has unloaded
+				return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?
+					jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
+					undefined;
+			};
+			// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
+			eventHandle.elem = elem;
+		}
+
+		// Handle multiple events separated by a space
+		// jQuery(...).bind("mouseover mouseout", fn);
+		types = ( types || "" ).match( core_rnotwhite ) || [""];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[t] ) || [];
+			type = origType = tmp[1];
+			namespaces = ( tmp[2] || "" ).split( "." ).sort();
+
+			// If event changes its type, use the special event handlers for the changed type
+			special = jQuery.event.special[ type ] || {};
+
+			// If selector defined, determine special event api type, otherwise given type
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+
+			// Update special based on newly reset type
+			special = jQuery.event.special[ type ] || {};
+
+			// handleObj is passed to all event handlers
+			handleObj = jQuery.extend({
+				type: type,
+				origType: origType,
+				data: data,
+				handler: handler,
+				guid: handler.guid,
+				selector: selector,
+				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+				namespace: namespaces.join(".")
+			}, handleObjIn );
+
+			// Init the event handler queue if we're the first
+			if ( !(handlers = events[ type ]) ) {
+				handlers = events[ type ] = [];
+				handlers.delegateCount = 0;
+
+				// Only use addEventListener/attachEvent if the special events handler returns false
+				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+					// Bind the global event handler to the element
+					if ( elem.addEventListener ) {
+						elem.addEventListener( type, eventHandle, false );
+
+					} else if ( elem.attachEvent ) {
+						elem.attachEvent( "on" + type, eventHandle );
+					}
+				}
+			}
+
+			if ( special.add ) {
+				special.add.call( elem, handleObj );
+
+				if ( !handleObj.handler.guid ) {
+					handleObj.handler.guid = handler.guid;
+				}
+			}
+
+			// Add to the element's handler list, delegates in front
+			if ( selector ) {
+				handlers.splice( handlers.delegateCount++, 0, handleObj );
+			} else {
+				handlers.push( handleObj );
+			}
+
+			// Keep track of which events have ever been used, for event optimization
+			jQuery.event.global[ type ] = true;
+		}
+
+		// Nullify elem to prevent memory leaks in IE
+		elem = null;
+	},
+
+	// Detach an event or set of events from an element
+	remove: function( elem, types, handler, selector, mappedTypes ) {
+		var j, handleObj, tmp,
+			origCount, t, events,
+			special, handlers, type,
+			namespaces, origType,
+			elemData = jQuery.hasData( elem ) && jQuery._data( elem );
+
+		if ( !elemData || !(events = elemData.events) ) {
+			return;
+		}
+
+		// Once for each type.namespace in types; type may be omitted
+		types = ( types || "" ).match( core_rnotwhite ) || [""];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[t] ) || [];
+			type = origType = tmp[1];
+			namespaces = ( tmp[2] || "" ).split( "." ).sort();
+
+			// Unbind all events (on this namespace, if provided) for the element
+			if ( !type ) {
+				for ( type in events ) {
+					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+				}
+				continue;
+			}
+
+			special = jQuery.event.special[ type ] || {};
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+			handlers = events[ type ] || [];
+			tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
+
+			// Remove matching events
+			origCount = j = handlers.length;
+			while ( j-- ) {
+				handleObj = handlers[ j ];
+
+				if ( ( mappedTypes || origType === handleObj.origType ) &&
+					( !handler || handler.guid === handleObj.guid ) &&
+					( !tmp || tmp.test( handleObj.namespace ) ) &&
+					( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
+					handlers.splice( j, 1 );
+
+					if ( handleObj.selector ) {
+						handlers.delegateCount--;
+					}
+					if ( special.remove ) {
+						special.remove.call( elem, handleObj );
+					}
+				}
+			}
+
+			// Remove generic event handler if we removed something and no more handlers exist
+			// (avoids potential for endless recursion during removal of special event handlers)
+			if ( origCount && !handlers.length ) {
+				if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+					jQuery.removeEvent( elem, type, elemData.handle );
+				}
+
+				delete events[ type ];
+			}
+		}
+
+		// Remove the expando if it's no longer used
+		if ( jQuery.isEmptyObject( events ) ) {
+			delete elemData.handle;
+
+			// removeData also checks for emptiness and clears the expando if empty
+			// so use it instead of delete
+			jQuery._removeData( elem, "events" );
+		}
+	},
+
+	trigger: function( event, data, elem, onlyHandlers ) {
+		var handle, ontype, cur,
+			bubbleType, special, tmp, i,
+			eventPath = [ elem || document ],
+			type = core_hasOwn.call( event, "type" ) ? event.type : event,
+			namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
+
+		cur = tmp = elem = elem || document;
+
+		// Don't do events on text and comment nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		// focus/blur morphs to focusin/out; ensure we're not firing them right now
+		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+			return;
+		}
+
+		if ( type.indexOf(".") >= 0 ) {
+			// Namespaced trigger; create a regexp to match event type in handle()
+			namespaces = type.split(".");
+			type = namespaces.shift();
+			namespaces.sort();
+		}
+		ontype = type.indexOf(":") < 0 && "on" + type;
+
+		// Caller can pass in a jQuery.Event object, Object, or just an event type string
+		event = event[ jQuery.expando ] ?
+			event :
+			new jQuery.Event( type, typeof event === "object" && event );
+
+		event.isTrigger = true;
+		event.namespace = namespaces.join(".");
+		event.namespace_re = event.namespace ?
+			new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
+			null;
+
+		// Clean up the event in case it is being reused
+		event.result = undefined;
+		if ( !event.target ) {
+			event.target = elem;
+		}
+
+		// Clone any incoming data and prepend the event, creating the handler arg list
+		data = data == null ?
+			[ event ] :
+			jQuery.makeArray( data, [ event ] );
+
+		// Allow special events to draw outside the lines
+		special = jQuery.event.special[ type ] || {};
+		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+			return;
+		}
+
+		// Determine event propagation path in advance, per W3C events spec (#9951)
+		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+			bubbleType = special.delegateType || type;
+			if ( !rfocusMorph.test( bubbleType + type ) ) {
+				cur = cur.parentNode;
+			}
+			for ( ; cur; cur = cur.parentNode ) {
+				eventPath.push( cur );
+				tmp = cur;
+			}
+
+			// Only add window if we got to document (e.g., not plain obj or detached DOM)
+			if ( tmp === (elem.ownerDocument || document) ) {
+				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+			}
+		}
+
+		// Fire handlers on the event path
+		i = 0;
+		while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
+
+			event.type = i > 1 ?
+				bubbleType :
+				special.bindType || type;
+
+			// jQuery handler
+			handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
+			if ( handle ) {
+				handle.apply( cur, data );
+			}
+
+			// Native handler
+			handle = ontype && cur[ ontype ];
+			if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {
+				event.preventDefault();
+			}
+		}
+		event.type = type;
+
+		// If nobody prevented the default action, do it now
+		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+			if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
+				!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
+
+				// Call a native DOM method on the target with the same name name as the event.
+				// Can't use an .isFunction() check here because IE6/7 fails that test.
+				// Don't do default actions on window, that's where global variables be (#6170)
+				if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
+
+					// Don't re-trigger an onFOO event when we call its FOO() method
+					tmp = elem[ ontype ];
+
+					if ( tmp ) {
+						elem[ ontype ] = null;
+					}
+
+					// Prevent re-triggering of the same event, since we already bubbled it above
+					jQuery.event.triggered = type;
+					try {
+						elem[ type ]();
+					} catch ( e ) {
+						// IE<9 dies on focus/blur to hidden element (#1486,#12518)
+						// only reproducible on winXP IE8 native, not IE9 in IE8 mode
+					}
+					jQuery.event.triggered = undefined;
+
+					if ( tmp ) {
+						elem[ ontype ] = tmp;
+					}
+				}
+			}
+		}
+
+		return event.result;
+	},
+
+	dispatch: function( event ) {
+
+		// Make a writable jQuery.Event from the native event object
+		event = jQuery.event.fix( event );
+
+		var i, ret, handleObj, matched, j,
+			handlerQueue = [],
+			args = core_slice.call( arguments ),
+			handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
+			special = jQuery.event.special[ event.type ] || {};
+
+		// Use the fix-ed jQuery.Event rather than the (read-only) native event
+		args[0] = event;
+		event.delegateTarget = this;
+
+		// Call the preDispatch hook for the mapped type, and let it bail if desired
+		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+			return;
+		}
+
+		// Determine handlers
+		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+		// Run delegates first; they may want to stop propagation beneath us
+		i = 0;
+		while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
+			event.currentTarget = matched.elem;
+
+			j = 0;
+			while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
+
+				// Triggered event must either 1) have no namespace, or
+				// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
+				if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
+
+					event.handleObj = handleObj;
+					event.data = handleObj.data;
+
+					ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
+							.apply( matched.elem, args );
+
+					if ( ret !== undefined ) {
+						if ( (event.result = ret) === false ) {
+							event.preventDefault();
+							event.stopPropagation();
+						}
+					}
+				}
+			}
+		}
+
+		// Call the postDispatch hook for the mapped type
+		if ( special.postDispatch ) {
+			special.postDispatch.call( this, event );
+		}
+
+		return event.result;
+	},
+
+	handlers: function( event, handlers ) {
+		var sel, handleObj, matches, i,
+			handlerQueue = [],
+			delegateCount = handlers.delegateCount,
+			cur = event.target;
+
+		// Find delegate handlers
+		// Black-hole SVG <use> instance trees (#13180)
+		// Avoid non-left-click bubbling in Firefox (#3861)
+		if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
+
+			for ( ; cur != this; cur = cur.parentNode || this ) {
+
+				// Don't check non-elements (#13208)
+				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+				if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {
+					matches = [];
+					for ( i = 0; i < delegateCount; i++ ) {
+						handleObj = handlers[ i ];
+
+						// Don't conflict with Object.prototype properties (#13203)
+						sel = handleObj.selector + " ";
+
+						if ( matches[ sel ] === undefined ) {
+							matches[ sel ] = handleObj.needsContext ?
+								jQuery( sel, this ).index( cur ) >= 0 :
+								jQuery.find( sel, this, null, [ cur ] ).length;
+						}
+						if ( matches[ sel ] ) {
+							matches.push( handleObj );
+						}
+					}
+					if ( matches.length ) {
+						handlerQueue.push({ elem: cur, handlers: matches });
+					}
+				}
+			}
+		}
+
+		// Add the remaining (directly-bound) handlers
+		if ( delegateCount < handlers.length ) {
+			handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
+		}
+
+		return handlerQueue;
+	},
+
+	fix: function( event ) {
+		if ( event[ jQuery.expando ] ) {
+			return event;
+		}
+
+		// Create a writable copy of the event object and normalize some properties
+		var i, prop, copy,
+			type = event.type,
+			originalEvent = event,
+			fixHook = this.fixHooks[ type ];
+
+		if ( !fixHook ) {
+			this.fixHooks[ type ] = fixHook =
+				rmouseEvent.test( type ) ? this.mouseHooks :
+				rkeyEvent.test( type ) ? this.keyHooks :
+				{};
+		}
+		copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+
+		event = new jQuery.Event( originalEvent );
+
+		i = copy.length;
+		while ( i-- ) {
+			prop = copy[ i ];
+			event[ prop ] = originalEvent[ prop ];
+		}
+
+		// Support: IE<9
+		// Fix target property (#1925)
+		if ( !event.target ) {
+			event.target = originalEvent.srcElement || document;
+		}
+
+		// Support: Chrome 23+, Safari?
+		// Target should not be a text node (#504, #13143)
+		if ( event.target.nodeType === 3 ) {
+			event.target = event.target.parentNode;
+		}
+
+		// Support: IE<9
+		// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
+		event.metaKey = !!event.metaKey;
+
+		return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
+	},
+
+	// Includes some event props shared by KeyEvent and MouseEvent
+	props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+
+	fixHooks: {},
+
+	keyHooks: {
+		props: "char charCode key keyCode".split(" "),
+		filter: function( event, original ) {
+
+			// Add which for key events
+			if ( event.which == null ) {
+				event.which = original.charCode != null ? original.charCode : original.keyCode;
+			}
+
+			return event;
+		}
+	},
+
+	mouseHooks: {
+		props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+		filter: function( event, original ) {
+			var body, eventDoc, doc,
+				button = original.button,
+				fromElement = original.fromElement;
+
+			// Calculate pageX/Y if missing and clientX/Y available
+			if ( event.pageX == null && original.clientX != null ) {
+				eventDoc = event.target.ownerDocument || document;
+				doc = eventDoc.documentElement;
+				body = eventDoc.body;
+
+				event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
+				event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
+			}
+
+			// Add relatedTarget, if necessary
+			if ( !event.relatedTarget && fromElement ) {
+				event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
+			}
+
+			// Add which for click: 1 === left; 2 === middle; 3 === right
+			// Note: button is not normalized, so don't use it
+			if ( !event.which && button !== undefined ) {
+				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+			}
+
+			return event;
+		}
+	},
+
+	special: {
+		load: {
+			// Prevent triggered image.load events from bubbling to window.load
+			noBubble: true
+		},
+		click: {
+			// For checkbox, fire native event so checked state will be right
+			trigger: function() {
+				if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
+					this.click();
+					return false;
+				}
+			}
+		},
+		focus: {
+			// Fire native event if possible so blur/focus sequence is correct
+			trigger: function() {
+				if ( this !== document.activeElement && this.focus ) {
+					try {
+						this.focus();
+						return false;
+					} catch ( e ) {
+						// Support: IE<9
+						// If we error on focus to hidden element (#1486, #12518),
+						// let .trigger() run the handlers
+					}
+				}
+			},
+			delegateType: "focusin"
+		},
+		blur: {
+			trigger: function() {
+				if ( this === document.activeElement && this.blur ) {
+					this.blur();
+					return false;
+				}
+			},
+			delegateType: "focusout"
+		},
+
+		beforeunload: {
+			postDispatch: function( event ) {
+
+				// Even when returnValue equals to undefined Firefox will still show alert
+				if ( event.result !== undefined ) {
+					event.originalEvent.returnValue = event.result;
+				}
+			}
+		}
+	},
+
+	simulate: function( type, elem, event, bubble ) {
+		// Piggyback on a donor event to simulate a different one.
+		// Fake originalEvent to avoid donor's stopPropagation, but if the
+		// simulated event prevents default then we do the same on the donor.
+		var e = jQuery.extend(
+			new jQuery.Event(),
+			event,
+			{ type: type,
+				isSimulated: true,
+				originalEvent: {}
+			}
+		);
+		if ( bubble ) {
+			jQuery.event.trigger( e, null, elem );
+		} else {
+			jQuery.event.dispatch.call( elem, e );
+		}
+		if ( e.isDefaultPrevented() ) {
+			event.preventDefault();
+		}
+	}
+};
+
+jQuery.removeEvent = document.removeEventListener ?
+	function( elem, type, handle ) {
+		if ( elem.removeEventListener ) {
+			elem.removeEventListener( type, handle, false );
+		}
+	} :
+	function( elem, type, handle ) {
+		var name = "on" + type;
+
+		if ( elem.detachEvent ) {
+
+			// #8545, #7054, preventing memory leaks for custom events in IE6-8
+			// detachEvent needed property on element, by name of that event, to properly expose it to GC
+			if ( typeof elem[ name ] === core_strundefined ) {
+				elem[ name ] = null;
+			}
+
+			elem.detachEvent( name, handle );
+		}
+	};
+
+jQuery.Event = function( src, props ) {
+	// Allow instantiation without the 'new' keyword
+	if ( !(this instanceof jQuery.Event) ) {
+		return new jQuery.Event( src, props );
+	}
+
+	// Event object
+	if ( src && src.type ) {
+		this.originalEvent = src;
+		this.type = src.type;
+
+		// Events bubbling up the document may have been marked as prevented
+		// by a handler lower down the tree; reflect the correct value.
+		this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
+			src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
+
+	// Event type
+	} else {
+		this.type = src;
+	}
+
+	// Put explicitly provided properties onto the event object
+	if ( props ) {
+		jQuery.extend( this, props );
+	}
+
+	// Create a timestamp if incoming event doesn't have one
+	this.timeStamp = src && src.timeStamp || jQuery.now();
+
+	// Mark it as fixed
+	this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+	isDefaultPrevented: returnFalse,
+	isPropagationStopped: returnFalse,
+	isImmediatePropagationStopped: returnFalse,
+
+	preventDefault: function() {
+		var e = this.originalEvent;
+
+		this.isDefaultPrevented = returnTrue;
+		if ( !e ) {
+			return;
+		}
+
+		// If preventDefault exists, run it on the original event
+		if ( e.preventDefault ) {
+			e.preventDefault();
+
+		// Support: IE
+		// Otherwise set the returnValue property of the original event to false
+		} else {
+			e.returnValue = false;
+		}
+	},
+	stopPropagation: function() {
+		var e = this.originalEvent;
+
+		this.isPropagationStopped = returnTrue;
+		if ( !e ) {
+			return;
+		}
+		// If stopPropagation exists, run it on the original event
+		if ( e.stopPropagation ) {
+			e.stopPropagation();
+		}
+
+		// Support: IE
+		// Set the cancelBubble property of the original event to true
+		e.cancelBubble = true;
+	},
+	stopImmediatePropagation: function() {
+		this.isImmediatePropagationStopped = returnTrue;
+		this.stopPropagation();
+	}
+};
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+jQuery.each({
+	mouseenter: "mouseover",
+	mouseleave: "mouseout"
+}, function( orig, fix ) {
+	jQuery.event.special[ orig ] = {
+		delegateType: fix,
+		bindType: fix,
+
+		handle: function( event ) {
+			var ret,
+				target = this,
+				related = event.relatedTarget,
+				handleObj = event.handleObj;
+
+			// For mousenter/leave call the handler if related is outside the target.
+			// NB: No relatedTarget if the mouse left/entered the browser window
+			if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
+				event.type = handleObj.origType;
+				ret = handleObj.handler.apply( this, arguments );
+				event.type = fix;
+			}
+			return ret;
+		}
+	};
+});
+
+// IE submit delegation
+if ( !jQuery.support.submitBubbles ) {
+
+	jQuery.event.special.submit = {
+		setup: function() {
+			// Only need this for delegated form submit events
+			if ( jQuery.nodeName( this, "form" ) ) {
+				return false;
+			}
+
+			// Lazy-add a submit handler when a descendant form may potentially be submitted
+			jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
+				// Node name check avoids a VML-related crash in IE (#9807)
+				var elem = e.target,
+					form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
+				if ( form && !jQuery._data( form, "submitBubbles" ) ) {
+					jQuery.event.add( form, "submit._submit", function( event ) {
+						event._submit_bubble = true;
+					});
+					jQuery._data( form, "submitBubbles", true );
+				}
+			});
+			// return undefined since we don't need an event listener
+		},
+
+		postDispatch: function( event ) {
+			// If form was submitted by the user, bubble the event up the tree
+			if ( event._submit_bubble ) {
+				delete event._submit_bubble;
+				if ( this.parentNode && !event.isTrigger ) {
+					jQuery.event.simulate( "submit", this.parentNode, event, true );
+				}
+			}
+		},
+
+		teardown: function() {
+			// Only need this for delegated form submit events
+			if ( jQuery.nodeName( this, "form" ) ) {
+				return false;
+			}
+
+			// Remove delegated handlers; cleanData eventually reaps submit handlers attached above
+			jQuery.event.remove( this, "._submit" );
+		}
+	};
+}
+
+// IE change delegation and checkbox/radio fix
+if ( !jQuery.support.changeBubbles ) {
+
+	jQuery.event.special.change = {
+
+		setup: function() {
+
+			if ( rformElems.test( this.nodeName ) ) {
+				// IE doesn't fire change on a check/radio until blur; trigger it on click
+				// after a propertychange. Eat the blur-change in special.change.handle.
+				// This still fires onchange a second time for check/radio after blur.
+				if ( this.type === "checkbox" || this.type === "radio" ) {
+					jQuery.event.add( this, "propertychange._change", function( event ) {
+						if ( event.originalEvent.propertyName === "checked" ) {
+							this._just_changed = true;
+						}
+					});
+					jQuery.event.add( this, "click._change", function( event ) {
+						if ( this._just_changed && !event.isTrigger ) {
+							this._just_changed = false;
+						}
+						// Allow triggered, simulated change events (#11500)
+						jQuery.event.simulate( "change", this, event, true );
+					});
+				}
+				return false;
+			}
+			// Delegated event; lazy-add a change handler on descendant inputs
+			jQuery.event.add( this, "beforeactivate._change", function( e ) {
+				var elem = e.target;
+
+				if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {
+					jQuery.event.add( elem, "change._change", function( event ) {
+						if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
+							jQuery.event.simulate( "change", this.parentNode, event, true );
+						}
+					});
+					jQuery._data( elem, "changeBubbles", true );
+				}
+			});
+		},
+
+		handle: function( event ) {
+			var elem = event.target;
+
+			// Swallow native change events from checkbox/radio, we already triggered them above
+			if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
+				return event.handleObj.handler.apply( this, arguments );
+			}
+		},
+
+		teardown: function() {
+			jQuery.event.remove( this, "._change" );
+
+			return !rformElems.test( this.nodeName );
+		}
+	};
+}
+
+// Create "bubbling" focus and blur events
+if ( !jQuery.support.focusinBubbles ) {
+	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+		// Attach a single capturing handler while someone wants focusin/focusout
+		var attaches = 0,
+			handler = function( event ) {
+				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
+			};
+
+		jQuery.event.special[ fix ] = {
+			setup: function() {
+				if ( attaches++ === 0 ) {
+					document.addEventListener( orig, handler, true );
+				}
+			},
+			teardown: function() {
+				if ( --attaches === 0 ) {
+					document.removeEventListener( orig, handler, true );
+				}
+			}
+		};
+	});
+}
+
+jQuery.fn.extend({
+
+	on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
+		var type, origFn;
+
+		// Types can be a map of types/handlers
+		if ( typeof types === "object" ) {
+			// ( types-Object, selector, data )
+			if ( typeof selector !== "string" ) {
+				// ( types-Object, data )
+				data = data || selector;
+				selector = undefined;
+			}
+			for ( type in types ) {
+				this.on( type, selector, data, types[ type ], one );
+			}
+			return this;
+		}
+
+		if ( data == null && fn == null ) {
+			// ( types, fn )
+			fn = selector;
+			data = selector = undefined;
+		} else if ( fn == null ) {
+			if ( typeof selector === "string" ) {
+				// ( types, selector, fn )
+				fn = data;
+				data = undefined;
+			} else {
+				// ( types, data, fn )
+				fn = data;
+				data = selector;
+				selector = undefined;
+			}
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		} else if ( !fn ) {
+			return this;
+		}
+
+		if ( one === 1 ) {
+			origFn = fn;
+			fn = function( event ) {
+				// Can use an empty set, since event contains the info
+				jQuery().off( event );
+				return origFn.apply( this, arguments );
+			};
+			// Use same guid so caller can remove using origFn
+			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+		}
+		return this.each( function() {
+			jQuery.event.add( this, types, fn, data, selector );
+		});
+	},
+	one: function( types, selector, data, fn ) {
+		return this.on( types, selector, data, fn, 1 );
+	},
+	off: function( types, selector, fn ) {
+		var handleObj, type;
+		if ( types && types.preventDefault && types.handleObj ) {
+			// ( event )  dispatched jQuery.Event
+			handleObj = types.handleObj;
+			jQuery( types.delegateTarget ).off(
+				handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
+				handleObj.selector,
+				handleObj.handler
+			);
+			return this;
+		}
+		if ( typeof types === "object" ) {
+			// ( types-object [, selector] )
+			for ( type in types ) {
+				this.off( type, selector, types[ type ] );
+			}
+			return this;
+		}
+		if ( selector === false || typeof selector === "function" ) {
+			// ( types [, fn] )
+			fn = selector;
+			selector = undefined;
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		}
+		return this.each(function() {
+			jQuery.event.remove( this, types, fn, selector );
+		});
+	},
+
+	bind: function( types, data, fn ) {
+		return this.on( types, null, data, fn );
+	},
+	unbind: function( types, fn ) {
+		return this.off( types, null, fn );
+	},
+
+	delegate: function( selector, types, data, fn ) {
+		return this.on( types, selector, data, fn );
+	},
+	undelegate: function( selector, types, fn ) {
+		// ( namespace ) or ( selector, types [, fn] )
+		return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
+	},
+
+	trigger: function( type, data ) {
+		return this.each(function() {
+			jQuery.event.trigger( type, data, this );
+		});
+	},
+	triggerHandler: function( type, data ) {
+		var elem = this[0];
+		if ( elem ) {
+			return jQuery.event.trigger( type, data, elem, true );
+		}
+	}
+});
+/*!
+ * Sizzle CSS Selector Engine
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://sizzlejs.com/
+ */
+(function( window, undefined ) {
+
+var i,
+	cachedruns,
+	Expr,
+	getText,
+	isXML,
+	compile,
+	hasDuplicate,
+	outermostContext,
+
+	// Local document vars
+	setDocument,
+	document,
+	docElem,
+	documentIsXML,
+	rbuggyQSA,
+	rbuggyMatches,
+	matches,
+	contains,
+	sortOrder,
+
+	// Instance-specific data
+	expando = "sizzle" + -(new Date()),
+	preferredDoc = window.document,
+	support = {},
+	dirruns = 0,
+	done = 0,
+	classCache = createCache(),
+	tokenCache = createCache(),
+	compilerCache = createCache(),
+
+	// General-purpose constants
+	strundefined = typeof undefined,
+	MAX_NEGATIVE = 1 << 31,
+
+	// Array methods
+	arr = [],
+	pop = arr.pop,
+	push = arr.push,
+	slice = arr.slice,
+	// Use a stripped-down indexOf if we can't use a native one
+	indexOf = arr.indexOf || function( elem ) {
+		var i = 0,
+			len = this.length;
+		for ( ; i < len; i++ ) {
+			if ( this[i] === elem ) {
+				return i;
+			}
+		}
+		return -1;
+	},
+
+
+	// Regular expressions
+
+	// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
+	whitespace = "[\\x20\\t\\r\\n\\f]",
+	// http://www.w3.org/TR/css3-syntax/#characters
+	characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
+
+	// Loosely modeled on CSS identifier characters
+	// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
+	// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+	identifier = characterEncoding.replace( "w", "w#" ),
+
+	// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors
+	operators = "([*^$|!~]?=)",
+	attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +
+		"*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",
+
+	// Prefer arguments quoted,
+	//   then not containing pseudos/brackets,
+	//   then attribute selectors/non-parenthetical expressions,
+	//   then anything else
+	// These preferences are here to reduce the number of selectors
+	//   needing tokenize in the PSEUDO preFilter
+	pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)",
+
+	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+	rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ),
+	rpseudo = new RegExp( pseudos ),
+	ridentifier = new RegExp( "^" + identifier + "$" ),
+
+	matchExpr = {
+		"ID": new RegExp( "^#(" + characterEncoding + ")" ),
+		"CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
+		"NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ),
+		"TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
+		"ATTR": new RegExp( "^" + attributes ),
+		"PSEUDO": new RegExp( "^" + pseudos ),
+		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+		// For use in libraries implementing .is()
+		// We use this for POS matching in `select`
+		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+	},
+
+	rsibling = /[\x20\t\r\n\f]*[+~]/,
+
+	rnative = /^[^{]+\{\s*\[native code/,
+
+	// Easily-parseable/retrievable ID or TAG or CLASS selectors
+	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+	rinputs = /^(?:input|select|textarea|button)$/i,
+	rheader = /^h\d$/i,
+
+	rescape = /'|\\/g,
+	rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,
+
+	// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+	runescape = /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,
+	funescape = function( _, escaped ) {
+		var high = "0x" + escaped - 0x10000;
+		// NaN means non-codepoint
+		return high !== high ?
+			escaped :
+			// BMP codepoint
+			high < 0 ?
+				String.fromCharCode( high + 0x10000 ) :
+				// Supplemental Plane codepoint (surrogate pair)
+				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+	};
+
+// Use a stripped-down slice if we can't use a native one
+try {
+	slice.call( preferredDoc.documentElement.childNodes, 0 )[0].nodeType;
+} catch ( e ) {
+	slice = function( i ) {
+		var elem,
+			results = [];
+		while ( (elem = this[i++]) ) {
+			results.push( elem );
+		}
+		return results;
+	};
+}
+
+/**
+ * For feature detection
+ * @param {Function} fn The function to test for native support
+ */
+function isNative( fn ) {
+	return rnative.test( fn + "" );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
+ *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ *	deleting the oldest entry
+ */
+function createCache() {
+	var cache,
+		keys = [];
+
+	return (cache = function( key, value ) {
+		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+		if ( keys.push( key += " " ) > Expr.cacheLength ) {
+			// Only keep the most recent entries
+			delete cache[ keys.shift() ];
+		}
+		return (cache[ key ] = value);
+	});
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+	fn[ expando ] = true;
+	return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created div and expects a boolean result
+ */
+function assert( fn ) {
+	var div = document.createElement("div");
+
+	try {
+		return fn( div );
+	} catch (e) {
+		return false;
+	} finally {
+		// release memory in IE
+		div = null;
+	}
+}
+
+function Sizzle( selector, context, results, seed ) {
+	var match, elem, m, nodeType,
+		// QSA vars
+		i, groups, old, nid, newContext, newSelector;
+
+	if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+		setDocument( context );
+	}
+
+	context = context || document;
+	results = results || [];
+
+	if ( !selector || typeof selector !== "string" ) {
+		return results;
+	}
+
+	if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
+		return [];
+	}
+
+	if ( !documentIsXML && !seed ) {
+
+		// Shortcuts
+		if ( (match = rquickExpr.exec( selector )) ) {
+			// Speed-up: Sizzle("#ID")
+			if ( (m = match[1]) ) {
+				if ( nodeType === 9 ) {
+					elem = context.getElementById( m );
+					// Check parentNode to catch when Blackberry 4.6 returns
+					// nodes that are no longer in the document #6963
+					if ( elem && elem.parentNode ) {
+						// Handle the case where IE, Opera, and Webkit return items
+						// by name instead of ID
+						if ( elem.id === m ) {
+							results.push( elem );
+							return results;
+						}
+					} else {
+						return results;
+					}
+				} else {
+					// Context is not a document
+					if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
+						contains( context, elem ) && elem.id === m ) {
+						results.push( elem );
+						return results;
+					}
+				}
+
+			// Speed-up: Sizzle("TAG")
+			} else if ( match[2] ) {
+				push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) );
+				return results;
+
+			// Speed-up: Sizzle(".CLASS")
+			} else if ( (m = match[3]) && support.getByClassName && context.getElementsByClassName ) {
+				push.apply( results, slice.call(context.getElementsByClassName( m ), 0) );
+				return results;
+			}
+		}
+
+		// QSA path
+		if ( support.qsa && !rbuggyQSA.test(selector) ) {
+			old = true;
+			nid = expando;
+			newContext = context;
+			newSelector = nodeType === 9 && selector;
+
+			// qSA works strangely on Element-rooted queries
+			// We can work around this by specifying an extra ID on the root
+			// and working up from there (Thanks to Andrew Dupont for the technique)
+			// IE 8 doesn't work on object elements
+			if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+				groups = tokenize( selector );
+
+				if ( (old = context.getAttribute("id")) ) {
+					nid = old.replace( rescape, "\\$&" );
+				} else {
+					context.setAttribute( "id", nid );
+				}
+				nid = "[id='" + nid + "'] ";
+
+				i = groups.length;
+				while ( i-- ) {
+					groups[i] = nid + toSelector( groups[i] );
+				}
+				newContext = rsibling.test( selector ) && context.parentNode || context;
+				newSelector = groups.join(",");
+			}
+
+			if ( newSelector ) {
+				try {
+					push.apply( results, slice.call( newContext.querySelectorAll(
+						newSelector
+					), 0 ) );
+					return results;
+				} catch(qsaError) {
+				} finally {
+					if ( !old ) {
+						context.removeAttribute("id");
+					}
+				}
+			}
+		}
+	}
+
+	// All others
+	return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Detect xml
+ * @param {Element|Object} elem An element or a document
+ */
+isXML = Sizzle.isXML = function( elem ) {
+	// documentElement is verified for cases where it doesn't yet exist
+	// (such as loading iframes in IE - #4833)
+	var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+	return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+	var doc = node ? node.ownerDocument || node : preferredDoc;
+
+	// If no document and documentElement is available, return
+	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+		return document;
+	}
+
+	// Set our document
+	document = doc;
+	docElem = doc.documentElement;
+
+	// Support tests
+	documentIsXML = isXML( doc );
+
+	// Check if getElementsByTagName("*") returns only elements
+	support.tagNameNoComments = assert(function( div ) {
+		div.appendChild( doc.createComment("") );
+		return !div.getElementsByTagName("*").length;
+	});
+
+	// Check if attributes should be retrieved by attribute nodes
+	support.attributes = assert(function( div ) {
+		div.innerHTML = "<select></select>";
+		var type = typeof div.lastChild.getAttribute("multiple");
+		// IE8 returns a string for some attributes even when not present
+		return type !== "boolean" && type !== "string";
+	});
+
+	// Check if getElementsByClassName can be trusted
+	support.getByClassName = assert(function( div ) {
+		// Opera can't find a second classname (in 9.6)
+		div.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>";
+		if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) {
+			return false;
+		}
+
+		// Safari 3.2 caches class attributes and doesn't catch changes
+		div.lastChild.className = "e";
+		return div.getElementsByClassName("e").length === 2;
+	});
+
+	// Check if getElementById returns elements by name
+	// Check if getElementsByName privileges form controls or returns elements by ID
+	support.getByName = assert(function( div ) {
+		// Inject content
+		div.id = expando + 0;
+		div.innerHTML = "<a name='" + expando + "'></a><div name='" + expando + "'></div>";
+		docElem.insertBefore( div, docElem.firstChild );
+
+		// Test
+		var pass = doc.getElementsByName &&
+			// buggy browsers will return fewer than the correct 2
+			doc.getElementsByName( expando ).length === 2 +
+			// buggy browsers will return more than the correct 0
+			doc.getElementsByName( expando + 0 ).length;
+		support.getIdNotName = !doc.getElementById( expando );
+
+		// Cleanup
+		docElem.removeChild( div );
+
+		return pass;
+	});
+
+	// IE6/7 return modified attributes
+	Expr.attrHandle = assert(function( div ) {
+		div.innerHTML = "<a href='#'></a>";
+		return div.firstChild && typeof div.firstChild.getAttribute !== strundefined &&
+			div.firstChild.getAttribute("href") === "#";
+	}) ?
+		{} :
+		{
+			"href": function( elem ) {
+				return elem.getAttribute( "href", 2 );
+			},
+			"type": function( elem ) {
+				return elem.getAttribute("type");
+			}
+		};
+
+	// ID find and filter
+	if ( support.getIdNotName ) {
+		Expr.find["ID"] = function( id, context ) {
+			if ( typeof context.getElementById !== strundefined && !documentIsXML ) {
+				var m = context.getElementById( id );
+				// Check parentNode to catch when Blackberry 4.6 returns
+				// nodes that are no longer in the document #6963
+				return m && m.parentNode ? [m] : [];
+			}
+		};
+		Expr.filter["ID"] = function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				return elem.getAttribute("id") === attrId;
+			};
+		};
+	} else {
+		Expr.find["ID"] = function( id, context ) {
+			if ( typeof context.getElementById !== strundefined && !documentIsXML ) {
+				var m = context.getElementById( id );
+
+				return m ?
+					m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ?
+						[m] :
+						undefined :
+					[];
+			}
+		};
+		Expr.filter["ID"] =  function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
+				return node && node.value === attrId;
+			};
+		};
+	}
+
+	// Tag
+	Expr.find["TAG"] = support.tagNameNoComments ?
+		function( tag, context ) {
+			if ( typeof context.getElementsByTagName !== strundefined ) {
+				return context.getElementsByTagName( tag );
+			}
+		} :
+		function( tag, context ) {
+			var elem,
+				tmp = [],
+				i = 0,
+				results = context.getElementsByTagName( tag );
+
+			// Filter out possible comments
+			if ( tag === "*" ) {
+				while ( (elem = results[i++]) ) {
+					if ( elem.nodeType === 1 ) {
+						tmp.push( elem );
+					}
+				}
+
+				return tmp;
+			}
+			return results;
+		};
+
+	// Name
+	Expr.find["NAME"] = support.getByName && function( tag, context ) {
+		if ( typeof context.getElementsByName !== strundefined ) {
+			return context.getElementsByName( name );
+		}
+	};
+
+	// Class
+	Expr.find["CLASS"] = support.getByClassName && function( className, context ) {
+		if ( typeof context.getElementsByClassName !== strundefined && !documentIsXML ) {
+			return context.getElementsByClassName( className );
+		}
+	};
+
+	// QSA and matchesSelector support
+
+	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+	rbuggyMatches = [];
+
+	// qSa(:focus) reports false when true (Chrome 21),
+	// no need to also add to buggyMatches since matches checks buggyQSA
+	// A support test would require too much code (would include document ready)
+	rbuggyQSA = [ ":focus" ];
+
+	if ( (support.qsa = isNative(doc.querySelectorAll)) ) {
+		// Build QSA regex
+		// Regex strategy adopted from Diego Perini
+		assert(function( div ) {
+			// Select is set to empty string on purpose
+			// This is to test IE's treatment of not explictly
+			// setting a boolean content attribute,
+			// since its presence should be enough
+			// http://bugs.jquery.com/ticket/12359
+			div.innerHTML = "<select><option selected=''></option></select>";
+
+			// IE8 - Some boolean attributes are not treated correctly
+			if ( !div.querySelectorAll("[selected]").length ) {
+				rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" );
+			}
+
+			// Webkit/Opera - :checked should return selected option elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			// IE8 throws error here and will not see later tests
+			if ( !div.querySelectorAll(":checked").length ) {
+				rbuggyQSA.push(":checked");
+			}
+		});
+
+		assert(function( div ) {
+
+			// Opera 10-12/IE8 - ^= $= *= and empty values
+			// Should not select anything
+			div.innerHTML = "<input type='hidden' i=''/>";
+			if ( div.querySelectorAll("[i^='']").length ) {
+				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" );
+			}
+
+			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+			// IE8 throws error here and will not see later tests
+			if ( !div.querySelectorAll(":enabled").length ) {
+				rbuggyQSA.push( ":enabled", ":disabled" );
+			}
+
+			// Opera 10-11 does not throw on post-comma invalid pseudos
+			div.querySelectorAll("*,:x");
+			rbuggyQSA.push(",.*:");
+		});
+	}
+
+	if ( (support.matchesSelector = isNative( (matches = docElem.matchesSelector ||
+		docElem.mozMatchesSelector ||
+		docElem.webkitMatchesSelector ||
+		docElem.oMatchesSelector ||
+		docElem.msMatchesSelector) )) ) {
+
+		assert(function( div ) {
+			// Check to see if it's possible to do matchesSelector
+			// on a disconnected node (IE 9)
+			support.disconnectedMatch = matches.call( div, "div" );
+
+			// This should fail with an exception
+			// Gecko does not error, returns false instead
+			matches.call( div, "[s!='']:x" );
+			rbuggyMatches.push( "!=", pseudos );
+		});
+	}
+
+	rbuggyQSA = new RegExp( rbuggyQSA.join("|") );
+	rbuggyMatches = new RegExp( rbuggyMatches.join("|") );
+
+	// Element contains another
+	// Purposefully does not implement inclusive descendent
+	// As in, an element does not contain itself
+	contains = isNative(docElem.contains) || docElem.compareDocumentPosition ?
+		function( a, b ) {
+			var adown = a.nodeType === 9 ? a.documentElement : a,
+				bup = b && b.parentNode;
+			return a === bup || !!( bup && bup.nodeType === 1 && (
+				adown.contains ?
+					adown.contains( bup ) :
+					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+			));
+		} :
+		function( a, b ) {
+			if ( b ) {
+				while ( (b = b.parentNode) ) {
+					if ( b === a ) {
+						return true;
+					}
+				}
+			}
+			return false;
+		};
+
+	// Document order sorting
+	sortOrder = docElem.compareDocumentPosition ?
+	function( a, b ) {
+		var compare;
+
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		if ( (compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b )) ) {
+			if ( compare & 1 || a.parentNode && a.parentNode.nodeType === 11 ) {
+				if ( a === doc || contains( preferredDoc, a ) ) {
+					return -1;
+				}
+				if ( b === doc || contains( preferredDoc, b ) ) {
+					return 1;
+				}
+				return 0;
+			}
+			return compare & 4 ? -1 : 1;
+		}
+
+		return a.compareDocumentPosition ? -1 : 1;
+	} :
+	function( a, b ) {
+		var cur,
+			i = 0,
+			aup = a.parentNode,
+			bup = b.parentNode,
+			ap = [ a ],
+			bp = [ b ];
+
+		// Exit early if the nodes are identical
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+
+		// Parentless nodes are either documents or disconnected
+		} else if ( !aup || !bup ) {
+			return a === doc ? -1 :
+				b === doc ? 1 :
+				aup ? -1 :
+				bup ? 1 :
+				0;
+
+		// If the nodes are siblings, we can do a quick check
+		} else if ( aup === bup ) {
+			return siblingCheck( a, b );
+		}
+
+		// Otherwise we need full lists of their ancestors for comparison
+		cur = a;
+		while ( (cur = cur.parentNode) ) {
+			ap.unshift( cur );
+		}
+		cur = b;
+		while ( (cur = cur.parentNode) ) {
+			bp.unshift( cur );
+		}
+
+		// Walk down the tree looking for a discrepancy
+		while ( ap[i] === bp[i] ) {
+			i++;
+		}
+
+		return i ?
+			// Do a sibling check if the nodes have a common ancestor
+			siblingCheck( ap[i], bp[i] ) :
+
+			// Otherwise nodes in our document sort first
+			ap[i] === preferredDoc ? -1 :
+			bp[i] === preferredDoc ? 1 :
+			0;
+	};
+
+	// Always assume the presence of duplicates if sort doesn't
+	// pass them to our comparison function (as in Google Chrome).
+	hasDuplicate = false;
+	[0, 0].sort( sortOrder );
+	support.detectDuplicates = hasDuplicate;
+
+	return document;
+};
+
+Sizzle.matches = function( expr, elements ) {
+	return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	// Make sure that attribute selectors are quoted
+	expr = expr.replace( rattributeQuotes, "='$1']" );
+
+	// rbuggyQSA always contains :focus, so no need for an existence check
+	if ( support.matchesSelector && !documentIsXML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && !rbuggyQSA.test(expr) ) {
+		try {
+			var ret = matches.call( elem, expr );
+
+			// IE 9's matchesSelector returns false on disconnected nodes
+			if ( ret || support.disconnectedMatch ||
+					// As well, disconnected nodes are said to be in a document
+					// fragment in IE 9
+					elem.document && elem.document.nodeType !== 11 ) {
+				return ret;
+			}
+		} catch(e) {}
+	}
+
+	return Sizzle( expr, document, null, [elem] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+	// Set document vars if needed
+	if ( ( context.ownerDocument || context ) !== document ) {
+		setDocument( context );
+	}
+	return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+	var val;
+
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	if ( !documentIsXML ) {
+		name = name.toLowerCase();
+	}
+	if ( (val = Expr.attrHandle[ name ]) ) {
+		return val( elem );
+	}
+	if ( documentIsXML || support.attributes ) {
+		return elem.getAttribute( name );
+	}
+	return ( (val = elem.getAttributeNode( name )) || elem.getAttribute( name ) ) && elem[ name ] === true ?
+		name :
+		val && val.specified ? val.value : null;
+};
+
+Sizzle.error = function( msg ) {
+	throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+// Document sorting and removing duplicates
+Sizzle.uniqueSort = function( results ) {
+	var elem,
+		duplicates = [],
+		i = 1,
+		j = 0;
+
+	// Unless we *know* we can detect duplicates, assume their presence
+	hasDuplicate = !support.detectDuplicates;
+	results.sort( sortOrder );
+
+	if ( hasDuplicate ) {
+		for ( ; (elem = results[i]); i++ ) {
+			if ( elem === results[ i - 1 ] ) {
+				j = duplicates.push( i );
+			}
+		}
+		while ( j-- ) {
+			results.splice( duplicates[ j ], 1 );
+		}
+	}
+
+	return results;
+};
+
+function siblingCheck( a, b ) {
+	var cur = b && a,
+		diff = cur && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE );
+
+	// Use IE sourceIndex if available on both nodes
+	if ( diff ) {
+		return diff;
+	}
+
+	// Check if b follows a
+	if ( cur ) {
+		while ( (cur = cur.nextSibling) ) {
+			if ( cur === b ) {
+				return -1;
+			}
+		}
+	}
+
+	return a ? 1 : -1;
+}
+
+// Returns a function to use in pseudos for input types
+function createInputPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return name === "input" && elem.type === type;
+	};
+}
+
+// Returns a function to use in pseudos for buttons
+function createButtonPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return (name === "input" || name === "button") && elem.type === type;
+	};
+}
+
+// Returns a function to use in pseudos for positionals
+function createPositionalPseudo( fn ) {
+	return markFunction(function( argument ) {
+		argument = +argument;
+		return markFunction(function( seed, matches ) {
+			var j,
+				matchIndexes = fn( [], seed.length, argument ),
+				i = matchIndexes.length;
+
+			// Match elements found at the specified indexes
+			while ( i-- ) {
+				if ( seed[ (j = matchIndexes[i]) ] ) {
+					seed[j] = !(matches[j] = seed[j]);
+				}
+			}
+		});
+	});
+}
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+	var node,
+		ret = "",
+		i = 0,
+		nodeType = elem.nodeType;
+
+	if ( !nodeType ) {
+		// If no nodeType, this is expected to be an array
+		for ( ; (node = elem[i]); i++ ) {
+			// Do not traverse comment nodes
+			ret += getText( node );
+		}
+	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+		// Use textContent for elements
+		// innerText usage removed for consistency of new lines (see #11153)
+		if ( typeof elem.textContent === "string" ) {
+			return elem.textContent;
+		} else {
+			// Traverse its children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				ret += getText( elem );
+			}
+		}
+	} else if ( nodeType === 3 || nodeType === 4 ) {
+		return elem.nodeValue;
+	}
+	// Do not include comment or processing instruction nodes
+
+	return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+	// Can be adjusted by the user
+	cacheLength: 50,
+
+	createPseudo: markFunction,
+
+	match: matchExpr,
+
+	find: {},
+
+	relative: {
+		">": { dir: "parentNode", first: true },
+		" ": { dir: "parentNode" },
+		"+": { dir: "previousSibling", first: true },
+		"~": { dir: "previousSibling" }
+	},
+
+	preFilter: {
+		"ATTR": function( match ) {
+			match[1] = match[1].replace( runescape, funescape );
+
+			// Move the given value to match[3] whether quoted or unquoted
+			match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape );
+
+			if ( match[2] === "~=" ) {
+				match[3] = " " + match[3] + " ";
+			}
+
+			return match.slice( 0, 4 );
+		},
+
+		"CHILD": function( match ) {
+			/* matches from matchExpr["CHILD"]
+				1 type (only|nth|...)
+				2 what (child|of-type)
+				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+				4 xn-component of xn+y argument ([+-]?\d*n|)
+				5 sign of xn-component
+				6 x of xn-component
+				7 sign of y-component
+				8 y of y-component
+			*/
+			match[1] = match[1].toLowerCase();
+
+			if ( match[1].slice( 0, 3 ) === "nth" ) {
+				// nth-* requires argument
+				if ( !match[3] ) {
+					Sizzle.error( match[0] );
+				}
+
+				// numeric x and y parameters for Expr.filter.CHILD
+				// remember that false/true cast respectively to 0/1
+				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+
+			// other types prohibit arguments
+			} else if ( match[3] ) {
+				Sizzle.error( match[0] );
+			}
+
+			return match;
+		},
+
+		"PSEUDO": function( match ) {
+			var excess,
+				unquoted = !match[5] && match[2];
+
+			if ( matchExpr["CHILD"].test( match[0] ) ) {
+				return null;
+			}
+
+			// Accept quoted arguments as-is
+			if ( match[4] ) {
+				match[2] = match[4];
+
+			// Strip excess characters from unquoted arguments
+			} else if ( unquoted && rpseudo.test( unquoted ) &&
+				// Get excess from tokenize (recursively)
+				(excess = tokenize( unquoted, true )) &&
+				// advance to the next closing parenthesis
+				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+
+				// excess is a negative index
+				match[0] = match[0].slice( 0, excess );
+				match[2] = unquoted.slice( 0, excess );
+			}
+
+			// Return only captures needed by the pseudo filter method (type and argument)
+			return match.slice( 0, 3 );
+		}
+	},
+
+	filter: {
+
+		"TAG": function( nodeName ) {
+			if ( nodeName === "*" ) {
+				return function() { return true; };
+			}
+
+			nodeName = nodeName.replace( runescape, funescape ).toLowerCase();
+			return function( elem ) {
+				return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+			};
+		},
+
+		"CLASS": function( className ) {
+			var pattern = classCache[ className + " " ];
+
+			return pattern ||
+				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+				classCache( className, function( elem ) {
+					return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" );
+				});
+		},
+
+		"ATTR": function( name, operator, check ) {
+			return function( elem ) {
+				var result = Sizzle.attr( elem, name );
+
+				if ( result == null ) {
+					return operator === "!=";
+				}
+				if ( !operator ) {
+					return true;
+				}
+
+				result += "";
+
+				return operator === "=" ? result === check :
+					operator === "!=" ? result !== check :
+					operator === "^=" ? check && result.indexOf( check ) === 0 :
+					operator === "*=" ? check && result.indexOf( check ) > -1 :
+					operator === "$=" ? check && result.slice( -check.length ) === check :
+					operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
+					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+					false;
+			};
+		},
+
+		"CHILD": function( type, what, argument, first, last ) {
+			var simple = type.slice( 0, 3 ) !== "nth",
+				forward = type.slice( -4 ) !== "last",
+				ofType = what === "of-type";
+
+			return first === 1 && last === 0 ?
+
+				// Shortcut for :nth-*(n)
+				function( elem ) {
+					return !!elem.parentNode;
+				} :
+
+				function( elem, context, xml ) {
+					var cache, outerCache, node, diff, nodeIndex, start,
+						dir = simple !== forward ? "nextSibling" : "previousSibling",
+						parent = elem.parentNode,
+						name = ofType && elem.nodeName.toLowerCase(),
+						useCache = !xml && !ofType;
+
+					if ( parent ) {
+
+						// :(first|last|only)-(child|of-type)
+						if ( simple ) {
+							while ( dir ) {
+								node = elem;
+								while ( (node = node[ dir ]) ) {
+									if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
+										return false;
+									}
+								}
+								// Reverse direction for :only-* (if we haven't yet done so)
+								start = dir = type === "only" && !start && "nextSibling";
+							}
+							return true;
+						}
+
+						start = [ forward ? parent.firstChild : parent.lastChild ];
+
+						// non-xml :nth-child(...) stores cache data on `parent`
+						if ( forward && useCache ) {
+							// Seek `elem` from a previously-cached index
+							outerCache = parent[ expando ] || (parent[ expando ] = {});
+							cache = outerCache[ type ] || [];
+							nodeIndex = cache[0] === dirruns && cache[1];
+							diff = cache[0] === dirruns && cache[2];
+							node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+							while ( (node = ++nodeIndex && node && node[ dir ] ||
+
+								// Fallback to seeking `elem` from the start
+								(diff = nodeIndex = 0) || start.pop()) ) {
+
+								// When found, cache indexes on `parent` and break
+								if ( node.nodeType === 1 && ++diff && node === elem ) {
+									outerCache[ type ] = [ dirruns, nodeIndex, diff ];
+									break;
+								}
+							}
+
+						// Use previously-cached element index if available
+						} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
+							diff = cache[1];
+
+						// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
+						} else {
+							// Use the same loop as above to seek `elem` from the start
+							while ( (node = ++nodeIndex && node && node[ dir ] ||
+								(diff = nodeIndex = 0) || start.pop()) ) {
+
+								if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
+									// Cache the index of each encountered element
+									if ( useCache ) {
+										(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
+									}
+
+									if ( node === elem ) {
+										break;
+									}
+								}
+							}
+						}
+
+						// Incorporate the offset, then check against cycle size
+						diff -= last;
+						return diff === first || ( diff % first === 0 && diff / first >= 0 );
+					}
+				};
+		},
+
+		"PSEUDO": function( pseudo, argument ) {
+			// pseudo-class names are case-insensitive
+			// http://www.w3.org/TR/selectors/#pseudo-classes
+			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+			// Remember that setFilters inherits from pseudos
+			var args,
+				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+					Sizzle.error( "unsupported pseudo: " + pseudo );
+
+			// The user may use createPseudo to indicate that
+			// arguments are needed to create the filter function
+			// just as Sizzle does
+			if ( fn[ expando ] ) {
+				return fn( argument );
+			}
+
+			// But maintain support for old signatures
+			if ( fn.length > 1 ) {
+				args = [ pseudo, pseudo, "", argument ];
+				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+					markFunction(function( seed, matches ) {
+						var idx,
+							matched = fn( seed, argument ),
+							i = matched.length;
+						while ( i-- ) {
+							idx = indexOf.call( seed, matched[i] );
+							seed[ idx ] = !( matches[ idx ] = matched[i] );
+						}
+					}) :
+					function( elem ) {
+						return fn( elem, 0, args );
+					};
+			}
+
+			return fn;
+		}
+	},
+
+	pseudos: {
+		// Potentially complex pseudos
+		"not": markFunction(function( selector ) {
+			// Trim the selector passed to compile
+			// to avoid treating leading and trailing
+			// spaces as combinators
+			var input = [],
+				results = [],
+				matcher = compile( selector.replace( rtrim, "$1" ) );
+
+			return matcher[ expando ] ?
+				markFunction(function( seed, matches, context, xml ) {
+					var elem,
+						unmatched = matcher( seed, null, xml, [] ),
+						i = seed.length;
+
+					// Match elements unmatched by `matcher`
+					while ( i-- ) {
+						if ( (elem = unmatched[i]) ) {
+							seed[i] = !(matches[i] = elem);
+						}
+					}
+				}) :
+				function( elem, context, xml ) {
+					input[0] = elem;
+					matcher( input, null, xml, results );
+					return !results.pop();
+				};
+		}),
+
+		"has": markFunction(function( selector ) {
+			return function( elem ) {
+				return Sizzle( selector, elem ).length > 0;
+			};
+		}),
+
+		"contains": markFunction(function( text ) {
+			return function( elem ) {
+				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+			};
+		}),
+
+		// "Whether an element is represented by a :lang() selector
+		// is based solely on the element's language value
+		// being equal to the identifier C,
+		// or beginning with the identifier C immediately followed by "-".
+		// The matching of C against the element's language value is performed case-insensitively.
+		// The identifier C does not have to be a valid language name."
+		// http://www.w3.org/TR/selectors/#lang-pseudo
+		"lang": markFunction( function( lang ) {
+			// lang value must be a valid identifider
+			if ( !ridentifier.test(lang || "") ) {
+				Sizzle.error( "unsupported lang: " + lang );
+			}
+			lang = lang.replace( runescape, funescape ).toLowerCase();
+			return function( elem ) {
+				var elemLang;
+				do {
+					if ( (elemLang = documentIsXML ?
+						elem.getAttribute("xml:lang") || elem.getAttribute("lang") :
+						elem.lang) ) {
+
+						elemLang = elemLang.toLowerCase();
+						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+					}
+				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+				return false;
+			};
+		}),
+
+		// Miscellaneous
+		"target": function( elem ) {
+			var hash = window.location && window.location.hash;
+			return hash && hash.slice( 1 ) === elem.id;
+		},
+
+		"root": function( elem ) {
+			return elem === docElem;
+		},
+
+		"focus": function( elem ) {
+			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+		},
+
+		// Boolean properties
+		"enabled": function( elem ) {
+			return elem.disabled === false;
+		},
+
+		"disabled": function( elem ) {
+			return elem.disabled === true;
+		},
+
+		"checked": function( elem ) {
+			// In CSS3, :checked should return both checked and selected elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			var nodeName = elem.nodeName.toLowerCase();
+			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+		},
+
+		"selected": function( elem ) {
+			// Accessing this property makes selected-by-default
+			// options in Safari work properly
+			if ( elem.parentNode ) {
+				elem.parentNode.selectedIndex;
+			}
+
+			return elem.selected === true;
+		},
+
+		// Contents
+		"empty": function( elem ) {
+			// http://www.w3.org/TR/selectors/#empty-pseudo
+			// :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),
+			//   not comment, processing instructions, or others
+			// Thanks to Diego Perini for the nodeName shortcut
+			//   Greater than "@" means alpha characters (specifically not starting with "#" or "?")
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) {
+					return false;
+				}
+			}
+			return true;
+		},
+
+		"parent": function( elem ) {
+			return !Expr.pseudos["empty"]( elem );
+		},
+
+		// Element/input types
+		"header": function( elem ) {
+			return rheader.test( elem.nodeName );
+		},
+
+		"input": function( elem ) {
+			return rinputs.test( elem.nodeName );
+		},
+
+		"button": function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return name === "input" && elem.type === "button" || name === "button";
+		},
+
+		"text": function( elem ) {
+			var attr;
+			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
+			// use getAttribute instead to test this case
+			return elem.nodeName.toLowerCase() === "input" &&
+				elem.type === "text" &&
+				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type );
+		},
+
+		// Position-in-collection
+		"first": createPositionalPseudo(function() {
+			return [ 0 ];
+		}),
+
+		"last": createPositionalPseudo(function( matchIndexes, length ) {
+			return [ length - 1 ];
+		}),
+
+		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			return [ argument < 0 ? argument + length : argument ];
+		}),
+
+		"even": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 0;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"odd": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 1;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; --i >= 0; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; ++i < length; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		})
+	}
+};
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+	Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+	Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+function tokenize( selector, parseOnly ) {
+	var matched, match, tokens, type,
+		soFar, groups, preFilters,
+		cached = tokenCache[ selector + " " ];
+
+	if ( cached ) {
+		return parseOnly ? 0 : cached.slice( 0 );
+	}
+
+	soFar = selector;
+	groups = [];
+	preFilters = Expr.preFilter;
+
+	while ( soFar ) {
+
+		// Comma and first run
+		if ( !matched || (match = rcomma.exec( soFar )) ) {
+			if ( match ) {
+				// Don't consume trailing commas as valid
+				soFar = soFar.slice( match[0].length ) || soFar;
+			}
+			groups.push( tokens = [] );
+		}
+
+		matched = false;
+
+		// Combinators
+		if ( (match = rcombinators.exec( soFar )) ) {
+			matched = match.shift();
+			tokens.push( {
+				value: matched,
+				// Cast descendant combinators to space
+				type: match[0].replace( rtrim, " " )
+			} );
+			soFar = soFar.slice( matched.length );
+		}
+
+		// Filters
+		for ( type in Expr.filter ) {
+			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+				(match = preFilters[ type ]( match ))) ) {
+				matched = match.shift();
+				tokens.push( {
+					value: matched,
+					type: type,
+					matches: match
+				} );
+				soFar = soFar.slice( matched.length );
+			}
+		}
+
+		if ( !matched ) {
+			break;
+		}
+	}
+
+	// Return the length of the invalid excess
+	// if we're just parsing
+	// Otherwise, throw an error or return tokens
+	return parseOnly ?
+		soFar.length :
+		soFar ?
+			Sizzle.error( selector ) :
+			// Cache the tokens
+			tokenCache( selector, groups ).slice( 0 );
+}
+
+function toSelector( tokens ) {
+	var i = 0,
+		len = tokens.length,
+		selector = "";
+	for ( ; i < len; i++ ) {
+		selector += tokens[i].value;
+	}
+	return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+	var dir = combinator.dir,
+		checkNonElements = base && dir === "parentNode",
+		doneName = done++;
+
+	return combinator.first ?
+		// Check against closest ancestor/preceding element
+		function( elem, context, xml ) {
+			while ( (elem = elem[ dir ]) ) {
+				if ( elem.nodeType === 1 || checkNonElements ) {
+					return matcher( elem, context, xml );
+				}
+			}
+		} :
+
+		// Check against all ancestor/preceding elements
+		function( elem, context, xml ) {
+			var data, cache, outerCache,
+				dirkey = dirruns + " " + doneName;
+
+			// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
+			if ( xml ) {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						if ( matcher( elem, context, xml ) ) {
+							return true;
+						}
+					}
+				}
+			} else {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						outerCache = elem[ expando ] || (elem[ expando ] = {});
+						if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {
+							if ( (data = cache[1]) === true || data === cachedruns ) {
+								return data === true;
+							}
+						} else {
+							cache = outerCache[ dir ] = [ dirkey ];
+							cache[1] = matcher( elem, context, xml ) || cachedruns;
+							if ( cache[1] === true ) {
+								return true;
+							}
+						}
+					}
+				}
+			}
+		};
+}
+
+function elementMatcher( matchers ) {
+	return matchers.length > 1 ?
+		function( elem, context, xml ) {
+			var i = matchers.length;
+			while ( i-- ) {
+				if ( !matchers[i]( elem, context, xml ) ) {
+					return false;
+				}
+			}
+			return true;
+		} :
+		matchers[0];
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+	var elem,
+		newUnmatched = [],
+		i = 0,
+		len = unmatched.length,
+		mapped = map != null;
+
+	for ( ; i < len; i++ ) {
+		if ( (elem = unmatched[i]) ) {
+			if ( !filter || filter( elem, context, xml ) ) {
+				newUnmatched.push( elem );
+				if ( mapped ) {
+					map.push( i );
+				}
+			}
+		}
+	}
+
+	return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+	if ( postFilter && !postFilter[ expando ] ) {
+		postFilter = setMatcher( postFilter );
+	}
+	if ( postFinder && !postFinder[ expando ] ) {
+		postFinder = setMatcher( postFinder, postSelector );
+	}
+	return markFunction(function( seed, results, context, xml ) {
+		var temp, i, elem,
+			preMap = [],
+			postMap = [],
+			preexisting = results.length,
+
+			// Get initial elements from seed or context
+			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+
+			// Prefilter to get matcher input, preserving a map for seed-results synchronization
+			matcherIn = preFilter && ( seed || !selector ) ?
+				condense( elems, preMap, preFilter, context, xml ) :
+				elems,
+
+			matcherOut = matcher ?
+				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+					// ...intermediate processing is necessary
+					[] :
+
+					// ...otherwise use results directly
+					results :
+				matcherIn;
+
+		// Find primary matches
+		if ( matcher ) {
+			matcher( matcherIn, matcherOut, context, xml );
+		}
+
+		// Apply postFilter
+		if ( postFilter ) {
+			temp = condense( matcherOut, postMap );
+			postFilter( temp, [], context, xml );
+
+			// Un-match failing elements by moving them back to matcherIn
+			i = temp.length;
+			while ( i-- ) {
+				if ( (elem = temp[i]) ) {
+					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+				}
+			}
+		}
+
+		if ( seed ) {
+			if ( postFinder || preFilter ) {
+				if ( postFinder ) {
+					// Get the final matcherOut by condensing this intermediate into postFinder contexts
+					temp = [];
+					i = matcherOut.length;
+					while ( i-- ) {
+						if ( (elem = matcherOut[i]) ) {
+							// Restore matcherIn since elem is not yet a final match
+							temp.push( (matcherIn[i] = elem) );
+						}
+					}
+					postFinder( null, (matcherOut = []), temp, xml );
+				}
+
+				// Move matched elements from seed to results to keep them synchronized
+				i = matcherOut.length;
+				while ( i-- ) {
+					if ( (elem = matcherOut[i]) &&
+						(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
+
+						seed[temp] = !(results[temp] = elem);
+					}
+				}
+			}
+
+		// Add elements to results, through postFinder if defined
+		} else {
+			matcherOut = condense(
+				matcherOut === results ?
+					matcherOut.splice( preexisting, matcherOut.length ) :
+					matcherOut
+			);
+			if ( postFinder ) {
+				postFinder( null, results, matcherOut, xml );
+			} else {
+				push.apply( results, matcherOut );
+			}
+		}
+	});
+}
+
+function matcherFromTokens( tokens ) {
+	var checkContext, matcher, j,
+		len = tokens.length,
+		leadingRelative = Expr.relative[ tokens[0].type ],
+		implicitRelative = leadingRelative || Expr.relative[" "],
+		i = leadingRelative ? 1 : 0,
+
+		// The foundational matcher ensures that elements are reachable from top-level context(s)
+		matchContext = addCombinator( function( elem ) {
+			return elem === checkContext;
+		}, implicitRelative, true ),
+		matchAnyContext = addCombinator( function( elem ) {
+			return indexOf.call( checkContext, elem ) > -1;
+		}, implicitRelative, true ),
+		matchers = [ function( elem, context, xml ) {
+			return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+				(checkContext = context).nodeType ?
+					matchContext( elem, context, xml ) :
+					matchAnyContext( elem, context, xml ) );
+		} ];
+
+	for ( ; i < len; i++ ) {
+		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+		} else {
+			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+			// Return special upon seeing a positional matcher
+			if ( matcher[ expando ] ) {
+				// Find the next relative operator (if any) for proper handling
+				j = ++i;
+				for ( ; j < len; j++ ) {
+					if ( Expr.relative[ tokens[j].type ] ) {
+						break;
+					}
+				}
+				return setMatcher(
+					i > 1 && elementMatcher( matchers ),
+					i > 1 && toSelector( tokens.slice( 0, i - 1 ) ).replace( rtrim, "$1" ),
+					matcher,
+					i < j && matcherFromTokens( tokens.slice( i, j ) ),
+					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+					j < len && toSelector( tokens )
+				);
+			}
+			matchers.push( matcher );
+		}
+	}
+
+	return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+	// A counter to specify which element is currently being matched
+	var matcherCachedRuns = 0,
+		bySet = setMatchers.length > 0,
+		byElement = elementMatchers.length > 0,
+		superMatcher = function( seed, context, xml, results, expandContext ) {
+			var elem, j, matcher,
+				setMatched = [],
+				matchedCount = 0,
+				i = "0",
+				unmatched = seed && [],
+				outermost = expandContext != null,
+				contextBackup = outermostContext,
+				// We must always have either seed elements or context
+				elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),
+				// Use integer dirruns iff this is the outermost matcher
+				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);
+
+			if ( outermost ) {
+				outermostContext = context !== document && context;
+				cachedruns = matcherCachedRuns;
+			}
+
+			// Add elements passing elementMatchers directly to results
+			// Keep `i` a string if there are no elements so `matchedCount` will be "00" below
+			for ( ; (elem = elems[i]) != null; i++ ) {
+				if ( byElement && elem ) {
+					j = 0;
+					while ( (matcher = elementMatchers[j++]) ) {
+						if ( matcher( elem, context, xml ) ) {
+							results.push( elem );
+							break;
+						}
+					}
+					if ( outermost ) {
+						dirruns = dirrunsUnique;
+						cachedruns = ++matcherCachedRuns;
+					}
+				}
+
+				// Track unmatched elements for set filters
+				if ( bySet ) {
+					// They will have gone through all possible matchers
+					if ( (elem = !matcher && elem) ) {
+						matchedCount--;
+					}
+
+					// Lengthen the array for every element, matched or not
+					if ( seed ) {
+						unmatched.push( elem );
+					}
+				}
+			}
+
+			// Apply set filters to unmatched elements
+			matchedCount += i;
+			if ( bySet && i !== matchedCount ) {
+				j = 0;
+				while ( (matcher = setMatchers[j++]) ) {
+					matcher( unmatched, setMatched, context, xml );
+				}
+
+				if ( seed ) {
+					// Reintegrate element matches to eliminate the need for sorting
+					if ( matchedCount > 0 ) {
+						while ( i-- ) {
+							if ( !(unmatched[i] || setMatched[i]) ) {
+								setMatched[i] = pop.call( results );
+							}
+						}
+					}
+
+					// Discard index placeholder values to get only actual matches
+					setMatched = condense( setMatched );
+				}
+
+				// Add matches to results
+				push.apply( results, setMatched );
+
+				// Seedless set matches succeeding multiple successful matchers stipulate sorting
+				if ( outermost && !seed && setMatched.length > 0 &&
+					( matchedCount + setMatchers.length ) > 1 ) {
+
+					Sizzle.uniqueSort( results );
+				}
+			}
+
+			// Override manipulation of globals by nested matchers
+			if ( outermost ) {
+				dirruns = dirrunsUnique;
+				outermostContext = contextBackup;
+			}
+
+			return unmatched;
+		};
+
+	return bySet ?
+		markFunction( superMatcher ) :
+		superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
+	var i,
+		setMatchers = [],
+		elementMatchers = [],
+		cached = compilerCache[ selector + " " ];
+
+	if ( !cached ) {
+		// Generate a function of recursive functions that can be used to check each element
+		if ( !group ) {
+			group = tokenize( selector );
+		}
+		i = group.length;
+		while ( i-- ) {
+			cached = matcherFromTokens( group[i] );
+			if ( cached[ expando ] ) {
+				setMatchers.push( cached );
+			} else {
+				elementMatchers.push( cached );
+			}
+		}
+
+		// Cache the compiled function
+		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+	}
+	return cached;
+};
+
+function multipleContexts( selector, contexts, results ) {
+	var i = 0,
+		len = contexts.length;
+	for ( ; i < len; i++ ) {
+		Sizzle( selector, contexts[i], results );
+	}
+	return results;
+}
+
+function select( selector, context, results, seed ) {
+	var i, tokens, token, type, find,
+		match = tokenize( selector );
+
+	if ( !seed ) {
+		// Try to minimize operations if there is only one group
+		if ( match.length === 1 ) {
+
+			// Take a shortcut and set the context if the root selector is an ID
+			tokens = match[0] = match[0].slice( 0 );
+			if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+					context.nodeType === 9 && !documentIsXML &&
+					Expr.relative[ tokens[1].type ] ) {
+
+				context = Expr.find["ID"]( token.matches[0].replace( runescape, funescape ), context )[0];
+				if ( !context ) {
+					return results;
+				}
+
+				selector = selector.slice( tokens.shift().value.length );
+			}
+
+			// Fetch a seed set for right-to-left matching
+			i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
+			while ( i-- ) {
+				token = tokens[i];
+
+				// Abort if we hit a combinator
+				if ( Expr.relative[ (type = token.type) ] ) {
+					break;
+				}
+				if ( (find = Expr.find[ type ]) ) {
+					// Search, expanding context for leading sibling combinators
+					if ( (seed = find(
+						token.matches[0].replace( runescape, funescape ),
+						rsibling.test( tokens[0].type ) && context.parentNode || context
+					)) ) {
+
+						// If seed is empty or no tokens remain, we can return early
+						tokens.splice( i, 1 );
+						selector = seed.length && toSelector( tokens );
+						if ( !selector ) {
+							push.apply( results, slice.call( seed, 0 ) );
+							return results;
+						}
+
+						break;
+					}
+				}
+			}
+		}
+	}
+
+	// Compile and execute a filtering function
+	// Provide `match` to avoid retokenization if we modified the selector above
+	compile( selector, match )(
+		seed,
+		context,
+		documentIsXML,
+		results,
+		rsibling.test( selector )
+	);
+	return results;
+}
+
+// Deprecated
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Easy API for creating new setFilters
+function setFilters() {}
+Expr.filters = setFilters.prototype = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+// Initialize with the default document
+setDocument();
+
+// Override sizzle attribute retrieval
+Sizzle.attr = jQuery.attr;
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.pseudos;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+})( window );
+var runtil = /Until$/,
+	rparentsprev = /^(?:parents|prev(?:Until|All))/,
+	isSimple = /^.[^:#\[\.,]*$/,
+	rneedsContext = jQuery.expr.match.needsContext,
+	// methods guaranteed to produce a unique set when starting from a unique set
+	guaranteedUnique = {
+		children: true,
+		contents: true,
+		next: true,
+		prev: true
+	};
+
+jQuery.fn.extend({
+	find: function( selector ) {
+		var i, ret, self,
+			len = this.length;
+
+		if ( typeof selector !== "string" ) {
+			self = this;
+			return this.pushStack( jQuery( selector ).filter(function() {
+				for ( i = 0; i < len; i++ ) {
+					if ( jQuery.contains( self[ i ], this ) ) {
+						return true;
+					}
+				}
+			}) );
+		}
+
+		ret = [];
+		for ( i = 0; i < len; i++ ) {
+			jQuery.find( selector, this[ i ], ret );
+		}
+
+		// Needed because $( selector, context ) becomes $( context ).find( selector )
+		ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
+		ret.selector = ( this.selector ? this.selector + " " : "" ) + selector;
+		return ret;
+	},
+
+	has: function( target ) {
+		var i,
+			targets = jQuery( target, this ),
+			len = targets.length;
+
+		return this.filter(function() {
+			for ( i = 0; i < len; i++ ) {
+				if ( jQuery.contains( this, targets[i] ) ) {
+					return true;
+				}
+			}
+		});
+	},
+
+	not: function( selector ) {
+		return this.pushStack( winnow(this, selector, false) );
+	},
+
+	filter: function( selector ) {
+		return this.pushStack( winnow(this, selector, true) );
+	},
+
+	is: function( selector ) {
+		return !!selector && (
+			typeof selector === "string" ?
+				// If this is a positional/relative selector, check membership in the returned set
+				// so $("p:first").is("p:last") won't return true for a doc with two "p".
+				rneedsContext.test( selector ) ?
+					jQuery( selector, this.context ).index( this[0] ) >= 0 :
+					jQuery.filter( selector, this ).length > 0 :
+				this.filter( selector ).length > 0 );
+	},
+
+	closest: function( selectors, context ) {
+		var cur,
+			i = 0,
+			l = this.length,
+			ret = [],
+			pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
+				jQuery( selectors, context || this.context ) :
+				0;
+
+		for ( ; i < l; i++ ) {
+			cur = this[i];
+
+			while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) {
+				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
+					ret.push( cur );
+					break;
+				}
+				cur = cur.parentNode;
+			}
+		}
+
+		return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret );
+	},
+
+	// Determine the position of an element within
+	// the matched set of elements
+	index: function( elem ) {
+
+		// No argument, return index in parent
+		if ( !elem ) {
+			return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
+		}
+
+		// index in selector
+		if ( typeof elem === "string" ) {
+			return jQuery.inArray( this[0], jQuery( elem ) );
+		}
+
+		// Locate the position of the desired element
+		return jQuery.inArray(
+			// If it receives a jQuery object, the first element is used
+			elem.jquery ? elem[0] : elem, this );
+	},
+
+	add: function( selector, context ) {
+		var set = typeof selector === "string" ?
+				jQuery( selector, context ) :
+				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
+			all = jQuery.merge( this.get(), set );
+
+		return this.pushStack( jQuery.unique(all) );
+	},
+
+	addBack: function( selector ) {
+		return this.add( selector == null ?
+			this.prevObject : this.prevObject.filter(selector)
+		);
+	}
+});
+
+jQuery.fn.andSelf = jQuery.fn.addBack;
+
+function sibling( cur, dir ) {
+	do {
+		cur = cur[ dir ];
+	} while ( cur && cur.nodeType !== 1 );
+
+	return cur;
+}
+
+jQuery.each({
+	parent: function( elem ) {
+		var parent = elem.parentNode;
+		return parent && parent.nodeType !== 11 ? parent : null;
+	},
+	parents: function( elem ) {
+		return jQuery.dir( elem, "parentNode" );
+	},
+	parentsUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "parentNode", until );
+	},
+	next: function( elem ) {
+		return sibling( elem, "nextSibling" );
+	},
+	prev: function( elem ) {
+		return sibling( elem, "previousSibling" );
+	},
+	nextAll: function( elem ) {
+		return jQuery.dir( elem, "nextSibling" );
+	},
+	prevAll: function( elem ) {
+		return jQuery.dir( elem, "previousSibling" );
+	},
+	nextUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "nextSibling", until );
+	},
+	prevUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "previousSibling", until );
+	},
+	siblings: function( elem ) {
+		return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
+	},
+	children: function( elem ) {
+		return jQuery.sibling( elem.firstChild );
+	},
+	contents: function( elem ) {
+		return jQuery.nodeName( elem, "iframe" ) ?
+			elem.contentDocument || elem.contentWindow.document :
+			jQuery.merge( [], elem.childNodes );
+	}
+}, function( name, fn ) {
+	jQuery.fn[ name ] = function( until, selector ) {
+		var ret = jQuery.map( this, fn, until );
+
+		if ( !runtil.test( name ) ) {
+			selector = until;
+		}
+
+		if ( selector && typeof selector === "string" ) {
+			ret = jQuery.filter( selector, ret );
+		}
+
+		ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
+
+		if ( this.length > 1 && rparentsprev.test( name ) ) {
+			ret = ret.reverse();
+		}
+
+		return this.pushStack( ret );
+	};
+});
+
+jQuery.extend({
+	filter: function( expr, elems, not ) {
+		if ( not ) {
+			expr = ":not(" + expr + ")";
+		}
+
+		return elems.length === 1 ?
+			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
+			jQuery.find.matches(expr, elems);
+	},
+
+	dir: function( elem, dir, until ) {
+		var matched = [],
+			cur = elem[ dir ];
+
+		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+			if ( cur.nodeType === 1 ) {
+				matched.push( cur );
+			}
+			cur = cur[dir];
+		}
+		return matched;
+	},
+
+	sibling: function( n, elem ) {
+		var r = [];
+
+		for ( ; n; n = n.nextSibling ) {
+			if ( n.nodeType === 1 && n !== elem ) {
+				r.push( n );
+			}
+		}
+
+		return r;
+	}
+});
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, keep ) {
+
+	// Can't pass null or undefined to indexOf in Firefox 4
+	// Set to 0 to skip string check
+	qualifier = qualifier || 0;
+
+	if ( jQuery.isFunction( qualifier ) ) {
+		return jQuery.grep(elements, function( elem, i ) {
+			var retVal = !!qualifier.call( elem, i, elem );
+			return retVal === keep;
+		});
+
+	} else if ( qualifier.nodeType ) {
+		return jQuery.grep(elements, function( elem ) {
+			return ( elem === qualifier ) === keep;
+		});
+
+	} else if ( typeof qualifier === "string" ) {
+		var filtered = jQuery.grep(elements, function( elem ) {
+			return elem.nodeType === 1;
+		});
+
+		if ( isSimple.test( qualifier ) ) {
+			return jQuery.filter(qualifier, filtered, !keep);
+		} else {
+			qualifier = jQuery.filter( qualifier, filtered );
+		}
+	}
+
+	return jQuery.grep(elements, function( elem ) {
+		return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
+	});
+}
+function createSafeFragment( document ) {
+	var list = nodeNames.split( "|" ),
+		safeFrag = document.createDocumentFragment();
+
+	if ( safeFrag.createElement ) {
+		while ( list.length ) {
+			safeFrag.createElement(
+				list.pop()
+			);
+		}
+	}
+	return safeFrag;
+}
+
+var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
+		"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
+	rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
+	rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
+	rleadingWhitespace = /^\s+/,
+	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
+	rtagName = /<([\w:]+)/,
+	rtbody = /<tbody/i,
+	rhtml = /<|&#?\w+;/,
+	rnoInnerhtml = /<(?:script|style|link)/i,
+	manipulation_rcheckableType = /^(?:checkbox|radio)$/i,
+	// checked="checked" or checked
+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+	rscriptType = /^$|\/(?:java|ecma)script/i,
+	rscriptTypeMasked = /^true\/(.*)/,
+	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
+
+	// We have to close these tags to support XHTML (#13200)
+	wrapMap = {
+		option: [ 1, "<select multiple='multiple'>", "</select>" ],
+		legend: [ 1, "<fieldset>", "</fieldset>" ],
+		area: [ 1, "<map>", "</map>" ],
+		param: [ 1, "<object>", "</object>" ],
+		thead: [ 1, "<table>", "</table>" ],
+		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
+		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+
+		// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
+		// unless wrapped in a div with non-breaking characters in front of it.
+		_default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>"  ]
+	},
+	safeFragment = createSafeFragment( document ),
+	fragmentDiv = safeFragment.appendChild( document.createElement("div") );
+
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+jQuery.fn.extend({
+	text: function( value ) {
+		return jQuery.access( this, function( value ) {
+			return value === undefined ?
+				jQuery.text( this ) :
+				this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
+		}, null, value, arguments.length );
+	},
+
+	wrapAll: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function(i) {
+				jQuery(this).wrapAll( html.call(this, i) );
+			});
+		}
+
+		if ( this[0] ) {
+			// The elements to wrap the target around
+			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+
+			if ( this[0].parentNode ) {
+				wrap.insertBefore( this[0] );
+			}
+
+			wrap.map(function() {
+				var elem = this;
+
+				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+					elem = elem.firstChild;
+				}
+
+				return elem;
+			}).append( this );
+		}
+
+		return this;
+	},
+
+	wrapInner: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function(i) {
+				jQuery(this).wrapInner( html.call(this, i) );
+			});
+		}
+
+		return this.each(function() {
+			var self = jQuery( this ),
+				contents = self.contents();
+
+			if ( contents.length ) {
+				contents.wrapAll( html );
+
+			} else {
+				self.append( html );
+			}
+		});
+	},
+
+	wrap: function( html ) {
+		var isFunction = jQuery.isFunction( html );
+
+		return this.each(function(i) {
+			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
+		});
+	},
+
+	unwrap: function() {
+		return this.parent().each(function() {
+			if ( !jQuery.nodeName( this, "body" ) ) {
+				jQuery( this ).replaceWith( this.childNodes );
+			}
+		}).end();
+	},
+
+	append: function() {
+		return this.domManip(arguments, true, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				this.appendChild( elem );
+			}
+		});
+	},
+
+	prepend: function() {
+		return this.domManip(arguments, true, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				this.insertBefore( elem, this.firstChild );
+			}
+		});
+	},
+
+	before: function() {
+		return this.domManip( arguments, false, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this );
+			}
+		});
+	},
+
+	after: function() {
+		return this.domManip( arguments, false, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this.nextSibling );
+			}
+		});
+	},
+
+	// keepData is for internal use only--do not document
+	remove: function( selector, keepData ) {
+		var elem,
+			i = 0;
+
+		for ( ; (elem = this[i]) != null; i++ ) {
+			if ( !selector || jQuery.filter( selector, [ elem ] ).length > 0 ) {
+				if ( !keepData && elem.nodeType === 1 ) {
+					jQuery.cleanData( getAll( elem ) );
+				}
+
+				if ( elem.parentNode ) {
+					if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
+						setGlobalEval( getAll( elem, "script" ) );
+					}
+					elem.parentNode.removeChild( elem );
+				}
+			}
+		}
+
+		return this;
+	},
+
+	empty: function() {
+		var elem,
+			i = 0;
+
+		for ( ; (elem = this[i]) != null; i++ ) {
+			// Remove element nodes and prevent memory leaks
+			if ( elem.nodeType === 1 ) {
+				jQuery.cleanData( getAll( elem, false ) );
+			}
+
+			// Remove any remaining nodes
+			while ( elem.firstChild ) {
+				elem.removeChild( elem.firstChild );
+			}
+
+			// If this is a select, ensure that it displays empty (#12336)
+			// Support: IE<9
+			if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
+				elem.options.length = 0;
+			}
+		}
+
+		return this;
+	},
+
+	clone: function( dataAndEvents, deepDataAndEvents ) {
+		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+		return this.map( function () {
+			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+		});
+	},
+
+	html: function( value ) {
+		return jQuery.access( this, function( value ) {
+			var elem = this[0] || {},
+				i = 0,
+				l = this.length;
+
+			if ( value === undefined ) {
+				return elem.nodeType === 1 ?
+					elem.innerHTML.replace( rinlinejQuery, "" ) :
+					undefined;
+			}
+
+			// See if we can take a shortcut and just use innerHTML
+			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+				( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&
+				( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
+				!wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
+
+				value = value.replace( rxhtmlTag, "<$1></$2>" );
+
+				try {
+					for (; i < l; i++ ) {
+						// Remove element nodes and prevent memory leaks
+						elem = this[i] || {};
+						if ( elem.nodeType === 1 ) {
+							jQuery.cleanData( getAll( elem, false ) );
+							elem.innerHTML = value;
+						}
+					}
+
+					elem = 0;
+
+				// If using innerHTML throws an exception, use the fallback method
+				} catch(e) {}
+			}
+
+			if ( elem ) {
+				this.empty().append( value );
+			}
+		}, null, value, arguments.length );
+	},
+
+	replaceWith: function( value ) {
+		var isFunc = jQuery.isFunction( value );
+
+		// Make sure that the elements are removed from the DOM before they are inserted
+		// this can help fix replacing a parent with child elements
+		if ( !isFunc && typeof value !== "string" ) {
+			value = jQuery( value ).not( this ).detach();
+		}
+
+		return this.domManip( [ value ], true, function( elem ) {
+			var next = this.nextSibling,
+				parent = this.parentNode;
+
+			if ( parent ) {
+				jQuery( this ).remove();
+				parent.insertBefore( elem, next );
+			}
+		});
+	},
+
+	detach: function( selector ) {
+		return this.remove( selector, true );
+	},
+
+	domManip: function( args, table, callback ) {
+
+		// Flatten any nested arrays
+		args = core_concat.apply( [], args );
+
+		var first, node, hasScripts,
+			scripts, doc, fragment,
+			i = 0,
+			l = this.length,
+			set = this,
+			iNoClone = l - 1,
+			value = args[0],
+			isFunction = jQuery.isFunction( value );
+
+		// We can't cloneNode fragments that contain checked, in WebKit
+		if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) {
+			return this.each(function( index ) {
+				var self = set.eq( index );
+				if ( isFunction ) {
+					args[0] = value.call( this, index, table ? self.html() : undefined );
+				}
+				self.domManip( args, table, callback );
+			});
+		}
+
+		if ( l ) {
+			fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
+			first = fragment.firstChild;
+
+			if ( fragment.childNodes.length === 1 ) {
+				fragment = first;
+			}
+
+			if ( first ) {
+				table = table && jQuery.nodeName( first, "tr" );
+				scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+				hasScripts = scripts.length;
+
+				// Use the original fragment for the last item instead of the first because it can end up
+				// being emptied incorrectly in certain situations (#8070).
+				for ( ; i < l; i++ ) {
+					node = fragment;
+
+					if ( i !== iNoClone ) {
+						node = jQuery.clone( node, true, true );
+
+						// Keep references to cloned scripts for later restoration
+						if ( hasScripts ) {
+							jQuery.merge( scripts, getAll( node, "script" ) );
+						}
+					}
+
+					callback.call(
+						table && jQuery.nodeName( this[i], "table" ) ?
+							findOrAppend( this[i], "tbody" ) :
+							this[i],
+						node,
+						i
+					);
+				}
+
+				if ( hasScripts ) {
+					doc = scripts[ scripts.length - 1 ].ownerDocument;
+
+					// Reenable scripts
+					jQuery.map( scripts, restoreScript );
+
+					// Evaluate executable scripts on first document insertion
+					for ( i = 0; i < hasScripts; i++ ) {
+						node = scripts[ i ];
+						if ( rscriptType.test( node.type || "" ) &&
+							!jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
+
+							if ( node.src ) {
+								// Hope ajax is available...
+								jQuery.ajax({
+									url: node.src,
+									type: "GET",
+									dataType: "script",
+									async: false,
+									global: false,
+									"throws": true
+								});
+							} else {
+								jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );
+							}
+						}
+					}
+				}
+
+				// Fix #11809: Avoid leaking memory
+				fragment = first = null;
+			}
+		}
+
+		return this;
+	}
+});
+
+function findOrAppend( elem, tag ) {
+	return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) );
+}
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+	var attr = elem.getAttributeNode("type");
+	elem.type = ( attr && attr.specified ) + "/" + elem.type;
+	return elem;
+}
+function restoreScript( elem ) {
+	var match = rscriptTypeMasked.exec( elem.type );
+	if ( match ) {
+		elem.type = match[1];
+	} else {
+		elem.removeAttribute("type");
+	}
+	return elem;
+}
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+	var elem,
+		i = 0;
+	for ( ; (elem = elems[i]) != null; i++ ) {
+		jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );
+	}
+}
+
+function cloneCopyEvent( src, dest ) {
+
+	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+		return;
+	}
+
+	var type, i, l,
+		oldData = jQuery._data( src ),
+		curData = jQuery._data( dest, oldData ),
+		events = oldData.events;
+
+	if ( events ) {
+		delete curData.handle;
+		curData.events = {};
+
+		for ( type in events ) {
+			for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+				jQuery.event.add( dest, type, events[ type ][ i ] );
+			}
+		}
+	}
+
+	// make the cloned public data object a copy from the original
+	if ( curData.data ) {
+		curData.data = jQuery.extend( {}, curData.data );
+	}
+}
+
+function fixCloneNodeIssues( src, dest ) {
+	var nodeName, e, data;
+
+	// We do not need to do anything for non-Elements
+	if ( dest.nodeType !== 1 ) {
+		return;
+	}
+
+	nodeName = dest.nodeName.toLowerCase();
+
+	// IE6-8 copies events bound via attachEvent when using cloneNode.
+	if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) {
+		data = jQuery._data( dest );
+
+		for ( e in data.events ) {
+			jQuery.removeEvent( dest, e, data.handle );
+		}
+
+		// Event data gets referenced instead of copied if the expando gets copied too
+		dest.removeAttribute( jQuery.expando );
+	}
+
+	// IE blanks contents when cloning scripts, and tries to evaluate newly-set text
+	if ( nodeName === "script" && dest.text !== src.text ) {
+		disableScript( dest ).text = src.text;
+		restoreScript( dest );
+
+	// IE6-10 improperly clones children of object elements using classid.
+	// IE10 throws NoModificationAllowedError if parent is null, #12132.
+	} else if ( nodeName === "object" ) {
+		if ( dest.parentNode ) {
+			dest.outerHTML = src.outerHTML;
+		}
+
+		// This path appears unavoidable for IE9. When cloning an object
+		// element in IE9, the outerHTML strategy above is not sufficient.
+		// If the src has innerHTML and the destination does not,
+		// copy the src.innerHTML into the dest.innerHTML. #10324
+		if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {
+			dest.innerHTML = src.innerHTML;
+		}
+
+	} else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) {
+		// IE6-8 fails to persist the checked state of a cloned checkbox
+		// or radio button. Worse, IE6-7 fail to give the cloned element
+		// a checked appearance if the defaultChecked value isn't also set
+
+		dest.defaultChecked = dest.checked = src.checked;
+
+		// IE6-7 get confused and end up setting the value of a cloned
+		// checkbox/radio button to an empty string instead of "on"
+		if ( dest.value !== src.value ) {
+			dest.value = src.value;
+		}
+
+	// IE6-8 fails to return the selected option to the default selected
+	// state when cloning options
+	} else if ( nodeName === "option" ) {
+		dest.defaultSelected = dest.selected = src.defaultSelected;
+
+	// IE6-8 fails to set the defaultValue to the correct value when
+	// cloning other types of input fields
+	} else if ( nodeName === "input" || nodeName === "textarea" ) {
+		dest.defaultValue = src.defaultValue;
+	}
+}
+
+jQuery.each({
+	appendTo: "append",
+	prependTo: "prepend",
+	insertBefore: "before",
+	insertAfter: "after",
+	replaceAll: "replaceWith"
+}, function( name, original ) {
+	jQuery.fn[ name ] = function( selector ) {
+		var elems,
+			i = 0,
+			ret = [],
+			insert = jQuery( selector ),
+			last = insert.length - 1;
+
+		for ( ; i <= last; i++ ) {
+			elems = i === last ? this : this.clone(true);
+			jQuery( insert[i] )[ original ]( elems );
+
+			// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
+			core_push.apply( ret, elems.get() );
+		}
+
+		return this.pushStack( ret );
+	};
+});
+
+function getAll( context, tag ) {
+	var elems, elem,
+		i = 0,
+		found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) :
+			typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) :
+			undefined;
+
+	if ( !found ) {
+		for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {
+			if ( !tag || jQuery.nodeName( elem, tag ) ) {
+				found.push( elem );
+			} else {
+				jQuery.merge( found, getAll( elem, tag ) );
+			}
+		}
+	}
+
+	return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
+		jQuery.merge( [ context ], found ) :
+		found;
+}
+
+// Used in buildFragment, fixes the defaultChecked property
+function fixDefaultChecked( elem ) {
+	if ( manipulation_rcheckableType.test( elem.type ) ) {
+		elem.defaultChecked = elem.checked;
+	}
+}
+
+jQuery.extend({
+	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+		var destElements, node, clone, i, srcElements,
+			inPage = jQuery.contains( elem.ownerDocument, elem );
+
+		if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
+			clone = elem.cloneNode( true );
+
+		// IE<=8 does not properly clone detached, unknown element nodes
+		} else {
+			fragmentDiv.innerHTML = elem.outerHTML;
+			fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
+		}
+
+		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
+				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
+
+			// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
+			destElements = getAll( clone );
+			srcElements = getAll( elem );
+
+			// Fix all IE cloning issues
+			for ( i = 0; (node = srcElements[i]) != null; ++i ) {
+				// Ensure that the destination node is not null; Fixes #9587
+				if ( destElements[i] ) {
+					fixCloneNodeIssues( node, destElements[i] );
+				}
+			}
+		}
+
+		// Copy the events from the original to the clone
+		if ( dataAndEvents ) {
+			if ( deepDataAndEvents ) {
+				srcElements = srcElements || getAll( elem );
+				destElements = destElements || getAll( clone );
+
+				for ( i = 0; (node = srcElements[i]) != null; i++ ) {
+					cloneCopyEvent( node, destElements[i] );
+				}
+			} else {
+				cloneCopyEvent( elem, clone );
+			}
+		}
+
+		// Preserve script evaluation history
+		destElements = getAll( clone, "script" );
+		if ( destElements.length > 0 ) {
+			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+		}
+
+		destElements = srcElements = node = null;
+
+		// Return the cloned set
+		return clone;
+	},
+
+	buildFragment: function( elems, context, scripts, selection ) {
+		var j, elem, contains,
+			tmp, tag, tbody, wrap,
+			l = elems.length,
+
+			// Ensure a safe fragment
+			safe = createSafeFragment( context ),
+
+			nodes = [],
+			i = 0;
+
+		for ( ; i < l; i++ ) {
+			elem = elems[ i ];
+
+			if ( elem || elem === 0 ) {
+
+				// Add nodes directly
+				if ( jQuery.type( elem ) === "object" ) {
+					jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+				// Convert non-html into a text node
+				} else if ( !rhtml.test( elem ) ) {
+					nodes.push( context.createTextNode( elem ) );
+
+				// Convert html into DOM nodes
+				} else {
+					tmp = tmp || safe.appendChild( context.createElement("div") );
+
+					// Deserialize a standard representation
+					tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase();
+					wrap = wrapMap[ tag ] || wrapMap._default;
+
+					tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];
+
+					// Descend through wrappers to the right content
+					j = wrap[0];
+					while ( j-- ) {
+						tmp = tmp.lastChild;
+					}
+
+					// Manually add leading whitespace removed by IE
+					if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+						nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
+					}
+
+					// Remove IE's autoinserted <tbody> from table fragments
+					if ( !jQuery.support.tbody ) {
+
+						// String was a <table>, *may* have spurious <tbody>
+						elem = tag === "table" && !rtbody.test( elem ) ?
+							tmp.firstChild :
+
+							// String was a bare <thead> or <tfoot>
+							wrap[1] === "<table>" && !rtbody.test( elem ) ?
+								tmp :
+								0;
+
+						j = elem && elem.childNodes.length;
+						while ( j-- ) {
+							if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {
+								elem.removeChild( tbody );
+							}
+						}
+					}
+
+					jQuery.merge( nodes, tmp.childNodes );
+
+					// Fix #12392 for WebKit and IE > 9
+					tmp.textContent = "";
+
+					// Fix #12392 for oldIE
+					while ( tmp.firstChild ) {
+						tmp.removeChild( tmp.firstChild );
+					}
+
+					// Remember the top-level container for proper cleanup
+					tmp = safe.lastChild;
+				}
+			}
+		}
+
+		// Fix #11356: Clear elements from fragment
+		if ( tmp ) {
+			safe.removeChild( tmp );
+		}
+
+		// Reset defaultChecked for any radios and checkboxes
+		// about to be appended to the DOM in IE 6/7 (#8060)
+		if ( !jQuery.support.appendChecked ) {
+			jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
+		}
+
+		i = 0;
+		while ( (elem = nodes[ i++ ]) ) {
+
+			// #4087 - If origin and destination elements are the same, and this is
+			// that element, do not do anything
+			if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
+				continue;
+			}
+
+			contains = jQuery.contains( elem.ownerDocument, elem );
+
+			// Append to fragment
+			tmp = getAll( safe.appendChild( elem ), "script" );
+
+			// Preserve script evaluation history
+			if ( contains ) {
+				setGlobalEval( tmp );
+			}
+
+			// Capture executables
+			if ( scripts ) {
+				j = 0;
+				while ( (elem = tmp[ j++ ]) ) {
+					if ( rscriptType.test( elem.type || "" ) ) {
+						scripts.push( elem );
+					}
+				}
+			}
+		}
+
+		tmp = null;
+
+		return safe;
+	},
+
+	cleanData: function( elems, /* internal */ acceptData ) {
+		var elem, type, id, data,
+			i = 0,
+			internalKey = jQuery.expando,
+			cache = jQuery.cache,
+			deleteExpando = jQuery.support.deleteExpando,
+			special = jQuery.event.special;
+
+		for ( ; (elem = elems[i]) != null; i++ ) {
+
+			if ( acceptData || jQuery.acceptData( elem ) ) {
+
+				id = elem[ internalKey ];
+				data = id && cache[ id ];
+
+				if ( data ) {
+					if ( data.events ) {
+						for ( type in data.events ) {
+							if ( special[ type ] ) {
+								jQuery.event.remove( elem, type );
+
+							// This is a shortcut to avoid jQuery.event.remove's overhead
+							} else {
+								jQuery.removeEvent( elem, type, data.handle );
+							}
+						}
+					}
+
+					// Remove cache only if it was not already removed by jQuery.event.remove
+					if ( cache[ id ] ) {
+
+						delete cache[ id ];
+
+						// IE does not allow us to delete expando properties from nodes,
+						// nor does it have a removeAttribute function on Document nodes;
+						// we must handle all of these cases
+						if ( deleteExpando ) {
+							delete elem[ internalKey ];
+
+						} else if ( typeof elem.removeAttribute !== core_strundefined ) {
+							elem.removeAttribute( internalKey );
+
+						} else {
+							elem[ internalKey ] = null;
+						}
+
+						core_deletedIds.push( id );
+					}
+				}
+			}
+		}
+	}
+});
+var iframe, getStyles, curCSS,
+	ralpha = /alpha\([^)]*\)/i,
+	ropacity = /opacity\s*=\s*([^)]*)/,
+	rposition = /^(top|right|bottom|left)$/,
+	// swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
+	// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+	rmargin = /^margin/,
+	rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),
+	rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),
+	rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ),
+	elemdisplay = { BODY: "block" },
+
+	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+	cssNormalTransform = {
+		letterSpacing: 0,
+		fontWeight: 400
+	},
+
+	cssExpand = [ "Top", "Right", "Bottom", "Left" ],
+	cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
+
+// return a css property mapped to a potentially vendor prefixed property
+function vendorPropName( style, name ) {
+
+	// shortcut for names that are not vendor prefixed
+	if ( name in style ) {
+		return name;
+	}
+
+	// check for vendor prefixed names
+	var capName = name.charAt(0).toUpperCase() + name.slice(1),
+		origName = name,
+		i = cssPrefixes.length;
+
+	while ( i-- ) {
+		name = cssPrefixes[ i ] + capName;
+		if ( name in style ) {
+			return name;
+		}
+	}
+
+	return origName;
+}
+
+function isHidden( elem, el ) {
+	// isHidden might be called from jQuery#filter function;
+	// in that case, element will be second argument
+	elem = el || elem;
+	return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
+}
+
+function showHide( elements, show ) {
+	var display, elem, hidden,
+		values = [],
+		index = 0,
+		length = elements.length;
+
+	for ( ; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+
+		values[ index ] = jQuery._data( elem, "olddisplay" );
+		display = elem.style.display;
+		if ( show ) {
+			// Reset the inline display of this element to learn if it is
+			// being hidden by cascaded rules or not
+			if ( !values[ index ] && display === "none" ) {
+				elem.style.display = "";
+			}
+
+			// Set elements which have been overridden with display: none
+			// in a stylesheet to whatever the default browser style is
+			// for such an element
+			if ( elem.style.display === "" && isHidden( elem ) ) {
+				values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );
+			}
+		} else {
+
+			if ( !values[ index ] ) {
+				hidden = isHidden( elem );
+
+				if ( display && display !== "none" || !hidden ) {
+					jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
+				}
+			}
+		}
+	}
+
+	// Set the display of most of the elements in a second loop
+	// to avoid the constant reflow
+	for ( index = 0; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+		if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
+			elem.style.display = show ? values[ index ] || "" : "none";
+		}
+	}
+
+	return elements;
+}
+
+jQuery.fn.extend({
+	css: function( name, value ) {
+		return jQuery.access( this, function( elem, name, value ) {
+			var len, styles,
+				map = {},
+				i = 0;
+
+			if ( jQuery.isArray( name ) ) {
+				styles = getStyles( elem );
+				len = name.length;
+
+				for ( ; i < len; i++ ) {
+					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+				}
+
+				return map;
+			}
+
+			return value !== undefined ?
+				jQuery.style( elem, name, value ) :
+				jQuery.css( elem, name );
+		}, name, value, arguments.length > 1 );
+	},
+	show: function() {
+		return showHide( this, true );
+	},
+	hide: function() {
+		return showHide( this );
+	},
+	toggle: function( state ) {
+		var bool = typeof state === "boolean";
+
+		return this.each(function() {
+			if ( bool ? state : isHidden( this ) ) {
+				jQuery( this ).show();
+			} else {
+				jQuery( this ).hide();
+			}
+		});
+	}
+});
+
+jQuery.extend({
+	// Add in style property hooks for overriding the default
+	// behavior of getting and setting a style property
+	cssHooks: {
+		opacity: {
+			get: function( elem, computed ) {
+				if ( computed ) {
+					// We should always get a number back from opacity
+					var ret = curCSS( elem, "opacity" );
+					return ret === "" ? "1" : ret;
+				}
+			}
+		}
+	},
+
+	// Exclude the following css properties to add px
+	cssNumber: {
+		"columnCount": true,
+		"fillOpacity": true,
+		"fontWeight": true,
+		"lineHeight": true,
+		"opacity": true,
+		"orphans": true,
+		"widows": true,
+		"zIndex": true,
+		"zoom": true
+	},
+
+	// Add in properties whose names you wish to fix before
+	// setting or getting the value
+	cssProps: {
+		// normalize float css property
+		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
+	},
+
+	// Get and set the style property on a DOM Node
+	style: function( elem, name, value, extra ) {
+		// Don't set styles on text and comment nodes
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+			return;
+		}
+		
+		// Make sure that we're working with the right name
+		var ret, type, hooks,
+			origName = jQuery.camelCase( name ),
+			style = elem.style;
+
+		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
+
+		// gets hook for the prefixed version
+		// followed by the unprefixed version
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// Check if we're setting a value
+		if ( value !== undefined ) {
+			type = typeof value;
+
+			// convert relative number strings (+= or -=) to relative numbers. #7345
+			if ( type === "string" && (ret = rrelNum.exec( value )) ) {
+				value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
+				// Fixes bug #9237
+				type = "number";
+			}
+
+			// Make sure that NaN and null values aren't set. See: #7116
+			if ( value == null || type === "number" && isNaN( value ) ) {
+				return;
+			}
+
+			// If a number was passed in, add 'px' to the (except for certain CSS properties)
+			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+				value += "px";
+			}
+
+			// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
+			// but it would mean to define eight (for every problematic property) identical functions
+			if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
+				style[ name ] = "inherit";
+			}
+
+			// If a hook was provided, use that value, otherwise just set the specified value
+			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
+
+				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
+				// Fixes bug #5509
+				try {
+					style[ name ] = value;
+				} catch(e) {}
+			}
+
+		} else {
+			// If a hook was provided get the non-computed value from there
+			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+				return ret;
+			}
+
+			// Otherwise just get the value from the style object
+			return style[ name ];
+		}
+	},
+
+	css: function( elem, name, extra, styles ) {
+		var num, val, hooks,
+			origName = jQuery.camelCase( name );
+
+		// Make sure that we're working with the right name
+		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
+
+		// gets hook for the prefixed version
+		// followed by the unprefixed version
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// If a hook was provided get the computed value from there
+		if ( hooks && "get" in hooks ) {
+			val = hooks.get( elem, true, extra );
+		}
+
+		// Otherwise, if a way to get the computed value exists, use that
+		if ( val === undefined ) {
+			val = curCSS( elem, name, styles );
+		}
+
+		//convert "normal" to computed value
+		if ( val === "normal" && name in cssNormalTransform ) {
+			val = cssNormalTransform[ name ];
+		}
+
+		// Return, converting to number if forced or a qualifier was provided and val looks numeric
+		if ( extra === "" || extra ) {
+			num = parseFloat( val );
+			return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
+		}
+		return val;
+	},
+
+	// A method for quickly swapping in/out CSS properties to get correct calculations
+	swap: function( elem, options, callback, args ) {
+		var ret, name,
+			old = {};
+
+		// Remember the old values, and insert the new ones
+		for ( name in options ) {
+			old[ name ] = elem.style[ name ];
+			elem.style[ name ] = options[ name ];
+		}
+
+		ret = callback.apply( elem, args || [] );
+
+		// Revert the old values
+		for ( name in options ) {
+			elem.style[ name ] = old[ name ];
+		}
+
+		return ret;
+	}
+});
+
+// NOTE: we've included the "window" in window.getComputedStyle
+// because jsdom on node.js will break without it.
+if ( window.getComputedStyle ) {
+	getStyles = function( elem ) {
+		return window.getComputedStyle( elem, null );
+	};
+
+	curCSS = function( elem, name, _computed ) {
+		var width, minWidth, maxWidth,
+			computed = _computed || getStyles( elem ),
+
+			// getPropertyValue is only needed for .css('filter') in IE9, see #12537
+			ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,
+			style = elem.style;
+
+		if ( computed ) {
+
+			if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
+				ret = jQuery.style( elem, name );
+			}
+
+			// A tribute to the "awesome hack by Dean Edwards"
+			// Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
+			// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
+			// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
+			if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+
+				// Remember the original values
+				width = style.width;
+				minWidth = style.minWidth;
+				maxWidth = style.maxWidth;
+
+				// Put in the new values to get a computed value out
+				style.minWidth = style.maxWidth = style.width = ret;
+				ret = computed.width;
+
+				// Revert the changed values
+				style.width = width;
+				style.minWidth = minWidth;
+				style.maxWidth = maxWidth;
+			}
+		}
+
+		return ret;
+	};
+} else if ( document.documentElement.currentStyle ) {
+	getStyles = function( elem ) {
+		return elem.currentStyle;
+	};
+
+	curCSS = function( elem, name, _computed ) {
+		var left, rs, rsLeft,
+			computed = _computed || getStyles( elem ),
+			ret = computed ? computed[ name ] : undefined,
+			style = elem.style;
+
+		// Avoid setting ret to empty string here
+		// so we don't default to auto
+		if ( ret == null && style && style[ name ] ) {
+			ret = style[ name ];
+		}
+
+		// From the awesome hack by Dean Edwards
+		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+		// If we're not dealing with a regular pixel number
+		// but a number that has a weird ending, we need to convert it to pixels
+		// but not position css attributes, as those are proportional to the parent element instead
+		// and we can't measure the parent instead because it might trigger a "stacking dolls" problem
+		if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
+
+			// Remember the original values
+			left = style.left;
+			rs = elem.runtimeStyle;
+			rsLeft = rs && rs.left;
+
+			// Put in the new values to get a computed value out
+			if ( rsLeft ) {
+				rs.left = elem.currentStyle.left;
+			}
+			style.left = name === "fontSize" ? "1em" : ret;
+			ret = style.pixelLeft + "px";
+
+			// Revert the changed values
+			style.left = left;
+			if ( rsLeft ) {
+				rs.left = rsLeft;
+			}
+		}
+
+		return ret === "" ? "auto" : ret;
+	};
+}
+
+function setPositiveNumber( elem, value, subtract ) {
+	var matches = rnumsplit.exec( value );
+	return matches ?
+		// Guard against undefined "subtract", e.g., when used as in cssHooks
+		Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
+		value;
+}
+
+function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
+	var i = extra === ( isBorderBox ? "border" : "content" ) ?
+		// If we already have the right measurement, avoid augmentation
+		4 :
+		// Otherwise initialize for horizontal or vertical properties
+		name === "width" ? 1 : 0,
+
+		val = 0;
+
+	for ( ; i < 4; i += 2 ) {
+		// both box models exclude margin, so add it if we want it
+		if ( extra === "margin" ) {
+			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
+		}
+
+		if ( isBorderBox ) {
+			// border-box includes padding, so remove it if we want content
+			if ( extra === "content" ) {
+				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+			}
+
+			// at this point, extra isn't border nor margin, so remove border
+			if ( extra !== "margin" ) {
+				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		} else {
+			// at this point, extra isn't content, so add padding
+			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+			// at this point, extra isn't content nor padding, so add border
+			if ( extra !== "padding" ) {
+				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		}
+	}
+
+	return val;
+}
+
+function getWidthOrHeight( elem, name, extra ) {
+
+	// Start with offset property, which is equivalent to the border-box value
+	var valueIsBorderBox = true,
+		val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+		styles = getStyles( elem ),
+		isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+
+	// some non-html elements return undefined for offsetWidth, so check for null/undefined
+	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
+	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
+	if ( val <= 0 || val == null ) {
+		// Fall back to computed then uncomputed css if necessary
+		val = curCSS( elem, name, styles );
+		if ( val < 0 || val == null ) {
+			val = elem.style[ name ];
+		}
+
+		// Computed unit is not pixels. Stop here and return.
+		if ( rnumnonpx.test(val) ) {
+			return val;
+		}
+
+		// we need the check for style in case a browser which returns unreliable values
+		// for getComputedStyle silently falls back to the reliable elem.style
+		valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );
+
+		// Normalize "", auto, and prepare for extra
+		val = parseFloat( val ) || 0;
+	}
+
+	// use the active box-sizing model to add/subtract irrelevant styles
+	return ( val +
+		augmentWidthOrHeight(
+			elem,
+			name,
+			extra || ( isBorderBox ? "border" : "content" ),
+			valueIsBorderBox,
+			styles
+		)
+	) + "px";
+}
+
+// Try to determine the default display value of an element
+function css_defaultDisplay( nodeName ) {
+	var doc = document,
+		display = elemdisplay[ nodeName ];
+
+	if ( !display ) {
+		display = actualDisplay( nodeName, doc );
+
+		// If the simple way fails, read from inside an iframe
+		if ( display === "none" || !display ) {
+			// Use the already-created iframe if possible
+			iframe = ( iframe ||
+				jQuery("<iframe frameborder='0' width='0' height='0'/>")
+				.css( "cssText", "display:block !important" )
+			).appendTo( doc.documentElement );
+
+			// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
+			doc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;
+			doc.write("<!doctype html><html><body>");
+			doc.close();
+
+			display = actualDisplay( nodeName, doc );
+			iframe.detach();
+		}
+
+		// Store the correct default display
+		elemdisplay[ nodeName ] = display;
+	}
+
+	return display;
+}
+
+// Called ONLY from within css_defaultDisplay
+function actualDisplay( name, doc ) {
+	var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
+		display = jQuery.css( elem[0], "display" );
+	elem.remove();
+	return display;
+}
+
+jQuery.each([ "height", "width" ], function( i, name ) {
+	jQuery.cssHooks[ name ] = {
+		get: function( elem, computed, extra ) {
+			if ( computed ) {
+				// certain elements can have dimension info if we invisibly show them
+				// however, it must have a current display style that would benefit from this
+				return elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, "display" ) ) ?
+					jQuery.swap( elem, cssShow, function() {
+						return getWidthOrHeight( elem, name, extra );
+					}) :
+					getWidthOrHeight( elem, name, extra );
+			}
+		},
+
+		set: function( elem, value, extra ) {
+			var styles = extra && getStyles( elem );
+			return setPositiveNumber( elem, value, extra ?
+				augmentWidthOrHeight(
+					elem,
+					name,
+					extra,
+					jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+					styles
+				) : 0
+			);
+		}
+	};
+});
+
+if ( !jQuery.support.opacity ) {
+	jQuery.cssHooks.opacity = {
+		get: function( elem, computed ) {
+			// IE uses filters for opacity
+			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
+				( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
+				computed ? "1" : "";
+		},
+
+		set: function( elem, value ) {
+			var style = elem.style,
+				currentStyle = elem.currentStyle,
+				opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
+				filter = currentStyle && currentStyle.filter || style.filter || "";
+
+			// IE has trouble with opacity if it does not have layout
+			// Force it by setting the zoom level
+			style.zoom = 1;
+
+			// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
+			// if value === "", then remove inline opacity #12685
+			if ( ( value >= 1 || value === "" ) &&
+					jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
+					style.removeAttribute ) {
+
+				// Setting style.filter to null, "" & " " still leave "filter:" in the cssText
+				// if "filter:" is present at all, clearType is disabled, we want to avoid this
+				// style.removeAttribute is IE Only, but so apparently is this code path...
+				style.removeAttribute( "filter" );
+
+				// if there is no filter style applied in a css rule or unset inline opacity, we are done
+				if ( value === "" || currentStyle && !currentStyle.filter ) {
+					return;
+				}
+			}
+
+			// otherwise, set new filter values
+			style.filter = ralpha.test( filter ) ?
+				filter.replace( ralpha, opacity ) :
+				filter + " " + opacity;
+		}
+	};
+}
+
+// These hooks cannot be added until DOM ready because the support test
+// for it is not run until after DOM ready
+jQuery(function() {
+	if ( !jQuery.support.reliableMarginRight ) {
+		jQuery.cssHooks.marginRight = {
+			get: function( elem, computed ) {
+				if ( computed ) {
+					// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+					// Work around by temporarily setting element display to inline-block
+					return jQuery.swap( elem, { "display": "inline-block" },
+						curCSS, [ elem, "marginRight" ] );
+				}
+			}
+		};
+	}
+
+	// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+	// getComputedStyle returns percent when specified for top/left/bottom/right
+	// rather than make the css module depend on the offset module, we just check for it here
+	if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {
+		jQuery.each( [ "top", "left" ], function( i, prop ) {
+			jQuery.cssHooks[ prop ] = {
+				get: function( elem, computed ) {
+					if ( computed ) {
+						computed = curCSS( elem, prop );
+						// if curCSS returns percentage, fallback to offset
+						return rnumnonpx.test( computed ) ?
+							jQuery( elem ).position()[ prop ] + "px" :
+							computed;
+					}
+				}
+			};
+		});
+	}
+
+});
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+	jQuery.expr.filters.hidden = function( elem ) {
+		// Support: Opera <= 12.12
+		// Opera reports offsetWidths and offsetHeights less than zero on some elements
+		return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
+			(!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
+	};
+
+	jQuery.expr.filters.visible = function( elem ) {
+		return !jQuery.expr.filters.hidden( elem );
+	};
+}
+
+// These hooks are used by animate to expand properties
+jQuery.each({
+	margin: "",
+	padding: "",
+	border: "Width"
+}, function( prefix, suffix ) {
+	jQuery.cssHooks[ prefix + suffix ] = {
+		expand: function( value ) {
+			var i = 0,
+				expanded = {},
+
+				// assumes a single number if not a string
+				parts = typeof value === "string" ? value.split(" ") : [ value ];
+
+			for ( ; i < 4; i++ ) {
+				expanded[ prefix + cssExpand[ i ] + suffix ] =
+					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+			}
+
+			return expanded;
+		}
+	};
+
+	if ( !rmargin.test( prefix ) ) {
+		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+	}
+});
+var r20 = /%20/g,
+	rbracket = /\[\]$/,
+	rCRLF = /\r?\n/g,
+	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+	rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+jQuery.fn.extend({
+	serialize: function() {
+		return jQuery.param( this.serializeArray() );
+	},
+	serializeArray: function() {
+		return this.map(function(){
+			// Can add propHook for "elements" to filter or add form elements
+			var elements = jQuery.prop( this, "elements" );
+			return elements ? jQuery.makeArray( elements ) : this;
+		})
+		.filter(function(){
+			var type = this.type;
+			// Use .is(":disabled") so that fieldset[disabled] works
+			return this.name && !jQuery( this ).is( ":disabled" ) &&
+				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+				( this.checked || !manipulation_rcheckableType.test( type ) );
+		})
+		.map(function( i, elem ){
+			var val = jQuery( this ).val();
+
+			return val == null ?
+				null :
+				jQuery.isArray( val ) ?
+					jQuery.map( val, function( val ){
+						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+					}) :
+					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+		}).get();
+	}
+});
+
+//Serialize an array of form elements or a set of
+//key/values into a query string
+jQuery.param = function( a, traditional ) {
+	var prefix,
+		s = [],
+		add = function( key, value ) {
+			// If value is a function, invoke it and return its value
+			value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
+			s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+		};
+
+	// Set traditional to true for jQuery <= 1.3.2 behavior.
+	if ( traditional === undefined ) {
+		traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
+	}
+
+	// If an array was passed in, assume that it is an array of form elements.
+	if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+		// Serialize the form elements
+		jQuery.each( a, function() {
+			add( this.name, this.value );
+		});
+
+	} else {
+		// If traditional, encode the "old" way (the way 1.3.2 or older
+		// did it), otherwise encode params recursively.
+		for ( prefix in a ) {
+			buildParams( prefix, a[ prefix ], traditional, add );
+		}
+	}
+
+	// Return the resulting serialization
+	return s.join( "&" ).replace( r20, "+" );
+};
+
+function buildParams( prefix, obj, traditional, add ) {
+	var name;
+
+	if ( jQuery.isArray( obj ) ) {
+		// Serialize array item.
+		jQuery.each( obj, function( i, v ) {
+			if ( traditional || rbracket.test( prefix ) ) {
+				// Treat each array item as a scalar.
+				add( prefix, v );
+
+			} else {
+				// Item is non-scalar (array or object), encode its numeric index.
+				buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
+			}
+		});
+
+	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
+		// Serialize object item.
+		for ( name in obj ) {
+			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+		}
+
+	} else {
+		// Serialize scalar item.
+		add( prefix, obj );
+	}
+}
+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+	"change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
+
+	// Handle event binding
+	jQuery.fn[ name ] = function( data, fn ) {
+		return arguments.length > 0 ?
+			this.on( name, null, data, fn ) :
+			this.trigger( name );
+	};
+});
+
+jQuery.fn.hover = function( fnOver, fnOut ) {
+	return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+};
+var
+	// Document location
+	ajaxLocParts,
+	ajaxLocation,
+	ajax_nonce = jQuery.now(),
+
+	ajax_rquery = /\?/,
+	rhash = /#.*$/,
+	rts = /([?&])_=[^&]*/,
+	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+	// #7653, #8125, #8152: local protocol detection
+	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+	rnoContent = /^(?:GET|HEAD)$/,
+	rprotocol = /^\/\//,
+	rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,
+
+	// Keep a copy of the old load method
+	_load = jQuery.fn.load,
+
+	/* Prefilters
+	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+	 * 2) These are called:
+	 *    - BEFORE asking for a transport
+	 *    - AFTER param serialization (s.data is a string if s.processData is true)
+	 * 3) key is the dataType
+	 * 4) the catchall symbol "*" can be used
+	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+	 */
+	prefilters = {},
+
+	/* Transports bindings
+	 * 1) key is the dataType
+	 * 2) the catchall symbol "*" can be used
+	 * 3) selection will start with transport dataType and THEN go to "*" if needed
+	 */
+	transports = {},
+
+	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+	allTypes = "*/".concat("*");
+
+// #8138, IE may throw an exception when accessing
+// a field from window.location if document.domain has been set
+try {
+	ajaxLocation = location.href;
+} catch( e ) {
+	// Use the href attribute of an A element
+	// since IE will modify it given document.location
+	ajaxLocation = document.createElement( "a" );
+	ajaxLocation.href = "";
+	ajaxLocation = ajaxLocation.href;
+}
+
+// Segment location into parts
+ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+	// dataTypeExpression is optional and defaults to "*"
+	return function( dataTypeExpression, func ) {
+
+		if ( typeof dataTypeExpression !== "string" ) {
+			func = dataTypeExpression;
+			dataTypeExpression = "*";
+		}
+
+		var dataType,
+			i = 0,
+			dataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || [];
+
+		if ( jQuery.isFunction( func ) ) {
+			// For each dataType in the dataTypeExpression
+			while ( (dataType = dataTypes[i++]) ) {
+				// Prepend if requested
+				if ( dataType[0] === "+" ) {
+					dataType = dataType.slice( 1 ) || "*";
+					(structure[ dataType ] = structure[ dataType ] || []).unshift( func );
+
+				// Otherwise append
+				} else {
+					(structure[ dataType ] = structure[ dataType ] || []).push( func );
+				}
+			}
+		}
+	};
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+
+	var inspected = {},
+		seekingTransport = ( structure === transports );
+
+	function inspect( dataType ) {
+		var selected;
+		inspected[ dataType ] = true;
+		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+			if( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+				options.dataTypes.unshift( dataTypeOrTransport );
+				inspect( dataTypeOrTransport );
+				return false;
+			} else if ( seekingTransport ) {
+				return !( selected = dataTypeOrTransport );
+			}
+		});
+		return selected;
+	}
+
+	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+	var deep, key,
+		flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+	for ( key in src ) {
+		if ( src[ key ] !== undefined ) {
+			( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
+		}
+	}
+	if ( deep ) {
+		jQuery.extend( true, target, deep );
+	}
+
+	return target;
+}
+
+jQuery.fn.load = function( url, params, callback ) {
+	if ( typeof url !== "string" && _load ) {
+		return _load.apply( this, arguments );
+	}
+
+	var selector, response, type,
+		self = this,
+		off = url.indexOf(" ");
+
+	if ( off >= 0 ) {
+		selector = url.slice( off, url.length );
+		url = url.slice( 0, off );
+	}
+
+	// If it's a function
+	if ( jQuery.isFunction( params ) ) {
+
+		// We assume that it's the callback
+		callback = params;
+		params = undefined;
+
+	// Otherwise, build a param string
+	} else if ( params && typeof params === "object" ) {
+		type = "POST";
+	}
+
+	// If we have elements to modify, make the request
+	if ( self.length > 0 ) {
+		jQuery.ajax({
+			url: url,
+
+			// if "type" variable is undefined, then "GET" method will be used
+			type: type,
+			dataType: "html",
+			data: params
+		}).done(function( responseText ) {
+
+			// Save response for use in complete callback
+			response = arguments;
+
+			self.html( selector ?
+
+				// If a selector was specified, locate the right elements in a dummy div
+				// Exclude scripts to avoid IE 'Permission Denied' errors
+				jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
+
+				// Otherwise use the full result
+				responseText );
+
+		}).complete( callback && function( jqXHR, status ) {
+			self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
+		});
+	}
+
+	return this;
+};
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ){
+	jQuery.fn[ type ] = function( fn ){
+		return this.on( type, fn );
+	};
+});
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+	jQuery[ method ] = function( url, data, callback, type ) {
+		// shift arguments if data argument was omitted
+		if ( jQuery.isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = undefined;
+		}
+
+		return jQuery.ajax({
+			url: url,
+			type: method,
+			dataType: type,
+			data: data,
+			success: callback
+		});
+	};
+});
+
+jQuery.extend({
+
+	// Counter for holding the number of active queries
+	active: 0,
+
+	// Last-Modified header cache for next request
+	lastModified: {},
+	etag: {},
+
+	ajaxSettings: {
+		url: ajaxLocation,
+		type: "GET",
+		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+		global: true,
+		processData: true,
+		async: true,
+		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+		/*
+		timeout: 0,
+		data: null,
+		dataType: null,
+		username: null,
+		password: null,
+		cache: null,
+		throws: false,
+		traditional: false,
+		headers: {},
+		*/
+
+		accepts: {
+			"*": allTypes,
+			text: "text/plain",
+			html: "text/html",
+			xml: "application/xml, text/xml",
+			json: "application/json, text/javascript"
+		},
+
+		contents: {
+			xml: /xml/,
+			html: /html/,
+			json: /json/
+		},
+
+		responseFields: {
+			xml: "responseXML",
+			text: "responseText"
+		},
+
+		// Data converters
+		// Keys separate source (or catchall "*") and destination types with a single space
+		converters: {
+
+			// Convert anything to text
+			"* text": window.String,
+
+			// Text to html (true = no transformation)
+			"text html": true,
+
+			// Evaluate text as a json expression
+			"text json": jQuery.parseJSON,
+
+			// Parse text as xml
+			"text xml": jQuery.parseXML
+		},
+
+		// For options that shouldn't be deep extended:
+		// you can add your own custom options here if
+		// and when you create one that shouldn't be
+		// deep extended (see ajaxExtend)
+		flatOptions: {
+			url: true,
+			context: true
+		}
+	},
+
+	// Creates a full fledged settings object into target
+	// with both ajaxSettings and settings fields.
+	// If target is omitted, writes into ajaxSettings.
+	ajaxSetup: function( target, settings ) {
+		return settings ?
+
+			// Building a settings object
+			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+
+			// Extending ajaxSettings
+			ajaxExtend( jQuery.ajaxSettings, target );
+	},
+
+	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+	ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+	// Main method
+	ajax: function( url, options ) {
+
+		// If url is an object, simulate pre-1.5 signature
+		if ( typeof url === "object" ) {
+			options = url;
+			url = undefined;
+		}
+
+		// Force options to be an object
+		options = options || {};
+
+		var // Cross-domain detection vars
+			parts,
+			// Loop variable
+			i,
+			// URL without anti-cache param
+			cacheURL,
+			// Response headers as string
+			responseHeadersString,
+			// timeout handle
+			timeoutTimer,
+
+			// To know if global events are to be dispatched
+			fireGlobals,
+
+			transport,
+			// Response headers
+			responseHeaders,
+			// Create the final options object
+			s = jQuery.ajaxSetup( {}, options ),
+			// Callbacks context
+			callbackContext = s.context || s,
+			// Context for global events is callbackContext if it is a DOM node or jQuery collection
+			globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
+				jQuery( callbackContext ) :
+				jQuery.event,
+			// Deferreds
+			deferred = jQuery.Deferred(),
+			completeDeferred = jQuery.Callbacks("once memory"),
+			// Status-dependent callbacks
+			statusCode = s.statusCode || {},
+			// Headers (they are sent all at once)
+			requestHeaders = {},
+			requestHeadersNames = {},
+			// The jqXHR state
+			state = 0,
+			// Default abort message
+			strAbort = "canceled",
+			// Fake xhr
+			jqXHR = {
+				readyState: 0,
+
+				// Builds headers hashtable if needed
+				getResponseHeader: function( key ) {
+					var match;
+					if ( state === 2 ) {
+						if ( !responseHeaders ) {
+							responseHeaders = {};
+							while ( (match = rheaders.exec( responseHeadersString )) ) {
+								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+							}
+						}
+						match = responseHeaders[ key.toLowerCase() ];
+					}
+					return match == null ? null : match;
+				},
+
+				// Raw string
+				getAllResponseHeaders: function() {
+					return state === 2 ? responseHeadersString : null;
+				},
+
+				// Caches the header
+				setRequestHeader: function( name, value ) {
+					var lname = name.toLowerCase();
+					if ( !state ) {
+						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+						requestHeaders[ name ] = value;
+					}
+					return this;
+				},
+
+				// Overrides response content-type header
+				overrideMimeType: function( type ) {
+					if ( !state ) {
+						s.mimeType = type;
+					}
+					return this;
+				},
+
+				// Status-dependent callbacks
+				statusCode: function( map ) {
+					var code;
+					if ( map ) {
+						if ( state < 2 ) {
+							for ( code in map ) {
+								// Lazy-add the new callback in a way that preserves old ones
+								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+							}
+						} else {
+							// Execute the appropriate callbacks
+							jqXHR.always( map[ jqXHR.status ] );
+						}
+					}
+					return this;
+				},
+
+				// Cancel the request
+				abort: function( statusText ) {
+					var finalText = statusText || strAbort;
+					if ( transport ) {
+						transport.abort( finalText );
+					}
+					done( 0, finalText );
+					return this;
+				}
+			};
+
+		// Attach deferreds
+		deferred.promise( jqXHR ).complete = completeDeferred.add;
+		jqXHR.success = jqXHR.done;
+		jqXHR.error = jqXHR.fail;
+
+		// Remove hash character (#7531: and string promotion)
+		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+		// Handle falsy url in the settings object (#10093: consistency with old signature)
+		// We also use the url parameter if available
+		s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+
+		// Alias method option to type as per ticket #12004
+		s.type = options.method || options.type || s.method || s.type;
+
+		// Extract dataTypes list
+		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( core_rnotwhite ) || [""];
+
+		// A cross-domain request is in order when we have a protocol:host:port mismatch
+		if ( s.crossDomain == null ) {
+			parts = rurl.exec( s.url.toLowerCase() );
+			s.crossDomain = !!( parts &&
+				( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
+					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
+						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
+			);
+		}
+
+		// Convert data if not already a string
+		if ( s.data && s.processData && typeof s.data !== "string" ) {
+			s.data = jQuery.param( s.data, s.traditional );
+		}
+
+		// Apply prefilters
+		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+		// If request was aborted inside a prefilter, stop there
+		if ( state === 2 ) {
+			return jqXHR;
+		}
+
+		// We can fire global events as of now if asked to
+		fireGlobals = s.global;
+
+		// Watch for a new set of requests
+		if ( fireGlobals && jQuery.active++ === 0 ) {
+			jQuery.event.trigger("ajaxStart");
+		}
+
+		// Uppercase the type
+		s.type = s.type.toUpperCase();
+
+		// Determine if request has content
+		s.hasContent = !rnoContent.test( s.type );
+
+		// Save the URL in case we're toying with the If-Modified-Since
+		// and/or If-None-Match header later on
+		cacheURL = s.url;
+
+		// More options handling for requests with no content
+		if ( !s.hasContent ) {
+
+			// If data is available, append data to url
+			if ( s.data ) {
+				cacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
+				// #9682: remove data so that it's not used in an eventual retry
+				delete s.data;
+			}
+
+			// Add anti-cache in url if needed
+			if ( s.cache === false ) {
+				s.url = rts.test( cacheURL ) ?
+
+					// If there is already a '_' parameter, set its value
+					cacheURL.replace( rts, "$1_=" + ajax_nonce++ ) :
+
+					// Otherwise add one to the end
+					cacheURL + ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ajax_nonce++;
+			}
+		}
+
+		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+		if ( s.ifModified ) {
+			if ( jQuery.lastModified[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+			}
+			if ( jQuery.etag[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+			}
+		}
+
+		// Set the correct header, if data is being sent
+		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+			jqXHR.setRequestHeader( "Content-Type", s.contentType );
+		}
+
+		// Set the Accepts header for the server, depending on the dataType
+		jqXHR.setRequestHeader(
+			"Accept",
+			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+				s.accepts[ "*" ]
+		);
+
+		// Check for headers option
+		for ( i in s.headers ) {
+			jqXHR.setRequestHeader( i, s.headers[ i ] );
+		}
+
+		// Allow custom headers/mimetypes and early abort
+		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+			// Abort if not done already and return
+			return jqXHR.abort();
+		}
+
+		// aborting is no longer a cancellation
+		strAbort = "abort";
+
+		// Install callbacks on deferreds
+		for ( i in { success: 1, error: 1, complete: 1 } ) {
+			jqXHR[ i ]( s[ i ] );
+		}
+
+		// Get transport
+		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+		// If no transport, we auto-abort
+		if ( !transport ) {
+			done( -1, "No Transport" );
+		} else {
+			jqXHR.readyState = 1;
+
+			// Send global event
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+			}
+			// Timeout
+			if ( s.async && s.timeout > 0 ) {
+				timeoutTimer = setTimeout(function() {
+					jqXHR.abort("timeout");
+				}, s.timeout );
+			}
+
+			try {
+				state = 1;
+				transport.send( requestHeaders, done );
+			} catch ( e ) {
+				// Propagate exception as error if not done
+				if ( state < 2 ) {
+					done( -1, e );
+				// Simply rethrow otherwise
+				} else {
+					throw e;
+				}
+			}
+		}
+
+		// Callback for when everything is done
+		function done( status, nativeStatusText, responses, headers ) {
+			var isSuccess, success, error, response, modified,
+				statusText = nativeStatusText;
+
+			// Called once
+			if ( state === 2 ) {
+				return;
+			}
+
+			// State is "done" now
+			state = 2;
+
+			// Clear timeout if it exists
+			if ( timeoutTimer ) {
+				clearTimeout( timeoutTimer );
+			}
+
+			// Dereference transport for early garbage collection
+			// (no matter how long the jqXHR object will be used)
+			transport = undefined;
+
+			// Cache response headers
+			responseHeadersString = headers || "";
+
+			// Set readyState
+			jqXHR.readyState = status > 0 ? 4 : 0;
+
+			// Get response data
+			if ( responses ) {
+				response = ajaxHandleResponses( s, jqXHR, responses );
+			}
+
+			// If successful, handle type chaining
+			if ( status >= 200 && status < 300 || status === 304 ) {
+
+				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+				if ( s.ifModified ) {
+					modified = jqXHR.getResponseHeader("Last-Modified");
+					if ( modified ) {
+						jQuery.lastModified[ cacheURL ] = modified;
+					}
+					modified = jqXHR.getResponseHeader("etag");
+					if ( modified ) {
+						jQuery.etag[ cacheURL ] = modified;
+					}
+				}
+
+				// if no content
+				if ( status === 204 ) {
+					isSuccess = true;
+					statusText = "nocontent";
+
+				// if not modified
+				} else if ( status === 304 ) {
+					isSuccess = true;
+					statusText = "notmodified";
+
+				// If we have data, let's convert it
+				} else {
+					isSuccess = ajaxConvert( s, response );
+					statusText = isSuccess.state;
+					success = isSuccess.data;
+					error = isSuccess.error;
+					isSuccess = !error;
+				}
+			} else {
+				// We extract error from statusText
+				// then normalize statusText and status for non-aborts
+				error = statusText;
+				if ( status || !statusText ) {
+					statusText = "error";
+					if ( status < 0 ) {
+						status = 0;
+					}
+				}
+			}
+
+			// Set data for the fake xhr object
+			jqXHR.status = status;
+			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+			// Success/Error
+			if ( isSuccess ) {
+				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+			} else {
+				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+			}
+
+			// Status-dependent callbacks
+			jqXHR.statusCode( statusCode );
+			statusCode = undefined;
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+					[ jqXHR, s, isSuccess ? success : error ] );
+			}
+
+			// Complete
+			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+				// Handle the global AJAX counter
+				if ( !( --jQuery.active ) ) {
+					jQuery.event.trigger("ajaxStop");
+				}
+			}
+		}
+
+		return jqXHR;
+	},
+
+	getScript: function( url, callback ) {
+		return jQuery.get( url, undefined, callback, "script" );
+	},
+
+	getJSON: function( url, data, callback ) {
+		return jQuery.get( url, data, callback, "json" );
+	}
+});
+
+/* Handles responses to an ajax request:
+ * - sets all responseXXX fields accordingly
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+	var firstDataType, ct, finalDataType, type,
+		contents = s.contents,
+		dataTypes = s.dataTypes,
+		responseFields = s.responseFields;
+
+	// Fill responseXXX fields
+	for ( type in responseFields ) {
+		if ( type in responses ) {
+			jqXHR[ responseFields[type] ] = responses[ type ];
+		}
+	}
+
+	// Remove auto dataType and get content-type in the process
+	while( dataTypes[ 0 ] === "*" ) {
+		dataTypes.shift();
+		if ( ct === undefined ) {
+			ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
+		}
+	}
+
+	// Check if we're dealing with a known content-type
+	if ( ct ) {
+		for ( type in contents ) {
+			if ( contents[ type ] && contents[ type ].test( ct ) ) {
+				dataTypes.unshift( type );
+				break;
+			}
+		}
+	}
+
+	// Check to see if we have a response for the expected dataType
+	if ( dataTypes[ 0 ] in responses ) {
+		finalDataType = dataTypes[ 0 ];
+	} else {
+		// Try convertible dataTypes
+		for ( type in responses ) {
+			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+				finalDataType = type;
+				break;
+			}
+			if ( !firstDataType ) {
+				firstDataType = type;
+			}
+		}
+		// Or just use first one
+		finalDataType = finalDataType || firstDataType;
+	}
+
+	// If we found a dataType
+	// We add the dataType to the list if needed
+	// and return the corresponding response
+	if ( finalDataType ) {
+		if ( finalDataType !== dataTypes[ 0 ] ) {
+			dataTypes.unshift( finalDataType );
+		}
+		return responses[ finalDataType ];
+	}
+}
+
+// Chain conversions given the request and the original response
+function ajaxConvert( s, response ) {
+	var conv2, current, conv, tmp,
+		converters = {},
+		i = 0,
+		// Work with a copy of dataTypes in case we need to modify it for conversion
+		dataTypes = s.dataTypes.slice(),
+		prev = dataTypes[ 0 ];
+
+	// Apply the dataFilter if provided
+	if ( s.dataFilter ) {
+		response = s.dataFilter( response, s.dataType );
+	}
+
+	// Create converters map with lowercased keys
+	if ( dataTypes[ 1 ] ) {
+		for ( conv in s.converters ) {
+			converters[ conv.toLowerCase() ] = s.converters[ conv ];
+		}
+	}
+
+	// Convert to each sequential dataType, tolerating list modification
+	for ( ; (current = dataTypes[++i]); ) {
+
+		// There's only work to do if current dataType is non-auto
+		if ( current !== "*" ) {
+
+			// Convert response if prev dataType is non-auto and differs from current
+			if ( prev !== "*" && prev !== current ) {
+
+				// Seek a direct converter
+				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+				// If none found, seek a pair
+				if ( !conv ) {
+					for ( conv2 in converters ) {
+
+						// If conv2 outputs current
+						tmp = conv2.split(" ");
+						if ( tmp[ 1 ] === current ) {
+
+							// If prev can be converted to accepted input
+							conv = converters[ prev + " " + tmp[ 0 ] ] ||
+								converters[ "* " + tmp[ 0 ] ];
+							if ( conv ) {
+								// Condense equivalence converters
+								if ( conv === true ) {
+									conv = converters[ conv2 ];
+
+								// Otherwise, insert the intermediate dataType
+								} else if ( converters[ conv2 ] !== true ) {
+									current = tmp[ 0 ];
+									dataTypes.splice( i--, 0, current );
+								}
+
+								break;
+							}
+						}
+					}
+				}
+
+				// Apply converter (if not an equivalence)
+				if ( conv !== true ) {
+
+					// Unless errors are allowed to bubble, catch and return them
+					if ( conv && s["throws"] ) {
+						response = conv( response );
+					} else {
+						try {
+							response = conv( response );
+						} catch ( e ) {
+							return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
+						}
+					}
+				}
+			}
+
+			// Update prev for next iteration
+			prev = current;
+		}
+	}
+
+	return { state: "success", data: response };
+}
+// Install script dataType
+jQuery.ajaxSetup({
+	accepts: {
+		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+	},
+	contents: {
+		script: /(?:java|ecma)script/
+	},
+	converters: {
+		"text script": function( text ) {
+			jQuery.globalEval( text );
+			return text;
+		}
+	}
+});
+
+// Handle cache's special case and global
+jQuery.ajaxPrefilter( "script", function( s ) {
+	if ( s.cache === undefined ) {
+		s.cache = false;
+	}
+	if ( s.crossDomain ) {
+		s.type = "GET";
+		s.global = false;
+	}
+});
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function(s) {
+
+	// This transport only deals with cross domain requests
+	if ( s.crossDomain ) {
+
+		var script,
+			head = document.head || jQuery("head")[0] || document.documentElement;
+
+		return {
+
+			send: function( _, callback ) {
+
+				script = document.createElement("script");
+
+				script.async = true;
+
+				if ( s.scriptCharset ) {
+					script.charset = s.scriptCharset;
+				}
+
+				script.src = s.url;
+
+				// Attach handlers for all browsers
+				script.onload = script.onreadystatechange = function( _, isAbort ) {
+
+					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+
+						// Handle memory leak in IE
+						script.onload = script.onreadystatechange = null;
+
+						// Remove the script
+						if ( script.parentNode ) {
+							script.parentNode.removeChild( script );
+						}
+
+						// Dereference the script
+						script = null;
+
+						// Callback if not abort
+						if ( !isAbort ) {
+							callback( 200, "success" );
+						}
+					}
+				};
+
+				// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
+				// Use native DOM manipulation to avoid our domManip AJAX trickery
+				head.insertBefore( script, head.firstChild );
+			},
+
+			abort: function() {
+				if ( script ) {
+					script.onload( undefined, true );
+				}
+			}
+		};
+	}
+});
+var oldCallbacks = [],
+	rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+jQuery.ajaxSetup({
+	jsonp: "callback",
+	jsonpCallback: function() {
+		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( ajax_nonce++ ) );
+		this[ callback ] = true;
+		return callback;
+	}
+});
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+	var callbackName, overwritten, responseContainer,
+		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+			"url" :
+			typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
+		);
+
+	// Handle iff the expected data type is "jsonp" or we have a parameter to set
+	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+
+		// Get callback name, remembering preexisting value associated with it
+		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
+			s.jsonpCallback() :
+			s.jsonpCallback;
+
+		// Insert callback into url or form data
+		if ( jsonProp ) {
+			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+		} else if ( s.jsonp !== false ) {
+			s.url += ( ajax_rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+		}
+
+		// Use data converter to retrieve json after script execution
+		s.converters["script json"] = function() {
+			if ( !responseContainer ) {
+				jQuery.error( callbackName + " was not called" );
+			}
+			return responseContainer[ 0 ];
+		};
+
+		// force json dataType
+		s.dataTypes[ 0 ] = "json";
+
+		// Install callback
+		overwritten = window[ callbackName ];
+		window[ callbackName ] = function() {
+			responseContainer = arguments;
+		};
+
+		// Clean-up function (fires after converters)
+		jqXHR.always(function() {
+			// Restore preexisting value
+			window[ callbackName ] = overwritten;
+
+			// Save back as free
+			if ( s[ callbackName ] ) {
+				// make sure that re-using the options doesn't screw things around
+				s.jsonpCallback = originalSettings.jsonpCallback;
+
+				// save the callback name for future use
+				oldCallbacks.push( callbackName );
+			}
+
+			// Call if it was a function and we have a response
+			if ( responseContainer && jQuery.isFunction( overwritten ) ) {
+				overwritten( responseContainer[ 0 ] );
+			}
+
+			responseContainer = overwritten = undefined;
+		});
+
+		// Delegate to script
+		return "script";
+	}
+});
+var xhrCallbacks, xhrSupported,
+	xhrId = 0,
+	// #5280: Internet Explorer will keep connections alive if we don't abort on unload
+	xhrOnUnloadAbort = window.ActiveXObject && function() {
+		// Abort all pending requests
+		var key;
+		for ( key in xhrCallbacks ) {
+			xhrCallbacks[ key ]( undefined, true );
+		}
+	};
+
+// Functions to create xhrs
+function createStandardXHR() {
+	try {
+		return new window.XMLHttpRequest();
+	} catch( e ) {}
+}
+
+function createActiveXHR() {
+	try {
+		return new window.ActiveXObject("Microsoft.XMLHTTP");
+	} catch( e ) {}
+}
+
+// Create the request object
+// (This is still attached to ajaxSettings for backward compatibility)
+jQuery.ajaxSettings.xhr = window.ActiveXObject ?
+	/* Microsoft failed to properly
+	 * implement the XMLHttpRequest in IE7 (can't request local files),
+	 * so we use the ActiveXObject when it is available
+	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
+	 * we need a fallback.
+	 */
+	function() {
+		return !this.isLocal && createStandardXHR() || createActiveXHR();
+	} :
+	// For all other browsers, use the standard XMLHttpRequest object
+	createStandardXHR;
+
+// Determine support properties
+xhrSupported = jQuery.ajaxSettings.xhr();
+jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+xhrSupported = jQuery.support.ajax = !!xhrSupported;
+
+// Create transport if the browser can provide an xhr
+if ( xhrSupported ) {
+
+	jQuery.ajaxTransport(function( s ) {
+		// Cross domain only allowed if supported through XMLHttpRequest
+		if ( !s.crossDomain || jQuery.support.cors ) {
+
+			var callback;
+
+			return {
+				send: function( headers, complete ) {
+
+					// Get a new xhr
+					var handle, i,
+						xhr = s.xhr();
+
+					// Open the socket
+					// Passing null username, generates a login popup on Opera (#2865)
+					if ( s.username ) {
+						xhr.open( s.type, s.url, s.async, s.username, s.password );
+					} else {
+						xhr.open( s.type, s.url, s.async );
+					}
+
+					// Apply custom fields if provided
+					if ( s.xhrFields ) {
+						for ( i in s.xhrFields ) {
+							xhr[ i ] = s.xhrFields[ i ];
+						}
+					}
+
+					// Override mime type if needed
+					if ( s.mimeType && xhr.overrideMimeType ) {
+						xhr.overrideMimeType( s.mimeType );
+					}
+
+					// X-Requested-With header
+					// For cross-domain requests, seeing as conditions for a preflight are
+					// akin to a jigsaw puzzle, we simply never set it to be sure.
+					// (it can always be set on a per-request basis or even using ajaxSetup)
+					// For same-domain requests, won't change header if already provided.
+					if ( !s.crossDomain && !headers["X-Requested-With"] ) {
+						headers["X-Requested-With"] = "XMLHttpRequest";
+					}
+
+					// Need an extra try/catch for cross domain requests in Firefox 3
+					try {
+						for ( i in headers ) {
+							xhr.setRequestHeader( i, headers[ i ] );
+						}
+					} catch( err ) {}
+
+					// Do send the request
+					// This may raise an exception which is actually
+					// handled in jQuery.ajax (so no try/catch here)
+					xhr.send( ( s.hasContent && s.data ) || null );
+
+					// Listener
+					callback = function( _, isAbort ) {
+						var status, responseHeaders, statusText, responses;
+
+						// Firefox throws exceptions when accessing properties
+						// of an xhr when a network error occurred
+						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
+						try {
+
+							// Was never called and is aborted or complete
+							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
+
+								// Only called once
+								callback = undefined;
+
+								// Do not keep as active anymore
+								if ( handle ) {
+									xhr.onreadystatechange = jQuery.noop;
+									if ( xhrOnUnloadAbort ) {
+										delete xhrCallbacks[ handle ];
+									}
+								}
+
+								// If it's an abort
+								if ( isAbort ) {
+									// Abort it manually if needed
+									if ( xhr.readyState !== 4 ) {
+										xhr.abort();
+									}
+								} else {
+									responses = {};
+									status = xhr.status;
+									responseHeaders = xhr.getAllResponseHeaders();
+
+									// When requesting binary data, IE6-9 will throw an exception
+									// on any attempt to access responseText (#11426)
+									if ( typeof xhr.responseText === "string" ) {
+										responses.text = xhr.responseText;
+									}
+
+									// Firefox throws an exception when accessing
+									// statusText for faulty cross-domain requests
+									try {
+										statusText = xhr.statusText;
+									} catch( e ) {
+										// We normalize with Webkit giving an empty statusText
+										statusText = "";
+									}
+
+									// Filter status for non standard behaviors
+
+									// If the request is local and we have data: assume a success
+									// (success with no data won't get notified, that's the best we
+									// can do given current implementations)
+									if ( !status && s.isLocal && !s.crossDomain ) {
+										status = responses.text ? 200 : 404;
+									// IE - #1450: sometimes returns 1223 when it should be 204
+									} else if ( status === 1223 ) {
+										status = 204;
+									}
+								}
+							}
+						} catch( firefoxAccessException ) {
+							if ( !isAbort ) {
+								complete( -1, firefoxAccessException );
+							}
+						}
+
+						// Call complete if needed
+						if ( responses ) {
+							complete( status, statusText, responses, responseHeaders );
+						}
+					};
+
+					if ( !s.async ) {
+						// if we're in sync mode we fire the callback
+						callback();
+					} else if ( xhr.readyState === 4 ) {
+						// (IE6 & IE7) if it's in cache and has been
+						// retrieved directly we need to fire the callback
+						setTimeout( callback );
+					} else {
+						handle = ++xhrId;
+						if ( xhrOnUnloadAbort ) {
+							// Create the active xhrs callbacks list if needed
+							// and attach the unload handler
+							if ( !xhrCallbacks ) {
+								xhrCallbacks = {};
+								jQuery( window ).unload( xhrOnUnloadAbort );
+							}
+							// Add to list of active xhrs callbacks
+							xhrCallbacks[ handle ] = callback;
+						}
+						xhr.onreadystatechange = callback;
+					}
+				},
+
+				abort: function() {
+					if ( callback ) {
+						callback( undefined, true );
+					}
+				}
+			};
+		}
+	});
+}
+var fxNow, timerId,
+	rfxtypes = /^(?:toggle|show|hide)$/,
+	rfxnum = new RegExp( "^(?:([+-])=|)(" + core_pnum + ")([a-z%]*)$", "i" ),
+	rrun = /queueHooks$/,
+	animationPrefilters = [ defaultPrefilter ],
+	tweeners = {
+		"*": [function( prop, value ) {
+			var end, unit,
+				tween = this.createTween( prop, value ),
+				parts = rfxnum.exec( value ),
+				target = tween.cur(),
+				start = +target || 0,
+				scale = 1,
+				maxIterations = 20;
+
+			if ( parts ) {
+				end = +parts[2];
+				unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+
+				// We need to compute starting value
+				if ( unit !== "px" && start ) {
+					// Iteratively approximate from a nonzero starting point
+					// Prefer the current property, because this process will be trivial if it uses the same units
+					// Fallback to end or a simple constant
+					start = jQuery.css( tween.elem, prop, true ) || end || 1;
+
+					do {
+						// If previous iteration zeroed out, double until we get *something*
+						// Use a string for doubling factor so we don't accidentally see scale as unchanged below
+						scale = scale || ".5";
+
+						// Adjust and apply
+						start = start / scale;
+						jQuery.style( tween.elem, prop, start + unit );
+
+					// Update scale, tolerating zero or NaN from tween.cur()
+					// And breaking the loop if scale is unchanged or perfect, or if we've just had enough
+					} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
+				}
+
+				tween.unit = unit;
+				tween.start = start;
+				// If a +=/-= token was provided, we're doing a relative animation
+				tween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end;
+			}
+			return tween;
+		}]
+	};
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+	setTimeout(function() {
+		fxNow = undefined;
+	});
+	return ( fxNow = jQuery.now() );
+}
+
+function createTweens( animation, props ) {
+	jQuery.each( props, function( prop, value ) {
+		var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
+			index = 0,
+			length = collection.length;
+		for ( ; index < length; index++ ) {
+			if ( collection[ index ].call( animation, prop, value ) ) {
+
+				// we're done with this property
+				return;
+			}
+		}
+	});
+}
+
+function Animation( elem, properties, options ) {
+	var result,
+		stopped,
+		index = 0,
+		length = animationPrefilters.length,
+		deferred = jQuery.Deferred().always( function() {
+			// don't match elem in the :animated selector
+			delete tick.elem;
+		}),
+		tick = function() {
+			if ( stopped ) {
+				return false;
+			}
+			var currentTime = fxNow || createFxNow(),
+				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+				// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
+				temp = remaining / animation.duration || 0,
+				percent = 1 - temp,
+				index = 0,
+				length = animation.tweens.length;
+
+			for ( ; index < length ; index++ ) {
+				animation.tweens[ index ].run( percent );
+			}
+
+			deferred.notifyWith( elem, [ animation, percent, remaining ]);
+
+			if ( percent < 1 && length ) {
+				return remaining;
+			} else {
+				deferred.resolveWith( elem, [ animation ] );
+				return false;
+			}
+		},
+		animation = deferred.promise({
+			elem: elem,
+			props: jQuery.extend( {}, properties ),
+			opts: jQuery.extend( true, { specialEasing: {} }, options ),
+			originalProperties: properties,
+			originalOptions: options,
+			startTime: fxNow || createFxNow(),
+			duration: options.duration,
+			tweens: [],
+			createTween: function( prop, end ) {
+				var tween = jQuery.Tween( elem, animation.opts, prop, end,
+						animation.opts.specialEasing[ prop ] || animation.opts.easing );
+				animation.tweens.push( tween );
+				return tween;
+			},
+			stop: function( gotoEnd ) {
+				var index = 0,
+					// if we are going to the end, we want to run all the tweens
+					// otherwise we skip this part
+					length = gotoEnd ? animation.tweens.length : 0;
+				if ( stopped ) {
+					return this;
+				}
+				stopped = true;
+				for ( ; index < length ; index++ ) {
+					animation.tweens[ index ].run( 1 );
+				}
+
+				// resolve when we played the last frame
+				// otherwise, reject
+				if ( gotoEnd ) {
+					deferred.resolveWith( elem, [ animation, gotoEnd ] );
+				} else {
+					deferred.rejectWith( elem, [ animation, gotoEnd ] );
+				}
+				return this;
+			}
+		}),
+		props = animation.props;
+
+	propFilter( props, animation.opts.specialEasing );
+
+	for ( ; index < length ; index++ ) {
+		result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
+		if ( result ) {
+			return result;
+		}
+	}
+
+	createTweens( animation, props );
+
+	if ( jQuery.isFunction( animation.opts.start ) ) {
+		animation.opts.start.call( elem, animation );
+	}
+
+	jQuery.fx.timer(
+		jQuery.extend( tick, {
+			elem: elem,
+			anim: animation,
+			queue: animation.opts.queue
+		})
+	);
+
+	// attach callbacks from options
+	return animation.progress( animation.opts.progress )
+		.done( animation.opts.done, animation.opts.complete )
+		.fail( animation.opts.fail )
+		.always( animation.opts.always );
+}
+
+function propFilter( props, specialEasing ) {
+	var value, name, index, easing, hooks;
+
+	// camelCase, specialEasing and expand cssHook pass
+	for ( index in props ) {
+		name = jQuery.camelCase( index );
+		easing = specialEasing[ name ];
+		value = props[ index ];
+		if ( jQuery.isArray( value ) ) {
+			easing = value[ 1 ];
+			value = props[ index ] = value[ 0 ];
+		}
+
+		if ( index !== name ) {
+			props[ name ] = value;
+			delete props[ index ];
+		}
+
+		hooks = jQuery.cssHooks[ name ];
+		if ( hooks && "expand" in hooks ) {
+			value = hooks.expand( value );
+			delete props[ name ];
+
+			// not quite $.extend, this wont overwrite keys already present.
+			// also - reusing 'index' from above because we have the correct "name"
+			for ( index in value ) {
+				if ( !( index in props ) ) {
+					props[ index ] = value[ index ];
+					specialEasing[ index ] = easing;
+				}
+			}
+		} else {
+			specialEasing[ name ] = easing;
+		}
+	}
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+
+	tweener: function( props, callback ) {
+		if ( jQuery.isFunction( props ) ) {
+			callback = props;
+			props = [ "*" ];
+		} else {
+			props = props.split(" ");
+		}
+
+		var prop,
+			index = 0,
+			length = props.length;
+
+		for ( ; index < length ; index++ ) {
+			prop = props[ index ];
+			tweeners[ prop ] = tweeners[ prop ] || [];
+			tweeners[ prop ].unshift( callback );
+		}
+	},
+
+	prefilter: function( callback, prepend ) {
+		if ( prepend ) {
+			animationPrefilters.unshift( callback );
+		} else {
+			animationPrefilters.push( callback );
+		}
+	}
+});
+
+function defaultPrefilter( elem, props, opts ) {
+	/*jshint validthis:true */
+	var prop, index, length,
+		value, dataShow, toggle,
+		tween, hooks, oldfire,
+		anim = this,
+		style = elem.style,
+		orig = {},
+		handled = [],
+		hidden = elem.nodeType && isHidden( elem );
+
+	// handle queue: false promises
+	if ( !opts.queue ) {
+		hooks = jQuery._queueHooks( elem, "fx" );
+		if ( hooks.unqueued == null ) {
+			hooks.unqueued = 0;
+			oldfire = hooks.empty.fire;
+			hooks.empty.fire = function() {
+				if ( !hooks.unqueued ) {
+					oldfire();
+				}
+			};
+		}
+		hooks.unqueued++;
+
+		anim.always(function() {
+			// doing this makes sure that the complete handler will be called
+			// before this completes
+			anim.always(function() {
+				hooks.unqueued--;
+				if ( !jQuery.queue( elem, "fx" ).length ) {
+					hooks.empty.fire();
+				}
+			});
+		});
+	}
+
+	// height/width overflow pass
+	if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
+		// Make sure that nothing sneaks out
+		// Record all 3 overflow attributes because IE does not
+		// change the overflow attribute when overflowX and
+		// overflowY are set to the same value
+		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+		// Set display property to inline-block for height/width
+		// animations on inline elements that are having width/height animated
+		if ( jQuery.css( elem, "display" ) === "inline" &&
+				jQuery.css( elem, "float" ) === "none" ) {
+
+			// inline-level elements accept inline-block;
+			// block-level elements need to be inline with layout
+			if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) {
+				style.display = "inline-block";
+
+			} else {
+				style.zoom = 1;
+			}
+		}
+	}
+
+	if ( opts.overflow ) {
+		style.overflow = "hidden";
+		if ( !jQuery.support.shrinkWrapBlocks ) {
+			anim.always(function() {
+				style.overflow = opts.overflow[ 0 ];
+				style.overflowX = opts.overflow[ 1 ];
+				style.overflowY = opts.overflow[ 2 ];
+			});
+		}
+	}
+
+
+	// show/hide pass
+	for ( index in props ) {
+		value = props[ index ];
+		if ( rfxtypes.exec( value ) ) {
+			delete props[ index ];
+			toggle = toggle || value === "toggle";
+			if ( value === ( hidden ? "hide" : "show" ) ) {
+				continue;
+			}
+			handled.push( index );
+		}
+	}
+
+	length = handled.length;
+	if ( length ) {
+		dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} );
+		if ( "hidden" in dataShow ) {
+			hidden = dataShow.hidden;
+		}
+
+		// store state if its toggle - enables .stop().toggle() to "reverse"
+		if ( toggle ) {
+			dataShow.hidden = !hidden;
+		}
+		if ( hidden ) {
+			jQuery( elem ).show();
+		} else {
+			anim.done(function() {
+				jQuery( elem ).hide();
+			});
+		}
+		anim.done(function() {
+			var prop;
+			jQuery._removeData( elem, "fxshow" );
+			for ( prop in orig ) {
+				jQuery.style( elem, prop, orig[ prop ] );
+			}
+		});
+		for ( index = 0 ; index < length ; index++ ) {
+			prop = handled[ index ];
+			tween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 );
+			orig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop );
+
+			if ( !( prop in dataShow ) ) {
+				dataShow[ prop ] = tween.start;
+				if ( hidden ) {
+					tween.end = tween.start;
+					tween.start = prop === "width" || prop === "height" ? 1 : 0;
+				}
+			}
+		}
+	}
+}
+
+function Tween( elem, options, prop, end, easing ) {
+	return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+	constructor: Tween,
+	init: function( elem, options, prop, end, easing, unit ) {
+		this.elem = elem;
+		this.prop = prop;
+		this.easing = easing || "swing";
+		this.options = options;
+		this.start = this.now = this.cur();
+		this.end = end;
+		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+	},
+	cur: function() {
+		var hooks = Tween.propHooks[ this.prop ];
+
+		return hooks && hooks.get ?
+			hooks.get( this ) :
+			Tween.propHooks._default.get( this );
+	},
+	run: function( percent ) {
+		var eased,
+			hooks = Tween.propHooks[ this.prop ];
+
+		if ( this.options.duration ) {
+			this.pos = eased = jQuery.easing[ this.easing ](
+				percent, this.options.duration * percent, 0, 1, this.options.duration
+			);
+		} else {
+			this.pos = eased = percent;
+		}
+		this.now = ( this.end - this.start ) * eased + this.start;
+
+		if ( this.options.step ) {
+			this.options.step.call( this.elem, this.now, this );
+		}
+
+		if ( hooks && hooks.set ) {
+			hooks.set( this );
+		} else {
+			Tween.propHooks._default.set( this );
+		}
+		return this;
+	}
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+	_default: {
+		get: function( tween ) {
+			var result;
+
+			if ( tween.elem[ tween.prop ] != null &&
+				(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
+				return tween.elem[ tween.prop ];
+			}
+
+			// passing an empty string as a 3rd parameter to .css will automatically
+			// attempt a parseFloat and fallback to a string if the parse fails
+			// so, simple values such as "10px" are parsed to Float.
+			// complex values such as "rotate(1rad)" are returned as is.
+			result = jQuery.css( tween.elem, tween.prop, "" );
+			// Empty strings, null, undefined and "auto" are converted to 0.
+			return !result || result === "auto" ? 0 : result;
+		},
+		set: function( tween ) {
+			// use step hook for back compat - use cssHook if its there - use .style if its
+			// available and use plain properties where available
+			if ( jQuery.fx.step[ tween.prop ] ) {
+				jQuery.fx.step[ tween.prop ]( tween );
+			} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
+				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+			} else {
+				tween.elem[ tween.prop ] = tween.now;
+			}
+		}
+	}
+};
+
+// Remove in 2.0 - this supports IE8's panic based approach
+// to setting things on disconnected nodes
+
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+	set: function( tween ) {
+		if ( tween.elem.nodeType && tween.elem.parentNode ) {
+			tween.elem[ tween.prop ] = tween.now;
+		}
+	}
+};
+
+jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
+	var cssFn = jQuery.fn[ name ];
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return speed == null || typeof speed === "boolean" ?
+			cssFn.apply( this, arguments ) :
+			this.animate( genFx( name, true ), speed, easing, callback );
+	};
+});
+
+jQuery.fn.extend({
+	fadeTo: function( speed, to, easing, callback ) {
+
+		// show any hidden elements after setting opacity to 0
+		return this.filter( isHidden ).css( "opacity", 0 ).show()
+
+			// animate to the value specified
+			.end().animate({ opacity: to }, speed, easing, callback );
+	},
+	animate: function( prop, speed, easing, callback ) {
+		var empty = jQuery.isEmptyObject( prop ),
+			optall = jQuery.speed( speed, easing, callback ),
+			doAnimation = function() {
+				// Operate on a copy of prop so per-property easing won't be lost
+				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+				doAnimation.finish = function() {
+					anim.stop( true );
+				};
+				// Empty animations, or finishing resolves immediately
+				if ( empty || jQuery._data( this, "finish" ) ) {
+					anim.stop( true );
+				}
+			};
+			doAnimation.finish = doAnimation;
+
+		return empty || optall.queue === false ?
+			this.each( doAnimation ) :
+			this.queue( optall.queue, doAnimation );
+	},
+	stop: function( type, clearQueue, gotoEnd ) {
+		var stopQueue = function( hooks ) {
+			var stop = hooks.stop;
+			delete hooks.stop;
+			stop( gotoEnd );
+		};
+
+		if ( typeof type !== "string" ) {
+			gotoEnd = clearQueue;
+			clearQueue = type;
+			type = undefined;
+		}
+		if ( clearQueue && type !== false ) {
+			this.queue( type || "fx", [] );
+		}
+
+		return this.each(function() {
+			var dequeue = true,
+				index = type != null && type + "queueHooks",
+				timers = jQuery.timers,
+				data = jQuery._data( this );
+
+			if ( index ) {
+				if ( data[ index ] && data[ index ].stop ) {
+					stopQueue( data[ index ] );
+				}
+			} else {
+				for ( index in data ) {
+					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+						stopQueue( data[ index ] );
+					}
+				}
+			}
+
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
+					timers[ index ].anim.stop( gotoEnd );
+					dequeue = false;
+					timers.splice( index, 1 );
+				}
+			}
+
+			// start the next in the queue if the last step wasn't forced
+			// timers currently will call their complete callbacks, which will dequeue
+			// but only if they were gotoEnd
+			if ( dequeue || !gotoEnd ) {
+				jQuery.dequeue( this, type );
+			}
+		});
+	},
+	finish: function( type ) {
+		if ( type !== false ) {
+			type = type || "fx";
+		}
+		return this.each(function() {
+			var index,
+				data = jQuery._data( this ),
+				queue = data[ type + "queue" ],
+				hooks = data[ type + "queueHooks" ],
+				timers = jQuery.timers,
+				length = queue ? queue.length : 0;
+
+			// enable finishing flag on private data
+			data.finish = true;
+
+			// empty the queue first
+			jQuery.queue( this, type, [] );
+
+			if ( hooks && hooks.cur && hooks.cur.finish ) {
+				hooks.cur.finish.call( this );
+			}
+
+			// look for any active animations, and finish them
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+					timers[ index ].anim.stop( true );
+					timers.splice( index, 1 );
+				}
+			}
+
+			// look for any animations in the old queue and finish them
+			for ( index = 0; index < length; index++ ) {
+				if ( queue[ index ] && queue[ index ].finish ) {
+					queue[ index ].finish.call( this );
+				}
+			}
+
+			// turn off finishing flag
+			delete data.finish;
+		});
+	}
+});
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+	var which,
+		attrs = { height: type },
+		i = 0;
+
+	// if we include width, step value is 1 to do all cssExpand values,
+	// if we don't include width, step value is 2 to skip over Left and Right
+	includeWidth = includeWidth? 1 : 0;
+	for( ; i < 4 ; i += 2 - includeWidth ) {
+		which = cssExpand[ i ];
+		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+	}
+
+	if ( includeWidth ) {
+		attrs.opacity = attrs.width = type;
+	}
+
+	return attrs;
+}
+
+// Generate shortcuts for custom animations
+jQuery.each({
+	slideDown: genFx("show"),
+	slideUp: genFx("hide"),
+	slideToggle: genFx("toggle"),
+	fadeIn: { opacity: "show" },
+	fadeOut: { opacity: "hide" },
+	fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return this.animate( props, speed, easing, callback );
+	};
+});
+
+jQuery.speed = function( speed, easing, fn ) {
+	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+		complete: fn || !fn && easing ||
+			jQuery.isFunction( speed ) && speed,
+		duration: speed,
+		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+	};
+
+	opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+		opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+
+	// normalize opt.queue - true/undefined/null -> "fx"
+	if ( opt.queue == null || opt.queue === true ) {
+		opt.queue = "fx";
+	}
+
+	// Queueing
+	opt.old = opt.complete;
+
+	opt.complete = function() {
+		if ( jQuery.isFunction( opt.old ) ) {
+			opt.old.call( this );
+		}
+
+		if ( opt.queue ) {
+			jQuery.dequeue( this, opt.queue );
+		}
+	};
+
+	return opt;
+};
+
+jQuery.easing = {
+	linear: function( p ) {
+		return p;
+	},
+	swing: function( p ) {
+		return 0.5 - Math.cos( p*Math.PI ) / 2;
+	}
+};
+
+jQuery.timers = [];
+jQuery.fx = Tween.prototype.init;
+jQuery.fx.tick = function() {
+	var timer,
+		timers = jQuery.timers,
+		i = 0;
+
+	fxNow = jQuery.now();
+
+	for ( ; i < timers.length; i++ ) {
+		timer = timers[ i ];
+		// Checks the timer has not already been removed
+		if ( !timer() && timers[ i ] === timer ) {
+			timers.splice( i--, 1 );
+		}
+	}
+
+	if ( !timers.length ) {
+		jQuery.fx.stop();
+	}
+	fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+	if ( timer() && jQuery.timers.push( timer ) ) {
+		jQuery.fx.start();
+	}
+};
+
+jQuery.fx.interval = 13;
+
+jQuery.fx.start = function() {
+	if ( !timerId ) {
+		timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
+	}
+};
+
+jQuery.fx.stop = function() {
+	clearInterval( timerId );
+	timerId = null;
+};
+
+jQuery.fx.speeds = {
+	slow: 600,
+	fast: 200,
+	// Default speed
+	_default: 400
+};
+
+// Back Compat <1.8 extension point
+jQuery.fx.step = {};
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+	jQuery.expr.filters.animated = function( elem ) {
+		return jQuery.grep(jQuery.timers, function( fn ) {
+			return elem === fn.elem;
+		}).length;
+	};
+}
+jQuery.fn.offset = function( options ) {
+	if ( arguments.length ) {
+		return options === undefined ?
+			this :
+			this.each(function( i ) {
+				jQuery.offset.setOffset( this, options, i );
+			});
+	}
+
+	var docElem, win,
+		box = { top: 0, left: 0 },
+		elem = this[ 0 ],
+		doc = elem && elem.ownerDocument;
+
+	if ( !doc ) {
+		return;
+	}
+
+	docElem = doc.documentElement;
+
+	// Make sure it's not a disconnected DOM node
+	if ( !jQuery.contains( docElem, elem ) ) {
+		return box;
+	}
+
+	// If we don't have gBCR, just use 0,0 rather than error
+	// BlackBerry 5, iOS 3 (original iPhone)
+	if ( typeof elem.getBoundingClientRect !== core_strundefined ) {
+		box = elem.getBoundingClientRect();
+	}
+	win = getWindow( doc );
+	return {
+		top: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),
+		left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
+	};
+};
+
+jQuery.offset = {
+
+	setOffset: function( elem, options, i ) {
+		var position = jQuery.css( elem, "position" );
+
+		// set position first, in-case top/left are set even on static elem
+		if ( position === "static" ) {
+			elem.style.position = "relative";
+		}
+
+		var curElem = jQuery( elem ),
+			curOffset = curElem.offset(),
+			curCSSTop = jQuery.css( elem, "top" ),
+			curCSSLeft = jQuery.css( elem, "left" ),
+			calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
+			props = {}, curPosition = {}, curTop, curLeft;
+
+		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+		if ( calculatePosition ) {
+			curPosition = curElem.position();
+			curTop = curPosition.top;
+			curLeft = curPosition.left;
+		} else {
+			curTop = parseFloat( curCSSTop ) || 0;
+			curLeft = parseFloat( curCSSLeft ) || 0;
+		}
+
+		if ( jQuery.isFunction( options ) ) {
+			options = options.call( elem, i, curOffset );
+		}
+
+		if ( options.top != null ) {
+			props.top = ( options.top - curOffset.top ) + curTop;
+		}
+		if ( options.left != null ) {
+			props.left = ( options.left - curOffset.left ) + curLeft;
+		}
+
+		if ( "using" in options ) {
+			options.using.call( elem, props );
+		} else {
+			curElem.css( props );
+		}
+	}
+};
+
+
+jQuery.fn.extend({
+
+	position: function() {
+		if ( !this[ 0 ] ) {
+			return;
+		}
+
+		var offsetParent, offset,
+			parentOffset = { top: 0, left: 0 },
+			elem = this[ 0 ];
+
+		// fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent
+		if ( jQuery.css( elem, "position" ) === "fixed" ) {
+			// we assume that getBoundingClientRect is available when computed position is fixed
+			offset = elem.getBoundingClientRect();
+		} else {
+			// Get *real* offsetParent
+			offsetParent = this.offsetParent();
+
+			// Get correct offsets
+			offset = this.offset();
+			if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
+				parentOffset = offsetParent.offset();
+			}
+
+			// Add offsetParent borders
+			parentOffset.top  += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
+			parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
+		}
+
+		// Subtract parent offsets and element margins
+		// note: when an element has margin: auto the offsetLeft and marginLeft
+		// are the same in Safari causing offset.left to incorrectly be 0
+		return {
+			top:  offset.top  - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)
+		};
+	},
+
+	offsetParent: function() {
+		return this.map(function() {
+			var offsetParent = this.offsetParent || document.documentElement;
+			while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position") === "static" ) ) {
+				offsetParent = offsetParent.offsetParent;
+			}
+			return offsetParent || document.documentElement;
+		});
+	}
+});
+
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
+	var top = /Y/.test( prop );
+
+	jQuery.fn[ method ] = function( val ) {
+		return jQuery.access( this, function( elem, method, val ) {
+			var win = getWindow( elem );
+
+			if ( val === undefined ) {
+				return win ? (prop in win) ? win[ prop ] :
+					win.document.documentElement[ method ] :
+					elem[ method ];
+			}
+
+			if ( win ) {
+				win.scrollTo(
+					!top ? val : jQuery( win ).scrollLeft(),
+					top ? val : jQuery( win ).scrollTop()
+				);
+
+			} else {
+				elem[ method ] = val;
+			}
+		}, method, val, arguments.length, null );
+	};
+});
+
+function getWindow( elem ) {
+	return jQuery.isWindow( elem ) ?
+		elem :
+		elem.nodeType === 9 ?
+			elem.defaultView || elem.parentWindow :
+			false;
+}
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
+		// margin is only for outerHeight, outerWidth
+		jQuery.fn[ funcName ] = function( margin, value ) {
+			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+			return jQuery.access( this, function( elem, type, value ) {
+				var doc;
+
+				if ( jQuery.isWindow( elem ) ) {
+					// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
+					// isn't a whole lot we can do. See pull request at this URL for discussion:
+					// https://github.com/jquery/jquery/pull/764
+					return elem.document.documentElement[ "client" + name ];
+				}
+
+				// Get document width or height
+				if ( elem.nodeType === 9 ) {
+					doc = elem.documentElement;
+
+					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
+					// unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
+					return Math.max(
+						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+						elem.body[ "offset" + name ], doc[ "offset" + name ],
+						doc[ "client" + name ]
+					);
+				}
+
+				return value === undefined ?
+					// Get width or height on the element, requesting but not forcing parseFloat
+					jQuery.css( elem, type, extra ) :
+
+					// Set width or height on the element
+					jQuery.style( elem, type, value, extra );
+			}, type, chainable ? margin : undefined, chainable, null );
+		};
+	});
+});
+// Limit scope pollution from any deprecated API
+// (function() {
+
+// })();
+// Expose jQuery to the global object
+window.jQuery = window.$ = jQuery;
+
+// Expose jQuery as an AMD module, but only for AMD loaders that
+// understand the issues with loading multiple versions of jQuery
+// in a page that all might call define(). The loader will indicate
+// they have special allowances for multiple jQuery versions by
+// specifying define.amd.jQuery = true. Register as a named module,
+// since jQuery can be concatenated with other files that may use define,
+// but not use a proper concatenation script that understands anonymous
+// AMD modules. A named AMD is safest and most robust way to register.
+// Lowercase jquery is used because AMD module names are derived from
+// file names, and jQuery is normally delivered in a lowercase file name.
+// Do this after creating the global so that if an AMD module wants to call
+// noConflict to hide this version of jQuery, it will work.
+if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
+	define( "jquery", [], function () { return jQuery; } );
+}
+
+})( window );
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/website/third-party-libs/jquery.min.js b/vendor/dimsemenov/magnific-popup/website/third-party-libs/jquery.min.js
new file mode 100644
index 0000000000..50d1b22f27
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/third-party-libs/jquery.min.js
@@ -0,0 +1,4 @@
+/*! jQuery v1.9.0 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license */(function(e,t){"use strict";function n(e){var t=e.length,n=st.type(e);return st.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}function r(e){var t=Tt[e]={};return st.each(e.match(lt)||[],function(e,n){t[n]=!0}),t}function i(e,n,r,i){if(st.acceptData(e)){var o,a,s=st.expando,u="string"==typeof n,l=e.nodeType,c=l?st.cache:e,f=l?e[s]:e[s]&&s;if(f&&c[f]&&(i||c[f].data)||!u||r!==t)return f||(l?e[s]=f=K.pop()||st.guid++:f=s),c[f]||(c[f]={},l||(c[f].toJSON=st.noop)),("object"==typeof n||"function"==typeof n)&&(i?c[f]=st.extend(c[f],n):c[f].data=st.extend(c[f].data,n)),o=c[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[st.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[st.camelCase(n)])):a=o,a}}function o(e,t,n){if(st.acceptData(e)){var r,i,o,a=e.nodeType,u=a?st.cache:e,l=a?e[st.expando]:st.expando;if(u[l]){if(t&&(r=n?u[l]:u[l].data)){st.isArray(t)?t=t.concat(st.map(t,st.camelCase)):t in r?t=[t]:(t=st.camelCase(t),t=t in r?[t]:t.split(" "));for(i=0,o=t.length;o>i;i++)delete r[t[i]];if(!(n?s:st.isEmptyObject)(r))return}(n||(delete u[l].data,s(u[l])))&&(a?st.cleanData([e],!0):st.support.deleteExpando||u!=u.window?delete u[l]:u[l]=null)}}}function a(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(Nt,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:wt.test(r)?st.parseJSON(r):r}catch(o){}st.data(e,n,r)}else r=t}return r}function s(e){var t;for(t in e)if(("data"!==t||!st.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function u(){return!0}function l(){return!1}function c(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}function f(e,t,n){if(t=t||0,st.isFunction(t))return st.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return st.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=st.grep(e,function(e){return 1===e.nodeType});if(Wt.test(t))return st.filter(t,r,!n);t=st.filter(t,r)}return st.grep(e,function(e){return st.inArray(e,t)>=0===n})}function p(e){var t=zt.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function d(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function h(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function g(e){var t=nn.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function m(e,t){for(var n,r=0;null!=(n=e[r]);r++)st._data(n,"globalEval",!t||st._data(t[r],"globalEval"))}function y(e,t){if(1===t.nodeType&&st.hasData(e)){var n,r,i,o=st._data(e),a=st._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)st.event.add(t,n,s[n][r])}a.data&&(a.data=st.extend({},a.data))}}function v(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!st.support.noCloneEvent&&t[st.expando]){r=st._data(t);for(i in r.events)st.removeEvent(t,i,r.handle);t.removeAttribute(st.expando)}"script"===n&&t.text!==e.text?(h(t).text=e.text,g(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),st.support.html5Clone&&e.innerHTML&&!st.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Zt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}function b(e,n){var r,i,o=0,a=e.getElementsByTagName!==t?e.getElementsByTagName(n||"*"):e.querySelectorAll!==t?e.querySelectorAll(n||"*"):t;if(!a)for(a=[],r=e.childNodes||e;null!=(i=r[o]);o++)!n||st.nodeName(i,n)?a.push(i):st.merge(a,b(i,n));return n===t||n&&st.nodeName(e,n)?st.merge([e],a):a}function x(e){Zt.test(e.type)&&(e.defaultChecked=e.checked)}function T(e,t){if(t in e)return t;for(var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Nn.length;i--;)if(t=Nn[i]+n,t in e)return t;return r}function w(e,t){return e=t||e,"none"===st.css(e,"display")||!st.contains(e.ownerDocument,e)}function N(e,t){for(var n,r=[],i=0,o=e.length;o>i;i++)n=e[i],n.style&&(r[i]=st._data(n,"olddisplay"),t?(r[i]||"none"!==n.style.display||(n.style.display=""),""===n.style.display&&w(n)&&(r[i]=st._data(n,"olddisplay",S(n.nodeName)))):r[i]||w(n)||st._data(n,"olddisplay",st.css(n,"display")));for(i=0;o>i;i++)n=e[i],n.style&&(t&&"none"!==n.style.display&&""!==n.style.display||(n.style.display=t?r[i]||"":"none"));return e}function C(e,t,n){var r=mn.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function k(e,t,n,r,i){for(var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;4>o;o+=2)"margin"===n&&(a+=st.css(e,n+wn[o],!0,i)),r?("content"===n&&(a-=st.css(e,"padding"+wn[o],!0,i)),"margin"!==n&&(a-=st.css(e,"border"+wn[o]+"Width",!0,i))):(a+=st.css(e,"padding"+wn[o],!0,i),"padding"!==n&&(a+=st.css(e,"border"+wn[o]+"Width",!0,i)));return a}function E(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=ln(e),a=st.support.boxSizing&&"border-box"===st.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=un(e,t,o),(0>i||null==i)&&(i=e.style[t]),yn.test(i))return i;r=a&&(st.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+k(e,t,n||(a?"border":"content"),r,o)+"px"}function S(e){var t=V,n=bn[e];return n||(n=A(e,t),"none"!==n&&n||(cn=(cn||st("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(cn[0].contentWindow||cn[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=A(e,t),cn.detach()),bn[e]=n),n}function A(e,t){var n=st(t.createElement(e)).appendTo(t.body),r=st.css(n[0],"display");return n.remove(),r}function j(e,t,n,r){var i;if(st.isArray(t))st.each(t,function(t,i){n||kn.test(e)?r(e,i):j(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==st.type(t))r(e,t);else for(i in t)j(e+"["+i+"]",t[i],n,r)}function D(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(lt)||[];if(st.isFunction(n))for(;r=o[i++];)"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function L(e,n,r,i){function o(u){var l;return a[u]=!0,st.each(e[u]||[],function(e,u){var c=u(n,r,i);return"string"!=typeof c||s||a[c]?s?!(l=c):t:(n.dataTypes.unshift(c),o(c),!1)}),l}var a={},s=e===$n;return o(n.dataTypes[0])||!a["*"]&&o("*")}function H(e,n){var r,i,o=st.ajaxSettings.flatOptions||{};for(r in n)n[r]!==t&&((o[r]?e:i||(i={}))[r]=n[r]);return i&&st.extend(!0,e,i),e}function M(e,n,r){var i,o,a,s,u=e.contents,l=e.dataTypes,c=e.responseFields;for(o in c)o in r&&(n[c[o]]=r[o]);for(;"*"===l[0];)l.shift(),i===t&&(i=e.mimeType||n.getResponseHeader("Content-Type"));if(i)for(o in u)if(u[o]&&u[o].test(i)){l.unshift(o);break}if(l[0]in r)a=l[0];else{for(o in r){if(!l[0]||e.converters[o+" "+l[0]]){a=o;break}s||(s=o)}a=a||s}return a?(a!==l[0]&&l.unshift(a),r[a]):t}function q(e,t){var n,r,i,o,a={},s=0,u=e.dataTypes.slice(),l=u[0];if(e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u[1])for(n in e.converters)a[n.toLowerCase()]=e.converters[n];for(;i=u[++s];)if("*"!==i){if("*"!==l&&l!==i){if(n=a[l+" "+i]||a["* "+i],!n)for(r in a)if(o=r.split(" "),o[1]===i&&(n=a[l+" "+o[0]]||a["* "+o[0]])){n===!0?n=a[r]:a[r]!==!0&&(i=o[0],u.splice(s--,0,i));break}if(n!==!0)if(n&&e["throws"])t=n(t);else try{t=n(t)}catch(c){return{state:"parsererror",error:n?c:"No conversion from "+l+" to "+i}}}l=i}return{state:"success",data:t}}function _(){try{return new e.XMLHttpRequest}catch(t){}}function F(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}function O(){return setTimeout(function(){Qn=t}),Qn=st.now()}function B(e,t){st.each(t,function(t,n){for(var r=(rr[t]||[]).concat(rr["*"]),i=0,o=r.length;o>i;i++)if(r[i].call(e,t,n))return})}function P(e,t,n){var r,i,o=0,a=nr.length,s=st.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var t=Qn||O(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;u>a;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),1>o&&u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:st.extend({},t),opts:st.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Qn||O(),duration:n.duration,tweens:[],createTween:function(t,n){var r=st.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)l.tweens[n].run(1);return t?s.resolveWith(e,[l,t]):s.rejectWith(e,[l,t]),this}}),c=l.props;for(R(c,l.opts.specialEasing);a>o;o++)if(r=nr[o].call(l,e,c,l.opts))return r;return B(l,c),st.isFunction(l.opts.start)&&l.opts.start.call(e,l),st.fx.timer(st.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function R(e,t){var n,r,i,o,a;for(n in e)if(r=st.camelCase(n),i=t[r],o=e[n],st.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=st.cssHooks[r],a&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}function W(e,t,n){var r,i,o,a,s,u,l,c,f,p=this,d=e.style,h={},g=[],m=e.nodeType&&w(e);n.queue||(c=st._queueHooks(e,"fx"),null==c.unqueued&&(c.unqueued=0,f=c.empty.fire,c.empty.fire=function(){c.unqueued||f()}),c.unqueued++,p.always(function(){p.always(function(){c.unqueued--,st.queue(e,"fx").length||c.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],"inline"===st.css(e,"display")&&"none"===st.css(e,"float")&&(st.support.inlineBlockNeedsLayout&&"inline"!==S(e.nodeName)?d.zoom=1:d.display="inline-block")),n.overflow&&(d.overflow="hidden",st.support.shrinkWrapBlocks||p.done(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}));for(r in t)if(o=t[r],Zn.exec(o)){if(delete t[r],u=u||"toggle"===o,o===(m?"hide":"show"))continue;g.push(r)}if(a=g.length){s=st._data(e,"fxshow")||st._data(e,"fxshow",{}),"hidden"in s&&(m=s.hidden),u&&(s.hidden=!m),m?st(e).show():p.done(function(){st(e).hide()}),p.done(function(){var t;st._removeData(e,"fxshow");for(t in h)st.style(e,t,h[t])});for(r=0;a>r;r++)i=g[r],l=p.createTween(i,m?s[i]:0),h[i]=s[i]||st.style(e,i),i in s||(s[i]=l.start,m&&(l.end=l.start,l.start="width"===i||"height"===i?1:0))}}function $(e,t,n,r,i){return new $.prototype.init(e,t,n,r,i)}function I(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=wn[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}function z(e){return st.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}var X,U,V=e.document,Y=e.location,J=e.jQuery,G=e.$,Q={},K=[],Z="1.9.0",et=K.concat,tt=K.push,nt=K.slice,rt=K.indexOf,it=Q.toString,ot=Q.hasOwnProperty,at=Z.trim,st=function(e,t){return new st.fn.init(e,t,X)},ut=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,lt=/\S+/g,ct=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,ft=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,pt=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,dt=/^[\],:{}\s]*$/,ht=/(?:^|:|,)(?:\s*\[)+/g,gt=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,mt=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,yt=/^-ms-/,vt=/-([\da-z])/gi,bt=function(e,t){return t.toUpperCase()},xt=function(){V.addEventListener?(V.removeEventListener("DOMContentLoaded",xt,!1),st.ready()):"complete"===V.readyState&&(V.detachEvent("onreadystatechange",xt),st.ready())};st.fn=st.prototype={jquery:Z,constructor:st,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:ft.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof st?n[0]:n,st.merge(this,st.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:V,!0)),pt.test(i[1])&&st.isPlainObject(n))for(i in n)st.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=V.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=V,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):st.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),st.makeArray(e,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return nt.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=st.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return st.each(this,e,t)},ready:function(e){return st.ready.promise().done(e),this},slice:function(){return this.pushStack(nt.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(st.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:tt,sort:[].sort,splice:[].splice},st.fn.init.prototype=st.fn,st.extend=st.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},u=2),"object"==typeof s||st.isFunction(s)||(s={}),l===u&&(s=this,--u);l>u;u++)if(null!=(e=arguments[u]))for(n in e)r=s[n],i=e[n],s!==i&&(c&&i&&(st.isPlainObject(i)||(o=st.isArray(i)))?(o?(o=!1,a=r&&st.isArray(r)?r:[]):a=r&&st.isPlainObject(r)?r:{},s[n]=st.extend(c,a,i)):i!==t&&(s[n]=i));return s},st.extend({noConflict:function(t){return e.$===st&&(e.$=G),t&&e.jQuery===st&&(e.jQuery=J),st},isReady:!1,readyWait:1,holdReady:function(e){e?st.readyWait++:st.ready(!0)},ready:function(e){if(e===!0?!--st.readyWait:!st.isReady){if(!V.body)return setTimeout(st.ready);st.isReady=!0,e!==!0&&--st.readyWait>0||(U.resolveWith(V,[st]),st.fn.trigger&&st(V).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===st.type(e)},isArray:Array.isArray||function(e){return"array"===st.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?Q[it.call(e)]||"object":typeof e},isPlainObject:function(e){if(!e||"object"!==st.type(e)||e.nodeType||st.isWindow(e))return!1;try{if(e.constructor&&!ot.call(e,"constructor")&&!ot.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||ot.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||V;var r=pt.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=st.buildFragment([e],t,i),i&&st(i).remove(),st.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=st.trim(n),n&&dt.test(n.replace(gt,"@").replace(mt,"]").replace(ht,"")))?Function("return "+n)():(st.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||st.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&st.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(yt,"ms-").replace(vt,bt)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,r){var i,o=0,a=e.length,s=n(e);if(r){if(s)for(;a>o&&(i=t.apply(e[o],r),i!==!1);o++);else for(o in e)if(i=t.apply(e[o],r),i===!1)break}else if(s)for(;a>o&&(i=t.call(e[o],o,e[o]),i!==!1);o++);else for(o in e)if(i=t.call(e[o],o,e[o]),i===!1)break;return e},trim:at&&!at.call("\ufeff\u00a0")?function(e){return null==e?"":at.call(e)}:function(e){return null==e?"":(e+"").replace(ct,"")},makeArray:function(e,t){var r=t||[];return null!=e&&(n(Object(e))?st.merge(r,"string"==typeof e?[e]:e):tt.call(r,e)),r},inArray:function(e,t,n){var r;if(t){if(rt)return rt.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else for(;n[o]!==t;)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,r){var i,o=0,a=e.length,s=n(e),u=[];if(s)for(;a>o;o++)i=t(e[o],o,r),null!=i&&(u[u.length]=i);else for(o in e)i=t(e[o],o,r),null!=i&&(u[u.length]=i);return et.apply([],u)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(r=e[n],n=e,e=r),st.isFunction(e)?(i=nt.call(arguments,2),o=function(){return e.apply(n||this,i.concat(nt.call(arguments)))},o.guid=e.guid=e.guid||st.guid++,o):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if("object"===st.type(r)){o=!0;for(u in r)st.access(e,n,u,r[u],!0,a,s)}else if(i!==t&&(o=!0,st.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(st(e),n)})),n))for(;l>u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),st.ready.promise=function(t){if(!U)if(U=st.Deferred(),"complete"===V.readyState)setTimeout(st.ready);else if(V.addEventListener)V.addEventListener("DOMContentLoaded",xt,!1),e.addEventListener("load",st.ready,!1);else{V.attachEvent("onreadystatechange",xt),e.attachEvent("onload",st.ready);var n=!1;try{n=null==e.frameElement&&V.documentElement}catch(r){}n&&n.doScroll&&function i(){if(!st.isReady){try{n.doScroll("left")}catch(e){return setTimeout(i,50)}st.ready()}}()}return U.promise(t)},st.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){Q["[object "+t+"]"]=t.toLowerCase()}),X=st(V);var Tt={};st.Callbacks=function(e){e="string"==typeof e?Tt[e]||r(e):st.extend({},e);var n,i,o,a,s,u,l=[],c=!e.once&&[],f=function(t){for(n=e.memory&&t,i=!0,u=a||0,a=0,s=l.length,o=!0;l&&s>u;u++)if(l[u].apply(t[0],t[1])===!1&&e.stopOnFalse){n=!1;break}o=!1,l&&(c?c.length&&f(c.shift()):n?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function r(t){st.each(t,function(t,n){var i=st.type(n);"function"===i?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==i&&r(n)})})(arguments),o?s=l.length:n&&(a=t,f(n))}return this},remove:function(){return l&&st.each(arguments,function(e,t){for(var n;(n=st.inArray(t,l,n))>-1;)l.splice(n,1),o&&(s>=n&&s--,u>=n&&u--)}),this},has:function(e){return st.inArray(e,l)>-1},empty:function(){return l=[],this},disable:function(){return l=c=n=t,this},disabled:function(){return!l},lock:function(){return c=t,n||p.disable(),this},locked:function(){return!c},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!l||i&&!c||(o?c.push(t):f(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},st.extend({Deferred:function(e){var t=[["resolve","done",st.Callbacks("once memory"),"resolved"],["reject","fail",st.Callbacks("once memory"),"rejected"],["notify","progress",st.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return st.Deferred(function(n){st.each(t,function(t,o){var a=o[0],s=st.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&st.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?st.extend(e,r):r}},i={};return r.pipe=r.then,st.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t,n,r,i=0,o=nt.call(arguments),a=o.length,s=1!==a||e&&st.isFunction(e.promise)?a:0,u=1===s?e:st.Deferred(),l=function(e,n,r){return function(i){n[e]=this,r[e]=arguments.length>1?nt.call(arguments):i,r===t?u.notifyWith(n,r):--s||u.resolveWith(n,r)}};if(a>1)for(t=Array(a),n=Array(a),r=Array(a);a>i;i++)o[i]&&st.isFunction(o[i].promise)?o[i].promise().done(l(i,r,o)).fail(u.reject).progress(l(i,n,t)):--s;return s||u.resolveWith(r,o),u.promise()}}),st.support=function(){var n,r,i,o,a,s,u,l,c,f,p=V.createElement("div");if(p.setAttribute("className","t"),p.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",r=p.getElementsByTagName("*"),i=p.getElementsByTagName("a")[0],!r||!i||!r.length)return{};o=V.createElement("select"),a=o.appendChild(V.createElement("option")),s=p.getElementsByTagName("input")[0],i.style.cssText="top:1px;float:left;opacity:.5",n={getSetAttribute:"t"!==p.className,leadingWhitespace:3===p.firstChild.nodeType,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(i.getAttribute("style")),hrefNormalized:"/a"===i.getAttribute("href"),opacity:/^0.5/.test(i.style.opacity),cssFloat:!!i.style.cssFloat,checkOn:!!s.value,optSelected:a.selected,enctype:!!V.createElement("form").enctype,html5Clone:"<:nav></:nav>"!==V.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===V.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},s.checked=!0,n.noCloneChecked=s.cloneNode(!0).checked,o.disabled=!0,n.optDisabled=!a.disabled;try{delete p.test}catch(d){n.deleteExpando=!1}s=V.createElement("input"),s.setAttribute("value",""),n.input=""===s.getAttribute("value"),s.value="t",s.setAttribute("type","radio"),n.radioValue="t"===s.value,s.setAttribute("checked","t"),s.setAttribute("name","t"),u=V.createDocumentFragment(),u.appendChild(s),n.appendChecked=s.checked,n.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,p.attachEvent&&(p.attachEvent("onclick",function(){n.noCloneEvent=!1}),p.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})p.setAttribute(l="on"+f,"t"),n[f+"Bubbles"]=l in e||p.attributes[l].expando===!1;return p.style.backgroundClip="content-box",p.cloneNode(!0).style.backgroundClip="",n.clearCloneStyle="content-box"===p.style.backgroundClip,st(function(){var r,i,o,a="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",s=V.getElementsByTagName("body")[0];s&&(r=V.createElement("div"),r.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",s.appendChild(r).appendChild(p),p.innerHTML="<table><tr><td></td><td>t</td></tr></table>",o=p.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",c=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",n.reliableHiddenOffsets=c&&0===o[0].offsetHeight,p.innerHTML="",p.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",n.boxSizing=4===p.offsetWidth,n.doesNotIncludeMarginInBodyOffset=1!==s.offsetTop,e.getComputedStyle&&(n.pixelPosition="1%"!==(e.getComputedStyle(p,null)||{}).top,n.boxSizingReliable="4px"===(e.getComputedStyle(p,null)||{width:"4px"}).width,i=p.appendChild(V.createElement("div")),i.style.cssText=p.style.cssText=a,i.style.marginRight=i.style.width="0",p.style.width="1px",n.reliableMarginRight=!parseFloat((e.getComputedStyle(i,null)||{}).marginRight)),p.style.zoom!==t&&(p.innerHTML="",p.style.cssText=a+"width:1px;padding:1px;display:inline;zoom:1",n.inlineBlockNeedsLayout=3===p.offsetWidth,p.style.display="block",p.innerHTML="<div></div>",p.firstChild.style.width="5px",n.shrinkWrapBlocks=3!==p.offsetWidth,s.style.zoom=1),s.removeChild(r),r=p=o=i=null)}),r=o=u=a=i=s=null,n}();var wt=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,Nt=/([A-Z])/g;st.extend({cache:{},expando:"jQuery"+(Z+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?st.cache[e[st.expando]]:e[st.expando],!!e&&!s(e)},data:function(e,t,n){return i(e,t,n,!1)},removeData:function(e,t){return o(e,t,!1)},_data:function(e,t,n){return i(e,t,n,!0)},_removeData:function(e,t){return o(e,t,!0)},acceptData:function(e){var t=e.nodeName&&st.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),st.fn.extend({data:function(e,n){var r,i,o=this[0],s=0,u=null;if(e===t){if(this.length&&(u=st.data(o),1===o.nodeType&&!st._data(o,"parsedAttrs"))){for(r=o.attributes;r.length>s;s++)i=r[s].name,i.indexOf("data-")||(i=st.camelCase(i.substring(5)),a(o,i,u[i]));st._data(o,"parsedAttrs",!0)}return u}return"object"==typeof e?this.each(function(){st.data(this,e)}):st.access(this,function(n){return n===t?o?a(o,e,st.data(o,e)):null:(this.each(function(){st.data(this,e,n)}),t)},null,n,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){st.removeData(this,e)})}}),st.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=st._data(e,n),r&&(!i||st.isArray(r)?i=st._data(e,n,st.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=st.queue(e,t),r=n.length,i=n.shift(),o=st._queueHooks(e,t),a=function(){st.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return st._data(e,n)||st._data(e,n,{empty:st.Callbacks("once memory").add(function(){st._removeData(e,t+"queue"),st._removeData(e,n)})})}}),st.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?st.queue(this[0],e):n===t?this:this.each(function(){var t=st.queue(this,e,n);st._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&st.dequeue(this,e)})},dequeue:function(e){return this.each(function(){st.dequeue(this,e)})},delay:function(e,t){return e=st.fx?st.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=st.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};for("string"!=typeof e&&(n=e,e=t),e=e||"fx";s--;)r=st._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(u));return u(),o.promise(n)}});var Ct,kt,Et=/[\t\r\n]/g,St=/\r/g,At=/^(?:input|select|textarea|button|object)$/i,jt=/^(?:a|area)$/i,Dt=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,Lt=/^(?:checked|selected)$/i,Ht=st.support.getSetAttribute,Mt=st.support.input;st.fn.extend({attr:function(e,t){return st.access(this,st.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){st.removeAttr(this,e)})},prop:function(e,t){return st.access(this,st.prop,e,t,arguments.length>1)},removeProp:function(e){return e=st.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,u="string"==typeof e&&e;if(st.isFunction(e))return this.each(function(t){st(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(lt)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(Et," "):" ")){for(o=0;i=t[o++];)0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=st.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||"string"==typeof e&&e;if(st.isFunction(e))return this.each(function(t){st(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(lt)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(Et," "):"")){for(o=0;i=t[o++];)for(;r.indexOf(" "+i+" ")>=0;)r=r.replace(" "+i+" "," ");n.className=e?st.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return st.isFunction(e)?this.each(function(n){st(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n)for(var i,o=0,a=st(this),s=t,u=e.match(lt)||[];i=u[o++];)s=r?s:!a.hasClass(i),a[s?"addClass":"removeClass"](i);else("undefined"===n||"boolean"===n)&&(this.className&&st._data(this,"__className__",this.className),this.className=this.className||e===!1?"":st._data(this,"__className__")||"")})},hasClass:function(e){for(var t=" "+e+" ",n=0,r=this.length;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(Et," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=st.isFunction(e),this.each(function(r){var o,a=st(this);1===this.nodeType&&(o=i?e.call(this,r,a.val()):e,null==o?o="":"number"==typeof o?o+="":st.isArray(o)&&(o=st.map(o,function(e){return null==e?"":e+""})),n=st.valHooks[this.type]||st.valHooks[this.nodeName.toLowerCase()],n&&"set"in n&&n.set(this,o,"value")!==t||(this.value=o))});if(o)return n=st.valHooks[o.type]||st.valHooks[o.nodeName.toLowerCase()],n&&"get"in n&&(r=n.get(o,"value"))!==t?r:(r=o.value,"string"==typeof r?r.replace(St,""):null==r?"":r)}}}),st.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){for(var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,u=0>i?s:o?i:0;s>u;u++)if(n=r[u],!(!n.selected&&u!==i||(st.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&st.nodeName(n.parentNode,"optgroup"))){if(t=st(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=st.makeArray(t);return st(e).find("option").each(function(){this.selected=st.inArray(st(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return e.getAttribute===t?st.prop(e,n,r):(a=1!==s||!st.isXMLDoc(e),a&&(n=n.toLowerCase(),o=st.attrHooks[n]||(Dt.test(n)?kt:Ct)),r===t?o&&a&&"get"in o&&null!==(i=o.get(e,n))?i:(e.getAttribute!==t&&(i=e.getAttribute(n)),null==i?t:i):null!==r?o&&a&&"set"in o&&(i=o.set(e,r,n))!==t?i:(e.setAttribute(n,r+""),r):(st.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(lt);if(o&&1===e.nodeType)for(;n=o[i++];)r=st.propFix[n]||n,Dt.test(n)?!Ht&&Lt.test(n)?e[st.camelCase("default-"+n)]=e[r]=!1:e[r]=!1:st.attr(e,n,""),e.removeAttribute(Ht?n:r)},attrHooks:{type:{set:function(e,t){if(!st.support.radioValue&&"radio"===t&&st.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!st.isXMLDoc(e),a&&(n=st.propFix[n]||n,o=st.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):At.test(e.nodeName)||jt.test(e.nodeName)&&e.href?0:t}}}}),kt={get:function(e,n){var r=st.prop(e,n),i="boolean"==typeof r&&e.getAttribute(n),o="boolean"==typeof r?Mt&&Ht?null!=i:Lt.test(n)?e[st.camelCase("default-"+n)]:!!i:e.getAttributeNode(n);return o&&o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?st.removeAttr(e,n):Mt&&Ht||!Lt.test(n)?e.setAttribute(!Ht&&st.propFix[n]||n,n):e[st.camelCase("default-"+n)]=e[n]=!0,n}},Mt&&Ht||(st.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return st.nodeName(e,"input")?e.defaultValue:r&&r.specified?r.value:t
+},set:function(e,n,r){return st.nodeName(e,"input")?(e.defaultValue=n,t):Ct&&Ct.set(e,n,r)}}),Ht||(Ct=st.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&("id"===n||"name"===n||"coords"===n?""!==r.value:r.specified)?r.value:t},set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},st.attrHooks.contenteditable={get:Ct.get,set:function(e,t,n){Ct.set(e,""===t?!1:t,n)}},st.each(["width","height"],function(e,n){st.attrHooks[n]=st.extend(st.attrHooks[n],{set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}})})),st.support.hrefNormalized||(st.each(["href","src","width","height"],function(e,n){st.attrHooks[n]=st.extend(st.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),st.each(["href","src"],function(e,t){st.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),st.support.style||(st.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),st.support.optSelected||(st.propHooks.selected=st.extend(st.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),st.support.enctype||(st.propFix.enctype="encoding"),st.support.checkOn||st.each(["radio","checkbox"],function(){st.valHooks[this]={get:function(e){return null===e.getAttribute("value")?"on":e.value}}}),st.each(["radio","checkbox"],function(){st.valHooks[this]=st.extend(st.valHooks[this],{set:function(e,n){return st.isArray(n)?e.checked=st.inArray(st(e).val(),n)>=0:t}})});var qt=/^(?:input|select|textarea)$/i,_t=/^key/,Ft=/^(?:mouse|contextmenu)|click/,Ot=/^(?:focusinfocus|focusoutblur)$/,Bt=/^([^.]*)(?:\.(.+)|)$/;st.event={global:{},add:function(e,n,r,i,o){var a,s,u,l,c,f,p,d,h,g,m,y=3!==e.nodeType&&8!==e.nodeType&&st._data(e);if(y){for(r.handler&&(a=r,r=a.handler,o=a.selector),r.guid||(r.guid=st.guid++),(l=y.events)||(l=y.events={}),(s=y.handle)||(s=y.handle=function(e){return st===t||e&&st.event.triggered===e.type?t:st.event.dispatch.apply(s.elem,arguments)},s.elem=e),n=(n||"").match(lt)||[""],c=n.length;c--;)u=Bt.exec(n[c])||[],h=m=u[1],g=(u[2]||"").split(".").sort(),p=st.event.special[h]||{},h=(o?p.delegateType:p.bindType)||h,p=st.event.special[h]||{},f=st.extend({type:h,origType:m,data:i,handler:r,guid:r.guid,selector:o,needsContext:o&&st.expr.match.needsContext.test(o),namespace:g.join(".")},a),(d=l[h])||(d=l[h]=[],d.delegateCount=0,p.setup&&p.setup.call(e,i,g,s)!==!1||(e.addEventListener?e.addEventListener(h,s,!1):e.attachEvent&&e.attachEvent("on"+h,s))),p.add&&(p.add.call(e,f),f.handler.guid||(f.handler.guid=r.guid)),o?d.splice(d.delegateCount++,0,f):d.push(f),st.event.global[h]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,m=st.hasData(e)&&st._data(e);if(m&&(u=m.events)){for(t=(t||"").match(lt)||[""],l=t.length;l--;)if(s=Bt.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){for(f=st.event.special[d]||{},d=(r?f.delegateType:f.bindType)||d,p=u[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;o--;)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&f.teardown.call(e,h,m.handle)!==!1||st.removeEvent(e,d,m.handle),delete u[d])}else for(d in u)st.event.remove(e,d+t[l],n,r,!0);st.isEmptyObject(u)&&(delete m.handle,st._removeData(e,"events"))}},trigger:function(n,r,i,o){var a,s,u,l,c,f,p,d=[i||V],h=n.type||n,g=n.namespace?n.namespace.split("."):[];if(s=u=i=i||V,3!==i.nodeType&&8!==i.nodeType&&!Ot.test(h+st.event.triggered)&&(h.indexOf(".")>=0&&(g=h.split("."),h=g.shift(),g.sort()),c=0>h.indexOf(":")&&"on"+h,n=n[st.expando]?n:new st.Event(h,"object"==typeof n&&n),n.isTrigger=!0,n.namespace=g.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:st.makeArray(r,[n]),p=st.event.special[h]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!st.isWindow(i)){for(l=p.delegateType||h,Ot.test(l+h)||(s=s.parentNode);s;s=s.parentNode)d.push(s),u=s;u===(i.ownerDocument||V)&&d.push(u.defaultView||u.parentWindow||e)}for(a=0;(s=d[a++])&&!n.isPropagationStopped();)n.type=a>1?l:p.bindType||h,f=(st._data(s,"events")||{})[n.type]&&st._data(s,"handle"),f&&f.apply(s,r),f=c&&s[c],f&&st.acceptData(s)&&f.apply&&f.apply(s,r)===!1&&n.preventDefault();if(n.type=h,!(o||n.isDefaultPrevented()||p._default&&p._default.apply(i.ownerDocument,r)!==!1||"click"===h&&st.nodeName(i,"a")||!st.acceptData(i)||!c||!i[h]||st.isWindow(i))){u=i[c],u&&(i[c]=null),st.event.triggered=h;try{i[h]()}catch(m){}st.event.triggered=t,u&&(i[c]=u)}return n.result}},dispatch:function(e){e=st.event.fix(e);var n,r,i,o,a,s=[],u=nt.call(arguments),l=(st._data(this,"events")||{})[e.type]||[],c=st.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){for(s=st.event.handlers.call(this,e,l),n=0;(o=s[n++])&&!e.isPropagationStopped();)for(e.currentTarget=o.elem,r=0;(a=o.handlers[r++])&&!e.isImmediatePropagationStopped();)(!e.namespace_re||e.namespace_re.test(a.namespace))&&(e.handleObj=a,e.data=a.data,i=((st.event.special[a.origType]||{}).handle||a.handler).apply(o.elem,u),i!==t&&(e.result=i)===!1&&(e.preventDefault(),e.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],u=n.delegateCount,l=e.target;if(u&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(l.disabled!==!0||"click"!==e.type){for(i=[],r=0;u>r;r++)a=n[r],o=a.selector+" ",i[o]===t&&(i[o]=a.needsContext?st(o,this).index(l)>=0:st.find(o,this,null,[l]).length),i[o]&&i.push(a);i.length&&s.push({elem:l,handlers:i})}return n.length>u&&s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[st.expando])return e;var t,n,r=e,i=st.event.fixHooks[e.type]||{},o=i.props?this.props.concat(i.props):this.props;for(e=new st.Event(r),t=o.length;t--;)n=o[t],e[n]=r[n];return e.target||(e.target=r.srcElement||V),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,i.filter?i.filter(e,r):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,a=n.button,s=n.fromElement;return null==e.pageX&&null!=n.clientX&&(r=e.target.ownerDocument||V,i=r.documentElement,o=r.body,e.pageX=n.clientX+(i&&i.scrollLeft||o&&o.scrollLeft||0)-(i&&i.clientLeft||o&&o.clientLeft||0),e.pageY=n.clientY+(i&&i.scrollTop||o&&o.scrollTop||0)-(i&&i.clientTop||o&&o.clientTop||0)),!e.relatedTarget&&s&&(e.relatedTarget=s===e.target?n.toElement:s),e.which||a===t||(e.which=1&a?1:2&a?3:4&a?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return st.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==V.activeElement&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===V.activeElement&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=st.extend(new st.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?st.event.trigger(i,null,t):st.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},st.removeEvent=V.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,n,r){var i="on"+n;e.detachEvent&&(e[i]===t&&(e[i]=null),e.detachEvent(i,r))},st.Event=function(e,n){return this instanceof st.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?u:l):this.type=e,n&&st.extend(this,n),this.timeStamp=e&&e.timeStamp||st.now(),this[st.expando]=!0,t):new st.Event(e,n)},st.Event.prototype={isDefaultPrevented:l,isPropagationStopped:l,isImmediatePropagationStopped:l,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=u,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=u,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u,this.stopPropagation()}},st.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){st.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!st.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),st.support.submitBubbles||(st.event.special.submit={setup:function(){return st.nodeName(this,"form")?!1:(st.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=st.nodeName(n,"input")||st.nodeName(n,"button")?n.form:t;r&&!st._data(r,"submitBubbles")&&(st.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),st._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&st.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return st.nodeName(this,"form")?!1:(st.event.remove(this,"._submit"),t)}}),st.support.changeBubbles||(st.event.special.change={setup:function(){return qt.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(st.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),st.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),st.event.simulate("change",this,e,!0)})),!1):(st.event.add(this,"beforeactivate._change",function(e){var t=e.target;qt.test(t.nodeName)&&!st._data(t,"changeBubbles")&&(st.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||st.event.simulate("change",this.parentNode,e,!0)}),st._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return st.event.remove(this,"._change"),!qt.test(this.nodeName)}}),st.support.focusinBubbles||st.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){st.event.simulate(t,e.target,st.event.fix(e),!0)};st.event.special[t]={setup:function(){0===n++&&V.addEventListener(e,r,!0)},teardown:function(){0===--n&&V.removeEventListener(e,r,!0)}}}),st.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(s in e)this.on(s,n,r,e[s],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=l;else if(!i)return this;return 1===o&&(a=i,i=function(e){return st().off(e),a.apply(this,arguments)},i.guid=a.guid||(a.guid=st.guid++)),this.each(function(){st.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,st(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=l),this.each(function(){st.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){st.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?st.event.trigger(e,n,r,!0):t},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),st.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){st.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)},_t.test(t)&&(st.event.fixHooks[t]=st.event.keyHooks),Ft.test(t)&&(st.event.fixHooks[t]=st.event.mouseHooks)}),function(e,t){function n(e){return ht.test(e+"")}function r(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>C.cacheLength&&delete e[t.shift()],e[n]=r}}function i(e){return e[P]=!0,e}function o(e){var t=L.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}}function a(e,t,n,r){var i,o,a,s,u,l,c,d,h,g;if((t?t.ownerDocument||t:R)!==L&&D(t),t=t||L,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(!M&&!r){if(i=gt.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&O(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return Q.apply(n,K.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&&W.getByClassName&&t.getElementsByClassName)return Q.apply(n,K.call(t.getElementsByClassName(a),0)),n}if(W.qsa&&!q.test(e)){if(c=!0,d=P,h=t,g=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){for(l=f(e),(c=t.getAttribute("id"))?d=c.replace(vt,"\\$&"):t.setAttribute("id",d),d="[id='"+d+"'] ",u=l.length;u--;)l[u]=d+p(l[u]);h=dt.test(e)&&t.parentNode||t,g=l.join(",")}if(g)try{return Q.apply(n,K.call(h.querySelectorAll(g),0)),n}catch(m){}finally{c||t.removeAttribute("id")}}}return x(e.replace(at,"$1"),t,n,r)}function s(e,t){for(var n=e&&t&&e.nextSibling;n;n=n.nextSibling)if(n===t)return-1;return e?1:-1}function u(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function l(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return i(function(t){return t=+t,i(function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function f(e,t){var n,r,i,o,s,u,l,c=X[e+" "];if(c)return t?0:c.slice(0);for(s=e,u=[],l=C.preFilter;s;){(!n||(r=ut.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),u.push(i=[])),n=!1,(r=lt.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(at," ")}),s=s.slice(n.length));for(o in C.filter)!(r=pt[o].exec(s))||l[o]&&!(r=l[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?a.error(e):X(e,u).slice(0)}function p(e){for(var t=0,n=e.length,r="";n>t;t++)r+=e[t].value;return r}function d(e,t,n){var r=t.dir,i=n&&"parentNode"===t.dir,o=I++;return t.first?function(t,n,o){for(;t=t[r];)if(1===t.nodeType||i)return e(t,n,o)}:function(t,n,a){var s,u,l,c=$+" "+o;if(a){for(;t=t[r];)if((1===t.nodeType||i)&&e(t,n,a))return!0}else for(;t=t[r];)if(1===t.nodeType||i)if(l=t[P]||(t[P]={}),(u=l[r])&&u[0]===c){if((s=u[1])===!0||s===N)return s===!0}else if(u=l[r]=[c],u[1]=e(t,n,a)||N,u[1]===!0)return!0}}function h(e){return e.length>1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function g(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;u>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),l&&t.push(s));return a}function m(e,t,n,r,o,a){return r&&!r[P]&&(r=m(r)),o&&!o[P]&&(o=m(o,a)),i(function(i,a,s,u){var l,c,f,p=[],d=[],h=a.length,m=i||b(t||"*",s.nodeType?[s]:s,[]),y=!e||!i&&t?m:g(m,p,e,s,u),v=n?o||(i?e:h||r)?[]:a:y;if(n&&n(y,v,s,u),r)for(l=g(v,d),r(l,[],s,u),c=l.length;c--;)(f=l[c])&&(v[d[c]]=!(y[d[c]]=f));if(i){if(o||e){if(o){for(l=[],c=v.length;c--;)(f=v[c])&&l.push(y[c]=f);o(null,v=[],l,u)}for(c=v.length;c--;)(f=v[c])&&(l=o?Z.call(i,f):p[c])>-1&&(i[l]=!(a[l]=f))}}else v=g(v===a?v.splice(h,v.length):v),o?o(null,a,v,u):Q.apply(a,v)})}function y(e){for(var t,n,r,i=e.length,o=C.relative[e[0].type],a=o||C.relative[" "],s=o?1:0,u=d(function(e){return e===t},a,!0),l=d(function(e){return Z.call(t,e)>-1},a,!0),c=[function(e,n,r){return!o&&(r||n!==j)||((t=n).nodeType?u(e,n,r):l(e,n,r))}];i>s;s++)if(n=C.relative[e[s].type])c=[d(h(c),n)];else{if(n=C.filter[e[s].type].apply(null,e[s].matches),n[P]){for(r=++s;i>r&&!C.relative[e[r].type];r++);return m(s>1&&h(c),s>1&&p(e.slice(0,s-1)).replace(at,"$1"),n,r>s&&y(e.slice(s,r)),i>r&&y(e=e.slice(r)),i>r&&p(e))}c.push(n)}return h(c)}function v(e,t){var n=0,r=t.length>0,o=e.length>0,s=function(i,s,u,l,c){var f,p,d,h=[],m=0,y="0",v=i&&[],b=null!=c,x=j,T=i||o&&C.find.TAG("*",c&&s.parentNode||s),w=$+=null==x?1:Math.E;for(b&&(j=s!==L&&s,N=n);null!=(f=T[y]);y++){if(o&&f){for(p=0;d=e[p];p++)if(d(f,s,u)){l.push(f);break}b&&($=w,N=++n)}r&&((f=!d&&f)&&m--,i&&v.push(f))}if(m+=y,r&&y!==m){for(p=0;d=t[p];p++)d(v,h,s,u);if(i){if(m>0)for(;y--;)v[y]||h[y]||(h[y]=G.call(l));h=g(h)}Q.apply(l,h),b&&!i&&h.length>0&&m+t.length>1&&a.uniqueSort(l)}return b&&($=w,j=x),v};return r?i(s):s}function b(e,t,n){for(var r=0,i=t.length;i>r;r++)a(e,t[r],n);return n}function x(e,t,n,r){var i,o,a,s,u,l=f(e);if(!r&&1===l.length){if(o=l[0]=l[0].slice(0),o.length>2&&"ID"===(a=o[0]).type&&9===t.nodeType&&!M&&C.relative[o[1].type]){if(t=C.find.ID(a.matches[0].replace(xt,Tt),t)[0],!t)return n;e=e.slice(o.shift().value.length)}for(i=pt.needsContext.test(e)?-1:o.length-1;i>=0&&(a=o[i],!C.relative[s=a.type]);i--)if((u=C.find[s])&&(r=u(a.matches[0].replace(xt,Tt),dt.test(o[0].type)&&t.parentNode||t))){if(o.splice(i,1),e=r.length&&p(o),!e)return Q.apply(n,K.call(r,0)),n;break}}return S(e,l)(r,t,M,n,dt.test(e)),n}function T(){}var w,N,C,k,E,S,A,j,D,L,H,M,q,_,F,O,B,P="sizzle"+-new Date,R=e.document,W={},$=0,I=0,z=r(),X=r(),U=r(),V=typeof t,Y=1<<31,J=[],G=J.pop,Q=J.push,K=J.slice,Z=J.indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(this[t]===e)return t;return-1},et="[\\x20\\t\\r\\n\\f]",tt="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",nt=tt.replace("w","w#"),rt="([*^$|!~]?=)",it="\\["+et+"*("+tt+")"+et+"*(?:"+rt+et+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+nt+")|)|)"+et+"*\\]",ot=":("+tt+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+it.replace(3,8)+")*)|.*)\\)|)",at=RegExp("^"+et+"+|((?:^|[^\\\\])(?:\\\\.)*)"+et+"+$","g"),ut=RegExp("^"+et+"*,"+et+"*"),lt=RegExp("^"+et+"*([\\x20\\t\\r\\n\\f>+~])"+et+"*"),ct=RegExp(ot),ft=RegExp("^"+nt+"$"),pt={ID:RegExp("^#("+tt+")"),CLASS:RegExp("^\\.("+tt+")"),NAME:RegExp("^\\[name=['\"]?("+tt+")['\"]?\\]"),TAG:RegExp("^("+tt.replace("w","w*")+")"),ATTR:RegExp("^"+it),PSEUDO:RegExp("^"+ot),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+et+"*(even|odd|(([+-]|)(\\d*)n|)"+et+"*(?:([+-]|)"+et+"*(\\d+)|))"+et+"*\\)|)","i"),needsContext:RegExp("^"+et+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+et+"*((?:-\\d)?\\d*)"+et+"*\\)|)(?=[^-]|$)","i")},dt=/[\x20\t\r\n\f]*[+~]/,ht=/\{\s*\[native code\]\s*\}/,gt=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,mt=/^(?:input|select|textarea|button)$/i,yt=/^h\d$/i,vt=/'|\\/g,bt=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,xt=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,Tt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{K.call(H.childNodes,0)[0].nodeType}catch(wt){K=function(e){for(var t,n=[];t=this[e];e++)n.push(t);return n}}E=a.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},D=a.setDocument=function(e){var r=e?e.ownerDocument||e:R;return r!==L&&9===r.nodeType&&r.documentElement?(L=r,H=r.documentElement,M=E(r),W.tagNameNoComments=o(function(e){return e.appendChild(r.createComment("")),!e.getElementsByTagName("*").length}),W.attributes=o(function(e){e.innerHTML="<select></select>";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),W.getByClassName=o(function(e){return e.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),W.getByName=o(function(e){e.id=P+0,e.innerHTML="<a name='"+P+"'></a><div name='"+P+"'></div>",H.insertBefore(e,H.firstChild);var t=r.getElementsByName&&r.getElementsByName(P).length===2+r.getElementsByName(P+0).length;return W.getIdNotName=!r.getElementById(P),H.removeChild(e),t}),C.attrHandle=o(function(e){return e.innerHTML="<a href='#'></a>",e.firstChild&&typeof e.firstChild.getAttribute!==V&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},W.getIdNotName?(C.find.ID=function(e,t){if(typeof t.getElementById!==V&&!M){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},C.filter.ID=function(e){var t=e.replace(xt,Tt);return function(e){return e.getAttribute("id")===t}}):(C.find.ID=function(e,n){if(typeof n.getElementById!==V&&!M){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==V&&r.getAttributeNode("id").value===e?[r]:t:[]}},C.filter.ID=function(e){var t=e.replace(xt,Tt);return function(e){var n=typeof e.getAttributeNode!==V&&e.getAttributeNode("id");return n&&n.value===t}}),C.find.TAG=W.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==V?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i];i++)1===n.nodeType&&r.push(n);return r}return o},C.find.NAME=W.getByName&&function(e,n){return typeof n.getElementsByName!==V?n.getElementsByName(name):t},C.find.CLASS=W.getByClassName&&function(e,n){return typeof n.getElementsByClassName===V||M?t:n.getElementsByClassName(e)},_=[],q=[":focus"],(W.qsa=n(r.querySelectorAll))&&(o(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||q.push("\\["+et+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||q.push(":checked")}),o(function(e){e.innerHTML="<input type='hidden' i=''/>",e.querySelectorAll("[i^='']").length&&q.push("[*^$]="+et+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),q.push(",.*:")})),(W.matchesSelector=n(F=H.matchesSelector||H.mozMatchesSelector||H.webkitMatchesSelector||H.oMatchesSelector||H.msMatchesSelector))&&o(function(e){W.disconnectedMatch=F.call(e,"div"),F.call(e,"[s!='']:x"),_.push("!=",ot)}),q=RegExp(q.join("|")),_=RegExp(_.join("|")),O=n(H.contains)||H.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},B=H.compareDocumentPosition?function(e,t){var n;return e===t?(A=!0,0):(n=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t))?1&n||e.parentNode&&11===e.parentNode.nodeType?e===r||O(R,e)?-1:t===r||O(R,t)?1:0:4&n?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var n,i=0,o=e.parentNode,a=t.parentNode,u=[e],l=[t];if(e===t)return A=!0,0;if(e.sourceIndex&&t.sourceIndex)return(~t.sourceIndex||Y)-(O(R,e)&&~e.sourceIndex||Y);if(!o||!a)return e===r?-1:t===r?1:o?-1:a?1:0;if(o===a)return s(e,t);for(n=e;n=n.parentNode;)u.unshift(n);for(n=t;n=n.parentNode;)l.unshift(n);for(;u[i]===l[i];)i++;return i?s(u[i],l[i]):u[i]===R?-1:l[i]===R?1:0},A=!1,[0,0].sort(B),W.detectDuplicates=A,L):L},a.matches=function(e,t){return a(e,null,null,t)},a.matchesSelector=function(e,t){if((e.ownerDocument||e)!==L&&D(e),t=t.replace(bt,"='$1']"),!(!W.matchesSelector||M||_&&_.test(t)||q.test(t)))try{var n=F.call(e,t);if(n||W.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return a(t,L,null,[e]).length>0},a.contains=function(e,t){return(e.ownerDocument||e)!==L&&D(e),O(e,t)},a.attr=function(e,t){var n;return(e.ownerDocument||e)!==L&&D(e),M||(t=t.toLowerCase()),(n=C.attrHandle[t])?n(e):M||W.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},a.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},a.uniqueSort=function(e){var t,n=[],r=1,i=0;if(A=!W.detectDuplicates,e.sort(B),A){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));for(;i--;)e.splice(n[i],1)}return e},k=a.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=k(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=k(t);return n},C=a.selectors={cacheLength:50,createPseudo:i,match:pt,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(xt,Tt),e[3]=(e[4]||e[5]||"").replace(xt,Tt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||a.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&a.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return pt.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&ct.test(n)&&(t=f(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(xt,Tt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=z[e+" "];return t||(t=RegExp("(^|"+et+")"+e+"("+et+"|$)"))&&z(e,function(e){return t.test(e.className||typeof e.getAttribute!==V&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=a.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.substr(i.length-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.substr(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s;if(m){if(o){for(;g;){for(f=t;f=f[g];)if(s?f.nodeName.toLowerCase()===y:1===f.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){for(c=m[P]||(m[P]={}),l=c[e]||[],d=l[0]===$&&l[1],p=l[0]===$&&l[2],f=d&&m.childNodes[d];f=++d&&f&&f[g]||(p=d=0)||h.pop();)if(1===f.nodeType&&++p&&f===t){c[e]=[$,d,p];break}}else if(v&&(l=(t[P]||(t[P]={}))[e])&&l[0]===$)p=l[1];else for(;(f=++d&&f&&f[g]||(p=d=0)||h.pop())&&((s?f.nodeName.toLowerCase()!==y:1!==f.nodeType)||!++p||(v&&((f[P]||(f[P]={}))[e]=[$,p]),f!==t)););return p-=i,p===r||0===p%r&&p/r>=0}}},PSEUDO:function(e,t){var n,r=C.pseudos[e]||C.setFilters[e.toLowerCase()]||a.error("unsupported pseudo: "+e);return r[P]?r(t):r.length>1?(n=[e,e,"",t],C.setFilters.hasOwnProperty(e.toLowerCase())?i(function(e,n){for(var i,o=r(e,t),a=o.length;a--;)i=Z.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:i(function(e){var t=[],n=[],r=S(e.replace(at,"$1"));return r[P]?i(function(e,t,n,i){for(var o,a=r(e,null,i,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:i(function(e){return function(t){return a(e,t).length>0}}),contains:i(function(e){return function(t){return(t.textContent||t.innerText||k(t)).indexOf(e)>-1}}),lang:i(function(e){return ft.test(e||"")||a.error("unsupported lang: "+e),e=e.replace(xt,Tt).toLowerCase(),function(t){var n;do if(n=M?t.getAttribute("xml:lang")||t.getAttribute("lang"):t.lang)return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===H},focus:function(e){return e===L.activeElement&&(!L.hasFocus||L.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!C.pseudos.empty(e)},header:function(e){return yt.test(e.nodeName)},input:function(e){return mt.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:c(function(){return[0]}),last:c(function(e,t){return[t-1]}),eq:c(function(e,t,n){return[0>n?n+t:n]}),even:c(function(e,t){for(var n=0;t>n;n+=2)e.push(n);return e}),odd:c(function(e,t){for(var n=1;t>n;n+=2)e.push(n);return e}),lt:c(function(e,t,n){for(var r=0>n?n+t:n;--r>=0;)e.push(r);return e}),gt:c(function(e,t,n){for(var r=0>n?n+t:n;t>++r;)e.push(r);return e})}};for(w in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})C.pseudos[w]=u(w);for(w in{submit:!0,reset:!0})C.pseudos[w]=l(w);S=a.compile=function(e,t){var n,r=[],i=[],o=U[e+" "];if(!o){for(t||(t=f(e)),n=t.length;n--;)o=y(t[n]),o[P]?r.push(o):i.push(o);o=U(e,v(i,r))}return o},C.pseudos.nth=C.pseudos.eq,C.filters=T.prototype=C.pseudos,C.setFilters=new T,D(),a.attr=st.attr,st.find=a,st.expr=a.selectors,st.expr[":"]=st.expr.pseudos,st.unique=a.uniqueSort,st.text=a.getText,st.isXMLDoc=a.isXML,st.contains=a.contains}(e);var Pt=/Until$/,Rt=/^(?:parents|prev(?:Until|All))/,Wt=/^.[^:#\[\.,]*$/,$t=st.expr.match.needsContext,It={children:!0,contents:!0,next:!0,prev:!0};st.fn.extend({find:function(e){var t,n,r;if("string"!=typeof e)return r=this,this.pushStack(st(e).filter(function(){for(t=0;r.length>t;t++)if(st.contains(r[t],this))return!0}));for(n=[],t=0;this.length>t;t++)st.find(e,this[t],n);return n=this.pushStack(st.unique(n)),n.selector=(this.selector?this.selector+" ":"")+e,n},has:function(e){var t,n=st(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(st.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(f(this,e,!1))},filter:function(e){return this.pushStack(f(this,e,!0))},is:function(e){return!!e&&("string"==typeof e?$t.test(e)?st(e,this.context).index(this[0])>=0:st.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){for(var n,r=0,i=this.length,o=[],a=$t.test(e)||"string"!=typeof e?st(e,t||this.context):0;i>r;r++)for(n=this[r];n&&n.ownerDocument&&n!==t&&11!==n.nodeType;){if(a?a.index(n)>-1:st.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}return this.pushStack(o.length>1?st.unique(o):o)},index:function(e){return e?"string"==typeof e?st.inArray(this[0],st(e)):st.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?st(e,t):st.makeArray(e&&e.nodeType?[e]:e),r=st.merge(this.get(),n);return this.pushStack(st.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),st.fn.andSelf=st.fn.addBack,st.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return st.dir(e,"parentNode")},parentsUntil:function(e,t,n){return st.dir(e,"parentNode",n)},next:function(e){return c(e,"nextSibling")},prev:function(e){return c(e,"previousSibling")
+},nextAll:function(e){return st.dir(e,"nextSibling")},prevAll:function(e){return st.dir(e,"previousSibling")},nextUntil:function(e,t,n){return st.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return st.dir(e,"previousSibling",n)},siblings:function(e){return st.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return st.sibling(e.firstChild)},contents:function(e){return st.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:st.merge([],e.childNodes)}},function(e,t){st.fn[e]=function(n,r){var i=st.map(this,t,n);return Pt.test(e)||(r=n),r&&"string"==typeof r&&(i=st.filter(r,i)),i=this.length>1&&!It[e]?st.unique(i):i,this.length>1&&Rt.test(e)&&(i=i.reverse()),this.pushStack(i)}}),st.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),1===t.length?st.find.matchesSelector(t[0],e)?[t[0]]:[]:st.find.matches(e,t)},dir:function(e,n,r){for(var i=[],o=e[n];o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!st(o).is(r));)1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});var zt="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",Xt=/ jQuery\d+="(?:null|\d+)"/g,Ut=RegExp("<(?:"+zt+")[\\s/>]","i"),Vt=/^\s+/,Yt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Jt=/<([\w:]+)/,Gt=/<tbody/i,Qt=/<|&#?\w+;/,Kt=/<(?:script|style|link)/i,Zt=/^(?:checkbox|radio)$/i,en=/checked\s*(?:[^=]|=\s*.checked.)/i,tn=/^$|\/(?:java|ecma)script/i,nn=/^true\/(.*)/,rn=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,on={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:st.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},an=p(V),sn=an.appendChild(V.createElement("div"));on.optgroup=on.option,on.tbody=on.tfoot=on.colgroup=on.caption=on.thead,on.th=on.td,st.fn.extend({text:function(e){return st.access(this,function(e){return e===t?st.text(this):this.empty().append((this[0]&&this[0].ownerDocument||V).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(st.isFunction(e))return this.each(function(t){st(this).wrapAll(e.call(this,t))});if(this[0]){var t=st(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstChild&&1===e.firstChild.nodeType;)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return st.isFunction(e)?this.each(function(t){st(this).wrapInner(e.call(this,t))}):this.each(function(){var t=st(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=st.isFunction(e);return this.each(function(n){st(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){st.nodeName(this,"body")||st(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){for(var n,r=0;null!=(n=this[r]);r++)(!e||st.filter(e,[n]).length>0)&&(t||1!==n.nodeType||st.cleanData(b(n)),n.parentNode&&(t&&st.contains(n.ownerDocument,n)&&m(b(n,"script")),n.parentNode.removeChild(n)));return this},empty:function(){for(var e,t=0;null!=(e=this[t]);t++){for(1===e.nodeType&&st.cleanData(b(e,!1));e.firstChild;)e.removeChild(e.firstChild);e.options&&st.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return st.clone(this,e,t)})},html:function(e){return st.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(Xt,""):t;if(!("string"!=typeof e||Kt.test(e)||!st.support.htmlSerialize&&Ut.test(e)||!st.support.leadingWhitespace&&Vt.test(e)||on[(Jt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(Yt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(st.cleanData(b(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=st.isFunction(e);return t||"string"==typeof e||(e=st(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;(n&&1===this.nodeType||11===this.nodeType)&&(st(this).remove(),t?t.parentNode.insertBefore(e,t):n.appendChild(e))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=et.apply([],e);var i,o,a,s,u,l,c=0,f=this.length,p=this,m=f-1,y=e[0],v=st.isFunction(y);if(v||!(1>=f||"string"!=typeof y||st.support.checkClone)&&en.test(y))return this.each(function(i){var o=p.eq(i);v&&(e[0]=y.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(f&&(i=st.buildFragment(e,this[0].ownerDocument,!1,this),o=i.firstChild,1===i.childNodes.length&&(i=o),o)){for(n=n&&st.nodeName(o,"tr"),a=st.map(b(i,"script"),h),s=a.length;f>c;c++)u=i,c!==m&&(u=st.clone(u,!0,!0),s&&st.merge(a,b(u,"script"))),r.call(n&&st.nodeName(this[c],"table")?d(this[c],"tbody"):this[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,st.map(a,g),c=0;s>c;c++)u=a[c],tn.test(u.type||"")&&!st._data(u,"globalEval")&&st.contains(l,u)&&(u.src?st.ajax({url:u.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):st.globalEval((u.text||u.textContent||u.innerHTML||"").replace(rn,"")));i=o=null}return this}}),st.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){st.fn[e]=function(e){for(var n,r=0,i=[],o=st(e),a=o.length-1;a>=r;r++)n=r===a?this:this.clone(!0),st(o[r])[t](n),tt.apply(i,n.get());return this.pushStack(i)}}),st.extend({clone:function(e,t,n){var r,i,o,a,s,u=st.contains(e.ownerDocument,e);if(st.support.html5Clone||st.isXMLDoc(e)||!Ut.test("<"+e.nodeName+">")?s=e.cloneNode(!0):(sn.innerHTML=e.outerHTML,sn.removeChild(s=sn.firstChild)),!(st.support.noCloneEvent&&st.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||st.isXMLDoc(e)))for(r=b(s),i=b(e),a=0;null!=(o=i[a]);++a)r[a]&&v(o,r[a]);if(t)if(n)for(i=i||b(e),r=r||b(s),a=0;null!=(o=i[a]);a++)y(o,r[a]);else y(e,s);return r=b(s,"script"),r.length>0&&m(r,!u&&b(e,"script")),r=i=o=null,s},buildFragment:function(e,t,n,r){for(var i,o,a,s,u,l,c,f=e.length,d=p(t),h=[],g=0;f>g;g++)if(o=e[g],o||0===o)if("object"===st.type(o))st.merge(h,o.nodeType?[o]:o);else if(Qt.test(o)){for(s=s||d.appendChild(t.createElement("div")),a=(Jt.exec(o)||["",""])[1].toLowerCase(),u=on[a]||on._default,s.innerHTML=u[1]+o.replace(Yt,"<$1></$2>")+u[2],c=u[0];c--;)s=s.lastChild;if(!st.support.leadingWhitespace&&Vt.test(o)&&h.push(t.createTextNode(Vt.exec(o)[0])),!st.support.tbody)for(o="table"!==a||Gt.test(o)?"<table>"!==u[1]||Gt.test(o)?0:s:s.firstChild,c=o&&o.childNodes.length;c--;)st.nodeName(l=o.childNodes[c],"tbody")&&!l.childNodes.length&&o.removeChild(l);for(st.merge(h,s.childNodes),s.textContent="";s.firstChild;)s.removeChild(s.firstChild);s=d.lastChild}else h.push(t.createTextNode(o));for(s&&d.removeChild(s),st.support.appendChecked||st.grep(b(h,"input"),x),g=0;o=h[g++];)if((!r||-1===st.inArray(o,r))&&(i=st.contains(o.ownerDocument,o),s=b(d.appendChild(o),"script"),i&&m(s),n))for(c=0;o=s[c++];)tn.test(o.type||"")&&n.push(o);return s=null,d},cleanData:function(e,n){for(var r,i,o,a,s=0,u=st.expando,l=st.cache,c=st.support.deleteExpando,f=st.event.special;null!=(o=e[s]);s++)if((n||st.acceptData(o))&&(i=o[u],r=i&&l[i])){if(r.events)for(a in r.events)f[a]?st.event.remove(o,a):st.removeEvent(o,a,r.handle);l[i]&&(delete l[i],c?delete o[u]:o.removeAttribute!==t?o.removeAttribute(u):o[u]=null,K.push(i))}}});var un,ln,cn,fn=/alpha\([^)]*\)/i,pn=/opacity\s*=\s*([^)]*)/,dn=/^(top|right|bottom|left)$/,hn=/^(none|table(?!-c[ea]).+)/,gn=/^margin/,mn=RegExp("^("+ut+")(.*)$","i"),yn=RegExp("^("+ut+")(?!px)[a-z%]+$","i"),vn=RegExp("^([+-])=("+ut+")","i"),bn={BODY:"block"},xn={position:"absolute",visibility:"hidden",display:"block"},Tn={letterSpacing:0,fontWeight:400},wn=["Top","Right","Bottom","Left"],Nn=["Webkit","O","Moz","ms"];st.fn.extend({css:function(e,n){return st.access(this,function(e,n,r){var i,o,a={},s=0;if(st.isArray(n)){for(i=ln(e),o=n.length;o>s;s++)a[n[s]]=st.css(e,n[s],!1,i);return a}return r!==t?st.style(e,n,r):st.css(e,n)},e,n,arguments.length>1)},show:function(){return N(this,!0)},hide:function(){return N(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:w(this))?st(this).show():st(this).hide()})}}),st.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=un(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":st.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,u=st.camelCase(n),l=e.style;if(n=st.cssProps[u]||(st.cssProps[u]=T(l,u)),s=st.cssHooks[n]||st.cssHooks[u],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,"string"===a&&(o=vn.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(st.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||st.cssNumber[u]||(r+="px"),st.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(l[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=st.camelCase(n);return n=st.cssProps[u]||(st.cssProps[u]=T(e.style,u)),s=st.cssHooks[n]||st.cssHooks[u],s&&"get"in s&&(o=s.get(e,!0,r)),o===t&&(o=un(e,n,i)),"normal"===o&&n in Tn&&(o=Tn[n]),r?(a=parseFloat(o),r===!0||st.isNumeric(a)?a||0:o):o},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(ln=function(t){return e.getComputedStyle(t,null)},un=function(e,n,r){var i,o,a,s=r||ln(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&&(""!==u||st.contains(e.ownerDocument,e)||(u=st.style(e,n)),yn.test(u)&&gn.test(n)&&(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):V.documentElement.currentStyle&&(ln=function(e){return e.currentStyle},un=function(e,n,r){var i,o,a,s=r||ln(e),u=s?s[n]:t,l=e.style;return null==u&&l&&l[n]&&(u=l[n]),yn.test(u)&&!dn.test(n)&&(i=l.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),l.left="fontSize"===n?"1em":u,u=l.pixelLeft+"px",l.left=i,a&&(o.left=a)),""===u?"auto":u}),st.each(["height","width"],function(e,n){st.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&hn.test(st.css(e,"display"))?st.swap(e,xn,function(){return E(e,n,i)}):E(e,n,i):t},set:function(e,t,r){var i=r&&ln(e);return C(e,t,r?k(e,n,r,st.support.boxSizing&&"border-box"===st.css(e,"boxSizing",!1,i),i):0)}}}),st.support.opacity||(st.cssHooks.opacity={get:function(e,t){return pn.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=st.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===st.trim(o.replace(fn,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=fn.test(o)?o.replace(fn,i):o+" "+i)}}),st(function(){st.support.reliableMarginRight||(st.cssHooks.marginRight={get:function(e,n){return n?st.swap(e,{display:"inline-block"},un,[e,"marginRight"]):t}}),!st.support.pixelPosition&&st.fn.position&&st.each(["top","left"],function(e,n){st.cssHooks[n]={get:function(e,r){return r?(r=un(e,n),yn.test(r)?st(e).position()[n]+"px":r):t}}})}),st.expr&&st.expr.filters&&(st.expr.filters.hidden=function(e){return 0===e.offsetWidth&&0===e.offsetHeight||!st.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||st.css(e,"display"))},st.expr.filters.visible=function(e){return!st.expr.filters.hidden(e)}),st.each({margin:"",padding:"",border:"Width"},function(e,t){st.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];4>r;r++)i[e+wn[r]+t]=o[r]||o[r-2]||o[0];return i}},gn.test(e)||(st.cssHooks[e+t].set=C)});var Cn=/%20/g,kn=/\[\]$/,En=/\r?\n/g,Sn=/^(?:submit|button|image|reset)$/i,An=/^(?:input|select|textarea|keygen)/i;st.fn.extend({serialize:function(){return st.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=st.prop(this,"elements");return e?st.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!st(this).is(":disabled")&&An.test(this.nodeName)&&!Sn.test(e)&&(this.checked||!Zt.test(e))}).map(function(e,t){var n=st(this).val();return null==n?null:st.isArray(n)?st.map(n,function(e){return{name:t.name,value:e.replace(En,"\r\n")}}):{name:t.name,value:n.replace(En,"\r\n")}}).get()}}),st.param=function(e,n){var r,i=[],o=function(e,t){t=st.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=st.ajaxSettings&&st.ajaxSettings.traditional),st.isArray(e)||e.jquery&&!st.isPlainObject(e))st.each(e,function(){o(this.name,this.value)});else for(r in e)j(r,e[r],n,o);return i.join("&").replace(Cn,"+")};var jn,Dn,Ln=st.now(),Hn=/\?/,Mn=/#.*$/,qn=/([?&])_=[^&]*/,_n=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Fn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,On=/^(?:GET|HEAD)$/,Bn=/^\/\//,Pn=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Rn=st.fn.load,Wn={},$n={},In="*/".concat("*");try{Dn=Y.href}catch(zn){Dn=V.createElement("a"),Dn.href="",Dn=Dn.href}jn=Pn.exec(Dn.toLowerCase())||[],st.fn.load=function(e,n,r){if("string"!=typeof e&&Rn)return Rn.apply(this,arguments);var i,o,a,s=this,u=e.indexOf(" ");return u>=0&&(i=e.slice(u,e.length),e=e.slice(0,u)),st.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(o="POST"),s.length>0&&st.ajax({url:e,type:o,dataType:"html",data:n}).done(function(e){a=arguments,s.html(i?st("<div>").append(st.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,a||[e.responseText,t,e])}),this},st.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){st.fn[t]=function(e){return this.on(t,e)}}),st.each(["get","post"],function(e,n){st[n]=function(e,r,i,o){return st.isFunction(r)&&(o=o||i,i=r,r=t),st.ajax({url:e,type:n,dataType:o,data:r,success:i})}}),st.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Dn,type:"GET",isLocal:Fn.test(jn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":In,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":st.parseJSON,"text xml":st.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?H(H(e,st.ajaxSettings),t):H(st.ajaxSettings,e)},ajaxPrefilter:D(Wn),ajaxTransport:D($n),ajax:function(e,n){function r(e,n,r,s){var l,f,v,b,T,N=n;2!==x&&(x=2,u&&clearTimeout(u),i=t,a=s||"",w.readyState=e>0?4:0,r&&(b=M(p,w,r)),e>=200&&300>e||304===e?(p.ifModified&&(T=w.getResponseHeader("Last-Modified"),T&&(st.lastModified[o]=T),T=w.getResponseHeader("etag"),T&&(st.etag[o]=T)),304===e?(l=!0,N="notmodified"):(l=q(p,b),N=l.state,f=l.data,v=l.error,l=!v)):(v=N,(e||!N)&&(N="error",0>e&&(e=0))),w.status=e,w.statusText=(n||N)+"",l?g.resolveWith(d,[f,N,w]):g.rejectWith(d,[w,N,v]),w.statusCode(y),y=t,c&&h.trigger(l?"ajaxSuccess":"ajaxError",[w,p,l?f:v]),m.fireWith(d,[w,N]),c&&(h.trigger("ajaxComplete",[w,p]),--st.active||st.event.trigger("ajaxStop")))}"object"==typeof e&&(n=e,e=t),n=n||{};var i,o,a,s,u,l,c,f,p=st.ajaxSetup({},n),d=p.context||p,h=p.context&&(d.nodeType||d.jquery)?st(d):st.event,g=st.Deferred(),m=st.Callbacks("once memory"),y=p.statusCode||{},v={},b={},x=0,T="canceled",w={readyState:0,getResponseHeader:function(e){var t;if(2===x){if(!s)for(s={};t=_n.exec(a);)s[t[1].toLowerCase()]=t[2];t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===x?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=b[n]=b[n]||e,v[e]=t),this},overrideMimeType:function(e){return x||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>x)for(t in e)y[t]=[y[t],e[t]];else w.always(e[w.status]);return this},abort:function(e){var t=e||T;return i&&i.abort(t),r(0,t),this}};if(g.promise(w).complete=m.add,w.success=w.done,w.error=w.fail,p.url=((e||p.url||Dn)+"").replace(Mn,"").replace(Bn,jn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=st.trim(p.dataType||"*").toLowerCase().match(lt)||[""],null==p.crossDomain&&(l=Pn.exec(p.url.toLowerCase()),p.crossDomain=!(!l||l[1]===jn[1]&&l[2]===jn[2]&&(l[3]||("http:"===l[1]?80:443))==(jn[3]||("http:"===jn[1]?80:443)))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=st.param(p.data,p.traditional)),L(Wn,p,n,w),2===x)return w;c=p.global,c&&0===st.active++&&st.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!On.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(Hn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=qn.test(o)?o.replace(qn,"$1_="+Ln++):o+(Hn.test(o)?"&":"?")+"_="+Ln++)),p.ifModified&&(st.lastModified[o]&&w.setRequestHeader("If-Modified-Since",st.lastModified[o]),st.etag[o]&&w.setRequestHeader("If-None-Match",st.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&w.setRequestHeader("Content-Type",p.contentType),w.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+In+"; q=0.01":""):p.accepts["*"]);for(f in p.headers)w.setRequestHeader(f,p.headers[f]);if(p.beforeSend&&(p.beforeSend.call(d,w,p)===!1||2===x))return w.abort();T="abort";for(f in{success:1,error:1,complete:1})w[f](p[f]);if(i=L($n,p,n,w)){w.readyState=1,c&&h.trigger("ajaxSend",[w,p]),p.async&&p.timeout>0&&(u=setTimeout(function(){w.abort("timeout")},p.timeout));try{x=1,i.send(v,r)}catch(N){if(!(2>x))throw N;r(-1,N)}}else r(-1,"No Transport");return w},getScript:function(e,n){return st.get(e,t,n,"script")},getJSON:function(e,t,n){return st.get(e,t,n,"json")}}),st.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return st.globalEval(e),e}}}),st.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),st.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=V.head||st("head")[0]||V.documentElement;return{send:function(t,i){n=V.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Xn=[],Un=/(=)\?(?=&|$)|\?\?/;st.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xn.pop()||st.expando+"_"+Ln++;return this[e]=!0,e}}),st.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,u=n.jsonp!==!1&&(Un.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Un.test(n.data)&&"data");return u||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=st.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,u?n[u]=n[u].replace(Un,"$1"+o):n.jsonp!==!1&&(n.url+=(Hn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||st.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Xn.push(o)),s&&st.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Vn,Yn,Jn=0,Gn=e.ActiveXObject&&function(){var e;for(e in Vn)Vn[e](t,!0)};st.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&_()||F()}:_,Yn=st.ajaxSettings.xhr(),st.support.cors=!!Yn&&"withCredentials"in Yn,Yn=st.support.ajax=!!Yn,Yn&&st.ajaxTransport(function(n){if(!n.crossDomain||st.support.cors){var r;return{send:function(i,o){var a,s,u=n.xhr();if(n.username?u.open(n.type,n.url,n.async,n.username,n.password):u.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)u[s]=n.xhrFields[s];n.mimeType&&u.overrideMimeType&&u.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)u.setRequestHeader(s,i[s])}catch(l){}u.send(n.hasContent&&n.data||null),r=function(e,i){var s,l,c,f,p;try{if(r&&(i||4===u.readyState))if(r=t,a&&(u.onreadystatechange=st.noop,Gn&&delete Vn[a]),i)4!==u.readyState&&u.abort();else{f={},s=u.status,p=u.responseXML,c=u.getAllResponseHeaders(),p&&p.documentElement&&(f.xml=p),"string"==typeof u.responseText&&(f.text=u.responseText);try{l=u.statusText}catch(d){l=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=f.text?200:404}}catch(h){i||o(-1,h)}f&&o(s,l,f,c)},n.async?4===u.readyState?setTimeout(r):(a=++Jn,Gn&&(Vn||(Vn={},st(e).unload(Gn)),Vn[a]=r),u.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Qn,Kn,Zn=/^(?:toggle|show|hide)$/,er=RegExp("^(?:([+-])=|)("+ut+")([a-z%]*)$","i"),tr=/queueHooks$/,nr=[W],rr={"*":[function(e,t){var n,r,i=this.createTween(e,t),o=er.exec(t),a=i.cur(),s=+a||0,u=1,l=20;if(o){if(n=+o[2],r=o[3]||(st.cssNumber[e]?"":"px"),"px"!==r&&s){s=st.css(i.elem,e,!0)||n||1;do u=u||".5",s/=u,st.style(i.elem,e,s+r);while(u!==(u=i.cur()/a)&&1!==u&&--l)}i.unit=r,i.start=s,i.end=o[1]?s+(o[1]+1)*n:n}return i}]};st.Animation=st.extend(P,{tweener:function(e,t){st.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");for(var n,r=0,i=e.length;i>r;r++)n=e[r],rr[n]=rr[n]||[],rr[n].unshift(t)},prefilter:function(e,t){t?nr.unshift(e):nr.push(e)}}),st.Tween=$,$.prototype={constructor:$,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(st.cssNumber[n]?"":"px")},cur:function(){var e=$.propHooks[this.prop];return e&&e.get?e.get(this):$.propHooks._default.get(this)},run:function(e){var t,n=$.propHooks[this.prop];return this.pos=t=this.options.duration?st.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):$.propHooks._default.set(this),this}},$.prototype.init.prototype=$.prototype,$.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=st.css(e.elem,e.prop,"auto"),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){st.fx.step[e.prop]?st.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[st.cssProps[e.prop]]||st.cssHooks[e.prop])?st.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},$.propHooks.scrollTop=$.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},st.each(["toggle","show","hide"],function(e,t){var n=st.fn[t];st.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(I(t,!0),e,r,i)}}),st.fn.extend({fadeTo:function(e,t,n,r){return this.filter(w).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=st.isEmptyObject(e),o=st.speed(t,n,r),a=function(){var t=P(this,st.extend({},e),o);a.finish=function(){t.stop(!0)},(i||st._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=st.timers,a=st._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&tr.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&st.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=st._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=st.timers,a=r?r.length:0;for(n.finish=!0,st.queue(this,e,[]),i&&i.cur&&i.cur.finish&&i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),st.each({slideDown:I("show"),slideUp:I("hide"),slideToggle:I("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){st.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),st.speed=function(e,t,n){var r=e&&"object"==typeof e?st.extend({},e):{complete:n||!n&&t||st.isFunction(e)&&e,duration:e,easing:n&&t||t&&!st.isFunction(t)&&t};return r.duration=st.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in st.fx.speeds?st.fx.speeds[r.duration]:st.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){st.isFunction(r.old)&&r.old.call(this),r.queue&&st.dequeue(this,r.queue)},r},st.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},st.timers=[],st.fx=$.prototype.init,st.fx.tick=function(){var e,n=st.timers,r=0;for(Qn=st.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||st.fx.stop(),Qn=t},st.fx.timer=function(e){e()&&st.timers.push(e)&&st.fx.start()},st.fx.interval=13,st.fx.start=function(){Kn||(Kn=setInterval(st.fx.tick,st.fx.interval))},st.fx.stop=function(){clearInterval(Kn),Kn=null},st.fx.speeds={slow:600,fast:200,_default:400},st.fx.step={},st.expr&&st.expr.filters&&(st.expr.filters.animated=function(e){return st.grep(st.timers,function(t){return e===t.elem}).length}),st.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){st.offset.setOffset(this,e,t)});var n,r,i={top:0,left:0},o=this[0],a=o&&o.ownerDocument;if(a)return n=a.documentElement,st.contains(n,o)?(o.getBoundingClientRect!==t&&(i=o.getBoundingClientRect()),r=z(a),{top:i.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:i.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):i},st.offset={setOffset:function(e,t,n){var r=st.css(e,"position");"static"===r&&(e.style.position="relative");var i,o,a=st(e),s=a.offset(),u=st.css(e,"top"),l=st.css(e,"left"),c=("absolute"===r||"fixed"===r)&&st.inArray("auto",[u,l])>-1,f={},p={};c?(p=a.position(),i=p.top,o=p.left):(i=parseFloat(u)||0,o=parseFloat(l)||0),st.isFunction(t)&&(t=t.call(e,n,s)),null!=t.top&&(f.top=t.top-s.top+i),null!=t.left&&(f.left=t.left-s.left+o),"using"in t?t.using.call(e,f):a.css(f)}},st.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===st.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),st.nodeName(e[0],"html")||(n=e.offset()),n.top+=st.css(e[0],"borderTopWidth",!0),n.left+=st.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-st.css(r,"marginTop",!0),left:t.left-n.left-st.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent||V.documentElement;e&&!st.nodeName(e,"html")&&"static"===st.css(e,"position");)e=e.offsetParent;return e||V.documentElement})}}),st.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);st.fn[e]=function(i){return st.access(this,function(e,i,o){var a=z(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?st(a).scrollLeft():o,r?o:st(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}}),st.each({Height:"height",Width:"width"},function(e,n){st.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){st.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return st.access(this,function(n,r,i){var o;return st.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?st.css(n,r,s):st.style(n,r,i,s)},n,a?i:t,a,null)}})}),e.jQuery=e.$=st,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return st})})(window);
+//@ sourceMappingURL=jquery.min.map
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/website/third-party-libs/uglify.js b/vendor/dimsemenov/magnific-popup/website/third-party-libs/uglify.js
new file mode 100644
index 0000000000..ccc4f23f2b
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/third-party-libs/uglify.js
@@ -0,0 +1,13 @@
+/**
+ * UglifUI
+ * by Alex Sexton
+ *
+ * UglifyJS 
+ * by Mihai Bazon, BSD license
+ *
+ * Underscore.js
+ * by Brad Dunbar
+ * 
+ */
+(function(){})(),function(){var a=this,b=a._,c={},d=Array.prototype,e=Object.prototype,f=d.slice,g=d.unshift,h=e.toString,i=e.hasOwnProperty,j=d.forEach,k=d.map,l=d.reduce,m=d.reduceRight,n=d.filter,o=d.every,p=d.some,q=d.indexOf,r=d.lastIndexOf;e=Array.isArray;var s=Object.keys,t=function(a){return new y(a)};typeof module!="undefined"&&module.exports?(module.exports=t,t._=t):a._=t,t.VERSION="1.1.4";var u=t.each=t.forEach=function(a,b,d){if(a!=null)if(j&&a.forEach===j)a.forEach(b,d);else if(t.isNumber(a.length)){for(var e=0,f=a.length;e<f;e++)if(b.call(d,a[e],e,a)===c)break}else for(e in a)if(i.call(a,e)&&b.call(d,a[e],e,a)===c)break};t.map=function(a,b,c){var d=[];return a==null?d:k&&a.map===k?a.map(b,c):(u(a,function(a,e,f){d[d.length]=b.call(c,a,e,f)}),d)},t.reduce=t.foldl=t.inject=function(a,b,c,d){var e=c!==void 0;a==null&&(a=[]);if(l&&a.reduce===l)return d&&(b=t.bind(b,d)),e?a.reduce(b,c):a.reduce(b);u(a,function(a,f,g){!e&&f===0?(c=a,e=!0):c=b.call(d,c,a,f,g)});if(!e)throw new TypeError("Reduce of empty array with no initial value");return c},t.reduceRight=t.foldr=function(a,b,c,d){return a==null&&(a=[]),m&&a.reduceRight===m?(d&&(b=t.bind(b,d)),c!==void 0?a.reduceRight(b,c):a.reduceRight(b)):(a=(t.isArray(a)?a.slice():t.toArray(a)).reverse(),t.reduce(a,b,c,d))},t.find=t.detect=function(a,b,c){var d;return v(a,function(a,e,f){if(b.call(c,a,e,f))return d=a,!0}),d},t.filter=t.select=function(a,b,c){var d=[];return a==null?d:n&&a.filter===n?a.filter(b,c):(u(a,function(a,e,f){b.call(c,a,e,f)&&(d[d.length]=a)}),d)},t.reject=function(a,b,c){var d=[];return a==null?d:(u(a,function(a,e,f){b.call(c,a,e,f)||(d[d.length]=a)}),d)},t.every=t.all=function(a,b,d){b=b||t.identity;var e=!0;return a==null?e:o&&a.every===o?a.every(b,d):(u(a,function(a,f,g){if(!(e=e&&b.call(d,a,f,g)))return c}),e)};var v=t.some=t.any=function(a,b,d){b=b||t.identity;var e=!1;return a==null?e:p&&a.some===p?a.some(b,d):(u(a,function(a,f,g){if(e=b.call(d,a,f,g))return c}),e)};t.include=t.contains=function(a,b){var c=!1;return a==null?c:q&&a.indexOf===q?a.indexOf(b)!=-1:(v(a,function(a){if(c=a===b)return!0}),c)},t.invoke=function(a,b){var c=f.call(arguments,2);return t.map(a,function(a){return(b?a[b]:a).apply(a,c)})},t.pluck=function(a,b){return t.map(a,function(a){return a[b]})},t.max=function(a,b,c){if(!b&&t.isArray(a))return Math.max.apply(Math,a);var d={computed:-Infinity};return u(a,function(a,e,f){e=b?b.call(c,a,e,f):a,e>=d.computed&&(d={value:a,computed:e})}),d.value},t.min=function(a,b,c){if(!b&&t.isArray(a))return Math.min.apply(Math,a);var d={computed:Infinity};return u(a,function(a,e,f){e=b?b.call(c,a,e,f):a,e<d.computed&&(d={value:a,computed:e})}),d.value},t.sortBy=function(a,b,c){return t.pluck(t.map(a,function(a,d,e){return{value:a,criteria:b.call(c,a,d,e)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;return c<d?-1:c>d?1:0}),"value")},t.sortedIndex=function(a,b,c){c=c||t.identity;for(var d=0,e=a.length;d<e;){var f=d+e>>1;c(a[f])<c(b)?d=f+1:e=f}return d},t.toArray=function(a){return a?a.toArray?a.toArray():t.isArray(a)?a:t.isArguments(a)?f.call(a):t.values(a):[]},t.size=function(a){return t.toArray(a).length},t.first=t.head=function(a,b,c){return b&&!c?f.call(a,0,b):a[0]},t.rest=t.tail=function(a,b,c){return f.call(a,t.isUndefined(b)||c?1:b)},t.last=function(a){return a[a.length-1]},t.compact=function(a){return t.filter(a,function(a){return!!a})},t.flatten=function(a){return t.reduce(a,function(a,b){return t.isArray(b)?a.concat(t.flatten(b)):(a[a.length]=b,a)},[])},t.without=function(a){var b=f.call(arguments,1);return t.filter(a,function(a){return!t.include(b,a)})},t.uniq=t.unique=function(a,b){return t.reduce(a,function(a,c,d){if(0==d||(b===!0?t.last(a)!=c:!t.include(a,c)))a[a.length]=c;return a},[])},t.intersect=function(a){var b=f.call(arguments,1);return t.filter(t.uniq(a),function(a){return t.every(b,function(b){return t.indexOf(b,a)>=0})})},t.zip=function(){for(var a=f.call(arguments),b=t.max(t.pluck(a,"length")),c=Array(b),d=0;d<b;d++)c[d]=t.pluck(a,""+d);return c},t.indexOf=function(a,b,c){if(a==null)return-1;if(c)return c=t.sortedIndex(a,b),a[c]===b?c:-1;if(q&&a.indexOf===q)return a.indexOf(b);c=0;for(var d=a.length;c<d;c++)if(a[c]===b)return c;return-1},t.lastIndexOf=function(a,b){if(a==null)return-1;if(r&&a.lastIndexOf===r)return a.lastIndexOf(b);for(var c=a.length;c--;)if(a[c]===b)return c;return-1},t.range=function(a,b,c){var d=f.call(arguments),e=d.length<=1;a=e?0:d[0],b=e?d[0]:d[1],c=d[2]||1,d=Math.max(Math.ceil((b-a)/c),0),e=0;for(var g=Array(d);e<d;)g[e++]=a,a+=c;return g},t.bind=function(a,b){var c=f.call(arguments,2);return function(){return a.apply(b||{},c.concat(f.call(arguments)))}},t.bindAll=function(a){var b=f.call(arguments,1);return b.length==0&&(b=t.functions(a)),u(b,function(b){a[b]=t.bind(a[b],a)}),a},t.memoize=function(a,b){var c={};return b=b||t.identity,function(){var d=b.apply(this,arguments);return d in c?c[d]:c[d]=a.apply(this,arguments)}},t.delay=function(a,b){var c=f.call(arguments,2);return setTimeout(function(){return a.apply(a,c)},b)},t.defer=function(a){return t.delay.apply(t,[a,1].concat(f.call(arguments,1)))};var w=function(a,b,c){var d;return function(){var e=this,f=arguments,g=function(){d=null,a.apply(e,f)};c&&clearTimeout(d);if(c||!d)d=setTimeout(g,b)}};t.throttle=function(a,b){return w(a,b,!1)},t.debounce=function(a,b){return w(a,b,!0)},t.wrap=function(a,b){return function(){var c=[a].concat(f.call(arguments));return b.apply(this,c)}},t.compose=function(){var a=f.call(arguments);return function(){for(var b=f.call(arguments),c=a.length-1;c>=0;c--)b=[a[c].apply(this,b)];return b[0]}},t.keys=s||function(a){if(t.isArray(a))return t.range(0,a.length);var b=[],c;for(c in a)i.call(a,c)&&(b[b.length]=c);return b},t.values=function(a){return t.map(a,t.identity)},t.functions=t.methods=function(a){return t.filter(t.keys(a),function(b){return t.isFunction(a[b])}).sort()},t.extend=function(a){return u(f.call(arguments,1),function(b){for(var c in b)a[c]=b[c]}),a},t.clone=function(a){return t.isArray(a)?a.slice():t.extend({},a)},t.tap=function(a,b){return b(a),a},t.isEqual=function(a,b){if(a===b)return!0;var c=typeof a;if(c!=typeof b)return!1;if(a==b)return!0;if(!a&&b||a&&!b)return!1;a._chain&&(a=a._wrapped),b._chain&&(b=b._wrapped);if(a.isEqual)return a.isEqual(b);if(t.isDate(a)&&t.isDate(b))return a.getTime()===b.getTime();if(t.isNaN(a)&&t.isNaN(b))return!1;if(t.isRegExp(a)&&t.isRegExp(b))return a.source===b.source&&a.global===b.global&&a.ignoreCase===b.ignoreCase&&a.multiline===b.multiline;if(c!=="object")return!1;if(a.length&&a.length!==b.length)return!1;c=t.keys(a);var d=t.keys(b);if(c.length!=d.length)return!1;for(var e in a)if(!(e in b)||!t.isEqual(a[e],b[e]))return!1;return!0},t.isEmpty=function(a){if(t.isArray(a)||t.isString(a))return a.length===0;for(var b in a)if(i.call(a,b))return!1;return!0},t.isElement=function(a){return!!a&&a.nodeType==1},t.isArray=e||function(a){return h.call(a)==="[object Array]"},t.isArguments=function(a){return!!a&&!!i.call(a,"callee")},t.isFunction=function(a){return!!(a&&a.constructor&&a.call&&a.apply)},t.isString=function(a){return!!(a===""||a&&a.charCodeAt&&a.substr)},t.isNumber=function(a){return!!(a===0||a&&a.toExponential&&a.toFixed)},t.isNaN=function(a){return a!==a},t.isBoolean=function(a){return a===!0||a===!1},t.isDate=function(a){return!!(a&&a.getTimezoneOffset&&a.setUTCFullYear)},t.isRegExp=function(a){return!(!(a&&a.test&&a.exec)||!a.ignoreCase&&a.ignoreCase!==!1)},t.isNull=function(a){return a===null},t.isUndefined=function(a){return a===void 0},t.noConflict=function(){return a._=b,this},t.identity=function(a){return a},t.times=function(a,b,c){for(var d=0;d<a;d++)b.call(c,d)},t.mixin=function(a){u(t.functions(a),function(b){A(b,t[b]=a[b])})};var x=0;t.uniqueId=function(a){var b=x++;return a?a+b:b},t.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g},t.template=function(a,b){var c=t.templateSettings;return c="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(c.interpolate,function(a,b){return"',"+b.replace(/\\'/g,"'")+",'"}).replace(c.evaluate||null,function(a,b){return"');"+b.replace(/\\'/g,"'").replace(/[\r\n\t]/g," ")+"__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",c=Function("obj",c),b?c(b):c};var y=function(a){this._wrapped=a};t.prototype=y.prototype;var z=function(a,b){return b?t(a).chain():a},A=function(a,b){y.prototype[a]=function(){var a=f.call(arguments);return g.call(a,this._wrapped),z(b.apply(t,a),this._chain)}};t.mixin(t),u(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var b=d[a];y.prototype[a]=function(){return b.apply(this._wrapped,arguments),z(this._wrapped,this._chain)}}),u(["concat","join","slice"],function(a){var b=d[a];y.prototype[a]=function(){return z(b.apply(this._wrapped,arguments),this._chain)}}),y.prototype.chain=function(){return this._chain=!0,this},y.prototype.value=function(){return this._wrapped}}(),function(a){function b(a){return J.letter.test(a)}function c(a){return a=a.charCodeAt(0),a>=48&&a<=57}function d(a){return c(a)||b(a)}function e(a){return J.non_spacing_mark.test(a)||J.space_combining_mark.test(a)}function f(a){return J.connector_punctuation.test(a)}function g(a){return a=="$"||a=="_"||b(a)}function h(a){return g(a)||e(a)||c(a)||f(a)||a=="‌"||a=="‍"}function i(a){if(B.test(a))return parseInt(a.substr(2),16);if(C.test(a))return parseInt(a.substr(1),8);if(D.test(a))return parseFloat(a)}function j(a,b,c,d){this.message=a,this.line=b+1,this.col=c+1,this.pos=d+1,this.stack=Error().stack}function k(a,b,c,d){}function l(a,b,c){return a.type==b&&(c==null||a.value==c)}function m(a){function b(){return P.text.charAt(P.pos)}function e(a,b){var c=P.text.charAt(P.pos++);if(a&&!c)throw K;return c=="\n"?(P.newline_before=P.newline_before||!b,++P.line,P.col=0):++P.col,c}function f(){return!P.peek()}function j(a,b){var c=P.text.indexOf(a,P.pos);if(b&&c==-1)throw K;return c}function l(){P.tokline=P.line,P.tokcol=P.col,P.tokpos=P.pos}function m(a,b,c){P.regex_allowed=a=="operator"&&!v(M,b)||a=="keyword"&&v(y,b)||a=="punc"&&v(G,b);var d={type:a,value:b,line:P.tokline,col:P.tokcol,pos:P.tokpos,endpos:P.pos,nlb:P.newline_before};return c||(d.comments_before=P.comments_before,P.comments_before=[]),P.newline_before=!1,d}function n(){while(v(F,b()))e()}function o(a){var c="",d=b(),f=0;while(d&&a(d,f++))c+=e(),d=b();return c}function p(a){k(a,P.tokline,P.tokcol,P.tokpos)}function q(a){var b=!1,c=!1,e=!1,f=a==".",g=o(function(g,h){return g=="x"||g=="X"?e?!1:e=!0:!!e||g!="E"&&g!="e"?g=="-"?c||h==0&&!a?!0:!1:g=="+"?c:(c=!1,g=="."?!f&&!e?f=!0:!1:d(g)):b?!1:b=c=!0});a&&(g=a+g);var h=i(g);if(!isNaN(h))return m("num",h);p("Invalid syntax: "+g)}function r(a){var b=e(!0,a);switch(b){case"n":return"\n";case"r":return"\r";case"t":return"\t";case"b":return"\b";case"v":return"";case"f":return"\f";case"0":return"\0";case"x":return String.fromCharCode(s(2));case"u":return String.fromCharCode(s(4));case"\n":return"";default:return b}}function s(a){var b=0;for(;a>0;--a){var c=parseInt(e(!0),16);isNaN(c)&&p("Invalid hex-character pattern in string"),b=b<<4|c}return b}function t(){return N("Unterminated string constant",function(){var a=e(),b="";for(;;){var c=e(!0);if(c=="\\"){var d=0,f=null;c=o(function(a){if(a>="0"&&a<="7"){if(!f)return f=a,++d;if(f<="3"&&d<=2)return++d;if(f>="4"&&d<=1)return++d}return!1}),d>0?c=String.fromCharCode(parseInt(c,8)):c=r(!0)}else if(c==a)break;b+=c}return m("string",b)})}function u(){e();var a=j("\n"),b;return a==-1?(b=P.text.substr(P.pos),P.pos=P.text.length):(b=P.text.substring(P.pos,a),P.pos=a),m("comment1",b,!0)}function x(){return e(),N("Unterminated multiline comment",function(){var a=j("*/",!0),b=P.text.substring(P.pos,a);return P.pos=a+2,P.line+=b.split("\n").length-1,P.newline_before=b.indexOf("\n")>=0,/^@cc_on/i.test(b)&&(R("WARNING: at line "+P.line),R('*** Found "conditional comment": '+b),R("*** UglifyJS DISCARDS ALL COMMENTS.  This means your code might no longer work properly in Internet Explorer.")),m("comment2",b,!0)})}function B(){var a=!1,c="",d;while((d=b())!=null)if(!a)if(d=="\\")a=!0,e();else{if(!h(d))break;c+=e()}else d!="u"&&p("Expecting UnicodeEscapeSequence -- uXXXX"),d=r(),h(d)||p("Unicode char: "+d.charCodeAt(0)+" is not valid in identifier"),c+=d,a=!1;return c}function C(a){return N("Unterminated regular expression",function(){var b=!1,c,d=!1;while(c=e(!0))if(b)a+="\\"+c,b=!1;else if(c=="[")d=!0,a+=c;else if(c=="]"&&d)d=!1,a+=c;else{if(c=="/"&&!d)break;c=="\\"?b=!0:a+=c}var f=B();return m("regexp",[a,f])})}function D(a){function c(a){if(!b())return a;var d=a+b();return v(E,d)?(e(),c(d)):a}return m("operator",c(a||e()))}function I(){e();var a=P.regex_allowed;switch(b()){case"/":return P.comments_before.push(u()),P.regex_allowed=a,O();case"*":return P.comments_before.push(x()),P.regex_allowed=a,O()}return P.regex_allowed?C(""):D("/")}function J(){return e(),c(b())?q("."):m("punc",".")}function L(){var a=B();return v(w,a)?v(E,a)?m("operator",a):v(z,a)?m("atom",a):m("keyword",a):m("name",a)}function N(a,b){try{return b()}catch(c){if(c!==K)throw c;p(a)}}function O(a){if(a!=null)return C(a);n(),l();var d=b();if(!d)return m("eof");if(c(d))return q();if(d=='"'||d=="'")return t();if(v(H,d))return m("punc",e());if(d==".")return J();if(d=="/")return I();if(v(A,d))return D();if(d=="\\"||g(d))return L();p("Unexpected character '"+d+"'")}var P={text:a.replace(/\r\n?|[\n\u2028\u2029]/g,"\n").replace(/^\uFEFF/,""),pos:0,tokpos:0,line:0,tokline:0,col:0,tokcol:0,newline_before:!1,regex_allowed:!1,comments_before:[]};return O.context=function(a){return a&&(P=a),P},O}function n(a,b,c){this.name=a,this.start=b,this.end=c}function o(a,b,c){function d(a,b){return l(jb.token,a,b)}function e(){return jb.peeked||(jb.peeked=jb.input())}function f(){return jb.prev=jb.token,jb.peeked?(jb.token=jb.peeked,jb.peeked=null):jb.token=jb.input(),jb.token}function g(){return jb.prev}function h(a,b,c,d){var e=jb.input.context();k(a,b!=null?b:e.tokline,c!=null?c:e.tokcol,d!=null?d:e.tokpos)}function i(a,b){h(b,a.line,a.col)}function j(a){a==null&&(a=jb.token),i(a,"Unexpected token: "+a.type+" ("+a.value+")")}function o(a,b){if(d(a,b))return f();i(jb.token,"Unexpected token "+jb.token.type+", expected "+a)}function r(a){return o("punc",a)}function t(){return!b&&(jb.token.nlb||d("eof")||d("punc","}"))}function w(){d("punc",";")?f():t()||j()}function x(){return s(arguments)}function y(){r("(");var a=ob();return r(")"),a}function z(a,b,c){return a instanceof n?a:new n(a,b,c)}function A(a){return c?function(){var b=jb.token,c=a.apply(this,arguments);return c[0]=z(c[0],b,g()),c}:a}function B(a){jb.labels.push(a);var c=jb.token,d=kb();return b&&!v(P,d[0])&&j(c),jb.labels.pop(),x("label",a,d)}function C(){return x("stat",q(ob,w))}function D(a){var b;return t()||(b=d("name")?jb.token.value:null),b!=null?(f(),u(b,jb.labels)||h("Label "+b+" without matching loop or statement")):jb.in_loop==0&&h(a+" not inside a loop or switch"),w(),x(a,b)}function E(){r("(");var a=null;if(!d("punc",";")){a=d("keyword","var")?(f(),R(!0)):ob(!0,!0);if(d("operator","in"))return a[0]=="var"&&a[1].length>1&&h("Only one variable declaration allowed in for..in loop"),G(a)}return F(a)}function F(a){r(";");var b=d("punc",";")?null:ob();r(";");var c=d("punc",")")?null:ob();return r(")"),x("for",a,b,c,ib(kb))}function G(a){var b=a[0]=="var"?x("name",a[1][0]):a;f();var c=ob();return r(")"),x("for-in",a,b,c,ib(kb))}function H(){var a=y(),b=kb(),c;return d("keyword","else")&&(f(),c=kb()),x("if",a,b,c)}function I(){r("{");var a=[];while(!d("punc","}"))d("eof")&&j(),a.push(kb());return f(),a}function J(){var a=I(),b,c;if(d("keyword","catch")){f(),r("("),d("name")||h("Name expected");var e=jb.token.value;f(),r(")"),b=[e,I()]}return d("keyword","finally")&&(f(),c=I()),!b&&!c&&h("Missing catch/finally blocks"),x("try",a,b,c)}function K(a){var b=[];for(;;){d("name")||j();var c=jb.token.value;f(),d("operator","=")?(f(),b.push([c,ob(!1,a)])):b.push([c]);if(!d("punc",","))break;f()}return b}function R(a){return x("var",K(a))}function S(){return x("const",K())}function V(){var a=nb(!1),b;return d("punc","(")?(f(),b=W(")")):b=[],ab(x("new",a,b),!0)}function W(a,b,c){var e=!0,g=[];while(!d("punc",a)){e?e=!1:r(",");if(b&&d("punc",a))break;d("punc",",")&&c?g.push(["atom","undefined"]):g.push(ob(!1))}return f(),g}function X(){return x("array",W("]",!b,!0))}function Y(){var a=!0,c=[];while(!d("punc","}")){a?a=!1:r(",");if(!b&&d("punc","}"))break;var e=jb.token.type,g=Z();e!="name"||g!="get"&&g!="set"||!!d("punc",":")?(r(":"),c.push([g,ob(!1)])):c.push([$(),lb(!1),g])}return f(),x("object",c)}function Z(){switch(jb.token.type){case"num":case"string":return q(jb.token.value,f)}return $()}function $(){switch(jb.token.type){case"name":case"operator":case"keyword":case"atom":return q(jb.token.value,f);default:j()}}function ab(a,b){return d("punc",".")?(f(),ab(x("dot",a,$()),b)):d("punc","[")?(f(),ab(x("sub",a,q(ob,p(r,"]"))),b)):b&&d("punc","(")?(f(),ab(x("call",a,W(")")),!0)):a}function bb(a){if(d("operator")&&v(L,jb.token.value))return cb("unary-prefix",q(jb.token.value,f),bb(a));var b=nb(a);while(d("operator")&&v(M,jb.token.value)&&!jb.token.nlb)b=cb("unary-postfix",jb.token.value,b),f();return b}function cb(a,b,c){return(b=="++"||b=="--")&&!gb(c)&&h("Invalid use of "+b+" operator"),x(a,b,c)}function db(a,b,c){var e=d("operator")?jb.token.value:null;e&&e=="in"&&c&&(e=null);var g=e!=null?O[e]:null;if(g!=null&&g>b){f();var h=db(bb(!0),g,c);return db(x("binary",e,a,h),b,c)}return a}function eb(a){return db(bb(!0),0,a)}function fb(a){var b=eb(a);if(d("operator","?")){f();var c=ob(!1);return r(":"),x("conditional",b,c,ob(!1,a))}return b}function gb(a){if(!b)return!0;switch(a[0]+""){case"dot":case"sub":case"new":case"call":return!0;case"name":return a[1]!="this"}}function hb(a){var b=fb(a),c=jb.token.value;if(d("operator")&&v(N,c)){if(gb(b))return f(),x("assign",N[c],b,hb(a));h("Invalid assignment")}return b}function ib(a){try{return++jb.in_loop,a()}catch(b){}finally{--jb.in_loop}}var jb={input:typeof a=="string"?m(a,!0):a,token:null,prev:null,peeked:null,in_function:0,in_loop:0,labels:[]};jb.token=f();var kb=A(function(){if(d("operator","/")||d("operator","/="))jb.peeked=null,jb.token=jb.input(jb.token.value.substr(1));switch(jb.token.type){case"num":case"string":case"regexp":case"operator":case"atom":return C();case"name":return l(e(),"punc",":")?B(q(jb.token.value,f,f)):C();case"punc":switch(jb.token.value){case"{":return x("block",I());case"[":case"(":return C();case";":return f(),x("block");default:j()};case"keyword":switch(q(jb.token.value,f)){case"break":return D("break");case"continue":return D("continue");case"debugger":return w(),x("debugger");case"do":return function(a){return o("keyword","while"),x("do",q(y,w),a)}(ib(kb));case"for":return E();case"function":return lb(!0);case"if":return H();case"return":return jb.in_function==0&&h("'return' outside of function"),x("return",d("punc",";")?(f(),null):t()?null:q(ob,w));case"switch":return x("switch",y(),mb());case"throw":return jb.token.nlb&&h("Illegal newline after 'throw'"),x("throw",q(ob,w));case"try":return J();case"var":return q(R,w);case"const":return q(S,w);case"while":return x("while",y(),ib(kb));case"with":return x("with",y(),kb());default:j()}}}),lb=function(a){var b=d("name")?q(jb.token.value,f):null;return a&&!b&&j(),r("("),x(a?"defun":"function",b,function(a,b){while(!d("punc",")"))a?a=!1:r(","),d("name")||j(),b.push(jb.token.value),f();return f(),b}(!0,[]),function(){++jb.in_function;var a=jb.in_loop;jb.in_loop=0;var b=I();return--jb.in_function,jb.in_loop=a,b}())},mb=p(ib,function(){r("{");var a=[],b=null;while(!d("punc","}"))d("eof")&&j(),d("keyword","case")?(f(),b=[],a.push([ob(),b]),r(":")):d("keyword","default")?(f(),r(":"),b=[],a.push([null,b])):(b||j(),b.push(kb()));return f(),a}),nb=A(function(a){if(d("operator","new"))return f(),V();if(d("punc")){switch(jb.token.value){case"(":return f(),ab(q(ob,p(r,")")),a);case"[":return f(),ab(X(),a);case"{":return f(),ab(Y(),a)}j()}if(d("keyword","function"))return f(),ab(lb(!1),a);if(v(Q,jb.token.type)){var b=jb.token.type=="regexp"?x("regexp",jb.token.value[0],jb.token.value[1]):x(jb.token.type,jb.token.value);return ab(q(b,f),a)}j()}),ob=A(function(a,b){arguments.length==0&&(a=!0);var c=hb(b);return a&&d("punc",",")?(f(),x("seq",c,ob(!0,b))):c});return x("toplevel",function(a){while(!d("eof"))a.push(kb());return a}([]))}function p(a){var b=s(arguments,1);return function(){return a.apply(this,b.concat(s(arguments)))}}function q(a){a instanceof Function&&(a=a());for(var b=1,c=arguments.length;--c>0;++b)arguments[b]();return a}function r(a){var b={};for(var c=0;c<a.length;++c)b[a[c]]=!0;return b}function s(a,b){return Array.prototype.slice.call(a,b||0)}function t(a){return a.split("")}function u(a,b){for(var c=b.length;--c>=0;)if(b[c]==a)return!0;return!1}function v(a,b){return Object.prototype.hasOwnProperty.call(a,b)}var w=r(["break","case","catch","const","continue","debugger","default","delete","do","else","finally","for","function","if","in","instanceof","new","return","switch","throw","try","typeof","var","void","while","with"]),x=r(["abstract","boolean","byte","char","class","double","enum","export","extends","final","float","goto","implements","import","int","interface","long","native","package","private","protected","public","short","static","super","synchronized","throws","transient","volatile"]),y=r(["return","new","delete","throw","else","case"]),z=r(["false","null","true","undefined"]),A=r(t("+-*&%=<>!?|~^")),B=/^0x[0-9a-f]+$/i,C=/^0[0-7]+$/,D=/^\d*\.?\d*(?:e[+-]?\d*(?:\d\.?|\.?\d)\d*)?$/i,E=r(["in","instanceof","typeof","new","void","delete","++","--","+","-","!","~","&","|","^","*","/","%",">>","<<",">>>","<",">","<=",">=","==","===","!=","!==","?","=","+=","-=","/=","*=","%=",">>=","<<=",">>>=","|=","^=","&=","&&","||"]),F=r(t("  \n\r\t\f​᠎              ")),G=r(t("[{}(,.;:")),H=r(t("[]{}(),;:")),I=r(t("gmsiy")),J={letter:RegExp("[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0523\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0621-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971\\u0972\\u097B-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D28\\u0D2A-\\u0D39\\u0D3D\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC\\u0EDD\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8B\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10D0-\\u10FA\\u10FC\\u1100-\\u1159\\u115F-\\u11A2\\u11A8-\\u11F9\\u1200-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u1676\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19A9\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u2094\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2C6F\\u2C71-\\u2C7D\\u2C80-\\u2CE4\\u2D00-\\u2D25\\u2D30-\\u2D65\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31B7\\u31F0-\\u31FF\\u3400\\u4DB5\\u4E00\\u9FC3\\uA000-\\uA48C\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA65F\\uA662-\\uA66E\\uA67F-\\uA697\\uA717-\\uA71F\\uA722-\\uA788\\uA78B\\uA78C\\uA7FB-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA90A-\\uA925\\uA930-\\uA946\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAC00\\uD7A3\\uF900-\\uFA2D\\uFA30-\\uFA6A\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]"),non_spacing_mark:RegExp("[\\u0300-\\u036F\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065E\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0900-\\u0902\\u093C\\u0941-\\u0948\\u094D\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09BC\\u09C1-\\u09C4\\u09CD\\u09E2\\u09E3\\u0A01\\u0A02\\u0A3C\\u0A41\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81\\u0A82\\u0ABC\\u0AC1-\\u0AC5\\u0AC7\\u0AC8\\u0ACD\\u0AE2\\u0AE3\\u0B01\\u0B3C\\u0B3F\\u0B41-\\u0B44\\u0B4D\\u0B56\\u0B62\\u0B63\\u0B82\\u0BC0\\u0BCD\\u0C3E-\\u0C40\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0CBC\\u0CBF\\u0CC6\\u0CCC\\u0CCD\\u0CE2\\u0CE3\\u0D41-\\u0D44\\u0D4D\\u0D62\\u0D63\\u0DCA\\u0DD2-\\u0DD4\\u0DD6\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F71-\\u0F7E\\u0F80-\\u0F84\\u0F86\\u0F87\\u0F90-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102D-\\u1030\\u1032-\\u1037\\u1039\\u103A\\u103D\\u103E\\u1058\\u1059\\u105E-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108D\\u109D\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B7-\\u17BD\\u17C6\\u17C9-\\u17D3\\u17DD\\u180B-\\u180D\\u18A9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193B\\u1A17\\u1A18\\u1A56\\u1A58-\\u1A5E\\u1A60\\u1A62\\u1A65-\\u1A6C\\u1A73-\\u1A7C\\u1A7F\\u1B00-\\u1B03\\u1B34\\u1B36-\\u1B3A\\u1B3C\\u1B42\\u1B6B-\\u1B73\\u1B80\\u1B81\\u1BA2-\\u1BA5\\u1BA8\\u1BA9\\u1C2C-\\u1C33\\u1C36\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE0\\u1CE2-\\u1CE8\\u1CED\\u1DC0-\\u1DE6\\u1DFD-\\u1DFF\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F\\uA67C\\uA67D\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA825\\uA826\\uA8C4\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA951\\uA980-\\uA982\\uA9B3\\uA9B6-\\uA9B9\\uA9BC\\uAA29-\\uAA2E\\uAA31\\uAA32\\uAA35\\uAA36\\uAA43\\uAA4C\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uABE5\\uABE8\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE26]"),space_combining_mark:RegExp("[\\u0903\\u093E-\\u0940\\u0949-\\u094C\\u094E\\u0982\\u0983\\u09BE-\\u09C0\\u09C7\\u09C8\\u09CB\\u09CC\\u09D7\\u0A03\\u0A3E-\\u0A40\\u0A83\\u0ABE-\\u0AC0\\u0AC9\\u0ACB\\u0ACC\\u0B02\\u0B03\\u0B3E\\u0B40\\u0B47\\u0B48\\u0B4B\\u0B4C\\u0B57\\u0BBE\\u0BBF\\u0BC1\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCC\\u0BD7\\u0C01-\\u0C03\\u0C41-\\u0C44\\u0C82\\u0C83\\u0CBE\\u0CC0-\\u0CC4\\u0CC7\\u0CC8\\u0CCA\\u0CCB\\u0CD5\\u0CD6\\u0D02\\u0D03\\u0D3E-\\u0D40\\u0D46-\\u0D48\\u0D4A-\\u0D4C\\u0D57\\u0D82\\u0D83\\u0DCF-\\u0DD1\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0F3E\\u0F3F\\u0F7F\\u102B\\u102C\\u1031\\u1038\\u103B\\u103C\\u1056\\u1057\\u1062-\\u1064\\u1067-\\u106D\\u1083\\u1084\\u1087-\\u108C\\u108F\\u109A-\\u109C\\u17B6\\u17BE-\\u17C5\\u17C7\\u17C8\\u1923-\\u1926\\u1929-\\u192B\\u1930\\u1931\\u1933-\\u1938\\u19B0-\\u19C0\\u19C8\\u19C9\\u1A19-\\u1A1B\\u1A55\\u1A57\\u1A61\\u1A63\\u1A64\\u1A6D-\\u1A72\\u1B04\\u1B35\\u1B3B\\u1B3D-\\u1B41\\u1B43\\u1B44\\u1B82\\u1BA1\\u1BA6\\u1BA7\\u1BAA\\u1C24-\\u1C2B\\u1C34\\u1C35\\u1CE1\\u1CF2\\uA823\\uA824\\uA827\\uA880\\uA881\\uA8B4-\\uA8C3\\uA952\\uA953\\uA983\\uA9B4\\uA9B5\\uA9BA\\uA9BB\\uA9BD-\\uA9C0\\uAA2F\\uAA30\\uAA33\\uAA34\\uAA4D\\uAA7B\\uABE3\\uABE4\\uABE6\\uABE7\\uABE9\\uABEA\\uABEC]"),connector_punctuation:RegExp("[\\u005F\\u203F\\u2040\\u2054\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFF3F]")};j.prototype.toString=function(){return this.message+" (line: "+this.line+", col: "+this.col+", pos: "+this.pos+")"+"\n\n"+this.stack};var K={},L=r(["typeof","void","delete","--","++","!","~","-","+"]),M=r(["--","++"]),N=function(a,b,c){while(c<a.length)b[a[c]]=a[c].substr(0,a[c].length-1),c++;return b}(["+=","-=","/=","*=","%=",">>=","<<=",">>>=","|=","^=","&="],{"=":!0},0),O=function(a,b){for(var c=0,d=1;c<a.length;++c,++d){var e=a[c];for(var f=0;f<e.length;++f)b[e[f]]=d}return b}([["||"],["&&"],["|"],["^"],["&"],["==","===","!=","!=="],["<",">","<=",">=","in","instanceof"],[">>","<<",">>>"],["+","-"],["*","/","%"]],{}),P=r(["for","do","while","switch"]),Q=r(["atom","num","string","regexp","name"]);n.prototype.toString=function(){return this.name};var R=function(){},S={};(function(a){a.tokenizer=m,a.parse=o,a.slice=s,a.curry=p,a.member=u,a.array_to_hash=r,a.PRECEDENCE=O,a.KEYWORDS_ATOM=z,a.RESERVED_WORDS=x,a.KEYWORDS=w,a.ATOMIC_START_TOKEN=Q,a.OPERATORS=E,a.is_alphanumeric_char=d,a.set_logger=function(a){R=a}})(S),a.parsejs=S}(this),function(a){function b(){function a(a){return[this[0],I(a,function(a){var b=[a[0]];return a.length>1&&(b[1]=c(a[1])),b})]}function b(a){var b=[this[0]];return a!=null&&b.push(I(a,c)),b}function c(a){if(a==null)return null;try{h.push(a);var b=a[0],c=g[b];if(c){var d=c.apply(a,a.slice(1));if(d!=null)return d}return c=f[b],c.apply(a,a.slice(1))}catch(e){}finally{h.pop()}}function d(a){if(a==null)return null;try{return h.push(a),f[a[0]].apply(a,a.slice(1))}catch(b){}finally{h.pop()}}function e(a,b){var c={},d;for(d in a)x(a,d)&&(c[d]=g[d],g[d]=a[d]);var e=b();for(d in c)x(c,d)&&(c[d]?g[d]=c[d]:delete g[d]);return e}var f={string:function(a){return[this[0],a]},num:function(a){return[this[0],a]},name:function(a){return[this[0],a]},toplevel:function(a){return[this[0],I(a,c)]},block:b,splice:b,"var":a,"const":a,"try":function(a,b,d){return[this[0],I(a,c),b!=null?[b[0],I(b[1],c)]:null,d!=null?I(d,c):null]},"throw":function(a){return[this[0],c(a)]},"new":function(a,b){return[this[0],c(a),I(b,c)]},"switch":function(a,b){return[this[0],c(a),I(b,function(a){return[a[0]?c(a[0]):null,I(a[1],c)]})]},"break":function(a){return[this[0],a]},"continue":function(a){return[this[0],a]},conditional:function(a,b,d){return[this[0],c(a),c(b),c(d)]},assign:function(a,b,d){return[this[0],a,c(b),c(d)]},dot:function(a){return[this[0],c(a)].concat(z(arguments,1))},call:function(a,b){return[this[0],c(a),I(b,c)]},"function":function(a,b,d){return[this[0],a,b.slice(),I(d,c)]},"debugger":function(){return[this[0]]},defun:function(a,b,d){return[this[0],a,b.slice(),I(d,c)]},"if":function(a,b,d){return[this[0],c(a),c(b),c(d)]},"for":function(a,b,d,e){return[this[0],c(a),c(b),c(d),c(e)]},"for-in":function(a,b,d,e){return[this[0],c(a),c(b),c(d),c(e)]},"while"
+:function(a,b){return[this[0],c(a),c(b)]},"do":function(a,b){return[this[0],c(a),c(b)]},"return":function(a){return[this[0],c(a)]},binary:function(a,b,d){return[this[0],a,c(b),c(d)]},"unary-prefix":function(a,b){return[this[0],a,c(b)]},"unary-postfix":function(a,b){return[this[0],a,c(b)]},sub:function(a,b){return[this[0],c(a),c(b)]},object:function(a){return[this[0],I(a,function(a){return a.length==2?[a[0],c(a[1])]:[a[0],c(a[1]),a[2]]})]},regexp:function(a,b){return[this[0],a,b]},array:function(a){return[this[0],I(a,c)]},stat:function(a){return[this[0],c(a)]},seq:function(){return[this[0]].concat(I(z(arguments),c))},label:function(a,b){return[this[0],a,c(b)]},"with":function(a,b){return[this[0],c(a),c(b)]},atom:function(a){return[this[0],a]}},g={},h=[];return{walk:c,dive:d,with_walkers:e,parent:function(){return h[h.length-2]},stack:function(){return h}}}function c(a){this.names={},this.mangled={},this.rev_mangled={},this.cname=-1,this.refs={},this.uses_with=!1,this.uses_eval=!1,this.parent=a,this.children=[],a?(this.level=a.level+1,a.children.push(this)):this.level=0}function d(a){function d(a){j=new c(j),j.labels=new c;var b=j.body=a();return b.scope=j,j=j.parent,b}function e(a,b){return j.define(a,b)}function f(a){j.refs[a]=!0}function g(a,b,c){var f=this[0]=="defun";return[this[0],f?e(a,"defun"):a,b,d(function(){return f||e(a,"lambda"),I(b,function(a){e(a,"arg")}),I(c,l)})]}function h(a){return function(b){I(b,function(b){e(b[0],a),b[1]&&f(b[0])})}}function i(a){a&&(j.labels.refs[a]=!0)}var j=null,k=b(),l=k.walk,m=[];return d(function(){function b(a,c){for(c=a.children.length;--c>=0;)b(a.children[c]);for(c in a.refs)if(x(a.refs,c))for(var d=a.has(c),e=a;e;e=e.parent){e.refs[c]=d;if(e===d)break}}var c=k.with_walkers({"function":g,defun:g,label:function(a,b){j.labels.define(a)},"break":i,"continue":i,"with":function(a,b){for(var c=j;c;c=c.parent)c.uses_with=!0},"var":h("var"),"const":h("const"),"try":function(a,b,c){if(b!=null)return[this[0],I(a,l),[e(b[0],"catch"),I(b[1],l)],c!=null?I(c,l):null]},name:function(a){a=="eval"&&m.push(j),f(a)}},function(){return l(a)});return I(m,function(a){if(!a.has("eval"))while(a)a.uses_eval=!0,a=a.parent}),b(j),c})}function e(a,c){function e(a,b){return!c.toplevel&&!m.parent?a:c.except&&A(a,c.except)?a:m.get_mangled(a,b)}function f(a){if(c.defines)return!m.has(a)&&x(c.defines,a)?c.defines[a]:null}function g(a,b,d){if(!c.no_functions){var f=this[0]=="defun",g;a&&(f?a=e(a):d.scope.references(a)?(g={},!m.uses_eval&&!m.uses_with?a=g[a]=m.next_mangled():g[a]=a):a=null)}return d=h(d.scope,function(){return b=I(b,function(a){return e(a)}),I(d,l)},g),[this[0],a,b,d]}function h(a,b,c){var d=m;m=a;if(c)for(var f in c)x(c,f)&&a.set_mangle(f,c[f]);for(var f in a.names)x(a.names,f)&&e(f,!0);var g=b();return g.scope=a,m=d,g}function i(a){return[this[0],I(a,function(a){return[e(a[0]),l(a[1])]})]}function j(a){if(a)return[this[0],m.labels.get_mangled(a)]}var k=b(),l=k.walk,m;return c=c||{},k.with_walkers({"function":g,defun:function(){var a=g.apply(this,arguments);switch(k.parent()[0]){case"toplevel":case"function":case"defun":return I.at_top(a)}return a},label:function(a,b){return m.labels.refs[a]?[this[0],m.labels.get_mangled(a,!0),l(b)]:l(b)},"break":j,"continue":j,"var":i,"const":i,name:function(a){return f(a)||[this[0],e(a)]},"try":function(a,b,c){return[this[0],I(a,l),b!=null?[e(b[0]),I(b[1],l)]:null,c!=null?I(c,l):null]},toplevel:function(a){var b=this;return h(b.scope,function(){return[b[0],I(a,l)]})}},function(){return l(d(a))})}function f(a,b){return s(a).length>s(b[0]=="stat"?b[1]:b).length?b:a}function g(a){return a[0]=="block"&&a[1]&&a[1].length>0?a[1][a[1].length-1]:a}function h(a){if(a)switch(g(a)[0]){case"return":case"break":case"continue":case"throw":return!0}}function i(a){return a[0]=="unary-prefix"&&A(a[1],["!","delete"])||a[0]=="binary"&&A(a[1],["in","instanceof","==","!=","===","!==","<","<=",">=",">"])||a[0]=="binary"&&A(a[1],["&&","||"])&&i(a[2])&&i(a[3])||a[0]=="conditional"&&i(a[2])&&i(a[3])||a[0]=="assign"&&a[1]===!0&&i(a[3])||a[0]=="seq"&&i(a[a.length-1])}function j(a){return!a||a[0]=="block"&&(!a[1]||a[1].length==0)}function k(a){return a[0]=="string"||a[0]=="unary-prefix"&&a[1]=="typeof"||a[0]=="binary"&&a[1]=="+"&&(k(a[2])||k(a[3]))}function l(a){j(a)||E("Dropping unreachable code: "+s(a,!0))}function m(a){function c(a){a=I(a,g);for(var b=0;b<a.length;++b){var d=a[b];if(d[0]!="if")continue;if(d[3]&&g(d[3]))continue;var e=g(d[2]);if(!h(e))continue;var f=g(d[1]),i=c(a.slice(b+1)),j=i.length==1?i[0]:["block",i];return a.slice(0,b).concat([[d[0],f,e,j]])}return a}function d(a,b,d){return d=c(d),[this[0],a,b,d]}function e(a){return[this[0],a!=null?c(a):null]}var f=b(),g=f.walk;return f.with_walkers({defun:d,"function":d,block:e,splice:e,toplevel:function(a){return[this[0],c(a)]},"try":function(a,b,d){return[this[0],c(a),b!=null?[b[0],c(b[1])]:null,d!=null?c(d):null]}},function(){return g(a)})}function n(a,c){function d(){throw j}function e(){throw k}function f(){return c.call(this,this,h,d,e)}function g(a){if(a=="++"||a=="--")return f.apply(this,arguments)}var h=b(),i=h.walk,j={},k={};return h.with_walkers({"try":f,"throw":f,"return":f,"new":f,"switch":f,"break":f,"continue":f,assign:f,call:f,"if":f,"for":f,"for-in":f,"while":f,"do":f,"return":f,"unary-prefix":g,"unary-postfix":g,defun:f},function(){for(;;)try{i(a);break}catch(b){if(b===j)break;if(b===k)continue;throw b}})}function o(a){function c(a,b){var c=i;i=b,a=I(a,h);var d={},e=I(b.names,function(a,c){return a!="var"?I.skip:b.references(c)?(d[c]=!0,[c]):I.skip});return e.length>0&&(n(["block",a],function(a,b,c,f){if(a[0]=="assign"&&a[1]===!0&&a[2][0]=="name"&&x(d,a[2][1])){for(var g=e.length;--g>=0;)if(e[g][0]==a[2][1]){e[g][1]&&c(),e[g][1]=a[3],e.push(e.splice(g,1)[0]);break}var h=b.parent();if(h[0]=="seq"){var i=h[2];i.unshift(0,h.length),h.splice.apply(h,i)}else h[0]=="stat"?h.splice(0,h.length,"block"):c();f()}c()}),a.unshift(["var",e])),i=c,a}function e(a){var b=null;for(var c=a.length;--c>=0;){var d=a[c];if(!d[1])continue;d=["assign",!0,["name",d[0]],d[1]],b==null?b=d:b=["seq",d,b]}return b==null?g.parent()[0]=="for-in"?["name",a[0][0]]:I.skip:["stat",b]}function f(a){return[this[0],c(a,this.scope)]}var g=b(),h=g.walk,i;return g.with_walkers({"function":function(a,b,d){for(var e=b.length;--e>=0&&!d.scope.references(b[e]);)b.pop();return d.scope.references(a)||(a=null),[this[0],a,b,c(d,d.scope)]},defun:function(a,b,d){if(!i.references(a))return I.skip;for(var e=b.length;--e>=0&&!d.scope.references(b[e]);)b.pop();return[this[0],a,b,c(d,d.scope)]},"var":e,toplevel:f},function(){return h(d(a))})}function p(a,c){function d(a){var b=["unary-prefix","!",a];switch(a[0]){case"unary-prefix":return a[1]=="!"&&i(a[2])?a[2]:b;case"seq":return a=z(a),a[a.length-1]=d(a[a.length-1]),a;case"conditional":return f(b,["conditional",a[1],d(a[2]),d(a[3])]);case"binary":var e=a[1],g=a[2],h=a[3];if(!c.keep_comps)switch(e){case"<=":return["binary",">",g,h];case"<":return["binary",">=",g,h];case">=":return["binary","<",g,h];case">":return["binary","<=",g,h]}switch(e){case"==":return["binary","!=",g,h];case"!=":return["binary","==",g,h];case"===":return["binary","!==",g,h];case"!==":return["binary","===",g,h];case"&&":return f(b,["binary","||",d(g),d(h)]);case"||":return f(b,["binary","&&",d(g),d(h)])}}return b}function e(a,b,c){var e=function(){return a[0]=="unary-prefix"&&a[1]=="!"?c?["conditional",a[2],c,b]:["binary","||",a[2],b]:c?f(["conditional",a,b,c],["conditional",d(a),c,b]):["binary","&&",a,b]};return F(a,function(a,d){return l(d?c:b),d?b:c},e)}function g(a){return a!=null&&a[0]=="block"&&a[1]&&(a[1].length==1?a=a[1][0]:a[1].length==0&&(a=["block"])),a}function k(a,b,c){return[this[0],a,b,n(c,"lambda")]}function n(a,b){return a=I(a,u),a=_(a).reduce(function(a,b){return b[0]=="block"?b[1]&&a.push.apply(a,b[1]):a.push(b),a},[]),a=function(b,c){return _(a).forEach(function(a){c&&(a[0]=="var"&&c[0]=="var"||a[0]=="const"&&c[0]=="const")?c[1]=c[1].concat(a[1]):(b.push(a),c=a)}),b}([]),c.dead_code&&(a=function(b,d){return _(a).forEach(function(a){d?a[0]=="function"||a[0]=="defun"?b.push(a):a[0]=="var"||a[0]=="const"?(c.no_warnings||E("Variables declared in unreachable code"),a[1]=I(a[1],function(a){return a[1]&&!c.no_warnings&&l(["assign",!0,["name",a[0]],a[1]]),[a[0]]}),b.push(a)):c.no_warnings||l(a):(b.push(a),A(a[0],["return","throw","break","continue"])&&(d=!0))}),b}([])),c.make_seqs&&(a=function(b,c){return _(a).forEach(function(a){c&&c[0]=="stat"&&a[0]=="stat"?c[1]=["seq",c[1],a[1]]:(b.push(a),c=a)}),b.length>=2&&b[b.length-2][0]=="stat"&&(b[b.length-1][0]=="return"||b[b.length-1][0]=="throw")&&b[b.length-1][1]&&b.splice(b.length-2,2,[b[b.length-1][0],["seq",b[b.length-2][1],b[b.length-1][1]]]),b}([])),a}function o(a,b,c){return F(a,function(a,d){return d?(b=u(b),l(c),b||["block"]):(c=u(c),l(b),c||["block"])},function(){return q(a,b,c)})}function p(a,b,c){var e=[["if",d(a),c]];return b[0]=="block"?b[1]&&(e=e.concat(b[1])):e.push(b),u(["block",e])}function q(a,b,c){a=u(a),b=u(b),c=u(c),j(b)?(a=d(a),b=c,c=null):j(c)?c=null:function(){var e=s(a),f=d(a),g=s(f);if(g.length<e.length){var h=b;b=c,c=h,a=f}}();if(j(c)&&j(b))return["stat",a];var g=["if",a,b,c];return b[0]=="if"&&j(b[3])&&j(c)?g=f(g,u(["if",["binary","&&",a,b[1]],b[2]])):b[0]=="stat"?c?c[0]=="stat"?g=f(g,["stat",e(a,b[1],c[1])]):h(c)&&(g=p(a,b,c)):g=f(g,["stat",e(a,b[1])]):c&&b[0]==c[0]&&(b[0]=="return"||b[0]=="throw")&&b[1]&&c[1]?g=f(g,[b[0],e(a,b[1],c[1])]):c&&h(b)?(g=[["if",a,b]],c[0]=="block"?c[1]&&(g=g.concat(c[1])):g.push(c),g=u(["block",g])):b&&h(c)&&(g=p(a,b,c)),g}function r(a,b){return F(a,function(a,c){return c?["for",null,null,null,u(b)]:(l(b),["block"])})}c=v(c,{make_seqs:!0,dead_code:!0,no_warnings:!1,keep_comps:!0});var t=b(),u=t.walk;return t.with_walkers({sub:function(a,b){if(b[0]=="string"){var c=b[1];if(w(c))return["dot",u(a),c];if(/^[1-9][0-9]*$/.test(c)||c==="0")return["sub",u(a),["num",parseInt(c,10)]]}},"if":o,toplevel:function(a){return["toplevel",n(a)]},"switch":function(a,b){var c=b.length-1;return["switch",u(a),I(b,function(a,b){var d=n(a[1]);if(b==c&&d.length>0){var e=d[d.length-1];e[0]=="break"&&!e[1]&&d.pop()}return[a[0]?u(a[0]):null,d]})]},"function":k,defun:k,block:function(a){if(a)return g(["block",n(a)])},binary:function(a,b,c){return F(["binary",a,u(b),u(c)],function(a){return f(u(a),this)},function(){return function(){if(a!="=="&&a!="!=")return;var d=u(b),e=u(c);return d&&d[0]=="unary-prefix"&&d[1]=="!"&&d[2][0]=="num"?b=["num",+!d[2][1]]:e&&e[0]=="unary-prefix"&&e[1]=="!"&&e[2][0]=="num"&&(c=["num",+!e[2][1]]),["binary",a,b,c]}()||this})},conditional:function(a,b,c){return e(u(a),u(b),u(c))},"try":function(a,b,c){return["try",n(a),b!=null?[b[0],n(b[1])]:null,c!=null?n(c):null]},"unary-prefix":function(a,b){b=u(b);var c=["unary-prefix",a,b];return a=="!"&&(c=f(c,d(b))),F(c,function(a,b){return u(a)},function(){return c})},name:function(a){switch(a){case"true":return["unary-prefix","!",["num",0]];case"false":return["unary-prefix","!",["num",1]]}},"while":r,assign:function(a,b,c){b=u(b),c=u(c);var d=["+","-","/","*","%",">>","<<",">>>","|","^","&"];return a===!0&&b[0]==="name"&&c[0]==="binary"&&~d.indexOf(c[1])&&c[2][0]==="name"&&c[2][1]===b[1]?[this[0],c[1],b,c[3]]:[this[0],a,b,c]}},function(){for(var b=0;b<2;++b)a=m(a),a=u(a);return a})}function q(a,b){var c=0,d=0;return a=a.replace(/[\\\b\f\n\r\t\x22\x27\u2028\u2029\0]/g,function(a){switch(a){case"\\":return"\\\\";case"\b":return"\\b";case"\f":return"\\f";case"\n":return"\\n";case"\r":return"\\r";case"\t":return"\\t";case"\u2028":return"\\u2028";case"\u2029":return"\\u2029";case'"':return++c,'"';case"'":return++d,"'";case"\0":return"\\0"}return a}),b&&(a=r(a)),c>d?"'"+a.replace(/\x27/g,"\\'")+"'":'"'+a.replace(/\x22/g,'\\"')+'"'}function r(a){return a.replace(/[\u0080-\uffff]/g,function(a){var b=a.charCodeAt(0).toString(16);while(b.length<4)b="0"+b;return"\\u"+b})}function s(a,c){function d(a){var b=q(a,c.ascii_only);return c.inline_script&&(b=b.replace(/<\x2fscript([>\/\t\n\f\r ])/gi,"<\\/script$1")),b}function e(a){return a+="",c.ascii_only&&(a=r(a)),a}function f(a){return a==null&&(a=""),J&&(a=u(" ",c.indent_start+K*c.indent_level)+a),a}function g(a,b){b==null&&(b=1),K+=b;try{return a.apply(null,z(arguments,1))}catch(c){}finally{K-=b}}function h(a){if(J)return a.join(" ");var b=[];for(var c=0;c<a.length;++c){var d=a[c+1];b.push(a[c]),d&&(/[a-z0-9_\x24]$/i.test(a[c]+"")&&/^[a-z0-9_\x24]/i.test(d+"")||/[\+\-]$/.test(a[c]+"")&&/^[\+\-]/.test(d+""))&&b.push(" ")}return b.join("")}function i(a){return a.join(","+Q)}function k(a){var b=S(a);for(var c=1;c<arguments.length;++c){var d=arguments[c];if(d instanceof Function&&d(a)||a[0]==d)return"("+b+")"}return b}function l(a){if(a.length==1)return a[0];if(a.length==2){var b=a[1];return a=a[0],a.length>b.length?b:a}return l([a[0],l(a.slice(1))])}function m(a){if(a[0]=="function"||a[0]=="object"){var b=z(R.stack()),c=b.pop(),d=b.pop();while(d){if(d[0]=="stat")return!0;if((d[0]!="seq"&&d[0]!="call"&&d[0]!="dot"&&d[0]!="sub"&&d[0]!="conditional"||d[1]!==c)&&(d[0]!="binary"&&d[0]!="assign"&&d[0]!="unary-postfix"||d[2]!==c))return!1;c=d,d=b.pop()}}return!x(G,a[0])}function n(a){var b=a.toString(10),c=[b.replace(/^0\./,".")],d;return Math.floor(a)===a?(a<0?c.push("-0x"+(-a).toString(16).toLowerCase(),"-0"+(-a).toString(8)):c.push("0x"+a.toString(16).toLowerCase(),"0"+a.toString(8)),(d=/^(.*?)(0+)$/.exec(a))&&c.push(d[1]+"e"+d[2].length)):(d=/^0?\.(0+)(.*)$/.exec(a))&&c.push(d[2]+"e-"+(d[1].length+d[2].length),b.substr(b.indexOf("."))),l(c)}function o(a){if(a==null)return";";if(a[0]=="do")return E([a]);var b=a;for(;;){var c=b[0];if(c=="if"){if(!b[3])return S(["block",[a]]);b=b[3]}else if(c=="while"||c=="do")b=b[2];else{if(c!="for"&&c!="for-in")break;b=b[4]}}return S(a)}function p(a,b,c,d,f){var g=d||"function";return a&&(g+=" "+e(a)),g+="("+i(I(b,e))+")",g=h([g,E(c)]),!f&&m(this)?"("+g+")":g}function s(a){switch(a[0]){case"with":case"while":return j(a[2]);case"for":case"for-in":return j(a[4]);case"if":if(j(a[2])&&!a[3])return!0;if(a[3])return j(a[3])?!0:s(a[3]);return s(a[2])}}function t(a,b){for(var c=[],d=a.length-1,e=0;e<=d;++e){var g=a[e],h=S(g);h!=";"&&(!J&&e==d&&!s(g)&&(h=h.replace(/;+\s*$/,"")),c.push(h))}return b?c:I(c,f)}function D(a){var b=a.length;return b==0?"{}":"{"+L+I(a,function(a,c){var d=a[1].length>0,e=g(function(){return f(a[0]?h(["case",S(a[0])+":"]):"default:")},.5)+(d?L+g(function(){return t(a[1]).join(L)}):"");return!J&&d&&c<b-1&&(e+=";"),e}).join(L)+L+f("}")}function E(a){return a?a.length==0?"{}":"{"+L+g(function(){return t(a).join(L)})+L+f("}"):";"}function F(a){var b=a[0],c=a[1];return c!=null&&(b=h([e(b),"=",k(c,"seq")])),b}c=v(c,{indent_start:0,indent_level:4,quote_keys:!1,space_colon:!1,beautify:!1,ascii_only:!1,inline_script:!1});var J=!!c.beautify,K=0,L=J?"\n":"",Q=J?" ":"",R=b(),S=R.walk;return R.with_walkers({string:d,num:n,name:e,"debugger":function(){return"debugger"},toplevel:function(a){return t(a).join(L+L)},splice:function(a){var b=R.parent();return x(H,b)?E.apply(this,arguments):I(t(a,!0),function(a,b){return b>0?f(a):a}).join(L)},block:E,"var":function(a){return"var "+i(I(a,F))+";"},"const":function(a){return"const "+i(I(a,F))+";"},"try":function(a,b,c){var d=["try",E(a)];return b&&d.push("catch","("+b[0]+")",E(b[1])),c&&d.push("finally",E(c)),h(d)},"throw":function(a){return h(["throw",S(a)])+";"},"new":function(a,c){return c=c.length>0?"("+i(I(c,function(a){return k(a,"seq")}))+")":"",h(["new",k(a,"seq","binary","conditional","assign",function(a){var c=b(),d={};try{c.with_walkers({call:function(){throw d},"function":function(){return this}},function(){c.walk(a)})}catch(e){if(e===d)return!0;throw e}})+c])},"switch":function(a,b){return h(["switch","("+S(a)+")",D(b)])},"break":function(a){var b="break";return a!=null&&(b+=" "+e(a)),b+";"},"continue":function(a){var b="continue";return a!=null&&(b+=" "+e(a)),b+";"},conditional:function(a,b,c){return h([k(a,"assign","seq","conditional"),"?",k(b,"seq"),":",k(c,"seq")])},assign:function(a,b,c){return a&&a!==!0?a+="=":a="=",h([S(b),a,k(c,"seq")])},dot:function(a){var b=S(a),c=1;a[0]=="num"?/\./.test(a[1])||(b+="."):m(a)&&(b="("+b+")");while(c<arguments.length)b+="."+e(arguments[c++]);return b},call:function(a,b){var c=S(a);return c.charAt(0)!="("&&m(a)&&(c="("+c+")"),c+"("+i(I(b,function(a){return k(a,"seq")}))+")"},"function":p,defun:p,"if":function(a,b,c){var d=["if","("+S(a)+")",c?o(b):S(b)];return c&&d.push("else",S(c)),h(d)},"for":function(a,b,c,d){var e=["for"];a=(a!=null?S(a):"").replace(/;*\s*$/,";"+Q),b=(b!=null?S(b):"").replace(/;*\s*$/,";"+Q),c=(c!=null?S(c):"").replace(/;*\s*$/,"");var f=a+b+c;return f=="; ; "&&(f=";;"),e.push("("+f+")",S(d)),h(e)},"for-in":function(a,b,c,d){return h(["for","("+(a?S(a).replace(/;+$/,""):S(b)),"in",S(c)+")",S(d)])},"while":function(a,b){return h(["while","("+S(a)+")",S(b)])},"do":function(a,b){return h(["do",S(b),"while","("+S(a)+")"])+";"},"return":function(a){var b=["return"];return a!=null&&b.push(S(a)),h(b)+";"},binary:function(a,b,d){var e=S(b),f=S(d);if(A(b[0],["assign","conditional","seq"])||b[0]=="binary"&&B[a]>B[b[1]]||b[0]=="function"&&m(this))e="("+e+")";return A(d[0],["assign","conditional","seq"])||d[0]=="binary"&&B[a]>=B[d[1]]&&(d[1]!=a||!A(a,["&&","||","*"]))?f="("+f+")":!J&&c.inline_script&&(a=="<"||a=="<<")&&d[0]=="regexp"&&/^script/i.test(d[1])&&(f=" "+f),h([e,a,f])},"unary-prefix":function(a,b){var c=S(b);return b[0]=="num"||b[0]=="unary-prefix"&&!x(C,a+b[1])||!m(b)||(c="("+c+")"),a+(y.is_alphanumeric_char(a.charAt(0))?" ":"")+c},"unary-postfix":function(a,b){var c=S(b);return b[0]=="num"||b[0]=="unary-postfix"&&!x(C,a+b[1])||!m(b)||(c="("+c+")"),c+a},sub:function(a,b){var c=S(a);return m(a)&&(c="("+c+")"),c+"["+S(b)+"]"},object:function(a){var b=m(this);if(a.length==0)return b?"({})":"{}";var e="{"+L+g(function(){return I(a,function(a){if(a.length==3)return f(p(a[0],a[1][2],a[1][3],a[2],!0));var b=a[0],e=k(a[1],"seq");return c.quote_keys?b=d(b):(typeof b=="number"||!J&&+b+""==b)&&parseFloat(b)>=0?b=n(+b):w(b)||(b=d(b)),f(h(J&&c.space_colon?[b,":",e]:[b+":",e]))}).join(","+L)})+L+f("}");return b?"("+e+")":e},regexp:function(a,b){return"/"+a+"/"+b},array:function(a){return a.length==0?"[]":h(["[",i(I(a,function(b,c){return!J&&b[0]=="atom"&&b[1]=="undefined"?c===a.length-1?",":"":k(b,"seq")})),"]"])},stat:function(a){return S(a).replace(/;*\s*$/,";")},seq:function(){return i(I(z(arguments),S))},label:function(a,b){return h([e(a),":",S(b)])},"with":function(a,b){return h(["with","("+S(a)+")",S(b)])},atom:function(a){return e(a)}},function(){return S(a)})}function t(a,b){var c=[0];return y.parse(function(){function d(a){return a.pos-h}function e(a){h=a.pos,c.push(h)}function f(){var a=g.apply(this,arguments);a:{if(i&&i.type=="keyword")break a;if(d(a)>b)switch(a.type){case"keyword":case"atom":case"name":case"punc":e(a);break a}}return i=a,a}var g=y.tokenizer(a),h=0,i;return f.context=function(){return g.context.apply(this,arguments)},f}()),c.map(function(b,d){return a.substring(b,c[d+1]||a.length)}).join("\n")}function u(a,b){if(b>0){if(b==1)return a;var c=u(a,b>>1);return c+=c,b&1&&(c+=a),c}return""}function v(a,b){var c={};a===!0&&(a={});for(var d in b)x(b,d)&&(c[d]=a&&x(a,d)?a[d]:b[d]);return c}function w(a){return/^[a-z_$][a-z0-9_$]*$/i.test(a)&&a!="this"&&!x(y.KEYWORDS_ATOM,a)&&!x(y.RESERVED_WORDS,a)&&!x(y.KEYWORDS,a)}function x(a,b){return Object.prototype.hasOwnProperty.call(a,b)}var y=a.parsejs,z=y.slice,A=y.member,B=y.PRECEDENCE,C=y.OPERATORS,D=function(){var a="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_0123456789";return function(b){var c="",d=54;do c+=a.charAt(b%d),b=Math.floor(b/d),d=64;while(b>0);return c}}();c.prototype={has:function(a){for(var b=this;b;b=b.parent)if(x(b.names,a))return b},has_mangled:function(a){for(var b=this;b;b=b.parent)if(x(b.rev_mangled,a))return b},toJSON:function(){return{names:this.names,uses_eval:this.uses_eval,uses_with:this.uses_with}},next_mangled:function(){for(;;){var a=D(++this.cname),b;b=this.has_mangled(a);if(b&&this.refs[b.rev_mangled[a]]===b)continue;b=this.has(a);if(b&&b!==this&&this.refs[a]===b&&!b.has_mangled(a))continue;if(x(this.refs,a)&&this.refs[a]==null)continue;if(!w(a))continue;return a}},set_mangle:function(a,b){return this.rev_mangled[b]=a,this.mangled[a]=b},get_mangled:function(a,b){if(this.uses_eval||this.uses_with)return a;var c=this.has(a);return c?x(c.mangled,a)?c.mangled[a]:b?c.set_mangle(a,c.next_mangled()):a:a},references:function(a){return a&&!this.parent||this.uses_with||this.uses_eval||this.refs[a]},define:function(a,b){if(a!=null){if(b=="var"||!x(this.names,a))this.names[a]=b||"var";return a}}};var E=function(){},F=function(){function a(c){switch(c[0]){case"string":case"num":return c[1];case"name":case"atom":switch(c[1]){case"true":return!0;case"false":return!1;case"null":return null}break;case"unary-prefix":switch(c[1]){case"!":return!a(c[2]);case"typeof":return typeof a(c[2]);case"~":return~a(c[2]);case"-":return-a(c[2]);case"+":return+a(c[2])}break;case"binary":var d=c[2],e=c[3];switch(c[1]){case"&&":return a(d)&&a(e);case"||":return a(d)||a(e);case"|":return a(d)|a(e);case"&":return a(d)&a(e);case"^":return a(d)^a(e);case"+":return a(d)+a(e);case"*":return a(d)*a(e);case"/":return a(d)/a(e);case"%":return a(d)%a(e);case"-":return a(d)-a(e);case"<<":return a(d)<<a(e);case">>":return a(d)>>a(e);case">>>":return a(d)>>>a(e);case"==":return a(d)==a(e);case"===":return a(d)===a(e);case"!=":return a(d)!=a(e);case"!==":return a(d)!==a(e);case"<":return a(d)<a(e);case"<=":return a(d)<=a(e);case">":return a(d)>a(e);case">=":return a(d)>=a(e);case"in":return a(d)in a(e);case"instanceof":return a(d)instanceof a(e)}}throw b}var b={};return function(c,d,e){try{var f=a(c),g;switch(typeof f){case"string":g=["string",f];break;case"number":g=["num",f];break;case"boolean":g=["name",f+""];break;default:if(f===null){g=["atom","null"];break}throw Error("Can't handle constant of type: "+typeof f)}return d.call(c,g,f)}catch(h){if(h===b){if(c[0]!="binary"||c[1]!="==="&&c[1]!="!=="||!(k(c[2])&&k(c[3])||i(c[2])&&i(c[3]))){if(e&&c[0]=="binary"&&(c[1]=="||"||c[1]=="&&"))try{var j=a(c[2]);c=c[1]=="&&"&&(j?c[3]:j)||c[1]=="||"&&(j?j:c[3])||c}catch(l){}}else c[1]=c[1].substr(0,2);return e?e.call(c,c):null}throw h}}}(),G=y.array_to_hash(["name","array","object","string","dot","sub","call","regexp","defun"]),H=y.array_to_hash(["if","while","do","for","for-in","with"]),I;(function(){function a(a){this.v=a}function b(a){this.v=a}I=function(d,e,f){function g(){var g=e.call(f,d[j],j);g instanceof a?(g=g.v,g instanceof b?i.push.apply(i,g.v):i.push(g)):g!=c&&(g instanceof b?h.push.apply(h,g.v):h.push(g))}var h=[],i=[],j;if(d instanceof Array)for(j=0;j<d.length;++j)g();else for(j in d)x(d,j)&&g();return i.concat(h)},I.at_top=function(b){return new a(b)},I.splice=function(a){return new b(a)};var c=I.skip={}})();var J={};(function(a){a.ast_walker=b,a.ast_mangle=e,a.ast_squeeze=p,a.ast_lift_variables=o,a.gen_code=s,a.ast_add_scope=d,a.set_logger=function(a){E=a},a.make_string=q,a.split_lines=t,a.MAP=I})(J),a.process=J}(this),function(a){function b(a){function b(a,b){var c=i,d;return i=a,d=b(),i=c,d}function c(a,c,d){return[this[0],a,c,b(d.scope,g(h,d,f))]}var e=d.ast_walker(),f=e.walk,i;return e.with_walkers({toplevel:function(a){return[this[0],b(this.scope,g(h,a,f))]},"function":c,defun:c,"new":function(a,b){if(a[0]=="name"){if(a[1]=="Array"&&!i.has("Array"))return b.length!=1?["array",b]:f(["call",["name","Array"],b]);if(a[1]=="Object"&&!i.has("Object"))return b.length?f(["call",["name","Object"],b]):["object",[]];if((a[1]=="RegExp"||a[1]=="Function"||a[1]=="Error")&&!i.has(a[1]))return f(["call",["name",a[1]],b])}},call:function(a,b){if(a[0]=="dot"&&a[2]=="toString"&&b.length==0)return["binary","+",a[1],["string",""]];if(a[0]=="name"){if(a[1]=="Array"&&b.length!=1&&!i.has("Array"))return["array",b];if(a[1]=="Object"&&!b.length&&!i.has("Object"))return["object",[]];if(a[1]=="String"&&!i.has("String"))return["binary","+",b[0],["string",""]]}}},function(){return f(d.ast_add_scope(a))})}var c=a.parsejs,d=a.process,e=c.slice,f=c.member,g=c.curry,h=d.MAP,i=c.PRECEDENCE,j=c.OPERATORS,k={};(function(a){a.ast_squeeze_more=b})(k),a.process.ast_squeeze_more=k.ast_squeeze_more}(this),function(a){a.uglify=function(b,c){function d(a){var b="";for(var c=0;c<a.length;++c){var d=a[c];d.type=="comment1"?b+="//"+d.value+"\n":b+="/*"+d.value+"*/"}return b}function f(a){var b="";if(k.show_copyright){var c=[],e=i.tokenizer(a,!1),f;f=e();var h=null;while(/^comment/.test(f.type)&&(!h||h==f.type))c.push(f),h=f.type,f=e();b+=d(c)}var l=g("parse",function(){return i.parse(a)});return k.mangle&&(l=g("mangle",function(){return j.ast_mangle(l,k.mangle_toplevel)})),k.squeeze&&(l=g("squeeze",function(){return l=j.ast_squeeze(l,{make_seqs:k.make_seqs,dead_code:k.dead_code,extra:k.extra}),k.unsafe&&(l=j.ast_squeeze_more(l)),l})),k.ast?sys.inspect(l,null,null):(b+=g("generate",function(){return j.gen_code(l,k.beautify&&k.beautify_options)}),!k.beautify&&k.max_line_length&&(b=g("split",function(){return j.split_lines(b,k.max_line_length)})),b)}function g(a,b){if(!k.verbose)return b();var c=(new Date).getTime();try{return b()}catch(d){}}var h={parser:a.parsejs,uglify:a.process},i=h.parser,j=h.uglify;j.set_logger(function(a){});var k={ast:!1,mangle:!0,mangle_toplevel:!1,squeeze:!0,make_seqs:!0,dead_code:!0,beautify:!1,verbose:!1,show_copyright:!0,out_same_file:!1,max_line_length:32768,extra:!1,unsafe:!1,beautify_options:{indent_level:4,indent_start:0,quote_keys:!1,space_colon:!1},output:!0},l=c,m;a:while(l.length>0){var n=l.shift();switch(n){case"-b":case"--beautify":k.beautify=!0;break;case"-i":case"--indent":k.beautify_options.indent_level=l.shift();break;case"-q":case"--quote-keys":k.beautify_options.quote_keys=!0;break;case"-mt":case"--mangle-toplevel":k.mangle_toplevel=!0;break;case"--no-mangle":case"-nm":k.mangle=!1;break;case"--no-squeeze":case"-ns":k.squeeze=!1;break;case"--no-seqs":k.make_seqs=!1;break;case"--no-dead-code":k.dead_code=!1;break;case"--no-copyright":case"-nc":k.show_copyright=!1;break;case"-o":case"--output":k.output=l.shift();break;case"--overwrite":k.out_same_file=!0;break;case"-v":case"--verbose":k.verbose=!0;break;case"--ast":k.ast=!0;break;case"--extra":k.extra=!0;break;case"--unsafe":k.unsafe=!0;break;case"--max-line-len":k.max_line_length=l.shift();break;default:m=n;break a}}return f(b)}}(this)
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/website/third-party-libs/zepto.js b/vendor/dimsemenov/magnific-popup/website/third-party-libs/zepto.js
new file mode 100644
index 0000000000..566f2cbc0c
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/third-party-libs/zepto.js
@@ -0,0 +1,1565 @@
+/* Zepto v1.0-1-ga3cab6c - polyfill zepto detect event ajax form fx - zeptojs.com/license */
+
+
+;(function(undefined){
+  if (String.prototype.trim === undefined) // fix for iOS 3.2
+    String.prototype.trim = function(){ return this.replace(/^\s+|\s+$/g, '') }
+
+  // For iOS 3.x
+  // from https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/reduce
+  if (Array.prototype.reduce === undefined)
+    Array.prototype.reduce = function(fun){
+      if(this === void 0 || this === null) throw new TypeError()
+      var t = Object(this), len = t.length >>> 0, k = 0, accumulator
+      if(typeof fun != 'function') throw new TypeError()
+      if(len == 0 && arguments.length == 1) throw new TypeError()
+
+      if(arguments.length >= 2)
+       accumulator = arguments[1]
+      else
+        do{
+          if(k in t){
+            accumulator = t[k++]
+            break
+          }
+          if(++k >= len) throw new TypeError()
+        } while (true)
+
+      while (k < len){
+        if(k in t) accumulator = fun.call(undefined, accumulator, t[k], k, t)
+        k++
+      }
+      return accumulator
+    }
+
+})()
+
+var Zepto = (function() {
+  var undefined, key, $, classList, emptyArray = [], slice = emptyArray.slice, filter = emptyArray.filter,
+    document = window.document,
+    elementDisplay = {}, classCache = {},
+    getComputedStyle = document.defaultView.getComputedStyle,
+    cssNumber = { 'column-count': 1, 'columns': 1, 'font-weight': 1, 'line-height': 1,'opacity': 1, 'z-index': 1, 'zoom': 1 },
+    fragmentRE = /^\s*<(\w+|!)[^>]*>/,
+    tagExpanderRE = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
+    rootNodeRE = /^(?:body|html)$/i,
+
+    // special attributes that should be get/set via method calls
+    methodAttributes = ['val', 'css', 'html', 'text', 'data', 'width', 'height', 'offset'],
+
+    adjacencyOperators = [ 'after', 'prepend', 'before', 'append' ],
+    table = document.createElement('table'),
+    tableRow = document.createElement('tr'),
+    containers = {
+      'tr': document.createElement('tbody'),
+      'tbody': table, 'thead': table, 'tfoot': table,
+      'td': tableRow, 'th': tableRow,
+      '*': document.createElement('div')
+    },
+    readyRE = /complete|loaded|interactive/,
+    classSelectorRE = /^\.([\w-]+)$/,
+    idSelectorRE = /^#([\w-]*)$/,
+    tagSelectorRE = /^[\w-]+$/,
+    class2type = {},
+    toString = class2type.toString,
+    zepto = {},
+    camelize, uniq,
+    tempParent = document.createElement('div')
+
+  zepto.matches = function(element, selector) {
+    if (!element || element.nodeType !== 1) return false
+    var matchesSelector = element.webkitMatchesSelector || element.mozMatchesSelector ||
+                          element.oMatchesSelector || element.matchesSelector
+    if (matchesSelector) return matchesSelector.call(element, selector)
+    // fall back to performing a selector:
+    var match, parent = element.parentNode, temp = !parent
+    if (temp) (parent = tempParent).appendChild(element)
+    match = ~zepto.qsa(parent, selector).indexOf(element)
+    temp && tempParent.removeChild(element)
+    return match
+  }
+
+  function type(obj) {
+    return obj == null ? String(obj) :
+      class2type[toString.call(obj)] || "object"
+  }
+
+  function isFunction(value) { return type(value) == "function" }
+  function isWindow(obj)     { return obj != null && obj == obj.window }
+  function isDocument(obj)   { return obj != null && obj.nodeType == obj.DOCUMENT_NODE }
+  function isObject(obj)     { return type(obj) == "object" }
+  function isPlainObject(obj) {
+    return isObject(obj) && !isWindow(obj) && obj.__proto__ == Object.prototype
+  }
+  function isArray(value) { return value instanceof Array }
+  function likeArray(obj) { return typeof obj.length == 'number' }
+
+  function compact(array) { return filter.call(array, function(item){ return item != null }) }
+  function flatten(array) { return array.length > 0 ? $.fn.concat.apply([], array) : array }
+  camelize = function(str){ return str.replace(/-+(.)?/g, function(match, chr){ return chr ? chr.toUpperCase() : '' }) }
+  function dasherize(str) {
+    return str.replace(/::/g, '/')
+           .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')
+           .replace(/([a-z\d])([A-Z])/g, '$1_$2')
+           .replace(/_/g, '-')
+           .toLowerCase()
+  }
+  uniq = function(array){ return filter.call(array, function(item, idx){ return array.indexOf(item) == idx }) }
+
+  function classRE(name) {
+    return name in classCache ?
+      classCache[name] : (classCache[name] = new RegExp('(^|\\s)' + name + '(\\s|$)'))
+  }
+
+  function maybeAddPx(name, value) {
+    return (typeof value == "number" && !cssNumber[dasherize(name)]) ? value + "px" : value
+  }
+
+  function defaultDisplay(nodeName) {
+    var element, display
+    if (!elementDisplay[nodeName]) {
+      element = document.createElement(nodeName)
+      document.body.appendChild(element)
+      display = getComputedStyle(element, '').getPropertyValue("display")
+      element.parentNode.removeChild(element)
+      display == "none" && (display = "block")
+      elementDisplay[nodeName] = display
+    }
+    return elementDisplay[nodeName]
+  }
+
+  function children(element) {
+    return 'children' in element ?
+      slice.call(element.children) :
+      $.map(element.childNodes, function(node){ if (node.nodeType == 1) return node })
+  }
+
+  // `$.zepto.fragment` takes a html string and an optional tag name
+  // to generate DOM nodes nodes from the given html string.
+  // The generated DOM nodes are returned as an array.
+  // This function can be overriden in plugins for example to make
+  // it compatible with browsers that don't support the DOM fully.
+  zepto.fragment = function(html, name, properties) {
+    if (html.replace) html = html.replace(tagExpanderRE, "<$1></$2>")
+    if (name === undefined) name = fragmentRE.test(html) && RegExp.$1
+    if (!(name in containers)) name = '*'
+
+    var nodes, dom, container = containers[name]
+    container.innerHTML = '' + html
+    dom = $.each(slice.call(container.childNodes), function(){
+      container.removeChild(this)
+    })
+    if (isPlainObject(properties)) {
+      nodes = $(dom)
+      $.each(properties, function(key, value) {
+        if (methodAttributes.indexOf(key) > -1) nodes[key](value)
+        else nodes.attr(key, value)
+      })
+    }
+    return dom
+  }
+
+  // `$.zepto.Z` swaps out the prototype of the given `dom` array
+  // of nodes with `$.fn` and thus supplying all the Zepto functions
+  // to the array. Note that `__proto__` is not supported on Internet
+  // Explorer. This method can be overriden in plugins.
+  zepto.Z = function(dom, selector) {
+    dom = dom || []
+    dom.__proto__ = $.fn
+    dom.selector = selector || ''
+    return dom
+  }
+
+  // `$.zepto.isZ` should return `true` if the given object is a Zepto
+  // collection. This method can be overriden in plugins.
+  zepto.isZ = function(object) {
+    return object instanceof zepto.Z
+  }
+
+  // `$.zepto.init` is Zepto's counterpart to jQuery's `$.fn.init` and
+  // takes a CSS selector and an optional context (and handles various
+  // special cases).
+  // This method can be overriden in plugins.
+  zepto.init = function(selector, context) {
+    // If nothing given, return an empty Zepto collection
+    if (!selector) return zepto.Z()
+    // If a function is given, call it when the DOM is ready
+    else if (isFunction(selector)) return $(document).ready(selector)
+    // If a Zepto collection is given, juts return it
+    else if (zepto.isZ(selector)) return selector
+    else {
+      var dom
+      // normalize array if an array of nodes is given
+      if (isArray(selector)) dom = compact(selector)
+      // Wrap DOM nodes. If a plain object is given, duplicate it.
+      else if (isObject(selector))
+        dom = [isPlainObject(selector) ? $.extend({}, selector) : selector], selector = null
+      // If it's a html fragment, create nodes from it
+      else if (fragmentRE.test(selector))
+        dom = zepto.fragment(selector.trim(), RegExp.$1, context), selector = null
+      // If there's a context, create a collection on that context first, and select
+      // nodes from there
+      else if (context !== undefined) return $(context).find(selector)
+      // And last but no least, if it's a CSS selector, use it to select nodes.
+      else dom = zepto.qsa(document, selector)
+      // create a new Zepto collection from the nodes found
+      return zepto.Z(dom, selector)
+    }
+  }
+
+  // `$` will be the base `Zepto` object. When calling this
+  // function just call `$.zepto.init, which makes the implementation
+  // details of selecting nodes and creating Zepto collections
+  // patchable in plugins.
+  $ = function(selector, context){
+    return zepto.init(selector, context)
+  }
+
+  function extend(target, source, deep) {
+    for (key in source)
+      if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {
+        if (isPlainObject(source[key]) && !isPlainObject(target[key]))
+          target[key] = {}
+        if (isArray(source[key]) && !isArray(target[key]))
+          target[key] = []
+        extend(target[key], source[key], deep)
+      }
+      else if (source[key] !== undefined) target[key] = source[key]
+  }
+
+  // Copy all but undefined properties from one or more
+  // objects to the `target` object.
+  $.extend = function(target){
+    var deep, args = slice.call(arguments, 1)
+    if (typeof target == 'boolean') {
+      deep = target
+      target = args.shift()
+    }
+    args.forEach(function(arg){ extend(target, arg, deep) })
+    return target
+  }
+
+  // `$.zepto.qsa` is Zepto's CSS selector implementation which
+  // uses `document.querySelectorAll` and optimizes for some special cases, like `#id`.
+  // This method can be overriden in plugins.
+  zepto.qsa = function(element, selector){
+    var found
+    return (isDocument(element) && idSelectorRE.test(selector)) ?
+      ( (found = element.getElementById(RegExp.$1)) ? [found] : [] ) :
+      (element.nodeType !== 1 && element.nodeType !== 9) ? [] :
+      slice.call(
+        classSelectorRE.test(selector) ? element.getElementsByClassName(RegExp.$1) :
+        tagSelectorRE.test(selector) ? element.getElementsByTagName(selector) :
+        element.querySelectorAll(selector)
+      )
+  }
+
+  function filtered(nodes, selector) {
+    return selector === undefined ? $(nodes) : $(nodes).filter(selector)
+  }
+
+  $.contains = function(parent, node) {
+    return parent !== node && parent.contains(node)
+  }
+
+  function funcArg(context, arg, idx, payload) {
+    return isFunction(arg) ? arg.call(context, idx, payload) : arg
+  }
+
+  function setAttribute(node, name, value) {
+    value == null ? node.removeAttribute(name) : node.setAttribute(name, value)
+  }
+
+  // access className property while respecting SVGAnimatedString
+  function className(node, value){
+    var klass = node.className,
+        svg   = klass && klass.baseVal !== undefined
+
+    if (value === undefined) return svg ? klass.baseVal : klass
+    svg ? (klass.baseVal = value) : (node.className = value)
+  }
+
+  // "true"  => true
+  // "false" => false
+  // "null"  => null
+  // "42"    => 42
+  // "42.5"  => 42.5
+  // JSON    => parse if valid
+  // String  => self
+  function deserializeValue(value) {
+    var num
+    try {
+      return value ?
+        value == "true" ||
+        ( value == "false" ? false :
+          value == "null" ? null :
+          !isNaN(num = Number(value)) ? num :
+          /^[\[\{]/.test(value) ? $.parseJSON(value) :
+          value )
+        : value
+    } catch(e) {
+      return value
+    }
+  }
+
+  $.type = type
+  $.isFunction = isFunction
+  $.isWindow = isWindow
+  $.isArray = isArray
+  $.isPlainObject = isPlainObject
+
+  $.isEmptyObject = function(obj) {
+    var name
+    for (name in obj) return false
+    return true
+  }
+
+  $.inArray = function(elem, array, i){
+    return emptyArray.indexOf.call(array, elem, i)
+  }
+
+  $.camelCase = camelize
+  $.trim = function(str) { return str.trim() }
+
+  // plugin compatibility
+  $.uuid = 0
+  $.support = { }
+  $.expr = { }
+
+  $.map = function(elements, callback){
+    var value, values = [], i, key
+    if (likeArray(elements))
+      for (i = 0; i < elements.length; i++) {
+        value = callback(elements[i], i)
+        if (value != null) values.push(value)
+      }
+    else
+      for (key in elements) {
+        value = callback(elements[key], key)
+        if (value != null) values.push(value)
+      }
+    return flatten(values)
+  }
+
+  $.each = function(elements, callback){
+    var i, key
+    if (likeArray(elements)) {
+      for (i = 0; i < elements.length; i++)
+        if (callback.call(elements[i], i, elements[i]) === false) return elements
+    } else {
+      for (key in elements)
+        if (callback.call(elements[key], key, elements[key]) === false) return elements
+    }
+
+    return elements
+  }
+
+  $.grep = function(elements, callback){
+    return filter.call(elements, callback)
+  }
+
+  if (window.JSON) $.parseJSON = JSON.parse
+
+  // Populate the class2type map
+  $.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
+    class2type[ "[object " + name + "]" ] = name.toLowerCase()
+  })
+
+  // Define methods that will be available on all
+  // Zepto collections
+  $.fn = {
+    // Because a collection acts like an array
+    // copy over these useful array functions.
+    forEach: emptyArray.forEach,
+    reduce: emptyArray.reduce,
+    push: emptyArray.push,
+    sort: emptyArray.sort,
+    indexOf: emptyArray.indexOf,
+    concat: emptyArray.concat,
+
+    // `map` and `slice` in the jQuery API work differently
+    // from their array counterparts
+    map: function(fn){
+      return $($.map(this, function(el, i){ return fn.call(el, i, el) }))
+    },
+    slice: function(){
+      return $(slice.apply(this, arguments))
+    },
+
+    ready: function(callback){
+      if (readyRE.test(document.readyState)) callback($)
+      else document.addEventListener('DOMContentLoaded', function(){ callback($) }, false)
+      return this
+    },
+    get: function(idx){
+      return idx === undefined ? slice.call(this) : this[idx >= 0 ? idx : idx + this.length]
+    },
+    toArray: function(){ return this.get() },
+    size: function(){
+      return this.length
+    },
+    remove: function(){
+      return this.each(function(){
+        if (this.parentNode != null)
+          this.parentNode.removeChild(this)
+      })
+    },
+    each: function(callback){
+      emptyArray.every.call(this, function(el, idx){
+        return callback.call(el, idx, el) !== false
+      })
+      return this
+    },
+    filter: function(selector){
+      if (isFunction(selector)) return this.not(this.not(selector))
+      return $(filter.call(this, function(element){
+        return zepto.matches(element, selector)
+      }))
+    },
+    add: function(selector,context){
+      return $(uniq(this.concat($(selector,context))))
+    },
+    is: function(selector){
+      return this.length > 0 && zepto.matches(this[0], selector)
+    },
+    not: function(selector){
+      var nodes=[]
+      if (isFunction(selector) && selector.call !== undefined)
+        this.each(function(idx){
+          if (!selector.call(this,idx)) nodes.push(this)
+        })
+      else {
+        var excludes = typeof selector == 'string' ? this.filter(selector) :
+          (likeArray(selector) && isFunction(selector.item)) ? slice.call(selector) : $(selector)
+        this.forEach(function(el){
+          if (excludes.indexOf(el) < 0) nodes.push(el)
+        })
+      }
+      return $(nodes)
+    },
+    has: function(selector){
+      return this.filter(function(){
+        return isObject(selector) ?
+          $.contains(this, selector) :
+          $(this).find(selector).size()
+      })
+    },
+    eq: function(idx){
+      return idx === -1 ? this.slice(idx) : this.slice(idx, + idx + 1)
+    },
+    first: function(){
+      var el = this[0]
+      return el && !isObject(el) ? el : $(el)
+    },
+    last: function(){
+      var el = this[this.length - 1]
+      return el && !isObject(el) ? el : $(el)
+    },
+    find: function(selector){
+      var result, $this = this
+      if (typeof selector == 'object')
+        result = $(selector).filter(function(){
+          var node = this
+          return emptyArray.some.call($this, function(parent){
+            return $.contains(parent, node)
+          })
+        })
+      else if (this.length == 1) result = $(zepto.qsa(this[0], selector))
+      else result = this.map(function(){ return zepto.qsa(this, selector) })
+      return result
+    },
+    closest: function(selector, context){
+      var node = this[0], collection = false
+      if (typeof selector == 'object') collection = $(selector)
+      while (node && !(collection ? collection.indexOf(node) >= 0 : zepto.matches(node, selector)))
+        node = node !== context && !isDocument(node) && node.parentNode
+      return $(node)
+    },
+    parents: function(selector){
+      var ancestors = [], nodes = this
+      while (nodes.length > 0)
+        nodes = $.map(nodes, function(node){
+          if ((node = node.parentNode) && !isDocument(node) && ancestors.indexOf(node) < 0) {
+            ancestors.push(node)
+            return node
+          }
+        })
+      return filtered(ancestors, selector)
+    },
+    parent: function(selector){
+      return filtered(uniq(this.pluck('parentNode')), selector)
+    },
+    children: function(selector){
+      return filtered(this.map(function(){ return children(this) }), selector)
+    },
+    contents: function() {
+      return this.map(function() { return slice.call(this.childNodes) })
+    },
+    siblings: function(selector){
+      return filtered(this.map(function(i, el){
+        return filter.call(children(el.parentNode), function(child){ return child!==el })
+      }), selector)
+    },
+    empty: function(){
+      return this.each(function(){ this.innerHTML = '' })
+    },
+    // `pluck` is borrowed from Prototype.js
+    pluck: function(property){
+      return $.map(this, function(el){ return el[property] })
+    },
+    show: function(){
+      return this.each(function(){
+        this.style.display == "none" && (this.style.display = null)
+        if (getComputedStyle(this, '').getPropertyValue("display") == "none")
+          this.style.display = defaultDisplay(this.nodeName)
+      })
+    },
+    replaceWith: function(newContent){
+      return this.before(newContent).remove()
+    },
+    wrap: function(structure){
+      var func = isFunction(structure)
+      if (this[0] && !func)
+        var dom   = $(structure).get(0),
+            clone = dom.parentNode || this.length > 1
+
+      return this.each(function(index){
+        $(this).wrapAll(
+          func ? structure.call(this, index) :
+            clone ? dom.cloneNode(true) : dom
+        )
+      })
+    },
+    wrapAll: function(structure){
+      if (this[0]) {
+        $(this[0]).before(structure = $(structure))
+        var children
+        // drill down to the inmost element
+        while ((children = structure.children()).length) structure = children.first()
+        $(structure).append(this)
+      }
+      return this
+    },
+    wrapInner: function(structure){
+      var func = isFunction(structure)
+      return this.each(function(index){
+        var self = $(this), contents = self.contents(),
+            dom  = func ? structure.call(this, index) : structure
+        contents.length ? contents.wrapAll(dom) : self.append(dom)
+      })
+    },
+    unwrap: function(){
+      this.parent().each(function(){
+        $(this).replaceWith($(this).children())
+      })
+      return this
+    },
+    clone: function(){
+      return this.map(function(){ return this.cloneNode(true) })
+    },
+    hide: function(){
+      return this.css("display", "none")
+    },
+    toggle: function(setting){
+      return this.each(function(){
+        var el = $(this)
+        ;(setting === undefined ? el.css("display") == "none" : setting) ? el.show() : el.hide()
+      })
+    },
+    prev: function(selector){ return $(this.pluck('previousElementSibling')).filter(selector || '*') },
+    next: function(selector){ return $(this.pluck('nextElementSibling')).filter(selector || '*') },
+    html: function(html){
+      return html === undefined ?
+        (this.length > 0 ? this[0].innerHTML : null) :
+        this.each(function(idx){
+          var originHtml = this.innerHTML
+          $(this).empty().append( funcArg(this, html, idx, originHtml) )
+        })
+    },
+    text: function(text){
+      return text === undefined ?
+        (this.length > 0 ? this[0].textContent : null) :
+        this.each(function(){ this.textContent = text })
+    },
+    attr: function(name, value){
+      var result
+      return (typeof name == 'string' && value === undefined) ?
+        (this.length == 0 || this[0].nodeType !== 1 ? undefined :
+          (name == 'value' && this[0].nodeName == 'INPUT') ? this.val() :
+          (!(result = this[0].getAttribute(name)) && name in this[0]) ? this[0][name] : result
+        ) :
+        this.each(function(idx){
+          if (this.nodeType !== 1) return
+          if (isObject(name)) for (key in name) setAttribute(this, key, name[key])
+          else setAttribute(this, name, funcArg(this, value, idx, this.getAttribute(name)))
+        })
+    },
+    removeAttr: function(name){
+      return this.each(function(){ this.nodeType === 1 && setAttribute(this, name) })
+    },
+    prop: function(name, value){
+      return (value === undefined) ?
+        (this[0] && this[0][name]) :
+        this.each(function(idx){
+          this[name] = funcArg(this, value, idx, this[name])
+        })
+    },
+    data: function(name, value){
+      var data = this.attr('data-' + dasherize(name), value)
+      return data !== null ? deserializeValue(data) : undefined
+    },
+    val: function(value){
+      return (value === undefined) ?
+        (this[0] && (this[0].multiple ?
+           $(this[0]).find('option').filter(function(o){ return this.selected }).pluck('value') :
+           this[0].value)
+        ) :
+        this.each(function(idx){
+          this.value = funcArg(this, value, idx, this.value)
+        })
+    },
+    offset: function(coordinates){
+      if (coordinates) return this.each(function(index){
+        var $this = $(this),
+            coords = funcArg(this, coordinates, index, $this.offset()),
+            parentOffset = $this.offsetParent().offset(),
+            props = {
+              top:  coords.top  - parentOffset.top,
+              left: coords.left - parentOffset.left
+            }
+
+        if ($this.css('position') == 'static') props['position'] = 'relative'
+        $this.css(props)
+      })
+      if (this.length==0) return null
+      var obj = this[0].getBoundingClientRect()
+      return {
+        left: obj.left + window.pageXOffset,
+        top: obj.top + window.pageYOffset,
+        width: Math.round(obj.width),
+        height: Math.round(obj.height)
+      }
+    },
+    css: function(property, value){
+      if (arguments.length < 2 && typeof property == 'string')
+        return this[0] && (this[0].style[camelize(property)] || getComputedStyle(this[0], '').getPropertyValue(property))
+
+      var css = ''
+      if (type(property) == 'string') {
+        if (!value && value !== 0)
+          this.each(function(){ this.style.removeProperty(dasherize(property)) })
+        else
+          css = dasherize(property) + ":" + maybeAddPx(property, value)
+      } else {
+        for (key in property)
+          if (!property[key] && property[key] !== 0)
+            this.each(function(){ this.style.removeProperty(dasherize(key)) })
+          else
+            css += dasherize(key) + ':' + maybeAddPx(key, property[key]) + ';'
+      }
+
+      return this.each(function(){ this.style.cssText += ';' + css })
+    },
+    index: function(element){
+      return element ? this.indexOf($(element)[0]) : this.parent().children().indexOf(this[0])
+    },
+    hasClass: function(name){
+      return emptyArray.some.call(this, function(el){
+        return this.test(className(el))
+      }, classRE(name))
+    },
+    addClass: function(name){
+      return this.each(function(idx){
+        classList = []
+        var cls = className(this), newName = funcArg(this, name, idx, cls)
+        newName.split(/\s+/g).forEach(function(klass){
+          if (!$(this).hasClass(klass)) classList.push(klass)
+        }, this)
+        classList.length && className(this, cls + (cls ? " " : "") + classList.join(" "))
+      })
+    },
+    removeClass: function(name){
+      return this.each(function(idx){
+        if (name === undefined) return className(this, '')
+        classList = className(this)
+        funcArg(this, name, idx, classList).split(/\s+/g).forEach(function(klass){
+          classList = classList.replace(classRE(klass), " ")
+        })
+        className(this, classList.trim())
+      })
+    },
+    toggleClass: function(name, when){
+      return this.each(function(idx){
+        var $this = $(this), names = funcArg(this, name, idx, className(this))
+        names.split(/\s+/g).forEach(function(klass){
+          (when === undefined ? !$this.hasClass(klass) : when) ?
+            $this.addClass(klass) : $this.removeClass(klass)
+        })
+      })
+    },
+    scrollTop: function(){
+      if (!this.length) return
+      return ('scrollTop' in this[0]) ? this[0].scrollTop : this[0].scrollY
+    },
+    position: function() {
+      if (!this.length) return
+
+      var elem = this[0],
+        // Get *real* offsetParent
+        offsetParent = this.offsetParent(),
+        // Get correct offsets
+        offset       = this.offset(),
+        parentOffset = rootNodeRE.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset()
+
+      // Subtract element margins
+      // note: when an element has margin: auto the offsetLeft and marginLeft
+      // are the same in Safari causing offset.left to incorrectly be 0
+      offset.top  -= parseFloat( $(elem).css('margin-top') ) || 0
+      offset.left -= parseFloat( $(elem).css('margin-left') ) || 0
+
+      // Add offsetParent borders
+      parentOffset.top  += parseFloat( $(offsetParent[0]).css('border-top-width') ) || 0
+      parentOffset.left += parseFloat( $(offsetParent[0]).css('border-left-width') ) || 0
+
+      // Subtract the two offsets
+      return {
+        top:  offset.top  - parentOffset.top,
+        left: offset.left - parentOffset.left
+      }
+    },
+    offsetParent: function() {
+      return this.map(function(){
+        var parent = this.offsetParent || document.body
+        while (parent && !rootNodeRE.test(parent.nodeName) && $(parent).css("position") == "static")
+          parent = parent.offsetParent
+        return parent
+      })
+    }
+  }
+
+  // for now
+  $.fn.detach = $.fn.remove
+
+  // Generate the `width` and `height` functions
+  ;['width', 'height'].forEach(function(dimension){
+    $.fn[dimension] = function(value){
+      var offset, el = this[0],
+        Dimension = dimension.replace(/./, function(m){ return m[0].toUpperCase() })
+      if (value === undefined) return isWindow(el) ? el['inner' + Dimension] :
+        isDocument(el) ? el.documentElement['offset' + Dimension] :
+        (offset = this.offset()) && offset[dimension]
+      else return this.each(function(idx){
+        el = $(this)
+        el.css(dimension, funcArg(this, value, idx, el[dimension]()))
+      })
+    }
+  })
+
+  function traverseNode(node, fun) {
+    fun(node)
+    for (var key in node.childNodes) traverseNode(node.childNodes[key], fun)
+  }
+
+  // Generate the `after`, `prepend`, `before`, `append`,
+  // `insertAfter`, `insertBefore`, `appendTo`, and `prependTo` methods.
+  adjacencyOperators.forEach(function(operator, operatorIndex) {
+    var inside = operatorIndex % 2 //=> prepend, append
+
+    $.fn[operator] = function(){
+      // arguments can be nodes, arrays of nodes, Zepto objects and HTML strings
+      var argType, nodes = $.map(arguments, function(arg) {
+            argType = type(arg)
+            return argType == "object" || argType == "array" || arg == null ?
+              arg : zepto.fragment(arg)
+          }),
+          parent, copyByClone = this.length > 1
+      if (nodes.length < 1) return this
+
+      return this.each(function(_, target){
+        parent = inside ? target : target.parentNode
+
+        // convert all methods to a "before" operation
+        target = operatorIndex == 0 ? target.nextSibling :
+                 operatorIndex == 1 ? target.firstChild :
+                 operatorIndex == 2 ? target :
+                 null
+
+        nodes.forEach(function(node){
+          if (copyByClone) node = node.cloneNode(true)
+          else if (!parent) return $(node).remove()
+
+          traverseNode(parent.insertBefore(node, target), function(el){
+            if (el.nodeName != null && el.nodeName.toUpperCase() === 'SCRIPT' &&
+               (!el.type || el.type === 'text/javascript') && !el.src)
+              window['eval'].call(window, el.innerHTML)
+          })
+        })
+      })
+    }
+
+    // after    => insertAfter
+    // prepend  => prependTo
+    // before   => insertBefore
+    // append   => appendTo
+    $.fn[inside ? operator+'To' : 'insert'+(operatorIndex ? 'Before' : 'After')] = function(html){
+      $(html)[operator](this)
+      return this
+    }
+  })
+
+  zepto.Z.prototype = $.fn
+
+  // Export internal API functions in the `$.zepto` namespace
+  zepto.uniq = uniq
+  zepto.deserializeValue = deserializeValue
+  $.zepto = zepto
+
+  return $
+})()
+
+window.Zepto = Zepto
+'$' in window || (window.$ = Zepto)
+
+;(function($){
+  function detect(ua){
+    var os = this.os = {}, browser = this.browser = {},
+      webkit = ua.match(/WebKit\/([\d.]+)/),
+      android = ua.match(/(Android)\s+([\d.]+)/),
+      ipad = ua.match(/(iPad).*OS\s([\d_]+)/),
+      iphone = !ipad && ua.match(/(iPhone\sOS)\s([\d_]+)/),
+      webos = ua.match(/(webOS|hpwOS)[\s\/]([\d.]+)/),
+      touchpad = webos && ua.match(/TouchPad/),
+      kindle = ua.match(/Kindle\/([\d.]+)/),
+      silk = ua.match(/Silk\/([\d._]+)/),
+      blackberry = ua.match(/(BlackBerry).*Version\/([\d.]+)/),
+      bb10 = ua.match(/(BB10).*Version\/([\d.]+)/),
+      rimtabletos = ua.match(/(RIM\sTablet\sOS)\s([\d.]+)/),
+      playbook = ua.match(/PlayBook/),
+      chrome = ua.match(/Chrome\/([\d.]+)/) || ua.match(/CriOS\/([\d.]+)/),
+      firefox = ua.match(/Firefox\/([\d.]+)/)
+
+    // Todo: clean this up with a better OS/browser seperation:
+    // - discern (more) between multiple browsers on android
+    // - decide if kindle fire in silk mode is android or not
+    // - Firefox on Android doesn't specify the Android version
+    // - possibly devide in os, device and browser hashes
+
+    if (browser.webkit = !!webkit) browser.version = webkit[1]
+
+    if (android) os.android = true, os.version = android[2]
+    if (iphone) os.ios = os.iphone = true, os.version = iphone[2].replace(/_/g, '.')
+    if (ipad) os.ios = os.ipad = true, os.version = ipad[2].replace(/_/g, '.')
+    if (webos) os.webos = true, os.version = webos[2]
+    if (touchpad) os.touchpad = true
+    if (blackberry) os.blackberry = true, os.version = blackberry[2]
+    if (bb10) os.bb10 = true, os.version = bb10[2]
+    if (rimtabletos) os.rimtabletos = true, os.version = rimtabletos[2]
+    if (playbook) browser.playbook = true
+    if (kindle) os.kindle = true, os.version = kindle[1]
+    if (silk) browser.silk = true, browser.version = silk[1]
+    if (!silk && os.android && ua.match(/Kindle Fire/)) browser.silk = true
+    if (chrome) browser.chrome = true, browser.version = chrome[1]
+    if (firefox) browser.firefox = true, browser.version = firefox[1]
+
+    os.tablet = !!(ipad || playbook || (android && !ua.match(/Mobile/)) || (firefox && ua.match(/Tablet/)))
+    os.phone  = !!(!os.tablet && (android || iphone || webos || blackberry || bb10 ||
+      (chrome && ua.match(/Android/)) || (chrome && ua.match(/CriOS\/([\d.]+)/)) || (firefox && ua.match(/Mobile/))))
+  }
+
+  detect.call($, navigator.userAgent)
+  // make available to unit tests
+  $.__detect = detect
+
+})(Zepto)
+
+;(function($){
+  var $$ = $.zepto.qsa, handlers = {}, _zid = 1, specialEvents={},
+      hover = { mouseenter: 'mouseover', mouseleave: 'mouseout' }
+
+  specialEvents.click = specialEvents.mousedown = specialEvents.mouseup = specialEvents.mousemove = 'MouseEvents'
+
+  function zid(element) {
+    return element._zid || (element._zid = _zid++)
+  }
+  function findHandlers(element, event, fn, selector) {
+    event = parse(event)
+    if (event.ns) var matcher = matcherFor(event.ns)
+    return (handlers[zid(element)] || []).filter(function(handler) {
+      return handler
+        && (!event.e  || handler.e == event.e)
+        && (!event.ns || matcher.test(handler.ns))
+        && (!fn       || zid(handler.fn) === zid(fn))
+        && (!selector || handler.sel == selector)
+    })
+  }
+  function parse(event) {
+    var parts = ('' + event).split('.')
+    return {e: parts[0], ns: parts.slice(1).sort().join(' ')}
+  }
+  function matcherFor(ns) {
+    return new RegExp('(?:^| )' + ns.replace(' ', ' .* ?') + '(?: |$)')
+  }
+
+  function eachEvent(events, fn, iterator){
+    if ($.type(events) != "string") $.each(events, iterator)
+    else events.split(/\s/).forEach(function(type){ iterator(type, fn) })
+  }
+
+  function eventCapture(handler, captureSetting) {
+    return handler.del &&
+      (handler.e == 'focus' || handler.e == 'blur') ||
+      !!captureSetting
+  }
+
+  function realEvent(type) {
+    return hover[type] || type
+  }
+
+  function add(element, events, fn, selector, getDelegate, capture){
+    var id = zid(element), set = (handlers[id] || (handlers[id] = []))
+    eachEvent(events, fn, function(event, fn){
+      var handler   = parse(event)
+      handler.fn    = fn
+      handler.sel   = selector
+      // emulate mouseenter, mouseleave
+      if (handler.e in hover) fn = function(e){
+        var related = e.relatedTarget
+        if (!related || (related !== this && !$.contains(this, related)))
+          return handler.fn.apply(this, arguments)
+      }
+      handler.del   = getDelegate && getDelegate(fn, event)
+      var callback  = handler.del || fn
+      handler.proxy = function (e) {
+        var result = callback.apply(element, [e].concat(e.data))
+        if (result === false) e.preventDefault(), e.stopPropagation()
+        return result
+      }
+      handler.i = set.length
+      set.push(handler)
+      element.addEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))
+    })
+  }
+  function remove(element, events, fn, selector, capture){
+    var id = zid(element)
+    eachEvent(events || '', fn, function(event, fn){
+      findHandlers(element, event, fn, selector).forEach(function(handler){
+        delete handlers[id][handler.i]
+        element.removeEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))
+      })
+    })
+  }
+
+  $.event = { add: add, remove: remove }
+
+  $.proxy = function(fn, context) {
+    if ($.isFunction(fn)) {
+      var proxyFn = function(){ return fn.apply(context, arguments) }
+      proxyFn._zid = zid(fn)
+      return proxyFn
+    } else if (typeof context == 'string') {
+      return $.proxy(fn[context], fn)
+    } else {
+      throw new TypeError("expected function")
+    }
+  }
+
+  $.fn.bind = function(event, callback){
+    return this.each(function(){
+      add(this, event, callback)
+    })
+  }
+  $.fn.unbind = function(event, callback){
+    return this.each(function(){
+      remove(this, event, callback)
+    })
+  }
+  $.fn.one = function(event, callback){
+    return this.each(function(i, element){
+      add(this, event, callback, null, function(fn, type){
+        return function(){
+          var result = fn.apply(element, arguments)
+          remove(element, type, fn)
+          return result
+        }
+      })
+    })
+  }
+
+  var returnTrue = function(){return true},
+      returnFalse = function(){return false},
+      ignoreProperties = /^([A-Z]|layer[XY]$)/,
+      eventMethods = {
+        preventDefault: 'isDefaultPrevented',
+        stopImmediatePropagation: 'isImmediatePropagationStopped',
+        stopPropagation: 'isPropagationStopped'
+      }
+  function createProxy(event) {
+    var key, proxy = { originalEvent: event }
+    for (key in event)
+      if (!ignoreProperties.test(key) && event[key] !== undefined) proxy[key] = event[key]
+
+    $.each(eventMethods, function(name, predicate) {
+      proxy[name] = function(){
+        this[predicate] = returnTrue
+        return event[name].apply(event, arguments)
+      }
+      proxy[predicate] = returnFalse
+    })
+    return proxy
+  }
+
+  // emulates the 'defaultPrevented' property for browsers that have none
+  function fix(event) {
+    if (!('defaultPrevented' in event)) {
+      event.defaultPrevented = false
+      var prevent = event.preventDefault
+      event.preventDefault = function() {
+        this.defaultPrevented = true
+        prevent.call(this)
+      }
+    }
+  }
+
+  $.fn.delegate = function(selector, event, callback){
+    return this.each(function(i, element){
+      add(element, event, callback, selector, function(fn){
+        return function(e){
+          var evt, match = $(e.target).closest(selector, element).get(0)
+          if (match) {
+            evt = $.extend(createProxy(e), {currentTarget: match, liveFired: element})
+            return fn.apply(match, [evt].concat([].slice.call(arguments, 1)))
+          }
+        }
+      })
+    })
+  }
+  $.fn.undelegate = function(selector, event, callback){
+    return this.each(function(){
+      remove(this, event, callback, selector)
+    })
+  }
+
+  $.fn.live = function(event, callback){
+    $(document.body).delegate(this.selector, event, callback)
+    return this
+  }
+  $.fn.die = function(event, callback){
+    $(document.body).undelegate(this.selector, event, callback)
+    return this
+  }
+
+  $.fn.on = function(event, selector, callback){
+    return !selector || $.isFunction(selector) ?
+      this.bind(event, selector || callback) : this.delegate(selector, event, callback)
+  }
+  $.fn.off = function(event, selector, callback){
+    return !selector || $.isFunction(selector) ?
+      this.unbind(event, selector || callback) : this.undelegate(selector, event, callback)
+  }
+
+  $.fn.trigger = function(event, data){
+    if (typeof event == 'string' || $.isPlainObject(event)) event = $.Event(event)
+    fix(event)
+    event.data = data
+    return this.each(function(){
+      // items in the collection might not be DOM elements
+      // (todo: possibly support events on plain old objects)
+      if('dispatchEvent' in this) this.dispatchEvent(event)
+    })
+  }
+
+  // triggers event handlers on current element just as if an event occurred,
+  // doesn't trigger an actual event, doesn't bubble
+  $.fn.triggerHandler = function(event, data){
+    var e, result
+    this.each(function(i, element){
+      e = createProxy(typeof event == 'string' ? $.Event(event) : event)
+      e.data = data
+      e.target = element
+      $.each(findHandlers(element, event.type || event), function(i, handler){
+        result = handler.proxy(e)
+        if (e.isImmediatePropagationStopped()) return false
+      })
+    })
+    return result
+  }
+
+  // shortcut methods for `.bind(event, fn)` for each event type
+  ;('focusin focusout load resize scroll unload click dblclick '+
+  'mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave '+
+  'change select keydown keypress keyup error').split(' ').forEach(function(event) {
+    $.fn[event] = function(callback) {
+      return callback ?
+        this.bind(event, callback) :
+        this.trigger(event)
+    }
+  })
+
+  ;['focus', 'blur'].forEach(function(name) {
+    $.fn[name] = function(callback) {
+      if (callback) this.bind(name, callback)
+      else this.each(function(){
+        try { this[name]() }
+        catch(e) {}
+      })
+      return this
+    }
+  })
+
+  $.Event = function(type, props) {
+    if (typeof type != 'string') props = type, type = props.type
+    var event = document.createEvent(specialEvents[type] || 'Events'), bubbles = true
+    if (props) for (var name in props) (name == 'bubbles') ? (bubbles = !!props[name]) : (event[name] = props[name])
+    event.initEvent(type, bubbles, true, null, null, null, null, null, null, null, null, null, null, null, null)
+    event.isDefaultPrevented = function(){ return this.defaultPrevented }
+    return event
+  }
+
+})(Zepto)
+
+;(function($){
+  var jsonpID = 0,
+      document = window.document,
+      key,
+      name,
+      rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
+      scriptTypeRE = /^(?:text|application)\/javascript/i,
+      xmlTypeRE = /^(?:text|application)\/xml/i,
+      jsonType = 'application/json',
+      htmlType = 'text/html',
+      blankRE = /^\s*$/
+
+  // trigger a custom event and return false if it was cancelled
+  function triggerAndReturn(context, eventName, data) {
+    var event = $.Event(eventName)
+    $(context).trigger(event, data)
+    return !event.defaultPrevented
+  }
+
+  // trigger an Ajax "global" event
+  function triggerGlobal(settings, context, eventName, data) {
+    if (settings.global) return triggerAndReturn(context || document, eventName, data)
+  }
+
+  // Number of active Ajax requests
+  $.active = 0
+
+  function ajaxStart(settings) {
+    if (settings.global && $.active++ === 0) triggerGlobal(settings, null, 'ajaxStart')
+  }
+  function ajaxStop(settings) {
+    if (settings.global && !(--$.active)) triggerGlobal(settings, null, 'ajaxStop')
+  }
+
+  // triggers an extra global event "ajaxBeforeSend" that's like "ajaxSend" but cancelable
+  function ajaxBeforeSend(xhr, settings) {
+    var context = settings.context
+    if (settings.beforeSend.call(context, xhr, settings) === false ||
+        triggerGlobal(settings, context, 'ajaxBeforeSend', [xhr, settings]) === false)
+      return false
+
+    triggerGlobal(settings, context, 'ajaxSend', [xhr, settings])
+  }
+  function ajaxSuccess(data, xhr, settings) {
+    var context = settings.context, status = 'success'
+    settings.success.call(context, data, status, xhr)
+    triggerGlobal(settings, context, 'ajaxSuccess', [xhr, settings, data])
+    ajaxComplete(status, xhr, settings)
+  }
+  // type: "timeout", "error", "abort", "parsererror"
+  function ajaxError(error, type, xhr, settings) {
+    var context = settings.context
+    settings.error.call(context, xhr, type, error)
+    triggerGlobal(settings, context, 'ajaxError', [xhr, settings, error])
+    ajaxComplete(type, xhr, settings)
+  }
+  // status: "success", "notmodified", "error", "timeout", "abort", "parsererror"
+  function ajaxComplete(status, xhr, settings) {
+    var context = settings.context
+    settings.complete.call(context, xhr, status)
+    triggerGlobal(settings, context, 'ajaxComplete', [xhr, settings])
+    ajaxStop(settings)
+  }
+
+  // Empty function, used as default callback
+  function empty() {}
+
+  $.ajaxJSONP = function(options){
+    if (!('type' in options)) return $.ajax(options)
+
+    var callbackName = 'jsonp' + (++jsonpID),
+      script = document.createElement('script'),
+      cleanup = function() {
+        clearTimeout(abortTimeout)
+        $(script).remove()
+        delete window[callbackName]
+      },
+      abort = function(type){
+        cleanup()
+        // In case of manual abort or timeout, keep an empty function as callback
+        // so that the SCRIPT tag that eventually loads won't result in an error.
+        if (!type || type == 'timeout') window[callbackName] = empty
+        ajaxError(null, type || 'abort', xhr, options)
+      },
+      xhr = { abort: abort }, abortTimeout
+
+    if (ajaxBeforeSend(xhr, options) === false) {
+      abort('abort')
+      return false
+    }
+
+    window[callbackName] = function(data){
+      cleanup()
+      ajaxSuccess(data, xhr, options)
+    }
+
+    script.onerror = function() { abort('error') }
+
+    script.src = options.url.replace(/=\?/, '=' + callbackName)
+    $('head').append(script)
+
+    if (options.timeout > 0) abortTimeout = setTimeout(function(){
+      abort('timeout')
+    }, options.timeout)
+
+    return xhr
+  }
+
+  $.ajaxSettings = {
+    // Default type of request
+    type: 'GET',
+    // Callback that is executed before request
+    beforeSend: empty,
+    // Callback that is executed if the request succeeds
+    success: empty,
+    // Callback that is executed the the server drops error
+    error: empty,
+    // Callback that is executed on request complete (both: error and success)
+    complete: empty,
+    // The context for the callbacks
+    context: null,
+    // Whether to trigger "global" Ajax events
+    global: true,
+    // Transport
+    xhr: function () {
+      return new window.XMLHttpRequest()
+    },
+    // MIME types mapping
+    accepts: {
+      script: 'text/javascript, application/javascript',
+      json:   jsonType,
+      xml:    'application/xml, text/xml',
+      html:   htmlType,
+      text:   'text/plain'
+    },
+    // Whether the request is to another domain
+    crossDomain: false,
+    // Default timeout
+    timeout: 0,
+    // Whether data should be serialized to string
+    processData: true,
+    // Whether the browser should be allowed to cache GET responses
+    cache: true,
+  }
+
+  function mimeToDataType(mime) {
+    if (mime) mime = mime.split(';', 2)[0]
+    return mime && ( mime == htmlType ? 'html' :
+      mime == jsonType ? 'json' :
+      scriptTypeRE.test(mime) ? 'script' :
+      xmlTypeRE.test(mime) && 'xml' ) || 'text'
+  }
+
+  function appendQuery(url, query) {
+    return (url + '&' + query).replace(/[&?]{1,2}/, '?')
+  }
+
+  // serialize payload and append it to the URL for GET requests
+  function serializeData(options) {
+    if (options.processData && options.data && $.type(options.data) != "string")
+      options.data = $.param(options.data, options.traditional)
+    if (options.data && (!options.type || options.type.toUpperCase() == 'GET'))
+      options.url = appendQuery(options.url, options.data)
+  }
+
+  $.ajax = function(options){
+    var settings = $.extend({}, options || {})
+    for (key in $.ajaxSettings) if (settings[key] === undefined) settings[key] = $.ajaxSettings[key]
+
+    ajaxStart(settings)
+
+    if (!settings.crossDomain) settings.crossDomain = /^([\w-]+:)?\/\/([^\/]+)/.test(settings.url) &&
+      RegExp.$2 != window.location.host
+
+    if (!settings.url) settings.url = window.location.toString()
+    serializeData(settings)
+    if (settings.cache === false) settings.url = appendQuery(settings.url, '_=' + Date.now())
+
+    var dataType = settings.dataType, hasPlaceholder = /=\?/.test(settings.url)
+    if (dataType == 'jsonp' || hasPlaceholder) {
+      if (!hasPlaceholder) settings.url = appendQuery(settings.url, 'callback=?')
+      return $.ajaxJSONP(settings)
+    }
+
+    var mime = settings.accepts[dataType],
+        baseHeaders = { },
+        protocol = /^([\w-]+:)\/\//.test(settings.url) ? RegExp.$1 : window.location.protocol,
+        xhr = settings.xhr(), abortTimeout
+
+    if (!settings.crossDomain) baseHeaders['X-Requested-With'] = 'XMLHttpRequest'
+    if (mime) {
+      baseHeaders['Accept'] = mime
+      if (mime.indexOf(',') > -1) mime = mime.split(',', 2)[0]
+      xhr.overrideMimeType && xhr.overrideMimeType(mime)
+    }
+    if (settings.contentType || (settings.contentType !== false && settings.data && settings.type.toUpperCase() != 'GET'))
+      baseHeaders['Content-Type'] = (settings.contentType || 'application/x-www-form-urlencoded')
+    settings.headers = $.extend(baseHeaders, settings.headers || {})
+
+    xhr.onreadystatechange = function(){
+      if (xhr.readyState == 4) {
+        xhr.onreadystatechange = empty;
+        clearTimeout(abortTimeout)
+        var result, error = false
+        if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304 || (xhr.status == 0 && protocol == 'file:')) {
+          dataType = dataType || mimeToDataType(xhr.getResponseHeader('content-type'))
+          result = xhr.responseText
+
+          try {
+            // http://perfectionkills.com/global-eval-what-are-the-options/
+            if (dataType == 'script')    (1,eval)(result)
+            else if (dataType == 'xml')  result = xhr.responseXML
+            else if (dataType == 'json') result = blankRE.test(result) ? null : $.parseJSON(result)
+          } catch (e) { error = e }
+
+          if (error) ajaxError(error, 'parsererror', xhr, settings)
+          else ajaxSuccess(result, xhr, settings)
+        } else {
+          ajaxError(null, xhr.status ? 'error' : 'abort', xhr, settings)
+        }
+      }
+    }
+
+    var async = 'async' in settings ? settings.async : true
+    xhr.open(settings.type, settings.url, async)
+
+    for (name in settings.headers) xhr.setRequestHeader(name, settings.headers[name])
+
+    if (ajaxBeforeSend(xhr, settings) === false) {
+      xhr.abort()
+      return false
+    }
+
+    if (settings.timeout > 0) abortTimeout = setTimeout(function(){
+        xhr.onreadystatechange = empty
+        xhr.abort()
+        ajaxError(null, 'timeout', xhr, settings)
+      }, settings.timeout)
+
+    // avoid sending empty string (#319)
+    xhr.send(settings.data ? settings.data : null)
+    return xhr
+  }
+
+  // handle optional data/success arguments
+  function parseArguments(url, data, success, dataType) {
+    var hasData = !$.isFunction(data)
+    return {
+      url:      url,
+      data:     hasData  ? data : undefined,
+      success:  !hasData ? data : $.isFunction(success) ? success : undefined,
+      dataType: hasData  ? dataType || success : success
+    }
+  }
+
+  $.get = function(url, data, success, dataType){
+    return $.ajax(parseArguments.apply(null, arguments))
+  }
+
+  $.post = function(url, data, success, dataType){
+    var options = parseArguments.apply(null, arguments)
+    options.type = 'POST'
+    return $.ajax(options)
+  }
+
+  $.getJSON = function(url, data, success){
+    var options = parseArguments.apply(null, arguments)
+    options.dataType = 'json'
+    return $.ajax(options)
+  }
+
+  $.fn.load = function(url, data, success){
+    if (!this.length) return this
+    var self = this, parts = url.split(/\s/), selector,
+        options = parseArguments(url, data, success),
+        callback = options.success
+    if (parts.length > 1) options.url = parts[0], selector = parts[1]
+    options.success = function(response){
+      self.html(selector ?
+        $('<div>').html(response.replace(rscript, "")).find(selector)
+        : response)
+      callback && callback.apply(self, arguments)
+    }
+    $.ajax(options)
+    return this
+  }
+
+  var escape = encodeURIComponent
+
+  function serialize(params, obj, traditional, scope){
+    var type, array = $.isArray(obj)
+    $.each(obj, function(key, value) {
+      type = $.type(value)
+      if (scope) key = traditional ? scope : scope + '[' + (array ? '' : key) + ']'
+      // handle data in serializeArray() format
+      if (!scope && array) params.add(value.name, value.value)
+      // recurse into nested objects
+      else if (type == "array" || (!traditional && type == "object"))
+        serialize(params, value, traditional, key)
+      else params.add(key, value)
+    })
+  }
+
+  $.param = function(obj, traditional){
+    var params = []
+    params.add = function(k, v){ this.push(escape(k) + '=' + escape(v)) }
+    serialize(params, obj, traditional)
+    return params.join('&').replace(/%20/g, '+')
+  }
+})(Zepto)
+
+;(function ($) {
+  $.fn.serializeArray = function () {
+    var result = [], el
+    $( Array.prototype.slice.call(this.get(0).elements) ).each(function () {
+      el = $(this)
+      var type = el.attr('type')
+      if (this.nodeName.toLowerCase() != 'fieldset' &&
+        !this.disabled && type != 'submit' && type != 'reset' && type != 'button' &&
+        ((type != 'radio' && type != 'checkbox') || this.checked))
+        result.push({
+          name: el.attr('name'),
+          value: el.val()
+        })
+    })
+    return result
+  }
+
+  $.fn.serialize = function () {
+    var result = []
+    this.serializeArray().forEach(function (elm) {
+      result.push( encodeURIComponent(elm.name) + '=' + encodeURIComponent(elm.value) )
+    })
+    return result.join('&')
+  }
+
+  $.fn.submit = function (callback) {
+    if (callback) this.bind('submit', callback)
+    else if (this.length) {
+      var event = $.Event('submit')
+      this.eq(0).trigger(event)
+      if (!event.defaultPrevented) this.get(0).submit()
+    }
+    return this
+  }
+
+})(Zepto)
+
+;(function($, undefined){
+  var prefix = '', eventPrefix, endEventName, endAnimationName,
+    vendors = { Webkit: 'webkit', Moz: '', O: 'o', ms: 'MS' },
+    document = window.document, testEl = document.createElement('div'),
+    supportedTransforms = /^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i,
+    transform,
+    transitionProperty, transitionDuration, transitionTiming,
+    animationName, animationDuration, animationTiming,
+    cssReset = {}
+
+  function dasherize(str) { return downcase(str.replace(/([a-z])([A-Z])/, '$1-$2')) }
+  function downcase(str) { return str.toLowerCase() }
+  function normalizeEvent(name) { return eventPrefix ? eventPrefix + name : downcase(name) }
+
+  $.each(vendors, function(vendor, event){
+    if (testEl.style[vendor + 'TransitionProperty'] !== undefined) {
+      prefix = '-' + downcase(vendor) + '-'
+      eventPrefix = event
+      return false
+    }
+  })
+
+  transform = prefix + 'transform'
+  cssReset[transitionProperty = prefix + 'transition-property'] =
+  cssReset[transitionDuration = prefix + 'transition-duration'] =
+  cssReset[transitionTiming   = prefix + 'transition-timing-function'] =
+  cssReset[animationName      = prefix + 'animation-name'] =
+  cssReset[animationDuration  = prefix + 'animation-duration'] =
+  cssReset[animationTiming    = prefix + 'animation-timing-function'] = ''
+
+  $.fx = {
+    off: (eventPrefix === undefined && testEl.style.transitionProperty === undefined),
+    speeds: { _default: 400, fast: 200, slow: 600 },
+    cssPrefix: prefix,
+    transitionEnd: normalizeEvent('TransitionEnd'),
+    animationEnd: normalizeEvent('AnimationEnd')
+  }
+
+  $.fn.animate = function(properties, duration, ease, callback){
+    if ($.isPlainObject(duration))
+      ease = duration.easing, callback = duration.complete, duration = duration.duration
+    if (duration) duration = (typeof duration == 'number' ? duration :
+                    ($.fx.speeds[duration] || $.fx.speeds._default)) / 1000
+    return this.anim(properties, duration, ease, callback)
+  }
+
+  $.fn.anim = function(properties, duration, ease, callback){
+    var key, cssValues = {}, cssProperties, transforms = '',
+        that = this, wrappedCallback, endEvent = $.fx.transitionEnd
+
+    if (duration === undefined) duration = 0.4
+    if ($.fx.off) duration = 0
+
+    if (typeof properties == 'string') {
+      // keyframe animation
+      cssValues[animationName] = properties
+      cssValues[animationDuration] = duration + 's'
+      cssValues[animationTiming] = (ease || 'linear')
+      endEvent = $.fx.animationEnd
+    } else {
+      cssProperties = []
+      // CSS transitions
+      for (key in properties)
+        if (supportedTransforms.test(key)) transforms += key + '(' + properties[key] + ') '
+        else cssValues[key] = properties[key], cssProperties.push(dasherize(key))
+
+      if (transforms) cssValues[transform] = transforms, cssProperties.push(transform)
+      if (duration > 0 && typeof properties === 'object') {
+        cssValues[transitionProperty] = cssProperties.join(', ')
+        cssValues[transitionDuration] = duration + 's'
+        cssValues[transitionTiming] = (ease || 'linear')
+      }
+    }
+
+    wrappedCallback = function(event){
+      if (typeof event !== 'undefined') {
+        if (event.target !== event.currentTarget) return // makes sure the event didn't bubble from "below"
+        $(event.target).unbind(endEvent, wrappedCallback)
+      }
+      $(this).css(cssReset)
+      callback && callback.call(this)
+    }
+    if (duration > 0) this.bind(endEvent, wrappedCallback)
+
+    // trigger page reflow so new elements can animate
+    this.size() && this.get(0).clientLeft
+
+    this.css(cssValues)
+
+    if (duration <= 0) setTimeout(function() {
+      that.each(function(){ wrappedCallback.call(this) })
+    }, 0)
+
+    return this
+  }
+
+  testEl = null
+})(Zepto)
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/website/third-party-libs/zepto.min.js b/vendor/dimsemenov/magnific-popup/website/third-party-libs/zepto.min.js
new file mode 100644
index 0000000000..112a1da69c
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/third-party-libs/zepto.min.js
@@ -0,0 +1,2 @@
+/* Zepto v1.0-1-ga3cab6c - polyfill zepto detect event ajax form fx - zeptojs.com/license */
+(function(a){String.prototype.trim===a&&(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")}),Array.prototype.reduce===a&&(Array.prototype.reduce=function(b){if(this===void 0||this===null)throw new TypeError;var c=Object(this),d=c.length>>>0,e=0,f;if(typeof b!="function")throw new TypeError;if(d==0&&arguments.length==1)throw new TypeError;if(arguments.length>=2)f=arguments[1];else do{if(e in c){f=c[e++];break}if(++e>=d)throw new TypeError}while(!0);while(e<d)e in c&&(f=b.call(a,f,c[e],e,c)),e++;return f})})();var Zepto=function(){function E(a){return a==null?String(a):y[z.call(a)]||"object"}function F(a){return E(a)=="function"}function G(a){return a!=null&&a==a.window}function H(a){return a!=null&&a.nodeType==a.DOCUMENT_NODE}function I(a){return E(a)=="object"}function J(a){return I(a)&&!G(a)&&a.__proto__==Object.prototype}function K(a){return a instanceof Array}function L(a){return typeof a.length=="number"}function M(a){return g.call(a,function(a){return a!=null})}function N(a){return a.length>0?c.fn.concat.apply([],a):a}function O(a){return a.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function P(a){return a in j?j[a]:j[a]=new RegExp("(^|\\s)"+a+"(\\s|$)")}function Q(a,b){return typeof b=="number"&&!l[O(a)]?b+"px":b}function R(a){var b,c;return i[a]||(b=h.createElement(a),h.body.appendChild(b),c=k(b,"").getPropertyValue("display"),b.parentNode.removeChild(b),c=="none"&&(c="block"),i[a]=c),i[a]}function S(a){return"children"in a?f.call(a.children):c.map(a.childNodes,function(a){if(a.nodeType==1)return a})}function T(c,d,e){for(b in d)e&&(J(d[b])||K(d[b]))?(J(d[b])&&!J(c[b])&&(c[b]={}),K(d[b])&&!K(c[b])&&(c[b]=[]),T(c[b],d[b],e)):d[b]!==a&&(c[b]=d[b])}function U(b,d){return d===a?c(b):c(b).filter(d)}function V(a,b,c,d){return F(b)?b.call(a,c,d):b}function W(a,b,c){c==null?a.removeAttribute(b):a.setAttribute(b,c)}function X(b,c){var d=b.className,e=d&&d.baseVal!==a;if(c===a)return e?d.baseVal:d;e?d.baseVal=c:b.className=c}function Y(a){var b;try{return a?a=="true"||(a=="false"?!1:a=="null"?null:isNaN(b=Number(a))?/^[\[\{]/.test(a)?c.parseJSON(a):a:b):a}catch(d){return a}}function Z(a,b){b(a);for(var c in a.childNodes)Z(a.childNodes[c],b)}var a,b,c,d,e=[],f=e.slice,g=e.filter,h=window.document,i={},j={},k=h.defaultView.getComputedStyle,l={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},m=/^\s*<(\w+|!)[^>]*>/,n=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,o=/^(?:body|html)$/i,p=["val","css","html","text","data","width","height","offset"],q=["after","prepend","before","append"],r=h.createElement("table"),s=h.createElement("tr"),t={tr:h.createElement("tbody"),tbody:r,thead:r,tfoot:r,td:s,th:s,"*":h.createElement("div")},u=/complete|loaded|interactive/,v=/^\.([\w-]+)$/,w=/^#([\w-]*)$/,x=/^[\w-]+$/,y={},z=y.toString,A={},B,C,D=h.createElement("div");return A.matches=function(a,b){if(!a||a.nodeType!==1)return!1;var c=a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.matchesSelector;if(c)return c.call(a,b);var d,e=a.parentNode,f=!e;return f&&(e=D).appendChild(a),d=~A.qsa(e,b).indexOf(a),f&&D.removeChild(a),d},B=function(a){return a.replace(/-+(.)?/g,function(a,b){return b?b.toUpperCase():""})},C=function(a){return g.call(a,function(b,c){return a.indexOf(b)==c})},A.fragment=function(b,d,e){b.replace&&(b=b.replace(n,"<$1></$2>")),d===a&&(d=m.test(b)&&RegExp.$1),d in t||(d="*");var g,h,i=t[d];return i.innerHTML=""+b,h=c.each(f.call(i.childNodes),function(){i.removeChild(this)}),J(e)&&(g=c(h),c.each(e,function(a,b){p.indexOf(a)>-1?g[a](b):g.attr(a,b)})),h},A.Z=function(a,b){return a=a||[],a.__proto__=c.fn,a.selector=b||"",a},A.isZ=function(a){return a instanceof A.Z},A.init=function(b,d){if(!b)return A.Z();if(F(b))return c(h).ready(b);if(A.isZ(b))return b;var e;if(K(b))e=M(b);else if(I(b))e=[J(b)?c.extend({},b):b],b=null;else if(m.test(b))e=A.fragment(b.trim(),RegExp.$1,d),b=null;else{if(d!==a)return c(d).find(b);e=A.qsa(h,b)}return A.Z(e,b)},c=function(a,b){return A.init(a,b)},c.extend=function(a){var b,c=f.call(arguments,1);return typeof a=="boolean"&&(b=a,a=c.shift()),c.forEach(function(c){T(a,c,b)}),a},A.qsa=function(a,b){var c;return H(a)&&w.test(b)?(c=a.getElementById(RegExp.$1))?[c]:[]:a.nodeType!==1&&a.nodeType!==9?[]:f.call(v.test(b)?a.getElementsByClassName(RegExp.$1):x.test(b)?a.getElementsByTagName(b):a.querySelectorAll(b))},c.contains=function(a,b){return a!==b&&a.contains(b)},c.type=E,c.isFunction=F,c.isWindow=G,c.isArray=K,c.isPlainObject=J,c.isEmptyObject=function(a){var b;for(b in a)return!1;return!0},c.inArray=function(a,b,c){return e.indexOf.call(b,a,c)},c.camelCase=B,c.trim=function(a){return a.trim()},c.uuid=0,c.support={},c.expr={},c.map=function(a,b){var c,d=[],e,f;if(L(a))for(e=0;e<a.length;e++)c=b(a[e],e),c!=null&&d.push(c);else for(f in a)c=b(a[f],f),c!=null&&d.push(c);return N(d)},c.each=function(a,b){var c,d;if(L(a)){for(c=0;c<a.length;c++)if(b.call(a[c],c,a[c])===!1)return a}else for(d in a)if(b.call(a[d],d,a[d])===!1)return a;return a},c.grep=function(a,b){return g.call(a,b)},window.JSON&&(c.parseJSON=JSON.parse),c.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){y["[object "+b+"]"]=b.toLowerCase()}),c.fn={forEach:e.forEach,reduce:e.reduce,push:e.push,sort:e.sort,indexOf:e.indexOf,concat:e.concat,map:function(a){return c(c.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return c(f.apply(this,arguments))},ready:function(a){return u.test(h.readyState)?a(c):h.addEventListener("DOMContentLoaded",function(){a(c)},!1),this},get:function(b){return b===a?f.call(this):this[b>=0?b:b+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each(function(){this.parentNode!=null&&this.parentNode.removeChild(this)})},each:function(a){return e.every.call(this,function(b,c){return a.call(b,c,b)!==!1}),this},filter:function(a){return F(a)?this.not(this.not(a)):c(g.call(this,function(b){return A.matches(b,a)}))},add:function(a,b){return c(C(this.concat(c(a,b))))},is:function(a){return this.length>0&&A.matches(this[0],a)},not:function(b){var d=[];if(F(b)&&b.call!==a)this.each(function(a){b.call(this,a)||d.push(this)});else{var e=typeof b=="string"?this.filter(b):L(b)&&F(b.item)?f.call(b):c(b);this.forEach(function(a){e.indexOf(a)<0&&d.push(a)})}return c(d)},has:function(a){return this.filter(function(){return I(a)?c.contains(this,a):c(this).find(a).size()})},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){var a=this[0];return a&&!I(a)?a:c(a)},last:function(){var a=this[this.length-1];return a&&!I(a)?a:c(a)},find:function(a){var b,d=this;return typeof a=="object"?b=c(a).filter(function(){var a=this;return e.some.call(d,function(b){return c.contains(b,a)})}):this.length==1?b=c(A.qsa(this[0],a)):b=this.map(function(){return A.qsa(this,a)}),b},closest:function(a,b){var d=this[0],e=!1;typeof a=="object"&&(e=c(a));while(d&&!(e?e.indexOf(d)>=0:A.matches(d,a)))d=d!==b&&!H(d)&&d.parentNode;return c(d)},parents:function(a){var b=[],d=this;while(d.length>0)d=c.map(d,function(a){if((a=a.parentNode)&&!H(a)&&b.indexOf(a)<0)return b.push(a),a});return U(b,a)},parent:function(a){return U(C(this.pluck("parentNode")),a)},children:function(a){return U(this.map(function(){return S(this)}),a)},contents:function(){return this.map(function(){return f.call(this.childNodes)})},siblings:function(a){return U(this.map(function(a,b){return g.call(S(b.parentNode),function(a){return a!==b})}),a)},empty:function(){return this.each(function(){this.innerHTML=""})},pluck:function(a){return c.map(this,function(b){return b[a]})},show:function(){return this.each(function(){this.style.display=="none"&&(this.style.display=null),k(this,"").getPropertyValue("display")=="none"&&(this.style.display=R(this.nodeName))})},replaceWith:function(a){return this.before(a).remove()},wrap:function(a){var b=F(a);if(this[0]&&!b)var d=c(a).get(0),e=d.parentNode||this.length>1;return this.each(function(f){c(this).wrapAll(b?a.call(this,f):e?d.cloneNode(!0):d)})},wrapAll:function(a){if(this[0]){c(this[0]).before(a=c(a));var b;while((b=a.children()).length)a=b.first();c(a).append(this)}return this},wrapInner:function(a){var b=F(a);return this.each(function(d){var e=c(this),f=e.contents(),g=b?a.call(this,d):a;f.length?f.wrapAll(g):e.append(g)})},unwrap:function(){return this.parent().each(function(){c(this).replaceWith(c(this).children())}),this},clone:function(){return this.map(function(){return this.cloneNode(!0)})},hide:function(){return this.css("display","none")},toggle:function(b){return this.each(function(){var d=c(this);(b===a?d.css("display")=="none":b)?d.show():d.hide()})},prev:function(a){return c(this.pluck("previousElementSibling")).filter(a||"*")},next:function(a){return c(this.pluck("nextElementSibling")).filter(a||"*")},html:function(b){return b===a?this.length>0?this[0].innerHTML:null:this.each(function(a){var d=this.innerHTML;c(this).empty().append(V(this,b,a,d))})},text:function(b){return b===a?this.length>0?this[0].textContent:null:this.each(function(){this.textContent=b})},attr:function(c,d){var e;return typeof c=="string"&&d===a?this.length==0||this[0].nodeType!==1?a:c=="value"&&this[0].nodeName=="INPUT"?this.val():!(e=this[0].getAttribute(c))&&c in this[0]?this[0][c]:e:this.each(function(a){if(this.nodeType!==1)return;if(I(c))for(b in c)W(this,b,c[b]);else W(this,c,V(this,d,a,this.getAttribute(c)))})},removeAttr:function(a){return this.each(function(){this.nodeType===1&&W(this,a)})},prop:function(b,c){return c===a?this[0]&&this[0][b]:this.each(function(a){this[b]=V(this,c,a,this[b])})},data:function(b,c){var d=this.attr("data-"+O(b),c);return d!==null?Y(d):a},val:function(b){return b===a?this[0]&&(this[0].multiple?c(this[0]).find("option").filter(function(a){return this.selected}).pluck("value"):this[0].value):this.each(function(a){this.value=V(this,b,a,this.value)})},offset:function(a){if(a)return this.each(function(b){var d=c(this),e=V(this,a,b,d.offset()),f=d.offsetParent().offset(),g={top:e.top-f.top,left:e.left-f.left};d.css("position")=="static"&&(g.position="relative"),d.css(g)});if(this.length==0)return null;var b=this[0].getBoundingClientRect();return{left:b.left+window.pageXOffset,top:b.top+window.pageYOffset,width:Math.round(b.width),height:Math.round(b.height)}},css:function(a,c){if(arguments.length<2&&typeof a=="string")return this[0]&&(this[0].style[B(a)]||k(this[0],"").getPropertyValue(a));var d="";if(E(a)=="string")!c&&c!==0?this.each(function(){this.style.removeProperty(O(a))}):d=O(a)+":"+Q(a,c);else for(b in a)!a[b]&&a[b]!==0?this.each(function(){this.style.removeProperty(O(b))}):d+=O(b)+":"+Q(b,a[b])+";";return this.each(function(){this.style.cssText+=";"+d})},index:function(a){return a?this.indexOf(c(a)[0]):this.parent().children().indexOf(this[0])},hasClass:function(a){return e.some.call(this,function(a){return this.test(X(a))},P(a))},addClass:function(a){return this.each(function(b){d=[];var e=X(this),f=V(this,a,b,e);f.split(/\s+/g).forEach(function(a){c(this).hasClass(a)||d.push(a)},this),d.length&&X(this,e+(e?" ":"")+d.join(" "))})},removeClass:function(b){return this.each(function(c){if(b===a)return X(this,"");d=X(this),V(this,b,c,d).split(/\s+/g).forEach(function(a){d=d.replace(P(a)," ")}),X(this,d.trim())})},toggleClass:function(b,d){return this.each(function(e){var f=c(this),g=V(this,b,e,X(this));g.split(/\s+/g).forEach(function(b){(d===a?!f.hasClass(b):d)?f.addClass(b):f.removeClass(b)})})},scrollTop:function(){if(!this.length)return;return"scrollTop"in this[0]?this[0].scrollTop:this[0].scrollY},position:function(){if(!this.length)return;var a=this[0],b=this.offsetParent(),d=this.offset(),e=o.test(b[0].nodeName)?{top:0,left:0}:b.offset();return d.top-=parseFloat(c(a).css("margin-top"))||0,d.left-=parseFloat(c(a).css("margin-left"))||0,e.top+=parseFloat(c(b[0]).css("border-top-width"))||0,e.left+=parseFloat(c(b[0]).css("border-left-width"))||0,{top:d.top-e.top,left:d.left-e.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||h.body;while(a&&!o.test(a.nodeName)&&c(a).css("position")=="static")a=a.offsetParent;return a})}},c.fn.detach=c.fn.remove,["width","height"].forEach(function(b){c.fn[b]=function(d){var e,f=this[0],g=b.replace(/./,function(a){return a[0].toUpperCase()});return d===a?G(f)?f["inner"+g]:H(f)?f.documentElement["offset"+g]:(e=this.offset())&&e[b]:this.each(function(a){f=c(this),f.css(b,V(this,d,a,f[b]()))})}}),q.forEach(function(a,b){var d=b%2;c.fn[a]=function(){var a,e=c.map(arguments,function(b){return a=E(b),a=="object"||a=="array"||b==null?b:A.fragment(b)}),f,g=this.length>1;return e.length<1?this:this.each(function(a,h){f=d?h:h.parentNode,h=b==0?h.nextSibling:b==1?h.firstChild:b==2?h:null,e.forEach(function(a){if(g)a=a.cloneNode(!0);else if(!f)return c(a).remove();Z(f.insertBefore(a,h),function(a){a.nodeName!=null&&a.nodeName.toUpperCase()==="SCRIPT"&&(!a.type||a.type==="text/javascript")&&!a.src&&window.eval.call(window,a.innerHTML)})})})},c.fn[d?a+"To":"insert"+(b?"Before":"After")]=function(b){return c(b)[a](this),this}}),A.Z.prototype=c.fn,A.uniq=C,A.deserializeValue=Y,c.zepto=A,c}();window.Zepto=Zepto,"$"in window||(window.$=Zepto),function(a){function b(a){var b=this.os={},c=this.browser={},d=a.match(/WebKit\/([\d.]+)/),e=a.match(/(Android)\s+([\d.]+)/),f=a.match(/(iPad).*OS\s([\d_]+)/),g=!f&&a.match(/(iPhone\sOS)\s([\d_]+)/),h=a.match(/(webOS|hpwOS)[\s\/]([\d.]+)/),i=h&&a.match(/TouchPad/),j=a.match(/Kindle\/([\d.]+)/),k=a.match(/Silk\/([\d._]+)/),l=a.match(/(BlackBerry).*Version\/([\d.]+)/),m=a.match(/(BB10).*Version\/([\d.]+)/),n=a.match(/(RIM\sTablet\sOS)\s([\d.]+)/),o=a.match(/PlayBook/),p=a.match(/Chrome\/([\d.]+)/)||a.match(/CriOS\/([\d.]+)/),q=a.match(/Firefox\/([\d.]+)/);if(c.webkit=!!d)c.version=d[1];e&&(b.android=!0,b.version=e[2]),g&&(b.ios=b.iphone=!0,b.version=g[2].replace(/_/g,".")),f&&(b.ios=b.ipad=!0,b.version=f[2].replace(/_/g,".")),h&&(b.webos=!0,b.version=h[2]),i&&(b.touchpad=!0),l&&(b.blackberry=!0,b.version=l[2]),m&&(b.bb10=!0,b.version=m[2]),n&&(b.rimtabletos=!0,b.version=n[2]),o&&(c.playbook=!0),j&&(b.kindle=!0,b.version=j[1]),k&&(c.silk=!0,c.version=k[1]),!k&&b.android&&a.match(/Kindle Fire/)&&(c.silk=!0),p&&(c.chrome=!0,c.version=p[1]),q&&(c.firefox=!0,c.version=q[1]),b.tablet=!!(f||o||e&&!a.match(/Mobile/)||q&&a.match(/Tablet/)),b.phone=!b.tablet&&!!(e||g||h||l||m||p&&a.match(/Android/)||p&&a.match(/CriOS\/([\d.]+)/)||q&&a.match(/Mobile/))}b.call(a,navigator.userAgent),a.__detect=b}(Zepto),function(a){function g(a){return a._zid||(a._zid=d++)}function h(a,b,d,e){b=i(b);if(b.ns)var f=j(b.ns);return(c[g(a)]||[]).filter(function(a){return a&&(!b.e||a.e==b.e)&&(!b.ns||f.test(a.ns))&&(!d||g(a.fn)===g(d))&&(!e||a.sel==e)})}function i(a){var b=(""+a).split(".");return{e:b[0],ns:b.slice(1).sort().join(" ")}}function j(a){return new RegExp("(?:^| )"+a.replace(" "," .* ?")+"(?: |$)")}function k(b,c,d){a.type(b)!="string"?a.each(b,d):b.split(/\s/).forEach(function(a){d(a,c)})}function l(a,b){return a.del&&(a.e=="focus"||a.e=="blur")||!!b}function m(a){return f[a]||a}function n(b,d,e,h,j,n){var o=g(b),p=c[o]||(c[o]=[]);k(d,e,function(c,d){var e=i(c);e.fn=d,e.sel=h,e.e in f&&(d=function(b){var c=b.relatedTarget;if(!c||c!==this&&!a.contains(this,c))return e.fn.apply(this,arguments)}),e.del=j&&j(d,c);var g=e.del||d;e.proxy=function(a){var c=g.apply(b,[a].concat(a.data));return c===!1&&(a.preventDefault(),a.stopPropagation()),c},e.i=p.length,p.push(e),b.addEventListener(m(e.e),e.proxy,l(e,n))})}function o(a,b,d,e,f){var i=g(a);k(b||"",d,function(b,d){h(a,b,d,e).forEach(function(b){delete c[i][b.i],a.removeEventListener(m(b.e),b.proxy,l(b,f))})})}function t(b){var c,d={originalEvent:b};for(c in b)!r.test(c)&&b[c]!==undefined&&(d[c]=b[c]);return a.each(s,function(a,c){d[a]=function(){return this[c]=p,b[a].apply(b,arguments)},d[c]=q}),d}function u(a){if(!("defaultPrevented"in a)){a.defaultPrevented=!1;var b=a.preventDefault;a.preventDefault=function(){this.defaultPrevented=!0,b.call(this)}}}var b=a.zepto.qsa,c={},d=1,e={},f={mouseenter:"mouseover",mouseleave:"mouseout"};e.click=e.mousedown=e.mouseup=e.mousemove="MouseEvents",a.event={add:n,remove:o},a.proxy=function(b,c){if(a.isFunction(b)){var d=function(){return b.apply(c,arguments)};return d._zid=g(b),d}if(typeof c=="string")return a.proxy(b[c],b);throw new TypeError("expected function")},a.fn.bind=function(a,b){return this.each(function(){n(this,a,b)})},a.fn.unbind=function(a,b){return this.each(function(){o(this,a,b)})},a.fn.one=function(a,b){return this.each(function(c,d){n(this,a,b,null,function(a,b){return function(){var c=a.apply(d,arguments);return o(d,b,a),c}})})};var p=function(){return!0},q=function(){return!1},r=/^([A-Z]|layer[XY]$)/,s={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};a.fn.delegate=function(b,c,d){return this.each(function(e,f){n(f,c,d,b,function(c){return function(d){var e,g=a(d.target).closest(b,f).get(0);if(g)return e=a.extend(t(d),{currentTarget:g,liveFired:f}),c.apply(g,[e].concat([].slice.call(arguments,1)))}})})},a.fn.undelegate=function(a,b,c){return this.each(function(){o(this,b,c,a)})},a.fn.live=function(b,c){return a(document.body).delegate(this.selector,b,c),this},a.fn.die=function(b,c){return a(document.body).undelegate(this.selector,b,c),this},a.fn.on=function(b,c,d){return!c||a.isFunction(c)?this.bind(b,c||d):this.delegate(c,b,d)},a.fn.off=function(b,c,d){return!c||a.isFunction(c)?this.unbind(b,c||d):this.undelegate(c,b,d)},a.fn.trigger=function(b,c){if(typeof b=="string"||a.isPlainObject(b))b=a.Event(b);return u(b),b.data=c,this.each(function(){"dispatchEvent"in this&&this.dispatchEvent(b)})},a.fn.triggerHandler=function(b,c){var d,e;return this.each(function(f,g){d=t(typeof b=="string"?a.Event(b):b),d.data=c,d.target=g,a.each(h(g,b.type||b),function(a,b){e=b.proxy(d);if(d.isImmediatePropagationStopped())return!1})}),e},"focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach(function(b){a.fn[b]=function(a){return a?this.bind(b,a):this.trigger(b)}}),["focus","blur"].forEach(function(b){a.fn[b]=function(a){return a?this.bind(b,a):this.each(function(){try{this[b]()}catch(a){}}),this}}),a.Event=function(a,b){typeof a!="string"&&(b=a,a=b.type);var c=document.createEvent(e[a]||"Events"),d=!0;if(b)for(var f in b)f=="bubbles"?d=!!b[f]:c[f]=b[f];return c.initEvent(a,d,!0,null,null,null,null,null,null,null,null,null,null,null,null),c.isDefaultPrevented=function(){return this.defaultPrevented},c}}(Zepto),function($){function triggerAndReturn(a,b,c){var d=$.Event(b);return $(a).trigger(d,c),!d.defaultPrevented}function triggerGlobal(a,b,c,d){if(a.global)return triggerAndReturn(b||document,c,d)}function ajaxStart(a){a.global&&$.active++===0&&triggerGlobal(a,null,"ajaxStart")}function ajaxStop(a){a.global&&!--$.active&&triggerGlobal(a,null,"ajaxStop")}function ajaxBeforeSend(a,b){var c=b.context;if(b.beforeSend.call(c,a,b)===!1||triggerGlobal(b,c,"ajaxBeforeSend",[a,b])===!1)return!1;triggerGlobal(b,c,"ajaxSend",[a,b])}function ajaxSuccess(a,b,c){var d=c.context,e="success";c.success.call(d,a,e,b),triggerGlobal(c,d,"ajaxSuccess",[b,c,a]),ajaxComplete(e,b,c)}function ajaxError(a,b,c,d){var e=d.context;d.error.call(e,c,b,a),triggerGlobal(d,e,"ajaxError",[c,d,a]),ajaxComplete(b,c,d)}function ajaxComplete(a,b,c){var d=c.context;c.complete.call(d,b,a),triggerGlobal(c,d,"ajaxComplete",[b,c]),ajaxStop(c)}function empty(){}function mimeToDataType(a){return a&&(a=a.split(";",2)[0]),a&&(a==htmlType?"html":a==jsonType?"json":scriptTypeRE.test(a)?"script":xmlTypeRE.test(a)&&"xml")||"text"}function appendQuery(a,b){return(a+"&"+b).replace(/[&?]{1,2}/,"?")}function serializeData(a){a.processData&&a.data&&$.type(a.data)!="string"&&(a.data=$.param(a.data,a.traditional)),a.data&&(!a.type||a.type.toUpperCase()=="GET")&&(a.url=appendQuery(a.url,a.data))}function parseArguments(a,b,c,d){var e=!$.isFunction(b);return{url:a,data:e?b:undefined,success:e?$.isFunction(c)?c:undefined:b,dataType:e?d||c:c}}function serialize(a,b,c,d){var e,f=$.isArray(b);$.each(b,function(b,g){e=$.type(g),d&&(b=c?d:d+"["+(f?"":b)+"]"),!d&&f?a.add(g.name,g.value):e=="array"||!c&&e=="object"?serialize(a,g,c,b):a.add(b,g)})}var jsonpID=0,document=window.document,key,name,rscript=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,scriptTypeRE=/^(?:text|application)\/javascript/i,xmlTypeRE=/^(?:text|application)\/xml/i,jsonType="application/json",htmlType="text/html",blankRE=/^\s*$/;$.active=0,$.ajaxJSONP=function(a){if("type"in a){var b="jsonp"+ ++jsonpID,c=document.createElement("script"),d=function(){clearTimeout(g),$(c).remove(),delete window[b]},e=function(c){d();if(!c||c=="timeout")window[b]=empty;ajaxError(null,c||"abort",f,a)},f={abort:e},g;return ajaxBeforeSend(f,a)===!1?(e("abort"),!1):(window[b]=function(b){d(),ajaxSuccess(b,f,a)},c.onerror=function(){e("error")},c.src=a.url.replace(/=\?/,"="+b),$("head").append(c),a.timeout>0&&(g=setTimeout(function(){e("timeout")},a.timeout)),f)}return $.ajax(a)},$.ajaxSettings={type:"GET",beforeSend:empty,success:empty,error:empty,complete:empty,context:null,global:!0,xhr:function(){return new window.XMLHttpRequest},accepts:{script:"text/javascript, application/javascript",json:jsonType,xml:"application/xml, text/xml",html:htmlType,text:"text/plain"},crossDomain:!1,timeout:0,processData:!0,cache:!0},$.ajax=function(options){var settings=$.extend({},options||{});for(key in $.ajaxSettings)settings[key]===undefined&&(settings[key]=$.ajaxSettings[key]);ajaxStart(settings),settings.crossDomain||(settings.crossDomain=/^([\w-]+:)?\/\/([^\/]+)/.test(settings.url)&&RegExp.$2!=window.location.host),settings.url||(settings.url=window.location.toString()),serializeData(settings),settings.cache===!1&&(settings.url=appendQuery(settings.url,"_="+Date.now()));var dataType=settings.dataType,hasPlaceholder=/=\?/.test(settings.url);if(dataType=="jsonp"||hasPlaceholder)return hasPlaceholder||(settings.url=appendQuery(settings.url,"callback=?")),$.ajaxJSONP(settings);var mime=settings.accepts[dataType],baseHeaders={},protocol=/^([\w-]+:)\/\//.test(settings.url)?RegExp.$1:window.location.protocol,xhr=settings.xhr(),abortTimeout;settings.crossDomain||(baseHeaders["X-Requested-With"]="XMLHttpRequest"),mime&&(baseHeaders.Accept=mime,mime.indexOf(",")>-1&&(mime=mime.split(",",2)[0]),xhr.overrideMimeType&&xhr.overrideMimeType(mime));if(settings.contentType||settings.contentType!==!1&&settings.data&&settings.type.toUpperCase()!="GET")baseHeaders["Content-Type"]=settings.contentType||"application/x-www-form-urlencoded";settings.headers=$.extend(baseHeaders,settings.headers||{}),xhr.onreadystatechange=function(){if(xhr.readyState==4){xhr.onreadystatechange=empty,clearTimeout(abortTimeout);var result,error=!1;if(xhr.status>=200&&xhr.status<300||xhr.status==304||xhr.status==0&&protocol=="file:"){dataType=dataType||mimeToDataType(xhr.getResponseHeader("content-type")),result=xhr.responseText;try{dataType=="script"?(1,eval)(result):dataType=="xml"?result=xhr.responseXML:dataType=="json"&&(result=blankRE.test(result)?null:$.parseJSON(result))}catch(e){error=e}error?ajaxError(error,"parsererror",xhr,settings):ajaxSuccess(result,xhr,settings)}else ajaxError(null,xhr.status?"error":"abort",xhr,settings)}};var async="async"in settings?settings.async:!0;xhr.open(settings.type,settings.url,async);for(name in settings.headers)xhr.setRequestHeader(name,settings.headers[name]);return ajaxBeforeSend(xhr,settings)===!1?(xhr.abort(),!1):(settings.timeout>0&&(abortTimeout=setTimeout(function(){xhr.onreadystatechange=empty,xhr.abort(),ajaxError(null,"timeout",xhr,settings)},settings.timeout)),xhr.send(settings.data?settings.data:null),xhr)},$.get=function(a,b,c,d){return $.ajax(parseArguments.apply(null,arguments))},$.post=function(a,b,c,d){var e=parseArguments.apply(null,arguments);return e.type="POST",$.ajax(e)},$.getJSON=function(a,b,c){var d=parseArguments.apply(null,arguments);return d.dataType="json",$.ajax(d)},$.fn.load=function(a,b,c){if(!this.length)return this;var d=this,e=a.split(/\s/),f,g=parseArguments(a,b,c),h=g.success;return e.length>1&&(g.url=e[0],f=e[1]),g.success=function(a){d.html(f?$("<div>").html(a.replace(rscript,"")).find(f):a),h&&h.apply(d,arguments)},$.ajax(g),this};var escape=encodeURIComponent;$.param=function(a,b){var c=[];return c.add=function(a,b){this.push(escape(a)+"="+escape(b))},serialize(c,a,b),c.join("&").replace(/%20/g,"+")}}(Zepto),function(a){a.fn.serializeArray=function(){var b=[],c;return a(Array.prototype.slice.call(this.get(0).elements)).each(function(){c=a(this);var d=c.attr("type");this.nodeName.toLowerCase()!="fieldset"&&!this.disabled&&d!="submit"&&d!="reset"&&d!="button"&&(d!="radio"&&d!="checkbox"||this.checked)&&b.push({name:c.attr("name"),value:c.val()})}),b},a.fn.serialize=function(){var a=[];return this.serializeArray().forEach(function(b){a.push(encodeURIComponent(b.name)+"="+encodeURIComponent(b.value))}),a.join("&")},a.fn.submit=function(b){if(b)this.bind("submit",b);else if(this.length){var c=a.Event("submit");this.eq(0).trigger(c),c.defaultPrevented||this.get(0).submit()}return this}}(Zepto),function(a,b){function s(a){return t(a.replace(/([a-z])([A-Z])/,"$1-$2"))}function t(a){return a.toLowerCase()}function u(a){return d?d+a:t(a)}var c="",d,e,f,g={Webkit:"webkit",Moz:"",O:"o",ms:"MS"},h=window.document,i=h.createElement("div"),j=/^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i,k,l,m,n,o,p,q,r={};a.each(g,function(a,e){if(i.style[a+"TransitionProperty"]!==b)return c="-"+t(a)+"-",d=e,!1}),k=c+"transform",r[l=c+"transition-property"]=r[m=c+"transition-duration"]=r[n=c+"transition-timing-function"]=r[o=c+"animation-name"]=r[p=c+"animation-duration"]=r[q=c+"animation-timing-function"]="",a.fx={off:d===b&&i.style.transitionProperty===b,speeds:{_default:400,fast:200,slow:600},cssPrefix:c,transitionEnd:u("TransitionEnd"),animationEnd:u("AnimationEnd")},a.fn.animate=function(b,c,d,e){return a.isPlainObject(c)&&(d=c.easing,e=c.complete,c=c.duration),c&&(c=(typeof c=="number"?c:a.fx.speeds[c]||a.fx.speeds._default)/1e3),this.anim(b,c,d,e)},a.fn.anim=function(c,d,e,f){var g,h={},i,t="",u=this,v,w=a.fx.transitionEnd;d===b&&(d=.4),a.fx.off&&(d=0);if(typeof c=="string")h[o]=c,h[p]=d+"s",h[q]=e||"linear",w=a.fx.animationEnd;else{i=[];for(g in c)j.test(g)?t+=g+"("+c[g]+") ":(h[g]=c[g],i.push(s(g)));t&&(h[k]=t,i.push(k)),d>0&&typeof c=="object"&&(h[l]=i.join(", "),h[m]=d+"s",h[n]=e||"linear")}return v=function(b){if(typeof b!="undefined"){if(b.target!==b.currentTarget)return;a(b.target).unbind(w,v)}a(this).css(r),f&&f.call(this)},d>0&&this.bind(w,v),this.size()&&this.get(0).clientLeft,this.css(h),d<=0&&setTimeout(function(){u.each(function(){v.call(this)})},0),this},i=null}(Zepto)
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/website/wordpress.html b/vendor/dimsemenov/magnific-popup/website/wordpress.html
new file mode 100644
index 0000000000..1a7979d257
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/wordpress.html
@@ -0,0 +1,24 @@
+---
+
+layout: default
+
+title: Magnific WordPress Plugin
+
+description: The complete guide on how to use Magnific Popup - the open source responsive lightbox plugin.
+
+addjs: false
+
+canonical_url: http://dimsemenov.com/plugins/magnific-popup/wordpress.html
+
+buildtool: false
+
+---
+
+<style>
+#mc_embed_signup {
+	display: block !important;
+	max-width: 540px;
+	background: none;
+}
+</style>
+{% include signup.html %}
diff --git a/vendor/enyo/dropzone/.gitignore b/vendor/enyo/dropzone/.gitignore
new file mode 100644
index 0000000000..0a8439dca2
--- /dev/null
+++ b/vendor/enyo/dropzone/.gitignore
@@ -0,0 +1,7 @@
+build
+components
+node_modules
+.DS_Store
+.sass-cache
+_site
+_config.yaml
\ No newline at end of file
diff --git a/vendor/enyo/dropzone/.tagconfig b/vendor/enyo/dropzone/.tagconfig
new file mode 100644
index 0000000000..4e0cad936f
--- /dev/null
+++ b/vendor/enyo/dropzone/.tagconfig
@@ -0,0 +1,52 @@
+{
+  "files": [
+    {
+      "name": "src/dropzone.coffee",
+      "regexs": [
+        "Dropzone.version = \"###\""
+      ]
+    },
+    {
+      "name": "dist/dropzone.js",
+      "regexs": [
+        "version = \"###\""
+      ]
+    },
+    {
+      "name": "dist/min/dropzone.min.js",
+      "regexs": [
+        "version=\"###\""
+      ]
+    },
+    {
+      "name": "dist/dropzone-amd-module.js",
+      "regexs": [
+        "version = \"###\""
+      ]
+    },
+    {
+      "name": "dist/min/dropzone-amd-module.min.js",
+      "regexs": [
+        "version=\"###\""
+      ]
+    },
+    {
+      "name": "package.json",
+      "regexs": [
+        "\"version\": \"###\""
+      ]
+    },
+    {
+      "name": "component.json",
+      "regexs": [
+        "\"version\": \"###\""
+      ]
+    },
+    {
+      "name": "bower.json",
+      "regexs": [
+        "\"version\": \"###\""
+      ]
+    }
+  ]
+}
diff --git a/vendor/enyo/dropzone/.travis.yml b/vendor/enyo/dropzone/.travis.yml
new file mode 100644
index 0000000000..d03586be7a
--- /dev/null
+++ b/vendor/enyo/dropzone/.travis.yml
@@ -0,0 +1,10 @@
+language: node_js
+node_js:
+  - 0.10
+before_install:
+  - npm install -g grunt-cli
+  - gem install sass
+install: npm install
+before_script:
+  - grunt
+script: ./test.sh compiled
\ No newline at end of file
diff --git a/vendor/enyo/dropzone/CONTRIBUTING.md b/vendor/enyo/dropzone/CONTRIBUTING.md
new file mode 100644
index 0000000000..98aebe0245
--- /dev/null
+++ b/vendor/enyo/dropzone/CONTRIBUTING.md
@@ -0,0 +1,6 @@
+Contribute
+==========
+
+DO NOT CREATE PULL REQUESTS ON GITHUB!
+
+I will simply close them. If you want to contribute, please use [gitlab.com](https://gitlab.com/meno/dropzone) instead.
\ No newline at end of file
diff --git a/vendor/enyo/dropzone/LICENSE b/vendor/enyo/dropzone/LICENSE
new file mode 100644
index 0000000000..2ec3379e5c
--- /dev/null
+++ b/vendor/enyo/dropzone/LICENSE
@@ -0,0 +1,12 @@
+License
+
+(The MIT License)
+
+Copyright (c) 2012 Matias Meno <m@tias.me>
+Logo & Website Design (c) 2015 "1910" www.weare1910.com
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/vendor/enyo/dropzone/README.md b/vendor/enyo/dropzone/README.md
new file mode 100644
index 0000000000..07ef5fa2e4
--- /dev/null
+++ b/vendor/enyo/dropzone/README.md
@@ -0,0 +1,36 @@
+<img alt="Dropzone.js" src="http://www.dropzonejs.com/images/new-logo.svg" />
+
+Dropzone.js is a light weight JavaScript library that turns an HTML element into a dropzone.
+This means that a user can drag and drop a file onto it, and the file gets uploaded to the server via AJAX.
+
+* * *
+
+_If you want support, please use [stackoverflow](http://stackoverflow.com/) with the `dropzone.js` tag and not the
+GitHub issues tracker. Only post an issue here if you think you discovered a bug or have a feature request._
+
+* * *
+
+**Please read the [contributing guidelines](CONTRIBUTING.md) before you start working on Dropzone!**
+
+<br>
+<div align="center">
+  <a href="https://gitlab.com/meno/dropzone/builds/artifacts/master/download?job=release"><strong>&gt;&gt; Download &lt;&lt;</strong></a>
+</div>
+<br>
+<br>
+
+This is no longer the official repository for Dropzone. I have switched to [gitlab.com](https://gitlab.com/meno/dropzone)
+as the primary location to continue development.
+ 
+There are multiple reasons why I am switching from GitHub to GitLab, but one of the main reasons are the ridiculous
+issue tracker that GitHub is providing, *drowning* me in issues that I am unable to categorise or prioritize properly,
+the lack of proper continuous integration, and build files. I don't want the compiled `.js` files in my repository, and
+people regularly commit changes to the compiled files and create pull requests with them.
+
+I will write a blog post soon, that goes into detail about why I am doing the switch.
+
+This repository will still remain, and always host the most up to date versions of dropzone, but only the distribution
+files!
+
+MIT License
+-----------
diff --git a/vendor/enyo/dropzone/bower.json b/vendor/enyo/dropzone/bower.json
new file mode 100644
index 0000000000..e90dcd8cf0
--- /dev/null
+++ b/vendor/enyo/dropzone/bower.json
@@ -0,0 +1,16 @@
+{
+  "name": "dropzone",
+  "location": "enyo/dropzone",
+  "version": "5.1.1",
+  "description": "Dropzone is an easy to use drag'n'drop library. It supports image previews and shows nice progress bars.",
+  "homepage": "http://www.dropzonejs.com",
+  "main": [
+    "dist/min/dropzone.min.css",
+    "dist/min/dropzone.min.js"
+  ],
+  "ignore": [
+    "*",
+    "!dist",
+    "!dist/**/*"
+  ]
+}
diff --git a/vendor/enyo/dropzone/component.json b/vendor/enyo/dropzone/component.json
new file mode 100644
index 0000000000..62271cd8cc
--- /dev/null
+++ b/vendor/enyo/dropzone/component.json
@@ -0,0 +1,10 @@
+{
+  "name": "dropzone",
+  "repo": "enyo/dropzone",
+  "version": "5.1.1",
+  "description": "Handles drag and drop of files for you.",
+  "scripts": [ "index.js", "dist/dropzone.js" ],
+  "styles": [ "dist/basic.css" ],
+  "dependencies": { },
+  "license": "MIT"
+}
diff --git a/vendor/enyo/dropzone/composer.json b/vendor/enyo/dropzone/composer.json
new file mode 100644
index 0000000000..6be6387561
--- /dev/null
+++ b/vendor/enyo/dropzone/composer.json
@@ -0,0 +1,18 @@
+{
+	"name": "enyo/dropzone",
+	"description": "Handles drag and drop of files for you.",
+	"homepage": "http://www.dropzonejs.com",
+	"keywords": [
+		"dragndrop",
+		"drag and drop",
+		"file upload",
+		"upload"
+	],
+	"authors": [{
+		"name": "Matias Meno",
+		"email": "m@tias.me",
+		"homepage": "http://www.matiasmeno.com"
+	}],
+	"license": "MIT",
+	"minimum-stability": "dev"
+}
diff --git a/vendor/enyo/dropzone/dist/basic.css b/vendor/enyo/dropzone/dist/basic.css
new file mode 100644
index 0000000000..b72d7deaae
--- /dev/null
+++ b/vendor/enyo/dropzone/dist/basic.css
@@ -0,0 +1,39 @@
+/*
+ * The MIT License
+ * Copyright (c) 2012 Matias Meno <m@tias.me>
+ */
+.dropzone, .dropzone * {
+  box-sizing: border-box; }
+
+.dropzone {
+  position: relative; }
+  .dropzone .dz-preview {
+    position: relative;
+    display: inline-block;
+    width: 120px;
+    margin: 0.5em; }
+    .dropzone .dz-preview .dz-progress {
+      display: block;
+      height: 15px;
+      border: 1px solid #aaa; }
+      .dropzone .dz-preview .dz-progress .dz-upload {
+        display: block;
+        height: 100%;
+        width: 0;
+        background: green; }
+    .dropzone .dz-preview .dz-error-message {
+      color: red;
+      display: none; }
+    .dropzone .dz-preview.dz-error .dz-error-message, .dropzone .dz-preview.dz-error .dz-error-mark {
+      display: block; }
+    .dropzone .dz-preview.dz-success .dz-success-mark {
+      display: block; }
+    .dropzone .dz-preview .dz-error-mark, .dropzone .dz-preview .dz-success-mark {
+      position: absolute;
+      display: none;
+      left: 30px;
+      top: 30px;
+      width: 54px;
+      height: 58px;
+      left: 50%;
+      margin-left: -27px; }
diff --git a/vendor/enyo/dropzone/dist/dropzone-amd-module.js b/vendor/enyo/dropzone/dist/dropzone-amd-module.js
new file mode 100644
index 0000000000..d312c7d9dc
--- /dev/null
+++ b/vendor/enyo/dropzone/dist/dropzone-amd-module.js
@@ -0,0 +1,2067 @@
+// Uses AMD or browser globals to create a jQuery plugin.
+(function (factory) {
+  if (typeof define === 'function' && define.amd) {
+      // AMD. Register as an anonymous module.
+      define(['jquery'], factory);
+  } else {
+      // Browser globals
+      factory(jQuery);
+  }
+} (function (jQuery) {
+    var module = { exports: { } }; // Fake component
+
+
+/*
+ *
+ * More info at [www.dropzonejs.com](http://www.dropzonejs.com)
+ *
+ * Copyright (c) 2012, Matias Meno
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ */
+
+(function() {
+  var Dropzone, Emitter, ExifRestore, camelize, contentLoaded, detectVerticalSquash, drawImageIOSFix, noop, without,
+    slice = [].slice,
+    extend1 = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+    hasProp = {}.hasOwnProperty;
+
+  noop = function() {};
+
+  Emitter = (function() {
+    function Emitter() {}
+
+    Emitter.prototype.addEventListener = Emitter.prototype.on;
+
+    Emitter.prototype.on = function(event, fn) {
+      this._callbacks = this._callbacks || {};
+      if (!this._callbacks[event]) {
+        this._callbacks[event] = [];
+      }
+      this._callbacks[event].push(fn);
+      return this;
+    };
+
+    Emitter.prototype.emit = function() {
+      var args, callback, callbacks, event, j, len;
+      event = arguments[0], args = 2 <= arguments.length ? slice.call(arguments, 1) : [];
+      this._callbacks = this._callbacks || {};
+      callbacks = this._callbacks[event];
+      if (callbacks) {
+        for (j = 0, len = callbacks.length; j < len; j++) {
+          callback = callbacks[j];
+          callback.apply(this, args);
+        }
+      }
+      return this;
+    };
+
+    Emitter.prototype.removeListener = Emitter.prototype.off;
+
+    Emitter.prototype.removeAllListeners = Emitter.prototype.off;
+
+    Emitter.prototype.removeEventListener = Emitter.prototype.off;
+
+    Emitter.prototype.off = function(event, fn) {
+      var callback, callbacks, i, j, len;
+      if (!this._callbacks || arguments.length === 0) {
+        this._callbacks = {};
+        return this;
+      }
+      callbacks = this._callbacks[event];
+      if (!callbacks) {
+        return this;
+      }
+      if (arguments.length === 1) {
+        delete this._callbacks[event];
+        return this;
+      }
+      for (i = j = 0, len = callbacks.length; j < len; i = ++j) {
+        callback = callbacks[i];
+        if (callback === fn) {
+          callbacks.splice(i, 1);
+          break;
+        }
+      }
+      return this;
+    };
+
+    return Emitter;
+
+  })();
+
+  Dropzone = (function(superClass) {
+    var extend, resolveOption;
+
+    extend1(Dropzone, superClass);
+
+    Dropzone.prototype.Emitter = Emitter;
+
+
+    /*
+    This is a list of all available events you can register on a dropzone object.
+    
+    You can register an event handler like this:
+    
+        dropzone.on("dragEnter", function() { });
+     */
+
+    Dropzone.prototype.events = ["drop", "dragstart", "dragend", "dragenter", "dragover", "dragleave", "addedfile", "addedfiles", "removedfile", "thumbnail", "error", "errormultiple", "processing", "processingmultiple", "uploadprogress", "totaluploadprogress", "sending", "sendingmultiple", "success", "successmultiple", "canceled", "canceledmultiple", "complete", "completemultiple", "reset", "maxfilesexceeded", "maxfilesreached", "queuecomplete"];
+
+    Dropzone.prototype.defaultOptions = {
+      url: null,
+      method: "post",
+      withCredentials: false,
+      timeout: 30000,
+      parallelUploads: 2,
+      uploadMultiple: false,
+      maxFilesize: 256,
+      paramName: "file",
+      createImageThumbnails: true,
+      maxThumbnailFilesize: 10,
+      thumbnailWidth: 120,
+      thumbnailHeight: 120,
+      thumbnailMethod: 'crop',
+      resizeWidth: null,
+      resizeHeight: null,
+      resizeMimeType: null,
+      resizeQuality: 0.8,
+      resizeMethod: 'contain',
+      filesizeBase: 1000,
+      maxFiles: null,
+      params: {},
+      headers: null,
+      clickable: true,
+      ignoreHiddenFiles: true,
+      acceptedFiles: null,
+      acceptedMimeTypes: null,
+      autoProcessQueue: true,
+      autoQueue: true,
+      addRemoveLinks: false,
+      previewsContainer: null,
+      hiddenInputContainer: "body",
+      capture: null,
+      renameFilename: null,
+      renameFile: null,
+      forceFallback: false,
+      dictDefaultMessage: "Drop files here to upload",
+      dictFallbackMessage: "Your browser does not support drag'n'drop file uploads.",
+      dictFallbackText: "Please use the fallback form below to upload your files like in the olden days.",
+      dictFileTooBig: "File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.",
+      dictInvalidFileType: "You can't upload files of this type.",
+      dictResponseError: "Server responded with {{statusCode}} code.",
+      dictCancelUpload: "Cancel upload",
+      dictCancelUploadConfirmation: "Are you sure you want to cancel this upload?",
+      dictRemoveFile: "Remove file",
+      dictRemoveFileConfirmation: null,
+      dictMaxFilesExceeded: "You can not upload any more files.",
+      dictFileSizeUnits: {
+        tb: "TB",
+        gb: "GB",
+        mb: "MB",
+        kb: "KB",
+        b: "b"
+      },
+      init: function() {
+        return noop;
+      },
+      accept: function(file, done) {
+        return done();
+      },
+      fallback: function() {
+        var child, j, len, messageElement, ref, span;
+        this.element.className = this.element.className + " dz-browser-not-supported";
+        ref = this.element.getElementsByTagName("div");
+        for (j = 0, len = ref.length; j < len; j++) {
+          child = ref[j];
+          if (/(^| )dz-message($| )/.test(child.className)) {
+            messageElement = child;
+            child.className = "dz-message";
+            continue;
+          }
+        }
+        if (!messageElement) {
+          messageElement = Dropzone.createElement("<div class=\"dz-message\"><span></span></div>");
+          this.element.appendChild(messageElement);
+        }
+        span = messageElement.getElementsByTagName("span")[0];
+        if (span) {
+          if (span.textContent != null) {
+            span.textContent = this.options.dictFallbackMessage;
+          } else if (span.innerText != null) {
+            span.innerText = this.options.dictFallbackMessage;
+          }
+        }
+        return this.element.appendChild(this.getFallbackForm());
+      },
+      resize: function(file, width, height, resizeMethod) {
+        var info, srcRatio, trgRatio;
+        info = {
+          srcX: 0,
+          srcY: 0,
+          srcWidth: file.width,
+          srcHeight: file.height
+        };
+        srcRatio = file.width / file.height;
+        if ((width == null) && (height == null)) {
+          width = info.srcWidth;
+          height = info.srcHeight;
+        } else if (width == null) {
+          width = height * srcRatio;
+        } else if (height == null) {
+          height = width / srcRatio;
+        }
+        width = Math.min(width, info.srcWidth);
+        height = Math.min(height, info.srcHeight);
+        trgRatio = width / height;
+        if (info.srcWidth > width || info.srcHeight > height) {
+          if (resizeMethod === 'crop') {
+            if (srcRatio > trgRatio) {
+              info.srcHeight = file.height;
+              info.srcWidth = info.srcHeight * trgRatio;
+            } else {
+              info.srcWidth = file.width;
+              info.srcHeight = info.srcWidth / trgRatio;
+            }
+          } else if (resizeMethod === 'contain') {
+            if (srcRatio > trgRatio) {
+              height = width / srcRatio;
+            } else {
+              width = height * srcRatio;
+            }
+          } else {
+            throw new Error("Unknown resizeMethod '" + resizeMethod + "'");
+          }
+        }
+        info.srcX = (file.width - info.srcWidth) / 2;
+        info.srcY = (file.height - info.srcHeight) / 2;
+        info.trgWidth = width;
+        info.trgHeight = height;
+        return info;
+      },
+      transformFile: function(file, done) {
+        if ((this.options.resizeWidth || this.options.resizeHeight) && file.type.match(/image.*/)) {
+          return this.resizeImage(file, this.options.resizeWidth, this.options.resizeHeight, this.options.resizeMethod, done);
+        } else {
+          return done(file);
+        }
+      },
+      previewTemplate: "<div class=\"dz-preview dz-file-preview\">\n  <div class=\"dz-image\"><img data-dz-thumbnail /></div>\n  <div class=\"dz-details\">\n    <div class=\"dz-size\"><span data-dz-size></span></div>\n    <div class=\"dz-filename\"><span data-dz-name></span></div>\n  </div>\n  <div class=\"dz-progress\"><span class=\"dz-upload\" data-dz-uploadprogress></span></div>\n  <div class=\"dz-error-message\"><span data-dz-errormessage></span></div>\n  <div class=\"dz-success-mark\">\n    <svg width=\"54px\" height=\"54px\" viewBox=\"0 0 54 54\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:sketch=\"http://www.bohemiancoding.com/sketch/ns\">\n      <title>Check</title>\n      <defs></defs>\n      <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" sketch:type=\"MSPage\">\n        <path d=\"M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\" id=\"Oval-2\" stroke-opacity=\"0.198794158\" stroke=\"#747474\" fill-opacity=\"0.816519475\" fill=\"#FFFFFF\" sketch:type=\"MSShapeGroup\"></path>\n      </g>\n    </svg>\n  </div>\n  <div class=\"dz-error-mark\">\n    <svg width=\"54px\" height=\"54px\" viewBox=\"0 0 54 54\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:sketch=\"http://www.bohemiancoding.com/sketch/ns\">\n      <title>Error</title>\n      <defs></defs>\n      <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" sketch:type=\"MSPage\">\n        <g id=\"Check-+-Oval-2\" sketch:type=\"MSLayerGroup\" stroke=\"#747474\" stroke-opacity=\"0.198794158\" fill=\"#FFFFFF\" fill-opacity=\"0.816519475\">\n          <path d=\"M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\" id=\"Oval-2\" sketch:type=\"MSShapeGroup\"></path>\n        </g>\n      </g>\n    </svg>\n  </div>\n</div>",
+
+      /*
+      Those functions register themselves to the events on init and handle all
+      the user interface specific stuff. Overwriting them won't break the upload
+      but can break the way it's displayed.
+      You can overwrite them if you don't like the default behavior. If you just
+      want to add an additional event handler, register it on the dropzone object
+      and don't overwrite those options.
+       */
+      drop: function(e) {
+        return this.element.classList.remove("dz-drag-hover");
+      },
+      dragstart: noop,
+      dragend: function(e) {
+        return this.element.classList.remove("dz-drag-hover");
+      },
+      dragenter: function(e) {
+        return this.element.classList.add("dz-drag-hover");
+      },
+      dragover: function(e) {
+        return this.element.classList.add("dz-drag-hover");
+      },
+      dragleave: function(e) {
+        return this.element.classList.remove("dz-drag-hover");
+      },
+      paste: noop,
+      reset: function() {
+        return this.element.classList.remove("dz-started");
+      },
+      addedfile: function(file) {
+        var j, k, l, len, len1, len2, node, ref, ref1, ref2, removeFileEvent, removeLink, results;
+        if (this.element === this.previewsContainer) {
+          this.element.classList.add("dz-started");
+        }
+        if (this.previewsContainer) {
+          file.previewElement = Dropzone.createElement(this.options.previewTemplate.trim());
+          file.previewTemplate = file.previewElement;
+          this.previewsContainer.appendChild(file.previewElement);
+          ref = file.previewElement.querySelectorAll("[data-dz-name]");
+          for (j = 0, len = ref.length; j < len; j++) {
+            node = ref[j];
+            node.textContent = file.name;
+          }
+          ref1 = file.previewElement.querySelectorAll("[data-dz-size]");
+          for (k = 0, len1 = ref1.length; k < len1; k++) {
+            node = ref1[k];
+            node.innerHTML = this.filesize(file.size);
+          }
+          if (this.options.addRemoveLinks) {
+            file._removeLink = Dropzone.createElement("<a class=\"dz-remove\" href=\"javascript:undefined;\" data-dz-remove>" + this.options.dictRemoveFile + "</a>");
+            file.previewElement.appendChild(file._removeLink);
+          }
+          removeFileEvent = (function(_this) {
+            return function(e) {
+              e.preventDefault();
+              e.stopPropagation();
+              if (file.status === Dropzone.UPLOADING) {
+                return Dropzone.confirm(_this.options.dictCancelUploadConfirmation, function() {
+                  return _this.removeFile(file);
+                });
+              } else {
+                if (_this.options.dictRemoveFileConfirmation) {
+                  return Dropzone.confirm(_this.options.dictRemoveFileConfirmation, function() {
+                    return _this.removeFile(file);
+                  });
+                } else {
+                  return _this.removeFile(file);
+                }
+              }
+            };
+          })(this);
+          ref2 = file.previewElement.querySelectorAll("[data-dz-remove]");
+          results = [];
+          for (l = 0, len2 = ref2.length; l < len2; l++) {
+            removeLink = ref2[l];
+            results.push(removeLink.addEventListener("click", removeFileEvent));
+          }
+          return results;
+        }
+      },
+      removedfile: function(file) {
+        var ref;
+        if (file.previewElement) {
+          if ((ref = file.previewElement) != null) {
+            ref.parentNode.removeChild(file.previewElement);
+          }
+        }
+        return this._updateMaxFilesReachedClass();
+      },
+      thumbnail: function(file, dataUrl) {
+        var j, len, ref, thumbnailElement;
+        if (file.previewElement) {
+          file.previewElement.classList.remove("dz-file-preview");
+          ref = file.previewElement.querySelectorAll("[data-dz-thumbnail]");
+          for (j = 0, len = ref.length; j < len; j++) {
+            thumbnailElement = ref[j];
+            thumbnailElement.alt = file.name;
+            thumbnailElement.src = dataUrl;
+          }
+          return setTimeout(((function(_this) {
+            return function() {
+              return file.previewElement.classList.add("dz-image-preview");
+            };
+          })(this)), 1);
+        }
+      },
+      error: function(file, message) {
+        var j, len, node, ref, results;
+        if (file.previewElement) {
+          file.previewElement.classList.add("dz-error");
+          if (typeof message !== "String" && message.error) {
+            message = message.error;
+          }
+          ref = file.previewElement.querySelectorAll("[data-dz-errormessage]");
+          results = [];
+          for (j = 0, len = ref.length; j < len; j++) {
+            node = ref[j];
+            results.push(node.textContent = message);
+          }
+          return results;
+        }
+      },
+      errormultiple: noop,
+      processing: function(file) {
+        if (file.previewElement) {
+          file.previewElement.classList.add("dz-processing");
+          if (file._removeLink) {
+            return file._removeLink.textContent = this.options.dictCancelUpload;
+          }
+        }
+      },
+      processingmultiple: noop,
+      uploadprogress: function(file, progress, bytesSent) {
+        var j, len, node, ref, results;
+        if (file.previewElement) {
+          ref = file.previewElement.querySelectorAll("[data-dz-uploadprogress]");
+          results = [];
+          for (j = 0, len = ref.length; j < len; j++) {
+            node = ref[j];
+            if (node.nodeName === 'PROGRESS') {
+              results.push(node.value = progress);
+            } else {
+              results.push(node.style.width = progress + "%");
+            }
+          }
+          return results;
+        }
+      },
+      totaluploadprogress: noop,
+      sending: noop,
+      sendingmultiple: noop,
+      success: function(file) {
+        if (file.previewElement) {
+          return file.previewElement.classList.add("dz-success");
+        }
+      },
+      successmultiple: noop,
+      canceled: function(file) {
+        return this.emit("error", file, "Upload canceled.");
+      },
+      canceledmultiple: noop,
+      complete: function(file) {
+        if (file._removeLink) {
+          file._removeLink.textContent = this.options.dictRemoveFile;
+        }
+        if (file.previewElement) {
+          return file.previewElement.classList.add("dz-complete");
+        }
+      },
+      completemultiple: noop,
+      maxfilesexceeded: noop,
+      maxfilesreached: noop,
+      queuecomplete: noop,
+      addedfiles: noop
+    };
+
+    extend = function() {
+      var j, key, len, object, objects, target, val;
+      target = arguments[0], objects = 2 <= arguments.length ? slice.call(arguments, 1) : [];
+      for (j = 0, len = objects.length; j < len; j++) {
+        object = objects[j];
+        for (key in object) {
+          val = object[key];
+          target[key] = val;
+        }
+      }
+      return target;
+    };
+
+    function Dropzone(element1, options) {
+      var elementOptions, fallback, ref;
+      this.element = element1;
+      this.version = Dropzone.version;
+      this.defaultOptions.previewTemplate = this.defaultOptions.previewTemplate.replace(/\n*/g, "");
+      this.clickableElements = [];
+      this.listeners = [];
+      this.files = [];
+      if (typeof this.element === "string") {
+        this.element = document.querySelector(this.element);
+      }
+      if (!(this.element && (this.element.nodeType != null))) {
+        throw new Error("Invalid dropzone element.");
+      }
+      if (this.element.dropzone) {
+        throw new Error("Dropzone already attached.");
+      }
+      Dropzone.instances.push(this);
+      this.element.dropzone = this;
+      elementOptions = (ref = Dropzone.optionsForElement(this.element)) != null ? ref : {};
+      this.options = extend({}, this.defaultOptions, elementOptions, options != null ? options : {});
+      if (this.options.forceFallback || !Dropzone.isBrowserSupported()) {
+        return this.options.fallback.call(this);
+      }
+      if (this.options.url == null) {
+        this.options.url = this.element.getAttribute("action");
+      }
+      if (!this.options.url) {
+        throw new Error("No URL provided.");
+      }
+      if (this.options.acceptedFiles && this.options.acceptedMimeTypes) {
+        throw new Error("You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.");
+      }
+      if (this.options.acceptedMimeTypes) {
+        this.options.acceptedFiles = this.options.acceptedMimeTypes;
+        delete this.options.acceptedMimeTypes;
+      }
+      if (this.options.renameFilename != null) {
+        this.options.renameFile = (function(_this) {
+          return function(file) {
+            return _this.options.renameFilename.call(_this, file.name, file);
+          };
+        })(this);
+      }
+      this.options.method = this.options.method.toUpperCase();
+      if ((fallback = this.getExistingFallback()) && fallback.parentNode) {
+        fallback.parentNode.removeChild(fallback);
+      }
+      if (this.options.previewsContainer !== false) {
+        if (this.options.previewsContainer) {
+          this.previewsContainer = Dropzone.getElement(this.options.previewsContainer, "previewsContainer");
+        } else {
+          this.previewsContainer = this.element;
+        }
+      }
+      if (this.options.clickable) {
+        if (this.options.clickable === true) {
+          this.clickableElements = [this.element];
+        } else {
+          this.clickableElements = Dropzone.getElements(this.options.clickable, "clickable");
+        }
+      }
+      this.init();
+    }
+
+    Dropzone.prototype.getAcceptedFiles = function() {
+      var file, j, len, ref, results;
+      ref = this.files;
+      results = [];
+      for (j = 0, len = ref.length; j < len; j++) {
+        file = ref[j];
+        if (file.accepted) {
+          results.push(file);
+        }
+      }
+      return results;
+    };
+
+    Dropzone.prototype.getRejectedFiles = function() {
+      var file, j, len, ref, results;
+      ref = this.files;
+      results = [];
+      for (j = 0, len = ref.length; j < len; j++) {
+        file = ref[j];
+        if (!file.accepted) {
+          results.push(file);
+        }
+      }
+      return results;
+    };
+
+    Dropzone.prototype.getFilesWithStatus = function(status) {
+      var file, j, len, ref, results;
+      ref = this.files;
+      results = [];
+      for (j = 0, len = ref.length; j < len; j++) {
+        file = ref[j];
+        if (file.status === status) {
+          results.push(file);
+        }
+      }
+      return results;
+    };
+
+    Dropzone.prototype.getQueuedFiles = function() {
+      return this.getFilesWithStatus(Dropzone.QUEUED);
+    };
+
+    Dropzone.prototype.getUploadingFiles = function() {
+      return this.getFilesWithStatus(Dropzone.UPLOADING);
+    };
+
+    Dropzone.prototype.getAddedFiles = function() {
+      return this.getFilesWithStatus(Dropzone.ADDED);
+    };
+
+    Dropzone.prototype.getActiveFiles = function() {
+      var file, j, len, ref, results;
+      ref = this.files;
+      results = [];
+      for (j = 0, len = ref.length; j < len; j++) {
+        file = ref[j];
+        if (file.status === Dropzone.UPLOADING || file.status === Dropzone.QUEUED) {
+          results.push(file);
+        }
+      }
+      return results;
+    };
+
+    Dropzone.prototype.init = function() {
+      var eventName, j, len, noPropagation, ref, ref1, setupHiddenFileInput;
+      if (this.element.tagName === "form") {
+        this.element.setAttribute("enctype", "multipart/form-data");
+      }
+      if (this.element.classList.contains("dropzone") && !this.element.querySelector(".dz-message")) {
+        this.element.appendChild(Dropzone.createElement("<div class=\"dz-default dz-message\"><span>" + this.options.dictDefaultMessage + "</span></div>"));
+      }
+      if (this.clickableElements.length) {
+        setupHiddenFileInput = (function(_this) {
+          return function() {
+            if (_this.hiddenFileInput) {
+              _this.hiddenFileInput.parentNode.removeChild(_this.hiddenFileInput);
+            }
+            _this.hiddenFileInput = document.createElement("input");
+            _this.hiddenFileInput.setAttribute("type", "file");
+            if ((_this.options.maxFiles == null) || _this.options.maxFiles > 1) {
+              _this.hiddenFileInput.setAttribute("multiple", "multiple");
+            }
+            _this.hiddenFileInput.className = "dz-hidden-input";
+            if (_this.options.acceptedFiles != null) {
+              _this.hiddenFileInput.setAttribute("accept", _this.options.acceptedFiles);
+            }
+            if (_this.options.capture != null) {
+              _this.hiddenFileInput.setAttribute("capture", _this.options.capture);
+            }
+            _this.hiddenFileInput.style.visibility = "hidden";
+            _this.hiddenFileInput.style.position = "absolute";
+            _this.hiddenFileInput.style.top = "0";
+            _this.hiddenFileInput.style.left = "0";
+            _this.hiddenFileInput.style.height = "0";
+            _this.hiddenFileInput.style.width = "0";
+            document.querySelector(_this.options.hiddenInputContainer).appendChild(_this.hiddenFileInput);
+            return _this.hiddenFileInput.addEventListener("change", function() {
+              var file, files, j, len;
+              files = _this.hiddenFileInput.files;
+              if (files.length) {
+                for (j = 0, len = files.length; j < len; j++) {
+                  file = files[j];
+                  _this.addFile(file);
+                }
+              }
+              _this.emit("addedfiles", files);
+              return setupHiddenFileInput();
+            });
+          };
+        })(this);
+        setupHiddenFileInput();
+      }
+      this.URL = (ref = window.URL) != null ? ref : window.webkitURL;
+      ref1 = this.events;
+      for (j = 0, len = ref1.length; j < len; j++) {
+        eventName = ref1[j];
+        this.on(eventName, this.options[eventName]);
+      }
+      this.on("uploadprogress", (function(_this) {
+        return function() {
+          return _this.updateTotalUploadProgress();
+        };
+      })(this));
+      this.on("removedfile", (function(_this) {
+        return function() {
+          return _this.updateTotalUploadProgress();
+        };
+      })(this));
+      this.on("canceled", (function(_this) {
+        return function(file) {
+          return _this.emit("complete", file);
+        };
+      })(this));
+      this.on("complete", (function(_this) {
+        return function(file) {
+          if (_this.getAddedFiles().length === 0 && _this.getUploadingFiles().length === 0 && _this.getQueuedFiles().length === 0) {
+            return setTimeout((function() {
+              return _this.emit("queuecomplete");
+            }), 0);
+          }
+        };
+      })(this));
+      noPropagation = function(e) {
+        e.stopPropagation();
+        if (e.preventDefault) {
+          return e.preventDefault();
+        } else {
+          return e.returnValue = false;
+        }
+      };
+      this.listeners = [
+        {
+          element: this.element,
+          events: {
+            "dragstart": (function(_this) {
+              return function(e) {
+                return _this.emit("dragstart", e);
+              };
+            })(this),
+            "dragenter": (function(_this) {
+              return function(e) {
+                noPropagation(e);
+                return _this.emit("dragenter", e);
+              };
+            })(this),
+            "dragover": (function(_this) {
+              return function(e) {
+                var efct;
+                try {
+                  efct = e.dataTransfer.effectAllowed;
+                } catch (undefined) {}
+                e.dataTransfer.dropEffect = 'move' === efct || 'linkMove' === efct ? 'move' : 'copy';
+                noPropagation(e);
+                return _this.emit("dragover", e);
+              };
+            })(this),
+            "dragleave": (function(_this) {
+              return function(e) {
+                return _this.emit("dragleave", e);
+              };
+            })(this),
+            "drop": (function(_this) {
+              return function(e) {
+                noPropagation(e);
+                return _this.drop(e);
+              };
+            })(this),
+            "dragend": (function(_this) {
+              return function(e) {
+                return _this.emit("dragend", e);
+              };
+            })(this)
+          }
+        }
+      ];
+      this.clickableElements.forEach((function(_this) {
+        return function(clickableElement) {
+          return _this.listeners.push({
+            element: clickableElement,
+            events: {
+              "click": function(evt) {
+                if ((clickableElement !== _this.element) || (evt.target === _this.element || Dropzone.elementInside(evt.target, _this.element.querySelector(".dz-message")))) {
+                  _this.hiddenFileInput.click();
+                }
+                return true;
+              }
+            }
+          });
+        };
+      })(this));
+      this.enable();
+      return this.options.init.call(this);
+    };
+
+    Dropzone.prototype.destroy = function() {
+      var ref;
+      this.disable();
+      this.removeAllFiles(true);
+      if ((ref = this.hiddenFileInput) != null ? ref.parentNode : void 0) {
+        this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput);
+        this.hiddenFileInput = null;
+      }
+      delete this.element.dropzone;
+      return Dropzone.instances.splice(Dropzone.instances.indexOf(this), 1);
+    };
+
+    Dropzone.prototype.updateTotalUploadProgress = function() {
+      var activeFiles, file, j, len, ref, totalBytes, totalBytesSent, totalUploadProgress;
+      totalBytesSent = 0;
+      totalBytes = 0;
+      activeFiles = this.getActiveFiles();
+      if (activeFiles.length) {
+        ref = this.getActiveFiles();
+        for (j = 0, len = ref.length; j < len; j++) {
+          file = ref[j];
+          totalBytesSent += file.upload.bytesSent;
+          totalBytes += file.upload.total;
+        }
+        totalUploadProgress = 100 * totalBytesSent / totalBytes;
+      } else {
+        totalUploadProgress = 100;
+      }
+      return this.emit("totaluploadprogress", totalUploadProgress, totalBytes, totalBytesSent);
+    };
+
+    Dropzone.prototype._getParamName = function(n) {
+      if (typeof this.options.paramName === "function") {
+        return this.options.paramName(n);
+      } else {
+        return "" + this.options.paramName + (this.options.uploadMultiple ? "[" + n + "]" : "");
+      }
+    };
+
+    Dropzone.prototype._renameFile = function(file) {
+      if (typeof this.options.renameFile !== "function") {
+        return file.name;
+      }
+      return this.options.renameFile(file);
+    };
+
+    Dropzone.prototype.getFallbackForm = function() {
+      var existingFallback, fields, fieldsString, form;
+      if (existingFallback = this.getExistingFallback()) {
+        return existingFallback;
+      }
+      fieldsString = "<div class=\"dz-fallback\">";
+      if (this.options.dictFallbackText) {
+        fieldsString += "<p>" + this.options.dictFallbackText + "</p>";
+      }
+      fieldsString += "<input type=\"file\" name=\"" + (this._getParamName(0)) + "\" " + (this.options.uploadMultiple ? 'multiple="multiple"' : void 0) + " /><input type=\"submit\" value=\"Upload!\"></div>";
+      fields = Dropzone.createElement(fieldsString);
+      if (this.element.tagName !== "FORM") {
+        form = Dropzone.createElement("<form action=\"" + this.options.url + "\" enctype=\"multipart/form-data\" method=\"" + this.options.method + "\"></form>");
+        form.appendChild(fields);
+      } else {
+        this.element.setAttribute("enctype", "multipart/form-data");
+        this.element.setAttribute("method", this.options.method);
+      }
+      return form != null ? form : fields;
+    };
+
+    Dropzone.prototype.getExistingFallback = function() {
+      var fallback, getFallback, j, len, ref, tagName;
+      getFallback = function(elements) {
+        var el, j, len;
+        for (j = 0, len = elements.length; j < len; j++) {
+          el = elements[j];
+          if (/(^| )fallback($| )/.test(el.className)) {
+            return el;
+          }
+        }
+      };
+      ref = ["div", "form"];
+      for (j = 0, len = ref.length; j < len; j++) {
+        tagName = ref[j];
+        if (fallback = getFallback(this.element.getElementsByTagName(tagName))) {
+          return fallback;
+        }
+      }
+    };
+
+    Dropzone.prototype.setupEventListeners = function() {
+      var elementListeners, event, j, len, listener, ref, results;
+      ref = this.listeners;
+      results = [];
+      for (j = 0, len = ref.length; j < len; j++) {
+        elementListeners = ref[j];
+        results.push((function() {
+          var ref1, results1;
+          ref1 = elementListeners.events;
+          results1 = [];
+          for (event in ref1) {
+            listener = ref1[event];
+            results1.push(elementListeners.element.addEventListener(event, listener, false));
+          }
+          return results1;
+        })());
+      }
+      return results;
+    };
+
+    Dropzone.prototype.removeEventListeners = function() {
+      var elementListeners, event, j, len, listener, ref, results;
+      ref = this.listeners;
+      results = [];
+      for (j = 0, len = ref.length; j < len; j++) {
+        elementListeners = ref[j];
+        results.push((function() {
+          var ref1, results1;
+          ref1 = elementListeners.events;
+          results1 = [];
+          for (event in ref1) {
+            listener = ref1[event];
+            results1.push(elementListeners.element.removeEventListener(event, listener, false));
+          }
+          return results1;
+        })());
+      }
+      return results;
+    };
+
+    Dropzone.prototype.disable = function() {
+      var file, j, len, ref, results;
+      this.clickableElements.forEach(function(element) {
+        return element.classList.remove("dz-clickable");
+      });
+      this.removeEventListeners();
+      ref = this.files;
+      results = [];
+      for (j = 0, len = ref.length; j < len; j++) {
+        file = ref[j];
+        results.push(this.cancelUpload(file));
+      }
+      return results;
+    };
+
+    Dropzone.prototype.enable = function() {
+      this.clickableElements.forEach(function(element) {
+        return element.classList.add("dz-clickable");
+      });
+      return this.setupEventListeners();
+    };
+
+    Dropzone.prototype.filesize = function(size) {
+      var cutoff, i, j, len, selectedSize, selectedUnit, unit, units;
+      selectedSize = 0;
+      selectedUnit = "b";
+      if (size > 0) {
+        units = ['tb', 'gb', 'mb', 'kb', 'b'];
+        for (i = j = 0, len = units.length; j < len; i = ++j) {
+          unit = units[i];
+          cutoff = Math.pow(this.options.filesizeBase, 4 - i) / 10;
+          if (size >= cutoff) {
+            selectedSize = size / Math.pow(this.options.filesizeBase, 4 - i);
+            selectedUnit = unit;
+            break;
+          }
+        }
+        selectedSize = Math.round(10 * selectedSize) / 10;
+      }
+      return "<strong>" + selectedSize + "</strong> " + this.options.dictFileSizeUnits[selectedUnit];
+    };
+
+    Dropzone.prototype._updateMaxFilesReachedClass = function() {
+      if ((this.options.maxFiles != null) && this.getAcceptedFiles().length >= this.options.maxFiles) {
+        if (this.getAcceptedFiles().length === this.options.maxFiles) {
+          this.emit('maxfilesreached', this.files);
+        }
+        return this.element.classList.add("dz-max-files-reached");
+      } else {
+        return this.element.classList.remove("dz-max-files-reached");
+      }
+    };
+
+    Dropzone.prototype.drop = function(e) {
+      var files, items;
+      if (!e.dataTransfer) {
+        return;
+      }
+      this.emit("drop", e);
+      files = e.dataTransfer.files;
+      this.emit("addedfiles", files);
+      if (files.length) {
+        items = e.dataTransfer.items;
+        if (items && items.length && (items[0].webkitGetAsEntry != null)) {
+          this._addFilesFromItems(items);
+        } else {
+          this.handleFiles(files);
+        }
+      }
+    };
+
+    Dropzone.prototype.paste = function(e) {
+      var items, ref;
+      if ((e != null ? (ref = e.clipboardData) != null ? ref.items : void 0 : void 0) == null) {
+        return;
+      }
+      this.emit("paste", e);
+      items = e.clipboardData.items;
+      if (items.length) {
+        return this._addFilesFromItems(items);
+      }
+    };
+
+    Dropzone.prototype.handleFiles = function(files) {
+      var file, j, len, results;
+      results = [];
+      for (j = 0, len = files.length; j < len; j++) {
+        file = files[j];
+        results.push(this.addFile(file));
+      }
+      return results;
+    };
+
+    Dropzone.prototype._addFilesFromItems = function(items) {
+      var entry, item, j, len, results;
+      results = [];
+      for (j = 0, len = items.length; j < len; j++) {
+        item = items[j];
+        if ((item.webkitGetAsEntry != null) && (entry = item.webkitGetAsEntry())) {
+          if (entry.isFile) {
+            results.push(this.addFile(item.getAsFile()));
+          } else if (entry.isDirectory) {
+            results.push(this._addFilesFromDirectory(entry, entry.name));
+          } else {
+            results.push(void 0);
+          }
+        } else if (item.getAsFile != null) {
+          if ((item.kind == null) || item.kind === "file") {
+            results.push(this.addFile(item.getAsFile()));
+          } else {
+            results.push(void 0);
+          }
+        } else {
+          results.push(void 0);
+        }
+      }
+      return results;
+    };
+
+    Dropzone.prototype._addFilesFromDirectory = function(directory, path) {
+      var dirReader, errorHandler, readEntries;
+      dirReader = directory.createReader();
+      errorHandler = function(error) {
+        return typeof console !== "undefined" && console !== null ? typeof console.log === "function" ? console.log(error) : void 0 : void 0;
+      };
+      readEntries = (function(_this) {
+        return function() {
+          return dirReader.readEntries(function(entries) {
+            var entry, j, len;
+            if (entries.length > 0) {
+              for (j = 0, len = entries.length; j < len; j++) {
+                entry = entries[j];
+                if (entry.isFile) {
+                  entry.file(function(file) {
+                    if (_this.options.ignoreHiddenFiles && file.name.substring(0, 1) === '.') {
+                      return;
+                    }
+                    file.fullPath = path + "/" + file.name;
+                    return _this.addFile(file);
+                  });
+                } else if (entry.isDirectory) {
+                  _this._addFilesFromDirectory(entry, path + "/" + entry.name);
+                }
+              }
+              readEntries();
+            }
+            return null;
+          }, errorHandler);
+        };
+      })(this);
+      return readEntries();
+    };
+
+    Dropzone.prototype.accept = function(file, done) {
+      if (file.size > this.options.maxFilesize * 1024 * 1024) {
+        return done(this.options.dictFileTooBig.replace("{{filesize}}", Math.round(file.size / 1024 / 10.24) / 100).replace("{{maxFilesize}}", this.options.maxFilesize));
+      } else if (!Dropzone.isValidFile(file, this.options.acceptedFiles)) {
+        return done(this.options.dictInvalidFileType);
+      } else if ((this.options.maxFiles != null) && this.getAcceptedFiles().length >= this.options.maxFiles) {
+        done(this.options.dictMaxFilesExceeded.replace("{{maxFiles}}", this.options.maxFiles));
+        return this.emit("maxfilesexceeded", file);
+      } else {
+        return this.options.accept.call(this, file, done);
+      }
+    };
+
+    Dropzone.prototype.addFile = function(file) {
+      file.upload = {
+        progress: 0,
+        total: file.size,
+        bytesSent: 0,
+        filename: this._renameFile(file)
+      };
+      this.files.push(file);
+      file.status = Dropzone.ADDED;
+      this.emit("addedfile", file);
+      this._enqueueThumbnail(file);
+      return this.accept(file, (function(_this) {
+        return function(error) {
+          if (error) {
+            file.accepted = false;
+            _this._errorProcessing([file], error);
+          } else {
+            file.accepted = true;
+            if (_this.options.autoQueue) {
+              _this.enqueueFile(file);
+            }
+          }
+          return _this._updateMaxFilesReachedClass();
+        };
+      })(this));
+    };
+
+    Dropzone.prototype.enqueueFiles = function(files) {
+      var file, j, len;
+      for (j = 0, len = files.length; j < len; j++) {
+        file = files[j];
+        this.enqueueFile(file);
+      }
+      return null;
+    };
+
+    Dropzone.prototype.enqueueFile = function(file) {
+      if (file.status === Dropzone.ADDED && file.accepted === true) {
+        file.status = Dropzone.QUEUED;
+        if (this.options.autoProcessQueue) {
+          return setTimeout(((function(_this) {
+            return function() {
+              return _this.processQueue();
+            };
+          })(this)), 0);
+        }
+      } else {
+        throw new Error("This file can't be queued because it has already been processed or was rejected.");
+      }
+    };
+
+    Dropzone.prototype._thumbnailQueue = [];
+
+    Dropzone.prototype._processingThumbnail = false;
+
+    Dropzone.prototype._enqueueThumbnail = function(file) {
+      if (this.options.createImageThumbnails && file.type.match(/image.*/) && file.size <= this.options.maxThumbnailFilesize * 1024 * 1024) {
+        this._thumbnailQueue.push(file);
+        return setTimeout(((function(_this) {
+          return function() {
+            return _this._processThumbnailQueue();
+          };
+        })(this)), 0);
+      }
+    };
+
+    Dropzone.prototype._processThumbnailQueue = function() {
+      var file;
+      if (this._processingThumbnail || this._thumbnailQueue.length === 0) {
+        return;
+      }
+      this._processingThumbnail = true;
+      file = this._thumbnailQueue.shift();
+      return this.createThumbnail(file, this.options.thumbnailWidth, this.options.thumbnailHeight, this.options.thumbnailMethod, true, (function(_this) {
+        return function(dataUrl) {
+          _this.emit("thumbnail", file, dataUrl);
+          _this._processingThumbnail = false;
+          return _this._processThumbnailQueue();
+        };
+      })(this));
+    };
+
+    Dropzone.prototype.removeFile = function(file) {
+      if (file.status === Dropzone.UPLOADING) {
+        this.cancelUpload(file);
+      }
+      this.files = without(this.files, file);
+      this.emit("removedfile", file);
+      if (this.files.length === 0) {
+        return this.emit("reset");
+      }
+    };
+
+    Dropzone.prototype.removeAllFiles = function(cancelIfNecessary) {
+      var file, j, len, ref;
+      if (cancelIfNecessary == null) {
+        cancelIfNecessary = false;
+      }
+      ref = this.files.slice();
+      for (j = 0, len = ref.length; j < len; j++) {
+        file = ref[j];
+        if (file.status !== Dropzone.UPLOADING || cancelIfNecessary) {
+          this.removeFile(file);
+        }
+      }
+      return null;
+    };
+
+    Dropzone.prototype.resizeImage = function(file, width, height, resizeMethod, callback) {
+      return this.createThumbnail(file, width, height, resizeMethod, false, (function(_this) {
+        return function(dataUrl, canvas) {
+          var resizeMimeType, resizedDataURL;
+          if (canvas === null) {
+            return callback(file);
+          } else {
+            resizeMimeType = _this.options.resizeMimeType;
+            if (resizeMimeType == null) {
+              resizeMimeType = file.type;
+            }
+            resizedDataURL = canvas.toDataURL(resizeMimeType, _this.options.resizeQuality);
+            if (resizeMimeType === 'image/jpeg' || resizeMimeType === 'image/jpg') {
+              resizedDataURL = ExifRestore.restore(file.dataURL, resizedDataURL);
+            }
+            return callback(Dropzone.dataURItoBlob(resizedDataURL));
+          }
+        };
+      })(this));
+    };
+
+    Dropzone.prototype.createThumbnail = function(file, width, height, resizeMethod, fixOrientation, callback) {
+      var fileReader;
+      fileReader = new FileReader;
+      fileReader.onload = (function(_this) {
+        return function() {
+          file.dataURL = fileReader.result;
+          if (file.type === "image/svg+xml") {
+            if (callback != null) {
+              callback(fileReader.result);
+            }
+            return;
+          }
+          return _this.createThumbnailFromUrl(file, width, height, resizeMethod, fixOrientation, callback);
+        };
+      })(this);
+      return fileReader.readAsDataURL(file);
+    };
+
+    Dropzone.prototype.createThumbnailFromUrl = function(file, width, height, resizeMethod, fixOrientation, callback, crossOrigin) {
+      var img;
+      img = document.createElement("img");
+      if (crossOrigin) {
+        img.crossOrigin = crossOrigin;
+      }
+      img.onload = (function(_this) {
+        return function() {
+          var loadExif;
+          loadExif = function(callback) {
+            return callback(1);
+          };
+          if ((typeof EXIF !== "undefined" && EXIF !== null) && fixOrientation) {
+            loadExif = function(callback) {
+              return EXIF.getData(img, function() {
+                return callback(EXIF.getTag(this, 'Orientation'));
+              });
+            };
+          }
+          return loadExif(function(orientation) {
+            var canvas, ctx, ref, ref1, ref2, ref3, resizeInfo, thumbnail;
+            file.width = img.width;
+            file.height = img.height;
+            resizeInfo = _this.options.resize.call(_this, file, width, height, resizeMethod);
+            canvas = document.createElement("canvas");
+            ctx = canvas.getContext("2d");
+            canvas.width = resizeInfo.trgWidth;
+            canvas.height = resizeInfo.trgHeight;
+            if (orientation > 4) {
+              canvas.width = resizeInfo.trgHeight;
+              canvas.height = resizeInfo.trgWidth;
+            }
+            switch (orientation) {
+              case 2:
+                ctx.translate(canvas.width, 0);
+                ctx.scale(-1, 1);
+                break;
+              case 3:
+                ctx.translate(canvas.width, canvas.height);
+                ctx.rotate(Math.PI);
+                break;
+              case 4:
+                ctx.translate(0, canvas.height);
+                ctx.scale(1, -1);
+                break;
+              case 5:
+                ctx.rotate(0.5 * Math.PI);
+                ctx.scale(1, -1);
+                break;
+              case 6:
+                ctx.rotate(0.5 * Math.PI);
+                ctx.translate(0, -canvas.height);
+                break;
+              case 7:
+                ctx.rotate(0.5 * Math.PI);
+                ctx.translate(canvas.width, -canvas.height);
+                ctx.scale(-1, 1);
+                break;
+              case 8:
+                ctx.rotate(-0.5 * Math.PI);
+                ctx.translate(-canvas.width, 0);
+            }
+            drawImageIOSFix(ctx, img, (ref = resizeInfo.srcX) != null ? ref : 0, (ref1 = resizeInfo.srcY) != null ? ref1 : 0, resizeInfo.srcWidth, resizeInfo.srcHeight, (ref2 = resizeInfo.trgX) != null ? ref2 : 0, (ref3 = resizeInfo.trgY) != null ? ref3 : 0, resizeInfo.trgWidth, resizeInfo.trgHeight);
+            thumbnail = canvas.toDataURL("image/png");
+            if (callback != null) {
+              return callback(thumbnail, canvas);
+            }
+          });
+        };
+      })(this);
+      if (callback != null) {
+        img.onerror = callback;
+      }
+      return img.src = file.dataURL;
+    };
+
+    Dropzone.prototype.processQueue = function() {
+      var i, parallelUploads, processingLength, queuedFiles;
+      parallelUploads = this.options.parallelUploads;
+      processingLength = this.getUploadingFiles().length;
+      i = processingLength;
+      if (processingLength >= parallelUploads) {
+        return;
+      }
+      queuedFiles = this.getQueuedFiles();
+      if (!(queuedFiles.length > 0)) {
+        return;
+      }
+      if (this.options.uploadMultiple) {
+        return this.processFiles(queuedFiles.slice(0, parallelUploads - processingLength));
+      } else {
+        while (i < parallelUploads) {
+          if (!queuedFiles.length) {
+            return;
+          }
+          this.processFile(queuedFiles.shift());
+          i++;
+        }
+      }
+    };
+
+    Dropzone.prototype.processFile = function(file) {
+      return this.processFiles([file]);
+    };
+
+    Dropzone.prototype.processFiles = function(files) {
+      var file, j, len;
+      for (j = 0, len = files.length; j < len; j++) {
+        file = files[j];
+        file.processing = true;
+        file.status = Dropzone.UPLOADING;
+        this.emit("processing", file);
+      }
+      if (this.options.uploadMultiple) {
+        this.emit("processingmultiple", files);
+      }
+      return this.uploadFiles(files);
+    };
+
+    Dropzone.prototype._getFilesWithXhr = function(xhr) {
+      var file, files;
+      return files = (function() {
+        var j, len, ref, results;
+        ref = this.files;
+        results = [];
+        for (j = 0, len = ref.length; j < len; j++) {
+          file = ref[j];
+          if (file.xhr === xhr) {
+            results.push(file);
+          }
+        }
+        return results;
+      }).call(this);
+    };
+
+    Dropzone.prototype.cancelUpload = function(file) {
+      var groupedFile, groupedFiles, j, k, len, len1, ref;
+      if (file.status === Dropzone.UPLOADING) {
+        groupedFiles = this._getFilesWithXhr(file.xhr);
+        for (j = 0, len = groupedFiles.length; j < len; j++) {
+          groupedFile = groupedFiles[j];
+          groupedFile.status = Dropzone.CANCELED;
+        }
+        file.xhr.abort();
+        for (k = 0, len1 = groupedFiles.length; k < len1; k++) {
+          groupedFile = groupedFiles[k];
+          this.emit("canceled", groupedFile);
+        }
+        if (this.options.uploadMultiple) {
+          this.emit("canceledmultiple", groupedFiles);
+        }
+      } else if ((ref = file.status) === Dropzone.ADDED || ref === Dropzone.QUEUED) {
+        file.status = Dropzone.CANCELED;
+        this.emit("canceled", file);
+        if (this.options.uploadMultiple) {
+          this.emit("canceledmultiple", [file]);
+        }
+      }
+      if (this.options.autoProcessQueue) {
+        return this.processQueue();
+      }
+    };
+
+    resolveOption = function() {
+      var args, option;
+      option = arguments[0], args = 2 <= arguments.length ? slice.call(arguments, 1) : [];
+      if (typeof option === 'function') {
+        return option.apply(this, args);
+      }
+      return option;
+    };
+
+    Dropzone.prototype.uploadFile = function(file) {
+      return this.uploadFiles([file]);
+    };
+
+    Dropzone.prototype.uploadFiles = function(files) {
+      var doneCounter, doneFunction, file, formData, handleError, headerName, headerValue, headers, i, input, inputName, inputType, j, k, key, l, len, len1, len2, len3, m, method, o, option, progressObj, ref, ref1, ref2, ref3, ref4, ref5, response, results, updateProgress, url, value, xhr;
+      xhr = new XMLHttpRequest();
+      for (j = 0, len = files.length; j < len; j++) {
+        file = files[j];
+        file.xhr = xhr;
+      }
+      method = resolveOption(this.options.method, files);
+      url = resolveOption(this.options.url, files);
+      xhr.open(method, url, true);
+      xhr.timeout = resolveOption(this.options.timeout, files);
+      xhr.withCredentials = !!this.options.withCredentials;
+      response = null;
+      handleError = (function(_this) {
+        return function() {
+          var k, len1, results;
+          results = [];
+          for (k = 0, len1 = files.length; k < len1; k++) {
+            file = files[k];
+            results.push(_this._errorProcessing(files, response || _this.options.dictResponseError.replace("{{statusCode}}", xhr.status), xhr));
+          }
+          return results;
+        };
+      })(this);
+      updateProgress = (function(_this) {
+        return function(e) {
+          var allFilesFinished, k, l, len1, len2, len3, m, progress, results;
+          if (e != null) {
+            progress = 100 * e.loaded / e.total;
+            for (k = 0, len1 = files.length; k < len1; k++) {
+              file = files[k];
+              file.upload.progress = progress;
+              file.upload.total = e.total;
+              file.upload.bytesSent = e.loaded;
+            }
+          } else {
+            allFilesFinished = true;
+            progress = 100;
+            for (l = 0, len2 = files.length; l < len2; l++) {
+              file = files[l];
+              if (!(file.upload.progress === 100 && file.upload.bytesSent === file.upload.total)) {
+                allFilesFinished = false;
+              }
+              file.upload.progress = progress;
+              file.upload.bytesSent = file.upload.total;
+            }
+            if (allFilesFinished) {
+              return;
+            }
+          }
+          results = [];
+          for (m = 0, len3 = files.length; m < len3; m++) {
+            file = files[m];
+            results.push(_this.emit("uploadprogress", file, progress, file.upload.bytesSent));
+          }
+          return results;
+        };
+      })(this);
+      xhr.onload = (function(_this) {
+        return function(e) {
+          var error1, ref;
+          if (files[0].status === Dropzone.CANCELED) {
+            return;
+          }
+          if (xhr.readyState !== 4) {
+            return;
+          }
+          if (xhr.responseType !== 'arraybuffer' && xhr.responseType !== 'blob') {
+            response = xhr.responseText;
+            if (xhr.getResponseHeader("content-type") && ~xhr.getResponseHeader("content-type").indexOf("application/json")) {
+              try {
+                response = JSON.parse(response);
+              } catch (error1) {
+                e = error1;
+                response = "Invalid JSON response from server.";
+              }
+            }
+          }
+          updateProgress();
+          if (!((200 <= (ref = xhr.status) && ref < 300))) {
+            return handleError();
+          } else {
+            return _this._finished(files, response, e);
+          }
+        };
+      })(this);
+      xhr.onerror = (function(_this) {
+        return function() {
+          if (files[0].status === Dropzone.CANCELED) {
+            return;
+          }
+          return handleError();
+        };
+      })(this);
+      progressObj = (ref = xhr.upload) != null ? ref : xhr;
+      progressObj.onprogress = updateProgress;
+      headers = {
+        "Accept": "application/json",
+        "Cache-Control": "no-cache",
+        "X-Requested-With": "XMLHttpRequest"
+      };
+      if (this.options.headers) {
+        extend(headers, this.options.headers);
+      }
+      for (headerName in headers) {
+        headerValue = headers[headerName];
+        if (headerValue) {
+          xhr.setRequestHeader(headerName, headerValue);
+        }
+      }
+      formData = new FormData();
+      if (this.options.params) {
+        ref1 = this.options.params;
+        for (key in ref1) {
+          value = ref1[key];
+          formData.append(key, value);
+        }
+      }
+      for (k = 0, len1 = files.length; k < len1; k++) {
+        file = files[k];
+        this.emit("sending", file, xhr, formData);
+      }
+      if (this.options.uploadMultiple) {
+        this.emit("sendingmultiple", files, xhr, formData);
+      }
+      if (this.element.tagName === "FORM") {
+        ref2 = this.element.querySelectorAll("input, textarea, select, button");
+        for (l = 0, len2 = ref2.length; l < len2; l++) {
+          input = ref2[l];
+          inputName = input.getAttribute("name");
+          inputType = input.getAttribute("type");
+          if (input.tagName === "SELECT" && input.hasAttribute("multiple")) {
+            ref3 = input.options;
+            for (m = 0, len3 = ref3.length; m < len3; m++) {
+              option = ref3[m];
+              if (option.selected) {
+                formData.append(inputName, option.value);
+              }
+            }
+          } else if (!inputType || ((ref4 = inputType.toLowerCase()) !== "checkbox" && ref4 !== "radio") || input.checked) {
+            formData.append(inputName, input.value);
+          }
+        }
+      }
+      doneCounter = 0;
+      results = [];
+      for (i = o = 0, ref5 = files.length - 1; 0 <= ref5 ? o <= ref5 : o >= ref5; i = 0 <= ref5 ? ++o : --o) {
+        doneFunction = (function(_this) {
+          return function(file, paramName, fileName) {
+            return function(transformedFile) {
+              formData.append(paramName, transformedFile, fileName);
+              if (++doneCounter === files.length) {
+                return _this.submitRequest(xhr, formData, files);
+              }
+            };
+          };
+        })(this);
+        results.push(this.options.transformFile.call(this, files[i], doneFunction(files[i], this._getParamName(i), files[i].upload.filename)));
+      }
+      return results;
+    };
+
+    Dropzone.prototype.submitRequest = function(xhr, formData, files) {
+      return xhr.send(formData);
+    };
+
+    Dropzone.prototype._finished = function(files, responseText, e) {
+      var file, j, len;
+      for (j = 0, len = files.length; j < len; j++) {
+        file = files[j];
+        file.status = Dropzone.SUCCESS;
+        this.emit("success", file, responseText, e);
+        this.emit("complete", file);
+      }
+      if (this.options.uploadMultiple) {
+        this.emit("successmultiple", files, responseText, e);
+        this.emit("completemultiple", files);
+      }
+      if (this.options.autoProcessQueue) {
+        return this.processQueue();
+      }
+    };
+
+    Dropzone.prototype._errorProcessing = function(files, message, xhr) {
+      var file, j, len;
+      for (j = 0, len = files.length; j < len; j++) {
+        file = files[j];
+        file.status = Dropzone.ERROR;
+        this.emit("error", file, message, xhr);
+        this.emit("complete", file);
+      }
+      if (this.options.uploadMultiple) {
+        this.emit("errormultiple", files, message, xhr);
+        this.emit("completemultiple", files);
+      }
+      if (this.options.autoProcessQueue) {
+        return this.processQueue();
+      }
+    };
+
+    return Dropzone;
+
+  })(Emitter);
+
+  Dropzone.version = "5.1.1";
+
+  Dropzone.options = {};
+
+  Dropzone.optionsForElement = function(element) {
+    if (element.getAttribute("id")) {
+      return Dropzone.options[camelize(element.getAttribute("id"))];
+    } else {
+      return void 0;
+    }
+  };
+
+  Dropzone.instances = [];
+
+  Dropzone.forElement = function(element) {
+    if (typeof element === "string") {
+      element = document.querySelector(element);
+    }
+    if ((element != null ? element.dropzone : void 0) == null) {
+      throw new Error("No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.");
+    }
+    return element.dropzone;
+  };
+
+  Dropzone.autoDiscover = true;
+
+  Dropzone.discover = function() {
+    var checkElements, dropzone, dropzones, j, len, results;
+    if (document.querySelectorAll) {
+      dropzones = document.querySelectorAll(".dropzone");
+    } else {
+      dropzones = [];
+      checkElements = function(elements) {
+        var el, j, len, results;
+        results = [];
+        for (j = 0, len = elements.length; j < len; j++) {
+          el = elements[j];
+          if (/(^| )dropzone($| )/.test(el.className)) {
+            results.push(dropzones.push(el));
+          } else {
+            results.push(void 0);
+          }
+        }
+        return results;
+      };
+      checkElements(document.getElementsByTagName("div"));
+      checkElements(document.getElementsByTagName("form"));
+    }
+    results = [];
+    for (j = 0, len = dropzones.length; j < len; j++) {
+      dropzone = dropzones[j];
+      if (Dropzone.optionsForElement(dropzone) !== false) {
+        results.push(new Dropzone(dropzone));
+      } else {
+        results.push(void 0);
+      }
+    }
+    return results;
+  };
+
+  Dropzone.blacklistedBrowsers = [/opera.*Macintosh.*version\/12/i];
+
+  Dropzone.isBrowserSupported = function() {
+    var capableBrowser, j, len, ref, regex;
+    capableBrowser = true;
+    if (window.File && window.FileReader && window.FileList && window.Blob && window.FormData && document.querySelector) {
+      if (!("classList" in document.createElement("a"))) {
+        capableBrowser = false;
+      } else {
+        ref = Dropzone.blacklistedBrowsers;
+        for (j = 0, len = ref.length; j < len; j++) {
+          regex = ref[j];
+          if (regex.test(navigator.userAgent)) {
+            capableBrowser = false;
+            continue;
+          }
+        }
+      }
+    } else {
+      capableBrowser = false;
+    }
+    return capableBrowser;
+  };
+
+  Dropzone.dataURItoBlob = function(dataURI) {
+    var ab, byteString, i, ia, j, mimeString, ref;
+    byteString = atob(dataURI.split(',')[1]);
+    mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
+    ab = new ArrayBuffer(byteString.length);
+    ia = new Uint8Array(ab);
+    for (i = j = 0, ref = byteString.length; 0 <= ref ? j <= ref : j >= ref; i = 0 <= ref ? ++j : --j) {
+      ia[i] = byteString.charCodeAt(i);
+    }
+    return new Blob([ab], {
+      type: mimeString
+    });
+  };
+
+  without = function(list, rejectedItem) {
+    var item, j, len, results;
+    results = [];
+    for (j = 0, len = list.length; j < len; j++) {
+      item = list[j];
+      if (item !== rejectedItem) {
+        results.push(item);
+      }
+    }
+    return results;
+  };
+
+  camelize = function(str) {
+    return str.replace(/[\-_](\w)/g, function(match) {
+      return match.charAt(1).toUpperCase();
+    });
+  };
+
+  Dropzone.createElement = function(string) {
+    var div;
+    div = document.createElement("div");
+    div.innerHTML = string;
+    return div.childNodes[0];
+  };
+
+  Dropzone.elementInside = function(element, container) {
+    if (element === container) {
+      return true;
+    }
+    while (element = element.parentNode) {
+      if (element === container) {
+        return true;
+      }
+    }
+    return false;
+  };
+
+  Dropzone.getElement = function(el, name) {
+    var element;
+    if (typeof el === "string") {
+      element = document.querySelector(el);
+    } else if (el.nodeType != null) {
+      element = el;
+    }
+    if (element == null) {
+      throw new Error("Invalid `" + name + "` option provided. Please provide a CSS selector or a plain HTML element.");
+    }
+    return element;
+  };
+
+  Dropzone.getElements = function(els, name) {
+    var e, el, elements, error1, j, k, len, len1, ref;
+    if (els instanceof Array) {
+      elements = [];
+      try {
+        for (j = 0, len = els.length; j < len; j++) {
+          el = els[j];
+          elements.push(this.getElement(el, name));
+        }
+      } catch (error1) {
+        e = error1;
+        elements = null;
+      }
+    } else if (typeof els === "string") {
+      elements = [];
+      ref = document.querySelectorAll(els);
+      for (k = 0, len1 = ref.length; k < len1; k++) {
+        el = ref[k];
+        elements.push(el);
+      }
+    } else if (els.nodeType != null) {
+      elements = [els];
+    }
+    if (!((elements != null) && elements.length)) {
+      throw new Error("Invalid `" + name + "` option provided. Please provide a CSS selector, a plain HTML element or a list of those.");
+    }
+    return elements;
+  };
+
+  Dropzone.confirm = function(question, accepted, rejected) {
+    if (window.confirm(question)) {
+      return accepted();
+    } else if (rejected != null) {
+      return rejected();
+    }
+  };
+
+  Dropzone.isValidFile = function(file, acceptedFiles) {
+    var baseMimeType, j, len, mimeType, validType;
+    if (!acceptedFiles) {
+      return true;
+    }
+    acceptedFiles = acceptedFiles.split(",");
+    mimeType = file.type;
+    baseMimeType = mimeType.replace(/\/.*$/, "");
+    for (j = 0, len = acceptedFiles.length; j < len; j++) {
+      validType = acceptedFiles[j];
+      validType = validType.trim();
+      if (validType.charAt(0) === ".") {
+        if (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1) {
+          return true;
+        }
+      } else if (/\/\*$/.test(validType)) {
+        if (baseMimeType === validType.replace(/\/.*$/, "")) {
+          return true;
+        }
+      } else {
+        if (mimeType === validType) {
+          return true;
+        }
+      }
+    }
+    return false;
+  };
+
+  if (typeof jQuery !== "undefined" && jQuery !== null) {
+    jQuery.fn.dropzone = function(options) {
+      return this.each(function() {
+        return new Dropzone(this, options);
+      });
+    };
+  }
+
+  if (typeof module !== "undefined" && module !== null) {
+    module.exports = Dropzone;
+  } else {
+    window.Dropzone = Dropzone;
+  }
+
+  Dropzone.ADDED = "added";
+
+  Dropzone.QUEUED = "queued";
+
+  Dropzone.ACCEPTED = Dropzone.QUEUED;
+
+  Dropzone.UPLOADING = "uploading";
+
+  Dropzone.PROCESSING = Dropzone.UPLOADING;
+
+  Dropzone.CANCELED = "canceled";
+
+  Dropzone.ERROR = "error";
+
+  Dropzone.SUCCESS = "success";
+
+
+  /*
+  
+  Bugfix for iOS 6 and 7
+  Source: http://stackoverflow.com/questions/11929099/html5-canvas-drawimage-ratio-bug-ios
+  based on the work of https://github.com/stomita/ios-imagefile-megapixel
+   */
+
+  detectVerticalSquash = function(img) {
+    var alpha, canvas, ctx, data, ey, ih, iw, py, ratio, sy;
+    iw = img.naturalWidth;
+    ih = img.naturalHeight;
+    canvas = document.createElement("canvas");
+    canvas.width = 1;
+    canvas.height = ih;
+    ctx = canvas.getContext("2d");
+    ctx.drawImage(img, 0, 0);
+    data = ctx.getImageData(1, 0, 1, ih).data;
+    sy = 0;
+    ey = ih;
+    py = ih;
+    while (py > sy) {
+      alpha = data[(py - 1) * 4 + 3];
+      if (alpha === 0) {
+        ey = py;
+      } else {
+        sy = py;
+      }
+      py = (ey + sy) >> 1;
+    }
+    ratio = py / ih;
+    if (ratio === 0) {
+      return 1;
+    } else {
+      return ratio;
+    }
+  };
+
+  drawImageIOSFix = function(ctx, img, sx, sy, sw, sh, dx, dy, dw, dh) {
+    var vertSquashRatio;
+    vertSquashRatio = detectVerticalSquash(img);
+    return ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh / vertSquashRatio);
+  };
+
+  ExifRestore = (function() {
+    function ExifRestore() {}
+
+    ExifRestore.KEY_STR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
+
+    ExifRestore.encode64 = function(input) {
+      var chr1, chr2, chr3, enc1, enc2, enc3, enc4, i, output;
+      output = '';
+      chr1 = void 0;
+      chr2 = void 0;
+      chr3 = '';
+      enc1 = void 0;
+      enc2 = void 0;
+      enc3 = void 0;
+      enc4 = '';
+      i = 0;
+      while (true) {
+        chr1 = input[i++];
+        chr2 = input[i++];
+        chr3 = input[i++];
+        enc1 = chr1 >> 2;
+        enc2 = (chr1 & 3) << 4 | chr2 >> 4;
+        enc3 = (chr2 & 15) << 2 | chr3 >> 6;
+        enc4 = chr3 & 63;
+        if (isNaN(chr2)) {
+          enc3 = enc4 = 64;
+        } else if (isNaN(chr3)) {
+          enc4 = 64;
+        }
+        output = output + this.KEY_STR.charAt(enc1) + this.KEY_STR.charAt(enc2) + this.KEY_STR.charAt(enc3) + this.KEY_STR.charAt(enc4);
+        chr1 = chr2 = chr3 = '';
+        enc1 = enc2 = enc3 = enc4 = '';
+        if (!(i < input.length)) {
+          break;
+        }
+      }
+      return output;
+    };
+
+    ExifRestore.restore = function(origFileBase64, resizedFileBase64) {
+      var image, rawImage, segments;
+      if (!origFileBase64.match('data:image/jpeg;base64,')) {
+        return resizedFileBase64;
+      }
+      rawImage = this.decode64(origFileBase64.replace('data:image/jpeg;base64,', ''));
+      segments = this.slice2Segments(rawImage);
+      image = this.exifManipulation(resizedFileBase64, segments);
+      return 'data:image/jpeg;base64,' + this.encode64(image);
+    };
+
+    ExifRestore.exifManipulation = function(resizedFileBase64, segments) {
+      var aBuffer, exifArray, newImageArray;
+      exifArray = this.getExifArray(segments);
+      newImageArray = this.insertExif(resizedFileBase64, exifArray);
+      aBuffer = new Uint8Array(newImageArray);
+      return aBuffer;
+    };
+
+    ExifRestore.getExifArray = function(segments) {
+      var seg, x;
+      seg = void 0;
+      x = 0;
+      while (x < segments.length) {
+        seg = segments[x];
+        if (seg[0] === 255 & seg[1] === 225) {
+          return seg;
+        }
+        x++;
+      }
+      return [];
+    };
+
+    ExifRestore.insertExif = function(resizedFileBase64, exifArray) {
+      var array, ato, buf, imageData, mae, separatePoint;
+      imageData = resizedFileBase64.replace('data:image/jpeg;base64,', '');
+      buf = this.decode64(imageData);
+      separatePoint = buf.indexOf(255, 3);
+      mae = buf.slice(0, separatePoint);
+      ato = buf.slice(separatePoint);
+      array = mae;
+      array = array.concat(exifArray);
+      array = array.concat(ato);
+      return array;
+    };
+
+    ExifRestore.slice2Segments = function(rawImageArray) {
+      var endPoint, head, length, seg, segments;
+      head = 0;
+      segments = [];
+      while (true) {
+        if (rawImageArray[head] === 255 & rawImageArray[head + 1] === 218) {
+          break;
+        }
+        if (rawImageArray[head] === 255 & rawImageArray[head + 1] === 216) {
+          head += 2;
+        } else {
+          length = rawImageArray[head + 2] * 256 + rawImageArray[head + 3];
+          endPoint = head + length + 2;
+          seg = rawImageArray.slice(head, endPoint);
+          segments.push(seg);
+          head = endPoint;
+        }
+        if (head > rawImageArray.length) {
+          break;
+        }
+      }
+      return segments;
+    };
+
+    ExifRestore.decode64 = function(input) {
+      var base64test, buf, chr1, chr2, chr3, enc1, enc2, enc3, enc4, i, output;
+      output = '';
+      chr1 = void 0;
+      chr2 = void 0;
+      chr3 = '';
+      enc1 = void 0;
+      enc2 = void 0;
+      enc3 = void 0;
+      enc4 = '';
+      i = 0;
+      buf = [];
+      base64test = /[^A-Za-z0-9\+\/\=]/g;
+      if (base64test.exec(input)) {
+        console.warning('There were invalid base64 characters in the input text.\n' + 'Valid base64 characters are A-Z, a-z, 0-9, \'+\', \'/\',and \'=\'\n' + 'Expect errors in decoding.');
+      }
+      input = input.replace(/[^A-Za-z0-9\+\/\=]/g, '');
+      while (true) {
+        enc1 = this.KEY_STR.indexOf(input.charAt(i++));
+        enc2 = this.KEY_STR.indexOf(input.charAt(i++));
+        enc3 = this.KEY_STR.indexOf(input.charAt(i++));
+        enc4 = this.KEY_STR.indexOf(input.charAt(i++));
+        chr1 = enc1 << 2 | enc2 >> 4;
+        chr2 = (enc2 & 15) << 4 | enc3 >> 2;
+        chr3 = (enc3 & 3) << 6 | enc4;
+        buf.push(chr1);
+        if (enc3 !== 64) {
+          buf.push(chr2);
+        }
+        if (enc4 !== 64) {
+          buf.push(chr3);
+        }
+        chr1 = chr2 = chr3 = '';
+        enc1 = enc2 = enc3 = enc4 = '';
+        if (!(i < input.length)) {
+          break;
+        }
+      }
+      return buf;
+    };
+
+    return ExifRestore;
+
+  })();
+
+
+  /*
+   * contentloaded.js
+   *
+   * Author: Diego Perini (diego.perini at gmail.com)
+   * Summary: cross-browser wrapper for DOMContentLoaded
+   * Updated: 20101020
+   * License: MIT
+   * Version: 1.2
+   *
+   * URL:
+   * http://javascript.nwbox.com/ContentLoaded/
+   * http://javascript.nwbox.com/ContentLoaded/MIT-LICENSE
+   */
+
+  contentLoaded = function(win, fn) {
+    var add, doc, done, init, poll, pre, rem, root, top;
+    done = false;
+    top = true;
+    doc = win.document;
+    root = doc.documentElement;
+    add = (doc.addEventListener ? "addEventListener" : "attachEvent");
+    rem = (doc.addEventListener ? "removeEventListener" : "detachEvent");
+    pre = (doc.addEventListener ? "" : "on");
+    init = function(e) {
+      if (e.type === "readystatechange" && doc.readyState !== "complete") {
+        return;
+      }
+      (e.type === "load" ? win : doc)[rem](pre + e.type, init, false);
+      if (!done && (done = true)) {
+        return fn.call(win, e.type || e);
+      }
+    };
+    poll = function() {
+      var e, error1;
+      try {
+        root.doScroll("left");
+      } catch (error1) {
+        e = error1;
+        setTimeout(poll, 50);
+        return;
+      }
+      return init("poll");
+    };
+    if (doc.readyState !== "complete") {
+      if (doc.createEventObject && root.doScroll) {
+        try {
+          top = !win.frameElement;
+        } catch (undefined) {}
+        if (top) {
+          poll();
+        }
+      }
+      doc[add](pre + "DOMContentLoaded", init, false);
+      doc[add](pre + "readystatechange", init, false);
+      return win[add](pre + "load", init, false);
+    }
+  };
+
+  Dropzone._autoDiscoverFunction = function() {
+    if (Dropzone.autoDiscover) {
+      return Dropzone.discover();
+    }
+  };
+
+  contentLoaded(window, Dropzone._autoDiscoverFunction);
+
+}).call(this);
+
+    return module.exports;
+}));
\ No newline at end of file
diff --git a/vendor/enyo/dropzone/dist/dropzone.css b/vendor/enyo/dropzone/dist/dropzone.css
new file mode 100644
index 0000000000..0494d1ccf4
--- /dev/null
+++ b/vendor/enyo/dropzone/dist/dropzone.css
@@ -0,0 +1,388 @@
+/*
+ * The MIT License
+ * Copyright (c) 2012 Matias Meno <m@tias.me>
+ */
+@-webkit-keyframes passing-through {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(40px);
+    -moz-transform: translateY(40px);
+    -ms-transform: translateY(40px);
+    -o-transform: translateY(40px);
+    transform: translateY(40px); }
+  30%, 70% {
+    opacity: 1;
+    -webkit-transform: translateY(0px);
+    -moz-transform: translateY(0px);
+    -ms-transform: translateY(0px);
+    -o-transform: translateY(0px);
+    transform: translateY(0px); }
+  100% {
+    opacity: 0;
+    -webkit-transform: translateY(-40px);
+    -moz-transform: translateY(-40px);
+    -ms-transform: translateY(-40px);
+    -o-transform: translateY(-40px);
+    transform: translateY(-40px); } }
+@-moz-keyframes passing-through {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(40px);
+    -moz-transform: translateY(40px);
+    -ms-transform: translateY(40px);
+    -o-transform: translateY(40px);
+    transform: translateY(40px); }
+  30%, 70% {
+    opacity: 1;
+    -webkit-transform: translateY(0px);
+    -moz-transform: translateY(0px);
+    -ms-transform: translateY(0px);
+    -o-transform: translateY(0px);
+    transform: translateY(0px); }
+  100% {
+    opacity: 0;
+    -webkit-transform: translateY(-40px);
+    -moz-transform: translateY(-40px);
+    -ms-transform: translateY(-40px);
+    -o-transform: translateY(-40px);
+    transform: translateY(-40px); } }
+@keyframes passing-through {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(40px);
+    -moz-transform: translateY(40px);
+    -ms-transform: translateY(40px);
+    -o-transform: translateY(40px);
+    transform: translateY(40px); }
+  30%, 70% {
+    opacity: 1;
+    -webkit-transform: translateY(0px);
+    -moz-transform: translateY(0px);
+    -ms-transform: translateY(0px);
+    -o-transform: translateY(0px);
+    transform: translateY(0px); }
+  100% {
+    opacity: 0;
+    -webkit-transform: translateY(-40px);
+    -moz-transform: translateY(-40px);
+    -ms-transform: translateY(-40px);
+    -o-transform: translateY(-40px);
+    transform: translateY(-40px); } }
+@-webkit-keyframes slide-in {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(40px);
+    -moz-transform: translateY(40px);
+    -ms-transform: translateY(40px);
+    -o-transform: translateY(40px);
+    transform: translateY(40px); }
+  30% {
+    opacity: 1;
+    -webkit-transform: translateY(0px);
+    -moz-transform: translateY(0px);
+    -ms-transform: translateY(0px);
+    -o-transform: translateY(0px);
+    transform: translateY(0px); } }
+@-moz-keyframes slide-in {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(40px);
+    -moz-transform: translateY(40px);
+    -ms-transform: translateY(40px);
+    -o-transform: translateY(40px);
+    transform: translateY(40px); }
+  30% {
+    opacity: 1;
+    -webkit-transform: translateY(0px);
+    -moz-transform: translateY(0px);
+    -ms-transform: translateY(0px);
+    -o-transform: translateY(0px);
+    transform: translateY(0px); } }
+@keyframes slide-in {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(40px);
+    -moz-transform: translateY(40px);
+    -ms-transform: translateY(40px);
+    -o-transform: translateY(40px);
+    transform: translateY(40px); }
+  30% {
+    opacity: 1;
+    -webkit-transform: translateY(0px);
+    -moz-transform: translateY(0px);
+    -ms-transform: translateY(0px);
+    -o-transform: translateY(0px);
+    transform: translateY(0px); } }
+@-webkit-keyframes pulse {
+  0% {
+    -webkit-transform: scale(1);
+    -moz-transform: scale(1);
+    -ms-transform: scale(1);
+    -o-transform: scale(1);
+    transform: scale(1); }
+  10% {
+    -webkit-transform: scale(1.1);
+    -moz-transform: scale(1.1);
+    -ms-transform: scale(1.1);
+    -o-transform: scale(1.1);
+    transform: scale(1.1); }
+  20% {
+    -webkit-transform: scale(1);
+    -moz-transform: scale(1);
+    -ms-transform: scale(1);
+    -o-transform: scale(1);
+    transform: scale(1); } }
+@-moz-keyframes pulse {
+  0% {
+    -webkit-transform: scale(1);
+    -moz-transform: scale(1);
+    -ms-transform: scale(1);
+    -o-transform: scale(1);
+    transform: scale(1); }
+  10% {
+    -webkit-transform: scale(1.1);
+    -moz-transform: scale(1.1);
+    -ms-transform: scale(1.1);
+    -o-transform: scale(1.1);
+    transform: scale(1.1); }
+  20% {
+    -webkit-transform: scale(1);
+    -moz-transform: scale(1);
+    -ms-transform: scale(1);
+    -o-transform: scale(1);
+    transform: scale(1); } }
+@keyframes pulse {
+  0% {
+    -webkit-transform: scale(1);
+    -moz-transform: scale(1);
+    -ms-transform: scale(1);
+    -o-transform: scale(1);
+    transform: scale(1); }
+  10% {
+    -webkit-transform: scale(1.1);
+    -moz-transform: scale(1.1);
+    -ms-transform: scale(1.1);
+    -o-transform: scale(1.1);
+    transform: scale(1.1); }
+  20% {
+    -webkit-transform: scale(1);
+    -moz-transform: scale(1);
+    -ms-transform: scale(1);
+    -o-transform: scale(1);
+    transform: scale(1); } }
+.dropzone, .dropzone * {
+  box-sizing: border-box; }
+
+.dropzone {
+  min-height: 150px;
+  border: 2px solid rgba(0, 0, 0, 0.3);
+  background: white;
+  padding: 20px 20px; }
+  .dropzone.dz-clickable {
+    cursor: pointer; }
+    .dropzone.dz-clickable * {
+      cursor: default; }
+    .dropzone.dz-clickable .dz-message, .dropzone.dz-clickable .dz-message * {
+      cursor: pointer; }
+  .dropzone.dz-started .dz-message {
+    display: none; }
+  .dropzone.dz-drag-hover {
+    border-style: solid; }
+    .dropzone.dz-drag-hover .dz-message {
+      opacity: 0.5; }
+  .dropzone .dz-message {
+    text-align: center;
+    margin: 2em 0; }
+  .dropzone .dz-preview {
+    position: relative;
+    display: inline-block;
+    vertical-align: top;
+    margin: 16px;
+    min-height: 100px; }
+    .dropzone .dz-preview:hover {
+      z-index: 1000; }
+      .dropzone .dz-preview:hover .dz-details {
+        opacity: 1; }
+    .dropzone .dz-preview.dz-file-preview .dz-image {
+      border-radius: 20px;
+      background: #999;
+      background: linear-gradient(to bottom, #eee, #ddd); }
+    .dropzone .dz-preview.dz-file-preview .dz-details {
+      opacity: 1; }
+    .dropzone .dz-preview.dz-image-preview {
+      background: white; }
+      .dropzone .dz-preview.dz-image-preview .dz-details {
+        -webkit-transition: opacity 0.2s linear;
+        -moz-transition: opacity 0.2s linear;
+        -ms-transition: opacity 0.2s linear;
+        -o-transition: opacity 0.2s linear;
+        transition: opacity 0.2s linear; }
+    .dropzone .dz-preview .dz-remove {
+      font-size: 14px;
+      text-align: center;
+      display: block;
+      cursor: pointer;
+      border: none; }
+      .dropzone .dz-preview .dz-remove:hover {
+        text-decoration: underline; }
+    .dropzone .dz-preview:hover .dz-details {
+      opacity: 1; }
+    .dropzone .dz-preview .dz-details {
+      z-index: 20;
+      position: absolute;
+      top: 0;
+      left: 0;
+      opacity: 0;
+      font-size: 13px;
+      min-width: 100%;
+      max-width: 100%;
+      padding: 2em 1em;
+      text-align: center;
+      color: rgba(0, 0, 0, 0.9);
+      line-height: 150%; }
+      .dropzone .dz-preview .dz-details .dz-size {
+        margin-bottom: 1em;
+        font-size: 16px; }
+      .dropzone .dz-preview .dz-details .dz-filename {
+        white-space: nowrap; }
+        .dropzone .dz-preview .dz-details .dz-filename:hover span {
+          border: 1px solid rgba(200, 200, 200, 0.8);
+          background-color: rgba(255, 255, 255, 0.8); }
+        .dropzone .dz-preview .dz-details .dz-filename:not(:hover) {
+          overflow: hidden;
+          text-overflow: ellipsis; }
+          .dropzone .dz-preview .dz-details .dz-filename:not(:hover) span {
+            border: 1px solid transparent; }
+      .dropzone .dz-preview .dz-details .dz-filename span, .dropzone .dz-preview .dz-details .dz-size span {
+        background-color: rgba(255, 255, 255, 0.4);
+        padding: 0 0.4em;
+        border-radius: 3px; }
+    .dropzone .dz-preview:hover .dz-image img {
+      -webkit-transform: scale(1.05, 1.05);
+      -moz-transform: scale(1.05, 1.05);
+      -ms-transform: scale(1.05, 1.05);
+      -o-transform: scale(1.05, 1.05);
+      transform: scale(1.05, 1.05);
+      -webkit-filter: blur(8px);
+      filter: blur(8px); }
+    .dropzone .dz-preview .dz-image {
+      border-radius: 20px;
+      overflow: hidden;
+      width: 120px;
+      height: 120px;
+      position: relative;
+      display: block;
+      z-index: 10; }
+      .dropzone .dz-preview .dz-image img {
+        display: block; }
+    .dropzone .dz-preview.dz-success .dz-success-mark {
+      -webkit-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
+      -moz-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
+      -ms-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
+      -o-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
+      animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); }
+    .dropzone .dz-preview.dz-error .dz-error-mark {
+      opacity: 1;
+      -webkit-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
+      -moz-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
+      -ms-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
+      -o-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
+      animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); }
+    .dropzone .dz-preview .dz-success-mark, .dropzone .dz-preview .dz-error-mark {
+      pointer-events: none;
+      opacity: 0;
+      z-index: 500;
+      position: absolute;
+      display: block;
+      top: 50%;
+      left: 50%;
+      margin-left: -27px;
+      margin-top: -27px; }
+      .dropzone .dz-preview .dz-success-mark svg, .dropzone .dz-preview .dz-error-mark svg {
+        display: block;
+        width: 54px;
+        height: 54px; }
+    .dropzone .dz-preview.dz-processing .dz-progress {
+      opacity: 1;
+      -webkit-transition: all 0.2s linear;
+      -moz-transition: all 0.2s linear;
+      -ms-transition: all 0.2s linear;
+      -o-transition: all 0.2s linear;
+      transition: all 0.2s linear; }
+    .dropzone .dz-preview.dz-complete .dz-progress {
+      opacity: 0;
+      -webkit-transition: opacity 0.4s ease-in;
+      -moz-transition: opacity 0.4s ease-in;
+      -ms-transition: opacity 0.4s ease-in;
+      -o-transition: opacity 0.4s ease-in;
+      transition: opacity 0.4s ease-in; }
+    .dropzone .dz-preview:not(.dz-processing) .dz-progress {
+      -webkit-animation: pulse 6s ease infinite;
+      -moz-animation: pulse 6s ease infinite;
+      -ms-animation: pulse 6s ease infinite;
+      -o-animation: pulse 6s ease infinite;
+      animation: pulse 6s ease infinite; }
+    .dropzone .dz-preview .dz-progress {
+      opacity: 1;
+      z-index: 1000;
+      pointer-events: none;
+      position: absolute;
+      height: 16px;
+      left: 50%;
+      top: 50%;
+      margin-top: -8px;
+      width: 80px;
+      margin-left: -40px;
+      background: rgba(255, 255, 255, 0.9);
+      -webkit-transform: scale(1);
+      border-radius: 8px;
+      overflow: hidden; }
+      .dropzone .dz-preview .dz-progress .dz-upload {
+        background: #333;
+        background: linear-gradient(to bottom, #666, #444);
+        position: absolute;
+        top: 0;
+        left: 0;
+        bottom: 0;
+        width: 0;
+        -webkit-transition: width 300ms ease-in-out;
+        -moz-transition: width 300ms ease-in-out;
+        -ms-transition: width 300ms ease-in-out;
+        -o-transition: width 300ms ease-in-out;
+        transition: width 300ms ease-in-out; }
+    .dropzone .dz-preview.dz-error .dz-error-message {
+      display: block; }
+    .dropzone .dz-preview.dz-error:hover .dz-error-message {
+      opacity: 1;
+      pointer-events: auto; }
+    .dropzone .dz-preview .dz-error-message {
+      pointer-events: none;
+      z-index: 1000;
+      position: absolute;
+      display: block;
+      display: none;
+      opacity: 0;
+      -webkit-transition: opacity 0.3s ease;
+      -moz-transition: opacity 0.3s ease;
+      -ms-transition: opacity 0.3s ease;
+      -o-transition: opacity 0.3s ease;
+      transition: opacity 0.3s ease;
+      border-radius: 8px;
+      font-size: 13px;
+      top: 130px;
+      left: -10px;
+      width: 140px;
+      background: #be2626;
+      background: linear-gradient(to bottom, #be2626, #a92222);
+      padding: 0.5em 1.2em;
+      color: white; }
+      .dropzone .dz-preview .dz-error-message:after {
+        content: '';
+        position: absolute;
+        top: -6px;
+        left: 64px;
+        width: 0;
+        height: 0;
+        border-left: 6px solid transparent;
+        border-right: 6px solid transparent;
+        border-bottom: 6px solid #be2626; }
diff --git a/vendor/enyo/dropzone/dist/dropzone.js b/vendor/enyo/dropzone/dist/dropzone.js
new file mode 100644
index 0000000000..1bf9a7fe47
--- /dev/null
+++ b/vendor/enyo/dropzone/dist/dropzone.js
@@ -0,0 +1,2052 @@
+
+/*
+ *
+ * More info at [www.dropzonejs.com](http://www.dropzonejs.com)
+ *
+ * Copyright (c) 2012, Matias Meno
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ */
+
+(function() {
+  var Dropzone, Emitter, ExifRestore, camelize, contentLoaded, detectVerticalSquash, drawImageIOSFix, noop, without,
+    slice = [].slice,
+    extend1 = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+    hasProp = {}.hasOwnProperty;
+
+  noop = function() {};
+
+  Emitter = (function() {
+    function Emitter() {}
+
+    Emitter.prototype.addEventListener = Emitter.prototype.on;
+
+    Emitter.prototype.on = function(event, fn) {
+      this._callbacks = this._callbacks || {};
+      if (!this._callbacks[event]) {
+        this._callbacks[event] = [];
+      }
+      this._callbacks[event].push(fn);
+      return this;
+    };
+
+    Emitter.prototype.emit = function() {
+      var args, callback, callbacks, event, j, len;
+      event = arguments[0], args = 2 <= arguments.length ? slice.call(arguments, 1) : [];
+      this._callbacks = this._callbacks || {};
+      callbacks = this._callbacks[event];
+      if (callbacks) {
+        for (j = 0, len = callbacks.length; j < len; j++) {
+          callback = callbacks[j];
+          callback.apply(this, args);
+        }
+      }
+      return this;
+    };
+
+    Emitter.prototype.removeListener = Emitter.prototype.off;
+
+    Emitter.prototype.removeAllListeners = Emitter.prototype.off;
+
+    Emitter.prototype.removeEventListener = Emitter.prototype.off;
+
+    Emitter.prototype.off = function(event, fn) {
+      var callback, callbacks, i, j, len;
+      if (!this._callbacks || arguments.length === 0) {
+        this._callbacks = {};
+        return this;
+      }
+      callbacks = this._callbacks[event];
+      if (!callbacks) {
+        return this;
+      }
+      if (arguments.length === 1) {
+        delete this._callbacks[event];
+        return this;
+      }
+      for (i = j = 0, len = callbacks.length; j < len; i = ++j) {
+        callback = callbacks[i];
+        if (callback === fn) {
+          callbacks.splice(i, 1);
+          break;
+        }
+      }
+      return this;
+    };
+
+    return Emitter;
+
+  })();
+
+  Dropzone = (function(superClass) {
+    var extend, resolveOption;
+
+    extend1(Dropzone, superClass);
+
+    Dropzone.prototype.Emitter = Emitter;
+
+
+    /*
+    This is a list of all available events you can register on a dropzone object.
+    
+    You can register an event handler like this:
+    
+        dropzone.on("dragEnter", function() { });
+     */
+
+    Dropzone.prototype.events = ["drop", "dragstart", "dragend", "dragenter", "dragover", "dragleave", "addedfile", "addedfiles", "removedfile", "thumbnail", "error", "errormultiple", "processing", "processingmultiple", "uploadprogress", "totaluploadprogress", "sending", "sendingmultiple", "success", "successmultiple", "canceled", "canceledmultiple", "complete", "completemultiple", "reset", "maxfilesexceeded", "maxfilesreached", "queuecomplete"];
+
+    Dropzone.prototype.defaultOptions = {
+      url: null,
+      method: "post",
+      withCredentials: false,
+      timeout: 30000,
+      parallelUploads: 2,
+      uploadMultiple: false,
+      maxFilesize: 256,
+      paramName: "file",
+      createImageThumbnails: true,
+      maxThumbnailFilesize: 10,
+      thumbnailWidth: 120,
+      thumbnailHeight: 120,
+      thumbnailMethod: 'crop',
+      resizeWidth: null,
+      resizeHeight: null,
+      resizeMimeType: null,
+      resizeQuality: 0.8,
+      resizeMethod: 'contain',
+      filesizeBase: 1000,
+      maxFiles: null,
+      params: {},
+      headers: null,
+      clickable: true,
+      ignoreHiddenFiles: true,
+      acceptedFiles: null,
+      acceptedMimeTypes: null,
+      autoProcessQueue: true,
+      autoQueue: true,
+      addRemoveLinks: false,
+      previewsContainer: null,
+      hiddenInputContainer: "body",
+      capture: null,
+      renameFilename: null,
+      renameFile: null,
+      forceFallback: false,
+      dictDefaultMessage: "Drop files here to upload",
+      dictFallbackMessage: "Your browser does not support drag'n'drop file uploads.",
+      dictFallbackText: "Please use the fallback form below to upload your files like in the olden days.",
+      dictFileTooBig: "File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.",
+      dictInvalidFileType: "You can't upload files of this type.",
+      dictResponseError: "Server responded with {{statusCode}} code.",
+      dictCancelUpload: "Cancel upload",
+      dictCancelUploadConfirmation: "Are you sure you want to cancel this upload?",
+      dictRemoveFile: "Remove file",
+      dictRemoveFileConfirmation: null,
+      dictMaxFilesExceeded: "You can not upload any more files.",
+      dictFileSizeUnits: {
+        tb: "TB",
+        gb: "GB",
+        mb: "MB",
+        kb: "KB",
+        b: "b"
+      },
+      init: function() {
+        return noop;
+      },
+      accept: function(file, done) {
+        return done();
+      },
+      fallback: function() {
+        var child, j, len, messageElement, ref, span;
+        this.element.className = this.element.className + " dz-browser-not-supported";
+        ref = this.element.getElementsByTagName("div");
+        for (j = 0, len = ref.length; j < len; j++) {
+          child = ref[j];
+          if (/(^| )dz-message($| )/.test(child.className)) {
+            messageElement = child;
+            child.className = "dz-message";
+            continue;
+          }
+        }
+        if (!messageElement) {
+          messageElement = Dropzone.createElement("<div class=\"dz-message\"><span></span></div>");
+          this.element.appendChild(messageElement);
+        }
+        span = messageElement.getElementsByTagName("span")[0];
+        if (span) {
+          if (span.textContent != null) {
+            span.textContent = this.options.dictFallbackMessage;
+          } else if (span.innerText != null) {
+            span.innerText = this.options.dictFallbackMessage;
+          }
+        }
+        return this.element.appendChild(this.getFallbackForm());
+      },
+      resize: function(file, width, height, resizeMethod) {
+        var info, srcRatio, trgRatio;
+        info = {
+          srcX: 0,
+          srcY: 0,
+          srcWidth: file.width,
+          srcHeight: file.height
+        };
+        srcRatio = file.width / file.height;
+        if ((width == null) && (height == null)) {
+          width = info.srcWidth;
+          height = info.srcHeight;
+        } else if (width == null) {
+          width = height * srcRatio;
+        } else if (height == null) {
+          height = width / srcRatio;
+        }
+        width = Math.min(width, info.srcWidth);
+        height = Math.min(height, info.srcHeight);
+        trgRatio = width / height;
+        if (info.srcWidth > width || info.srcHeight > height) {
+          if (resizeMethod === 'crop') {
+            if (srcRatio > trgRatio) {
+              info.srcHeight = file.height;
+              info.srcWidth = info.srcHeight * trgRatio;
+            } else {
+              info.srcWidth = file.width;
+              info.srcHeight = info.srcWidth / trgRatio;
+            }
+          } else if (resizeMethod === 'contain') {
+            if (srcRatio > trgRatio) {
+              height = width / srcRatio;
+            } else {
+              width = height * srcRatio;
+            }
+          } else {
+            throw new Error("Unknown resizeMethod '" + resizeMethod + "'");
+          }
+        }
+        info.srcX = (file.width - info.srcWidth) / 2;
+        info.srcY = (file.height - info.srcHeight) / 2;
+        info.trgWidth = width;
+        info.trgHeight = height;
+        return info;
+      },
+      transformFile: function(file, done) {
+        if ((this.options.resizeWidth || this.options.resizeHeight) && file.type.match(/image.*/)) {
+          return this.resizeImage(file, this.options.resizeWidth, this.options.resizeHeight, this.options.resizeMethod, done);
+        } else {
+          return done(file);
+        }
+      },
+      previewTemplate: "<div class=\"dz-preview dz-file-preview\">\n  <div class=\"dz-image\"><img data-dz-thumbnail /></div>\n  <div class=\"dz-details\">\n    <div class=\"dz-size\"><span data-dz-size></span></div>\n    <div class=\"dz-filename\"><span data-dz-name></span></div>\n  </div>\n  <div class=\"dz-progress\"><span class=\"dz-upload\" data-dz-uploadprogress></span></div>\n  <div class=\"dz-error-message\"><span data-dz-errormessage></span></div>\n  <div class=\"dz-success-mark\">\n    <svg width=\"54px\" height=\"54px\" viewBox=\"0 0 54 54\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:sketch=\"http://www.bohemiancoding.com/sketch/ns\">\n      <title>Check</title>\n      <defs></defs>\n      <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" sketch:type=\"MSPage\">\n        <path d=\"M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\" id=\"Oval-2\" stroke-opacity=\"0.198794158\" stroke=\"#747474\" fill-opacity=\"0.816519475\" fill=\"#FFFFFF\" sketch:type=\"MSShapeGroup\"></path>\n      </g>\n    </svg>\n  </div>\n  <div class=\"dz-error-mark\">\n    <svg width=\"54px\" height=\"54px\" viewBox=\"0 0 54 54\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:sketch=\"http://www.bohemiancoding.com/sketch/ns\">\n      <title>Error</title>\n      <defs></defs>\n      <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" sketch:type=\"MSPage\">\n        <g id=\"Check-+-Oval-2\" sketch:type=\"MSLayerGroup\" stroke=\"#747474\" stroke-opacity=\"0.198794158\" fill=\"#FFFFFF\" fill-opacity=\"0.816519475\">\n          <path d=\"M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\" id=\"Oval-2\" sketch:type=\"MSShapeGroup\"></path>\n        </g>\n      </g>\n    </svg>\n  </div>\n</div>",
+
+      /*
+      Those functions register themselves to the events on init and handle all
+      the user interface specific stuff. Overwriting them won't break the upload
+      but can break the way it's displayed.
+      You can overwrite them if you don't like the default behavior. If you just
+      want to add an additional event handler, register it on the dropzone object
+      and don't overwrite those options.
+       */
+      drop: function(e) {
+        return this.element.classList.remove("dz-drag-hover");
+      },
+      dragstart: noop,
+      dragend: function(e) {
+        return this.element.classList.remove("dz-drag-hover");
+      },
+      dragenter: function(e) {
+        return this.element.classList.add("dz-drag-hover");
+      },
+      dragover: function(e) {
+        return this.element.classList.add("dz-drag-hover");
+      },
+      dragleave: function(e) {
+        return this.element.classList.remove("dz-drag-hover");
+      },
+      paste: noop,
+      reset: function() {
+        return this.element.classList.remove("dz-started");
+      },
+      addedfile: function(file) {
+        var j, k, l, len, len1, len2, node, ref, ref1, ref2, removeFileEvent, removeLink, results;
+        if (this.element === this.previewsContainer) {
+          this.element.classList.add("dz-started");
+        }
+        if (this.previewsContainer) {
+          file.previewElement = Dropzone.createElement(this.options.previewTemplate.trim());
+          file.previewTemplate = file.previewElement;
+          this.previewsContainer.appendChild(file.previewElement);
+          ref = file.previewElement.querySelectorAll("[data-dz-name]");
+          for (j = 0, len = ref.length; j < len; j++) {
+            node = ref[j];
+            node.textContent = file.name;
+          }
+          ref1 = file.previewElement.querySelectorAll("[data-dz-size]");
+          for (k = 0, len1 = ref1.length; k < len1; k++) {
+            node = ref1[k];
+            node.innerHTML = this.filesize(file.size);
+          }
+          if (this.options.addRemoveLinks) {
+            file._removeLink = Dropzone.createElement("<a class=\"dz-remove\" href=\"javascript:undefined;\" data-dz-remove>" + this.options.dictRemoveFile + "</a>");
+            file.previewElement.appendChild(file._removeLink);
+          }
+          removeFileEvent = (function(_this) {
+            return function(e) {
+              e.preventDefault();
+              e.stopPropagation();
+              if (file.status === Dropzone.UPLOADING) {
+                return Dropzone.confirm(_this.options.dictCancelUploadConfirmation, function() {
+                  return _this.removeFile(file);
+                });
+              } else {
+                if (_this.options.dictRemoveFileConfirmation) {
+                  return Dropzone.confirm(_this.options.dictRemoveFileConfirmation, function() {
+                    return _this.removeFile(file);
+                  });
+                } else {
+                  return _this.removeFile(file);
+                }
+              }
+            };
+          })(this);
+          ref2 = file.previewElement.querySelectorAll("[data-dz-remove]");
+          results = [];
+          for (l = 0, len2 = ref2.length; l < len2; l++) {
+            removeLink = ref2[l];
+            results.push(removeLink.addEventListener("click", removeFileEvent));
+          }
+          return results;
+        }
+      },
+      removedfile: function(file) {
+        var ref;
+        if (file.previewElement) {
+          if ((ref = file.previewElement) != null) {
+            ref.parentNode.removeChild(file.previewElement);
+          }
+        }
+        return this._updateMaxFilesReachedClass();
+      },
+      thumbnail: function(file, dataUrl) {
+        var j, len, ref, thumbnailElement;
+        if (file.previewElement) {
+          file.previewElement.classList.remove("dz-file-preview");
+          ref = file.previewElement.querySelectorAll("[data-dz-thumbnail]");
+          for (j = 0, len = ref.length; j < len; j++) {
+            thumbnailElement = ref[j];
+            thumbnailElement.alt = file.name;
+            thumbnailElement.src = dataUrl;
+          }
+          return setTimeout(((function(_this) {
+            return function() {
+              return file.previewElement.classList.add("dz-image-preview");
+            };
+          })(this)), 1);
+        }
+      },
+      error: function(file, message) {
+        var j, len, node, ref, results;
+        if (file.previewElement) {
+          file.previewElement.classList.add("dz-error");
+          if (typeof message !== "String" && message.error) {
+            message = message.error;
+          }
+          ref = file.previewElement.querySelectorAll("[data-dz-errormessage]");
+          results = [];
+          for (j = 0, len = ref.length; j < len; j++) {
+            node = ref[j];
+            results.push(node.textContent = message);
+          }
+          return results;
+        }
+      },
+      errormultiple: noop,
+      processing: function(file) {
+        if (file.previewElement) {
+          file.previewElement.classList.add("dz-processing");
+          if (file._removeLink) {
+            return file._removeLink.textContent = this.options.dictCancelUpload;
+          }
+        }
+      },
+      processingmultiple: noop,
+      uploadprogress: function(file, progress, bytesSent) {
+        var j, len, node, ref, results;
+        if (file.previewElement) {
+          ref = file.previewElement.querySelectorAll("[data-dz-uploadprogress]");
+          results = [];
+          for (j = 0, len = ref.length; j < len; j++) {
+            node = ref[j];
+            if (node.nodeName === 'PROGRESS') {
+              results.push(node.value = progress);
+            } else {
+              results.push(node.style.width = progress + "%");
+            }
+          }
+          return results;
+        }
+      },
+      totaluploadprogress: noop,
+      sending: noop,
+      sendingmultiple: noop,
+      success: function(file) {
+        if (file.previewElement) {
+          return file.previewElement.classList.add("dz-success");
+        }
+      },
+      successmultiple: noop,
+      canceled: function(file) {
+        return this.emit("error", file, "Upload canceled.");
+      },
+      canceledmultiple: noop,
+      complete: function(file) {
+        if (file._removeLink) {
+          file._removeLink.textContent = this.options.dictRemoveFile;
+        }
+        if (file.previewElement) {
+          return file.previewElement.classList.add("dz-complete");
+        }
+      },
+      completemultiple: noop,
+      maxfilesexceeded: noop,
+      maxfilesreached: noop,
+      queuecomplete: noop,
+      addedfiles: noop
+    };
+
+    extend = function() {
+      var j, key, len, object, objects, target, val;
+      target = arguments[0], objects = 2 <= arguments.length ? slice.call(arguments, 1) : [];
+      for (j = 0, len = objects.length; j < len; j++) {
+        object = objects[j];
+        for (key in object) {
+          val = object[key];
+          target[key] = val;
+        }
+      }
+      return target;
+    };
+
+    function Dropzone(element1, options) {
+      var elementOptions, fallback, ref;
+      this.element = element1;
+      this.version = Dropzone.version;
+      this.defaultOptions.previewTemplate = this.defaultOptions.previewTemplate.replace(/\n*/g, "");
+      this.clickableElements = [];
+      this.listeners = [];
+      this.files = [];
+      if (typeof this.element === "string") {
+        this.element = document.querySelector(this.element);
+      }
+      if (!(this.element && (this.element.nodeType != null))) {
+        throw new Error("Invalid dropzone element.");
+      }
+      if (this.element.dropzone) {
+        throw new Error("Dropzone already attached.");
+      }
+      Dropzone.instances.push(this);
+      this.element.dropzone = this;
+      elementOptions = (ref = Dropzone.optionsForElement(this.element)) != null ? ref : {};
+      this.options = extend({}, this.defaultOptions, elementOptions, options != null ? options : {});
+      if (this.options.forceFallback || !Dropzone.isBrowserSupported()) {
+        return this.options.fallback.call(this);
+      }
+      if (this.options.url == null) {
+        this.options.url = this.element.getAttribute("action");
+      }
+      if (!this.options.url) {
+        throw new Error("No URL provided.");
+      }
+      if (this.options.acceptedFiles && this.options.acceptedMimeTypes) {
+        throw new Error("You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.");
+      }
+      if (this.options.acceptedMimeTypes) {
+        this.options.acceptedFiles = this.options.acceptedMimeTypes;
+        delete this.options.acceptedMimeTypes;
+      }
+      if (this.options.renameFilename != null) {
+        this.options.renameFile = (function(_this) {
+          return function(file) {
+            return _this.options.renameFilename.call(_this, file.name, file);
+          };
+        })(this);
+      }
+      this.options.method = this.options.method.toUpperCase();
+      if ((fallback = this.getExistingFallback()) && fallback.parentNode) {
+        fallback.parentNode.removeChild(fallback);
+      }
+      if (this.options.previewsContainer !== false) {
+        if (this.options.previewsContainer) {
+          this.previewsContainer = Dropzone.getElement(this.options.previewsContainer, "previewsContainer");
+        } else {
+          this.previewsContainer = this.element;
+        }
+      }
+      if (this.options.clickable) {
+        if (this.options.clickable === true) {
+          this.clickableElements = [this.element];
+        } else {
+          this.clickableElements = Dropzone.getElements(this.options.clickable, "clickable");
+        }
+      }
+      this.init();
+    }
+
+    Dropzone.prototype.getAcceptedFiles = function() {
+      var file, j, len, ref, results;
+      ref = this.files;
+      results = [];
+      for (j = 0, len = ref.length; j < len; j++) {
+        file = ref[j];
+        if (file.accepted) {
+          results.push(file);
+        }
+      }
+      return results;
+    };
+
+    Dropzone.prototype.getRejectedFiles = function() {
+      var file, j, len, ref, results;
+      ref = this.files;
+      results = [];
+      for (j = 0, len = ref.length; j < len; j++) {
+        file = ref[j];
+        if (!file.accepted) {
+          results.push(file);
+        }
+      }
+      return results;
+    };
+
+    Dropzone.prototype.getFilesWithStatus = function(status) {
+      var file, j, len, ref, results;
+      ref = this.files;
+      results = [];
+      for (j = 0, len = ref.length; j < len; j++) {
+        file = ref[j];
+        if (file.status === status) {
+          results.push(file);
+        }
+      }
+      return results;
+    };
+
+    Dropzone.prototype.getQueuedFiles = function() {
+      return this.getFilesWithStatus(Dropzone.QUEUED);
+    };
+
+    Dropzone.prototype.getUploadingFiles = function() {
+      return this.getFilesWithStatus(Dropzone.UPLOADING);
+    };
+
+    Dropzone.prototype.getAddedFiles = function() {
+      return this.getFilesWithStatus(Dropzone.ADDED);
+    };
+
+    Dropzone.prototype.getActiveFiles = function() {
+      var file, j, len, ref, results;
+      ref = this.files;
+      results = [];
+      for (j = 0, len = ref.length; j < len; j++) {
+        file = ref[j];
+        if (file.status === Dropzone.UPLOADING || file.status === Dropzone.QUEUED) {
+          results.push(file);
+        }
+      }
+      return results;
+    };
+
+    Dropzone.prototype.init = function() {
+      var eventName, j, len, noPropagation, ref, ref1, setupHiddenFileInput;
+      if (this.element.tagName === "form") {
+        this.element.setAttribute("enctype", "multipart/form-data");
+      }
+      if (this.element.classList.contains("dropzone") && !this.element.querySelector(".dz-message")) {
+        this.element.appendChild(Dropzone.createElement("<div class=\"dz-default dz-message\"><span>" + this.options.dictDefaultMessage + "</span></div>"));
+      }
+      if (this.clickableElements.length) {
+        setupHiddenFileInput = (function(_this) {
+          return function() {
+            if (_this.hiddenFileInput) {
+              _this.hiddenFileInput.parentNode.removeChild(_this.hiddenFileInput);
+            }
+            _this.hiddenFileInput = document.createElement("input");
+            _this.hiddenFileInput.setAttribute("type", "file");
+            if ((_this.options.maxFiles == null) || _this.options.maxFiles > 1) {
+              _this.hiddenFileInput.setAttribute("multiple", "multiple");
+            }
+            _this.hiddenFileInput.className = "dz-hidden-input";
+            if (_this.options.acceptedFiles != null) {
+              _this.hiddenFileInput.setAttribute("accept", _this.options.acceptedFiles);
+            }
+            if (_this.options.capture != null) {
+              _this.hiddenFileInput.setAttribute("capture", _this.options.capture);
+            }
+            _this.hiddenFileInput.style.visibility = "hidden";
+            _this.hiddenFileInput.style.position = "absolute";
+            _this.hiddenFileInput.style.top = "0";
+            _this.hiddenFileInput.style.left = "0";
+            _this.hiddenFileInput.style.height = "0";
+            _this.hiddenFileInput.style.width = "0";
+            document.querySelector(_this.options.hiddenInputContainer).appendChild(_this.hiddenFileInput);
+            return _this.hiddenFileInput.addEventListener("change", function() {
+              var file, files, j, len;
+              files = _this.hiddenFileInput.files;
+              if (files.length) {
+                for (j = 0, len = files.length; j < len; j++) {
+                  file = files[j];
+                  _this.addFile(file);
+                }
+              }
+              _this.emit("addedfiles", files);
+              return setupHiddenFileInput();
+            });
+          };
+        })(this);
+        setupHiddenFileInput();
+      }
+      this.URL = (ref = window.URL) != null ? ref : window.webkitURL;
+      ref1 = this.events;
+      for (j = 0, len = ref1.length; j < len; j++) {
+        eventName = ref1[j];
+        this.on(eventName, this.options[eventName]);
+      }
+      this.on("uploadprogress", (function(_this) {
+        return function() {
+          return _this.updateTotalUploadProgress();
+        };
+      })(this));
+      this.on("removedfile", (function(_this) {
+        return function() {
+          return _this.updateTotalUploadProgress();
+        };
+      })(this));
+      this.on("canceled", (function(_this) {
+        return function(file) {
+          return _this.emit("complete", file);
+        };
+      })(this));
+      this.on("complete", (function(_this) {
+        return function(file) {
+          if (_this.getAddedFiles().length === 0 && _this.getUploadingFiles().length === 0 && _this.getQueuedFiles().length === 0) {
+            return setTimeout((function() {
+              return _this.emit("queuecomplete");
+            }), 0);
+          }
+        };
+      })(this));
+      noPropagation = function(e) {
+        e.stopPropagation();
+        if (e.preventDefault) {
+          return e.preventDefault();
+        } else {
+          return e.returnValue = false;
+        }
+      };
+      this.listeners = [
+        {
+          element: this.element,
+          events: {
+            "dragstart": (function(_this) {
+              return function(e) {
+                return _this.emit("dragstart", e);
+              };
+            })(this),
+            "dragenter": (function(_this) {
+              return function(e) {
+                noPropagation(e);
+                return _this.emit("dragenter", e);
+              };
+            })(this),
+            "dragover": (function(_this) {
+              return function(e) {
+                var efct;
+                try {
+                  efct = e.dataTransfer.effectAllowed;
+                } catch (undefined) {}
+                e.dataTransfer.dropEffect = 'move' === efct || 'linkMove' === efct ? 'move' : 'copy';
+                noPropagation(e);
+                return _this.emit("dragover", e);
+              };
+            })(this),
+            "dragleave": (function(_this) {
+              return function(e) {
+                return _this.emit("dragleave", e);
+              };
+            })(this),
+            "drop": (function(_this) {
+              return function(e) {
+                noPropagation(e);
+                return _this.drop(e);
+              };
+            })(this),
+            "dragend": (function(_this) {
+              return function(e) {
+                return _this.emit("dragend", e);
+              };
+            })(this)
+          }
+        }
+      ];
+      this.clickableElements.forEach((function(_this) {
+        return function(clickableElement) {
+          return _this.listeners.push({
+            element: clickableElement,
+            events: {
+              "click": function(evt) {
+                if ((clickableElement !== _this.element) || (evt.target === _this.element || Dropzone.elementInside(evt.target, _this.element.querySelector(".dz-message")))) {
+                  _this.hiddenFileInput.click();
+                }
+                return true;
+              }
+            }
+          });
+        };
+      })(this));
+      this.enable();
+      return this.options.init.call(this);
+    };
+
+    Dropzone.prototype.destroy = function() {
+      var ref;
+      this.disable();
+      this.removeAllFiles(true);
+      if ((ref = this.hiddenFileInput) != null ? ref.parentNode : void 0) {
+        this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput);
+        this.hiddenFileInput = null;
+      }
+      delete this.element.dropzone;
+      return Dropzone.instances.splice(Dropzone.instances.indexOf(this), 1);
+    };
+
+    Dropzone.prototype.updateTotalUploadProgress = function() {
+      var activeFiles, file, j, len, ref, totalBytes, totalBytesSent, totalUploadProgress;
+      totalBytesSent = 0;
+      totalBytes = 0;
+      activeFiles = this.getActiveFiles();
+      if (activeFiles.length) {
+        ref = this.getActiveFiles();
+        for (j = 0, len = ref.length; j < len; j++) {
+          file = ref[j];
+          totalBytesSent += file.upload.bytesSent;
+          totalBytes += file.upload.total;
+        }
+        totalUploadProgress = 100 * totalBytesSent / totalBytes;
+      } else {
+        totalUploadProgress = 100;
+      }
+      return this.emit("totaluploadprogress", totalUploadProgress, totalBytes, totalBytesSent);
+    };
+
+    Dropzone.prototype._getParamName = function(n) {
+      if (typeof this.options.paramName === "function") {
+        return this.options.paramName(n);
+      } else {
+        return "" + this.options.paramName + (this.options.uploadMultiple ? "[" + n + "]" : "");
+      }
+    };
+
+    Dropzone.prototype._renameFile = function(file) {
+      if (typeof this.options.renameFile !== "function") {
+        return file.name;
+      }
+      return this.options.renameFile(file);
+    };
+
+    Dropzone.prototype.getFallbackForm = function() {
+      var existingFallback, fields, fieldsString, form;
+      if (existingFallback = this.getExistingFallback()) {
+        return existingFallback;
+      }
+      fieldsString = "<div class=\"dz-fallback\">";
+      if (this.options.dictFallbackText) {
+        fieldsString += "<p>" + this.options.dictFallbackText + "</p>";
+      }
+      fieldsString += "<input type=\"file\" name=\"" + (this._getParamName(0)) + "\" " + (this.options.uploadMultiple ? 'multiple="multiple"' : void 0) + " /><input type=\"submit\" value=\"Upload!\"></div>";
+      fields = Dropzone.createElement(fieldsString);
+      if (this.element.tagName !== "FORM") {
+        form = Dropzone.createElement("<form action=\"" + this.options.url + "\" enctype=\"multipart/form-data\" method=\"" + this.options.method + "\"></form>");
+        form.appendChild(fields);
+      } else {
+        this.element.setAttribute("enctype", "multipart/form-data");
+        this.element.setAttribute("method", this.options.method);
+      }
+      return form != null ? form : fields;
+    };
+
+    Dropzone.prototype.getExistingFallback = function() {
+      var fallback, getFallback, j, len, ref, tagName;
+      getFallback = function(elements) {
+        var el, j, len;
+        for (j = 0, len = elements.length; j < len; j++) {
+          el = elements[j];
+          if (/(^| )fallback($| )/.test(el.className)) {
+            return el;
+          }
+        }
+      };
+      ref = ["div", "form"];
+      for (j = 0, len = ref.length; j < len; j++) {
+        tagName = ref[j];
+        if (fallback = getFallback(this.element.getElementsByTagName(tagName))) {
+          return fallback;
+        }
+      }
+    };
+
+    Dropzone.prototype.setupEventListeners = function() {
+      var elementListeners, event, j, len, listener, ref, results;
+      ref = this.listeners;
+      results = [];
+      for (j = 0, len = ref.length; j < len; j++) {
+        elementListeners = ref[j];
+        results.push((function() {
+          var ref1, results1;
+          ref1 = elementListeners.events;
+          results1 = [];
+          for (event in ref1) {
+            listener = ref1[event];
+            results1.push(elementListeners.element.addEventListener(event, listener, false));
+          }
+          return results1;
+        })());
+      }
+      return results;
+    };
+
+    Dropzone.prototype.removeEventListeners = function() {
+      var elementListeners, event, j, len, listener, ref, results;
+      ref = this.listeners;
+      results = [];
+      for (j = 0, len = ref.length; j < len; j++) {
+        elementListeners = ref[j];
+        results.push((function() {
+          var ref1, results1;
+          ref1 = elementListeners.events;
+          results1 = [];
+          for (event in ref1) {
+            listener = ref1[event];
+            results1.push(elementListeners.element.removeEventListener(event, listener, false));
+          }
+          return results1;
+        })());
+      }
+      return results;
+    };
+
+    Dropzone.prototype.disable = function() {
+      var file, j, len, ref, results;
+      this.clickableElements.forEach(function(element) {
+        return element.classList.remove("dz-clickable");
+      });
+      this.removeEventListeners();
+      ref = this.files;
+      results = [];
+      for (j = 0, len = ref.length; j < len; j++) {
+        file = ref[j];
+        results.push(this.cancelUpload(file));
+      }
+      return results;
+    };
+
+    Dropzone.prototype.enable = function() {
+      this.clickableElements.forEach(function(element) {
+        return element.classList.add("dz-clickable");
+      });
+      return this.setupEventListeners();
+    };
+
+    Dropzone.prototype.filesize = function(size) {
+      var cutoff, i, j, len, selectedSize, selectedUnit, unit, units;
+      selectedSize = 0;
+      selectedUnit = "b";
+      if (size > 0) {
+        units = ['tb', 'gb', 'mb', 'kb', 'b'];
+        for (i = j = 0, len = units.length; j < len; i = ++j) {
+          unit = units[i];
+          cutoff = Math.pow(this.options.filesizeBase, 4 - i) / 10;
+          if (size >= cutoff) {
+            selectedSize = size / Math.pow(this.options.filesizeBase, 4 - i);
+            selectedUnit = unit;
+            break;
+          }
+        }
+        selectedSize = Math.round(10 * selectedSize) / 10;
+      }
+      return "<strong>" + selectedSize + "</strong> " + this.options.dictFileSizeUnits[selectedUnit];
+    };
+
+    Dropzone.prototype._updateMaxFilesReachedClass = function() {
+      if ((this.options.maxFiles != null) && this.getAcceptedFiles().length >= this.options.maxFiles) {
+        if (this.getAcceptedFiles().length === this.options.maxFiles) {
+          this.emit('maxfilesreached', this.files);
+        }
+        return this.element.classList.add("dz-max-files-reached");
+      } else {
+        return this.element.classList.remove("dz-max-files-reached");
+      }
+    };
+
+    Dropzone.prototype.drop = function(e) {
+      var files, items;
+      if (!e.dataTransfer) {
+        return;
+      }
+      this.emit("drop", e);
+      files = e.dataTransfer.files;
+      this.emit("addedfiles", files);
+      if (files.length) {
+        items = e.dataTransfer.items;
+        if (items && items.length && (items[0].webkitGetAsEntry != null)) {
+          this._addFilesFromItems(items);
+        } else {
+          this.handleFiles(files);
+        }
+      }
+    };
+
+    Dropzone.prototype.paste = function(e) {
+      var items, ref;
+      if ((e != null ? (ref = e.clipboardData) != null ? ref.items : void 0 : void 0) == null) {
+        return;
+      }
+      this.emit("paste", e);
+      items = e.clipboardData.items;
+      if (items.length) {
+        return this._addFilesFromItems(items);
+      }
+    };
+
+    Dropzone.prototype.handleFiles = function(files) {
+      var file, j, len, results;
+      results = [];
+      for (j = 0, len = files.length; j < len; j++) {
+        file = files[j];
+        results.push(this.addFile(file));
+      }
+      return results;
+    };
+
+    Dropzone.prototype._addFilesFromItems = function(items) {
+      var entry, item, j, len, results;
+      results = [];
+      for (j = 0, len = items.length; j < len; j++) {
+        item = items[j];
+        if ((item.webkitGetAsEntry != null) && (entry = item.webkitGetAsEntry())) {
+          if (entry.isFile) {
+            results.push(this.addFile(item.getAsFile()));
+          } else if (entry.isDirectory) {
+            results.push(this._addFilesFromDirectory(entry, entry.name));
+          } else {
+            results.push(void 0);
+          }
+        } else if (item.getAsFile != null) {
+          if ((item.kind == null) || item.kind === "file") {
+            results.push(this.addFile(item.getAsFile()));
+          } else {
+            results.push(void 0);
+          }
+        } else {
+          results.push(void 0);
+        }
+      }
+      return results;
+    };
+
+    Dropzone.prototype._addFilesFromDirectory = function(directory, path) {
+      var dirReader, errorHandler, readEntries;
+      dirReader = directory.createReader();
+      errorHandler = function(error) {
+        return typeof console !== "undefined" && console !== null ? typeof console.log === "function" ? console.log(error) : void 0 : void 0;
+      };
+      readEntries = (function(_this) {
+        return function() {
+          return dirReader.readEntries(function(entries) {
+            var entry, j, len;
+            if (entries.length > 0) {
+              for (j = 0, len = entries.length; j < len; j++) {
+                entry = entries[j];
+                if (entry.isFile) {
+                  entry.file(function(file) {
+                    if (_this.options.ignoreHiddenFiles && file.name.substring(0, 1) === '.') {
+                      return;
+                    }
+                    file.fullPath = path + "/" + file.name;
+                    return _this.addFile(file);
+                  });
+                } else if (entry.isDirectory) {
+                  _this._addFilesFromDirectory(entry, path + "/" + entry.name);
+                }
+              }
+              readEntries();
+            }
+            return null;
+          }, errorHandler);
+        };
+      })(this);
+      return readEntries();
+    };
+
+    Dropzone.prototype.accept = function(file, done) {
+      if (file.size > this.options.maxFilesize * 1024 * 1024) {
+        return done(this.options.dictFileTooBig.replace("{{filesize}}", Math.round(file.size / 1024 / 10.24) / 100).replace("{{maxFilesize}}", this.options.maxFilesize));
+      } else if (!Dropzone.isValidFile(file, this.options.acceptedFiles)) {
+        return done(this.options.dictInvalidFileType);
+      } else if ((this.options.maxFiles != null) && this.getAcceptedFiles().length >= this.options.maxFiles) {
+        done(this.options.dictMaxFilesExceeded.replace("{{maxFiles}}", this.options.maxFiles));
+        return this.emit("maxfilesexceeded", file);
+      } else {
+        return this.options.accept.call(this, file, done);
+      }
+    };
+
+    Dropzone.prototype.addFile = function(file) {
+      file.upload = {
+        progress: 0,
+        total: file.size,
+        bytesSent: 0,
+        filename: this._renameFile(file)
+      };
+      this.files.push(file);
+      file.status = Dropzone.ADDED;
+      this.emit("addedfile", file);
+      this._enqueueThumbnail(file);
+      return this.accept(file, (function(_this) {
+        return function(error) {
+          if (error) {
+            file.accepted = false;
+            _this._errorProcessing([file], error);
+          } else {
+            file.accepted = true;
+            if (_this.options.autoQueue) {
+              _this.enqueueFile(file);
+            }
+          }
+          return _this._updateMaxFilesReachedClass();
+        };
+      })(this));
+    };
+
+    Dropzone.prototype.enqueueFiles = function(files) {
+      var file, j, len;
+      for (j = 0, len = files.length; j < len; j++) {
+        file = files[j];
+        this.enqueueFile(file);
+      }
+      return null;
+    };
+
+    Dropzone.prototype.enqueueFile = function(file) {
+      if (file.status === Dropzone.ADDED && file.accepted === true) {
+        file.status = Dropzone.QUEUED;
+        if (this.options.autoProcessQueue) {
+          return setTimeout(((function(_this) {
+            return function() {
+              return _this.processQueue();
+            };
+          })(this)), 0);
+        }
+      } else {
+        throw new Error("This file can't be queued because it has already been processed or was rejected.");
+      }
+    };
+
+    Dropzone.prototype._thumbnailQueue = [];
+
+    Dropzone.prototype._processingThumbnail = false;
+
+    Dropzone.prototype._enqueueThumbnail = function(file) {
+      if (this.options.createImageThumbnails && file.type.match(/image.*/) && file.size <= this.options.maxThumbnailFilesize * 1024 * 1024) {
+        this._thumbnailQueue.push(file);
+        return setTimeout(((function(_this) {
+          return function() {
+            return _this._processThumbnailQueue();
+          };
+        })(this)), 0);
+      }
+    };
+
+    Dropzone.prototype._processThumbnailQueue = function() {
+      var file;
+      if (this._processingThumbnail || this._thumbnailQueue.length === 0) {
+        return;
+      }
+      this._processingThumbnail = true;
+      file = this._thumbnailQueue.shift();
+      return this.createThumbnail(file, this.options.thumbnailWidth, this.options.thumbnailHeight, this.options.thumbnailMethod, true, (function(_this) {
+        return function(dataUrl) {
+          _this.emit("thumbnail", file, dataUrl);
+          _this._processingThumbnail = false;
+          return _this._processThumbnailQueue();
+        };
+      })(this));
+    };
+
+    Dropzone.prototype.removeFile = function(file) {
+      if (file.status === Dropzone.UPLOADING) {
+        this.cancelUpload(file);
+      }
+      this.files = without(this.files, file);
+      this.emit("removedfile", file);
+      if (this.files.length === 0) {
+        return this.emit("reset");
+      }
+    };
+
+    Dropzone.prototype.removeAllFiles = function(cancelIfNecessary) {
+      var file, j, len, ref;
+      if (cancelIfNecessary == null) {
+        cancelIfNecessary = false;
+      }
+      ref = this.files.slice();
+      for (j = 0, len = ref.length; j < len; j++) {
+        file = ref[j];
+        if (file.status !== Dropzone.UPLOADING || cancelIfNecessary) {
+          this.removeFile(file);
+        }
+      }
+      return null;
+    };
+
+    Dropzone.prototype.resizeImage = function(file, width, height, resizeMethod, callback) {
+      return this.createThumbnail(file, width, height, resizeMethod, false, (function(_this) {
+        return function(dataUrl, canvas) {
+          var resizeMimeType, resizedDataURL;
+          if (canvas === null) {
+            return callback(file);
+          } else {
+            resizeMimeType = _this.options.resizeMimeType;
+            if (resizeMimeType == null) {
+              resizeMimeType = file.type;
+            }
+            resizedDataURL = canvas.toDataURL(resizeMimeType, _this.options.resizeQuality);
+            if (resizeMimeType === 'image/jpeg' || resizeMimeType === 'image/jpg') {
+              resizedDataURL = ExifRestore.restore(file.dataURL, resizedDataURL);
+            }
+            return callback(Dropzone.dataURItoBlob(resizedDataURL));
+          }
+        };
+      })(this));
+    };
+
+    Dropzone.prototype.createThumbnail = function(file, width, height, resizeMethod, fixOrientation, callback) {
+      var fileReader;
+      fileReader = new FileReader;
+      fileReader.onload = (function(_this) {
+        return function() {
+          file.dataURL = fileReader.result;
+          if (file.type === "image/svg+xml") {
+            if (callback != null) {
+              callback(fileReader.result);
+            }
+            return;
+          }
+          return _this.createThumbnailFromUrl(file, width, height, resizeMethod, fixOrientation, callback);
+        };
+      })(this);
+      return fileReader.readAsDataURL(file);
+    };
+
+    Dropzone.prototype.createThumbnailFromUrl = function(file, width, height, resizeMethod, fixOrientation, callback, crossOrigin) {
+      var img;
+      img = document.createElement("img");
+      if (crossOrigin) {
+        img.crossOrigin = crossOrigin;
+      }
+      img.onload = (function(_this) {
+        return function() {
+          var loadExif;
+          loadExif = function(callback) {
+            return callback(1);
+          };
+          if ((typeof EXIF !== "undefined" && EXIF !== null) && fixOrientation) {
+            loadExif = function(callback) {
+              return EXIF.getData(img, function() {
+                return callback(EXIF.getTag(this, 'Orientation'));
+              });
+            };
+          }
+          return loadExif(function(orientation) {
+            var canvas, ctx, ref, ref1, ref2, ref3, resizeInfo, thumbnail;
+            file.width = img.width;
+            file.height = img.height;
+            resizeInfo = _this.options.resize.call(_this, file, width, height, resizeMethod);
+            canvas = document.createElement("canvas");
+            ctx = canvas.getContext("2d");
+            canvas.width = resizeInfo.trgWidth;
+            canvas.height = resizeInfo.trgHeight;
+            if (orientation > 4) {
+              canvas.width = resizeInfo.trgHeight;
+              canvas.height = resizeInfo.trgWidth;
+            }
+            switch (orientation) {
+              case 2:
+                ctx.translate(canvas.width, 0);
+                ctx.scale(-1, 1);
+                break;
+              case 3:
+                ctx.translate(canvas.width, canvas.height);
+                ctx.rotate(Math.PI);
+                break;
+              case 4:
+                ctx.translate(0, canvas.height);
+                ctx.scale(1, -1);
+                break;
+              case 5:
+                ctx.rotate(0.5 * Math.PI);
+                ctx.scale(1, -1);
+                break;
+              case 6:
+                ctx.rotate(0.5 * Math.PI);
+                ctx.translate(0, -canvas.height);
+                break;
+              case 7:
+                ctx.rotate(0.5 * Math.PI);
+                ctx.translate(canvas.width, -canvas.height);
+                ctx.scale(-1, 1);
+                break;
+              case 8:
+                ctx.rotate(-0.5 * Math.PI);
+                ctx.translate(-canvas.width, 0);
+            }
+            drawImageIOSFix(ctx, img, (ref = resizeInfo.srcX) != null ? ref : 0, (ref1 = resizeInfo.srcY) != null ? ref1 : 0, resizeInfo.srcWidth, resizeInfo.srcHeight, (ref2 = resizeInfo.trgX) != null ? ref2 : 0, (ref3 = resizeInfo.trgY) != null ? ref3 : 0, resizeInfo.trgWidth, resizeInfo.trgHeight);
+            thumbnail = canvas.toDataURL("image/png");
+            if (callback != null) {
+              return callback(thumbnail, canvas);
+            }
+          });
+        };
+      })(this);
+      if (callback != null) {
+        img.onerror = callback;
+      }
+      return img.src = file.dataURL;
+    };
+
+    Dropzone.prototype.processQueue = function() {
+      var i, parallelUploads, processingLength, queuedFiles;
+      parallelUploads = this.options.parallelUploads;
+      processingLength = this.getUploadingFiles().length;
+      i = processingLength;
+      if (processingLength >= parallelUploads) {
+        return;
+      }
+      queuedFiles = this.getQueuedFiles();
+      if (!(queuedFiles.length > 0)) {
+        return;
+      }
+      if (this.options.uploadMultiple) {
+        return this.processFiles(queuedFiles.slice(0, parallelUploads - processingLength));
+      } else {
+        while (i < parallelUploads) {
+          if (!queuedFiles.length) {
+            return;
+          }
+          this.processFile(queuedFiles.shift());
+          i++;
+        }
+      }
+    };
+
+    Dropzone.prototype.processFile = function(file) {
+      return this.processFiles([file]);
+    };
+
+    Dropzone.prototype.processFiles = function(files) {
+      var file, j, len;
+      for (j = 0, len = files.length; j < len; j++) {
+        file = files[j];
+        file.processing = true;
+        file.status = Dropzone.UPLOADING;
+        this.emit("processing", file);
+      }
+      if (this.options.uploadMultiple) {
+        this.emit("processingmultiple", files);
+      }
+      return this.uploadFiles(files);
+    };
+
+    Dropzone.prototype._getFilesWithXhr = function(xhr) {
+      var file, files;
+      return files = (function() {
+        var j, len, ref, results;
+        ref = this.files;
+        results = [];
+        for (j = 0, len = ref.length; j < len; j++) {
+          file = ref[j];
+          if (file.xhr === xhr) {
+            results.push(file);
+          }
+        }
+        return results;
+      }).call(this);
+    };
+
+    Dropzone.prototype.cancelUpload = function(file) {
+      var groupedFile, groupedFiles, j, k, len, len1, ref;
+      if (file.status === Dropzone.UPLOADING) {
+        groupedFiles = this._getFilesWithXhr(file.xhr);
+        for (j = 0, len = groupedFiles.length; j < len; j++) {
+          groupedFile = groupedFiles[j];
+          groupedFile.status = Dropzone.CANCELED;
+        }
+        file.xhr.abort();
+        for (k = 0, len1 = groupedFiles.length; k < len1; k++) {
+          groupedFile = groupedFiles[k];
+          this.emit("canceled", groupedFile);
+        }
+        if (this.options.uploadMultiple) {
+          this.emit("canceledmultiple", groupedFiles);
+        }
+      } else if ((ref = file.status) === Dropzone.ADDED || ref === Dropzone.QUEUED) {
+        file.status = Dropzone.CANCELED;
+        this.emit("canceled", file);
+        if (this.options.uploadMultiple) {
+          this.emit("canceledmultiple", [file]);
+        }
+      }
+      if (this.options.autoProcessQueue) {
+        return this.processQueue();
+      }
+    };
+
+    resolveOption = function() {
+      var args, option;
+      option = arguments[0], args = 2 <= arguments.length ? slice.call(arguments, 1) : [];
+      if (typeof option === 'function') {
+        return option.apply(this, args);
+      }
+      return option;
+    };
+
+    Dropzone.prototype.uploadFile = function(file) {
+      return this.uploadFiles([file]);
+    };
+
+    Dropzone.prototype.uploadFiles = function(files) {
+      var doneCounter, doneFunction, file, formData, handleError, headerName, headerValue, headers, i, input, inputName, inputType, j, k, key, l, len, len1, len2, len3, m, method, o, option, progressObj, ref, ref1, ref2, ref3, ref4, ref5, response, results, updateProgress, url, value, xhr;
+      xhr = new XMLHttpRequest();
+      for (j = 0, len = files.length; j < len; j++) {
+        file = files[j];
+        file.xhr = xhr;
+      }
+      method = resolveOption(this.options.method, files);
+      url = resolveOption(this.options.url, files);
+      xhr.open(method, url, true);
+      xhr.timeout = resolveOption(this.options.timeout, files);
+      xhr.withCredentials = !!this.options.withCredentials;
+      response = null;
+      handleError = (function(_this) {
+        return function() {
+          var k, len1, results;
+          results = [];
+          for (k = 0, len1 = files.length; k < len1; k++) {
+            file = files[k];
+            results.push(_this._errorProcessing(files, response || _this.options.dictResponseError.replace("{{statusCode}}", xhr.status), xhr));
+          }
+          return results;
+        };
+      })(this);
+      updateProgress = (function(_this) {
+        return function(e) {
+          var allFilesFinished, k, l, len1, len2, len3, m, progress, results;
+          if (e != null) {
+            progress = 100 * e.loaded / e.total;
+            for (k = 0, len1 = files.length; k < len1; k++) {
+              file = files[k];
+              file.upload.progress = progress;
+              file.upload.total = e.total;
+              file.upload.bytesSent = e.loaded;
+            }
+          } else {
+            allFilesFinished = true;
+            progress = 100;
+            for (l = 0, len2 = files.length; l < len2; l++) {
+              file = files[l];
+              if (!(file.upload.progress === 100 && file.upload.bytesSent === file.upload.total)) {
+                allFilesFinished = false;
+              }
+              file.upload.progress = progress;
+              file.upload.bytesSent = file.upload.total;
+            }
+            if (allFilesFinished) {
+              return;
+            }
+          }
+          results = [];
+          for (m = 0, len3 = files.length; m < len3; m++) {
+            file = files[m];
+            results.push(_this.emit("uploadprogress", file, progress, file.upload.bytesSent));
+          }
+          return results;
+        };
+      })(this);
+      xhr.onload = (function(_this) {
+        return function(e) {
+          var error1, ref;
+          if (files[0].status === Dropzone.CANCELED) {
+            return;
+          }
+          if (xhr.readyState !== 4) {
+            return;
+          }
+          if (xhr.responseType !== 'arraybuffer' && xhr.responseType !== 'blob') {
+            response = xhr.responseText;
+            if (xhr.getResponseHeader("content-type") && ~xhr.getResponseHeader("content-type").indexOf("application/json")) {
+              try {
+                response = JSON.parse(response);
+              } catch (error1) {
+                e = error1;
+                response = "Invalid JSON response from server.";
+              }
+            }
+          }
+          updateProgress();
+          if (!((200 <= (ref = xhr.status) && ref < 300))) {
+            return handleError();
+          } else {
+            return _this._finished(files, response, e);
+          }
+        };
+      })(this);
+      xhr.onerror = (function(_this) {
+        return function() {
+          if (files[0].status === Dropzone.CANCELED) {
+            return;
+          }
+          return handleError();
+        };
+      })(this);
+      progressObj = (ref = xhr.upload) != null ? ref : xhr;
+      progressObj.onprogress = updateProgress;
+      headers = {
+        "Accept": "application/json",
+        "Cache-Control": "no-cache",
+        "X-Requested-With": "XMLHttpRequest"
+      };
+      if (this.options.headers) {
+        extend(headers, this.options.headers);
+      }
+      for (headerName in headers) {
+        headerValue = headers[headerName];
+        if (headerValue) {
+          xhr.setRequestHeader(headerName, headerValue);
+        }
+      }
+      formData = new FormData();
+      if (this.options.params) {
+        ref1 = this.options.params;
+        for (key in ref1) {
+          value = ref1[key];
+          formData.append(key, value);
+        }
+      }
+      for (k = 0, len1 = files.length; k < len1; k++) {
+        file = files[k];
+        this.emit("sending", file, xhr, formData);
+      }
+      if (this.options.uploadMultiple) {
+        this.emit("sendingmultiple", files, xhr, formData);
+      }
+      if (this.element.tagName === "FORM") {
+        ref2 = this.element.querySelectorAll("input, textarea, select, button");
+        for (l = 0, len2 = ref2.length; l < len2; l++) {
+          input = ref2[l];
+          inputName = input.getAttribute("name");
+          inputType = input.getAttribute("type");
+          if (input.tagName === "SELECT" && input.hasAttribute("multiple")) {
+            ref3 = input.options;
+            for (m = 0, len3 = ref3.length; m < len3; m++) {
+              option = ref3[m];
+              if (option.selected) {
+                formData.append(inputName, option.value);
+              }
+            }
+          } else if (!inputType || ((ref4 = inputType.toLowerCase()) !== "checkbox" && ref4 !== "radio") || input.checked) {
+            formData.append(inputName, input.value);
+          }
+        }
+      }
+      doneCounter = 0;
+      results = [];
+      for (i = o = 0, ref5 = files.length - 1; 0 <= ref5 ? o <= ref5 : o >= ref5; i = 0 <= ref5 ? ++o : --o) {
+        doneFunction = (function(_this) {
+          return function(file, paramName, fileName) {
+            return function(transformedFile) {
+              formData.append(paramName, transformedFile, fileName);
+              if (++doneCounter === files.length) {
+                return _this.submitRequest(xhr, formData, files);
+              }
+            };
+          };
+        })(this);
+        results.push(this.options.transformFile.call(this, files[i], doneFunction(files[i], this._getParamName(i), files[i].upload.filename)));
+      }
+      return results;
+    };
+
+    Dropzone.prototype.submitRequest = function(xhr, formData, files) {
+      return xhr.send(formData);
+    };
+
+    Dropzone.prototype._finished = function(files, responseText, e) {
+      var file, j, len;
+      for (j = 0, len = files.length; j < len; j++) {
+        file = files[j];
+        file.status = Dropzone.SUCCESS;
+        this.emit("success", file, responseText, e);
+        this.emit("complete", file);
+      }
+      if (this.options.uploadMultiple) {
+        this.emit("successmultiple", files, responseText, e);
+        this.emit("completemultiple", files);
+      }
+      if (this.options.autoProcessQueue) {
+        return this.processQueue();
+      }
+    };
+
+    Dropzone.prototype._errorProcessing = function(files, message, xhr) {
+      var file, j, len;
+      for (j = 0, len = files.length; j < len; j++) {
+        file = files[j];
+        file.status = Dropzone.ERROR;
+        this.emit("error", file, message, xhr);
+        this.emit("complete", file);
+      }
+      if (this.options.uploadMultiple) {
+        this.emit("errormultiple", files, message, xhr);
+        this.emit("completemultiple", files);
+      }
+      if (this.options.autoProcessQueue) {
+        return this.processQueue();
+      }
+    };
+
+    return Dropzone;
+
+  })(Emitter);
+
+  Dropzone.version = "5.1.1";
+
+  Dropzone.options = {};
+
+  Dropzone.optionsForElement = function(element) {
+    if (element.getAttribute("id")) {
+      return Dropzone.options[camelize(element.getAttribute("id"))];
+    } else {
+      return void 0;
+    }
+  };
+
+  Dropzone.instances = [];
+
+  Dropzone.forElement = function(element) {
+    if (typeof element === "string") {
+      element = document.querySelector(element);
+    }
+    if ((element != null ? element.dropzone : void 0) == null) {
+      throw new Error("No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.");
+    }
+    return element.dropzone;
+  };
+
+  Dropzone.autoDiscover = true;
+
+  Dropzone.discover = function() {
+    var checkElements, dropzone, dropzones, j, len, results;
+    if (document.querySelectorAll) {
+      dropzones = document.querySelectorAll(".dropzone");
+    } else {
+      dropzones = [];
+      checkElements = function(elements) {
+        var el, j, len, results;
+        results = [];
+        for (j = 0, len = elements.length; j < len; j++) {
+          el = elements[j];
+          if (/(^| )dropzone($| )/.test(el.className)) {
+            results.push(dropzones.push(el));
+          } else {
+            results.push(void 0);
+          }
+        }
+        return results;
+      };
+      checkElements(document.getElementsByTagName("div"));
+      checkElements(document.getElementsByTagName("form"));
+    }
+    results = [];
+    for (j = 0, len = dropzones.length; j < len; j++) {
+      dropzone = dropzones[j];
+      if (Dropzone.optionsForElement(dropzone) !== false) {
+        results.push(new Dropzone(dropzone));
+      } else {
+        results.push(void 0);
+      }
+    }
+    return results;
+  };
+
+  Dropzone.blacklistedBrowsers = [/opera.*Macintosh.*version\/12/i];
+
+  Dropzone.isBrowserSupported = function() {
+    var capableBrowser, j, len, ref, regex;
+    capableBrowser = true;
+    if (window.File && window.FileReader && window.FileList && window.Blob && window.FormData && document.querySelector) {
+      if (!("classList" in document.createElement("a"))) {
+        capableBrowser = false;
+      } else {
+        ref = Dropzone.blacklistedBrowsers;
+        for (j = 0, len = ref.length; j < len; j++) {
+          regex = ref[j];
+          if (regex.test(navigator.userAgent)) {
+            capableBrowser = false;
+            continue;
+          }
+        }
+      }
+    } else {
+      capableBrowser = false;
+    }
+    return capableBrowser;
+  };
+
+  Dropzone.dataURItoBlob = function(dataURI) {
+    var ab, byteString, i, ia, j, mimeString, ref;
+    byteString = atob(dataURI.split(',')[1]);
+    mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
+    ab = new ArrayBuffer(byteString.length);
+    ia = new Uint8Array(ab);
+    for (i = j = 0, ref = byteString.length; 0 <= ref ? j <= ref : j >= ref; i = 0 <= ref ? ++j : --j) {
+      ia[i] = byteString.charCodeAt(i);
+    }
+    return new Blob([ab], {
+      type: mimeString
+    });
+  };
+
+  without = function(list, rejectedItem) {
+    var item, j, len, results;
+    results = [];
+    for (j = 0, len = list.length; j < len; j++) {
+      item = list[j];
+      if (item !== rejectedItem) {
+        results.push(item);
+      }
+    }
+    return results;
+  };
+
+  camelize = function(str) {
+    return str.replace(/[\-_](\w)/g, function(match) {
+      return match.charAt(1).toUpperCase();
+    });
+  };
+
+  Dropzone.createElement = function(string) {
+    var div;
+    div = document.createElement("div");
+    div.innerHTML = string;
+    return div.childNodes[0];
+  };
+
+  Dropzone.elementInside = function(element, container) {
+    if (element === container) {
+      return true;
+    }
+    while (element = element.parentNode) {
+      if (element === container) {
+        return true;
+      }
+    }
+    return false;
+  };
+
+  Dropzone.getElement = function(el, name) {
+    var element;
+    if (typeof el === "string") {
+      element = document.querySelector(el);
+    } else if (el.nodeType != null) {
+      element = el;
+    }
+    if (element == null) {
+      throw new Error("Invalid `" + name + "` option provided. Please provide a CSS selector or a plain HTML element.");
+    }
+    return element;
+  };
+
+  Dropzone.getElements = function(els, name) {
+    var e, el, elements, error1, j, k, len, len1, ref;
+    if (els instanceof Array) {
+      elements = [];
+      try {
+        for (j = 0, len = els.length; j < len; j++) {
+          el = els[j];
+          elements.push(this.getElement(el, name));
+        }
+      } catch (error1) {
+        e = error1;
+        elements = null;
+      }
+    } else if (typeof els === "string") {
+      elements = [];
+      ref = document.querySelectorAll(els);
+      for (k = 0, len1 = ref.length; k < len1; k++) {
+        el = ref[k];
+        elements.push(el);
+      }
+    } else if (els.nodeType != null) {
+      elements = [els];
+    }
+    if (!((elements != null) && elements.length)) {
+      throw new Error("Invalid `" + name + "` option provided. Please provide a CSS selector, a plain HTML element or a list of those.");
+    }
+    return elements;
+  };
+
+  Dropzone.confirm = function(question, accepted, rejected) {
+    if (window.confirm(question)) {
+      return accepted();
+    } else if (rejected != null) {
+      return rejected();
+    }
+  };
+
+  Dropzone.isValidFile = function(file, acceptedFiles) {
+    var baseMimeType, j, len, mimeType, validType;
+    if (!acceptedFiles) {
+      return true;
+    }
+    acceptedFiles = acceptedFiles.split(",");
+    mimeType = file.type;
+    baseMimeType = mimeType.replace(/\/.*$/, "");
+    for (j = 0, len = acceptedFiles.length; j < len; j++) {
+      validType = acceptedFiles[j];
+      validType = validType.trim();
+      if (validType.charAt(0) === ".") {
+        if (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1) {
+          return true;
+        }
+      } else if (/\/\*$/.test(validType)) {
+        if (baseMimeType === validType.replace(/\/.*$/, "")) {
+          return true;
+        }
+      } else {
+        if (mimeType === validType) {
+          return true;
+        }
+      }
+    }
+    return false;
+  };
+
+  if (typeof jQuery !== "undefined" && jQuery !== null) {
+    jQuery.fn.dropzone = function(options) {
+      return this.each(function() {
+        return new Dropzone(this, options);
+      });
+    };
+  }
+
+  if (typeof module !== "undefined" && module !== null) {
+    module.exports = Dropzone;
+  } else {
+    window.Dropzone = Dropzone;
+  }
+
+  Dropzone.ADDED = "added";
+
+  Dropzone.QUEUED = "queued";
+
+  Dropzone.ACCEPTED = Dropzone.QUEUED;
+
+  Dropzone.UPLOADING = "uploading";
+
+  Dropzone.PROCESSING = Dropzone.UPLOADING;
+
+  Dropzone.CANCELED = "canceled";
+
+  Dropzone.ERROR = "error";
+
+  Dropzone.SUCCESS = "success";
+
+
+  /*
+  
+  Bugfix for iOS 6 and 7
+  Source: http://stackoverflow.com/questions/11929099/html5-canvas-drawimage-ratio-bug-ios
+  based on the work of https://github.com/stomita/ios-imagefile-megapixel
+   */
+
+  detectVerticalSquash = function(img) {
+    var alpha, canvas, ctx, data, ey, ih, iw, py, ratio, sy;
+    iw = img.naturalWidth;
+    ih = img.naturalHeight;
+    canvas = document.createElement("canvas");
+    canvas.width = 1;
+    canvas.height = ih;
+    ctx = canvas.getContext("2d");
+    ctx.drawImage(img, 0, 0);
+    data = ctx.getImageData(1, 0, 1, ih).data;
+    sy = 0;
+    ey = ih;
+    py = ih;
+    while (py > sy) {
+      alpha = data[(py - 1) * 4 + 3];
+      if (alpha === 0) {
+        ey = py;
+      } else {
+        sy = py;
+      }
+      py = (ey + sy) >> 1;
+    }
+    ratio = py / ih;
+    if (ratio === 0) {
+      return 1;
+    } else {
+      return ratio;
+    }
+  };
+
+  drawImageIOSFix = function(ctx, img, sx, sy, sw, sh, dx, dy, dw, dh) {
+    var vertSquashRatio;
+    vertSquashRatio = detectVerticalSquash(img);
+    return ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh / vertSquashRatio);
+  };
+
+  ExifRestore = (function() {
+    function ExifRestore() {}
+
+    ExifRestore.KEY_STR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
+
+    ExifRestore.encode64 = function(input) {
+      var chr1, chr2, chr3, enc1, enc2, enc3, enc4, i, output;
+      output = '';
+      chr1 = void 0;
+      chr2 = void 0;
+      chr3 = '';
+      enc1 = void 0;
+      enc2 = void 0;
+      enc3 = void 0;
+      enc4 = '';
+      i = 0;
+      while (true) {
+        chr1 = input[i++];
+        chr2 = input[i++];
+        chr3 = input[i++];
+        enc1 = chr1 >> 2;
+        enc2 = (chr1 & 3) << 4 | chr2 >> 4;
+        enc3 = (chr2 & 15) << 2 | chr3 >> 6;
+        enc4 = chr3 & 63;
+        if (isNaN(chr2)) {
+          enc3 = enc4 = 64;
+        } else if (isNaN(chr3)) {
+          enc4 = 64;
+        }
+        output = output + this.KEY_STR.charAt(enc1) + this.KEY_STR.charAt(enc2) + this.KEY_STR.charAt(enc3) + this.KEY_STR.charAt(enc4);
+        chr1 = chr2 = chr3 = '';
+        enc1 = enc2 = enc3 = enc4 = '';
+        if (!(i < input.length)) {
+          break;
+        }
+      }
+      return output;
+    };
+
+    ExifRestore.restore = function(origFileBase64, resizedFileBase64) {
+      var image, rawImage, segments;
+      if (!origFileBase64.match('data:image/jpeg;base64,')) {
+        return resizedFileBase64;
+      }
+      rawImage = this.decode64(origFileBase64.replace('data:image/jpeg;base64,', ''));
+      segments = this.slice2Segments(rawImage);
+      image = this.exifManipulation(resizedFileBase64, segments);
+      return 'data:image/jpeg;base64,' + this.encode64(image);
+    };
+
+    ExifRestore.exifManipulation = function(resizedFileBase64, segments) {
+      var aBuffer, exifArray, newImageArray;
+      exifArray = this.getExifArray(segments);
+      newImageArray = this.insertExif(resizedFileBase64, exifArray);
+      aBuffer = new Uint8Array(newImageArray);
+      return aBuffer;
+    };
+
+    ExifRestore.getExifArray = function(segments) {
+      var seg, x;
+      seg = void 0;
+      x = 0;
+      while (x < segments.length) {
+        seg = segments[x];
+        if (seg[0] === 255 & seg[1] === 225) {
+          return seg;
+        }
+        x++;
+      }
+      return [];
+    };
+
+    ExifRestore.insertExif = function(resizedFileBase64, exifArray) {
+      var array, ato, buf, imageData, mae, separatePoint;
+      imageData = resizedFileBase64.replace('data:image/jpeg;base64,', '');
+      buf = this.decode64(imageData);
+      separatePoint = buf.indexOf(255, 3);
+      mae = buf.slice(0, separatePoint);
+      ato = buf.slice(separatePoint);
+      array = mae;
+      array = array.concat(exifArray);
+      array = array.concat(ato);
+      return array;
+    };
+
+    ExifRestore.slice2Segments = function(rawImageArray) {
+      var endPoint, head, length, seg, segments;
+      head = 0;
+      segments = [];
+      while (true) {
+        if (rawImageArray[head] === 255 & rawImageArray[head + 1] === 218) {
+          break;
+        }
+        if (rawImageArray[head] === 255 & rawImageArray[head + 1] === 216) {
+          head += 2;
+        } else {
+          length = rawImageArray[head + 2] * 256 + rawImageArray[head + 3];
+          endPoint = head + length + 2;
+          seg = rawImageArray.slice(head, endPoint);
+          segments.push(seg);
+          head = endPoint;
+        }
+        if (head > rawImageArray.length) {
+          break;
+        }
+      }
+      return segments;
+    };
+
+    ExifRestore.decode64 = function(input) {
+      var base64test, buf, chr1, chr2, chr3, enc1, enc2, enc3, enc4, i, output;
+      output = '';
+      chr1 = void 0;
+      chr2 = void 0;
+      chr3 = '';
+      enc1 = void 0;
+      enc2 = void 0;
+      enc3 = void 0;
+      enc4 = '';
+      i = 0;
+      buf = [];
+      base64test = /[^A-Za-z0-9\+\/\=]/g;
+      if (base64test.exec(input)) {
+        console.warning('There were invalid base64 characters in the input text.\n' + 'Valid base64 characters are A-Z, a-z, 0-9, \'+\', \'/\',and \'=\'\n' + 'Expect errors in decoding.');
+      }
+      input = input.replace(/[^A-Za-z0-9\+\/\=]/g, '');
+      while (true) {
+        enc1 = this.KEY_STR.indexOf(input.charAt(i++));
+        enc2 = this.KEY_STR.indexOf(input.charAt(i++));
+        enc3 = this.KEY_STR.indexOf(input.charAt(i++));
+        enc4 = this.KEY_STR.indexOf(input.charAt(i++));
+        chr1 = enc1 << 2 | enc2 >> 4;
+        chr2 = (enc2 & 15) << 4 | enc3 >> 2;
+        chr3 = (enc3 & 3) << 6 | enc4;
+        buf.push(chr1);
+        if (enc3 !== 64) {
+          buf.push(chr2);
+        }
+        if (enc4 !== 64) {
+          buf.push(chr3);
+        }
+        chr1 = chr2 = chr3 = '';
+        enc1 = enc2 = enc3 = enc4 = '';
+        if (!(i < input.length)) {
+          break;
+        }
+      }
+      return buf;
+    };
+
+    return ExifRestore;
+
+  })();
+
+
+  /*
+   * contentloaded.js
+   *
+   * Author: Diego Perini (diego.perini at gmail.com)
+   * Summary: cross-browser wrapper for DOMContentLoaded
+   * Updated: 20101020
+   * License: MIT
+   * Version: 1.2
+   *
+   * URL:
+   * http://javascript.nwbox.com/ContentLoaded/
+   * http://javascript.nwbox.com/ContentLoaded/MIT-LICENSE
+   */
+
+  contentLoaded = function(win, fn) {
+    var add, doc, done, init, poll, pre, rem, root, top;
+    done = false;
+    top = true;
+    doc = win.document;
+    root = doc.documentElement;
+    add = (doc.addEventListener ? "addEventListener" : "attachEvent");
+    rem = (doc.addEventListener ? "removeEventListener" : "detachEvent");
+    pre = (doc.addEventListener ? "" : "on");
+    init = function(e) {
+      if (e.type === "readystatechange" && doc.readyState !== "complete") {
+        return;
+      }
+      (e.type === "load" ? win : doc)[rem](pre + e.type, init, false);
+      if (!done && (done = true)) {
+        return fn.call(win, e.type || e);
+      }
+    };
+    poll = function() {
+      var e, error1;
+      try {
+        root.doScroll("left");
+      } catch (error1) {
+        e = error1;
+        setTimeout(poll, 50);
+        return;
+      }
+      return init("poll");
+    };
+    if (doc.readyState !== "complete") {
+      if (doc.createEventObject && root.doScroll) {
+        try {
+          top = !win.frameElement;
+        } catch (undefined) {}
+        if (top) {
+          poll();
+        }
+      }
+      doc[add](pre + "DOMContentLoaded", init, false);
+      doc[add](pre + "readystatechange", init, false);
+      return win[add](pre + "load", init, false);
+    }
+  };
+
+  Dropzone._autoDiscoverFunction = function() {
+    if (Dropzone.autoDiscover) {
+      return Dropzone.discover();
+    }
+  };
+
+  contentLoaded(window, Dropzone._autoDiscoverFunction);
+
+}).call(this);
diff --git a/vendor/enyo/dropzone/dist/min/basic.min.css b/vendor/enyo/dropzone/dist/min/basic.min.css
new file mode 100644
index 0000000000..5238d5cae5
--- /dev/null
+++ b/vendor/enyo/dropzone/dist/min/basic.min.css
@@ -0,0 +1 @@
+.dropzone,.dropzone *{box-sizing:border-box}.dropzone{position:relative}.dropzone .dz-preview{position:relative;display:inline-block;width:120px;margin:0.5em}.dropzone .dz-preview .dz-progress{display:block;height:15px;border:1px solid #aaa}.dropzone .dz-preview .dz-progress .dz-upload{display:block;height:100%;width:0;background:green}.dropzone .dz-preview .dz-error-message{color:red;display:none}.dropzone .dz-preview.dz-error .dz-error-message,.dropzone .dz-preview.dz-error .dz-error-mark{display:block}.dropzone .dz-preview.dz-success .dz-success-mark{display:block}.dropzone .dz-preview .dz-error-mark,.dropzone .dz-preview .dz-success-mark{position:absolute;display:none;left:30px;top:30px;width:54px;height:58px;left:50%;margin-left:-27px}
diff --git a/vendor/enyo/dropzone/dist/min/dropzone-amd-module.min.js b/vendor/enyo/dropzone/dist/min/dropzone-amd-module.min.js
new file mode 100644
index 0000000000..b3baa6990e
--- /dev/null
+++ b/vendor/enyo/dropzone/dist/min/dropzone-amd-module.min.js
@@ -0,0 +1,2 @@
+!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a(jQuery)}(function(a){var b={exports:{}};return function(){var c,d,e,f,g,h,i,j,k,l=[].slice,m=function(a,b){function c(){this.constructor=a}for(var d in b)n.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},n={}.hasOwnProperty;j=function(){},d=function(){function a(){}return a.prototype.addEventListener=a.prototype.on,a.prototype.on=function(a,b){return this._callbacks=this._callbacks||{},this._callbacks[a]||(this._callbacks[a]=[]),this._callbacks[a].push(b),this},a.prototype.emit=function(){var a,b,c,d,e,f;if(d=arguments[0],a=2<=arguments.length?l.call(arguments,1):[],this._callbacks=this._callbacks||{},c=this._callbacks[d])for(e=0,f=c.length;e<f;e++)b=c[e],b.apply(this,a);return this},a.prototype.removeListener=a.prototype.off,a.prototype.removeAllListeners=a.prototype.off,a.prototype.removeEventListener=a.prototype.off,a.prototype.off=function(a,b){var c,d,e,f,g;if(!this._callbacks||0===arguments.length)return this._callbacks={},this;if(d=this._callbacks[a],!d)return this;if(1===arguments.length)return delete this._callbacks[a],this;for(e=f=0,g=d.length;f<g;e=++f)if(c=d[e],c===b){d.splice(e,1);break}return this},a}(),c=function(a){function b(a,d){var e,f,g;if(this.element=a,this.version=b.version,this.defaultOptions.previewTemplate=this.defaultOptions.previewTemplate.replace(/\n*/g,""),this.clickableElements=[],this.listeners=[],this.files=[],"string"==typeof this.element&&(this.element=document.querySelector(this.element)),!this.element||null==this.element.nodeType)throw new Error("Invalid dropzone element.");if(this.element.dropzone)throw new Error("Dropzone already attached.");if(b.instances.push(this),this.element.dropzone=this,e=null!=(g=b.optionsForElement(this.element))?g:{},this.options=c({},this.defaultOptions,e,null!=d?d:{}),this.options.forceFallback||!b.isBrowserSupported())return this.options.fallback.call(this);if(null==this.options.url&&(this.options.url=this.element.getAttribute("action")),!this.options.url)throw new Error("No URL provided.");if(this.options.acceptedFiles&&this.options.acceptedMimeTypes)throw new Error("You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.");this.options.acceptedMimeTypes&&(this.options.acceptedFiles=this.options.acceptedMimeTypes,delete this.options.acceptedMimeTypes),null!=this.options.renameFilename&&(this.options.renameFile=function(a){return function(b){return a.options.renameFilename.call(a,b.name,b)}}(this)),this.options.method=this.options.method.toUpperCase(),(f=this.getExistingFallback())&&f.parentNode&&f.parentNode.removeChild(f),this.options.previewsContainer!==!1&&(this.options.previewsContainer?this.previewsContainer=b.getElement(this.options.previewsContainer,"previewsContainer"):this.previewsContainer=this.element),this.options.clickable&&(this.options.clickable===!0?this.clickableElements=[this.element]:this.clickableElements=b.getElements(this.options.clickable,"clickable")),this.init()}var c,f;return m(b,a),b.prototype.Emitter=d,b.prototype.events=["drop","dragstart","dragend","dragenter","dragover","dragleave","addedfile","addedfiles","removedfile","thumbnail","error","errormultiple","processing","processingmultiple","uploadprogress","totaluploadprogress","sending","sendingmultiple","success","successmultiple","canceled","canceledmultiple","complete","completemultiple","reset","maxfilesexceeded","maxfilesreached","queuecomplete"],b.prototype.defaultOptions={url:null,method:"post",withCredentials:!1,timeout:3e4,parallelUploads:2,uploadMultiple:!1,maxFilesize:256,paramName:"file",createImageThumbnails:!0,maxThumbnailFilesize:10,thumbnailWidth:120,thumbnailHeight:120,thumbnailMethod:"crop",resizeWidth:null,resizeHeight:null,resizeMimeType:null,resizeQuality:.8,resizeMethod:"contain",filesizeBase:1e3,maxFiles:null,params:{},headers:null,clickable:!0,ignoreHiddenFiles:!0,acceptedFiles:null,acceptedMimeTypes:null,autoProcessQueue:!0,autoQueue:!0,addRemoveLinks:!1,previewsContainer:null,hiddenInputContainer:"body",capture:null,renameFilename:null,renameFile:null,forceFallback:!1,dictDefaultMessage:"Drop files here to upload",dictFallbackMessage:"Your browser does not support drag'n'drop file uploads.",dictFallbackText:"Please use the fallback form below to upload your files like in the olden days.",dictFileTooBig:"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.",dictInvalidFileType:"You can't upload files of this type.",dictResponseError:"Server responded with {{statusCode}} code.",dictCancelUpload:"Cancel upload",dictCancelUploadConfirmation:"Are you sure you want to cancel this upload?",dictRemoveFile:"Remove file",dictRemoveFileConfirmation:null,dictMaxFilesExceeded:"You can not upload any more files.",dictFileSizeUnits:{tb:"TB",gb:"GB",mb:"MB",kb:"KB",b:"b"},init:function(){return j},accept:function(a,b){return b()},fallback:function(){var a,c,d,e,f,g;for(this.element.className=this.element.className+" dz-browser-not-supported",f=this.element.getElementsByTagName("div"),c=0,d=f.length;c<d;c++)a=f[c],/(^| )dz-message($| )/.test(a.className)&&(e=a,a.className="dz-message");return e||(e=b.createElement('<div class="dz-message"><span></span></div>'),this.element.appendChild(e)),g=e.getElementsByTagName("span")[0],g&&(null!=g.textContent?g.textContent=this.options.dictFallbackMessage:null!=g.innerText&&(g.innerText=this.options.dictFallbackMessage)),this.element.appendChild(this.getFallbackForm())},resize:function(a,b,c,d){var e,f,g;if(e={srcX:0,srcY:0,srcWidth:a.width,srcHeight:a.height},f=a.width/a.height,null==b&&null==c?(b=e.srcWidth,c=e.srcHeight):null==b?b=c*f:null==c&&(c=b/f),b=Math.min(b,e.srcWidth),c=Math.min(c,e.srcHeight),g=b/c,e.srcWidth>b||e.srcHeight>c)if("crop"===d)f>g?(e.srcHeight=a.height,e.srcWidth=e.srcHeight*g):(e.srcWidth=a.width,e.srcHeight=e.srcWidth/g);else{if("contain"!==d)throw new Error("Unknown resizeMethod '"+d+"'");f>g?c=b/f:b=c*f}return e.srcX=(a.width-e.srcWidth)/2,e.srcY=(a.height-e.srcHeight)/2,e.trgWidth=b,e.trgHeight=c,e},transformFile:function(a,b){return(this.options.resizeWidth||this.options.resizeHeight)&&a.type.match(/image.*/)?this.resizeImage(a,this.options.resizeWidth,this.options.resizeHeight,this.options.resizeMethod,b):b(a)},previewTemplate:'<div class="dz-preview dz-file-preview">\n  <div class="dz-image"><img data-dz-thumbnail /></div>\n  <div class="dz-details">\n    <div class="dz-size"><span data-dz-size></span></div>\n    <div class="dz-filename"><span data-dz-name></span></div>\n  </div>\n  <div class="dz-progress"><span class="dz-upload" data-dz-uploadprogress></span></div>\n  <div class="dz-error-message"><span data-dz-errormessage></span></div>\n  <div class="dz-success-mark">\n    <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">\n      <title>Check</title>\n      <defs></defs>\n      <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">\n        <path d="M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" id="Oval-2" stroke-opacity="0.198794158" stroke="#747474" fill-opacity="0.816519475" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>\n      </g>\n    </svg>\n  </div>\n  <div class="dz-error-mark">\n    <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">\n      <title>Error</title>\n      <defs></defs>\n      <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">\n        <g id="Check-+-Oval-2" sketch:type="MSLayerGroup" stroke="#747474" stroke-opacity="0.198794158" fill="#FFFFFF" fill-opacity="0.816519475">\n          <path d="M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" id="Oval-2" sketch:type="MSShapeGroup"></path>\n        </g>\n      </g>\n    </svg>\n  </div>\n</div>',drop:function(a){return this.element.classList.remove("dz-drag-hover")},dragstart:j,dragend:function(a){return this.element.classList.remove("dz-drag-hover")},dragenter:function(a){return this.element.classList.add("dz-drag-hover")},dragover:function(a){return this.element.classList.add("dz-drag-hover")},dragleave:function(a){return this.element.classList.remove("dz-drag-hover")},paste:j,reset:function(){return this.element.classList.remove("dz-started")},addedfile:function(a){var c,d,e,f,g,h,i,j,k,l,m,n,o;if(this.element===this.previewsContainer&&this.element.classList.add("dz-started"),this.previewsContainer){for(a.previewElement=b.createElement(this.options.previewTemplate.trim()),a.previewTemplate=a.previewElement,this.previewsContainer.appendChild(a.previewElement),j=a.previewElement.querySelectorAll("[data-dz-name]"),c=0,f=j.length;c<f;c++)i=j[c],i.textContent=a.name;for(k=a.previewElement.querySelectorAll("[data-dz-size]"),d=0,g=k.length;d<g;d++)i=k[d],i.innerHTML=this.filesize(a.size);for(this.options.addRemoveLinks&&(a._removeLink=b.createElement('<a class="dz-remove" href="javascript:undefined;" data-dz-remove>'+this.options.dictRemoveFile+"</a>"),a.previewElement.appendChild(a._removeLink)),m=function(c){return function(d){return d.preventDefault(),d.stopPropagation(),a.status===b.UPLOADING?b.confirm(c.options.dictCancelUploadConfirmation,function(){return c.removeFile(a)}):c.options.dictRemoveFileConfirmation?b.confirm(c.options.dictRemoveFileConfirmation,function(){return c.removeFile(a)}):c.removeFile(a)}}(this),l=a.previewElement.querySelectorAll("[data-dz-remove]"),o=[],e=0,h=l.length;e<h;e++)n=l[e],o.push(n.addEventListener("click",m));return o}},removedfile:function(a){var b;return a.previewElement&&null!=(b=a.previewElement)&&b.parentNode.removeChild(a.previewElement),this._updateMaxFilesReachedClass()},thumbnail:function(a,b){var c,d,e,f;if(a.previewElement){for(a.previewElement.classList.remove("dz-file-preview"),e=a.previewElement.querySelectorAll("[data-dz-thumbnail]"),c=0,d=e.length;c<d;c++)f=e[c],f.alt=a.name,f.src=b;return setTimeout(function(b){return function(){return a.previewElement.classList.add("dz-image-preview")}}(this),1)}},error:function(a,b){var c,d,e,f,g;if(a.previewElement){for(a.previewElement.classList.add("dz-error"),"String"!=typeof b&&b.error&&(b=b.error),f=a.previewElement.querySelectorAll("[data-dz-errormessage]"),g=[],c=0,d=f.length;c<d;c++)e=f[c],g.push(e.textContent=b);return g}},errormultiple:j,processing:function(a){if(a.previewElement&&(a.previewElement.classList.add("dz-processing"),a._removeLink))return a._removeLink.textContent=this.options.dictCancelUpload},processingmultiple:j,uploadprogress:function(a,b,c){var d,e,f,g,h;if(a.previewElement){for(g=a.previewElement.querySelectorAll("[data-dz-uploadprogress]"),h=[],d=0,e=g.length;d<e;d++)f=g[d],"PROGRESS"===f.nodeName?h.push(f.value=b):h.push(f.style.width=b+"%");return h}},totaluploadprogress:j,sending:j,sendingmultiple:j,success:function(a){if(a.previewElement)return a.previewElement.classList.add("dz-success")},successmultiple:j,canceled:function(a){return this.emit("error",a,"Upload canceled.")},canceledmultiple:j,complete:function(a){if(a._removeLink&&(a._removeLink.textContent=this.options.dictRemoveFile),a.previewElement)return a.previewElement.classList.add("dz-complete")},completemultiple:j,maxfilesexceeded:j,maxfilesreached:j,queuecomplete:j,addedfiles:j},c=function(){var a,b,c,d,e,f,g;for(f=arguments[0],e=2<=arguments.length?l.call(arguments,1):[],a=0,c=e.length;a<c;a++){d=e[a];for(b in d)g=d[b],f[b]=g}return f},b.prototype.getAcceptedFiles=function(){var a,b,c,d,e;for(d=this.files,e=[],b=0,c=d.length;b<c;b++)a=d[b],a.accepted&&e.push(a);return e},b.prototype.getRejectedFiles=function(){var a,b,c,d,e;for(d=this.files,e=[],b=0,c=d.length;b<c;b++)a=d[b],a.accepted||e.push(a);return e},b.prototype.getFilesWithStatus=function(a){var b,c,d,e,f;for(e=this.files,f=[],c=0,d=e.length;c<d;c++)b=e[c],b.status===a&&f.push(b);return f},b.prototype.getQueuedFiles=function(){return this.getFilesWithStatus(b.QUEUED)},b.prototype.getUploadingFiles=function(){return this.getFilesWithStatus(b.UPLOADING)},b.prototype.getAddedFiles=function(){return this.getFilesWithStatus(b.ADDED)},b.prototype.getActiveFiles=function(){var a,c,d,e,f;for(e=this.files,f=[],c=0,d=e.length;c<d;c++)a=e[c],a.status!==b.UPLOADING&&a.status!==b.QUEUED||f.push(a);return f},b.prototype.init=function(){var a,c,d,e,f,g,h;for("form"===this.element.tagName&&this.element.setAttribute("enctype","multipart/form-data"),this.element.classList.contains("dropzone")&&!this.element.querySelector(".dz-message")&&this.element.appendChild(b.createElement('<div class="dz-default dz-message"><span>'+this.options.dictDefaultMessage+"</span></div>")),this.clickableElements.length&&(h=function(a){return function(){return a.hiddenFileInput&&a.hiddenFileInput.parentNode.removeChild(a.hiddenFileInput),a.hiddenFileInput=document.createElement("input"),a.hiddenFileInput.setAttribute("type","file"),(null==a.options.maxFiles||a.options.maxFiles>1)&&a.hiddenFileInput.setAttribute("multiple","multiple"),a.hiddenFileInput.className="dz-hidden-input",null!=a.options.acceptedFiles&&a.hiddenFileInput.setAttribute("accept",a.options.acceptedFiles),null!=a.options.capture&&a.hiddenFileInput.setAttribute("capture",a.options.capture),a.hiddenFileInput.style.visibility="hidden",a.hiddenFileInput.style.position="absolute",a.hiddenFileInput.style.top="0",a.hiddenFileInput.style.left="0",a.hiddenFileInput.style.height="0",a.hiddenFileInput.style.width="0",document.querySelector(a.options.hiddenInputContainer).appendChild(a.hiddenFileInput),a.hiddenFileInput.addEventListener("change",function(){var b,c,d,e;if(c=a.hiddenFileInput.files,c.length)for(d=0,e=c.length;d<e;d++)b=c[d],a.addFile(b);return a.emit("addedfiles",c),h()})}}(this))(),this.URL=null!=(f=window.URL)?f:window.webkitURL,g=this.events,c=0,d=g.length;c<d;c++)a=g[c],this.on(a,this.options[a]);return this.on("uploadprogress",function(a){return function(){return a.updateTotalUploadProgress()}}(this)),this.on("removedfile",function(a){return function(){return a.updateTotalUploadProgress()}}(this)),this.on("canceled",function(a){return function(b){return a.emit("complete",b)}}(this)),this.on("complete",function(a){return function(b){if(0===a.getAddedFiles().length&&0===a.getUploadingFiles().length&&0===a.getQueuedFiles().length)return setTimeout(function(){return a.emit("queuecomplete")},0)}}(this)),e=function(a){return a.stopPropagation(),a.preventDefault?a.preventDefault():a.returnValue=!1},this.listeners=[{element:this.element,events:{dragstart:function(a){return function(b){return a.emit("dragstart",b)}}(this),dragenter:function(a){return function(b){return e(b),a.emit("dragenter",b)}}(this),dragover:function(a){return function(b){var c;try{c=b.dataTransfer.effectAllowed}catch(a){}return b.dataTransfer.dropEffect="move"===c||"linkMove"===c?"move":"copy",e(b),a.emit("dragover",b)}}(this),dragleave:function(a){return function(b){return a.emit("dragleave",b)}}(this),drop:function(a){return function(b){return e(b),a.drop(b)}}(this),dragend:function(a){return function(b){return a.emit("dragend",b)}}(this)}}],this.clickableElements.forEach(function(a){return function(c){return a.listeners.push({element:c,events:{click:function(d){return(c!==a.element||d.target===a.element||b.elementInside(d.target,a.element.querySelector(".dz-message")))&&a.hiddenFileInput.click(),!0}}})}}(this)),this.enable(),this.options.init.call(this)},b.prototype.destroy=function(){var a;return this.disable(),this.removeAllFiles(!0),(null!=(a=this.hiddenFileInput)?a.parentNode:void 0)&&(this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput),this.hiddenFileInput=null),delete this.element.dropzone,b.instances.splice(b.instances.indexOf(this),1)},b.prototype.updateTotalUploadProgress=function(){var a,b,c,d,e,f,g,h;if(g=0,f=0,a=this.getActiveFiles(),a.length){for(e=this.getActiveFiles(),c=0,d=e.length;c<d;c++)b=e[c],g+=b.upload.bytesSent,f+=b.upload.total;h=100*g/f}else h=100;return this.emit("totaluploadprogress",h,f,g)},b.prototype._getParamName=function(a){return"function"==typeof this.options.paramName?this.options.paramName(a):""+this.options.paramName+(this.options.uploadMultiple?"["+a+"]":"")},b.prototype._renameFile=function(a){return"function"!=typeof this.options.renameFile?a.name:this.options.renameFile(a)},b.prototype.getFallbackForm=function(){var a,c,d,e;return(a=this.getExistingFallback())?a:(d='<div class="dz-fallback">',this.options.dictFallbackText&&(d+="<p>"+this.options.dictFallbackText+"</p>"),d+='<input type="file" name="'+this._getParamName(0)+'" '+(this.options.uploadMultiple?'multiple="multiple"':void 0)+' /><input type="submit" value="Upload!"></div>',c=b.createElement(d),"FORM"!==this.element.tagName?(e=b.createElement('<form action="'+this.options.url+'" enctype="multipart/form-data" method="'+this.options.method+'"></form>'),e.appendChild(c)):(this.element.setAttribute("enctype","multipart/form-data"),this.element.setAttribute("method",this.options.method)),null!=e?e:c)},b.prototype.getExistingFallback=function(){var a,b,c,d,e,f;for(b=function(a){var b,c,d;for(c=0,d=a.length;c<d;c++)if(b=a[c],/(^| )fallback($| )/.test(b.className))return b},e=["div","form"],c=0,d=e.length;c<d;c++)if(f=e[c],a=b(this.element.getElementsByTagName(f)))return a},b.prototype.setupEventListeners=function(){var a,b,c,d,e,f,g;for(f=this.listeners,g=[],c=0,d=f.length;c<d;c++)a=f[c],g.push(function(){var c,d;c=a.events,d=[];for(b in c)e=c[b],d.push(a.element.addEventListener(b,e,!1));return d}());return g},b.prototype.removeEventListeners=function(){var a,b,c,d,e,f,g;for(f=this.listeners,g=[],c=0,d=f.length;c<d;c++)a=f[c],g.push(function(){var c,d;c=a.events,d=[];for(b in c)e=c[b],d.push(a.element.removeEventListener(b,e,!1));return d}());return g},b.prototype.disable=function(){var a,b,c,d,e;for(this.clickableElements.forEach(function(a){return a.classList.remove("dz-clickable")}),this.removeEventListeners(),d=this.files,e=[],b=0,c=d.length;b<c;b++)a=d[b],e.push(this.cancelUpload(a));return e},b.prototype.enable=function(){return this.clickableElements.forEach(function(a){return a.classList.add("dz-clickable")}),this.setupEventListeners()},b.prototype.filesize=function(a){var b,c,d,e,f,g,h,i;if(f=0,g="b",a>0){for(i=["tb","gb","mb","kb","b"],c=d=0,e=i.length;d<e;c=++d)if(h=i[c],b=Math.pow(this.options.filesizeBase,4-c)/10,a>=b){f=a/Math.pow(this.options.filesizeBase,4-c),g=h;break}f=Math.round(10*f)/10}return"<strong>"+f+"</strong> "+this.options.dictFileSizeUnits[g]},b.prototype._updateMaxFilesReachedClass=function(){return null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(this.getAcceptedFiles().length===this.options.maxFiles&&this.emit("maxfilesreached",this.files),this.element.classList.add("dz-max-files-reached")):this.element.classList.remove("dz-max-files-reached")},b.prototype.drop=function(a){var b,c;a.dataTransfer&&(this.emit("drop",a),b=a.dataTransfer.files,this.emit("addedfiles",b),b.length&&(c=a.dataTransfer.items,c&&c.length&&null!=c[0].webkitGetAsEntry?this._addFilesFromItems(c):this.handleFiles(b)))},b.prototype.paste=function(a){var b,c;if(null!=(null!=a&&null!=(c=a.clipboardData)?c.items:void 0))return this.emit("paste",a),b=a.clipboardData.items,b.length?this._addFilesFromItems(b):void 0},b.prototype.handleFiles=function(a){var b,c,d,e;for(e=[],c=0,d=a.length;c<d;c++)b=a[c],e.push(this.addFile(b));return e},b.prototype._addFilesFromItems=function(a){var b,c,d,e,f;for(f=[],d=0,e=a.length;d<e;d++)c=a[d],null!=c.webkitGetAsEntry&&(b=c.webkitGetAsEntry())?b.isFile?f.push(this.addFile(c.getAsFile())):b.isDirectory?f.push(this._addFilesFromDirectory(b,b.name)):f.push(void 0):null!=c.getAsFile&&(null==c.kind||"file"===c.kind)?f.push(this.addFile(c.getAsFile())):f.push(void 0);return f},b.prototype._addFilesFromDirectory=function(a,b){var c,d,e;return c=a.createReader(),d=function(a){return"undefined"!=typeof console&&null!==console&&"function"==typeof console.log?console.log(a):void 0},(e=function(a){return function(){return c.readEntries(function(c){var d,f,g;if(c.length>0){for(f=0,g=c.length;f<g;f++)d=c[f],d.isFile?d.file(function(c){if(!a.options.ignoreHiddenFiles||"."!==c.name.substring(0,1))return c.fullPath=b+"/"+c.name,a.addFile(c)}):d.isDirectory&&a._addFilesFromDirectory(d,b+"/"+d.name);e()}return null},d)}}(this))()},b.prototype.accept=function(a,c){return a.size>1024*this.options.maxFilesize*1024?c(this.options.dictFileTooBig.replace("{{filesize}}",Math.round(a.size/1024/10.24)/100).replace("{{maxFilesize}}",this.options.maxFilesize)):b.isValidFile(a,this.options.acceptedFiles)?null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(c(this.options.dictMaxFilesExceeded.replace("{{maxFiles}}",this.options.maxFiles)),this.emit("maxfilesexceeded",a)):this.options.accept.call(this,a,c):c(this.options.dictInvalidFileType)},b.prototype.addFile=function(a){return a.upload={progress:0,total:a.size,bytesSent:0,filename:this._renameFile(a)},this.files.push(a),a.status=b.ADDED,this.emit("addedfile",a),this._enqueueThumbnail(a),this.accept(a,function(b){return function(c){return c?(a.accepted=!1,b._errorProcessing([a],c)):(a.accepted=!0,b.options.autoQueue&&b.enqueueFile(a)),b._updateMaxFilesReachedClass()}}(this))},b.prototype.enqueueFiles=function(a){var b,c,d;for(c=0,d=a.length;c<d;c++)b=a[c],this.enqueueFile(b);return null},b.prototype.enqueueFile=function(a){if(a.status!==b.ADDED||a.accepted!==!0)throw new Error("This file can't be queued because it has already been processed or was rejected.");if(a.status=b.QUEUED,this.options.autoProcessQueue)return setTimeout(function(a){return function(){return a.processQueue()}}(this),0)},b.prototype._thumbnailQueue=[],b.prototype._processingThumbnail=!1,b.prototype._enqueueThumbnail=function(a){if(this.options.createImageThumbnails&&a.type.match(/image.*/)&&a.size<=1024*this.options.maxThumbnailFilesize*1024)return this._thumbnailQueue.push(a),setTimeout(function(a){return function(){return a._processThumbnailQueue()}}(this),0)},b.prototype._processThumbnailQueue=function(){var a;if(!this._processingThumbnail&&0!==this._thumbnailQueue.length)return this._processingThumbnail=!0,a=this._thumbnailQueue.shift(),this.createThumbnail(a,this.options.thumbnailWidth,this.options.thumbnailHeight,this.options.thumbnailMethod,!0,function(b){return function(c){return b.emit("thumbnail",a,c),b._processingThumbnail=!1,b._processThumbnailQueue()}}(this))},b.prototype.removeFile=function(a){if(a.status===b.UPLOADING&&this.cancelUpload(a),this.files=k(this.files,a),this.emit("removedfile",a),0===this.files.length)return this.emit("reset")},b.prototype.removeAllFiles=function(a){var c,d,e,f;for(null==a&&(a=!1),f=this.files.slice(),d=0,e=f.length;d<e;d++)c=f[d],(c.status!==b.UPLOADING||a)&&this.removeFile(c);return null},b.prototype.resizeImage=function(a,c,d,f,g){return this.createThumbnail(a,c,d,f,!1,function(c){return function(d,f){var h,i;return null===f?g(a):(h=c.options.resizeMimeType,null==h&&(h=a.type),i=f.toDataURL(h,c.options.resizeQuality),"image/jpeg"!==h&&"image/jpg"!==h||(i=e.restore(a.dataURL,i)),g(b.dataURItoBlob(i)))}}(this))},b.prototype.createThumbnail=function(a,b,c,d,e,f){var g;return g=new FileReader,g.onload=function(h){return function(){return a.dataURL=g.result,"image/svg+xml"===a.type?void(null!=f&&f(g.result)):h.createThumbnailFromUrl(a,b,c,d,e,f)}}(this),g.readAsDataURL(a)},b.prototype.createThumbnailFromUrl=function(a,b,c,d,e,f,g){var h;return h=document.createElement("img"),g&&(h.crossOrigin=g),h.onload=function(g){return function(){var j;return j=function(a){return a(1)},"undefined"!=typeof EXIF&&null!==EXIF&&e&&(j=function(a){return EXIF.getData(h,function(){return a(EXIF.getTag(this,"Orientation"))})}),j(function(e){var j,k,l,m,n,o,p,q;switch(a.width=h.width,a.height=h.height,p=g.options.resize.call(g,a,b,c,d),j=document.createElement("canvas"),k=j.getContext("2d"),j.width=p.trgWidth,j.height=p.trgHeight,e>4&&(j.width=p.trgHeight,j.height=p.trgWidth),e){case 2:k.translate(j.width,0),k.scale(-1,1);break;case 3:k.translate(j.width,j.height),k.rotate(Math.PI);break;case 4:k.translate(0,j.height),k.scale(1,-1);break;case 5:k.rotate(.5*Math.PI),k.scale(1,-1);break;case 6:k.rotate(.5*Math.PI),k.translate(0,-j.height);break;case 7:k.rotate(.5*Math.PI),k.translate(j.width,-j.height),k.scale(-1,1);break;case 8:k.rotate(-.5*Math.PI),k.translate(-j.width,0)}if(i(k,h,null!=(l=p.srcX)?l:0,null!=(m=p.srcY)?m:0,p.srcWidth,p.srcHeight,null!=(n=p.trgX)?n:0,null!=(o=p.trgY)?o:0,p.trgWidth,p.trgHeight),q=j.toDataURL("image/png"),null!=f)return f(q,j)})}}(this),null!=f&&(h.onerror=f),h.src=a.dataURL},b.prototype.processQueue=function(){var a,b,c,d;if(b=this.options.parallelUploads,c=this.getUploadingFiles().length,a=c,!(c>=b)&&(d=this.getQueuedFiles(),d.length>0)){if(this.options.uploadMultiple)return this.processFiles(d.slice(0,b-c));for(;a<b;){if(!d.length)return;this.processFile(d.shift()),a++}}},b.prototype.processFile=function(a){return this.processFiles([a])},b.prototype.processFiles=function(a){var c,d,e;for(d=0,e=a.length;d<e;d++)c=a[d],c.processing=!0,c.status=b.UPLOADING,this.emit("processing",c);return this.options.uploadMultiple&&this.emit("processingmultiple",a),this.uploadFiles(a)},b.prototype._getFilesWithXhr=function(a){var b,c;return c=function(){var c,d,e,f;for(e=this.files,f=[],c=0,d=e.length;c<d;c++)b=e[c],b.xhr===a&&f.push(b);return f}.call(this)},b.prototype.cancelUpload=function(a){var c,d,e,f,g,h,i;if(a.status===b.UPLOADING){for(d=this._getFilesWithXhr(a.xhr),e=0,g=d.length;e<g;e++)c=d[e],c.status=b.CANCELED;for(a.xhr.abort(),f=0,h=d.length;f<h;f++)c=d[f],this.emit("canceled",c);this.options.uploadMultiple&&this.emit("canceledmultiple",d)}else(i=a.status)!==b.ADDED&&i!==b.QUEUED||(a.status=b.CANCELED,this.emit("canceled",a),this.options.uploadMultiple&&this.emit("canceledmultiple",[a]));if(this.options.autoProcessQueue)return this.processQueue()},f=function(){var a,b;return b=arguments[0],a=2<=arguments.length?l.call(arguments,1):[],"function"==typeof b?b.apply(this,a):b},b.prototype.uploadFile=function(a){return this.uploadFiles([a])},b.prototype.uploadFiles=function(a){var d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O;for(O=new XMLHttpRequest,q=0,u=a.length;q<u;q++)g=a[q],g.xhr=O;z=f(this.options.method,a),M=f(this.options.url,a),O.open(z,M,!0),O.timeout=f(this.options.timeout,a),O.withCredentials=!!this.options.withCredentials,J=null,i=function(b){return function(){var c,d,e;for(e=[],c=0,d=a.length;c<d;c++)g=a[c],e.push(b._errorProcessing(a,J||b.options.dictResponseError.replace("{{statusCode}}",O.status),O));return e}}(this),L=function(b){return function(c){var d,e,f,h,i,j,k,l,m;if(null!=c)for(l=100*c.loaded/c.total,e=0,h=a.length;e<h;e++)g=a[e],g.upload.progress=l,g.upload.total=c.total,g.upload.bytesSent=c.loaded;else{for(d=!0,l=100,f=0,i=a.length;f<i;f++)g=a[f],100===g.upload.progress&&g.upload.bytesSent===g.upload.total||(d=!1),g.upload.progress=l,g.upload.bytesSent=g.upload.total;if(d)return}for(m=[],k=0,j=a.length;k<j;k++)g=a[k],m.push(b.emit("uploadprogress",g,l,g.upload.bytesSent));return m}}(this),O.onload=function(c){return function(d){var e;if(a[0].status!==b.CANCELED&&4===O.readyState){if("arraybuffer"!==O.responseType&&"blob"!==O.responseType&&(J=O.responseText,O.getResponseHeader("content-type")&&~O.getResponseHeader("content-type").indexOf("application/json")))try{J=JSON.parse(J)}catch(a){d=a,J="Invalid JSON response from server."}return L(),200<=(e=O.status)&&e<300?c._finished(a,J,d):i()}}}(this),O.onerror=function(c){return function(){if(a[0].status!==b.CANCELED)return i()}}(this),C=null!=(D=O.upload)?D:O,C.onprogress=L,l={Accept:"application/json","Cache-Control":"no-cache","X-Requested-With":"XMLHttpRequest"},this.options.headers&&c(l,this.options.headers);for(j in l)k=l[j],k&&O.setRequestHeader(j,k);if(h=new FormData,this.options.params){E=this.options.params;for(s in E)N=E[s],h.append(s,N)}for(r=0,v=a.length;r<v;r++)g=a[r],this.emit("sending",g,O,h);if(this.options.uploadMultiple&&this.emit("sendingmultiple",a,O,h),"FORM"===this.element.tagName)for(F=this.element.querySelectorAll("input, textarea, select, button"),t=0,w=F.length;t<w;t++)if(n=F[t],o=n.getAttribute("name"),p=n.getAttribute("type"),"SELECT"===n.tagName&&n.hasAttribute("multiple"))for(G=n.options,y=0,x=G.length;y<x;y++)B=G[y],B.selected&&h.append(o,B.value);else(!p||"checkbox"!==(H=p.toLowerCase())&&"radio"!==H||n.checked)&&h.append(o,n.value);for(d=0,K=[],m=A=0,I=a.length-1;0<=I?A<=I:A>=I;m=0<=I?++A:--A)e=function(b){return function(c,e,f){return function(c){if(h.append(e,c,f),++d===a.length)return b.submitRequest(O,h,a)}}}(this),K.push(this.options.transformFile.call(this,a[m],e(a[m],this._getParamName(m),a[m].upload.filename)));return K},b.prototype.submitRequest=function(a,b,c){return a.send(b)},b.prototype._finished=function(a,c,d){var e,f,g;for(f=0,g=a.length;f<g;f++)e=a[f],e.status=b.SUCCESS,this.emit("success",e,c,d),this.emit("complete",e);if(this.options.uploadMultiple&&(this.emit("successmultiple",a,c,d),this.emit("completemultiple",a)),this.options.autoProcessQueue)return this.processQueue()},b.prototype._errorProcessing=function(a,c,d){var e,f,g;for(f=0,g=a.length;f<g;f++)e=a[f],e.status=b.ERROR,this.emit("error",e,c,d),this.emit("complete",e);if(this.options.uploadMultiple&&(this.emit("errormultiple",a,c,d),this.emit("completemultiple",a)),this.options.autoProcessQueue)return this.processQueue()},b}(d),c.version="5.1.1",c.options={},c.optionsForElement=function(a){return a.getAttribute("id")?c.options[f(a.getAttribute("id"))]:void 0},c.instances=[],c.forElement=function(a){if("string"==typeof a&&(a=document.querySelector(a)),null==(null!=a?a.dropzone:void 0))throw new Error("No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.");return a.dropzone},c.autoDiscover=!0,c.discover=function(){var a,b,d,e,f,g;for(document.querySelectorAll?d=document.querySelectorAll(".dropzone"):(d=[],a=function(a){var b,c,e,f;for(f=[],c=0,e=a.length;c<e;c++)b=a[c],/(^| )dropzone($| )/.test(b.className)?f.push(d.push(b)):f.push(void 0);return f},a(document.getElementsByTagName("div")),a(document.getElementsByTagName("form"))),
+g=[],e=0,f=d.length;e<f;e++)b=d[e],c.optionsForElement(b)!==!1?g.push(new c(b)):g.push(void 0);return g},c.blacklistedBrowsers=[/opera.*Macintosh.*version\/12/i],c.isBrowserSupported=function(){var a,b,d,e,f;if(a=!0,window.File&&window.FileReader&&window.FileList&&window.Blob&&window.FormData&&document.querySelector)if("classList"in document.createElement("a"))for(e=c.blacklistedBrowsers,b=0,d=e.length;b<d;b++)f=e[b],f.test(navigator.userAgent)&&(a=!1);else a=!1;else a=!1;return a},c.dataURItoBlob=function(a){var b,c,d,e,f,g,h;for(c=atob(a.split(",")[1]),g=a.split(",")[0].split(":")[1].split(";")[0],b=new ArrayBuffer(c.length),e=new Uint8Array(b),d=f=0,h=c.length;0<=h?f<=h:f>=h;d=0<=h?++f:--f)e[d]=c.charCodeAt(d);return new Blob([b],{type:g})},k=function(a,b){var c,d,e,f;for(f=[],d=0,e=a.length;d<e;d++)c=a[d],c!==b&&f.push(c);return f},f=function(a){return a.replace(/[\-_](\w)/g,function(a){return a.charAt(1).toUpperCase()})},c.createElement=function(a){var b;return b=document.createElement("div"),b.innerHTML=a,b.childNodes[0]},c.elementInside=function(a,b){if(a===b)return!0;for(;a=a.parentNode;)if(a===b)return!0;return!1},c.getElement=function(a,b){var c;if("string"==typeof a?c=document.querySelector(a):null!=a.nodeType&&(c=a),null==c)throw new Error("Invalid `"+b+"` option provided. Please provide a CSS selector or a plain HTML element.");return c},c.getElements=function(a,b){var c,d,e,f,g,h,i,j;if(a instanceof Array){e=[];try{for(f=0,h=a.length;f<h;f++)d=a[f],e.push(this.getElement(d,b))}catch(a){c=a,e=null}}else if("string"==typeof a)for(e=[],j=document.querySelectorAll(a),g=0,i=j.length;g<i;g++)d=j[g],e.push(d);else null!=a.nodeType&&(e=[a]);if(null==e||!e.length)throw new Error("Invalid `"+b+"` option provided. Please provide a CSS selector, a plain HTML element or a list of those.");return e},c.confirm=function(a,b,c){return window.confirm(a)?b():null!=c?c():void 0},c.isValidFile=function(a,b){var c,d,e,f,g;if(!b)return!0;for(b=b.split(","),f=a.type,c=f.replace(/\/.*$/,""),d=0,e=b.length;d<e;d++)if(g=b[d],g=g.trim(),"."===g.charAt(0)){if(a.name.toLowerCase().indexOf(g.toLowerCase(),a.name.length-g.length)!==-1)return!0}else if(/\/\*$/.test(g)){if(c===g.replace(/\/.*$/,""))return!0}else if(f===g)return!0;return!1},"undefined"!=typeof a&&null!==a&&(a.fn.dropzone=function(a){return this.each(function(){return new c(this,a)})}),"undefined"!=typeof b&&null!==b?b.exports=c:window.Dropzone=c,c.ADDED="added",c.QUEUED="queued",c.ACCEPTED=c.QUEUED,c.UPLOADING="uploading",c.PROCESSING=c.UPLOADING,c.CANCELED="canceled",c.ERROR="error",c.SUCCESS="success",h=function(a){var b,c,d,e,f,g,h,i,j,k;for(h=a.naturalWidth,g=a.naturalHeight,c=document.createElement("canvas"),c.width=1,c.height=g,d=c.getContext("2d"),d.drawImage(a,0,0),e=d.getImageData(1,0,1,g).data,k=0,f=g,i=g;i>k;)b=e[4*(i-1)+3],0===b?f=i:k=i,i=f+k>>1;return j=i/g,0===j?1:j},i=function(a,b,c,d,e,f,g,i,j,k){var l;return l=h(b),a.drawImage(b,c,d,e,f,g,i,j,k/l)},e=function(){function a(){}return a.KEY_STR="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",a.encode64=function(a){var b,c,d,e,f,g,h,i,j;for(j="",b=void 0,c=void 0,d="",e=void 0,f=void 0,g=void 0,h="",i=0;;)if(b=a[i++],c=a[i++],d=a[i++],e=b>>2,f=(3&b)<<4|c>>4,g=(15&c)<<2|d>>6,h=63&d,isNaN(c)?g=h=64:isNaN(d)&&(h=64),j=j+this.KEY_STR.charAt(e)+this.KEY_STR.charAt(f)+this.KEY_STR.charAt(g)+this.KEY_STR.charAt(h),b=c=d="",e=f=g=h="",!(i<a.length))break;return j},a.restore=function(a,b){var c,d,e;return a.match("data:image/jpeg;base64,")?(d=this.decode64(a.replace("data:image/jpeg;base64,","")),e=this.slice2Segments(d),c=this.exifManipulation(b,e),"data:image/jpeg;base64,"+this.encode64(c)):b},a.exifManipulation=function(a,b){var c,d,e;return d=this.getExifArray(b),e=this.insertExif(a,d),c=new Uint8Array(e)},a.getExifArray=function(a){var b,c;for(b=void 0,c=0;c<a.length;){if(b=a[c],255===b[0]&225===b[1])return b;c++}return[]},a.insertExif=function(a,b){var c,d,e,f,g,h;return f=a.replace("data:image/jpeg;base64,",""),e=this.decode64(f),h=e.indexOf(255,3),g=e.slice(0,h),d=e.slice(h),c=g,c=c.concat(b),c=c.concat(d)},a.slice2Segments=function(a){var b,c,d,e,f;for(c=0,f=[];;){if(255===a[c]&218===a[c+1])break;if(255===a[c]&216===a[c+1]?c+=2:(d=256*a[c+2]+a[c+3],b=c+d+2,e=a.slice(c,b),f.push(e),c=b),c>a.length)break}return f},a.decode64=function(a){var b,c,d,e,f,g,h,i,j,k,l;for(l="",d=void 0,e=void 0,f="",g=void 0,h=void 0,i=void 0,j="",k=0,c=[],b=/[^A-Za-z0-9\+\/\=]/g,b.exec(a)&&console.warning("There were invalid base64 characters in the input text.\nValid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\nExpect errors in decoding."),a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");;)if(g=this.KEY_STR.indexOf(a.charAt(k++)),h=this.KEY_STR.indexOf(a.charAt(k++)),i=this.KEY_STR.indexOf(a.charAt(k++)),j=this.KEY_STR.indexOf(a.charAt(k++)),d=g<<2|h>>4,e=(15&h)<<4|i>>2,f=(3&i)<<6|j,c.push(d),64!==i&&c.push(e),64!==j&&c.push(f),d=e=f="",g=h=i=j="",!(k<a.length))break;return c},a}(),g=function(a,b){var c,d,e,f,g,h,i,j,k;if(e=!1,k=!0,d=a.document,j=d.documentElement,c=d.addEventListener?"addEventListener":"attachEvent",i=d.addEventListener?"removeEventListener":"detachEvent",h=d.addEventListener?"":"on",f=function(c){if("readystatechange"!==c.type||"complete"===d.readyState)return("load"===c.type?a:d)[i](h+c.type,f,!1),!e&&(e=!0)?b.call(a,c.type||c):void 0},g=function(){var a;try{j.doScroll("left")}catch(b){return a=b,void setTimeout(g,50)}return f("poll")},"complete"!==d.readyState){if(d.createEventObject&&j.doScroll){try{k=!a.frameElement}catch(a){}k&&g()}return d[c](h+"DOMContentLoaded",f,!1),d[c](h+"readystatechange",f,!1),a[c](h+"load",f,!1)}},c._autoDiscoverFunction=function(){if(c.autoDiscover)return c.discover()},g(window,c._autoDiscoverFunction)}.call(this),b.exports});
\ No newline at end of file
diff --git a/vendor/enyo/dropzone/dist/min/dropzone.min.css b/vendor/enyo/dropzone/dist/min/dropzone.min.css
new file mode 100644
index 0000000000..d04515e270
--- /dev/null
+++ b/vendor/enyo/dropzone/dist/min/dropzone.min.css
@@ -0,0 +1 @@
+@-webkit-keyframes passing-through{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%, 70%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}100%{opacity:0;-webkit-transform:translateY(-40px);-moz-transform:translateY(-40px);-ms-transform:translateY(-40px);-o-transform:translateY(-40px);transform:translateY(-40px)}}@-moz-keyframes passing-through{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%, 70%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}100%{opacity:0;-webkit-transform:translateY(-40px);-moz-transform:translateY(-40px);-ms-transform:translateY(-40px);-o-transform:translateY(-40px);transform:translateY(-40px)}}@keyframes passing-through{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%, 70%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}100%{opacity:0;-webkit-transform:translateY(-40px);-moz-transform:translateY(-40px);-ms-transform:translateY(-40px);-o-transform:translateY(-40px);transform:translateY(-40px)}}@-webkit-keyframes slide-in{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}}@-moz-keyframes slide-in{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}}@keyframes slide-in{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}}@-webkit-keyframes pulse{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}10%{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-ms-transform:scale(1.1);-o-transform:scale(1.1);transform:scale(1.1)}20%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}@-moz-keyframes pulse{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}10%{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-ms-transform:scale(1.1);-o-transform:scale(1.1);transform:scale(1.1)}20%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}@keyframes pulse{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}10%{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-ms-transform:scale(1.1);-o-transform:scale(1.1);transform:scale(1.1)}20%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}.dropzone,.dropzone *{box-sizing:border-box}.dropzone{min-height:150px;border:2px solid rgba(0,0,0,0.3);background:white;padding:20px 20px}.dropzone.dz-clickable{cursor:pointer}.dropzone.dz-clickable *{cursor:default}.dropzone.dz-clickable .dz-message,.dropzone.dz-clickable .dz-message *{cursor:pointer}.dropzone.dz-started .dz-message{display:none}.dropzone.dz-drag-hover{border-style:solid}.dropzone.dz-drag-hover .dz-message{opacity:0.5}.dropzone .dz-message{text-align:center;margin:2em 0}.dropzone .dz-preview{position:relative;display:inline-block;vertical-align:top;margin:16px;min-height:100px}.dropzone .dz-preview:hover{z-index:1000}.dropzone .dz-preview:hover .dz-details{opacity:1}.dropzone .dz-preview.dz-file-preview .dz-image{border-radius:20px;background:#999;background:linear-gradient(to bottom, #eee, #ddd)}.dropzone .dz-preview.dz-file-preview .dz-details{opacity:1}.dropzone .dz-preview.dz-image-preview{background:white}.dropzone .dz-preview.dz-image-preview .dz-details{-webkit-transition:opacity 0.2s linear;-moz-transition:opacity 0.2s linear;-ms-transition:opacity 0.2s linear;-o-transition:opacity 0.2s linear;transition:opacity 0.2s linear}.dropzone .dz-preview .dz-remove{font-size:14px;text-align:center;display:block;cursor:pointer;border:none}.dropzone .dz-preview .dz-remove:hover{text-decoration:underline}.dropzone .dz-preview:hover .dz-details{opacity:1}.dropzone .dz-preview .dz-details{z-index:20;position:absolute;top:0;left:0;opacity:0;font-size:13px;min-width:100%;max-width:100%;padding:2em 1em;text-align:center;color:rgba(0,0,0,0.9);line-height:150%}.dropzone .dz-preview .dz-details .dz-size{margin-bottom:1em;font-size:16px}.dropzone .dz-preview .dz-details .dz-filename{white-space:nowrap}.dropzone .dz-preview .dz-details .dz-filename:hover span{border:1px solid rgba(200,200,200,0.8);background-color:rgba(255,255,255,0.8)}.dropzone .dz-preview .dz-details .dz-filename:not(:hover){overflow:hidden;text-overflow:ellipsis}.dropzone .dz-preview .dz-details .dz-filename:not(:hover) span{border:1px solid transparent}.dropzone .dz-preview .dz-details .dz-filename span,.dropzone .dz-preview .dz-details .dz-size span{background-color:rgba(255,255,255,0.4);padding:0 0.4em;border-radius:3px}.dropzone .dz-preview:hover .dz-image img{-webkit-transform:scale(1.05, 1.05);-moz-transform:scale(1.05, 1.05);-ms-transform:scale(1.05, 1.05);-o-transform:scale(1.05, 1.05);transform:scale(1.05, 1.05);-webkit-filter:blur(8px);filter:blur(8px)}.dropzone .dz-preview .dz-image{border-radius:20px;overflow:hidden;width:120px;height:120px;position:relative;display:block;z-index:10}.dropzone .dz-preview .dz-image img{display:block}.dropzone .dz-preview.dz-success .dz-success-mark{-webkit-animation:passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);-moz-animation:passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);-ms-animation:passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);-o-animation:passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);animation:passing-through 3s cubic-bezier(0.77, 0, 0.175, 1)}.dropzone .dz-preview.dz-error .dz-error-mark{opacity:1;-webkit-animation:slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);-moz-animation:slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);-ms-animation:slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);-o-animation:slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);animation:slide-in 3s cubic-bezier(0.77, 0, 0.175, 1)}.dropzone .dz-preview .dz-success-mark,.dropzone .dz-preview .dz-error-mark{pointer-events:none;opacity:0;z-index:500;position:absolute;display:block;top:50%;left:50%;margin-left:-27px;margin-top:-27px}.dropzone .dz-preview .dz-success-mark svg,.dropzone .dz-preview .dz-error-mark svg{display:block;width:54px;height:54px}.dropzone .dz-preview.dz-processing .dz-progress{opacity:1;-webkit-transition:all 0.2s linear;-moz-transition:all 0.2s linear;-ms-transition:all 0.2s linear;-o-transition:all 0.2s linear;transition:all 0.2s linear}.dropzone .dz-preview.dz-complete .dz-progress{opacity:0;-webkit-transition:opacity 0.4s ease-in;-moz-transition:opacity 0.4s ease-in;-ms-transition:opacity 0.4s ease-in;-o-transition:opacity 0.4s ease-in;transition:opacity 0.4s ease-in}.dropzone .dz-preview:not(.dz-processing) .dz-progress{-webkit-animation:pulse 6s ease infinite;-moz-animation:pulse 6s ease infinite;-ms-animation:pulse 6s ease infinite;-o-animation:pulse 6s ease infinite;animation:pulse 6s ease infinite}.dropzone .dz-preview .dz-progress{opacity:1;z-index:1000;pointer-events:none;position:absolute;height:16px;left:50%;top:50%;margin-top:-8px;width:80px;margin-left:-40px;background:rgba(255,255,255,0.9);-webkit-transform:scale(1);border-radius:8px;overflow:hidden}.dropzone .dz-preview .dz-progress .dz-upload{background:#333;background:linear-gradient(to bottom, #666, #444);position:absolute;top:0;left:0;bottom:0;width:0;-webkit-transition:width 300ms ease-in-out;-moz-transition:width 300ms ease-in-out;-ms-transition:width 300ms ease-in-out;-o-transition:width 300ms ease-in-out;transition:width 300ms ease-in-out}.dropzone .dz-preview.dz-error .dz-error-message{display:block}.dropzone .dz-preview.dz-error:hover .dz-error-message{opacity:1;pointer-events:auto}.dropzone .dz-preview .dz-error-message{pointer-events:none;z-index:1000;position:absolute;display:block;display:none;opacity:0;-webkit-transition:opacity 0.3s ease;-moz-transition:opacity 0.3s ease;-ms-transition:opacity 0.3s ease;-o-transition:opacity 0.3s ease;transition:opacity 0.3s ease;border-radius:8px;font-size:13px;top:130px;left:-10px;width:140px;background:#be2626;background:linear-gradient(to bottom, #be2626, #a92222);padding:0.5em 1.2em;color:white}.dropzone .dz-preview .dz-error-message:after{content:'';position:absolute;top:-6px;left:64px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #be2626}
diff --git a/vendor/enyo/dropzone/dist/min/dropzone.min.js b/vendor/enyo/dropzone/dist/min/dropzone.min.js
new file mode 100644
index 0000000000..2cf568ea93
--- /dev/null
+++ b/vendor/enyo/dropzone/dist/min/dropzone.min.js
@@ -0,0 +1,2 @@
+(function(){var a,b,c,d,e,f,g,h,i,j=[].slice,k=function(a,b){function c(){this.constructor=a}for(var d in b)l.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},l={}.hasOwnProperty;h=function(){},b=function(){function a(){}return a.prototype.addEventListener=a.prototype.on,a.prototype.on=function(a,b){return this._callbacks=this._callbacks||{},this._callbacks[a]||(this._callbacks[a]=[]),this._callbacks[a].push(b),this},a.prototype.emit=function(){var a,b,c,d,e,f;if(d=arguments[0],a=2<=arguments.length?j.call(arguments,1):[],this._callbacks=this._callbacks||{},c=this._callbacks[d])for(e=0,f=c.length;e<f;e++)b=c[e],b.apply(this,a);return this},a.prototype.removeListener=a.prototype.off,a.prototype.removeAllListeners=a.prototype.off,a.prototype.removeEventListener=a.prototype.off,a.prototype.off=function(a,b){var c,d,e,f,g;if(!this._callbacks||0===arguments.length)return this._callbacks={},this;if(d=this._callbacks[a],!d)return this;if(1===arguments.length)return delete this._callbacks[a],this;for(e=f=0,g=d.length;f<g;e=++f)if(c=d[e],c===b){d.splice(e,1);break}return this},a}(),a=function(a){function d(a,b){var c,f,g;if(this.element=a,this.version=d.version,this.defaultOptions.previewTemplate=this.defaultOptions.previewTemplate.replace(/\n*/g,""),this.clickableElements=[],this.listeners=[],this.files=[],"string"==typeof this.element&&(this.element=document.querySelector(this.element)),!this.element||null==this.element.nodeType)throw new Error("Invalid dropzone element.");if(this.element.dropzone)throw new Error("Dropzone already attached.");if(d.instances.push(this),this.element.dropzone=this,c=null!=(g=d.optionsForElement(this.element))?g:{},this.options=e({},this.defaultOptions,c,null!=b?b:{}),this.options.forceFallback||!d.isBrowserSupported())return this.options.fallback.call(this);if(null==this.options.url&&(this.options.url=this.element.getAttribute("action")),!this.options.url)throw new Error("No URL provided.");if(this.options.acceptedFiles&&this.options.acceptedMimeTypes)throw new Error("You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.");this.options.acceptedMimeTypes&&(this.options.acceptedFiles=this.options.acceptedMimeTypes,delete this.options.acceptedMimeTypes),null!=this.options.renameFilename&&(this.options.renameFile=function(a){return function(b){return a.options.renameFilename.call(a,b.name,b)}}(this)),this.options.method=this.options.method.toUpperCase(),(f=this.getExistingFallback())&&f.parentNode&&f.parentNode.removeChild(f),this.options.previewsContainer!==!1&&(this.options.previewsContainer?this.previewsContainer=d.getElement(this.options.previewsContainer,"previewsContainer"):this.previewsContainer=this.element),this.options.clickable&&(this.options.clickable===!0?this.clickableElements=[this.element]:this.clickableElements=d.getElements(this.options.clickable,"clickable")),this.init()}var e,f;return k(d,a),d.prototype.Emitter=b,d.prototype.events=["drop","dragstart","dragend","dragenter","dragover","dragleave","addedfile","addedfiles","removedfile","thumbnail","error","errormultiple","processing","processingmultiple","uploadprogress","totaluploadprogress","sending","sendingmultiple","success","successmultiple","canceled","canceledmultiple","complete","completemultiple","reset","maxfilesexceeded","maxfilesreached","queuecomplete"],d.prototype.defaultOptions={url:null,method:"post",withCredentials:!1,timeout:3e4,parallelUploads:2,uploadMultiple:!1,maxFilesize:256,paramName:"file",createImageThumbnails:!0,maxThumbnailFilesize:10,thumbnailWidth:120,thumbnailHeight:120,thumbnailMethod:"crop",resizeWidth:null,resizeHeight:null,resizeMimeType:null,resizeQuality:.8,resizeMethod:"contain",filesizeBase:1e3,maxFiles:null,params:{},headers:null,clickable:!0,ignoreHiddenFiles:!0,acceptedFiles:null,acceptedMimeTypes:null,autoProcessQueue:!0,autoQueue:!0,addRemoveLinks:!1,previewsContainer:null,hiddenInputContainer:"body",capture:null,renameFilename:null,renameFile:null,forceFallback:!1,dictDefaultMessage:"Drop files here to upload",dictFallbackMessage:"Your browser does not support drag'n'drop file uploads.",dictFallbackText:"Please use the fallback form below to upload your files like in the olden days.",dictFileTooBig:"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.",dictInvalidFileType:"You can't upload files of this type.",dictResponseError:"Server responded with {{statusCode}} code.",dictCancelUpload:"Cancel upload",dictCancelUploadConfirmation:"Are you sure you want to cancel this upload?",dictRemoveFile:"Remove file",dictRemoveFileConfirmation:null,dictMaxFilesExceeded:"You can not upload any more files.",dictFileSizeUnits:{tb:"TB",gb:"GB",mb:"MB",kb:"KB",b:"b"},init:function(){return h},accept:function(a,b){return b()},fallback:function(){var a,b,c,e,f,g;for(this.element.className=this.element.className+" dz-browser-not-supported",f=this.element.getElementsByTagName("div"),b=0,c=f.length;b<c;b++)a=f[b],/(^| )dz-message($| )/.test(a.className)&&(e=a,a.className="dz-message");return e||(e=d.createElement('<div class="dz-message"><span></span></div>'),this.element.appendChild(e)),g=e.getElementsByTagName("span")[0],g&&(null!=g.textContent?g.textContent=this.options.dictFallbackMessage:null!=g.innerText&&(g.innerText=this.options.dictFallbackMessage)),this.element.appendChild(this.getFallbackForm())},resize:function(a,b,c,d){var e,f,g;if(e={srcX:0,srcY:0,srcWidth:a.width,srcHeight:a.height},f=a.width/a.height,null==b&&null==c?(b=e.srcWidth,c=e.srcHeight):null==b?b=c*f:null==c&&(c=b/f),b=Math.min(b,e.srcWidth),c=Math.min(c,e.srcHeight),g=b/c,e.srcWidth>b||e.srcHeight>c)if("crop"===d)f>g?(e.srcHeight=a.height,e.srcWidth=e.srcHeight*g):(e.srcWidth=a.width,e.srcHeight=e.srcWidth/g);else{if("contain"!==d)throw new Error("Unknown resizeMethod '"+d+"'");f>g?c=b/f:b=c*f}return e.srcX=(a.width-e.srcWidth)/2,e.srcY=(a.height-e.srcHeight)/2,e.trgWidth=b,e.trgHeight=c,e},transformFile:function(a,b){return(this.options.resizeWidth||this.options.resizeHeight)&&a.type.match(/image.*/)?this.resizeImage(a,this.options.resizeWidth,this.options.resizeHeight,this.options.resizeMethod,b):b(a)},previewTemplate:'<div class="dz-preview dz-file-preview">\n  <div class="dz-image"><img data-dz-thumbnail /></div>\n  <div class="dz-details">\n    <div class="dz-size"><span data-dz-size></span></div>\n    <div class="dz-filename"><span data-dz-name></span></div>\n  </div>\n  <div class="dz-progress"><span class="dz-upload" data-dz-uploadprogress></span></div>\n  <div class="dz-error-message"><span data-dz-errormessage></span></div>\n  <div class="dz-success-mark">\n    <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">\n      <title>Check</title>\n      <defs></defs>\n      <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">\n        <path d="M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" id="Oval-2" stroke-opacity="0.198794158" stroke="#747474" fill-opacity="0.816519475" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>\n      </g>\n    </svg>\n  </div>\n  <div class="dz-error-mark">\n    <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">\n      <title>Error</title>\n      <defs></defs>\n      <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">\n        <g id="Check-+-Oval-2" sketch:type="MSLayerGroup" stroke="#747474" stroke-opacity="0.198794158" fill="#FFFFFF" fill-opacity="0.816519475">\n          <path d="M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" id="Oval-2" sketch:type="MSShapeGroup"></path>\n        </g>\n      </g>\n    </svg>\n  </div>\n</div>',drop:function(a){return this.element.classList.remove("dz-drag-hover")},dragstart:h,dragend:function(a){return this.element.classList.remove("dz-drag-hover")},dragenter:function(a){return this.element.classList.add("dz-drag-hover")},dragover:function(a){return this.element.classList.add("dz-drag-hover")},dragleave:function(a){return this.element.classList.remove("dz-drag-hover")},paste:h,reset:function(){return this.element.classList.remove("dz-started")},addedfile:function(a){var b,c,e,f,g,h,i,j,k,l,m,n,o;if(this.element===this.previewsContainer&&this.element.classList.add("dz-started"),this.previewsContainer){for(a.previewElement=d.createElement(this.options.previewTemplate.trim()),a.previewTemplate=a.previewElement,this.previewsContainer.appendChild(a.previewElement),j=a.previewElement.querySelectorAll("[data-dz-name]"),b=0,f=j.length;b<f;b++)i=j[b],i.textContent=a.name;for(k=a.previewElement.querySelectorAll("[data-dz-size]"),c=0,g=k.length;c<g;c++)i=k[c],i.innerHTML=this.filesize(a.size);for(this.options.addRemoveLinks&&(a._removeLink=d.createElement('<a class="dz-remove" href="javascript:undefined;" data-dz-remove>'+this.options.dictRemoveFile+"</a>"),a.previewElement.appendChild(a._removeLink)),m=function(b){return function(c){return c.preventDefault(),c.stopPropagation(),a.status===d.UPLOADING?d.confirm(b.options.dictCancelUploadConfirmation,function(){return b.removeFile(a)}):b.options.dictRemoveFileConfirmation?d.confirm(b.options.dictRemoveFileConfirmation,function(){return b.removeFile(a)}):b.removeFile(a)}}(this),l=a.previewElement.querySelectorAll("[data-dz-remove]"),o=[],e=0,h=l.length;e<h;e++)n=l[e],o.push(n.addEventListener("click",m));return o}},removedfile:function(a){var b;return a.previewElement&&null!=(b=a.previewElement)&&b.parentNode.removeChild(a.previewElement),this._updateMaxFilesReachedClass()},thumbnail:function(a,b){var c,d,e,f;if(a.previewElement){for(a.previewElement.classList.remove("dz-file-preview"),e=a.previewElement.querySelectorAll("[data-dz-thumbnail]"),c=0,d=e.length;c<d;c++)f=e[c],f.alt=a.name,f.src=b;return setTimeout(function(b){return function(){return a.previewElement.classList.add("dz-image-preview")}}(this),1)}},error:function(a,b){var c,d,e,f,g;if(a.previewElement){for(a.previewElement.classList.add("dz-error"),"String"!=typeof b&&b.error&&(b=b.error),f=a.previewElement.querySelectorAll("[data-dz-errormessage]"),g=[],c=0,d=f.length;c<d;c++)e=f[c],g.push(e.textContent=b);return g}},errormultiple:h,processing:function(a){if(a.previewElement&&(a.previewElement.classList.add("dz-processing"),a._removeLink))return a._removeLink.textContent=this.options.dictCancelUpload},processingmultiple:h,uploadprogress:function(a,b,c){var d,e,f,g,h;if(a.previewElement){for(g=a.previewElement.querySelectorAll("[data-dz-uploadprogress]"),h=[],d=0,e=g.length;d<e;d++)f=g[d],"PROGRESS"===f.nodeName?h.push(f.value=b):h.push(f.style.width=b+"%");return h}},totaluploadprogress:h,sending:h,sendingmultiple:h,success:function(a){if(a.previewElement)return a.previewElement.classList.add("dz-success")},successmultiple:h,canceled:function(a){return this.emit("error",a,"Upload canceled.")},canceledmultiple:h,complete:function(a){if(a._removeLink&&(a._removeLink.textContent=this.options.dictRemoveFile),a.previewElement)return a.previewElement.classList.add("dz-complete")},completemultiple:h,maxfilesexceeded:h,maxfilesreached:h,queuecomplete:h,addedfiles:h},e=function(){var a,b,c,d,e,f,g;for(f=arguments[0],e=2<=arguments.length?j.call(arguments,1):[],a=0,c=e.length;a<c;a++){d=e[a];for(b in d)g=d[b],f[b]=g}return f},d.prototype.getAcceptedFiles=function(){var a,b,c,d,e;for(d=this.files,e=[],b=0,c=d.length;b<c;b++)a=d[b],a.accepted&&e.push(a);return e},d.prototype.getRejectedFiles=function(){var a,b,c,d,e;for(d=this.files,e=[],b=0,c=d.length;b<c;b++)a=d[b],a.accepted||e.push(a);return e},d.prototype.getFilesWithStatus=function(a){var b,c,d,e,f;for(e=this.files,f=[],c=0,d=e.length;c<d;c++)b=e[c],b.status===a&&f.push(b);return f},d.prototype.getQueuedFiles=function(){return this.getFilesWithStatus(d.QUEUED)},d.prototype.getUploadingFiles=function(){return this.getFilesWithStatus(d.UPLOADING)},d.prototype.getAddedFiles=function(){return this.getFilesWithStatus(d.ADDED)},d.prototype.getActiveFiles=function(){var a,b,c,e,f;for(e=this.files,f=[],b=0,c=e.length;b<c;b++)a=e[b],a.status!==d.UPLOADING&&a.status!==d.QUEUED||f.push(a);return f},d.prototype.init=function(){var a,b,c,e,f,g,h;for("form"===this.element.tagName&&this.element.setAttribute("enctype","multipart/form-data"),this.element.classList.contains("dropzone")&&!this.element.querySelector(".dz-message")&&this.element.appendChild(d.createElement('<div class="dz-default dz-message"><span>'+this.options.dictDefaultMessage+"</span></div>")),this.clickableElements.length&&(h=function(a){return function(){return a.hiddenFileInput&&a.hiddenFileInput.parentNode.removeChild(a.hiddenFileInput),a.hiddenFileInput=document.createElement("input"),a.hiddenFileInput.setAttribute("type","file"),(null==a.options.maxFiles||a.options.maxFiles>1)&&a.hiddenFileInput.setAttribute("multiple","multiple"),a.hiddenFileInput.className="dz-hidden-input",null!=a.options.acceptedFiles&&a.hiddenFileInput.setAttribute("accept",a.options.acceptedFiles),null!=a.options.capture&&a.hiddenFileInput.setAttribute("capture",a.options.capture),a.hiddenFileInput.style.visibility="hidden",a.hiddenFileInput.style.position="absolute",a.hiddenFileInput.style.top="0",a.hiddenFileInput.style.left="0",a.hiddenFileInput.style.height="0",a.hiddenFileInput.style.width="0",document.querySelector(a.options.hiddenInputContainer).appendChild(a.hiddenFileInput),a.hiddenFileInput.addEventListener("change",function(){var b,c,d,e;if(c=a.hiddenFileInput.files,c.length)for(d=0,e=c.length;d<e;d++)b=c[d],a.addFile(b);return a.emit("addedfiles",c),h()})}}(this))(),this.URL=null!=(f=window.URL)?f:window.webkitURL,g=this.events,b=0,c=g.length;b<c;b++)a=g[b],this.on(a,this.options[a]);return this.on("uploadprogress",function(a){return function(){return a.updateTotalUploadProgress()}}(this)),this.on("removedfile",function(a){return function(){return a.updateTotalUploadProgress()}}(this)),this.on("canceled",function(a){return function(b){return a.emit("complete",b)}}(this)),this.on("complete",function(a){return function(b){if(0===a.getAddedFiles().length&&0===a.getUploadingFiles().length&&0===a.getQueuedFiles().length)return setTimeout(function(){return a.emit("queuecomplete")},0)}}(this)),e=function(a){return a.stopPropagation(),a.preventDefault?a.preventDefault():a.returnValue=!1},this.listeners=[{element:this.element,events:{dragstart:function(a){return function(b){return a.emit("dragstart",b)}}(this),dragenter:function(a){return function(b){return e(b),a.emit("dragenter",b)}}(this),dragover:function(a){return function(b){var c;try{c=b.dataTransfer.effectAllowed}catch(a){}return b.dataTransfer.dropEffect="move"===c||"linkMove"===c?"move":"copy",e(b),a.emit("dragover",b)}}(this),dragleave:function(a){return function(b){return a.emit("dragleave",b)}}(this),drop:function(a){return function(b){return e(b),a.drop(b)}}(this),dragend:function(a){return function(b){return a.emit("dragend",b)}}(this)}}],this.clickableElements.forEach(function(a){return function(b){return a.listeners.push({element:b,events:{click:function(c){return(b!==a.element||c.target===a.element||d.elementInside(c.target,a.element.querySelector(".dz-message")))&&a.hiddenFileInput.click(),!0}}})}}(this)),this.enable(),this.options.init.call(this)},d.prototype.destroy=function(){var a;return this.disable(),this.removeAllFiles(!0),(null!=(a=this.hiddenFileInput)?a.parentNode:void 0)&&(this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput),this.hiddenFileInput=null),delete this.element.dropzone,d.instances.splice(d.instances.indexOf(this),1)},d.prototype.updateTotalUploadProgress=function(){var a,b,c,d,e,f,g,h;if(g=0,f=0,a=this.getActiveFiles(),a.length){for(e=this.getActiveFiles(),c=0,d=e.length;c<d;c++)b=e[c],g+=b.upload.bytesSent,f+=b.upload.total;h=100*g/f}else h=100;return this.emit("totaluploadprogress",h,f,g)},d.prototype._getParamName=function(a){return"function"==typeof this.options.paramName?this.options.paramName(a):""+this.options.paramName+(this.options.uploadMultiple?"["+a+"]":"")},d.prototype._renameFile=function(a){return"function"!=typeof this.options.renameFile?a.name:this.options.renameFile(a)},d.prototype.getFallbackForm=function(){var a,b,c,e;return(a=this.getExistingFallback())?a:(c='<div class="dz-fallback">',this.options.dictFallbackText&&(c+="<p>"+this.options.dictFallbackText+"</p>"),c+='<input type="file" name="'+this._getParamName(0)+'" '+(this.options.uploadMultiple?'multiple="multiple"':void 0)+' /><input type="submit" value="Upload!"></div>',b=d.createElement(c),"FORM"!==this.element.tagName?(e=d.createElement('<form action="'+this.options.url+'" enctype="multipart/form-data" method="'+this.options.method+'"></form>'),e.appendChild(b)):(this.element.setAttribute("enctype","multipart/form-data"),this.element.setAttribute("method",this.options.method)),null!=e?e:b)},d.prototype.getExistingFallback=function(){var a,b,c,d,e,f;for(b=function(a){var b,c,d;for(c=0,d=a.length;c<d;c++)if(b=a[c],/(^| )fallback($| )/.test(b.className))return b},e=["div","form"],c=0,d=e.length;c<d;c++)if(f=e[c],a=b(this.element.getElementsByTagName(f)))return a},d.prototype.setupEventListeners=function(){var a,b,c,d,e,f,g;for(f=this.listeners,g=[],c=0,d=f.length;c<d;c++)a=f[c],g.push(function(){var c,d;c=a.events,d=[];for(b in c)e=c[b],d.push(a.element.addEventListener(b,e,!1));return d}());return g},d.prototype.removeEventListeners=function(){var a,b,c,d,e,f,g;for(f=this.listeners,g=[],c=0,d=f.length;c<d;c++)a=f[c],g.push(function(){var c,d;c=a.events,d=[];for(b in c)e=c[b],d.push(a.element.removeEventListener(b,e,!1));return d}());return g},d.prototype.disable=function(){var a,b,c,d,e;for(this.clickableElements.forEach(function(a){return a.classList.remove("dz-clickable")}),this.removeEventListeners(),d=this.files,e=[],b=0,c=d.length;b<c;b++)a=d[b],e.push(this.cancelUpload(a));return e},d.prototype.enable=function(){return this.clickableElements.forEach(function(a){return a.classList.add("dz-clickable")}),this.setupEventListeners()},d.prototype.filesize=function(a){var b,c,d,e,f,g,h,i;if(f=0,g="b",a>0){for(i=["tb","gb","mb","kb","b"],c=d=0,e=i.length;d<e;c=++d)if(h=i[c],b=Math.pow(this.options.filesizeBase,4-c)/10,a>=b){f=a/Math.pow(this.options.filesizeBase,4-c),g=h;break}f=Math.round(10*f)/10}return"<strong>"+f+"</strong> "+this.options.dictFileSizeUnits[g]},d.prototype._updateMaxFilesReachedClass=function(){return null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(this.getAcceptedFiles().length===this.options.maxFiles&&this.emit("maxfilesreached",this.files),this.element.classList.add("dz-max-files-reached")):this.element.classList.remove("dz-max-files-reached")},d.prototype.drop=function(a){var b,c;a.dataTransfer&&(this.emit("drop",a),b=a.dataTransfer.files,this.emit("addedfiles",b),b.length&&(c=a.dataTransfer.items,c&&c.length&&null!=c[0].webkitGetAsEntry?this._addFilesFromItems(c):this.handleFiles(b)))},d.prototype.paste=function(a){var b,c;if(null!=(null!=a&&null!=(c=a.clipboardData)?c.items:void 0))return this.emit("paste",a),b=a.clipboardData.items,b.length?this._addFilesFromItems(b):void 0},d.prototype.handleFiles=function(a){var b,c,d,e;for(e=[],c=0,d=a.length;c<d;c++)b=a[c],e.push(this.addFile(b));return e},d.prototype._addFilesFromItems=function(a){var b,c,d,e,f;for(f=[],d=0,e=a.length;d<e;d++)c=a[d],null!=c.webkitGetAsEntry&&(b=c.webkitGetAsEntry())?b.isFile?f.push(this.addFile(c.getAsFile())):b.isDirectory?f.push(this._addFilesFromDirectory(b,b.name)):f.push(void 0):null!=c.getAsFile&&(null==c.kind||"file"===c.kind)?f.push(this.addFile(c.getAsFile())):f.push(void 0);return f},d.prototype._addFilesFromDirectory=function(a,b){var c,d,e;return c=a.createReader(),d=function(a){return"undefined"!=typeof console&&null!==console&&"function"==typeof console.log?console.log(a):void 0},(e=function(a){return function(){return c.readEntries(function(c){var d,f,g;if(c.length>0){for(f=0,g=c.length;f<g;f++)d=c[f],d.isFile?d.file(function(c){if(!a.options.ignoreHiddenFiles||"."!==c.name.substring(0,1))return c.fullPath=b+"/"+c.name,a.addFile(c)}):d.isDirectory&&a._addFilesFromDirectory(d,b+"/"+d.name);e()}return null},d)}}(this))()},d.prototype.accept=function(a,b){return a.size>1024*this.options.maxFilesize*1024?b(this.options.dictFileTooBig.replace("{{filesize}}",Math.round(a.size/1024/10.24)/100).replace("{{maxFilesize}}",this.options.maxFilesize)):d.isValidFile(a,this.options.acceptedFiles)?null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(b(this.options.dictMaxFilesExceeded.replace("{{maxFiles}}",this.options.maxFiles)),this.emit("maxfilesexceeded",a)):this.options.accept.call(this,a,b):b(this.options.dictInvalidFileType)},d.prototype.addFile=function(a){return a.upload={progress:0,total:a.size,bytesSent:0,filename:this._renameFile(a)},this.files.push(a),a.status=d.ADDED,this.emit("addedfile",a),this._enqueueThumbnail(a),this.accept(a,function(b){return function(c){return c?(a.accepted=!1,b._errorProcessing([a],c)):(a.accepted=!0,b.options.autoQueue&&b.enqueueFile(a)),b._updateMaxFilesReachedClass()}}(this))},d.prototype.enqueueFiles=function(a){var b,c,d;for(c=0,d=a.length;c<d;c++)b=a[c],this.enqueueFile(b);return null},d.prototype.enqueueFile=function(a){if(a.status!==d.ADDED||a.accepted!==!0)throw new Error("This file can't be queued because it has already been processed or was rejected.");if(a.status=d.QUEUED,this.options.autoProcessQueue)return setTimeout(function(a){return function(){return a.processQueue()}}(this),0)},d.prototype._thumbnailQueue=[],d.prototype._processingThumbnail=!1,d.prototype._enqueueThumbnail=function(a){if(this.options.createImageThumbnails&&a.type.match(/image.*/)&&a.size<=1024*this.options.maxThumbnailFilesize*1024)return this._thumbnailQueue.push(a),setTimeout(function(a){return function(){return a._processThumbnailQueue()}}(this),0)},d.prototype._processThumbnailQueue=function(){var a;if(!this._processingThumbnail&&0!==this._thumbnailQueue.length)return this._processingThumbnail=!0,a=this._thumbnailQueue.shift(),this.createThumbnail(a,this.options.thumbnailWidth,this.options.thumbnailHeight,this.options.thumbnailMethod,!0,function(b){return function(c){return b.emit("thumbnail",a,c),b._processingThumbnail=!1,b._processThumbnailQueue()}}(this))},d.prototype.removeFile=function(a){if(a.status===d.UPLOADING&&this.cancelUpload(a),this.files=i(this.files,a),this.emit("removedfile",a),0===this.files.length)return this.emit("reset")},d.prototype.removeAllFiles=function(a){var b,c,e,f;for(null==a&&(a=!1),f=this.files.slice(),c=0,e=f.length;c<e;c++)b=f[c],(b.status!==d.UPLOADING||a)&&this.removeFile(b);return null},d.prototype.resizeImage=function(a,b,e,f,g){return this.createThumbnail(a,b,e,f,!1,function(b){return function(e,f){var h,i;return null===f?g(a):(h=b.options.resizeMimeType,null==h&&(h=a.type),i=f.toDataURL(h,b.options.resizeQuality),"image/jpeg"!==h&&"image/jpg"!==h||(i=c.restore(a.dataURL,i)),g(d.dataURItoBlob(i)))}}(this))},d.prototype.createThumbnail=function(a,b,c,d,e,f){var g;return g=new FileReader,g.onload=function(h){return function(){return a.dataURL=g.result,"image/svg+xml"===a.type?void(null!=f&&f(g.result)):h.createThumbnailFromUrl(a,b,c,d,e,f)}}(this),g.readAsDataURL(a)},d.prototype.createThumbnailFromUrl=function(a,b,c,d,e,f,h){var i;return i=document.createElement("img"),h&&(i.crossOrigin=h),i.onload=function(h){return function(){var j;return j=function(a){return a(1)},"undefined"!=typeof EXIF&&null!==EXIF&&e&&(j=function(a){return EXIF.getData(i,function(){return a(EXIF.getTag(this,"Orientation"))})}),j(function(e){var j,k,l,m,n,o,p,q;switch(a.width=i.width,a.height=i.height,p=h.options.resize.call(h,a,b,c,d),j=document.createElement("canvas"),k=j.getContext("2d"),j.width=p.trgWidth,j.height=p.trgHeight,e>4&&(j.width=p.trgHeight,j.height=p.trgWidth),e){case 2:k.translate(j.width,0),k.scale(-1,1);break;case 3:k.translate(j.width,j.height),k.rotate(Math.PI);break;case 4:k.translate(0,j.height),k.scale(1,-1);break;case 5:k.rotate(.5*Math.PI),k.scale(1,-1);break;case 6:k.rotate(.5*Math.PI),k.translate(0,-j.height);break;case 7:k.rotate(.5*Math.PI),k.translate(j.width,-j.height),k.scale(-1,1);break;case 8:k.rotate(-.5*Math.PI),k.translate(-j.width,0)}if(g(k,i,null!=(l=p.srcX)?l:0,null!=(m=p.srcY)?m:0,p.srcWidth,p.srcHeight,null!=(n=p.trgX)?n:0,null!=(o=p.trgY)?o:0,p.trgWidth,p.trgHeight),q=j.toDataURL("image/png"),null!=f)return f(q,j)})}}(this),null!=f&&(i.onerror=f),i.src=a.dataURL},d.prototype.processQueue=function(){var a,b,c,d;if(b=this.options.parallelUploads,c=this.getUploadingFiles().length,a=c,!(c>=b)&&(d=this.getQueuedFiles(),d.length>0)){if(this.options.uploadMultiple)return this.processFiles(d.slice(0,b-c));for(;a<b;){if(!d.length)return;this.processFile(d.shift()),a++}}},d.prototype.processFile=function(a){return this.processFiles([a])},d.prototype.processFiles=function(a){var b,c,e;for(c=0,e=a.length;c<e;c++)b=a[c],b.processing=!0,b.status=d.UPLOADING,this.emit("processing",b);return this.options.uploadMultiple&&this.emit("processingmultiple",a),this.uploadFiles(a)},d.prototype._getFilesWithXhr=function(a){var b,c;return c=function(){var c,d,e,f;for(e=this.files,f=[],c=0,d=e.length;c<d;c++)b=e[c],b.xhr===a&&f.push(b);return f}.call(this)},d.prototype.cancelUpload=function(a){var b,c,e,f,g,h,i;if(a.status===d.UPLOADING){for(c=this._getFilesWithXhr(a.xhr),e=0,g=c.length;e<g;e++)b=c[e],b.status=d.CANCELED;for(a.xhr.abort(),f=0,h=c.length;f<h;f++)b=c[f],this.emit("canceled",b);this.options.uploadMultiple&&this.emit("canceledmultiple",c)}else(i=a.status)!==d.ADDED&&i!==d.QUEUED||(a.status=d.CANCELED,this.emit("canceled",a),this.options.uploadMultiple&&this.emit("canceledmultiple",[a]));if(this.options.autoProcessQueue)return this.processQueue()},f=function(){var a,b;return b=arguments[0],a=2<=arguments.length?j.call(arguments,1):[],"function"==typeof b?b.apply(this,a):b},d.prototype.uploadFile=function(a){return this.uploadFiles([a])},d.prototype.uploadFiles=function(a){var b,c,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O;for(O=new XMLHttpRequest,q=0,u=a.length;q<u;q++)g=a[q],g.xhr=O;z=f(this.options.method,a),M=f(this.options.url,a),O.open(z,M,!0),O.timeout=f(this.options.timeout,a),O.withCredentials=!!this.options.withCredentials,J=null,i=function(b){return function(){var c,d,e;for(e=[],c=0,d=a.length;c<d;c++)g=a[c],e.push(b._errorProcessing(a,J||b.options.dictResponseError.replace("{{statusCode}}",O.status),O));return e}}(this),L=function(b){return function(c){var d,e,f,h,i,j,k,l,m;if(null!=c)for(l=100*c.loaded/c.total,e=0,h=a.length;e<h;e++)g=a[e],g.upload.progress=l,g.upload.total=c.total,g.upload.bytesSent=c.loaded;else{for(d=!0,l=100,f=0,i=a.length;f<i;f++)g=a[f],100===g.upload.progress&&g.upload.bytesSent===g.upload.total||(d=!1),g.upload.progress=l,g.upload.bytesSent=g.upload.total;if(d)return}for(m=[],k=0,j=a.length;k<j;k++)g=a[k],m.push(b.emit("uploadprogress",g,l,g.upload.bytesSent));return m}}(this),O.onload=function(b){return function(c){var e;if(a[0].status!==d.CANCELED&&4===O.readyState){if("arraybuffer"!==O.responseType&&"blob"!==O.responseType&&(J=O.responseText,O.getResponseHeader("content-type")&&~O.getResponseHeader("content-type").indexOf("application/json")))try{J=JSON.parse(J)}catch(a){c=a,J="Invalid JSON response from server."}return L(),200<=(e=O.status)&&e<300?b._finished(a,J,c):i()}}}(this),O.onerror=function(b){return function(){if(a[0].status!==d.CANCELED)return i()}}(this),C=null!=(D=O.upload)?D:O,C.onprogress=L,l={Accept:"application/json","Cache-Control":"no-cache","X-Requested-With":"XMLHttpRequest"},this.options.headers&&e(l,this.options.headers);for(j in l)k=l[j],k&&O.setRequestHeader(j,k);if(h=new FormData,this.options.params){E=this.options.params;for(s in E)N=E[s],h.append(s,N)}for(r=0,v=a.length;r<v;r++)g=a[r],this.emit("sending",g,O,h);if(this.options.uploadMultiple&&this.emit("sendingmultiple",a,O,h),"FORM"===this.element.tagName)for(F=this.element.querySelectorAll("input, textarea, select, button"),t=0,w=F.length;t<w;t++)if(n=F[t],o=n.getAttribute("name"),p=n.getAttribute("type"),"SELECT"===n.tagName&&n.hasAttribute("multiple"))for(G=n.options,y=0,x=G.length;y<x;y++)B=G[y],B.selected&&h.append(o,B.value);else(!p||"checkbox"!==(H=p.toLowerCase())&&"radio"!==H||n.checked)&&h.append(o,n.value);for(b=0,K=[],m=A=0,I=a.length-1;0<=I?A<=I:A>=I;m=0<=I?++A:--A)c=function(c){return function(d,e,f){return function(d){if(h.append(e,d,f),++b===a.length)return c.submitRequest(O,h,a)}}}(this),K.push(this.options.transformFile.call(this,a[m],c(a[m],this._getParamName(m),a[m].upload.filename)));return K},d.prototype.submitRequest=function(a,b,c){return a.send(b)},d.prototype._finished=function(a,b,c){var e,f,g;for(f=0,g=a.length;f<g;f++)e=a[f],e.status=d.SUCCESS,this.emit("success",e,b,c),this.emit("complete",e);if(this.options.uploadMultiple&&(this.emit("successmultiple",a,b,c),this.emit("completemultiple",a)),this.options.autoProcessQueue)return this.processQueue()},d.prototype._errorProcessing=function(a,b,c){var e,f,g;for(f=0,g=a.length;f<g;f++)e=a[f],e.status=d.ERROR,this.emit("error",e,b,c),this.emit("complete",e);if(this.options.uploadMultiple&&(this.emit("errormultiple",a,b,c),this.emit("completemultiple",a)),this.options.autoProcessQueue)return this.processQueue()},d}(b),a.version="5.1.1",a.options={},a.optionsForElement=function(b){return b.getAttribute("id")?a.options[d(b.getAttribute("id"))]:void 0},a.instances=[],a.forElement=function(a){if("string"==typeof a&&(a=document.querySelector(a)),null==(null!=a?a.dropzone:void 0))throw new Error("No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.");return a.dropzone},a.autoDiscover=!0,a.discover=function(){var b,c,d,e,f,g;for(document.querySelectorAll?d=document.querySelectorAll(".dropzone"):(d=[],b=function(a){var b,c,e,f;for(f=[],c=0,e=a.length;c<e;c++)b=a[c],/(^| )dropzone($| )/.test(b.className)?f.push(d.push(b)):f.push(void 0);return f},b(document.getElementsByTagName("div")),b(document.getElementsByTagName("form"))),g=[],e=0,f=d.length;e<f;e++)c=d[e],a.optionsForElement(c)!==!1?g.push(new a(c)):g.push(void 0);
+return g},a.blacklistedBrowsers=[/opera.*Macintosh.*version\/12/i],a.isBrowserSupported=function(){var b,c,d,e,f;if(b=!0,window.File&&window.FileReader&&window.FileList&&window.Blob&&window.FormData&&document.querySelector)if("classList"in document.createElement("a"))for(e=a.blacklistedBrowsers,c=0,d=e.length;c<d;c++)f=e[c],f.test(navigator.userAgent)&&(b=!1);else b=!1;else b=!1;return b},a.dataURItoBlob=function(a){var b,c,d,e,f,g,h;for(c=atob(a.split(",")[1]),g=a.split(",")[0].split(":")[1].split(";")[0],b=new ArrayBuffer(c.length),e=new Uint8Array(b),d=f=0,h=c.length;0<=h?f<=h:f>=h;d=0<=h?++f:--f)e[d]=c.charCodeAt(d);return new Blob([b],{type:g})},i=function(a,b){var c,d,e,f;for(f=[],d=0,e=a.length;d<e;d++)c=a[d],c!==b&&f.push(c);return f},d=function(a){return a.replace(/[\-_](\w)/g,function(a){return a.charAt(1).toUpperCase()})},a.createElement=function(a){var b;return b=document.createElement("div"),b.innerHTML=a,b.childNodes[0]},a.elementInside=function(a,b){if(a===b)return!0;for(;a=a.parentNode;)if(a===b)return!0;return!1},a.getElement=function(a,b){var c;if("string"==typeof a?c=document.querySelector(a):null!=a.nodeType&&(c=a),null==c)throw new Error("Invalid `"+b+"` option provided. Please provide a CSS selector or a plain HTML element.");return c},a.getElements=function(a,b){var c,d,e,f,g,h,i,j;if(a instanceof Array){e=[];try{for(f=0,h=a.length;f<h;f++)d=a[f],e.push(this.getElement(d,b))}catch(a){c=a,e=null}}else if("string"==typeof a)for(e=[],j=document.querySelectorAll(a),g=0,i=j.length;g<i;g++)d=j[g],e.push(d);else null!=a.nodeType&&(e=[a]);if(null==e||!e.length)throw new Error("Invalid `"+b+"` option provided. Please provide a CSS selector, a plain HTML element or a list of those.");return e},a.confirm=function(a,b,c){return window.confirm(a)?b():null!=c?c():void 0},a.isValidFile=function(a,b){var c,d,e,f,g;if(!b)return!0;for(b=b.split(","),f=a.type,c=f.replace(/\/.*$/,""),d=0,e=b.length;d<e;d++)if(g=b[d],g=g.trim(),"."===g.charAt(0)){if(a.name.toLowerCase().indexOf(g.toLowerCase(),a.name.length-g.length)!==-1)return!0}else if(/\/\*$/.test(g)){if(c===g.replace(/\/.*$/,""))return!0}else if(f===g)return!0;return!1},"undefined"!=typeof jQuery&&null!==jQuery&&(jQuery.fn.dropzone=function(b){return this.each(function(){return new a(this,b)})}),"undefined"!=typeof module&&null!==module?module.exports=a:window.Dropzone=a,a.ADDED="added",a.QUEUED="queued",a.ACCEPTED=a.QUEUED,a.UPLOADING="uploading",a.PROCESSING=a.UPLOADING,a.CANCELED="canceled",a.ERROR="error",a.SUCCESS="success",f=function(a){var b,c,d,e,f,g,h,i,j,k;for(h=a.naturalWidth,g=a.naturalHeight,c=document.createElement("canvas"),c.width=1,c.height=g,d=c.getContext("2d"),d.drawImage(a,0,0),e=d.getImageData(1,0,1,g).data,k=0,f=g,i=g;i>k;)b=e[4*(i-1)+3],0===b?f=i:k=i,i=f+k>>1;return j=i/g,0===j?1:j},g=function(a,b,c,d,e,g,h,i,j,k){var l;return l=f(b),a.drawImage(b,c,d,e,g,h,i,j,k/l)},c=function(){function a(){}return a.KEY_STR="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",a.encode64=function(a){var b,c,d,e,f,g,h,i,j;for(j="",b=void 0,c=void 0,d="",e=void 0,f=void 0,g=void 0,h="",i=0;;)if(b=a[i++],c=a[i++],d=a[i++],e=b>>2,f=(3&b)<<4|c>>4,g=(15&c)<<2|d>>6,h=63&d,isNaN(c)?g=h=64:isNaN(d)&&(h=64),j=j+this.KEY_STR.charAt(e)+this.KEY_STR.charAt(f)+this.KEY_STR.charAt(g)+this.KEY_STR.charAt(h),b=c=d="",e=f=g=h="",!(i<a.length))break;return j},a.restore=function(a,b){var c,d,e;return a.match("data:image/jpeg;base64,")?(d=this.decode64(a.replace("data:image/jpeg;base64,","")),e=this.slice2Segments(d),c=this.exifManipulation(b,e),"data:image/jpeg;base64,"+this.encode64(c)):b},a.exifManipulation=function(a,b){var c,d,e;return d=this.getExifArray(b),e=this.insertExif(a,d),c=new Uint8Array(e)},a.getExifArray=function(a){var b,c;for(b=void 0,c=0;c<a.length;){if(b=a[c],255===b[0]&225===b[1])return b;c++}return[]},a.insertExif=function(a,b){var c,d,e,f,g,h;return f=a.replace("data:image/jpeg;base64,",""),e=this.decode64(f),h=e.indexOf(255,3),g=e.slice(0,h),d=e.slice(h),c=g,c=c.concat(b),c=c.concat(d)},a.slice2Segments=function(a){var b,c,d,e,f;for(c=0,f=[];;){if(255===a[c]&218===a[c+1])break;if(255===a[c]&216===a[c+1]?c+=2:(d=256*a[c+2]+a[c+3],b=c+d+2,e=a.slice(c,b),f.push(e),c=b),c>a.length)break}return f},a.decode64=function(a){var b,c,d,e,f,g,h,i,j,k,l;for(l="",d=void 0,e=void 0,f="",g=void 0,h=void 0,i=void 0,j="",k=0,c=[],b=/[^A-Za-z0-9\+\/\=]/g,b.exec(a)&&console.warning("There were invalid base64 characters in the input text.\nValid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\nExpect errors in decoding."),a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");;)if(g=this.KEY_STR.indexOf(a.charAt(k++)),h=this.KEY_STR.indexOf(a.charAt(k++)),i=this.KEY_STR.indexOf(a.charAt(k++)),j=this.KEY_STR.indexOf(a.charAt(k++)),d=g<<2|h>>4,e=(15&h)<<4|i>>2,f=(3&i)<<6|j,c.push(d),64!==i&&c.push(e),64!==j&&c.push(f),d=e=f="",g=h=i=j="",!(k<a.length))break;return c},a}(),e=function(a,b){var c,d,e,f,g,h,i,j,k;if(e=!1,k=!0,d=a.document,j=d.documentElement,c=d.addEventListener?"addEventListener":"attachEvent",i=d.addEventListener?"removeEventListener":"detachEvent",h=d.addEventListener?"":"on",f=function(c){if("readystatechange"!==c.type||"complete"===d.readyState)return("load"===c.type?a:d)[i](h+c.type,f,!1),!e&&(e=!0)?b.call(a,c.type||c):void 0},g=function(){var a;try{j.doScroll("left")}catch(b){return a=b,void setTimeout(g,50)}return f("poll")},"complete"!==d.readyState){if(d.createEventObject&&j.doScroll){try{k=!a.frameElement}catch(a){}k&&g()}return d[c](h+"DOMContentLoaded",f,!1),d[c](h+"readystatechange",f,!1),a[c](h+"load",f,!1)}},a._autoDiscoverFunction=function(){if(a.autoDiscover)return a.discover()},e(window,a._autoDiscoverFunction)}).call(this);
\ No newline at end of file
diff --git a/vendor/enyo/dropzone/dist/readme.md b/vendor/enyo/dropzone/dist/readme.md
new file mode 100644
index 0000000000..f281e04643
--- /dev/null
+++ b/vendor/enyo/dropzone/dist/readme.md
@@ -0,0 +1,10 @@
+# Warning!
+
+You shouldn't pull these files from the github master branch directly!
+
+They might be outdated or not working at all since I normally only push them
+when I create a version release.
+
+To be sure to get a proper release, please go to the
+[dropzone releases section on github](https://github.com/enyo/dropzone/releases/latest).
+
diff --git a/vendor/enyo/dropzone/index.js b/vendor/enyo/dropzone/index.js
new file mode 100644
index 0000000000..f300153ac9
--- /dev/null
+++ b/vendor/enyo/dropzone/index.js
@@ -0,0 +1 @@
+module.exports = require("./lib/dropzone.js"); // Exposing dropzone
diff --git a/vendor/enyo/dropzone/package.json b/vendor/enyo/dropzone/package.json
new file mode 100644
index 0000000000..fd5214edbc
--- /dev/null
+++ b/vendor/enyo/dropzone/package.json
@@ -0,0 +1,54 @@
+{
+  "name": "dropzone",
+  "version": "5.1.1",
+  "description": "Handles drag and drop of files for you.",
+  "keywords": [
+    "dragndrop",
+    "drag and drop",
+    "file upload",
+    "upload"
+  ],
+  "homepage": "http://www.dropzonejs.com",
+  "main": "./dist/dropzone.js",
+  "maintainers": [
+    {
+      "name": "Matias Meno",
+      "email": "m@tias.me",
+      "web": "http://www.colorglare.com"
+    }
+  ],
+  "contributors": [
+    {
+      "name": "Matias Meno",
+      "email": "m@tias.me",
+      "web": "http://www.colorglare.com"
+    }
+  ],
+  "scripts": {
+    "test": "grunt && npm run test-prebuilt",
+    "test-prebuilt": "mocha-phantomjs test/test.html"
+  },
+  "bugs": {
+    "email": "m@tias.me",
+    "url": "https://gitlab.com/meno/dropzone/issues"
+  },
+  "license": "MIT",
+  "repository": {
+    "type": "git",
+    "url": "https://gitlab.com/meno/dropzone.git"
+  },
+  "devDependencies": {
+    "chai": "1.7.x",
+    "grunt": "^1.0.0",
+    "grunt-contrib-coffee": "^1.0.0",
+    "grunt-contrib-concat": "^1.0.1",
+    "grunt-contrib-sass": "^1.0.0",
+    "grunt-contrib-uglify": "^2.1.0",
+    "grunt-contrib-watch": "^1.0.0",
+    "mocha": "^3.2.0",
+    "phantomjs-prebuilt": "^2.1.7",
+    "mocha-phantomjs": "^4.1.0",
+    "sinon": "1.17.7",
+    "marked": "^0.3.6"
+  }
+}
diff --git a/vendor/pear/archive_tar/.gitignore b/vendor/pear/archive_tar/.gitignore
index c32ccd7ccd..c703991e88 100644
--- a/vendor/pear/archive_tar/.gitignore
+++ b/vendor/pear/archive_tar/.gitignore
@@ -8,3 +8,8 @@ vendor
 .buildpath
 .project
 .settings
+# pear
+.tarballs
+*.tgz
+# phpunit
+build
diff --git a/vendor/pear/archive_tar/.travis.yml b/vendor/pear/archive_tar/.travis.yml
index b841f4efc8..f103381b10 100644
--- a/vendor/pear/archive_tar/.travis.yml
+++ b/vendor/pear/archive_tar/.travis.yml
@@ -1,6 +1,9 @@
 sudo: false
 language: php
 matrix:
+  fast_finish: true
+  allow_failures:
+    - php: nightly
   include:
   - php: 5.2
     dist: precise
@@ -11,23 +14,12 @@ matrix:
   - php: 5.5
     dist: trusty
   - php: 5.6
-    dist: trusty
   - php: 7.0
-    dist: trusty
   - php: 7.1
-    dist: trusty
   - php: 7.2
-    dist: trusty
   - php: 7.3
-    dist: trusty
-  - php: 7.4snapshot
-  - php: master
-
-jobs:
-  allow_failures:
-    - php: 7.4snapshot
-    - php: master
-
+  - php: 7.4
+  - php: nightly
 install:
 #  - pear upgrade --force --alldeps pear/pear
   - pear install -f package.xml
diff --git a/vendor/pear/archive_tar/Archive/Tar.php b/vendor/pear/archive_tar/Archive/Tar.php
index 2f328c2273..92710741c5 100644
--- a/vendor/pear/archive_tar/Archive/Tar.php
+++ b/vendor/pear/archive_tar/Archive/Tar.php
@@ -731,7 +731,7 @@ public function setIgnoreRegexp($regexp)
      */
     public function setIgnoreList($list)
     {
-        $regexp = str_replace(array('#', '.', '^', '$'), array('\#', '\.', '\^', '\$'), $list);
+        $list = str_replace(array('#', '.', '^', '$'), array('\#', '\.', '\^', '\$'), $list);
         $regexp = '#/' . join('$|/', $list) . '#';
         $this->setIgnoreRegexp($regexp);
     }
@@ -1273,7 +1273,7 @@ public function _addFile($p_filename, &$p_header, $p_add_dir, $p_remove_dir, $v_
             while (($v_buffer = fread($v_file, $this->buffer_length)) != '') {
                 $buffer_length = strlen("$v_buffer");
                 if ($buffer_length != $this->buffer_length) {
-                    $pack_size = ((int)($buffer_length / 512) + 1) * 512;
+                    $pack_size = ((int)($buffer_length / 512) + ($buffer_length % 512 !== 0 ? 1 : 0)) * 512;
                     $pack_format = sprintf('a%d', $pack_size);
                 } else {
                     $pack_format = sprintf('a%d', $this->buffer_length);
@@ -1515,8 +1515,13 @@ public function _writeHeaderBlock(
             $userinfo = posix_getpwuid($p_uid);
             $groupinfo = posix_getgrgid($p_gid);
 
-            $v_uname = $userinfo['name'];
-            $v_gname = $groupinfo['name'];
+            if ($userinfo === false || $groupinfo === false) {
+                $v_uname = '';
+                $v_gname = '';
+            } else {
+                $v_uname = $userinfo['name'];
+                $v_gname = $groupinfo['name'];
+            }
         } else {
             $v_uname = '';
             $v_gname = '';
@@ -1725,7 +1730,7 @@ public function _readHeader($v_binary_data, &$v_header)
 
         // ----- Extract the properties
         $v_header['filename'] = rtrim($v_data['filename'], "\0");
-        if ($this->_maliciousFilename($v_header['filename'])) {
+        if ($this->_isMaliciousFilename($v_header['filename'])) {
             $this->_error(
                 'Malicious .tar detected, file "' . $v_header['filename'] .
                 '" will not install in desired directory tree'
@@ -1795,9 +1800,9 @@ private function _tarRecToSize($tar_size)
      *
      * @return bool
      */
-    private function _maliciousFilename($file)
+    private function _isMaliciousFilename($file)
     {
-        if (strpos($file, 'phar://') === 0) {
+        if (strpos($file, '://') !== false) {
             return true;
         }
         if (strpos($file, '../') !== false || strpos($file, '..\\') !== false) {
@@ -1833,7 +1838,7 @@ public function _readLongHeader(&$v_header)
 
         $v_filename = rtrim(substr($v_filename, 0, $v_filesize), "\0");
         $v_header['filename'] = $v_filename;
-        if ($this->_maliciousFilename($v_filename)) {
+        if ($this->_isMaliciousFilename($v_filename)) {
             $this->_error(
                 'Malicious .tar detected, file "' . $v_filename .
                 '" will not install in desired directory tree'
diff --git a/vendor/pear/archive_tar/package.xml b/vendor/pear/archive_tar/package.xml
index 6834939518..6edf4fd103 100644
--- a/vendor/pear/archive_tar/package.xml
+++ b/vendor/pear/archive_tar/package.xml
@@ -32,10 +32,10 @@ Also Lzma2 compressed archives are supported with xz extension.</description>
   <email>stig@php.net</email>
   <active>no</active>
  </helper>
- <date>2019-12-04</date>
- <time>09:25:16</time>
+ <date>2020-11-19</date>
+ <time>22:06:48</time>
  <version>
-  <release>1.4.9</release>
+  <release>1.4.11</release>
   <api>1.4.0</api>
  </version>
  <stability>
@@ -44,7 +44,8 @@ Also Lzma2 compressed archives are supported with xz extension.</description>
  </stability>
  <license uri="http://www.opensource.org/licenses/bsd-license.php">New BSD License</license>
  <notes>
-* Implement Feature #23861: Add option to disallow symlinks [mrook]
+* Fix Bug #27002: Filename manipulation vulnerabilities (CVE-2020-28948 /
+   CVE-2020-28949) [mrook]
  </notes>
  <contents>
   <dir name="/">
@@ -74,6 +75,37 @@ Also Lzma2 compressed archives are supported with xz extension.</description>
  </dependencies>
  <phprelease />
  <changelog>
+   <release>
+    <version>
+     <release>1.4.10</release>
+     <api>1.4.0</api>
+    </version>
+    <stability>
+     <release>stable</release>
+     <api>stable</api>
+    </stability>
+    <date>2020-09-15</date>
+    <license uri="http://www.opensource.org/licenses/bsd-license.php">New BSD License</license>
+    <notes>
+ * Fix block padding when the file buffer length is a multiple of 512 and smaller than Archive_Tar buffer length
+ * Don&apos;t try to copy username/groupname in chroot jail
+    </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.4.9</release>
+    <api>1.4.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2019-12-04</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">New BSD License</license>
+   <notes>
+* Implement Feature #23861: Add option to disallow symlinks [mrook]
+   </notes>
+  </release>
   <release>
    <version>
     <release>1.4.8</release>
diff --git a/vendor/pear/archive_tar/tests/512nbytesfile.phpt b/vendor/pear/archive_tar/tests/512nbytesfile.phpt
new file mode 100644
index 0000000000..411cb7a935
--- /dev/null
+++ b/vendor/pear/archive_tar/tests/512nbytesfile.phpt
@@ -0,0 +1,33 @@
+--TEST--
+test file size that happens to be 512 * n bytes
+--SKIPIF--
+--FILE--
+<?php
+$dirname = dirname(__FILE__);
+require_once $dirname . '/setup.php.inc';
+
+$tar = new Archive_Tar($dirname . '/512nbytesfile.tar.gz', null, 2048);
+$tar->add($dirname .'/testblock3');
+$tar->listContent();
+$phpunit->assertNoErrors('after tar archive listing');
+
+$returnval = shell_exec('tar -Ptf ' . $dirname . '/512nbytesfile.tar.gz | sort');
+$phpunit->assertNoErrors('after shell tar listing');
+
+$expectedvalue = 
+<<< EOD
+$dirname/testblock3
+$dirname/testblock3/1024bytes.txt
+$dirname/testblock3/randombytes.txt
+EOD;
+$phpunit->assertEquals($expectedvalue, $returnval, 'wrong output for shell tar verification');
+
+echo 'test done'
+?>
+--CLEAN--
+<?php
+$dirname = dirname(__FILE__);
+@unlink($dirname.'/512nbytesfile.tar.gz');
+?>
+--EXPECT--
+test done
\ No newline at end of file
diff --git a/vendor/pear/archive_tar/tests/dirtraversal.phpt b/vendor/pear/archive_tar/tests/dirtraversal.phpt
index 7e5d11f482..6945d169d5 100644
--- a/vendor/pear/archive_tar/tests/dirtraversal.phpt
+++ b/vendor/pear/archive_tar/tests/dirtraversal.phpt
@@ -1,24 +1,24 @@
---TEST--
-test directory traversal security vulnerability
---SKIPIF--
---FILE--
-<?php
-require_once dirname(__FILE__) . '/setup.php.inc';
-$me = dirname(__FILE__) . '/testit';
-$tar = new Archive_Tar(dirname(__FILE__) . '/hamidTARtester2.tar');
-$tar->listContent();
-$phpunit->assertErrors(array(
-    array('package' => 'PEAR_Error', 'message' => 'Malicious .tar detected, file "/../../../../../../../../../../../../../../AAAAAAAAAAAAAAAAA/BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB.txt" will not install in desired directory tree')
-), 'after 1');
-$tar->extract();
-$phpunit->assertErrors(array(
-    array('package' => 'PEAR_Error', 'message' => 'Malicious .tar detected, file "/../../../../../../../../../../../../../../AAAAAAAAAAAAAAAAA/BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB.txt" will not install in desired directory tree')
-), 'after 2');
-echo 'tests done';
-?>
---CLEAN--
-<?php
-@rmdir('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa');
-?>
---EXPECT--
-tests done
+--TEST--
+test directory traversal security vulnerability
+--SKIPIF--
+--FILE--
+<?php
+require_once dirname(__FILE__) . '/setup.php.inc';
+$me = dirname(__FILE__) . '/testit';
+$tar = new Archive_Tar(dirname(__FILE__) . '/hamidTARtester2.tar');
+$tar->listContent();
+$phpunit->assertErrors(array(
+    array('package' => 'PEAR_Error', 'message' => 'Malicious .tar detected, file "/../../../../../../../../../../../../../../AAAAAAAAAAAAAAAAA/BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB.txt" will not install in desired directory tree')
+), 'after 1');
+$tar->extract();
+$phpunit->assertErrors(array(
+    array('package' => 'PEAR_Error', 'message' => 'Malicious .tar detected, file "/../../../../../../../../../../../../../../AAAAAAAAAAAAAAAAA/BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB.txt" will not install in desired directory tree')
+), 'after 2');
+echo 'tests done';
+?>
+--CLEAN--
+<?php
+@rmdir('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa');
+?>
+--EXPECT--
+tests done
diff --git a/vendor/pear/archive_tar/tests/testblock3/1024bytes.txt b/vendor/pear/archive_tar/tests/testblock3/1024bytes.txt
new file mode 100644
index 0000000000..e5fc6491f8
--- /dev/null
+++ b/vendor/pear/archive_tar/tests/testblock3/1024bytes.txt
@@ -0,0 +1,16 @@
+194 210  54 166  74 179 115 216 109  21 220  29 144 242  90 206 
+240  73 172  14 153 163  43  16 233  20 186  91  95 150  60  61 
+180 187 233 126 130 154 116 206 213 231 202 148 148  12 125  24 
+  6 139  32 235 117 240  56  96  23   1 182 167 116  64  92  73 
+250 177 157 119 121 148 112  50  89  24  37 214  81  88 201  75 
+162 108  60 114 137 227 170 186 231 213 177  33  44 143 243  98 
+ 14  28 226  77 152 241 243  62 103 237 187 235 227  73   9 119 
+162  64 127  74  73  90 112 200  39   6 173 251  12 191 166  18 
+235 100  74 184 126 153  23 118  27  25 128 222 234 246 165 159 
+170 127 236 199  91  67  96 185 108 159 172   2 245 202 161 177 
+147 188   0 151 251 230 251 100 226  67 212  38  72  32  44 117 
+ 10  39 163 159   0 197 160 225  25 177  16   0 240  16 137 105 
+187 132 129  98  24 210 169  33 246  77 217 145 242 118 181  47 
+160  61  62 129  71  52 253  85   2 215 174 241  55  32 236  27 
+160 120 145 188 132  37 161 178  45 227 209  57 142  19  88 175 
+230 238 104 128  26 196 126 118 214 122 201 123 
diff --git a/vendor/pear/archive_tar/tests/testblock3/randombytes.txt b/vendor/pear/archive_tar/tests/testblock3/randombytes.txt
new file mode 100644
index 0000000000..b42152357c
--- /dev/null
+++ b/vendor/pear/archive_tar/tests/testblock3/randombytes.txt
@@ -0,0 +1,2 @@
+250  97  98 194   5 149 229  27  58  62 133  73  95 230 219 128 
+224  98 210 250 162  58 240  80 202 249 173 203 125 186 
diff --git a/web/core/composer.json b/web/core/composer.json
index 5884117726..fb70c051cf 100644
--- a/web/core/composer.json
+++ b/web/core/composer.json
@@ -46,7 +46,7 @@
         "laminas/laminas-diactoros": "^1.8",
         "composer/semver": "^1.0",
         "asm89/stack-cors": "^1.1",
-        "pear/archive_tar": "^1.4.9",
+        "pear/archive_tar": "^1.4.11",
         "psr/log": "^1.0"
     },
     "conflict": {
diff --git a/web/core/lib/Drupal.php b/web/core/lib/Drupal.php
index 18c41631c9..ee860ae0ac 100644
--- a/web/core/lib/Drupal.php
+++ b/web/core/lib/Drupal.php
@@ -82,7 +82,7 @@ class Drupal {
   /**
    * The current system version.
    */
-  const VERSION = '8.9.9';
+  const VERSION = '8.9.10';
 
   /**
    * Core API compatibility.
-- 
GitLab


From 8f0e34b53943579ecf20a8b4bc1750e66694a7b3 Mon Sep 17 00:00:00 2001
From: Brian Weaver <weaver.299@osu.edu>
Date: Mon, 30 Nov 2020 14:14:22 -0500
Subject: [PATCH 15/23] composer2 readiness: Update drupal/console to 1.9.7

---
 composer.json                                 |    2 +-
 composer.lock                                 |  289 +--
 console/language/console-en/.gitignore        |   35 -
 console/language/console-en/README.md         |   41 -
 console/language/console-en/composer.json     |   38 -
 .../console-en/translations/about.yml         |   13 -
 .../console-en/translations/application.yml   |   93 -
 .../console-en/translations/cache.rebuild.yml |   15 -
 .../translations/cache.tag.invalidate.yml     |   11 -
 .../console-en/translations/chain.yml         |   25 -
 .../console-en/translations/check.yml         |    9 -
 .../console-en/translations/common.yml        |   57 -
 .../console-en/translations/complete.yml      |    1 -
 .../console-en/translations/composerize.yml   |   14 -
 .../console-en/translations/config.delete.yml |   20 -
 .../console-en/translations/config.diff.yml   |   18 -
 .../console-en/translations/config.edit.yml   |   15 -
 .../config.export.content.type.yml            |   23 -
 .../translations/config.export.single.yml     |   32 -
 .../translations/config.export.view.yml       |   23 -
 .../console-en/translations/config.export.yml |   22 -
 .../translations/config.import.single.yml     |   21 -
 .../console-en/translations/config.import.yml |   21 -
 .../translations/config.override.yml          |   19 -
 .../translations/config.validate.yml          |   10 -
 .../translations/create.comments.yml          |   41 -
 .../console-en/translations/create.nodes.yml  |   40 -
 .../console-en/translations/create.roles.yml  |   19 -
 .../console-en/translations/create.terms.yml  |   28 -
 .../console-en/translations/create.users.yml  |   38 -
 .../translations/create.vocabularies.yml      |   21 -
 .../console-en/translations/cron.execute.yml  |   14 -
 .../console-en/translations/cron.release.yml  |    8 -
 .../console-en/translations/database.add.yml  |   25 -
 .../translations/database.client.yml          |    9 -
 .../translations/database.connect.yml         |   13 -
 .../console-en/translations/database.drop.yml |   14 -
 .../console-en/translations/database.dump.yml |   17 -
 .../translations/database.log.clear.yml       |   22 -
 .../translations/database.log.common.yml      |   12 -
 .../translations/database.log.poll.yml        |   14 -
 .../translations/database.query.yml           |   19 -
 .../translations/database.restore.yml         |   14 -
 .../translations/debug.breakpoints.yml        |   12 -
 .../translations/debug.cache.context.yml      |    9 -
 .../console-en/translations/debug.chain.yml   |    6 -
 .../translations/debug.config.settings.yml    |    9 -
 .../translations/debug.config.validate.yml    |   14 -
 .../console-en/translations/debug.config.yml  |   17 -
 .../translations/debug.container.yml          |   25 -
 .../console-en/translations/debug.cron.yml    |    8 -
 .../translations/debug.database.log.yml       |   17 -
 .../translations/debug.database.table.yml     |   18 -
 .../console-en/translations/debug.entity.yml  |   12 -
 .../console-en/translations/debug.event.yml   |   16 -
 .../translations/debug.features.yml           |   11 -
 .../translations/debug.image.styles.yml       |    9 -
 .../translations/debug.libraries.yml          |   17 -
 .../console-en/translations/debug.migrate.yml |   12 -
 .../console-en/translations/debug.module.yml  |   24 -
 .../translations/debug.multisite.yml          |   11 -
 .../translations/debug.permission.yml         |   22 -
 .../console-en/translations/debug.plugin.yml  |   39 -
 .../console-en/translations/debug.queue.yml   |    9 -
 .../console-en/translations/debug.rest.yml    |   21 -
 .../console-en/translations/debug.roles.yml   |   10 -
 .../console-en/translations/debug.router.yml  |   23 -
 .../translations/debug.settings.yml           |    9 -
 .../console-en/translations/debug.site.yml    |   20 -
 .../console-en/translations/debug.state.yml   |   13 -
 .../console-en/translations/debug.test.yml    |   20 -
 .../translations/debug.theme.keys.yml         |   22 -
 .../console-en/translations/debug.theme.yml   |   22 -
 .../console-en/translations/debug.update.yml  |   17 -
 .../console-en/translations/debug.user.yml    |   21 -
 .../translations/debug.views.plugins.yml      |   12 -
 .../console-en/translations/debug.views.yml   |   22 -
 .../console-en/translations/devel.dumper.yml  |    7 -
 .../console-en/translations/docker.init.yml   |    1 -
 .../console-en/translations/dotenv.init.yml   |   38 -
 .../console-en/translations/drush.yml         |    3 -
 .../console-en/translations/elephpant.yml     |    1 -
 .../console-en/translations/entity.delete.yml |   19 -
 .../language/console-en/translations/exec.yml |   13 -
 .../translations/features.import.yml          |   15 -
 .../console-en/translations/field.info.yml    |   18 -
 .../translations/generate.ajax.command.yml    |   13 -
 .../generate.authentication.provider.yml      |   18 -
 .../translations/generate.breakpoint.yml      |   20 -
 .../translations/generate.cache.context.yml   |   18 -
 .../translations/generate.command.yml         |   31 -
 .../translations/generate.controller.yml      |   30 -
 .../translations/generate.entity.bundle.yml   |   20 -
 .../translations/generate.entity.config.yml   |   26 -
 .../translations/generate.entity.content.yml  |   39 -
 .../generate.event.subscriber.yml             |   25 -
 .../translations/generate.form.alter.yml      |   31 -
 .../translations/generate.form.config.yml     |   57 -
 .../console-en/translations/generate.form.yml |   57 -
 .../console-en/translations/generate.help.yml |   17 -
 .../translations/generate.jstest.yml          |   22 -
 .../translations/generate.module.file.yml     |   12 -
 .../translations/generate.module.yml          |   51 -
 .../translations/generate.permissions.yml     |   15 -
 .../translations/generate.plugin.block.yml    |   36 -
 .../generate.plugin.ckeditorbutton.yml        |   27 -
 .../generate.plugin.condition.yml             |   52 -
 .../translations/generate.plugin.field.yml    |   53 -
 .../generate.plugin.fieldformatter.yml        |   24 -
 .../generate.plugin.fieldtype.yml             |   40 -
 .../generate.plugin.fieldwidget.yml           |   24 -
 .../generate.plugin.imageeffect.yml           |   26 -
 .../generate.plugin.imageformatter.yml        |   21 -
 .../translations/generate.plugin.mail.yml     |   25 -
 .../generate.plugin.migrate.process.yml       |   18 -
 .../generate.plugin.migrate.source.yml        |   41 -
 .../generate.plugin.rest.resource.yml         |   29 -
 .../translations/generate.plugin.skeleton.yml |   24 -
 .../generate.plugin.type.annotation.yml       |   21 -
 .../generate.plugin.type.yaml.yml             |   21 -
 .../generate.plugin.views.field.yml           |   22 -
 .../translations/generate.post.update.yml     |   18 -
 .../translations/generate.profile.yml         |   37 -
 .../translations/generate.routesubscriber.yml |   18 -
 .../translations/generate.service.yml         |   38 -
 .../translations/generate.site.alias.yml      |   25 -
 .../translations/generate.theme.yml           |   73 -
 .../translations/generate.twig.extension.yml  |   20 -
 .../translations/generate.update.yml          |   17 -
 .../language/console-en/translations/help.yml |   19 -
 .../translations/image.styles.flush.yml       |   15 -
 .../language/console-en/translations/init.yml |   17 -
 .../language/console-en/translations/list.yml |   25 -
 .../translations/locale.language.add.yml      |    8 -
 .../translations/locale.language.delete.yml   |    4 -
 .../locale.translation.status.yml             |   18 -
 .../console-en/translations/migrate.debug.yml |    8 -
 .../translations/migrate.execute.yml          |   40 -
 .../translations/migrate.rollback.yml         |    6 -
 .../console-en/translations/migrate.setup.yml |   24 -
 .../module.dependency.install.yml             |   11 -
 .../translations/module.download.yml          |   25 -
 .../translations/module.install.yml           |   35 -
 .../console-en/translations/module.path.yml   |   10 -
 .../translations/module.uninstall.yml         |   19 -
 .../console-en/translations/module.update.yml |   19 -
 .../console-en/translations/multisite.new.yml |   28 -
 .../translations/multisite.update.yml         |   22 -
 .../translations/node.access.rebuild.yml      |   12 -
 .../console-en/translations/queue.run.yml     |    9 -
 .../console-en/translations/rest.debug.yml    |   17 -
 .../console-en/translations/rest.disable.yml  |   10 -
 .../console-en/translations/rest.enable.yml   |   16 -
 .../console-en/translations/role.delete.yml   |   14 -
 .../console-en/translations/role.new.yml      |   18 -
 .../translations/router.rebuild.yml           |   10 -
 .../console-en/translations/self-update.yml   |   20 -
 .../console-en/translations/server.yml        |   15 -
 .../console-en/translations/settings.set.yml  |   15 -
 .../console-en/translations/shell.yml         |    2 -
 .../translations/site.import.local.yml        |   20 -
 .../console-en/translations/site.install.yml  |   48 -
 .../translations/site.maintenance.yml         |   15 -
 .../console-en/translations/site.mode.yml     |   25 -
 .../console-en/translations/site.new.yml      |   24 -
 .../translations/site.statistics.yml          |   16 -
 .../console-en/translations/site.status.yml   |   28 -
 .../console-en/translations/state.delete.yml  |   11 -
 .../translations/state.override.yml           |   16 -
 .../translations/taxonomy.term.delete.yml     |   11 -
 .../console-en/translations/test.run.yml      |   23 -
 .../translations/theme.download.yml           |   18 -
 .../console-en/translations/theme.install.yml |   25 -
 .../console-en/translations/theme.path.yml    |   11 -
 .../translations/theme.uninstall.yml          |   24 -
 .../translations/update.entities.yml          |    9 -
 .../translations/update.execute.yml           |   17 -
 .../console-en/translations/user.create.yml   |   37 -
 .../console-en/translations/user.delete.yml   |   29 -
 .../user.login.clear.attempts.yml             |   11 -
 .../translations/user.login.url.yml           |   14 -
 .../translations/user.password.hash.yml       |   17 -
 .../translations/user.password.reset.yml      |   24 -
 .../console-en/translations/user.role.yml     |   20 -
 .../console-en/translations/views.disable.yml |   10 -
 .../console-en/translations/views.enable.yml  |   10 -
 vendor/alchemy/zippy/composer.json            |   10 +-
 .../zippy/src/Adapter/ZipExtensionAdapter.php |    6 +-
 vendor/alchemy/zippy/src/Archive/Archive.php  |    8 +-
 vendor/alchemy/zippy/src/Archive/Member.php   |    2 +-
 .../zippy/src/Parser/ZipOutputParser.php      |   13 +-
 vendor/alchemy/zippy/src/Zippy.php            |    6 +-
 vendor/composer/autoload_classmap.php         |   42 +-
 vendor/composer/autoload_static.php           |   42 +-
 vendor/composer/installed.json                |  317 ++--
 .../dot-access-configuration/README.md        |  107 +-
 .../YamlConfigurationBuilder.php              |    2 +-
 vendor/drupal/console-core/composer.json      |   68 +-
 .../config/chain/develop-contribute.yml       |    7 +-
 vendor/drupal/console-core/config/config.yml  |    9 +
 .../drupal/console-core/config/site.mode.yml  |    2 +-
 .../dist/chain/update-gitbook.yml             |   10 +-
 vendor/drupal/console-core/services.yml       |    1 +
 .../drupal/console-core/src/Application.php   |  119 +-
 .../src/Command/Chain/ChainCustomCommand.php  |    2 +-
 .../console-core/src/Command/Command.php      |   33 +
 .../src/Command/Generate/SiteAliasCommand.php |   21 +
 .../console-core/src/Command/InitCommand.php  |   40 +-
 .../src/Command/Settings/SetCommand.php       |   15 +
 .../src/Descriptor/TextDescriptor.php         |    3 +-
 .../MaintenanceModeListener.php               |  116 ++
 .../SaveStatisticsListener.php                |  127 ++
 .../SendStatisticsListener.php                |  215 +++
 .../src/Generator/InitGenerator.php           |   57 +-
 .../src/Utils/ConfigurationManager.php        |   94 +-
 .../console-core/src/Utils/DrupalFinder.php   |    6 +
 .../src/Utils/TranslatorManager.php           |   46 +-
 .../console-core/src/Utils/TwigRenderer.php   |   20 +
 .../templates/core/init/config.yml.twig       |    7 +
 .../core/init/statistics.config.yml.twig      |    6 +
 .../templates/core/sites/alias.yml.twig       |    7 +-
 vendor/drupal/console-en/README.md            |    5 +-
 vendor/drupal/console-en/composer.json        |    1 -
 .../console-en/translations/application.yml   |   14 +-
 .../drupal/console-en/translations/common.yml |    7 +-
 .../console-en/translations/config.delete.yml |    1 -
 .../console-en/translations/config.diff.yml   |    1 -
 .../console-en/translations/config.edit.yml   |    1 -
 .../config.export.content.type.yml            |   14 +-
 .../translations/config.export.entity.yml     |   31 +
 .../translations/config.export.single.yml     |    7 +-
 .../translations/config.export.view.yml       |   24 +-
 .../console-en/translations/config.export.yml |    5 +-
 .../translations/config.import.single.yml     |    2 +-
 .../console-en/translations/config.import.yml |    4 +-
 .../translations/config.override.yml          |   16 +-
 .../translations/config.validate.yml          |    1 -
 .../translations/create.comments.yml          |    1 -
 .../console-en/translations/create.nodes.yml  |    4 +-
 .../console-en/translations/create.roles.yml  |    1 -
 .../console-en/translations/create.terms.yml  |    1 -
 .../console-en/translations/create.users.yml  |    1 -
 .../translations/create.vocabularies.yml      |    1 -
 .../console-en/translations/cron.release.yml  |    1 -
 .../console-en/translations/database.add.yml  |    1 +
 .../translations/database.client.yml          |    3 +-
 .../translations/database.connect.yml         |    9 +-
 .../console-en/translations/database.drop.yml |    3 +-
 .../console-en/translations/database.dump.yml |    4 +-
 .../translations/database.log.clear.yml       |    2 +-
 .../translations/database.log.common.yml      |    3 +-
 .../translations/database.query.yml           |    1 +
 .../translations/database.restore.yml         |    3 +-
 .../translations/debug.breakpoints.yml        |    3 -
 .../console-en/translations/debug.event.yml   |    4 +-
 .../translations/debug.features.yml           |    1 -
 .../console-en/translations/debug.module.yml  |   10 +-
 .../console-en/translations/debug.router.yml  |    8 +-
 .../console-en/translations/debug.theme.yml   |    2 +-
 .../translations/debug.update.composer.yml    |   13 +
 .../console-en/translations/entity.delete.yml |    2 +-
 .../drupal/console-en/translations/exec.yml   |    1 -
 .../translations/generate.ajax.command.yml    |    2 +-
 .../translations/generate.block.type.yml      |   26 +
 .../translations/generate.breakpoint.yml      |    2 +-
 .../translations/generate.cache.context.yml   |    2 +-
 .../translations/generate.command.yml         |    5 +-
 .../translations/generate.composer.yml        |   58 +
 .../translations/generate.controller.yml      |    2 +-
 .../translations/generate.entity.bundle.yml   |    2 +-
 .../translations/generate.entity.config.yml   |    2 +-
 .../translations/generate.entity.content.yml  |    9 +-
 .../translations/generate.form.alter.yml      |    2 +-
 .../console-en/translations/generate.help.yml |    2 +-
 .../translations/generate.module.file.yml     |    2 +-
 .../translations/generate.module.yml          |    2 +-
 .../translations/generate.plugin.block.yml    |    8 +-
 .../generate.plugin.ckeditorbutton.yml        |   17 +-
 .../generate.plugin.derivative.yml            |   29 +
 .../generate.plugin.migrate.dataparser.yml    |   20 +
 .../translations/generate.plugin.queue.yml    |   25 +
 .../generate.plugin.rules.action.yml          |    2 +-
 .../generate.plugin.rules.condition.yml       |   19 +-
 .../generate.plugin.rules.dataprocessor.yml   |   24 +
 .../generate.plugin.validationconstraint.yml  |   29 +
 .../generate.plugin.views.field.yml           |    7 +-
 .../translations/generate.service.yml         |    2 +
 .../translations/generate.site.alias.yml      |   19 +-
 .../translations/generate.theme.setting.yml   |   30 +
 .../translations/generate.theme.yml           |    1 +
 .../drupal/console-en/translations/init.yml   |   16 +-
 .../translations/migrate.rollback.yml         |    2 +-
 .../translations/module.download.yml          |    4 -
 .../translations/module.uninstall.yml         |    3 +-
 .../console-en/translations/multisite.new.yml |    2 +-
 .../console-en/translations/queue.run.yml     |    1 -
 .../translations/router.rebuild.yml           |    1 +
 .../console-en/translations/self-update.yml   |    1 -
 .../translations/service.override.yml         |   26 +
 .../console-en/translations/site.install.yml  |   14 +-
 .../console-en/translations/site.status.yml   |    8 +-
 .../console-en/translations/snippet.yml       |   16 +
 .../translations/theme.download.yml           |    2 -
 .../console-en/translations/theme.install.yml |    4 +
 .../translations/update.execute.yml           |    7 +
 .../translations/user.login.url.yml           |    2 +-
 .../console-en/translations/user.unblock.yml  |   21 +
 .../drupal/console-extend-plugin/.gitignore   |    8 +-
 .../console-extend-plugin/composer.json       |    7 +-
 .../src/DrupalConsoleInstaller.php            |   19 +
 .../console-extend-plugin/src/Extender.php    |   21 +
 .../console-extend-plugin/src/Installer.php   |   71 +
 vendor/drupal/console/.github/FUNDING.yml     |   12 +
 vendor/drupal/console/.travis.yml             |   79 +-
 vendor/drupal/console/README.md               |   18 +-
 vendor/drupal/console/autoload.local.php.dist |    2 +-
 vendor/drupal/console/autoload.php.dist       |    2 +-
 vendor/drupal/console/composer.json           |   62 +-
 .../drupal/console/config/services/config.yml |    9 +-
 .../console/config/services/database.yml      |   25 +-
 .../drupal/console/config/services/debug.yml  |   11 +-
 .../console/config/services/generate.yml      |   45 +-
 .../console/config/services/generator.yml     |   50 +-
 .../drupal/console/config/services/misc.yml   |    4 +
 .../drupal/console/config/services/module.yml |    2 +-
 .../console/config/services/multisite.yml     |   11 +
 .../drupal/console/config/services/rest.yml   |    5 +-
 .../drupal/console/config/services/site.yml   |    9 +-
 .../drupal/console/config/services/theme.yml  |    4 +-
 .../drupal/console/config/services/user.yml   |    7 +-
 .../drupal/console/config/services/views.yml  |    4 +-
 vendor/drupal/console/services.yml            |    6 -
 vendor/drupal/console/src/Application.php     |    2 +-
 .../drupal/console/src/Bootstrap/Drupal.php   |   13 +-
 .../src/Command/Config/ExportCommand.php      |   37 +-
 .../Config/ExportContentTypeCommand.php       |  185 +-
 .../Command/Config/ExportEntityCommand.php    |  271 +++
 .../Command/Config/ExportSingleCommand.php    |    6 +-
 .../src/Command/Config/ExportViewCommand.php  |   88 +-
 .../src/Command/Config/ImportCommand.php      |   22 +-
 .../Command/Config/ImportSingleCommand.php    |    2 +-
 .../src/Command/Config/OverrideCommand.php    |   93 +-
 .../src/Command/Create/NodesCommand.php       |   22 +-
 .../src/Command/Create/UsersCommand.php       |    4 +-
 .../src/Command/Cron/ExecuteCommand.php       |    5 +-
 .../src/Command/Database/AddCommand.php       |   13 +-
 .../src/Command/Database/ClientCommand.php    |   20 +-
 .../src/Command/Database/ConnectCommand.php   |   27 +-
 .../src/Command/Database/DatabaseLogBase.php  |   22 +-
 .../src/Command/Database/DropCommand.php      |   30 +-
 .../src/Command/Database/DumpCommand.php      |  146 +-
 .../src/Command/Database/QueryCommand.php     |   43 +-
 .../src/Command/Database/RestoreCommand.php   |   82 +-
 .../src/Command/Debug/ContainerCommand.php    |  181 +-
 .../Command/Debug/DatabaseTableCommand.php    |   17 +-
 .../src/Command/Debug/EntityCommand.php       |   10 +-
 .../console/src/Command/Debug/HookCommand.php |  198 ++
 .../src/Command/Debug/ModuleCommand.php       |  135 +-
 .../src/Command/Debug/PermissionCommand.php   |    6 +-
 .../src/Command/Debug/PluginCommand.php       |  108 +-
 .../console/src/Command/Debug/RestCommand.php |   16 +-
 .../src/Command/Debug/RouterCommand.php       |   39 +-
 .../src/Command/Debug/UpdateCommand.php       |   60 +-
 .../Command/Debug/UpdateComposerCommand.php   |   71 +
 .../console/src/Command/Debug/UserCommand.php |   11 +-
 .../src/Command/Debug/ViewsPluginsCommand.php |    8 +-
 .../src/Command/Entity/DeleteCommand.php      |   10 +-
 .../src/Command/Generate/AjaxCommand.php      |    4 +-
 .../AuthenticationProviderCommand.php         |    4 +-
 .../src/Command/Generate/BlockTypeCommand.php |  250 +++
 .../Command/Generate/CacheContextCommand.php  |   18 +-
 .../src/Command/Generate/CommandCommand.php   |   12 +-
 .../src/Command/Generate/ComposerCommand.php  |  417 ++++
 .../Command/Generate/ControllerCommand.php    |   16 +-
 .../Command/Generate/EntityBundleCommand.php  |    4 +-
 .../Command/Generate/EntityConfigCommand.php  |    4 +-
 .../Command/Generate/EntityContentCommand.php |   79 +-
 .../Generate/EventSubscriberCommand.php       |   18 +-
 .../src/Command/Generate/FormAlterCommand.php |    4 +-
 .../src/Command/Generate/FormCommand.php      |   21 +-
 .../src/Command/Generate/HelpCommand.php      |    2 +-
 .../src/Command/Generate/JsTestCommand.php    |    4 +-
 .../src/Command/Generate/ModuleCommand.php    |   63 +-
 .../Command/Generate/ModuleFileCommand.php    |    6 +-
 .../Command/Generate/PermissionCommand.php    |    2 +-
 .../Command/Generate/PluginBlockCommand.php   |   71 +-
 .../Generate/PluginCKEditorButtonCommand.php  |  100 +-
 .../Generate/PluginConditionCommand.php       |   18 +-
 .../Generate/PluginDerivativeCommand.php      |  221 +++
 .../Command/Generate/PluginFieldCommand.php   |    7 +-
 .../Generate/PluginFieldFormatterCommand.php  |    2 +-
 .../Generate/PluginFieldTypeCommand.php       |    2 +-
 .../Generate/PluginFieldWidgetCommand.php     |    2 +-
 .../Generate/PluginImageEffectCommand.php     |    2 +-
 .../Generate/PluginImageFormatterCommand.php  |    2 +-
 .../Command/Generate/PluginMailCommand.php    |   16 +-
 .../PluginMigrateDataParserCommand.php        |  174 ++
 .../Generate/PluginMigrateProcessCommand.php  |   18 +-
 .../Generate/PluginMigrateSourceCommand.php   |   32 +-
 .../Generate/PluginQueueWorkerCommand.php     |  212 +++
 .../Generate/PluginRestResourceCommand.php    |   63 +-
 .../Generate/PluginRulesActionCommand.php     |  238 ++-
 .../Generate/PluginRulesConditionCommand.php  |  269 +++
 .../PluginRulesDataprocessorCommand.php       |  182 ++
 .../Generate/PluginSkeletonCommand.php        |   16 +-
 .../Generate/PluginTypeAnnotationCommand.php  |    4 +-
 .../Generate/PluginTypeYamlCommand.php        |    4 +-
 .../PluginValidationConstraintCommand.php     |  221 +++
 .../Generate/PluginViewsFieldCommand.php      |  152 +-
 .../Command/Generate/PostUpdateCommand.php    |    2 +-
 .../Generate/RouteSubscriberCommand.php       |    2 +-
 .../src/Command/Generate/ServiceCommand.php   |   21 +-
 .../src/Command/Generate/ThemeCommand.php     |   37 +-
 .../Command/Generate/ThemeSettingCommand.php  |  312 +++
 .../Command/Generate/TwigExtensionCommand.php |   12 +-
 .../src/Command/Generate/UpdateCommand.php    |    2 +-
 .../src/Command/Module/DownloadCommand.php    |  153 +-
 .../src/Command/Module/InstallCommand.php     |  135 +-
 .../src/Command/Module/UninstallCommand.php   |   18 +-
 .../src/Command/Module/UpdateCommand.php      |    8 +-
 .../src/Command/Multisite/NewCommand.php      |   14 +-
 .../src/Command/Multisite/UpdateCommand.php   |   14 +-
 .../src/Command/Rest/DisableCommand.php       |   19 +-
 .../src/Command/Rest/EnableCommand.php        |   54 +-
 .../src/Command/Router/RebuildCommand.php     |    7 +-
 .../src/Command/Service/OverrideCommand.php   |  247 +++
 .../src/Command/Shared/ArrayInputTrait.php    |    2 +-
 .../src/Command/Shared/ConnectTrait.php       |   66 +-
 .../src/Command/Shared/EventsTrait.php        |    3 +-
 .../src/Command/Shared/ExportTrait.php        |  153 +-
 .../src/Command/Shared/MigrationTrait.php     |    1 -
 .../src/Command/Shared/ModuleTrait.php        |   71 +-
 .../Command/Shared/ProjectDownloadTrait.php   |   61 +-
 .../console/src/Command/Shared/RestTrait.php  |    4 +-
 .../console/src/Command/Shared/ThemeTrait.php |   88 +
 .../src/Command/Shared/UpdateTrait.php        |  111 ++
 .../src/Command/Site/InstallCommand.php       |  218 ++-
 .../src/Command/Site/MaintenanceCommand.php   |   10 +-
 .../console/src/Command/Site/ModeCommand.php  |   10 +-
 .../src/Command/Site/StatisticsCommand.php    |  192 +-
 .../src/Command/Site/StatusCommand.php        |   94 +-
 .../src/Command/Theme/DownloadCommand.php     |   44 +-
 .../src/Command/Theme/InstallCommand.php      |   16 +-
 .../src/Command/Theme/ThemeBaseCommand.php    |   51 +-
 .../src/Command/Update/EntitiesCommand.php    |    9 +-
 .../src/Command/Update/ExecuteCommand.php     |  113 +-
 .../src/Command/User/CreateCommand.php        |    5 +-
 .../src/Command/User/DeleteCommand.php        |   14 +-
 .../src/Command/User/LoginUrlCommand.php      |   28 +-
 .../src/Command/User/UnblockCommand.php       |  102 +
 .../console/src/Command/User/UserBase.php     |    9 +-
 .../src/Command/Views/DisableCommand.php      |   20 +-
 .../src/Command/Views/EnableCommand.php       |   19 +-
 .../console/src/Extension/Extension.php       |   25 +-
 .../drupal/console/src/Extension/Manager.php  |   17 +-
 .../src/Generator/BlockTypeGenerator.php      |   50 +
 .../src/Generator/CacheContextGenerator.php   |    2 +-
 .../src/Generator/ComposerGenerator.php       |   51 +
 .../src/Generator/ControllerGenerator.php     |    2 +-
 .../Generator/DatabaseSettingsGenerator.php   |   23 +-
 .../src/Generator/EntityContentGenerator.php  |  151 +-
 .../src/Generator/FormAlterGenerator.php      |    5 +
 .../console/src/Generator/FormGenerator.php   |    2 +-
 .../console/src/Generator/ModuleGenerator.php |   14 +-
 .../src/Generator/PluginBlockGenerator.php    |   42 +
 .../PluginCKEditorButtonGenerator.php         |    8 +-
 .../Generator/PluginDerivativeGenerator.php   |   57 +
 .../Generator/PluginFieldWidgetGenerator.php  |    9 +
 .../PluginMigrateDataParserGenerator.php      |   45 +
 .../Generator/PluginQueueWorkerGenerator.php  |   50 +
 .../Generator/PluginRulesActionGenerator.php  |   11 +-
 .../PluginRulesConditionGenerator.php         |   45 +
 .../PluginRulesDataprocessorGenerator.php     |   45 +
 .../src/Generator/PluginSkeletonGenerator.php |    1 +
 .../PluginValidationConstraintGenerator.php   |   63 +
 .../Generator/PluginViewsFieldGenerator.php   |   18 +-
 .../console/src/Generator/ThemeGenerator.php  |    7 +
 .../src/Generator/ThemeSettingGenerator.php   |  154 ++
 .../console/src/Utils/Create/NodeData.php     |   21 +
 vendor/drupal/console/src/Utils/DrupalApi.php |   82 +-
 vendor/drupal/console/src/Utils/Site.php      |   69 +-
 vendor/drupal/console/src/Utils/Validator.php |   54 +-
 .../console/templates/base/class.php.twig     |    1 +
 .../templates/database/add-default.php.twig   |   10 +
 .../templates/module/composer.json.twig       |   66 +-
 .../console/templates/module/help.php.twig    |    8 +-
 .../templates/module/js/commands.php.twig     |    7 +-
 .../module/links.action-entity.yml.twig       |    1 -
 .../module/links.menu-entity-config.yml.twig  |    1 -
 .../templates/module/links.menu.yml.twig      |    1 -
 .../module/links.task-entity-content.yml.twig |    1 -
 .../module-block-twig-template-append.twig    |   22 +
 .../console/templates/module/module-file.twig |    9 +-
 .../console/templates/module/module.twig      |    2 +
 .../templates/module/module.views.inc.twig    |   22 +-
 .../templates/module/permission.yml.twig      |    1 -
 .../permissions-entity-content.yml.twig       |    5 +
 .../templates/module/post-update.php.twig     |    2 +-
 .../templates/module/routing-form.yml.twig    |    4 +-
 .../console/templates/module/schema.yml.twig  |   10 +
 .../templates/module/services.yml.twig        |    7 +-
 .../module/src/Command/command.php.twig       |   19 +-
 .../console/translations/en/command.yml.twig  |    2 +-
 .../module/src/Controller/controller.php.twig |   21 +-
 .../src/Controller/entity-controller.php.twig |  100 +-
 .../entity-bundle-field-info-alter.php.twig   |   20 +
 .../entity-content-revision-delete.php.twig   |   35 +-
 ...ntent-revision-revert-translation.php.twig |   34 +-
 .../entity-content-revision-revert.php.twig   |   38 +-
 .../src/Entity/Form/entity-content.php.twig   |   30 +-
 .../Entity/entity-content-views-data.php.twig |    1 -
 ...ith-bundle.theme_hook_suggestions.php.twig |    4 +-
 .../module/src/Entity/entity-content.php.twig |   67 +-
 .../Entity/interface-entity-content.php.twig  |   30 +-
 .../module/src/Form/entity-delete.php.twig    |   12 +-
 .../templates/module/src/Form/entity.php.twig |    4 +-
 .../module/src/Form/form-alter.php.twig       |   66 +-
 .../module/src/Form/form-config.php.twig      |   40 +-
 .../templates/module/src/Form/form.php.twig   |   38 +-
 .../module/src/Generator/generator.php.twig   |   20 +-
 .../src/Plugin/Action/rulesaction.php.twig    |   44 -
 .../module/src/Plugin/Block/block.php.twig    |   54 +-
 .../Plugin/Block/block_derivative.php.twig    |   93 +
 .../src/Plugin/Block/blocktype.php.twig       |   25 +
 .../CKEditorPlugin/ckeditorbutton.php.twig    |   18 +-
 .../src/Plugin/CKEditorPlugin/plugin.php.twig |   20 +
 .../src/Plugin/Condition/condition.php.twig   |  166 +-
 .../Plugin/Condition/rulescondition.php.twig  |   43 +
 .../derivative_block_derivative.php.twig      |   75 +
 .../FieldFormatter/imageformatter.php.twig    |  102 +-
 .../Field/FieldWidget/fieldwidget.php.twig    |    1 +
 .../module/src/Plugin/Mail/mail.php.twig      |   37 +-
 .../Plugin/QueueWorker/queue_worker.php.twig  |   29 +
 .../src/Plugin/Rest/Resource/rest.php.twig    |   88 +-
 .../Plugin/RulesAction/rulesaction.php.twig   |   51 +
 .../rulesdataprocessor.php.twig               |   34 +
 .../Validation/Constraint/constraint.php.twig |   34 +
 .../Validation/Constraint/validator.php.twig  |   47 +
 .../src/Plugin/migrate/source/source.php.twig |   20 +-
 .../data_parser/data_parser.php.twig          |   39 +
 .../module/src/Plugin/skeleton.php.twig       |   61 +-
 ...cesscontrolhandler-entity-content.php.twig |   79 +
 .../module/src/cache-context.php.twig         |   20 +-
 ...entity-content-bundle-permissions.php.twig |   92 +
 .../entity-content-route-provider.php.twig    |    6 +-
 .../module/src/entity-route-provider.php.twig |    2 -
 .../module/src/entity-storage.php.twig        |    4 +
 .../src/entity-translation-handler.php.twig   |    2 +-
 .../module/src/event-subscriber.php.twig      |   13 +-
 .../src/interface-entity-storage.php.twig     |    4 +
 .../src/listbuilder-entity-content.php.twig   |    4 +-
 .../module/system.action.action.yml.twig      |   11 -
 .../module/templates/plugin-block-html.twig   |   18 +
 .../templates/module/twig-template-file.twig  |    2 +-
 .../console/templates/module/update.php.twig  |    2 +-
 .../console/templates/theme/info.yml.twig     |   14 +-
 .../templates/theme/libraries.yml.twig        |    4 +-
 vendor/drupal/console/uninstall.services.yml  |   39 +-
 .../symfony-console-completion/.travis.yml    |    2 +
 .../symfony-console-completion/README.md      |    4 +-
 .../symfony-console-completion/composer.json  |    4 +-
 .../src/CompletionCommand.php                 |   98 +-
 .../src/CompletionContext.php                 |  212 ++-
 .../src/CompletionHandler.php                 |   63 +-
 .../src/HookFactory.php                       |   29 +-
 .../BashCompletion/CompletionCommandTest.php  |   41 +
 .../BashCompletion/CompletionContextTest.php  |   67 +
 .../BashCompletion/CompletionHandlerTest.php  |   26 +
 .../BashCompletion/HookFactoryTest.php        |   53 +
 vendor/symfony/config/.gitignore              |    3 -
 vendor/symfony/config/CHANGELOG.md            |   30 +
 vendor/symfony/config/ConfigCache.php         |    4 +-
 vendor/symfony/config/ConfigCacheFactory.php  |    4 +-
 .../symfony/config/Definition/ArrayNode.php   |   45 +-
 vendor/symfony/config/Definition/BaseNode.php |  208 +-
 .../symfony/config/Definition/BooleanNode.php |    8 +
 .../Builder/ArrayNodeDefinition.php           |   44 +-
 .../Builder/BooleanNodeDefinition.php         |    4 +-
 .../Builder/BuilderAwareInterface.php         |   25 +
 .../Definition/Builder/EnumNodeDefinition.php |    2 +-
 .../Builder/FloatNodeDefinition.php           |    2 +-
 .../Builder/IntegerNodeDefinition.php         |    2 +-
 .../config/Definition/Builder/NodeBuilder.php |    2 +-
 .../Definition/Builder/NodeDefinition.php     |   30 +-
 .../Builder/ParentNodeDefinitionInterface.php |    9 +-
 .../Builder/ScalarNodeDefinition.php          |    2 +-
 .../config/Definition/Builder/TreeBuilder.php |   59 +-
 .../Builder/VariableNodeDefinition.php        |    2 +-
 .../Definition/Dumper/XmlReferenceDumper.php  |   24 +-
 .../Definition/Dumper/YamlReferenceDumper.php |   18 +-
 vendor/symfony/config/Definition/EnumNode.php |   12 +-
 .../TreeWithoutRootNodeException.php}         |   11 +-
 .../symfony/config/Definition/FloatNode.php   |    8 +
 .../symfony/config/Definition/IntegerNode.php |    8 +
 .../symfony/config/Definition/NumericNode.php |    4 +-
 .../symfony/config/Definition/Processor.php   |    8 +-
 .../config/Definition/PrototypedArrayNode.php |    4 +-
 .../symfony/config/Definition/ScalarNode.php  |   14 +
 .../config/Definition/VariableNode.php        |   15 +
 .../DependencyInjection/ConfigCachePass.php   |   52 -
 ...LoaderImportCircularReferenceException.php |    4 +-
 .../Exception/FileLoaderLoadException.php     |   14 +-
 .../FileLocatorFileNotFoundException.php      |    2 +-
 .../config/Exception/LoaderLoadException.php  |   21 +
 vendor/symfony/config/FileLocator.php         |   10 +-
 .../config/Loader/DelegatingLoader.php        |    4 +-
 vendor/symfony/config/Loader/FileLoader.php   |   44 +-
 vendor/symfony/config/Loader/Loader.php       |    6 +-
 .../Resource/ClassExistenceResource.php       |   29 +-
 .../config/Resource/ComposerResource.php      |   22 +-
 .../config/Resource/DirectoryResource.php     |   22 +-
 .../config/Resource/FileExistenceResource.php |   24 +-
 .../symfony/config/Resource/FileResource.php  |   22 +-
 .../symfony/config/Resource/GlobResource.php  |  140 +-
 .../Resource/ReflectionClassResource.php      |  163 +-
 .../config/ResourceCheckerConfigCache.php     |   35 +-
 .../ResourceCheckerConfigCacheFactory.php     |    4 +-
 .../config/ResourceCheckerInterface.php       |    5 +-
 .../config/Tests/ConfigCacheFactoryTest.php   |   27 -
 .../symfony/config/Tests/ConfigCacheTest.php  |   99 -
 .../config/Tests/Definition/ArrayNodeTest.php |  237 ---
 .../Tests/Definition/BooleanNodeTest.php      |   74 -
 .../Builder/ArrayNodeDefinitionTest.php       |  362 ----
 .../Builder/BooleanNodeDefinitionTest.php     |   37 -
 .../Builder/EnumNodeDefinitionTest.php        |   73 -
 .../Definition/Builder/ExprBuilderTest.php    |  264 ---
 .../Definition/Builder/NodeBuilderTest.php    |   91 -
 .../Builder/NumericNodeDefinitionTest.php     |   89 -
 .../Definition/Builder/TreeBuilderTest.php    |  134 --
 .../Dumper/XmlReferenceDumperTest.php         |  114 --
 .../Dumper/YamlReferenceDumperTest.php        |  143 --
 .../config/Tests/Definition/EnumNodeTest.php  |   51 -
 .../Tests/Definition/FinalizationTest.php     |   74 -
 .../config/Tests/Definition/FloatNodeTest.php |   78 -
 .../Tests/Definition/IntegerNodeTest.php      |   75 -
 .../config/Tests/Definition/MergeTest.php     |  192 --
 .../Tests/Definition/NormalizationTest.php    |  228 ---
 .../Definition/PrototypedArrayNodeTest.php    |  341 ----
 .../Tests/Definition/ScalarNodeTest.php       |  161 --
 .../ConfigCachePassTest.php                   |   59 -
 .../Exception/FileLoaderLoadExceptionTest.php |   98 -
 .../symfony/config/Tests/FileLocatorTest.php  |  114 --
 .../config/Tests/Fixtures/Again/foo.xml       |    0
 .../config/Tests/Fixtures/BadFileName.php     |    9 -
 .../config/Tests/Fixtures/BadParent.php       |    7 -
 .../Fixtures/Builder/BarNodeDefinition.php    |   23 -
 .../Tests/Fixtures/Builder/NodeBuilder.php    |   34 -
 .../Configuration/ExampleConfiguration.php    |  102 -
 .../config/Tests/Fixtures/ParseError.php      |    7 -
 .../Tests/Fixtures/Resource/.hiddenFile       |    0
 .../Fixtures/Resource/ConditionalClass.php    |    9 -
 .../Tests/Fixtures/Util/document_type.xml     |    3 -
 .../config/Tests/Fixtures/Util/invalid.xml    |    2 -
 .../Tests/Fixtures/Util/invalid_schema.xml    |    2 -
 .../Tests/Fixtures/Util/not_readable.xml      |    0
 .../config/Tests/Fixtures/Util/schema.xsd     |    9 -
 .../config/Tests/Fixtures/Util/valid.xml      |    3 -
 vendor/symfony/config/Tests/Fixtures/foo.xml  |    0
 .../Tests/Loader/DelegatingLoaderTest.php     |   69 -
 .../config/Tests/Loader/FileLoaderTest.php    |  128 --
 .../Tests/Loader/LoaderResolverTest.php       |   47 -
 .../config/Tests/Loader/LoaderTest.php        |  116 --
 .../Resource/ClassExistenceResourceTest.php   |  130 --
 .../Tests/Resource/ComposerResourceTest.php   |   47 -
 .../Tests/Resource/DirectoryResourceTest.php  |  181 --
 .../Resource/FileExistenceResourceTest.php    |   71 -
 .../Tests/Resource/FileResourceTest.php       |   83 -
 .../Tests/Resource/GlobResourceTest.php       |  114 --
 .../Resource/ReflectionClassResourceTest.php  |  223 ---
 .../config/Tests/Resource/ResourceStub.php    |   34 -
 .../Tests/ResourceCheckerConfigCacheTest.php  |  150 --
 .../config/Tests/Util/XmlUtilsTest.php        |  237 ---
 vendor/symfony/config/Util/XmlUtils.php       |   22 +-
 vendor/symfony/config/composer.json           |   23 +-
 vendor/symfony/config/phpunit.xml.dist        |   31 -
 vendor/symfony/css-selector/.gitignore        |    3 -
 vendor/symfony/css-selector/CHANGELOG.md      |    5 +
 .../css-selector/CssSelectorConverter.php     |    2 +-
 .../Exception/ExceptionInterface.php          |    2 +-
 .../Exception/SyntaxErrorException.php        |    1 -
 vendor/symfony/css-selector/LICENSE           |    2 +-
 .../css-selector/Node/AbstractNode.php        |    7 +-
 .../css-selector/Node/AttributeNode.php       |   38 +-
 .../symfony/css-selector/Node/ClassNode.php   |   20 +-
 .../Node/CombinedSelectorNode.php             |   26 +-
 .../symfony/css-selector/Node/ElementNode.php |   20 +-
 .../css-selector/Node/FunctionNode.php        |   22 +-
 vendor/symfony/css-selector/Node/HashNode.php |   20 +-
 .../css-selector/Node/NegationNode.php        |   14 +-
 .../css-selector/Node/NodeInterface.php       |   21 +-
 .../symfony/css-selector/Node/PseudoNode.php  |   20 +-
 .../css-selector/Node/SelectorNode.php        |   20 +-
 .../symfony/css-selector/Node/Specificity.php |   23 +-
 .../Parser/Handler/CommentHandler.php         |    2 +-
 .../Parser/Handler/HandlerInterface.php       |    5 +-
 .../Parser/Handler/HashHandler.php            |    2 +-
 .../Parser/Handler/IdentifierHandler.php      |    2 +-
 .../Parser/Handler/NumberHandler.php          |    2 +-
 .../Parser/Handler/StringHandler.php          |    6 +-
 .../Parser/Handler/WhitespaceHandler.php      |    2 +-
 vendor/symfony/css-selector/Parser/Parser.php |  117 +-
 .../css-selector/Parser/ParserInterface.php   |    4 +-
 vendor/symfony/css-selector/Parser/Reader.php |   44 +-
 .../Parser/Shortcut/ClassParser.php           |    8 +-
 .../Parser/Shortcut/ElementParser.php         |    6 +-
 .../Parser/Shortcut/EmptyStringParser.php     |    6 +-
 .../Parser/Shortcut/HashParser.php            |    8 +-
 vendor/symfony/css-selector/Parser/Token.php  |   62 +-
 .../css-selector/Parser/TokenStream.php       |   28 +-
 .../Parser/Tokenizer/Tokenizer.php            |    8 +-
 .../Parser/Tokenizer/TokenizerEscaping.php    |   23 +-
 .../Parser/Tokenizer/TokenizerPatterns.php    |   37 +-
 .../Tests/CssSelectorConverterTest.php        |   76 -
 .../Tests/Node/AbstractNodeTest.php           |   34 -
 .../Tests/Node/AttributeNodeTest.php          |   37 -
 .../css-selector/Tests/Node/ClassNodeTest.php |   33 -
 .../Tests/Node/CombinedSelectorNodeTest.php   |   35 -
 .../Tests/Node/ElementNodeTest.php            |   35 -
 .../Tests/Node/FunctionNodeTest.php           |   47 -
 .../css-selector/Tests/Node/HashNodeTest.php  |   33 -
 .../Tests/Node/NegationNodeTest.php           |   33 -
 .../Tests/Node/PseudoNodeTest.php             |   32 -
 .../Tests/Node/SelectorNodeTest.php           |   34 -
 .../Tests/Node/SpecificityTest.php            |   63 -
 .../Parser/Handler/AbstractHandlerTest.php    |   70 -
 .../Parser/Handler/CommentHandlerTest.php     |   55 -
 .../Tests/Parser/Handler/HashHandlerTest.php  |   49 -
 .../Parser/Handler/IdentifierHandlerTest.php  |   49 -
 .../Parser/Handler/NumberHandlerTest.php      |   50 -
 .../Parser/Handler/StringHandlerTest.php      |   50 -
 .../Parser/Handler/WhitespaceHandlerTest.php  |   44 -
 .../css-selector/Tests/Parser/ParserTest.php  |  250 ---
 .../css-selector/Tests/Parser/ReaderTest.php  |  102 -
 .../Tests/Parser/Shortcut/ClassParserTest.php |   45 -
 .../Parser/Shortcut/ElementParserTest.php     |   44 -
 .../Parser/Shortcut/EmptyStringParserTest.php |   36 -
 .../Tests/Parser/Shortcut/HashParserTest.php  |   45 -
 .../Tests/Parser/TokenStreamTest.php          |   96 -
 .../Tests/XPath/Fixtures/ids.html             |   48 -
 .../Tests/XPath/Fixtures/lang.xml             |   11 -
 .../Tests/XPath/Fixtures/shakespear.html      |  308 ---
 .../Tests/XPath/TranslatorTest.php            |  327 ----
 .../XPath/Extension/AbstractExtension.php     |   20 +-
 .../Extension/AttributeMatchingExtension.php  |   96 +-
 .../XPath/Extension/CombinationExtension.php  |   36 +-
 .../XPath/Extension/ExtensionInterface.php    |   14 +-
 .../XPath/Extension/FunctionExtension.php     |   67 +-
 .../XPath/Extension/HtmlExtension.php         |   81 +-
 .../XPath/Extension/NodeExtension.php         |   97 +-
 .../XPath/Extension/PseudoClassExtension.php  |   70 +-
 .../symfony/css-selector/XPath/Translator.php |   89 +-
 .../XPath/TranslatorInterface.php             |   14 +-
 .../symfony/css-selector/XPath/XPathExpr.php  |   43 +-
 vendor/symfony/css-selector/composer.json     |    9 +-
 vendor/symfony/css-selector/phpunit.xml.dist  |   31 -
 .../dom-crawler/AbstractUriElement.php        |   34 +-
 vendor/symfony/dom-crawler/CHANGELOG.md       |    8 +
 vendor/symfony/dom-crawler/Crawler.php        |  129 +-
 .../dom-crawler/Field/ChoiceFormField.php     |   16 +-
 .../dom-crawler/Field/FileFormField.php       |    8 +-
 vendor/symfony/dom-crawler/Form.php           |   34 +-
 .../symfony/dom-crawler/FormFieldRegistry.php |   22 +-
 vendor/symfony/dom-crawler/Image.php          |    2 +-
 vendor/symfony/dom-crawler/LICENSE            |    2 +-
 .../symfony/dom-crawler/Tests/CrawlerTest.php |  156 +-
 .../Tests/Field/ChoiceFormFieldTest.php       |  100 +-
 .../Tests/Field/FileFormFieldTest.php         |   22 +-
 .../dom-crawler/Tests/Field/FormFieldTest.php |    4 +-
 .../Tests/Field/FormFieldTestCase.php         |    2 +-
 .../Tests/Field/InputFormFieldTest.php        |    6 +-
 vendor/symfony/dom-crawler/Tests/FormTest.php |  264 +--
 .../symfony/dom-crawler/Tests/ImageTest.php   |   29 +-
 vendor/symfony/dom-crawler/Tests/LinkTest.php |  122 +-
 vendor/symfony/dom-crawler/composer.json      |    6 +-
 vendor/symfony/dom-crawler/phpunit.xml.dist   |    2 +-
 vendor/symfony/filesystem/.gitignore          |    3 -
 vendor/symfony/filesystem/CHANGELOG.md        |   17 +
 .../Exception/ExceptionInterface.php          |    2 +-
 .../Exception/FileNotFoundException.php       |    2 +-
 .../filesystem/Exception/IOException.php      |    2 +-
 .../Exception/InvalidArgumentException.php    |   19 +
 vendor/symfony/filesystem/Filesystem.php      |  132 +-
 vendor/symfony/filesystem/LockHandler.php     |  121 --
 .../filesystem/Tests/ExceptionTest.php        |   47 -
 .../filesystem/Tests/FilesystemTest.php       | 1684 -----------------
 .../filesystem/Tests/FilesystemTestCase.php   |  165 --
 .../Tests/Fixtures/MockStream/MockStream.php  |   46 -
 .../filesystem/Tests/LockHandlerTest.php      |  144 --
 vendor/symfony/filesystem/composer.json       |    2 +-
 vendor/symfony/filesystem/phpunit.xml.dist    |   30 -
 vendor/symfony/finder/.gitignore              |    3 -
 vendor/symfony/finder/CHANGELOG.md            |   19 +
 .../finder/Comparator/DateComparator.php      |    2 +-
 .../finder/Comparator/NumberComparator.php    |    2 +-
 .../Exception/DirectoryNotFoundException.php} |    9 +-
 .../finder/Exception/ExceptionInterface.php   |   25 -
 vendor/symfony/finder/Finder.php              |  143 +-
 vendor/symfony/finder/Gitignore.php           |  133 ++
 .../finder/Iterator/CustomFilterIterator.php  |    4 +-
 .../Iterator/DateRangeFilterIterator.php      |    2 +-
 .../Iterator/DepthRangeFilterIterator.php     |    4 +-
 .../ExcludeDirectoryFilterIterator.php        |    5 +-
 .../Iterator/FileTypeFilterIterator.php       |    4 +-
 .../finder/Iterator/FilterIterator.php        |   60 -
 .../Iterator/MultiplePcreFilterIterator.php   |    2 +-
 .../Iterator/RecursiveDirectoryIterator.php   |   16 +-
 .../Iterator/SizeRangeFilterIterator.php      |    2 +-
 .../finder/Iterator/SortableIterator.php      |   51 +-
 vendor/symfony/finder/SplFileInfo.php         |    9 +-
 .../Tests/Comparator/ComparatorTest.php       |   65 -
 .../Tests/Comparator/DateComparatorTest.php   |   64 -
 .../Tests/Comparator/NumberComparatorTest.php |  108 --
 vendor/symfony/finder/Tests/FinderTest.php    |  752 --------
 vendor/symfony/finder/Tests/Fixtures/.dot/a   |    0
 .../finder/Tests/Fixtures/.dot/b/c.neon       |    0
 .../finder/Tests/Fixtures/.dot/b/d.neon       |    0
 .../finder/Tests/Fixtures/A/B/C/abc.dat       |    0
 .../symfony/finder/Tests/Fixtures/A/B/ab.dat  |    0
 vendor/symfony/finder/Tests/Fixtures/A/a.dat  |    0
 .../Tests/Fixtures/copy/A/B/C/abc.dat.copy    |    0
 .../Tests/Fixtures/copy/A/B/ab.dat.copy       |    0
 .../finder/Tests/Fixtures/copy/A/a.dat.copy   |    0
 .../symfony/finder/Tests/Fixtures/dolor.txt   |    2 -
 .../symfony/finder/Tests/Fixtures/ipsum.txt   |    2 -
 .../symfony/finder/Tests/Fixtures/lorem.txt   |    2 -
 vendor/symfony/finder/Tests/Fixtures/one/.dot |    1 -
 vendor/symfony/finder/Tests/Fixtures/one/a    |    0
 .../finder/Tests/Fixtures/one/b/c.neon        |    0
 .../finder/Tests/Fixtures/one/b/d.neon        |    0
 .../Fixtures/r+e.gex[c]a(r)s/dir/bar.dat      |    0
 .../finder/Tests/Fixtures/with space/foo.txt  |    0
 vendor/symfony/finder/Tests/GlobTest.php      |   95 -
 .../Iterator/CustomFilterIteratorTest.php     |   44 -
 .../Iterator/DateRangeFilterIteratorTest.php  |   74 -
 .../Iterator/DepthRangeFilterIteratorTest.php |   83 -
 .../ExcludeDirectoryFilterIteratorTest.php    |   80 -
 .../Iterator/FileTypeFilterIteratorTest.php   |   73 -
 .../FilecontentFilterIteratorTest.php         |   86 -
 .../Iterator/FilenameFilterIteratorTest.php   |   54 -
 .../Tests/Iterator/FilterIteratorTest.php     |   53 -
 .../finder/Tests/Iterator/Iterator.php        |   55 -
 .../Tests/Iterator/IteratorTestCase.php       |   93 -
 .../Tests/Iterator/MockFileListIterator.php   |   21 -
 .../finder/Tests/Iterator/MockSplFileInfo.php |  132 --
 .../MultiplePcreFilterIteratorTest.php        |   71 -
 .../Tests/Iterator/PathFilterIteratorTest.php |   82 -
 .../Tests/Iterator/RealIteratorTestCase.php   |  119 --
 .../RecursiveDirectoryIteratorTest.php        |   59 -
 .../Iterator/SizeRangeFilterIteratorTest.php  |   69 -
 .../Tests/Iterator/SortableIteratorTest.php   |  179 --
 vendor/symfony/finder/composer.json           |    2 +-
 vendor/symfony/finder/phpunit.xml.dist        |   30 -
 852 files changed, 13204 insertions(+), 21427 deletions(-)
 delete mode 100644 console/language/console-en/.gitignore
 delete mode 100644 console/language/console-en/README.md
 delete mode 100644 console/language/console-en/composer.json
 delete mode 100644 console/language/console-en/translations/about.yml
 delete mode 100644 console/language/console-en/translations/application.yml
 delete mode 100644 console/language/console-en/translations/cache.rebuild.yml
 delete mode 100644 console/language/console-en/translations/cache.tag.invalidate.yml
 delete mode 100644 console/language/console-en/translations/chain.yml
 delete mode 100644 console/language/console-en/translations/check.yml
 delete mode 100644 console/language/console-en/translations/common.yml
 delete mode 100644 console/language/console-en/translations/complete.yml
 delete mode 100644 console/language/console-en/translations/composerize.yml
 delete mode 100644 console/language/console-en/translations/config.delete.yml
 delete mode 100644 console/language/console-en/translations/config.diff.yml
 delete mode 100644 console/language/console-en/translations/config.edit.yml
 delete mode 100644 console/language/console-en/translations/config.export.content.type.yml
 delete mode 100644 console/language/console-en/translations/config.export.single.yml
 delete mode 100644 console/language/console-en/translations/config.export.view.yml
 delete mode 100644 console/language/console-en/translations/config.export.yml
 delete mode 100644 console/language/console-en/translations/config.import.single.yml
 delete mode 100644 console/language/console-en/translations/config.import.yml
 delete mode 100644 console/language/console-en/translations/config.override.yml
 delete mode 100644 console/language/console-en/translations/config.validate.yml
 delete mode 100644 console/language/console-en/translations/create.comments.yml
 delete mode 100644 console/language/console-en/translations/create.nodes.yml
 delete mode 100644 console/language/console-en/translations/create.roles.yml
 delete mode 100644 console/language/console-en/translations/create.terms.yml
 delete mode 100644 console/language/console-en/translations/create.users.yml
 delete mode 100644 console/language/console-en/translations/create.vocabularies.yml
 delete mode 100644 console/language/console-en/translations/cron.execute.yml
 delete mode 100644 console/language/console-en/translations/cron.release.yml
 delete mode 100644 console/language/console-en/translations/database.add.yml
 delete mode 100644 console/language/console-en/translations/database.client.yml
 delete mode 100644 console/language/console-en/translations/database.connect.yml
 delete mode 100644 console/language/console-en/translations/database.drop.yml
 delete mode 100644 console/language/console-en/translations/database.dump.yml
 delete mode 100644 console/language/console-en/translations/database.log.clear.yml
 delete mode 100644 console/language/console-en/translations/database.log.common.yml
 delete mode 100644 console/language/console-en/translations/database.log.poll.yml
 delete mode 100644 console/language/console-en/translations/database.query.yml
 delete mode 100644 console/language/console-en/translations/database.restore.yml
 delete mode 100644 console/language/console-en/translations/debug.breakpoints.yml
 delete mode 100644 console/language/console-en/translations/debug.cache.context.yml
 delete mode 100644 console/language/console-en/translations/debug.chain.yml
 delete mode 100644 console/language/console-en/translations/debug.config.settings.yml
 delete mode 100644 console/language/console-en/translations/debug.config.validate.yml
 delete mode 100644 console/language/console-en/translations/debug.config.yml
 delete mode 100644 console/language/console-en/translations/debug.container.yml
 delete mode 100644 console/language/console-en/translations/debug.cron.yml
 delete mode 100644 console/language/console-en/translations/debug.database.log.yml
 delete mode 100644 console/language/console-en/translations/debug.database.table.yml
 delete mode 100644 console/language/console-en/translations/debug.entity.yml
 delete mode 100644 console/language/console-en/translations/debug.event.yml
 delete mode 100644 console/language/console-en/translations/debug.features.yml
 delete mode 100644 console/language/console-en/translations/debug.image.styles.yml
 delete mode 100644 console/language/console-en/translations/debug.libraries.yml
 delete mode 100644 console/language/console-en/translations/debug.migrate.yml
 delete mode 100644 console/language/console-en/translations/debug.module.yml
 delete mode 100644 console/language/console-en/translations/debug.multisite.yml
 delete mode 100644 console/language/console-en/translations/debug.permission.yml
 delete mode 100644 console/language/console-en/translations/debug.plugin.yml
 delete mode 100644 console/language/console-en/translations/debug.queue.yml
 delete mode 100644 console/language/console-en/translations/debug.rest.yml
 delete mode 100644 console/language/console-en/translations/debug.roles.yml
 delete mode 100644 console/language/console-en/translations/debug.router.yml
 delete mode 100644 console/language/console-en/translations/debug.settings.yml
 delete mode 100644 console/language/console-en/translations/debug.site.yml
 delete mode 100644 console/language/console-en/translations/debug.state.yml
 delete mode 100644 console/language/console-en/translations/debug.test.yml
 delete mode 100644 console/language/console-en/translations/debug.theme.keys.yml
 delete mode 100644 console/language/console-en/translations/debug.theme.yml
 delete mode 100644 console/language/console-en/translations/debug.update.yml
 delete mode 100644 console/language/console-en/translations/debug.user.yml
 delete mode 100644 console/language/console-en/translations/debug.views.plugins.yml
 delete mode 100644 console/language/console-en/translations/debug.views.yml
 delete mode 100644 console/language/console-en/translations/devel.dumper.yml
 delete mode 100644 console/language/console-en/translations/docker.init.yml
 delete mode 100644 console/language/console-en/translations/dotenv.init.yml
 delete mode 100644 console/language/console-en/translations/drush.yml
 delete mode 100644 console/language/console-en/translations/elephpant.yml
 delete mode 100644 console/language/console-en/translations/entity.delete.yml
 delete mode 100644 console/language/console-en/translations/exec.yml
 delete mode 100644 console/language/console-en/translations/features.import.yml
 delete mode 100644 console/language/console-en/translations/field.info.yml
 delete mode 100644 console/language/console-en/translations/generate.ajax.command.yml
 delete mode 100644 console/language/console-en/translations/generate.authentication.provider.yml
 delete mode 100644 console/language/console-en/translations/generate.breakpoint.yml
 delete mode 100644 console/language/console-en/translations/generate.cache.context.yml
 delete mode 100644 console/language/console-en/translations/generate.command.yml
 delete mode 100644 console/language/console-en/translations/generate.controller.yml
 delete mode 100644 console/language/console-en/translations/generate.entity.bundle.yml
 delete mode 100644 console/language/console-en/translations/generate.entity.config.yml
 delete mode 100644 console/language/console-en/translations/generate.entity.content.yml
 delete mode 100644 console/language/console-en/translations/generate.event.subscriber.yml
 delete mode 100644 console/language/console-en/translations/generate.form.alter.yml
 delete mode 100644 console/language/console-en/translations/generate.form.config.yml
 delete mode 100644 console/language/console-en/translations/generate.form.yml
 delete mode 100644 console/language/console-en/translations/generate.help.yml
 delete mode 100644 console/language/console-en/translations/generate.jstest.yml
 delete mode 100644 console/language/console-en/translations/generate.module.file.yml
 delete mode 100644 console/language/console-en/translations/generate.module.yml
 delete mode 100644 console/language/console-en/translations/generate.permissions.yml
 delete mode 100644 console/language/console-en/translations/generate.plugin.block.yml
 delete mode 100644 console/language/console-en/translations/generate.plugin.ckeditorbutton.yml
 delete mode 100644 console/language/console-en/translations/generate.plugin.condition.yml
 delete mode 100644 console/language/console-en/translations/generate.plugin.field.yml
 delete mode 100644 console/language/console-en/translations/generate.plugin.fieldformatter.yml
 delete mode 100644 console/language/console-en/translations/generate.plugin.fieldtype.yml
 delete mode 100644 console/language/console-en/translations/generate.plugin.fieldwidget.yml
 delete mode 100644 console/language/console-en/translations/generate.plugin.imageeffect.yml
 delete mode 100644 console/language/console-en/translations/generate.plugin.imageformatter.yml
 delete mode 100644 console/language/console-en/translations/generate.plugin.mail.yml
 delete mode 100644 console/language/console-en/translations/generate.plugin.migrate.process.yml
 delete mode 100644 console/language/console-en/translations/generate.plugin.migrate.source.yml
 delete mode 100644 console/language/console-en/translations/generate.plugin.rest.resource.yml
 delete mode 100644 console/language/console-en/translations/generate.plugin.skeleton.yml
 delete mode 100644 console/language/console-en/translations/generate.plugin.type.annotation.yml
 delete mode 100644 console/language/console-en/translations/generate.plugin.type.yaml.yml
 delete mode 100644 console/language/console-en/translations/generate.plugin.views.field.yml
 delete mode 100644 console/language/console-en/translations/generate.post.update.yml
 delete mode 100644 console/language/console-en/translations/generate.profile.yml
 delete mode 100644 console/language/console-en/translations/generate.routesubscriber.yml
 delete mode 100644 console/language/console-en/translations/generate.service.yml
 delete mode 100644 console/language/console-en/translations/generate.site.alias.yml
 delete mode 100644 console/language/console-en/translations/generate.theme.yml
 delete mode 100644 console/language/console-en/translations/generate.twig.extension.yml
 delete mode 100644 console/language/console-en/translations/generate.update.yml
 delete mode 100644 console/language/console-en/translations/help.yml
 delete mode 100644 console/language/console-en/translations/image.styles.flush.yml
 delete mode 100644 console/language/console-en/translations/init.yml
 delete mode 100644 console/language/console-en/translations/list.yml
 delete mode 100644 console/language/console-en/translations/locale.language.add.yml
 delete mode 100644 console/language/console-en/translations/locale.language.delete.yml
 delete mode 100644 console/language/console-en/translations/locale.translation.status.yml
 delete mode 100644 console/language/console-en/translations/migrate.debug.yml
 delete mode 100644 console/language/console-en/translations/migrate.execute.yml
 delete mode 100644 console/language/console-en/translations/migrate.rollback.yml
 delete mode 100644 console/language/console-en/translations/migrate.setup.yml
 delete mode 100644 console/language/console-en/translations/module.dependency.install.yml
 delete mode 100644 console/language/console-en/translations/module.download.yml
 delete mode 100644 console/language/console-en/translations/module.install.yml
 delete mode 100644 console/language/console-en/translations/module.path.yml
 delete mode 100644 console/language/console-en/translations/module.uninstall.yml
 delete mode 100644 console/language/console-en/translations/module.update.yml
 delete mode 100644 console/language/console-en/translations/multisite.new.yml
 delete mode 100644 console/language/console-en/translations/multisite.update.yml
 delete mode 100644 console/language/console-en/translations/node.access.rebuild.yml
 delete mode 100644 console/language/console-en/translations/queue.run.yml
 delete mode 100644 console/language/console-en/translations/rest.debug.yml
 delete mode 100644 console/language/console-en/translations/rest.disable.yml
 delete mode 100644 console/language/console-en/translations/rest.enable.yml
 delete mode 100644 console/language/console-en/translations/role.delete.yml
 delete mode 100644 console/language/console-en/translations/role.new.yml
 delete mode 100644 console/language/console-en/translations/router.rebuild.yml
 delete mode 100644 console/language/console-en/translations/self-update.yml
 delete mode 100644 console/language/console-en/translations/server.yml
 delete mode 100644 console/language/console-en/translations/settings.set.yml
 delete mode 100644 console/language/console-en/translations/shell.yml
 delete mode 100644 console/language/console-en/translations/site.import.local.yml
 delete mode 100644 console/language/console-en/translations/site.install.yml
 delete mode 100644 console/language/console-en/translations/site.maintenance.yml
 delete mode 100644 console/language/console-en/translations/site.mode.yml
 delete mode 100644 console/language/console-en/translations/site.new.yml
 delete mode 100644 console/language/console-en/translations/site.statistics.yml
 delete mode 100644 console/language/console-en/translations/site.status.yml
 delete mode 100644 console/language/console-en/translations/state.delete.yml
 delete mode 100644 console/language/console-en/translations/state.override.yml
 delete mode 100644 console/language/console-en/translations/taxonomy.term.delete.yml
 delete mode 100644 console/language/console-en/translations/test.run.yml
 delete mode 100644 console/language/console-en/translations/theme.download.yml
 delete mode 100644 console/language/console-en/translations/theme.install.yml
 delete mode 100644 console/language/console-en/translations/theme.path.yml
 delete mode 100644 console/language/console-en/translations/theme.uninstall.yml
 delete mode 100644 console/language/console-en/translations/update.entities.yml
 delete mode 100644 console/language/console-en/translations/update.execute.yml
 delete mode 100644 console/language/console-en/translations/user.create.yml
 delete mode 100644 console/language/console-en/translations/user.delete.yml
 delete mode 100644 console/language/console-en/translations/user.login.clear.attempts.yml
 delete mode 100644 console/language/console-en/translations/user.login.url.yml
 delete mode 100644 console/language/console-en/translations/user.password.hash.yml
 delete mode 100644 console/language/console-en/translations/user.password.reset.yml
 delete mode 100644 console/language/console-en/translations/user.role.yml
 delete mode 100644 console/language/console-en/translations/views.disable.yml
 delete mode 100644 console/language/console-en/translations/views.enable.yml
 create mode 100644 vendor/drupal/console-core/src/EventSubscriber/MaintenanceModeListener.php
 create mode 100644 vendor/drupal/console-core/src/EventSubscriber/SaveStatisticsListener.php
 create mode 100644 vendor/drupal/console-core/src/EventSubscriber/SendStatisticsListener.php
 create mode 100644 vendor/drupal/console-core/templates/core/init/statistics.config.yml.twig
 create mode 100644 vendor/drupal/console-en/translations/config.export.entity.yml
 create mode 100644 vendor/drupal/console-en/translations/debug.update.composer.yml
 create mode 100644 vendor/drupal/console-en/translations/generate.block.type.yml
 create mode 100644 vendor/drupal/console-en/translations/generate.composer.yml
 create mode 100644 vendor/drupal/console-en/translations/generate.plugin.derivative.yml
 create mode 100644 vendor/drupal/console-en/translations/generate.plugin.migrate.dataparser.yml
 create mode 100644 vendor/drupal/console-en/translations/generate.plugin.queue.yml
 rename console/language/console-en/translations/generate.plugin.rules.action.yml => vendor/drupal/console-en/translations/generate.plugin.rules.condition.yml (53%)
 create mode 100644 vendor/drupal/console-en/translations/generate.plugin.rules.dataprocessor.yml
 create mode 100644 vendor/drupal/console-en/translations/generate.plugin.validationconstraint.yml
 create mode 100644 vendor/drupal/console-en/translations/generate.theme.setting.yml
 create mode 100644 vendor/drupal/console-en/translations/service.override.yml
 create mode 100644 vendor/drupal/console-en/translations/snippet.yml
 create mode 100644 vendor/drupal/console-en/translations/user.unblock.yml
 create mode 100644 vendor/drupal/console-extend-plugin/src/DrupalConsoleInstaller.php
 create mode 100644 vendor/drupal/console-extend-plugin/src/Installer.php
 create mode 100644 vendor/drupal/console/.github/FUNDING.yml
 create mode 100644 vendor/drupal/console/config/services/multisite.yml
 create mode 100644 vendor/drupal/console/src/Command/Config/ExportEntityCommand.php
 create mode 100644 vendor/drupal/console/src/Command/Debug/HookCommand.php
 create mode 100644 vendor/drupal/console/src/Command/Debug/UpdateComposerCommand.php
 create mode 100644 vendor/drupal/console/src/Command/Generate/BlockTypeCommand.php
 create mode 100644 vendor/drupal/console/src/Command/Generate/ComposerCommand.php
 create mode 100644 vendor/drupal/console/src/Command/Generate/PluginDerivativeCommand.php
 create mode 100644 vendor/drupal/console/src/Command/Generate/PluginMigrateDataParserCommand.php
 create mode 100644 vendor/drupal/console/src/Command/Generate/PluginQueueWorkerCommand.php
 create mode 100644 vendor/drupal/console/src/Command/Generate/PluginRulesConditionCommand.php
 create mode 100644 vendor/drupal/console/src/Command/Generate/PluginRulesDataprocessorCommand.php
 create mode 100644 vendor/drupal/console/src/Command/Generate/PluginValidationConstraintCommand.php
 create mode 100644 vendor/drupal/console/src/Command/Generate/ThemeSettingCommand.php
 mode change 100644 => 100755 vendor/drupal/console/src/Command/Module/UninstallCommand.php
 create mode 100644 vendor/drupal/console/src/Command/Service/OverrideCommand.php
 create mode 100644 vendor/drupal/console/src/Command/Shared/ThemeTrait.php
 create mode 100644 vendor/drupal/console/src/Command/Shared/UpdateTrait.php
 create mode 100644 vendor/drupal/console/src/Command/User/UnblockCommand.php
 create mode 100644 vendor/drupal/console/src/Generator/BlockTypeGenerator.php
 create mode 100644 vendor/drupal/console/src/Generator/ComposerGenerator.php
 create mode 100644 vendor/drupal/console/src/Generator/PluginDerivativeGenerator.php
 create mode 100644 vendor/drupal/console/src/Generator/PluginMigrateDataParserGenerator.php
 create mode 100644 vendor/drupal/console/src/Generator/PluginQueueWorkerGenerator.php
 create mode 100644 vendor/drupal/console/src/Generator/PluginRulesConditionGenerator.php
 create mode 100644 vendor/drupal/console/src/Generator/PluginRulesDataprocessorGenerator.php
 create mode 100644 vendor/drupal/console/src/Generator/PluginValidationConstraintGenerator.php
 create mode 100644 vendor/drupal/console/src/Generator/ThemeSettingGenerator.php
 create mode 100644 vendor/drupal/console/templates/database/add-default.php.twig
 create mode 100644 vendor/drupal/console/templates/module/module-block-twig-template-append.twig
 create mode 100644 vendor/drupal/console/templates/module/schema.yml.twig
 create mode 100644 vendor/drupal/console/templates/module/src/Entity/Bundle/entity-bundle-field-info-alter.php.twig
 delete mode 100644 vendor/drupal/console/templates/module/src/Plugin/Action/rulesaction.php.twig
 create mode 100644 vendor/drupal/console/templates/module/src/Plugin/Block/block_derivative.php.twig
 create mode 100644 vendor/drupal/console/templates/module/src/Plugin/Block/blocktype.php.twig
 create mode 100644 vendor/drupal/console/templates/module/src/Plugin/CKEditorPlugin/plugin.php.twig
 create mode 100644 vendor/drupal/console/templates/module/src/Plugin/Condition/rulescondition.php.twig
 create mode 100644 vendor/drupal/console/templates/module/src/Plugin/Derivative/derivative_block_derivative.php.twig
 create mode 100644 vendor/drupal/console/templates/module/src/Plugin/QueueWorker/queue_worker.php.twig
 create mode 100644 vendor/drupal/console/templates/module/src/Plugin/RulesAction/rulesaction.php.twig
 create mode 100644 vendor/drupal/console/templates/module/src/Plugin/RulesDataProcessor/rulesdataprocessor.php.twig
 create mode 100644 vendor/drupal/console/templates/module/src/Plugin/Validation/Constraint/constraint.php.twig
 create mode 100644 vendor/drupal/console/templates/module/src/Plugin/Validation/Constraint/validator.php.twig
 create mode 100644 vendor/drupal/console/templates/module/src/Plugin/migrate_plus/data_parser/data_parser.php.twig
 create mode 100644 vendor/drupal/console/templates/module/src/entity-content-bundle-permissions.php.twig
 delete mode 100644 vendor/drupal/console/templates/module/system.action.action.yml.twig
 create mode 100644 vendor/drupal/console/templates/module/templates/plugin-block-html.twig
 create mode 100644 vendor/stecman/symfony-console-completion/tests/Stecman/Component/Symfony/Console/BashCompletion/CompletionCommandTest.php
 delete mode 100644 vendor/symfony/config/.gitignore
 create mode 100644 vendor/symfony/config/Definition/Builder/BuilderAwareInterface.php
 rename vendor/symfony/config/{Tests/Fixtures/Builder/VariableNodeDefinition.php => Definition/Exception/TreeWithoutRootNodeException.php} (51%)
 delete mode 100644 vendor/symfony/config/DependencyInjection/ConfigCachePass.php
 create mode 100644 vendor/symfony/config/Exception/LoaderLoadException.php
 delete mode 100644 vendor/symfony/config/Tests/ConfigCacheFactoryTest.php
 delete mode 100644 vendor/symfony/config/Tests/ConfigCacheTest.php
 delete mode 100644 vendor/symfony/config/Tests/Definition/ArrayNodeTest.php
 delete mode 100644 vendor/symfony/config/Tests/Definition/BooleanNodeTest.php
 delete mode 100644 vendor/symfony/config/Tests/Definition/Builder/ArrayNodeDefinitionTest.php
 delete mode 100644 vendor/symfony/config/Tests/Definition/Builder/BooleanNodeDefinitionTest.php
 delete mode 100644 vendor/symfony/config/Tests/Definition/Builder/EnumNodeDefinitionTest.php
 delete mode 100644 vendor/symfony/config/Tests/Definition/Builder/ExprBuilderTest.php
 delete mode 100644 vendor/symfony/config/Tests/Definition/Builder/NodeBuilderTest.php
 delete mode 100644 vendor/symfony/config/Tests/Definition/Builder/NumericNodeDefinitionTest.php
 delete mode 100644 vendor/symfony/config/Tests/Definition/Builder/TreeBuilderTest.php
 delete mode 100644 vendor/symfony/config/Tests/Definition/Dumper/XmlReferenceDumperTest.php
 delete mode 100644 vendor/symfony/config/Tests/Definition/Dumper/YamlReferenceDumperTest.php
 delete mode 100644 vendor/symfony/config/Tests/Definition/EnumNodeTest.php
 delete mode 100644 vendor/symfony/config/Tests/Definition/FinalizationTest.php
 delete mode 100644 vendor/symfony/config/Tests/Definition/FloatNodeTest.php
 delete mode 100644 vendor/symfony/config/Tests/Definition/IntegerNodeTest.php
 delete mode 100644 vendor/symfony/config/Tests/Definition/MergeTest.php
 delete mode 100644 vendor/symfony/config/Tests/Definition/NormalizationTest.php
 delete mode 100644 vendor/symfony/config/Tests/Definition/PrototypedArrayNodeTest.php
 delete mode 100644 vendor/symfony/config/Tests/Definition/ScalarNodeTest.php
 delete mode 100644 vendor/symfony/config/Tests/DependencyInjection/ConfigCachePassTest.php
 delete mode 100644 vendor/symfony/config/Tests/Exception/FileLoaderLoadExceptionTest.php
 delete mode 100644 vendor/symfony/config/Tests/FileLocatorTest.php
 delete mode 100644 vendor/symfony/config/Tests/Fixtures/Again/foo.xml
 delete mode 100644 vendor/symfony/config/Tests/Fixtures/BadFileName.php
 delete mode 100644 vendor/symfony/config/Tests/Fixtures/BadParent.php
 delete mode 100644 vendor/symfony/config/Tests/Fixtures/Builder/BarNodeDefinition.php
 delete mode 100644 vendor/symfony/config/Tests/Fixtures/Builder/NodeBuilder.php
 delete mode 100644 vendor/symfony/config/Tests/Fixtures/Configuration/ExampleConfiguration.php
 delete mode 100644 vendor/symfony/config/Tests/Fixtures/ParseError.php
 delete mode 100644 vendor/symfony/config/Tests/Fixtures/Resource/.hiddenFile
 delete mode 100644 vendor/symfony/config/Tests/Fixtures/Resource/ConditionalClass.php
 delete mode 100644 vendor/symfony/config/Tests/Fixtures/Util/document_type.xml
 delete mode 100644 vendor/symfony/config/Tests/Fixtures/Util/invalid.xml
 delete mode 100644 vendor/symfony/config/Tests/Fixtures/Util/invalid_schema.xml
 delete mode 100644 vendor/symfony/config/Tests/Fixtures/Util/not_readable.xml
 delete mode 100644 vendor/symfony/config/Tests/Fixtures/Util/schema.xsd
 delete mode 100644 vendor/symfony/config/Tests/Fixtures/Util/valid.xml
 delete mode 100644 vendor/symfony/config/Tests/Fixtures/foo.xml
 delete mode 100644 vendor/symfony/config/Tests/Loader/DelegatingLoaderTest.php
 delete mode 100644 vendor/symfony/config/Tests/Loader/FileLoaderTest.php
 delete mode 100644 vendor/symfony/config/Tests/Loader/LoaderResolverTest.php
 delete mode 100644 vendor/symfony/config/Tests/Loader/LoaderTest.php
 delete mode 100644 vendor/symfony/config/Tests/Resource/ClassExistenceResourceTest.php
 delete mode 100644 vendor/symfony/config/Tests/Resource/ComposerResourceTest.php
 delete mode 100644 vendor/symfony/config/Tests/Resource/DirectoryResourceTest.php
 delete mode 100644 vendor/symfony/config/Tests/Resource/FileExistenceResourceTest.php
 delete mode 100644 vendor/symfony/config/Tests/Resource/FileResourceTest.php
 delete mode 100644 vendor/symfony/config/Tests/Resource/GlobResourceTest.php
 delete mode 100644 vendor/symfony/config/Tests/Resource/ReflectionClassResourceTest.php
 delete mode 100644 vendor/symfony/config/Tests/Resource/ResourceStub.php
 delete mode 100644 vendor/symfony/config/Tests/ResourceCheckerConfigCacheTest.php
 delete mode 100644 vendor/symfony/config/Tests/Util/XmlUtilsTest.php
 delete mode 100644 vendor/symfony/config/phpunit.xml.dist
 delete mode 100644 vendor/symfony/css-selector/.gitignore
 delete mode 100644 vendor/symfony/css-selector/Tests/CssSelectorConverterTest.php
 delete mode 100644 vendor/symfony/css-selector/Tests/Node/AbstractNodeTest.php
 delete mode 100644 vendor/symfony/css-selector/Tests/Node/AttributeNodeTest.php
 delete mode 100644 vendor/symfony/css-selector/Tests/Node/ClassNodeTest.php
 delete mode 100644 vendor/symfony/css-selector/Tests/Node/CombinedSelectorNodeTest.php
 delete mode 100644 vendor/symfony/css-selector/Tests/Node/ElementNodeTest.php
 delete mode 100644 vendor/symfony/css-selector/Tests/Node/FunctionNodeTest.php
 delete mode 100644 vendor/symfony/css-selector/Tests/Node/HashNodeTest.php
 delete mode 100644 vendor/symfony/css-selector/Tests/Node/NegationNodeTest.php
 delete mode 100644 vendor/symfony/css-selector/Tests/Node/PseudoNodeTest.php
 delete mode 100644 vendor/symfony/css-selector/Tests/Node/SelectorNodeTest.php
 delete mode 100644 vendor/symfony/css-selector/Tests/Node/SpecificityTest.php
 delete mode 100644 vendor/symfony/css-selector/Tests/Parser/Handler/AbstractHandlerTest.php
 delete mode 100644 vendor/symfony/css-selector/Tests/Parser/Handler/CommentHandlerTest.php
 delete mode 100644 vendor/symfony/css-selector/Tests/Parser/Handler/HashHandlerTest.php
 delete mode 100644 vendor/symfony/css-selector/Tests/Parser/Handler/IdentifierHandlerTest.php
 delete mode 100644 vendor/symfony/css-selector/Tests/Parser/Handler/NumberHandlerTest.php
 delete mode 100644 vendor/symfony/css-selector/Tests/Parser/Handler/StringHandlerTest.php
 delete mode 100644 vendor/symfony/css-selector/Tests/Parser/Handler/WhitespaceHandlerTest.php
 delete mode 100644 vendor/symfony/css-selector/Tests/Parser/ParserTest.php
 delete mode 100644 vendor/symfony/css-selector/Tests/Parser/ReaderTest.php
 delete mode 100644 vendor/symfony/css-selector/Tests/Parser/Shortcut/ClassParserTest.php
 delete mode 100644 vendor/symfony/css-selector/Tests/Parser/Shortcut/ElementParserTest.php
 delete mode 100644 vendor/symfony/css-selector/Tests/Parser/Shortcut/EmptyStringParserTest.php
 delete mode 100644 vendor/symfony/css-selector/Tests/Parser/Shortcut/HashParserTest.php
 delete mode 100644 vendor/symfony/css-selector/Tests/Parser/TokenStreamTest.php
 delete mode 100644 vendor/symfony/css-selector/Tests/XPath/Fixtures/ids.html
 delete mode 100644 vendor/symfony/css-selector/Tests/XPath/Fixtures/lang.xml
 delete mode 100644 vendor/symfony/css-selector/Tests/XPath/Fixtures/shakespear.html
 delete mode 100644 vendor/symfony/css-selector/Tests/XPath/TranslatorTest.php
 delete mode 100644 vendor/symfony/css-selector/phpunit.xml.dist
 delete mode 100644 vendor/symfony/filesystem/.gitignore
 create mode 100644 vendor/symfony/filesystem/Exception/InvalidArgumentException.php
 delete mode 100644 vendor/symfony/filesystem/LockHandler.php
 delete mode 100644 vendor/symfony/filesystem/Tests/ExceptionTest.php
 delete mode 100644 vendor/symfony/filesystem/Tests/FilesystemTest.php
 delete mode 100644 vendor/symfony/filesystem/Tests/FilesystemTestCase.php
 delete mode 100644 vendor/symfony/filesystem/Tests/Fixtures/MockStream/MockStream.php
 delete mode 100644 vendor/symfony/filesystem/Tests/LockHandlerTest.php
 delete mode 100644 vendor/symfony/filesystem/phpunit.xml.dist
 delete mode 100644 vendor/symfony/finder/.gitignore
 rename vendor/symfony/{config/Tests/Fixtures/BarNode.php => finder/Exception/DirectoryNotFoundException.php} (57%)
 delete mode 100644 vendor/symfony/finder/Exception/ExceptionInterface.php
 create mode 100644 vendor/symfony/finder/Gitignore.php
 delete mode 100644 vendor/symfony/finder/Iterator/FilterIterator.php
 delete mode 100644 vendor/symfony/finder/Tests/Comparator/ComparatorTest.php
 delete mode 100644 vendor/symfony/finder/Tests/Comparator/DateComparatorTest.php
 delete mode 100644 vendor/symfony/finder/Tests/Comparator/NumberComparatorTest.php
 delete mode 100644 vendor/symfony/finder/Tests/FinderTest.php
 delete mode 100644 vendor/symfony/finder/Tests/Fixtures/.dot/a
 delete mode 100644 vendor/symfony/finder/Tests/Fixtures/.dot/b/c.neon
 delete mode 100644 vendor/symfony/finder/Tests/Fixtures/.dot/b/d.neon
 delete mode 100644 vendor/symfony/finder/Tests/Fixtures/A/B/C/abc.dat
 delete mode 100644 vendor/symfony/finder/Tests/Fixtures/A/B/ab.dat
 delete mode 100644 vendor/symfony/finder/Tests/Fixtures/A/a.dat
 delete mode 100644 vendor/symfony/finder/Tests/Fixtures/copy/A/B/C/abc.dat.copy
 delete mode 100644 vendor/symfony/finder/Tests/Fixtures/copy/A/B/ab.dat.copy
 delete mode 100644 vendor/symfony/finder/Tests/Fixtures/copy/A/a.dat.copy
 delete mode 100644 vendor/symfony/finder/Tests/Fixtures/dolor.txt
 delete mode 100644 vendor/symfony/finder/Tests/Fixtures/ipsum.txt
 delete mode 100644 vendor/symfony/finder/Tests/Fixtures/lorem.txt
 delete mode 100644 vendor/symfony/finder/Tests/Fixtures/one/.dot
 delete mode 100644 vendor/symfony/finder/Tests/Fixtures/one/a
 delete mode 100644 vendor/symfony/finder/Tests/Fixtures/one/b/c.neon
 delete mode 100644 vendor/symfony/finder/Tests/Fixtures/one/b/d.neon
 delete mode 100644 vendor/symfony/finder/Tests/Fixtures/r+e.gex[c]a(r)s/dir/bar.dat
 delete mode 100644 vendor/symfony/finder/Tests/Fixtures/with space/foo.txt
 delete mode 100644 vendor/symfony/finder/Tests/GlobTest.php
 delete mode 100644 vendor/symfony/finder/Tests/Iterator/CustomFilterIteratorTest.php
 delete mode 100644 vendor/symfony/finder/Tests/Iterator/DateRangeFilterIteratorTest.php
 delete mode 100644 vendor/symfony/finder/Tests/Iterator/DepthRangeFilterIteratorTest.php
 delete mode 100644 vendor/symfony/finder/Tests/Iterator/ExcludeDirectoryFilterIteratorTest.php
 delete mode 100644 vendor/symfony/finder/Tests/Iterator/FileTypeFilterIteratorTest.php
 delete mode 100644 vendor/symfony/finder/Tests/Iterator/FilecontentFilterIteratorTest.php
 delete mode 100644 vendor/symfony/finder/Tests/Iterator/FilenameFilterIteratorTest.php
 delete mode 100644 vendor/symfony/finder/Tests/Iterator/FilterIteratorTest.php
 delete mode 100644 vendor/symfony/finder/Tests/Iterator/Iterator.php
 delete mode 100644 vendor/symfony/finder/Tests/Iterator/IteratorTestCase.php
 delete mode 100644 vendor/symfony/finder/Tests/Iterator/MockFileListIterator.php
 delete mode 100644 vendor/symfony/finder/Tests/Iterator/MockSplFileInfo.php
 delete mode 100644 vendor/symfony/finder/Tests/Iterator/MultiplePcreFilterIteratorTest.php
 delete mode 100644 vendor/symfony/finder/Tests/Iterator/PathFilterIteratorTest.php
 delete mode 100644 vendor/symfony/finder/Tests/Iterator/RealIteratorTestCase.php
 delete mode 100644 vendor/symfony/finder/Tests/Iterator/RecursiveDirectoryIteratorTest.php
 delete mode 100644 vendor/symfony/finder/Tests/Iterator/SizeRangeFilterIteratorTest.php
 delete mode 100644 vendor/symfony/finder/Tests/Iterator/SortableIteratorTest.php
 delete mode 100644 vendor/symfony/finder/phpunit.xml.dist

diff --git a/composer.json b/composer.json
index c1048b013d..1360db06d2 100644
--- a/composer.json
+++ b/composer.json
@@ -104,7 +104,7 @@
         "drupal/config_ignore": "2.2",
         "drupal/config_installer": "1.8",
         "drupal/config_update": "1.5",
-        "drupal/console": "1.8",
+        "drupal/console": "1.9.7",
         "drupal/content_access": "1.0-alpha1",
         "drupal/core-recommended": "8.9.10",
         "drupal/crop": "2.1",
diff --git a/composer.lock b/composer.lock
index 6839540dee..63649e18a4 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,35 +4,35 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "1ff4061238e54e23d2b0e3f191c601bb",
+    "content-hash": "d70eba8d9113b670ca935392605877f5",
     "packages": [
         {
             "name": "alchemy/zippy",
-            "version": "0.4.3",
+            "version": "0.4.9",
             "source": {
                 "type": "git",
                 "url": "https://github.com/alchemy-fr/Zippy.git",
-                "reference": "5ffdc93de0af2770d396bf433d8b2667c77277ea"
+                "reference": "59fbeefb9a249122867ef25e53addfcce31850d7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/alchemy-fr/Zippy/zipball/5ffdc93de0af2770d396bf433d8b2667c77277ea",
-                "reference": "5ffdc93de0af2770d396bf433d8b2667c77277ea",
+                "url": "https://api.github.com/repos/alchemy-fr/Zippy/zipball/59fbeefb9a249122867ef25e53addfcce31850d7",
+                "reference": "59fbeefb9a249122867ef25e53addfcce31850d7",
                 "shasum": ""
             },
             "require": {
                 "doctrine/collections": "~1.0",
-                "ext-mbstring": "*",
                 "php": ">=5.5",
-                "symfony/filesystem": "^2.0.5|^3.0",
-                "symfony/process": "^2.1|^3.0"
+                "symfony/filesystem": "^2.0.5 || ^3.0 || ^4.0",
+                "symfony/polyfill-mbstring": "^1.3",
+                "symfony/process": "^2.1 || ^3.0 || ^4.0"
             },
             "require-dev": {
                 "ext-zip": "*",
                 "guzzle/guzzle": "~3.0",
                 "guzzlehttp/guzzle": "^6.0",
-                "phpunit/phpunit": "^4.0|^5.0",
-                "symfony/finder": "^2.0.5|^3.0"
+                "phpunit/phpunit": "^4.0 || ^5.0",
+                "symfony/finder": "^2.0.5 || ^3.0 || ^4.0"
             },
             "suggest": {
                 "ext-zip": "To use the ZipExtensionAdapter",
@@ -68,7 +68,7 @@
                 "tar",
                 "zip"
             ],
-            "time": "2016-11-03T16:10:31+00:00"
+            "time": "2018-02-22T13:58:36+00:00"
         },
         {
             "name": "asm89/stack-cors",
@@ -1343,16 +1343,16 @@
         },
         {
             "name": "dflydev/dot-access-configuration",
-            "version": "v1.0.2",
+            "version": "v1.0.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/dflydev/dflydev-dot-access-configuration.git",
-                "reference": "ae6e7138b1d9063d343322cca63994ee1ac5161d"
+                "reference": "2e6eb0c8b8830b26bb23defcfc38d4276508fc49"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-configuration/zipball/ae6e7138b1d9063d343322cca63994ee1ac5161d",
-                "reference": "ae6e7138b1d9063d343322cca63994ee1ac5161d",
+                "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-configuration/zipball/2e6eb0c8b8830b26bb23defcfc38d4276508fc49",
+                "reference": "2e6eb0c8b8830b26bb23defcfc38d4276508fc49",
                 "shasum": ""
             },
             "require": {
@@ -1399,7 +1399,7 @@
                 "config",
                 "configuration"
             ],
-            "time": "2016-12-12T17:43:40+00:00"
+            "time": "2018-09-08T23:00:17+00:00"
         },
         {
             "name": "dflydev/dot-access-data",
@@ -3091,35 +3091,34 @@
         },
         {
             "name": "drupal/console",
-            "version": "1.8.0",
+            "version": "1.9.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/hechoendrupal/drupal-console.git",
-                "reference": "368bbfa44dc6b957eb4db01977f7c39e83032d18"
+                "reference": "90053d30f52427edb4e4941a9063acb65b5a2c1e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/hechoendrupal/drupal-console/zipball/368bbfa44dc6b957eb4db01977f7c39e83032d18",
-                "reference": "368bbfa44dc6b957eb4db01977f7c39e83032d18",
+                "url": "https://api.github.com/repos/hechoendrupal/drupal-console/zipball/90053d30f52427edb4e4941a9063acb65b5a2c1e",
+                "reference": "90053d30f52427edb4e4941a9063acb65b5a2c1e",
                 "shasum": ""
             },
             "require": {
-                "alchemy/zippy": "0.4.3",
+                "alchemy/zippy": "~0.4",
                 "composer/installers": "~1.0",
                 "doctrine/annotations": "^1.2",
                 "doctrine/collections": "^1.3",
-                "drupal/console-core": "1.8.0",
-                "drupal/console-extend-plugin": "~0",
-                "guzzlehttp/guzzle": "~6.1",
-                "php": "^5.5.9 || ^7.0",
+                "drupal/console-core": "1.9.7",
+                "drupal/console-extend-plugin": "~0.9.5",
+                "php": ">=7.0.8",
                 "psy/psysh": "0.6.* || ~0.8",
-                "symfony/css-selector": "~2.8|~3.0",
-                "symfony/dom-crawler": "~2.8|~3.0",
-                "symfony/http-foundation": "~2.8|~3.0"
+                "symfony/css-selector": "~3.0|~4.0",
+                "symfony/dom-crawler": "~3.0|~4.0",
+                "symfony/http-foundation": "~3.0|~4.0"
             },
             "suggest": {
-                "symfony/thanks": "Thank your favorite PHP projects on Github using the CLI!",
-                "vlucas/phpdotenv": "Loads environment variables from .env to getenv(), $_ENV and $_SERVER automagically."
+                "symfony/thanks": "Thank your favorite PHP projects on GitHub using the CLI",
+                "vlucas/phpdotenv": "Loads environment variables from .env to getenv(), $_ENV and $_SERVER automagically"
             },
             "bin": [
                 "bin/drupal"
@@ -3167,38 +3166,45 @@
                 "drupal",
                 "symfony"
             ],
-            "time": "2018-03-21T20:50:16+00:00"
+            "funding": [
+                {
+                    "url": "https://opencollective.com/drupalconsole",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2020-11-30T02:09:53+00:00"
         },
         {
             "name": "drupal/console-core",
-            "version": "1.8.0",
+            "version": "1.9.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/hechoendrupal/drupal-console-core.git",
-                "reference": "bf1fb4a6f689377acec1694267f674178d28e5d1"
+                "reference": "ab3abc2631761c9588230ba88189d9ba4eb9ed63"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/hechoendrupal/drupal-console-core/zipball/bf1fb4a6f689377acec1694267f674178d28e5d1",
-                "reference": "bf1fb4a6f689377acec1694267f674178d28e5d1",
+                "url": "https://api.github.com/repos/hechoendrupal/drupal-console-core/zipball/ab3abc2631761c9588230ba88189d9ba4eb9ed63",
+                "reference": "ab3abc2631761c9588230ba88189d9ba4eb9ed63",
                 "shasum": ""
             },
             "require": {
                 "dflydev/dot-access-configuration": "^1.0",
-                "drupal/console-en": "1.8.0",
-                "php": "^5.5.9 || ^7.0",
+                "drupal/console-en": "1.9.7",
+                "guzzlehttp/guzzle": "~6.1",
+                "php": ">=7.0.8",
                 "stecman/symfony-console-completion": "~0.7",
-                "symfony/config": "~2.8|~3.0",
-                "symfony/console": "~2.8|~3.0",
-                "symfony/debug": "~2.8|~3.0",
-                "symfony/dependency-injection": "~2.8|~3.0",
-                "symfony/event-dispatcher": "~2.8|~3.0",
-                "symfony/filesystem": "~2.8|~3.0",
-                "symfony/finder": "~2.8|~3.0",
-                "symfony/process": "~2.8|~3.0",
-                "symfony/translation": "~2.8|~3.0",
-                "symfony/yaml": "~2.8|~3.0",
-                "twig/twig": "^1.23.1",
+                "symfony/config": "~3.0|^4.4",
+                "symfony/console": "~3.0|^4.4",
+                "symfony/debug": "~3.0|^4.4",
+                "symfony/dependency-injection": "~3.0|^4.4",
+                "symfony/event-dispatcher": "~3.0|^4.4",
+                "symfony/filesystem": "~3.0|^4.4",
+                "symfony/finder": "~3.0|^4.4",
+                "symfony/process": "~3.0|^4.4",
+                "symfony/translation": "~3.0|^4.4",
+                "symfony/yaml": "~3.0|^4.4",
+                "twig/twig": "^1.38.2|^2.12.0",
                 "webflo/drupal-finder": "^1.0",
                 "webmozart/path-util": "^2.3"
             },
@@ -3226,10 +3232,6 @@
                     "email": "jesus.olivas@gmail.com",
                     "homepage": "http://jmolivas.com"
                 },
-                {
-                    "name": "Drupal Console Contributors",
-                    "homepage": "https://github.com/hechoendrupal/DrupalConsole/graphs/contributors"
-                },
                 {
                     "name": "Eduardo Garcia",
                     "email": "enzo@enzolutions.com",
@@ -3238,6 +3240,10 @@
                 {
                     "name": "Omar Aguirre",
                     "email": "omersguchigu@gmail.com"
+                },
+                {
+                    "name": "Drupal Console Contributors",
+                    "homepage": "https://github.com/hechoendrupal/DrupalConsole/graphs/contributors"
                 }
             ],
             "description": "Drupal Console Core",
@@ -3248,23 +3254,23 @@
                 "drupal",
                 "symfony"
             ],
-            "time": "2018-03-21T19:33:23+00:00"
+            "time": "2020-11-30T01:45:57+00:00"
         },
         {
             "name": "drupal/console-en",
-            "version": "1.8.0",
+            "version": "v1.9.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/hechoendrupal/drupal-console-en.git",
-                "reference": "ea956ddffab04f519a89858810e5f695b9def92b"
+                "reference": "7594601fff153c2799a62bd678ff80749baeee0c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/hechoendrupal/drupal-console-en/zipball/ea956ddffab04f519a89858810e5f695b9def92b",
-                "reference": "ea956ddffab04f519a89858810e5f695b9def92b",
+                "url": "https://api.github.com/repos/hechoendrupal/drupal-console-en/zipball/7594601fff153c2799a62bd678ff80749baeee0c",
+                "reference": "7594601fff153c2799a62bd678ff80749baeee0c",
                 "shasum": ""
             },
-            "type": "drupal-console-language",
+            "type": "library",
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "GPL-2.0-or-later"
@@ -3280,10 +3286,6 @@
                     "email": "jesus.olivas@gmail.com",
                     "homepage": "http://jmolivas.com"
                 },
-                {
-                    "name": "Drupal Console Contributors",
-                    "homepage": "https://github.com/hechoendrupal/DrupalConsole/graphs/contributors"
-                },
                 {
                     "name": "Eduardo Garcia",
                     "email": "enzo@enzolutions.com",
@@ -3292,6 +3294,10 @@
                 {
                     "name": "Omar Aguirre",
                     "email": "omersguchigu@gmail.com"
+                },
+                {
+                    "name": "Drupal Console Contributors",
+                    "homepage": "https://github.com/hechoendrupal/DrupalConsole/graphs/contributors"
                 }
             ],
             "description": "Drupal Console English Language",
@@ -3302,26 +3308,27 @@
                 "drupal",
                 "symfony"
             ],
-            "time": "2018-03-21T19:16:27+00:00"
+            "time": "2020-08-15T03:34:54+00:00"
         },
         {
             "name": "drupal/console-extend-plugin",
-            "version": "0.9.2",
+            "version": "0.9.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/hechoendrupal/drupal-console-extend-plugin.git",
-                "reference": "f3bac233fd305359c33e96621443b3bd065555cc"
+                "reference": "eff6da99cfb5fe1fc60990672d2667c402eb3585"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/hechoendrupal/drupal-console-extend-plugin/zipball/f3bac233fd305359c33e96621443b3bd065555cc",
-                "reference": "f3bac233fd305359c33e96621443b3bd065555cc",
+                "url": "https://api.github.com/repos/hechoendrupal/drupal-console-extend-plugin/zipball/eff6da99cfb5fe1fc60990672d2667c402eb3585",
+                "reference": "eff6da99cfb5fe1fc60990672d2667c402eb3585",
                 "shasum": ""
             },
             "require": {
-                "composer-plugin-api": "^1.0",
-                "symfony/finder": "~2.7|~3.0",
-                "symfony/yaml": "~2.7|~3.0"
+                "composer-plugin-api": "^1.0 || ^2.0",
+                "composer/installers": "^1.2",
+                "symfony/finder": "~3.0|^4.4",
+                "symfony/yaml": "~3.0|^4.4"
             },
             "type": "composer-plugin",
             "extra": {
@@ -3343,7 +3350,7 @@
                 }
             ],
             "description": "Drupal Console Extend Plugin",
-            "time": "2017-07-28T17:11:54+00:00"
+            "time": "2020-11-18T00:15:28+00:00"
         },
         {
             "name": "drupal/content_access",
@@ -11215,21 +11222,21 @@
         },
         {
             "name": "stecman/symfony-console-completion",
-            "version": "0.8.0",
+            "version": "0.11.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/stecman/symfony-console-completion.git",
-                "reference": "cd738867503477e91dbe84173dfabd431c883431"
+                "reference": "a9502dab59405e275a9f264536c4e1cb61fc3518"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/stecman/symfony-console-completion/zipball/cd738867503477e91dbe84173dfabd431c883431",
-                "reference": "cd738867503477e91dbe84173dfabd431c883431",
+                "url": "https://api.github.com/repos/stecman/symfony-console-completion/zipball/a9502dab59405e275a9f264536c4e1cb61fc3518",
+                "reference": "a9502dab59405e275a9f264536c4e1cb61fc3518",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.2",
-                "symfony/console": "~2.3 || ~3.0 || ~4.0"
+                "symfony/console": "~2.3 || ~3.0 || ~4.0 || ~5.0"
             },
             "require-dev": {
                 "phpunit/phpunit": "~4.8.36 || ~5.7 || ~6.4"
@@ -11237,7 +11244,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "0.6.x-dev"
+                    "dev-master": "0.10.x-dev"
                 }
             },
             "autoload": {
@@ -11256,7 +11263,7 @@
                 }
             ],
             "description": "Automatic BASH completion for Symfony Console Component based applications.",
-            "time": "2018-02-10T04:28:01+00:00"
+            "time": "2019-11-24T17:03:06+00:00"
         },
         {
             "name": "symfony-cmf/routing",
@@ -11375,42 +11382,37 @@
         },
         {
             "name": "symfony/config",
-            "version": "v3.4.42",
+            "version": "v4.4.17",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/config.git",
-                "reference": "cd61db31cbd19cbe4ba9f6968f13c9076e1372ab"
+                "reference": "4da4a6b07cc7d8d7d3e29842bc9c20401d555065"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/config/zipball/cd61db31cbd19cbe4ba9f6968f13c9076e1372ab",
-                "reference": "cd61db31cbd19cbe4ba9f6968f13c9076e1372ab",
+                "url": "https://api.github.com/repos/symfony/config/zipball/4da4a6b07cc7d8d7d3e29842bc9c20401d555065",
+                "reference": "4da4a6b07cc7d8d7d3e29842bc9c20401d555065",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/filesystem": "~2.8|~3.0|~4.0",
+                "php": ">=7.1.3",
+                "symfony/filesystem": "^3.4|^4.0|^5.0",
                 "symfony/polyfill-ctype": "~1.8"
             },
             "conflict": {
-                "symfony/dependency-injection": "<3.3",
-                "symfony/finder": "<3.3"
+                "symfony/finder": "<3.4"
             },
             "require-dev": {
-                "symfony/dependency-injection": "~3.3|~4.0",
-                "symfony/event-dispatcher": "~3.3|~4.0",
-                "symfony/finder": "~3.3|~4.0",
-                "symfony/yaml": "~3.0|~4.0"
+                "symfony/event-dispatcher": "^3.4|^4.0|^5.0",
+                "symfony/finder": "^3.4|^4.0|^5.0",
+                "symfony/messenger": "^4.1|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/yaml": "^3.4|^4.0|^5.0"
             },
             "suggest": {
                 "symfony/yaml": "To use the yaml reference dumper"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
                     "Symfony\\Component\\Config\\": ""
@@ -11435,7 +11437,21 @@
             ],
             "description": "Symfony Config Component",
             "homepage": "https://symfony.com",
-            "time": "2020-05-22T10:56:48+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-11-16T11:15:53+00:00"
         },
         {
             "name": "symfony/console",
@@ -11511,27 +11527,22 @@
         },
         {
             "name": "symfony/css-selector",
-            "version": "v3.4.14",
+            "version": "v4.4.17",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/css-selector.git",
-                "reference": "edda5a6155000ff8c3a3f85ee5c421af93cca416"
+                "reference": "5e6efcb6e5d120249da366417e2517c55b50c931"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/css-selector/zipball/edda5a6155000ff8c3a3f85ee5c421af93cca416",
-                "reference": "edda5a6155000ff8c3a3f85ee5c421af93cca416",
+                "url": "https://api.github.com/repos/symfony/css-selector/zipball/5e6efcb6e5d120249da366417e2517c55b50c931",
+                "reference": "5e6efcb6e5d120249da366417e2517c55b50c931",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8"
+                "php": ">=7.1.3"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
                     "Symfony\\Component\\CssSelector\\": ""
@@ -11545,14 +11556,14 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Jean-François Simon",
-                    "email": "jeanfrancois.simon@sensiolabs.com"
-                },
                 {
                     "name": "Fabien Potencier",
                     "email": "fabien@symfony.com"
                 },
+                {
+                    "name": "Jean-François Simon",
+                    "email": "jeanfrancois.simon@sensiolabs.com"
+                },
                 {
                     "name": "Symfony Community",
                     "homepage": "https://symfony.com/contributors"
@@ -11560,7 +11571,21 @@
             ],
             "description": "Symfony CssSelector Component",
             "homepage": "https://symfony.com",
-            "time": "2018-07-26T09:06:28+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-10-28T20:42:29+00:00"
         },
         {
             "name": "symfony/debug",
@@ -11691,25 +11716,25 @@
         },
         {
             "name": "symfony/dom-crawler",
-            "version": "v3.4.14",
+            "version": "v4.2.12",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/dom-crawler.git",
-                "reference": "452bfc854b60134438e3824b159b0d24a5892331"
+                "reference": "ba1da8fb10291714b8db153fcf7ac515e1a217bb"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/452bfc854b60134438e3824b159b0d24a5892331",
-                "reference": "452bfc854b60134438e3824b159b0d24a5892331",
+                "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/ba1da8fb10291714b8db153fcf7ac515e1a217bb",
+                "reference": "ba1da8fb10291714b8db153fcf7ac515e1a217bb",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
+                "php": "^7.1.3",
                 "symfony/polyfill-ctype": "~1.8",
                 "symfony/polyfill-mbstring": "~1.0"
             },
             "require-dev": {
-                "symfony/css-selector": "~2.8|~3.0|~4.0"
+                "symfony/css-selector": "~3.4|~4.0"
             },
             "suggest": {
                 "symfony/css-selector": ""
@@ -11717,7 +11742,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "4.2-dev"
                 }
             },
             "autoload": {
@@ -11744,7 +11769,7 @@
             ],
             "description": "Symfony DomCrawler Component",
             "homepage": "https://symfony.com",
-            "time": "2018-07-26T10:03:52+00:00"
+            "time": "2019-06-13T10:57:15+00:00"
         },
         {
             "name": "symfony/event-dispatcher",
@@ -11811,20 +11836,20 @@
         },
         {
             "name": "symfony/filesystem",
-            "version": "v3.4.46",
+            "version": "v4.4.17",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/filesystem.git",
-                "reference": "e58d7841cddfed6e846829040dca2cca0ebbbbb3"
+                "reference": "17b83e36a911aefa2cfe04bbf6328ec4c040c1b2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/e58d7841cddfed6e846829040dca2cca0ebbbbb3",
-                "reference": "e58d7841cddfed6e846829040dca2cca0ebbbbb3",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/17b83e36a911aefa2cfe04bbf6328ec4c040c1b2",
+                "reference": "17b83e36a911aefa2cfe04bbf6328ec4c040c1b2",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
+                "php": ">=7.1.3",
                 "symfony/polyfill-ctype": "~1.8"
             },
             "type": "library",
@@ -11866,24 +11891,24 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2020-10-24T10:57:07+00:00"
+            "time": "2020-11-11T22:20:15+00:00"
         },
         {
             "name": "symfony/finder",
-            "version": "v3.4.46",
+            "version": "v4.4.17",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "4e1da3c110c52d868f8a9153b7de3ebc381fba78"
+                "reference": "9f1d1d883b79a91ef320c0c6e803494e042ef36e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/4e1da3c110c52d868f8a9153b7de3ebc381fba78",
-                "reference": "4e1da3c110c52d868f8a9153b7de3ebc381fba78",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/9f1d1d883b79a91ef320c0c6e803494e042ef36e",
+                "reference": "9f1d1d883b79a91ef320c0c6e803494e042ef36e",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8"
+                "php": ">=7.1.3"
             },
             "type": "library",
             "autoload": {
@@ -11924,7 +11949,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2020-10-24T10:57:07+00:00"
+            "time": "2020-11-17T19:45:34+00:00"
         },
         {
             "name": "symfony/http-foundation",
@@ -12955,7 +12980,7 @@
         },
         {
             "name": "symfony/var-dumper",
-            "version": "v3.4.46",
+            "version": "v3.4.47",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/var-dumper.git",
diff --git a/console/language/console-en/.gitignore b/console/language/console-en/.gitignore
deleted file mode 100644
index e336886a96..0000000000
--- a/console/language/console-en/.gitignore
+++ /dev/null
@@ -1,35 +0,0 @@
-# deprecation-detector
-/.rules
-
-# Composer
-/vendor
-/bin/phpunit
-/bin/jsonlint
-/bin/phpcbf
-/bin/phpcs
-/bin/validate-json
-/bin/pdepend
-/bin/php-cs-fixer
-/bin/phpmd
-PATCHES.txt
-
-# Develop
-autoload.local.php
-
-# Binaries
-/box.phar
-/console.phar
-/drupal.phar
-/drupal.phar.version
-
-# Test
-/phpunit.xml
-
-# Drupal
-/core
-/nbproject/
-
-# Splitsh
-/config/
-/PATCHES.txt
-
diff --git a/console/language/console-en/README.md b/console/language/console-en/README.md
deleted file mode 100644
index 4e0ddb433d..0000000000
--- a/console/language/console-en/README.md
+++ /dev/null
@@ -1,41 +0,0 @@
-# drupal-console-en
-
-## Usage
-
-Drupal Console project it's installed per each Drupal 8 website with English language by default.
-
-To install Drupal Console package in other languages check the packages available at [https://packagist.org](https://packagist.org)
-
-
-### Install Drupal Console
-
-To install the appropriate version of Drupal Console project for your drupal installation, run the following composer command
-
-```
-$ composer require drupal/console:~1.0 --prefer-dist --optimize-autoloader
-```
-
-### Install Drupal Console launcher
-
-Drupal Console launcher was created to avoid conflicts between major and minor releases. Drupal Console binary commands are available to every Drupal 8 instance on the machine.
- 
-To install Drupal Console launcher globally follow the instruction below. 
-
-```
-$ curl https://drupalconsole.com/installer -L -o drupal.phar
-# Or 
-$ php -r "readfile('https://drupalconsole.com/installer');" > drupal.phar
-
-$mv drupal.phar /usr/local/bin/drupal
-$ chmod +x /usr/local/bin/drupal
-```
-
-### Contribute
-
-Follow these steps to contribute to the current translation:
-
-- [Project requirements](https://docs.drupalconsole.com/en/contributing/project-requirements.html)
-- [Getting the project](https://docs.drupalconsole.com/en/contributing/getting-the-project.html)
-- [Running the project](https://docs.drupalconsole.com/en/contributing/running-the-project.html)
-
-N.B: Push your changes to your forked repository in order to create PR per day to avoid any conflicts with other contributors.
diff --git a/console/language/console-en/composer.json b/console/language/console-en/composer.json
deleted file mode 100644
index 05abf44884..0000000000
--- a/console/language/console-en/composer.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
-    "name": "drupal/console-en",
-    "description": "Drupal Console English Language",
-    "keywords": ["Drupal", "Console", "Development", "Symfony"],
-    "homepage": "http://drupalconsole.com/",
-    "type": "drupal-console-language",
-    "license": "GPL-2.0-or-later",
-    "authors": [
-        {
-            "name":      "David Flores",
-            "email":     "dmousex@gmail.com",
-            "homepage":  "http://dmouse.net"
-        },
-        {
-            "name":      "Jesus Manuel Olivas",
-            "email":     "jesus.olivas@gmail.com",
-            "homepage":  "http://jmolivas.com"
-        },
-        {
-            "name":      "Eduardo Garcia",
-            "email":     "enzo@enzolutions.com",
-            "homepage":  "http://enzolutions.com/"
-        },
-        {
-            "name":      "Omar Aguirre",
-            "email":     "omersguchigu@gmail.com"
-        },
-        {
-            "name":      "Drupal Console Contributors",
-            "homepage":  "https://github.com/hechoendrupal/DrupalConsole/graphs/contributors"
-        }
-    ],
-    "support": {
-        "issues": "https://github.com/hechoendrupal/DrupalConsole/issues",
-        "forum": "https://gitter.im/hechoendrupal/DrupalConsole",
-        "docs": "https://docs.drupalconsole.com"
-    }
-}
diff --git a/console/language/console-en/translations/about.yml b/console/language/console-en/translations/about.yml
deleted file mode 100644
index a23c1a418b..0000000000
--- a/console/language/console-en/translations/about.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-description: 'Displays basic information about Drupal Console project'
-messages:
-    welcome: 'The Drupal Console is a suite of tools that you run on the CLI to:'
-    welcome-feature-generate: 'Generate boilerplate code.'
-    welcome-feature-interact: 'Interact with a Drupal 8 installation.'
-    welcome-feature-learn: 'Learn Drupal 8.'
-    links: 'Project links'
-    landing: 'Landing page - "%s"'
-    change-log: 'Change log at - "%s"'
-    documentation: 'Documentation at - "%s"'
-    support: 'Support chat room - "%s"'
-    supporting-organizations: 'Supporting organizations'
-    version-supported: 'Drupal supported version <info>"%s"</info>'
diff --git a/console/language/console-en/translations/application.yml b/console/language/console-en/translations/application.yml
deleted file mode 100644
index cf19798113..0000000000
--- a/console/language/console-en/translations/application.yml
+++ /dev/null
@@ -1,93 +0,0 @@
-options:
-    env: 'The Environment name'
-    debug: 'Switches on debug mode'
-    learning: 'Generate a verbose code output'
-    generate-chain: 'Shows command options and arguments as yaml output to be used in chain command'
-    generate-inline: 'Shows command options and arguments as inline command'
-    generate-doc: 'Shows command options and arguments as markdown'
-    root: 'Define the Drupal root to be used in command execution'
-    uri: 'URI of the Drupal site to use (for multi-site environments or when running on an alternate port)'
-    yes: 'Skip confirmation and proceed'
-    target: 'Site name you want to interact with (for local or remote sites)'
-    help: 'Display this help message'
-    quiet: 'Suppress all output from the command'
-    verbose: 'Increase the verbosity of messages: 1 for normal output, 2 for more verbose output, and 3 for debug'
-    version: 'Display this application version'
-    ansi: 'Force ANSI output'
-    no-ansi: 'Disable ANSI output'
-    no-interaction: 'Do not ask any interactive question'
-    check-fix: 'Attempt to fix any missing configuration.'
-arguments:
-    command: 'The command to execute'
-messages:
-    completed: 'The command was executed successfully!'
-    chain:
-        generated: 'Yaml representation of this command, usage copy in i.e. `~/.console/chain/sample.yml` to execute using `chain` command, make sure your yaml file start with a `commands` root key:'
-    inline:
-        generated: 'Inline representation of this command:'
-    generated: 'You can now start using the generated code!'
-    files:
-        generated: 'Generated or updated files'
-        copied: 'Copied files'
-    lines-code: 'Generated lines: "%s"'
-    path: 'Generation path'
-    learning:
-        route: "In order to to create pages it is necessary to define routes for them.\nA route maps a URL path to a controller. It defines what function\nor method will be called when a URL is accessed.\nIf the user accesses http://drupal8.dev/{{ route.path }}, the routing\nsystem will look for a route with that path. In this case it will find a\nmatch, and execute the _controller callback. In this case the callback is\ndefined as a classname\n(\"\\Drupal\\{{ module }}\\Controller\\{{ class_name }}\")\nand a method (\"{{ route.method }}\")."
-    autocomplete: |
-                Bash: Bash support depends on the http://bash-completion.alioth.debian.org/
-                project which can be installed with your package manager of choice. Then add
-                this line to your shell configuration file.
-                <info>source "$HOME/.console/console.rc" 2>/dev/null</info>
-
-                Bash or Zsh: Add this line to your shell configuration file:
-                <info>source "$HOME/.console/console.rc" 2>/dev/null</info>
-
-                Fish: Create a symbolic link
-                <info>ln -s ~/.console/drupal.fish ~/.config/fish/completions/drupal.fish</info>
-    version: '<info>"%s"</info> version <comment>"%s"</comment>'
-    disable:
-      command:
-        error: 'Command: "%s" is deprecated.'
-        extra: 'You must execute: "%s" instead'
-errors:
-    invalid-command: 'Command "%s", is not a valid command name.'
-    renamed-command: 'Command "%s" was renamed, use "%s" instead.'
-    drush-command: 'Command "%s" is a Drush command (deprecated). Drupal Console equivalent "%s" was executed instead.'
-site:
-    messages:
-        path: 'Site path'
-    errors:
-        settings: 'In order to list all of the available commands you should install drupal first.'
-        directory: 'In order to list all of the available commands, you should run this against a drupal root directory.'
-        not-installed: 'Drupal Console is not installed at: "%s"'
-        execute-composer: 'You must execute the following composer commands:'
-        missing-config-file: 'Missing configuration file, possible paths:'
-        missing-config-file-command: 'Execute "drupal init" command to generate one'
-user:
-    messages:
-        path: 'User home path'
-
-remote:
-  errors:
-    passphrase-missing: 'Passphrase file is missing'
-    passphrase-empty: 'Passphrase file is empty'
-    private-missing: 'Private file is missing'
-    private-empty: 'Private file is empty'
-    private-invalid: 'Private file is invalid'
-    invalid-root: 'Invalid root directory'
-    console-not-found: 'Drupal Console not found on this site'
-
-gitbook:
-  messages:
-    title: 'Available Drupal Console Commands'
-    note: 'Note'
-    note-description: 'Drupal Console commands *must* be run from the root of a Drupal 8 installation'
-    command: 'Drupal Console Command'
-    command_description: 'The **"%s"** command "%s"'
-    usage: 'Usage'
-    options: 'Available options'
-    option: 'Option'
-    details: 'Details'
-    arguments: 'Available arguments'
-    argument: 'Argument'
-    examples: 'Examples'
diff --git a/console/language/console-en/translations/cache.rebuild.yml b/console/language/console-en/translations/cache.rebuild.yml
deleted file mode 100644
index 3e1b5ff1d4..0000000000
--- a/console/language/console-en/translations/cache.rebuild.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-description: 'Rebuild and clear all site caches.'
-options:
-    cache: 'Only clear a specific cache.'
-messages:
-    welcome: 'Welcome to the cache:rebuild command'
-    rebuild: 'Rebuilding cache(s), wait a moment please.'
-    completed: 'Done clearing cache(s).'
-    invalid-cache: 'Cache "%s" is invalid.'
-questions:
-    cache: 'Select cache.'
-examples:
-    - description: Rebuild all caches
-      execution: drupal cr all
-    - description: Rebuild discovery cache
-      execution: drupal cr discovery
diff --git a/console/language/console-en/translations/cache.tag.invalidate.yml b/console/language/console-en/translations/cache.tag.invalidate.yml
deleted file mode 100644
index dbe22a2468..0000000000
--- a/console/language/console-en/translations/cache.tag.invalidate.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-description: 'Invalidate cache tags.'
-options:
-    tag: 'One or more tags to invalidate.'
-messages:
-    start: 'Invalidating tag(s) "%s".'
-    completed: 'Done invalidating tag(s).'
-examples:
-    - description: Invalidate routes
-      execution: drupal cti routes
-    - description: Invalidate a specific node
-      execution: drupal cti node:1 node_list
diff --git a/console/language/console-en/translations/chain.yml b/console/language/console-en/translations/chain.yml
deleted file mode 100644
index f292475a4b..0000000000
--- a/console/language/console-en/translations/chain.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-description: 'Chain command execution'
-options:
-    file: 'User defined file containing commands to get executed.'
-questions:
-    chain-file: 'Select chain file to execute'
-messages:
-    missing-file: 'You must provide a valid file path and name.'
-    invalid-file: 'The file "%s" does not exist.'
-    module-install: 'module:install command is not runnable inside a chain queue and must be run independently.'
-    missing-environment-placeholders: 'Missing environment placeholder(s) "%s"'
-    set-environment-placeholders: 'Set environment placeholders as:'
-    missing-inline-placeholders: 'Missing inline placeholder(s) "%s"'
-    set-inline-placeholders: 'Pass inline placeholders as:'
-    select-value-for-placeholder: 'Select value for "%s" placeholder'
-    enter-value-for-placeholder: 'Enter value for "%s" placeholder'
-    legacy-inline: 'Update inline legacy placeholders from %{{name}} to {{name}}.'
-    legacy-environment: 'Update environment legacy placeholders from ${{(NAME}} or %env(NAME)% to {{env("NAME")}}.'
-    metadata-registration: |
-      You should register your chain file as command by providing metadata, more info at:
-         https://docs.drupalconsole.com/en/chains/registering.html
-examples:
-    - description: 'Providing a file option using full path. (DEPRECATED'
-      execution: |
-        drupal chain \
-          --file="/path/to/file/chain-file.yml"
diff --git a/console/language/console-en/translations/check.yml b/console/language/console-en/translations/check.yml
deleted file mode 100644
index b98c5bc52e..0000000000
--- a/console/language/console-en/translations/check.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-description: 'System requirement checker'
-messages:
-  file: 'Checking requirements using file at:'
-  php-invalid: 'The current installed version "%s" is invalid, it requires "%s" or higher'
-  configuration-missing: 'The configuration "%s" is missing.'
-  configuration-overwritten: 'The PHP-Configuration (php.ini) "%s" was missing and overwritten with "%s".'
-  extension-missing: 'The extension "%s" is missing.'
-  extension-recommended: 'The extension "%s" is recommended to install.'
-  success: 'Checks passed.'
diff --git a/console/language/console-en/translations/common.yml b/console/language/console-en/translations/common.yml
deleted file mode 100644
index abc9c4c1c6..0000000000
--- a/console/language/console-en/translations/common.yml
+++ /dev/null
@@ -1,57 +0,0 @@
-options:
-    class: 'Class name'
-    events: 'Load events from the container'
-    module: 'The Module name.'
-    extension: 'The extension name.'
-    extension-type: 'The extension type.'
-    services: 'Load services from the container.'
-    tags: 'Set service tags from the container.'
-    inputs: 'Create inputs in a form.'
-    permissions: 'Create permissions.'
-questions:
-    class: 'Enter the Class name'
-    module: 'Enter the module name'
-    extension: 'Enter the extension name'
-    extension-type: 'Enter the extension type'
-    confirm: 'Do you want proceed with the operation?'
-    canceled: 'The operation was cancelled.'
-    events:
-        message: "\nType the event name or use keyup or keydown.\nThis is optional, press <info>enter</info> to <info>continue</info>\n"
-        name: 'Enter event name'
-    services:
-        confirm: 'Do you want to load services from the container?'
-        message: "\nType the service name or use keyup or keydown.\nThis is optional, press <info>enter</info> to <info>continue</info>\n"
-        name: 'Enter your service'
-    roles:
-        message: "\nType the role name or use keyup or keydown.\nThis is optional, press <info>enter</info> to <info>continue</info>\n"
-        name: 'Enter your role'
-    inputs:
-        confirm: 'Do you want to generate a form structure?'
-        label: 'Input label'
-        machine-name: 'Input machine name'
-        permission: 'Do you want to generate permissions?'
-        type: 'New field type (press <return> to stop adding fields)'
-        invalid: 'Field Type "%s" is invalid.'
-        description: Description
-        default-value:
-            default-value: 'Default value'
-            checkboxes: 'Default value(s) separated by commas'
-        weight: 'Weight for input item'
-        title: 'Title'
-        fieldset: 'Fieldset'
-        new-field: 'Enter a new field properties'
-errors:
-    module-dependency: 'Missing module dependency "%s" is not installed. Try module:install to install it.'
-    class-name-empty: 'The Class name can not be empty'
-    invalid-file-path: 'You must provide a valid file path'
-    module-exist: 'Module "%s" already exist.'
-    machine-name-duplicated: 'Machine name "%s" is duplicated.'
-status:
-    enabled: Enabled
-    disabled: Disabled
-messages:
-    canceled: 'The generation was cancelled'
-    drupal-core: 'Drupal Core'
-    move-phar: 'Accessing console from anywhere on your system'
-    quick-start: 'Download, install and serve Drupal 8'
-    available-field-types: 'Available types: <comment>%s</comment>'
diff --git a/console/language/console-en/translations/complete.yml b/console/language/console-en/translations/complete.yml
deleted file mode 100644
index f36c530184..0000000000
--- a/console/language/console-en/translations/complete.yml
+++ /dev/null
@@ -1 +0,0 @@
-description: 'Shell completion command list'
diff --git a/console/language/console-en/translations/composerize.yml b/console/language/console-en/translations/composerize.yml
deleted file mode 100644
index babb4c1085..0000000000
--- a/console/language/console-en/translations/composerize.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-description: 'Converts Drupal codebase to composer.'
-options:
-  show-packages: 'Show list of packages.'
-  include-version: 'Include version on suggested result command.'
-messages:
-  name: 'Name'
-  version: 'Version'
-  dependencies: 'Dependencies'
-  profile: 'Profile(s) detected'
-  module: 'Module(s) detected'
-  theme: 'Theme(s) detected'
-  from: 'From your project root:'
-  execute: 'Execute this command:'
-  ignore: 'To ignore third party libraries, profiles, modules and themes add to your .gitignore file:'
diff --git a/console/language/console-en/translations/config.delete.yml b/console/language/console-en/translations/config.delete.yml
deleted file mode 100644
index 08e4e37749..0000000000
--- a/console/language/console-en/translations/config.delete.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-description: 'Delete configuration'
-arguments:
-    type: 'Configuration type.'
-    name: 'Configuration name.'
-messages:
-    all: 'All configuration sucessfully deleted.'
-    deleted: 'Configuration "%s" sucessfully deleted.'
-errors:
-    config-storage: 'Configuration type would not be loaded.'
-    name: 'Configuration name must contain a value.'
-    type: 'Configuration type is missing.'
-    not-exists: 'The configuration "%s" does not exist.'
-warnings:
-    undo: 'This action will delete all configuration permanently.'
-questions:
-    sure: 'Are you sure to delete all configuration'
-examples:
-    - description: 'Provide a config type and a config name'
-      execution: drupal config:delete active all
-
diff --git a/console/language/console-en/translations/config.diff.yml b/console/language/console-en/translations/config.diff.yml
deleted file mode 100644
index 7b3b81ff7c..0000000000
--- a/console/language/console-en/translations/config.diff.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-description: 'Output configuration items that are different in active configuration compared with a directory.'
-arguments:
-    directory: 'The directory to diff against. If omitted, choose from Drupal config directories.'
-options:
-    reverse: 'See the changes in reverse (i.e diff a directory to the active configuration).'
-questions:
-    directories: 'Config directory:'
-table:
-    headers:
-      collection: 'Collection'
-      config-name: 'Configuration item'
-      operation: 'Operation'
-messages:
-    no-changes: 'There are no changes.'
-examples:
-    - description: 'Provide a config directory'
-      execution: drupal config:diff ../config/path
-
diff --git a/console/language/console-en/translations/config.edit.yml b/console/language/console-en/translations/config.edit.yml
deleted file mode 100644
index 282e4f2788..0000000000
--- a/console/language/console-en/translations/config.edit.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-description: 'Change a configuration object with a text editor.'
-arguments:
-    config-name: 'Configuration object name, for example "user.settings".'
-    editor: 'Editor, for example "vim" or "gedit".'
-questions:
-    config-name: 'Choose a configuration Object'
-messages:
-    no-directory: 'An error occurred while creating your directory at: "%s"'
-    choose-configuration: 'Choose a configuration'
-examples:
-    - description: 'Edit system cron configurations with "vim" (default editor).'
-      execution: 'drupal config:edit system.cron'
-    - description: 'Edit system cron configurations with "gedit".'
-      execution: 'drupal config:edit system.cron gedit'
-
diff --git a/console/language/console-en/translations/config.export.content.type.yml b/console/language/console-en/translations/config.export.content.type.yml
deleted file mode 100644
index 488f2f961d..0000000000
--- a/console/language/console-en/translations/config.export.content.type.yml
+++ /dev/null
@@ -1,23 +0,0 @@
-description: 'Export a specific content type and their fields.'
-arguments:
-    content-type: 'Content Type to be exported'
-questions:
-    content-type: 'Content Type to be exported'
-    optional-config: 'Export content type in module as an optional configuration'
-messages:
-    content-type-exported: 'Exporting content type'
-options:
-    optional-config: 'Export content type as an optional YAML configuration in your module'
-    remove-uuid: 'If set, the configuration will be exported without uuid key.'
-    remove-config-hash: 'If set, the configuration will be exported without the default site hash key.'
-examples:
-    - description: 'Provide a content type  and module name'
-      execution: |
-        drupal config:export:content:type page \
-          --module="demo"
-    - description: 'If you want export content type provide the optional config'
-      execution: |
-        drupal config:export:content:type page \
-          --module="demo" \
-          --optional-config 
-
diff --git a/console/language/console-en/translations/config.export.single.yml b/console/language/console-en/translations/config.export.single.yml
deleted file mode 100644
index 102cffe072..0000000000
--- a/console/language/console-en/translations/config.export.single.yml
+++ /dev/null
@@ -1,32 +0,0 @@
-description: 'Export a single configuration or a list of configurations as yml file(s).'
-arguments:
-    name: 'Configuration name.'
-options:
-    include-dependencies: 'Export dependencies of the configuration as well.'
-    simple-configuration: 'Simple configuration'
-    optional: 'Export config as an optional YAML configuration in your module'
-    remove-uuid: 'If set, the configuration will be exported without uuid key.'
-    remove-config-hash: 'If set, the configuration will be exported without the default site hash key.'
-questions:
-    config-type: 'Configuration type'
-    name: 'Configuration name'
-    optional: 'Export config in module as an optional configuration'
-    remove-uuid: 'Do you want to remove the uuid from this export?'
-    remove-config-hash: 'Do you want to remove the default site hash from this export?'
-messages:
-    config-not-found: 'Configuration name not found.'
-    export: 'Configuration was exported at file "%s".'
-    invalid-config-type: 'Invalid config type, please select one of the list'
-    invalid-config-name: 'Invalid config name, please select one of the list'
-    config-exported: 'Configuration(s) exported successfully'
-examples:
-    - description: 'Provide config settings name to be exported'
-      execution: |
-        drupal config:export:single \
-          --name=config.settings.name
-    - description: 'if uuid and/or config hashes will be removed.'
-      execution: |
-        drupal config:export:single \
-          --name=config.settings.name \
-          --remove-uuid \
-          --remove-config-hash
diff --git a/console/language/console-en/translations/config.export.view.yml b/console/language/console-en/translations/config.export.view.yml
deleted file mode 100644
index ede7018337..0000000000
--- a/console/language/console-en/translations/config.export.view.yml
+++ /dev/null
@@ -1,23 +0,0 @@
-description: 'Export a view in YAML format inside a provided module to reuse in other website.'
-messages:
-    view_exported: 'View exported sucessfully'
-    depencies-included: 'The following module dependencies were included at "%s"'
-questions:
-    view: 'View to be exported'
-    optional-config: 'Export view in module as an optional configuration'
-    include-module-dependencies: 'Include view module dependencies in module info YAML file'
-arguments:
-    view-id: 'View ID'
-options:
-    optional-config: 'Export view as an optional YAML configuration in your module'
-    include-module-dependencies: 'Include module dependencies in module info YAML file'
-examples:
-    - description: 'Provide a view id'
-      execution: drupal config:export:view viewid
-    - description: 'You can provide the interactive values like parameter.'
-      execution: |
-        drupal config:export:view viewid \
-          --module="modulename" \
-          --optional-config \
-          --include-module-dependencies
-
diff --git a/console/language/console-en/translations/config.export.yml b/console/language/console-en/translations/config.export.yml
deleted file mode 100644
index 66f83289da..0000000000
--- a/console/language/console-en/translations/config.export.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-description: 'Export current application configuration.'
-options:
-    directory: 'Define the export directory to save the configuration output.'
-    tar: 'If set, the configuration will be exported to an archive file.'
-    remove-uuid: 'If set, the configuration will be exported without uuid key.'
-    remove-config-hash: 'If set, the configuration will be exported without the default site hash key.'
-messages:
-    directory: 'The configuration was exported at "%s"'
-    error: 'An error occurred while creating your directory at "%s"'
-examples:
-    - description: 'Optional you can add the path to export'
-      execution: |
-        drupal config:export  \
-          --directory="path/to/export"
-    - description: 'If export will be in a compressed file and/or if uuid and config hashes will be removed.'
-      execution: |
-        drupal config:export  \
-          --directory="path/to/export" \
-          --tar \
-          --remove-uuid \
-          --remove-config-hash
-
diff --git a/console/language/console-en/translations/config.import.single.yml b/console/language/console-en/translations/config.import.single.yml
deleted file mode 100644
index 02e9569fe2..0000000000
--- a/console/language/console-en/translations/config.import.single.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-description: 'Import a single configuration or a list of configurations.'
-options:
-    file: 'The file(s) name or file(s) absolute path to import'
-    directory: 'The path from where to import file(s).'
-questions:
-    file: 'Enter file name or file absolute path to import'
-    directory: 'Enter path from where to import files.'
-messages:
-    missing-file: 'File option is missing.'
-    empty-value: 'Value can not be empty'
-    success: 'Configuration(s) "%s", has been imported successfully.'
-examples:
-    - description: 'Providing a file option using full path.'
-      execution: |
-        drupal config:import:single \
-          --file="/path/to/file/block.block.default_block.yml"
-    - description: 'Providing file and directory options'
-      execution: |
-        drupal config:import:single  \
-          --file="block.block.default_block.yml" \
-          --directory="/path/to/directory"
diff --git a/console/language/console-en/translations/config.import.yml b/console/language/console-en/translations/config.import.yml
deleted file mode 100644
index 30e1a8848b..0000000000
--- a/console/language/console-en/translations/config.import.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-description: 'Import configuration to current application.'
-options:
-    file: 'Path to an archive file of configuration to import.'
-    directory: 'Path to a directory of configuration to import.'
-    remove-files: 'Remove files after synchronization.'
-messages:
-    config_files_imported: 'List of config files.'
-    imported: 'Configuration imported successfully.'
-    importing: 'Importing configuration.'
-    already-imported: 'Another request may be synchronizing configuration already.'
-    nothing-to-do: 'There are no changes to import.'
-examples:
-    - description: 'Provide a configuration file'
-      execution: |
-        drupal config:import \
-          --file=/path/to/config/file
-    - description: 'Provide a configuration directory'
-      execution: |
-        drupal config:import  \
-          --directory=/path/to/config/dir
-
diff --git a/console/language/console-en/translations/config.override.yml b/console/language/console-en/translations/config.override.yml
deleted file mode 100644
index 94d0e37d5f..0000000000
--- a/console/language/console-en/translations/config.override.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-description: 'Override config value in active configuration.'
-questions:
-    name: 'Enter configuration name'
-    key: 'Enter the configuration key'
-    value: 'Enter the configuration value'
-arguments:
-    name: 'Configuration name'
-    key: 'Key'
-    value: 'Value'
-messages:
-    configuration: 'Configuration name'
-    configuration-key: 'Configuration key'
-    original: 'Original Value'
-    updated: 'Override Value'
-    invalid-name: 'Config object "%s" does not exist.'
-examples:
-    - description: 'Set the Contact module flood limit to 10.'
-      execution: 'drupal config:override contact.settings flood.limit 10'
-
diff --git a/console/language/console-en/translations/config.validate.yml b/console/language/console-en/translations/config.validate.yml
deleted file mode 100644
index b34ac21bea..0000000000
--- a/console/language/console-en/translations/config.validate.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-description: 'Validate a drupal config against its schema'
-options: {}
-arguments: {}
-messages:
-    success: 'Config was successfully validated'
-    no-conf: 'Config with this name does not exist'
-examples:
-    - description: 'Provide the configuration name.'
-      execution: 'drupal config:validate configuration.name'
-
diff --git a/console/language/console-en/translations/create.comments.yml b/console/language/console-en/translations/create.comments.yml
deleted file mode 100644
index f3a7a6539c..0000000000
--- a/console/language/console-en/translations/create.comments.yml
+++ /dev/null
@@ -1,41 +0,0 @@
-description: 'Create dummy comments for your Drupal 8 application.'
-help: 'The <info>create:comments</info> command helps you create dummy comments.'
-welcome: 'Welcome to the Drupal comments generator'
-arguments:
-  node-id: 'Node ID where the comments will be created'
-options:
-    limit: 'How many comments would you like to create'
-    title-words: 'Maximum number of words in comment titles'
-    time-range: 'How far back in time should the comments be dated'
-questions:
-    node-id: 'Node ID where the comments will be created'
-    content-type: 'Select content type(s) to be used on comment creation'
-    limit: 'Enter how many comments would you like to generate'
-    title-words: 'Enter the maximum number of words in titles'
-    time-range: 'How far back in time should the comments be dated?'
-    time-ranges:
-        - 'Now'
-        - '1 hour ago'
-        - '1 day ago'
-        - '1 week ago'
-        - '1 month ago'
-        - '1 year ago'
-messages:
-    node-id: 'Node Id'
-    comment-id: 'Comment Id'
-    content-type: 'Content type'
-    title: 'Title'
-    created: 'Created Time'
-    invalid-content-types: 'Content types "%s" are invalid'
-    created-comments: 'Created "%s" comments successfully'
-    error: 'Error creating comments: "%s"'
-examples:
-    - description: 'Provide the node id where the comments will be generated.'
-      execution: drupal create:comments  node-id
-    - description: 'Provide number of comments to generate, max title words and time range.'
-      execution: |
-        drupal create:comments  node-id \
-          --limit="2" \
-          --title-words="5" \
-          --time-range="1"
-
diff --git a/console/language/console-en/translations/create.nodes.yml b/console/language/console-en/translations/create.nodes.yml
deleted file mode 100644
index 34cdc2666d..0000000000
--- a/console/language/console-en/translations/create.nodes.yml
+++ /dev/null
@@ -1,40 +0,0 @@
-description: 'Create dummy nodes for your Drupal 8 application.'
-help: 'The <info>create:nodes</info> command helps you create dummy nodes.'
-welcome: 'Welcome to the Drupal nodes generator'
-arguments:
-  content-types: 'Content type(s) to be used in node creation'
-options:
-    limit: 'How many nodes would you like to create'
-    title-words: 'Maximum number of words in node titles'
-    time-range: 'How far back in time should the nodes be dated'
-questions:
-    content-type: 'Select content type(s) to be used on node creation'
-    limit: 'Enter how many nodes would you like to generate'
-    title-words: 'Enter the maximum number of words in titles'
-    time-range: 'How far back in time should the nodes be dated?'
-    time-ranges:
-        - 'Now'
-        - '1 hour ago'
-        - '1 day ago'
-        - '1 week ago'
-        - '1 month ago'
-        - '1 year ago'
-messages:
-    node-id: 'Node Id'
-    content-type: 'Content type'
-    title: 'Title'
-    created: 'Created Time'
-    invalid-content-types: 'Content types "%s" are invalid'
-    created-nodes: 'Created "%s" nodes successfully'
-    error: 'Error creating nodes: "%s"'
-examples:
-    - description: 'Provide the content type name.'
-      execution: drupal create:nodes content-name
-    - description: 'Provide the limit of publications, limit of title words, time range and language.'
-      execution: |
-        drupal create:nodes content-name \
-          --limit="5" \
-          --title-words="5" \
-          --time-range="1" \
-          --language="und"
-
diff --git a/console/language/console-en/translations/create.roles.yml b/console/language/console-en/translations/create.roles.yml
deleted file mode 100644
index 7584c5d9e4..0000000000
--- a/console/language/console-en/translations/create.roles.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-description: 'Create dummy roles for your Drupal 8 application.'
-help: 'The <info>create:roles</info> command helps you create dummy roles.'
-welcome: 'Welcome to the Drupal roles generator'
-options:
-    limit: 'How many roles would you like to create'
-questions:
-    limit: 'Enter how many roles would you like to create'
-messages:
-    role-id: 'Role Id'
-    role-name: 'Rolename'
-    created-roles: 'Created "%s" roles successfully'
-    error: 'Error creating roles: "%s"'
-examples:
-    - description: 'Provide roles.'
-      execution: drupal create:roles
-    - description: 'Provide the number of roles to create'
-      execution: |
-        drupal create:roles
-
diff --git a/console/language/console-en/translations/create.terms.yml b/console/language/console-en/translations/create.terms.yml
deleted file mode 100644
index be26f06cc3..0000000000
--- a/console/language/console-en/translations/create.terms.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-description: 'Create dummy terms for your Drupal 8 application.'
-help: 'The <info>create:terms</info> command helps you create dummy terms.'
-welcome: 'Welcome to the Drupal terms creator'
-arguments:
-  vocabularies: 'Vocabulary(s) to be used in terms creation'
-options:
-    limit: 'How many terms would you like to create'
-    name-words: 'Maximum number of words in term names'
-questions:
-    vocabularies: 'Select vocabulary(s) to be used on terms creation'
-    limit: 'Enter how many terms would you like to create'
-    name-words: 'Enter the maximum number of words in term names'
-messages:
-    term-id: 'Term Id'
-    vocabulary: 'Vocabulary'
-    name: 'Name'
-    invalid-vocabularies: 'Vocabulary(s) "%s" are invalid'
-    created-terms: 'Created "%s" terms successfully'
-    error: 'Error creating terms: "%s"'
-examples:
-    - description: 'Provide the vocabulary term name.'
-      execution: drupal create:terms vocabulary
-    - description: 'Provide the limit of terms to add and limit of title words.'
-      execution: |
-        drupal create:terms tags \
-          --limit="10" \
-          --name-words="5"
-
diff --git a/console/language/console-en/translations/create.users.yml b/console/language/console-en/translations/create.users.yml
deleted file mode 100644
index 3225da4baa..0000000000
--- a/console/language/console-en/translations/create.users.yml
+++ /dev/null
@@ -1,38 +0,0 @@
-description: 'Create dummy users for your Drupal 8 application.'
-help: 'The <info>create:users</info> command helps you create dummy users.'
-welcome: 'Welcome to the Drupal users generator'
-arguments:
-  roles: 'Role(s) to be used in user creation'
-options:
-    limit: 'How many users would you like to create'
-    password: 'Password to be set to users created'
-    time-range: 'How far back in time should the users be dated'
-questions:
-    roles: 'Select role(s) to be used on user creation'
-    limit: 'Enter how many users would you like to generate'
-    password: 'Enter the password to be set to users created'
-    time-range: 'How far back in time should the users be dated?'
-    time-ranges:
-        - 'Now'
-        - '1 hour ago'
-        - '1 day ago'
-        - '1 week ago'
-        - '1 month ago'
-        - '1 year ago'
-messages:
-    user-id: 'User Id'
-    roles: 'Roles'
-    username: 'Username'
-    created: 'Created Time'
-    created-users: 'Created "%s" users successfully'
-    error: 'Error creating users: "%s"'
-examples:
-    - description: 'Provide the user role.'
-      execution: drupal create:users role
-    - description: 'Provide the number of users to create, password and time range to create.'
-      execution: |
-        drupal create:users role \
-          --limit="5" \
-          --password="usersnewpassword" \
-          --time-range="1"
-
diff --git a/console/language/console-en/translations/create.vocabularies.yml b/console/language/console-en/translations/create.vocabularies.yml
deleted file mode 100644
index ca70cf4dc6..0000000000
--- a/console/language/console-en/translations/create.vocabularies.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-description: 'Create dummy vocabularies for your Drupal 8 application.'
-help: 'The <info>create:vocabularies</info> command helps you create dummy vocabularies.'
-welcome: 'Welcome to the Drupal vocabularies creator'
-options:
-    limit: 'How many vocabularies would you like to create'
-    name-words: 'Maximum number of words in vocabulary names'
-questions:
-    limit: 'Enter how many vocabularies would you like to create'
-    name-words: 'Enter the maximum number of words in vocabulary names'
-messages:
-    vocabulary-id: 'Vocabulary Id'
-    name: 'Name'
-    created-terms: 'Created "%s" vocabularies successfully'
-    error: 'Error creating vocabularies: "%s"'
-examples:
-    - description: 'Provide the number of vocabularies to create and maximum number of words in vocabulary names'
-      execution: |
-        drupal create:vocabularies \
-          --limit="5" \
-          --name-words="5"
-    
diff --git a/console/language/console-en/translations/cron.execute.yml b/console/language/console-en/translations/cron.execute.yml
deleted file mode 100644
index a4f2b78be2..0000000000
--- a/console/language/console-en/translations/cron.execute.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-description: 'Execute cron implementations by module or execute all crons'
-messages:
-    module-invalid: 'Module "%s" doesn''t have an implementation of cron'
-    executing-cron: 'Executing cron function of module "%s"'
-    success: 'All cron implementations requested were executed successfully'
-    lock: 'Attempting to re-run cron while it is already running'
-examples:
-    - description: 'Execute the cron globally'
-      execution: |
-        drupal cron:execute
-    - description: 'Execute the cron on the specified module'
-      execution: |
-        drupal cron:execute \
-          <module>
diff --git a/console/language/console-en/translations/cron.release.yml b/console/language/console-en/translations/cron.release.yml
deleted file mode 100644
index c7a8313f00..0000000000
--- a/console/language/console-en/translations/cron.release.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-description: 'Release cron system lock to run cron again'
-messages:
-    released: 'Cron lock was released successfully'
-examples:
-    - description: 'Execute the cron globally'
-      execution: |
-        drupal cron:execute
-
diff --git a/console/language/console-en/translations/database.add.yml b/console/language/console-en/translations/database.add.yml
deleted file mode 100644
index 2fb04a14b8..0000000000
--- a/console/language/console-en/translations/database.add.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-description: 'Add a database to settings.php'
-options:
-  database: 'The database name'
-  username: 'The database username'
-  password: 'The database password'
-  prefix: 'The database prefix'
-  host: 'The database host address'
-  port: 'The database host port'
-  driver: 'The database driver'
-questions:
-  database: 'Enter the database name'
-  username: 'Enter the username to access the database'
-  password: 'Enter password for the database user'
-  prefix: 'Enter the database prefix'
-  host: 'Enter the database host address'
-  port: 'Enter the database host port'
-  driver: 'Enter the database driver'
-error: 'Could not write the site settings file. Either run this command as sudo or temporarily change permissions to allow write access to settings.php.'
-examples:
-    - description: 'Add a database to the settings.php'
-      execution: |
-        drupal database:add \
-          --database=DATABASE \
-          --username=USERNAME \
-          --password=PASSWORD
diff --git a/console/language/console-en/translations/database.client.yml b/console/language/console-en/translations/database.client.yml
deleted file mode 100644
index b2c9a4bd7c..0000000000
--- a/console/language/console-en/translations/database.client.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-description: 'Launch a DB client if it''s available'
-arguments:
-    database: "Database key from settings.php"
-messages:
-    connection: 'Connection: "%s"'
-examples:
-    - description: 'Launch the default client or could launch another regarding the specification on the argument'
-      execution: |
-        drupal database:client <database>
diff --git a/console/language/console-en/translations/database.connect.yml b/console/language/console-en/translations/database.connect.yml
deleted file mode 100644
index a771d7d219..0000000000
--- a/console/language/console-en/translations/database.connect.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-description: "Shows DB connection"
-arguments:
-  database: "Database key from settings.php"
-messages:
-    database-not-found: 'Database "%s" connection info wasn''t found'
-    database-not-supported: 'Database type "%s" is not supported yet'
-    database-client-not-found: 'Database client "%s" wasn''t found'
-    connection: 'Connection: "%s"'
-examples:
-    - description: 'Connects to an specified database, or the default if not arguments passed'
-      execution: |
-        drupal database:connect \
-          <database>
diff --git a/console/language/console-en/translations/database.drop.yml b/console/language/console-en/translations/database.drop.yml
deleted file mode 100644
index 6f71d05bd5..0000000000
--- a/console/language/console-en/translations/database.drop.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-description: "Drop all tables in a given database."
-help: 'The <info>database:drop</info> command helps you drop database tables.'
-arguments:
-  database: 'Database key from settings.php'
-question:
-    drop-tables: 'Confirm you really want to drop all tables in the database "%s"?'
-messages:
-    table: 'Table'
-    table-drop: 'Drop "%s" tables successfully'
-examples:
-    - description: 'Drop the tables on the database specified on the argument'
-      execution: |
-        drupal database:drop \
-          <database>
diff --git a/console/language/console-en/translations/database.dump.yml b/console/language/console-en/translations/database.dump.yml
deleted file mode 100644
index 4abeb0a642..0000000000
--- a/console/language/console-en/translations/database.dump.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-description: 'Dump structure and contents of a database'
-arguments:
-  database: 'Database key from settings.php'
-options:
-  file: 'The filename for your database backup'
-  gz: 'Pass this option if you want the sql result file gzipped'
-messages:
-    success: 'Database exported to:'
-examples:
-    - description: 'Dump default database or the one specified on the argument'
-      execution: |
-        drupal database:dump \
-          <database>
-    - description: 'Dump in gz compressed format'
-      execution: |
-        drupal database:dump \
-          --gz
\ No newline at end of file
diff --git a/console/language/console-en/translations/database.log.clear.yml b/console/language/console-en/translations/database.log.clear.yml
deleted file mode 100644
index a5812dccb3..0000000000
--- a/console/language/console-en/translations/database.log.clear.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-description: 'Remove events from DBLog table, filters are available'
-arguments:
-    event-id: 'DBLog event ID'
-options:
-    type: 'Filter events by a specific type'
-    severity: 'Filter events by a specific level of severity'
-    user-id: 'Filter events by a specific user id'
-messages:
-    event-deleted: 'Event "%s" was deleted'
-    clear-error: 'Clear process fail, please check used filters'
-    clear-sucess: 'Clear of events was successfully'
-examples:
-    - description: 'Clear the database log from DBLog table'
-      execution: |
-        drupal database:log:clear \
-          <database>
-    - description: 'Clear the database log from DBLog table using filters'
-      execution: |
-        drupal database:log:clear \
-          <database> \
-          --type=TYPE \
-          --severity=SEVERITY
\ No newline at end of file
diff --git a/console/language/console-en/translations/database.log.common.yml b/console/language/console-en/translations/database.log.common.yml
deleted file mode 100644
index a0afaf323e..0000000000
--- a/console/language/console-en/translations/database.log.common.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-options:
-    type: 'Filter events by a specific type'
-    severity: 'Filter events by a specific level of severity'
-    user-id: 'Filter events by a specific user id'
-messages:
-    event-id: 'Event ID'
-    type: Type
-    date: Date
-    message: Message
-    user: User
-    severity: Severity
-    invalid-severity: 'Severity type is invalid, filter was ignored'
\ No newline at end of file
diff --git a/console/language/console-en/translations/database.log.poll.yml b/console/language/console-en/translations/database.log.poll.yml
deleted file mode 100644
index d7d80c6146..0000000000
--- a/console/language/console-en/translations/database.log.poll.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-description: 'Poll the watchdog and print new log entries every x seconds'
-arguments:
-    duration: 'Duration in seconds which to sleep between database reads'
-messages:
-    warning: | 
-                Do not use in production environments
-                As this script blocks you are advised to only run it on vm's with multiple cores for performance reasons
-                Stop this polling mechanism before you clean/truncate the watchdog table!
-                Quit with ^C
-examples:
-    - description: 'Print the log entries on screen every x seconds'
-      execution: |
-        drupal database:log:poll \
-          100
diff --git a/console/language/console-en/translations/database.query.yml b/console/language/console-en/translations/database.query.yml
deleted file mode 100644
index 4e010a3939..0000000000
--- a/console/language/console-en/translations/database.query.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-description: 'Executes a SQL statement directly as argument'
-arguments:
-    query: 'The SQL statement to execute'
-    database: 'Database key from settings.php'
-options:
-    quick: 'Do not cache each query result, print each row as it is received'
-    debug: 'Prints debugging information and memory and CPU usage statistics when the program exits'
-    html: 'Produce HTML output'
-    xml: 'Produce XML output'
-    raw: 'Special characters are not escaped in the output.'
-    vertical: 'Print query output rows vertically'
-    batch: 'Print results using tab as the column separator, with each row on a new line. With this option, mysql does not use the history file'
-messages:
-    connection: 'Connection: "%s"'
-help: 'First argument should be the SQL statement. Second argument could be the name of the affected database.'
-examples:
-    - description: 'Send a database query'
-      execution: |
-        drupal database:query 'select * from node limit 0,1'
diff --git a/console/language/console-en/translations/database.restore.yml b/console/language/console-en/translations/database.restore.yml
deleted file mode 100644
index b11d5f2b84..0000000000
--- a/console/language/console-en/translations/database.restore.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-description: 'Restore structure and contents of a database.'
-arguments:
-  database: 'Database key from settings.php'
-options:
-  file: 'The filename for your database backup file. If using a .sql.gz file, the gunzip command needs to be installed.'
-messages:
-    success: 'Database imported from:'
-    no-file: 'Missing file option'
-help: 'Restore structure and contents of a database.'
-examples:
-    - description: 'Restore the database file dump to the database default or another one specified'
-      execution: |
-        drupal database:restore \
-          --file='/srv/dump/db.sql'
diff --git a/console/language/console-en/translations/debug.breakpoints.yml b/console/language/console-en/translations/debug.breakpoints.yml
deleted file mode 100644
index e88c54fed2..0000000000
--- a/console/language/console-en/translations/debug.breakpoints.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-description: 'Displays breakpoints available in application'
-options:
-  group-name: 'Enter Breakpoint Group Name'
-messages:
-  name: 'Extensions with breakpoints'
-examples:
-    - description: 'Provide a group name.'
-      execution: drupal debug:breakpoints bartik
-examples:
-    - description: 'Displays the breakpoints available on the site'
-      execution: |
-        drupal debug:breakpoints
diff --git a/console/language/console-en/translations/debug.cache.context.yml b/console/language/console-en/translations/debug.cache.context.yml
deleted file mode 100644
index be9ec82e8f..0000000000
--- a/console/language/console-en/translations/debug.cache.context.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-description: 'Displays current cache context for the application.'
-messages:
-    code: 'Context ID'
-    label: 'Label'
-    class: 'Class path'
-examples:
-    - description: 'Displays cache context'
-      execution: |
-        drupal debug:cache:context
diff --git a/console/language/console-en/translations/debug.chain.yml b/console/language/console-en/translations/debug.chain.yml
deleted file mode 100644
index a74e31df15..0000000000
--- a/console/language/console-en/translations/debug.chain.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-description: 'List available chain files.'
-messages:
-    directory: 'Directory'
-    file: 'File name.'
-    command: 'Command name.'
-    no-files: 'No chain files found.'
diff --git a/console/language/console-en/translations/debug.config.settings.yml b/console/language/console-en/translations/debug.config.settings.yml
deleted file mode 100644
index 34087fbe4f..0000000000
--- a/console/language/console-en/translations/debug.config.settings.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-description: 'Displays current key:value on settings file.'
-help: 'The <info>debug:config:settings</info> command helps you displaying current key:value on settings file.'
-welcome: 'Welcome to the Drupal Config Settings Debug command'
-messages:
-    current: 'Current Key:value on settings file'
-examples:
-    - description: 'Displays key:value as per the settings file'
-      execution: |
-        drupal debug:config:settings
diff --git a/console/language/console-en/translations/debug.config.validate.yml b/console/language/console-en/translations/debug.config.validate.yml
deleted file mode 100644
index e6d78eb066..0000000000
--- a/console/language/console-en/translations/debug.config.validate.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-description: 'Validate a schema implementation before a module is installed.'
-help: 'Helper function to validate a schema implementation before a module is installed. Specify the config and the schema file paths as arguments and validation will be run against them, making schema easier to debug without time consuming installs'
-options: {}
-arguments: {}
-messages:
-    noConfFile: 'Config file at the specified path does not exist'
-    noConfSchema: 'Config schema at the specified path does not exist'
-    noSchemaName: 'Could not find schema definition in schema file. Using definition name:'
-examples:
-    - description: 'Validates a schema'
-      execution: |
-        drupal debug:config:validate \
-          /path/to/file \
-          /path/to/schema-filepath
diff --git a/console/language/console-en/translations/debug.config.yml b/console/language/console-en/translations/debug.config.yml
deleted file mode 100644
index d471355f4b..0000000000
--- a/console/language/console-en/translations/debug.config.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-description: 'List configuration objects names and single configuration object.'
-arguments:
-    name: 'Configuration object name, for example "system.site".'
-options:
-    show-overridden: 'Show overridden configurations.'
-errors:
-    not-exists: 'The configuration "%s" does not exist.'
-
-examples:
-    - description: 'List all configuration object names.'
-      execution: 'drupal debug:config'
-    - description: 'Display system site configurations values.'
-      execution: 'drupal debug:config system.site'
-    - description: 'List all system configuration names.'
-      execution: 'drupal debug:config | grep system'
-    - description: 'List all configuration including overridden values.'
-      execution: 'drupal debug:config --show-overridden'
diff --git a/console/language/console-en/translations/debug.container.yml b/console/language/console-en/translations/debug.container.yml
deleted file mode 100644
index 9a2e740019..0000000000
--- a/console/language/console-en/translations/debug.container.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-description: 'Displays current services for an application.'
-arguments:
-    service: 'Service name.'
-    method: 'Method name.'
-    arguments: 'Array of Arguments in CSV or JSON format.'
-options:
-  tag: 'Service tag '
-messages:
-    service-id: 'Service ID'
-    class-name: 'Class Name'
-    service: 'Service'
-    class: 'Class'
-    interface: 'Interface(s)'
-    parent: 'Parent class'
-    variables: 'Variables'
-    methods: 'Methods'
-    arguments: 'Arguments'
-    method: 'Method'
-    return: 'Return'
-errors:
-    method-not-exists: 'This method doesn''t exists in this service.'
-examples:
-    - description: 'Displays the views.views_data_helper services'
-      execution: |
-        drupal debug:container views.views_data_helper
diff --git a/console/language/console-en/translations/debug.cron.yml b/console/language/console-en/translations/debug.cron.yml
deleted file mode 100644
index cf931e60fb..0000000000
--- a/console/language/console-en/translations/debug.cron.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-description: 'List of modules implementing a cron'
-messages:
-    module-list: 'Modules implementing a cron method'
-    module: Module
-examples:
-    - description: 'This will show a list with modules implementing the cron hook'
-      execution: |
-        drupal debug:cron
diff --git a/console/language/console-en/translations/debug.database.log.yml b/console/language/console-en/translations/debug.database.log.yml
deleted file mode 100644
index fb23aaf64a..0000000000
--- a/console/language/console-en/translations/debug.database.log.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-description: 'Displays current log events for the application'
-arguments:
-  event-id: 'DBLog event ID'
-options:
-  asc: 'List events in ascending order'
-  limit: 'Limit results to a specific number'
-  offset: 'Starting point of a limit'
-  yml: 'Print in a yml style'
-messages:
-  not-found: 'DBLog event "%s" wasn''t found'
-examples:
-  - description: 'List all the entries on the log'
-    execution: |
-      drupal debug:database:log
-  - description: 'List specific log entry by Event ID'
-    execution: |
-      drupal debug:database:log 21228
diff --git a/console/language/console-en/translations/debug.database.table.yml b/console/language/console-en/translations/debug.database.table.yml
deleted file mode 100644
index 8258c29b75..0000000000
--- a/console/language/console-en/translations/debug.database.table.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-description: 'Show all tables in a given database.'
-help: 'The <info>debug:database:table</info> command helps you debug database tables.'
-arguments:
-  table: 'Table to debug'
-options:
-  database: 'Database key from settings.php'
-messages:
-  table-show: 'Showing tables for "%s" database'
-  table: 'Table'
-  column: 'Column'
-  type: 'Type'
-examples:
-    - description: 'Show all tables in a database'
-      execution: |
-        drupal debug:database:table
-    - description: 'Show fields in the node table or another specified in the argument'
-      execution: |
-        drupal debug:database:table node
diff --git a/console/language/console-en/translations/debug.entity.yml b/console/language/console-en/translations/debug.entity.yml
deleted file mode 100644
index f217073ba9..0000000000
--- a/console/language/console-en/translations/debug.entity.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-description: 'Debug entities available in the system'
-help: 'The <info>debug:entity</info> command helps get a list of entities.'
-arguments:
-questions:
-messages:
-table-headers:
-  entity-name: 'Entity name'
-  entity-type: 'Entity type'
-examples:
-    - description: 'Displays the available entities'
-      execution: |
-        drupal debug:entity
diff --git a/console/language/console-en/translations/debug.event.yml b/console/language/console-en/translations/debug.event.yml
deleted file mode 100644
index e9197b33f0..0000000000
--- a/console/language/console-en/translations/debug.event.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-description: 'Displays current events '
-help: 'The <info>debug:event</info> command helps you debug events.'
-arguments:
-  event: 'Event to debug'
-messages:
-  event: Event Name
-  class: 'Class'
-  method: 'Method'
-  no-events: 'This event does not exist, try to execute command: debug:event'
-examples:
-    - description: 'List all the events that could be debugged'
-      execution: |
-        drupal debug:evet
-    - description: 'Show the information for the kernel.request event'
-      execution: |
-        drupal debug:event kernel.request
\ No newline at end of file
diff --git a/console/language/console-en/translations/debug.features.yml b/console/language/console-en/translations/debug.features.yml
deleted file mode 100644
index 5ef07c5d8a..0000000000
--- a/console/language/console-en/translations/debug.features.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-description: 'List registered features.'
-help: 'List registered features.'
-arguments:
-  bundle: 'Bundle name'
-messages:
-  bundle: 'Bundle'
-  name: 'Name'
-  machine-name: 'Machine Name'
-  status: 'Status'
-  state: 'State'
-
diff --git a/console/language/console-en/translations/debug.image.styles.yml b/console/language/console-en/translations/debug.image.styles.yml
deleted file mode 100644
index 0aff919550..0000000000
--- a/console/language/console-en/translations/debug.image.styles.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-description: 'List image styles on the site'
-messages:
-    styles-list: 'Image Styles defined in the site'
-    styles-label: 'Label'
-    styles-name: 'Machine Name'
-examples:
-    - description: 'List all images styles on the site'
-      execution: |
-        drupal debug:image:styles
diff --git a/console/language/console-en/translations/debug.libraries.yml b/console/language/console-en/translations/debug.libraries.yml
deleted file mode 100644
index c431b65c98..0000000000
--- a/console/language/console-en/translations/debug.libraries.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-description: 'Displays libraries available in application'
-options:
-  name: 'Extension or Library Name'
-messages:
-   extension: 'Extension'
-   library: 'Library'
-   info: 'Library Information'
-examples:
-    - description: 'List all extensions with libraries'
-      execution: |
-        drupal debug:libraries
-    - description: 'List block extension libraries'
-      execution: |
-        drupal debug:libraries block
-    - description: 'List block/drupal.block library'
-      execution: |
-        drupal debug:libraries block/drupal.block
diff --git a/console/language/console-en/translations/debug.migrate.yml b/console/language/console-en/translations/debug.migrate.yml
deleted file mode 100644
index 779730f35d..0000000000
--- a/console/language/console-en/translations/debug.migrate.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-description: 'Display current migration available for the application'
-arguments:
-    tag: 'Migrate tag'
-messages:
-    id: 'Migration Id'
-    description: Description
-    no-migrations: 'There aren''t migrations available try to execute command: migrate:setup:migrations'
-    tags: Tags
-examples:
-    - description: 'Displays current migration'
-      execution: |
-        drupal debug:migrate
diff --git a/console/language/console-en/translations/debug.module.yml b/console/language/console-en/translations/debug.module.yml
deleted file mode 100644
index 034d88adfa..0000000000
--- a/console/language/console-en/translations/debug.module.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-description: 'Displays current modules available for application'
-module: 'Module name'
-options:
-    status: 'Module status [installed|uninstalled]'
-    type: 'Module type [core|no-core]'
-messages:
-    id: ID
-    name: Name
-    status: Status
-    origin: Origin
-    package: Package
-    installed: Installed
-    uninstalled: Uninstalled
-    version: Version
-    schema-version: 'Schema version'
-    total-downloads: 'Total installs'
-    total-monthly: 'Monthly installs'
-    total-daily: 'Daily installs'
-    no-results: 'Module "%s" was not found in the repository'
-examples:
-    - description: 'Display all installed modules'
-      execution: 'drupal mod --status=installed'
-    - description: 'Display all installed and no core modules'
-      execution: 'drupal mod --status=installed --type=no-core'
diff --git a/console/language/console-en/translations/debug.multisite.yml b/console/language/console-en/translations/debug.multisite.yml
deleted file mode 100644
index 4e1fbb40e9..0000000000
--- a/console/language/console-en/translations/debug.multisite.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-description: 'List all multi-sites available in system'
-help: 'The <info>debug:multisite</info> list all known multi-sites.'
-messages:
-  no-multisites: 'No multi-sites configured'
-  site: 'Site'
-  directory: 'Directory'
-  site-format: 'Sites are written using the format: <port>.<domain>.<path>'
-examples:
-    - description: 'Displays multi-site information'
-      execution: |
-        drupal debug:multisite
diff --git a/console/language/console-en/translations/debug.permission.yml b/console/language/console-en/translations/debug.permission.yml
deleted file mode 100644
index aade16bdc3..0000000000
--- a/console/language/console-en/translations/debug.permission.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-description: 'Displays all user permissions.'
-help: |
-  Display all user permissions and also list all user permissions from a specific user role.
-
-  List all user permissions:
-  <info>drupal debug:permission</info>
-
-  List all user permissions from a user role
-  <info>drupal debug:permission authenticated</info>
-
-arguments:
-    role: 'User role'
-messages:
-    role-error: 'Role "%s" does not exist. Please use an existing user role.'
-table-headers:
-    permission-name: 'Permission name'
-    permission-label: 'Permission Label'
-    permission-role: 'Role'
-examples:
-    - description: 'Displays all the permissions availables on the site'
-      execution: |
-        drupal debug:permission
diff --git a/console/language/console-en/translations/debug.plugin.yml b/console/language/console-en/translations/debug.plugin.yml
deleted file mode 100644
index 8553725ed5..0000000000
--- a/console/language/console-en/translations/debug.plugin.yml
+++ /dev/null
@@ -1,39 +0,0 @@
-description: 'Displays all plugin types.'
-help: |
-  Display all plugin types, plugin instances of a specific type, or the definition for a specific plugin.
-
-  List all plugin types:
-  <info>drupal debug:plugin</info>
-
-  List all instances of the image effect plugin type:
-  <info>drupal debug:plugin image.effect</info>
-
-  Show the definition for the image convert plugin:
-  <info>drupal debug:plugin image.effect image_convert</info>
-
-  <comment>NOTE: Only plugin types exposed through services are supported.</comment> When developing a custom plugin type, expose it as a service by adding it to modulename.services.yml with the name "plugin.manager.PLUGIN_TYPE".
-arguments:
-    type: 'Plugin type'
-    id: 'Plugin ID'
-errors:
-    plugin-type-not-found: 'Plugin type "%s" not found. No service available for that type.'
-messages:
-    plugin-info: 'Plugin additional information'
-table-headers:
-    plugin-type-name: 'Plugin type'
-    plugin-type-class: 'Plugin manager class'
-    plugin-id: 'Plugin ID'
-    plugin-class: 'Plugin class'
-    definition-key: 'Key'
-    definition-value: 'Value'
-    setting: 'Setting'
-examples:
-    - description: 'Displays a list with all the plugins on the current site'
-      execution: |
-        drupal debug:plugin
-    - description: 'Displays block plugin information'
-      execution: |
-        drupal debug:plugin block
-    - description: 'Displays block broken information'
-      execution: |
-        drupal debug:plugin block broken
diff --git a/console/language/console-en/translations/debug.queue.yml b/console/language/console-en/translations/debug.queue.yml
deleted file mode 100644
index 667e352281..0000000000
--- a/console/language/console-en/translations/debug.queue.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-description: 'Displays the queues of your application'
-messages:
-  queue: 'Queue'
-  items: 'Items'
-  class: 'Class'
-examples:
-    - description: 'Displays the queues of the application'
-      execution: |
-        drupal debug:queue
diff --git a/console/language/console-en/translations/debug.rest.yml b/console/language/console-en/translations/debug.rest.yml
deleted file mode 100644
index 6c6f101cdc..0000000000
--- a/console/language/console-en/translations/debug.rest.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-description: 'Display current rest resource for the application'
-arguments:
-    resource-id: 'Rest ID'
-options:
-    status: 'Rest resource status enabled | disabled'
-messages:
-    id: 'Rest ID'
-    label: Label
-    canonical-url: 'Canonical URL'
-    status: Status
-    provider: Provider
-    enabled: Enabled
-    disabled: Disabled
-    rest-state: 'REST States'
-    supported-formats: 'Supported Formats'
-    supported-auth: 'Supported Authentication Providers'
-    not-found: 'Rest resource "%s" not found'
-examples:
-    - description: 'Displays rest hooks'
-      execution: |
-        drupal debug:rest
diff --git a/console/language/console-en/translations/debug.roles.yml b/console/language/console-en/translations/debug.roles.yml
deleted file mode 100644
index b1bb15ae29..0000000000
--- a/console/language/console-en/translations/debug.roles.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-description: 'Displays current roles for the application'
-help: 'The <info>debug:roles</info> command helps you get current roles.'
-welcome: 'Welcome to the Drupal roles debug'
-messages:
-    role-id: 'Role ID'
-    role-name: 'Role Name'
-examples:
-    - description: 'Roles list on the site'
-      execution: |
-        drupal debug:roles
diff --git a/console/language/console-en/translations/debug.router.yml b/console/language/console-en/translations/debug.router.yml
deleted file mode 100644
index 1341a87eee..0000000000
--- a/console/language/console-en/translations/debug.router.yml
+++ /dev/null
@@ -1,23 +0,0 @@
-description: 'Displays current routes for the application or information for a particular route'
-arguments:
-    route-name: 'Route names'
-messages:
-    name: 'Route name'
-    class: 'Class path'
-    route: Route
-    path: Path
-    defaults: Defaults
-    requirements: Requirements
-    options: Options
-examples:
-    - description: 'Displays current routes for the application'
-      execution: 'drupal rod'
-    - description: 'Displays details for the route user.page (/user)'
-      execution: 'drupal rod user.page'
-examples:
-    - description: 'Shows the routes list on the site'
-      execution: |
-        drupal debug:router
-    - description: 'Display information on the user.login'
-      execution: |
-        drupal debug:router user.login
\ No newline at end of file
diff --git a/console/language/console-en/translations/debug.settings.yml b/console/language/console-en/translations/debug.settings.yml
deleted file mode 100644
index 725bf0f116..0000000000
--- a/console/language/console-en/translations/debug.settings.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-description: 'List user Drupal Console settings.'
-messages:
-    config-key: 'Config key'
-    config-value: 'Config value'
-    config-file: 'Config file'
-examples:
-    - description: 'List user Drupal Console settings.'
-      execution: |
-        drupal debug:settings
diff --git a/console/language/console-en/translations/debug.site.yml b/console/language/console-en/translations/debug.site.yml
deleted file mode 100644
index e7f37b8853..0000000000
--- a/console/language/console-en/translations/debug.site.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-description: 'List all known local and remote sites.'
-help: 'The <info>debug:site</info> list all known local and remote sites.'
-messages:
-  site: 'Site'
-  host: 'Host'
-  root: 'Root'
-  invalid-sites: 'No sites defined.'
-  invalid-sites-using: |
-    Using a site alias requires local configuration, more info at:
-       https://docs.drupalconsole.com/en/alias/using-site-alias.html
-  invalid-site: 'Invalid site name'
-  private-key: 'Error with private key'
-  connect-error: 'Error connecting to remote machine'
-options:
-  target: 'Target'
-  property: 'Property'
-examples:
-    - description: 'List all known local and remote sites.'
-      execution: |
-        drupal debug:site
diff --git a/console/language/console-en/translations/debug.state.yml b/console/language/console-en/translations/debug.state.yml
deleted file mode 100644
index 9d995a2f4b..0000000000
--- a/console/language/console-en/translations/debug.state.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-description: 'Show the current State keys.'
-help: 'Show the current State keys.'
-arguments:
-  key: 'The State key to debug.'
-messages:
-  key: 'The State key'
-examples:
-    - description: 'List of the states on the site'
-      execution: |
-        drupal debug:state
-    - description: 'Displays a detail of the state install_task tok from the list of states'
-      execution: |
-        drupal debug:state install_task
diff --git a/console/language/console-en/translations/debug.test.yml b/console/language/console-en/translations/debug.test.yml
deleted file mode 100644
index 3299674aad..0000000000
--- a/console/language/console-en/translations/debug.test.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-description: 'List Test Units available for the application.'
-help: 'List Test Units available for the application.'
-arguments:
-    test-class: 'Test Class'
-options:
-    group: Group
-messages:
-    class: 'Test Class'
-    description: Description
-    group: Group
-    type: 'Test Type'
-    missing-dependency: 'Missing dependency'
-    methods: 'Test methods'
-    not-found: 'Debug wasn''t found, try enclosure test id between double quotes.'
-    success-groups: 'All testing groups were listed sucessfully, use the group argument to filter Test unit by group i.e $ drupal debug:test Url'
-    success-group: 'All test units for group "%s" were listed sucessfully'
-examples:
-    - description: ''
-      execution: |
-        drupal debug:test
diff --git a/console/language/console-en/translations/debug.theme.keys.yml b/console/language/console-en/translations/debug.theme.keys.yml
deleted file mode 100644
index 976ce004c8..0000000000
--- a/console/language/console-en/translations/debug.theme.keys.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-description: 'Displays all theme keys provided by hook_theme functions'
-help: |
-  Display all theme keys, or the definition for a specific theme key.
-
-  List all theme keys:
-  <info>drupal debug:theme:keys</info>
-
-  Show the definition for the item_list theme key:
-  <info>drupal debug:theme:keys item_list</info>
-arguments:
-    key: 'Key'
-table-headers:
-    key: 'Key'
-    provider-type: 'Provider type'
-    provider: 'Provider'
-    value: 'Value'
-provider-types:
-    module: 'Module'
-    base-theme-engine: 'Base theme engine'
-    base-theme: 'Base theme'
-    theme-engine: 'Theme engine'
-    theme: 'Theme'
diff --git a/console/language/console-en/translations/debug.theme.yml b/console/language/console-en/translations/debug.theme.yml
deleted file mode 100644
index fac0258006..0000000000
--- a/console/language/console-en/translations/debug.theme.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-description: 'Displays current themes for the application'
-arguments:
-    theme: 'Specific theme to debug'
-messages:
-    theme-id: 'Id'
-    theme-name: 'Name'
-    status: 'Status'
-    version: 'Version'
-    installed: 'Installed'
-    uninstalled: 'Uninstalled'
-    default-theme: 'Default theme'
-    properties: 'Properties'
-    regions: 'Regions'
-    invalid-theme: 'Theme "%s" is invalid'
-    theme-properties: 'Properties'
-examples:
-    - description: 'List of themes on the site'
-      execution: |
-        drupal debug:theme
-    - description: 'Bartik theme information'
-      execution: |
-        drupal debug:theme bartik
\ No newline at end of file
diff --git a/console/language/console-en/translations/debug.update.yml b/console/language/console-en/translations/debug.update.yml
deleted file mode 100644
index 9ed7fc781e..0000000000
--- a/console/language/console-en/translations/debug.update.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-description: 'Displays current updates available for the application'
-messages:
-    no-updates: 'No pending updates'
-    severity: 'Severity'
-    title: 'Title'
-    value: 'Value'
-    description: 'Description'
-    requirements-error: 'The following requirement weren''t completed'
-    module-list: 'Modules with pending updates'
-    module-list-post-update: 'Modules with pending post updates'
-    module: 'Module'
-    update-n: 'Update N'
-    post-update: 'Post update function'
-examples:
-    - description: 'List of pending updates'
-      execution: |
-        drupal debug:update
diff --git a/console/language/console-en/translations/debug.user.yml b/console/language/console-en/translations/debug.user.yml
deleted file mode 100644
index 29cb406f16..0000000000
--- a/console/language/console-en/translations/debug.user.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-description: 'Displays current users for the application'
-help: 'The <info>debug:user</info> command helps you get current users.'
-welcome: 'Welcome to the Drupal user debug'
-options:
-    roles: 'Roles to filter debug'
-    limit: 'How many users would you like to be listed in debug'
-    uid: 'Filters the result list by uids [between quotes separated by spaces]'
-    username: 'Filters the result list by user-names [between quotes separated by spaces]'
-    mail: 'Filters the result list by user''s e-mail [between quotes separated by spaces]'
-questions:
-    roles: 'Select role(s) to be used to filter user debug list'
-    limit: 'Enter how many users would you like to show'
-messages:
-    user-id: 'User ID'
-    username: 'Username'
-    roles: 'Roles'
-    status: 'Status'
-examples:
-    - description: 'Users list on the site'
-      execution: |
-        drupal debug:user
diff --git a/console/language/console-en/translations/debug.views.plugins.yml b/console/language/console-en/translations/debug.views.plugins.yml
deleted file mode 100644
index b3b9b42a3b..0000000000
--- a/console/language/console-en/translations/debug.views.plugins.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-description: 'Displays current views plugins for the application'
-arguments:
-    type: 'Filter views plugins by type'
-messages:
-  type: 'Type'
-  name: 'Name'
-  provider: 'Provider'
-  views: 'Views'
-examples:
-    - description: 'List of views plugins'
-      execution: |
-        drupal debug:views:plugins
diff --git a/console/language/console-en/translations/debug.views.yml b/console/language/console-en/translations/debug.views.yml
deleted file mode 100644
index 91b877ede2..0000000000
--- a/console/language/console-en/translations/debug.views.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-description: 'Displays current views resources for the application'
-arguments:
-    view-id: 'View ID'
-    view-tag: 'View tag'
-    view-status: 'View status (Enabled|Disabled)'
-messages:
-    view-id: 'View ID'
-    view-name: 'View name'
-    description: Description
-    tag: Tag
-    status: Status
-    path: Path
-    not-found: 'View "%s" wasn''t found.'
-    display-list: 'Display list'
-    display-id: ID
-    display-name: Name
-    display-description: Description
-    display-paths: Paths
-examples:
-    - description: 'List of views on the site'
-      execution: |
-        drupal debug:views
diff --git a/console/language/console-en/translations/devel.dumper.yml b/console/language/console-en/translations/devel.dumper.yml
deleted file mode 100644
index e27a51881f..0000000000
--- a/console/language/console-en/translations/devel.dumper.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-messages:
-  change-devel-dumper-plugin: 'Change the devel dumper plugin'
-  name-devel-dumper-plugin: 'Name of the devel dumper plugin'
-  devel-must-be-installed: 'Devel must be installed'
-  select-debug-dumper: 'Select a Debug Dumper'
-  dumper-not-exist: 'Dumper does not exist'
-  devel-dumper-set: 'Devel Dumper set to: "%s"'
diff --git a/console/language/console-en/translations/docker.init.yml b/console/language/console-en/translations/docker.init.yml
deleted file mode 100644
index 95f79c02d2..0000000000
--- a/console/language/console-en/translations/docker.init.yml
+++ /dev/null
@@ -1 +0,0 @@
-description: 'Create a docker-compose.yml file'
diff --git a/console/language/console-en/translations/dotenv.init.yml b/console/language/console-en/translations/dotenv.init.yml
deleted file mode 100644
index deec7eeea0..0000000000
--- a/console/language/console-en/translations/dotenv.init.yml
+++ /dev/null
@@ -1,38 +0,0 @@
-description: 'Add support and required config to work with an .env file'
-messages:
-  template-env: |
-    This file is a "template" of which env vars need to be defined
-    for your application, use only on development stages.
-    Create real environment variables when deploying to production.
-  load-from-env: |
-    If not using real environment variables.
-    Make sure you add the dependency using composer
-
-    Drupal 8.5 and up versions `composer require symfony/dotenv`
-    if (file_exists(dirname(DRUPAL_ROOT) . '/.env')) {
-      $dotenv = new \Symfony\Component\Dotenv\Dotenv(dirname(DRUPAL_ROOT));
-      $dotenv->load();
-    }
-
-    Drupal 8.4 and minor versions `composer require vlucas/phpdotenv`
-    if (file_exists(dirname(DRUPAL_ROOT) . '/.env')) {
-      $dotenv = new \Dotenv\Dotenv(dirname(DRUPAL_ROOT));
-      $dotenv->load();
-    }
-  load-settings: |
-    # Load key/value settings
-    $settings_drupal = array_filter(
-        $_SERVER,
-        function($key) {
-            return  strpos($key, 'SETTINGS_') === 0;
-        },
-        ARRAY_FILTER_USE_KEY
-    );
-
-    # Set key/value settings
-    foreach ($settings_drupal as $name => $value) {
-      if (substr($name, 0, 9) === 'SETTINGS_') {
-        $key = strtolower(substr($name, 9));
-        $settings['settings'][$key] = $value;
-      }
-    }
diff --git a/console/language/console-en/translations/drush.yml b/console/language/console-en/translations/drush.yml
deleted file mode 100644
index 7a398a9110..0000000000
--- a/console/language/console-en/translations/drush.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-description: 'Drupal Console equivalents'
-messages:
-  not-found: 'Drush command not found'
diff --git a/console/language/console-en/translations/elephpant.yml b/console/language/console-en/translations/elephpant.yml
deleted file mode 100644
index d9e4499b6c..0000000000
--- a/console/language/console-en/translations/elephpant.yml
+++ /dev/null
@@ -1 +0,0 @@
-description: 'Elephpants are cute ...'
diff --git a/console/language/console-en/translations/entity.delete.yml b/console/language/console-en/translations/entity.delete.yml
deleted file mode 100644
index e465677e2d..0000000000
--- a/console/language/console-en/translations/entity.delete.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-description: 'Delete an specific entity'
-help: 'The <info>entity:delete</info> command helps you delete entities.'
-arguments:
-  entity-definition-id: 'Entity definition id'
-  entity-id: 'Entity ID to be deleted'
-options:
-  all: 'Delete all entities of the given type.'
-questions:
-  entity-type: 'Enter the Entity type'
-  entity-definition-id: 'Enter the  Entity definitin id'
-  entity-id: 'Enter the  Entity ID to be deleted'
-messages:
-  confirm-delete-all: 'Do you want to delete all entities of type "%s" ("%d")?'
-  deleted: 'Entity "%s" with id "%s" was deleted successfully'
-  deleted-all: 'All entities of type "%s" ("%d") were deleted.'
-examples:
-  - description: 'Delete entity type content using node id'
-    execution: |
-      drupal entity:delete node 1
diff --git a/console/language/console-en/translations/exec.yml b/console/language/console-en/translations/exec.yml
deleted file mode 100644
index 9f4d52c338..0000000000
--- a/console/language/console-en/translations/exec.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-description: 'Execute an external command.'
-arguments:
-  bin: 'Executable command.'
-options:
-  working-directory: 'The current working directory.'
-messages:
-  success: 'Executed the command.'
-  invalid-bin: 'Error executing the command.'
-  missing-bin: 'Provide an executable command.'
-  binary-not-found: 'Unable to find the binary "%s" to execute.'
-  working-directory: 'Working directory'
-  executing-command: 'Executing command'
-
diff --git a/console/language/console-en/translations/features.import.yml b/console/language/console-en/translations/features.import.yml
deleted file mode 100644
index 1de3642308..0000000000
--- a/console/language/console-en/translations/features.import.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-description: 'Import module config.'
-help: ''
-options:
-  bundle: 'Bundle name'
-arguments:
-  packages: 'Package name'
-questions:
-  packages: 'Enter package name to import'
-messages:
-  no-packages: 'No packages available.'
-  not-available: 'Package "%s", not available.'
-  importing: 'Importing package "%s".'
-  uninstall: 'Package "%s" already installed.'
-  reverting: 'Reverting package "%s".'
-  nothing: 'Nothing to import.'
diff --git a/console/language/console-en/translations/field.info.yml b/console/language/console-en/translations/field.info.yml
deleted file mode 100644
index adcacbc178..0000000000
--- a/console/language/console-en/translations/field.info.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-description: 'View information about fields.'
-help: 'View information about fields.'
-options:
-    detailed: 'Extended output with machine names and descriptions'
-    entity: 'Restrict to a specific fieldabe entity type, for example: node, comment, taxonomy_term, shortcut, block_content, contact_message'
-    bundle: 'Restrict to a specific bundle type, for example: article'
-messages:
-    fields-none: 'No fields found'
-    entity-type: 'Fieldable entity type'
-    bundle-type: 'Bundle type'
-    not-found: 'not found'
-    in-entity-type: 'in entity type'
-    in-bundle-type: 'in bundle type'
-table:
-    header-name: 'Field label'
-    header-type: 'Field type'
-    header-desc: 'Field description'
-    header-usage: 'Also used in'
diff --git a/console/language/console-en/translations/generate.ajax.command.yml b/console/language/console-en/translations/generate.ajax.command.yml
deleted file mode 100644
index 39836810d0..0000000000
--- a/console/language/console-en/translations/generate.ajax.command.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-description: 'Generate & Register a custom ajax command'
-help: 'The <info>generate:ajax:command</info> command helps you generate a new custom ajax command.'
-welcome: 'Welcome to the Drupal Ajax generator'
-options:
-  module: 'The Module name.'
-  class: 'Ajax Class name'
-  method: 'Custom ajax method'
-  js-name: 'Custom javascript name'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the Ajax class name'
-  method: 'Enter the render method name'
-  js-name: 'Enter a custom javascript name'
\ No newline at end of file
diff --git a/console/language/console-en/translations/generate.authentication.provider.yml b/console/language/console-en/translations/generate.authentication.provider.yml
deleted file mode 100644
index a867018baa..0000000000
--- a/console/language/console-en/translations/generate.authentication.provider.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-description: 'Generate an Authentication Provider'
-help: 'The <info>generate:authentication:provider</info> command helps you generate a new Authentication Provider.'
-welcome: 'Welcome to the Drupal Authentication Provider generator'
-options:
-  module: 'The Module name.'
-  class: 'Authentication Provider class'
-  provider-id: 'Provider ID'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the Authentication Provider class'
-  provider-id: 'Enter the Provider ID'
-examples:
-  - description: 'Generate an authentication provider specifying the module, the class and the provider id'
-    execution: |
-      drupal generate:authentication:provider  \
-        --module="modulename"  \
-        --class="DefaultAuthenticationProvider"  \
-        --provider-id="default_authentication_provider"
diff --git a/console/language/console-en/translations/generate.breakpoint.yml b/console/language/console-en/translations/generate.breakpoint.yml
deleted file mode 100644
index 9b79cbdd15..0000000000
--- a/console/language/console-en/translations/generate.breakpoint.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-description: 'Generate breakpoint'
-help: 'The <info>generate:breakpoint</info> command helps you generates a new breakpoint'
-welcome: 'Welcome to the Drupal breakpoint generator'
-options:
-  theme: 'Theme name'
-  breakpoints: Breakpoints
-questions:
-  theme: 'Enter the theme name (i.e. classy, stable)'
-  breakpoint-name: 'Enter breakpoint name'
-  breakpoint-label: 'Enter breakpoint label'
-  breakpoint-media-query: 'Enter breakpoint media query'
-  breakpoint-weight: 'Enter breakpoint weight'
-  breakpoint-multipliers: 'Enter breakpoint multipliers'
-  breakpoint-add: 'Do you want to add another breakpoint?'
-examples:
-  - description: 'Generate a breakpoint specifying the theme, a breakpoint name, its label, the media query, its weight and multipliers'
-    execution: |
-      drupal generate:breakpoint  \
-        --theme="classy"  \
-        --breakpoints='"breakpoint_name":"narrow", "breakpoint_label":"narrow", "breakpoint_media_query":"all and (min-width: 560px) and (max-width: 850px)", "breakpoint_weight":"1", "breakpoint_multipliers":"1x"'
\ No newline at end of file
diff --git a/console/language/console-en/translations/generate.cache.context.yml b/console/language/console-en/translations/generate.cache.context.yml
deleted file mode 100644
index 6058d4af6d..0000000000
--- a/console/language/console-en/translations/generate.cache.context.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-description: 'Generate a cache context'
-help: 'The <info>generate:cache:context</info> command helps you generates a new cache context'
-welcome: 'Welcome to the Drupal Cache Context generator'
-options:
-  module: 'The Module name.'
-  name: 'The cache context name'
-  class: 'Cache context class name'
-questions:
-  module: 'Enter the module name'
-  name: 'Enter the cache context name'
-  class: 'Cache context class name'
-examples:
-  - description: 'Generate cache for a context specifying the module, the context name and its class'
-    execution: |
-      drupal generate:cache:context  \
-        --module="modulename"  \
-        --cache-context="ContextName"  \
-        --class="DefaultCacheContext"
\ No newline at end of file
diff --git a/console/language/console-en/translations/generate.command.yml b/console/language/console-en/translations/generate.command.yml
deleted file mode 100644
index 745203475b..0000000000
--- a/console/language/console-en/translations/generate.command.yml
+++ /dev/null
@@ -1,31 +0,0 @@
-description: 'Generate commands for the console.'
-help: 'The <info>generate:command</info> command helps you generate a new command.'
-welcome: 'Welcome to the Drupal Command generator'
-options:
-  extension: 'The name of the Extension (that will contain the command).'
-  class: 'The Class that describes the command. (Must end with the word ''Command'').'
-  name: 'The Command name.'
-  interact: 'Add interact method.'
-  initialize: 'Add initialize method.'
-  container-aware: 'Is the command aware of the drupal site installation when executed?'
-  services: 'Load services from the container.'
-  generator: 'Add a Generator class for this command.'
-questions:
-  extension: 'Enter the extension name'
-  class: 'Enter the Command Class. (Must end with the word ''Command'').'
-  name: 'Enter the Command name.'
-  interact: 'Do you want to add the interact method?'
-  initialize: 'Do you want to add the initialize method?'
-  container-aware: 'Is the command aware of the drupal site installation when executed?'
-  services: 'Enter your service'
-  generator: 'Do you want to add a Generator class?.'
-messages:
-  title-not-empty: 'Title cannot be empty'
-examples:
-  - description: 'Generate a command specifying the extension name and type, its class and the name.'
-    execution: |
-      drupal generate:command  \
-        --extension="ExtensionName"  \
-        --extension-type="module"  \
-        --class="DefaultCommand"  \
-        --name="CommandName"
\ No newline at end of file
diff --git a/console/language/console-en/translations/generate.controller.yml b/console/language/console-en/translations/generate.controller.yml
deleted file mode 100644
index 5b05332f92..0000000000
--- a/console/language/console-en/translations/generate.controller.yml
+++ /dev/null
@@ -1,30 +0,0 @@
-description: 'Generate & Register a controller'
-help: 'The <info>generate:controller</info> command helps you generate a new controller.'
-welcome: 'Welcome to the Drupal Controller generator'
-options:
-  module: 'The Module name.'
-  class: 'Controller Class name'
-  routes: 'The routes, must be an array containing [title, method, path]'
-  services: 'Load services from the container.'
-  test: 'Generate a test class'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the Controller class name'
-  title: 'Enter the Controller method title (to stop adding more methods, leave this empty)'
-  method: 'Enter the action method name'
-  path: 'Enter the route path'
-  services: 'Enter your service'
-  test: 'Do you want to generate a unit test class?'
-messages:
-  title-empty: 'Title must contain a value (you must enter at least one method)'
-  title-already-added: 'Title was already added'
-  method-name-already-added: 'Method name was already added'
-  path-already-added: 'Path was already added'
-examples:
-  - description: 'Generate controller specifying the module name, the class name and its routes'
-    execution: |
-      drupal generate:controller  \
-        --module="modulename"  \
-        --class="DefaultController"  \
-        --routes='"title":"ControllerMethod", "name":"modulename.default_controller_hello", "method":"hello", "path":"/modulename/hello/{name}"'  \
-        --test
\ No newline at end of file
diff --git a/console/language/console-en/translations/generate.entity.bundle.yml b/console/language/console-en/translations/generate.entity.bundle.yml
deleted file mode 100644
index f3106b3fc3..0000000000
--- a/console/language/console-en/translations/generate.entity.bundle.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-description: 'Generate a new content type (node / entity bundle)'
-help: 'The <info>generate:contenttype</info> command helps you generate a new content type.'
-welcome: 'Welcome to the Drupal Content Type generator'
-options:
-  module: 'The Module name.'
-  bundle-name: 'The content type''s machine name'
-  bundle-title: 'The content type''s human-readable name'
-questions:
-  module: 'Enter the module name'
-  bundle-name: 'Enter the machine name of your new content type'
-  bundle-title: 'Enter the human-readable name of your new content type'
-message:
-  error-state1: placeholder
-examples:
-  - description: 'Generate bundle entity specifying the module, the bundle name and its title'
-    execution: |
-      drupal generate:entity:bundle  \
-        --module="modulename"  \
-        --bundle-name="default"  \
-        --bundle-title="default"
\ No newline at end of file
diff --git a/console/language/console-en/translations/generate.entity.config.yml b/console/language/console-en/translations/generate.entity.config.yml
deleted file mode 100644
index 67b06b4cf9..0000000000
--- a/console/language/console-en/translations/generate.entity.config.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-description: 'Generate a new config entity'
-help: 'The <info>generate:config:entity</info> command helps you generate a new config entity.'
-welcome: 'Welcome to the Drupal Config Entity generator'
-options:
-  module: 'The Module name.'
-  entity-class: 'The config entity class'
-  entity-name: 'The config entity name'
-  label: 'The label'
-  bundle-of: 'Acts as bundle for content entities'
-  base-path: 'The base-path for the config entity routes'
-questions:
-  module: 'Enter the module name'
-  entity-class: 'Enter the class of your new config entity'
-  entity-name: 'Enter the name of your new config entity'
-  label: 'Enter the label of your new config entity'
-  bundle-of: 'Name of the content entity you want this (config) entity to act as a bundle for'
-  base-path: 'Enter the base-path for the config entity routes'
-examples:
-  - description: 'Generate config entity specifying the module, the entity class, the entity name, its path and label'
-    execution: |
-      drupal generate:entity:config  \
-        --module="modulename"  \
-        --entity-class="DefaultEntity"  \
-        --entity-name="default_entity"  \
-        --base-path="/admin/structure"  \
-        --label="Default entity"
\ No newline at end of file
diff --git a/console/language/console-en/translations/generate.entity.content.yml b/console/language/console-en/translations/generate.entity.content.yml
deleted file mode 100644
index 8be970c525..0000000000
--- a/console/language/console-en/translations/generate.entity.content.yml
+++ /dev/null
@@ -1,39 +0,0 @@
-description: 'Generate a new content entity'
-help: 'The <info>generate:content:entity</info> command helps you generate a new content entity.'
-welcome: 'Welcome to the Drupal Content Entity generator'
-options:
-  module: 'The Module name.'
-  entity-class: 'The content entity class'
-  entity-name: 'The content entity name'
-  label: 'The label'
-  has-bundles: 'Entity has bundles'
-  base-path: 'The base-path for the content entity routes'
-  is-translatable: 'Content entity translatable'
-questions:
-  module: 'Enter the module name'
-  entity-class: 'Enter the class of your new content entity'
-  entity-name: 'Enter the machine name of your new content entity'
-  label: 'Enter the label of your new content entity'
-  has-bundles: 'Do you want this (content) entity to have bundles?'
-  base-path: 'Enter the base-path for the content entity routes'
-  is-translatable: 'Is your entity translatable?'
-  revisionable: 'Is your entity revisionable?'
-examples:
-  - description: 'Generate a content entity specifying the module, the entity class, the entity name, its path and label'
-    execution: |
-      drupal generate:entity:content  \
-        --module="modulename"  \
-        --entity-class="DefaultEntity"  \
-        --entity-name="default_entity"  \
-        --base-path="/admin/structure"  \
-        --label="Default entity"
-  - description: 'Generate a translatable and revisionable content entity specifying the module, the entity class, the entity name, its path and label'
-    execution: |
-      drupal generate:entity:content  \
-        --module="modulename"  \
-        --entity-class="DefaultEntity"  \
-        --entity-name="default_entity"  \
-        --base-path="/admin/structure"  \
-        --label="Default entity"  \
-        --is-translatable  \
-        --revisionable
\ No newline at end of file
diff --git a/console/language/console-en/translations/generate.event.subscriber.yml b/console/language/console-en/translations/generate.event.subscriber.yml
deleted file mode 100644
index 2556149405..0000000000
--- a/console/language/console-en/translations/generate.event.subscriber.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-description: 'Generate an event subscriber'
-help: 'The <info>generate:event:subscriber</info> command helps you generate a new event subscriber.'
-welcome: 'Welcome to the Drupal Event Subscriber generator'
-options:
-  module: 'The Module name.'
-  name: 'Service name'
-  class: 'Class name'
-  services: 'Load services from the container.'
-  event-name: 'Enter event name'
-  callback-name: 'Callback function name to handle event'
-questions:
-  module: 'Enter the module name'
-  name: 'Enter the service name'
-  class: 'Enter the class name'
-  services: 'Enter your service'
-  event-name: 'Enter event name'
-  callback-name: 'Enter the callback function name to handle event'
-examples:
-  - description: 'Generate an event subscriber specifying the module name, its name, the class and the events to subscribe'
-    execution: |
-      drupal generate:event:subscriber  \
-        --module="modulename"  \
-        --name="modulename.default"  \
-        --class="DefaultSubscriber"  \
-        --events='kernel_request'
diff --git a/console/language/console-en/translations/generate.form.alter.yml b/console/language/console-en/translations/generate.form.alter.yml
deleted file mode 100644
index afd16b83d6..0000000000
--- a/console/language/console-en/translations/generate.form.alter.yml
+++ /dev/null
@@ -1,31 +0,0 @@
-description: 'Generate an implementation of hook_form_alter() or hook_form_FORM_ID_alter'
-help: 'The <info>"%s"</info> command helps you generate a new "%s"'
-welcome: 'Welcome to the Drupal Form Alter generator'
-options:
-  module: 'The Module name.'
-  form-id: 'Form ID to alter'
-  inputs: 'Create inputs in a form.'
-questions:
-  module: 'Enter the module name'
-  form-id: 'Enter the Form ID to alter'
-  type: 'Enter New field type'
-  label: 'Input label'
-  description: 'Description'
-  default-value: 'Default value'
-  weight: 'Weight for input item'
-messages:
-  inputs: "You can add form fields to modify form.\nThis is optional, press <info>enter</info> to <info>continue</info>"
-  loading-forms: 'Loading forms definition from Webprofiler module'
-  hide-form-elements: 'Optionally you can select form items for hide'
-  help-already-implemented: 'The hook form alter was already implemented in module "%s"'
-examples:
-  - description: 'Generate a hook form alter for an empty form specifying the module name'
-    execution: |
-      drupal generate:form:alter  \
-        --module="modulename"
-  - description: 'Generate a hook form alter with 2 fields specifying the module name and the inputs'
-    execution: |
-      drupal generate:form:alter  \
-        --module="modulename"  \
-        --inputs='"name":"inputtext", "type":"text_format", "label":"InputText", "options":"", "description":"Just an input text", "maxlength":"", "size":"", "default_value":"", "weight":"0", "fieldset":""'  \
-        --inputs='"name":"email", "type":"email", "label":"Email", "options":"", "description":"Just an email input", "maxlength":"", "size":"", "default_value":"", "weight":"0", "fieldset":""'
\ No newline at end of file
diff --git a/console/language/console-en/translations/generate.form.config.yml b/console/language/console-en/translations/generate.form.config.yml
deleted file mode 100644
index 7590be7186..0000000000
--- a/console/language/console-en/translations/generate.form.config.yml
+++ /dev/null
@@ -1,57 +0,0 @@
-description: 'Generate a new form config'
-help: 'The <info>generate:form:config</info> command helps you generate a new form config'
-welcome: 'Welcome to the Drupal Form Config generator'
-options:
-  module: 'The Module name.'
-  class: 'The form class name'
-  form-id: 'The Form id'
-  services: 'Load services from the container.'
-  config-file: 'Add a config file'
-  inputs: 'Create inputs in a form.'
-  path: 'Enter the form path'
-  menu-link-gen: 'Generate a menu link'
-  menu-link-title: 'A title for the menu link'
-  menu-parent: 'Menu parent'
-  menu-link-desc: 'A description for the menu link'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the Form Class name'
-  form-id: 'Enter the Form id'
-  services: 'Enter your service'
-  config-file: 'Do you want to generate a config file?'
-  routing: 'Would you like to register a route for this form?'
-  path: 'Enter the route path'
-  max-amount-characters: 'Maximum amount of characters'
-  textfield-width-in-chars: 'Width of the textfield (in characters)'
-  multiselect-size-in-lines: 'Size of multiselect box (in lines)'
-  input-options: 'Input options separated by comma'
-  menu-link-gen: 'Generate a menu link'
-  menu-link-title: 'Enter a title for the menu link'
-  menu-parent: 'Enter Menu parent'
-  menu-link-desc: 'Enter a description for the menu link'
-  type: 'Enter New field type'
-  label: 'Input label'
-  description: 'Description'
-  default-value: 'Default value'
-  weight: 'Weight for input item'
-suggestions:
-  description-for-menu: 'A description for the menu entry'
-examples:
-  - description: 'Generate an empty form with config file specifying the module name, the class, a form id and the path'
-    execution: |
-      drupal generate:form:config  \
-        --module="modulename"  \
-        --class="DefaultForm"  \
-        --form-id="default_form"  \
-        --config-file  \
-        --path="/modulename/form/default"
-  - description: 'Generate a form with 2 fields and a config file specifying the module name, the class, a form id, the inputs and the path'
-    execution: |
-      drupal generate:form:config  \
-        --module="modulename"  \
-        --class="DefaultForm"  \
-        --form-id="default_form"  \
-        --config-file  \
-        --inputs='"name":"inputname", "type":"text_format", "label":"InputName", "options":"", "description":"Just a text input", "maxlength":"", "size":"", "default_value":"", "weight":"0", "fieldset":""'  \
-        --inputs='"name":"email", "type":"email", "label":"Email", "options":"", "description":"Just an email input", "maxlength":"", "size":"", "default_value":"", "weight":"0", "fieldset":""'  \
-        --path="/modulename/form/default"
diff --git a/console/language/console-en/translations/generate.form.yml b/console/language/console-en/translations/generate.form.yml
deleted file mode 100644
index 75ec09e638..0000000000
--- a/console/language/console-en/translations/generate.form.yml
+++ /dev/null
@@ -1,57 +0,0 @@
-description: 'Generate a new "%s"'
-help: 'The <info>"%s"</info> command helps you generate a new "%s"'
-welcome: 'Welcome to the Drupal Form generator'
-options:
-  module: 'The Module name.'
-  class: 'The form class name'
-  form-id: 'The Form id'
-  services: 'Load services from the container.'
-  config-file: 'Add a config file'
-  inputs: 'Create inputs in a form.'
-  path: 'Enter the form path'
-  menu-link-gen: 'Generate a menu link'
-  menu-link-title: 'A title for the menu link'
-  menu-parent: 'Menu parent'
-  menu-link-desc: 'A description for the menu link'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the Form Class name'
-  form-id: 'Enter the Form id'
-  services: 'Enter your service'
-  config-file: 'Do you want to generate a config file?'
-  routing: 'Would you like to register a route for this form?'
-  path: 'Enter the route path'
-  max-amount-characters: 'Maximum amount of characters'
-  textfield-width-in-chars: 'Width of the textfield (in characters)'
-  multiselect-size-in-lines: 'Size of multiselect box (in lines)'
-  input-options: 'Input options separated by comma'
-  menu-link-gen: 'Generate a menu link'
-  menu-link-title: 'Enter a title for the menu link'
-  menu-parent: 'Enter Menu parent'
-  menu-link-desc: 'Enter a description for the menu link'
-  type: 'Enter New field type'
-  label: 'Input label'
-  description: 'Description'
-  default-value: 'Default value'
-  weight: 'Weight for input item'
-suggestions:
-  description-for-menu: 'A description for the menu entry'
-examples:
-  - description: 'Generate an empty form with config file specifying the module name, the class, a form id and the path'
-    execution: |
-      drupal generate:form  \
-        --module="modulename"  \
-        --class="DefaultForm"  \
-        --form-id="default_form"  \
-        --config-file  \
-        --path="/modulename/form/default"
-  - description: 'Generate a form with 2 fields and a config file specifying the module name, the class, a form id, the inputs and the path'
-    execution: |
-      drupal generate:form  \
-        --module="modulename"  \
-        --class="DefaultForm"  \
-        --form-id="default_form"  \
-        --config-file  \
-        --inputs='"name":"inputname", "type":"text_format", "label":"InputName", "options":"", "description":"Just a text input", "maxlength":"", "size":"", "default_value":"", "weight":"0", "fieldset":""'  \
-        --inputs='"name":"email", "type":"email", "label":"Email", "options":"", "description":"Just an email input", "maxlength":"", "size":"", "default_value":"", "weight":"0", "fieldset":""'  \
-        --path="/modulename/form/default"
diff --git a/console/language/console-en/translations/generate.help.yml b/console/language/console-en/translations/generate.help.yml
deleted file mode 100644
index 7f04a2d6e2..0000000000
--- a/console/language/console-en/translations/generate.help.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-description: 'Generate an implementation of hook_help()'
-help: 'The <info>"%s"</info> command helps you generate a hook help "%s"'
-welcome: 'Welcome to the Drupal Help generator'
-options:
-  module: 'The Module name.'
-  description: 'Module description'
-questions:
-  module: 'Enter the module name'
-  description: 'Enter module description'
-messages:
-  help-already-implemented: 'The hook help was already implemented in module "%s"'
-examples:
-  - description: 'Generate a hook help specifying the module name and the description'
-    execution: |
-      drupal generate:help  \
-        --module="modulename"  \
-        --description="My Awesome Module"
\ No newline at end of file
diff --git a/console/language/console-en/translations/generate.jstest.yml b/console/language/console-en/translations/generate.jstest.yml
deleted file mode 100644
index 3d6f828a8d..0000000000
--- a/console/language/console-en/translations/generate.jstest.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-description: 'Generate a JavaScript test.'
-help: 'The <info>generate:jstest</info> command helps you to generate a new JavaScript test.'
-welcome: 'Welcome to the Drupal module generator'
-options:
-  class: 'JavaScript test Class name'
-questions:
-  module: common.questions.module
-  class: 'Enter the JavaScript test class name'
-examples:
-  - description: 'Generate a module specifying the module name, machine name, the path, its description, drupal core and the package name. In this example the composer file, the unit test and twig template are generated too'
-    execution: |
-      drupal generate:module  \
-        --module="modulename"  \
-        --machine-name="modulename"  \
-        --module-path="/modules/custom"  \
-        --description="My Awesome Module"  \
-        --core="8.x"  \
-        --package="Custom"  \
-        --module-file  \
-        --composer  \
-        --test  \
-        --twigtemplate
diff --git a/console/language/console-en/translations/generate.module.file.yml b/console/language/console-en/translations/generate.module.file.yml
deleted file mode 100644
index abaedd57b1..0000000000
--- a/console/language/console-en/translations/generate.module.file.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-description: 'Generate a .module file'
-help: 'The <info>generate:module:file</info> command helps you to generate a new .module file'
-welcome: 'Welcome to the Drupal Module File generator'
-options:
-  module: 'The Module name'
-questions:
-  module: 'Enter the new module name'
-examples:
-  - description: 'Generate the .module file specifying the module name'
-    execution: |
-      drupal generate:module:file  \
-        --module="modulename"
\ No newline at end of file
diff --git a/console/language/console-en/translations/generate.module.yml b/console/language/console-en/translations/generate.module.yml
deleted file mode 100644
index 12925f2fe6..0000000000
--- a/console/language/console-en/translations/generate.module.yml
+++ /dev/null
@@ -1,51 +0,0 @@
-description: 'Generate a module.'
-help: 'The <info>generate:module</info> command helps you generates a new module.'
-welcome: 'Welcome to the Drupal module generator'
-options:
-  module: 'The Module name'
-  machine-name: 'The machine name (lowercase and underscore only)'
-  module-path: 'The path of the module'
-  description: 'Module description'
-  core: 'Core version'
-  features-bundle: 'Define module as feature using the given Features bundle name'
-  package: 'Module package'
-  module-file: 'Add a .module file'
-  composer: 'Add a composer.json file'
-  dependencies: 'Module dependencies separated by commas (i.e. context, panels)'
-  test: 'Generate a test class'
-  twigtemplate: 'Generate theme template'
-questions:
-  module: 'Enter the new module name'
-  machine-name: 'Enter the module machine name'
-  module-path: 'Enter the module Path'
-  description: 'Enter module description'
-  core: 'Enter Drupal Core version'
-  package: 'Enter package name'
-  features-support: 'Define module as feature'
-  features-bundle: 'Enter Features bundle name'
-  module-file: 'Do you want to generate a .module file?'
-  composer: 'Do you want to add a composer.json file to your module?'
-  dependencies: 'Would you like to add module dependencies?'
-  test: 'Do you want to generate a unit test class?'
-  twigtemplate: 'Do you want to generate a themeable template?'
-suggestions:
-  my-awesome-module: 'My Awesome Module'
-warnings:
-  module-unavailable: 'Warning The following modules are not available "%s"'
-errors:
-  invalid-core: 'The core version "%s" is invalid.'
-  directory-exists: 'The target directory "%s" is not empty.'
-examples:
-  - description: 'Generate a module specifying the module name, machine name, the path, its description, drupal core and the package name. In this example the composer file, the unit test and twig template are generated too'
-    execution: |
-      drupal generate:module  \
-        --module="modulename"  \
-        --machine-name="modulename"  \
-        --module-path="/modules/custom"  \
-        --description="My Awesome Module"  \
-        --core="8.x"  \
-        --package="Custom"  \
-        --module-file  \
-        --composer  \
-        --test  \
-        --twigtemplate
diff --git a/console/language/console-en/translations/generate.permissions.yml b/console/language/console-en/translations/generate.permissions.yml
deleted file mode 100644
index 83a30fbb6a..0000000000
--- a/console/language/console-en/translations/generate.permissions.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-description: 'Generate module permissions'
-help: 'The <info>generate:permissions</info> command helps you generate new permissions'
-welcome: 'Welcome to the Drupal Permission generator'
-options:
-  module: 'The Module name.'
-questions:
-  module: 'Enter the module name'
-  permission: 'Enter a permission'
-  title: 'Enter a title for the permission'
-  description: 'Enter a description for the permission'
-  restrict-access: 'Restrict Access'
-  add: 'Do you want to add another permission?'
-suggestions:
-  access-content: 'Access content'
-  allow-access-content: 'Allow access to my content'
diff --git a/console/language/console-en/translations/generate.plugin.block.yml b/console/language/console-en/translations/generate.plugin.block.yml
deleted file mode 100644
index 6510194d09..0000000000
--- a/console/language/console-en/translations/generate.plugin.block.yml
+++ /dev/null
@@ -1,36 +0,0 @@
-description: 'Generate a plugin block'
-help: 'The <info>generate:plugin:block</info> command helps you generate a new Plugin block.'
-welcome: 'Welcome to the Drupal Plugin Block generator'
-options:
-  module: 'The Module name.'
-  class: 'Plugin class name'
-  label: 'Plugin label'
-  plugin-id: 'Plugin id'
-  inputs: 'Create inputs in a form.'
-  services: 'Load services from the container.'
-  theme-region: 'Theme region to render Plugin Block'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the plugin class name'
-  label: 'Enter the plugin label'
-  plugin-id: 'Enter the plugin id'
-  services: 'Enter your service'
-  theme-region: 'Enter the theme region to render the Plugin Block.'
-  type: 'Enter New field type'
-  label: 'Input label'
-  description: 'Description'
-  default-value: 'Default value'
-  weight: 'Weight for input item'
-messages:
-  inputs: "\nYou can add input fields to create special configurations in the block.\nThis is optional, press <info>enter</info> to <info>continue</info>"
-  invalid-theme-region: 'Region "%s" is invalid'
-examples:
-  - description: 'Generate a plugin block in the header region with an input field specifying the module name, the class, the label, its id, the region and the input'
-    execution: |
-      drupal generate:plugin:block  \
-        --module="modulename"  \
-        --class="DefaultBlock"  \
-        --label="Default block"  \
-        --plugin-id="default_block"  \
-        --theme-region="header"  \
-        --inputs='"name":"inputtext", "type":"text_format", "label":"InputText", "options":"", "description":"Just an input text", "maxlength":"", "size":"", "default_value":"", "weight":"0", "fieldset":""'
\ No newline at end of file
diff --git a/console/language/console-en/translations/generate.plugin.ckeditorbutton.yml b/console/language/console-en/translations/generate.plugin.ckeditorbutton.yml
deleted file mode 100644
index 36d5c7f61e..0000000000
--- a/console/language/console-en/translations/generate.plugin.ckeditorbutton.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-description: 'Generate CKEditor button plugin.'
-help: 'The <info>generate:plugin:ckeditorbutton</info> command helps you generate a new CKEditor button plugin.'
-welcome: 'Welcome to the Drupal CKEditor Button Plugin generator'
-options:
-  module: 'The Module name.'
-  class: 'Plugin class name'
-  label: 'Plugin label'
-  plugin-id: 'Plugin ID. NOTE: This corresponds to the CKEditor plugin name. It is the first argument of the CKEDITOR.plugins.add() function in the plugin.js file.'
-  button-name: 'Button name. NOTE: This corresponds to the CKEditor button name. They are the first argument of the editor.ui.addButton() or editor.ui.addRichCombo() functions in the plugin.js file.'
-  button-icon-path: 'Button icon path. This is the path to the icon/image of the button.'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the plugin class name'
-  label: 'Enter the plugin label'
-  plugin-id: 'Enter the plugin ID. NOTE: This corresponds to the CKEditor plugin name. It is the first argument of the CKEDITOR.plugins.add() function in the plugin.js file.'
-  button-name: 'Enter the button name. NOTE: This corresponds to the CKEditor button name. They are the first argument of the editor.ui.addButton() or editor.ui.addRichCombo() functions in the plugin.js file.'
-  button-icon-path: 'Enter the button icon path'
-examples:
-  - description: 'Generate plugin CKEditor button specifying the module name, the class, the label, its id, the button name and the icon path'
-    execution: |
-      drupal generate:plugin:ckeditorbutton  \
-        --module="modulename"  \
-        --class="DefaultCKEditorButton"  \
-        --label="Default ckeditor button"  \
-        --plugin-id="default ckeditor button"  \
-        --button-name="Default ckeditor button"  \
-        --button-icon-path="modules/custom/modulename/js/plugins/default ckeditor button/images/icon.png"
\ No newline at end of file
diff --git a/console/language/console-en/translations/generate.plugin.condition.yml b/console/language/console-en/translations/generate.plugin.condition.yml
deleted file mode 100644
index 0f8d78bb73..0000000000
--- a/console/language/console-en/translations/generate.plugin.condition.yml
+++ /dev/null
@@ -1,52 +0,0 @@
-description: 'Generate a plugin condition.'
-help: 'The <info>generate:plugin:conditon</info> command helps you generate a plugin condition.'
-welcome: 'Welcome to the Drupal Plugin Condition generator'
-options:
-  module: 'The Module name.'
-  class: 'Plugin condition class name'
-  label: 'Plugin condition label'
-  plugin-id: 'Plugin condition id'
-  context-definition-id: 'Context definition ID'
-  context-definition-label: 'Context definition label'
-  context-definition-required: 'Context definition is required (TRUE/FALSE)'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the plugin condition class name'
-  label: 'Enter the plugin condition label'
-  plugin-id: 'Enter the plugin condition id'
-  context-type: 'Context type'
-  context-entity-type: 'Context entity type'
-  context-definition-id: 'Context definition ID'
-  context-definition-label: 'Context definition label'
-  context-definition-required: 'Context definition is required'
-examples:
-  - description: 'Generate a plugin condition for a node entity type specifying the module name, the class, the label, its id and the context definition'
-    execution: |
-      drupal generate:plugin:condition  \
-        --module="modulename"  \
-        --class="ExampleCondition"  \
-        --label="Example condition"  \
-        --plugin-id="example_condition"  \
-        --context-definition-id="entity:node"  \
-        --context-definition-label="node"  \
-        --context-definition-required
-  - description: 'Generate a plugin condition for language specifying the module name, the class, the label, its id and the context definition'
-    execution: |
-      drupal generate:plugin:condition  \
-        --module="modulename"  \
-        --class="ExampleCondition"  \
-        --label="Example condition"  \
-        --plugin-id="example_condition"  \
-        --context-definition-id="language"  \
-        --context-definition-label="Language"  \
-        --context-definition-required
-  - description: 'Generate a plugin condition for role configuration specifying the module name, the class, the label, its id and the context definition'
-    execution: |
-      drupal generate:plugin:condition  \
-        --module="modulename"  \
-        --class="ExampleCondition"  \
-        --label="Example condition"  \
-        --plugin-id="example_condition"  \
-        --context-definition-id="entity:user_role"  \
-        --context-definition-label="user_role"  \
-        --context-definition-required
diff --git a/console/language/console-en/translations/generate.plugin.field.yml b/console/language/console-en/translations/generate.plugin.field.yml
deleted file mode 100644
index 3435068768..0000000000
--- a/console/language/console-en/translations/generate.plugin.field.yml
+++ /dev/null
@@ -1,53 +0,0 @@
-description: 'Generate field type, widget and formatter plugins.'
-help: 'The <info>generate:plugin:field</info> command helps you generate a full set of field plugin: field type, field formatter and field widget.'
-welcome: 'Welcome to the Drupal Field Plugin generator'
-options:
-  module: 'The Module name.'
-  type-class: 'Field type plugin class name'
-  type-label: 'Field type plugin label'
-  type-plugin-id: 'Field type plugin id'
-  type-description: 'Field type plugin description'
-  formatter-class: 'Field formatter plugin class name'
-  formatter-label: 'Field formatter plugin label'
-  formatter-plugin-id: 'Field formatter plugin id'
-  widget-class: 'Field widget plugin class name'
-  widget-label: 'Field widget plugin label'
-  widget-plugin-id: 'Field widget plugin id'
-  field-type: 'Field type the formatter and widget plugin can be used with'
-  default-widget: 'Default field widget of the field type plugin'
-  default-formatter: 'Default field formatter of field type plugin'
-questions:
-  module: 'Enter the module name'
-  type-class: 'Enter field type plugin class name'
-  type-label: 'Enter the field type plugin label'
-  type-plugin-id: 'Enter the field type plugin id'
-  type-description: 'Enter the field type plugin description'
-  formatter-class: 'Enter the field formatter plugin class name'
-  formatter-label: 'Enter the field formatter plugin label'
-  formatter-plugin-id: 'Enter the field formatter plugin id'
-  widget-class: 'Enter the field widget plugin class name'
-  widget-label: 'Enter the field widget plugin label'
-  widget-plugin-id: 'Enter the field widget plugin id'
-  field-type: 'Enter the field type the formatter and widget plugin can be used with'
-  default-widget: 'Enter the default field widget of the field type plugin'
-  default-formatter: 'Enter the default field formatter of field type plugin'
-suggestions:
-  my-field-type: 'My Field Type'
-examples:
-  - description: 'Generate field type, widget and formatter plugins specifying the module name, the type (class, label, plugin id and description), the formatter (class, label, plugin id) and the widget (class, label and plugin id)'
-    execution: |
-      drupal generate:plugin:field  \
-        --module="modulename"  \
-        --type-class="ExampleFieldType"  \
-        --type-label="Example field type"  \
-        --type-plugin-id="example_field_type"  \
-        --type-description="My Field Type"  \
-        --formatter-class="ExampleFormatterType"  \
-        --formatter-label="Example formatter type"  \
-        --formatter-plugin-id="example_formatter_type"  \
-        --widget-class="ExampleWidgetType"  \
-        --widget-label="Example widget type"  \
-        --widget-plugin-id="example_widget_type"  \
-        --field-type="example_field_type"  \
-        --default-widget="example_widget_type"  \
-        --default-formatter="example_formatter_type"
diff --git a/console/language/console-en/translations/generate.plugin.fieldformatter.yml b/console/language/console-en/translations/generate.plugin.fieldformatter.yml
deleted file mode 100644
index b8189e8e79..0000000000
--- a/console/language/console-en/translations/generate.plugin.fieldformatter.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-description: 'Generate field formatter plugin.'
-help: 'The <info>generate:plugin:fieldformatter</info> command helps you generate a new field formatter plugin.'
-welcome: 'Welcome to the Drupal Field Formatter Plugin generator'
-options:
-  module: 'The Module name.'
-  class: 'Plugin class name'
-  label: 'Plugin label'
-  plugin-id: 'Plugin id'
-  field-type: 'Field type the plugin can be used with'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the plugin class name'
-  label: 'Enter the plugin label'
-  plugin-id: 'Enter the plugin id'
-  field-type: 'Enter the field type the plugin can be used with'
-examples:
-  - description: 'Generate a text field formatter plugin specifying the module name, the class, the label its plugin id and the field type'
-    execution: |
-      drupal generate:plugin:fieldformatter  \
-        --module="modulename"  \
-        --class="ExampleFieldFormatter"  \
-        --label="Example field formatter"  \
-        --plugin-id="example_field_formatter"  \
-        --field-type="text"
diff --git a/console/language/console-en/translations/generate.plugin.fieldtype.yml b/console/language/console-en/translations/generate.plugin.fieldtype.yml
deleted file mode 100644
index e2c5b3ead8..0000000000
--- a/console/language/console-en/translations/generate.plugin.fieldtype.yml
+++ /dev/null
@@ -1,40 +0,0 @@
-description: 'Generate field type plugin.'
-help: 'The <info>generate:plugin:fieldtype</info> command helps you generate a new field type plugin.'
-welcome: 'Welcome to the Drupal Field Type Plugin generator'
-options:
-  module: 'The Module name.'
-  class: 'Plugin class name'
-  label: 'Plugin label'
-  plugin-id: 'Plugin id'
-  description: 'Plugin Description'
-  default-widget: 'Default field widget of this plugin'
-  default-formatter: 'Default field formatter of this plugin'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the plugin class name'
-  label: 'Enter the plugin label'
-  plugin-id: 'Enter the plugin id'
-  description: 'Enter the plugin Description'
-  default-widget: 'Enter the default field widget of this plugin'
-  default-formatter: 'Enter the default field formatter of this plugin'
-suggestions:
-  my-field-type: 'My Field Type'
-examples:
-  - description: 'Generate a field type plugin specifying the module name, the class, its label, the plugin id and a description'
-    execution: |
-      drupal generate:plugin:fieldtype  \
-        --module="modulename"  \
-        --class="ExampleFieldType"  \
-        --label="Example field type"  \
-        --plugin-id="example_field_type"  \
-        --description="My Field Type"
-  - description: 'Generate a field type plugin with a default widget and formatter specifying the module name, the class, its label, the plugin id and a description'
-    execution: |
-      drupal generate:plugin:fieldtype  \
-        --module="modulename"  \
-        --class="ExampleFieldType"  \
-        --label="Example field type"  \
-        --plugin-id="example_field_type"  \
-        --description="My Field Type"  \
-        --default-widget="DefaultWidget"  \
-        --default-formatter="DefaultFormatter"
diff --git a/console/language/console-en/translations/generate.plugin.fieldwidget.yml b/console/language/console-en/translations/generate.plugin.fieldwidget.yml
deleted file mode 100644
index 3b28469350..0000000000
--- a/console/language/console-en/translations/generate.plugin.fieldwidget.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-description: 'Generate field widget plugin.'
-help: 'The <info>generate:plugin:fieldwidget</info> command helps you generate a new field widget plugin.'
-welcome: 'Welcome to the Drupal Field Widget Plugin generator'
-options:
-  module: 'The Module name.'
-  class: 'Plugin class name'
-  label: 'Plugin label'
-  plugin-id: 'Plugin id'
-  field-type: 'Field type the plugin can be used with'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the plugin class name'
-  label: 'Enter the plugin label'
-  plugin-id: 'Enter the plugin id'
-  field-type: 'Enter the field type the plugin can be used with'
-examples:
-  - description: 'Generate a text type field widget plugin specifying the module name, the class, its label, the plugin id and the field type'
-    execution: |
-      drupal generate:plugin:fieldwidget  \
-        --module="modulename"  \
-        --class="ExampleFieldWidget"  \
-        --label="Example field widget"  \
-        --plugin-id="example_field_widget"  \
-        --field-type="text"
diff --git a/console/language/console-en/translations/generate.plugin.imageeffect.yml b/console/language/console-en/translations/generate.plugin.imageeffect.yml
deleted file mode 100644
index f03b61eefe..0000000000
--- a/console/language/console-en/translations/generate.plugin.imageeffect.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-description: 'Generate image effect plugin.'
-help: 'The <info>generate:plugin:imageeffect</info> command helps you generate a new image effect plugin.'
-welcome: 'Welcome to the Drupal Image Effect Plugin generator'
-options:
-  module: 'The Module name.'
-  class: 'Plugin class name'
-  label: 'Plugin label'
-  plugin-id: 'Plugin id'
-  description: 'Plugin Description'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the plugin class name'
-  label: 'Enter the plugin label'
-  plugin-id: 'Enter the plugin id'
-  description: 'Enter the plugin Description'
-suggestions:
-  my-image-effect: 'My Image Effect'
-examples:
-  - description: 'Generate a image effect plugin specifying the module name, the class, its label, the plugin id and a description'
-    execution: |
-      drupal generate:plugin:imageeffect  \
-        --module="modulename"  \
-        --class="DefaultImageEffect"  \
-        --label="Default image effect"  \
-        --plugin-id="default_image_effect"  \
-        --description="My Image Effect"
diff --git a/console/language/console-en/translations/generate.plugin.imageformatter.yml b/console/language/console-en/translations/generate.plugin.imageformatter.yml
deleted file mode 100644
index 9505b8f191..0000000000
--- a/console/language/console-en/translations/generate.plugin.imageformatter.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-description: 'Generate image formatter plugin.'
-help: 'The <info>generate:plugin:imageformatter</info> command helps you generate a new image formatter plugin.'
-welcome: 'Welcome to the Drupal Image Formatter Plugin generator'
-options:
-  module: 'The Module name.'
-  class: 'Plugin class name'
-  label: 'Plugin label'
-  plugin-id: 'Plugin id'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the plugin class name'
-  label: 'Enter the plugin label'
-  plugin-id: 'Enter the plugin id'
-examples:
-  - description: 'Generate a image formatter plugin specifying the module name, the class, its label and the plugin id'
-    execution: |
-      drupal generate:plugin:imageformatter  \
-        --module="modulename"  \
-        --class="ExampleImageFormatter"  \
-        --label="Example image formatter"  \
-        --plugin-id="example_image_formatter"
diff --git a/console/language/console-en/translations/generate.plugin.mail.yml b/console/language/console-en/translations/generate.plugin.mail.yml
deleted file mode 100644
index b44e937b2f..0000000000
--- a/console/language/console-en/translations/generate.plugin.mail.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-description: 'Generate a plugin mail'
-help: 'The <info>generate:plugin:mail</info> command helps you generate a new Plugin mail.'
-welcome: 'Welcome to the Drupal Plugin Mail generator'
-options:
-  module: 'The Module name.'
-  class: 'Plugin class name'
-  label: 'Plugin label'
-  plugin-id: 'Plugin id'
-  inputs: 'Create inputs in a form.'
-  services: 'Load services from the container.'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the plugin class name'
-  label: 'Enter the plugin label'
-  plugin-id: 'Enter the plugin id'
-  inputs: common.questions.inputs
-  services: 'Enter your service'
-examples:
-  - description: 'Generate an email plugin specifying the module name, the class, its label and the plugin id'
-    execution: |
-      drupal generate:plugin:mail  \
-        --module="modulename"  \
-        --class="HtmlFormatterMail"  \
-        --label="Html formatter mail"  \
-        --plugin-id="html_formatter_mail"
diff --git a/console/language/console-en/translations/generate.plugin.migrate.process.yml b/console/language/console-en/translations/generate.plugin.migrate.process.yml
deleted file mode 100644
index 1990ba01ed..0000000000
--- a/console/language/console-en/translations/generate.plugin.migrate.process.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-description: 'Generate a migrate process plugin'
-help: 'Creates new process plugin for the migration.'
-welcome: 'Welcome to the Drupal Migrate Process Plugin generator'
-options:
-  module: 'The Module name.'
-  class: 'Plugin class name'
-  plugin-id: 'Plugin id'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the migration process plugin class name'
-  plugin-id: 'Enter the migration process plugin id'
-examples:
-  - description: 'Generate a migration plugin process specifying the module name, the class and its id'
-    execution: |
-      drupal generate:plugin:migrate:process  \
-        --module="modulename"  \
-        --class="MigrationProcess"  \
-        --plugin-id="migrationprocess"
diff --git a/console/language/console-en/translations/generate.plugin.migrate.source.yml b/console/language/console-en/translations/generate.plugin.migrate.source.yml
deleted file mode 100644
index 081b5204fc..0000000000
--- a/console/language/console-en/translations/generate.plugin.migrate.source.yml
+++ /dev/null
@@ -1,41 +0,0 @@
-description: 'Generate a migrate source plugin'
-help: 'The <info>generate:migrate:plugin:source</info> command helps you generate a new migrate source plugin.'
-welcome: 'Welcome to the Drupal Migrate Source Plugin generator'
-options:
-  module: 'The Module name.'
-  class: 'Plugin class name'
-  plugin-id: 'Plugin id'
-  table: 'Table to query'
-  alias: 'Short alias to refer to the table as'
-  group-by: 'Field to group results by'
-  fields: 'Fields to export'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the plugin class name'
-  plugin-id: 'Enter the plugin id'
-  table: 'Enter the table name'
-  alias: 'Enter the alias for the table'
-  group-by: 'Enter a field to group by if desired'
-  id: 'Enter the field id or press <info>enter</enter> if done'
-  description: 'Enter the field description'
-examples:
-  - description: 'Generate a migration source plugin specifying the module name, the class, its plugin id, the table and its alias'
-    execution: |
-      drupal generate:plugin:migrate:source  \
-        --module="modulename"  \
-        --class="PluginClassName"  \
-        --plugin-id="plugin_class_name"  \
-        --table="DefaultTableName"  \
-        --alias="D"
-  - description: 'Generate a migration source plugin for specific fields of the users table specifying the module name, the class, its plugin id, the table, its alias and the fields'
-    execution: |
-      drupal generate:plugin:migrate:source  \
-        --module="modulename"  \
-        --class="DefaultPluginClass"  \
-        --plugin-id="default_plugin_class"  \
-        --table="users"  \
-        --alias="u"  \
-        --fields='"id":"id", "description":"the user id"'  \
-        --fields='"id":"username", "description":"the username"'  \
-        --fields='"id":"password", "description":"the user password"'  \
-        --fields='"id":"email", "description":"the user email"'
diff --git a/console/language/console-en/translations/generate.plugin.rest.resource.yml b/console/language/console-en/translations/generate.plugin.rest.resource.yml
deleted file mode 100644
index aa56387869..0000000000
--- a/console/language/console-en/translations/generate.plugin.rest.resource.yml
+++ /dev/null
@@ -1,29 +0,0 @@
-description: 'Generate plugin rest resource'
-help: 'The <info>generate:plugin:rest:resource</info> command helps you generate a new rest resource.'
-welcome: 'Welcome to the Drupal Plugin Rest Resource generator'
-options:
-  module: 'The Module name.'
-  class: 'Plugin Rest Resource class'
-  plugin-id: 'Plugin Rest Resource id'
-  plugin-label: 'Plugin Rest Resource Label'
-  plugin-url: 'Plugin Rest Resource URL'
-  plugin-states: 'Plugin Rest Resource States'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the plugin rest resource class name'
-  plugin-id: 'Enter the plugin rest resource id'
-  plugin-label: 'Enter the plugin rest resource label'
-  plugin-url: 'Enter the plugin rest resource url'
-  plugin-states: 'Please select what REST States implement in your resource (GET is selected by default)'
-messages:
-  selected-states: 'States selected'
-examples:
-  - description: 'Generate a rest resource plugin using GET specifying the module name, the class, the plugin id, its label, the target url and the request type'
-    execution: |
-      drupal generate:plugin:rest:resource  \
-        --module="modulename"  \
-        --class="DefaultRestResource"  \
-        --plugin-id="default_rest_resource"  \
-        --plugin-label="Default rest resource"  \
-        --plugin-url="http://rest.resources.example.com"  \
-        --plugin-states='GET'
diff --git a/console/language/console-en/translations/generate.plugin.skeleton.yml b/console/language/console-en/translations/generate.plugin.skeleton.yml
deleted file mode 100644
index 1bf61e7359..0000000000
--- a/console/language/console-en/translations/generate.plugin.skeleton.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-description: 'Generate an implementation of a skeleton plugin'
-help: 'The <info>"%s"</info> command helps you generate a skeleton plugin "%s".'
-welcome: 'Welcome to the Drupal Skeleton Plugin generator'
-
-options:
-  module: 'The Module name.'
-  plugin: 'The Plugin Id.'
-  class: 'Plugin class name'
-  services: 'Load services from the container.'
-questions:
-  module: 'Enter the module name'
-  plugin: 'Enter the Plugin Id'
-  class: 'Enter the plugin class name'
-  services: 'Enter your service'
-messages:
-  plugin-dont-exist: 'The plugin "%s" does not exist.'
-  plugin-generator-implemented: 'Plugin "%s" already has an advanced command generator, please use "%s"'
-examples:
-  - description: 'Generate a plugin skeleton specifying module name, the plugin id and the class'
-    execution: |
-      drupal generate:plugin:skeleton  \
-        --module="modulename"  \
-        --plugin-id="link_relation_type"  \
-        --class="DefaultLinkRelationType"
diff --git a/console/language/console-en/translations/generate.plugin.type.annotation.yml b/console/language/console-en/translations/generate.plugin.type.annotation.yml
deleted file mode 100644
index b75e064252..0000000000
--- a/console/language/console-en/translations/generate.plugin.type.annotation.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-description: 'Generate a plugin type with annotation discovery'
-help: 'The <info>generate:plugin:type:annotation</info> command helps you generate a new Plugin type that uses annotation discovery.'
-welcome: 'Welcome to the Drupal Plugin Type Annotation generator'
-options:
-  module: common.options.module
-  class: 'Plugin type class name'
-  machine-name: 'Plugin type machine name'
-  label: 'Plugin type label'
-questions:
-  module: common.questions.module
-  class: 'Enter the plugin type class name'
-  machine-name: 'Enter the plugin type machine name'
-  label: 'Enter the plugin type label'
-examples:
-  - description: 'Generate a plugin with annotation discovery specifying module name, class name, machine name and label'
-    execution: |
-      drupal generate:plugin:type:annotation  \
-        --module="modulename"  \
-        --class="ExamplePlugin"  \
-        --machine-name="example_plugin"  \
-        --label="Example plugin"
diff --git a/console/language/console-en/translations/generate.plugin.type.yaml.yml b/console/language/console-en/translations/generate.plugin.type.yaml.yml
deleted file mode 100644
index 63f0963b91..0000000000
--- a/console/language/console-en/translations/generate.plugin.type.yaml.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-description: 'Generate a plugin type with Yaml discovery'
-help: 'The <info>generate:plugin:type:yaml</info> command helps you generate a new Plugin type that uses Yaml discovery.'
-welcome: 'Welcome to the Drupal Plugin Type Yaml generator'
-options:
-  module: 'The Module name.'
-  class: 'Plugin type class name'
-  plugin-name: 'Plugin type machine name'
-  plugin-file-name: 'Plugin file name'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the plugin type class name'
-  plugin-name: 'Enter the plugin type machine name'
-  plugin-file-name: 'Enter the plugin file name (e.g. MODULE.plugin.filename.yml)'
-examples:
-  - description: 'Generate a plugin with Yaml discovery specifying module name, class name, plugin name and plugin file name'
-    execution: |
-      drupal generate:plugin:type:yaml  \
-        --module="modulename"  \
-        --class="ExamplePlugin"  \
-        --plugin-name="example_plugin"  \
-        --plugin-file-name="example.plugin"
diff --git a/console/language/console-en/translations/generate.plugin.views.field.yml b/console/language/console-en/translations/generate.plugin.views.field.yml
deleted file mode 100644
index 5d86754713..0000000000
--- a/console/language/console-en/translations/generate.plugin.views.field.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-description: 'Generate a custom plugin view field.'
-help: 'The <info>generate:plugin:views:field</info> command helps you generate a new custom views field plugin.'
-welcome: 'Welcome to the Drupal Plugin View Field generator'
-options:
-  module: 'The Module name.'
-  class: 'Views plugin field class name'
-  title: 'Views plugin field title'
-  description: 'Views plugin field description'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the views plugin field class name'
-  title: 'Enter the views plugin field title'
-  description: 'Enter the views plugin field description'
-  description_default: 'My awesome custom views field plugin.'
-examples:
-  - description: 'Generate a custom view field plugin specifying the module name, the class, a title and its description'
-    execution: |
-      drupal generate:plugin:views:field  \
-        --module="modulename"  \
-        --class="CustomViewsField"  \
-        --title="Custom views field"  \
-        --description="My awesome custom views field plugin."
diff --git a/console/language/console-en/translations/generate.post.update.yml b/console/language/console-en/translations/generate.post.update.yml
deleted file mode 100644
index 6957876cd8..0000000000
--- a/console/language/console-en/translations/generate.post.update.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-description: 'Generate an implementation of hook_post_update_NAME()'
-help: 'The <info>"%s"</info> command helps you generate a hook post update NAME "%s"'
-welcome: 'Welcome to the Drupal Post Updat generator'
-options:
-  module: 'The Module name.'
-  post-update-name: 'Post Update Name'
-questions:
-  module: 'Enter the module name'
-  post-update-name: 'Please provide the Post Update Name to be implemeted'
-messages:
-  wrong-post-update-name: 'The post update name "%s" is invalid'
-  post-update-name-already-implemented: 'The post update name "%s" was already implemented'
-examples:
-  - description: 'Generate an implementation of post update hook specifying the module name and the post update name'
-    execution: |
-      drupal generate:post:update  \
-        --module="modulename"  \
-        --post-update-name="PostUpdateName"
diff --git a/console/language/console-en/translations/generate.profile.yml b/console/language/console-en/translations/generate.profile.yml
deleted file mode 100644
index c0375696ea..0000000000
--- a/console/language/console-en/translations/generate.profile.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-description: 'Generate a profile.'
-help: 'The <info>generate:profile</info> command helps you generate a new installation profile.'
-welcome: 'Welcome to the Drupal installation profile generator'
-options:
-  profile: 'The profile name'
-  machine-name: 'The machine name (lowercase and underscore only)'
-  profile-path: 'The path of the profile'
-  description: 'Profile description'
-  core: 'Core version'
-  dependencies: 'Module dependencies separated by commas (i.e. context, panels)'
-  themes: 'the theme name'
-  distribution: 'The distribution name'
-questions:
-  profile: 'Enter the name of the new profile'
-  machine-name: 'Enter the machine name'
-  profile-path: 'Enter the profile Path'
-  description: 'Enter the description'
-  core: 'Enter Drupal Core version'
-  dependencies: 'Would you like to add module dependencies?'
-  themes: 'Enter theme name'
-  distribution: 'Is this install profile intended to be a distribution?'
-suggestions:
-  my-useful-profile: 'My Useful Profile'
-  my-kick-ass-distribution: 'My Kick-ass Distribution'
-warnings:
-  module-unavailable: 'Warning: The following modules are not available in your local environment "%s"'
-errors:
-  directory-exists: 'The target directory "%s" is not empty.'
-examples:
-  - description: 'Generate a profile specifying the profile name, the machine name, a description, the core and its module dependencies'
-    execution: |
-      drupal generate:profile  \
-        --profile="NewProfileName"  \
-        --machine-name="newprofilename"  \
-        --description="My Useful Profile"  \
-        --core="8.x"  \
-        --dependencies="modulename"
diff --git a/console/language/console-en/translations/generate.routesubscriber.yml b/console/language/console-en/translations/generate.routesubscriber.yml
deleted file mode 100644
index f509067a1c..0000000000
--- a/console/language/console-en/translations/generate.routesubscriber.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-description: 'Generate a RouteSubscriber'
-help: 'The <info>generate:service</info> command helps you generate a new RouteSubscriber.'
-welcome: 'Welcome to the Drupal RouteSubscriber generator.'
-options:
-  module: 'The Module name.'
-  name: 'Service name'
-  class: 'Class name'
-questions:
-  module: 'Enter the module name'
-  name: 'Enter the service name'
-  class: 'Enter the Class name'
-examples:
-  - description: 'Generate a route subscriber specifying the module name, the route name and its class'
-    execution: |
-      drupal generate:routesubscriber  \
-        --module="modulename"  \
-        --name="modulename.route_subscriber"  \
-        --class="RouteSubscriber"
diff --git a/console/language/console-en/translations/generate.service.yml b/console/language/console-en/translations/generate.service.yml
deleted file mode 100644
index 567907b14b..0000000000
--- a/console/language/console-en/translations/generate.service.yml
+++ /dev/null
@@ -1,38 +0,0 @@
-description: 'Generate service'
-help: 'The <info>generate:service</info> command helps you generate a new service.'
-welcome: 'Welcome to the Drupal service generator'
-options:
-  module: 'The Module name.'
-  service-name: 'Service name'
-  class: 'Class name'
-  interface: 'Interface'
-  interface-name: 'Interface name'
-  services: 'Load services from the container.'
-  path-service:  'Path'
-questions:
-  module: 'Enter the module name'
-  service-name: 'Enter the service name'
-  class: 'Enter the Class name'
-  interface: 'Create an interface'
-  interface-name: 'Enter the interface name'
-  services: 'Enter your service'
-  path-service: 'Enter the path for the services'
-messages:
-  service-already-taken: 'The service name has been already taken in module "%s"'
-examples:
-  - description: 'Generate a services without interface specifying the module name, the service name, the class and its path'
-    execution: |
-      drupal generate:service  \
-        --module="modulename"  \
-        --name="modulename.default"  \
-        --class="DefaultService"  \
-        --path-service="/modules/custom/modulename/src/"
-  - description: 'Generate a services with interface specifying the module name, the service name, the class, the interface name and its path'
-    execution: |
-      drupal generate:service  \
-        --module="modulename"  \
-        --name="modulename.default"  \
-        --class="DefaultService"  \
-        --interface  \
-        --interface-name="InterfaceName"  \
-        --path-service="/modules/custom/modulename/src/"
diff --git a/console/language/console-en/translations/generate.site.alias.yml b/console/language/console-en/translations/generate.site.alias.yml
deleted file mode 100644
index ca3a7c179d..0000000000
--- a/console/language/console-en/translations/generate.site.alias.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-description: 'Generates a site alias.'
-help: 'The <info>generate:site:alias</info> command helps you generate a new site alias.'
-options:
-  name: 'Site name.'
-  environment: 'Environment name.'
-  type: 'The site type.'
-  composer-root: 'The Drupal root project directory.'
-  host: 'The ip/domain name of the remote system. Not required on local sites.'
-  port: 'The port to use when connecting via ssh.'
-  user: 'The username to use when connecting via ssh.'
-  extra-options: 'Used only when the target requires extra options, such as alternative authentication method and/or alternative identity file.'
-  site-uri: 'Drupal uri (for multi-sites).'
-  directory: 'Directory to store the generated site alias.'
-  site: 'Use local site as destination.'
-questions:
-  name: 'Select or enter the site name'
-  environment: 'Enter the environment name (dev, test, prod, qa, dev.uri, test.uri, etc...)'
-  type: 'Select site type. Allowed options [local, ssh or container].'
-  composer-root: 'Enter the Drupal root project directory.'
-  host: 'Enter the ip/domain name of the remote system.'
-  port: 'Enter the port to use when connecting via ssh.'
-  user: 'Enter the username to use when connecting via ssh.'
-  extra-options: 'Select or enter a valid extra option.'
-  site-uri: 'Enter the Drupal uri (for multi-sites).'
-  directory: 'Select the directory to store the generated site alias.'
diff --git a/console/language/console-en/translations/generate.theme.yml b/console/language/console-en/translations/generate.theme.yml
deleted file mode 100644
index 9b54abd943..0000000000
--- a/console/language/console-en/translations/generate.theme.yml
+++ /dev/null
@@ -1,73 +0,0 @@
-description: 'Generate a theme.'
-help: 'The <info>generate:theme</info> command helps you generates a new theme.'
-welcome: 'Welcome to the Drupal theme generator'
-options:
-  theme: 'The theme name'
-  machine-name: 'The machine name (lowercase and underscore only)'
-  theme-path: 'The path of the theme'
-  description: 'Theme description'
-  core: 'Core version'
-  package: 'Theme package'
-  composer: 'Add a composer.json file'
-  base-theme: 'Base theme (i.e. classy, stable)'
-  global-library: 'Global styling library name'
-  libraries: 'Libraries'
-  regions: Regions
-  breakpoints: Breakpoints
-questions:
-  theme: 'Enter the new theme name'
-  machine-name: 'Enter the theme machine name'
-  theme-path: 'Enter the theme Path'
-  description: 'Enter theme description'
-  core: 'Enter Drupal Core version'
-  package: 'Enter package name'
-  dependencies: 'Would you like to add module dependencies?'
-  invalid-theme: 'Invalid "%s" theme was selected'
-  global-library: 'Enter the global styling library name'
-  library-add: 'Do you want to add another library?'
-  library-name: 'Enter library name'
-  library-version: 'Enter library version'
-  regions: 'Do you want to generate the theme regions?'
-  region-name: 'Enter region name'
-  region-machine-name: 'Enter region machine name'
-  region-add: 'Do you want to add another region?'
-  breakpoints: 'Do you want to generate the theme breakpoints?'
-  breakpoint-name: 'Enter breakpoint name'
-  breakpoint-label: 'Enter breakpoint label'
-  breakpoint-media-query: 'Enter breakpoint media query'
-  breakpoint-weight: 'Enter breakpoint weight'
-  breakpoint-multipliers: 'Enter breakpoint multipliers'
-  breakpoint-add: 'Do you want to add another breakpoint?'
-suggestions:
-  my-awesome-theme: 'My Awesome theme'
-  other: 'Other'
-warnings:
-  module-unavailable: 'Warning The following modules are not available in your local environment "%s"'
-errors:
-  directory-exists: 'The target directory "%s" is not empty.'
-examples:
-  - description: 'Generate a theme without region and without breakpoint specifying the theme name, its machine name, the theme path, a description, the drupal core, the package name and the global library'
-    execution: |
-      drupal generate:theme  \
-        --theme="AnotherTheme"  \
-        --machine-name="anothertheme"  \
-        --theme-path="themes/custom"  \
-        --description="My Awesome theme"  \
-        --core="8.x"  \
-        --package="PackageName"  \
-        --global-library="global-styling"  \
-        --base-theme="false"
-  - description: 'Generate a theme base on stable theme with two region defined and one breakpoint specifying the theme name, its machine name, the theme path, a description, the drupal core, the package name, a global library, its base, the regions and the breakpoint'
-    execution: |
-      drupal generate:theme \
-        --theme="MyTheme" \
-        --machine-name="mytheme" \
-        --theme-path="themes/custom" \
-        --description="My Awesome theme" \
-        --core="8.x" \
-        --package="MyThemePackage" \
-        --global-library="global-styling" \
-        --base-theme="stable" \
-        --regions='"region_name":"Content", "region_machine_name":"content"' \
-        --regions='"region_name":"Panel", "region_machine_name":"panel"' \
-        --breakpoints='"breakpoint_name":"narrow", "breakpoint_label":"narrow", "breakpoint_media_query":"all and (min-width: 560px) and (max-width: 850px)", "breakpoint_weight":"1", "breakpoint_multipliers":"1x"'
diff --git a/console/language/console-en/translations/generate.twig.extension.yml b/console/language/console-en/translations/generate.twig.extension.yml
deleted file mode 100644
index ae84a7e492..0000000000
--- a/console/language/console-en/translations/generate.twig.extension.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-description: 'Generate a Twig extension.'
-help: 'The <info>generate:twig:extension</info> command helps you to generate a Twig extension.'
-welcome: 'Welcome to the Drupal Twig Extension generator'
-options:
-  module: 'The Module name.'
-  name: 'Twig Extension name'
-  class: 'Class name'
-  services: 'Load services from the container.'
-questions:
-  module: 'Enter the module name'
-  name: 'Enter the twig Extension name'
-  class: 'Class name'
-  services: 'Enter your service'
-examples:
-  - description: 'Generate a twig extension specifying the module name, the extension name and its class'
-    execution: |
-      drupal generate:twig:extension  \
-        --module="modulename"  \
-        --name="modulename.twig.extension"  \
-        --class="DefaultTwigExtension"
diff --git a/console/language/console-en/translations/generate.update.yml b/console/language/console-en/translations/generate.update.yml
deleted file mode 100644
index 614b4216da..0000000000
--- a/console/language/console-en/translations/generate.update.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-description: 'Generate an implementation of hook_update_N()'
-help: 'The <info>"%s"</info> command helps you generate a hook update N "%s"'
-welcome: 'Welcome to the Drupal Update generator'
-options:
-  module: 'The Module name.'
-  update-n: 'Update Number'
-questions:
-  module: 'Enter the module name'
-  update-n: 'Please provide the Update N to be implemeted'
-messages:
-  wrong-update-n: 'The update number "%s" is invalid'
-examples:
-  - description: 'Generate an update N hook implementation specifying the module name and the N value'
-    execution: |
-      drupal generate:update  \
-        --module="modulename"  \
-        --update-n="8001"
diff --git a/console/language/console-en/translations/help.yml b/console/language/console-en/translations/help.yml
deleted file mode 100644
index d8deefc5b1..0000000000
--- a/console/language/console-en/translations/help.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-description: 'Displays help for a command'
-help: |
-        The <info>%command.name%</info> command displays help for a given command:
-
-        <info>php %command.full_name% list</info>
-
-        You can also output the help in other formats by using the <comment>--format</comment> option:
-
-        <info>php %command.full_name% --format=xml list</info>
-
-        To display the list of available commands, please use the <info>list</info> command.
-arguments:
-    command-name: 'The command name'
-options:
-    xml: 'To output list as XML'
-    raw: 'To output raw command list'
-    format: 'The output format (txt, xml, json, or md)'
-messages:
-    deprecated: 'The <comment>--xml</comment> option was deprecated in version 2.7 and will be removed in version 3.0. Use the <comment>--format</comment> option instead'
diff --git a/console/language/console-en/translations/image.styles.flush.yml b/console/language/console-en/translations/image.styles.flush.yml
deleted file mode 100644
index f613fad83a..0000000000
--- a/console/language/console-en/translations/image.styles.flush.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-description: 'Execute flush function by image style or execute all flush images styles'
-messages:
-  executing-flush: 'Executing flush function on image style "%s"'
-  success: 'All flush functions requested were executed successfully'
-options:
-  image-style: 'The Images Styles name.'
-questions:
-  image-style: 'Select Images Styles to flush.'
-examples:
-  - description: 'Flush large image style'
-    execution: |
-      drupal image:styles:flush  large
-  - description: 'Flush thumbnail image style'
-    execution: |
-      drupal image:styles:flush  thumbnail
diff --git a/console/language/console-en/translations/init.yml b/console/language/console-en/translations/init.yml
deleted file mode 100644
index d2bc26a8aa..0000000000
--- a/console/language/console-en/translations/init.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-description: 'Copy configuration files.'
-options:
-  destination: 'Destination directory to copy files'
-  override: 'Override configurations files flag'
-  autocomplete: 'Autocomplete tool files flag.'
-  site: 'Use local site as destination.'
-questions:
-  destination: 'Select destination to copy configuration'
-  autocomplete: 'Generate autocomplete files'
-  language: 'Select language'
-  temp: 'Enter temporary file path'
-  chain: 'Copy chain files examples'
-  sites: 'Copy site alias files examples'
-  temp: 'Enter temporary file path'
-  learning: 'Shows information for learning purposes?'
-  generate-inline: 'Show inline representation of the executed command?'
-  generate-chain: 'Show chain representation of the executed command?'
diff --git a/console/language/console-en/translations/list.yml b/console/language/console-en/translations/list.yml
deleted file mode 100644
index 7683426e1f..0000000000
--- a/console/language/console-en/translations/list.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-description: 'Lists all available commands'
-help: |
-  The <info>%command.name%</info> command lists all commands:
-  <info>php %command.full_name%</info>
-  You can also display the commands for a specific namespace:
-  <info>php %command.full_name% test</info>
-  You can also output the information in other formats by using the <comment>--format</comment> option:
-  <info>php %command.full_name% --format=xml</info>
-  It's also possible to get raw list of commands (useful for embedding command runner):
-  <info>php %command.full_name% --raw</info>
-arguments:
-  namespace: 'The namespace name'
-options:
-  xml: 'To output list as XML'
-  raw: 'To output raw command list'
-  format: 'The output format (txt, xml, json, or md)'
-
-messages:
-  usage: "<comment>Usage:</comment>\n"
-  usage-details: "  command [options] [arguments]\n\n"
-  arguments: '<comment>Arguments:</comment>'
-  options: '<comment>Options:</comment>'
-  help: '<comment>Help:</comment>'
-  comment: '<comment>Available commands for the "%s" namespace:</comment>'
-  available-commands: '<comment>Available commands:</comment>'
diff --git a/console/language/console-en/translations/locale.language.add.yml b/console/language/console-en/translations/locale.language.add.yml
deleted file mode 100644
index 29fa09e8f7..0000000000
--- a/console/language/console-en/translations/locale.language.add.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-description: 'Add languages to be supported by your site'
-messages:
-  invalid-language: 'Language "%s" is an invalid language'
-  invalid-languages: 'Languages "%s" are invalid'
-  language-add-successfully: 'Language "%s" was added successfully.'
-  languages-add-successfully: 'Languages "%s" were added successfully.'
-  language-installed: 'Language "%s" is already installed.'
-  languages-installed: 'Languages "%s" are already installed.'
diff --git a/console/language/console-en/translations/locale.language.delete.yml b/console/language/console-en/translations/locale.language.delete.yml
deleted file mode 100644
index df219c2cad..0000000000
--- a/console/language/console-en/translations/locale.language.delete.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-description: 'Delete a language to be supported by your site'
-messages:
-  invalid-language: 'Language "%s" it''s an invalid language'
-  language-deleted-successfully: 'Language "%s" was deleted successfully.'
diff --git a/console/language/console-en/translations/locale.translation.status.yml b/console/language/console-en/translations/locale.translation.status.yml
deleted file mode 100644
index e1e219cbec..0000000000
--- a/console/language/console-en/translations/locale.translation.status.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-description: 'List available translation updates'
-arguments:
-  language: 'Language for instance es or Spanish'
-messages:
-  no-languages: 'No translatable languages available. Add a language first.'
-  up-to-date: 'All translations up to date.'
-  no-translations: 'No translation status available. Check manually'
-  project: 'Project'
-  version: 'Version'
-  local-age: 'Local age'
-  remote-age: 'Remote age'
-  info: Information
-  no-translation-files: 'No translation files are provided for development releases.'
-  file-not-found: 'File not found at "%s" nor at "%s"'
-  local-file-not-found: 'File not found at "%s"'
-  translation-not-determined: 'Translation file location could not be determined.'
-  translation-project-updated: 'Updated'
-  translation-project-available: 'New translation available'
diff --git a/console/language/console-en/translations/migrate.debug.yml b/console/language/console-en/translations/migrate.debug.yml
deleted file mode 100644
index be97f1186d..0000000000
--- a/console/language/console-en/translations/migrate.debug.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-description: 'Displays current migration available for the application'
-arguments:
-    tag: 'Migrate tag'
-messages:
-    id: 'Migration Id'
-    description: Description
-    no-migrations: 'There aren''t migrations available try to execute command: migrate:setup:migrations'
-    tags: Tags
diff --git a/console/language/console-en/translations/migrate.execute.yml b/console/language/console-en/translations/migrate.execute.yml
deleted file mode 100644
index 393e0895cd..0000000000
--- a/console/language/console-en/translations/migrate.execute.yml
+++ /dev/null
@@ -1,40 +0,0 @@
-description: 'Execute a migration available for application'
-arguments:
-    id: 'Migration id(s)'
-options:
-    site-url: 'Site Source URL'
-    db-file: 'Database File'
-    db-host: 'Database Host'
-    db-name: 'Database Name'
-    db-user: 'Database User'
-    db-pass: 'Database Pass'
-    db-prefix: 'Database Prefix'
-    db-port: 'Database Port'
-    exclude: 'Migration id(s) to exclude'
-    source-base-path:  'Local file directory containing your source site (e.g. /var/www/docroot), or your site address (for example http://example.com)'
-questions:
-    id: 'Migration Id'
-    exclude-id: 'Migration Id to exclude (press <return> to stop adding migrations to exclude)'
-    other-id: 'Other migration id (press <return> to stop adding migrations)'
-    site-url: 'Source Site URL'
-    db-file: 'Database File'
-    db-host: 'Database Host'
-    db-name: 'Database Name'
-    db-user: 'Database User'
-    db-pass: 'Database Pass'
-    db-prefix: 'Database Prefix'
-    db-port: 'Database Port'
-    invalid-migration-id: 'Migration Id "%s" is invalid'
-    source-base-path:  'Local file directory containing your source site (e.g. /var/www/docroot), or your site address (for example http://example.com)'
-messages:
-    processing: 'Processing Migration "%s"'
-    imported: 'Migration "%s" was imported correctly'
-    fail-load: 'Migration "%s" can''t be loaded'
-    importing-incomplete: 'Importing migration "%s"'
-    import-stopped: 'Import "%s" stopped by request'
-    import-fail: 'Import "%s" failed'
-    import-skipped: 'Import "%s" was skipped due to unfulfilled dependencies'
-    wrong-source: 'Upgrading from this version of Drupal is not supported.'
-    destination-error: 'Database destination error'
-    source-error: 'Database source error'
-    no-migrations: 'There are not migrations available to be executed'
diff --git a/console/language/console-en/translations/migrate.rollback.yml b/console/language/console-en/translations/migrate.rollback.yml
deleted file mode 100644
index 36666266ff..0000000000
--- a/console/language/console-en/translations/migrate.rollback.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-description: 'Rollback one or multiple migrations'
-arguments:
-    id: 'Migration id(s)'
-messages:
-    not-available: 'Migration Id "%s" is invalid.Skipping'
-    processing: 'Rollback "%s" completed'
\ No newline at end of file
diff --git a/console/language/console-en/translations/migrate.setup.yml b/console/language/console-en/translations/migrate.setup.yml
deleted file mode 100644
index 70d61207e5..0000000000
--- a/console/language/console-en/translations/migrate.setup.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-description: 'Load and create the relevant migrations for a provided legacy database'
-options:
-    db-type: 'Drupal Database type'
-    db-host: 'Database Host'
-    db-name: 'Database Name'
-    db-user: 'Database User'
-    db-pass: 'Database Pass'
-    db-prefix: 'Database Prefix'
-    db-port: 'Database Port'
-    source-base-path:  'Local file directory containing your source site (e.g. /var/www/docroot), or your site address (for example http://example.com)'
-questions:
-    db-type: 'Drupal Database type'
-    db-host: 'Database Host'
-    db-name: 'Database Name'
-    db-user: 'Database User'
-    db-pass: 'Database Pass'
-    db-prefix: 'Database Prefix'
-    db-port: 'Database Port'
-    source-base-path:  'Local file directory containing your source site (e.g. /var/www/docroot), or your site address (for example http://example.com)'
-messages:
-    not-drupal: 'Source database does not contain a recognizable Drupal version.'
-    migrations-created: '"%s" migrations were created successfully for "%s".'
-    migrations-not-found: 'There aren''t migrations available'
-    migrations-already-exist: 'All migrations available are already created'
diff --git a/console/language/console-en/translations/module.dependency.install.yml b/console/language/console-en/translations/module.dependency.install.yml
deleted file mode 100644
index f8ccae9b87..0000000000
--- a/console/language/console-en/translations/module.dependency.install.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-description: 'Install dependencies module in the application'
-arguments:
-  module: 'Module or modules to be enabled should be separated by a space'
-messages:
-  no-depencies: 'Nothing to do. This module does not have any dependencies to install'
-  installing: 'Installing module(s) "%s"'
-  success: 'The following module(s) were installed successfully: "%s"'
-examples:
-    - description: 'Install the dependencies of the specfied module'
-      execution: |
-        drupal module:dependency:install  modulename
diff --git a/console/language/console-en/translations/module.download.yml b/console/language/console-en/translations/module.download.yml
deleted file mode 100644
index 03e3c478ef..0000000000
--- a/console/language/console-en/translations/module.download.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-description: 'Download module or modules in application'
-arguments:
-  module: 'Module or modules to be enabled should be separated by a space'
-options:
-  latest: 'Default to download most recent version'
-  path: 'The path of the contrib project'
-  composer: 'Option to point out that the module will be downloaded, managed & installed by Composer'
-  unstable: 'Module unstable'
-questions:
-  path: 'Enter the contrib project Path'
-messages:
-  no-releases: 'There aren''t any releases for module "%s"'
-  getting-releases: 'Getting releases for module "%s"'
-  downloading: 'Downloading module "%s" release "%s"'
-  downloaded: 'Module "%s" version "%s" was downloaded successfully at "%s"'
-  select-release: 'Please select your favorite release'
-  outside-drupal: 'Drupal root can''t be determined. Use --root to set the destination, current folder will be used instead of.'
-  error-creating-folder: 'Error creating folder "%s", please check your permissions'
-  no-composer-repo: 'Please, configure Composer in ~/.console/config.yml'
-  composer: 'Module "%s" was downloaded successfully using Composer'
-examples:
-  - description: 'Download module specifying module name and its path'
-    execution: |
-      drupal module:download  modulename  \
-        --path="modules/contrib"
diff --git a/console/language/console-en/translations/module.install.yml b/console/language/console-en/translations/module.install.yml
deleted file mode 100644
index 8aa35ec1af..0000000000
--- a/console/language/console-en/translations/module.install.yml
+++ /dev/null
@@ -1,35 +0,0 @@
-description: 'Install module or modules in the application'
-arguments:
-  module: 'Module or modules to be enabled should be separated by a space'
-options:
-  latest: 'Default to download most recent version'
-  composer: 'Download the module using Composer'
-questions:
-  module: 'Module name (press <return> to stop adding modules)'
-  invalid-module: 'Invalid module "%s"'
-messages:
-  no-modules: 'You must provide module or modules to enable.'
-  missing: 'Unable to install module(s) "%s" due to missing module(s) "%s"'
-  missing-dependencies: 'Unable to install modules "%s" due to missing dependencies "%s"'
-  nothing: 'Nothing to do. All modules are already installed'
-  dependencies: 'Are you sure you want to install dependencies: "%s"?'
-  success: 'The following module(s) were installed successfully: "%s"'
-  disabled-modules: 'Only disabled modules will be listed in autocomplete'
-  config-conflict-overwrite: 'These configuration objects will be overwritten in your active configuration'
-  config-conflict: 'These configuration objects already exist in active configuration, installation is not possible'
-  getting-missing-modules: 'One or more modules "%s" are not available, running download process to get those modules'
-  getting-releases: 'Getting releases for module "%s"'
-  select-release: 'Please select your favorite release'
-  downloading: 'Downloading module "%s" release "%s"'
-  downloaded: 'Module "%s" version "%s" was downloaded successfully at "%s"'
-  no-releases: 'There aren''t any releases for module "%s"'
-  installing: 'Installing module(s) "%s"'
-  composer: 'The module was installed successfully with Composer'
-  error-creating-folder: 'Error creating folder "%s", please check your permissions'
-  download-with-composer: 'Module "%s" was downloaded with Composer.'
-  not-installed-with-composer: 'Module "%s" seems not to be installed with Composer. Halting.'
-  invalid-name: 'Invalid module name: "%s"'
-examples:
-  - description: 'Install module specifying the module name'
-    execution: |
-      drupal module:install  modulename
diff --git a/console/language/console-en/translations/module.path.yml b/console/language/console-en/translations/module.path.yml
deleted file mode 100644
index 70407ffa3e..0000000000
--- a/console/language/console-en/translations/module.path.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-description: 'Returns the relative path to the module (or absolute path)'
-arguments:
-  module: 'The Module name (machine name)'
-options:
-  absolute: 'Return module absolute path'
-messages:
-examples:
-  - description: 'Get the relative path of the module specifying the module name'
-    execution: |
-      drupal module:path  modulename
diff --git a/console/language/console-en/translations/module.uninstall.yml b/console/language/console-en/translations/module.uninstall.yml
deleted file mode 100644
index 3b6d6a8225..0000000000
--- a/console/language/console-en/translations/module.uninstall.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-description: 'Uninstall module or modules in the application'
-questions:
-  module: 'Module name (press <return> to stop adding modules)'
-  invalid-module: 'Invalid module "%s"'
-options:
-  module: 'Module or modules to be uninstalled should be separated by a space'
-  force: 'Do you want to ignore dependencies and forcefully uninstall the module?'
-  composer: 'Uninstalls the module using Composer'
-messages:
-  no-modules: 'You must provide module or modules to uninstall.'
-  dependents: 'Unable to uninstall modules "%s" because are required by "%s"'
-  nothing: 'Nothing to do. All modules are already uninstalled'
-  success: 'The following module(s) were uninstalled successfully: "%s"'
-  missing: 'Unable to uninstall modules "%s" due to missing modules "%s"'
-  composer-success: 'You should execute now the following command: "composer remove vendor/package"'
-examples:
-  - description: 'Uninstall the module specifying the module name'
-    execution: |
-      drupal module:uninstall  modulename
diff --git a/console/language/console-en/translations/module.update.yml b/console/language/console-en/translations/module.update.yml
deleted file mode 100644
index 0bd1729eae..0000000000
--- a/console/language/console-en/translations/module.update.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-description: 'Update core, module or modules in the application'
-arguments:
-  module: 'Module or modules to be updated should be separated by a space. Leave empty for updating the core and all your modules managed by Composer.'
-options:
-  composer: 'Update the module using Composer'
-  simulate: 'Simulate the update process with Composer'
-questions:
-  module: 'Module name (press <return> to stop adding modules)'
-  invalid-module: 'Invalid module "%s"'
-messages:
-  success: 'The following module(s) were installed successfully: "%s"'
-  composer: 'The module "%s" was managed successfully with Composer'
-  only-composer: 'This command only updates modules via Composer. Use --composer option.'
-  missing-module: 'Enter a module(s) name(s) to update.'
-examples:
-    - description: 'Update module specifying module name and composer parameter'
-      execution: |
-        drupal module:update  modulename  \
-          --composer
diff --git a/console/language/console-en/translations/multisite.new.yml b/console/language/console-en/translations/multisite.new.yml
deleted file mode 100644
index 0f361ba2a3..0000000000
--- a/console/language/console-en/translations/multisite.new.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-description: 'Sets up the files for a new multisite install.'
-help: 'The <info>multisite:new</info> command assists in setting up new multisite installs by creating the needed subdirectory and files, and can optionally copy an existing ''default'' installation.'
-arguments:
-  directory: 'Name of directory under ''sites'' which should be created.'
-  uri: 'Site URI to add to sites.php.'
-options:
-  copy-default: 'Copies existing site from the default install.'
-errors:
-  subdir-empty: 'You must specify a multisite subdirectory to create.'
-  subdir-exists: 'The "sites/%s" directory already exists.'
-  default-missing: 'The sites/default directory is missing.'
-  mkdir-fail: 'Unable to create "sites/%s". Please check the sites directory permissions and try again.'
-  sites-invalid: 'The sites.php file located is either not readable or not a file.'
-  sites-missing: 'No sites.php or example.sites.php to copy from.'
-  sites-other: 'A problem was encountered when attempting to write sites.php'
-  file-missing: 'The file "%s" was not found for copying.'
-  copy-fail: 'Unable to copy "%s" to "%s". Please check permissions and try again.'
-  write-fail: 'Unable to write to the file "%s". Please check the file permissions and try again.'
-  chmod-fail: 'Unable to change permissions on the file "%s". Please ensure that the permissions on that file are correct.'
-warnings:
-  missing-files: 'No sites/default/files directory found. The files directory will need to be created by hand.'
-messages:
-  copy-default: 'The default install was successfully copied to "sites/%s".'
-  fresh-site: 'The new multisite structure was successfully created at "sites/%s" and is ready for installation.'
-examples:
-  - description: 'Set up files for a multisite install specifying destination path and uri'
-    execution: |
-      drupal multisite:new  vendor/newsite http://mysite.example.com
diff --git a/console/language/console-en/translations/multisite.update.yml b/console/language/console-en/translations/multisite.update.yml
deleted file mode 100644
index 0da5c900db..0000000000
--- a/console/language/console-en/translations/multisite.update.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-description: 'Update the files for a multisite installed.'
-help: 'The <info>multisite:new</info> command assists in setting up new multisite installs by creating the needed subdirectory and files, and can optionally copy an existing ''default'' installation.'
-options:
-  uri: 'Name of old directory under ''sites'' which should be updated.'
-  directory: 'Name of new directory for multisite installed. (You could create subdir separated by ''/'')'
-questions:
-  uri: 'Choice the multisite to update'
-  directory: 'Enter the new name (You could use subdir separated by ''/'')'
-errors:
-  invalid-uri: 'The --uri="%s" does not exist'
-  uri-dir-empty: 'You must specify a old multisite directory to update.'
-  new-dir-empty: 'You must specify a new name to update multisite.'
-  subdir-exists: 'The "sites/%s" directory already exists.'
-  mkdir-fail: 'Unable to create "sites/%s". Please check the sites directory permissions and try again.'
-  copy-fail: 'Unable to copy "%s" to "%s". Please check permissions and try again.'
-  write-fail: 'Unable to write to the file "%s". Please check the file permissions and try again.'
-messages:
-  move-settings: 'The file settings.php was successfully movied to "sites/%s".'
-examples:
-  - description: 'Update the files for a multisite installed specifying old path and new path'
-    execution: |
-      drupal multisite:update
diff --git a/console/language/console-en/translations/node.access.rebuild.yml b/console/language/console-en/translations/node.access.rebuild.yml
deleted file mode 100644
index c18b6da123..0000000000
--- a/console/language/console-en/translations/node.access.rebuild.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-description: 'Rebuild node access permissions.'
-help: 'Rebuilding will remove all privileges to content and replace them with permissions based on the current modules and settings.'
-options:
-  batch: 'Process in batch mode.'
-messages:
-  rebuild: 'Rebuilding node access permissions, one moment please.'
-  completed: 'Done rebuilding permissions.'
-  failed: 'Rebuilding permissions was not successful.'
-examples:
-  - description: Rebuild node access permissions
-    execution:
-      drupal node:access:rebuild --batch
diff --git a/console/language/console-en/translations/queue.run.yml b/console/language/console-en/translations/queue.run.yml
deleted file mode 100644
index 0411433d81..0000000000
--- a/console/language/console-en/translations/queue.run.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-description: 'Process the selected queue.'
-arguments:
-  name: 'Queue name.'
-messages:
-  success: 'Processed "%s": "%s"/"%s" items in "%s" seconds.'
-  failed: '"%s" failed: "%s".'
-  missing-name: 'Provide a valid queue name.'
-  invalid-name: 'Invalid queue name "%s" provided.'
-
diff --git a/console/language/console-en/translations/rest.debug.yml b/console/language/console-en/translations/rest.debug.yml
deleted file mode 100644
index 6fc9fc811a..0000000000
--- a/console/language/console-en/translations/rest.debug.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-description: 'Displays current rest resource for the application'
-arguments:
-    resource-id: 'Rest ID'
-options:
-    status: 'Rest resource status enabled | disabled'
-messages:
-    id: 'Rest ID'
-    label: Label
-    canonical-url: 'Canonical URL'
-    status: Status
-    provider: Provider
-    enabled: Enabled
-    disabled: Disabled
-    rest-state: 'REST States'
-    supported-formats: 'Supported Formats'
-    supported-auth: 'Supported Authentication Providers'
-    not-found: 'Rest resource "%s" not found'
diff --git a/console/language/console-en/translations/rest.disable.yml b/console/language/console-en/translations/rest.disable.yml
deleted file mode 100644
index a1f7360e94..0000000000
--- a/console/language/console-en/translations/rest.disable.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-description: 'Disable a rest resource for the application'
-arguments:
-    resource-id: 'Rest ID'
-    states: 'REST States to disable for Rest resource'
-questions:
-    resource-id: 'Rest ID'
-messages:
-    invalid-rest-id: 'Rest ID "%s" is invalid'
-    success: 'Rest ID "%s" disabled'
-    already-disabled: 'Rest ID "%s" was already disabled'
diff --git a/console/language/console-en/translations/rest.enable.yml b/console/language/console-en/translations/rest.enable.yml
deleted file mode 100644
index 4b7a5bf2ee..0000000000
--- a/console/language/console-en/translations/rest.enable.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-description: 'Enable a rest resource for the application'
-arguments:
-    resource-id: 'Rest ID'
-    states: 'REST States to enable for Rest resource'
-    authorizations: 'Authorizations providers enabled for Rest Resource'
-questions:
-    resource-id: 'Rest ID'
-messages:
-    invalid-rest-id: 'Rest ID "%s" is invalid'
-    formats: 'Available serialization formats'
-    methods: 'Available methods'
-    authentication-providers: 'Available Authentication Providers'
-    selected-method: 'Selected Method'
-    selected-formats: 'Selected formats'
-    selected-authentication-providers: 'Selected Authentication Providers'
-    success: 'Rest ID "%s" enabled'
diff --git a/console/language/console-en/translations/role.delete.yml b/console/language/console-en/translations/role.delete.yml
deleted file mode 100644
index 1eeb54578a..0000000000
--- a/console/language/console-en/translations/role.delete.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-description: 'Delete roles for the application'
-help: 'The <info>role:delete</info> command helps you delete roles.'
-welcome: 'Welcome to the Drupal role delete'
-arguments:
-  rolename: 'Roles name to be deleted'
-messages:
-  role-id: 'Role Id'
-  role-name: 'Role Name'
-  role-created: 'Roles was deleted successfully'
-  invalid-machine-name: 'Role does not exist'
-examples:
-  - description: 'Delete role specifying rolename'
-    execution: |
-      drupal role:delete  moderator
diff --git a/console/language/console-en/translations/role.new.yml b/console/language/console-en/translations/role.new.yml
deleted file mode 100644
index 54303a33c8..0000000000
--- a/console/language/console-en/translations/role.new.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-description: 'Create roles for the application'
-help: 'The <info>role:new</info> command helps you create roles.'
-welcome: 'Welcome to the Drupal role create'
-arguments:
-  rolename: 'Role name to be created'
-  machine-name: 'Role machine name'
-questions:
-  rolename: 'Role name to be created'
-  machine-name: 'Role machine name'
-messages:
-  role-id: 'Role Id'
-  role-name: 'Role Name'
-  role-created: 'Role "%s" was created successfully'
-  invalid-machine-name: 'The machine name is already exist'
-examples:
-  - description: 'Create role specifying rolename and machine-name'
-    execution: |
-      drupal role:new  moderator moderator
diff --git a/console/language/console-en/translations/router.rebuild.yml b/console/language/console-en/translations/router.rebuild.yml
deleted file mode 100644
index bc0fbc17e3..0000000000
--- a/console/language/console-en/translations/router.rebuild.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-description: 'Rebuild routes for the application'
-arguments:
-  route-name: 'Route names'
-messages:
-  rebuilding: 'Rebuilding routes, wait a moment please'
-  completed: 'Done rebuilding route(s).'
-examples:
-  - description: 'Rebuild routes'
-    execution:
-      drupal router:rebuild
diff --git a/console/language/console-en/translations/self-update.yml b/console/language/console-en/translations/self-update.yml
deleted file mode 100644
index 72014fd3a1..0000000000
--- a/console/language/console-en/translations/self-update.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-description: 'Update project to the latest version.'
-help: 'Update project to the latest version.'
-options:
-  major: 'Update to a new major version, if available.'
-  manifest: 'Override the manifest file path.'
-  current-version: 'Override the version to update from.'
-questions:
-  update: 'Update from version "%s" to version "%s".'
-messages:
-  not-phar: 'This instance of the CLI was not installed as a Phar archive.'
-  update: 'Updating to version "%s".'
-  success: 'Updated from version "%s" to version "%s".'
-  check: 'Checking for updates from version: "%s"'
-  current-version: 'The latest version "%s", was already installed on your system.'
-  instructions: |
-   Update using: composer global update
-   Or you can switch to a Phar install recommended
-   composer global remove drupal/console
-   curl https://drupalconsole.com/installer -L -o drupal.phar
-
diff --git a/console/language/console-en/translations/server.yml b/console/language/console-en/translations/server.yml
deleted file mode 100644
index 86d5ca0c96..0000000000
--- a/console/language/console-en/translations/server.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-description: 'Runs PHP built-in web server'
-arguments:
-  address: 'The address:port values'
-messages:
-  executing: 'Executing php from "%s".'
-  listening: 'Listening on "%s".'
-errors:
-  binary: 'Unable to find PHP binary to run server.'
-examples:
-  - description: 'Run using default address argument value 127.0.0.1:8088'
-    execution: 'drupal server'
-  - description: 'Passing address argument to use a different port number'
-    execution: 'drupal server 127.0.0.1:8089'
-  - description: 'Running default address argument values, using --root option to define the Drupal root'
-    execution: 'drupal --root=/var/www/drupal8.dev server'
diff --git a/console/language/console-en/translations/settings.set.yml b/console/language/console-en/translations/settings.set.yml
deleted file mode 100644
index b7150bc69a..0000000000
--- a/console/language/console-en/translations/settings.set.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-description: 'Change a specific setting value in DrupalConsole config file'
-arguments:
-  name: 'Setting name in YAML flatten format to set a value in Drupal Console config file'
-  value: 'Setting value to set in Drupal Console config file'
-messages:
-  error-parsing: 'An error occurs during parsing of YAML file "%s".'
-  error-generating: 'Error setting new language in config file.'
-  error-writing: 'Error writing config file.'
-  success: 'Setting "%s" was set to "%s"'
-  missing-file: 'The "%s" config file is missing, try executing `drupal init`'
-  missing-language: 'Provided language: "%s", not found'
-examples:
-  - description: 'Set application language setting value to "es"'
-    execution:
-      drupal settings:set  application.language es
diff --git a/console/language/console-en/translations/shell.yml b/console/language/console-en/translations/shell.yml
deleted file mode 100644
index 89587a8cd2..0000000000
--- a/console/language/console-en/translations/shell.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-description: 'Open a shell providing an interactive REPL (Read–Eval–Print-Loop).'
-help: 'This command provides a wrapper for psysh. A runtime developer console, interactive debugger and REPL for PHP.'
diff --git a/console/language/console-en/translations/site.import.local.yml b/console/language/console-en/translations/site.import.local.yml
deleted file mode 100644
index 39a43b9796..0000000000
--- a/console/language/console-en/translations/site.import.local.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-description: 'Import/Configure an existing local Drupal project'
-help: 'The <info>site:import:local</info> does create the yaml configuration file for a local existing site.'
-arguments:
-  directory: 'Existing Drupal root directory'
-  name: 'Name that will be used to generate the site config'
-options:
-  environment: 'Name of the environment that is going to be imported'
-messages:
-  imported: 'The site has been imported successfully. You might want to run `drupal debug:site` to confirm that everything went well.'
-  error-missing: 'The directory "%s" does not exist.'
-  error-not-drupal: 'This is not a valid drupal root: "%s"'
-  error-writing: 'An error occurred while trying to write the config file: "%s"'
-questions:
-  directory: 'Enter the directory name where to install Drupal'
-  name: 'Enter the name of the site'
-  environment: 'Enter the site environment name'
-examples:
-  - description: 'Import local drupal project specifying the site name and the path'
-    execution:
-      drupal site:import:local  SiteName /private/var/www/vhost/anexusit/drupal8.dev/web
diff --git a/console/language/console-en/translations/site.install.yml b/console/language/console-en/translations/site.install.yml
deleted file mode 100644
index a831470393..0000000000
--- a/console/language/console-en/translations/site.install.yml
+++ /dev/null
@@ -1,48 +0,0 @@
-description: 'Install a Drupal project'
-arguments:
-  profile: 'Drupal Profile to be installed'
-  langcode: 'Drupal language'
-  db-type: 'Drupal Database type to be used in install'
-  db-file: 'Drupal Database file to be used in install'
-  site-name: 'Drupal site name'
-  site-mail: 'Drupal site mail'
-  account-name: 'Drupal administrator account name'
-  account-mail: 'Drupal administrator account mail'
-  account-pass: 'Drupal administrator account password'
-  force: 'Force to reinstall the site'
-questions:
-  profile: 'Select Drupal profile to be installed'
-  langcode: 'Select language for your Drupal installation'
-  db-type: 'Select Drupal Database type to be used in install'
-  site-name: 'Provide your Drupal site name'
-  site-mail: 'Provide your Drupal site mail'
-  account-name: 'Provide your Drupal administrator account name'
-  account-mail: 'Provide your Drupal administrator account mail'
-  account-pass: 'Provide your Drupal administrator account password'
-suggestions:
-  site-name: 'My awesome site'
-messages:
-  installing: 'Starting Drupal 8 install process'
-  installed: 'Your Drupal 8 installation was completed successfully'
-  using-current-database: 'Using "%s" database with name "%s" and user "%s"'
-  already-installed: 'Drupal is already installed, try dropping your database executing database:drop or install executing site:install --force --no-interaction'
-  sites-backup: 'The sites.php file has temporarily been renamed to backup.sites.php while Drupal installs.'
-  sites-restore: 'The backup of sites.php has been been restored to sites.php.'
-  invalid-multisite: 'Invalid multisite, please create multisite using command drupal multisite:new "%s" "%s"'
-examples:
-  - description: 'Install a drupal project specifying installation type, language code, database configuration, site name, site email and admin credential settings'
-    execution: |
-      drupal site:install  standard  \
-        --langcode="en"  \
-        --db-type="mysql"  \
-        --db-host="127.0.0.1"  \
-        --db-name="drupal8"  \
-        --db-user="u53rn4m3"  \
-        --db-pass="dbp455"  \
-        --db-port="3306"  \
-        --site-name="Drupal 8"  \
-        --site-mail="admin@example.com"  \
-        --account-name="admin"  \
-        --account-mail="admin@example.com"  \
-        --account-pass="p455w0rd"
-
diff --git a/console/language/console-en/translations/site.maintenance.yml b/console/language/console-en/translations/site.maintenance.yml
deleted file mode 100644
index 1c535e2819..0000000000
--- a/console/language/console-en/translations/site.maintenance.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-description: 'Switch site into maintenance mode'
-arguments:
-  mode: 'Site maintenance mode [on/off]'
-messages:
-  maintenance-on: 'Operating in maintenance mode on'
-  maintenance-off: 'Operating in maintenance mode off'
-errors:
-  invalid-mode: 'Invalid maintenance mode'
-examples:
-  - description: 'Switch on maintenance'
-    execution: |
-      drupal site:maintenance  on
-  - description: 'Switch off maintenance'
-    execution: |
-      drupal site:maintenance  off
diff --git a/console/language/console-en/translations/site.mode.yml b/console/language/console-en/translations/site.mode.yml
deleted file mode 100644
index 92deb6479d..0000000000
--- a/console/language/console-en/translations/site.mode.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-description: 'Switch system performance configuration'
-arguments:
-  environment: 'Environment name [dev, prod]'
-options:
-  local: 'Use this option for testing PROD config, but using settings.local.php for connect to your local environment'
-messages:
-  configuration: 'Configuration name'
-  configuration-key: 'Configuration key'
-  original: 'Original Value'
-  updated: 'Override Value'
-  invalid-env: 'Invalid environment'
-  new-services-settings: 'New services settings'
-  service: 'Service'
-  service-parameter: 'Parameter'
-  service-value: 'Value'
-  error-copying-file: 'Error copying file'
-  error-writing-file: 'Error copying file'
-  services-file-overwritten: 'Services files "%s" was overwritten'
-examples:
-  - description: 'Switch system to prod'
-    execution: |
-      drupal site:mode  prod
-  - description: 'Switch system to dev'
-    execution: |
-      drupal site:mode  dev
diff --git a/console/language/console-en/translations/site.new.yml b/console/language/console-en/translations/site.new.yml
deleted file mode 100644
index 14385f5c82..0000000000
--- a/console/language/console-en/translations/site.new.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-description: 'Create a new Drupal project'
-arguments:
-    directory: 'Directory where to install Drupal'
-    version: 'Drupal version to download'
-options:
-    composer: 'Install Drupal with Composer'
-    latest: 'Use this option to select automatically the latest version'
-    unstable: 'Use this option to download unstable releases. If not used, you only can install stable releases. Do not use this with latest nor version.'
-messages:
-    select-release: 'Select a core release'
-    getting-releases: 'Getting releases for Drupal'
-    downloading: 'Downloading "%s" "%s"'
-    extracting: 'Extracting files for Drupal "%s"'
-    no-releases: 'There aren''t any releases available for Drupal'
-    downloaded: 'Drupal "%s" was downloaded in directory "%s"'
-    error-copying: 'An error occurred while renaming directory as "%s"'
-    composer: 'Drupal "%s" was installed successfully using Composer at "%s"'
-    executing: 'Executing composer command:'
-    missing-directory: 'Missing directory argument'
-    missing-version: 'Missing version argument'
-questions:
-    directory: 'Enter the directory name where to install Drupal'
-    composer-release: 'Please, choose a release for "%s"'
-    stable: 'Do you want to use stable releases?'
diff --git a/console/language/console-en/translations/site.statistics.yml b/console/language/console-en/translations/site.statistics.yml
deleted file mode 100644
index 6375041015..0000000000
--- a/console/language/console-en/translations/site.statistics.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-description: 'Show the current statistics of website.'
-help: 'Show the current statistics of website.'
-messages:
-  stat-name: 'Name'
-  stat-quantity: 'Quantity'
-  node-type: 'Node:"%s"'
-  comments: 'Comments'
-  vocabulary: 'Vocabularies'
-  taxonomy-terms: 'Taxonomy terms'
-  files: 'Files'
-  users: 'Users'
-  modules-enabled: 'Modules enabled'
-  modules-disabled: 'Modules disabled'
-  themes-enabled: 'Themes enabled'
-  themes-disabled: 'Themes disabled'
-  views: 'Views (Not system views)'
diff --git a/console/language/console-en/translations/site.status.yml b/console/language/console-en/translations/site.status.yml
deleted file mode 100644
index 8d8dffde99..0000000000
--- a/console/language/console-en/translations/site.status.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-description: 'View current Drupal Installation status'
-messages:
-  application: Application
-  system: 'System Info'
-  hash-salt: 'Hash salt'
-  console: 'Drupal Console'
-  database: 'Database connection'
-  driver: 'Driver'
-  host: 'Host'
-  port: 'Port'
-  username: 'Username'
-  password: 'Password'
-  theme: 'Themes'
-  connection: 'Connection'
-  theme-default: 'Default theme'
-  theme-admin: 'Admin theme'
-  directory: 'Directories'
-  directory-root: 'Site root directory'
-  directory-temporary: 'Site temporary directory'
-  directory-theme-default: 'Default theme directory'
-  directory-theme-admin: 'Admin theme directory'
-  current-version: 'Current Drupal ("%s")'
-  not-installed: 'Drupal is not installed'
-examples:
-  - description: 'Get drupal installation status specifying the output format as table'
-    execution: |
-      drupal site:status  \
-        --format="table"
diff --git a/console/language/console-en/translations/state.delete.yml b/console/language/console-en/translations/state.delete.yml
deleted file mode 100644
index eab626fac9..0000000000
--- a/console/language/console-en/translations/state.delete.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-description: 'Delete State'
-arguments:
-  name: 'State name.'
-messages:
-  enter-name: 'State name must contain a value.'
-  state-not-exists: 'The state "%s" does not exist.'
-  deleted: 'State "%s" sucessfully deleted.'
-examples:
-  - description: 'Delete state specifying the state name'
-    execution: |
-      drupal state:delete  comment.maintain_entity_statistics
diff --git a/console/language/console-en/translations/state.override.yml b/console/language/console-en/translations/state.override.yml
deleted file mode 100644
index 8511d1a43c..0000000000
--- a/console/language/console-en/translations/state.override.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-description: 'Override a State key.'
-help: 'Override a State key.'
-arguments:
-  key: 'The State key to override.'
-  value: 'The State value to set.'
-messages:
-  key: 'State key'
-  original: 'Original value'
-  override: 'Override value'
-errors:
-  no-key: 'You must provide a State key to override.'
-  no-value: 'You must provide a State value to set.'
-examples:
-  - description: 'Override state value specifying the state name and the new value'
-    execution: |
-      drupal state:override  comment.node_comment_statistics_scale "!!float 1"
diff --git a/console/language/console-en/translations/taxonomy.term.delete.yml b/console/language/console-en/translations/taxonomy.term.delete.yml
deleted file mode 100644
index 5ebd28c540..0000000000
--- a/console/language/console-en/translations/taxonomy.term.delete.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-description: 'Delete taxonomy terms from a vocabulary'
-vid: 'Enter vocabulary id'
-help: 'This command takes the VID as argument or all which will delete every term from every vocabulary'
-messages:
-  nothing: 'All taxonomy terms from "%s" vocabulary already deleted.'
-  processing: 'Deleting "%s" taxonomy term.'
-  invalid-vocabulary: 'Invalid "%s" vocabulary.'
-examples:
-  - description: 'Delete all terms of the "tags" vocabulary'
-    execution: |
-      drupal taxonomy:term:delete  tags
diff --git a/console/language/console-en/translations/test.run.yml b/console/language/console-en/translations/test.run.yml
deleted file mode 100644
index 70efff5520..0000000000
--- a/console/language/console-en/translations/test.run.yml
+++ /dev/null
@@ -1,23 +0,0 @@
-description: 'Run Test unit from tests available for application'
-arguments:
-    test-class: 'Test Class'
-    test-methods: 'Test method(s) to be run'
-    url: 'Test url'
-messages:
-    missing-dependency: 'Test can''t be executed due a missing dependency'
-    phpunit-pending: 'Logic to execute PHPUnit test is not implemented yet.'
-    starting-test: 'Starting test'
-    test-duration: 'Test duration'
-    test-pass: 'Test passes'
-    test-fail: 'Test fails'
-    test-exception: 'Test exceptions'
-    test-debug: 'Test debugs'
-    url-required: 'URL option is required to run test'
-    test-summary: 'Test Summary'
-    group: Group
-    status: Status
-    file: File
-    method: Method
-    line: Line
-    message: Message
-    invalid-class: 'Testing class "%s" does not exist.'
diff --git a/console/language/console-en/translations/theme.download.yml b/console/language/console-en/translations/theme.download.yml
deleted file mode 100644
index 6fff4d5d08..0000000000
--- a/console/language/console-en/translations/theme.download.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-description: 'Download theme in application'
-arguments:
-  version: 'Theme version i.e 1.x-dev'
-  theme: 'the Theme name'
-options:
-  composer: 'Use --composer option for manage the theme download with Composer'
-messages:
-  no-releases: 'There aren''t any releases for theme "%s"'
-  getting-releases: 'Getting releases for theme "%s"'
-  downloading: 'Downloading theme "%s" release "%s"'
-  downloaded: 'Theme "%s" version "%s" was downloaded successfully at "%s"'
-  select-release: 'Please select your favorite release'
-  outside-drupal: 'Drupal root can''t be determined. Use --root to set the destination, current folder will be used instead of.'
-  error-creating-folder: 'Error creating folder "%s", please check your permissions'
-examples:
-  - description: 'Download theme specifying name and version'
-    execution: |
-      drupal theme:download  Alina 7.x-1.2
diff --git a/console/language/console-en/translations/theme.install.yml b/console/language/console-en/translations/theme.install.yml
deleted file mode 100644
index 44605a78d3..0000000000
--- a/console/language/console-en/translations/theme.install.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-description: 'Install theme or themes in the application'
-questions:
-  theme: 'theme name (press <return> to stop adding themes)'
-  invalid-theme: 'Invalid theme "%s"'
-options:
-  theme: 'theme or themes to be installed should be separated by a space'
-  overwrite-config: 'Overwrite active configuration if necessary'
-  set-default: 'Set theme as default theme'
-messages:
-  no-themes: 'You must provide theme or themes to install.'
-  themes-missing: 'Unable to install themes "%s" due they aren''t available'
-  theme-missing: 'Unable to install theme "%s" due is not available'
-  missing-dependencies: 'Unable to install themes "%s" due to missing dependencies "%s"'
-  themes-nothing: 'Nothing to do. All themes "%s" are already installed'
-  theme-nothing: 'Nothing to do. Theme "%s" is already installed'
-  dependencies: 'There are some unmet dependencies: "%s"?'
-  theme-success: 'The "%s" theme has been installed successfully'
-  themes-success: 'The themes "%s" were installed successfully'
-  theme-default-success: 'The "%s" theme has been installed successfully as default theme'
-  disabled-themes: 'Only uninstalled themes will be listed in autocomplete'
-  invalid-theme-default: 'Option default is only valid for one theme'
-examples:
-  - description: 'Install theme specifying the name'
-    execution: |
-      drupal theme:install  mytheme
diff --git a/console/language/console-en/translations/theme.path.yml b/console/language/console-en/translations/theme.path.yml
deleted file mode 100644
index 07a0593a2a..0000000000
--- a/console/language/console-en/translations/theme.path.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-description: 'Returns the relative path to the theme (or absolute path)'
-arguments:
-  theme: 'Theme name'
-options:
-  absolute: 'Return theme absolute path'
-messages:
-  invalid-theme-name: 'Invalid theme name: "%s"'
-examples:
-  - description: 'Get the path of mytheme'
-    execution: |
-      drupal theme:path  mytheme
diff --git a/console/language/console-en/translations/theme.uninstall.yml b/console/language/console-en/translations/theme.uninstall.yml
deleted file mode 100644
index 36cb10a11d..0000000000
--- a/console/language/console-en/translations/theme.uninstall.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-description: 'Uninstall theme or themes in the application'
-questions:
-  theme: 'theme name (press <return> to stop adding themes)'
-  invalid-theme: 'Invalid theme "%s"'
-options:
-  theme: 'theme or themes to be uninstalled should be separated by a space'
-messages:
-  no-themes: 'You must provide theme or themes to uninstall.'
-  themes-missing: 'Unable to uninstall themes "%s", because they aren''t available'
-  theme-missing: 'Unable to uninstall theme "%s", because it is not available'
-  missing-dependencies: 'Unable to uninstall themes "%s" due to missing dependencies "%s"'
-  themes-nothing: 'Nothing to do. All themes are already uninstalled: "%s"'
-  theme-nothing: 'Nothing to do. Theme "%s" is already uninstalled'
-  dependencies: 'There are some unmet dependencies: "%s"?'
-  theme-success: 'The "%s" theme has been uninstalled successfully'
-  themes-success: 'The themes "%s" were uninstalled successfully'
-  installed-themes: 'Only installed themes will be listed in autocomplete'
-  invalid-theme-default: 'Option default is only valid for one theme'
-  error-default-theme:  'Theme "%s" is the default theme and cannot be uninstalled.'
-  error-admin-theme: 'Theme "%s" is the admin theme and cannot be uninstalled.'
-examples:
-  - description: 'Uninstall theme specifying the name'
-    execution: |
-      drupal theme:uninstall  mytheme
diff --git a/console/language/console-en/translations/update.entities.yml b/console/language/console-en/translations/update.entities.yml
deleted file mode 100644
index 9be4b3631f..0000000000
--- a/console/language/console-en/translations/update.entities.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-description: 'Applying Entity Updates'
-messages:
-  start: 'Starting the entity updates'
-  end: 'Finished the entity updates'
-  error: 'Error on Entity Updates'
-examples:
-  - description: 'Update entities'
-    execution: |
-      drupal update:entities
diff --git a/console/language/console-en/translations/update.execute.yml b/console/language/console-en/translations/update.execute.yml
deleted file mode 100644
index 590a12153c..0000000000
--- a/console/language/console-en/translations/update.execute.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-description: 'Execute a specific Update N function in a module, or execute all'
-arguments:
-  module: 'Module name'
-  update-n: 'Specific Update N function to be executed'
-messages:
-  no-module-updates: 'There aren''t updates available for module "%s"'
-  executing-update: 'Executing update function "%s" of module "%s"'
-  module-update-function-not-found: 'Module "%s" doesn''t have a function update for "%s"'
-  executing-required-previous-updates: 'Executing required previous updates'
-  no-pending-updates: 'There aren''t updates available'
-examples:
-  - description: 'Execute all updates'
-    execution: |
-      drupal update:execute
-  - description: 'Execute updates for system module'
-    execution: |
-      drupal update:execute system
diff --git a/console/language/console-en/translations/user.create.yml b/console/language/console-en/translations/user.create.yml
deleted file mode 100644
index 0adc15a1c2..0000000000
--- a/console/language/console-en/translations/user.create.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-description: 'Create users for the application'
-help: 'The <info>user:create</info> command helps you create users.'
-welcome: 'Welcome to the Drupal user create'
-options:
-  username: 'User name to be created'
-  password: 'User password'
-  roles: 'User roles'
-  email: 'User email'
-  status: 'User status'
-questions:
-  username: 'User name to be created'
-  password: 'User password (empty to auto-generate)'
-  roles: 'User roles (empty to skip)'
-  email: 'User e-mail (empty to skip)'
-  status: 'User status (empty to skip)'
-messages:
-  user-id: 'User ID'
-  username: 'Username'
-  password: 'Password'
-  email: 'E-mail'
-  roles: 'Roles'
-  created: 'Created'
-  status: 'Status'
-  user-created: 'User "%s" was created successfully'
-examples:
-  - description: 'Create user specifying username, password, role, email and status'
-    execution: |
-      drupal user:create  john p455w0rd  \
-        --roles='authenticated'  \
-        --email="john@anexusit.com"  \
-        --status="1"
-  - description: 'Create admin user specifying username, password, role, email and status'
-    execution: |
-      drupal user:create  doe p455w0rd  \
-        --roles='administrator'  \
-        --email="doe@anexusit.com"  \
-        --status="1"
diff --git a/console/language/console-en/translations/user.delete.yml b/console/language/console-en/translations/user.delete.yml
deleted file mode 100644
index f186320f90..0000000000
--- a/console/language/console-en/translations/user.delete.yml
+++ /dev/null
@@ -1,29 +0,0 @@
-description: 'Delete users from the application'
-help: 'The <info>user:delete</info> command helps you delete users.'
-welcome: 'Welcome to the Drupal user delete'
-options:
-  user: 'User name/id to be deleted'
-  roles: 'Users with the listed roles to be deleted'
-questions:
-  user: 'User name/id to be deleted (empty to skip)'
-  roles: 'Select role(s) associated with users to be deleted'
-messages:
-  user-id: 'User ID'
-  username: 'Username'
-  user-deleted: 'User "%s" was deleted successfully'
-  users-deleted: '"%s" users were deleted successfully'
-errors:
-  invalid-user: 'User name/id "%s" is invalid'
-examples:
-  - description: 'Delete user with the id number 2'
-    execution: |
-      drupal user:delete  \
-        --user="2"
-  - description: 'Delete user with the username "jmolivas"'
-    execution: |
-      drupal user:delete  \
-        --user="jmolivas"
-  - description: 'Delete users with the role "authenticated"'
-    execution: |
-      drupal user:delete  \
-        --role="authenticated"
diff --git a/console/language/console-en/translations/user.login.clear.attempts.yml b/console/language/console-en/translations/user.login.clear.attempts.yml
deleted file mode 100644
index 14402a60ab..0000000000
--- a/console/language/console-en/translations/user.login.clear.attempts.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-description: 'Clear failed login attempts for an account.'
-help: 'The <info>user:login:clear:attempts</info> command resets the failed login attempts for an account.'
-arguments:
-    user: 'User name/id.'
-questions:
-    user: 'Enter User name/id'
-messages:
-    successful: 'Login attempts were successfully cleared for user: "%s".'
-errors:
-    invalid-user: 'Cannot load user entity using: "%s".'
-    no-flood: 'No flood table on the system.'
diff --git a/console/language/console-en/translations/user.login.url.yml b/console/language/console-en/translations/user.login.url.yml
deleted file mode 100644
index 174e98e220..0000000000
--- a/console/language/console-en/translations/user.login.url.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-description: 'Returns a one-time user login url.'
-options:
-  user: 'User name/id.'
-messages:
-  url: 'One-time login for "%s"'
-questions:
-  user: 'Enter User name/id'
-errors:
-  invalid-user: 'Cannot load user entity using: "%s".'
-examples:
-  - description: 'Get one time login url for user id 10'
-    execution: drupal user:login:url  10
-  - description: 'Get one time login url for username jmolivas'
-    execution: drupal user:login:url jmolivas
\ No newline at end of file
diff --git a/console/language/console-en/translations/user.password.hash.yml b/console/language/console-en/translations/user.password.hash.yml
deleted file mode 100644
index a37d9a00aa..0000000000
--- a/console/language/console-en/translations/user.password.hash.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-description: 'Generate a hash from a plaintext password.'
-help: 'The <info>password:hash</info> command helps you to generate hashes password from plaintext passwords.'
-welcome: 'Welcome to the Drupal password hash generator'
-options:
-  password: 'Password(s) in text format'
-questions:
-  invalid-pass: 'Password can''t be empty'
-  password: 'Enter password'
-  other-password: 'Other password (press <return> to stop adding passwords)'
-messages:
-  password: Password
-  hash: Hash
-errors: null
-examples:
-  - description: 'Get hash of the word "p455w0rd"'
-    execution: |
-      drupal user:password:hash p455w0rd
diff --git a/console/language/console-en/translations/user.password.reset.yml b/console/language/console-en/translations/user.password.reset.yml
deleted file mode 100644
index 60f63ea0da..0000000000
--- a/console/language/console-en/translations/user.password.reset.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-description: 'Reset password for a specific user.'
-help: 'The <info>password:reset</info> command helps you to reset password for a specific user.'
-welcome: 'Welcome to the Drupal password reset'
-options:
-  password: 'Password in text format'
-  user: 'User name/id'
-questions:
-  invalid-user: 'Invalid user name/id "%s", user id must be an integer'
-  invalid-pass: 'Password can''t be empty'
-  user: 'Enter User name/id'
-  password: 'Enter password'
-  other-password: 'Other password (press <return> to stop adding passwords)'
-messages:
-  reset-successful: 'Password was updated successfully for user id "%s"'
-errors:
-  invalid-user: 'Invalid user name/id "%s"'
-  empty-password: 'Password can not be empty'
-examples:
-  - description: 'Update password specifying the user id and the new password'
-    execution: |
-      drupal user:password:reset 2 p455w0rd
-  - description: 'Update password specifying the user jmolivas and the new password'
-    execution: |
-      drupal user:password:reset jmolivas p455w0rd
diff --git a/console/language/console-en/translations/user.role.yml b/console/language/console-en/translations/user.role.yml
deleted file mode 100644
index 36fff83d48..0000000000
--- a/console/language/console-en/translations/user.role.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-description: 'Adds/removes a role for a given user'
-help: 'The <info>user:role</info> command helps you to add or remove a role to a user.'
-welcome: 'Welcome to the Drupal user rule'
-arguments:
-  roles: 'Roles to add or remove. Please provide the machine name (only one)'
-  operation: 'Add or remove'
-  user: 'The affected user (only one)'
-messages:
-  bad-arguments: 'Some arguments are missing! Please, provide all the following arguments: [add/remove] [username] [role]'
-  no-user-found: 'Username "%s" was not found!'
-  no-role-found: 'Role "%s" was not found!'
-  add-success: 'Username %1$s was added role %2$s sucessfully'
-  remove-success: 'Username %1$s was removed role %2$s sucessfully'
-examples:
-  - description: 'Add administrator role to the user admin specifying the username and the role'
-    execution: |
-      drupal user:role  add admin administrator
-  - description: 'Remove administrator role from the user admin specifying the username and the role'
-    execution: |
-      drupal user:role  remove admin administrator
diff --git a/console/language/console-en/translations/views.disable.yml b/console/language/console-en/translations/views.disable.yml
deleted file mode 100644
index e8dd354d25..0000000000
--- a/console/language/console-en/translations/views.disable.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-description: 'Disable a View'
-messages:
-  disabled-successfully: 'View "%s" was disabled successfully.'
-examples:
-  - description: 'Disable content view'
-    execution: |
-      drupal views:disable  content
-  - description: 'Disable frontpage view'
-    execution: |
-      drupal views:disable  frontpage
diff --git a/console/language/console-en/translations/views.enable.yml b/console/language/console-en/translations/views.enable.yml
deleted file mode 100644
index 4531768b7f..0000000000
--- a/console/language/console-en/translations/views.enable.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-description: 'Enable a View'
-messages:
-  enabled-successfully: 'View "%s" was enabled successfully.'
-examples:
-  - description: 'Enable content view'
-    execution: |
-      drupal views:enable  content
-  - description: 'Enable frontpage view'
-    execution: |
-      drupal views:enable  frontpage
diff --git a/vendor/alchemy/zippy/composer.json b/vendor/alchemy/zippy/composer.json
index 0305868f39..0e21e8d1bf 100644
--- a/vendor/alchemy/zippy/composer.json
+++ b/vendor/alchemy/zippy/composer.json
@@ -13,17 +13,17 @@
     ],
     "require": {
         "php": ">=5.5",
-        "ext-mbstring": "*",
         "doctrine/collections": "~1.0",
-        "symfony/filesystem": "^2.0.5|^3.0",
-        "symfony/process": "^2.1|^3.0"
+        "symfony/filesystem": "^2.0.5 || ^3.0 || ^4.0",
+        "symfony/process": "^2.1 || ^3.0 || ^4.0",
+        "symfony/polyfill-mbstring": "^1.3"
     },
     "require-dev": {
         "ext-zip": "*",
         "guzzle/guzzle": "~3.0",
         "guzzlehttp/guzzle": "^6.0",
-        "phpunit/phpunit": "^4.0|^5.0",
-        "symfony/finder": "^2.0.5|^3.0"
+        "phpunit/phpunit": "^4.0 || ^5.0",
+        "symfony/finder": "^2.0.5 || ^3.0 || ^4.0"
     },
     "suggest": {
         "ext-zip": "To use the ZipExtensionAdapter",
diff --git a/vendor/alchemy/zippy/src/Adapter/ZipExtensionAdapter.php b/vendor/alchemy/zippy/src/Adapter/ZipExtensionAdapter.php
index e55ed342cf..d29972907b 100644
--- a/vendor/alchemy/zippy/src/Adapter/ZipExtensionAdapter.php
+++ b/vendor/alchemy/zippy/src/Adapter/ZipExtensionAdapter.php
@@ -300,7 +300,7 @@ private function addEntries(ResourceInterface $zipResource, array $files, $recur
     }
 
     /**
-     * @info is public for PHP 5.3 compatibility, should be private
+     * Is public for PHP 5.3 compatibility, should be private
      *
      * @param \ZipArchive $zip
      * @param string      $file
@@ -316,7 +316,7 @@ public function checkReadability(\ZipArchive $zip, $file)
     }
 
     /**
-     * @info is public for PHP 5.3 compatibility, should be private
+     * Is public for PHP 5.3 compatibility, should be private
      *
      * @param \ZipArchive $zip
      * @param string      $file
@@ -332,7 +332,7 @@ public function addFileToZip(\ZipArchive $zip, $file)
     }
 
     /**
-     * @info is public for PHP 5.3 compatibility, should be private
+     * Is public for PHP 5.3 compatibility, should be private
      *
      * @param \ZipArchive $zip
      * @param string      $dir
diff --git a/vendor/alchemy/zippy/src/Archive/Archive.php b/vendor/alchemy/zippy/src/Archive/Archive.php
index 088b476f86..f7ece48532 100644
--- a/vendor/alchemy/zippy/src/Archive/Archive.php
+++ b/vendor/alchemy/zippy/src/Archive/Archive.php
@@ -79,7 +79,7 @@ public function count()
      *
      * This method implements the IteratorAggregate interface.
      *
-     * @return \ArrayIterator An iterator
+     * @return \ArrayIterator|MemberInterface[] An iterator
      */
     public function getIterator()
     {
@@ -117,12 +117,12 @@ public function removeMembers($sources)
     /**
      * @inheritdoc
      */
-        public function extract($toDirectory)
-        {
+    public function extract($toDirectory)
+    {
         $this->adapter->extract($this->resource, $toDirectory);
 
         return $this;
-        }
+    }
 
     /**
      * @inheritdoc
diff --git a/vendor/alchemy/zippy/src/Archive/Member.php b/vendor/alchemy/zippy/src/Archive/Member.php
index 7ae2adbee4..24691c6d6e 100644
--- a/vendor/alchemy/zippy/src/Archive/Member.php
+++ b/vendor/alchemy/zippy/src/Archive/Member.php
@@ -134,7 +134,7 @@ public function extract($to = null, $overwrite = false)
     {
         $this->adapter->extractMembers($this->resource, $this->location, $to, (bool) $overwrite);
 
-        return new \SplFileInfo(sprintf('%s%s', rtrim(null === $to ? getcwd() : $to, '/'), $this->location));
+        return new \SplFileInfo(sprintf('%s/%s', rtrim(null === $to ? getcwd() : $to, '/'), ltrim($this->location, '/')));
     }
 
     /**
diff --git a/vendor/alchemy/zippy/src/Parser/ZipOutputParser.php b/vendor/alchemy/zippy/src/Parser/ZipOutputParser.php
index 11f98a27d6..a0ca6a229f 100644
--- a/vendor/alchemy/zippy/src/Parser/ZipOutputParser.php
+++ b/vendor/alchemy/zippy/src/Parser/ZipOutputParser.php
@@ -60,10 +60,21 @@ public function parseFileListing($output)
                 continue;
             }
 
+            $mtime = \DateTime::createFromFormat($this->dateFormat, $chunks[2]);
+
+            if ($mtime === false) {
+                // See https://github.com/alchemy-fr/Zippy/issues/111#issuecomment-251668427
+                $mtime = \DateTime::createFromFormat('H:i Y-m-d', $chunks[2]);
+            }
+
+            if ($mtime === false) {
+                $mtime = new \DateTime($chunks[2]);
+            }
+
             $members[] = array(
                 'location'  => $chunks[3],
                 'size'      => $chunks[1],
-                'mtime'     => \DateTime::createFromFormat($this->dateFormat, $chunks[2]),
+                'mtime'     => $mtime,
                 'is_dir'    => '/' === substr($chunks[3], -1)
             );
         }
diff --git a/vendor/alchemy/zippy/src/Zippy.php b/vendor/alchemy/zippy/src/Zippy.php
index 70defe997c..e9f2f66063 100644
--- a/vendor/alchemy/zippy/src/Zippy.php
+++ b/vendor/alchemy/zippy/src/Zippy.php
@@ -80,9 +80,11 @@ public function create($path, $files = null, $recursive = true, $type = null)
      *
      * @throws RuntimeException In case of failure
      */
-    public function open($path)
+    public function open($path, $type = null)
     {
-        $type = $this->guessAdapterExtension($path);
+        if (null === $type) {
+            $type = $this->guessAdapterExtension($path);
+        }
 
         try {
             return $this
diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php
index 08c79e186c..20c8bdc6fa 100644
--- a/vendor/composer/autoload_classmap.php
+++ b/vendor/composer/autoload_classmap.php
@@ -930,6 +930,7 @@
     'Drupal\\Console\\Command\\Config\\EditCommand' => $vendorDir . '/drupal/console/src/Command/Config/EditCommand.php',
     'Drupal\\Console\\Command\\Config\\ExportCommand' => $vendorDir . '/drupal/console/src/Command/Config/ExportCommand.php',
     'Drupal\\Console\\Command\\Config\\ExportContentTypeCommand' => $vendorDir . '/drupal/console/src/Command/Config/ExportContentTypeCommand.php',
+    'Drupal\\Console\\Command\\Config\\ExportEntityCommand' => $vendorDir . '/drupal/console/src/Command/Config/ExportEntityCommand.php',
     'Drupal\\Console\\Command\\Config\\ExportSingleCommand' => $vendorDir . '/drupal/console/src/Command/Config/ExportSingleCommand.php',
     'Drupal\\Console\\Command\\Config\\ExportViewCommand' => $vendorDir . '/drupal/console/src/Command/Config/ExportViewCommand.php',
     'Drupal\\Console\\Command\\Config\\ImportCommand' => $vendorDir . '/drupal/console/src/Command/Config/ImportCommand.php',
@@ -968,6 +969,7 @@
     'Drupal\\Console\\Command\\Debug\\EntityCommand' => $vendorDir . '/drupal/console/src/Command/Debug/EntityCommand.php',
     'Drupal\\Console\\Command\\Debug\\EventCommand' => $vendorDir . '/drupal/console/src/Command/Debug/EventCommand.php',
     'Drupal\\Console\\Command\\Debug\\FeaturesCommand' => $vendorDir . '/drupal/console/src/Command/Debug/FeaturesCommand.php',
+    'Drupal\\Console\\Command\\Debug\\HookCommand' => $vendorDir . '/drupal/console/src/Command/Debug/HookCommand.php',
     'Drupal\\Console\\Command\\Debug\\ImageStylesCommand' => $vendorDir . '/drupal/console/src/Command/Debug/ImageStylesCommand.php',
     'Drupal\\Console\\Command\\Debug\\LibrariesCommand' => $vendorDir . '/drupal/console/src/Command/Debug/LibrariesCommand.php',
     'Drupal\\Console\\Command\\Debug\\MigrateCommand' => $vendorDir . '/drupal/console/src/Command/Debug/MigrateCommand.php',
@@ -984,6 +986,7 @@
     'Drupal\\Console\\Command\\Debug\\ThemeCommand' => $vendorDir . '/drupal/console/src/Command/Debug/ThemeCommand.php',
     'Drupal\\Console\\Command\\Debug\\ThemeKeysCommand' => $vendorDir . '/drupal/console/src/Command/Debug/ThemeKeysCommand.php',
     'Drupal\\Console\\Command\\Debug\\UpdateCommand' => $vendorDir . '/drupal/console/src/Command/Debug/UpdateCommand.php',
+    'Drupal\\Console\\Command\\Debug\\UpdateComposerCommand' => $vendorDir . '/drupal/console/src/Command/Debug/UpdateComposerCommand.php',
     'Drupal\\Console\\Command\\Debug\\UserCommand' => $vendorDir . '/drupal/console/src/Command/Debug/UserCommand.php',
     'Drupal\\Console\\Command\\Debug\\ViewsCommand' => $vendorDir . '/drupal/console/src/Command/Debug/ViewsCommand.php',
     'Drupal\\Console\\Command\\Debug\\ViewsPluginsCommand' => $vendorDir . '/drupal/console/src/Command/Debug/ViewsPluginsCommand.php',
@@ -995,9 +998,11 @@
     'Drupal\\Console\\Command\\Field\\InfoCommand' => $vendorDir . '/drupal/console/src/Command/Field/InfoCommand.php',
     'Drupal\\Console\\Command\\Generate\\AjaxCommand' => $vendorDir . '/drupal/console/src/Command/Generate/AjaxCommand.php',
     'Drupal\\Console\\Command\\Generate\\AuthenticationProviderCommand' => $vendorDir . '/drupal/console/src/Command/Generate/AuthenticationProviderCommand.php',
+    'Drupal\\Console\\Command\\Generate\\BlockTypeCommand' => $vendorDir . '/drupal/console/src/Command/Generate/BlockTypeCommand.php',
     'Drupal\\Console\\Command\\Generate\\BreakPointCommand' => $vendorDir . '/drupal/console/src/Command/Generate/BreakPointCommand.php',
     'Drupal\\Console\\Command\\Generate\\CacheContextCommand' => $vendorDir . '/drupal/console/src/Command/Generate/CacheContextCommand.php',
     'Drupal\\Console\\Command\\Generate\\CommandCommand' => $vendorDir . '/drupal/console/src/Command/Generate/CommandCommand.php',
+    'Drupal\\Console\\Command\\Generate\\ComposerCommand' => $vendorDir . '/drupal/console/src/Command/Generate/ComposerCommand.php',
     'Drupal\\Console\\Command\\Generate\\ConfigFormBaseCommand' => $vendorDir . '/drupal/console/src/Command/Generate/ConfigFormBaseCommand.php',
     'Drupal\\Console\\Command\\Generate\\ControllerCommand' => $vendorDir . '/drupal/console/src/Command/Generate/ControllerCommand.php',
     'Drupal\\Console\\Command\\Generate\\EntityBundleCommand' => $vendorDir . '/drupal/console/src/Command/Generate/EntityBundleCommand.php',
@@ -1016,6 +1021,7 @@
     'Drupal\\Console\\Command\\Generate\\PluginBlockCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginBlockCommand.php',
     'Drupal\\Console\\Command\\Generate\\PluginCKEditorButtonCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginCKEditorButtonCommand.php',
     'Drupal\\Console\\Command\\Generate\\PluginConditionCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginConditionCommand.php',
+    'Drupal\\Console\\Command\\Generate\\PluginDerivativeCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginDerivativeCommand.php',
     'Drupal\\Console\\Command\\Generate\\PluginFieldCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginFieldCommand.php',
     'Drupal\\Console\\Command\\Generate\\PluginFieldFormatterCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginFieldFormatterCommand.php',
     'Drupal\\Console\\Command\\Generate\\PluginFieldTypeCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginFieldTypeCommand.php',
@@ -1023,19 +1029,25 @@
     'Drupal\\Console\\Command\\Generate\\PluginImageEffectCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginImageEffectCommand.php',
     'Drupal\\Console\\Command\\Generate\\PluginImageFormatterCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginImageFormatterCommand.php',
     'Drupal\\Console\\Command\\Generate\\PluginMailCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginMailCommand.php',
+    'Drupal\\Console\\Command\\Generate\\PluginMigrateDataParserCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginMigrateDataParserCommand.php',
     'Drupal\\Console\\Command\\Generate\\PluginMigrateProcessCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginMigrateProcessCommand.php',
     'Drupal\\Console\\Command\\Generate\\PluginMigrateSourceCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginMigrateSourceCommand.php',
+    'Drupal\\Console\\Command\\Generate\\PluginQueueWorkerCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginQueueWorkerCommand.php',
     'Drupal\\Console\\Command\\Generate\\PluginRestResourceCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginRestResourceCommand.php',
     'Drupal\\Console\\Command\\Generate\\PluginRulesActionCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginRulesActionCommand.php',
+    'Drupal\\Console\\Command\\Generate\\PluginRulesConditionCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginRulesConditionCommand.php',
+    'Drupal\\Console\\Command\\Generate\\PluginRulesDataprocessorCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginRulesDataprocessorCommand.php',
     'Drupal\\Console\\Command\\Generate\\PluginSkeletonCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginSkeletonCommand.php',
     'Drupal\\Console\\Command\\Generate\\PluginTypeAnnotationCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginTypeAnnotationCommand.php',
     'Drupal\\Console\\Command\\Generate\\PluginTypeYamlCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginTypeYamlCommand.php',
+    'Drupal\\Console\\Command\\Generate\\PluginValidationConstraintCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginValidationConstraintCommand.php',
     'Drupal\\Console\\Command\\Generate\\PluginViewsFieldCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginViewsFieldCommand.php',
     'Drupal\\Console\\Command\\Generate\\PostUpdateCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PostUpdateCommand.php',
     'Drupal\\Console\\Command\\Generate\\ProfileCommand' => $vendorDir . '/drupal/console/src/Command/Generate/ProfileCommand.php',
     'Drupal\\Console\\Command\\Generate\\RouteSubscriberCommand' => $vendorDir . '/drupal/console/src/Command/Generate/RouteSubscriberCommand.php',
     'Drupal\\Console\\Command\\Generate\\ServiceCommand' => $vendorDir . '/drupal/console/src/Command/Generate/ServiceCommand.php',
     'Drupal\\Console\\Command\\Generate\\ThemeCommand' => $vendorDir . '/drupal/console/src/Command/Generate/ThemeCommand.php',
+    'Drupal\\Console\\Command\\Generate\\ThemeSettingCommand' => $vendorDir . '/drupal/console/src/Command/Generate/ThemeSettingCommand.php',
     'Drupal\\Console\\Command\\Generate\\TwigExtensionCommand' => $vendorDir . '/drupal/console/src/Command/Generate/TwigExtensionCommand.php',
     'Drupal\\Console\\Command\\Generate\\UpdateCommand' => $vendorDir . '/drupal/console/src/Command/Generate/UpdateCommand.php',
     'Drupal\\Console\\Command\\Image\\StylesFlushCommand' => $vendorDir . '/drupal/console/src/Command/Image/StylesFlushCommand.php',
@@ -1061,6 +1073,7 @@
     'Drupal\\Console\\Command\\Role\\NewCommand' => $vendorDir . '/drupal/console/src/Command/Role/NewCommand.php',
     'Drupal\\Console\\Command\\Router\\RebuildCommand' => $vendorDir . '/drupal/console/src/Command/Router/RebuildCommand.php',
     'Drupal\\Console\\Command\\ServerCommand' => $vendorDir . '/drupal/console/src/Command/ServerCommand.php',
+    'Drupal\\Console\\Command\\Service\\OverrideCommand' => $vendorDir . '/drupal/console/src/Command/Service/OverrideCommand.php',
     'Drupal\\Console\\Command\\Shared\\ArrayInputTrait' => $vendorDir . '/drupal/console/src/Command/Shared/ArrayInputTrait.php',
     'Drupal\\Console\\Command\\Shared\\ConfirmationTrait' => $vendorDir . '/drupal/console/src/Command/Shared/ConfirmationTrait.php',
     'Drupal\\Console\\Command\\Shared\\ConnectTrait' => $vendorDir . '/drupal/console/src/Command/Shared/ConnectTrait.php',
@@ -1081,7 +1094,9 @@
     'Drupal\\Console\\Command\\Shared\\ServicesTrait' => $vendorDir . '/drupal/console/src/Command/Shared/ServicesTrait.php',
     'Drupal\\Console\\Command\\Shared\\ThemeBreakpointTrait' => $vendorDir . '/drupal/console/src/Command/Shared/ThemeBreakpointTrait.php',
     'Drupal\\Console\\Command\\Shared\\ThemeRegionTrait' => $vendorDir . '/drupal/console/src/Command/Shared/ThemeRegionTrait.php',
+    'Drupal\\Console\\Command\\Shared\\ThemeTrait' => $vendorDir . '/drupal/console/src/Command/Shared/ThemeTrait.php',
     'Drupal\\Console\\Command\\Shared\\TranslationTrait' => $vendorDir . '/drupal/console/src/Command/Shared/TranslationTrait.php',
+    'Drupal\\Console\\Command\\Shared\\UpdateTrait' => $vendorDir . '/drupal/console/src/Command/Shared/UpdateTrait.php',
     'Drupal\\Console\\Command\\ShellCommand' => $vendorDir . '/drupal/console/src/Command/ShellCommand.php',
     'Drupal\\Console\\Command\\Site\\ImportLocalCommand' => $vendorDir . '/drupal/console/src/Command/Site/ImportLocalCommand.php',
     'Drupal\\Console\\Command\\Site\\InstallCommand' => $vendorDir . '/drupal/console/src/Command/Site/InstallCommand.php',
@@ -1108,11 +1123,14 @@
     'Drupal\\Console\\Command\\User\\PasswordHashCommand' => $vendorDir . '/drupal/console/src/Command/User/PasswordHashCommand.php',
     'Drupal\\Console\\Command\\User\\PasswordResetCommand' => $vendorDir . '/drupal/console/src/Command/User/PasswordResetCommand.php',
     'Drupal\\Console\\Command\\User\\RoleCommand' => $vendorDir . '/drupal/console/src/Command/User/RoleCommand.php',
+    'Drupal\\Console\\Command\\User\\UnblockCommand' => $vendorDir . '/drupal/console/src/Command/User/UnblockCommand.php',
     'Drupal\\Console\\Command\\User\\UserBase' => $vendorDir . '/drupal/console/src/Command/User/UserBase.php',
     'Drupal\\Console\\Command\\Views\\DisableCommand' => $vendorDir . '/drupal/console/src/Command/Views/DisableCommand.php',
     'Drupal\\Console\\Command\\Views\\EnableCommand' => $vendorDir . '/drupal/console/src/Command/Views/EnableCommand.php',
+    'Drupal\\Console\\Composer\\Plugin\\DrupalConsoleInstaller' => $vendorDir . '/drupal/console-extend-plugin/src/DrupalConsoleInstaller.php',
     'Drupal\\Console\\Composer\\Plugin\\Extender' => $vendorDir . '/drupal/console-extend-plugin/src/Extender.php',
     'Drupal\\Console\\Composer\\Plugin\\ExtenderManager' => $vendorDir . '/drupal/console-extend-plugin/src/ExtenderManager.php',
+    'Drupal\\Console\\Composer\\Plugin\\Installer' => $vendorDir . '/drupal/console-extend-plugin/src/Installer.php',
     'Drupal\\Console\\Core\\Application' => $vendorDir . '/drupal/console-core/src/Application.php',
     'Drupal\\Console\\Core\\Bootstrap\\DrupalConsoleCore' => $vendorDir . '/drupal/console-core/src/Bootstrap/DrupalConsoleCore.php',
     'Drupal\\Console\\Core\\Bootstrap\\DrupalInterface' => $vendorDir . '/drupal/console-core/src/Bootstrap/DrupalInterface.php',
@@ -1143,7 +1161,10 @@
     'Drupal\\Console\\Core\\Descriptor\\TextDescriptor' => $vendorDir . '/drupal/console-core/src/Descriptor/TextDescriptor.php',
     'Drupal\\Console\\Core\\EventSubscriber\\CallCommandListener' => $vendorDir . '/drupal/console-core/src/EventSubscriber/CallCommandListener.php',
     'Drupal\\Console\\Core\\EventSubscriber\\DefaultValueEventListener' => $vendorDir . '/drupal/console-core/src/EventSubscriber/DefaultValueEventListener.php',
+    'Drupal\\Console\\Core\\EventSubscriber\\MaintenanceModeListener' => $vendorDir . '/drupal/console-core/src/EventSubscriber/MaintenanceModeListener.php',
     'Drupal\\Console\\Core\\EventSubscriber\\RemoveMessagesListener' => $vendorDir . '/drupal/console-core/src/EventSubscriber/RemoveMessagesListener.php',
+    'Drupal\\Console\\Core\\EventSubscriber\\SaveStatisticsListener' => $vendorDir . '/drupal/console-core/src/EventSubscriber/SaveStatisticsListener.php',
+    'Drupal\\Console\\Core\\EventSubscriber\\SendStatisticsListener' => $vendorDir . '/drupal/console-core/src/EventSubscriber/SendStatisticsListener.php',
     'Drupal\\Console\\Core\\EventSubscriber\\ShowGenerateChainListener' => $vendorDir . '/drupal/console-core/src/EventSubscriber/ShowGenerateChainListener.php',
     'Drupal\\Console\\Core\\EventSubscriber\\ShowGenerateCountCodeLinesListener' => $vendorDir . '/drupal/console-core/src/EventSubscriber/ShowGenerateCountCodeLinesListener.php',
     'Drupal\\Console\\Core\\EventSubscriber\\ShowGenerateInlineListener' => $vendorDir . '/drupal/console-core/src/EventSubscriber/ShowGenerateInlineListener.php',
@@ -1180,9 +1201,11 @@
     'Drupal\\Console\\Extension\\Manager' => $vendorDir . '/drupal/console/src/Extension/Manager.php',
     'Drupal\\Console\\Generator\\AjaxCommandGenerator' => $vendorDir . '/drupal/console/src/Generator/AjaxCommandGenerator.php',
     'Drupal\\Console\\Generator\\AuthenticationProviderGenerator' => $vendorDir . '/drupal/console/src/Generator/AuthenticationProviderGenerator.php',
+    'Drupal\\Console\\Generator\\BlockTypeGenerator' => $vendorDir . '/drupal/console/src/Generator/BlockTypeGenerator.php',
     'Drupal\\Console\\Generator\\BreakPointGenerator' => $vendorDir . '/drupal/console/src/Generator/BreakPointGenerator.php',
     'Drupal\\Console\\Generator\\CacheContextGenerator' => $vendorDir . '/drupal/console/src/Generator/CacheContextGenerator.php',
     'Drupal\\Console\\Generator\\CommandGenerator' => $vendorDir . '/drupal/console/src/Generator/CommandGenerator.php',
+    'Drupal\\Console\\Generator\\ComposerGenerator' => $vendorDir . '/drupal/console/src/Generator/ComposerGenerator.php',
     'Drupal\\Console\\Generator\\ControllerGenerator' => $vendorDir . '/drupal/console/src/Generator/ControllerGenerator.php',
     'Drupal\\Console\\Generator\\DatabaseSettingsGenerator' => $vendorDir . '/drupal/console/src/Generator/DatabaseSettingsGenerator.php',
     'Drupal\\Console\\Generator\\DockerInitGenerator' => $vendorDir . '/drupal/console/src/Generator/DockerInitGenerator.php',
@@ -1201,25 +1224,32 @@
     'Drupal\\Console\\Generator\\PluginBlockGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginBlockGenerator.php',
     'Drupal\\Console\\Generator\\PluginCKEditorButtonGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginCKEditorButtonGenerator.php',
     'Drupal\\Console\\Generator\\PluginConditionGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginConditionGenerator.php',
+    'Drupal\\Console\\Generator\\PluginDerivativeGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginDerivativeGenerator.php',
     'Drupal\\Console\\Generator\\PluginFieldFormatterGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginFieldFormatterGenerator.php',
     'Drupal\\Console\\Generator\\PluginFieldTypeGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginFieldTypeGenerator.php',
     'Drupal\\Console\\Generator\\PluginFieldWidgetGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginFieldWidgetGenerator.php',
     'Drupal\\Console\\Generator\\PluginImageEffectGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginImageEffectGenerator.php',
     'Drupal\\Console\\Generator\\PluginImageFormatterGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginImageFormatterGenerator.php',
     'Drupal\\Console\\Generator\\PluginMailGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginMailGenerator.php',
+    'Drupal\\Console\\Generator\\PluginMigrateDataParserGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginMigrateDataParserGenerator.php',
     'Drupal\\Console\\Generator\\PluginMigrateProcessGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginMigrateProcessGenerator.php',
     'Drupal\\Console\\Generator\\PluginMigrateSourceGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginMigrateSourceGenerator.php',
+    'Drupal\\Console\\Generator\\PluginQueueWorkerGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginQueueWorkerGenerator.php',
     'Drupal\\Console\\Generator\\PluginRestResourceGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginRestResourceGenerator.php',
     'Drupal\\Console\\Generator\\PluginRulesActionGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginRulesActionGenerator.php',
+    'Drupal\\Console\\Generator\\PluginRulesConditionGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginRulesConditionGenerator.php',
+    'Drupal\\Console\\Generator\\PluginRulesDataprocessorGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginRulesDataprocessorGenerator.php',
     'Drupal\\Console\\Generator\\PluginSkeletonGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginSkeletonGenerator.php',
     'Drupal\\Console\\Generator\\PluginTypeAnnotationGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginTypeAnnotationGenerator.php',
     'Drupal\\Console\\Generator\\PluginTypeYamlGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginTypeYamlGenerator.php',
+    'Drupal\\Console\\Generator\\PluginValidationConstraintGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginValidationConstraintGenerator.php',
     'Drupal\\Console\\Generator\\PluginViewsFieldGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginViewsFieldGenerator.php',
     'Drupal\\Console\\Generator\\PostUpdateGenerator' => $vendorDir . '/drupal/console/src/Generator/PostUpdateGenerator.php',
     'Drupal\\Console\\Generator\\ProfileGenerator' => $vendorDir . '/drupal/console/src/Generator/ProfileGenerator.php',
     'Drupal\\Console\\Generator\\RouteSubscriberGenerator' => $vendorDir . '/drupal/console/src/Generator/RouteSubscriberGenerator.php',
     'Drupal\\Console\\Generator\\ServiceGenerator' => $vendorDir . '/drupal/console/src/Generator/ServiceGenerator.php',
     'Drupal\\Console\\Generator\\ThemeGenerator' => $vendorDir . '/drupal/console/src/Generator/ThemeGenerator.php',
+    'Drupal\\Console\\Generator\\ThemeSettingGenerator' => $vendorDir . '/drupal/console/src/Generator/ThemeSettingGenerator.php',
     'Drupal\\Console\\Generator\\TwigExtensionGenerator' => $vendorDir . '/drupal/console/src/Generator/TwigExtensionGenerator.php',
     'Drupal\\Console\\Generator\\UpdateGenerator' => $vendorDir . '/drupal/console/src/Generator/UpdateGenerator.php',
     'Drupal\\Console\\Override\\ConfigSubscriber' => $vendorDir . '/drupal/console/src/Override/ConfigSubscriber.php',
@@ -4467,6 +4497,7 @@
     'Symfony\\Component\\Config\\Definition\\BooleanNode' => $vendorDir . '/symfony/config/Definition/BooleanNode.php',
     'Symfony\\Component\\Config\\Definition\\Builder\\ArrayNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/ArrayNodeDefinition.php',
     'Symfony\\Component\\Config\\Definition\\Builder\\BooleanNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/BooleanNodeDefinition.php',
+    'Symfony\\Component\\Config\\Definition\\Builder\\BuilderAwareInterface' => $vendorDir . '/symfony/config/Definition/Builder/BuilderAwareInterface.php',
     'Symfony\\Component\\Config\\Definition\\Builder\\EnumNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/EnumNodeDefinition.php',
     'Symfony\\Component\\Config\\Definition\\Builder\\ExprBuilder' => $vendorDir . '/symfony/config/Definition/Builder/ExprBuilder.php',
     'Symfony\\Component\\Config\\Definition\\Builder\\FloatNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/FloatNodeDefinition.php',
@@ -4492,6 +4523,7 @@
     'Symfony\\Component\\Config\\Definition\\Exception\\InvalidConfigurationException' => $vendorDir . '/symfony/config/Definition/Exception/InvalidConfigurationException.php',
     'Symfony\\Component\\Config\\Definition\\Exception\\InvalidDefinitionException' => $vendorDir . '/symfony/config/Definition/Exception/InvalidDefinitionException.php',
     'Symfony\\Component\\Config\\Definition\\Exception\\InvalidTypeException' => $vendorDir . '/symfony/config/Definition/Exception/InvalidTypeException.php',
+    'Symfony\\Component\\Config\\Definition\\Exception\\TreeWithoutRootNodeException' => $vendorDir . '/symfony/config/Definition/Exception/TreeWithoutRootNodeException.php',
     'Symfony\\Component\\Config\\Definition\\Exception\\UnsetKeyException' => $vendorDir . '/symfony/config/Definition/Exception/UnsetKeyException.php',
     'Symfony\\Component\\Config\\Definition\\FloatNode' => $vendorDir . '/symfony/config/Definition/FloatNode.php',
     'Symfony\\Component\\Config\\Definition\\IntegerNode' => $vendorDir . '/symfony/config/Definition/IntegerNode.php',
@@ -4502,10 +4534,10 @@
     'Symfony\\Component\\Config\\Definition\\PrototypedArrayNode' => $vendorDir . '/symfony/config/Definition/PrototypedArrayNode.php',
     'Symfony\\Component\\Config\\Definition\\ScalarNode' => $vendorDir . '/symfony/config/Definition/ScalarNode.php',
     'Symfony\\Component\\Config\\Definition\\VariableNode' => $vendorDir . '/symfony/config/Definition/VariableNode.php',
-    'Symfony\\Component\\Config\\DependencyInjection\\ConfigCachePass' => $vendorDir . '/symfony/config/DependencyInjection/ConfigCachePass.php',
     'Symfony\\Component\\Config\\Exception\\FileLoaderImportCircularReferenceException' => $vendorDir . '/symfony/config/Exception/FileLoaderImportCircularReferenceException.php',
     'Symfony\\Component\\Config\\Exception\\FileLoaderLoadException' => $vendorDir . '/symfony/config/Exception/FileLoaderLoadException.php',
     'Symfony\\Component\\Config\\Exception\\FileLocatorFileNotFoundException' => $vendorDir . '/symfony/config/Exception/FileLocatorFileNotFoundException.php',
+    'Symfony\\Component\\Config\\Exception\\LoaderLoadException' => $vendorDir . '/symfony/config/Exception/LoaderLoadException.php',
     'Symfony\\Component\\Config\\FileLocator' => $vendorDir . '/symfony/config/FileLocator.php',
     'Symfony\\Component\\Config\\FileLocatorInterface' => $vendorDir . '/symfony/config/FileLocatorInterface.php',
     'Symfony\\Component\\Config\\Loader\\DelegatingLoader' => $vendorDir . '/symfony/config/Loader/DelegatingLoader.php',
@@ -4525,8 +4557,6 @@
     'Symfony\\Component\\Config\\Resource\\FileResource' => $vendorDir . '/symfony/config/Resource/FileResource.php',
     'Symfony\\Component\\Config\\Resource\\GlobResource' => $vendorDir . '/symfony/config/Resource/GlobResource.php',
     'Symfony\\Component\\Config\\Resource\\ReflectionClassResource' => $vendorDir . '/symfony/config/Resource/ReflectionClassResource.php',
-    'Symfony\\Component\\Config\\Resource\\ReflectionMethodHhvmWrapper' => $vendorDir . '/symfony/config/Resource/ReflectionClassResource.php',
-    'Symfony\\Component\\Config\\Resource\\ReflectionParameterHhvmWrapper' => $vendorDir . '/symfony/config/Resource/ReflectionClassResource.php',
     'Symfony\\Component\\Config\\Resource\\ResourceInterface' => $vendorDir . '/symfony/config/Resource/ResourceInterface.php',
     'Symfony\\Component\\Config\\Resource\\SelfCheckingResourceChecker' => $vendorDir . '/symfony/config/Resource/SelfCheckingResourceChecker.php',
     'Symfony\\Component\\Config\\Resource\\SelfCheckingResourceInterface' => $vendorDir . '/symfony/config/Resource/SelfCheckingResourceInterface.php',
@@ -4856,14 +4886,15 @@
     'Symfony\\Component\\Filesystem\\Exception\\FileNotFoundException' => $vendorDir . '/symfony/filesystem/Exception/FileNotFoundException.php',
     'Symfony\\Component\\Filesystem\\Exception\\IOException' => $vendorDir . '/symfony/filesystem/Exception/IOException.php',
     'Symfony\\Component\\Filesystem\\Exception\\IOExceptionInterface' => $vendorDir . '/symfony/filesystem/Exception/IOExceptionInterface.php',
+    'Symfony\\Component\\Filesystem\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/filesystem/Exception/InvalidArgumentException.php',
     'Symfony\\Component\\Filesystem\\Filesystem' => $vendorDir . '/symfony/filesystem/Filesystem.php',
-    'Symfony\\Component\\Filesystem\\LockHandler' => $vendorDir . '/symfony/filesystem/LockHandler.php',
     'Symfony\\Component\\Finder\\Comparator\\Comparator' => $vendorDir . '/symfony/finder/Comparator/Comparator.php',
     'Symfony\\Component\\Finder\\Comparator\\DateComparator' => $vendorDir . '/symfony/finder/Comparator/DateComparator.php',
     'Symfony\\Component\\Finder\\Comparator\\NumberComparator' => $vendorDir . '/symfony/finder/Comparator/NumberComparator.php',
     'Symfony\\Component\\Finder\\Exception\\AccessDeniedException' => $vendorDir . '/symfony/finder/Exception/AccessDeniedException.php',
-    'Symfony\\Component\\Finder\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/finder/Exception/ExceptionInterface.php',
+    'Symfony\\Component\\Finder\\Exception\\DirectoryNotFoundException' => $vendorDir . '/symfony/finder/Exception/DirectoryNotFoundException.php',
     'Symfony\\Component\\Finder\\Finder' => $vendorDir . '/symfony/finder/Finder.php',
+    'Symfony\\Component\\Finder\\Gitignore' => $vendorDir . '/symfony/finder/Gitignore.php',
     'Symfony\\Component\\Finder\\Glob' => $vendorDir . '/symfony/finder/Glob.php',
     'Symfony\\Component\\Finder\\Iterator\\CustomFilterIterator' => $vendorDir . '/symfony/finder/Iterator/CustomFilterIterator.php',
     'Symfony\\Component\\Finder\\Iterator\\DateRangeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/DateRangeFilterIterator.php',
@@ -4872,7 +4903,6 @@
     'Symfony\\Component\\Finder\\Iterator\\FileTypeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FileTypeFilterIterator.php',
     'Symfony\\Component\\Finder\\Iterator\\FilecontentFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FilecontentFilterIterator.php',
     'Symfony\\Component\\Finder\\Iterator\\FilenameFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FilenameFilterIterator.php',
-    'Symfony\\Component\\Finder\\Iterator\\FilterIterator' => $vendorDir . '/symfony/finder/Iterator/FilterIterator.php',
     'Symfony\\Component\\Finder\\Iterator\\MultiplePcreFilterIterator' => $vendorDir . '/symfony/finder/Iterator/MultiplePcreFilterIterator.php',
     'Symfony\\Component\\Finder\\Iterator\\PathFilterIterator' => $vendorDir . '/symfony/finder/Iterator/PathFilterIterator.php',
     'Symfony\\Component\\Finder\\Iterator\\RecursiveDirectoryIterator' => $vendorDir . '/symfony/finder/Iterator/RecursiveDirectoryIterator.php',
diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php
index 8540fd5538..cbad37edc3 100644
--- a/vendor/composer/autoload_static.php
+++ b/vendor/composer/autoload_static.php
@@ -1607,6 +1607,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Drupal\\Console\\Command\\Config\\EditCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Config/EditCommand.php',
         'Drupal\\Console\\Command\\Config\\ExportCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Config/ExportCommand.php',
         'Drupal\\Console\\Command\\Config\\ExportContentTypeCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Config/ExportContentTypeCommand.php',
+        'Drupal\\Console\\Command\\Config\\ExportEntityCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Config/ExportEntityCommand.php',
         'Drupal\\Console\\Command\\Config\\ExportSingleCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Config/ExportSingleCommand.php',
         'Drupal\\Console\\Command\\Config\\ExportViewCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Config/ExportViewCommand.php',
         'Drupal\\Console\\Command\\Config\\ImportCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Config/ImportCommand.php',
@@ -1645,6 +1646,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Drupal\\Console\\Command\\Debug\\EntityCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Debug/EntityCommand.php',
         'Drupal\\Console\\Command\\Debug\\EventCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Debug/EventCommand.php',
         'Drupal\\Console\\Command\\Debug\\FeaturesCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Debug/FeaturesCommand.php',
+        'Drupal\\Console\\Command\\Debug\\HookCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Debug/HookCommand.php',
         'Drupal\\Console\\Command\\Debug\\ImageStylesCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Debug/ImageStylesCommand.php',
         'Drupal\\Console\\Command\\Debug\\LibrariesCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Debug/LibrariesCommand.php',
         'Drupal\\Console\\Command\\Debug\\MigrateCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Debug/MigrateCommand.php',
@@ -1661,6 +1663,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Drupal\\Console\\Command\\Debug\\ThemeCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Debug/ThemeCommand.php',
         'Drupal\\Console\\Command\\Debug\\ThemeKeysCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Debug/ThemeKeysCommand.php',
         'Drupal\\Console\\Command\\Debug\\UpdateCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Debug/UpdateCommand.php',
+        'Drupal\\Console\\Command\\Debug\\UpdateComposerCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Debug/UpdateComposerCommand.php',
         'Drupal\\Console\\Command\\Debug\\UserCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Debug/UserCommand.php',
         'Drupal\\Console\\Command\\Debug\\ViewsCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Debug/ViewsCommand.php',
         'Drupal\\Console\\Command\\Debug\\ViewsPluginsCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Debug/ViewsPluginsCommand.php',
@@ -1672,9 +1675,11 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Drupal\\Console\\Command\\Field\\InfoCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Field/InfoCommand.php',
         'Drupal\\Console\\Command\\Generate\\AjaxCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/AjaxCommand.php',
         'Drupal\\Console\\Command\\Generate\\AuthenticationProviderCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/AuthenticationProviderCommand.php',
+        'Drupal\\Console\\Command\\Generate\\BlockTypeCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/BlockTypeCommand.php',
         'Drupal\\Console\\Command\\Generate\\BreakPointCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/BreakPointCommand.php',
         'Drupal\\Console\\Command\\Generate\\CacheContextCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/CacheContextCommand.php',
         'Drupal\\Console\\Command\\Generate\\CommandCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/CommandCommand.php',
+        'Drupal\\Console\\Command\\Generate\\ComposerCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/ComposerCommand.php',
         'Drupal\\Console\\Command\\Generate\\ConfigFormBaseCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/ConfigFormBaseCommand.php',
         'Drupal\\Console\\Command\\Generate\\ControllerCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/ControllerCommand.php',
         'Drupal\\Console\\Command\\Generate\\EntityBundleCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/EntityBundleCommand.php',
@@ -1693,6 +1698,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Drupal\\Console\\Command\\Generate\\PluginBlockCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginBlockCommand.php',
         'Drupal\\Console\\Command\\Generate\\PluginCKEditorButtonCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginCKEditorButtonCommand.php',
         'Drupal\\Console\\Command\\Generate\\PluginConditionCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginConditionCommand.php',
+        'Drupal\\Console\\Command\\Generate\\PluginDerivativeCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginDerivativeCommand.php',
         'Drupal\\Console\\Command\\Generate\\PluginFieldCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginFieldCommand.php',
         'Drupal\\Console\\Command\\Generate\\PluginFieldFormatterCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginFieldFormatterCommand.php',
         'Drupal\\Console\\Command\\Generate\\PluginFieldTypeCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginFieldTypeCommand.php',
@@ -1700,19 +1706,25 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Drupal\\Console\\Command\\Generate\\PluginImageEffectCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginImageEffectCommand.php',
         'Drupal\\Console\\Command\\Generate\\PluginImageFormatterCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginImageFormatterCommand.php',
         'Drupal\\Console\\Command\\Generate\\PluginMailCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginMailCommand.php',
+        'Drupal\\Console\\Command\\Generate\\PluginMigrateDataParserCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginMigrateDataParserCommand.php',
         'Drupal\\Console\\Command\\Generate\\PluginMigrateProcessCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginMigrateProcessCommand.php',
         'Drupal\\Console\\Command\\Generate\\PluginMigrateSourceCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginMigrateSourceCommand.php',
+        'Drupal\\Console\\Command\\Generate\\PluginQueueWorkerCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginQueueWorkerCommand.php',
         'Drupal\\Console\\Command\\Generate\\PluginRestResourceCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginRestResourceCommand.php',
         'Drupal\\Console\\Command\\Generate\\PluginRulesActionCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginRulesActionCommand.php',
+        'Drupal\\Console\\Command\\Generate\\PluginRulesConditionCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginRulesConditionCommand.php',
+        'Drupal\\Console\\Command\\Generate\\PluginRulesDataprocessorCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginRulesDataprocessorCommand.php',
         'Drupal\\Console\\Command\\Generate\\PluginSkeletonCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginSkeletonCommand.php',
         'Drupal\\Console\\Command\\Generate\\PluginTypeAnnotationCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginTypeAnnotationCommand.php',
         'Drupal\\Console\\Command\\Generate\\PluginTypeYamlCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginTypeYamlCommand.php',
+        'Drupal\\Console\\Command\\Generate\\PluginValidationConstraintCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginValidationConstraintCommand.php',
         'Drupal\\Console\\Command\\Generate\\PluginViewsFieldCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginViewsFieldCommand.php',
         'Drupal\\Console\\Command\\Generate\\PostUpdateCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PostUpdateCommand.php',
         'Drupal\\Console\\Command\\Generate\\ProfileCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/ProfileCommand.php',
         'Drupal\\Console\\Command\\Generate\\RouteSubscriberCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/RouteSubscriberCommand.php',
         'Drupal\\Console\\Command\\Generate\\ServiceCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/ServiceCommand.php',
         'Drupal\\Console\\Command\\Generate\\ThemeCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/ThemeCommand.php',
+        'Drupal\\Console\\Command\\Generate\\ThemeSettingCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/ThemeSettingCommand.php',
         'Drupal\\Console\\Command\\Generate\\TwigExtensionCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/TwigExtensionCommand.php',
         'Drupal\\Console\\Command\\Generate\\UpdateCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/UpdateCommand.php',
         'Drupal\\Console\\Command\\Image\\StylesFlushCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Image/StylesFlushCommand.php',
@@ -1738,6 +1750,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Drupal\\Console\\Command\\Role\\NewCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Role/NewCommand.php',
         'Drupal\\Console\\Command\\Router\\RebuildCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Router/RebuildCommand.php',
         'Drupal\\Console\\Command\\ServerCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/ServerCommand.php',
+        'Drupal\\Console\\Command\\Service\\OverrideCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Service/OverrideCommand.php',
         'Drupal\\Console\\Command\\Shared\\ArrayInputTrait' => __DIR__ . '/..' . '/drupal/console/src/Command/Shared/ArrayInputTrait.php',
         'Drupal\\Console\\Command\\Shared\\ConfirmationTrait' => __DIR__ . '/..' . '/drupal/console/src/Command/Shared/ConfirmationTrait.php',
         'Drupal\\Console\\Command\\Shared\\ConnectTrait' => __DIR__ . '/..' . '/drupal/console/src/Command/Shared/ConnectTrait.php',
@@ -1758,7 +1771,9 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Drupal\\Console\\Command\\Shared\\ServicesTrait' => __DIR__ . '/..' . '/drupal/console/src/Command/Shared/ServicesTrait.php',
         'Drupal\\Console\\Command\\Shared\\ThemeBreakpointTrait' => __DIR__ . '/..' . '/drupal/console/src/Command/Shared/ThemeBreakpointTrait.php',
         'Drupal\\Console\\Command\\Shared\\ThemeRegionTrait' => __DIR__ . '/..' . '/drupal/console/src/Command/Shared/ThemeRegionTrait.php',
+        'Drupal\\Console\\Command\\Shared\\ThemeTrait' => __DIR__ . '/..' . '/drupal/console/src/Command/Shared/ThemeTrait.php',
         'Drupal\\Console\\Command\\Shared\\TranslationTrait' => __DIR__ . '/..' . '/drupal/console/src/Command/Shared/TranslationTrait.php',
+        'Drupal\\Console\\Command\\Shared\\UpdateTrait' => __DIR__ . '/..' . '/drupal/console/src/Command/Shared/UpdateTrait.php',
         'Drupal\\Console\\Command\\ShellCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/ShellCommand.php',
         'Drupal\\Console\\Command\\Site\\ImportLocalCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Site/ImportLocalCommand.php',
         'Drupal\\Console\\Command\\Site\\InstallCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Site/InstallCommand.php',
@@ -1785,11 +1800,14 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Drupal\\Console\\Command\\User\\PasswordHashCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/User/PasswordHashCommand.php',
         'Drupal\\Console\\Command\\User\\PasswordResetCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/User/PasswordResetCommand.php',
         'Drupal\\Console\\Command\\User\\RoleCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/User/RoleCommand.php',
+        'Drupal\\Console\\Command\\User\\UnblockCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/User/UnblockCommand.php',
         'Drupal\\Console\\Command\\User\\UserBase' => __DIR__ . '/..' . '/drupal/console/src/Command/User/UserBase.php',
         'Drupal\\Console\\Command\\Views\\DisableCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Views/DisableCommand.php',
         'Drupal\\Console\\Command\\Views\\EnableCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Views/EnableCommand.php',
+        'Drupal\\Console\\Composer\\Plugin\\DrupalConsoleInstaller' => __DIR__ . '/..' . '/drupal/console-extend-plugin/src/DrupalConsoleInstaller.php',
         'Drupal\\Console\\Composer\\Plugin\\Extender' => __DIR__ . '/..' . '/drupal/console-extend-plugin/src/Extender.php',
         'Drupal\\Console\\Composer\\Plugin\\ExtenderManager' => __DIR__ . '/..' . '/drupal/console-extend-plugin/src/ExtenderManager.php',
+        'Drupal\\Console\\Composer\\Plugin\\Installer' => __DIR__ . '/..' . '/drupal/console-extend-plugin/src/Installer.php',
         'Drupal\\Console\\Core\\Application' => __DIR__ . '/..' . '/drupal/console-core/src/Application.php',
         'Drupal\\Console\\Core\\Bootstrap\\DrupalConsoleCore' => __DIR__ . '/..' . '/drupal/console-core/src/Bootstrap/DrupalConsoleCore.php',
         'Drupal\\Console\\Core\\Bootstrap\\DrupalInterface' => __DIR__ . '/..' . '/drupal/console-core/src/Bootstrap/DrupalInterface.php',
@@ -1820,7 +1838,10 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Drupal\\Console\\Core\\Descriptor\\TextDescriptor' => __DIR__ . '/..' . '/drupal/console-core/src/Descriptor/TextDescriptor.php',
         'Drupal\\Console\\Core\\EventSubscriber\\CallCommandListener' => __DIR__ . '/..' . '/drupal/console-core/src/EventSubscriber/CallCommandListener.php',
         'Drupal\\Console\\Core\\EventSubscriber\\DefaultValueEventListener' => __DIR__ . '/..' . '/drupal/console-core/src/EventSubscriber/DefaultValueEventListener.php',
+        'Drupal\\Console\\Core\\EventSubscriber\\MaintenanceModeListener' => __DIR__ . '/..' . '/drupal/console-core/src/EventSubscriber/MaintenanceModeListener.php',
         'Drupal\\Console\\Core\\EventSubscriber\\RemoveMessagesListener' => __DIR__ . '/..' . '/drupal/console-core/src/EventSubscriber/RemoveMessagesListener.php',
+        'Drupal\\Console\\Core\\EventSubscriber\\SaveStatisticsListener' => __DIR__ . '/..' . '/drupal/console-core/src/EventSubscriber/SaveStatisticsListener.php',
+        'Drupal\\Console\\Core\\EventSubscriber\\SendStatisticsListener' => __DIR__ . '/..' . '/drupal/console-core/src/EventSubscriber/SendStatisticsListener.php',
         'Drupal\\Console\\Core\\EventSubscriber\\ShowGenerateChainListener' => __DIR__ . '/..' . '/drupal/console-core/src/EventSubscriber/ShowGenerateChainListener.php',
         'Drupal\\Console\\Core\\EventSubscriber\\ShowGenerateCountCodeLinesListener' => __DIR__ . '/..' . '/drupal/console-core/src/EventSubscriber/ShowGenerateCountCodeLinesListener.php',
         'Drupal\\Console\\Core\\EventSubscriber\\ShowGenerateInlineListener' => __DIR__ . '/..' . '/drupal/console-core/src/EventSubscriber/ShowGenerateInlineListener.php',
@@ -1857,9 +1878,11 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Drupal\\Console\\Extension\\Manager' => __DIR__ . '/..' . '/drupal/console/src/Extension/Manager.php',
         'Drupal\\Console\\Generator\\AjaxCommandGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/AjaxCommandGenerator.php',
         'Drupal\\Console\\Generator\\AuthenticationProviderGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/AuthenticationProviderGenerator.php',
+        'Drupal\\Console\\Generator\\BlockTypeGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/BlockTypeGenerator.php',
         'Drupal\\Console\\Generator\\BreakPointGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/BreakPointGenerator.php',
         'Drupal\\Console\\Generator\\CacheContextGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/CacheContextGenerator.php',
         'Drupal\\Console\\Generator\\CommandGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/CommandGenerator.php',
+        'Drupal\\Console\\Generator\\ComposerGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/ComposerGenerator.php',
         'Drupal\\Console\\Generator\\ControllerGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/ControllerGenerator.php',
         'Drupal\\Console\\Generator\\DatabaseSettingsGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/DatabaseSettingsGenerator.php',
         'Drupal\\Console\\Generator\\DockerInitGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/DockerInitGenerator.php',
@@ -1878,25 +1901,32 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Drupal\\Console\\Generator\\PluginBlockGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginBlockGenerator.php',
         'Drupal\\Console\\Generator\\PluginCKEditorButtonGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginCKEditorButtonGenerator.php',
         'Drupal\\Console\\Generator\\PluginConditionGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginConditionGenerator.php',
+        'Drupal\\Console\\Generator\\PluginDerivativeGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginDerivativeGenerator.php',
         'Drupal\\Console\\Generator\\PluginFieldFormatterGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginFieldFormatterGenerator.php',
         'Drupal\\Console\\Generator\\PluginFieldTypeGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginFieldTypeGenerator.php',
         'Drupal\\Console\\Generator\\PluginFieldWidgetGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginFieldWidgetGenerator.php',
         'Drupal\\Console\\Generator\\PluginImageEffectGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginImageEffectGenerator.php',
         'Drupal\\Console\\Generator\\PluginImageFormatterGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginImageFormatterGenerator.php',
         'Drupal\\Console\\Generator\\PluginMailGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginMailGenerator.php',
+        'Drupal\\Console\\Generator\\PluginMigrateDataParserGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginMigrateDataParserGenerator.php',
         'Drupal\\Console\\Generator\\PluginMigrateProcessGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginMigrateProcessGenerator.php',
         'Drupal\\Console\\Generator\\PluginMigrateSourceGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginMigrateSourceGenerator.php',
+        'Drupal\\Console\\Generator\\PluginQueueWorkerGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginQueueWorkerGenerator.php',
         'Drupal\\Console\\Generator\\PluginRestResourceGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginRestResourceGenerator.php',
         'Drupal\\Console\\Generator\\PluginRulesActionGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginRulesActionGenerator.php',
+        'Drupal\\Console\\Generator\\PluginRulesConditionGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginRulesConditionGenerator.php',
+        'Drupal\\Console\\Generator\\PluginRulesDataprocessorGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginRulesDataprocessorGenerator.php',
         'Drupal\\Console\\Generator\\PluginSkeletonGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginSkeletonGenerator.php',
         'Drupal\\Console\\Generator\\PluginTypeAnnotationGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginTypeAnnotationGenerator.php',
         'Drupal\\Console\\Generator\\PluginTypeYamlGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginTypeYamlGenerator.php',
+        'Drupal\\Console\\Generator\\PluginValidationConstraintGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginValidationConstraintGenerator.php',
         'Drupal\\Console\\Generator\\PluginViewsFieldGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginViewsFieldGenerator.php',
         'Drupal\\Console\\Generator\\PostUpdateGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PostUpdateGenerator.php',
         'Drupal\\Console\\Generator\\ProfileGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/ProfileGenerator.php',
         'Drupal\\Console\\Generator\\RouteSubscriberGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/RouteSubscriberGenerator.php',
         'Drupal\\Console\\Generator\\ServiceGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/ServiceGenerator.php',
         'Drupal\\Console\\Generator\\ThemeGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/ThemeGenerator.php',
+        'Drupal\\Console\\Generator\\ThemeSettingGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/ThemeSettingGenerator.php',
         'Drupal\\Console\\Generator\\TwigExtensionGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/TwigExtensionGenerator.php',
         'Drupal\\Console\\Generator\\UpdateGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/UpdateGenerator.php',
         'Drupal\\Console\\Override\\ConfigSubscriber' => __DIR__ . '/..' . '/drupal/console/src/Override/ConfigSubscriber.php',
@@ -5144,6 +5174,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Symfony\\Component\\Config\\Definition\\BooleanNode' => __DIR__ . '/..' . '/symfony/config/Definition/BooleanNode.php',
         'Symfony\\Component\\Config\\Definition\\Builder\\ArrayNodeDefinition' => __DIR__ . '/..' . '/symfony/config/Definition/Builder/ArrayNodeDefinition.php',
         'Symfony\\Component\\Config\\Definition\\Builder\\BooleanNodeDefinition' => __DIR__ . '/..' . '/symfony/config/Definition/Builder/BooleanNodeDefinition.php',
+        'Symfony\\Component\\Config\\Definition\\Builder\\BuilderAwareInterface' => __DIR__ . '/..' . '/symfony/config/Definition/Builder/BuilderAwareInterface.php',
         'Symfony\\Component\\Config\\Definition\\Builder\\EnumNodeDefinition' => __DIR__ . '/..' . '/symfony/config/Definition/Builder/EnumNodeDefinition.php',
         'Symfony\\Component\\Config\\Definition\\Builder\\ExprBuilder' => __DIR__ . '/..' . '/symfony/config/Definition/Builder/ExprBuilder.php',
         'Symfony\\Component\\Config\\Definition\\Builder\\FloatNodeDefinition' => __DIR__ . '/..' . '/symfony/config/Definition/Builder/FloatNodeDefinition.php',
@@ -5169,6 +5200,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Symfony\\Component\\Config\\Definition\\Exception\\InvalidConfigurationException' => __DIR__ . '/..' . '/symfony/config/Definition/Exception/InvalidConfigurationException.php',
         'Symfony\\Component\\Config\\Definition\\Exception\\InvalidDefinitionException' => __DIR__ . '/..' . '/symfony/config/Definition/Exception/InvalidDefinitionException.php',
         'Symfony\\Component\\Config\\Definition\\Exception\\InvalidTypeException' => __DIR__ . '/..' . '/symfony/config/Definition/Exception/InvalidTypeException.php',
+        'Symfony\\Component\\Config\\Definition\\Exception\\TreeWithoutRootNodeException' => __DIR__ . '/..' . '/symfony/config/Definition/Exception/TreeWithoutRootNodeException.php',
         'Symfony\\Component\\Config\\Definition\\Exception\\UnsetKeyException' => __DIR__ . '/..' . '/symfony/config/Definition/Exception/UnsetKeyException.php',
         'Symfony\\Component\\Config\\Definition\\FloatNode' => __DIR__ . '/..' . '/symfony/config/Definition/FloatNode.php',
         'Symfony\\Component\\Config\\Definition\\IntegerNode' => __DIR__ . '/..' . '/symfony/config/Definition/IntegerNode.php',
@@ -5179,10 +5211,10 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Symfony\\Component\\Config\\Definition\\PrototypedArrayNode' => __DIR__ . '/..' . '/symfony/config/Definition/PrototypedArrayNode.php',
         'Symfony\\Component\\Config\\Definition\\ScalarNode' => __DIR__ . '/..' . '/symfony/config/Definition/ScalarNode.php',
         'Symfony\\Component\\Config\\Definition\\VariableNode' => __DIR__ . '/..' . '/symfony/config/Definition/VariableNode.php',
-        'Symfony\\Component\\Config\\DependencyInjection\\ConfigCachePass' => __DIR__ . '/..' . '/symfony/config/DependencyInjection/ConfigCachePass.php',
         'Symfony\\Component\\Config\\Exception\\FileLoaderImportCircularReferenceException' => __DIR__ . '/..' . '/symfony/config/Exception/FileLoaderImportCircularReferenceException.php',
         'Symfony\\Component\\Config\\Exception\\FileLoaderLoadException' => __DIR__ . '/..' . '/symfony/config/Exception/FileLoaderLoadException.php',
         'Symfony\\Component\\Config\\Exception\\FileLocatorFileNotFoundException' => __DIR__ . '/..' . '/symfony/config/Exception/FileLocatorFileNotFoundException.php',
+        'Symfony\\Component\\Config\\Exception\\LoaderLoadException' => __DIR__ . '/..' . '/symfony/config/Exception/LoaderLoadException.php',
         'Symfony\\Component\\Config\\FileLocator' => __DIR__ . '/..' . '/symfony/config/FileLocator.php',
         'Symfony\\Component\\Config\\FileLocatorInterface' => __DIR__ . '/..' . '/symfony/config/FileLocatorInterface.php',
         'Symfony\\Component\\Config\\Loader\\DelegatingLoader' => __DIR__ . '/..' . '/symfony/config/Loader/DelegatingLoader.php',
@@ -5202,8 +5234,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Symfony\\Component\\Config\\Resource\\FileResource' => __DIR__ . '/..' . '/symfony/config/Resource/FileResource.php',
         'Symfony\\Component\\Config\\Resource\\GlobResource' => __DIR__ . '/..' . '/symfony/config/Resource/GlobResource.php',
         'Symfony\\Component\\Config\\Resource\\ReflectionClassResource' => __DIR__ . '/..' . '/symfony/config/Resource/ReflectionClassResource.php',
-        'Symfony\\Component\\Config\\Resource\\ReflectionMethodHhvmWrapper' => __DIR__ . '/..' . '/symfony/config/Resource/ReflectionClassResource.php',
-        'Symfony\\Component\\Config\\Resource\\ReflectionParameterHhvmWrapper' => __DIR__ . '/..' . '/symfony/config/Resource/ReflectionClassResource.php',
         'Symfony\\Component\\Config\\Resource\\ResourceInterface' => __DIR__ . '/..' . '/symfony/config/Resource/ResourceInterface.php',
         'Symfony\\Component\\Config\\Resource\\SelfCheckingResourceChecker' => __DIR__ . '/..' . '/symfony/config/Resource/SelfCheckingResourceChecker.php',
         'Symfony\\Component\\Config\\Resource\\SelfCheckingResourceInterface' => __DIR__ . '/..' . '/symfony/config/Resource/SelfCheckingResourceInterface.php',
@@ -5533,14 +5563,15 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Symfony\\Component\\Filesystem\\Exception\\FileNotFoundException' => __DIR__ . '/..' . '/symfony/filesystem/Exception/FileNotFoundException.php',
         'Symfony\\Component\\Filesystem\\Exception\\IOException' => __DIR__ . '/..' . '/symfony/filesystem/Exception/IOException.php',
         'Symfony\\Component\\Filesystem\\Exception\\IOExceptionInterface' => __DIR__ . '/..' . '/symfony/filesystem/Exception/IOExceptionInterface.php',
+        'Symfony\\Component\\Filesystem\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/filesystem/Exception/InvalidArgumentException.php',
         'Symfony\\Component\\Filesystem\\Filesystem' => __DIR__ . '/..' . '/symfony/filesystem/Filesystem.php',
-        'Symfony\\Component\\Filesystem\\LockHandler' => __DIR__ . '/..' . '/symfony/filesystem/LockHandler.php',
         'Symfony\\Component\\Finder\\Comparator\\Comparator' => __DIR__ . '/..' . '/symfony/finder/Comparator/Comparator.php',
         'Symfony\\Component\\Finder\\Comparator\\DateComparator' => __DIR__ . '/..' . '/symfony/finder/Comparator/DateComparator.php',
         'Symfony\\Component\\Finder\\Comparator\\NumberComparator' => __DIR__ . '/..' . '/symfony/finder/Comparator/NumberComparator.php',
         'Symfony\\Component\\Finder\\Exception\\AccessDeniedException' => __DIR__ . '/..' . '/symfony/finder/Exception/AccessDeniedException.php',
-        'Symfony\\Component\\Finder\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/finder/Exception/ExceptionInterface.php',
+        'Symfony\\Component\\Finder\\Exception\\DirectoryNotFoundException' => __DIR__ . '/..' . '/symfony/finder/Exception/DirectoryNotFoundException.php',
         'Symfony\\Component\\Finder\\Finder' => __DIR__ . '/..' . '/symfony/finder/Finder.php',
+        'Symfony\\Component\\Finder\\Gitignore' => __DIR__ . '/..' . '/symfony/finder/Gitignore.php',
         'Symfony\\Component\\Finder\\Glob' => __DIR__ . '/..' . '/symfony/finder/Glob.php',
         'Symfony\\Component\\Finder\\Iterator\\CustomFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/CustomFilterIterator.php',
         'Symfony\\Component\\Finder\\Iterator\\DateRangeFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/DateRangeFilterIterator.php',
@@ -5549,7 +5580,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Symfony\\Component\\Finder\\Iterator\\FileTypeFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/FileTypeFilterIterator.php',
         'Symfony\\Component\\Finder\\Iterator\\FilecontentFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/FilecontentFilterIterator.php',
         'Symfony\\Component\\Finder\\Iterator\\FilenameFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/FilenameFilterIterator.php',
-        'Symfony\\Component\\Finder\\Iterator\\FilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/FilterIterator.php',
         'Symfony\\Component\\Finder\\Iterator\\MultiplePcreFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/MultiplePcreFilterIterator.php',
         'Symfony\\Component\\Finder\\Iterator\\PathFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/PathFilterIterator.php',
         'Symfony\\Component\\Finder\\Iterator\\RecursiveDirectoryIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/RecursiveDirectoryIterator.php',
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 5c769559df..dcaaf3e86c 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -1,39 +1,39 @@
 [
     {
         "name": "alchemy/zippy",
-        "version": "0.4.3",
-        "version_normalized": "0.4.3.0",
+        "version": "0.4.9",
+        "version_normalized": "0.4.9.0",
         "source": {
             "type": "git",
             "url": "https://github.com/alchemy-fr/Zippy.git",
-            "reference": "5ffdc93de0af2770d396bf433d8b2667c77277ea"
+            "reference": "59fbeefb9a249122867ef25e53addfcce31850d7"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/alchemy-fr/Zippy/zipball/5ffdc93de0af2770d396bf433d8b2667c77277ea",
-            "reference": "5ffdc93de0af2770d396bf433d8b2667c77277ea",
+            "url": "https://api.github.com/repos/alchemy-fr/Zippy/zipball/59fbeefb9a249122867ef25e53addfcce31850d7",
+            "reference": "59fbeefb9a249122867ef25e53addfcce31850d7",
             "shasum": ""
         },
         "require": {
             "doctrine/collections": "~1.0",
-            "ext-mbstring": "*",
             "php": ">=5.5",
-            "symfony/filesystem": "^2.0.5|^3.0",
-            "symfony/process": "^2.1|^3.0"
+            "symfony/filesystem": "^2.0.5 || ^3.0 || ^4.0",
+            "symfony/polyfill-mbstring": "^1.3",
+            "symfony/process": "^2.1 || ^3.0 || ^4.0"
         },
         "require-dev": {
             "ext-zip": "*",
             "guzzle/guzzle": "~3.0",
             "guzzlehttp/guzzle": "^6.0",
-            "phpunit/phpunit": "^4.0|^5.0",
-            "symfony/finder": "^2.0.5|^3.0"
+            "phpunit/phpunit": "^4.0 || ^5.0",
+            "symfony/finder": "^2.0.5 || ^3.0 || ^4.0"
         },
         "suggest": {
             "ext-zip": "To use the ZipExtensionAdapter",
             "guzzle/guzzle": "To use the GuzzleTeleporter with Guzzle 3",
             "guzzlehttp/guzzle": "To use the GuzzleTeleporter with Guzzle 6"
         },
-        "time": "2016-11-03T16:10:31+00:00",
+        "time": "2018-02-22T13:58:36+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
@@ -1380,17 +1380,17 @@
     },
     {
         "name": "dflydev/dot-access-configuration",
-        "version": "v1.0.2",
-        "version_normalized": "1.0.2.0",
+        "version": "v1.0.3",
+        "version_normalized": "1.0.3.0",
         "source": {
             "type": "git",
             "url": "https://github.com/dflydev/dflydev-dot-access-configuration.git",
-            "reference": "ae6e7138b1d9063d343322cca63994ee1ac5161d"
+            "reference": "2e6eb0c8b8830b26bb23defcfc38d4276508fc49"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-configuration/zipball/ae6e7138b1d9063d343322cca63994ee1ac5161d",
-            "reference": "ae6e7138b1d9063d343322cca63994ee1ac5161d",
+            "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-configuration/zipball/2e6eb0c8b8830b26bb23defcfc38d4276508fc49",
+            "reference": "2e6eb0c8b8830b26bb23defcfc38d4276508fc49",
             "shasum": ""
         },
         "require": {
@@ -1404,7 +1404,7 @@
         "suggest": {
             "symfony/yaml": "Required for using the YAML Configuration Builders"
         },
-        "time": "2016-12-12T17:43:40+00:00",
+        "time": "2018-09-08T23:00:17+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
@@ -3190,38 +3190,37 @@
     },
     {
         "name": "drupal/console",
-        "version": "1.8.0",
-        "version_normalized": "1.8.0.0",
+        "version": "1.9.7",
+        "version_normalized": "1.9.7.0",
         "source": {
             "type": "git",
             "url": "https://github.com/hechoendrupal/drupal-console.git",
-            "reference": "368bbfa44dc6b957eb4db01977f7c39e83032d18"
+            "reference": "90053d30f52427edb4e4941a9063acb65b5a2c1e"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/hechoendrupal/drupal-console/zipball/368bbfa44dc6b957eb4db01977f7c39e83032d18",
-            "reference": "368bbfa44dc6b957eb4db01977f7c39e83032d18",
+            "url": "https://api.github.com/repos/hechoendrupal/drupal-console/zipball/90053d30f52427edb4e4941a9063acb65b5a2c1e",
+            "reference": "90053d30f52427edb4e4941a9063acb65b5a2c1e",
             "shasum": ""
         },
         "require": {
-            "alchemy/zippy": "0.4.3",
+            "alchemy/zippy": "~0.4",
             "composer/installers": "~1.0",
             "doctrine/annotations": "^1.2",
             "doctrine/collections": "^1.3",
-            "drupal/console-core": "1.8.0",
-            "drupal/console-extend-plugin": "~0",
-            "guzzlehttp/guzzle": "~6.1",
-            "php": "^5.5.9 || ^7.0",
+            "drupal/console-core": "1.9.7",
+            "drupal/console-extend-plugin": "~0.9.5",
+            "php": ">=7.0.8",
             "psy/psysh": "0.6.* || ~0.8",
-            "symfony/css-selector": "~2.8|~3.0",
-            "symfony/dom-crawler": "~2.8|~3.0",
-            "symfony/http-foundation": "~2.8|~3.0"
+            "symfony/css-selector": "~3.0|~4.0",
+            "symfony/dom-crawler": "~3.0|~4.0",
+            "symfony/http-foundation": "~3.0|~4.0"
         },
         "suggest": {
-            "symfony/thanks": "Thank your favorite PHP projects on Github using the CLI!",
-            "vlucas/phpdotenv": "Loads environment variables from .env to getenv(), $_ENV and $_SERVER automagically."
+            "symfony/thanks": "Thank your favorite PHP projects on GitHub using the CLI",
+            "vlucas/phpdotenv": "Loads environment variables from .env to getenv(), $_ENV and $_SERVER automagically"
         },
-        "time": "2018-03-21T20:50:16+00:00",
+        "time": "2020-11-30T02:09:53+00:00",
         "bin": [
             "bin/drupal"
         ],
@@ -3268,43 +3267,50 @@
             "development",
             "drupal",
             "symfony"
+        ],
+        "funding": [
+            {
+                "url": "https://opencollective.com/drupalconsole",
+                "type": "open_collective"
+            }
         ]
     },
     {
         "name": "drupal/console-core",
-        "version": "1.8.0",
-        "version_normalized": "1.8.0.0",
+        "version": "1.9.7",
+        "version_normalized": "1.9.7.0",
         "source": {
             "type": "git",
             "url": "https://github.com/hechoendrupal/drupal-console-core.git",
-            "reference": "bf1fb4a6f689377acec1694267f674178d28e5d1"
+            "reference": "ab3abc2631761c9588230ba88189d9ba4eb9ed63"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/hechoendrupal/drupal-console-core/zipball/bf1fb4a6f689377acec1694267f674178d28e5d1",
-            "reference": "bf1fb4a6f689377acec1694267f674178d28e5d1",
+            "url": "https://api.github.com/repos/hechoendrupal/drupal-console-core/zipball/ab3abc2631761c9588230ba88189d9ba4eb9ed63",
+            "reference": "ab3abc2631761c9588230ba88189d9ba4eb9ed63",
             "shasum": ""
         },
         "require": {
             "dflydev/dot-access-configuration": "^1.0",
-            "drupal/console-en": "1.8.0",
-            "php": "^5.5.9 || ^7.0",
+            "drupal/console-en": "1.9.7",
+            "guzzlehttp/guzzle": "~6.1",
+            "php": ">=7.0.8",
             "stecman/symfony-console-completion": "~0.7",
-            "symfony/config": "~2.8|~3.0",
-            "symfony/console": "~2.8|~3.0",
-            "symfony/debug": "~2.8|~3.0",
-            "symfony/dependency-injection": "~2.8|~3.0",
-            "symfony/event-dispatcher": "~2.8|~3.0",
-            "symfony/filesystem": "~2.8|~3.0",
-            "symfony/finder": "~2.8|~3.0",
-            "symfony/process": "~2.8|~3.0",
-            "symfony/translation": "~2.8|~3.0",
-            "symfony/yaml": "~2.8|~3.0",
-            "twig/twig": "^1.23.1",
+            "symfony/config": "~3.0|^4.4",
+            "symfony/console": "~3.0|^4.4",
+            "symfony/debug": "~3.0|^4.4",
+            "symfony/dependency-injection": "~3.0|^4.4",
+            "symfony/event-dispatcher": "~3.0|^4.4",
+            "symfony/filesystem": "~3.0|^4.4",
+            "symfony/finder": "~3.0|^4.4",
+            "symfony/process": "~3.0|^4.4",
+            "symfony/translation": "~3.0|^4.4",
+            "symfony/yaml": "~3.0|^4.4",
+            "twig/twig": "^1.38.2|^2.12.0",
             "webflo/drupal-finder": "^1.0",
             "webmozart/path-util": "^2.3"
         },
-        "time": "2018-03-21T19:33:23+00:00",
+        "time": "2020-11-30T01:45:57+00:00",
         "type": "library",
         "installation-source": "dist",
         "autoload": {
@@ -3330,10 +3336,6 @@
                 "email": "jesus.olivas@gmail.com",
                 "homepage": "http://jmolivas.com"
             },
-            {
-                "name": "Drupal Console Contributors",
-                "homepage": "https://github.com/hechoendrupal/DrupalConsole/graphs/contributors"
-            },
             {
                 "name": "Eduardo Garcia",
                 "email": "enzo@enzolutions.com",
@@ -3342,6 +3344,10 @@
             {
                 "name": "Omar Aguirre",
                 "email": "omersguchigu@gmail.com"
+            },
+            {
+                "name": "Drupal Console Contributors",
+                "homepage": "https://github.com/hechoendrupal/DrupalConsole/graphs/contributors"
             }
         ],
         "description": "Drupal Console Core",
@@ -3355,21 +3361,21 @@
     },
     {
         "name": "drupal/console-en",
-        "version": "1.8.0",
-        "version_normalized": "1.8.0.0",
+        "version": "v1.9.7",
+        "version_normalized": "1.9.7.0",
         "source": {
             "type": "git",
             "url": "https://github.com/hechoendrupal/drupal-console-en.git",
-            "reference": "ea956ddffab04f519a89858810e5f695b9def92b"
+            "reference": "7594601fff153c2799a62bd678ff80749baeee0c"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/hechoendrupal/drupal-console-en/zipball/ea956ddffab04f519a89858810e5f695b9def92b",
-            "reference": "ea956ddffab04f519a89858810e5f695b9def92b",
+            "url": "https://api.github.com/repos/hechoendrupal/drupal-console-en/zipball/7594601fff153c2799a62bd678ff80749baeee0c",
+            "reference": "7594601fff153c2799a62bd678ff80749baeee0c",
             "shasum": ""
         },
-        "time": "2018-03-21T19:16:27+00:00",
-        "type": "drupal-console-language",
+        "time": "2020-08-15T03:34:54+00:00",
+        "type": "library",
         "installation-source": "dist",
         "notification-url": "https://packagist.org/downloads/",
         "license": [
@@ -3386,10 +3392,6 @@
                 "email": "jesus.olivas@gmail.com",
                 "homepage": "http://jmolivas.com"
             },
-            {
-                "name": "Drupal Console Contributors",
-                "homepage": "https://github.com/hechoendrupal/DrupalConsole/graphs/contributors"
-            },
             {
                 "name": "Eduardo Garcia",
                 "email": "enzo@enzolutions.com",
@@ -3398,6 +3400,10 @@
             {
                 "name": "Omar Aguirre",
                 "email": "omersguchigu@gmail.com"
+            },
+            {
+                "name": "Drupal Console Contributors",
+                "homepage": "https://github.com/hechoendrupal/DrupalConsole/graphs/contributors"
             }
         ],
         "description": "Drupal Console English Language",
@@ -3411,25 +3417,26 @@
     },
     {
         "name": "drupal/console-extend-plugin",
-        "version": "0.9.2",
-        "version_normalized": "0.9.2.0",
+        "version": "0.9.5",
+        "version_normalized": "0.9.5.0",
         "source": {
             "type": "git",
             "url": "https://github.com/hechoendrupal/drupal-console-extend-plugin.git",
-            "reference": "f3bac233fd305359c33e96621443b3bd065555cc"
+            "reference": "eff6da99cfb5fe1fc60990672d2667c402eb3585"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/hechoendrupal/drupal-console-extend-plugin/zipball/f3bac233fd305359c33e96621443b3bd065555cc",
-            "reference": "f3bac233fd305359c33e96621443b3bd065555cc",
+            "url": "https://api.github.com/repos/hechoendrupal/drupal-console-extend-plugin/zipball/eff6da99cfb5fe1fc60990672d2667c402eb3585",
+            "reference": "eff6da99cfb5fe1fc60990672d2667c402eb3585",
             "shasum": ""
         },
         "require": {
-            "composer-plugin-api": "^1.0",
-            "symfony/finder": "~2.7|~3.0",
-            "symfony/yaml": "~2.7|~3.0"
+            "composer-plugin-api": "^1.0 || ^2.0",
+            "composer/installers": "^1.2",
+            "symfony/finder": "~3.0|^4.4",
+            "symfony/yaml": "~3.0|^4.4"
         },
-        "time": "2017-07-28T17:11:54+00:00",
+        "time": "2020-11-18T00:15:28+00:00",
         "type": "composer-plugin",
         "extra": {
             "class": "Drupal\\Console\\Composer\\Plugin\\Extender"
@@ -11578,31 +11585,31 @@
     },
     {
         "name": "stecman/symfony-console-completion",
-        "version": "0.8.0",
-        "version_normalized": "0.8.0.0",
+        "version": "0.11.0",
+        "version_normalized": "0.11.0.0",
         "source": {
             "type": "git",
             "url": "https://github.com/stecman/symfony-console-completion.git",
-            "reference": "cd738867503477e91dbe84173dfabd431c883431"
+            "reference": "a9502dab59405e275a9f264536c4e1cb61fc3518"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/stecman/symfony-console-completion/zipball/cd738867503477e91dbe84173dfabd431c883431",
-            "reference": "cd738867503477e91dbe84173dfabd431c883431",
+            "url": "https://api.github.com/repos/stecman/symfony-console-completion/zipball/a9502dab59405e275a9f264536c4e1cb61fc3518",
+            "reference": "a9502dab59405e275a9f264536c4e1cb61fc3518",
             "shasum": ""
         },
         "require": {
             "php": ">=5.3.2",
-            "symfony/console": "~2.3 || ~3.0 || ~4.0"
+            "symfony/console": "~2.3 || ~3.0 || ~4.0 || ~5.0"
         },
         "require-dev": {
             "phpunit/phpunit": "~4.8.36 || ~5.7 || ~6.4"
         },
-        "time": "2018-02-10T04:28:01+00:00",
+        "time": "2019-11-24T17:03:06+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "0.6.x-dev"
+                "dev-master": "0.10.x-dev"
             }
         },
         "installation-source": "dist",
@@ -11744,44 +11751,39 @@
     },
     {
         "name": "symfony/config",
-        "version": "v3.4.42",
-        "version_normalized": "3.4.42.0",
+        "version": "v4.4.17",
+        "version_normalized": "4.4.17.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/config.git",
-            "reference": "cd61db31cbd19cbe4ba9f6968f13c9076e1372ab"
+            "reference": "4da4a6b07cc7d8d7d3e29842bc9c20401d555065"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/config/zipball/cd61db31cbd19cbe4ba9f6968f13c9076e1372ab",
-            "reference": "cd61db31cbd19cbe4ba9f6968f13c9076e1372ab",
+            "url": "https://api.github.com/repos/symfony/config/zipball/4da4a6b07cc7d8d7d3e29842bc9c20401d555065",
+            "reference": "4da4a6b07cc7d8d7d3e29842bc9c20401d555065",
             "shasum": ""
         },
         "require": {
-            "php": "^5.5.9|>=7.0.8",
-            "symfony/filesystem": "~2.8|~3.0|~4.0",
+            "php": ">=7.1.3",
+            "symfony/filesystem": "^3.4|^4.0|^5.0",
             "symfony/polyfill-ctype": "~1.8"
         },
         "conflict": {
-            "symfony/dependency-injection": "<3.3",
-            "symfony/finder": "<3.3"
+            "symfony/finder": "<3.4"
         },
         "require-dev": {
-            "symfony/dependency-injection": "~3.3|~4.0",
-            "symfony/event-dispatcher": "~3.3|~4.0",
-            "symfony/finder": "~3.3|~4.0",
-            "symfony/yaml": "~3.0|~4.0"
+            "symfony/event-dispatcher": "^3.4|^4.0|^5.0",
+            "symfony/finder": "^3.4|^4.0|^5.0",
+            "symfony/messenger": "^4.1|^5.0",
+            "symfony/service-contracts": "^1.1|^2",
+            "symfony/yaml": "^3.4|^4.0|^5.0"
         },
         "suggest": {
             "symfony/yaml": "To use the yaml reference dumper"
         },
-        "time": "2020-05-22T10:56:48+00:00",
+        "time": "2020-11-16T11:15:53+00:00",
         "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "3.4-dev"
-            }
-        },
         "installation-source": "dist",
         "autoload": {
             "psr-4": {
@@ -11806,7 +11808,21 @@
             }
         ],
         "description": "Symfony Config Component",
-        "homepage": "https://symfony.com"
+        "homepage": "https://symfony.com",
+        "funding": [
+            {
+                "url": "https://symfony.com/sponsor",
+                "type": "custom"
+            },
+            {
+                "url": "https://github.com/fabpot",
+                "type": "github"
+            },
+            {
+                "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                "type": "tidelift"
+            }
+        ]
     },
     {
         "name": "symfony/console",
@@ -11884,29 +11900,24 @@
     },
     {
         "name": "symfony/css-selector",
-        "version": "v3.4.14",
-        "version_normalized": "3.4.14.0",
+        "version": "v4.4.17",
+        "version_normalized": "4.4.17.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/css-selector.git",
-            "reference": "edda5a6155000ff8c3a3f85ee5c421af93cca416"
+            "reference": "5e6efcb6e5d120249da366417e2517c55b50c931"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/css-selector/zipball/edda5a6155000ff8c3a3f85ee5c421af93cca416",
-            "reference": "edda5a6155000ff8c3a3f85ee5c421af93cca416",
+            "url": "https://api.github.com/repos/symfony/css-selector/zipball/5e6efcb6e5d120249da366417e2517c55b50c931",
+            "reference": "5e6efcb6e5d120249da366417e2517c55b50c931",
             "shasum": ""
         },
         "require": {
-            "php": "^5.5.9|>=7.0.8"
+            "php": ">=7.1.3"
         },
-        "time": "2018-07-26T09:06:28+00:00",
+        "time": "2020-10-28T20:42:29+00:00",
         "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "3.4-dev"
-            }
-        },
         "installation-source": "dist",
         "autoload": {
             "psr-4": {
@@ -11921,21 +11932,35 @@
             "MIT"
         ],
         "authors": [
-            {
-                "name": "Jean-François Simon",
-                "email": "jeanfrancois.simon@sensiolabs.com"
-            },
             {
                 "name": "Fabien Potencier",
                 "email": "fabien@symfony.com"
             },
+            {
+                "name": "Jean-François Simon",
+                "email": "jeanfrancois.simon@sensiolabs.com"
+            },
             {
                 "name": "Symfony Community",
                 "homepage": "https://symfony.com/contributors"
             }
         ],
         "description": "Symfony CssSelector Component",
-        "homepage": "https://symfony.com"
+        "homepage": "https://symfony.com",
+        "funding": [
+            {
+                "url": "https://symfony.com/sponsor",
+                "type": "custom"
+            },
+            {
+                "url": "https://github.com/fabpot",
+                "type": "github"
+            },
+            {
+                "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                "type": "tidelift"
+            }
+        ]
     },
     {
         "name": "symfony/debug",
@@ -12070,35 +12095,35 @@
     },
     {
         "name": "symfony/dom-crawler",
-        "version": "v3.4.14",
-        "version_normalized": "3.4.14.0",
+        "version": "v4.2.12",
+        "version_normalized": "4.2.12.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/dom-crawler.git",
-            "reference": "452bfc854b60134438e3824b159b0d24a5892331"
+            "reference": "ba1da8fb10291714b8db153fcf7ac515e1a217bb"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/452bfc854b60134438e3824b159b0d24a5892331",
-            "reference": "452bfc854b60134438e3824b159b0d24a5892331",
+            "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/ba1da8fb10291714b8db153fcf7ac515e1a217bb",
+            "reference": "ba1da8fb10291714b8db153fcf7ac515e1a217bb",
             "shasum": ""
         },
         "require": {
-            "php": "^5.5.9|>=7.0.8",
+            "php": "^7.1.3",
             "symfony/polyfill-ctype": "~1.8",
             "symfony/polyfill-mbstring": "~1.0"
         },
         "require-dev": {
-            "symfony/css-selector": "~2.8|~3.0|~4.0"
+            "symfony/css-selector": "~3.4|~4.0"
         },
         "suggest": {
             "symfony/css-selector": ""
         },
-        "time": "2018-07-26T10:03:52+00:00",
+        "time": "2019-06-13T10:57:15+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "3.4-dev"
+                "dev-master": "4.2-dev"
             }
         },
         "installation-source": "dist",
@@ -12194,24 +12219,24 @@
     },
     {
         "name": "symfony/filesystem",
-        "version": "v3.4.46",
-        "version_normalized": "3.4.46.0",
+        "version": "v4.4.17",
+        "version_normalized": "4.4.17.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/filesystem.git",
-            "reference": "e58d7841cddfed6e846829040dca2cca0ebbbbb3"
+            "reference": "17b83e36a911aefa2cfe04bbf6328ec4c040c1b2"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/filesystem/zipball/e58d7841cddfed6e846829040dca2cca0ebbbbb3",
-            "reference": "e58d7841cddfed6e846829040dca2cca0ebbbbb3",
+            "url": "https://api.github.com/repos/symfony/filesystem/zipball/17b83e36a911aefa2cfe04bbf6328ec4c040c1b2",
+            "reference": "17b83e36a911aefa2cfe04bbf6328ec4c040c1b2",
             "shasum": ""
         },
         "require": {
-            "php": "^5.5.9|>=7.0.8",
+            "php": ">=7.1.3",
             "symfony/polyfill-ctype": "~1.8"
         },
-        "time": "2020-10-24T10:57:07+00:00",
+        "time": "2020-11-11T22:20:15+00:00",
         "type": "library",
         "installation-source": "dist",
         "autoload": {
@@ -12255,23 +12280,23 @@
     },
     {
         "name": "symfony/finder",
-        "version": "v3.4.46",
-        "version_normalized": "3.4.46.0",
+        "version": "v4.4.17",
+        "version_normalized": "4.4.17.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/finder.git",
-            "reference": "4e1da3c110c52d868f8a9153b7de3ebc381fba78"
+            "reference": "9f1d1d883b79a91ef320c0c6e803494e042ef36e"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/finder/zipball/4e1da3c110c52d868f8a9153b7de3ebc381fba78",
-            "reference": "4e1da3c110c52d868f8a9153b7de3ebc381fba78",
+            "url": "https://api.github.com/repos/symfony/finder/zipball/9f1d1d883b79a91ef320c0c6e803494e042ef36e",
+            "reference": "9f1d1d883b79a91ef320c0c6e803494e042ef36e",
             "shasum": ""
         },
         "require": {
-            "php": "^5.5.9|>=7.0.8"
+            "php": ">=7.1.3"
         },
-        "time": "2020-10-24T10:57:07+00:00",
+        "time": "2020-11-17T19:45:34+00:00",
         "type": "library",
         "installation-source": "dist",
         "autoload": {
@@ -13374,8 +13399,8 @@
     },
     {
         "name": "symfony/var-dumper",
-        "version": "v3.4.46",
-        "version_normalized": "3.4.46.0",
+        "version": "v3.4.47",
+        "version_normalized": "3.4.47.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/var-dumper.git",
diff --git a/vendor/dflydev/dot-access-configuration/README.md b/vendor/dflydev/dot-access-configuration/README.md
index b20c581a3f..bf387c68ff 100644
--- a/vendor/dflydev/dot-access-configuration/README.md
+++ b/vendor/dflydev/dot-access-configuration/README.md
@@ -1,5 +1,4 @@
-Dot Access Configuration
-========================
+# Dot Access Configuration
 
 Given a deep data structure representing a configuration, access
 configuration by dot notation.
@@ -8,40 +7,37 @@ This library combines [dflydev/dot-access-data](https://github.com/dflydev/dflyd
 and [dflydev/placeholder-resolver](https://github.com/dflydev/dflydev-placeholder-resolver)
 to provide a complete configuration solution.
 
-
-Requirements
-------------
+## Requirements
 
  * PHP (5.3+)
  * [dflydev/dot-access-data](https://github.com/dflydev/dflydev-dot-access-data) (1.*)
  * [dflydev/placeholder-resolver](https://github.com/dflydev/dflydev-placeholder-resolver) (1.*)
  * [symfony/yaml](https://github.com/symfony/Yaml) (>2,<2.2) *(suggested)*
 
-
-Usage
------
+## Usage
 
 Generally one will use an implementation of `ConfigurationBuilderInterface`
 to build `ConfigurationInterface` instances. For example, to build a Configuration
 out of a YAML file, one would use the `YamlFileConfigurationBuilder`:
 
-    use Dflydev\DotAccessConfiguration\YamlFileConfigurationBuilder;
-    
-    $configurationBuilder = new YamlFileConfigurationBuilder('config/config.yml');
-    $configuration = $configurationBuilder->build();
+```php
+use Dflydev\DotAccessConfiguration\YamlFileConfigurationBuilder;
 
+$configurationBuilder = new YamlFileConfigurationBuilder('config/config.yml');
+$configuration = $configurationBuilder->build();
+```
 
 Once created, the Configuration instance behaves similarly to a Data
 instance from [dflydev/dot-access-data](https://github.com/dflydev/dflydev-dot-access-data).
 
-    $configuration->set('a.b.c', 'ABC');
-    $configuration->get('a.b.c');
-    $configuration->set('a.b.e', array('A', 'B', 'C'));
-    $configuration->append('a.b.e', 'D');
-
+```php
+$configuration->set('a.b.c', 'ABC');
+$configuration->get('a.b.c');
+$configuration->set('a.b.e', array('A', 'B', 'C'));
+$configuration->append('a.b.e', 'D');
+```
 
-Custom Configurations
----------------------
+## Custom Configurations
 
 Configuration Builders use Configuration Factories and Placeholder Resolver
 Factories behind the scenes in order to build a working configuration.
@@ -57,60 +53,59 @@ with the standard builders, one would need to implement
 `ConfigurationBuilderInterface`.
 
 If a Configuration is declared as follows:
+```php
+namespace MyProject;
 
-    namespace MyProject;
-    
-    use Dflydev\DotAccessConfiguration\Configuration;
-    
-    class MyConf extends Configuration
+use Dflydev\DotAccessConfiguration\Configuration;
+
+class MyConf extends Configuration
+{
+    public function someSpecialMethod()
     {
-        public function someSpecialMethod()
-        {
-            // Whatever you want here.
-        }
+        // Whatever you want here.
     }
+}
+```
 
 Create the following factory:
+```php
+namespace MyProject;
+
+use Dflydev\DotAccessConfiguration\ConfigurationFactoryInterface;
 
-    namespace MyProject;
-    
-    use Dflydev\DotAccessConfiguration\ConfigurationFactoryInterface;
-    
-    class MyConfFactory implements ConfigurationFactoryInterface
+class MyConfFactory implements ConfigurationFactoryInterface
+{
+    /**
+     * {@inheritdocs}
+     */
+    public function create()
     {
-        /**
-         * {@inheritdocs}
-         */
-        public function create()
-        {
-            return new MyConf;
-        }
+        return new MyConf;
     }
+}
+```
 
 To use the factory with any builder, inject it as follows:
+```php
+use Dflydev\DotAccessConfiguration\YamlFileConfigurationBuilder;
+use MyProject\MyConfFactory;
 
-    use Dflydev\DotAccessConfiguration\YamlFileConfigurationBuilder;
-    use MyProject\MyConfFactory;
-    
-    $configurationBuilder = new YamlFileConfigurationBuilder('config/config.yml');
-    
-    // Inject your custom Configuration Factory
-    $configurationBuilder->setConfigurationFactory(new MyConfFactory);
+$configurationBuilder = new YamlFileConfigurationBuilder('config/config.yml');
 
-    // Will now build instances of MyConfFactory instead of
-    // the standard Configuration implementation.
-    $configuration = $configurationBuilder->build();
+// Inject your custom Configuration Factory
+$configurationBuilder->setConfigurationFactory(new MyConfFactory);
 
+// Will now build instances of MyConfFactory instead of
+// the standard Configuration implementation.
+$configuration = $configurationBuilder->build();
+```
 
-License
--------
+## License
 
 This library is licensed under the New BSD License - see the LICENSE file
 for details.
 
-
-Community
----------
+## Community
 
 If you have questions or want to help out, join us in the
-[#dflydev](irc://irc.freenode.net/#dflydev) channel on irc.freenode.net.
\ No newline at end of file
+[#dflydev](irc://irc.freenode.net/#dflydev) channel on irc.freenode.net.
diff --git a/vendor/dflydev/dot-access-configuration/src/Dflydev/DotAccessConfiguration/YamlConfigurationBuilder.php b/vendor/dflydev/dot-access-configuration/src/Dflydev/DotAccessConfiguration/YamlConfigurationBuilder.php
index 06f2ded4a4..95c59d3762 100644
--- a/vendor/dflydev/dot-access-configuration/src/Dflydev/DotAccessConfiguration/YamlConfigurationBuilder.php
+++ b/vendor/dflydev/dot-access-configuration/src/Dflydev/DotAccessConfiguration/YamlConfigurationBuilder.php
@@ -40,7 +40,7 @@ public function internalBuild(ConfigurationInterface $configuration)
     {
         if (null !== $this->input) {
             try{
-                $yml = Yaml::parse($this->input, true);
+                $yml = Yaml::parse($this->input, Yaml::PARSE_EXCEPTION_ON_INVALID_TYPE);
             } catch (\Exception $e) {
                 throw new InvalidArgumentException($e->getMessage(), 0, $e);
             }
diff --git a/vendor/drupal/console-core/composer.json b/vendor/drupal/console-core/composer.json
index 6007ef4853..1318b84d25 100644
--- a/vendor/drupal/console-core/composer.json
+++ b/vendor/drupal/console-core/composer.json
@@ -1,33 +1,38 @@
 {
     "name": "drupal/console-core",
     "description": "Drupal Console Core",
-    "keywords": ["Drupal", "Console", "Development", "Symfony"],
+    "keywords": [
+        "Drupal",
+        "Console",
+        "Development",
+        "Symfony"
+    ],
     "homepage": "http://drupalconsole.com/",
     "type": "library",
     "license": "GPL-2.0-or-later",
     "authors": [
         {
-            "name":      "David Flores",
-            "email":     "dmousex@gmail.com",
-            "homepage":  "http://dmouse.net"
+            "name": "David Flores",
+            "email": "dmousex@gmail.com",
+            "homepage": "http://dmouse.net"
         },
         {
-            "name":      "Jesus Manuel Olivas",
-            "email":     "jesus.olivas@gmail.com",
-            "homepage":  "http://jmolivas.com"
+            "name": "Jesus Manuel Olivas",
+            "email": "jesus.olivas@gmail.com",
+            "homepage": "http://jmolivas.com"
         },
         {
-            "name":      "Eduardo Garcia",
-            "email":     "enzo@enzolutions.com",
-            "homepage":  "http://enzolutions.com/"
+            "name": "Eduardo Garcia",
+            "email": "enzo@enzolutions.com",
+            "homepage": "http://enzolutions.com/"
         },
         {
-            "name":      "Omar Aguirre",
-            "email":     "omersguchigu@gmail.com"
+            "name": "Omar Aguirre",
+            "email": "omersguchigu@gmail.com"
         },
         {
-            "name":      "Drupal Console Contributors",
-            "homepage":  "https://github.com/hechoendrupal/DrupalConsole/graphs/contributors"
+            "name": "Drupal Console Contributors",
+            "homepage": "https://github.com/hechoendrupal/DrupalConsole/graphs/contributors"
         }
     ],
     "support": {
@@ -36,23 +41,24 @@
         "docs": "http://docs.drupalconsole.com/"
     },
     "require": {
-        "php": "^5.5.9 || ^7.0",
+        "php": ">=7.0.8",
         "dflydev/dot-access-configuration": "^1.0",
-        "drupal/console-en": "1.8.0",
+        "drupal/console-en": "1.9.7",
         "stecman/symfony-console-completion": "~0.7",
-        "symfony/config": "~2.8|~3.0",
-        "symfony/console": "~2.8|~3.0",
-        "symfony/debug": "~2.8|~3.0",
-        "symfony/dependency-injection": "~2.8|~3.0",
-        "symfony/event-dispatcher": "~2.8|~3.0",
-        "symfony/filesystem": "~2.8|~3.0",
-        "symfony/finder": "~2.8|~3.0",
-        "symfony/process": "~2.8|~3.0",
-        "symfony/translation": "~2.8|~3.0",
-        "symfony/yaml": "~2.8|~3.0",
-        "twig/twig": "^1.23.1",
+        "symfony/config": "~3.0|^4.4",
+        "symfony/console": "~3.0|^4.4",
+        "symfony/debug": "~3.0|^4.4",
+        "symfony/dependency-injection": "~3.0|^4.4",
+        "symfony/event-dispatcher": "~3.0|^4.4",
+        "symfony/filesystem": "~3.0|^4.4",
+        "symfony/finder": "~3.0|^4.4",
+        "symfony/process": "~3.0|^4.4",
+        "symfony/translation": "~3.0|^4.4",
+        "symfony/yaml": "~3.0|^4.4",
+        "twig/twig": "^1.38.2|^2.12.0",
         "webflo/drupal-finder": "^1.0",
-        "webmozart/path-util": "^2.3"
+        "webmozart/path-util": "^2.3",
+        "guzzlehttp/guzzle": "~6.1"
     },
     "minimum-stability": "dev",
     "prefer-stable": true,
@@ -60,6 +66,8 @@
         "files": [
             "src/functions.php"
         ],
-        "psr-4": {"Drupal\\Console\\Core\\": "src"}
+        "psr-4": {
+            "Drupal\\Console\\Core\\": "src"
+        }
     }
-}
+}
\ No newline at end of file
diff --git a/vendor/drupal/console-core/config/chain/develop-contribute.yml b/vendor/drupal/console-core/config/chain/develop-contribute.yml
index ae3070a7a3..4e7bf7a5ae 100644
--- a/vendor/drupal/console-core/config/chain/develop-contribute.yml
+++ b/vendor/drupal/console-core/config/chain/develop-contribute.yml
@@ -11,7 +11,7 @@ commands:
       bin: composer create-project {{repository}} {{drupal}} --prefer-dist --no-progress --no-interaction --no-install
   - command: exec
     arguments:
-      bin: composer require drupal/console-develop --dev --working-dir={{drupal}} --no-update
+      bin: composer require drupal/features drupal/console-develop --dev --working-dir={{drupal}} --no-update
   - command: exec
     arguments:
       bin: composer install --working-dir={{drupal}}
@@ -20,4 +20,7 @@ commands:
       bin: drupal site:install standard --root={{drupal}} --db-type="sqlite" --no-interaction
   - command: exec
     arguments:
-      bin: drupal develop:create:symlinks --code-directory={{code}} --root={{drupal}}
+      bin: drupal module:install --root={{drupal}} rest taxonomy locale migrate simpletest breakpoint node views features
+  - command: exec
+    arguments:
+      bin: drupal develop:create:symlinks --root={{drupal}} --code-directory={{code}}
diff --git a/vendor/drupal/console-core/config/config.yml b/vendor/drupal/console-core/config/config.yml
index 8c56fa1b47..94fcc77d34 100644
--- a/vendor/drupal/console-core/config/config.yml
+++ b/vendor/drupal/console-core/config/config.yml
@@ -1,4 +1,8 @@
 application:
+  statistics:
+    enabled: false
+    last-attempted: ~
+    times-attempted: 0
   language: 'en'
   autowire:
     commands:
@@ -17,11 +21,14 @@ application:
     defaults: ~
     mappings: ~
   languages:
+    ar: 'العَرَبِيَّة‎'
     en: 'English'
     es: 'Español'
     ca: 'Català'
+    fa-ir: 'فارسی'
     fr: 'Français'
     ko: '한국어'
+    he: 'בעברית'
     hi: 'हिन्दी'
     hu: 'Magyar'
     id: 'Bahasa Indonesia'
@@ -33,5 +40,7 @@ application:
     ru: 'pусский язык'
     tl: 'Tagalog'
     vn: 'Tiếng Việt'
+    ua: 'українська'
+    ur: 'اُردُو'
     zh-hans: '简体中文'
     zh-hant: '繁體中文'
diff --git a/vendor/drupal/console-core/config/site.mode.yml b/vendor/drupal/console-core/config/site.mode.yml
index dceecf436e..7d04090b3a 100644
--- a/vendor/drupal/console-core/config/site.mode.yml
+++ b/vendor/drupal/console-core/config/site.mode.yml
@@ -41,5 +41,5 @@ services:
       dev: true
       prod: false
     cache:
-      dev: true
+      dev: false
       prod: true
diff --git a/vendor/drupal/console-core/dist/chain/update-gitbook.yml b/vendor/drupal/console-core/dist/chain/update-gitbook.yml
index 9cdd4c2405..c42185e481 100644
--- a/vendor/drupal/console-core/dist/chain/update-gitbook.yml
+++ b/vendor/drupal/console-core/dist/chain/update-gitbook.yml
@@ -1,5 +1,5 @@
 # How to use
-# update:gitbook --directory="/path/to/drupal-project/"
+# update:gitbook --directory="/path/to/drupal-console/gitbook-repository/"
 command:
   name: update:gitbook
   description: 'Update gitbook'
@@ -16,12 +16,16 @@ commands:
         - node
         - views
         - features
-{% set languages = ['en', 'es', 'hi', 'hu', 'pt_br', 'ro', 'vn', 'zh_hans'] %}
+  - command: 'develop:translation:sync'
+{% set languages = ['en', 'ca', 'es', 'hi', 'hu', 'ja', 'mr', 'pt-br', 'ro', 'ru', 'vn' , 'zh-hans'] %}
 {% for language in languages %}
   - command: settings:set
     arguments:
       name: language
       value: {{ language }}
+  - command: exec
+    arguments:
+        bin: 'rm -Rf {{ directory }}/{{ language }}/commands'
   - command: develop:doc:gitbook
     options:
       path: '{{ directory }}/{{ language }}'
@@ -29,4 +33,4 @@ commands:
   - command: settings:set
     arguments:
       name: language
-      value: en
+      value: en
\ No newline at end of file
diff --git a/vendor/drupal/console-core/services.yml b/vendor/drupal/console-core/services.yml
index 27bc47ff07..e0e0011c08 100644
--- a/vendor/drupal/console-core/services.yml
+++ b/vendor/drupal/console-core/services.yml
@@ -105,6 +105,7 @@ services:
   # DrupalConsoleCore Generators
   console.init_generator:
     class: Drupal\Console\Core\Generator\InitGenerator
+    arguments: ['@console.configuration_manager']
     tags:
       - { name: drupal.generator }
   console.site_alias_generator:
diff --git a/vendor/drupal/console-core/src/Application.php b/vendor/drupal/console-core/src/Application.php
index 9ee20032dd..f1ace11d26 100644
--- a/vendor/drupal/console-core/src/Application.php
+++ b/vendor/drupal/console-core/src/Application.php
@@ -2,7 +2,9 @@
 
 namespace Drupal\Console\Core;
 
+use Drupal\Console\Core\EventSubscriber\SendStatisticsListener;
 use Drupal\Console\Core\EventSubscriber\RemoveMessagesListener;
+use Drupal\Console\Core\EventSubscriber\SaveStatisticsListener;
 use Drupal\Console\Core\EventSubscriber\ShowGenerateCountCodeLinesListener;
 use Drupal\Console\Core\Utils\TranslatorManagerInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -20,6 +22,7 @@
 use Drupal\Console\Core\EventSubscriber\ShowGeneratedFilesListener;
 use Drupal\Console\Core\EventSubscriber\ShowGenerateInlineListener;
 use Drupal\Console\Core\EventSubscriber\CallCommandListener;
+use Drupal\Console\Core\EventSubscriber\MaintenanceModeListener;
 use Drupal\Console\Core\Utils\ConfigurationManager;
 use Drupal\Console\Core\Style\DrupalStyle;
 use Drupal\Console\Core\Utils\ChainDiscovery;
@@ -304,12 +307,36 @@ private function registerEvents()
                 )
             );
 
+            $dispatcher->addSubscriber(
+                new SaveStatisticsListener(
+                    $this->container->get('console.count_code_lines'),
+                    $this->container->get('console.configuration_manager'),
+                    $this->container->get('console.translator_manager')
+                )
+            );
+
+            $dispatcher->addSubscriber(
+                new SendStatisticsListener(
+                    $this->container->get('console.configuration_manager'),
+                    $this->container->get('console.translator_manager')
+                )
+            );
+
             $dispatcher->addSubscriber(
                 new RemoveMessagesListener(
                     $this->container->get('console.message_manager')
                 )
             );
 
+            if($this->container->has('state')) {
+                $dispatcher->addSubscriber(
+                    new MaintenanceModeListener(
+                        $this->container->get('console.translator_manager'),
+                        $this->container->get('state')
+                    )
+                );
+            }
+
             $this->setDispatcher($dispatcher);
             $this->eventRegistered = true;
         }
@@ -664,7 +691,7 @@ private function registerExtendCommands()
             ->loadExtendConfiguration();
     }
 
-    public function getData()
+    public function getData($filterNamespaces = null, $excludeNamespaces = [], $excludeChainCommands = false)
     {
         $singleCommands = [
             'about',
@@ -676,7 +703,8 @@ public function getData()
             'init',
             'list',
             'shell',
-            'server'
+            'server',
+            'snippet'
         ];
 
         $languages = $this->container->get('console.configuration_manager')
@@ -684,8 +712,11 @@ public function getData()
             ->get('application.languages');
 
         $data = [];
-        foreach ($singleCommands as $singleCommand) {
-            $data['commands']['misc'][] = $this->commandData($singleCommand);
+        // Exclude misc if it is inside the $excludeNamespaces array.
+        if (!in_array('misc', $excludeNamespaces)) {
+            foreach ($singleCommands as $singleCommand) {
+                $data['commands']['misc'][] = $this->commandData($singleCommand);
+            }
         }
 
         $namespaces = array_filter(
@@ -693,9 +724,18 @@ public function getData()
                 return (strpos($item, ':')<=0);
             }
         );
+
         sort($namespaces);
         array_unshift($namespaces, 'misc');
 
+        // Exclude specific namespaces
+        $namespaces = array_diff($namespaces, $excludeNamespaces);
+
+        // filter namespaces if available
+        if ($filterNamespaces) {
+            $namespaces = array_intersect($namespaces, $filterNamespaces);
+        }
+
         foreach ($namespaces as $namespace) {
             $commands = $this->all($namespace);
             usort(
@@ -705,6 +745,11 @@ public function getData()
             );
 
             foreach ($commands as $command) {
+                // Exclude command if is a chain command and was requested to exclude chain commands
+                if ($excludeChainCommands && $command instanceof ChainCustomCommand) {
+                    continue;
+                }
+
                 if (method_exists($command, 'getModule')) {
                     if ($command->getModule() == 'Console') {
                         $data['commands'][$namespace][] = $this->commandData(
@@ -719,6 +764,13 @@ public function getData()
             }
         }
 
+        // Remove namepsaces without commands
+        $namespaces = array_filter(
+            $namespaces, function ($namespace) use ($data) {
+                return count($data['commands'][$namespace]) > 0;
+            }
+        );
+
         $input = $this->getDefinition();
         $options = [];
         foreach ($input->getOptions() as $option) {
@@ -735,25 +787,32 @@ public function getData()
             ];
         }
 
-        $data['application'] = [
-            'namespaces' => $namespaces,
-            'options' => $options,
-            'arguments' => $arguments,
-            'languages' => $languages,
-            'messages' => [
-                'title' => $this->trans('application.gitbook.messages.title'),
-                'note' =>  $this->trans('application.gitbook.messages.note'),
-                'note_description' =>  $this->trans('application.gitbook.messages.note-description'),
-                'command' =>  $this->trans('application.gitbook.messages.command'),
-                'options' => $this->trans('application.gitbook.messages.options'),
-                'option' => $this->trans('application.gitbook.messages.option'),
-                'details' => $this->trans('application.gitbook.messages.details'),
-                'arguments' => $this->trans('application.gitbook.messages.arguments'),
-                'argument' => $this->trans('application.gitbook.messages.argument'),
-                'examples' => $this->trans('application.gitbook.messages.examples')
-            ],
-            'examples' => []
-        ];
+        //Add default Language
+        $language = $this->container->get('console.translator_manager')->getLanguage();
+        $data['default_language'] = $language;
+
+        // Exclude application if it is inside the $excludeNamespaces array.
+        if (!in_array('application', $excludeNamespaces)) {
+            $data['application'] = [
+                'namespaces' => $namespaces,
+                'options' => $options,
+                'arguments' => $arguments,
+                'languages' => $languages,
+                'messages' => [
+                    'title' => $this->trans('application.gitbook.messages.title'),
+                    'note' =>  $this->trans('application.gitbook.messages.note'),
+                    'note_description' =>  $this->trans('application.gitbook.messages.note-description'),
+                    'command' =>  $this->trans('application.gitbook.messages.command'),
+                    'options' => $this->trans('application.gitbook.messages.options'),
+                    'option' => $this->trans('application.gitbook.messages.option'),
+                    'details' => $this->trans('application.gitbook.messages.details'),
+                    'arguments' => $this->trans('application.gitbook.messages.arguments'),
+                    'argument' => $this->trans('application.gitbook.messages.argument'),
+                    'examples' => $this->trans('application.gitbook.messages.examples')
+                ],
+                'examples' => []
+            ];
+        }
 
         return $data;
     }
@@ -860,7 +919,8 @@ public function getContainer()
     /**
      * Add Drupal system messages.
      */
-    protected function addDrupalMessages($messageManager) {
+    protected function addDrupalMessages($messageManager)
+    {
         if (function_exists('drupal_get_messages')) {
             $drupalMessages = drupal_get_messages();
             foreach ($drupalMessages as $type => $messages) {
@@ -881,13 +941,14 @@ protected function addDrupalMessages($messageManager) {
      * @return string
      *   Name of the method
      */
-    protected function getMessageMethod($type) {
+    protected function getMessageMethod($type)
+    {
         $methodName = 'info';
         switch ($type) {
-            case 'error':
-            case 'warning':
-                $methodName = $type;
-                break;
+        case 'error':
+        case 'warning':
+            $methodName = $type;
+            break;
         }
 
         return $methodName;
diff --git a/vendor/drupal/console-core/src/Command/Chain/ChainCustomCommand.php b/vendor/drupal/console-core/src/Command/Chain/ChainCustomCommand.php
index 0306ff7a20..b14eefcfda 100644
--- a/vendor/drupal/console-core/src/Command/Chain/ChainCustomCommand.php
+++ b/vendor/drupal/console-core/src/Command/Chain/ChainCustomCommand.php
@@ -62,7 +62,7 @@ public function __construct(
             'file',
             null,
             InputOption::VALUE_OPTIONAL,
-            null,
+            "File",
             $file
         );
     }
diff --git a/vendor/drupal/console-core/src/Command/Command.php b/vendor/drupal/console-core/src/Command/Command.php
index 509a68c400..69f34e1c7b 100644
--- a/vendor/drupal/console-core/src/Command/Command.php
+++ b/vendor/drupal/console-core/src/Command/Command.php
@@ -33,6 +33,11 @@ abstract class Command extends BaseCommand
      */
     private $io;
 
+    /**
+     * @var bool
+     */
+    private $maintenance = false;
+
     /**
      * {@inheritdoc}
      */
@@ -49,6 +54,34 @@ public function getIo()
         return $this->io;
     }
 
+    /**
+     * Check maintenance mode.
+     *
+     * @return bool
+     */
+    public function isMaintenance()
+    {
+        return $this->maintenance;
+    }
+
+    /**
+     * Enable maintenance mode.
+     *
+     * @return $this
+     *   Command.
+     */
+    public function enableMaintenance()
+    {
+        $this->maintenance = true;
+        return $this;
+    }
+  
+    /**
+     * Create Exception
+     *
+     * @return void
+     * 
+     */ 
     public function createException($message) {
         $this->getIo()->error($message);
         exit(1);
diff --git a/vendor/drupal/console-core/src/Command/Generate/SiteAliasCommand.php b/vendor/drupal/console-core/src/Command/Generate/SiteAliasCommand.php
index 835afe165c..d4a546e530 100644
--- a/vendor/drupal/console-core/src/Command/Generate/SiteAliasCommand.php
+++ b/vendor/drupal/console-core/src/Command/Generate/SiteAliasCommand.php
@@ -47,6 +47,7 @@ class SiteAliasCommand extends Command
     private $extraOptions = [
         'ssh' => [
             'none' => '',
+            'tty' => '-tt',
             'vagrant' => '-o PasswordAuthentication=no -i ~/.vagrant.d/insecure_private_key',
         ],
         'container' => [
@@ -131,6 +132,12 @@ protected function configure()
                 InputOption::VALUE_OPTIONAL,
                 $this->trans('commands.generate.site.alias.options.port')
             )
+            ->addOption(
+                'drupal-console-binary',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.site.alias.options.drupal-console-binary')
+            )
             ->addOption(
                 'extra-options',
                 null,
@@ -232,6 +239,19 @@ protected function interact(
         }
 
         if ($type !== 'local') {
+            $drupalConsoleBinary = $input->getOption('drupal-console-binary');
+            if (!$drupalConsoleBinary) {
+
+                $drupalConsoleBinary = $this->getIo()->askEmpty(
+                    $this->trans(
+                        'commands.generate.site.alias.questions.drupal-console-binary'
+                    ),
+                    'drupal'
+                );
+
+                $input->setOption('drupal-console-binary', $drupalConsoleBinary);
+            }
+
             $extraOptions = $input->getOption('extra-options');
             if (!$extraOptions) {
                 $options = array_values($this->extraOptions[$type]);
@@ -308,6 +328,7 @@ protected function execute(
                 'environment' => $input->getOption('environment'),
                 'type' => $input->getOption('type'),
                 'extra_options' => $input->getOption('extra-options'),
+                'drupal_console_binary' => $input->getOption('drupal-console-binary'),
                 'root' => $input->getOption('composer-root'),
                 'uri' => $input->getOption('site-uri'),
                 'port' => $input->getOption('port'),
diff --git a/vendor/drupal/console-core/src/Command/InitCommand.php b/vendor/drupal/console-core/src/Command/InitCommand.php
index 9ecc6f9168..dafec64c1c 100644
--- a/vendor/drupal/console-core/src/Command/InitCommand.php
+++ b/vendor/drupal/console-core/src/Command/InitCommand.php
@@ -56,7 +56,8 @@ class InitCommand extends Command
         'sites' => false,
         'learning' => false,
         'generate_inline' => false,
-        'generate_chain' => false
+        'generate_chain' => false,
+        'statistics' => true
     ];
 
     private $directories = [
@@ -192,6 +193,27 @@ protected function interact(InputInterface $input, OutputInterface $output)
             );
             $input->setOption('autocomplete', $autocomplete);
         }
+
+        $this->getIo()->commentBlock(
+            sprintf(
+                $this->trans('commands.init.messages.statistics'),
+                sprintf(
+                    '%sconfig.yml',
+                    $this->configurationManager->getConsoleDirectory()
+                )
+            )
+        );
+
+        $this->configParameters['statistics'] = $this->getIo()->confirm(
+            $this->trans('commands.init.questions.statistics'),
+            true
+        );
+
+        if ($this->configParameters['statistics']) {
+            $this->getIo()->commentBlock(
+                $this->trans('commands.init.messages.statistics-disable')
+            );
+        }
     }
 
     /**
@@ -269,13 +291,15 @@ protected function execute(InputInterface $input, OutputInterface $output)
             $process->stop();
         }
 
-        $this->generator->generate([
-          'user_home' => $this->configurationManager->getConsoleDirectory(),
-          'executable_name' => $executableName,
-          'override' => $override,
-          'destination' => $destination,
-          'config_parameters' => $this->configParameters,
-        ]);
+        $this->generator->generate(
+            [
+            'user_home' => $this->configurationManager->getConsoleDirectory(),
+            'executable_name' => $executableName,
+            'override' => $override,
+            'destination' => $destination,
+            'config_parameters' => $this->configParameters,
+            ]
+        );
 
         $this->getIo()->writeln($this->trans('application.messages.autocomplete'));
 
diff --git a/vendor/drupal/console-core/src/Command/Settings/SetCommand.php b/vendor/drupal/console-core/src/Command/Settings/SetCommand.php
index ce10b79864..5474527f42 100644
--- a/vendor/drupal/console-core/src/Command/Settings/SetCommand.php
+++ b/vendor/drupal/console-core/src/Command/Settings/SetCommand.php
@@ -82,6 +82,18 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $settingName = $input->getArgument('name');
         $settingValue = $input->getArgument('value');
 
+        // Reset the default values ​​of the statistics.
+        if ($settingName == 'statistics.enabled') {
+            $this->configurationManager->updateConfigGlobalParameter(
+                'statistics.last-attempted',
+                null
+            );
+            $this->configurationManager->updateConfigGlobalParameter(
+                'statistics.times-attempted',
+                0
+            );
+        }
+
         $userConfigFile = sprintf(
             '%s/.console/config.yml',
             $this->configurationManager->getHomeDirectory()
@@ -111,6 +123,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
         }
 
         $parents = array_merge(['application'], explode(".", $settingName));
+        // Change the value type if it is boolean.
+        $settingValue = json_decode($settingValue) === null ? $settingValue : json_decode($settingValue);
 
         $this->nestedArray->setValue(
             $userConfigFileParsed,
@@ -163,6 +177,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
+        $settingValue = is_bool($settingValue) ? $settingValue ? 'true' : 'false' : $settingValue;
         $this->getIo()->success(
             sprintf(
                 $this->trans('commands.settings.set.messages.success'),
diff --git a/vendor/drupal/console-core/src/Descriptor/TextDescriptor.php b/vendor/drupal/console-core/src/Descriptor/TextDescriptor.php
index 54f9808200..e788eea013 100644
--- a/vendor/drupal/console-core/src/Descriptor/TextDescriptor.php
+++ b/vendor/drupal/console-core/src/Descriptor/TextDescriptor.php
@@ -272,7 +272,8 @@ protected function describeApplication(Application $application, array $options
                 'init',
                 'list',
                 'shell',
-                'server'
+                'server',
+                'snippet'
             ];
 
             // add commands by namespace
diff --git a/vendor/drupal/console-core/src/EventSubscriber/MaintenanceModeListener.php b/vendor/drupal/console-core/src/EventSubscriber/MaintenanceModeListener.php
new file mode 100644
index 0000000000..bdb32f880d
--- /dev/null
+++ b/vendor/drupal/console-core/src/EventSubscriber/MaintenanceModeListener.php
@@ -0,0 +1,116 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Core\EventSubscriber\MaintenanceModeListener.
+ */
+
+namespace Drupal\Console\Core\EventSubscriber;
+
+use Drupal\Core\State\StateInterface;
+use Drupal\Console\Core\Style\DrupalStyle;
+use Drupal\Console\Core\Utils\TranslatorManagerInterface;
+use Symfony\Component\Console\ConsoleEvents;
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Event\ConsoleEvent;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+/**
+ * Class MaintenanceModeListener
+ *
+ * @package Drupal\Console\Core\EventSubscriber
+ */
+class MaintenanceModeListener implements EventSubscriberInterface
+{
+    /**
+     * @var TranslatorManagerInterface
+     */
+    protected $translator;
+
+    /**
+     * @var StateInterface
+     */
+    protected $state;
+
+    /**
+     * MaintenanceModeListener constructor.
+     *
+     * @param TranslatorManagerInterface $translator
+     * @param StateInterface $state
+     */
+    public function __construct(
+        TranslatorManagerInterface $translator,
+        StateInterface $state
+    ) {
+        $this->translator = $translator;
+        $this->state = $state;
+    }
+
+    /**
+     * Enable maintenance mode.
+     *
+     * @param ConsoleEvent $event
+     */
+    public function enableMaintenanceMode(ConsoleEvent $event)
+    {
+        $this->switchMaintenanceMode($event, 'on');
+    }
+
+    /**
+     * Disable maintenance mode.
+     *
+     * @param ConsoleEvent $event
+     */
+    public function disableMaintenanceMode(ConsoleEvent $event)
+    {
+        $this->switchMaintenanceMode($event, 'off');
+    }
+
+    /**
+     * Switch maintenance mode.
+     *
+     * @param ConsoleEvent $event
+     * @param string $mode
+     */
+    public function switchMaintenanceMode(ConsoleEvent $event, $mode)
+    {
+        /* @var Command $command */
+        $command = $event->getCommand();
+
+        if ($command->isMaintenance()) {
+
+            /* @var DrupalStyle $io */
+            $io = new DrupalStyle($event->getInput(), $event->getOutput());
+            $stateName = 'system.maintenance_mode';
+            $modeMessage = null;
+
+            if ($mode == 'on') {
+                $this->state->set($stateName, true);
+                $modeMessage = $this->translator->trans('commands.site.maintenance.messages.maintenance-on');
+            }
+
+            if ($mode == 'off') {
+                $this->state->set($stateName, false);
+                $modeMessage = $this->translator->trans('commands.site.maintenance.messages.maintenance-off');
+            }
+
+            if ($modeMessage) {
+                $io->newLine();
+                $io->info($modeMessage, true);
+                $io->newLine();
+            }
+        }
+    }
+
+
+    /**
+     * @{@inheritdoc}
+     */
+    public static function getSubscribedEvents()
+    {
+        return [
+            ConsoleEvents::COMMAND => 'enableMaintenanceMode',
+            ConsoleEvents::TERMINATE => 'disableMaintenanceMode',
+        ];
+    }
+}
diff --git a/vendor/drupal/console-core/src/EventSubscriber/SaveStatisticsListener.php b/vendor/drupal/console-core/src/EventSubscriber/SaveStatisticsListener.php
new file mode 100644
index 0000000000..b8a651a5ca
--- /dev/null
+++ b/vendor/drupal/console-core/src/EventSubscriber/SaveStatisticsListener.php
@@ -0,0 +1,127 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Core\EventSubscriber\SaveStatisticsListener.
+ */
+
+namespace Drupal\Console\Core\EventSubscriber;
+
+use Drupal\Console\Core\Command\Chain\ChainCustomCommand;
+use Drupal\Console\Core\Utils\ConfigurationManager;
+use Drupal\Console\Core\Utils\CountCodeLines;
+use Drupal\Console\Core\Utils\TranslatorManagerInterface;
+use Symfony\Component\Console\Event\ConsoleTerminateEvent;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+use Symfony\Component\Console\ConsoleEvents;
+use Symfony\Component\Filesystem\Filesystem;
+
+/**
+ * Class SaveStatisticsListener
+ *
+ * @package Drupal\Console\Core\EventSubscriber
+ */
+class SaveStatisticsListener implements EventSubscriberInterface
+{
+
+    /**
+     * @var ShowGenerateChainListener
+     */
+    protected $countCodeLines;
+
+    /**
+     * @var ConfigurationManager
+     */
+    protected $configurationManager;
+
+    /**
+     * @var TranslatorManagerInterface
+     */
+    protected $translator;
+
+    /**
+     * FileSystem $fs
+     */
+    protected $fs;
+
+    /**
+     * SaveStatisticsListener constructor.
+     *
+     * @param CountCodeLines             $countCodeLines
+     * @param ConfigurationManager       $configurationManager
+     * @param TranslatorManagerInterface $translator
+     */
+    public function __construct(
+        CountCodeLines $countCodeLines,
+        ConfigurationManager $configurationManager,
+        TranslatorManagerInterface $translator
+    ) {
+        $this->countCodeLines = $countCodeLines;
+        $this->configurationManager = $configurationManager;
+        $this->translator = $translator;
+
+        $this->fs = new Filesystem();
+    }
+
+    /**
+     * @param ConsoleTerminateEvent $event
+     */
+    public function saveStatistics(ConsoleTerminateEvent $event)
+    {
+        if ($event->getExitCode() != 0) {
+            return;
+        }
+
+        $configGlobalAsArray = $this->configurationManager->getConfigGlobalAsArray();
+
+        //Validate if the config is defined.
+        if (is_null($configGlobalAsArray) || !isset($configGlobalAsArray['application']['statistics'])) {
+            return;
+        }
+
+        //Validate if the statistics is enabled.
+        if (!isset($configGlobalAsArray['application']['statistics']['enabled']) || !$configGlobalAsArray['application']['statistics']['enabled']) {
+            return;
+        }
+
+        //Check that the namespace starts with 'Drupal\Console'.
+        $class = new \ReflectionClass($event->getCommand());
+        if (strpos($class->getNamespaceName(), "Drupal\Console") !== 0) {
+            return;
+        }
+
+        //Validate if the command is not a custom chain command.
+        if ($event->getCommand() instanceof ChainCustomCommand) {
+            return;
+        }
+
+        $path =  $path = sprintf(
+            '%s/.console/stats/',
+            $this->configurationManager->getHomeDirectory()
+        );
+
+        $information = $event->getCommand()->getName() . ',' . $this->translator->getLanguage();
+
+        $countCodeLines = $this->countCodeLines->getCountCodeLines();
+        if ($countCodeLines > 0) {
+            $information = $information . ',' . $countCodeLines;
+        }
+
+        try{
+            $this->fs->appendToFile(
+                $path .  date('Y-m-d') . '.csv',
+                $information . PHP_EOL
+            );
+        }catch (\Exception $exception) {
+            return;
+        }
+    }
+
+    /**
+     * @{@inheritdoc}
+     */
+    public static function getSubscribedEvents()
+    {
+        return [ConsoleEvents::TERMINATE => 'saveStatistics'];
+    }
+}
diff --git a/vendor/drupal/console-core/src/EventSubscriber/SendStatisticsListener.php b/vendor/drupal/console-core/src/EventSubscriber/SendStatisticsListener.php
new file mode 100644
index 0000000000..ed66f1e5cb
--- /dev/null
+++ b/vendor/drupal/console-core/src/EventSubscriber/SendStatisticsListener.php
@@ -0,0 +1,215 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Core\EventSubscriber\SendStatisticsListener.
+ */
+
+namespace Drupal\Console\Core\EventSubscriber;
+
+use Drupal\Console\Core\Style\DrupalStyle;
+use Drupal\Console\Core\Utils\ConfigurationManager;
+use Drupal\Console\Core\Utils\TranslatorManagerInterface;
+use GuzzleHttp\Client;
+use Symfony\Component\Console\Event\ConsoleTerminateEvent;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+use Symfony\Component\Console\ConsoleEvents;
+use Symfony\Component\Filesystem\Filesystem;
+use Symfony\Component\Finder\Finder;
+
+/**
+ * Class SendStatisticsListener
+ *
+ * @package Drupal\Console\Core\EventSubscriber
+ */
+class SendStatisticsListener implements EventSubscriberInterface
+{
+
+    /**
+     * @var ConfigurationManager
+     */
+    protected $configurationManager;
+
+    /**
+     * FileSystem $fs
+     */
+    protected $fs;
+
+    /**
+     * @var TranslatorManagerInterface
+     */
+    protected $translator;
+
+    /**
+     * SaveStatisticsListener constructor.
+     *
+     * @param ConfigurationManager       $configurationManager
+     * @param TranslatorManagerInterface $translator
+     */
+    public function __construct(
+        ConfigurationManager $configurationManager,
+        TranslatorManagerInterface $translator
+    ) {
+        $this->configurationManager = $configurationManager;
+        $this->translator = $translator;
+        $this->fs = new Filesystem();
+    }
+
+    /**
+     * @param ConsoleTerminateEvent $event
+     */
+    public function calculateStatistics(ConsoleTerminateEvent $event)
+    {
+        if ($event->getExitCode() != 0) {
+            return;
+        }
+
+        $date = date('Y-m-d');
+        $configGlobalAsArray = $this->configurationManager->getConfigGlobalAsArray();
+
+        //Validate if the config is defined.
+        if (is_null($configGlobalAsArray) || !isset($configGlobalAsArray['application']['statistics'])) {
+            return;
+        }
+
+        //Validate if the statistics is enabled.
+        if (!isset($configGlobalAsArray['application']['statistics']['enabled']) || !$configGlobalAsArray['application']['statistics']['enabled']) {
+            return;
+        }
+
+        /* @var DrupalStyle $io */
+        $io = new DrupalStyle($event->getInput(), $event->getOutput());
+
+        //Validate if the times attempted is 10
+        if ($configGlobalAsArray['application']['statistics']['times-attempted'] >= 10) {
+            $io->error($this->translator->trans('application.errors.statistics-failed'));
+
+            $this->configurationManager->updateConfigGlobalParameter('statistics.enabled', false);
+            return;
+        }
+
+        //Validate if the last attempted was today
+        if ($configGlobalAsArray['application']['statistics']['last-attempted'] === $date) {
+            return;
+        }
+
+        $path = sprintf(
+            '%s/.console/stats',
+            $this->configurationManager->getHomeDirectory()
+        );
+
+        //Find all statistics with pending status from other days.
+        $finder = new Finder();
+        $finder
+            ->files()
+            ->name('*.csv')
+            ->notName($date.'.csv')
+            ->in($path);
+
+        //Validate if finder in not null
+        if ($finder->count() == 0) {
+            return;
+        }
+
+        $statisticsKeys = ['command', 'language', 'linesOfCode'];
+        $commands = [];
+        $languages = [];
+        $filePathToDelete = [];
+
+        foreach ($finder as $file) {
+            if (($handle = fopen($file->getPathname(), "r")) !== false) {
+                while (($content = fgetcsv($handle, 0, ',')) !== false) {
+
+                    /**
+                     * If the command doesn't have linesOfCode,
+                     * we add a null value at the end to combine with statistics keys.
+                     */
+                    if (count($content) === 2) {
+                        array_push($content, 0);
+                    }
+
+                    $commands = $this->getCommandStatisticsAsArray($commands, array_combine($statisticsKeys, $content));
+                    $languages = $this->getLanguageStatisticsAsArray($languages, array_combine($statisticsKeys, $content));
+                }
+
+                fclose($handle);
+
+                //Save file path to delete if the response is success.
+                array_push($filePathToDelete, $file->getPathname());
+            }
+        }
+
+        try {
+            if(!isset($configGlobalAsArray['application']['statistics']['url']) || empty($configGlobalAsArray['application']['statistics']['url'])){
+                $io->error($this->translator->trans('application.errors.statistics-url-failed'));
+                return;
+            }
+
+            $client = new Client();
+            $response = $client->post(
+                $configGlobalAsArray['application']['statistics']['url'],
+                [
+                    'headers' => [
+                        'Accept' => 'application/json',
+                    ],
+                    'json' => ['commands' => $commands, 'languages' => $languages]
+                ]
+            );
+
+            if ($response->getStatusCode() === 200) {
+                $this->fs->remove($filePathToDelete);
+
+                //Reset the count attempted to 0.
+                $this->configurationManager->updateConfigGlobalParameter('statistics.times-attempted', 0);
+            }
+        } catch (\Exception $exception) {
+            //Increase the count attempted in global config.
+            $countAttempted = $configGlobalAsArray['application']['statistics']['times-attempted'] + 1;
+            $this->configurationManager->updateConfigGlobalParameter('statistics.times-attempted', $countAttempted);
+        }
+
+        //Update last attempted in global config.
+        $this->configurationManager->updateConfigGlobalParameter('statistics.last-attempted', $date);
+    }
+
+    /**
+     * Build the statistics by command.
+     *
+     * @param  $commands
+     * @param  $content
+     * @return array
+     */
+    private function getCommandStatisticsAsArray($commands, $content)
+    {
+        //Check if in $commands with the $content['command'] key with the value 'executed' have value to sum.
+        $executed = $commands[$content['command']]['executed'] + 1;
+        $linesOfCode = $commands[$content['command']]['linesOfCode'] + $content['linesOfCode'];
+
+        $commands[$content['command']] = ["executed" => $executed, "linesOfCode" => $linesOfCode];
+
+        return $commands;
+    }
+
+    /**
+     * Update the languages by command.
+     *
+     * @param  $languages
+     * @param  $content
+     * @return array
+     */
+    private function getLanguageStatisticsAsArray($languages, $content)
+    {
+        //Check if in $commands with the $content['language'] key have value to sum.
+        $languages[$content['language']] = $languages[$content['language']] + 1;
+
+        return $languages;
+    }
+
+    /**
+     * @{@inheritdoc}
+     */
+    public static function getSubscribedEvents()
+    {
+        return [ConsoleEvents::TERMINATE => 'calculateStatistics'];
+    }
+}
diff --git a/vendor/drupal/console-core/src/Generator/InitGenerator.php b/vendor/drupal/console-core/src/Generator/InitGenerator.php
index be2dc66679..9d603eec15 100644
--- a/vendor/drupal/console-core/src/Generator/InitGenerator.php
+++ b/vendor/drupal/console-core/src/Generator/InitGenerator.php
@@ -6,6 +6,8 @@
  */
 namespace Drupal\Console\Core\Generator;
 
+use Drupal\Console\Core\Utils\ConfigurationManager;
+
 /**
  * Class InitGenerator
  *
@@ -13,26 +15,33 @@
  */
 class InitGenerator extends Generator
 {
+
+    /**
+     * @var ConfigurationManager
+     */
+    protected $configurationManager;
+
+    /**
+     * InitGenerator constructor.
+     *
+     * @param ConfigurationManager $configurationManager
+     */
+    public function __construct(ConfigurationManager $configurationManager)
+    {
+        $this->configurationManager = $configurationManager;
+    }
+
     /**
      * {@inheritdoc}
      */
-    public function generate(array $parameters) {
+    public function generate(array $parameters)
+    {
         $userHome = $parameters['user_home'];
         $executableName = $parameters['executable_name'];
         $override = $parameters['override'];
         $destination = $parameters['destination'];
         $configParameters = $parameters['config_parameters'];
 
-        $configParameters = array_map(
-            function ($item) {
-                if (is_bool($item)) {
-                    return $item ? 'true' : 'false';
-                }
-                return $item;
-            },
-            $configParameters
-        );
-
         $configFile = $userHome . 'config.yml';
         if ($destination) {
             $configFile = $destination . 'config.yml';
@@ -45,12 +54,38 @@ function ($item) {
             );
         }
 
+        // If configFile is an override, we only change the value of statistics in the global config.
+        $consoleDestination = $userHome . 'config.yml';
+        if ($configFile !== $consoleDestination) {
+            if ($configParameters['statistics'] || file_exists($consoleDestination)) {
+                $configParameters['statistics'] = $configParameters['statistics'] ? 'true' : 'false';
+                $this->renderFile(
+                    'core/init/statistics.config.yml.twig',
+                    $consoleDestination,
+                    $configParameters
+                );
+            }
+
+            unset($configParameters['statistics']);
+        }
+
+        $configParameters = array_map(
+            function ($item) {
+                if (is_bool($item)) {
+                    return $item ? 'true' : 'false';
+                }
+                return $item;
+            },
+            $configParameters
+        );
+
         $this->renderFile(
             'core/init/config.yml.twig',
             $configFile,
             $configParameters
         );
 
+
         if ($executableName) {
             $parameters = [
                 'executable' => $executableName,
diff --git a/vendor/drupal/console-core/src/Utils/ConfigurationManager.php b/vendor/drupal/console-core/src/Utils/ConfigurationManager.php
index da7f775a9c..1c5208199c 100644
--- a/vendor/drupal/console-core/src/Utils/ConfigurationManager.php
+++ b/vendor/drupal/console-core/src/Utils/ConfigurationManager.php
@@ -2,6 +2,9 @@
 
 namespace Drupal\Console\Core\Utils;
 
+use Symfony\Component\Filesystem\Filesystem;
+use Symfony\Component\Yaml\Dumper;
+use Symfony\Component\Yaml\Parser;
 use Symfony\Component\Yaml\Yaml;
 use Symfony\Component\Console\Input\ArgvInput;
 use Symfony\Component\Finder\Finder;
@@ -118,8 +121,7 @@ public function readTarget($target)
             $site = $exploded[0];
             $environment = $exploded[1];
         }
-
-        $sites = $this->getSites();
+        $sites = $this->getSites($site);
         if (!array_key_exists($site, $sites)) {
             return [];
         }
@@ -359,7 +361,7 @@ private function appendExtraConfiguration($type)
 
     public function loadExtendConfiguration()
     {
-        $directory = $this->getConsoleDirectory() . '/extend/';
+        $directory = $this->getConsoleDirectory() . 'extend/';
         if (!is_dir($directory)) {
             return null;
         }
@@ -387,9 +389,11 @@ private function importConfigurationFromFile($configFile)
     }
 
     /**
+     * @param string $target
+     *
      * @return array
      */
-    public function getSites()
+    public function getSites($target = "*")
     {
         if ($this->sites) {
             return $this->sites;
@@ -403,7 +407,7 @@ public function getSites()
 
         $finder = new Finder();
         $finder->in($sitesDirectories);
-        $finder->name("*.yml");
+        $finder->name($target.".yml");
 
         foreach ($finder as $site) {
             $siteName = $site->getBasename('.yml');
@@ -419,7 +423,11 @@ public function getSites()
 
             foreach ($environments as $environment => $config) {
                 if (!array_key_exists('type', $config)) {
-                    throw new \UnexpectedValueException("The 'type' parameter is required in sites configuration.");
+                    throw new \UnexpectedValueException(
+                        sprintf(
+                            "The 'type' parameter is required in sites configuration:\n %s.", $site->getPathname()
+                        )
+                    );
                 }
                 if ($config['type'] !== 'local') {
                     if (array_key_exists('host', $config)) {
@@ -439,6 +447,80 @@ public function getSites()
         return $this->sites;
     }
 
+    /**
+     * Get config global as array.
+     *
+     * @return array
+     */
+    public function getConfigGlobalAsArray()
+    {
+        $filePath = sprintf(
+            '%s/.console/config.yml',
+            $this->getHomeDirectory()
+        );
+
+        $fs = new Filesystem();
+
+        if (!$fs->exists($filePath)) {
+            return null;
+        }
+
+        $yaml = new Parser();
+        $globalConfig = $yaml->parse(file_get_contents($filePath), true);
+
+        return $globalConfig;
+    }
+
+    /**
+     * Update parameter in global config.
+     *
+     * @param  $configName
+     * @param  $value
+     * @return int
+     */
+    public function updateConfigGlobalParameter($configName, $value)
+    {
+        $parser = new Parser();
+        $dumper = new Dumper();
+
+        $userConfigFile = sprintf(
+            '%s/.console/config.yml',
+            $this->getHomeDirectory()
+        );
+
+        if (!file_exists($userConfigFile)) {
+            return 1;
+        }
+
+        try {
+            $userConfigFileParsed = $parser->parse(
+                file_get_contents($userConfigFile)
+            );
+        } catch (\Exception $e) {
+        }
+
+        $parents = array_merge(['application'], explode('.', $configName));
+
+        $nestedArray = new NestedArray();
+
+        $nestedArray->setValue(
+            $userConfigFileParsed,
+            $parents,
+            $value,
+            true
+        );
+
+        try {
+            $userConfigFileDump = $dumper->dump($userConfigFileParsed, 10);
+        } catch (\Exception $e) {
+        }
+
+        try {
+            file_put_contents($userConfigFile, $userConfigFileDump);
+        } catch (\Exception $e) {
+        }
+    }
+
     /**
      * @return array
      */
diff --git a/vendor/drupal/console-core/src/Utils/DrupalFinder.php b/vendor/drupal/console-core/src/Utils/DrupalFinder.php
index 2aa7af27c8..afd40c7549 100644
--- a/vendor/drupal/console-core/src/Utils/DrupalFinder.php
+++ b/vendor/drupal/console-core/src/Utils/DrupalFinder.php
@@ -78,6 +78,12 @@ protected function defineConstants($vendorDir)
                 "/{$vendorDir}/drupal/console-%s/translations/"
             );
         }
+      if (!defined("DRUPAL_CONSOLE_LANGUAGE_INSTALLERS")) {
+        define(
+          "DRUPAL_CONSOLE_LANGUAGE_INSTALLERS",
+          "/console/language/console-%s/translations/"
+        );
+      }
 
         if (!defined("DRUPAL_CONSOLE_LIBRARY")) {
             define(
diff --git a/vendor/drupal/console-core/src/Utils/TranslatorManager.php b/vendor/drupal/console-core/src/Utils/TranslatorManager.php
index 60f2b86ed7..444f666a98 100644
--- a/vendor/drupal/console-core/src/Utils/TranslatorManager.php
+++ b/vendor/drupal/console-core/src/Utils/TranslatorManager.php
@@ -7,6 +7,9 @@
 
 namespace Drupal\Console\Core\Utils;
 
+use Drupal\Console\Core\Style\DrupalStyle;
+use Symfony\Component\Console\Input\ArrayInput;
+use Symfony\Component\Console\Output\ConsoleOutput;
 use Symfony\Component\Translation\Translator;
 use Symfony\Component\Translation\Loader\YamlFileLoader;
 use Symfony\Component\Translation\Loader\ArrayLoader;
@@ -47,6 +50,11 @@ class TranslatorManager implements TranslatorManagerInterface
      */
     protected $coreLanguageRoot;
 
+    /**
+     * @var DrupalStyle
+     */
+    private $io;
+
     /**
      * Translator constructor.
      */
@@ -54,6 +62,10 @@ public function __construct()
     {
         $this->parser = new Parser();
         $this->filesystem = new Filesystem();
+
+        $output = new ConsoleOutput();
+        $input = new ArrayInput([]);
+        $this->io = new DrupalStyle($input, $output);
     }
 
     /**
@@ -91,14 +103,40 @@ private function buildCoreLanguageDirectory(
         $language,
         $directoryRoot
     ) {
+        $output = new ConsoleOutput();
+        $input = new ArrayInput([]);
+        $io = new DrupalStyle($input, $output);
+        
         $coreLanguageDirectory =
             $directoryRoot .
             sprintf(
                 DRUPAL_CONSOLE_LANGUAGE,
                 $language
             );
+        $installersLanguageDirectory =
+          $directoryRoot .
+          sprintf(
+            DRUPAL_CONSOLE_LANGUAGE_INSTALLERS,
+            $language
+          );
+
+        $languageDirectory = null;
+        foreach ([$coreLanguageDirectory, $installersLanguageDirectory] as $candidate) {
+            if (is_dir($candidate)) {
+              $languageDirectory = $candidate;
+            }
+        }
 
-        if (!is_dir($coreLanguageDirectory)) {
+        if (!isset($languageDirectory)) {
+            if ($language == 'en') {
+              throw new \Exception('No languages found. Make sure you have installed a console language package in a supported directory');
+            }else{
+                $io->warning(
+                    sprintf(
+                        'Language not available please execute this command in order to get the language locally using composer, run composer require drupal/console-'.$language.''
+                    )
+                );
+            }
             return $this->buildCoreLanguageDirectory('en', $directoryRoot);
         }
 
@@ -106,7 +144,7 @@ private function buildCoreLanguageDirectory(
             $this->coreLanguageRoot = $directoryRoot;
         }
 
-        return [$language, $coreLanguageDirectory];
+        return [$language, $languageDirectory];
     }
 
     /**
@@ -164,7 +202,7 @@ public function loadResource($language, $directoryRoot)
                 try {
                     $this->loadTranslationByFile($resource, 'application');
                 } catch (ParseException $e) {
-                    echo 'application.yml'.' '.$e->getMessage();
+                    $this->io->error('application.yml'.' '.$e->getMessage());
                 }
 
                 continue;
@@ -173,7 +211,7 @@ public function loadResource($language, $directoryRoot)
             try {
                 $this->loadTranslationByFile($resource, $key);
             } catch (ParseException $e) {
-                echo $key.'.yml '.$e->getMessage();
+                $this->io->error($key.'.yml '.$e->getMessage());
             }
         }
 
diff --git a/vendor/drupal/console-core/src/Utils/TwigRenderer.php b/vendor/drupal/console-core/src/Utils/TwigRenderer.php
index 90bb8d01e4..e2fd19d482 100644
--- a/vendor/drupal/console-core/src/Utils/TwigRenderer.php
+++ b/vendor/drupal/console-core/src/Utils/TwigRenderer.php
@@ -103,6 +103,7 @@ public function render($template, $parameters = [])
             $this->engine->addFunction($this->getArgumentsFromRoute());
             $this->engine->addFunction($this->getServicesClassInitialization());
             $this->engine->addFunction($this->getServicesClassInjection());
+            $this->engine->addFunction($this->getServicesClassInjectionNoOverride());
             $this->engine->addFunction($this->getTagsAsArray());
             $this->engine->addFunction($this->getTranslationAsYamlComment());
             $this->engine->addFilter($this->createMachineName());
@@ -210,6 +211,25 @@ public function getServicesClassInjection()
         return $returnValue;
     }
 
+    /**
+     * @return \Twig_SimpleFunction
+     */
+    public function getServicesClassInjectionNoOverride()
+    {
+        $returnValue = new \Twig_SimpleFunction(
+            'serviceClassInjectionNoOverride', function ($services) {
+                $returnValues = [];
+                foreach ($services as $service) {
+                    $returnValues[] = sprintf('    $instance->%s = $container->get(\'%s\');', $service['camel_case_name'], $service['name']);
+                }
+
+                return implode(PHP_EOL, $returnValues);
+            }
+        );
+
+        return $returnValue;
+    }
+
     /**
      * @return \Twig_SimpleFunction
      */
diff --git a/vendor/drupal/console-core/templates/core/init/config.yml.twig b/vendor/drupal/console-core/templates/core/init/config.yml.twig
index 19fe6fc41a..f2ef99f2b0 100644
--- a/vendor/drupal/console-core/templates/core/init/config.yml.twig
+++ b/vendor/drupal/console-core/templates/core/init/config.yml.twig
@@ -1,5 +1,12 @@
 application:
   environment: 'prod'
+{% if statistics is defined %}
+  statistics:
+    enabled: {{statistics}}
+    url: 'https://drupalconsole.com/statistics?_format=json'
+    last-attempted: ~
+    times-attempted: 0
+{% endif %}
   language: '{{language}}'
 #  editor: 'vim'
   temp: '{{temp}}'
diff --git a/vendor/drupal/console-core/templates/core/init/statistics.config.yml.twig b/vendor/drupal/console-core/templates/core/init/statistics.config.yml.twig
new file mode 100644
index 0000000000..bf639d1adf
--- /dev/null
+++ b/vendor/drupal/console-core/templates/core/init/statistics.config.yml.twig
@@ -0,0 +1,6 @@
+application:
+  statistics:
+    enabled: {{statistics}}
+    url: 'https://drupalconsole.com/statistics?_format=json'
+    last-attempted: ~
+    times-attempted: 0
diff --git a/vendor/drupal/console-core/templates/core/sites/alias.yml.twig b/vendor/drupal/console-core/templates/core/sites/alias.yml.twig
index b17302b890..5ee08eefef 100644
--- a/vendor/drupal/console-core/templates/core/sites/alias.yml.twig
+++ b/vendor/drupal/console-core/templates/core/sites/alias.yml.twig
@@ -10,9 +10,14 @@
 {% if user %}
   user: {{ user }}
 {% endif %}
-{% if uri %}
+{% if uri or drupal_console_binary %}
   options:
+{% if uri %}
     uri: {{ uri }}
+{% endif %}
+{% if drupal_console_binary %}
+    drupal-console-binary: {{ drupal_console_binary }}
+{% endif %}
 {% else %}
 #  options:
 {% endif %}
diff --git a/vendor/drupal/console-en/README.md b/vendor/drupal/console-en/README.md
index 4e0ddb433d..24040ce65b 100644
--- a/vendor/drupal/console-en/README.md
+++ b/vendor/drupal/console-en/README.md
@@ -17,7 +17,8 @@ $ composer require drupal/console:~1.0 --prefer-dist --optimize-autoloader
 
 ### Install Drupal Console launcher
 
-Drupal Console launcher was created to avoid conflicts between major and minor releases. Drupal Console binary commands are available to every Drupal 8 instance on the machine.
+In order to avoid conflicts between Drupal release and have a Drupal Console version between major and minor releases in Drupal,  a Drupal Console launcher was created. In order to facilitate to load the Drupal Console commands available to each
+Drupal 8 website,
  
 To install Drupal Console launcher globally follow the instruction below. 
 
@@ -32,7 +33,7 @@ $ chmod +x /usr/local/bin/drupal
 
 ### Contribute
 
-Follow these steps to contribute to the current translation:
+If you want to contribute to this translation, you need to follow this steps to setup your environment.
 
 - [Project requirements](https://docs.drupalconsole.com/en/contributing/project-requirements.html)
 - [Getting the project](https://docs.drupalconsole.com/en/contributing/getting-the-project.html)
diff --git a/vendor/drupal/console-en/composer.json b/vendor/drupal/console-en/composer.json
index 05abf44884..e2fb93d0e9 100644
--- a/vendor/drupal/console-en/composer.json
+++ b/vendor/drupal/console-en/composer.json
@@ -3,7 +3,6 @@
     "description": "Drupal Console English Language",
     "keywords": ["Drupal", "Console", "Development", "Symfony"],
     "homepage": "http://drupalconsole.com/",
-    "type": "drupal-console-language",
     "license": "GPL-2.0-or-later",
     "authors": [
         {
diff --git a/vendor/drupal/console-en/translations/application.yml b/vendor/drupal/console-en/translations/application.yml
index cf19798113..5b05068c00 100644
--- a/vendor/drupal/console-en/translations/application.yml
+++ b/vendor/drupal/console-en/translations/application.yml
@@ -29,7 +29,7 @@ messages:
     files:
         generated: 'Generated or updated files'
         copied: 'Copied files'
-    lines-code: 'Generated lines: "%s"'
+    lines-code: 'Generated lines: %s'
     path: 'Generation path'
     learning:
         route: "In order to to create pages it is necessary to define routes for them.\nA route maps a URL path to a controller. It defines what function\nor method will be called when a URL is accessed.\nIf the user accesses http://drupal8.dev/{{ route.path }}, the routing\nsystem will look for a route with that path. In this case it will find a\nmatch, and execute the _controller callback. In this case the callback is\ndefined as a classname\n(\"\\Drupal\\{{ module }}\\Controller\\{{ class_name }}\")\nand a method (\"{{ route.method }}\")."
@@ -43,7 +43,7 @@ messages:
                 <info>source "$HOME/.console/console.rc" 2>/dev/null</info>
 
                 Fish: Create a symbolic link
-                <info>ln -s ~/.console/drupal.fish ~/.config/fish/completions/drupal.fish</info>
+                <info>mkdir -p ~/.config/fish/completions/ && ln -s ~/.console/drupal.fish ~/.config/fish/completions/drupal.fish</info>
     version: '<info>"%s"</info> version <comment>"%s"</comment>'
     disable:
       command:
@@ -53,6 +53,16 @@ errors:
     invalid-command: 'Command "%s", is not a valid command name.'
     renamed-command: 'Command "%s" was renamed, use "%s" instead.'
     drush-command: 'Command "%s" is a Drush command (deprecated). Drupal Console equivalent "%s" was executed instead.'
+    statistics-failed: |
+      The Drupal console failed to send statistics. After 10 attempts, this feature was disabled.
+      If you want to enable it again, use the following command:
+
+      <info>drupal settings:set statistics.enabled true</info>
+    statistics-url-failed: |
+      The Drupal console failed to send statistics.
+      You must configure it in the global config.yml, use the following command and choose your preference:
+
+      <info>drupal init</info>
 site:
     messages:
         path: 'Site path'
diff --git a/vendor/drupal/console-en/translations/common.yml b/vendor/drupal/console-en/translations/common.yml
index abc9c4c1c6..1f873fcccb 100644
--- a/vendor/drupal/console-en/translations/common.yml
+++ b/vendor/drupal/console-en/translations/common.yml
@@ -2,15 +2,17 @@ options:
     class: 'Class name'
     events: 'Load events from the container'
     module: 'The Module name.'
-    extension: 'The extension name.'
-    extension-type: 'The extension type.'
+    extension: 'The name of the Extension (modules, profiles or themes name).'
+    extension-type: 'The type of the Extension (can be module, profile or theme).'
     services: 'Load services from the container.'
     tags: 'Set service tags from the container.'
     inputs: 'Create inputs in a form.'
     permissions: 'Create permissions.'
+    theme: 'The Theme name'
 questions:
     class: 'Enter the Class name'
     module: 'Enter the module name'
+    theme: 'Enter the theme name'
     extension: 'Enter the extension name'
     extension-type: 'Enter the extension type'
     confirm: 'Do you want proceed with the operation?'
@@ -55,3 +57,4 @@ messages:
     move-phar: 'Accessing console from anywhere on your system'
     quick-start: 'Download, install and serve Drupal 8'
     available-field-types: 'Available types: <comment>%s</comment>'
+    theme: 'The %s theme is not instaled'
diff --git a/vendor/drupal/console-en/translations/config.delete.yml b/vendor/drupal/console-en/translations/config.delete.yml
index 08e4e37749..b4c6f8d516 100644
--- a/vendor/drupal/console-en/translations/config.delete.yml
+++ b/vendor/drupal/console-en/translations/config.delete.yml
@@ -17,4 +17,3 @@ questions:
 examples:
     - description: 'Provide a config type and a config name'
       execution: drupal config:delete active all
-
diff --git a/vendor/drupal/console-en/translations/config.diff.yml b/vendor/drupal/console-en/translations/config.diff.yml
index 7b3b81ff7c..d74fe914bb 100644
--- a/vendor/drupal/console-en/translations/config.diff.yml
+++ b/vendor/drupal/console-en/translations/config.diff.yml
@@ -15,4 +15,3 @@ messages:
 examples:
     - description: 'Provide a config directory'
       execution: drupal config:diff ../config/path
-
diff --git a/vendor/drupal/console-en/translations/config.edit.yml b/vendor/drupal/console-en/translations/config.edit.yml
index 282e4f2788..a29498bee6 100644
--- a/vendor/drupal/console-en/translations/config.edit.yml
+++ b/vendor/drupal/console-en/translations/config.edit.yml
@@ -12,4 +12,3 @@ examples:
       execution: 'drupal config:edit system.cron'
     - description: 'Edit system cron configurations with "gedit".'
       execution: 'drupal config:edit system.cron gedit'
-
diff --git a/vendor/drupal/console-en/translations/config.export.content.type.yml b/vendor/drupal/console-en/translations/config.export.content.type.yml
index 488f2f961d..6eb4e93544 100644
--- a/vendor/drupal/console-en/translations/config.export.content.type.yml
+++ b/vendor/drupal/console-en/translations/config.export.content.type.yml
@@ -3,21 +3,27 @@ arguments:
     content-type: 'Content Type to be exported'
 questions:
     content-type: 'Content Type to be exported'
+    remove-uuid: 'Content Type to be exported without uuid key.'
     optional-config: 'Export content type in module as an optional configuration'
+    all: 'All content types'
+    remove-config-hash: 'Content type to be exported without the default site hash key.'
+    include-module-dependencies: 'Include content type module dependencies in module info YAML file'
 messages:
     content-type-exported: 'Exporting content type'
 options:
     optional-config: 'Export content type as an optional YAML configuration in your module'
     remove-uuid: 'If set, the configuration will be exported without uuid key.'
     remove-config-hash: 'If set, the configuration will be exported without the default site hash key.'
+    include-module-dependencies: 'Include content type module dependencies in module info YAML file'
 examples:
-    - description: 'Provide a content type  and module name'
+    - description: 'Provide a content type and module name.'
       execution: |
         drupal config:export:content:type page \
           --module="demo"
-    - description: 'If you want export content type provide the optional config'
+    - description: 'Export content type as an optional config for the provided module.'
       execution: |
         drupal config:export:content:type page \
           --module="demo" \
-          --optional-config 
-
+          --optional-config \
+          --remove-uuid \
+          --remove-config-hash
diff --git a/vendor/drupal/console-en/translations/config.export.entity.yml b/vendor/drupal/console-en/translations/config.export.entity.yml
new file mode 100644
index 0000000000..612c4d7578
--- /dev/null
+++ b/vendor/drupal/console-en/translations/config.export.entity.yml
@@ -0,0 +1,31 @@
+description: 'Export a specific config entity and their fields.'
+arguments:
+    entity-type: 'An entity type (node_type, taxonomy_vocabulary, paragraphs_type) to be exported'
+    bundle: 'A bundle to be exported'
+questions:
+    all: 'All'
+    entity-type: 'Select entity type'
+    bundle: 'A bundle to be exported'
+    remove-uuid: 'The bundle to be exported without uuid key.'
+    optional-config: 'Export the bundle in the module as an optional configuration'
+    remove-config-hash: 'The bundle to be exported without the default site hash key.'
+    include-module-dependencies: 'Include bundle module dependencies in module info YAML file'
+messages:
+    bundle-exported: 'Exporting bundle %s'
+options:
+    optional-config: 'Export bundle as an optional YAML configuration in your module'
+    remove-uuid: 'If set, the configuration will be exported without uuid key.'
+    remove-config-hash: 'If set, the configuration will be exported without the default site hash key.'
+    include-module-dependencies: 'Include bundle module dependencies in module info YAML file'
+examples:
+    - description: 'Provide an entity type, a bundle and a module name'
+      execution: |
+        drupal config:export:entity node_type page \
+          --module="demo"
+    - description: 'If you want export a bundle as an optional config'
+      execution: |
+        drupal config:export:entity node_type page \
+          --module="demo" \
+          --optional-config \
+          --remove-uuid \
+          --remove-config-hash
diff --git a/vendor/drupal/console-en/translations/config.export.single.yml b/vendor/drupal/console-en/translations/config.export.single.yml
index 102cffe072..5a5668d37e 100644
--- a/vendor/drupal/console-en/translations/config.export.single.yml
+++ b/vendor/drupal/console-en/translations/config.export.single.yml
@@ -1,7 +1,6 @@
 description: 'Export a single configuration or a list of configurations as yml file(s).'
-arguments:
-    name: 'Configuration name.'
 options:
+    name: 'Configuration name.'
     include-dependencies: 'Export dependencies of the configuration as well.'
     simple-configuration: 'Simple configuration'
     optional: 'Export config as an optional YAML configuration in your module'
@@ -20,11 +19,11 @@ messages:
     invalid-config-name: 'Invalid config name, please select one of the list'
     config-exported: 'Configuration(s) exported successfully'
 examples:
-    - description: 'Provide config settings name to be exported'
+    - description: 'Provide config settings name to be exported.'
       execution: |
         drupal config:export:single \
           --name=config.settings.name
-    - description: 'if uuid and/or config hashes will be removed.'
+    - description: 'Export with uuid and config hashes removed.'
       execution: |
         drupal config:export:single \
           --name=config.settings.name \
diff --git a/vendor/drupal/console-en/translations/config.export.view.yml b/vendor/drupal/console-en/translations/config.export.view.yml
index ede7018337..c4574cbe7d 100644
--- a/vendor/drupal/console-en/translations/config.export.view.yml
+++ b/vendor/drupal/console-en/translations/config.export.view.yml
@@ -1,23 +1,35 @@
-description: 'Export a view in YAML format inside a provided module to reuse in other website.'
+description: 'Export a view in YAML format inside a provided module to reuse in another website.'
 messages:
-    view_exported: 'View exported sucessfully'
+    view-exported: 'View exported sucessfully'
     depencies-included: 'The following module dependencies were included at "%s"'
+    wrong-view: 'The view "%s" does not exist'
 questions:
     view: 'View to be exported'
     optional-config: 'Export view in module as an optional configuration'
     include-module-dependencies: 'Include view module dependencies in module info YAML file'
+    remove-uuid: 'The view to be exported without uuid key.'
+    remove-config-hash: 'The view to be exported without the default site hash key.'
 arguments:
     view-id: 'View ID'
 options:
     optional-config: 'Export view as an optional YAML configuration in your module'
-    include-module-dependencies: 'Include module dependencies in module info YAML file'
+    include-module-dependencies: 'Include view module dependencies in module info YAML file'
+    remove-uuid: 'If set, the configuration will be exported without uuid key.'
+    remove-config-hash: 'If set, the configuration will be exported without the default site hash key.'
 examples:
-    - description: 'Provide a view id'
+    - description: 'Perform a simple export.'
       execution: drupal config:export:view viewid
-    - description: 'You can provide the interactive values like parameter.'
+    - description: 'Export as optional config for the provided module.'
+      execution: |
+        drupal config:export:view viewid \
+          --module="modulename" \
+          --optional-config \
+          --include-module-dependencies \
+          --remove-uuid \
+          --remove-config-hash
+    - description: "Export as config for the provided module, updating the module's info.yml with any module dependencies from the view."
       execution: |
         drupal config:export:view viewid \
           --module="modulename" \
           --optional-config \
           --include-module-dependencies
-
diff --git a/vendor/drupal/console-en/translations/config.export.yml b/vendor/drupal/console-en/translations/config.export.yml
index 66f83289da..b7cdda30e8 100644
--- a/vendor/drupal/console-en/translations/config.export.yml
+++ b/vendor/drupal/console-en/translations/config.export.yml
@@ -4,6 +4,8 @@ options:
     tar: 'If set, the configuration will be exported to an archive file.'
     remove-uuid: 'If set, the configuration will be exported without uuid key.'
     remove-config-hash: 'If set, the configuration will be exported without the default site hash key.'
+questions:
+    directory: 'Enter the directory name to save the configuration files.'
 messages:
     directory: 'The configuration was exported at "%s"'
     error: 'An error occurred while creating your directory at "%s"'
@@ -12,11 +14,10 @@ examples:
       execution: |
         drupal config:export  \
           --directory="path/to/export"
-    - description: 'If export will be in a compressed file and/or if uuid and config hashes will be removed.'
+    - description: 'Export as a compressed file with uuid and config hashes removed'
       execution: |
         drupal config:export  \
           --directory="path/to/export" \
           --tar \
           --remove-uuid \
           --remove-config-hash
-
diff --git a/vendor/drupal/console-en/translations/config.import.single.yml b/vendor/drupal/console-en/translations/config.import.single.yml
index 02e9569fe2..98df6091dc 100644
--- a/vendor/drupal/console-en/translations/config.import.single.yml
+++ b/vendor/drupal/console-en/translations/config.import.single.yml
@@ -4,7 +4,7 @@ options:
     directory: 'The path from where to import file(s).'
 questions:
     file: 'Enter file name or file absolute path to import'
-    directory: 'Enter path from where to import files.'
+    directory: 'Enter absolute path from where to import files.'
 messages:
     missing-file: 'File option is missing.'
     empty-value: 'Value can not be empty'
diff --git a/vendor/drupal/console-en/translations/config.import.yml b/vendor/drupal/console-en/translations/config.import.yml
index 30e1a8848b..372c53e382 100644
--- a/vendor/drupal/console-en/translations/config.import.yml
+++ b/vendor/drupal/console-en/translations/config.import.yml
@@ -3,6 +3,9 @@ options:
     file: 'Path to an archive file of configuration to import.'
     directory: 'Path to a directory of configuration to import.'
     remove-files: 'Remove files after synchronization.'
+    skip-uuid: 'Skip uuid from files'
+questions:
+    directory: 'Enter the directory name to import the configuration files.'
 messages:
     config_files_imported: 'List of config files.'
     imported: 'Configuration imported successfully.'
@@ -18,4 +21,3 @@ examples:
       execution: |
         drupal config:import  \
           --directory=/path/to/config/dir
-
diff --git a/vendor/drupal/console-en/translations/config.override.yml b/vendor/drupal/console-en/translations/config.override.yml
index 94d0e37d5f..16dde41871 100644
--- a/vendor/drupal/console-en/translations/config.override.yml
+++ b/vendor/drupal/console-en/translations/config.override.yml
@@ -2,9 +2,10 @@ description: 'Override config value in active configuration.'
 questions:
     name: 'Enter configuration name'
     key: 'Enter the configuration key'
-    value: 'Enter the configuration value'
+    value: 'Enter the "%s" configuration value'
 arguments:
     name: 'Configuration name'
+options:
     key: 'Key'
     value: 'Value'
 messages:
@@ -13,7 +14,14 @@ messages:
     original: 'Original Value'
     updated: 'Override Value'
     invalid-name: 'Config object "%s" does not exist.'
+    invalid-config-file: 'Config file does not exist.'
 examples:
-    - description: 'Set the Contact module flood limit to 10.'
-      execution: 'drupal config:override contact.settings flood.limit 10'
-
+    - description: "Override options from the Who's new view"
+      execution: |
+        drupal config:override views.view.who_s_new \
+          --key='langcode' \
+          --key='label' \
+          --key='display.default.position' \
+          --value='es' \
+          --value='New label' \
+          --value='1'
diff --git a/vendor/drupal/console-en/translations/config.validate.yml b/vendor/drupal/console-en/translations/config.validate.yml
index b34ac21bea..c5647042cd 100644
--- a/vendor/drupal/console-en/translations/config.validate.yml
+++ b/vendor/drupal/console-en/translations/config.validate.yml
@@ -7,4 +7,3 @@ messages:
 examples:
     - description: 'Provide the configuration name.'
       execution: 'drupal config:validate configuration.name'
-
diff --git a/vendor/drupal/console-en/translations/create.comments.yml b/vendor/drupal/console-en/translations/create.comments.yml
index f3a7a6539c..b39aa147f5 100644
--- a/vendor/drupal/console-en/translations/create.comments.yml
+++ b/vendor/drupal/console-en/translations/create.comments.yml
@@ -38,4 +38,3 @@ examples:
           --limit="2" \
           --title-words="5" \
           --time-range="1"
-
diff --git a/vendor/drupal/console-en/translations/create.nodes.yml b/vendor/drupal/console-en/translations/create.nodes.yml
index 34cdc2666d..0d0073633d 100644
--- a/vendor/drupal/console-en/translations/create.nodes.yml
+++ b/vendor/drupal/console-en/translations/create.nodes.yml
@@ -7,6 +7,7 @@ options:
     limit: 'How many nodes would you like to create'
     title-words: 'Maximum number of words in node titles'
     time-range: 'How far back in time should the nodes be dated'
+    revision: 'Create revisions'
 questions:
     content-type: 'Select content type(s) to be used on node creation'
     limit: 'Enter how many nodes would you like to generate'
@@ -19,6 +20,7 @@ questions:
         - '1 week ago'
         - '1 month ago'
         - '1 year ago'
+    revision: 'Do you want to add revisions?'
 messages:
     node-id: 'Node Id'
     content-type: 'Content type'
@@ -36,5 +38,5 @@ examples:
           --limit="5" \
           --title-words="5" \
           --time-range="1" \
+          --revision \
           --language="und"
-
diff --git a/vendor/drupal/console-en/translations/create.roles.yml b/vendor/drupal/console-en/translations/create.roles.yml
index 7584c5d9e4..8d5f77daa3 100644
--- a/vendor/drupal/console-en/translations/create.roles.yml
+++ b/vendor/drupal/console-en/translations/create.roles.yml
@@ -16,4 +16,3 @@ examples:
     - description: 'Provide the number of roles to create'
       execution: |
         drupal create:roles
-
diff --git a/vendor/drupal/console-en/translations/create.terms.yml b/vendor/drupal/console-en/translations/create.terms.yml
index be26f06cc3..b4fce530c0 100644
--- a/vendor/drupal/console-en/translations/create.terms.yml
+++ b/vendor/drupal/console-en/translations/create.terms.yml
@@ -25,4 +25,3 @@ examples:
         drupal create:terms tags \
           --limit="10" \
           --name-words="5"
-
diff --git a/vendor/drupal/console-en/translations/create.users.yml b/vendor/drupal/console-en/translations/create.users.yml
index 3225da4baa..b4f4550245 100644
--- a/vendor/drupal/console-en/translations/create.users.yml
+++ b/vendor/drupal/console-en/translations/create.users.yml
@@ -35,4 +35,3 @@ examples:
           --limit="5" \
           --password="usersnewpassword" \
           --time-range="1"
-
diff --git a/vendor/drupal/console-en/translations/create.vocabularies.yml b/vendor/drupal/console-en/translations/create.vocabularies.yml
index ca70cf4dc6..db9d8bd672 100644
--- a/vendor/drupal/console-en/translations/create.vocabularies.yml
+++ b/vendor/drupal/console-en/translations/create.vocabularies.yml
@@ -18,4 +18,3 @@ examples:
         drupal create:vocabularies \
           --limit="5" \
           --name-words="5"
-    
diff --git a/vendor/drupal/console-en/translations/cron.release.yml b/vendor/drupal/console-en/translations/cron.release.yml
index c7a8313f00..2de2f01a6c 100644
--- a/vendor/drupal/console-en/translations/cron.release.yml
+++ b/vendor/drupal/console-en/translations/cron.release.yml
@@ -5,4 +5,3 @@ examples:
     - description: 'Execute the cron globally'
       execution: |
         drupal cron:execute
-
diff --git a/vendor/drupal/console-en/translations/database.add.yml b/vendor/drupal/console-en/translations/database.add.yml
index 2fb04a14b8..6c47cad878 100644
--- a/vendor/drupal/console-en/translations/database.add.yml
+++ b/vendor/drupal/console-en/translations/database.add.yml
@@ -7,6 +7,7 @@ options:
   host: 'The database host address'
   port: 'The database host port'
   driver: 'The database driver'
+  default: 'Set the database as the default one'
 questions:
   database: 'Enter the database name'
   username: 'Enter the username to access the database'
diff --git a/vendor/drupal/console-en/translations/database.client.yml b/vendor/drupal/console-en/translations/database.client.yml
index b2c9a4bd7c..d1fca4a61d 100644
--- a/vendor/drupal/console-en/translations/database.client.yml
+++ b/vendor/drupal/console-en/translations/database.client.yml
@@ -1,6 +1,7 @@
 description: 'Launch a DB client if it''s available'
 arguments:
-    database: "Database key from settings.php"
+    database: 'Database key from settings.php'
+    target: 'Database target from settings.php'
 messages:
     connection: 'Connection: "%s"'
 examples:
diff --git a/vendor/drupal/console-en/translations/database.connect.yml b/vendor/drupal/console-en/translations/database.connect.yml
index a771d7d219..8b42502581 100644
--- a/vendor/drupal/console-en/translations/database.connect.yml
+++ b/vendor/drupal/console-en/translations/database.connect.yml
@@ -1,13 +1,14 @@
 description: "Shows DB connection"
 arguments:
-  database: "Database key from settings.php"
+  key: "Database key from settings.php"
+  target: "Database target from settings.php"
 messages:
-    database-not-found: 'Database "%s" connection info wasn''t found'
+    database-not-found: 'Database connection with key "%s" and target "%s" info wasn''t found'
     database-not-supported: 'Database type "%s" is not supported yet'
     database-client-not-found: 'Database client "%s" wasn''t found'
     connection: 'Connection: "%s"'
 examples:
-    - description: 'Connects to an specified database, or the default if not arguments passed'
+    - description: 'Connects to an specified database with key and target, or if no arguments default key and default target will be passed'
       execution: |
         drupal database:connect \
-          <database>
+          <key> <target>
diff --git a/vendor/drupal/console-en/translations/database.drop.yml b/vendor/drupal/console-en/translations/database.drop.yml
index 6f71d05bd5..adf64b1386 100644
--- a/vendor/drupal/console-en/translations/database.drop.yml
+++ b/vendor/drupal/console-en/translations/database.drop.yml
@@ -1,7 +1,8 @@
-description: "Drop all tables in a given database."
+description: 'Drop all tables in a given database.'
 help: 'The <info>database:drop</info> command helps you drop database tables.'
 arguments:
   database: 'Database key from settings.php'
+  target: 'Database target from settings.php'
 question:
     drop-tables: 'Confirm you really want to drop all tables in the database "%s"?'
 messages:
diff --git a/vendor/drupal/console-en/translations/database.dump.yml b/vendor/drupal/console-en/translations/database.dump.yml
index 4abeb0a642..3e8f937418 100644
--- a/vendor/drupal/console-en/translations/database.dump.yml
+++ b/vendor/drupal/console-en/translations/database.dump.yml
@@ -1,9 +1,11 @@
 description: 'Dump structure and contents of a database'
 arguments:
   database: 'Database key from settings.php'
+  target: 'Database target from settings.php'
 options:
   file: 'The filename for your database backup'
   gz: 'Pass this option if you want the sql result file gzipped'
+  exclude-cache: 'Pass this option if you want to exclude cache tables.'
 messages:
     success: 'Database exported to:'
 examples:
@@ -14,4 +16,4 @@ examples:
     - description: 'Dump in gz compressed format'
       execution: |
         drupal database:dump \
-          --gz
\ No newline at end of file
+          --gz
diff --git a/vendor/drupal/console-en/translations/database.log.clear.yml b/vendor/drupal/console-en/translations/database.log.clear.yml
index a5812dccb3..ed91346744 100644
--- a/vendor/drupal/console-en/translations/database.log.clear.yml
+++ b/vendor/drupal/console-en/translations/database.log.clear.yml
@@ -19,4 +19,4 @@ examples:
         drupal database:log:clear \
           <database> \
           --type=TYPE \
-          --severity=SEVERITY
\ No newline at end of file
+          --severity=SEVERITY
diff --git a/vendor/drupal/console-en/translations/database.log.common.yml b/vendor/drupal/console-en/translations/database.log.common.yml
index a0afaf323e..46aca7290d 100644
--- a/vendor/drupal/console-en/translations/database.log.common.yml
+++ b/vendor/drupal/console-en/translations/database.log.common.yml
@@ -9,4 +9,5 @@ messages:
     message: Message
     user: User
     severity: Severity
-    invalid-severity: 'Severity type is invalid, filter was ignored'
\ No newline at end of file
+    invalid-severity: 'Severity type is invalid, filter was ignored'
+    user-deleted: 'User has been deleted'
diff --git a/vendor/drupal/console-en/translations/database.query.yml b/vendor/drupal/console-en/translations/database.query.yml
index 4e010a3939..890c96e664 100644
--- a/vendor/drupal/console-en/translations/database.query.yml
+++ b/vendor/drupal/console-en/translations/database.query.yml
@@ -2,6 +2,7 @@ description: 'Executes a SQL statement directly as argument'
 arguments:
     query: 'The SQL statement to execute'
     database: 'Database key from settings.php'
+    target: 'Database target from settings.php'
 options:
     quick: 'Do not cache each query result, print each row as it is received'
     debug: 'Prints debugging information and memory and CPU usage statistics when the program exits'
diff --git a/vendor/drupal/console-en/translations/database.restore.yml b/vendor/drupal/console-en/translations/database.restore.yml
index b11d5f2b84..2f5c8847e7 100644
--- a/vendor/drupal/console-en/translations/database.restore.yml
+++ b/vendor/drupal/console-en/translations/database.restore.yml
@@ -1,8 +1,9 @@
 description: 'Restore structure and contents of a database.'
 arguments:
   database: 'Database key from settings.php'
+  target: 'Database target from settings.php'
 options:
-  file: 'The filename for your database backup file. If using a .sql.gz file, the gunzip command needs to be installed.'
+  file: 'The filename for your database backup file (absolute path) . If using a .sql.gz file, the gunzip command needs to be installed.'
 messages:
     success: 'Database imported from:'
     no-file: 'Missing file option'
diff --git a/vendor/drupal/console-en/translations/debug.breakpoints.yml b/vendor/drupal/console-en/translations/debug.breakpoints.yml
index e88c54fed2..a3f917a105 100644
--- a/vendor/drupal/console-en/translations/debug.breakpoints.yml
+++ b/vendor/drupal/console-en/translations/debug.breakpoints.yml
@@ -3,9 +3,6 @@ options:
   group-name: 'Enter Breakpoint Group Name'
 messages:
   name: 'Extensions with breakpoints'
-examples:
-    - description: 'Provide a group name.'
-      execution: drupal debug:breakpoints bartik
 examples:
     - description: 'Displays the breakpoints available on the site'
       execution: |
diff --git a/vendor/drupal/console-en/translations/debug.event.yml b/vendor/drupal/console-en/translations/debug.event.yml
index e9197b33f0..e3ff5b44a6 100644
--- a/vendor/drupal/console-en/translations/debug.event.yml
+++ b/vendor/drupal/console-en/translations/debug.event.yml
@@ -10,7 +10,7 @@ messages:
 examples:
     - description: 'List all the events that could be debugged'
       execution: |
-        drupal debug:evet
+        drupal debug:event
     - description: 'Show the information for the kernel.request event'
       execution: |
-        drupal debug:event kernel.request
\ No newline at end of file
+        drupal debug:event kernel.request
diff --git a/vendor/drupal/console-en/translations/debug.features.yml b/vendor/drupal/console-en/translations/debug.features.yml
index 5ef07c5d8a..a7bf0958b7 100644
--- a/vendor/drupal/console-en/translations/debug.features.yml
+++ b/vendor/drupal/console-en/translations/debug.features.yml
@@ -8,4 +8,3 @@ messages:
   machine-name: 'Machine Name'
   status: 'Status'
   state: 'State'
-
diff --git a/vendor/drupal/console-en/translations/debug.module.yml b/vendor/drupal/console-en/translations/debug.module.yml
index 034d88adfa..e565a082a6 100644
--- a/vendor/drupal/console-en/translations/debug.module.yml
+++ b/vendor/drupal/console-en/translations/debug.module.yml
@@ -13,12 +13,8 @@ messages:
     uninstalled: Uninstalled
     version: Version
     schema-version: 'Schema version'
-    total-downloads: 'Total installs'
-    total-monthly: 'Monthly installs'
-    total-daily: 'Daily installs'
-    no-results: 'Module "%s" was not found in the repository'
 examples:
     - description: 'Display all installed modules'
-      execution: 'drupal mod --status=installed'
-    - description: 'Display all installed and no core modules'
-      execution: 'drupal mod --status=installed --type=no-core'
+      execution: 'drupal debug:module --status=installed'
+    - description: 'Display all installed and no core modules with alias'
+      execution: 'drupal dm --status=installed --type=no-core'
diff --git a/vendor/drupal/console-en/translations/debug.router.yml b/vendor/drupal/console-en/translations/debug.router.yml
index 1341a87eee..114c702ac2 100644
--- a/vendor/drupal/console-en/translations/debug.router.yml
+++ b/vendor/drupal/console-en/translations/debug.router.yml
@@ -1,6 +1,8 @@
 description: 'Displays current routes for the application or information for a particular route'
 arguments:
     route-name: 'Route names'
+options:
+    pattern: 'Route pattern'
 messages:
     name: 'Route name'
     class: 'Class path'
@@ -14,10 +16,12 @@ examples:
       execution: 'drupal rod'
     - description: 'Displays details for the route user.page (/user)'
       execution: 'drupal rod user.page'
-examples:
     - description: 'Shows the routes list on the site'
       execution: |
         drupal debug:router
     - description: 'Display information on the user.login'
       execution: |
-        drupal debug:router user.login
\ No newline at end of file
+        drupal debug:router user.login
+    - description: 'Display information for the routes by pattern (/user/login)'
+      execution: |
+        drupal debug:router --pattern=/user/login
diff --git a/vendor/drupal/console-en/translations/debug.theme.yml b/vendor/drupal/console-en/translations/debug.theme.yml
index fac0258006..54fa6557bf 100644
--- a/vendor/drupal/console-en/translations/debug.theme.yml
+++ b/vendor/drupal/console-en/translations/debug.theme.yml
@@ -19,4 +19,4 @@ examples:
         drupal debug:theme
     - description: 'Bartik theme information'
       execution: |
-        drupal debug:theme bartik
\ No newline at end of file
+        drupal debug:theme bartik
diff --git a/vendor/drupal/console-en/translations/debug.update.composer.yml b/vendor/drupal/console-en/translations/debug.update.composer.yml
new file mode 100644
index 0000000000..5213cb97c8
--- /dev/null
+++ b/vendor/drupal/console-en/translations/debug.update.composer.yml
@@ -0,0 +1,13 @@
+description: 'Displays current updates available from the composer file'
+options:
+    only-drupal: Show only drupal (modules/themes) updates
+messages:
+    description: 'Description'
+    current-version: 'Version'
+    latest-version: 'Latest'
+    name: 'Name'
+    composer-list: 'Composer with pending updates'
+examples:
+    - description: 'List of pending updates from composer'
+      execution: |
+        drupal debug:update:composer
diff --git a/vendor/drupal/console-en/translations/entity.delete.yml b/vendor/drupal/console-en/translations/entity.delete.yml
index e465677e2d..d4fd13b980 100644
--- a/vendor/drupal/console-en/translations/entity.delete.yml
+++ b/vendor/drupal/console-en/translations/entity.delete.yml
@@ -1,4 +1,4 @@
-description: 'Delete an specific entity'
+description: 'Delete a specific entity'
 help: 'The <info>entity:delete</info> command helps you delete entities.'
 arguments:
   entity-definition-id: 'Entity definition id'
diff --git a/vendor/drupal/console-en/translations/exec.yml b/vendor/drupal/console-en/translations/exec.yml
index 9f4d52c338..bcf34e2549 100644
--- a/vendor/drupal/console-en/translations/exec.yml
+++ b/vendor/drupal/console-en/translations/exec.yml
@@ -10,4 +10,3 @@ messages:
   binary-not-found: 'Unable to find the binary "%s" to execute.'
   working-directory: 'Working directory'
   executing-command: 'Executing command'
-
diff --git a/vendor/drupal/console-en/translations/generate.ajax.command.yml b/vendor/drupal/console-en/translations/generate.ajax.command.yml
index 39836810d0..ac46f1a193 100644
--- a/vendor/drupal/console-en/translations/generate.ajax.command.yml
+++ b/vendor/drupal/console-en/translations/generate.ajax.command.yml
@@ -10,4 +10,4 @@ questions:
   module: 'Enter the module name'
   class: 'Enter the Ajax class name'
   method: 'Enter the render method name'
-  js-name: 'Enter a custom javascript name'
\ No newline at end of file
+  js-name: 'Enter a custom javascript name'
diff --git a/vendor/drupal/console-en/translations/generate.block.type.yml b/vendor/drupal/console-en/translations/generate.block.type.yml
new file mode 100644
index 0000000000..9957fdcafe
--- /dev/null
+++ b/vendor/drupal/console-en/translations/generate.block.type.yml
@@ -0,0 +1,26 @@
+description: 'Generate a block content type'
+help: 'The <info>generate:block:type</info> command helps you generate a new block content type.'
+welcome: 'Welcome to the Drupal Block Type generator'
+options:
+  module: 'The Module name.'
+  class: 'Block type class name'
+  block-label: 'Block content type label'
+  block-description: 'Block content type description'
+  block-id: 'Block id'
+questions:
+  module: 'Enter the module name'
+  class: 'Enter the block class name'
+  block-label: 'Enter the block label'
+  block-description: 'Enter the block description'
+  block-id: 'Enter the block content type id'
+  description: 'Description'
+  default-value: 'Default value'
+messages:  
+examples:
+  - description: 'Generate a block content type specifying the module name'
+    execution: |
+      drupal generate:block:type  \
+        --module="modulename"  \
+        --class="DefaultBlock"  \
+        --label="Default block"  \
+        --block-id="default_block"
\ No newline at end of file
diff --git a/vendor/drupal/console-en/translations/generate.breakpoint.yml b/vendor/drupal/console-en/translations/generate.breakpoint.yml
index 9b79cbdd15..3962b307a1 100644
--- a/vendor/drupal/console-en/translations/generate.breakpoint.yml
+++ b/vendor/drupal/console-en/translations/generate.breakpoint.yml
@@ -17,4 +17,4 @@ examples:
     execution: |
       drupal generate:breakpoint  \
         --theme="classy"  \
-        --breakpoints='"breakpoint_name":"narrow", "breakpoint_label":"narrow", "breakpoint_media_query":"all and (min-width: 560px) and (max-width: 850px)", "breakpoint_weight":"1", "breakpoint_multipliers":"1x"'
\ No newline at end of file
+        --breakpoints='"breakpoint_name":"narrow", "breakpoint_label":"narrow", "breakpoint_media_query":"all and (min-width: 560px) and (max-width: 850px)", "breakpoint_weight":"1", "breakpoint_multipliers":"1x"'
diff --git a/vendor/drupal/console-en/translations/generate.cache.context.yml b/vendor/drupal/console-en/translations/generate.cache.context.yml
index 6058d4af6d..31101cec5d 100644
--- a/vendor/drupal/console-en/translations/generate.cache.context.yml
+++ b/vendor/drupal/console-en/translations/generate.cache.context.yml
@@ -15,4 +15,4 @@ examples:
       drupal generate:cache:context  \
         --module="modulename"  \
         --cache-context="ContextName"  \
-        --class="DefaultCacheContext"
\ No newline at end of file
+        --class="DefaultCacheContext"
diff --git a/vendor/drupal/console-en/translations/generate.command.yml b/vendor/drupal/console-en/translations/generate.command.yml
index 745203475b..48e1697176 100644
--- a/vendor/drupal/console-en/translations/generate.command.yml
+++ b/vendor/drupal/console-en/translations/generate.command.yml
@@ -2,7 +2,8 @@ description: 'Generate commands for the console.'
 help: 'The <info>generate:command</info> command helps you generate a new command.'
 welcome: 'Welcome to the Drupal Command generator'
 options:
-  extension: 'The name of the Extension (that will contain the command).'
+  extension: 'The name of the Extension (modules, profiles or themes name that will contain the command).'
+  extension-type: 'The type of the Extension (can be module, profile or theme).'
   class: 'The Class that describes the command. (Must end with the word ''Command'').'
   name: 'The Command name.'
   interact: 'Add interact method.'
@@ -28,4 +29,4 @@ examples:
         --extension="ExtensionName"  \
         --extension-type="module"  \
         --class="DefaultCommand"  \
-        --name="CommandName"
\ No newline at end of file
+        --name="CommandName"
diff --git a/vendor/drupal/console-en/translations/generate.composer.yml b/vendor/drupal/console-en/translations/generate.composer.yml
new file mode 100644
index 0000000000..32e425f9ff
--- /dev/null
+++ b/vendor/drupal/console-en/translations/generate.composer.yml
@@ -0,0 +1,58 @@
+description: 'Generate a composer.json file'
+help: 'The <info>"%s"</info> command helps you generate a new composer.json file'
+welcome: 'Welcome to the Drupal Composer file generator'
+options:
+  module: common.options.module
+  name: 'Package name'
+  type: 'Package type'
+  description: 'Package description'
+  keywords: 'Package keywords'
+  license: 'License'
+  homepage: 'Project homepage'
+  minimum-stability: 'Mininmal stability'
+  authors: 'Authors of the project'
+  support: 'Support channels'
+  required: 'Required packages'
+questions:
+  module: common.questions.module
+  name: 'Enter package name'
+  type: 'Enter package type'
+  description: 'Enter package description'
+  add-keywords: 'Do you want to add package keywords?'
+  keyword: 'Enter a keyword or press <info>enter</info> to continue'
+  license: 'Enter license information'
+  homepage: 'Enter project homepage'
+  minimum-stability: 'Enter mininmal stability (stable, dev, alpha, beta and RC)'
+  add-author: 'Do you want to add authors of the project?'
+  add-another-author: 'Do you want to add another authors of the project?'
+  author-name: 'Enter author name or press <info>enter</info> to skip it'
+  author-email: 'Enter author email or press <info>enter</info> to skip it'
+  author-homepage: 'Enter author homepage or press <info>enter</info> to skip it'
+  author-role: 'Enter author role or press <info>enter</info> to skip it'
+  add-support: 'Do you want to add information about support channels?'
+  add-another-support: 'Do you want to add another information about support channels?'
+  support-channel: 'Enter support channel (email, issues, forum, wiki, irc, source, docs, rss)'
+  support-value: 'Enter support channel value'
+  add-required: 'Do you want to add required packages for the project?'
+  add-another-required: 'Do you want to add another required packages for the project?'
+  required-name: 'Enter required package name'
+  required-version: 'Enter required package version'
+suggestions:
+  description-for-menu: 'A description for the menu entry'
+examples:
+  - description: 'Generate composer file specifying the module machine name, package name, package type, package description, keywords, lincense, homepage, minimum stability, authors, support channels and required packages'
+    execution: |
+      drupal generate:composer \
+        --module="module_name" \
+        --name="drupal/module_name" \
+        --type="drupal-module" \
+        --description="Package description" \
+        --keywords='Drupal' --keywords='logging' \
+        --license="GPL-2.0+" \
+        --homepage="https://www.drupal.org/project/module_name" \
+        --minimum-stability="stable" \
+        --authors='"name":"Author name", "email":"author@email.com", "homepage":"http://website.com", "role":"Developer"' \
+        --support='"channel":"email", "url":"author@email.com"' \
+        --support='"channel":"source", "url":"http://github.com"' \
+        --required='"name":"drupal/views", "version":"^1.0"' \
+        --required='"name":"drupal/token", "version":"^2.0"'
diff --git a/vendor/drupal/console-en/translations/generate.controller.yml b/vendor/drupal/console-en/translations/generate.controller.yml
index 5b05332f92..16ab440a47 100644
--- a/vendor/drupal/console-en/translations/generate.controller.yml
+++ b/vendor/drupal/console-en/translations/generate.controller.yml
@@ -27,4 +27,4 @@ examples:
         --module="modulename"  \
         --class="DefaultController"  \
         --routes='"title":"ControllerMethod", "name":"modulename.default_controller_hello", "method":"hello", "path":"/modulename/hello/{name}"'  \
-        --test
\ No newline at end of file
+        --test
diff --git a/vendor/drupal/console-en/translations/generate.entity.bundle.yml b/vendor/drupal/console-en/translations/generate.entity.bundle.yml
index f3106b3fc3..b7d75d6e31 100644
--- a/vendor/drupal/console-en/translations/generate.entity.bundle.yml
+++ b/vendor/drupal/console-en/translations/generate.entity.bundle.yml
@@ -17,4 +17,4 @@ examples:
       drupal generate:entity:bundle  \
         --module="modulename"  \
         --bundle-name="default"  \
-        --bundle-title="default"
\ No newline at end of file
+        --bundle-title="default"
diff --git a/vendor/drupal/console-en/translations/generate.entity.config.yml b/vendor/drupal/console-en/translations/generate.entity.config.yml
index 67b06b4cf9..a30869f458 100644
--- a/vendor/drupal/console-en/translations/generate.entity.config.yml
+++ b/vendor/drupal/console-en/translations/generate.entity.config.yml
@@ -23,4 +23,4 @@ examples:
         --entity-class="DefaultEntity"  \
         --entity-name="default_entity"  \
         --base-path="/admin/structure"  \
-        --label="Default entity"
\ No newline at end of file
+        --label="Default entity"
diff --git a/vendor/drupal/console-en/translations/generate.entity.content.yml b/vendor/drupal/console-en/translations/generate.entity.content.yml
index 8be970c525..a1341ecbaa 100644
--- a/vendor/drupal/console-en/translations/generate.entity.content.yml
+++ b/vendor/drupal/console-en/translations/generate.entity.content.yml
@@ -7,17 +7,23 @@ options:
   entity-name: 'The content entity name'
   label: 'The label'
   has-bundles: 'Entity has bundles'
+  has-forms: 'Entity has forms'
+  has-owner: 'Entity has owner'
   base-path: 'The base-path for the content entity routes'
   is-translatable: 'Content entity translatable'
+  has-bundle-permissions: 'Permissions on bundle level'
 questions:
   module: 'Enter the module name'
   entity-class: 'Enter the class of your new content entity'
   entity-name: 'Enter the machine name of your new content entity'
   label: 'Enter the label of your new content entity'
   has-bundles: 'Do you want this (content) entity to have bundles?'
+  has-forms: 'Do you want this (content) entity to have forms?'
+  has-owner: 'Do you want this (content) entity to have an owner?'
   base-path: 'Enter the base-path for the content entity routes'
   is-translatable: 'Is your entity translatable?'
   revisionable: 'Is your entity revisionable?'
+  has-bundle-permissions: 'Do you want this entity to have "per bundle" permissions?'
 examples:
   - description: 'Generate a content entity specifying the module, the entity class, the entity name, its path and label'
     execution: |
@@ -36,4 +42,5 @@ examples:
         --base-path="/admin/structure"  \
         --label="Default entity"  \
         --is-translatable  \
-        --revisionable
\ No newline at end of file
+        --revisionable
+        --has-forms
diff --git a/vendor/drupal/console-en/translations/generate.form.alter.yml b/vendor/drupal/console-en/translations/generate.form.alter.yml
index afd16b83d6..4e7ab96cd5 100644
--- a/vendor/drupal/console-en/translations/generate.form.alter.yml
+++ b/vendor/drupal/console-en/translations/generate.form.alter.yml
@@ -28,4 +28,4 @@ examples:
       drupal generate:form:alter  \
         --module="modulename"  \
         --inputs='"name":"inputtext", "type":"text_format", "label":"InputText", "options":"", "description":"Just an input text", "maxlength":"", "size":"", "default_value":"", "weight":"0", "fieldset":""'  \
-        --inputs='"name":"email", "type":"email", "label":"Email", "options":"", "description":"Just an email input", "maxlength":"", "size":"", "default_value":"", "weight":"0", "fieldset":""'
\ No newline at end of file
+        --inputs='"name":"email", "type":"email", "label":"Email", "options":"", "description":"Just an email input", "maxlength":"", "size":"", "default_value":"", "weight":"0", "fieldset":""'
diff --git a/vendor/drupal/console-en/translations/generate.help.yml b/vendor/drupal/console-en/translations/generate.help.yml
index 7f04a2d6e2..ec21b8d068 100644
--- a/vendor/drupal/console-en/translations/generate.help.yml
+++ b/vendor/drupal/console-en/translations/generate.help.yml
@@ -14,4 +14,4 @@ examples:
     execution: |
       drupal generate:help  \
         --module="modulename"  \
-        --description="My Awesome Module"
\ No newline at end of file
+        --description="My Awesome Module"
diff --git a/vendor/drupal/console-en/translations/generate.module.file.yml b/vendor/drupal/console-en/translations/generate.module.file.yml
index abaedd57b1..df3f205971 100644
--- a/vendor/drupal/console-en/translations/generate.module.file.yml
+++ b/vendor/drupal/console-en/translations/generate.module.file.yml
@@ -9,4 +9,4 @@ examples:
   - description: 'Generate the .module file specifying the module name'
     execution: |
       drupal generate:module:file  \
-        --module="modulename"
\ No newline at end of file
+        --module="modulename"
diff --git a/vendor/drupal/console-en/translations/generate.module.yml b/vendor/drupal/console-en/translations/generate.module.yml
index 12925f2fe6..36bcb84832 100644
--- a/vendor/drupal/console-en/translations/generate.module.yml
+++ b/vendor/drupal/console-en/translations/generate.module.yml
@@ -41,7 +41,7 @@ examples:
       drupal generate:module  \
         --module="modulename"  \
         --machine-name="modulename"  \
-        --module-path="/modules/custom"  \
+        --module-path="modules/custom"  \
         --description="My Awesome Module"  \
         --core="8.x"  \
         --package="Custom"  \
diff --git a/vendor/drupal/console-en/translations/generate.plugin.block.yml b/vendor/drupal/console-en/translations/generate.plugin.block.yml
index 6510194d09..908a8596f5 100644
--- a/vendor/drupal/console-en/translations/generate.plugin.block.yml
+++ b/vendor/drupal/console-en/translations/generate.plugin.block.yml
@@ -4,15 +4,16 @@ welcome: 'Welcome to the Drupal Plugin Block generator'
 options:
   module: 'The Module name.'
   class: 'Plugin class name'
-  label: 'Plugin label'
+  plugin-label: 'Plugin label'
   plugin-id: 'Plugin id'
   inputs: 'Create inputs in a form.'
   services: 'Load services from the container.'
   theme-region: 'Theme region to render Plugin Block'
+  twigtemplate: 'Generate theme template'
 questions:
   module: 'Enter the module name'
   class: 'Enter the plugin class name'
-  label: 'Enter the plugin label'
+  plugin-label: 'Enter the plugin label'
   plugin-id: 'Enter the plugin id'
   services: 'Enter your service'
   theme-region: 'Enter the theme region to render the Plugin Block.'
@@ -21,6 +22,7 @@ questions:
   description: 'Description'
   default-value: 'Default value'
   weight: 'Weight for input item'
+  twigtemplate: 'Do you want to generate a themeable template?'
 messages:
   inputs: "\nYou can add input fields to create special configurations in the block.\nThis is optional, press <info>enter</info> to <info>continue</info>"
   invalid-theme-region: 'Region "%s" is invalid'
@@ -33,4 +35,4 @@ examples:
         --label="Default block"  \
         --plugin-id="default_block"  \
         --theme-region="header"  \
-        --inputs='"name":"inputtext", "type":"text_format", "label":"InputText", "options":"", "description":"Just an input text", "maxlength":"", "size":"", "default_value":"", "weight":"0", "fieldset":""'
\ No newline at end of file
+        --inputs='"name":"inputtext", "type":"text_format", "label":"InputText", "options":"", "description":"Just an input text", "maxlength":"", "size":"", "default_value":"", "weight":"0", "fieldset":""'
diff --git a/vendor/drupal/console-en/translations/generate.plugin.ckeditorbutton.yml b/vendor/drupal/console-en/translations/generate.plugin.ckeditorbutton.yml
index 36d5c7f61e..f03c5e33b2 100644
--- a/vendor/drupal/console-en/translations/generate.plugin.ckeditorbutton.yml
+++ b/vendor/drupal/console-en/translations/generate.plugin.ckeditorbutton.yml
@@ -6,8 +6,8 @@ options:
   class: 'Plugin class name'
   label: 'Plugin label'
   plugin-id: 'Plugin ID. NOTE: This corresponds to the CKEditor plugin name. It is the first argument of the CKEDITOR.plugins.add() function in the plugin.js file.'
-  button-name: 'Button name. NOTE: This corresponds to the CKEditor button name. They are the first argument of the editor.ui.addButton() or editor.ui.addRichCombo() functions in the plugin.js file.'
-  button-icon-path: 'Button icon path. This is the path to the icon/image of the button.'
+  buttons: 'CKEditor buttons.'
+  button-properties: 'Enter a new button properties.'
 questions:
   module: 'Enter the module name'
   class: 'Enter the plugin class name'
@@ -15,13 +15,24 @@ questions:
   plugin-id: 'Enter the plugin ID. NOTE: This corresponds to the CKEditor plugin name. It is the first argument of the CKEDITOR.plugins.add() function in the plugin.js file.'
   button-name: 'Enter the button name. NOTE: This corresponds to the CKEditor button name. They are the first argument of the editor.ui.addButton() or editor.ui.addRichCombo() functions in the plugin.js file.'
   button-icon-path: 'Enter the button icon path'
+  button-label: 'Enter the button label'
+  button-add: 'Do you want to add another button?'
 examples:
   - description: 'Generate plugin CKEditor button specifying the module name, the class, the label, its id, the button name and the icon path'
     execution: |
+      drupal generate:plugin:ckeditorbutton  \
+        --module="modulename" \
+        --class="DefaultCKEditorButton" \
+        --label="Default ckeditor button" \
+        --plugin-id="default_ckeditor_button" \
+        --buttons='name":"Default ckeditor button", "label":"Default ckeditor button", "icon":"modules/custom/modulename/js/plugins/default_ckeditor_button/images/icon.png"' \
+        --buttons='name":"My ckeditor button", "label":"My ckeditor button", "icon":"modules/custom/modulename/js/plugins/my_ckeditor_button/images/icon.png"' \
+        --no-interaction
+
       drupal generate:plugin:ckeditorbutton  \
         --module="modulename"  \
         --class="DefaultCKEditorButton"  \
         --label="Default ckeditor button"  \
         --plugin-id="default ckeditor button"  \
         --button-name="Default ckeditor button"  \
-        --button-icon-path="modules/custom/modulename/js/plugins/default ckeditor button/images/icon.png"
\ No newline at end of file
+        --button-icon-path="modules/custom/modulename/js/plugins/default ckeditor button/images/icon.png"
diff --git a/vendor/drupal/console-en/translations/generate.plugin.derivative.yml b/vendor/drupal/console-en/translations/generate.plugin.derivative.yml
new file mode 100644
index 0000000000..1515d99dbf
--- /dev/null
+++ b/vendor/drupal/console-en/translations/generate.plugin.derivative.yml
@@ -0,0 +1,29 @@
+description: 'Generate a custom block plugin derivative'
+help: 'The <info>generate:plugin:derivative</info> command helps you generate a new custom plugin block derivative'
+welcome: 'Welcome to the Drupal Plugin Block Derivative generator'
+options:
+  module: 'The Module name.'
+  class: 'The Class name.'
+  block_label: 'The Block label'
+  block_description: 'The Block description'
+  block_id: 'The Block id'
+questions:
+  module: 'Enter the module name'
+  class: 'Enter the plugin block derivative class name'
+  block_label: 'Enter the Block label'
+  block_description: 'Enter the Block description'
+  block_id: 'Enter the Block id'
+suggestions:
+  class: 'CustomBlockDerivative'
+  block_description: 'My custom block derivative.'
+  block_label: 'Custom block derivative'
+  block_id: 'custom_block_derivative'
+examples:
+  - description: 'Generate a custom view field plugin specifying the module name, the class, a title and its description'
+    execution: |
+      drupal generate:plugin:views:field  \
+        --module="modulename"  \
+        --class="CustomBlockDerivative"  \
+        --block-label="Custom block derivative"  \
+        --block-description="My custom block derivative." \
+        --block-id="custom_block_derivative"
diff --git a/vendor/drupal/console-en/translations/generate.plugin.migrate.dataparser.yml b/vendor/drupal/console-en/translations/generate.plugin.migrate.dataparser.yml
new file mode 100644
index 0000000000..e4da83a7db
--- /dev/null
+++ b/vendor/drupal/console-en/translations/generate.plugin.migrate.dataparser.yml
@@ -0,0 +1,20 @@
+description: 'Generate a migrate data parser'
+help: 'The <info>generate:plugin:migrate:dataparser</info> command helps you generate a new migrate data parser.'
+welcome: 'Welcome to the Drupal Migrate Data Parser generator'
+options:
+  module: 'The Module name.'
+  class: 'Plugin class name'
+  plugin-id: 'Plugin id'
+  plugin-title: 'Plugin title'
+questions:
+  class: 'Enter the plugin class name'
+  plugin-id: 'Enter the plugin id'
+  plugin-title: 'Enter the plugin title'
+examples:
+  - description: 'Generate a migration data parser specifying the module name, the class, the plugin id and the plugin title'
+    execution: |
+      drupal generate:plugin:migrate:source  \
+        --module="modulename"  \
+        --class="PluginClassName"  \
+        --plugin-id="plugin_class_name"  \
+        --plugin-title="Data parser"
diff --git a/vendor/drupal/console-en/translations/generate.plugin.queue.yml b/vendor/drupal/console-en/translations/generate.plugin.queue.yml
new file mode 100644
index 0000000000..f09ad5e4c9
--- /dev/null
+++ b/vendor/drupal/console-en/translations/generate.plugin.queue.yml
@@ -0,0 +1,25 @@
+description: 'Drupal Console Queueworker generator.'
+help: 'The <info>generate:plugin:queue</info> command helps you generate a new queue worker plugin.'
+welcome: 'Welcome to the Drupal Queue Worker Plugin generator'
+options:
+  module: 'The module name'
+  class: 'QueueWorker file name'
+  plugin-id: 'Plugin QueueWorker id'
+  cron-time: 'Cron time'
+  label: 'Queue description'
+questions:
+  class: 'Enter the QueueWorker class name'
+  plugin-id: 'Enter the Plugin QueueWorker id'
+  cron-time: 'Enter the cron time to execute you queue'
+  label: 'Enter the Queue description'
+examples:
+  - description: 'Generate a queue worker plugin specifying the module name, the class and its plugin id'
+    execution: |
+      drupal generate:plugin:queue  \
+        --module="modulename"  \
+        --class="PluginClassName"  \
+        --plugin-id="plugin_class_name"  \
+        --cron-time="30"  \
+        --label="Example QueueWorker"
+messages:
+    success: 'The Queueworker was generated successfully.'
diff --git a/vendor/drupal/console-en/translations/generate.plugin.rules.action.yml b/vendor/drupal/console-en/translations/generate.plugin.rules.action.yml
index aa5d942af0..1fe7907890 100644
--- a/vendor/drupal/console-en/translations/generate.plugin.rules.action.yml
+++ b/vendor/drupal/console-en/translations/generate.plugin.rules.action.yml
@@ -1,5 +1,5 @@
 description: 'Generate a plugin rule action'
-help: 'The <info>generate:plugin:rulesaction</info> command helps you generate a new plugin rule action.'
+help: 'The <info>generate:plugin:rules:action</info> command helps you generate a new plugin rule action.'
 welcome: 'Welcome to the Drupal Plugin Rules Action generator'
 options:
   module: common.options.module
diff --git a/console/language/console-en/translations/generate.plugin.rules.action.yml b/vendor/drupal/console-en/translations/generate.plugin.rules.condition.yml
similarity index 53%
rename from console/language/console-en/translations/generate.plugin.rules.action.yml
rename to vendor/drupal/console-en/translations/generate.plugin.rules.condition.yml
index aa5d942af0..3329990283 100644
--- a/console/language/console-en/translations/generate.plugin.rules.action.yml
+++ b/vendor/drupal/console-en/translations/generate.plugin.rules.condition.yml
@@ -1,5 +1,5 @@
-description: 'Generate a plugin rule action'
-help: 'The <info>generate:plugin:rulesaction</info> command helps you generate a new plugin rule action.'
+description: 'Generate a plugin rule condition'
+help: 'The <info>generate:plugin:rules:condition</info> command helps you generate a new plugin rule condition.'
 welcome: 'Welcome to the Drupal Plugin Rules Action generator'
 options:
   module: common.options.module
@@ -21,21 +21,12 @@ questions:
   context-label: 'Enter context label'
   context-description: 'Enter context description'
 examples:
-  - description: 'Generate a user rule action plugin specifying the module name, the class, its label, the plugin id, the type, the category and its context'
+  - description: 'Generate a rule condition plugin specifying the module name, the class, its label, the plugin id, the type, the category and its context'
     execution: |
-      drupal generate:plugin:rules:action \
+      drupal generate:plugin:rules:condition \
         --module="modulename" \
         --class="DefaultAction" \
         --label="Default Action" \
-        --plugin-id="default_action" \
+        --plugin-id="default_condition" \
         --category="Action category" \
         --context='"name":"user", "type":"entity:user", "label":"Context label", "description":"Context description"'
-  - description: 'Generate a entity rule action plugin specifying the module name, the class, its label, the plugin id, the type, the category and its context'
-    execution: |
-      drupal generate:plugin:rules:action \
-        --module="modulename" \
-        --class="DefaultAction" \
-        --label="Default Action" \
-        --plugin-id="default_action" \
-        --category="Action category" \
-        --context='"entity":"node", "type":"entity", "label":"Context label", "description":"Context description"'
diff --git a/vendor/drupal/console-en/translations/generate.plugin.rules.dataprocessor.yml b/vendor/drupal/console-en/translations/generate.plugin.rules.dataprocessor.yml
new file mode 100644
index 0000000000..3896ddb95e
--- /dev/null
+++ b/vendor/drupal/console-en/translations/generate.plugin.rules.dataprocessor.yml
@@ -0,0 +1,24 @@
+description: 'Generate a plugin rule dataprocessor'
+help: 'The <info>generate:plugin:rules:dataprocessor</info> command helps you generate a new Plugin rule dataprocessor.'
+welcome: 'Welcome to the Drupal Plugin Rules Dataprocessor generator'
+options:
+  module: common.options.module
+  class: 'Plugin class name'
+  label: 'Plugin label'
+  plugin-id: 'Plugin id'
+  category: 'Plugin category'
+  context: 'Plugin context'
+  type: 'Dataprocessor Type (user or node)'
+questions:
+  module: 'Enter the module name'
+  class: 'Enter the plugin class name'
+  label: 'Enter the plugin label'
+  plugin-id: 'Enter the plugin id'
+examples:
+  - description: 'Generate a user rule dataprocessor plugin specifying the module name, the class, its label, the plugin id, the type, the category and its context'
+    execution: |
+      drupal generate:plugin:rules:dataprocessor  \
+        --module="modulename"  \
+        --class="DefaultDataprocessor"  \
+        --label="Default dataprocessor"  \
+        --plugin-id="default_dataprocessor"  \
diff --git a/vendor/drupal/console-en/translations/generate.plugin.validationconstraint.yml b/vendor/drupal/console-en/translations/generate.plugin.validationconstraint.yml
new file mode 100644
index 0000000000..0727ee42ec
--- /dev/null
+++ b/vendor/drupal/console-en/translations/generate.plugin.validationconstraint.yml
@@ -0,0 +1,29 @@
+description: 'Generate a validation constraint plugin.'
+help: 'The <info>generate:plugin:validationconstraint</info> command helps you generate a new validation constraint plugin.'
+welcome: 'Welcome to the Drupal Validation Constraint Plugin generator'
+options:
+  class: 'Plugin class name'
+  label: 'Plugin label'
+  plugin-id: 'Plugin id'
+  hook: 'Generate hook to validate a field'
+  bundle: 'Bundle'
+  field-id: 'Field id'
+questions:
+  class: 'Enter the plugin class name'
+  label: 'Enter the plugin label'
+  plugin-id: 'Enter the plugin id'
+  hook: 'Do you want to generate a hook to validate a field?'
+  bundle: 'Enter entity bundle'
+  field-id: 'Enter field id'
+examples:
+  - description: 'Generate a validation constraint plugin specifying the module name, the class, its label, the plugin id, the entity bundle and the field id'
+    execution: |
+      drupal generate:plugin:validationconstraint  \
+        --module="modulename" \
+        --class="ExampleConstraint" \
+        --label="Example validation constraint" \
+        -plugin-id="example_validation_constraint" \
+        --hook \
+        --field-id="field_exmaple_id" \
+        --bundle="entity_example_bundle" \
+        --no-interaction
diff --git a/vendor/drupal/console-en/translations/generate.plugin.views.field.yml b/vendor/drupal/console-en/translations/generate.plugin.views.field.yml
index 5d86754713..0750835e41 100644
--- a/vendor/drupal/console-en/translations/generate.plugin.views.field.yml
+++ b/vendor/drupal/console-en/translations/generate.plugin.views.field.yml
@@ -3,15 +3,16 @@ help: 'The <info>generate:plugin:views:field</info> command helps you generate a
 welcome: 'Welcome to the Drupal Plugin View Field generator'
 options:
   module: 'The Module name.'
-  class: 'Views plugin field class name'
-  title: 'Views plugin field title'
-  description: 'Views plugin field description'
+  fields: 'Fields definition (class name, title and description).'
 questions:
   module: 'Enter the module name'
   class: 'Enter the views plugin field class name'
   title: 'Enter the views plugin field title'
   description: 'Enter the views plugin field description'
   description_default: 'My awesome custom views field plugin.'
+  field-add: 'Do you want to add another field?'
+messages:
+  views-data-already-implemented: 'The hook views data was already implemented in module "%s". Please, merge the code manually'
 examples:
   - description: 'Generate a custom view field plugin specifying the module name, the class, a title and its description'
     execution: |
diff --git a/vendor/drupal/console-en/translations/generate.service.yml b/vendor/drupal/console-en/translations/generate.service.yml
index 567907b14b..bbf1cf3a55 100644
--- a/vendor/drupal/console-en/translations/generate.service.yml
+++ b/vendor/drupal/console-en/translations/generate.service.yml
@@ -7,6 +7,7 @@ options:
   class: 'Class name'
   interface: 'Interface'
   interface-name: 'Interface name'
+  logger-channel: 'Logger channel'
   services: 'Load services from the container.'
   path-service:  'Path'
 questions:
@@ -15,6 +16,7 @@ questions:
   class: 'Enter the Class name'
   interface: 'Create an interface'
   interface-name: 'Enter the interface name'
+  logger-channel: 'Create a logger channel'
   services: 'Enter your service'
   path-service: 'Enter the path for the services'
 messages:
diff --git a/vendor/drupal/console-en/translations/generate.site.alias.yml b/vendor/drupal/console-en/translations/generate.site.alias.yml
index ca3a7c179d..8ca417980d 100644
--- a/vendor/drupal/console-en/translations/generate.site.alias.yml
+++ b/vendor/drupal/console-en/translations/generate.site.alias.yml
@@ -8,7 +8,8 @@ options:
   host: 'The ip/domain name of the remote system. Not required on local sites.'
   port: 'The port to use when connecting via ssh.'
   user: 'The username to use when connecting via ssh.'
-  extra-options: 'Used only when the target requires extra options, such as alternative authentication method and/or alternative identity file.'
+  drupal-console-binary: 'The name of your drupal console binary. By default is "drupal"'
+  extra-options: 'Used only when the target requires extra options, such as tty option and/or alternative authentication method and/or alternative identity file.'
   site-uri: 'Drupal uri (for multi-sites).'
   directory: 'Directory to store the generated site alias.'
   site: 'Use local site as destination.'
@@ -20,6 +21,22 @@ questions:
   host: 'Enter the ip/domain name of the remote system.'
   port: 'Enter the port to use when connecting via ssh.'
   user: 'Enter the username to use when connecting via ssh.'
+  drupal-console-binary: 'Enter the name of your drupal console binary'
   extra-options: 'Select or enter a valid extra option.'
   site-uri: 'Enter the Drupal uri (for multi-sites).'
   directory: 'Select the directory to store the generated site alias.'
+examples:
+  - description: 'Generate site alias to connect with ssh using tty as extra-option'
+    execution: |
+      drupal generate:site:alias  \
+        --name="demo"  \
+        --environment="dev"  \
+        --type="ssh" \
+        --composer-root="/path/to/remote/project" \
+        --site-uri="default" \
+        --host="hostName/domain" \
+        --user="userName" \
+        --port="port" \
+        --drupal-console-binary="drupal" \
+        --extra-options="-tt" \
+        --directory="/Users/hjuarez/drupalSq/console/"
diff --git a/vendor/drupal/console-en/translations/generate.theme.setting.yml b/vendor/drupal/console-en/translations/generate.theme.setting.yml
new file mode 100644
index 0000000000..497218b638
--- /dev/null
+++ b/vendor/drupal/console-en/translations/generate.theme.setting.yml
@@ -0,0 +1,30 @@
+description: 'Generate a setting configuration theme'
+help: 'The <info>generate:theme:setting</info> command helps you generates a config YML file.'
+welcome: 'Welcome to the Drupal theme setting generator'
+options:
+  theme: 'The theme name'
+  theme-path: 'The path of the theme'
+  favicon: 'Favicon supplied by the theme'
+  comment-user-picture: 'User pictures in comments'
+  comment-user-verification: 'User verification status in comments'
+  node-user-picture: 'User pictures in posts'
+  logo: 'Logo supplied by the theme'
+  merge-existing-file: 'Merge the configuration with the existing file'
+questions:
+  theme: 'Enter the new theme name'
+  theme-path: 'Add the path of the theme'
+  favicon: 'Use the favicon supplied by the theme'
+  comment-user-picture: 'Use the user pictures in comments'
+  comment-user-verification: 'Use the user verification status in comments'
+  node-user-picture: 'Use the user pictures in posts'
+  logo: 'Use the logo supplied by the theme'
+  merge-existing-file: 'Merge the configuration with the existing file'
+suggestions:
+  my-awesome-theme: 'My Awesome theme'
+  other: 'Other'
+warnings:
+  module-unavailable: 'Warning The following modules are not available in your local environment "%s"'
+errors:
+  theme: 'The name theme "%s" is invalid.'
+  directory-notexists: 'The target directory "%s" not exists.'
+examples:
diff --git a/vendor/drupal/console-en/translations/generate.theme.yml b/vendor/drupal/console-en/translations/generate.theme.yml
index 9b54abd943..658040127f 100644
--- a/vendor/drupal/console-en/translations/generate.theme.yml
+++ b/vendor/drupal/console-en/translations/generate.theme.yml
@@ -10,6 +10,7 @@ options:
   package: 'Theme package'
   composer: 'Add a composer.json file'
   base-theme: 'Base theme (i.e. classy, stable)'
+  base-theme-regions: 'Add the default regions of the chosen base theme'
   global-library: 'Global styling library name'
   libraries: 'Libraries'
   regions: Regions
diff --git a/vendor/drupal/console-en/translations/init.yml b/vendor/drupal/console-en/translations/init.yml
index d2bc26a8aa..66c8b1cdf3 100644
--- a/vendor/drupal/console-en/translations/init.yml
+++ b/vendor/drupal/console-en/translations/init.yml
@@ -11,7 +11,21 @@ questions:
   temp: 'Enter temporary file path'
   chain: 'Copy chain files examples'
   sites: 'Copy site alias files examples'
-  temp: 'Enter temporary file path'
   learning: 'Shows information for learning purposes?'
   generate-inline: 'Show inline representation of the executed command?'
   generate-chain: 'Show chain representation of the executed command?'
+  statistics: 'Allow to collect and send this information to drupalConsole server?'
+messages:
+  statistics: |
+      Help us improve the Drupal Console project, providing information about how you use the application.
+      The colleted information at "%s", would be:
+
+      - Used language
+      - Executed command
+      - Generated lines of code
+
+      You could read about our privacy policy at http://drupalconsole.com/privacy.
+  statistics-disable: |
+      You can stop sending information using the following command:
+
+      drupal settings:set statistics.enabled false
diff --git a/vendor/drupal/console-en/translations/migrate.rollback.yml b/vendor/drupal/console-en/translations/migrate.rollback.yml
index 36666266ff..13bdae8e59 100644
--- a/vendor/drupal/console-en/translations/migrate.rollback.yml
+++ b/vendor/drupal/console-en/translations/migrate.rollback.yml
@@ -3,4 +3,4 @@ arguments:
     id: 'Migration id(s)'
 messages:
     not-available: 'Migration Id "%s" is invalid.Skipping'
-    processing: 'Rollback "%s" completed'
\ No newline at end of file
+    processing: 'Rollback "%s" completed'
diff --git a/vendor/drupal/console-en/translations/module.download.yml b/vendor/drupal/console-en/translations/module.download.yml
index 03e3c478ef..f12d21d88c 100644
--- a/vendor/drupal/console-en/translations/module.download.yml
+++ b/vendor/drupal/console-en/translations/module.download.yml
@@ -4,8 +4,6 @@ arguments:
 options:
   latest: 'Default to download most recent version'
   path: 'The path of the contrib project'
-  composer: 'Option to point out that the module will be downloaded, managed & installed by Composer'
-  unstable: 'Module unstable'
 questions:
   path: 'Enter the contrib project Path'
 messages:
@@ -16,8 +14,6 @@ messages:
   select-release: 'Please select your favorite release'
   outside-drupal: 'Drupal root can''t be determined. Use --root to set the destination, current folder will be used instead of.'
   error-creating-folder: 'Error creating folder "%s", please check your permissions'
-  no-composer-repo: 'Please, configure Composer in ~/.console/config.yml'
-  composer: 'Module "%s" was downloaded successfully using Composer'
 examples:
   - description: 'Download module specifying module name and its path'
     execution: |
diff --git a/vendor/drupal/console-en/translations/module.uninstall.yml b/vendor/drupal/console-en/translations/module.uninstall.yml
index 3b6d6a8225..4b6b8d4976 100644
--- a/vendor/drupal/console-en/translations/module.uninstall.yml
+++ b/vendor/drupal/console-en/translations/module.uninstall.yml
@@ -1,9 +1,10 @@
 description: 'Uninstall module or modules in the application'
+arguments:
+  module: 'Module or modules to be uninstalled should be separated by a space'
 questions:
   module: 'Module name (press <return> to stop adding modules)'
   invalid-module: 'Invalid module "%s"'
 options:
-  module: 'Module or modules to be uninstalled should be separated by a space'
   force: 'Do you want to ignore dependencies and forcefully uninstall the module?'
   composer: 'Uninstalls the module using Composer'
 messages:
diff --git a/vendor/drupal/console-en/translations/multisite.new.yml b/vendor/drupal/console-en/translations/multisite.new.yml
index 0f361ba2a3..a59711f779 100644
--- a/vendor/drupal/console-en/translations/multisite.new.yml
+++ b/vendor/drupal/console-en/translations/multisite.new.yml
@@ -25,4 +25,4 @@ messages:
 examples:
   - description: 'Set up files for a multisite install specifying destination path and uri'
     execution: |
-      drupal multisite:new  vendor/newsite http://mysite.example.com
+      drupal multisite:new  newsite http://newsite.com
diff --git a/vendor/drupal/console-en/translations/queue.run.yml b/vendor/drupal/console-en/translations/queue.run.yml
index 0411433d81..58e299a177 100644
--- a/vendor/drupal/console-en/translations/queue.run.yml
+++ b/vendor/drupal/console-en/translations/queue.run.yml
@@ -6,4 +6,3 @@ messages:
   failed: '"%s" failed: "%s".'
   missing-name: 'Provide a valid queue name.'
   invalid-name: 'Invalid queue name "%s" provided.'
-
diff --git a/vendor/drupal/console-en/translations/router.rebuild.yml b/vendor/drupal/console-en/translations/router.rebuild.yml
index bc0fbc17e3..c11c79e7be 100644
--- a/vendor/drupal/console-en/translations/router.rebuild.yml
+++ b/vendor/drupal/console-en/translations/router.rebuild.yml
@@ -4,6 +4,7 @@ arguments:
 messages:
   rebuilding: 'Rebuilding routes, wait a moment please'
   completed: 'Done rebuilding route(s).'
+  error-rebuild: 'Error to rebuild route(s).'
 examples:
   - description: 'Rebuild routes'
     execution:
diff --git a/vendor/drupal/console-en/translations/self-update.yml b/vendor/drupal/console-en/translations/self-update.yml
index 72014fd3a1..755af9ec42 100644
--- a/vendor/drupal/console-en/translations/self-update.yml
+++ b/vendor/drupal/console-en/translations/self-update.yml
@@ -17,4 +17,3 @@ messages:
    Or you can switch to a Phar install recommended
    composer global remove drupal/console
    curl https://drupalconsole.com/installer -L -o drupal.phar
-
diff --git a/vendor/drupal/console-en/translations/service.override.yml b/vendor/drupal/console-en/translations/service.override.yml
new file mode 100644
index 0000000000..e421a5cbba
--- /dev/null
+++ b/vendor/drupal/console-en/translations/service.override.yml
@@ -0,0 +1,26 @@
+description: 'Override services value.'
+questions:
+    name: 'Enter service name'
+    key: 'Enter the service key'
+    value: 'Enter the "%s" service value'
+arguments:
+    name: 'Service name'
+options:
+    key: 'Key'
+    value: 'Value'
+messages:
+    service-name: 'Service name'
+    service-key: 'Service key'
+    original: 'Original Value'
+    updated: 'Override Value'
+    invalid-name: 'Service object "%s" does not exist.'
+    invalid-config-file: 'Service file does not exist.'
+examples:
+    - description: "Override options from twig.config service"
+      execution: |
+        drupal service:override twig.config \
+          --key='debug' \
+          --key='cache' \
+          --value='true' \
+          --value='false' \
+          --no-interaction
diff --git a/vendor/drupal/console-en/translations/site.install.yml b/vendor/drupal/console-en/translations/site.install.yml
index a831470393..bcfd83fac2 100644
--- a/vendor/drupal/console-en/translations/site.install.yml
+++ b/vendor/drupal/console-en/translations/site.install.yml
@@ -2,6 +2,7 @@ description: 'Install a Drupal project'
 arguments:
   profile: 'Drupal Profile to be installed'
   langcode: 'Drupal language'
+  db-url: 'Use Database url to the installation instead of using the options. (Sqlite is not supported)'
   db-type: 'Drupal Database type to be used in install'
   db-file: 'Drupal Database file to be used in install'
   site-name: 'Drupal site name'
@@ -26,9 +27,12 @@ messages:
   installed: 'Your Drupal 8 installation was completed successfully'
   using-current-database: 'Using "%s" database with name "%s" and user "%s"'
   already-installed: 'Drupal is already installed, try dropping your database executing database:drop or install executing site:install --force --no-interaction'
+  connection-failed: 'Connection to the database failed, please check your settings file that has the correct username, password, database, host, port configured.'
   sites-backup: 'The sites.php file has temporarily been renamed to backup.sites.php while Drupal installs.'
   sites-restore: 'The backup of sites.php has been been restored to sites.php.'
   invalid-multisite: 'Invalid multisite, please create multisite using command drupal multisite:new "%s" "%s"'
+  invalid-db-url: 'Invalid database url, please provide a valid url like "mysql://dbUser:dbPass@dbHost/dbName"'
+  invalid-url-driver: 'Invalid database type, the Sqlite driver is not supported'
 examples:
   - description: 'Install a drupal project specifying installation type, language code, database configuration, site name, site email and admin credential settings'
     execution: |
@@ -45,4 +49,12 @@ examples:
         --account-name="admin"  \
         --account-mail="admin@example.com"  \
         --account-pass="p455w0rd"
-
+  - description: 'Install a drupal project using a mysql url'
+    execution: |
+      drupal site:install  standard  mysql://dbUser:dbPass@dbHost/dbName \
+        --langcode="en"  \
+        --site-name="Drupal 8"  \
+        --site-mail="admin@example.com"  \
+        --account-name="admin"  \
+        --account-mail="admin@example.com"  \
+        --account-pass="p455w0rd"
diff --git a/vendor/drupal/console-en/translations/site.status.yml b/vendor/drupal/console-en/translations/site.status.yml
index 8d8dffde99..21d661c506 100644
--- a/vendor/drupal/console-en/translations/site.status.yml
+++ b/vendor/drupal/console-en/translations/site.status.yml
@@ -4,14 +4,14 @@ messages:
   system: 'System Info'
   hash-salt: 'Hash salt'
   console: 'Drupal Console'
-  database: 'Database connection'
+  database: 'Database'
   driver: 'Driver'
   host: 'Host'
   port: 'Port'
-  username: 'Username'
-  password: 'Password'
+  username: 'DB Username'
+  password: 'DB Password'
   theme: 'Themes'
-  connection: 'Connection'
+  connection: 'Connection URL'
   theme-default: 'Default theme'
   theme-admin: 'Admin theme'
   directory: 'Directories'
diff --git a/vendor/drupal/console-en/translations/snippet.yml b/vendor/drupal/console-en/translations/snippet.yml
new file mode 100644
index 0000000000..be650425c6
--- /dev/null
+++ b/vendor/drupal/console-en/translations/snippet.yml
@@ -0,0 +1,16 @@
+description: 'Runs PHP code'
+help: 'Execute a PHP code'
+options:
+  file: 'Path to the file'
+  code: 'Code to execute'
+  show-code: 'Show code after execute'
+errors:
+  invalid-options: 'You need to provide the file option'
+  invalid-file: 'The file "%s" does not exist.'
+examples:
+  - description: 'Run using a file.'
+    execution: 'drupal snippet --file=/path/to/file'
+  - description: 'Passing code as option.'
+    execution: 'drupal snippet --code=codeToExecute'
+  - description: 'Show code executed'
+    execution: 'drupal snippet --show-code --file=/path/to/file'
diff --git a/vendor/drupal/console-en/translations/theme.download.yml b/vendor/drupal/console-en/translations/theme.download.yml
index 6fff4d5d08..31b22ec63c 100644
--- a/vendor/drupal/console-en/translations/theme.download.yml
+++ b/vendor/drupal/console-en/translations/theme.download.yml
@@ -2,8 +2,6 @@ description: 'Download theme in application'
 arguments:
   version: 'Theme version i.e 1.x-dev'
   theme: 'the Theme name'
-options:
-  composer: 'Use --composer option for manage the theme download with Composer'
 messages:
   no-releases: 'There aren''t any releases for theme "%s"'
   getting-releases: 'Getting releases for theme "%s"'
diff --git a/vendor/drupal/console-en/translations/theme.install.yml b/vendor/drupal/console-en/translations/theme.install.yml
index 44605a78d3..b5740e541c 100644
--- a/vendor/drupal/console-en/translations/theme.install.yml
+++ b/vendor/drupal/console-en/translations/theme.install.yml
@@ -19,6 +19,10 @@ messages:
   theme-default-success: 'The "%s" theme has been installed successfully as default theme'
   disabled-themes: 'Only uninstalled themes will be listed in autocomplete'
   invalid-theme-default: 'Option default is only valid for one theme'
+  getting-releases: 'Getting releases for theme "%s"'
+  select-release: 'Please select your favorite release'
+  downloading: 'Downloading theme "%s" release "%s"'
+  downloaded: 'Module "%s" version "%s" was downloaded successfully at "%s"'
 examples:
   - description: 'Install theme specifying the name'
     execution: |
diff --git a/vendor/drupal/console-en/translations/update.execute.yml b/vendor/drupal/console-en/translations/update.execute.yml
index 590a12153c..7f658768bf 100644
--- a/vendor/drupal/console-en/translations/update.execute.yml
+++ b/vendor/drupal/console-en/translations/update.execute.yml
@@ -1,13 +1,20 @@
 description: 'Execute a specific Update N function in a module, or execute all'
+questions:
+  update: 'Do you want to run the specified pending updates?'
+  post-update: 'Do you want to run the specified pending post updates?'
 arguments:
   module: 'Module name'
   update-n: 'Specific Update N function to be executed'
 messages:
   no-module-updates: 'There aren''t updates available for module "%s"'
   executing-update: 'Executing update function "%s" of module "%s"'
+  executing-post-update: 'Executing post update function "%s" of module "%s"'
   module-update-function-not-found: 'Module "%s" doesn''t have a function update for "%s"'
   executing-required-previous-updates: 'Executing required previous updates'
   no-pending-updates: 'There aren''t updates available'
+  no-pending-post-updates: 'There aren''t post updates available'
+  pending-post-updates: 'There are the following post updates available:'
+  pending-updates: 'There are the following updates available:'
 examples:
   - description: 'Execute all updates'
     execution: |
diff --git a/vendor/drupal/console-en/translations/user.login.url.yml b/vendor/drupal/console-en/translations/user.login.url.yml
index 174e98e220..7c3f3e20d3 100644
--- a/vendor/drupal/console-en/translations/user.login.url.yml
+++ b/vendor/drupal/console-en/translations/user.login.url.yml
@@ -11,4 +11,4 @@ examples:
   - description: 'Get one time login url for user id 10'
     execution: drupal user:login:url  10
   - description: 'Get one time login url for username jmolivas'
-    execution: drupal user:login:url jmolivas
\ No newline at end of file
+    execution: drupal user:login:url jmolivas
diff --git a/vendor/drupal/console-en/translations/user.unblock.yml b/vendor/drupal/console-en/translations/user.unblock.yml
new file mode 100644
index 0000000000..4ccccac409
--- /dev/null
+++ b/vendor/drupal/console-en/translations/user.unblock.yml
@@ -0,0 +1,21 @@
+description: 'Unblock a specific user.'
+help: 'The <info>user:unblock</info> command helps you to unblock a specific user.'
+welcome: 'Welcome to the Drupal user unblock'
+options:
+  user: 'User name/id'
+questions:
+  invalid-user: 'Invalid user name/id "%s", user id must be an integer'
+  user: 'Enter User name/id'
+messages:
+  unblock-successful: 'User "%s" was unblocked.'
+warnings:
+  unblocked-user: 'User "%s" is already unblocked'
+errors:
+  invalid-user: 'Invalid user name/id "%s"'
+examples:
+  - description: 'Unblock user providing the user id'
+    execution: |
+      drupal user:unblock 2
+  - description: 'Unblock user providing the user name'
+    execution: |
+      drupal user:unblock johndoe
diff --git a/vendor/drupal/console-extend-plugin/.gitignore b/vendor/drupal/console-extend-plugin/.gitignore
index 3423e54e58..99bfddd336 100644
--- a/vendor/drupal/console-extend-plugin/.gitignore
+++ b/vendor/drupal/console-extend-plugin/.gitignore
@@ -2,15 +2,9 @@
 /.rules
 
 # Composer
-.composer.lock
+composer.lock
 /vendor
 
-# Binaries
-/box.phar
-/console.phar
-/composer.phar
-/drupal.phar
-/drupal.phar.version
 
 # Test
 /phpunit.xml
diff --git a/vendor/drupal/console-extend-plugin/composer.json b/vendor/drupal/console-extend-plugin/composer.json
index 1aabc9f301..1ebea3551f 100644
--- a/vendor/drupal/console-extend-plugin/composer.json
+++ b/vendor/drupal/console-extend-plugin/composer.json
@@ -13,9 +13,10 @@
         "class": "Drupal\\Console\\Composer\\Plugin\\Extender"
     },
     "require": {
-        "composer-plugin-api": "^1.0",
-        "symfony/yaml": "~2.7|~3.0",
-        "symfony/finder": "~2.7|~3.0"
+        "composer-plugin-api": "^1.0 || ^2.0",
+        "composer/installers": "^1.2",
+        "symfony/yaml": "~3.0|^4.4",
+        "symfony/finder": "~3.0|^4.4"
     },
     "minimum-stability": "dev",
     "prefer-stable": true,
diff --git a/vendor/drupal/console-extend-plugin/src/DrupalConsoleInstaller.php b/vendor/drupal/console-extend-plugin/src/DrupalConsoleInstaller.php
new file mode 100644
index 0000000000..b410b5e364
--- /dev/null
+++ b/vendor/drupal/console-extend-plugin/src/DrupalConsoleInstaller.php
@@ -0,0 +1,19 @@
+<?php
+namespace Drupal\Console\Composer\Plugin;
+
+use Composer\Installers\BaseInstaller;
+
+/**
+ * Class DemoInstaller
+ *
+ * @package Composer\Installers
+ */
+class DrupalConsoleInstaller extends BaseInstaller
+{
+  /**
+   * @var array
+   */
+  protected $locations = array(
+    'console-library' => 'vendor/drupal/{$name}/',
+  );
+}
diff --git a/vendor/drupal/console-extend-plugin/src/Extender.php b/vendor/drupal/console-extend-plugin/src/Extender.php
index 186f3218ed..aacc484fa5 100644
--- a/vendor/drupal/console-extend-plugin/src/Extender.php
+++ b/vendor/drupal/console-extend-plugin/src/Extender.php
@@ -38,6 +38,11 @@ public function activate(Composer $composer, IOInterface $io)
     {
         $this->composer = $composer;
         $this->io = $io;
+
+      $installer = new Installer($io, $composer);
+
+      $composer->getInstallationManager()->addInstaller($installer);
+
     }
 
     /**
@@ -155,4 +160,20 @@ protected function removeCacheFiles($directory)
             $this->io->write('<info>Cache file can not be deleted</info>');
         }
     }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function deactivate(Composer $composer, IOInterface $io)
+    {
+        // Nothing to deactivate.
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function uninstall(Composer $composer, IOInterface $io)
+    {
+        // Nothing to uninstall.
+    }	
 }
diff --git a/vendor/drupal/console-extend-plugin/src/Installer.php b/vendor/drupal/console-extend-plugin/src/Installer.php
new file mode 100644
index 0000000000..6fa1bd897a
--- /dev/null
+++ b/vendor/drupal/console-extend-plugin/src/Installer.php
@@ -0,0 +1,71 @@
+<?php
+
+namespace Drupal\Console\Composer\Plugin;
+
+use Composer\IO\IOInterface;
+use Composer\Package\PackageInterface;
+use Composer\Installers\Installer as BaseInstaller;
+
+class Installer extends BaseInstaller
+{
+
+  /**
+   * Package types to installer class map
+   *
+   * @var array
+   */
+  private $supportedTypes = array(
+    'drupal' => 'DrupalConsoleInstaller'
+  );
+
+  /**
+   * {@inheritDoc}
+   */
+  public function getInstallPath(PackageInterface $package)
+  {
+    $type = $package->getType();
+    $frameworkType = $this->findFrameworkType($type);
+
+    if ($frameworkType === false) {
+      throw new \InvalidArgumentException(
+        'Sorry the package type of this package is not yet supported.'
+      );
+    }
+
+    $class = 'Drupal\\Console\\Composer\\Plugin\\' . $this->supportedTypes[$frameworkType];
+    $installer = new $class($package, $this->composer, $this->getIO());
+
+    return $installer->getInstallPath($package, $frameworkType);
+  }
+
+  /**
+   * Get the second part of the regular expression to check for support of a
+   * package type
+   *
+   * @param  string $frameworkType
+   * @return string
+   */
+  protected function getLocationPattern($frameworkType)
+  {
+    $pattern = false;
+    if (!empty($this->supportedTypes[$frameworkType])) {
+      $frameworkClass = 'Drupal\\Console\\Composer\\Plugin\\' . $this->supportedTypes[$frameworkType];
+      /** @var BaseInstaller $framework */
+      $framework = new $frameworkClass(null, $this->composer, $this->getIO());
+      $locations = array_keys($framework->getLocations());
+      $pattern = $locations ? '(' . implode('|', $locations) . ')' : false;
+    }
+
+    return $pattern ? : '(\w+)';
+  }
+
+  /**
+   * Get I/O object
+   *
+   * @return IOInterface
+   */
+  private function getIO()
+  {
+    return $this->io;
+  }
+}
diff --git a/vendor/drupal/console/.github/FUNDING.yml b/vendor/drupal/console/.github/FUNDING.yml
new file mode 100644
index 0000000000..57d82c3f00
--- /dev/null
+++ b/vendor/drupal/console/.github/FUNDING.yml
@@ -0,0 +1,12 @@
+# These are supported funding model platforms
+
+github: # [jmolivas]
+patreon: # Replace with a single Patreon username
+open_collective: drupalconsole 
+ko_fi: # Replace with a single Ko-fi username
+tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
+community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
+liberapay: # Replace with a single Liberapay username
+issuehunt: # Replace with a single IssueHunt username
+otechie: # Replace with a single Otechie username
+custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
diff --git a/vendor/drupal/console/.travis.yml b/vendor/drupal/console/.travis.yml
index c37288a28a..7006848117 100644
--- a/vendor/drupal/console/.travis.yml
+++ b/vendor/drupal/console/.travis.yml
@@ -3,42 +3,77 @@ sudo: false
 language: php
 
 php:
-  - 5.5.9
   - 5.6
   - 7.0
   - 7.1
-  - hhvm
+  - 7.2
+  - 7.3
+  - 7.4snapshot
+
+services:
+  - mysql
 
 matrix:
+  include:
+    - php: 5.5.9
+      dist: trusty
   fast_finish: true
   allow_failures:
-    - php: hhvm
-    - php: 7.0
-    - php: 7.1
+    - php: 7.4snapshot
 
 env:
   global:
-    - PROJECT_DIR=/home/project
+    # Paths.
+    - DRUPAL_PATH="$HOME/drupal8"
+    - PATH="$PATH:$DRUPAL_PATH/vendor/bin:$HOME/.composer/vendor/bin"
+
+    # Suppress deprecation handling.
+    #- SYMFONY_DEPRECATIONS_HELPER=disabled
+
+mysql:
+  database: drupal_travis_db
+  username: root
+  encoding: utf8
 
 before_script:
-  - phpenv config-rm xdebug.ini
-  # This fixes a fail when install Drupal.
-  - echo 'sendmail_path = /bin/true' >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini
-  - composer self-update
-  - composer install --no-dev
-#  - curl -LSs https://box-project.github.io/box2/installer.php | php
-#  - composer global require drupal/coder:~8.1
+  - phpenv config-rm xdebug.ini || true
+
+  # Set variables.
+  - |
+      if [[ "$TRAVIS_PHP_VERSION" == "5.5.9" ]] || [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then
+        export DRUPAL_BRANCH="8.6.x"
+        # PHP 5.5.9 on TravisCI has a Sqlite version that fails
+        # minimum requirements, so we install on MySql instead.
+        export SIMPLETEST_DB="mysql://root:@localhost/drupal_travis_db#drupalconsole"
+        export IMAGEMAGICK_MODULE="drupal/imagemagick:^2"
+      else
+        export DRUPAL_BRANCH="8.8.x"
+        export SIMPLETEST_DB="sqlite://localhost/sites/default/files/.ht.sqlite#drupalconsole"
+        export IMAGEMAGICK_MODULE="drupal/imagemagick:dev-3.x"
+      fi
+
+  # Get Drupal via git, and install it via Composer.
+  - git clone --depth=5 --branch=$DRUPAL_BRANCH http://git.drupal.org/project/drupal.git $DRUPAL_PATH
+  - cd $DRUPAL_PATH
+  - composer install --no-progress --no-suggest
+
+  # Require drupal/console from the source just cloned from GitHub.
+  - cd $TRAVIS_BUILD_DIR
+  - git checkout -b travisci-run-branch
+  - cd $DRUPAL_PATH
+  - |
+      composer config repositories.travisci-run '{"type": "path", "url": "$TRAVIS_BUILD_DIR", "options": {"symlink": false}}'
+  - composer require "drupal/console:dev-travisci-run-branch" --no-progress --no-suggest
 
 script:
-  - if [ -n "${TRAVIS_BUILD_DIR+1}" ]; then PROJECT_DIR=$TRAVIS_BUILD_DIR; fi
-#  - phpunit
-#  - php box.phar build
-#  - php drupal.phar init
-#  - php drupal.phar check
-#  - php drupal.phar site:new drupal8.dev --latest --no-interaction
-#  - cd drupal8.dev
-#  - php ../drupal.phar site:install standard --langcode=en --db-type=sqlite --db-file=sites/default/files/.ht.sqlite --site-name="Drupal 8 Site Install" --site-mail=admin@example.com --account-name=admin --account-mail=admin@example.com --account-pass=admin --no-interaction
-#  - php ../drupal.phar chain --file=$PROJECT_DIR/config/dist/chain/sample.yml
+  # Install Drupal site via drupal/console and show site status.
+  - drupal site:install standard $SIMPLETEST_DB --langcode=en --site-name="Drupal 8 Site Install" --site-mail=admin@example.com --account-name=admin --account-mail=admin@example.com --account-pass=admin --no-interaction
+  - drupal module:install --composer token admin_toolbar "$IMAGEMAGICK_MODULE" --verbose --no-interaction
+  - drupal debug:module
+  - drupal config:override system.image --key=toolkit --value=imagemagick
+  - drupal site:status -v
+#  - cd $DRUPAL_PATH/vendor/drupal/console
+#  - ../../phpunit/phpunit/phpunit
 #  - ~/.composer/vendor/bin/phpcs --warning-severity=0 --standard=~/.composer/vendor/drupal/coder/coder_sniffer/Drupal/ruleset.xml $PROJECT_DIR/drupal8.dev/modules/custom/example
 
 notifications:
diff --git a/vendor/drupal/console/README.md b/vendor/drupal/console/README.md
index f94f86818b..e0dee49aba 100644
--- a/vendor/drupal/console/README.md
+++ b/vendor/drupal/console/README.md
@@ -31,20 +31,20 @@ Details of the latest version can be found on the Drupal Console project page un
 All notable changes to this project will be documented in the [releases page](https://github.com/hechoendrupal/DrupalConsole/releases)
 
 ## Documentation
-The most up-to-date documentation can be found at [http://docs.drupalconsole.com/](http://docs.drupalconsole.com/).
+The most up-to-date documentation can be found at [https://drupalconsole.com/docs/](https://drupalconsole.com/docs/).
 
-More information about using this project at the [official documentation](http://docs.drupalconsole.com/en/using/project.html).
+More information about using this project at the [official documentation](https://drupalconsole.com/docs/en/using/project).
 
 ## Required PHP Version
 PHP 5.5.9 or higher is required to use the Drupal Console application.
 
 ## Download 
 
-[Install Drupal Console Using Composer](https://docs.drupalconsole.com/en/getting/composer.html)
+[Install Drupal Console Using Composer](https://drupalconsole.com/docs/en/getting/composer)
 
-[Install Drupal Console Launcher](https://docs.drupalconsole.com/en/getting/launcher.html)
+[Install Drupal Console Launcher](https://drupalconsole.com/docs/en/getting/launcher)
 
-[Installing Drupal Console on Windows](https://docs.drupalconsole.com/en/getting/windows.html)
+[Installing Drupal Console on Windows](https://drupalconsole.com/docs/en/getting/windows)
 
 ## Run
 Using the DrupalConsole Launcher
@@ -66,8 +66,8 @@ bin/drupal
 You can ask for support at Drupal Console gitter chat room [http://bit.ly/console-support](http://bit.ly/console-support).
 
 ## Contribute to Drupal Console
-* [Getting the project](https://docs.drupalconsole.com/en/contributing/getting-the-project.html)
-* [Running the project](https://docs.drupalconsole.com/en/contributing/running-the-project.html)
+* [Getting the project](https://drupalconsole.com/docs/en/getting/project)
+* [Using the project](https://drupalconsole.com/docs/en/using/project)
 
 ## Enabling Autocomplete
 ```
@@ -92,10 +92,6 @@ ln -s ~/.console/drupal.fish ~/.config/fish/completions/drupal.fish
 
 ## Supporting Organizations
 
-[![weKnow](https://www.drupal.org/files/weKnow-logo_5.png)](http://weknowinc.com)
-
-[![Anexus](https://www.drupal.org/files/anexus-logo.png)](http://www.anexusit.com/)
-
 [All supporting organizations](https://drupalconsole.com/supporting-organizations)
 
 > Drupal is a registered trademark of Dries Buytaert.
diff --git a/vendor/drupal/console/autoload.local.php.dist b/vendor/drupal/console/autoload.local.php.dist
index d73d40900b..6b3d33a79d 100644
--- a/vendor/drupal/console/autoload.local.php.dist
+++ b/vendor/drupal/console/autoload.local.php.dist
@@ -1,3 +1,3 @@
 <?php
 
-$autoloaders = [ getcwd() . '/vendor/autoload.php' ];
+$autoloaders = [ getcwd() . '/../../autoload.php', getcwd() . '/vendor/autoload.php' ];
diff --git a/vendor/drupal/console/autoload.php.dist b/vendor/drupal/console/autoload.php.dist
index 5e948bf612..754e0a5f57 100644
--- a/vendor/drupal/console/autoload.php.dist
+++ b/vendor/drupal/console/autoload.php.dist
@@ -1,6 +1,6 @@
 <?php
 
-$loader = require __DIR__ . '/vendor/autoload.php';
+$loader = require __DIR__ . '/../../autoload.php';
 
 $loader->setPsr4('Drupal\\Console\\Test\\', __DIR__ . '/Test');
 
diff --git a/vendor/drupal/console/composer.json b/vendor/drupal/console/composer.json
index c27bb9dee6..388f4735e0 100644
--- a/vendor/drupal/console/composer.json
+++ b/vendor/drupal/console/composer.json
@@ -1,33 +1,38 @@
 {
     "name": "drupal/console",
     "description": "The Drupal CLI. A tool to generate boilerplate code, interact with and debug Drupal.",
-    "keywords": ["Drupal", "Console", "Development", "Symfony"],
+    "keywords": [
+        "Drupal",
+        "Console",
+        "Development",
+        "Symfony"
+    ],
     "homepage": "http://drupalconsole.com/",
     "type": "library",
     "license": "GPL-2.0-or-later",
     "authors": [
         {
-            "name":      "David Flores",
-            "email":     "dmousex@gmail.com",
-            "homepage":  "http://dmouse.net"
+            "name": "David Flores",
+            "email": "dmousex@gmail.com",
+            "homepage": "http://dmouse.net"
         },
         {
-            "name":      "Jesus Manuel Olivas",
-            "email":     "jesus.olivas@gmail.com",
-            "homepage":  "http://jmolivas.com"
+            "name": "Jesus Manuel Olivas",
+            "email": "jesus.olivas@gmail.com",
+            "homepage": "http://jmolivas.com"
         },
         {
-            "name":      "Eduardo Garcia",
-            "email":     "enzo@enzolutions.com",
-            "homepage":  "http://enzolutions.com/"
+            "name": "Eduardo Garcia",
+            "email": "enzo@enzolutions.com",
+            "homepage": "http://enzolutions.com/"
         },
         {
-            "name":      "Omar Aguirre",
-            "email":     "omersguchigu@gmail.com"
+            "name": "Omar Aguirre",
+            "email": "omersguchigu@gmail.com"
         },
         {
-            "name":      "Drupal Console Contributors",
-            "homepage":  "https://github.com/hechoendrupal/drupal-console/graphs/contributors"
+            "name": "Drupal Console Contributors",
+            "homepage": "https://github.com/hechoendrupal/drupal-console/graphs/contributors"
         }
     ],
     "support": {
@@ -36,24 +41,25 @@
         "docs": "https://docs.drupalconsole.com/"
     },
     "require": {
-        "php": "^5.5.9 || ^7.0",
-        "alchemy/zippy": "0.4.3",
+        "php": ">=7.0.8",
+        "alchemy/zippy": "~0.4",
         "composer/installers": "~1.0",
         "doctrine/annotations": "^1.2",
         "doctrine/collections": "^1.3",
-        "drupal/console-core": "1.8.0",
-        "drupal/console-extend-plugin": "~0",
-        "guzzlehttp/guzzle": "~6.1",
+        "drupal/console-core": "1.9.7",
+        "drupal/console-extend-plugin": "~0.9.5",
         "psy/psysh": "0.6.* || ~0.8",
-        "symfony/css-selector": "~2.8|~3.0",
-        "symfony/dom-crawler": "~2.8|~3.0",
-        "symfony/http-foundation": "~2.8|~3.0"
+        "symfony/css-selector": "~3.0|~4.0",
+        "symfony/dom-crawler": "~3.0|~4.0",
+        "symfony/http-foundation": "~3.0|~4.0"
     },
     "suggest": {
-        "symfony/thanks": "Thank your favorite PHP projects on Github using the CLI!",
-        "vlucas/phpdotenv": "Loads environment variables from .env to getenv(), $_ENV and $_SERVER automagically."
+        "symfony/thanks": "Thank your favorite PHP projects on GitHub using the CLI",
+        "vlucas/phpdotenv": "Loads environment variables from .env to getenv(), $_ENV and $_SERVER automagically"
     },
-    "bin": ["bin/drupal"],
+    "bin": [
+        "bin/drupal"
+    ],
     "config": {
         "bin-dir": "bin/",
         "sort-packages": true
@@ -61,6 +67,8 @@
     "minimum-stability": "dev",
     "prefer-stable": true,
     "autoload": {
-        "psr-4": {"Drupal\\Console\\": "src"}
+        "psr-4": {
+            "Drupal\\Console\\": "src"
+        }
     }
-}
+}
\ No newline at end of file
diff --git a/vendor/drupal/console/config/services/config.yml b/vendor/drupal/console/config/services/config.yml
index 1458cd602b..5104eb4b36 100644
--- a/vendor/drupal/console/config/services/config.yml
+++ b/vendor/drupal/console/config/services/config.yml
@@ -21,9 +21,14 @@ services:
       - { name: drupal.command }
   console.config_export_content_type:
     class: Drupal\Console\Command\Config\ExportContentTypeCommand
-    arguments: ['@entity_type.manager', '@config.storage', '@console.extension_manager', '@console.validator']
+    arguments: ['@console.extension_manager', '@entity_type.manager', '@console.validator', '@console.chain_queue', '@config.storage']
     tags:
       - { name: drupal.command }
+  console.config_export_entity:
+      class: Drupal\Console\Command\Config\ExportEntityCommand
+      arguments: ['@entity_type.manager', '@config.storage', '@console.extension_manager', '@console.validator', '@entity_type.repository', '@config.storage']
+      tags:
+        - { name: drupal.command }
   console.config_export_single:
     class: Drupal\Console\Command\Config\ExportSingleCommand
     arguments: ['@entity_type.manager', '@config.storage', '@console.extension_manager','@language_manager', '@console.validator']
@@ -31,7 +36,7 @@ services:
       - { name: drupal.command }
   console.config_export_view:
     class: Drupal\Console\Command\Config\ExportViewCommand
-    arguments: ['@entity_type.manager', '@config.storage', '@console.extension_manager', '@console.validator']
+    arguments: ['@entity_type.manager', '@config.storage', '@console.extension_manager', '@console.validator', '@console.chain_queue']
     tags:
       - { name: drupal.command }
   console.config_import:
diff --git a/vendor/drupal/console/config/services/database.yml b/vendor/drupal/console/config/services/database.yml
index 902995f57e..0cf1b7d4c1 100644
--- a/vendor/drupal/console/config/services/database.yml
+++ b/vendor/drupal/console/config/services/database.yml
@@ -1,29 +1,11 @@
 services:
-  console.database_add:
-    class: Drupal\Console\Command\Database\AddCommand
-    arguments: ['@console.database_settings_generator']
-    tags:
-      - { name: drupal.command }
-  console.database_client:
-    class: Drupal\Console\Command\Database\ClientCommand
-    tags:
-      - { name: drupal.command }
-  console.database_query:
-    class: Drupal\Console\Command\Database\QueryCommand
-    tags:
-      - { name: drupal.command }
-  console.database_connect:
-    class: Drupal\Console\Command\Database\ConnectCommand
-    tags:
-      - { name: drupal.command }
   console.database_drop:
     class: Drupal\Console\Command\Database\DropCommand
-    arguments: ['@database']
     tags:
       - { name: drupal.command }
   console.database_dump:
     class: Drupal\Console\Command\Database\DumpCommand
-    arguments: ['@app.root', '@console.shell_process']
+    arguments: ['@app.root', '@console.shell_process', '@database']
     tags:
       - { name: drupal.command }
   console.database_log_clear:
@@ -36,8 +18,3 @@ services:
     arguments: ['@database', '@date.formatter', '@entity_type.manager', '@string_translation']
     tags:
       - { name: drupal.command }
-  console.database_restore:
-    class: Drupal\Console\Command\Database\RestoreCommand
-    arguments: ['@app.root']
-    tags:
-      - { name: drupal.command }
diff --git a/vendor/drupal/console/config/services/debug.yml b/vendor/drupal/console/config/services/debug.yml
index 7d04fefffa..8ccd8b4093 100644
--- a/vendor/drupal/console/config/services/debug.yml
+++ b/vendor/drupal/console/config/services/debug.yml
@@ -23,7 +23,7 @@ services:
       - { name: drupal.command }
   console.user_debug:
     class: Drupal\Console\Command\Debug\UserCommand
-    arguments: ['@entity_type.manager','@entity.query', '@console.drupal_api']
+    arguments: ['@entity_type.manager', '@console.drupal_api']
     tags:
       - { name: drupal.command }
   console.views_debug:
@@ -67,7 +67,7 @@ services:
       - { name: drupal.command }
   console.module_debug:
     class: Drupal\Console\Command\Debug\ModuleCommand
-    arguments: ['@console.configuration_manager', '@console.site', '@http_client']
+    arguments: ['@console.configuration_manager', '@console.site']
     tags:
       - { name: drupal.command }
   console.image_styles_debug:
@@ -130,7 +130,7 @@ services:
       - { name: drupal.command }
   console.rest_debug:
     class: Drupal\Console\Command\Debug\RestCommand
-    arguments: ['@?plugin.manager.rest']
+    arguments: ['@entity_type.manager', '@?plugin.manager.rest']
     tags:
       - { name: drupal.command }
   console.test_debug:
@@ -147,3 +147,8 @@ services:
     arguments: ['@console.drupal_api']
     tags:
       - { name: drupal.command }
+  console.hook_debug:
+      class: Drupal\Console\Command\Debug\HookCommand
+      arguments: ['@console.extension_manager', '@module_handler']
+      tags:
+        - { name: drupal.command }
diff --git a/vendor/drupal/console/config/services/generate.yml b/vendor/drupal/console/config/services/generate.yml
index 3c52a6ea34..c3b370badf 100644
--- a/vendor/drupal/console/config/services/generate.yml
+++ b/vendor/drupal/console/config/services/generate.yml
@@ -1,7 +1,7 @@
 services:
   console.generate_module:
     class: Drupal\Console\Command\Generate\ModuleCommand
-    arguments: ['@console.module_generator', '@console.validator', '@app.root', '@console.string_converter', '@console.drupal_api']
+    arguments: ['@console.module_generator', '@console.validator', '@app.root', '@console.string_converter', '@console.drupal_api', '@console.chain_queue', '@console.site']
     tags:
        - { name: drupal.command }
   console.generate_modulefile:
@@ -114,6 +114,11 @@ services:
     arguments: [ '@console.plugin_migrate_process_generator', '@console.chain_queue', '@console.extension_manager', '@console.string_converter', '@console.validator']
     tags:
        - { name: drupal.command }
+  console.generate_plugin_migrate_data_parser:
+    class: Drupal\Console\Command\Generate\PluginMigrateDataParserCommand
+    arguments: [ '@console.plugin_migrate_data_parser_generator', '@console.chain_queue', '@console.extension_manager', '@console.string_converter', '@console.validator']
+    tags:
+       - { name: drupal.command }
   console.generate_plugin_rest_resource:
     class: Drupal\Console\Command\Generate\PluginRestResourceCommand
     arguments: ['@console.extension_manager', '@console.plugin_rest_resource_generator','@console.string_converter', '@console.validator', '@console.chain_queue']
@@ -124,6 +129,14 @@ services:
     arguments: ['@console.extension_manager', '@console.plugin_rules_action_generator','@console.string_converter', '@console.validator', '@console.chain_queue']
     tags:
        - { name: drupal.command }
+  console.generate_plugin_rules_condition:
+      class: Drupal\Console\Command\Generate\PluginRulesConditionCommand
+      arguments: ['@console.extension_manager', '@console.plugin_rules_condition_generator','@console.string_converter', '@console.validator', '@console.chain_queue']
+  console.generate_plugin_rules_dataprocessor:
+      class: Drupal\Console\Command\Generate\PluginRulesDataprocessorCommand
+      arguments: ['@console.extension_manager', '@console.plugin_rules_dataprocessor_generator','@console.string_converter', '@console.validator', '@console.chain_queue']
+      tags:
+         - { name: drupal.command }
   console.generate_plugin_skeleton:
     class: Drupal\Console\Command\Generate\PluginSkeletonCommand
     arguments: ['@console.extension_manager', '@console.plugin_skeleton_generator','@console.string_converter', '@console.validator', '@console.chain_queue']
@@ -139,6 +152,11 @@ services:
     arguments: ['@console.extension_manager', '@console.plugin_views_field_generator', '@console.site','@console.string_converter', '@console.validator', '@console.chain_queue']
     tags:
        - { name: drupal.command }
+  console.generate_plugin_queue:
+    class: Drupal\Console\Command\Generate\PluginQueueWorkerCommand
+    arguments: ['@console.extension_manager', '@console.plugin_queue_generator','@console.validator','@console.string_converter','@console.chain_queue']
+    tags:
+      - { name: drupal.command }
   console.generate_post_update:
     class: Drupal\Console\Command\Generate\PostUpdateCommand
     arguments: ['@console.extension_manager', '@console.post_update_generator', '@console.site', '@console.validator','@console.chain_queue']
@@ -164,6 +182,11 @@ services:
     arguments: ['@console.extension_manager', '@console.theme_generator', '@console.validator', '@app.root', '@theme_handler', '@console.site', '@console.string_converter']
     tags:
        - { name: drupal.command }
+  console.generate_setting_theme:
+    class: Drupal\Console\Command\Generate\ThemeSettingCommand
+    arguments: ['@console.extension_manager', '@console.theme_setting_generator', '@console.validator', '@app.root', '@theme_handler', '@console.site', '@console.string_converter']
+    tags:
+       - { name: drupal.command }
   console.generate_twig_extension:
     class: Drupal\Console\Command\Generate\TwigExtensionCommand
     arguments: ['@console.extension_manager', '@console.twig_extension_generator', '@console.site', '@console.string_converter', '@console.validator', '@console.chain_queue']
@@ -179,6 +202,11 @@ services:
     arguments: ['@config.factory', '@console.chain_queue', '@console.pluginblock_generator', '@entity_type.manager', '@console.extension_manager', '@console.validator', '@console.string_converter', '@plugin.manager.element_info']
     tags:
        - { name: drupal.command }
+  console.generate_blocktype:
+    class: Drupal\Console\Command\Generate\BlockTypeCommand
+    arguments: ['@config.factory', '@console.chain_queue', '@console.blocktype_generator', '@entity_type.manager', '@console.extension_manager', '@console.validator', '@console.string_converter', '@plugin.manager.element_info']
+    tags:
+       - { name: drupal.command }
   console.generate_command:
     class: Drupal\Console\Command\Generate\CommandCommand
     arguments: ['@console.command_generator', '@console.extension_manager', '@console.validator', '@console.string_converter', '@console.site']
@@ -214,3 +242,18 @@ services:
     arguments: ['@console.extension_manager', '@console.js_test_generator', '@console.validator']
     tags:
        - { name: drupal.command }
+  console.generate_composer:
+      class: Drupal\Console\Command\Generate\ComposerCommand
+      arguments: ['@console.composer_generator', '@console.extension_manager', '@console.validator']
+      tags:
+         - { name: drupal.command }
+  console.generate_plugin_validation_constraint:
+    class: Drupal\Console\Command\Generate\PluginValidationConstraintCommand
+    arguments: ['@console.extension_manager', '@console.validation_constraint_generator','@console.string_converter',  '@console.validator', '@console.chain_queue']
+    tags:
+       - { name: drupal.command }
+  console.generate_pluginderivative:
+    class: Drupal\Console\Command\Generate\PluginDerivativeCommand
+    arguments: ['@config.factory', '@console.chain_queue', '@console.pluginderivative_generator', '@console.extension_manager', '@console.validator', '@console.string_converter']
+    tags:
+       - { name: drupal.command }
\ No newline at end of file
diff --git a/vendor/drupal/console/config/services/generator.yml b/vendor/drupal/console/config/services/generator.yml
index d38bac2b54..df6456dd87 100644
--- a/vendor/drupal/console/config/services/generator.yml
+++ b/vendor/drupal/console/config/services/generator.yml
@@ -111,6 +111,11 @@ services:
     arguments: ['@console.extension_manager']
     tags:
       - { name: drupal.generator }
+  console.plugin_migrate_data_parser_generator:
+    class: Drupal\Console\Generator\PluginMigrateDataParserGenerator
+    arguments: ['@console.extension_manager']
+    tags:
+      - { name: drupal.generator }
   console.plugin_rest_resource_generator:
     class: Drupal\Console\Generator\PluginRestResourceGenerator
     arguments: ['@console.extension_manager']
@@ -121,6 +126,16 @@ services:
     arguments: ['@console.extension_manager']
     tags:
       - { name: drupal.generator }
+  console.plugin_rules_condition_generator:
+    class: Drupal\Console\Generator\PluginRulesConditionGenerator
+    arguments: ['@console.extension_manager']
+    tags:
+      - { name: drupal.generator }
+  console.plugin_rules_dataprocessor_generator:
+    class: Drupal\Console\Generator\PluginRulesDataprocessorGenerator
+    arguments: ['@console.extension_manager']
+    tags:
+      - { name: drupal.generator }
   console.plugin_skeleton_generator:
     class: Drupal\Console\Generator\PluginSkeletonGenerator
     arguments: ['@console.extension_manager']
@@ -141,6 +156,11 @@ services:
     arguments: ['@console.extension_manager']
     tags:
       - { name: drupal.generator }
+  console.plugin_queue_generator:
+    class: Drupal\Console\Generator\PluginQueueWorkerGenerator
+    arguments: ['@console.extension_manager']
+    tags:
+      - { name: drupal.generator }
   console.route_subscriber_generator:
     class: Drupal\Console\Generator\RouteSubscriberGenerator
     arguments: ['@console.extension_manager']
@@ -156,6 +176,11 @@ services:
     arguments: ['@console.extension_manager']
     tags:
       - { name: drupal.generator }
+  console.theme_setting_generator:
+    class: Drupal\Console\Generator\ThemeSettingGenerator
+    arguments: ['@console.extension_manager']
+    tags:
+      - { name: drupal.generator }
   console.twig_extension_generator:
     class: Drupal\Console\Generator\TwigExtensionGenerator
     arguments: ['@console.extension_manager']
@@ -171,6 +196,11 @@ services:
     arguments: ['@console.extension_manager']
     tags:
       - { name: drupal.generator }
+  console.blocktype_generator:
+    class: Drupal\Console\Generator\BlockTypeGenerator
+    arguments: ['@console.extension_manager']
+    tags:
+      - { name: drupal.generator }
   console.command_generator:
     class: Drupal\Console\Generator\CommandGenerator
     arguments: ['@console.extension_manager', '@console.translator_manager']
@@ -181,11 +211,6 @@ services:
     arguments: ['@console.extension_manager']
     tags:
       - { name: drupal.generator }
-  console.database_settings_generator:
-    class: Drupal\Console\Generator\DatabaseSettingsGenerator
-    arguments: ['@kernel']
-    tags:
-      - { name: drupal.generator }
   console.entitycontent_generator:
     class: Drupal\Console\Generator\EntityContentGenerator
     arguments: ['@console.extension_manager', '@console.site', '@console.renderer']
@@ -211,3 +236,18 @@ services:
     arguments: ['@console.extension_manager']
     tags:
       - { name: drupal.generator }
+  console.composer_generator:
+      class: Drupal\Console\Generator\ComposerGenerator
+      arguments: ['@console.extension_manager']
+      tags:
+        - { name: drupal.generator }
+  console.validation_constraint_generator:
+    class: Drupal\Console\Generator\PluginValidationConstraintGenerator
+    arguments: ['@console.extension_manager']
+    tags:
+      - { name: drupal.generator }
+  console.pluginderivative_generator:
+    class: Drupal\Console\Generator\PluginDerivativeGenerator
+    arguments: ['@console.extension_manager']
+    tags:
+      - { name: drupal.generator }
\ No newline at end of file
diff --git a/vendor/drupal/console/config/services/misc.yml b/vendor/drupal/console/config/services/misc.yml
index 1f97382f0c..161a9519ae 100644
--- a/vendor/drupal/console/config/services/misc.yml
+++ b/vendor/drupal/console/config/services/misc.yml
@@ -13,3 +13,7 @@ services:
     arguments: ['@console.root', '@app.root']
     tags:
       - { name: drupal.command }
+  console.composerize:
+    class: Drupal\Console\Command\ComposerizeCommand
+    tags:
+      - { name: drupal.command }
\ No newline at end of file
diff --git a/vendor/drupal/console/config/services/module.yml b/vendor/drupal/console/config/services/module.yml
index e970203dc3..6d081eb132 100644
--- a/vendor/drupal/console/config/services/module.yml
+++ b/vendor/drupal/console/config/services/module.yml
@@ -6,7 +6,7 @@ services:
       - { name: drupal.command }
   console.module_download:
     class: Drupal\Console\Command\Module\DownloadCommand
-    arguments: ['@console.drupal_api', '@http_client',  '@app.root', '@console.extension_manager', '@console.validator', '@console.site', '@console.configuration_manager', '@console.shell_process', '@console.root']
+    arguments: ['@console.drupal_api', '@http_client', '@app.root', '@console.extension_manager', '@console.validator', '@console.site']
     tags:
       - { name: drupal.command }
   console.module_install:
diff --git a/vendor/drupal/console/config/services/multisite.yml b/vendor/drupal/console/config/services/multisite.yml
new file mode 100644
index 0000000000..364f6d4a1a
--- /dev/null
+++ b/vendor/drupal/console/config/services/multisite.yml
@@ -0,0 +1,11 @@
+services:
+  console.multisite_new:
+    class: Drupal\Console\Command\Multisite\NewCommand
+    arguments: ['@app.root', '@console.validator']
+    tags:
+      - { name: drupal.command }
+  console.multisite_update:
+    class: Drupal\Console\Command\Multisite\UpdateCommand
+    arguments: ['@app.root', '@console.site']
+    tags:
+      - { name: drupal.command }
diff --git a/vendor/drupal/console/config/services/rest.yml b/vendor/drupal/console/config/services/rest.yml
index 985c195edd..34e96ecb55 100644
--- a/vendor/drupal/console/config/services/rest.yml
+++ b/vendor/drupal/console/config/services/rest.yml
@@ -1,15 +1,14 @@
 services:
   console.rest_disable:
     class: Drupal\Console\Command\Rest\DisableCommand
-    arguments: ['@config.factory', '@?plugin.manager.rest']
+    arguments: ['@entity_type.manager', '@?plugin.manager.rest']
     tags:
       - { name: drupal.command }
   console.rest_enable:
     class: Drupal\Console\Command\Rest\EnableCommand
     arguments:
+      - '@entity_type.manager'
       - '@?plugin.manager.rest'
       - '@authentication_collector'
-      - '@config.factory'
-      - '@entity.manager'
     tags:
       - { name: drupal.command }
diff --git a/vendor/drupal/console/config/services/site.yml b/vendor/drupal/console/config/services/site.yml
index f1a4d9bbbf..8c464bcad5 100644
--- a/vendor/drupal/console/config/services/site.yml
+++ b/vendor/drupal/console/config/services/site.yml
@@ -16,11 +16,16 @@ services:
       - { name: drupal.command }
   console.site_statistics:
     class: Drupal\Console\Command\Site\StatisticsCommand
-    arguments: ['@console.drupal_api', '@entity.query', '@console.extension_manager', '@module_handler']
+    arguments: ['@console.drupal_api', '@entity_type.manager', '@console.extension_manager', '@module_handler']
     tags:
       - { name: drupal.command }
   console.site_status:
     class: Drupal\Console\Command\Site\StatusCommand
-    arguments: ['@?system.manager', '@settings', '@config.factory', '@theme_handler', '@app.root']
+    arguments: ['@?system.manager', '@settings', '@config.factory', '@theme_handler', '@app.root', '@renderer']
+    tags:
+      - { name: drupal.command }
+  console.service_override:
+    class: Drupal\Console\Command\Service\OverrideCommand
+    arguments: ['@app.root', '@console.chain_queue']
     tags:
       - { name: drupal.command }
diff --git a/vendor/drupal/console/config/services/theme.yml b/vendor/drupal/console/config/services/theme.yml
index 74a2ff152c..496b76f9b1 100644
--- a/vendor/drupal/console/config/services/theme.yml
+++ b/vendor/drupal/console/config/services/theme.yml
@@ -6,7 +6,7 @@ services:
       - { name: drupal.command }
   console.theme_install:
     class: Drupal\Console\Command\Theme\InstallCommand
-    arguments: ['@config.factory', '@theme_handler', '@console.chain_queue']
+    arguments: ['@config.factory', '@theme_handler', '@console.chain_queue', '@console.site', '@console.validator','@module_installer','@console.drupal_api','@console.extension_manager','@app.root']
     tags:
       - { name: drupal.command }
   console.theme_path:
@@ -16,6 +16,6 @@ services:
       - { name: drupal.command }
   console.theme_uninstall:
     class: Drupal\Console\Command\Theme\UninstallCommand
-    arguments: ['@config.factory', '@theme_handler', '@console.chain_queue']
+    arguments: ['@config.factory', '@theme_handler', '@console.chain_queue', '@console.site', '@console.validator','@module_installer','@console.drupal_api','@console.extension_manager','@app.root']
     tags:
       - { name: drupal.command }
diff --git a/vendor/drupal/console/config/services/user.yml b/vendor/drupal/console/config/services/user.yml
index a40f94b413..2928d4399a 100644
--- a/vendor/drupal/console/config/services/user.yml
+++ b/vendor/drupal/console/config/services/user.yml
@@ -1,7 +1,7 @@
 services:
   console.user_delete:
     class: Drupal\Console\Command\User\DeleteCommand
-    arguments: ['@entity_type.manager','@entity.query', '@console.drupal_api']
+    arguments: ['@entity_type.manager', '@console.drupal_api']
     tags:
       - { name: drupal.command }
   console.user_login_clear_attempts:
@@ -34,3 +34,8 @@ services:
     arguments: ['@database', '@entity_type.manager', '@date.formatter', '@console.drupal_api']
     tags:
       - { name: drupal.command }
+  console.user_unblock:
+    class: Drupal\Console\Command\User\UnblockCommand
+    arguments: ['@entity_type.manager']
+    tags:
+      - { name: drupal.command }
diff --git a/vendor/drupal/console/config/services/views.yml b/vendor/drupal/console/config/services/views.yml
index 9fdc6a1cd6..0cc5959d05 100644
--- a/vendor/drupal/console/config/services/views.yml
+++ b/vendor/drupal/console/config/services/views.yml
@@ -1,11 +1,11 @@
 services:
   console.views_disable:
     class: Drupal\Console\Command\Views\DisableCommand
-    arguments: ['@entity_type.manager', '@entity.query']
+    arguments: ['@entity_type.manager']
     tags:
       - { name: drupal.command }
   console.views_enable:
     class: Drupal\Console\Command\Views\EnableCommand
-    arguments: ['@entity_type.manager', '@entity.query']
+    arguments: ['@entity_type.manager']
     tags:
       - { name: drupal.command }
diff --git a/vendor/drupal/console/services.yml b/vendor/drupal/console/services.yml
index b0d4597c6e..41964d3d51 100644
--- a/vendor/drupal/console/services.yml
+++ b/vendor/drupal/console/services.yml
@@ -32,9 +32,3 @@ services:
   console.annotation_validator:
     class: Drupal\Console\Utils\AnnotationValidator
     arguments: ['@console.annotation_command_reader', '@console.extension_manager']
-  # Commands
-  console.generate_composer:
-    class: Drupal\Console\Command\ComposerizeCommand
-    tags:
-       - { name: drupal.command }
-
diff --git a/vendor/drupal/console/src/Application.php b/vendor/drupal/console/src/Application.php
index ff247181f9..12ed78343b 100644
--- a/vendor/drupal/console/src/Application.php
+++ b/vendor/drupal/console/src/Application.php
@@ -25,7 +25,7 @@ class Application extends BaseApplication
     /**
      * @var string
      */
-    const VERSION = '1.8.0';
+    const VERSION = '1.9.7';
 
     public function __construct(ContainerInterface $container)
     {
diff --git a/vendor/drupal/console/src/Bootstrap/Drupal.php b/vendor/drupal/console/src/Bootstrap/Drupal.php
index a9d773346b..088007f0b3 100644
--- a/vendor/drupal/console/src/Bootstrap/Drupal.php
+++ b/vendor/drupal/console/src/Bootstrap/Drupal.php
@@ -92,9 +92,20 @@ public function boot()
                 $io->writeln('➤ Creating request');
             }
 
+            $parsed_url = parse_url($uri);
+
+            if($parsed_url['scheme'] == 'https') {
+                $_SERVER['HTTPS'] = 'on';
+            }
+
+            $path = '/';
+            if(isset($parsed_url['path'])) {
+                $path =  $parsed_url['path'] . $path;
+            }
+
             $_SERVER['HTTP_HOST'] = parse_url($uri, PHP_URL_HOST);
             $_SERVER['SERVER_PORT'] = null;
-            $_SERVER['REQUEST_URI'] = '/';
+            $_SERVER['REQUEST_URI'] = $path;
             $_SERVER['REMOTE_ADDR'] = '127.0.0.1';
             $_SERVER['REQUEST_METHOD'] = 'GET';
             $_SERVER['SERVER_SOFTWARE'] = null;
diff --git a/vendor/drupal/console/src/Command/Config/ExportCommand.php b/vendor/drupal/console/src/Command/Config/ExportCommand.php
index b9fc3213e3..63d004e5d0 100644
--- a/vendor/drupal/console/src/Command/Config/ExportCommand.php
+++ b/vendor/drupal/console/src/Command/Config/ExportCommand.php
@@ -56,12 +56,6 @@ protected function configure()
                 null,
                 InputOption::VALUE_OPTIONAL,
                 $this->trans('commands.config.export.options.directory')
-            )
-            ->addOption(
-                'tar',
-                null,
-                InputOption::VALUE_NONE,
-                $this->trans('commands.config.export.options.tar')
             )->addOption(
                 'remove-uuid',
                 null,
@@ -72,19 +66,40 @@ protected function configure()
                 null,
                 InputOption::VALUE_NONE,
                 $this->trans('commands.config.export.options.remove-config-hash')
+            )->addOption(
+                'tar',
+                null,
+                InputOption::VALUE_NONE,
+                $this->trans('commands.config.export.options.tar')
             )
             ->setAliases(['ce']);
     }
 
+    /**
+     * {@inheritdoc}
+     */
+    protected function interact(InputInterface $input, OutputInterface $output)
+    {
+        if (!$input->getOption('directory')) {
+            $directory = $this->getIo()->ask(
+                $this->trans('commands.config.export.questions.directory'),
+                config_get_config_directory(CONFIG_SYNC_DIRECTORY)
+            );
+            $input->setOption('directory', $directory);
+        }
+    }
+
     /**
      * {@inheritdoc}
      */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        $directory = $input->getOption('directory');
+        $drupal_root = $this->drupalFinder->getComposerRoot();
+        $directory = $drupal_root.'/'.$input->getOption('directory');
         $tar = $input->getOption('tar');
         $removeUuid = $input->getOption('remove-uuid');
         $removeHash = $input->getOption('remove-config-hash');
+        $drupal_root = $this->drupalFinder->getComposerRoot();
 
         if (!$directory) {
             $directory = config_get_config_directory(CONFIG_SYNC_DIRECTORY);
@@ -92,7 +107,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
 
         $fileSystem = new Filesystem();
         try {
-            $fileSystem->mkdir($directory);
+            $fileSystem->mkdir($drupal_root."/".$directory);
         } catch (IOExceptionInterface $e) {
             $this->getIo()->error(
                 sprintf(
@@ -103,7 +118,9 @@ protected function execute(InputInterface $input, OutputInterface $output)
         }
 
         // Remove previous yaml files before creating new ones
-        array_map('unlink', glob($directory . '/*'));
+        foreach (glob($directory . '/*') as $item) {
+            $fileSystem->remove($item);
+        }
 
         if ($tar) {
             $dateTime = new \DateTime();
@@ -143,7 +160,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
                 $collection_storage = $this->storage->createCollection($collection);
                 $collection_path = str_replace('.', '/', $collection);
                 if (!$tar) {
-                    mkdir("$directory/$collection_path", 0755, true);
+                    $fileSystem->mkdir("$directory/$collection_path", 0755);
                 }
                 foreach ($collection_storage->listAll() as $name) {
                     $configName = "$collection_path/$name.yml";
diff --git a/vendor/drupal/console/src/Command/Config/ExportContentTypeCommand.php b/vendor/drupal/console/src/Command/Config/ExportContentTypeCommand.php
index 93b52c230e..03def65546 100644
--- a/vendor/drupal/console/src/Command/Config/ExportContentTypeCommand.php
+++ b/vendor/drupal/console/src/Command/Config/ExportContentTypeCommand.php
@@ -7,64 +7,73 @@
 
 namespace Drupal\Console\Command\Config;
 
+use Drupal\Console\Command\Shared\ExportTrait;
 use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Extension\Manager;
 use Drupal\Console\Utils\Validator;
-use Symfony\Component\Console\Exception\InvalidOptionException;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Core\Command\Command;
+
 use Drupal\Core\Config\CachedStorage;
-use Drupal\Core\Entity\EntityTypeManagerInterface;
-use Drupal\Console\Command\Shared\ExportTrait;
-use Drupal\Console\Extension\Manager;
 
 class ExportContentTypeCommand extends Command
 {
     use ModuleTrait;
     use ExportTrait;
 
+    const ALL = '-all-';
+
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
     /**
      * @var EntityTypeManagerInterface
      */
     protected $entityTypeManager;
 
     /**
-     * @var CachedStorage
+     * @var Validator
      */
-    protected $configStorage;
+    protected $validator;
 
     /**
-     * @var Manager
+     * @var ChainQueue
      */
-    protected $extensionManager;
-
-    protected $configExport;
+    protected $chainQueue;
 
     /**
-     * @var Validator
+     * @var CachedStorage
      */
-    protected $validator;
+    protected $configStorage;
 
     /**
      * ExportContentTypeCommand constructor.
      *
      * @param EntityTypeManagerInterface $entityTypeManager
-     * @param CachedStorage              $configStorage
-     * @param Manager                    $extensionManager
-     * @param Validator                  $validator
+     * @param Validator $validator
+     * @param ChainQueue $chainQueue
+     * @param CachedStorage $configStorage,
      */
     public function __construct(
-        EntityTypeManagerInterface $entityTypeManager,
-        CachedStorage $configStorage,
         Manager $extensionManager,
-        Validator $validator
+        EntityTypeManagerInterface $entityTypeManager,
+        Validator $validator,
+        ChainQueue $chainQueue,
+        CachedStorage $configStorage
+
     ) {
-        $this->entityTypeManager = $entityTypeManager;
-        $this->configStorage = $configStorage;
         $this->extensionManager = $extensionManager;
+        $this->entityTypeManager = $entityTypeManager;
         $this->validator = $validator;
+        $this->chainQueue = $chainQueue;
+        $this->configStorage = $configStorage;
         parent::__construct();
     }
 
@@ -79,12 +88,12 @@ protected function configure()
             ->addOption('module', null, InputOption::VALUE_REQUIRED, $this->trans('commands.common.options.module'))
             ->addArgument(
                 'content-type',
-                InputArgument::REQUIRED,
+                InputArgument::REQUIRED | InputArgument::IS_ARRAY,
                 $this->trans('commands.config.export.content.type.arguments.content-type')
             )->addOption(
                 'optional-config',
                 null,
-                InputOption::VALUE_OPTIONAL,
+                InputOption::VALUE_NONE,
                 $this->trans('commands.config.export.content.type.options.optional-config')
             )->addOption(
                 'remove-uuid',
@@ -97,6 +106,12 @@ protected function configure()
                 InputOption::VALUE_NONE,
                 $this->trans('commands.config.export.content.type.options.remove-config-hash')
             )
+            ->addOption(
+              'include-module-dependencies',
+              null,
+              InputOption::VALUE_OPTIONAL,
+              $this->trans('commands.config.export.content.type.options.include-module-dependencies')
+            )
             ->setAliases(['cect']);
 
         $this->configExport = [];
@@ -114,17 +129,27 @@ protected function interact(InputInterface $input, OutputInterface $output)
         $contentType = $input->getArgument('content-type');
         if (!$contentType) {
             $bundles_entities = $this->entityTypeManager->getStorage('node_type')->loadMultiple();
-            $bundles = [];
+            $bundles = [ExportContentTypeCommand::ALL => $this->trans('commands.config.export.content.type.questions.all')];
+            $bundles_ids = [];
+
             foreach ($bundles_entities as $entity) {
                 $bundles[$entity->id()] = $entity->label();
+                $bundles_ids[] = $entity->id();
             }
 
-            $contentType = $this->getIo()->choice(
-                $this->trans('commands.config.export.content.type.questions.content-type'),
-                $bundles
-            );
+            if (!$contentType) {
+              $contentType = $this->getIo()->choice(
+                  $this->trans('commands.config.export.content.type.questions.content-type'),
+                  $bundles
+              );
+            }
+
+            if ($contentType == ExportContentTypeCommand::ALL) {
+              $input->setArgument('content-type', $bundles_ids);
+            }else{
+              $input->setArgument('content-type', [$contentType]);
+            }
         }
-        $input->setArgument('content-type', $contentType);
 
         $optionalConfig = $input->getOption('optional-config');
         if (!$optionalConfig) {
@@ -132,9 +157,8 @@ protected function interact(InputInterface $input, OutputInterface $output)
                 $this->trans('commands.config.export.content.type.questions.optional-config'),
                 true
             );
+            $input->setOption('optional-config', $optionalConfig);
         }
-        $input->setOption('optional-config', $optionalConfig);
-
 
         if (!$input->getOption('remove-uuid')) {
             $removeUuid = $this->getIo()->confirm(
@@ -150,6 +174,15 @@ protected function interact(InputInterface $input, OutputInterface $output)
             );
             $input->setOption('remove-config-hash', $removeHash);
         }
+
+        $includeModuleDependencies = $input->getOption('include-module-dependencies');
+        if (!$includeModuleDependencies) {
+          $includeModuleDependencies = $this->getIo()->confirm(
+            $this->trans('commands.config.export.content.type.questions.include-module-dependencies'),
+            true
+          );
+          $input->setOption('include-module-dependencies', $includeModuleDependencies);
+        }
     }
 
     /**
@@ -158,84 +191,22 @@ protected function interact(InputInterface $input, OutputInterface $output)
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $module = $input->getOption('module');
-        $contentType = $input->getArgument('content-type');
+        $contentTypes = $input->getArgument('content-type');
         $optionalConfig = $input->getOption('optional-config');
         $removeUuid = $input->getOption('remove-uuid');
         $removeHash = $input->getOption('remove-config-hash');
-
-        $contentTypeDefinition = $this->entityTypeManager->getDefinition('node_type');
-        $contentTypeName = $contentTypeDefinition->getConfigPrefix() . '.' . $contentType;
-
-        $contentTypeNameConfig = $this->getConfiguration($contentTypeName, $removeUuid, $removeHash);
-
-        if (empty($contentTypeNameConfig)) {
-            throw new InvalidOptionException(sprintf('The content type %s does not exist.', $contentType));
-        }
-
-        $this->configExport[$contentTypeName] = ['data' => $contentTypeNameConfig, 'optional' => $optionalConfig];
-
-        $this->getFields($contentType, $optionalConfig, $removeUuid, $removeHash);
-
-        $this->getFormDisplays($contentType, $optionalConfig, $removeUuid, $removeHash);
-
-        $this->getViewDisplays($contentType, $optionalConfig, $removeUuid, $removeHash);
-
-        $this->exportConfigToModule($module, $this->trans('commands.config.export.content.type.messages.content-type-exported'));
-    }
-
-    protected function getFields($contentType, $optional = false, $removeUuid = false, $removeHash = false)
-    {
-        $fields_definition = $this->entityTypeManager->getDefinition('field_config');
-
-        $fields_storage = $this->entityTypeManager->getStorage('field_config');
-        foreach ($fields_storage->loadMultiple() as $field) {
-            $field_name = $fields_definition->getConfigPrefix() . '.' . $field->id();
-            $field_name_config = $this->getConfiguration($field_name, $removeUuid, $removeHash);
-
-            // Only select fields related with content type
-            if ($field_name_config['bundle'] == $contentType) {
-                $this->configExport[$field_name] = ['data' => $field_name_config, 'optional' => $optional];
-                // Include dependencies in export files
-                if ($dependencies = $this->fetchDependencies($field_name_config, 'config')) {
-                    $this->resolveDependencies($dependencies, $optional);
-                }
-            }
-        }
-    }
-
-    protected function getFormDisplays($contentType, $optional = false, $removeUuid = false, $removeHash = false)
-    {
-        $form_display_definition = $this->entityTypeManager->getDefinition('entity_form_display');
-        $form_display_storage = $this->entityTypeManager->getStorage('entity_form_display');
-        foreach ($form_display_storage->loadMultiple() as $form_display) {
-            $form_display_name = $form_display_definition->getConfigPrefix() . '.' . $form_display->id();
-            $form_display_name_config = $this->getConfiguration($form_display_name, $removeUuid, $removeHash);
-            // Only select fields related with content type
-            if ($form_display_name_config['bundle'] == $contentType) {
-                $this->configExport[$form_display_name] = ['data' => $form_display_name_config, 'optional' => $optional];
-                // Include dependencies in export files
-                if ($dependencies = $this->fetchDependencies($form_display_name_config, 'config')) {
-                    $this->resolveDependencies($dependencies, $optional);
-                }
-            }
-        }
-    }
-
-    protected function getViewDisplays($contentType, $optional = false, $removeUuid = false, $removeHash = false)
-    {
-        $view_display_definition = $this->entityTypeManager->getDefinition('entity_view_display');
-        $view_display_storage = $this->entityTypeManager->getStorage('entity_view_display');
-        foreach ($view_display_storage->loadMultiple() as $view_display) {
-            $view_display_name = $view_display_definition->getConfigPrefix() . '.' . $view_display->id();
-            $view_display_name_config = $this->getConfiguration($view_display_name, $removeUuid, $removeHash);
-            // Only select fields related with content type
-            if ($view_display_name_config['bundle'] == $contentType) {
-                $this->configExport[$view_display_name] = ['data' => $view_display_name_config, 'optional' => $optional];
-                // Include dependencies in export files
-                if ($dependencies = $this->fetchDependencies($view_display_name_config, 'config')) {
-                    $this->resolveDependencies($dependencies, $optional);
-                }
-            }
-        }
+        $includeModuleDependencies = $input->getOption('include-module-dependencies');
+
+        $this->chainQueue->addCommand(
+          'config:export:entity', [
+            'entity-type' => 'node_type',
+            'bundle' => $contentTypes,
+            '--module' => $module,
+            '--optional-config' => $optionalConfig,
+            '--remove-uuid' => $removeUuid,
+            '--remove-config-hash' => $removeHash,
+            '--include-module-dependencies' => $includeModuleDependencies
+          ]
+        );
     }
 }
diff --git a/vendor/drupal/console/src/Command/Config/ExportEntityCommand.php b/vendor/drupal/console/src/Command/Config/ExportEntityCommand.php
new file mode 100644
index 0000000000..2c1b7f4f4f
--- /dev/null
+++ b/vendor/drupal/console/src/Command/Config/ExportEntityCommand.php
@@ -0,0 +1,271 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Command\Config\ExportEntityCommand.
+ */
+
+namespace Drupal\Console\Command\Config;
+
+use Drupal\Console\Command\Shared\ExportTrait;
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Utils\Validator;
+use Drupal\Core\Config\CachedStorage;
+use Drupal\Core\Config\StorageInterface;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Entity\EntityTypeRepositoryInterface;
+use Symfony\Component\Console\Exception\InvalidOptionException;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class ExportEntityCommand extends Command {
+
+    use ModuleTrait;
+    use ExportTrait;
+
+    const ALL = '-all-';
+
+    /**
+     * @var EntityTypeManagerInterface
+     */
+    protected $entityTypeManager;
+
+    /**
+     * @var CachedStorage
+     */
+    protected $configStorage;
+
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * @var EntityTypeRepositoryInterface
+     */
+    protected $entityTypeRepository;
+
+    protected $configExport;
+
+    /**
+     * @var Validator
+     */
+    protected $validator;
+
+    /**
+     * @var StorageInterface
+     */
+    protected $storage;
+
+    /**
+     * ExportContentTypeCommand constructor.
+     *
+     * @param EntityTypeManagerInterface $entityTypeManager
+     * @param CachedStorage $configStorage
+     * @param Manager $extensionManager
+     * @param Validator $validator
+     * @param EntityTypeRepositoryInterface $entityTypeRepository
+     * @param StorageInterface $storage
+
+     */
+    public function __construct(
+        EntityTypeManagerInterface $entityTypeManager,
+        CachedStorage $configStorage,
+        Manager $extensionManager,
+        Validator $validator,
+        EntityTypeRepositoryInterface  $entityTypeRepository,
+        StorageInterface $storage
+    ) {
+        $this->entityTypeManager = $entityTypeManager;
+        $this->configStorage = $configStorage;
+        $this->extensionManager = $extensionManager;
+        $this->validator = $validator;
+        $this->entityTypeRepository = $entityTypeRepository;
+        $this->storage = $storage;
+
+        parent::__construct();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure() {
+        $this
+            ->setName('config:export:entity')
+            ->setDescription($this->trans('commands.config.export.entity.description'))
+            ->addOption('module', NULL, InputOption::VALUE_REQUIRED,
+                $this->trans('commands.common.options.module'))
+            ->addArgument(
+                'entity-type',
+                InputArgument::REQUIRED,
+                $this->trans('commands.config.export.entity.arguments.entity-type')
+            )
+            ->addArgument(
+                'bundle',
+                InputArgument::REQUIRED | InputArgument::IS_ARRAY,
+                $this->trans('commands.config.export.entity.arguments.bundle')
+            )->addOption(
+                'optional-config',
+                NULL,
+                InputOption::VALUE_NONE,
+                $this->trans('commands.config.export.entity.options.optional-config')
+            )->addOption(
+                'remove-uuid',
+                NULL,
+                InputOption::VALUE_NONE,
+                $this->trans('commands.config.export.entity.options.remove-uuid')
+            )->addOption(
+                'remove-config-hash',
+                NULL,
+                InputOption::VALUE_NONE,
+                $this->trans('commands.config.export.entity.options.remove-config-hash')
+            )
+            ->addOption(
+                'include-module-dependencies',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.config.export.entity.options.include-module-dependencies')
+            )
+            ->setAliases(['cee']);
+
+        $this->configExport = [];
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function interact(InputInterface $input, OutputInterface $output) {
+        // --module option
+        $this->getModuleOption();
+
+        $entity_types = $this->entityTypeRepository->getEntityTypeLabels(true);
+        ksort($entity_types['Configuration']);
+        // --content-type argument
+        $entityType = $input->getArgument('entity-type');
+        if (!$entityType) {
+            $entityType = $this->getIo()->choice(
+                $this->trans('commands.config.export.entity.questions.content-type'),
+                $entity_types['Configuration']
+            );
+
+            $input->setArgument('entity-type', $entityType);
+        }
+
+        // --bundle argument
+        $bundle = $input->getArgument('bundle');
+        if (!$bundle) {
+            $bundles_entities = $this->entityTypeManager->getStorage($entityType)
+                ->loadMultiple();
+            $bundles = [ExportEntityCommand::ALL => $this->trans('commands.config.export.entity.questions.all')];
+            $bundles_ids = [];
+            foreach ($bundles_entities as $entity) {
+                $bundles[$entity->id()] = $entity->label();
+                $bundles_ids[] = $entity->id();
+            }
+
+            $bundle = $this->getIo()->choice(
+                $this->trans('commands.config.export.entity.questions.bundle'),
+                $bundles
+            );
+
+            if ($bundle == ExportEntityCommand::ALL) {
+                $input->setArgument('bundle', $bundles_ids);
+            } else {
+                $input->setArgument('bundle', [$bundle]);
+            }
+        }
+
+        $optionalConfig = $input->getOption('optional-config');
+        if (!$optionalConfig) {
+            $optionalConfig = $this->getIo()->confirm(
+                $this->trans('commands.config.export.entity.questions.optional-config'),
+                TRUE
+            );
+
+            $input->setOption('optional-config', $optionalConfig);
+        }
+
+        if (!$input->getOption('remove-uuid')) {
+            $removeUuid = $this->getIo()->confirm(
+                $this->trans('commands.config.export.entity.questions.remove-uuid'),
+                TRUE
+            );
+            $input->setOption('remove-uuid', $removeUuid);
+        }
+
+        if (!$input->getOption('remove-config-hash')) {
+            $removeHash = $this->getIo()->confirm(
+                $this->trans('commands.config.export.entity.questions.remove-config-hash'),
+                TRUE
+            );
+            $input->setOption('remove-config-hash', $removeHash);
+        }
+
+        $includeModuleDependencies = $input->getOption('include-module-dependencies');
+        if (!$includeModuleDependencies) {
+            $includeModuleDependencies = $this->getIo()->confirm(
+                $this->trans('commands.config.export.entity.questions.include-module-dependencies'),
+                true
+            );
+            $input->setOption('include-module-dependencies', $includeModuleDependencies);
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output) {
+        $module = $this->validateModule($input->getOption('module'));
+        $entityType = $input->getArgument('entity-type');
+        $bundles = $input->getArgument('bundle');
+        $optionalConfig = $input->getOption('optional-config');
+        $removeUuid = $input->getOption('remove-uuid');
+        $removeHash = $input->getOption('remove-config-hash');
+        $includeModuleDependencies = $input->getOption('include-module-dependencies');
+
+        foreach ($bundles as $bundle) {
+            $bundleDefinition = $this->entityTypeManager->getDefinition($entityType);
+            $bundleName = "{$bundleDefinition->getConfigPrefix()}.{$bundle}";
+
+            $bundleNameConfig = $this->getConfiguration($bundleName,
+                $removeUuid, $removeHash);
+
+            if (empty($bundleNameConfig)) {
+                throw new InvalidOptionException(sprintf('The bundle %s does not exist.',
+                    $bundle));
+            }
+
+            $this->configExport[$bundleName] = [
+                'data' => $bundleNameConfig,
+                'optional' => $optionalConfig,
+            ];
+
+            $this->getBasefieldOverrideFields($bundle, $optionalConfig, $removeUuid, $removeHash);
+
+            $this->getFields($bundle, $optionalConfig, $removeUuid, $removeHash);
+
+            $this->getFormDisplays($bundle, $optionalConfig, $removeUuid,
+                $removeHash);
+
+            $this->getViewDisplays($bundle, $optionalConfig, $removeUuid,
+                $removeHash);
+
+            // Include module dependencies in export files if export is not optional
+            if ($includeModuleDependencies) {
+                if ($dependencies = $this->fetchDependencies($bundleNameConfig, 'module')) {
+                    $this->exportModuleDependencies($module, $dependencies);
+                }
+            }
+
+            $this->exportConfigToModule($module,
+                sprintf(
+                    $this->trans('commands.config.export.entity.messages.bundle-exported'),
+                    $bundle
+                ));
+        }
+    }
+}
diff --git a/vendor/drupal/console/src/Command/Config/ExportSingleCommand.php b/vendor/drupal/console/src/Command/Config/ExportSingleCommand.php
index 7179888846..0fe2607b38 100644
--- a/vendor/drupal/console/src/Command/Config/ExportSingleCommand.php
+++ b/vendor/drupal/console/src/Command/Config/ExportSingleCommand.php
@@ -103,7 +103,7 @@ protected function configure()
                 'directory',
                 null,
                 InputOption::VALUE_OPTIONAL,
-                $this->trans('commands.config.export.arguments.directory')
+                $this->trans('commands.config.export.options.directory')
             )->addOption(
                 'module',
                 null,
@@ -260,7 +260,7 @@ protected function interact(InputInterface $input, OutputInterface $output)
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $directory = $input->getOption('directory');
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $name = $input->getOption('name');
         $optional = $input->getOption('optional');
         $removeUuid = $input->getOption('remove-uuid');
@@ -304,8 +304,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
                 return 0;
             }
 
+            $directory = $directory_copy = config_get_config_directory(CONFIG_SYNC_DIRECTORY);
             if (!is_dir($directory)) {
-                $directory = $directory_copy = config_get_config_directory(CONFIG_SYNC_DIRECTORY);
                 if ($value) {
                     $directory = $directory_copy .'/' . str_replace('.', '/', $value);
                 }
diff --git a/vendor/drupal/console/src/Command/Config/ExportViewCommand.php b/vendor/drupal/console/src/Command/Config/ExportViewCommand.php
index dacc2bbbc8..ebbccefac4 100644
--- a/vendor/drupal/console/src/Command/Config/ExportViewCommand.php
+++ b/vendor/drupal/console/src/Command/Config/ExportViewCommand.php
@@ -7,17 +7,18 @@
 
 namespace Drupal\Console\Command\Config;
 
-use Symfony\Component\Console\Input\InputArgument;
-use Symfony\Component\Console\Input\InputOption;
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Output\OutputInterface;
 use Drupal\Console\Core\Command\Command;
-use Drupal\Console\Utils\Validator;
 use Drupal\Console\Command\Shared\ModuleTrait;
-use Drupal\Core\Entity\EntityTypeManagerInterface;
-use Drupal\Core\Config\CachedStorage;
 use Drupal\Console\Command\Shared\ExportTrait;
+use Drupal\Console\Core\Utils\ChainQueue;
 use Drupal\Console\Extension\Manager;
+use Drupal\Console\Utils\Validator;
+use Drupal\Core\Config\CachedStorage;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
 
 class ExportViewCommand extends Command
 {
@@ -47,6 +48,11 @@ class ExportViewCommand extends Command
      */
     protected $validator;
 
+    /**
+     * @var ChainQueue
+     */
+    protected $chainQueue;
+
     /**
      * ExportViewCommand constructor.
      *
@@ -58,12 +64,14 @@ public function __construct(
         EntityTypeManagerInterface $entityTypeManager,
         CachedStorage $configStorage,
         Manager $extensionManager,
-        Validator $validator
+        Validator $validator,
+        ChainQueue $chainQueue
     ) {
         $this->entityTypeManager = $entityTypeManager;
         $this->configStorage = $configStorage;
         $this->extensionManager = $extensionManager;
         $this->validator = $validator;
+        $this->chainQueue = $chainQueue;
         parent::__construct();
     }
 
@@ -95,6 +103,17 @@ protected function configure()
                 InputOption::VALUE_OPTIONAL,
                 $this->trans('commands.config.export.view.options.include-module-dependencies')
             )
+            ->addOption(
+              'remove-uuid',
+              NULL,
+              InputOption::VALUE_NONE,
+              $this->trans('commands.config.export.entity.options.remove-uuid')
+            )->addOption(
+              'remove-config-hash',
+              NULL,
+              InputOption::VALUE_NONE,
+              $this->trans('commands.config.export.entity.options.remove-config-hash')
+            )
             ->setAliases(['cev']);
     }
 
@@ -140,34 +159,43 @@ protected function interact(InputInterface $input, OutputInterface $output)
             );
             $input->setOption('include-module-dependencies', $includeModuleDependencies);
         }
+
+        if (!$input->getOption('remove-uuid')) {
+          $removeUuid = $this->getIo()->confirm(
+            $this->trans('commands.config.export.entity.questions.remove-uuid'),
+            TRUE
+          );
+          $input->setOption('remove-uuid', $removeUuid);
+        }
+
+        if (!$input->getOption('remove-config-hash')) {
+          $removeHash = $this->getIo()->confirm(
+            $this->trans('commands.config.export.entity.questions.remove-config-hash'),
+            TRUE
+          );
+          $input->setOption('remove-config-hash', $removeHash);
+        }
     }
 
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $viewId = $input->getArgument('view-id');
         $optionalConfig = $input->getOption('optional-config');
         $includeModuleDependencies = $input->getOption('include-module-dependencies');
-
-        $viewTypeDefinition = $this->entityTypeManager->getDefinition('view');
-        $viewTypeName = $viewTypeDefinition->getConfigPrefix() . '.' . $viewId;
-
-        $viewNameConfig = $this->getConfiguration($viewTypeName);
-
-        $this->configExport[$viewTypeName] = ['data' => $viewNameConfig, 'optional' => $optionalConfig];
-
-        // Include config dependencies in export files
-        if ($dependencies = $this->fetchDependencies($viewNameConfig, 'config')) {
-            $this->resolveDependencies($dependencies, $optionalConfig);
-        }
-
-        // Include module dependencies in export files if export is not optional
-        if ($includeModuleDependencies) {
-            if ($dependencies = $this->fetchDependencies($viewNameConfig, 'module')) {
-                $this->exportModuleDependencies($module, $dependencies);
-            }
-        }
-
-        $this->exportConfigToModule($module, $this->trans('commands.views.export.messages.view-exported'));
+        $removeUuid = $input->getOption('remove-uuid');
+        $removeHash = $input->getOption('remove-config-hash');
+
+        $this->chainQueue->addCommand(
+          'config:export:entity', [
+            'entity-type' => 'view',
+            'bundle' => [$viewId],
+            '--module' => $module,
+            '--optional-config' => $optionalConfig,
+            '--remove-uuid' => $removeUuid,
+            '--remove-config-hash' => $removeHash,
+            '--include-module-dependencies' => $includeModuleDependencies
+          ]
+        );
     }
 }
diff --git a/vendor/drupal/console/src/Command/Config/ImportCommand.php b/vendor/drupal/console/src/Command/Config/ImportCommand.php
index 1d0963402e..c5211852dc 100644
--- a/vendor/drupal/console/src/Command/Config/ImportCommand.php
+++ b/vendor/drupal/console/src/Command/Config/ImportCommand.php
@@ -79,6 +79,20 @@ protected function configure()
             ->setAliases(['ci']);
     }
 
+    /**
+     * {@inheritdoc}
+     */
+    protected function interact(InputInterface $input, OutputInterface $output)
+    {
+        if (!$input->getOption('directory')) {
+            $directory = $this->getIo()->ask(
+                $this->trans('commands.config.import.questions.directory'),
+                config_get_config_directory(CONFIG_SYNC_DIRECTORY)
+        );
+            $input->setOption('directory', $directory);
+        }
+    }
+
     /**
      * {@inheritdoc}
      */
@@ -88,15 +102,11 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $skipUuid = $input->getOption('skip-uuid');
 
         if ($directory) {
-            $configSyncDir = $directory;
+            $source_storage = new FileStorage($directory);
         } else {
-            $configSyncDir = config_get_config_directory(
-                CONFIG_SYNC_DIRECTORY
-            );
+            $source_storage = \Drupal::service('config.storage.sync');
         }
 
-        $source_storage = new FileStorage($configSyncDir);
-
         $storageComparer = '\Drupal\Core\Config\StorageComparer';
         if ($skipUuid) {
             $storageComparer = '\Drupal\Console\Override\StorageComparer';
diff --git a/vendor/drupal/console/src/Command/Config/ImportSingleCommand.php b/vendor/drupal/console/src/Command/Config/ImportSingleCommand.php
index 716fbc389c..1c322a20e4 100644
--- a/vendor/drupal/console/src/Command/Config/ImportSingleCommand.php
+++ b/vendor/drupal/console/src/Command/Config/ImportSingleCommand.php
@@ -63,7 +63,7 @@ protected function configure()
                 'directory',
                 null,
                 InputOption::VALUE_OPTIONAL,
-                $this->trans('commands.config.import.arguments.directory')
+                $this->trans('commands.config.import.options.directory')
             )
             ->setAliases(['cis']);
     }
diff --git a/vendor/drupal/console/src/Command/Config/OverrideCommand.php b/vendor/drupal/console/src/Command/Config/OverrideCommand.php
index eebf466c3e..d23a33bfa5 100644
--- a/vendor/drupal/console/src/Command/Config/OverrideCommand.php
+++ b/vendor/drupal/console/src/Command/Config/OverrideCommand.php
@@ -9,6 +9,7 @@
 
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
 use Drupal\Console\Core\Command\Command;
 use Drupal\Core\Config\CachedStorage;
@@ -51,15 +52,17 @@ protected function configure()
                 InputArgument::REQUIRED,
                 $this->trans('commands.config.override.arguments.name')
             )
-            ->addArgument(
+            ->addOption(
                 'key',
-                InputArgument::REQUIRED,
-                $this->trans('commands.config.override.arguments.key')
+                null,
+                InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY,
+                $this->trans('commands.config.override.options.key')
             )
-            ->addArgument(
+            ->addOption(
                 'value',
-                InputArgument::REQUIRED,
-                $this->trans('commands.config.override.arguments.value')
+                null,
+                InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY,
+                $this->trans('commands.config.override.options.value')
             )
             ->setAliases(['co']);
     }
@@ -89,23 +92,29 @@ protected function interact(InputInterface $input, OutputInterface $output)
             );
             $input->setArgument('name', $name);
         }
-        $key = $input->getArgument('key');
+        $key = $input->getOption('key');
         if (!$key) {
-            if ($this->configStorage->exists($name)) {
-                $configuration = $this->configStorage->read($name);
+            if (!$this->configStorage->exists($name)) {
+                $this->getIo()->newLine();
+                $this->getIo()->errorLite($this->trans('commands.config.override.messages.invalid-config-file'));
+                $this->getIo()->newLine();
+                return 0;
             }
-            $key = $this->getIo()->choiceNoList(
-                $this->trans('commands.config.override.questions.key'),
-                array_keys($configuration)
-            );
-            $input->setArgument('key', $key);
+
+            $configuration = $this->configStorage->read($name);
+            $input->setOption('key', $this->getKeysFromConfig($configuration));
         }
-        $value = $input->getArgument('value');
+        $value = $input->getOption('value');
         if (!$value) {
-            $value = $this->getIo()->ask(
-                $this->trans('commands.config.override.questions.value')
-            );
-            $input->setArgument('value', $value);
+            foreach ($input->getOption('key') as $name) {
+                $value[] = $this->getIo()->ask(
+                    sprintf(
+                        $this->trans('commands.config.override.questions.value'),
+                        $name
+                    )
+                );
+            }
+            $input->setOption('value', $value);
         }
     }
     /**
@@ -114,16 +123,24 @@ protected function interact(InputInterface $input, OutputInterface $output)
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $configName = $input->getArgument('name');
-        $key = $input->getArgument('key');
-        $value = $input->getArgument('value');
+        $keys = $input->getOption('key');
+        $values = $input->getOption('value');
+
+        if(empty($keys)) {
+            return 1;
+        }
 
         $config = $this->configFactory->getEditable($configName);
 
-        $configurationOverrideResult = $this->overrideConfiguration(
-            $config,
-            $key,
-            $value
-        );
+        $configurationOverrideResult = [];
+        foreach ($keys as $index => $key) {
+          $result = $this->overrideConfiguration(
+              $config,
+              $key,
+              $values[$index]
+          );
+          $configurationOverrideResult = array_merge($configurationOverrideResult, $result);
+        }
 
         $config->save();
 
@@ -151,4 +168,28 @@ protected function overrideConfiguration($config, $key, $value)
 
         return $result;
     }
+
+    /**
+     * Allow to search a specific key to override.
+     *
+     * @param $configuration
+     * @param null $key
+     *
+     * @return array
+     */
+    private function getKeysFromConfig($configuration, $key = null)
+    {
+        $choiceKey = $this->getIo()->choiceNoList(
+            $this->trans('commands.config.override.questions.key'),
+            array_keys($configuration)
+        );
+
+        $key = is_null($key) ? $choiceKey:$key.'.'.$choiceKey;
+
+        if(is_array($configuration[$choiceKey])){
+            return $this->getKeysFromConfig($configuration[$choiceKey], $key);
+        }
+
+        return [$key];
+    }
 }
diff --git a/vendor/drupal/console/src/Command/Create/NodesCommand.php b/vendor/drupal/console/src/Command/Create/NodesCommand.php
index 3e8e6f929f..af9608bf75 100644
--- a/vendor/drupal/console/src/Command/Create/NodesCommand.php
+++ b/vendor/drupal/console/src/Command/Create/NodesCommand.php
@@ -87,6 +87,12 @@ protected function configure()
                 InputOption::VALUE_OPTIONAL,
                 $this->trans('commands.create.nodes.options.time-range')
             )
+            ->addOption(
+                'revision',
+                null,
+                InputOption::VALUE_NONE,
+                $this->trans('commands.create.nodes.options.revision')
+            )
             ->addOption(
                 'language',
                 null,
@@ -151,6 +157,15 @@ function ($contentType) use ($bundles) {
             $input->setOption('time-range', array_search($timeRange, $timeRanges));
         }
 
+        $revision = is_null($input->getOption('revision'));
+        if (!$revision) {
+            $revision = $this->getIo()->confirm(
+                $this->trans('commands.create.nodes.questions.revision')
+            );
+
+            $input->setOption('revision', $revision);
+        }
+
         // Language module is enabled or not.
         $languageModuleEnabled = \Drupal::moduleHandler()
             ->moduleExists('language');
@@ -177,7 +192,10 @@ function ($contentType) use ($bundles) {
             $input->setOption('language', $language);
         } else {
             // If 'language' module is not enabled.
-            $input->setOption('language', LanguageInterface::LANGCODE_NOT_SPECIFIED);
+            $input->setOption(
+                'language',
+                \Drupal::languageManager()->getDefaultLanguage()->getId()
+            );
         }
     }
 
@@ -190,6 +208,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $limit = $input->getOption('limit')?:25;
         $titleWords = $input->getOption('title-words')?:5;
         $timeRange = $input->getOption('time-range')?:31536000;
+        $revision = $input->getOption('revision');
         $available_types = array_keys($this->drupalApi->getBundles());
         $language = $input->getOption('language')?:'und';
 
@@ -208,6 +227,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             $limit,
             $titleWords,
             $timeRange,
+            $revision,
             $language
         );
 
diff --git a/vendor/drupal/console/src/Command/Create/UsersCommand.php b/vendor/drupal/console/src/Command/Create/UsersCommand.php
index 73423dd36d..418ebd9d79 100644
--- a/vendor/drupal/console/src/Command/Create/UsersCommand.php
+++ b/vendor/drupal/console/src/Command/Create/UsersCommand.php
@@ -89,7 +89,7 @@ protected function interact(InputInterface $input, OutputInterface $output)
     {
         $rids = $input->getArgument('roles');
         if (!$rids) {
-            $roles = $this->drupalApi->getRoles();
+            $roles = $this->drupalApi->getRoles(true, true);
             $rids = $this->getIo()->choice(
                 $this->trans('commands.create.users.questions.roles'),
                 array_values($roles),
@@ -131,7 +131,7 @@ function ($role) use ($roles) {
             $timeRanges = $this->getTimeRange();
 
             $timeRange = $this->getIo()->choice(
-                $this->trans('commands.create.nodes.questions.time-range'),
+                $this->trans('commands.create.users.questions.time-range'),
                 array_values($timeRanges)
             );
 
diff --git a/vendor/drupal/console/src/Command/Cron/ExecuteCommand.php b/vendor/drupal/console/src/Command/Cron/ExecuteCommand.php
index 5fd9344636..dd00ac9e3f 100644
--- a/vendor/drupal/console/src/Command/Cron/ExecuteCommand.php
+++ b/vendor/drupal/console/src/Command/Cron/ExecuteCommand.php
@@ -61,7 +61,8 @@ protected function configure()
             ->addArgument(
                 'module',
                 InputArgument::IS_ARRAY | InputArgument::OPTIONAL,
-                $this->trans('commands.common.options.module')
+                $this->trans('commands.common.options.module'),
+                ['all']
             )
             ->setAliases(['croe']);
     }
@@ -79,7 +80,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        if ($modules === null || in_array('all', $modules)) {
+        if (in_array('all', $modules)) {
             $modules = $this->moduleHandler->getImplementations('cron');
         }
 
diff --git a/vendor/drupal/console/src/Command/Database/AddCommand.php b/vendor/drupal/console/src/Command/Database/AddCommand.php
index a83ba00796..a0527de16d 100644
--- a/vendor/drupal/console/src/Command/Database/AddCommand.php
+++ b/vendor/drupal/console/src/Command/Database/AddCommand.php
@@ -56,7 +56,7 @@ protected function configure()
             ->addOption(
                 'password',
                 null,
-                InputOption::VALUE_REQUIRED,
+                InputOption::VALUE_OPTIONAL,
                 $this->trans('commands.database.add.options.password')
             )
             ->addOption(
@@ -83,6 +83,12 @@ protected function configure()
                 InputOption::VALUE_OPTIONAL,
                 $this->trans('commands.database.add.options.driver')
             )
+            ->addOption(
+                'default',
+                null,
+                InputOption::VALUE_NONE,
+                $this->trans('commands.database.query.options.default')
+            )
             ->setHelp($this->trans('commands.database.add.help'))
             ->setAliases(['dba']);
     }
@@ -122,9 +128,8 @@ protected function interact(InputInterface $input, OutputInterface $output)
         $input->setOption('username', $username);
         $password = $input->getOption('password');
         if (!$password) {
-            $password = $this->getIo()->ask(
-                $this->trans('commands.database.add.questions.password'),
-                ''
+            $password = $this->getIo()->askHiddenEmpty(
+                $this->trans('commands.migrate.execute.questions.db-pass')
             );
         }
         $input->setOption('password', $password);
diff --git a/vendor/drupal/console/src/Command/Database/ClientCommand.php b/vendor/drupal/console/src/Command/Database/ClientCommand.php
index 0e558f7a09..290a66b216 100644
--- a/vendor/drupal/console/src/Command/Database/ClientCommand.php
+++ b/vendor/drupal/console/src/Command/Database/ClientCommand.php
@@ -32,6 +32,12 @@ protected function configure()
                 $this->trans('commands.database.client.arguments.database'),
                 'default'
             )
+            ->addArgument(
+                'target',
+                InputArgument::OPTIONAL,
+                $this->trans('commands.database.client.arguments.target'),
+                'default'
+            )
             ->setHelp($this->trans('commands.database.client.help'))
             ->setAliases(['dbc']);
     }
@@ -43,18 +49,10 @@ protected function execute(InputInterface $input, OutputInterface $output)
     {
         $database = $input->getArgument('database');
         $learning = $input->getOption('learning');
+        $target = $input->getArgument('target');
 
-        $databaseConnection = $this->resolveConnection($database);
-
-        $connection = sprintf(
-            '%s -A --database=%s --user=%s --password=%s --host=%s --port=%s',
-            $databaseConnection['driver'],
-            $databaseConnection['database'],
-            $databaseConnection['username'],
-            $databaseConnection['password'],
-            $databaseConnection['host'],
-            $databaseConnection['port']
-        );
+        $databaseConnection = $this->resolveConnection($database, $target);
+        $connection = $this->getConnectionString($databaseConnection);
 
         if ($learning) {
             $this->getIo()->commentBlock(
diff --git a/vendor/drupal/console/src/Command/Database/ConnectCommand.php b/vendor/drupal/console/src/Command/Database/ConnectCommand.php
index 85ddd266b0..78f1bbc50e 100644
--- a/vendor/drupal/console/src/Command/Database/ConnectCommand.php
+++ b/vendor/drupal/console/src/Command/Database/ConnectCommand.php
@@ -26,9 +26,15 @@ protected function configure()
             ->setName('database:connect')
             ->setDescription($this->trans('commands.database.connect.description'))
             ->addArgument(
-                'database',
+                'key',
                 InputArgument::OPTIONAL,
-                $this->trans('commands.database.connect.arguments.database'),
+                $this->trans('commands.database.connect.arguments.key'),
+                'default'
+            )
+            ->addArgument(
+                'target',
+                InputArgument::OPTIONAL,
+                $this->trans('commands.database.connect.arguments.target'),
                 'default'
             )
             ->setHelp($this->trans('commands.database.connect.help'))
@@ -40,23 +46,14 @@ protected function configure()
      */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        $database = $input->getArgument('database');
-        $databaseConnection = $this->resolveConnection($database);
-
-        $connection = sprintf(
-            '%s -A --database=%s --user=%s --password=%s --host=%s --port=%s',
-            $databaseConnection['driver'],
-            $databaseConnection['database'],
-            $databaseConnection['username'],
-            $databaseConnection['password'],
-            $databaseConnection['host'],
-            $databaseConnection['port']
-        );
+        $key = $input->getArgument('key');
+        $target = $input->getArgument('target');
+        $databaseConnection = $this->resolveConnection($key, $target);
 
         $this->getIo()->commentBlock(
             sprintf(
                 $this->trans('commands.database.connect.messages.connection'),
-                $connection
+                escapeshellcmd($this->getConnectionString($databaseConnection))
             )
         );
 
diff --git a/vendor/drupal/console/src/Command/Database/DatabaseLogBase.php b/vendor/drupal/console/src/Command/Database/DatabaseLogBase.php
index 7004ed0aa4..075ca661e7 100644
--- a/vendor/drupal/console/src/Command/Database/DatabaseLogBase.php
+++ b/vendor/drupal/console/src/Command/Database/DatabaseLogBase.php
@@ -197,12 +197,12 @@ protected function makeQuery($offset = null, $range = 1000)
     protected function createTableHeader()
     {
         return [
-        $this->trans('commands.database.log.common.messages.event-id'),
-        $this->trans('commands.database.log.common.messages.type'),
-        $this->trans('commands.database.log.common.messages.date'),
-        $this->trans('commands.database.log.common.messages.message'),
-        $this->trans('commands.database.log.common.messages.user'),
-        $this->trans('commands.database.log.common.messages.severity'),
+            $this->trans('commands.database.log.common.messages.event-id'),
+            $this->trans('commands.database.log.common.messages.type'),
+            $this->trans('commands.database.log.common.messages.date'),
+            $this->trans('commands.database.log.common.messages.message'),
+            $this->trans('commands.database.log.common.messages.user'),
+            $this->trans('commands.database.log.common.messages.severity'),
         ];
     }
 
@@ -216,7 +216,13 @@ protected function createTableRow(\stdClass $dblog)
         /**
          * @var User $user
          */
-        $user = $this->userStorage->load($dblog->uid);
+        if ($user = $this->userStorage->load($dblog->uid)) {
+            $user_id = $user->id();
+            $user_name = $user->getUsername();
+        } else {
+            $user_id = $dblog->uid;
+            $user_name = $this->trans('commands.database.log.common.messages.user-deleted');
+        }
 
         return [
             $dblog->wid,
@@ -228,7 +234,7 @@ protected function createTableRow(\stdClass $dblog)
                 true,
                 true
             ),
-            $user->getUsername() . ' (' . $user->id() . ')',
+            $user_name . ' (' . $user_id . ')',
             $this->severityList[$dblog->severity]->render(),
         ];
     }
diff --git a/vendor/drupal/console/src/Command/Database/DropCommand.php b/vendor/drupal/console/src/Command/Database/DropCommand.php
index 0a079c00de..5bc842e327 100644
--- a/vendor/drupal/console/src/Command/Database/DropCommand.php
+++ b/vendor/drupal/console/src/Command/Database/DropCommand.php
@@ -13,6 +13,7 @@
 use Drupal\Console\Core\Command\Command;
 use Drupal\Core\Database\Connection;
 use Drupal\Console\Command\Shared\ConnectTrait;
+use Drupal\Core\Database\Database;
 
 /**
  * Class DropCommand
@@ -23,22 +24,6 @@ class DropCommand extends Command
 {
     use ConnectTrait;
 
-    /**
-     * @var Connection
-     */
-    protected $database;
-
-    /**
-     * DropCommand constructor.
-     *
-     * @param Connection $database
-     */
-    public function __construct(Connection $database)
-    {
-        $this->database = $database;
-        parent::__construct();
-    }
-
     /**
      * {@inheritdoc}
      */
@@ -53,6 +38,12 @@ protected function configure()
                 $this->trans('commands.database.drop.arguments.database'),
                 'default'
             )
+            ->addArgument(
+              'target',
+              InputArgument::OPTIONAL,
+              $this->trans('commands.database.drop.arguments.target'),
+              'default'
+            )
             ->setHelp($this->trans('commands.database.drop.help'))
             ->setAliases(['dbd']);
     }
@@ -63,9 +54,10 @@ protected function configure()
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $database = $input->getArgument('database');
+        $target = $input->getArgument('target');
         $yes = $input->getOption('yes');
 
-        $databaseConnection = $this->resolveConnection($database);
+        $databaseConnection = $this->resolveConnection($database, $target);
 
         if (!$yes) {
             if (!$this->getIo()->confirm(
@@ -80,7 +72,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
             }
         }
 
-        $schema = $this->database->schema();
+        $connection = Database::getConnection($target, $database);
+        $schema = $connection->schema();
         $tables = $schema->findTables('%');
         $tableRows = [];
 
@@ -102,3 +95,4 @@ protected function execute(InputInterface $input, OutputInterface $output)
         return 0;
     }
 }
+
diff --git a/vendor/drupal/console/src/Command/Database/DumpCommand.php b/vendor/drupal/console/src/Command/Database/DumpCommand.php
index 9de8ad8643..4650838db4 100644
--- a/vendor/drupal/console/src/Command/Database/DumpCommand.php
+++ b/vendor/drupal/console/src/Command/Database/DumpCommand.php
@@ -14,6 +14,8 @@
 use Drupal\Console\Core\Command\Command;
 use Drupal\Console\Command\Shared\ConnectTrait;
 use Drupal\Console\Core\Utils\ShellProcess;
+use Drupal\Core\Database\Connection;
+use Symfony\Component\Process\Process;
 
 class DumpCommand extends Command
 {
@@ -25,19 +27,26 @@ class DumpCommand extends Command
      * @var ShellProcess
      */
     protected $shellProcess;
+    /**
+     * @var Connection
+     */
+    protected $database;
 
     /**
      * DumpCommand constructor.
      *
      * @param $appRoot
      * @param ShellProcess $shellProcess
+     * @param Connection $database
      */
     public function __construct(
         $appRoot,
-        ShellProcess $shellProcess
+        ShellProcess $shellProcess,
+        Connection $database
     ) {
         $this->appRoot = $appRoot;
         $this->shellProcess = $shellProcess;
+        $this->database = $database;
         parent::__construct();
     }
 
@@ -55,6 +64,12 @@ protected function configure()
                 $this->trans('commands.database.dump.arguments.database'),
                 'default'
             )
+            ->addArgument(
+                'target',
+                InputArgument::OPTIONAL,
+                $this->trans('commands.database.dump.arguments.target'),
+                'default'
+            )
             ->addOption(
                 'file',
                 null,
@@ -67,6 +82,12 @@ protected function configure()
                 InputOption::VALUE_NONE,
                 $this->trans('commands.database.dump.options.gz')
             )
+            ->addOption(
+                'exclude-cache',
+                null,
+                InputOption::VALUE_NONE,
+                $this->trans('commands.database.dump.options.exclude.cache')
+            )
             ->setHelp($this->trans('commands.database.dump.help'))
             ->setAliases(['dbdu']);
     }
@@ -77,11 +98,36 @@ protected function configure()
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $database = $input->getArgument('database');
+        $target = $input->getArgument('target');
         $file = $input->getOption('file');
         $learning = $input->getOption('learning');
         $gz = $input->getOption('gz');
+        $excludeCache = $input->getOption('exclude-cache');
+
+        $databaseConnection = $this->escapeConnection($this->resolveConnection($database, $target));
+
+        if ($excludeCache) {
+            $query = '';
+            if ($databaseConnection['driver'] == 'mysql') {
+                $query = "SHOW TABLES LIKE 'cache_%'";
+            } elseif ($databaseConnection['driver'] == 'pgsql') {
+                $query = "SELECT tablename FROM pg_catalog.pg_tables WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema' AND tablename LIKE 'cache_%'";
+            }
 
-        $databaseConnection = $this->resolveConnection($database);
+            $result = $this->database
+                ->query($query)
+                ->fetchAll();
+
+            $excludeTables = [];
+            foreach ($result as $record) {
+                $table = array_values(json_decode(json_encode($record), true));
+                if ($databaseConnection['driver'] == 'mysql') {
+                    $excludeTables[] = $databaseConnection['database'] . '.' . $table[0];
+                } elseif ($databaseConnection['driver'] == 'pgsql') {
+                    $excludeTables[] = 'public' . '.' . $table[0];
+                }
+            }
+        }
 
         if (!$file) {
             $date = new \DateTime();
@@ -97,7 +143,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
 
         if ($databaseConnection['driver'] == 'mysql') {
             $command = sprintf(
-                'mysqldump --user="%s" --password="%s" --host="%s" --port="%s" "%s" > "%s"',
+                "mysqldump --user='%s' --password='%s' --host='%s' --port='%s' '%s' > '%s'",
                 $databaseConnection['username'],
                 $databaseConnection['password'],
                 $databaseConnection['host'],
@@ -105,9 +151,28 @@ protected function execute(InputInterface $input, OutputInterface $output)
                 $databaseConnection['database'],
                 $file
             );
+
+            if ($excludeCache) {
+                $ignoreTable = '';
+                foreach ($excludeTables as $table) {
+                    $ignoreTable .= "--ignore-table=\"{$table}\" ";
+                }
+
+                $command = sprintf(
+                    "mysqldump --user='%s' --password='%s' --host='%s' --port='%s' %s '%s'> '%s'",
+                    $databaseConnection['username'],
+                    $databaseConnection['password'],
+                    $databaseConnection['host'],
+                    $databaseConnection['port'],
+                    $ignoreTable,
+                    $databaseConnection['database'],
+                    $file
+                );
+
+            }
         } elseif ($databaseConnection['driver'] == 'pgsql') {
             $command = sprintf(
-                'PGPASSWORD="%s" pg_dumpall -w -U "%s" -h "%s" -p "%s" -l "%s" -f "%s"',
+                "PGPASSWORD='%s' pg_dumpall -w -U '%s' -h '%s' -p '%s' -l '%s' -f '%s'",
                 $databaseConnection['password'],
                 $databaseConnection['username'],
                 $databaseConnection['host'],
@@ -115,40 +180,67 @@ protected function execute(InputInterface $input, OutputInterface $output)
                 $databaseConnection['database'],
                 $file
             );
+
+            if ($excludeCache) {
+                $ignoreTable = '';
+                foreach ($excludeTables as $table) {
+                    $ignoreTable .= "-T \"{$table}\" ";
+                }
+
+                $command = sprintf(
+                    "PGPASSWORD='%s' pg_dump -w -U '%s' -h '%s' -p '%s' -f '%s' %s-d '%s'",
+                    $databaseConnection['password'],
+                    $databaseConnection['username'],
+                    $databaseConnection['host'],
+                    $databaseConnection['port'],
+                    $file,
+                    $ignoreTable,
+                    $databaseConnection['database']
+                );
+            }
         }
 
         if ($learning) {
             $this->getIo()->commentBlock($command);
         }
 
-        if ($this->shellProcess->exec($command, $this->appRoot)) {
-            $resultFile = $file;
-            if ($gz) {
-                if (substr($file, -3) != '.gz') {
-                    $resultFile = $file . ".gz";
-                }
-                file_put_contents(
-                    $resultFile,
-                    gzencode(
-                        file_get_contents(
-                            $file
+        try {
+            $process = new Process($command);
+            $process->setTimeout(null);
+            $process->setWorkingDirectory($this->appRoot);
+            $process->run();
+
+            if($process->isSuccessful()) {
+                $resultFile = $file;
+                if ($gz) {
+                    if (substr($file, -3) != '.gz') {
+                        $resultFile = $file . '.gz';
+                    }
+                    file_put_contents(
+                        $resultFile,
+                        gzencode(
+                            file_get_contents(
+                                $file
+                            )
                         )
+                    );
+                    if ($resultFile != $file) {
+                        unlink($file);
+                    }
+                }
+
+                $this->getIo()->success(
+                    sprintf(
+                        '%s %s',
+                        $this->trans('commands.database.dump.messages.success'),
+                        $resultFile
                     )
                 );
-                if ($resultFile != $file) {
-                    unlink($file);
-                }
             }
 
-            $this->getIo()->success(
-                sprintf(
-                    '%s %s',
-                    $this->trans('commands.database.dump.messages.success'),
-                    $resultFile
-                )
-            );
+            return 0;
+        } catch (\Exception $e) {
+            return 1;
         }
-
-        return 0;
     }
 }
diff --git a/vendor/drupal/console/src/Command/Database/QueryCommand.php b/vendor/drupal/console/src/Command/Database/QueryCommand.php
index 0658acbaaa..43231e0100 100644
--- a/vendor/drupal/console/src/Command/Database/QueryCommand.php
+++ b/vendor/drupal/console/src/Command/Database/QueryCommand.php
@@ -43,6 +43,12 @@ protected function configure()
                 $this->trans('commands.database.query.arguments.database'),
                 'default'
             )
+            ->addArgument(
+                'target',
+                InputArgument::OPTIONAL,
+                $this->trans('commands.database.connect.arguments.target'),
+                'default'
+            )
             ->addOption('quick', null, InputOption::VALUE_NONE, $this->trans('commands.database.query.options.quick'))
             ->addOption('debug', null, InputOption::VALUE_NONE, $this->trans('commands.database.query.options.debug'))
             ->addOption('html', null, InputOption::VALUE_NONE, $this->trans('commands.database.query.options.html'))
@@ -62,9 +68,10 @@ protected function execute(InputInterface $input, OutputInterface $output)
     {
         $query = $input->getArgument('query');
         $database = $input->getArgument('database');
+        $target = $input->getArgument('target');
         $learning = $input->getOption('learning');
 
-        $databaseConnection = $this->resolveConnection($database);
+        $databaseConnection = $this->resolveConnection($database, $target);
 
         $connection = sprintf(
             '%s -A --database=%s --user=%s --password=%s --host=%s --port=%s',
@@ -79,31 +86,31 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $args = explode(' ', $connection);
         $args[] = sprintf('--execute=%s', $query);
 
-        $opts = ["quick", "debug", "html", "xml", "raw", "vertical", "batch"];
+        $opts = ['quick', 'debug', 'html', 'xml', 'raw', 'vertical', 'batch'];
         array_walk(
             $opts, function ($opt) use ($input, &$args) {
                 if ($input->getOption($opt)) {
                     switch ($opt) {
-                    case "quick":
-                        $args[] = "--quick";
+                    case 'quick':
+                        $args[] = '--quick';
                         break;
-                    case "debug":
-                        $args[] = "-T";
+                    case 'debug':
+                        $args[] = '-T';
                         break;
-                    case "html":
-                        $args[] = "-H";
+                    case 'html':
+                        $args[] = '-H';
                         break;
-                    case "xml":
-                        $args[] = "-X";
+                    case 'xml':
+                        $args[] = '-X';
                         break;
-                    case "raw":
-                        $args[] = "--raw";
+                    case 'raw':
+                        $args[] = '--raw';
                         break;
-                    case "vertical":
-                        $args[] = "-E";
+                    case 'vertical':
+                        $args[] = '-E';
                         break;
-                    case "batch":
-                        $args[] = "--batch";
+                    case 'batch':
+                        $args[] = '--batch';
                         break;
                     }
                 }
@@ -112,11 +119,11 @@ protected function execute(InputInterface $input, OutputInterface $output)
 
         if ($learning) {
             $this->getIo()->commentBlock(
-                implode(" ", $args)
+                implode(' ', $args)
             );
         }
 
-        $processBuilder = new ProcessBuilder([]);
+        $processBuilder = new ProcessBuilder();
         $processBuilder->setArguments($args);
         $process = $processBuilder->getProcess();
         $process->setTty('true');
diff --git a/vendor/drupal/console/src/Command/Database/RestoreCommand.php b/vendor/drupal/console/src/Command/Database/RestoreCommand.php
index 659f158d6a..ad5be00744 100644
--- a/vendor/drupal/console/src/Command/Database/RestoreCommand.php
+++ b/vendor/drupal/console/src/Command/Database/RestoreCommand.php
@@ -11,7 +11,7 @@
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
-use Symfony\Component\Process\ProcessBuilder;
+use Symfony\Component\Process\Process;
 use Drupal\Console\Core\Command\Command;
 use Drupal\Console\Command\Shared\ConnectTrait;
 
@@ -49,6 +49,12 @@ protected function configure()
                 $this->trans('commands.database.restore.arguments.database'),
                 'default'
             )
+            ->addArgument(
+                'target',
+                InputArgument::OPTIONAL,
+                $this->trans('commands.database.restore.arguments.target'),
+                'default'
+            )
             ->addOption(
                 'file',
                 null,
@@ -56,7 +62,8 @@ protected function configure()
                 $this->trans('commands.database.restore.options.file')
             )
             ->setHelp($this->trans('commands.database.restore.help'))
-            ->setAliases(['dbr']);
+            ->setAliases(['dbr'])
+            ->enableMaintenance();
     }
 
     /**
@@ -65,25 +72,49 @@ protected function configure()
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $database = $input->getArgument('database');
+        $target = $input->getArgument('target');
         $file = $input->getOption('file');
         $learning = $input->getOption('learning');
 
-        $databaseConnection = $this->resolveConnection($database);
-
-        if (!$file) {
+        $databaseConnection = $this->escapeConnection($this->resolveConnection($database, $target));
+        if (!$file || !file_exists($file)) {
             $this->getIo()->error(
                 $this->trans('commands.database.restore.messages.no-file')
             );
             return 1;
         }
+
         if (strpos($file, '.sql.gz') !== false) {
-            $catCommand = "gunzip -c %s | ";
+            $catCommand = 'gunzip -c %s | ';
         } else {
-            $catCommand = "cat %s | ";
+            $catCommand = 'cat %s | ';
         }
+
+        $commands = array();
         if ($databaseConnection['driver'] == 'mysql') {
-            $command = sprintf(
-                $catCommand . 'mysql --user=%s --password=%s --host=%s --port=%s %s',
+          // Drop database first.
+          $commands[] = sprintf(
+            "mysql --user='%s' --password='%s' --host='%s' --port='%s' -e'DROP DATABASE IF EXISTS %s'",
+            $databaseConnection['username'],
+            $databaseConnection['password'],
+            $databaseConnection['host'],
+            $databaseConnection['port'],
+            $databaseConnection['database']
+          );
+
+          // Recreate database.
+          $commands[] = sprintf(
+            "mysql --user='%s' --password='%s' --host='%s' --port='%s' -e'CREATE DATABASE %s'",
+            $databaseConnection['username'],
+            $databaseConnection['password'],
+            $databaseConnection['host'],
+            $databaseConnection['port'],
+            $databaseConnection['database']
+          );
+
+          // Import dump.
+          $commands[] = sprintf(
+                $catCommand . "mysql --user='%s' --password='%s' --host='%s' --port='%s' %s",
                 $file,
                 $databaseConnection['username'],
                 $databaseConnection['password'],
@@ -92,8 +123,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
                 $databaseConnection['database']
             );
         } elseif ($databaseConnection['driver'] == 'pgsql') {
-            $command = sprintf(
-                'PGPASSWORD="%s" ' . $catCommand . 'psql -w -U %s -h %s -p %s -d %s',
+            $commands[] = sprintf(
+                "PGPASSWORD='%s' " . $catCommand . "psql -w -U '%s' -h '%s' -p '%s' -d '%s'",
                 $file,
                 $databaseConnection['password'],
                 $databaseConnection['username'],
@@ -103,26 +134,27 @@ protected function execute(InputInterface $input, OutputInterface $output)
             );
         }
 
-        if ($learning) {
-            $this->getIo()->commentBlock($command);
-        }
+        foreach ($commands as $command) {
+            if ($learning) {
+              $this->getIo()->commentBlock($command);
+            }
 
-        $processBuilder = new ProcessBuilder(['-v']);
-        $process = $processBuilder->getProcess();
-        $process->setWorkingDirectory($this->appRoot);
-        $process->setTty($input->isInteractive());
-        $process->setCommandLine($command);
-        $process->run();
+            $process = new Process($command);
+            $process->setTimeout(null);
+            $process->setWorkingDirectory($this->appRoot);
+            $process->setTty($input->isInteractive());
+            $process->run();
 
-        if (!$process->isSuccessful()) {
-            throw new \RuntimeException($process->getErrorOutput());
+            if (!$process->isSuccessful()) {
+              throw new \RuntimeException($process->getErrorOutput());
+            }
         }
 
         $this->getIo()->success(
             sprintf(
-                '%s %s',
-                $this->trans('commands.database.restore.messages.success'),
-                $file
+              '%s %s',
+              $this->trans('commands.database.restore.messages.success'),
+              $file
             )
         );
 
diff --git a/vendor/drupal/console/src/Command/Debug/ContainerCommand.php b/vendor/drupal/console/src/Command/Debug/ContainerCommand.php
index 17e2bcf63a..98bee058cc 100644
--- a/vendor/drupal/console/src/Command/Debug/ContainerCommand.php
+++ b/vendor/drupal/console/src/Command/Debug/ContainerCommand.php
@@ -7,11 +7,11 @@
 
 namespace Drupal\Console\Command\Debug;
 
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Output\OutputInterface;
+use Drupal\Console\Core\Command\ContainerAwareCommand;
 use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
-use Drupal\Console\Core\Command\ContainerAwareCommand;
+use Symfony\Component\Console\Output\OutputInterface;
 use Symfony\Component\Yaml\Yaml;
 
 /**
@@ -21,6 +21,15 @@
  */
 class ContainerCommand extends ContainerAwareCommand
 {
+
+    const BLUE = 'blue';
+    const CYAN = 'cyan';
+    const GREEN = 'green';
+    const MAGENTA = 'magenta';
+    const RED = 'red';
+    const YELLOW = 'yellow';
+    const WHITE = 'white';
+
     /**
      * {@inheritdoc}
      */
@@ -101,12 +110,25 @@ protected function execute(InputInterface $input, OutputInterface $output)
         return 0;
     }
 
+    /**
+     * Get callback list.
+     *
+     * @param string $service
+     *   Service name.
+     * @param string $method
+     *   Methods name.
+     * @param array $args
+     *   Arguments.
+     *
+     * @return array
+     *   List of callbacks.
+     */
     private function getCallbackReturnList($service, $method, $args)
     {
         if ($args != null) {
             $parsedArgs = json_decode($args, true);
             if (!is_array($parsedArgs)) {
-                $parsedArgs = explode(",", $args);
+                $parsedArgs = explode(',', $args);
             }
         } else {
             $parsedArgs = null;
@@ -119,34 +141,43 @@ private function getCallbackReturnList($service, $method, $args)
             return $serviceDetail;
         }
         $serviceDetail[] = [
-            '<fg=green>'.$this->trans('commands.debug.container.messages.service').'</>',
-            '<fg=yellow>'.$service.'</>'
+            $this->addGreenTranslationWrapper('commands.debug.container.messages.service'),
+            $this->addWrapper($service),
         ];
         $serviceDetail[] = [
-            '<fg=green>'.$this->trans('commands.debug.container.messages.class').'</>',
-            '<fg=yellow>'.get_class($serviceInstance).'</>'
+            $this->addGreenTranslationWrapper('commands.debug.container.messages.class'),
+            $this->addWrapper(get_class($serviceInstance)),
         ];
         $methods = [$method];
         $this->extendArgumentList($serviceInstance, $methods);
         $serviceDetail[] = [
-            '<fg=green>'.$this->trans('commands.debug.container.messages.method').'</>',
-            '<fg=yellow>'.$methods[0].'</>'
+            $this->addGreenTranslationWrapper('commands.debug.container.messages.method'),
+            $this->addWrapper($methods[0]),
         ];
         if ($parsedArgs) {
             $serviceDetail[] = [
-                '<fg=green>'.$this->trans('commands.debug.container.messages.arguments').'</>',
-                json_encode($parsedArgs, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)
+                $this->addGreenTranslationWrapper('commands.debug.container.messages.arguments'),
+                $this->addWrapper(json_encode($parsedArgs, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)),
             ];
         }
         $return = call_user_func_array([$serviceInstance,$method], $parsedArgs);
         $serviceDetail[] = [
-            '<fg=green>'.$this->trans('commands.debug.container.messages.return').'</>',
-            json_encode($return, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)
+            $this->addGreenTranslationWrapper('commands.debug.container.messages.return'),
+            $this->addWrapper(json_encode($return, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)),
         ];
         return $serviceDetail;
     }
 
-    private function getServiceList($tag)
+    /**
+     * Get service list.
+     *
+     * @param string $tag
+     *   Tag.
+     *
+     * @return array
+     *   Array of services.
+     */
+    private function getServiceList($tag = null)
     {
         if ($tag) {
             return $this->getServiceListByTag($tag);
@@ -162,6 +193,15 @@ private function getServiceList($tag)
         return $services;
     }
 
+    /**
+     * Get service list by a tag.
+     *
+     * @param string $tag
+     *   Tag.
+     *
+     * @return array
+     *   Array of services.
+     */
     private function getServiceListByTag($tag)
     {
         $services = [];
@@ -186,6 +226,17 @@ private function getServiceListByTag($tag)
         return $services;
     }
 
+    /**
+     * Compares the values.
+     *
+     * @param string $a
+     *   First value.
+     * @param string $b
+     *   Second value.
+     *
+     * @return int
+     *   Result.
+     */
     private function compareService($a, $b)
     {
         return strcmp($a[0], $b[0]);
@@ -195,41 +246,42 @@ private function getServiceDetail($service)
     {
         $serviceInstance = $this->get($service);
         $serviceDetail = [];
+        $class_name = get_class($serviceInstance);
 
         if ($serviceInstance) {
             $serviceDetail[] = [
-                '<fg=green>'.$this->trans('commands.debug.container.messages.service').'</>',
-                '<fg=yellow>'.$service.'</>'
+                $this->addGreenTranslationWrapper('commands.debug.container.messages.service'),
+                $this->addTranslationWrapper('commands.debug.container.messages.service'),
             ];
             $serviceDetail[] = [
-                '<fg=green>'.$this->trans('commands.debug.container.messages.class').'</>',
-                '<fg=yellow>'.get_class($serviceInstance).'</>'
+                $this->addGreenTranslationWrapper('commands.debug.container.messages.class'),
+                $this->addTranslationWrapper('commands.debug.container.messages.class'),
             ];
-            $interface = str_replace("{  }", "", Yaml::dump(class_implements($serviceInstance)));
+            $interface = str_replace('{  }', '', Yaml::dump(class_implements($serviceInstance)));
             if (!empty($interface)) {
                 $serviceDetail[] = [
-                    '<fg=green>'.$this->trans('commands.debug.container.messages.interface').'</>',
-                    '<fg=yellow>'.$interface.'</>'
+                    $this->addGreenTranslationWrapper('commands.debug.container.messages.interface'),
+                    $this->addWrapper($interface),
                 ];
             }
             if ($parent = get_parent_class($serviceInstance)) {
                 $serviceDetail[] = [
-                    '<fg=green>'.$this->trans('commands.debug.container.messages.parent').'</>',
-                    '<fg=yellow>'.$parent.'</>'
+                    $this->addGreenTranslationWrapper('commands.debug.container.messages.parent'),
+                    $this->addWrapper($parent),
                 ];
             }
-            if ($vars = get_class_vars($serviceInstance)) {
+            if ($vars = get_class_vars($class_name)) {
                 $serviceDetail[] = [
-                    '<fg=green>'.$this->trans('commands.debug.container.messages.variables').'</>',
-                    '<fg=yellow>'.Yaml::dump($vars).'</>'
+                    $this->addGreenTranslationWrapper('commands.debug.container.messages.variables'),
+                    $this->addWrapper(Yaml::dump($vars)),
                 ];
             }
-            if ($methods = get_class_methods($serviceInstance)) {
+            if ($methods = get_class_methods($class_name)) {
                 sort($methods);
                 $this->extendArgumentList($serviceInstance, $methods);
                 $serviceDetail[] = [
-                    '<fg=green>'.$this->trans('commands.debug.container.messages.methods').'</>',
-                    '<fg=yellow>'.implode("\n", $methods).'</>'
+                    $this->addGreenTranslationWrapper('commands.debug.container.messages.methods'),
+                    $this->addWrapper(implode("\n", $methods)),
                 ];
             }
         } else {
@@ -240,6 +292,50 @@ private function getServiceDetail($service)
 
         return $serviceDetail;
     }
+
+    /**
+     * Adds a wrapper with a color
+     *
+     * @param string $text
+     *   Text.
+     * @param string $color
+     *   Color.
+     *
+     * @return string
+     *   Result of the wrapping.
+     */
+    private function addWrapper($text, $color = ContainerCommand::YELLOW)
+    {
+        return "<fg=$color>$text</>";
+    }
+
+    /**
+     * Adds green color wrapper.
+     *
+     * @param string $translationString
+     *   Translation string.
+     *
+     * @return string
+     *   Result of the wrapping.
+     */
+    private function addGreenTranslationWrapper($translationString)
+    {
+        return $this->addTranslationWrapper($translationString, ContainerCommand::GREEN);
+    }
+
+    /**
+     * Adds green color wrapper.
+     *
+     * @param string $translationString
+     *   Translation string.
+     *
+     * @return string
+     *   Result of the wrapping.
+     */
+    private function addTranslationWrapper($translationString, $color = ContainerCommand::YELLOW) {
+        return $this->addWrapper($this->trans($translationString), $color);
+    }
+
     private function extendArgumentList($serviceInstance, &$methods)
     {
         foreach ($methods as $k => $m) {
@@ -248,37 +344,48 @@ private function extendArgumentList($serviceInstance, &$methods)
             $p = [];
 
             for ($i = 0; $i < count($params); $i++) {
+
                 if ($params[$i]->isDefaultValueAvailable()) {
                     $defaultVar = $params[$i]->getDefaultValue();
-                    $defaultVar = " = <fg=magenta>".str_replace(["\n","array ("], ["", "array("], var_export($def, true)).'</>';
+                    $defaultVar = ' = ' . $this->addWrapper(str_replace(["\n",'array ('], ['', 'array('], var_export($defaultVar, true)), ContainerCommand::MAGENTA);
                 } else {
                     $defaultVar = '';
                 }
+
                 if (method_exists($params[$i], 'hasType') && method_exists($params[$i], 'getType')) {
                     if ($params[$i]->hasType()) {
-                        $defaultType = '<fg=white>'.strval($params[$i]->getType()).'</> ';
+                        $defaultType = $this->addWrapper( strval($params[$i]->getType()), ContainerCommand::WHITE) . ' ';
                     } else {
                         $defaultType = '';
                     }
                 } else {
                     $defaultType = '';
                 }
+
                 if ($params[$i]->isPassedByReference()) {
-                    $parameterReference = '<fg=yellow>&</>';
+                    $parameterReference = $this->addWrapper('&');
                 } else {
                     $parameterReference = '';
                 }
-                $p[] = $defaultType.$parameterReference.'<fg=red>'.'$</><fg=red>'.$params[$i]->getName().'</>'.$defaultVar;
+
+                $p[] = $defaultType . $parameterReference . $this->addWrapper('$' . $params[$i]->getName(), ContainerCommand::RED) . $defaultVar;
             }
+
             if ($reflection->isPublic()) {
-                $methods[$k] = '<fg=cyan>'.$methods[$k]."</><fg=blue>(</>".implode(', ', $p)."<fg=blue>) </> ";
+                $methods[$k] = $this->addWrapper($methods[$k], ContainerCommand::CYAN) . $this->addWrapper('(', ContainerCommand::BLUE) . implode(', ', $p) . $this->addWrapper(')', ContainerCommand::BLUE);
             }
         }
     }
 
+    /**
+     * Get parameter list.
+     *
+     * @return array
+     *   Array with parameter.
+     */
     private function getParameterList()
     {
-        $parameters = array_filter(
+        return array_filter(
             $this->container->getParameterBag()->all(), function ($name) {
                 if (preg_match('/^container\./', $name)) {
                     return false;
@@ -292,7 +399,5 @@ private function getParameterList()
                 return true;
             }, ARRAY_FILTER_USE_KEY
         );
-
-        return $parameters;
     }
 }
diff --git a/vendor/drupal/console/src/Command/Debug/DatabaseTableCommand.php b/vendor/drupal/console/src/Command/Debug/DatabaseTableCommand.php
index 5f0768e1b3..88399381b4 100644
--- a/vendor/drupal/console/src/Command/Debug/DatabaseTableCommand.php
+++ b/vendor/drupal/console/src/Command/Debug/DatabaseTableCommand.php
@@ -76,9 +76,12 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $table = $input->getArgument('table');
         $databaseConnection = $this->resolveConnection($database);
         if ($table) {
-            $result = $this->database
-                ->query('DESCRIBE '. $table .';')
-                ->fetchAll();
+
+            $result = $databaseConnection['driver'] == 'sqlite' ? $this->database->query('PRAGMA table_info('.$table.');') :
+                $this->database
+                    ->query('DESCRIBE ' . $table . ';')
+                    ->fetchAll();
+
             if (!$result) {
                 throw new \Exception(
                     sprintf(
@@ -96,8 +99,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
             foreach ($result as $record) {
                 $column = json_decode(json_encode($record), true);
                 $tableRows[] = [
-                    'column' => $column['Field'],
-                    'type' => $column['Type'],
+                    'column' => $column[$databaseConnection['driver'] == 'sqlite' ? 'name': 'Field'],
+                    'type' => $column[$databaseConnection['driver'] == 'sqlite' ? 'type': 'Type'],
                 ];
             }
 
@@ -107,7 +110,9 @@ protected function execute(InputInterface $input, OutputInterface $output)
         }
 
         $schema = $this->database->schema();
-        $tables = $schema->findTables('%');
+
+        $tables = $databaseConnection['driver'] == 'sqlite' ? array_keys($this->database->query('SELECT name FROM sqlite_master WHERE type = "table" AND name NOT LIKE "sqlite_%";')
+            ->fetchAllAssoc('name')) : $schema->findTables('%');
 
         $this->getIo()->comment(
             sprintf(
diff --git a/vendor/drupal/console/src/Command/Debug/EntityCommand.php b/vendor/drupal/console/src/Command/Debug/EntityCommand.php
index 89656120f6..cf9d07927a 100644
--- a/vendor/drupal/console/src/Command/Debug/EntityCommand.php
+++ b/vendor/drupal/console/src/Command/Debug/EntityCommand.php
@@ -10,13 +10,13 @@
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
 use Drupal\Console\Core\Command\Command;
-use Drupal\Core\Entity\EntityTypeRepository;
+use Drupal\Core\Entity\EntityTypeRepositoryInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 
 class EntityCommand extends Command
 {
     /**
-     * @var EntityTypeRepository
+     * @var EntityTypeRepositoryInterface
      */
     protected $entityTypeRepository;
 
@@ -28,11 +28,11 @@ class EntityCommand extends Command
     /**
      * EntityCommand constructor.
      *
-     * @param EntityTypeRepository       $entityTypeRepository
-     * @param EntityTypeManagerInterface $entityTypeManager
+     * @param EntityTypeRepositoryInterface $entityTypeRepository
+     * @param EntityTypeManagerInterface    $entityTypeManager
      */
     public function __construct(
-        EntityTypeRepository $entityTypeRepository,
+        EntityTypeRepositoryInterface $entityTypeRepository,
         EntityTypeManagerInterface $entityTypeManager
     ) {
         $this->entityTypeRepository = $entityTypeRepository;
diff --git a/vendor/drupal/console/src/Command/Debug/HookCommand.php b/vendor/drupal/console/src/Command/Debug/HookCommand.php
new file mode 100644
index 0000000000..9e748704ee
--- /dev/null
+++ b/vendor/drupal/console/src/Command/Debug/HookCommand.php
@@ -0,0 +1,198 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Command\Debug\HookCommand.
+ */
+
+namespace Drupal\Console\Command\Debug;
+
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Extension\Manager;
+use Drupal\Component\Utility;
+use Drupal\Core\Extension\ModuleHandlerInterface;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Finder\Finder;
+
+/**
+ * Class HookCommand.
+ *
+ * @package Drupal\Console\Command\Debug
+ */
+class HookCommand extends Command
+{
+    /**
+     * @var Manager $extensionManager
+     */
+    protected $extensionManager = null;
+
+    /**
+     * @var ModuleHandlerInterface
+     */
+    protected $moduleHandler;
+
+    /**
+     * @var array
+     */
+    protected $hooks = [];
+
+    /**
+     * HookCommand constructor.
+     *
+     * @param Manager $extensionManager
+     * @param ModuleHandlerInterface $moduleHandler
+     *
+     */
+    public function __construct(
+        Manager $extensionManager,
+        ModuleHandlerInterface $moduleHandler
+    ) {
+        $this->extensionManager = $extensionManager;
+        $this->moduleHandler = $moduleHandler;
+        parent::__construct();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this
+            ->setName('debug:hook')
+            ->setDescription($this->trans('commands.debug.hook.description'))
+            ->setAliases(['dbh']);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $this->findHooks();
+        $tableHeader = [
+            $this->trans('commands.debug.hook.messages.name'),
+        ];
+
+        $this->getIo()->table($tableHeader, $this->getHooks(), 'compact');
+        return 0;
+    }
+
+    protected function findHooks()
+    {
+        $modules = $this->getAllModules();
+        $moduleInstances = [];
+        foreach ($modules as $module) {
+            $moduleInstance = $this->extensionManager->getModule($module);
+            if (empty($moduleInstance)) {
+                continue;
+            }
+            $moduleInstances[$module] = $moduleInstance;
+            $this->moduleHandler->setModuleList([$module => $moduleInstance]);
+            $this->findHooksInApiFile($moduleInstance);
+
+        }
+        $this->getHooksFromHookInfo($moduleInstances);
+    }
+
+    /**
+     * Get module of all modules in the system.
+     *
+     * @return array
+     *   Module list.
+     */
+    protected function getAllModules()
+    {
+        return $this->extensionManager->discoverModules()
+                    ->showInstalled()
+                    ->showUninstalled()
+                    ->showNoCore()
+                    ->showCore()
+                    ->getList(true);
+    }
+
+    /**
+     * Gets gooks from api file of the module.
+     *
+     * @param $moduleInstance
+     *   Module instance.
+     */
+    protected function findHooksInApiFile($moduleInstance)
+    {
+        $finder = new Finder();
+        $files = $finder->files()
+            ->name("{$moduleInstance->info['name']}.api.php")
+            ->in($moduleInstance->getPath());
+
+        foreach ($files as $file) {
+            $functions = $this->getFileFunctions($file->getPathname());
+            foreach ($functions as $function) {
+                if (Unicode::strpos($function, 'hook')) {
+                    $this->addHook($function);
+                }
+            }
+
+        }
+    }
+
+    /**
+     * Get names of all functions from file.
+     *
+     * @param string $filePath
+     *   File path
+     * @return array
+     *   Functions list.
+     */
+    protected function getFileFunctions($filePath)
+    {
+        $source = file_get_contents($filePath);
+        $tokens = token_get_all($source);
+
+        $functions = [];
+        $nextStringIsFunc = false;
+        foreach($tokens as $token) {
+            switch($token[0]) {
+                case T_FUNCTION:
+                    $nextStringIsFunc = true;
+                    break;
+
+                case T_STRING:
+                    if ($nextStringIsFunc) {
+                        $nextStringIsFunc = false;
+                        $functions[] = $token[1];
+                    }
+                    break;
+            }
+        }
+
+        return $functions;
+    }
+
+    /**
+     * @param $modules
+     */
+    protected function getHooksFromHookInfo($modules)
+    {
+        $this->moduleHandler->setModuleList($modules);
+        foreach(array_keys($this->moduleHandler->getHookInfo()) as $hook) {
+            $this->addHook('hook_' . $hook);
+        }
+    }
+
+    /**
+     * Add hook.
+     *
+     * @param string $value
+     *   Hook name.
+     */
+    protected function addHook($value)
+    {
+        $this->hooks[] = $value;
+    }
+
+    protected function getHooks()
+    {
+        return $this->hooks;
+    }
+}
diff --git a/vendor/drupal/console/src/Command/Debug/ModuleCommand.php b/vendor/drupal/console/src/Command/Debug/ModuleCommand.php
index eee1fbd4a6..e9835606f3 100644
--- a/vendor/drupal/console/src/Command/Debug/ModuleCommand.php
+++ b/vendor/drupal/console/src/Command/Debug/ModuleCommand.php
@@ -7,13 +7,12 @@
 
 namespace Drupal\Console\Command\Debug;
 
-use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputOption;
-use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
 use Drupal\Console\Core\Command\Command;
 use Drupal\Console\Utils\Site;
-use GuzzleHttp\Client;
 use Drupal\Console\Core\Utils\ConfigurationManager;
 
 class ModuleCommand extends Command
@@ -28,14 +27,6 @@ class ModuleCommand extends Command
      */
     protected $site;
 
-    /**
-     * DebugCommand constructor.
-     *
-     * @param Client  $httpClient
-     */
-
-    protected $httpClient;
-
     /**
      * ChainDebugCommand constructor.
      *
@@ -44,12 +35,10 @@ class ModuleCommand extends Command
      */
     public function __construct(
         ConfigurationManager $configurationManager,
-        Site $site,
-        Client $httpClient
+        Site $site
     ) {
         $this->configurationManager = $configurationManager;
         $this->site = $site;
-        $this->httpClient = $httpClient;
         parent::__construct();
     }
 
@@ -84,61 +73,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
 
         $status = strtolower($input->getOption('status'));
         $type = strtolower($input->getOption('type'));
-        $modules = strtolower($input->getArgument('module'));
-
-        if ($modules) {
-            $config = $this->configurationManager->getConfiguration();
-            $repo = $config->get('application.composer.repositories.default');
-
-            foreach ($modules as $module) {
-                $url = sprintf(
-                    '%s/packages/drupal/%s.json',
-                    $config->get('application.composer.packages.default'),
-                    $module
-                );
-
-                try {
-                    $data = $this->httpClient->getUrlAsJson($repo . $url);
-                } catch (\Exception $e) {
-                    $this->getIo()->error(
-                        sprintf(
-                            $this->trans('commands.debug.module.messages.no-results'),
-                            $module
-                        )
-                    );
-
-                    return 1;
-                }
-
-                $tableHeader = [
-                  '<info>'.$data->package->name.'</info>'
-                ];
-
-                $tableRows = [];
-
-                $tableRows[] = [
-                  $data->package->description
-                ];
-
-                $tableRows[] = [
-                  '<comment>'.$this->trans('commands.debug.module.messages.total-downloads').'</comment>',
-                  $data->package->downloads->total
-                ];
-
-                $tableRows[] = [
-                  '<comment>'.$this->trans('commands.debug.module.messages.total-monthly').'</comment>',
-                  $data->package->downloads->monthly
-                ];
-
-                $tableRows[] = [
-                  '<comment>'.$this->trans('commands.debug.module.messages.total-daily').'</comment>',
-                  $data->package->downloads->daily
-                ];
-
-                $this->getIo()->table($tableHeader, $tableRows, 'compact');
-            }
-            return 0;
-        }
+        $modules = $input->getArgument('module');
 
         if ($status == 'installed') {
             $status = 1;
@@ -166,32 +101,58 @@ protected function execute(InputInterface $input, OutputInterface $output)
           $this->trans('commands.debug.module.messages.origin'),
         ];
 
-        $tableRows = [];
-        $modules = system_rebuild_module_data();
-        foreach ($modules as $module_id => $module) {
-            if ($status >= 0 && $status != $module->status) {
+        $tableRows = $this->getModules($status, $type, $modules);
+
+        $this->getIo()->table($tableHeader, $tableRows, 'compact');
+    }
+
+    /**
+     * Get the module info
+     * @param $status
+     * @param $type
+     * @param $modules
+     *
+     * @return array
+     */
+    private function getModules($status, $type, $modules) {
+
+        $result = [];
+        $modulesData = system_rebuild_module_data();
+
+        if(!$modules) {
+            $modules = array_keys($modulesData) ;
+        }
+
+        foreach ($modules as $module) {
+            $moduleData = $modulesData[strtolower($module)];
+
+            if(!$moduleData) {
+                continue;
+            }
+
+            if ($status >= 0 && $status != $moduleData->status) {
                 continue;
             }
 
-            if ($type !== null && $type !== $module->origin) {
+            if ($type !== null && $type !== $moduleData->origin) {
                 continue;
             }
 
-            $module_status = ($module->status) ? $this->trans('commands.debug.module.messages.installed') : $this->trans('commands.debug.module.messages.uninstalled');
-            $module_origin = ($module->origin) ? $module->origin : 'no core';
-            $schema_version = (drupal_get_installed_schema_version($module_id)!= -1?drupal_get_installed_schema_version($module_id): '');
-
-            $tableRows [] = [
-              $module_id,
-              $module->info['name'],
-              $module->info['package'],
-              $module->info['version'],
-              $schema_version,
-              $module_status,
-              $module_origin,
+            $module_status = ($moduleData->status) ? $this->trans('commands.debug.module.messages.installed') : $this->trans('commands.debug.module.messages.uninstalled');
+            $module_origin = ($moduleData->origin) ? $moduleData->origin : 'no core';
+            $schema_version = (drupal_get_installed_schema_version($module)!= -1?drupal_get_installed_schema_version($module): '');
+
+            $result [] = [
+                $module,
+                $moduleData->info['name'],
+                $moduleData->info['package'],
+                $moduleData->info['version'],
+                $schema_version,
+                $module_status,
+                $module_origin,
             ];
         }
 
-        $this->getIo()->table($tableHeader, $tableRows, 'compact');
+        return $result;
     }
 }
diff --git a/vendor/drupal/console/src/Command/Debug/PermissionCommand.php b/vendor/drupal/console/src/Command/Debug/PermissionCommand.php
index 99acbb9c6b..964480e6f0 100644
--- a/vendor/drupal/console/src/Command/Debug/PermissionCommand.php
+++ b/vendor/drupal/console/src/Command/Debug/PermissionCommand.php
@@ -2,22 +2,22 @@
 
 /**
  * @file
- * Contains \Drupal\Console\Command\PermissionDebugCommand.
+ * Contains \Drupal\Console\Command\PermissionCommand.
  */
 
 namespace Drupal\Console\Command\Debug;
 
+use Drupal\Console\Core\Command\Command;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
 use Symfony\Component\Console\Input\InputArgument;
-use Drupal\Console\Core\Command\ContainerAwareCommand;
 
 /**
  * Class DebugCommand
  *
  * @package Drupal\Console\Command\Debug
  */
-class PermissionCommand extends ContainerAwareCommand
+class PermissionCommand extends Command
 {
     /**
      * {@inheritdoc}
diff --git a/vendor/drupal/console/src/Command/Debug/PluginCommand.php b/vendor/drupal/console/src/Command/Debug/PluginCommand.php
index f6a661d8e9..11536aceeb 100644
--- a/vendor/drupal/console/src/Command/Debug/PluginCommand.php
+++ b/vendor/drupal/console/src/Command/Debug/PluginCommand.php
@@ -107,8 +107,108 @@ protected function execute(InputInterface $input, OutputInterface $output)
             $this->trans('commands.debug.plugin.table-headers.definition-key'),
             $this->trans('commands.debug.plugin.table-headers.definition-value')
         ];
+
+        $tableRows = $this->prepareTableRows($definition);
+
+        ksort($tableRows);
+        $this->getIo()->table($tableHeader, array_values($tableRows));
+
+        $this->displayPluginData($pluginType, $pluginId);
+        return true;
+    }
+
+    /**
+     * Displays additional plugin data.
+     *
+     * @param string $pluginType
+     *   Plugin type.
+     * @param $pluginId
+     *   Plugin ID.
+     */
+    protected function displayPluginData($pluginType, $pluginId) {
+        switch ($pluginType) {
+            case 'field.field_type':
+                $this->getFieldTypeData($pluginId);
+                break;
+
+            case 'field.formatter':
+                $this->getFieldFormatterData($pluginId);
+                break;
+
+            case 'field.widget':
+                $this->getFieldWidgetData($pluginId);
+                break;
+        }
+    }
+
+    /**
+     * Get field type plugin additional data.
+     *
+     * @param string $pluginId
+     *   Plugin ID.
+     */
+    protected function getFieldTypeData($pluginId) {
+        $settings = $this->container->get('plugin.manager.field.field_type')->getDefaultFieldSettings($pluginId);
+        $this->displaySettingsTable($settings);
+    }
+
+    /**
+     * Get field formatter plugin additional data.
+     *
+     * @param string $pluginId
+     *   Plugin ID.
+     */
+    protected function getFieldFormatterData($pluginId) {
+        $settings = $this->container->get('plugin.manager.field.formatter')->getDefaultSettings($pluginId);
+        $this->displaySettingsTable($settings);
+    }
+
+    /**
+     * Get field widget plugin additional data.
+     *
+     * @param string $pluginId
+     *   Plugin ID.
+     */
+    protected function getFieldWidgetData($pluginId) {
+        $settings = $this->container->get('plugin.manager.field.widget')->getDefaultSettings($pluginId);
+        $this->displaySettingsTable($settings);
+    }
+
+    /**
+     * Displays settings table.
+     *
+     * @param array $settings
+     *   Settings array.
+     */
+    protected function displaySettingsTable($settings) {
+        $tableHeader = [
+          $this->trans('commands.debug.plugin.table-headers.setting'),
+          $this->trans('commands.debug.plugin.table-headers.definition-value')
+        ];
+
+        $tableRows = $this->prepareTableRows($settings);
+
+        if (count($tableRows) > 0) {
+            $this->getIo()->newLine(1);
+            $this->getIo()->info(
+              $this->trans('commands.debug.plugin.messages.plugin-info')
+            );
+            $this->getIo()->table($tableHeader, array_values($tableRows));
+        }
+    }
+
+    /**
+     * Prepare table rows.
+     *
+     * @param array $items
+     *   Data array.
+     *
+     * @return array
+     *   Table rows.
+     */
+    protected function prepareTableRows($items) {
         $tableRows = [];
-        foreach ($definition as $key => $value) {
+        foreach ($items as $key => $value) {
             if (is_object($value) && method_exists($value, '__toString')) {
                 $value = (string) $value;
             } elseif (is_array($value) || is_object($value)) {
@@ -116,10 +216,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
             } elseif (is_bool($value)) {
                 $value = ($value) ? 'TRUE' : 'FALSE';
             }
-            $tableRows[$key] = [$key, $value];
+            $tableRows[] = [$key, $value];
         }
-        ksort($tableRows);
-        $this->getIo()->table($tableHeader, array_values($tableRows));
-        return true;
+        return $tableRows;
     }
 }
diff --git a/vendor/drupal/console/src/Command/Debug/RestCommand.php b/vendor/drupal/console/src/Command/Debug/RestCommand.php
index 1aaa6a7a30..527051f907 100644
--- a/vendor/drupal/console/src/Command/Debug/RestCommand.php
+++ b/vendor/drupal/console/src/Command/Debug/RestCommand.php
@@ -15,6 +15,7 @@
 use Drupal\Console\Annotations\DrupalCommand;
 use Drupal\Console\Command\Shared\RestTrait;
 use Drupal\rest\Plugin\Type\ResourcePluginManager;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
 
 /**
  * @DrupalCommand(
@@ -26,6 +27,11 @@ class RestCommand extends Command
 {
     use RestTrait;
 
+    /**
+     * @var EntityTypeManagerInterface
+     */
+    protected $entityTypeManager;
+
     /**
      * @var ResourcePluginManager $pluginManagerRest
      */
@@ -34,10 +40,14 @@ class RestCommand extends Command
     /**
      * RestCommand constructor.
      *
-     * @param ResourcePluginManager $pluginManagerRest
+     * @param EntityTypeManagerInterface $entityTypeManager
+     * @param ResourcePluginManager      $pluginManagerRest
      */
-    public function __construct(ResourcePluginManager $pluginManagerRest)
-    {
+    public function __construct(
+        EntityTypeManagerInterface $entityTypeManager,
+        ResourcePluginManager $pluginManagerRest
+    ) {
+        $this->entityTypeManager = $entityTypeManager;
         $this->pluginManagerRest = $pluginManagerRest;
         parent::__construct();
     }
diff --git a/vendor/drupal/console/src/Command/Debug/RouterCommand.php b/vendor/drupal/console/src/Command/Debug/RouterCommand.php
index 17cd7dc026..16599c2275 100644
--- a/vendor/drupal/console/src/Command/Debug/RouterCommand.php
+++ b/vendor/drupal/console/src/Command/Debug/RouterCommand.php
@@ -7,12 +7,14 @@
 
 namespace Drupal\Console\Command\Debug;
 
+
+use Drupal\Console\Core\Command\Command;
+use Drupal\Component\Serialization\Yaml;
+use Drupal\Core\Routing\RouteProviderInterface;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Core\Command\Command;
-use Drupal\Core\Routing\RouteProviderInterface;
-use Drupal\Component\Serialization\Yaml;
 
 class RouterCommand extends Command
 {
@@ -42,15 +44,24 @@ protected function configure()
                 InputArgument::OPTIONAL | InputArgument::IS_ARRAY,
                 $this->trans('commands.debug.router.arguments.route-name')
             )
+            ->addOption(
+                'pattern',
+                null,
+                InputArgument::OPTIONAL,
+                $this->trans('commands.debug.router.options.pattern')
+            )
             ->setAliases(['dr']);
     }
 
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $route_name = $input->getArgument('route-name');
+        $pattern = $input->getOption('pattern');
 
-        if ($route_name) {
-            $this->getRouteByNames($route_name);
+        if (!empty($route_name)) {
+            $this->getRoutesTables($this->routeProvider->getRoutesByNames($route_name));
+        } elseif (!empty($pattern)) {
+            $this->getRoutesTables($this->routeProvider->getRoutesByPattern($pattern));
         } else {
             $this->getAllRoutes();
         }
@@ -73,35 +84,33 @@ protected function getAllRoutes()
         $this->getIo()->table($tableHeader, $tableRows, 'compact');
     }
 
-    protected function getRouteByNames($route_name)
+    protected function getRoutesTables($routes)
     {
-        $routes = $this->routeProvider->getRoutesByNames($route_name);
-
         foreach ($routes as $name => $route) {
             $tableHeader = [
                 $this->trans('commands.debug.router.messages.route'),
-                '<info>'.$name.'</info>'
+                '<info>' . $name . '</info>'
             ];
             $tableRows = [];
 
             $tableRows[] = [
-                '<comment>'.$this->trans('commands.debug.router.messages.path').'</comment>',
+                '<comment>' . $this->trans('commands.debug.router.messages.path') . '</comment>',
                 $route->getPath(),
             ];
 
-            $tableRows[] = ['<comment>'.$this->trans('commands.debug.router.messages.defaults').'</comment>'];
+            $tableRows[] = ['<comment>' . $this->trans('commands.debug.router.messages.defaults') . '</comment>'];
             $attributes = $this->addRouteAttributes($route->getDefaults());
             foreach ($attributes as $attribute) {
                 $tableRows[] = $attribute;
             }
 
-            $tableRows[] = ['<comment>'.$this->trans('commands.debug.router.messages.requirements').'</comment>'];
+            $tableRows[] = ['<comment>' . $this->trans('commands.debug.router.messages.requirements') . '</comment>'];
             $requirements = $this->addRouteAttributes($route->getRequirements());
             foreach ($requirements as $requirement) {
                 $tableRows[] = $requirement;
             }
 
-            $tableRows[] = ['<comment>'.$this->trans('commands.debug.router.messages.options').'</comment>'];
+            $tableRows[] = ['<comment>' . $this->trans('commands.debug.router.messages.options') . '</comment>'];
             $options = $this->addRouteAttributes($route->getOptions());
             foreach ($options as $option) {
                 $tableRows[] = $option;
@@ -116,7 +125,7 @@ protected function addRouteAttributes($attr, $attributes = null)
         foreach ($attr as $key => $value) {
             if (is_array($value)) {
                 $attributes[] = [
-                  ' '.$key,
+                  ' ' . $key,
                   str_replace(
                       '- ',
                       '',
@@ -124,7 +133,7 @@ protected function addRouteAttributes($attr, $attributes = null)
                   )
                 ];
             } else {
-                $attributes[] = [' '.$key, $value];
+                $attributes[] = [' ' . $key, $value];
             }
         }
 
diff --git a/vendor/drupal/console/src/Command/Debug/UpdateCommand.php b/vendor/drupal/console/src/Command/Debug/UpdateCommand.php
index d0ff04ddc8..6f24765d67 100644
--- a/vendor/drupal/console/src/Command/Debug/UpdateCommand.php
+++ b/vendor/drupal/console/src/Command/Debug/UpdateCommand.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\Console\Command\Debug;
 
+use Drupal\Console\Command\Shared\UpdateTrait;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
 use Drupal\Console\Core\Command\Command;
@@ -15,6 +16,8 @@
 
 class UpdateCommand extends Command
 {
+    use UpdateTrait;
+
     /**
      * @var Site
      */
@@ -65,16 +68,17 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $requirements = update_check_requirements();
         $severity = drupal_requirements_severity($requirements);
         $updates = update_get_update_list();
+        $postUpdates = $this->postUpdateRegistry->getPendingUpdateInformation();
 
         $this->getIo()->newLine();
 
         if ($severity == REQUIREMENT_ERROR || ($severity == REQUIREMENT_WARNING)) {
             $this->populateRequirements($requirements);
-        } elseif (empty($updates)) {
+        } elseif (empty($updates) && empty($postUpdates)) {
             $this->getIo()->info($this->trans('commands.debug.update.messages.no-updates'));
         } else {
-            $this->populateUpdate($updates);
-            $this->populatePostUpdate();
+            $this->showUpdateTable($updates, $this->trans('commands.debug.update.messages.module-list'));
+            $this->showPostUpdateTable($postUpdates, $this->trans('commands.debug.update.messages.module-list-post-update'));
         }
     }
 
@@ -110,54 +114,4 @@ private function populateRequirements($requirements)
 
         $this->getIo()->table($tableHeader, $tableRows);
     }
-
-    /**
-     * @param $updates
-     */
-    private function populateUpdate($updates)
-    {
-        $this->getIo()->info($this->trans('commands.debug.update.messages.module-list'));
-        $tableHeader = [
-          $this->trans('commands.debug.update.messages.module'),
-          $this->trans('commands.debug.update.messages.update-n'),
-          $this->trans('commands.debug.update.messages.description')
-        ];
-        $tableRows = [];
-        foreach ($updates as $module => $module_updates) {
-            foreach ($module_updates['pending'] as $update_n => $update) {
-                list(, $description) = explode($update_n . " - ", $update);
-                $tableRows[] = [
-                  $module,
-                  $update_n,
-                  trim($description),
-                ];
-            }
-        }
-        $this->getIo()->table($tableHeader, $tableRows);
-    }
-
-    private function populatePostUpdate()
-    {
-        $this->getIo()->info(
-            $this->trans('commands.debug.update.messages.module-list-post-update')
-        );
-        $tableHeader = [
-          $this->trans('commands.debug.update.messages.module'),
-          $this->trans('commands.debug.update.messages.post-update'),
-          $this->trans('commands.debug.update.messages.description')
-        ];
-
-        $postUpdates = $this->postUpdateRegistry->getPendingUpdateInformation();
-        $tableRows = [];
-        foreach ($postUpdates as $module => $module_updates) {
-            foreach ($module_updates['pending'] as $postUpdateFunction => $message) {
-                $tableRows[] = [
-                  $module,
-                  $postUpdateFunction,
-                  $message,
-                ];
-            }
-        }
-        $this->getIo()->table($tableHeader, $tableRows);
-    }
 }
diff --git a/vendor/drupal/console/src/Command/Debug/UpdateComposerCommand.php b/vendor/drupal/console/src/Command/Debug/UpdateComposerCommand.php
new file mode 100644
index 0000000000..2e64fc24a1
--- /dev/null
+++ b/vendor/drupal/console/src/Command/Debug/UpdateComposerCommand.php
@@ -0,0 +1,71 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Command\Debug\UpdateComposerCommand.
+ */
+
+namespace Drupal\Console\Command\Debug;
+
+use Drupal\Console\Command\Shared\UpdateTrait;
+use Drupal\Console\Core\Utils\DrupalFinder;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+use Drupal\Console\Core\Command\Command;
+use Symfony\Component\Process\Process;
+
+class UpdateComposerCommand extends Command
+{
+    use UpdateTrait;
+
+    /**
+     * @var DrupalFinder
+     */
+    protected $drupalFinder;
+
+    /**
+     * DebugComposerCommand constructor.
+     *
+     * @param DrupalFinder $drupalFinder
+     */
+    public function __construct(DrupalFinder $drupalFinder) {
+        $this->drupalFinder = $drupalFinder;
+        parent::__construct();
+    }
+
+    /**
+     * @inheritdoc
+     */
+    protected function configure()
+    {
+        $this
+            ->setName('debug:update:composer')
+            ->setDescription($this->trans('commands.debug.update.composer.description'))
+            ->addOption(
+                'only-drupal',
+                null,
+                InputOption::VALUE_NONE,
+                $this->trans('commands.debug.update.composer.options.only-drupal')
+            )
+            ->setAliases(['duc']);
+    }
+
+    /**
+     * @inheritdoc
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $onlyDrupal = $input->getOption('only-drupal');
+
+        $process = new Process("composer show --outdated --format=json");
+        $process->setTimeout(null);
+        $process->setWorkingDirectory($this->drupalFinder->getComposerRoot());
+        $process->run();
+
+        if($process->isSuccessful()){
+            $jsonData = json_decode($process->getOutput());
+            $this->showComposerUpdateTable($jsonData->installed, $onlyDrupal, $this->trans('commands.debug.update.composer.messages.composer-list'));
+        }
+    }
+}
diff --git a/vendor/drupal/console/src/Command/Debug/UserCommand.php b/vendor/drupal/console/src/Command/Debug/UserCommand.php
index 4139f1e50b..61c53d2352 100644
--- a/vendor/drupal/console/src/Command/Debug/UserCommand.php
+++ b/vendor/drupal/console/src/Command/Debug/UserCommand.php
@@ -12,7 +12,6 @@
 use Symfony\Component\Console\Output\OutputInterface;
 use Drupal\Console\Core\Command\Command;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
-use Drupal\Core\Entity\Query\QueryFactory;
 use Drupal\Console\Utils\DrupalApi;
 
 /**
@@ -27,11 +26,6 @@ class UserCommand extends Command
      */
     protected $entityTypeManager;
 
-    /**
-     * @var QueryFactory
-     */
-    protected $entityQuery;
-
     /**
      * @var DrupalApi
      */
@@ -41,16 +35,13 @@ class UserCommand extends Command
      * DebugCommand constructor.
      *
      * @param EntityTypeManagerInterface $entityTypeManager
-     * @param QueryFactory               $entityQuery
      * @param DrupalApi                  $drupalApi
      */
     public function __construct(
         EntityTypeManagerInterface $entityTypeManager,
-        QueryFactory $entityQuery,
         DrupalApi $drupalApi
     ) {
         $this->entityTypeManager = $entityTypeManager;
-        $this->entityQuery = $entityQuery;
         $this->drupalApi = $drupalApi;
         parent::__construct();
     }
@@ -110,7 +101,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $userStorage = $this->entityTypeManager->getStorage('user');
         $systemRoles = $this->drupalApi->getRoles();
 
-        $query = $this->entityQuery->get('user');
+        $query = $this->entityTypeManager->getStorage('user')->getQuery();
         $query->condition('uid', 0, '>');
         $query->sort('uid');
 
diff --git a/vendor/drupal/console/src/Command/Debug/ViewsPluginsCommand.php b/vendor/drupal/console/src/Command/Debug/ViewsPluginsCommand.php
index 3a568b5b94..81a53b7154 100644
--- a/vendor/drupal/console/src/Command/Debug/ViewsPluginsCommand.php
+++ b/vendor/drupal/console/src/Command/Debug/ViewsPluginsCommand.php
@@ -7,18 +7,18 @@
 
 namespace Drupal\Console\Command\Debug;
 
+use Drupal\Console\Core\Command\Command;
+use Drupal\views\Views;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Core\Command\ContainerAwareCommand;
-use Drupal\views\Views;
 
 /**
  * Class ViewsPluginsCommand
  *
  * @package Drupal\Console\Command\Debug
  */
-class ViewsPluginsCommand extends ContainerAwareCommand
+class ViewsPluginsCommand extends Command
 {
     /**
      * {@inheritdoc}
@@ -63,7 +63,7 @@ protected function pluginList($type)
             foreach ($plugin['views'] as $plugin_name => $view) {
                 $views[] = $view;
             }
-            $rows[] = [$plugin['type'], $plugin['title'], $plugin['provider'], implode(",", $views)];
+            $rows[] = [$plugin['type'], $plugin['title'], $plugin['provider'], implode(',', $views)];
         }
 
         // Sort rows by field name.
diff --git a/vendor/drupal/console/src/Command/Entity/DeleteCommand.php b/vendor/drupal/console/src/Command/Entity/DeleteCommand.php
index 12ca54d006..1add0315e6 100644
--- a/vendor/drupal/console/src/Command/Entity/DeleteCommand.php
+++ b/vendor/drupal/console/src/Command/Entity/DeleteCommand.php
@@ -11,13 +11,13 @@
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
 use Drupal\Console\Core\Command\Command;
-use Drupal\Core\Entity\EntityTypeRepository;
+use Drupal\Core\Entity\EntityTypeRepositoryInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 
 class DeleteCommand extends Command
 {
     /**
-     * @var EntityTypeRepository
+     * @var EntityTypeRepositoryInterface
      */
     protected $entityTypeRepository;
 
@@ -29,11 +29,11 @@ class DeleteCommand extends Command
     /**
      * DeleteCommand constructor.
      *
-     * @param EntityTypeRepository       $entityTypeRepository
-     * @param EntityTypeManagerInterface $entityTypeManager
+     * @param EntityTypeRepositoryInterface $entityTypeRepository
+     * @param EntityTypeManagerInterface    $entityTypeManager
      */
     public function __construct(
-        EntityTypeRepository $entityTypeRepository,
+        EntityTypeRepositoryInterface $entityTypeRepository,
         EntityTypeManagerInterface $entityTypeManager
     ) {
         $this->entityTypeRepository = $entityTypeRepository;
diff --git a/vendor/drupal/console/src/Command/Generate/AjaxCommand.php b/vendor/drupal/console/src/Command/Generate/AjaxCommand.php
index b6d70b138a..c2618f577b 100644
--- a/vendor/drupal/console/src/Command/Generate/AjaxCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/AjaxCommand.php
@@ -10,7 +10,6 @@
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Command\Shared\ServicesTrait;
 use Drupal\Console\Command\Shared\ConfirmationTrait;
 use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Generator\AjaxCommandGenerator;
@@ -27,7 +26,6 @@
 class AjaxCommand extends Command
 {
     use ModuleTrait;
-    use ServicesTrait;
     use ConfirmationTrait;
 
     /**
@@ -117,7 +115,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class = $this->validator->validateClassName($input->getOption('class'));
         $method = $input->getOption('method');
         $js_name = $input->getOption('js-name');
diff --git a/vendor/drupal/console/src/Command/Generate/AuthenticationProviderCommand.php b/vendor/drupal/console/src/Command/Generate/AuthenticationProviderCommand.php
index b728fc4de6..41f0bf7e64 100644
--- a/vendor/drupal/console/src/Command/Generate/AuthenticationProviderCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/AuthenticationProviderCommand.php
@@ -11,7 +11,6 @@
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Command\Shared\ServicesTrait;
 use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Core\Command\Command;
 use Drupal\Console\Generator\AuthenticationProviderGenerator;
@@ -21,7 +20,6 @@
 
 class AuthenticationProviderCommand extends Command
 {
-    use ServicesTrait;
     use ModuleTrait;
     use ConfirmationTrait;
 
@@ -98,7 +96,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class = $this->validator->validateClassName($input->getOption('class'));
         $provider_id = $input->getOption('provider-id');
 
diff --git a/vendor/drupal/console/src/Command/Generate/BlockTypeCommand.php b/vendor/drupal/console/src/Command/Generate/BlockTypeCommand.php
new file mode 100644
index 0000000000..95bf3a67ed
--- /dev/null
+++ b/vendor/drupal/console/src/Command/Generate/BlockTypeCommand.php
@@ -0,0 +1,250 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Command\Generate\BlockTypeCommand.
+ */
+
+namespace Drupal\Console\Command\Generate;
+
+use Drupal\Console\Command\Shared\ArrayInputTrait;
+use Drupal\Console\Command\Shared\FormTrait;
+use Drupal\Console\Command\Shared\ConfirmationTrait;
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Command\Shared\ServicesTrait;
+use Drupal\Console\Core\Command\ContainerAwareCommand;
+use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Generator\BlockTypeGenerator;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Utils\Validator;
+use Drupal\Core\Config\ConfigFactory;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Render\ElementInfoManagerInterface;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+use Drupal\block_content\Entity\BlockContent;
+use Drupal\block\Entity\Block;
+use Drupal\block_content\BlockContentTypeInterface;
+use Drupal\block_content\Entity\BlockContentType;
+
+class BlockTypeCommand extends ContainerAwareCommand
+{
+    use ArrayInputTrait;
+    use ServicesTrait;
+    use ModuleTrait;
+    use FormTrait;
+    use ConfirmationTrait;
+
+    /**
+     * @var ConfigFactory
+     */
+    protected $configFactory;
+
+    /**
+     * @var ChainQueue
+     */
+    protected $chainQueue;
+
+    /**
+     * @var BlockTypeGenerator
+     */
+    protected $generator;
+
+    /**
+     * @var EntityTypeManagerInterface
+     */
+    protected $entityTypeManager;
+
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * @var Validator
+     */
+    protected $validator;
+
+    /**
+     * @var StringConverter
+     */
+    protected $stringConverter;
+
+    /**
+     * @var ElementInfoManagerInterface
+     */
+    protected $elementInfoManager;
+
+    /**
+     * BlockTypeCommand constructor.
+     *
+     * @param ConfigFactory               $configFactory
+     * @param ChainQueue                  $chainQueue
+     * @param BlockTypeGenerator          $generator
+     * @param EntityTypeManagerInterface  $entityTypeManager
+     * @param Manager                     $extensionManager
+     * @param Validator                   $validator
+     * @param StringConverter             $stringConverter
+     * @param ElementInfoManagerInterface $elementInfoManager
+     */
+    public function __construct(
+        ConfigFactory $configFactory,
+        ChainQueue $chainQueue,
+        BlockTypeGenerator $generator,
+        EntityTypeManagerInterface $entityTypeManager,
+        Manager $extensionManager,
+        Validator $validator,
+        StringConverter $stringConverter,
+        ElementInfoManagerInterface $elementInfoManager
+    ) {
+        $this->configFactory = $configFactory;
+        $this->chainQueue = $chainQueue;
+        $this->generator = $generator;
+        $this->entityTypeManager = $entityTypeManager;
+        $this->extensionManager = $extensionManager;
+        $this->validator = $validator;
+        $this->stringConverter = $stringConverter;
+        $this->elementInfoManager = $elementInfoManager;
+        parent::__construct();
+    }
+
+    protected function configure()
+    {
+        $this
+            ->setName('generate:block:type')
+            ->setDescription($this->trans('commands.generate.block.type.description'))
+            ->setHelp($this->trans('commands.generate.block.type.help'))
+            ->addOption(
+                'module',
+                null,
+                InputOption::VALUE_REQUIRED,
+                $this->trans('commands.common.options.module')
+            )
+            ->addOption(
+                'class',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.block.type.options.class')
+            )
+            ->addOption(
+                'block-label',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.block.type.options.block-label')
+            )
+            ->addOption(
+                'block-description',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.block.type.options.block-description')
+            )
+            ->addOption(
+                'block-id',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.block.type.options.block-id')
+            )
+            
+            ->setAliases(['gbt']);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        // @see use Drupal\Console\Command\Shared\ConfirmationTrait::confirmOperation
+        if (!$this->confirmOperation()) {
+            return 1;
+        }
+
+        $module = $this->validateModule($input->getOption('module'));
+        $class_name = $this->validator->validateClassName($input->getOption('class'));
+        $block_label = $input->getOption('block-label');
+        $block_description = $input->getOption('block-description');
+        $block_id = $input->getOption('block-id');
+        
+        $theme_region = true;
+        
+        $this->generator->generate([
+          'module' => $module,
+          'class_name' => $class_name,
+          'label' => $block_label,
+          'description' => $block_description,
+          'block_id' => $block_id,
+        ]);
+        
+        $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']);
+
+        if ($theme_region) {
+            $block_content_type = BlockContentType::create([
+              'id' => $block_id,
+              'label' => $block_label,
+              'description' => $block_description,
+
+            ]);
+            $block_content_type->save();
+
+            $block_content = BlockContent::create([
+              'info' => $block_label,
+              'type' => $block_id,
+              'body' => [
+              'value' => "<h1>Block's body</h1>",
+                'format' => 'full_html',
+               ],
+            ]);
+
+            $block_content->save();
+        }
+    }
+
+    protected function interact(InputInterface $input, OutputInterface $output)
+    {
+        // --module option
+        $this->getModuleOption();
+
+        // --class option
+        $class = $input->getOption('class');
+        if (!$class) {
+            $class = $this->getIo()->ask(
+                $this->trans('commands.generate.block.type.questions.class'),
+                'DefaultBlockContentType',
+                function ($class) {
+                    return $this->validator->validateClassName($class);
+                }
+            );
+            $input->setOption('class', $class);
+        }
+
+        // --block-label option
+        $block_label = $input->getOption('block-label');
+        if (!$block_label) {
+            $block_label = $this->getIo()->ask(
+                $this->trans('commands.generate.block.type.questions.block-label'),
+                $this->stringConverter->camelCaseToHuman($class)
+            );
+            $input->setOption('block-label', $block_label);
+        }
+
+        // --block-id option
+        $blockId = $input->getOption('block-id');
+        if (!$blockId) {
+            $blockId = $this->getIo()->ask(
+                $this->trans('commands.generate.block.type.questions.block-id'),
+                $this->stringConverter->camelCaseToUnderscore($class)
+            );
+            $input->setOption('block-id', $blockId);
+        }
+        // --block-description option
+        $blockDesc = $input->getOption('block-description');
+        if (!$blockDesc) {
+            $blockDesc = $this->getIo()->ask(
+                $this->trans('commands.generate.block.type.questions.block-description'),
+                $this->stringConverter->camelCaseToUnderscore($class)
+            );
+            $input->setOption('block-description', $blockDesc);
+        }
+    }
+}
diff --git a/vendor/drupal/console/src/Command/Generate/CacheContextCommand.php b/vendor/drupal/console/src/Command/Generate/CacheContextCommand.php
index 3d29bdf6d6..40b911519c 100644
--- a/vendor/drupal/console/src/Command/Generate/CacheContextCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/CacheContextCommand.php
@@ -7,18 +7,18 @@
 
 namespace Drupal\Console\Command\Generate;
 
-use Drupal\Console\Utils\Validator;
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Input\InputOption;
-use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Command\Shared\ModuleTrait;
-use Drupal\Console\Generator\CacheContextGenerator;
 use Drupal\Console\Command\Shared\ConfirmationTrait;
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Command\Shared\ServicesTrait;
 use Drupal\Console\Core\Command\ContainerAwareCommand;
 use Drupal\Console\Core\Utils\ChainQueue;
-use Drupal\Console\Extension\Manager;
-use Drupal\Console\Command\Shared\ServicesTrait;
 use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Generator\CacheContextGenerator;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Utils\Validator;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
 
 class CacheContextCommand extends ContainerAwareCommand
 {
@@ -120,7 +120,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $cache_context = $input->getOption('cache-context');
         $class = $this->validator->validateClassName($input->getOption('class'));
         $services = $input->getOption('services');
diff --git a/vendor/drupal/console/src/Command/Generate/CommandCommand.php b/vendor/drupal/console/src/Command/Generate/CommandCommand.php
index cca91d8597..1b3c0bee34 100644
--- a/vendor/drupal/console/src/Command/Generate/CommandCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/CommandCommand.php
@@ -7,19 +7,19 @@
 
 namespace Drupal\Console\Command\Generate;
 
+use Drupal\Console\Command\Shared\ConfirmationTrait;
+use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Command\Shared\ExtensionTrait;
 use Drupal\Console\Command\Shared\ServicesTrait;
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Output\OutputInterface;
-use Symfony\Component\Console\Input\InputOption;
 use Drupal\Console\Core\Command\ContainerAwareCommand;
-use Drupal\Console\Command\Shared\ConfirmationTrait;
-use Drupal\Console\Command\Shared\ModuleTrait;
-use Drupal\Console\Generator\CommandGenerator;
 use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Generator\CommandGenerator;
 use Drupal\Console\Extension\Manager;
 use Drupal\Console\Utils\Validator;
 use Drupal\Console\Utils\Site;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
 
 class CommandCommand extends ContainerAwareCommand
 {
diff --git a/vendor/drupal/console/src/Command/Generate/ComposerCommand.php b/vendor/drupal/console/src/Command/Generate/ComposerCommand.php
new file mode 100644
index 0000000000..5d21ece457
--- /dev/null
+++ b/vendor/drupal/console/src/Command/Generate/ComposerCommand.php
@@ -0,0 +1,417 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Command\Generate\ComposerCommand.
+ */
+
+namespace Drupal\Console\Command\Generate;
+
+use Drupal\Console\Command\Shared\ArrayInputTrait;
+use Drupal\Console\Command\Shared\ConfirmationTrait;
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Generator\ComposerGenerator;
+use Drupal\Console\Utils\Validator;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class ComposerCommand extends Command
+{
+    use ArrayInputTrait;
+    use ConfirmationTrait;
+    use ModuleTrait;
+
+    /**
+     * @var ComposerGenerator
+     */
+    protected $generator;
+
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * @var Validator
+     */
+    protected $validator;
+
+
+    /**
+     * ComposerCommand constructor.
+     *
+     * @param ComposerGenerator $generator
+     * @param Manager $extensionManager
+     * @param Validator $validator
+     */
+    public function __construct(
+      ComposerGenerator $generator,
+      Manager $extensionManager,
+      Validator $validator
+    ) {
+        $this->generator = $generator;
+        $this->extensionManager = $extensionManager;
+        $this->validator = $validator;
+        parent::__construct();
+    }
+
+    protected function configure()
+    {
+        $this
+          ->setName('generate:composer')
+          ->setDescription($this->trans('commands.generate.composer.description'))
+          ->setHelp($this->trans('commands.generate.composer.composer'))
+          ->addOption(
+            'module',
+            null,
+            InputOption::VALUE_REQUIRED,
+            $this->trans('commands.common.options.module')
+          )
+          ->addOption(
+            'name',
+            null,
+            InputOption::VALUE_REQUIRED,
+            $this->trans('commands.generate.composer.options.name')
+          )
+          ->addOption(
+            'type',
+            null,
+            InputOption::VALUE_REQUIRED,
+            $this->trans('commands.generate.composer.options.type')
+          )
+          ->addOption(
+            'description',
+            null,
+            InputOption::VALUE_REQUIRED,
+            $this->trans('commands.generate.composer.options.description')
+          )
+          ->addOption(
+            'keywords',
+            null,
+            InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY,
+            $this->trans('commands.generate.composer.options.keywords')
+          )
+          ->addOption(
+            'license',
+            null,
+            InputOption::VALUE_OPTIONAL,
+            $this->trans('commands.generate.composer.options.license')
+          )
+          ->addOption(
+            'homepage',
+            null,
+            InputOption::VALUE_OPTIONAL,
+            $this->trans('commands.generate.composer.options.homepage')
+          )
+          ->addOption(
+            'minimum-stability',
+            null,
+            InputOption::VALUE_OPTIONAL,
+            $this->trans('commands.generate.composer.options.minimum-stability')
+          )
+          ->addOption(
+            'authors',
+            null,
+            InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
+            $this->trans('commands.generate.composer.options.authors')
+          )
+          ->addOption(
+            'support',
+            null,
+            InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
+            $this->trans('commands.generate.composer.options.support')
+          )
+          ->addOption(
+            'required',
+            null,
+            InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
+            $this->trans('commands.generate.composer.options.required')
+          )->setAliases(['gcom']);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function interact(InputInterface $input, OutputInterface $output)
+    {
+        // --module option
+        $module = $this->getModuleOption();
+
+        // --name option
+        $name = $input->getOption('name');
+        if (!$name) {
+            $name = $this->getIo()->askEmpty(
+              $this->trans('commands.generate.composer.questions.name'),
+              'drupal/' . $module
+            );
+            $input->setOption('name', $name);
+        }
+
+        // --type option
+        $type = $input->getOption('type');
+        if (!$type) {
+            $type = $this->getIo()->askEmpty(
+              $this->trans('commands.generate.composer.questions.type'),
+              'drupal-module'
+            );
+            $input->setOption('type', $type);
+        }
+
+        // --description option
+        $description = $input->getOption('description');
+        if (!$description) {
+            $description = $this->getIo()->askEmpty(
+              $this->trans('commands.generate.composer.questions.description')
+            );
+            $input->setOption('description', $description);
+        }
+
+        // --keywords option
+        $keywords = $input->getOption('keywords');
+        if (!$keywords) {
+            if ($this->getIo()->confirm(
+              $this->trans('commands.generate.composer.questions.add-keywords'),
+              false
+            )) {
+                $keywords = [];
+                while (true) {
+                    $keyword = $this->getIo()->askEmpty(
+                      $this->trans('commands.generate.composer.questions.keyword')
+                    );
+
+                    if (empty($keyword) || is_numeric($keyword)) {
+                        break;
+                    }
+
+                    $keywords[] = $keyword;
+
+                }
+                $input->setOption('keywords', $keywords);
+            }
+        }
+
+        // --license option
+        $license = $input->getOption('license');
+        if (!$license) {
+            $license = $this->getIo()->askEmpty(
+              $this->trans('commands.generate.composer.questions.license'),
+              'GPL-2.0+'
+            );
+            $input->setOption('license', $license);
+        }
+
+        // --homepage option
+        $homepage = $input->getOption('homepage');
+        if (!$homepage) {
+            $homepage = $this->getIo()->askEmpty(
+              $this->trans('commands.generate.composer.questions.homepage'),
+              'https://www.drupal.org/project/' . $module
+            );
+            $input->setOption('homepage', $homepage);
+        }
+
+        // --minimum-stability option
+        $minimumStability = $input->getOption('minimum-stability');
+        if (!$minimumStability) {
+            $stabilityOptions = [
+              'stable',
+              'dev',
+              'alpha',
+              'beta',
+              'RC',
+            ];
+            $minimumStability = $this->getIo()->choiceNoList(
+              $this->trans('commands.generate.composer.questions.minimum-stability'),
+              $stabilityOptions,
+              '',
+              true
+            );
+            $input->setOption('minimum-stability', $minimumStability);
+        }
+
+        // --authors option
+        $authors = $input->getOption('authors');
+        if (!$authors) {
+            if ($this->getIo()->confirm(
+              $this->trans('commands.generate.composer.questions.add-author'),
+              false
+            )) {
+                $authorItems = [];
+                while (true) {
+                    $authorName = $this->getIo()->askEmpty(
+                      $this->trans('commands.generate.composer.questions.author-name')
+                    );
+                    $authorEmail = $this->getIo()->askEmpty(
+                      $this->trans('commands.generate.composer.questions.author-email')
+                    );
+                    $authorHomepage = $this->getIo()->askEmpty(
+                      $this->trans('commands.generate.composer.questions.author-homepage')
+                    );
+                    $authorRole = $this->getIo()->askEmpty(
+                      $this->trans('commands.generate.composer.questions.author-role')
+                    );
+
+                    if (!empty($authorName) || !empty($authorEmail) || !empty($authorHomepage) || !empty($authorRole)) {
+                        $authorItems[] = [
+                          'name' => $authorName,
+                          'email' => $authorEmail,
+                          'homepage' => $authorHomepage,
+                          'role' => $authorRole,
+                        ];
+                    }
+
+                    $this->getIo()->newLine();
+
+                    if (!$this->getIo()->confirm(
+                      $this->trans('commands.generate.composer.questions.add-another-author'),
+                      false
+                    )) {
+                        break;
+                    }
+
+                }
+                $this->getIo()->newLine(2);
+                $input->setOption('authors', $authorItems);
+            }
+        }
+
+        // --support option
+        $support = $input->getOption('support');
+        if (!$support) {
+            if ($this->getIo()->confirm(
+              $this->trans('commands.generate.composer.questions.add-support'),
+              false
+            )) {
+                $supportChannels = [
+                  'email',
+                  'issues',
+                  'forum',
+                  'wiki',
+                  'irc',
+                  'source',
+                  'docs',
+                  'rss',
+                ];
+                $supportItems = [];
+                while (true) {
+                    $supportChannel = $this->getIo()->choiceNoList(
+                      $this->trans('commands.generate.composer.questions.support-channel'),
+                      $supportChannels,
+                      '',
+                      true
+                    );
+
+                    $supportUrl = $this->getIo()->ask(
+                      $this->trans('commands.generate.composer.questions.support-value')
+                    );
+
+                    $supportItems[] = [
+                      'channel' => $supportChannel,
+                      'url' => $supportUrl,
+                    ];
+
+                    $this->getIo()->newLine();
+
+                    if (!$this->getIo()->confirm(
+                      $this->trans('commands.generate.composer.questions.add-another-support'),
+                      false
+                    )) {
+                        break;
+                    }
+
+                }
+                $this->getIo()->newLine(2);
+                $input->setOption('support', $supportItems);
+            }
+        }
+
+        // --required option
+        $required = $input->getOption('required');
+        if (!$required) {
+            if ($this->getIo()->confirm(
+              $this->trans('commands.generate.composer.questions.add-required'),
+              false
+            )) {
+                $requiredItems = [];
+                while (true) {
+
+                    $requiredName = $this->getIo()->ask(
+                      $this->trans('commands.generate.composer.questions.required-name')
+                    );
+
+                    $requiredVersion = $this->getIo()->ask(
+                      $this->trans('commands.generate.composer.questions.required-version')
+                    );
+
+                    $requiredItems[] = [
+                      'name' => $requiredName,
+                      'version' => $requiredVersion,
+                    ];
+
+                    $this->getIo()->newLine();
+
+                    if (!$this->getIo()->confirm(
+                      $this->trans('commands.generate.composer.questions.add-another-required'),
+                      false
+                    )) {
+                        break;
+                    }
+
+                }
+                $input->setOption('required', $requiredItems);
+            }
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        // @see use Drupal\Console\Command\ConfirmationTrait::confirmOperation
+        if (!$this->confirmOperation()) {
+            return 1;
+        }
+
+        $module = $input->getOption('module');
+        $name = $input->getOption('name');
+        $type = $input->getOption('type');
+        $description = $input->getOption('description');
+        $keywords = $input->getOption('keywords');
+        $license = $input->getOption('license');
+        $homepage = $input->getOption('homepage');
+        $minimumStability = $input->getOption('minimum-stability');
+        $authors = $input->getOption('authors');
+        $support = $input->getOption('support');
+        $required = $input->getOption('required');
+        $noInteraction = $input->getOption('no-interaction');
+
+        // Parse nested data.
+        if ($noInteraction) {
+            $authors = $this->explodeInlineArray($authors);
+            $support = $this->explodeInlineArray($support);
+            $required = $this->explodeInlineArray($required);
+        }
+
+        $this->generator->generate([
+          'machine_name' => $module,
+          'name' => $name,
+          'type' => $type,
+          'description' => $description,
+          'keywords' => $keywords,
+          'license' => $license,
+          'homepage' => $homepage,
+          'minimum_stability' => $minimumStability,
+          'authors' => $authors,
+          'support_items' => $support,
+          'required_items' => $required,
+        ]);
+
+        return 0;
+    }
+
+
+}
diff --git a/vendor/drupal/console/src/Command/Generate/ControllerCommand.php b/vendor/drupal/console/src/Command/Generate/ControllerCommand.php
index dd982279d4..36730f9954 100644
--- a/vendor/drupal/console/src/Command/Generate/ControllerCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/ControllerCommand.php
@@ -7,20 +7,20 @@
 
 namespace Drupal\Console\Command\Generate;
 
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Input\InputOption;
-use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Command\Shared\ServicesTrait;
 use Drupal\Console\Command\Shared\ConfirmationTrait;
 use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Command\Shared\ServicesTrait;
 use Drupal\Console\Generator\ControllerGenerator;
 use Drupal\Console\Core\Command\ContainerAwareCommand;
-use Drupal\Core\Routing\RouteProviderInterface;
-use Drupal\Console\Core\Utils\StringConverter;
-use Drupal\Console\Core\Utils\ChainQueue;
 use Drupal\Console\Core\Command\Shared\InputTrait;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Core\Utils\StringConverter;
 use Drupal\Console\Extension\Manager;
 use Drupal\Console\Utils\Validator;
+use Drupal\Core\Routing\RouteProviderInterface;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
 
 class ControllerCommand extends ContainerAwareCommand
 {
@@ -135,7 +135,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class = $this->validator->validateControllerName($input->getOption('class'));
         $routes = $input->getOption('routes');
         $test = $input->getOption('test');
diff --git a/vendor/drupal/console/src/Command/Generate/EntityBundleCommand.php b/vendor/drupal/console/src/Command/Generate/EntityBundleCommand.php
index e70ba956be..8466bf77ff 100644
--- a/vendor/drupal/console/src/Command/Generate/EntityBundleCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/EntityBundleCommand.php
@@ -13,7 +13,6 @@
 use Symfony\Component\Console\Output\OutputInterface;
 use Drupal\Console\Command\Shared\ConfirmationTrait;
 use Drupal\Console\Command\Shared\ModuleTrait;
-use Drupal\Console\Command\Shared\ServicesTrait;
 use Drupal\Console\Generator\EntityBundleGenerator;
 use Drupal\Console\Extension\Manager;
 use Drupal\Console\Utils\Validator;
@@ -21,7 +20,6 @@
 class EntityBundleCommand extends Command
 {
     use ModuleTrait;
-    use ServicesTrait;
     use ConfirmationTrait;
 
     /**
@@ -95,7 +93,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $bundleName = $input->getOption('bundle-name');
         $bundleTitle = $input->getOption('bundle-title');
 
diff --git a/vendor/drupal/console/src/Command/Generate/EntityConfigCommand.php b/vendor/drupal/console/src/Command/Generate/EntityConfigCommand.php
index 3c2ac3901d..5a90c9f574 100644
--- a/vendor/drupal/console/src/Command/Generate/EntityConfigCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/EntityConfigCommand.php
@@ -88,9 +88,9 @@ protected function interact(InputInterface $input, OutputInterface $output)
      */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $entity_class = $input->getOption('entity-class');
-        $entity_name = $input->getOption('entity-name');
+        $entity_name = $this->validator->validateMachineName($input->getOption('entity-name'));
         $label = $input->getOption('label');
         $bundle_of = $input->getOption('bundle-of');
         $base_path = $input->getOption('base-path');
diff --git a/vendor/drupal/console/src/Command/Generate/EntityContentCommand.php b/vendor/drupal/console/src/Command/Generate/EntityContentCommand.php
index ffc685fc35..7605879d76 100644
--- a/vendor/drupal/console/src/Command/Generate/EntityContentCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/EntityContentCommand.php
@@ -95,8 +95,30 @@ protected function configure()
             null,
             InputOption::VALUE_NONE,
             $this->trans('commands.generate.entity.content.options.revisionable')
-        )
-            ->setAliases(['geco']);
+        );
+
+        $this->addOption(
+            'has-forms',
+            null,
+            InputOption::VALUE_NONE,
+            $this->trans('commands.generate.entity.content.options.has-forms')
+        );
+
+        $this->addOption(
+            'has-owner',
+            null,
+            InputOption::VALUE_NONE,
+            $this->trans('commands.generate.entity.content.options.has-owner')
+        );
+
+        $this->addOption(
+            'has-bundle-permissions',
+            null,
+            InputOption::VALUE_NONE,
+            $this->trans('commands.generate.entity.content.options.has-bundle-permissions')
+        );
+
+        $this->setAliases(['geco']);
     }
 
     /**
@@ -129,6 +151,32 @@ protected function interact(InputInterface $input, OutputInterface $output)
             true
         );
         $input->setOption('revisionable', $revisionable);
+
+        // --has-forms option
+        $has_forms = $this->getIo()->confirm(
+            $this->trans('commands.generate.entity.content.questions.has-forms'),
+            true
+        );
+        $input->setOption('has-forms', $has_forms);
+
+        // --has-owner option
+        $has_owner = $this->getIo()->confirm(
+            $this->trans('commands.generate.entity.content.questions.has-owner'),
+            true
+        );
+        $input->setOption('has-owner', $has_owner);
+
+        // --has-bundle-permissions
+        if($bundle_of){
+          $has_bundle_permissions = $this->getIo()->confirm(
+            $this->trans('commands.generate.entity.content.questions.has-bundle-permissions'),
+            true
+          );
+          $input->setOption('has-bundle-permissions', $has_bundle_permissions);
+        }
+        else {
+          $input->setOption('has-bundle-permissions', false);
+        }
     }
 
     /**
@@ -136,16 +184,19 @@ protected function interact(InputInterface $input, OutputInterface $output)
      */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        $module = $input->getOption('module');
-        $entity_class = $input->getOption('entity-class');
-        $entity_name = $input->getOption('entity-name');
-        $label = $input->getOption('label');
-        $has_bundles = $input->getOption('has-bundles');
-        $base_path = $input->getOption('base-path');
-        $learning = $input->hasOption('learning')?$input->getOption('learning'):false;
+        $module = $this->validateModule($input->getOption('module'));
+        $entity_class = $input->getOption('entity-class')?:'DefaultEntity';
+        $entity_name = $this->validator->validateMachineName($input->getOption('entity-name'))?:'default_entity';
+        $label = $input->getOption('label')?:'Default Entity';
+        $has_bundles = $input->getOption('has-bundles')?:false;
+        $base_path = $input->getOption('base-path')?:'/admin/structure';
+        $learning = $input->getOption('learning')?:false;
         $bundle_entity_type = $has_bundles ? $entity_name . '_type' : null;
-        $is_translatable = $input->hasOption('is-translatable') ? $input->getOption('is-translatable') : true;
-        $revisionable = $input->hasOption('revisionable') ? $input->getOption('revisionable') : false;
+        $is_translatable = $input->getOption('is-translatable');
+        $revisionable = $input->getOption('revisionable');
+        $has_forms = $input->getOption('has-forms');
+        $has_owner = $input->getOption('has-owner');
+        $has_bundle_permissions = $input->getOption('has-bundle-permissions');
 
         $generator = $this->generator;
 
@@ -162,6 +213,9 @@ protected function execute(InputInterface $input, OutputInterface $output)
             'base_path' => $base_path,
             'is_translatable' => $is_translatable,
             'revisionable' => $revisionable,
+            'has_forms' => $has_forms,
+            'has_owner' => $has_owner,
+            'has_bundle_permissions' => $has_bundle_permissions,
         ]);
 
         if ($has_bundles) {
@@ -171,7 +225,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
                 '--entity-class' => $entity_class . 'Type',
                 '--entity-name' => $entity_name . '_type',
                 '--label' => $label . ' type',
-                '--bundle-of' => $entity_name
+                '--bundle-of' => $entity_name,
+                '--no-interaction'
                 ]
             );
         }
diff --git a/vendor/drupal/console/src/Command/Generate/EventSubscriberCommand.php b/vendor/drupal/console/src/Command/Generate/EventSubscriberCommand.php
index ec62750b04..bfb29c7cf1 100644
--- a/vendor/drupal/console/src/Command/Generate/EventSubscriberCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/EventSubscriberCommand.php
@@ -7,20 +7,20 @@
 
 namespace Drupal\Console\Command\Generate;
 
-use Drupal\Console\Utils\Validator;
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Input\InputOption;
-use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Command\Shared\ServicesTrait;
-use Drupal\Console\Command\Shared\ModuleTrait;
-use Drupal\Console\Generator\EventSubscriberGenerator;
 use Drupal\Console\Command\Shared\ConfirmationTrait;
 use Drupal\Console\Command\Shared\EventsTrait;
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Command\Shared\ServicesTrait;
 use Drupal\Console\Core\Command\ContainerAwareCommand;
+use Drupal\Console\Core\Utils\ChainQueue;
 use Drupal\Console\Core\Utils\StringConverter;
 use Drupal\Console\Extension\Manager;
+use Drupal\Console\Generator\EventSubscriberGenerator;
+use Drupal\Console\Utils\Validator;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
 use Symfony\Component\EventDispatcher\EventDispatcherInterface;
-use Drupal\Console\Core\Utils\ChainQueue;
 
 class EventSubscriberCommand extends ContainerAwareCommand
 {
@@ -138,7 +138,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $name = $input->getOption('name');
         $class = $this->validator->validateClassName($input->getOption('class'));
         $events = $input->getOption('events');
diff --git a/vendor/drupal/console/src/Command/Generate/FormAlterCommand.php b/vendor/drupal/console/src/Command/Generate/FormAlterCommand.php
index 37073da06b..1dbc8e783b 100644
--- a/vendor/drupal/console/src/Command/Generate/FormAlterCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/FormAlterCommand.php
@@ -12,7 +12,6 @@
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
 use Drupal\Console\Generator\FormAlterGenerator;
-use Drupal\Console\Command\Shared\ServicesTrait;
 use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Command\Shared\FormTrait;
 use Drupal\Console\Command\Shared\ConfirmationTrait;
@@ -32,7 +31,6 @@ class FormAlterCommand extends Command
     use ArrayInputTrait;
     use FormTrait;
     use ModuleTrait;
-    use ServicesTrait;
 
     /**
      * @var Manager
@@ -164,7 +162,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $formId = $input->getOption('form-id');
         $inputs = $input->getOption('inputs');
         $noInteraction = $input->getOption('no-interaction');
diff --git a/vendor/drupal/console/src/Command/Generate/FormCommand.php b/vendor/drupal/console/src/Command/Generate/FormCommand.php
index 56e71b9e82..6f36f8f0c7 100644
--- a/vendor/drupal/console/src/Command/Generate/FormCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/FormCommand.php
@@ -8,22 +8,22 @@
 namespace Drupal\Console\Command\Generate;
 
 use Drupal\Console\Command\Shared\ArrayInputTrait;
-use Drupal\Console\Utils\TranslatorManager;
-use Drupal\Console\Utils\Validator;
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Input\InputOption;
-use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Command\Shared\ServicesTrait;
+use Drupal\Console\Command\Shared\FormTrait;
 use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Command\Shared\MenuTrait;
-use Drupal\Console\Command\Shared\FormTrait;
+use Drupal\Console\Command\Shared\ServicesTrait;
 use Drupal\Console\Core\Command\ContainerAwareCommand;
-use Drupal\Console\Generator\FormGenerator;
-use Drupal\Console\Extension\Manager;
 use Drupal\Console\Core\Utils\ChainQueue;
 use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Generator\FormGenerator;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Utils\TranslatorManager;
+use Drupal\Console\Utils\Validator;
 use Drupal\Core\Render\ElementInfoManager;
 use Drupal\Core\Routing\RouteProviderInterface;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
 
 abstract class FormCommand extends ContainerAwareCommand
 {
@@ -205,7 +205,7 @@ protected function configure()
      */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $services = $input->getOption('services');
         $path = $input->getOption('path');
         $config_file = $input->getOption('config-file');
@@ -306,7 +306,6 @@ function ($className) {
         $path = $input->getOption('path');
         if (!$path) {
             if ($this->formType == 'ConfigFormBase') {
-                $form_path = '/admin/config/{{ module_name }}/{{ class_name_short }}';
                 $form_path = sprintf(
                     '/admin/config/%s/%s',
                     $module,
diff --git a/vendor/drupal/console/src/Command/Generate/HelpCommand.php b/vendor/drupal/console/src/Command/Generate/HelpCommand.php
index cd8e9b38b2..bbad064a27 100644
--- a/vendor/drupal/console/src/Command/Generate/HelpCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/HelpCommand.php
@@ -103,7 +103,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
 
         if ($this->extensionManager->validateModuleFunctionExist($module, $module . '_help')) {
             throw new \Exception(
diff --git a/vendor/drupal/console/src/Command/Generate/JsTestCommand.php b/vendor/drupal/console/src/Command/Generate/JsTestCommand.php
index edca262116..ec1122aee5 100644
--- a/vendor/drupal/console/src/Command/Generate/JsTestCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/JsTestCommand.php
@@ -10,7 +10,6 @@
 use Drupal\Console\Command\Shared\ConfirmationTrait;
 use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Core\Command\Command;
-use Drupal\Console\Core\Command\Shared\ContainerAwareCommandTrait;
 use Drupal\Console\Extension\Manager;
 use Drupal\Console\Generator\JsTestGenerator;
 use Drupal\Console\Utils\Validator;
@@ -22,7 +21,6 @@ class JsTestCommand extends Command
 {
     use ModuleTrait;
     use ConfirmationTrait;
-    use ContainerAwareCommandTrait;
 
     /**
      * @var Manager
@@ -91,7 +89,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class = $this->validator->validateClassName($input->getOption('class'));
 
         $this->generator->generate([
diff --git a/vendor/drupal/console/src/Command/Generate/ModuleCommand.php b/vendor/drupal/console/src/Command/Generate/ModuleCommand.php
index 23a8ccb5da..d53ef8d304 100644
--- a/vendor/drupal/console/src/Command/Generate/ModuleCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/ModuleCommand.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\Console\Command\Generate;
 
+use Drupal\Console\Utils\Site;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
@@ -17,6 +18,7 @@
 use Drupal\Console\Core\Utils\StringConverter;
 use Drupal\Console\Utils\DrupalApi;
 use Webmozart\PathUtil\Path;
+use Drupal\Console\Core\Utils\ChainQueue;
 
 class ModuleCommand extends Command
 {
@@ -52,6 +54,16 @@ class ModuleCommand extends Command
      */
     protected $twigtemplate;
 
+    /**
+     * @var ChainQueue
+     */
+    protected $chainQueue;
+
+    /**
+     * @var Site
+     */
+    protected $site;
+
 
     /**
      * ModuleCommand constructor.
@@ -61,6 +73,8 @@ class ModuleCommand extends Command
      * @param $appRoot
      * @param StringConverter $stringConverter
      * @param DrupalApi       $drupalApi
+     * @param ChainQueue      $chainQueue
+     * @param Site            $site
      * @param $twigtemplate
      */
     public function __construct(
@@ -69,6 +83,8 @@ public function __construct(
         $appRoot,
         StringConverter $stringConverter,
         DrupalApi $drupalApi,
+        ChainQueue $chainQueue,
+        Site $site,
         $twigtemplate = null
     ) {
         $this->generator = $generator;
@@ -76,6 +92,8 @@ public function __construct(
         $this->appRoot = $appRoot;
         $this->stringConverter = $stringConverter;
         $this->drupalApi = $drupalApi;
+        $this->chainQueue = $chainQueue;
+        $this->site = $site;
         $this->twigtemplate = $twigtemplate;
         parent::__construct();
     }
@@ -180,14 +198,21 @@ protected function execute(InputInterface $input, OutputInterface $output)
         // Get the profile path and define a profile path if it is null
         // Check that it is an absolute path or otherwise create an absolute path using appRoot
         $modulePath = $input->getOption('module-path');
-        $modulePath = $modulePath == null ? 'modules/custom' : $modulePath;
+        if(is_null($modulePath)) {
+            $uri = $this->site->getMultisiteName($input);
+            $defaultModulePath = 'modules/custom';
+            $modulePath = $this->site->multisiteMode($uri)? 'sites/'.$this->site->getMultisiteDir($uri).'/'.$defaultModulePath : $defaultModulePath;
+        }
         $modulePath = Path::isAbsolute($modulePath) ? $modulePath : Path::makeAbsolute($modulePath, $this->appRoot);
         $modulePath = $this->validator->validateModulePath($modulePath, true);
 
-        $machineName = $this->validator->validateMachineName($input->getOption('machine-name'));
-        $description = $input->getOption('description');
-        $core = $input->getOption('core');
-        $package = $input->getOption('package');
+        $machineName = $input->getOption('machine-name') ?
+            $this->validator->validateMachineName($input->getOption('machine-name'))
+            :$this->stringConverter->createMachineName($module);
+
+        $description = $input->getOption('description')?:$this->trans('commands.generate.module.suggestions.my-awesome-module');
+        $core = $input->getOption('core')?:'8.x';
+        $package = $input->getOption('package')?:'Custom';
         $moduleFile = $input->getOption('module-file');
         $featuresBundle = $input->getOption('features-bundle');
         $composer = $input->getOption('composer');
@@ -214,6 +239,28 @@ protected function execute(InputInterface $input, OutputInterface $output)
             'twig_template' => $twigTemplate,
         ]);
 
+        if ($composer) {
+            $this->chainQueue
+              ->addCommand(
+                'generate:composer', [
+                '--module' => $machineName,
+                '--name' => 'drupal/' . $machineName,
+                '--type' => 'drupal-module',
+                '--description' => $description,
+                '--keywords' => 'Drupal',
+                '--license' => 'GPL-2.0+',
+                '--homepage' => 'https://www.drupal.org/project/' . $machineName,
+                '--minimum-stability' => 'dev',
+                '--support' => [
+                  '"channel":"issues", "url":"https://www.drupal.org/project/issues/' . $machineName . '"',
+                  '"channel":"source", "url":"http://cgit.drupalcode.org/' . $machineName . '"',
+                ],
+                '--no-interaction' => 'yes',
+              ],
+                false
+              );
+        }
+
         return 0;
     }
 
@@ -248,7 +295,7 @@ function ($module) use ($validator) {
 
         try {
             $machineName = $input->getOption('machine-name') ?
-              $this->validator->validateModuleName(
+                $validator->validateModuleName(
                   $input->getOption('machine-name')
               ) : null;
         } catch (\Exception $error) {
@@ -268,9 +315,11 @@ function ($machine_name) use ($validator) {
 
         $modulePath = $input->getOption('module-path');
         if (!$modulePath) {
+            $uri = $this->site->getMultisiteName($input);
+            $defaultModulePath = 'modules/custom';
             $modulePath = $this->getIo()->ask(
                 $this->trans('commands.generate.module.questions.module-path'),
-                'modules/custom',
+                $this->site->multisiteMode($uri)? 'sites/'.$this->site->getMultisiteDir($uri).'/'.$defaultModulePath : $defaultModulePath,
                 function ($modulePath) use ($machineName) {
                     $fullPath = Path::isAbsolute($modulePath) ? $modulePath : Path::makeAbsolute($modulePath, $this->appRoot);
                     $fullPath = $fullPath.'/'.$machineName;
diff --git a/vendor/drupal/console/src/Command/Generate/ModuleFileCommand.php b/vendor/drupal/console/src/Command/Generate/ModuleFileCommand.php
index 09653d294b..6f2dfc0fb5 100644
--- a/vendor/drupal/console/src/Command/Generate/ModuleFileCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/ModuleFileCommand.php
@@ -87,11 +87,11 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $machine_name =  $input->getOption('module');
-        $file_path =  $this->extensionManager->getModule($machine_name)->getPath();
+        $module = $this->validateModule($input->getOption('module'));
+        $file_path =  $this->extensionManager->getModule($module)->getPath();
 
         $this->generator->generate([
-            'machine_name' => $machine_name,
+            'machine_name' => $module,
             'file_path' => $file_path,
         ]);
     }
diff --git a/vendor/drupal/console/src/Command/Generate/PermissionCommand.php b/vendor/drupal/console/src/Command/Generate/PermissionCommand.php
index fe0adf882b..8a90139b16 100644
--- a/vendor/drupal/console/src/Command/Generate/PermissionCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PermissionCommand.php
@@ -93,7 +93,7 @@ protected function configure()
      */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $permissions = $input->getOption('permissions');
         $learning = $input->hasOption('learning');
         $noInteraction = $input->getOption('no-interaction');
diff --git a/vendor/drupal/console/src/Command/Generate/PluginBlockCommand.php b/vendor/drupal/console/src/Command/Generate/PluginBlockCommand.php
index a1f6dd6a43..89116f0136 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginBlockCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginBlockCommand.php
@@ -8,22 +8,22 @@
 namespace Drupal\Console\Command\Generate;
 
 use Drupal\Console\Command\Shared\ArrayInputTrait;
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Input\InputOption;
-use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Core\Command\ContainerAwareCommand;
-use Drupal\Console\Generator\PluginBlockGenerator;
-use Drupal\Console\Command\Shared\ServicesTrait;
-use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Command\Shared\FormTrait;
 use Drupal\Console\Command\Shared\ConfirmationTrait;
-use Drupal\Console\Extension\Manager;
-use Drupal\Console\Utils\Validator;
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Command\Shared\ServicesTrait;
+use Drupal\Console\Core\Command\ContainerAwareCommand;
 use Drupal\Console\Core\Utils\StringConverter;
 use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Generator\PluginBlockGenerator;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Utils\Validator;
 use Drupal\Core\Config\ConfigFactory;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Render\ElementInfoManagerInterface;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
 
 class PluginBlockCommand extends ContainerAwareCommand
 {
@@ -125,10 +125,10 @@ protected function configure()
                 $this->trans('commands.generate.plugin.block.options.class')
             )
             ->addOption(
-                'label',
+                'plugin-label',
                 null,
                 InputOption::VALUE_OPTIONAL,
-                $this->trans('commands.generate.plugin.block.options.label')
+                $this->trans('commands.generate.plugin.block.options.plugin-label')
             )
             ->addOption(
                 'plugin-id',
@@ -154,6 +154,12 @@ protected function configure()
                 InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
                 $this->trans('commands.common.options.services')
             )
+            ->addOption(
+                'twigtemplate',
+                null,
+                InputOption::VALUE_NONE,
+                $this->trans('commands.generate.plugin.block.options.twigtemplate')
+            )
             ->setAliases(['gpb']);
     }
 
@@ -167,14 +173,16 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class_name = $this->validator->validateClassName($input->getOption('class'));
-        $label = $input->getOption('label');
+        $plugin_label = $input->getOption('plugin-label');
         $plugin_id = $input->getOption('plugin-id');
         $services = $input->getOption('services');
         $theme_region = $input->getOption('theme-region');
         $inputs = $input->getOption('inputs');
         $noInteraction = $input->getOption('no-interaction');
+        $twigTemplate = $input->getOption('twigtemplate');
+
         // Parse nested data.
         if ($noInteraction) {
             $inputs = $this->explodeInlineArray($inputs);
@@ -200,13 +208,13 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $this->generator->generate([
           'module' => $module,
           'class_name' => $class_name,
-          'label' => $label,
+          'label' => $plugin_label,
           'plugin_id' => $plugin_id,
           'services' => $build_services,
           'inputs' => $inputs,
+          'twig_template' => $twigTemplate,
         ]);
 
-
         $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']);
 
         if ($theme_region) {
@@ -224,9 +232,6 @@ protected function execute(InputInterface $input, OutputInterface $output)
 
     protected function interact(InputInterface $input, OutputInterface $output)
     {
-        $theme = $this->configFactory->get('system.theme')->get('default');
-        $themeRegions = \system_region_list($theme, REGIONS_VISIBLE);
-
         // --module option
         $this->getModuleOption();
 
@@ -243,14 +248,14 @@ function ($class) {
             $input->setOption('class', $class);
         }
 
-        // --label option
-        $label = $input->getOption('label');
-        if (!$label) {
-            $label = $this->getIo()->ask(
-                $this->trans('commands.generate.plugin.block.questions.label'),
+        // --plugin-label option
+        $plugin_label = $input->getOption('plugin-label');
+        if (!$plugin_label) {
+            $plugin_label = $this->getIo()->ask(
+                $this->trans('commands.generate.plugin.block.questions.plugin-label'),
                 $this->stringConverter->camelCaseToHuman($class)
             );
-            $input->setOption('label', $label);
+            $input->setOption('plugin-label', $plugin_label);
         }
 
         // --plugin-id option
@@ -265,10 +270,17 @@ function ($class) {
 
         // --theme-region option
         $themeRegion = $input->getOption('theme-region');
+
         if (!$themeRegion) {
+            $theme = $this->configFactory->get('system.theme')->get('default');
+            $themeRegions = \system_region_list($theme, REGIONS_VISIBLE);
+            $themeRegionOptions = [];
+            foreach ($themeRegions as $key => $region) {
+                $themeRegionOptions[$key] = $region->render();
+            }
             $themeRegion = $this->getIo()->choiceNoList(
                 $this->trans('commands.generate.plugin.block.questions.theme-region'),
-                array_values($themeRegions),
+                $themeRegionOptions,
                 '',
                 true
             );
@@ -293,5 +305,14 @@ function ($class) {
             $inputs = $this->explodeInlineArray($inputs);
         }
         $input->setOption('inputs', $inputs);
+
+        $twigtemplate = $input->getOption('twigtemplate');
+        if (!$twigtemplate) {
+            $twigtemplate = $this->getIo()->confirm(
+                $this->trans('commands.generate.plugin.block.questions.twigtemplate'),
+                false
+            );
+            $input->setOption('twigtemplate', $twigtemplate);
+        }
     }
 }
diff --git a/vendor/drupal/console/src/Command/Generate/PluginCKEditorButtonCommand.php b/vendor/drupal/console/src/Command/Generate/PluginCKEditorButtonCommand.php
index 347b76671c..a0061d931d 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginCKEditorButtonCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginCKEditorButtonCommand.php
@@ -7,22 +7,24 @@
 
 namespace Drupal\Console\Command\Generate;
 
+use Drupal\Console\Command\Shared\ArrayInputTrait;
+use Drupal\Console\Command\Shared\ConfirmationTrait;
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Generator\PluginCKEditorButtonGenerator;
 use Drupal\Console\Utils\Validator;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Core\Command\Command;
-use Drupal\Console\Generator\PluginCKEditorButtonGenerator;
-use Drupal\Console\Command\Shared\ModuleTrait;
-use Drupal\Console\Command\Shared\ConfirmationTrait;
-use Drupal\Console\Core\Utils\ChainQueue;
-use Drupal\Console\Extension\Manager;
-use Drupal\Console\Core\Utils\StringConverter;
 
 class PluginCKEditorButtonCommand extends Command
 {
-    use ModuleTrait;
+    use ArrayInputTrait;
     use ConfirmationTrait;
+    use ModuleTrait;
 
     /**
      * @var ChainQueue
@@ -31,13 +33,13 @@ class PluginCKEditorButtonCommand extends Command
 
 
     /**
- * @var PluginCKEditorButtonGenerator
-*/
+     * @var PluginCKEditorButtonGenerator
+     */
     protected $generator;
 
     /**
- * @var Manager
-*/
+     * @var Manager
+     */
     protected $extensionManager;
 
     /**
@@ -50,7 +52,6 @@ class PluginCKEditorButtonCommand extends Command
      */
     protected $validator;
 
-
     /**
      * PluginCKEditorButtonCommand constructor.
      *
@@ -106,16 +107,10 @@ protected function configure()
                 $this->trans('commands.generate.plugin.ckeditorbutton.options.plugin-id')
             )
             ->addOption(
-                'button-name',
-                null,
-                InputOption::VALUE_REQUIRED,
-                $this->trans('commands.generate.plugin.ckeditorbutton.options.button-name')
-            )
-            ->addOption(
-                'button-icon-path',
+                'buttons',
                 null,
-                InputOption::VALUE_REQUIRED,
-                $this->trans('commands.generate.plugin.ckeditorbutton.options.button-icon-path')
+                InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY,
+                $this->trans('commands.generate.plugin.ckeditorbutton.options.buttons')
             )->setAliases(['gpc']);
     }
 
@@ -129,20 +124,24 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class_name = $this->validator->validateClassName($input->getOption('class'));
         $label = $input->getOption('label');
         $plugin_id = $input->getOption('plugin-id');
-        $button_name = $input->getOption('button-name');
-        $button_icon_path = $input->getOption('button-icon-path');
+        $buttons = $input->getOption('buttons');
+
+        $noInteraction = $input->getOption('no-interaction');
+        // Parse nested data.
+        if ($noInteraction) {
+            $buttons = $this->explodeInlineArray($buttons);
+        }
 
         $this->generator->generate([
           'module' => $module,
           'class_name' => $class_name,
           'label' => $label,
           'plugin_id' => $plugin_id,
-          'button_name' => $button_name,
-          'button_icon_path' => $button_icon_path,
+          'buttons' => $buttons,
         ]);
 
         $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery'], false);
@@ -183,29 +182,48 @@ function ($class_name) {
         if (!$plugin_id) {
             $plugin_id = $this->getIo()->ask(
                 $this->trans('commands.generate.plugin.ckeditorbutton.questions.plugin-id'),
-                $this->stringConverter->camelCaseToLowerCase($label)
+                $this->stringConverter->createMachineName($label)
             );
             $input->setOption('plugin-id', $plugin_id);
         }
 
-        // --button-name option
-        $button_name = $input->getOption('button-name');
-        if (!$button_name) {
-            $button_name = $this->getIo()->ask(
+        $buttons = [];
+        while (true) {
+            $this->getIo()->newLine(2);
+            $this->getIo()->comment($this->trans('commands.generate.plugin.ckeditorbutton.options.button-properties'));
+            // --button-name option
+            $buttonName = $this->getIo()->ask(
                 $this->trans('commands.generate.plugin.ckeditorbutton.questions.button-name'),
-                $this->stringConverter->anyCaseToUcFirst($plugin_id)
+                $this->stringConverter->anyCaseToUcFirst($label)
+            );
+
+            $buttonLabel = $this->getIo()->ask(
+                $this->trans('commands.generate.plugin.ckeditorbutton.questions.button-label'),
+                $label
             );
-            $input->setOption('button-name', $button_name);
-        }
 
-        // --button-icon-path option
-        $button_icon_path = $input->getOption('button-icon-path');
-        if (!$button_icon_path) {
-            $button_icon_path = $this->getIo()->ask(
+            $buttonIcon = $this->getIo()->ask(
                 $this->trans('commands.generate.plugin.ckeditorbutton.questions.button-icon-path'),
-                drupal_get_path('module', $module) . '/js/plugins/' . $plugin_id . '/images/icon.png'
+                drupal_get_path('module', $module) . '/js/plugin/'.$plugin_id.'/icons/'.$buttonName.'.png'
             );
-            $input->setOption('button-icon-path', $button_icon_path);
+
+            array_push(
+                $buttons,
+                [
+                    'name' => $buttonName,
+                    'label' => $buttonLabel,
+                    'icon' => $buttonIcon,
+                ]
+            );
+
+            if (!$this->getIo()->confirm(
+                $this->trans('commands.generate.plugin.ckeditorbutton.questions.button-add'),
+                true
+            )
+            ) {
+                break;
+            }
         }
+        $input->setOption('buttons', $buttons);
     }
 }
diff --git a/vendor/drupal/console/src/Command/Generate/PluginConditionCommand.php b/vendor/drupal/console/src/Command/Generate/PluginConditionCommand.php
index 462ef56caf..ceb26dbeda 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginConditionCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginConditionCommand.php
@@ -12,7 +12,7 @@
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
 use Drupal\Console\Core\Command\Command;
-use Drupal\Core\Entity\EntityTypeRepository;
+use Drupal\Core\Entity\EntityTypeRepositoryInterface;
 use Drupal\Console\Generator\PluginConditionGenerator;
 use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Command\Shared\ConfirmationTrait;
@@ -59,18 +59,18 @@ class PluginConditionCommand extends Command
     /**
      * PluginConditionCommand constructor.
      *
-     * @param Manager                  $extensionManager
-     * @param PluginConditionGenerator $generator
-     * @param ChainQueue               $chainQueue
-     * @param EntityTypeRepository     $entitytyperepository
-     * @param StringConverter          $stringConverter
-     * @param Validator                $validator
+     * @param Manager                       $extensionManager
+     * @param PluginConditionGenerator      $generator
+     * @param ChainQueue                    $chainQueue
+     * @param EntityTypeRepositoryInterface $entitytyperepository
+     * @param StringConverter               $stringConverter
+     * @param Validator                     $validator
      */
     public function __construct(
         Manager $extensionManager,
         PluginConditionGenerator $generator,
         ChainQueue $chainQueue,
-        EntityTypeRepository $entitytyperepository,
+        EntityTypeRepositoryInterface $entitytyperepository,
         StringConverter $stringConverter,
         Validator $validator
     ) {
@@ -144,7 +144,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class_name = $this->validator->validateClassName($input->getOption('class'));
         $label = $input->getOption('label');
         $plugin_id = $input->getOption('plugin-id');
diff --git a/vendor/drupal/console/src/Command/Generate/PluginDerivativeCommand.php b/vendor/drupal/console/src/Command/Generate/PluginDerivativeCommand.php
new file mode 100644
index 0000000000..537c54fcbc
--- /dev/null
+++ b/vendor/drupal/console/src/Command/Generate/PluginDerivativeCommand.php
@@ -0,0 +1,221 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Command\Generate\PluginDerivativeCommand.
+ */
+
+namespace Drupal\Console\Command\Generate;
+
+use Drupal\Console\Command\Shared\ArrayInputTrait;
+use Drupal\Console\Command\Shared\FormTrait;
+use Drupal\Console\Command\Shared\ConfirmationTrait;
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Command\Shared\ServicesTrait;
+use Drupal\Console\Core\Command\ContainerAwareCommand;
+use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Utils\Validator;
+use Drupal\Core\Config\ConfigFactory;
+use Drupal\Core\Render\ElementInfoManagerInterface;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+use Drupal\Console\Generator\PluginDerivativeGenerator;
+
+class PluginDerivativeCommand extends ContainerAwareCommand
+{
+    use ArrayInputTrait;
+    use ServicesTrait;
+    use ModuleTrait;
+    use FormTrait;
+    use ConfirmationTrait;
+
+    /**
+     * @var ConfigFactory
+     */
+    protected $configFactory;
+
+    /**
+     * @var ChainQueue
+     */
+    protected $chainQueue;
+
+    /**
+     * @var PluginDerivativeGenerator
+     */
+    protected $generator;
+
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * @var Validator
+     */
+    protected $validator;
+
+    /**
+     * @var StringConverter
+     */
+    protected $stringConverter;
+
+    /**
+     * @var ElementInfoManagerInterface
+     */
+    protected $elementInfoManager;
+
+    /**
+     * BlockTypeCommand constructor.
+     *
+     * @param ConfigFactory               $configFactory
+     * @param ChainQueue                  $chainQueue
+     * @param PluginDerivativeGenerator   $generator
+     * @param Manager                     $extensionManager
+     * @param Validator                   $validator
+     * @param StringConverter             $stringConverter
+     * @param ElementInfoManagerInterface $elementInfoManager
+     */
+    public function __construct(
+        ConfigFactory $configFactory,
+        ChainQueue $chainQueue,
+        PluginDerivativeGenerator $generator,
+        Manager $extensionManager,
+        Validator $validator,
+        StringConverter $stringConverter
+    ) {
+        $this->configFactory    = $configFactory;
+        $this->chainQueue       = $chainQueue;
+        $this->generator        = $generator;
+        $this->extensionManager = $extensionManager;
+        $this->validator        = $validator;
+        $this->stringConverter  = $stringConverter;
+        parent::__construct();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this
+            ->setName('generate:plugin:derivative')
+            ->setDescription($this->trans('commands.generate.derivative.description'))
+            ->setHelp($this->trans('commands.generate.plugin.derivative.help'))
+            ->addOption(
+                'module',
+                null,
+                InputOption::VALUE_REQUIRED,
+                $this->trans('commands.common.options.module')
+            )
+            ->addOption(
+                'class',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.plugin.derivative.options.class')
+            )
+            ->addOption(
+                'block_label',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.plugin.derivative.options.block_label')
+            )
+            ->addOption(
+                'block_description',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.plugin.derivative.options.block_description')
+            )
+            ->addOption(
+                'block_id',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.plugin.derivative.options.block_id')
+            )
+            ->setAliases(['gpd']);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        // @see use Drupal\Console\Command\Shared\ConfirmationTrait::confirmOperation
+        if (!$this->confirmOperation()) {
+            return 1;
+        }
+
+        $module = $this->validateModule($input->getOption('module'));
+        $class_name = $this->validator->validateClassName($input->getOption('class'));
+        $block_label = $input->getOption('block_label');
+        $block_description = $input->getOption('block_description');
+        $block_id = $input->getOption('block_id');
+        
+        $theme_region = true;
+        
+        $this->generator->generate(
+            [
+            'module' => $module,
+            'class' => $class_name,
+            'block_label' => $block_label,
+            'block_description' => $block_description,
+            'block_id' => $block_id,
+            ]
+        );
+        
+        $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function interact(InputInterface $input, OutputInterface $output)
+    {
+        // --module option
+        $this->getModuleOption();
+
+        // --class option
+        $class = $input->getOption('class');
+        if (!$class) {
+            $class = $this->getIo()->ask(
+                $this->trans('commands.generate.plugin.derivative.questions.class'),
+                $this->trans('commands.generate.plugin.derivative.suggestions.class'),
+                function ($class) {
+                    return $this->validator->validateClassName($class);
+                }
+            );
+            $input->setOption('class', $class);
+        }
+
+        // --block_label option
+        $block_label = $input->getOption('block_label');
+        if (!$block_label) {
+            $block_label = $this->getIo()->ask(
+                $this->trans('commands.generate.plugin.derivative.questions.block_label'),
+                $this->trans('commands.generate.plugin.derivative.suggestions.block_label')
+            );
+            $input->setOption('block_label', $block_label);
+        }
+
+        // --block_id option
+        $blockId = $input->getOption('block_id');
+        if (!$blockId) {
+            $blockId = $this->getIo()->ask(
+                $this->trans('commands.generate.plugin.derivative.questions.block_id'),
+                $this->stringConverter->camelCaseToUnderscore($blockId)
+            );
+            $input->setOption('block_id', $blockId);
+        }
+        // --block_description option
+        $blockDesc = $input->getOption('block_description');
+        if (!$blockDesc) {
+            $blockDesc = $this->getIo()->ask(
+                $this->trans('commands.generate.plugin.derivative.questions.block_description'),
+                $this->trans('commands.generate.plugin.derivative.suggestions.block_description')
+            );
+            $input->setOption('block_description', $blockDesc);
+        }
+    }
+}
diff --git a/vendor/drupal/console/src/Command/Generate/PluginFieldCommand.php b/vendor/drupal/console/src/Command/Generate/PluginFieldCommand.php
index e6979177b8..fae14c6f13 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginFieldCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginFieldCommand.php
@@ -168,10 +168,11 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
+        $module = $this->validateModule($input->getOption('module'));
         $this->chainQueue
             ->addCommand(
                 'generate:plugin:fieldtype', [
-                '--module' => $input->getOption('module'),
+                '--module' => $module,
                 '--class' => $this->validator->validateClassName($input->getOption('type-class')),
                 '--label' => $input->getOption('type-label'),
                 '--plugin-id' => $input->getOption('type-plugin-id'),
@@ -185,7 +186,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $this->chainQueue
             ->addCommand(
                 'generate:plugin:fieldwidget', [
-                '--module' => $input->getOption('module'),
+                '--module' => $module,
                 '--class' => $this->validator->validateClassName($input->getOption('widget-class')),
                 '--label' => $input->getOption('widget-label'),
                 '--plugin-id' => $input->getOption('widget-plugin-id'),
@@ -196,7 +197,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $this->chainQueue
             ->addCommand(
                 'generate:plugin:fieldformatter', [
-                '--module' => $input->getOption('module'),
+                '--module' => $module,
                 '--class' => $this->validator->validateClassName($input->getOption('formatter-class')),
                 '--label' => $input->getOption('formatter-label'),
                 '--plugin-id' => $input->getOption('formatter-plugin-id'),
diff --git a/vendor/drupal/console/src/Command/Generate/PluginFieldFormatterCommand.php b/vendor/drupal/console/src/Command/Generate/PluginFieldFormatterCommand.php
index 4c07a4c16e..cb47db08c2 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginFieldFormatterCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginFieldFormatterCommand.php
@@ -137,7 +137,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class_name = $this->validator->validateClassName($input->getOption('class'));
         $label = $input->getOption('label');
         $plugin_id = $input->getOption('plugin-id');
diff --git a/vendor/drupal/console/src/Command/Generate/PluginFieldTypeCommand.php b/vendor/drupal/console/src/Command/Generate/PluginFieldTypeCommand.php
index 6cd79bc45b..ce5cd5a483 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginFieldTypeCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginFieldTypeCommand.php
@@ -141,7 +141,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class_name = $this->validator->validateClassName($input->getOption('class'));
         $label = $input->getOption('label');
         $plugin_id = $input->getOption('plugin-id');
diff --git a/vendor/drupal/console/src/Command/Generate/PluginFieldWidgetCommand.php b/vendor/drupal/console/src/Command/Generate/PluginFieldWidgetCommand.php
index d057d9df7b..b272e83acc 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginFieldWidgetCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginFieldWidgetCommand.php
@@ -137,7 +137,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class_name = $this->validator->validateClassName($input->getOption('class'));
         $label = $input->getOption('label');
         $plugin_id = $input->getOption('plugin-id');
diff --git a/vendor/drupal/console/src/Command/Generate/PluginImageEffectCommand.php b/vendor/drupal/console/src/Command/Generate/PluginImageEffectCommand.php
index 50c8282d39..460169ac52 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginImageEffectCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginImageEffectCommand.php
@@ -128,7 +128,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class_name = $this->validator->validateClassName($input->getOption('class'));
         $label = $input->getOption('label');
         $plugin_id = $input->getOption('plugin-id');
diff --git a/vendor/drupal/console/src/Command/Generate/PluginImageFormatterCommand.php b/vendor/drupal/console/src/Command/Generate/PluginImageFormatterCommand.php
index 9d2b741b13..de0f2e75f1 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginImageFormatterCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginImageFormatterCommand.php
@@ -117,7 +117,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class_name = $this->validator->validateClassName($input->getOption('class'));
         $label = $input->getOption('label');
         $plugin_id = $input->getOption('plugin-id');
diff --git a/vendor/drupal/console/src/Command/Generate/PluginMailCommand.php b/vendor/drupal/console/src/Command/Generate/PluginMailCommand.php
index 98a0dda187..53a80a2866 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginMailCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginMailCommand.php
@@ -7,18 +7,18 @@
 
 namespace Drupal\Console\Command\Generate;
 
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Input\InputOption;
-use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Command\Shared\ServicesTrait;
-use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Command\Shared\ConfirmationTrait;
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Command\Shared\ServicesTrait;
 use Drupal\Console\Generator\PluginMailGenerator;
 use Drupal\Console\Core\Command\ContainerAwareCommand;
-use Drupal\Console\Extension\Manager;
 use Drupal\Console\Core\Utils\StringConverter;
-use Drupal\Console\Utils\Validator;
 use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Utils\Validator;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
 
 /**
  * Class PluginMailCommand
@@ -129,7 +129,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class_name = $this->validator->validateClassName($input->getOption('class'));
         $label = $input->getOption('label');
         $plugin_id = $input->getOption('plugin-id');
diff --git a/vendor/drupal/console/src/Command/Generate/PluginMigrateDataParserCommand.php b/vendor/drupal/console/src/Command/Generate/PluginMigrateDataParserCommand.php
new file mode 100644
index 0000000000..05f08a460d
--- /dev/null
+++ b/vendor/drupal/console/src/Command/Generate/PluginMigrateDataParserCommand.php
@@ -0,0 +1,174 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Command\Generate\PluginMigrateDataParserCommand.
+ */
+
+namespace Drupal\Console\Command\Generate;
+
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Command\Shared\ConfirmationTrait;
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Generator\PluginMigrateDataParserGenerator;
+use Drupal\Console\Utils\Validator;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class PluginMigrateDataParserCommand extends Command
+{
+    use ModuleTrait;
+    use ConfirmationTrait;
+
+    /**
+     * @var PluginMigrateProcessGenerator
+     */
+    protected $generator;
+
+    /**
+     * @var ChainQueue
+     */
+    protected $chainQueue;
+
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * @var StringConverter
+     */
+    protected $stringConverter;
+
+    /**
+     * @var Validator
+     */
+    protected $validator;
+
+    /**
+     * PluginMigrateDataParserGenerator constructor.
+     *
+     * @param PluginMigrateDataParserGenerator $generator
+     * @param ChainQueue                       $chainQueue
+     * @param Manager                          $extensionManager
+     * @param StringConverter                  $stringConverter
+     * @param Validator                        $validator
+     */
+    public function __construct(
+      PluginMigrateDataParserGenerator $generator,
+      ChainQueue $chainQueue,
+      Manager $extensionManager,
+      StringConverter $stringConverter,
+      Validator $validator
+    ) {
+        $this->generator = $generator;
+        $this->chainQueue = $chainQueue;
+        $this->extensionManager = $extensionManager;
+        $this->stringConverter = $stringConverter;
+        $this->validator = $validator;
+        parent::__construct();
+    }
+
+    protected function configure()
+    {
+        $this
+            ->setName('generate:plugin:migrate:dataparser')
+            ->setDescription($this->trans('commands.generate.plugin.migrate.dataparser.description'))
+            ->setHelp($this->trans('commands.generate.plugin.migrate.dataparser.help'))
+            ->addOption(
+                'module',
+                null,
+                InputOption::VALUE_REQUIRED,
+                $this->trans('commands.common.options.module')
+            )
+            ->addOption(
+                'class',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.plugin.migrate.dataparser.options.class')
+            )
+            ->addOption(
+                'plugin-id',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.plugin.migrate.dataparser.options.plugin-id')
+            )
+            ->addOption(
+                'plugin-title',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.plugin.migrate.dataparser.options.plugin-title')
+            )->setAliases(['gpmdp']);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        // @see use Drupal\Console\Command\Shared\ConfirmationTrait::confirmOperation
+        if (!$this->confirmOperation()) {
+            return 1;
+        }
+
+        $module = $input->getOption('module');
+        $class_name = $this->validator->validateClassName($input->getOption('class'));
+        $plugin_id = $input->getOption('plugin-id');
+        $plugin_title = $input->getOption('plugin-title');
+
+        $this->generator->generate([
+          'module' => $module,
+          'class_name' => $class_name,
+          'plugin_id' => $plugin_id,
+          'plugin_title' => $plugin_title,
+        ]);
+
+        $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function interact(InputInterface $input, OutputInterface $output)
+    {
+        // 'module-name' option.
+        $module = $this->getModuleOption();
+
+        // 'class-name' option
+        $class = $input->getOption('class');
+        if (!$class) {
+            $class = $this->getIo()->ask(
+                $this->trans('commands.generate.plugin.migrate.dataparser.questions.class'),
+                ucfirst($this->stringConverter->underscoreToCamelCase($module)),
+                function ($class) {
+                    return $this->validator->validateClassName($class);
+                }
+            );
+            $input->setOption('class', $class);
+        }
+
+        // 'plugin-id' option.
+        $pluginId = $input->getOption('plugin-id');
+        if (!$pluginId) {
+            $pluginId = $this->getIo()->ask(
+                $this->trans('commands.generate.plugin.migrate.dataparser.questions.plugin-id'),
+                $this->stringConverter->camelCaseToUnderscore($class)
+            );
+            $input->setOption('plugin-id', $pluginId);
+        }
+
+        // 'plugin-title' option.
+        $pluginTitle = $input->getOption('plugin-title');
+        if (!$pluginTitle) {
+          $pluginTitle = $this->getIo()->ask(
+            $this->trans('commands.generate.plugin.migrate.dataparser.questions.plugin-title'),
+            $this->stringConverter->camelCaseToUnderscore($class)
+          );
+          $input->setOption('plugin-title', $pluginTitle);
+        }
+    }
+}
diff --git a/vendor/drupal/console/src/Command/Generate/PluginMigrateProcessCommand.php b/vendor/drupal/console/src/Command/Generate/PluginMigrateProcessCommand.php
index 8a1585b569..48b0595c04 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginMigrateProcessCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginMigrateProcessCommand.php
@@ -7,19 +7,19 @@
 
 namespace Drupal\Console\Command\Generate;
 
-use Drupal\Console\Utils\Validator;
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Input\InputOption;
-use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Core\Command\ContainerAwareCommand;
+use Drupal\Console\Core\Command\Command;
 use Drupal\Console\Generator\PluginMigrateProcessGenerator;
-use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Utils\Validator;
 use Drupal\Console\Command\Shared\ConfirmationTrait;
+use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Extension\Manager;
-use Drupal\Console\Core\Utils\StringConverter;
 use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Core\Utils\StringConverter;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
 
-class PluginMigrateProcessCommand extends ContainerAwareCommand
+class PluginMigrateProcessCommand extends Command
 {
     use ModuleTrait;
     use ConfirmationTrait;
@@ -109,7 +109,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class_name = $this->validator->validateClassName($input->getOption('class'));
         $plugin_id = $input->getOption('plugin-id');
 
diff --git a/vendor/drupal/console/src/Command/Generate/PluginMigrateSourceCommand.php b/vendor/drupal/console/src/Command/Generate/PluginMigrateSourceCommand.php
index 8476a1e069..d8739eaaed 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginMigrateSourceCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginMigrateSourceCommand.php
@@ -2,30 +2,33 @@
 
 /**
  * @file
- * Contains \Drupal\Console\Command\Generate\PluginBlockCommand.
+ * Contains \Drupal\Console\Command\Generate\PluginMigrateSourceCommand.
  */
 
 namespace Drupal\Console\Command\Generate;
 
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Input\InputOption;
-use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Core\Command\ContainerAwareCommand;
-use Drupal\Console\Generator\PluginMigrateSourceGenerator;
+
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Command\Shared\ArrayInputTrait;
 use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Command\Shared\ConfirmationTrait;
 use Drupal\Console\Extension\Manager;
+use Drupal\Console\Generator\PluginMigrateSourceGenerator;
 use Drupal\Console\Utils\Validator;
-use Drupal\Console\Core\Utils\StringConverter;
-use Drupal\Console\Core\Utils\ChainQueue;
 use Drupal\Core\Config\ConfigFactory;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Render\ElementInfoManagerInterface;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
 
-class PluginMigrateSourceCommand extends ContainerAwareCommand
+class PluginMigrateSourceCommand extends Command
 {
-    use ModuleTrait;
+    use ArrayInputTrait;
     use ConfirmationTrait;
+    use ModuleTrait;
 
     /**
      * @var ConfigFactory
@@ -68,7 +71,7 @@ class PluginMigrateSourceCommand extends ContainerAwareCommand
     protected $elementInfoManager;
 
     /**
-     * PluginBlockCommand constructor.
+     * PluginMigrateSourceCommand constructor.
      *
      * @param ConfigFactory               $configFactory
      * @param ChainQueue                  $chainQueue
@@ -160,13 +163,18 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class_name = $this->validator->validateClassName($input->getOption('class'));
         $plugin_id = $input->getOption('plugin-id');
         $table = $input->getOption('table');
         $alias = $input->getOption('alias');
         $group_by = $input->getOption('group-by');
         $fields = $input->getOption('fields');
+        $no_interaction = $input->getOption('no-interaction');
+        // Parse nested data.
+        if ($no_interaction) {
+            $fields = $this->explodeInlineArray($fields);
+        }
 
         $this->generator->generate([
           'module' => $module,
diff --git a/vendor/drupal/console/src/Command/Generate/PluginQueueWorkerCommand.php b/vendor/drupal/console/src/Command/Generate/PluginQueueWorkerCommand.php
new file mode 100644
index 0000000000..698154c04c
--- /dev/null
+++ b/vendor/drupal/console/src/Command/Generate/PluginQueueWorkerCommand.php
@@ -0,0 +1,212 @@
+<?php
+
+namespace Drupal\Console\Command\Generate;
+
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Extension\Manager;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Drupal\Console\Core\Generator\GeneratorInterface;
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Command\Shared\ConfirmationTrait;
+use Symfony\Component\Console\Input\InputOption;
+use Drupal\Console\Utils\Validator;
+use Drupal\Console\Core\Utils\StringConverter;
+
+/**
+ * Class PluginQueueWorkerCommand.
+ *
+ * @package Drupal\Console\Command\Generate
+ */
+class PluginQueueWorkerCommand extends Command {
+
+  use ModuleTrait;
+  use ConfirmationTrait;
+
+  /**
+   * @var Manager
+   */
+  protected $extensionManager;
+
+  /**
+   * Drupal\Console\Core\Generator\GeneratorInterface definition.
+   *
+   * @var \Drupal\Console\Core\Generator\GeneratorInterface
+   */
+  protected $generator;
+
+  /**
+   * Validator.
+   *
+   * @var \Drupal\Console\Utils\Validator
+   */
+  protected $validator;
+
+  /**
+   * String converter.
+   *
+   * @var \Drupal\Console\Core\Utils\StringConverter
+   */
+  protected $stringConverter;
+
+  /**
+   * Chain queue.
+   *
+   * @var \Drupal\Console\Core\Utils\ChainQueue
+   */
+  protected $chainQueue;
+
+
+  /**
+   * PluginQueueWorkerCommand constructor.
+   *
+   * @param Manager $extensionManager
+   *   Extension Manager.
+   * @param \Drupal\Console\Core\Generator\GeneratorInterface $queue_generator
+   *   Queue Generator.
+   * @param \Drupal\Console\Utils\Validator $validator
+   *   Validator.
+   * @param \Drupal\Console\Core\Utils\StringConverter $stringConverter
+   *   String Converter.
+   * @param \Drupal\Console\Core\Utils\ChainQueue $chainQueue
+   *   Chain queue.
+   */
+  public function __construct(
+    Manager $extensionManager,
+    GeneratorInterface $queue_generator,
+    Validator $validator,
+    StringConverter $stringConverter,
+    ChainQueue $chainQueue
+  ) {
+    $this->extensionManager = $extensionManager;
+    $this->generator = $queue_generator;
+    $this->validator = $validator;
+    $this->stringConverter = $stringConverter;
+    $this->chainQueue = $chainQueue;
+    parent::__construct();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function configure() {
+    $this
+      ->setName('generate:plugin:queue')
+      ->setDescription($this->trans('commands.generate.plugin.queue.description'))
+      ->setHelp($this->trans('commands.generate.plugin.queue.help'))
+      ->addOption(
+          'module',
+          NULL,
+          InputOption::VALUE_REQUIRED,
+          $this->trans('commands.generate.plugin.queue.options.module')
+      )
+      ->addOption(
+          'class',
+          NULL,
+          InputOption::VALUE_REQUIRED,
+          $this->trans('commands.generate.plugin.queue.options.class')
+      )
+      ->addOption(
+          'plugin-id',
+          NULL,
+          InputOption::VALUE_REQUIRED,
+          $this->trans('commands.generate.plugin.queue.options.plugin-id')
+      )
+      ->addOption(
+          'cron-time',
+          NULL,
+          InputOption::VALUE_REQUIRED,
+          $this->trans('commands.generate.plugin.queue.options.cron-time')
+      )
+      ->addOption(
+          'label',
+          NULL,
+          InputOption::VALUE_REQUIRED,
+          $this->trans('commands.generate.plugin.queue.options.label')
+      )
+      ->setAliases(['gpqueue']);
+  }
+
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function interact(InputInterface $input, OutputInterface $output) {
+    // --module option.
+    $this->getModuleOption();
+
+    // --class option.
+    $queue_class = $input->getOption('class');
+    if (!$queue_class) {
+      $queue_class = $this->getIo()->ask(
+            $this->trans('commands.generate.plugin.queue.questions.class'),
+            'ExampleQueue',
+            function ($queue_class) {
+              return $this->validator->validateClassName($queue_class);
+            }
+        );
+      $input->setOption('class', $queue_class);
+    }
+
+    // --plugin-id option.
+    $plugin_id = $input->getOption('plugin-id');
+    if (!$plugin_id) {
+      $plugin_id = $this->getIo()->ask(
+          $this->trans('commands.generate.plugin.queue.questions.plugin-id'),
+          'example_plugin_id',
+          function ($plugin_id) {
+            return $this->stringConverter->camelCaseToUnderscore($plugin_id);
+          }
+      );
+      $input->setOption('plugin-id', $plugin_id);
+    }
+
+    // --cron-time option.
+    $cron_time = $input->getOption('cron-time');
+    if (!$cron_time) {
+      $cron_time = $this->getIo()->ask(
+          $this->trans('commands.generate.plugin.queue.questions.cron-time'),
+          30
+      );
+      $input->setOption('cron-time', $cron_time);
+    }
+
+    // --label option.
+    $label = $input->getOption('label');
+    if (!$label) {
+      $label = $this->getIo()->ask(
+          $this->trans('commands.generate.plugin.queue.questions.label'),
+          'Queue description.'
+      );
+      $input->setOption('label', $label);
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function execute(InputInterface $input, OutputInterface $output) {
+    // @see use Drupal\Console\Command\Shared\ConfirmationTrait::confirmOperation
+    if (!$this->confirmOperation()) {
+      return 1;
+    }
+    $module = $input->getOption('module');
+    $queue_class = $input->getOption('class');
+    $plugin_id = $input->getOption('plugin-id');
+    $cron_time = $input->getOption('cron-time');
+    $label = $input->getOption('label');
+    $this->generator->generate([
+      'module' => $module,
+      'class_name' => $queue_class,
+      'plugin_id' => $plugin_id,
+      'cron_time' => $cron_time,
+      'label' => $label,
+    ]);
+
+    $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']);
+
+    return 0;
+  }
+
+}
diff --git a/vendor/drupal/console/src/Command/Generate/PluginRestResourceCommand.php b/vendor/drupal/console/src/Command/Generate/PluginRestResourceCommand.php
index e275c2e53d..bbcf2d575e 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginRestResourceCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginRestResourceCommand.php
@@ -19,6 +19,7 @@
 use Drupal\Console\Extension\Manager;
 use Drupal\Console\Core\Utils\StringConverter;
 use Drupal\Console\Core\Utils\ChainQueue;
+use Webmozart\PathUtil\Path;
 
 /**
  * Class PluginRestResourceCommand
@@ -137,7 +138,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
         }
 
         $http_methods = $this->getHttpMethods();
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class_name = $this->validator->validateClassName($input->getOption('class'));
         $plugin_id = $input->getOption('plugin-id');
         $plugin_label = $input->getOption('plugin-label');
@@ -149,14 +150,16 @@ protected function execute(InputInterface $input, OutputInterface $output)
             $prepared_plugin[$plugin_state] = $http_methods[$plugin_state];
         }
 
-        $this->generator->generate([
-            'module_name' => $module,
-            'class_name' => $class_name,
-            'plugin_label' => $plugin_label,
-            'plugin_id' => $plugin_id,
-            'plugin_url' => $plugin_url,
-            'plugin_states' => $prepared_plugin,
-        ]);
+        $this->generator->generate(
+            [
+                'module_name' => $module,
+                'class_name' => $class_name,
+                'plugin_label' => $plugin_label,
+                'plugin_id' => $plugin_id,
+                'plugin_url' => $plugin_url,
+                'plugin_states' => $prepared_plugin,
+            ]
+        );
 
         $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']);
 
@@ -205,8 +208,13 @@ function ($class) {
         $plugin_url = $input->getOption('plugin-url');
         if (!$plugin_url) {
             $plugin_url = $this->getIo()->ask(
-                $this->trans('commands.generate.plugin.rest.resource.questions.plugin-url')
+                $this->trans('commands.generate.plugin.rest.resource.questions.plugin-url'),
+                null,
+                function ($plugin_url) {
+                    return Path::isAbsolute($plugin_url) ? $plugin_url : '/'.$plugin_url;
+                }
             );
+
             $input->setOption('plugin-url', $plugin_url);
         }
 
@@ -236,32 +244,39 @@ protected function getHttpMethods()
     {
         return [
             'GET' => [
-              'http_code' => 200,
-              'response_class' => 'ResourceResponse',
+                'http_code' => 200,
+                'response_class' => 'ResourceResponse',
+                'uri_paths' => 'canonical',
             ],
             'PUT' => [
-              'http_code' => 201,
-              'response_class' => 'ModifiedResourceResponse',
+                'http_code' => 201,
+                'response_class' => 'ModifiedResourceResponse',
+                'uri_paths' => 'canonical',
             ],
             'POST' => [
-              'http_code' => 200,
-              'response_class' => 'ModifiedResourceResponse',
+                'http_code' => 200,
+                'response_class' => 'ModifiedResourceResponse',
+                'uri_paths' => 'create',
             ],
             'PATCH' => [
-              'http_code' => 204,
-              'response_class' => 'ModifiedResourceResponse',
+                'http_code' => 204,
+                'response_class' => 'ModifiedResourceResponse',
+                'uri_paths' => 'canonical',
             ],
             'DELETE' => [
-              'http_code' => 204,
-              'response_class' => 'ModifiedResourceResponse',
+                'http_code' => 204,
+                'response_class' => 'ModifiedResourceResponse',
+                'uri_type' => 'canonical',
             ],
             'HEAD' => [
-              'http_code' => 200,
-              'response_class' => 'ResourceResponse',
+                'http_code' => 200,
+                'response_class' => 'ResourceResponse',
+                'uri_type' => 'canonical',
             ],
             'OPTIONS' => [
-              'http_code' => 200,
-              'response_class' => 'ResourceResponse',
+                'http_code' => 200,
+                'response_class' => 'ResourceResponse',
+                'uri_type' => 'canonical',
             ],
         ];
     }
diff --git a/vendor/drupal/console/src/Command/Generate/PluginRulesActionCommand.php b/vendor/drupal/console/src/Command/Generate/PluginRulesActionCommand.php
index 473eb2ff10..6a4e415878 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginRulesActionCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginRulesActionCommand.php
@@ -7,18 +7,18 @@
 
 namespace Drupal\Console\Command\Generate;
 
+use Drupal\Console\Command\Shared\ArrayInputTrait;
+use Drupal\Console\Command\Shared\ConfirmationTrait;
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Extension\Manager;
 use Drupal\Console\Generator\PluginRulesActionGenerator;
 use Drupal\Console\Utils\Validator;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Command\Shared\ServicesTrait;
-use Drupal\Console\Command\Shared\ModuleTrait;
-use Drupal\Console\Command\Shared\ConfirmationTrait;
-use Drupal\Console\Core\Command\Command;
-use Drupal\Console\Extension\Manager;
-use Drupal\Console\Core\Utils\StringConverter;
-use Drupal\Console\Core\Utils\ChainQueue;
 
 /**
  * Class PluginRulesActionCommand
@@ -27,18 +27,19 @@
  */
 class PluginRulesActionCommand extends Command
 {
-    use ServicesTrait;
-    use ModuleTrait;
+
+    use ArrayInputTrait;
     use ConfirmationTrait;
+    use ModuleTrait;
 
     /**
- * @var Manager
-*/
+     * @var Manager
+     */
     protected $extensionManager;
 
     /**
- * @var PluginRulesActionGenerator
-*/
+     * @var PluginRulesActionGenerator
+     */
     protected $generator;
 
     /**
@@ -60,18 +61,18 @@ class PluginRulesActionCommand extends Command
     /**
      * PluginRulesActionCommand constructor.
      *
-     * @param Manager                    $extensionManager
+     * @param Manager $extensionManager
      * @param PluginRulesActionGenerator $generator
-     * @param StringConverter            $stringConverter
-     * @param Validator                  $validator
-     * @param ChainQueue                 $chainQueue
+     * @param StringConverter $stringConverter
+     * @param Validator $validator
+     * @param ChainQueue $chainQueue
      */
     public function __construct(
-        Manager $extensionManager,
-        PluginRulesActionGenerator $generator,
-        StringConverter $stringConverter,
-        Validator $validator,
-        ChainQueue $chainQueue
+      Manager $extensionManager,
+      PluginRulesActionGenerator $generator,
+      StringConverter $stringConverter,
+      Validator $validator,
+      ChainQueue $chainQueue
     ) {
         $this->extensionManager = $extensionManager;
         $this->generator = $generator;
@@ -84,47 +85,46 @@ public function __construct(
     protected function configure()
     {
         $this
-            ->setName('generate:plugin:rulesaction')
-            ->setDescription($this->trans('commands.generate.plugin.rulesaction.description'))
-            ->setHelp($this->trans('commands.generate.plugin.rulesaction.help'))
-            ->addOption(
-                'module',
-                null,
-                InputOption::VALUE_REQUIRED,
-                $this->trans('commands.common.options.module')
-            )
-            ->addOption(
-                'class',
-                null,
-                InputOption::VALUE_OPTIONAL,
-                $this->trans('commands.generate.plugin.rulesaction.options.class')
-            )
-            ->addOption(
-                'label',
-                null,
-                InputOption::VALUE_OPTIONAL,
-                $this->trans('commands.generate.plugin.rulesaction.options.label')
-            )
-            ->addOption(
-                'plugin-id',
-                null,
-                InputOption::VALUE_OPTIONAL,
-                $this->trans('commands.generate.plugin.rulesaction.options.plugin-id')
-            )
-            ->addOption('type', null, InputOption::VALUE_REQUIRED, $this->trans('commands.generate.plugin.rulesaction.options.type'))
-            ->addOption(
-                'category',
-                null,
-                InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
-                $this->trans('commands.generate.plugin.rulesaction.options.category')
-            )
-            ->addOption(
-                'context',
-                null,
-                InputOption::VALUE_OPTIONAL,
-                $this->trans('commands.generate.plugin.rulesaction.options.context')
-            )
-            ->setAliases(['gpra']);
+          ->setName('generate:plugin:rules:action')
+          ->setDescription($this->trans('commands.generate.plugin.rules.action.description'))
+          ->setHelp($this->trans('commands.generate.plugin.rules.action.help'))
+          ->addOption(
+            'module',
+            null,
+            InputOption::VALUE_REQUIRED,
+            $this->trans('commands.common.options.module')
+          )
+          ->addOption(
+            'class',
+            null,
+            InputOption::VALUE_OPTIONAL,
+            $this->trans('commands.generate.plugin.rules.action.options.class')
+          )
+          ->addOption(
+            'label',
+            null,
+            InputOption::VALUE_OPTIONAL,
+            $this->trans('commands.generate.plugin.rules.action.options.label')
+          )
+          ->addOption(
+            'plugin-id',
+            null,
+            InputOption::VALUE_OPTIONAL,
+            $this->trans('commands.generate.plugin.rules.action.options.plugin-id')
+          )
+          ->addOption(
+            'category',
+            null,
+            InputOption::VALUE_OPTIONAL,
+            $this->trans('commands.generate.plugin.rules.action.options.category')
+          )
+          ->addOption(
+            'context',
+            null,
+            InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
+            $this->trans('commands.generate.plugin.rules.action.options.context')
+          )
+          ->setAliases(['gpra']);
     }
 
     /**
@@ -137,25 +137,30 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class_name = $this->validator->validateClassName($input->getOption('class'));
         $label = $input->getOption('label');
         $plugin_id = $input->getOption('plugin-id');
-        $type = $input->getOption('type');
         $category = $input->getOption('category');
         $context = $input->getOption('context');
+        $noInteraction = $input->getOption('no-interaction');
+
+        // Parse nested data.
+        if ($noInteraction) {
+            $context = $this->explodeInlineArray($context);
+        }
 
         $this->generator->generate([
-            'module' => $module,
-            'class_name' => $class_name,
-            'label' => $label,
-            'plugin_id' => $plugin_id,
-            'category' => $category,
-            'context' => $context,
-            'type' => $type,
+          'module' => $module,
+          'class_name' => $class_name,
+          'label' => $label,
+          'plugin_id' => $plugin_id,
+          'category' => $category,
+          'context' => $context,
         ]);
 
-        $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']);
+        $this->chainQueue->addCommand('cache:rebuild',
+          ['cache' => 'discovery']);
 
         return 0;
     }
@@ -169,11 +174,11 @@ protected function interact(InputInterface $input, OutputInterface $output)
         $class_name = $input->getOption('class');
         if (!$class_name) {
             $class_name = $this->getIo()->ask(
-                $this->trans('commands.generate.plugin.rulesaction.options.class'),
-                'DefaultAction',
-                function ($class_name) {
-                    return $this->validator->validateClassName($class_name);
-                }
+              $this->trans('commands.generate.plugin.rules.action.options.class'),
+              'DefaultAction',
+              function ($class_name) {
+                  return $this->validator->validateClassName($class_name);
+              }
             );
             $input->setOption('class', $class_name);
         }
@@ -182,8 +187,8 @@ function ($class_name) {
         $label = $input->getOption('label');
         if (!$label) {
             $label = $this->getIo()->ask(
-                $this->trans('commands.generate.plugin.rulesaction.options.label'),
-                $this->stringConverter->camelCaseToHuman($class_name)
+              $this->trans('commands.generate.plugin.rules.action.options.label'),
+              $this->stringConverter->camelCaseToHuman($class_name)
             );
             $input->setOption('label', $label);
         }
@@ -192,40 +197,73 @@ function ($class_name) {
         $plugin_id = $input->getOption('plugin-id');
         if (!$plugin_id) {
             $plugin_id = $this->getIo()->ask(
-                $this->trans('commands.generate.plugin.rulesaction.options.plugin-id'),
-                $this->stringConverter->camelCaseToUnderscore($class_name)
+              $this->trans('commands.generate.plugin.rules.action.options.plugin-id'),
+              $this->stringConverter->camelCaseToUnderscore($class_name)
             );
             $input->setOption('plugin-id', $plugin_id);
         }
 
-        // --type option
-        $type = $input->getOption('type');
-        if (!$type) {
-            $type = $this->getIo()->ask(
-                $this->trans('commands.generate.plugin.rulesaction.options.type'),
-                'user'
-            );
-            $input->setOption('type', $type);
-        }
-
         // --category option
         $category = $input->getOption('category');
         if (!$category) {
             $category = $this->getIo()->ask(
-                $this->trans('commands.generate.plugin.rulesaction.options.category'),
-                $this->stringConverter->camelCaseToUnderscore($class_name)
+              $this->trans('commands.generate.plugin.rules.action.options.category'),
+              $this->stringConverter->camelCaseToUnderscore($class_name)
             );
             $input->setOption('category', $category);
         }
 
         // --context option
         $context = $input->getOption('context');
-        if (!$context) {
-            $context = $this->getIo()->ask(
-                $this->trans('commands.generate.plugin.rulesaction.options.context'),
-                $this->stringConverter->camelCaseToUnderscore($class_name)
-            );
-            $input->setOption('context', $context);
+        if (empty($context)) {
+
+            $context = [];
+            if ($this->getIo()->confirm(
+              $this->trans('commands.generate.plugin.rules.action.questions.context'),
+              true
+            )) {
+                while (true) {
+                    $this->getIo()->newLine();
+
+                    $input_name = $this->getIo()->ask(
+                      $this->trans('commands.generate.plugin.rules.action.questions.context-name')
+                    );
+
+                    $input_type = $this->getIo()->ask(
+                      $this->trans('commands.generate.plugin.rules.action.questions.context-type')
+                    );
+
+                    $input_label = $this->getIo()->ask(
+                      $this->trans('commands.generate.plugin.rules.action.questions.context-label')
+                    );
+
+                    $input_description = $this->getIo()->ask(
+                      $this->trans('commands.generate.plugin.rules.action.questions.context-description')
+                    );
+
+                    array_push(
+                      $context,
+                      [
+                        'name' => $input_name,
+                        'type' => $input_type,
+                        'label' => $input_label,
+                        'description' => $input_description,
+                      ]
+                    );
+
+                    $this->getIo()->newLine();
+                    if (!$this->getIo()->confirm(
+                      $this->trans('commands.generate.plugin.rules.action.questions.another-context'),
+                      true
+                    )) {
+                        break;
+                    }
+                }
+            }
+        } else {
+            $context = $this->explodeInlineArray($context);
         }
+
+        $input->setOption('context', $context);
     }
 }
diff --git a/vendor/drupal/console/src/Command/Generate/PluginRulesConditionCommand.php b/vendor/drupal/console/src/Command/Generate/PluginRulesConditionCommand.php
new file mode 100644
index 0000000000..c0ecb2360e
--- /dev/null
+++ b/vendor/drupal/console/src/Command/Generate/PluginRulesConditionCommand.php
@@ -0,0 +1,269 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Command\Generate\PluginRulesActionCommand.
+ */
+
+namespace Drupal\Console\Command\Generate;
+
+use Drupal\Console\Command\Shared\ArrayInputTrait;
+use Drupal\Console\Command\Shared\ConfirmationTrait;
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Generator\PluginRulesConditionGenerator;
+use Drupal\Console\Utils\Validator;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+
+/**
+ * Class PluginRulesConditionCommand
+ *
+ * @package Drupal\Console\Command\Generate
+ */
+class PluginRulesConditionCommand extends Command
+{
+
+    use ArrayInputTrait;
+    use ConfirmationTrait;
+    use ModuleTrait;
+
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * @var PluginRulesConditionGenerator
+     */
+    protected $generator;
+
+    /**
+     * @var StringConverter
+     */
+    protected $stringConverter;
+
+    /**
+     * @var Validator
+     */
+    protected $validator;
+
+    /**
+     * @var ChainQueue
+     */
+    protected $chainQueue;
+
+
+    /**
+     * PluginRulesConditionCommand constructor.
+     *
+     * @param Manager $extensionManager
+     * @param PluginRulesConditionGenerator $generator
+     * @param StringConverter $stringConverter
+     * @param Validator $validator
+     * @param ChainQueue $chainQueue
+     */
+    public function __construct(
+      Manager $extensionManager,
+      PluginRulesConditionGenerator $generator,
+      StringConverter $stringConverter,
+      Validator $validator,
+      ChainQueue $chainQueue
+    ) {
+        $this->extensionManager = $extensionManager;
+        $this->generator = $generator;
+        $this->stringConverter = $stringConverter;
+        $this->validator = $validator;
+        $this->chainQueue = $chainQueue;
+        parent::__construct();
+    }
+
+    protected function configure()
+    {
+        $this
+          ->setName('generate:plugin:rules:condition')
+          ->setDescription($this->trans('commands.generate.plugin.rules.condition.description'))
+          ->setHelp($this->trans('commands.generate.plugin.rules.condition.help'))
+          ->addOption(
+            'module',
+            null,
+            InputOption::VALUE_REQUIRED,
+            $this->trans('commands.common.options.module')
+          )
+          ->addOption(
+            'class',
+            null,
+            InputOption::VALUE_OPTIONAL,
+            $this->trans('commands.generate.plugin.rules.condition.options.class')
+          )
+          ->addOption(
+            'label',
+            null,
+            InputOption::VALUE_OPTIONAL,
+            $this->trans('commands.generate.plugin.rules.condition.options.label')
+          )
+          ->addOption(
+            'plugin-id',
+            null,
+            InputOption::VALUE_OPTIONAL,
+            $this->trans('commands.generate.plugin.rules.condition.options.plugin-id')
+          )
+          ->addOption(
+            'category',
+            null,
+            InputOption::VALUE_OPTIONAL,
+            $this->trans('commands.generate.plugin.rules.condition.options.category')
+          )
+          ->addOption(
+            'context',
+            null,
+            InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
+            $this->trans('commands.generate.plugin.rules.condition.options.context')
+          )
+          ->setAliases(['gprc']);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        // @see use Drupal\Console\Command\Shared\ConfirmationTrait::confirmOperation
+        if (!$this->confirmOperation()) {
+            return 1;
+        }
+
+        $module = $input->getOption('module');
+        $class_name = $this->validator->validateClassName($input->getOption('class'));
+        $label = $input->getOption('label');
+        $plugin_id = $input->getOption('plugin-id');
+        $category = $input->getOption('category');
+        $context = $input->getOption('context');
+        $noInteraction = $input->getOption('no-interaction');
+
+        // Parse nested data.
+        if ($noInteraction) {
+            $context = $this->explodeInlineArray($context);
+        }
+
+        $this->generator->generate([
+          'module' => $module,
+          'class_name' => $class_name,
+          'label' => $label,
+          'plugin_id' => $plugin_id,
+          'category' => $category,
+          'context' => $context,
+        ]);
+
+        $this->chainQueue->addCommand('cache:rebuild',
+          ['cache' => 'discovery']);
+
+        return 0;
+    }
+
+    protected function interact(InputInterface $input, OutputInterface $output)
+    {
+        // --module option
+        $this->getModuleOption();
+
+        // --class option
+        $class_name = $input->getOption('class');
+        if (!$class_name) {
+            $class_name = $this->getIo()->ask(
+              $this->trans('commands.generate.plugin.rules.condition.options.class'),
+              'DefaultCondition',
+              function ($class_name) {
+                  return $this->validator->validateClassName($class_name);
+              }
+            );
+            $input->setOption('class', $class_name);
+        }
+
+        // --label option
+        $label = $input->getOption('label');
+        if (!$label) {
+            $label = $this->getIo()->ask(
+              $this->trans('commands.generate.plugin.rules.condition.options.label'),
+              $this->stringConverter->camelCaseToHuman($class_name)
+            );
+            $input->setOption('label', $label);
+        }
+
+        // --plugin-id option
+        $plugin_id = $input->getOption('plugin-id');
+        if (!$plugin_id) {
+            $plugin_id = $this->getIo()->ask(
+              $this->trans('commands.generate.plugin.rules.condition.options.plugin-id'),
+              $this->stringConverter->camelCaseToUnderscore($class_name)
+            );
+            $input->setOption('plugin-id', $plugin_id);
+        }
+
+        // --category option
+        $category = $input->getOption('category');
+        if (!$category) {
+            $category = $this->getIo()->ask(
+              $this->trans('commands.generate.plugin.rules.condition.options.category'),
+              $this->stringConverter->camelCaseToUnderscore($class_name)
+            );
+            $input->setOption('category', $category);
+        }
+
+        // --context option
+        $context = $input->getOption('context');
+        if (empty($context)) {
+
+            $context = [];
+            if ($this->getIo()->confirm(
+              $this->trans('commands.generate.plugin.rules.condition.questions.context'),
+              true
+            )) {
+                while (true) {
+                    $this->getIo()->newLine();
+
+                    $input_name = $this->getIo()->ask(
+                      $this->trans('commands.generate.plugin.rules.condition.questions.context-name')
+                    );
+
+                    $input_type = $this->getIo()->ask(
+                      $this->trans('commands.generate.plugin.rules.condition.questions.context-type')
+                    );
+
+                    $input_label = $this->getIo()->ask(
+                      $this->trans('commands.generate.plugin.rules.condition.questions.context-label')
+                    );
+
+                    $input_description = $this->getIo()->ask(
+                      $this->trans('commands.generate.plugin.rules.condition.questions.context-description')
+                    );
+
+                    array_push(
+                      $context,
+                      [
+                        'name' => $input_name,
+                        'type' => $input_type,
+                        'label' => $input_label,
+                        'description' => $input_description,
+                      ]
+                    );
+
+                    $this->getIo()->newLine();
+                    if (!$this->getIo()->confirm(
+                      $this->trans('commands.generate.plugin.rules.condition.questions.another-context'),
+                      true
+                    )) {
+                        break;
+                    }
+                }
+            }
+        } else {
+            $context = $this->explodeInlineArray($context);
+        }
+
+        $input->setOption('context', $context);
+    }
+}
diff --git a/vendor/drupal/console/src/Command/Generate/PluginRulesDataprocessorCommand.php b/vendor/drupal/console/src/Command/Generate/PluginRulesDataprocessorCommand.php
new file mode 100644
index 0000000000..7a67addb50
--- /dev/null
+++ b/vendor/drupal/console/src/Command/Generate/PluginRulesDataprocessorCommand.php
@@ -0,0 +1,182 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Command\Generate\PluginRulesActionCommand.
+ */
+
+namespace Drupal\Console\Command\Generate;
+
+use Drupal\Console\Command\Shared\ConfirmationTrait;
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Generator\PluginRulesDataprocessorGenerator;
+use Drupal\Console\Utils\Validator;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+
+/**
+ * Class PluginRulesDataprocessorCommand
+ *
+ * @package Drupal\Console\Command\Generate
+ */
+class PluginRulesDataprocessorCommand extends Command
+{
+
+    use ConfirmationTrait;
+    use ModuleTrait;
+
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * @var PluginRulesDataprocessorGenerator
+     */
+    protected $generator;
+
+    /**
+     * @var StringConverter
+     */
+    protected $stringConverter;
+
+    /**
+     * @var Validator
+     */
+    protected $validator;
+
+    /**
+     * @var ChainQueue
+     */
+    protected $chainQueue;
+
+
+    /**
+     * PluginRulesDataprocessorCommand constructor.
+     *
+     * @param Manager $extensionManager
+     * @param PluginRulesDataprocessorGenerator $generator
+     * @param StringConverter $stringConverter
+     * @param Validator $validator
+     * @param ChainQueue $chainQueue
+     */
+    public function __construct(
+      Manager $extensionManager,
+      PluginRulesDataprocessorGenerator $generator,
+      StringConverter $stringConverter,
+      Validator $validator,
+      ChainQueue $chainQueue
+    ) {
+        $this->extensionManager = $extensionManager;
+        $this->generator = $generator;
+        $this->stringConverter = $stringConverter;
+        $this->validator = $validator;
+        $this->chainQueue = $chainQueue;
+        parent::__construct();
+    }
+
+    protected function configure()
+    {
+        $this
+          ->setName('generate:plugin:rules:dataprocessor')
+          ->setDescription($this->trans('commands.generate.plugin.rules.dataprocessor.description'))
+          ->setHelp($this->trans('commands.generate.plugin.rules.dataprocessor.help'))
+          ->addOption(
+            'module',
+            null,
+            InputOption::VALUE_REQUIRED,
+            $this->trans('commands.common.options.module')
+          )
+          ->addOption(
+            'class',
+            null,
+            InputOption::VALUE_OPTIONAL,
+            $this->trans('commands.generate.plugin.rules.dataprocessor.options.class')
+          )
+          ->addOption(
+            'label',
+            null,
+            InputOption::VALUE_OPTIONAL,
+            $this->trans('commands.generate.plugin.rules.dataprocessor.options.label')
+          )
+          ->addOption(
+            'plugin-id',
+            null,
+            InputOption::VALUE_OPTIONAL,
+            $this->trans('commands.generate.plugin.rules.dataprocessor.options.plugin-id')
+          )
+          ->setAliases(['gprd']);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        // @see use Drupal\Console\Command\Shared\ConfirmationTrait::confirmOperation
+        if (!$this->confirmOperation()) {
+            return 1;
+        }
+
+        $module = $input->getOption('module');
+        $class_name = $this->validator->validateClassName($input->getOption('class'));
+        $label = $input->getOption('label');
+        $plugin_id = $input->getOption('plugin-id');
+
+        $this->generator->generate([
+          'module' => $module,
+          'class_name' => $class_name,
+          'label' => $label,
+          'plugin_id' => $plugin_id,
+        ]);
+
+        $this->chainQueue->addCommand('cache:rebuild',
+          ['cache' => 'discovery']);
+
+        return 0;
+    }
+
+    protected function interact(InputInterface $input, OutputInterface $output)
+    {
+        // --module option
+        $this->getModuleOption();
+
+        // --class option
+        $class_name = $input->getOption('class');
+        if (!$class_name) {
+            $class_name = $this->getIo()->ask(
+              $this->trans('commands.generate.plugin.rules.dataprocessor.options.class'),
+              'DefaultDataprocessor',
+              function ($class_name) {
+                  return $this->validator->validateClassName($class_name);
+              }
+            );
+            $input->setOption('class', $class_name);
+        }
+
+        // --label option
+        $label = $input->getOption('label');
+        if (!$label) {
+            $label = $this->getIo()->ask(
+              $this->trans('commands.generate.plugin.rules.dataprocessor.options.label'),
+              $this->stringConverter->camelCaseToHuman($class_name)
+            );
+            $input->setOption('label', $label);
+        }
+
+        // --plugin-id option
+        $plugin_id = $input->getOption('plugin-id');
+        if (!$plugin_id) {
+            $plugin_id = $this->getIo()->ask(
+              $this->trans('commands.generate.plugin.rules.dataprocessor.options.plugin-id'),
+              $this->stringConverter->camelCaseToUnderscore($class_name)
+            );
+            $input->setOption('plugin-id', $plugin_id);
+        }
+    }
+}
\ No newline at end of file
diff --git a/vendor/drupal/console/src/Command/Generate/PluginSkeletonCommand.php b/vendor/drupal/console/src/Command/Generate/PluginSkeletonCommand.php
index 30f84b631d..2a77ca0bf6 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginSkeletonCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginSkeletonCommand.php
@@ -7,18 +7,18 @@
 
 namespace Drupal\Console\Command\Generate;
 
-use Drupal\Console\Generator\PluginSkeletonGenerator;
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Input\InputOption;
-use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Core\Command\ContainerAwareCommand;
 use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Command\Shared\ConfirmationTrait;
 use Drupal\Console\Command\Shared\ServicesTrait;
-use Drupal\Console\Extension\Manager;
+use Drupal\Console\Core\Command\ContainerAwareCommand;
 use Drupal\Console\Core\Utils\StringConverter;
 use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Generator\PluginSkeletonGenerator;
 use Drupal\Console\Utils\Validator;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
 
 /**
  * Class PluginSkeletonCommand
@@ -133,7 +133,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
 
         $pluginId = $input->getOption('plugin-id');
         $plugin = ucfirst($this->stringConverter->underscoreToCamelCase($pluginId));
@@ -174,6 +174,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
             'class_name' => $className,
             'services' => $buildServices,
             'plugin_metadata' => $pluginMetaData,
+            'id' => $this->stringConverter->camelCaseToUnderscore($className),
+            'label' => $this->stringConverter->camelCaseToHuman($className)
         ]);
 
         $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']);
diff --git a/vendor/drupal/console/src/Command/Generate/PluginTypeAnnotationCommand.php b/vendor/drupal/console/src/Command/Generate/PluginTypeAnnotationCommand.php
index 1aa16041c5..cd582cc69e 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginTypeAnnotationCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginTypeAnnotationCommand.php
@@ -12,7 +12,6 @@
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Command\Shared\ServicesTrait;
 use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Core\Command\Command;
 use Drupal\Console\Extension\Manager;
@@ -25,7 +24,6 @@
  */
 class PluginTypeAnnotationCommand extends Command
 {
-    use ServicesTrait;
     use ModuleTrait;
 
     /**
@@ -107,7 +105,7 @@ protected function configure()
      */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class_name = $this->validator->validateClassName($input->getOption('class'));
         $machine_name = $input->getOption('machine-name');
         $label = $input->getOption('label');
diff --git a/vendor/drupal/console/src/Command/Generate/PluginTypeYamlCommand.php b/vendor/drupal/console/src/Command/Generate/PluginTypeYamlCommand.php
index a7ef0a067c..41fdf992e8 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginTypeYamlCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginTypeYamlCommand.php
@@ -12,7 +12,6 @@
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Command\Shared\ServicesTrait;
 use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Core\Command\Command;
 use Drupal\Console\Extension\Manager;
@@ -25,7 +24,6 @@
  */
 class PluginTypeYamlCommand extends Command
 {
-    use ServicesTrait;
     use ModuleTrait;
 
     /**
@@ -107,7 +105,7 @@ protected function configure()
      */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class_name = $this->validator->validateClassName($input->getOption('class'));
         $plugin_name = $input->getOption('plugin-name');
         $plugin_file_name = $input->getOption('plugin-file-name');
diff --git a/vendor/drupal/console/src/Command/Generate/PluginValidationConstraintCommand.php b/vendor/drupal/console/src/Command/Generate/PluginValidationConstraintCommand.php
new file mode 100644
index 0000000000..63df5fc10a
--- /dev/null
+++ b/vendor/drupal/console/src/Command/Generate/PluginValidationConstraintCommand.php
@@ -0,0 +1,221 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Command\Generate\PluginValidationConstraintCommand.
+ */
+
+namespace Drupal\Console\Command\Generate;
+
+use Drupal\Console\Utils\Validator;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+use Drupal\Console\Generator\PluginValidationConstraintGenerator;
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Command\Shared\ConfirmationTrait;
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Core\Utils\ChainQueue;
+
+/**
+ * Class PluginValidationConstraintCommand
+ *
+ * @package Drupal\Console\Command\Generate
+ */
+class PluginValidationConstraintCommand extends Command
+{
+    use ModuleTrait;
+    use ConfirmationTrait;
+
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * @var PluginValidationConstraintGenerator
+     */
+    protected $generator;
+
+    /**
+     * @var StringConverter
+     */
+    protected $stringConverter;
+
+    /**
+     * @var Validator
+     */
+    protected $validator;
+
+    /**
+     * @var ChainQueue
+     */
+    protected $chainQueue;
+
+
+    /**
+     * PluginValidationConstraintCommand constructor.
+     *
+     * @param Manager                             $extensionManager
+     * @param PluginValidationConstraintGenerator $generator
+     * @param StringConverter                     $stringConverter
+     * @param Validator                           $validator
+     * @param ChainQueue                          $chainQueue
+     */
+    public function __construct(
+        Manager $extensionManager,
+        PluginValidationConstraintGenerator $generator,
+        StringConverter $stringConverter,
+        Validator $validator,
+        ChainQueue $chainQueue
+    ) {
+        $this->extensionManager = $extensionManager;
+        $this->generator = $generator;
+        $this->stringConverter = $stringConverter;
+        $this->validator = $validator;
+        $this->chainQueue = $chainQueue;
+        parent::__construct();
+    }
+
+    protected function configure()
+    {
+        $this
+            ->setName('generate:plugin:validationconstraint')
+            ->setDescription($this->trans('commands.generate.plugin.validationconstraint.description'))
+            ->setHelp($this->trans('commands.generate.plugin.validationconstraint.help'))
+            ->addOption(
+                'module',
+                null,
+                InputOption::VALUE_REQUIRED,
+                $this->trans('commands.common.options.module')
+            )
+            ->addOption(
+                'class',
+                null,
+                InputOption::VALUE_REQUIRED,
+                $this->trans('commands.generate.plugin.validationconstraint.options.class')
+            )
+            ->addOption(
+                'label',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.plugin.validationconstraint.options.label')
+            )
+            ->addOption(
+                'plugin-id',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.plugin.validationconstraint.options.plugin-id')
+            )
+            ->addOption(
+                'hook',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.plugin.validationconstraint.options.hook')
+            )
+            ->addOption(
+                'field-id',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.plugin.validationconstraint.options.field-id')
+            )
+            ->addOption(
+                'bundle',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.plugin.validationconstraint.options.bundle')
+            )
+            ->setAliases(['gpvc']);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        // @see use Drupal\Console\Command\Shared\ConfirmationTrait::confirmOperation
+        if (!$this->confirmOperation()) {
+            return 1;
+        }
+
+        $module = $input->getOption('module');
+        $className = $this->validator->validateClassName($input->getOption('class'));
+        $label = $input->getOption('label');
+        $pluginId = $input->getOption('plugin-id');
+        $hook = $input->getOption('hook');
+        $fieldId = $input->getOption('field-id');
+        $bundle = $input->getOption('bundle');
+
+        $this->generator->generate([
+            'module' => $module,
+            'class_name' => $className,
+            'label' => $label,
+            'plugin_id' => $pluginId,
+            'field_id' => $fieldId,
+            'hook' => $hook,
+            'bundle' => $bundle,
+        ]);
+
+        $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']);
+
+        return 0;
+    }
+
+    protected function interact(InputInterface $input, OutputInterface $output)
+    {
+        // --module option
+        $this->getModuleOption();
+
+        // --class option
+        $className = $input->getOption('class');
+        if (!$className) {
+            $className = $this->getIo()->ask(
+                $this->trans('commands.generate.plugin.validationconstraint.questions.class'),
+                'ExampleConstraint',
+                function ($className) {
+                    return $this->validator->validateClassName($className);
+                }
+            );
+            $input->setOption('class', $className);
+        }
+
+        // --plugin label option
+        $label = $input->getOption('label');
+        if (!$label) {
+            $label = $this->getIo()->ask(
+                $this->trans('commands.generate.plugin.validationconstraint.questions.label'),
+                $this->stringConverter->camelCaseToHuman($className)
+            );
+            $input->setOption('label', $label);
+        }
+
+        // --plugin-id option
+        $pluginId = $input->getOption('plugin-id');
+        if (!$pluginId) {
+            $pluginId = $this->getIo()->ask(
+                $this->trans('commands.generate.plugin.validationconstraint.questions.plugin-id'),
+                $this->stringConverter->camelCaseToUnderscore($className)
+            );
+            $input->setOption('plugin-id', $pluginId);
+        }
+
+        $hook = $this->getIo()->confirm(
+          $this->trans('commands.generate.plugin.validationconstraint.questions.hook'),
+          false
+        );
+        if (!empty($hook)) {
+            $fieldId = $this->getIo()->ask(
+              $this->trans('commands.generate.plugin.validationconstraint.questions.field-id')
+            );
+            $input->setOption('field-id', $fieldId);
+
+            $bundle = $this->getIo()->ask(
+              $this->trans('commands.generate.plugin.validationconstraint.questions.bundle')
+            );
+            $input->setOption('bundle', $bundle);
+        }
+        $input->setOption('hook', $hook);
+    }
+}
diff --git a/vendor/drupal/console/src/Command/Generate/PluginViewsFieldCommand.php b/vendor/drupal/console/src/Command/Generate/PluginViewsFieldCommand.php
index 7fdadeb60e..1af19256ab 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginViewsFieldCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginViewsFieldCommand.php
@@ -7,18 +7,19 @@
 
 namespace Drupal\Console\Command\Generate;
 
-use Drupal\Console\Utils\Validator;
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Input\InputOption;
-use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Generator\PluginViewsFieldGenerator;
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Command\Shared\ArrayInputTrait;
 use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Command\Shared\ConfirmationTrait;
-use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Generator\PluginViewsFieldGenerator;
 use Drupal\Console\Extension\Manager;
-use Drupal\Console\Core\Utils\ChainQueue;
 use Drupal\Console\Utils\Site;
-use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Utils\Validator;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
 
 /**
  * Class PluginViewsFieldCommand
@@ -27,8 +28,9 @@
  */
 class PluginViewsFieldCommand extends Command
 {
-    use ModuleTrait;
+    use ArrayInputTrait;
     use ConfirmationTrait;
+    use ModuleTrait;
 
     /**
      * @var Manager
@@ -63,12 +65,12 @@ class PluginViewsFieldCommand extends Command
     /**
      * PluginViewsFieldCommand constructor.
      *
-     * @param Manager                   $extensionManager
+     * @param Manager $extensionManager
      * @param PluginViewsFieldGenerator $generator
-     * @param Site                      $site
-     * @param StringConverter           $stringConverter
-     * @param Validator                 $validator
-     * @param ChainQueue                $chainQueue
+     * @param Site $site
+     * @param StringConverter $stringConverter
+     * @param Validator $validator
+     * @param ChainQueue $chainQueue
      */
     public function __construct(
         Manager $extensionManager,
@@ -100,22 +102,10 @@ protected function configure()
                 $this->trans('commands.common.options.module')
             )
             ->addOption(
-                'class',
+                'fields',
                 null,
-                InputOption::VALUE_REQUIRED,
-                $this->trans('commands.generate.plugin.views.field.options.class')
-            )
-            ->addOption(
-                'title',
-                null,
-                InputOption::VALUE_OPTIONAL,
-                $this->trans('commands.generate.plugin.views.field.options.title')
-            )
-            ->addOption(
-                'description',
-                null,
-                InputOption::VALUE_OPTIONAL,
-                $this->trans('commands.generate.plugin.views.field.options.description')
+                InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
+                $this->trans('commands.generate.plugin.views.field.options.fields')
             )
             ->setAliases(['gpvf']);
     }
@@ -130,18 +120,29 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
-        $class_name = $this->validator->validateClassName($input->getOption('class'));
-        $class_machine_name = $this->stringConverter->camelCaseToUnderscore($class_name);
-        $title = $input->getOption('title');
-        $description = $input->getOption('description');
+        $module = $this->validateModule($input->getOption('module'));
+        $fields = $input->getOption('fields');
+        $noInteraction = $input->getOption('no-interaction');
+
+        // Parse nested data.
+        if ($noInteraction) {
+            $fields = $this->explodeInlineArray($fields);
+        }
+
+        $function = $module . '_views_data';
+        $viewsFile = $module . '.views.inc';
+        if ($this->extensionManager->validateModuleFunctionExist($module, $function, $viewsFile)) {
+            $this->getIo()->warning(
+                sprintf(
+                    $this->trans('commands.generate.plugin.views.field.messages.views-data-already-implemented'),
+                    $module
+                )
+            );
+        }
 
         $this->generator->generate([
             'module' => $module,
-            'class_machine_name' => $class_machine_name,
-            'class_name' => $class_name,
-            'title' => $title,
-            'description' => $description,
+            'fields' => $fields,
         ]);
 
         $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']);
@@ -154,37 +155,52 @@ protected function interact(InputInterface $input, OutputInterface $output)
         // --module option
         $this->getModuleOption();
 
-        // --class option
-        $class_name = $input->getOption('class');
-        if (!$class_name) {
-            $class_name = $this->getIo()->ask(
-                $this->trans('commands.generate.plugin.views.field.questions.class'),
-                'CustomViewsField',
-                function ($class_name) {
-                    return $this->validator->validateClassName($class_name);
+        // --fields option
+        $fields = $input->getOption('fields');
+        if (empty($fields)) {
+            while (true) {
+                // --class option
+                $class_name = $this->getIo()->ask(
+                    $this->trans('commands.generate.plugin.views.field.questions.class'),
+                    'CustomViewsField',
+                    function ($class_name) {
+                        return $this->validator->validateClassName($class_name);
+                    }
+                );
+
+                // --title option
+                $title = $this->getIo()->ask(
+                    $this->trans('commands.generate.plugin.views.field.questions.title'),
+                    $this->stringConverter->camelCaseToHuman($class_name)
+                );
+
+                // --description option
+                $description = $this->getIo()->ask(
+                    $this->trans('commands.generate.plugin.views.field.questions.description'),
+                    $this->trans('commands.generate.plugin.views.field.questions.description_default')
+                );
+
+                array_push(
+                    $fields,
+                    [
+                        'title' => $title,
+                        'description' => $description,
+                        'class_name' => $class_name,
+                        'class_machine_name' => $this->stringConverter->camelCaseToUnderscore($class_name),
+                    ]
+                );
+
+                if (!$this->getIo()->confirm(
+                    $this->trans('commands.generate.plugin.views.field.questions.field-add'),
+                    true
+                )
+                ) {
+                    break;
                 }
-            );
-        }
-        $input->setOption('class', $class_name);
-
-        // --title option
-        $title = $input->getOption('title');
-        if (!$title) {
-            $title = $this->getIo()->ask(
-                $this->trans('commands.generate.plugin.views.field.questions.title'),
-                $this->stringConverter->camelCaseToHuman($class_name)
-            );
-            $input->setOption('title', $title);
-        }
-
-        // --description option
-        $description = $input->getOption('description');
-        if (!$description) {
-            $description = $this->getIo()->ask(
-                $this->trans('commands.generate.plugin.views.field.questions.description'),
-                $this->trans('commands.generate.plugin.views.field.questions.description_default')
-            );
-            $input->setOption('description', $description);
+            }
+        } else {
+            $fields = $this->explodeInlineArray($fields);
         }
+        $input->setOption('fields', $fields);
     }
 }
diff --git a/vendor/drupal/console/src/Command/Generate/PostUpdateCommand.php b/vendor/drupal/console/src/Command/Generate/PostUpdateCommand.php
index c58e970216..98a57db97c 100644
--- a/vendor/drupal/console/src/Command/Generate/PostUpdateCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PostUpdateCommand.php
@@ -108,7 +108,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $postUpdateName = $input->getOption('post-update-name');
 
         $this->validatePostUpdateName($module, $postUpdateName);
diff --git a/vendor/drupal/console/src/Command/Generate/RouteSubscriberCommand.php b/vendor/drupal/console/src/Command/Generate/RouteSubscriberCommand.php
index 1ca175b11c..2d17d25aaf 100644
--- a/vendor/drupal/console/src/Command/Generate/RouteSubscriberCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/RouteSubscriberCommand.php
@@ -108,7 +108,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $name = $input->getOption('name');
         $class = $this->validator->validateClassName($input->getOption('class'));
 
diff --git a/vendor/drupal/console/src/Command/Generate/ServiceCommand.php b/vendor/drupal/console/src/Command/Generate/ServiceCommand.php
index 3e387da35c..1b614803b2 100644
--- a/vendor/drupal/console/src/Command/Generate/ServiceCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/ServiceCommand.php
@@ -120,6 +120,12 @@ protected function configure()
                 InputOption::VALUE_OPTIONAL,
                 $this->trans('commands.generate.service.options.interface-name')
             )
+            ->addOption(
+                'logger-channel',
+                null,
+                InputOption::VALUE_NONE,
+                $this->trans('commands.generate.service.options.logger-channel')
+            )
             ->addOption(
                 'services',
                 null,
@@ -145,11 +151,12 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $name = $input->getOption('name');
         $class = $this->validator->validateClassName($input->getOption('class'));
         $interface = $input->getOption('interface');
         $interface_name = $input->getOption('interface-name');
+        $logger_channel = $input->getOption('logger-channel');
         $services = $input->getOption('services');
         $path_service = $input->getOption('path-service');
 
@@ -171,6 +178,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
             'name' => $name,
             'class' => $class,
             'interface' => $interface,
+            'interface_name' => $interface_name,
+            'logger_channel' => $logger_channel,
             'services' => $build_services,
             'path_service' => $path_service,
         ]);
@@ -230,6 +239,16 @@ function ($class) {
             $input->setOption('interface-name', $interface_name);
         }
 
+        // --logger-channel option
+        $logger_channel = $input->getOption('logger-channel');
+        if (!$logger_channel) {
+          $logger_channel = $this->getIo()->confirm(
+            $this->trans('commands.generate.service.questions.logger-channel'),
+            true
+          );
+          $input->setOption('logger-channel', $logger_channel);
+        }
+
         // --services option
         $services = $input->getOption('services');
         if (!$services) {
diff --git a/vendor/drupal/console/src/Command/Generate/ThemeCommand.php b/vendor/drupal/console/src/Command/Generate/ThemeCommand.php
index e6fc77b403..3d003550dd 100644
--- a/vendor/drupal/console/src/Command/Generate/ThemeCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/ThemeCommand.php
@@ -159,6 +159,12 @@ protected function configure()
                 InputOption::VALUE_OPTIONAL,
                 $this->trans('commands.generate.theme.options.base-theme')
             )
+            ->addOption(
+                'base-theme-regions',
+                null,
+                InputOption::VALUE_NONE,
+                $this->trans('commands.generate.theme.options.base-theme-regions')
+            )
             ->addOption(
                 'regions',
                 null,
@@ -188,15 +194,23 @@ protected function execute(InputInterface $input, OutputInterface $output)
         // Get the profile path and define a profile path if it is null
         // Check that it is an absolute path or otherwise create an absolute path using appRoot
         $theme_path = $input->getOption('theme-path');
-        $theme_path = $theme_path == null ? 'themes/custom' : $theme_path;
+        if(is_null($theme_path)) {
+            $uri = $this->site->getMultisiteName($input);
+            $defaultThemePath = 'themes/custom';
+            $theme_path = $this->site->multisiteMode($uri)? 'sites/'.$this->site->getMultisiteDir($uri).'/'.$defaultThemePath : $defaultThemePath;
+        }
         $theme_path = Path::isAbsolute($theme_path) ? $theme_path : Path::makeAbsolute($theme_path, $this->appRoot);
         $theme_path = $this->validator->validateModulePath($theme_path, true);
 
-        $machine_name = $this->validator->validateMachineName($input->getOption('machine-name'));
+        $machine_name = $input->getOption('machine-name') ?
+            $this->validator->validateMachineName($input->getOption('machine-name'))
+            :$this->stringConverter->createMachineName($theme);
+
         $description = $input->getOption('description');
         $core = $input->getOption('core');
         $package = $input->getOption('package');
         $base_theme = $input->getOption('base-theme');
+        $base_theme_regions = $input->getOption('base-theme-regions');
         $global_library = $input->getOption('global-library');
         $libraries = $input->getOption('libraries');
         $regions = $input->getOption('regions');
@@ -210,6 +224,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
             $breakpoints = $this->explodeInlineArray($breakpoints);
         }
 
+        $base_theme_path = $this->extensionManager->getTheme($base_theme);
+
         $this->generator->generate([
             'theme' => $theme,
             'machine_name' => $machine_name,
@@ -218,6 +234,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
             'description' => $description,
             'package' => $package,
             'base_theme' => $base_theme,
+            'base_theme_path' => is_null($base_theme_path) ? false : $base_theme_path->getRealPath(),
+            'base_theme_regions' => $base_theme_regions,
             'global_library' => $global_library,
             'libraries' => $libraries,
             'regions' => $regions,
@@ -242,12 +260,11 @@ protected function interact(InputInterface $input, OutputInterface $output)
         }
 
         if (!$theme) {
-            $validators = $this->validator;
             $theme = $this->getIo()->ask(
                 $this->trans('commands.generate.theme.questions.theme'),
                 '',
-                function ($theme) use ($validators) {
-                    return $validators->validateModuleName($theme);
+                function ($theme) {
+                    return $this->validator->validateModuleName($theme);
                 }
             );
             $input->setOption('theme', $theme);
@@ -265,8 +282,8 @@ function ($theme) use ($validators) {
             $machine_name = $this->getIo()->ask(
                 $this->trans('commands.generate.theme.questions.machine-name'),
                 $this->stringConverter->createMachineName($theme),
-                function ($machine_name) use ($validators) {
-                    return $validators->validateMachineName($machine_name);
+                function ($machine_name) {
+                    return $this->validator->validateMachineName($machine_name);
                 }
             );
             $input->setOption('machine-name', $machine_name);
@@ -274,10 +291,12 @@ function ($machine_name) use ($validators) {
 
         $theme_path = $input->getOption('theme-path');
         if (!$theme_path) {
+            $uri = $this->site->getMultisiteName($input);
+            $defaultThemePath = 'themes/custom';
             $theme_path = $this->getIo()->ask(
                 $this->trans('commands.generate.theme.questions.theme-path'),
-                'themes/custom',
-                function ($theme_path) use ($machine_name) {
+                $this->site->multisiteMode($uri)? 'sites/'.$this->site->getMultisiteDir($uri).'/'.$defaultThemePath : $defaultThemePath,
+                 function ($theme_path) use ($machine_name) {
                     $fullPath = Path::isAbsolute($theme_path) ? $theme_path : Path::makeAbsolute($theme_path, $this->appRoot);
                     $fullPath = $fullPath.'/'.$machine_name;
                     if (file_exists($fullPath)) {
diff --git a/vendor/drupal/console/src/Command/Generate/ThemeSettingCommand.php b/vendor/drupal/console/src/Command/Generate/ThemeSettingCommand.php
new file mode 100644
index 0000000000..0cd4957cc4
--- /dev/null
+++ b/vendor/drupal/console/src/Command/Generate/ThemeSettingCommand.php
@@ -0,0 +1,312 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Command\Generate\ThemeSettingCommand.
+ */
+
+namespace Drupal\Console\Command\Generate;
+
+use Drupal\Console\Command\Shared\ArrayInputTrait;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+use Drupal\Console\Generator\ThemeSettingGenerator;
+use Drupal\Console\Command\Shared\ConfirmationTrait;
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Utils\Site;
+use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Utils\Validator;
+use Drupal\Core\Extension\ThemeHandler;
+use Webmozart\PathUtil\Path;
+use Drupal\Console\Command\Shared\ThemeTrait;
+use Symfony\Component\Filesystem\Filesystem;
+use Drupal\Console\Core\Style\DrupalStyle;
+
+
+/**
+ * Class ThemeSettingCommand
+ *
+ * @package Drupal\Console\Command\Generate
+ */
+class ThemeSettingCommand extends Command
+{
+    use ConfirmationTrait;
+    use ArrayInputTrait;
+    use ThemeTrait;
+
+    /**
+     * @var Manager
+    */
+    protected $extensionManager;
+
+    /**
+     * @var ThemeSettingGenerator
+    */
+    protected $generator;
+
+    /**
+    * @var Validator
+    */
+    protected $validator;
+
+    /**
+     * @var string
+     */
+    protected $appRoot;
+
+    /**
+     * @var ThemeHandler
+     */
+    protected $themeHandler;
+
+    /**
+     * @var Site
+     */
+    protected $site;
+
+    /**
+     * @var StringConverter
+     */
+    protected $stringConverter;
+
+    /**
+     * ThemeSettingCommand constructor.
+     *
+     * @param Manager                $extensionManager
+     * @param ThemeSettingGenerator         $generator
+     * @param Validator              $validator
+     * @param $appRoot
+     * @param ThemeHandler           $themeHandler
+     * @param Site                   $site
+     * @param StringConverter        $stringConverter
+     */
+    public function __construct(
+        Manager $extensionManager,
+        ThemeSettingGenerator $generator,
+        Validator $validator,
+        $appRoot,
+        ThemeHandler $themeHandler,
+        Site $site,
+        StringConverter $stringConverter
+    ) {
+        $this->extensionManager = $extensionManager;
+        $this->generator = $generator;
+        $this->validator = $validator;
+        $this->appRoot = $appRoot;
+        $this->themeHandler = $themeHandler;
+        $this->site = $site;
+        $this->stringConverter = $stringConverter;
+        parent::__construct();
+    }
+
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this
+            ->setName('generate:theme:setting')
+            ->setDescription($this->trans('commands.generate.theme.setting.description'))
+            ->setHelp($this->trans('commands.generate.theme.setting.help'))
+            ->addOption(
+                'theme',
+                null,
+                InputOption::VALUE_REQUIRED,
+                $this->trans('commands.generate.theme.setting.options.theme')
+            )
+            ->addOption(
+                'theme-path',
+                null,
+                InputOption::VALUE_REQUIRED,
+                $this->trans('commands.generate.theme.setting.options.theme-path')
+            )
+            ->addOption(
+                'favicon',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.theme.setting.options.favicon')
+            )
+            ->addOption(
+                'comment-user-picture',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.theme.setting.options.comment-user-picture')
+            )
+            ->addOption(
+                'comment-user-verification',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.theme.setting.options.comment-user-verification')
+            )
+            ->addOption(
+                'node-user-picture',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.theme.setting.options.node-user-picture')
+            )
+            ->addOption(
+                'logo',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.theme.setting.options.logo')
+            )
+            ->addOption(
+                'merge-existing-file',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.theme.setting.options.merge-existing-file')
+            )
+            ->setAliases(['gts']);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $theme = $this->validator->validateModuleName($input->getOption('theme'));
+        $theme_path = $input->getOption('theme-path');
+        if (is_null($theme_path)) {
+            $uri = $this->site->getMultisiteName($input);
+            $defaultThemePath = 'themes/custom';
+            $theme_path = $this->site->multisiteMode($uri)? 'sites/'.$this->site->getMultisiteDir($uri).'/'.$defaultThemePath : $defaultThemePath;
+        }
+        $theme_path = Path::isAbsolute($theme_path) ? $theme_path : Path::makeAbsolute($theme_path, $this->appRoot);
+        $theme_path = $this->validator->validateModulePath($theme_path, true);
+
+        $favicon = $input->getOption('favicon');
+        $commentUserPicture = $input->getOption('comment-user-picture');
+        $commentUserVerification = $input->getOption('comment-user-verification');
+        $nodeUserPicture = $input->getOption('node-user-picture');
+        $logo = $input->getOption('logo');
+        $mergeExistingFile = $input->getOption('merge-existing-file');
+        $this->generator->setIo($this->getIo());
+        return $this->generator->generate( 
+            [
+            'theme' => $theme,
+            'theme_path' => $theme_path,
+            'favicon' => $favicon,
+            'commentUserPicture' => $commentUserPicture,
+            'commentUserVerification' => $commentUserVerification,
+            'nodeUserPicture' => $nodeUserPicture,
+            'logo' => $logo,
+            'merge-existing-file' => (bool)$mergeExistingFile
+            ]
+        );
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function interact(InputInterface $input, OutputInterface $output)
+    {
+        // --theme option
+        try {
+            $theme = $input->getOption('theme') ? $this->validator->validateModuleName($input->getOption('theme')) : null;
+        } catch (\Exception $error) {
+            $this->getIo()->error($error->getMessage());
+            return 1;   
+        }
+        if (!$theme) {
+            // @see Drupal\Console\Command\Shared\ThemeTrait::themeQuestion
+            $theme = $this->themeQuestion();
+            $theme_list = $this->extensionManager->discoverThemes()
+            ->showInstalled()
+            ->showNoCore()
+            ->getList();
+            $input->setOption('theme', $theme);
+            
+        }
+
+        // --theme-path option
+        $theme_path = $input->getOption('theme-path');
+        if (!$theme_path) {
+            $theme_path = $this->appRoot.'/'.$theme_list[$theme]->getPath();
+            $input->setOption('theme-path', $theme_path);
+        }
+
+        // --favicon option
+        $favicon = $input->getOption('favicon');
+        if (!$favicon) {
+            $favicon = $this->getIo()->choice(
+                $this->trans('commands.generate.theme.setting.questions.favicon'),
+                ['true', 'false'],
+                'true'
+            );
+            $input->setOption('favicon', $favicon);
+        }
+
+        // --comment-user-picture option
+        $commentUserPicture = $input->getOption('comment-user-picture');
+        if (!$commentUserPicture) {
+            $commentUserPicture = $this->getIo()->choice(
+                $this->trans('commands.generate.theme.setting.questions.comment-user-picture'),
+                ['true', 'false'],
+                'true'
+            );
+            $input->setOption('comment-user-picture', $commentUserPicture);
+        }
+
+        // --comment-user-verification option
+        $commentUserVerification = $input->getOption('comment-user-verification');
+        if (!$commentUserVerification) {
+            $commentUserVerification = $this->getIo()->choice(
+                $this->trans('commands.generate.theme.setting.questions.comment-user-verification'),
+                ['true', 'false'],
+                'true'
+            );
+            $input->setOption('comment-user-verification', $commentUserVerification);
+        }
+
+        // --node-user-picture option
+        $nodeUserPicture = $input->getOption('node-user-picture');
+        if (!$nodeUserPicture) {
+            $nodeUserPicture = $this->getIo()->choice(
+                $this->trans('commands.generate.theme.setting.questions.node-user-picture'),
+                ['true', 'false'],
+                'true'
+            );
+            $input->setOption('node-user-picture', $nodeUserPicture);
+        }
+
+        // --logo option
+        $logo = $input->getOption('logo');
+        if (!$logo) {
+            $logo = $this->getIo()->choice(
+                $this->trans('commands.generate.theme.setting.questions.logo'),
+                ['true', 'false'],
+                'true'
+            );
+            $input->setOption('logo', $logo);
+        }
+
+        // --merge-existing-file
+        $mergeExistingFile = $input->getOption('merge-existing-file');
+        if (!$mergeExistingFile) {
+            $file_path = $theme_path.'/config/install/'.$theme.'.settings.yml';
+            $filesystem = new Filesystem();
+            if ($filesystem->exists($file_path)) {
+                $data_cont = file_get_contents($file_path);
+                if (strlen($data_cont)>0) {
+                    $mergeExistingFile = $this->getIo()->choice(
+                        $this->trans('commands.generate.theme.setting.questions.merge-existing-file'),
+                        ['true', 'false'],
+                        'true'
+                    );
+                    $input->setOption('merge-existing-file', $mergeExistingFile);
+                } else {
+                    $input->setOption('merge-existing-file', 'false');
+                }
+            } else {
+                $input->setOption('merge-existing-file', 'false');
+            }
+        } else {
+            $input->setOption('merge-existing-file', 'false');
+        }
+        $io = new DrupalStyle($input, $output);
+        
+    }
+}
diff --git a/vendor/drupal/console/src/Command/Generate/TwigExtensionCommand.php b/vendor/drupal/console/src/Command/Generate/TwigExtensionCommand.php
index eb147859e8..024309bd94 100644
--- a/vendor/drupal/console/src/Command/Generate/TwigExtensionCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/TwigExtensionCommand.php
@@ -6,19 +6,19 @@
 
 namespace Drupal\Console\Command\Generate;
 
-use Drupal\Console\Core\Command\ContainerAwareCommand;
 use Drupal\Console\Command\Shared\ConfirmationTrait;
 use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Command\Shared\ServicesTrait;
+use Drupal\Console\Core\Command\ContainerAwareCommand;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Extension\Manager;
 use Drupal\Console\Generator\TwigExtensionGenerator;
+use Drupal\Console\Utils\Site;
 use Drupal\Console\Utils\Validator;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Extension\Manager;
-use Drupal\Console\Core\Utils\ChainQueue;
-use Drupal\Console\Utils\Site;
-use Drupal\Console\Core\Utils\StringConverter;
 
 /**
  * Class TwigExtensionCommand
@@ -133,7 +133,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $name = $input->getOption('name');
         $class = $this->validator->validateClassName($input->getOption('class'));
         $services = $input->getOption('services');
diff --git a/vendor/drupal/console/src/Command/Generate/UpdateCommand.php b/vendor/drupal/console/src/Command/Generate/UpdateCommand.php
index 1532800667..b91ea122cc 100644
--- a/vendor/drupal/console/src/Command/Generate/UpdateCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/UpdateCommand.php
@@ -107,7 +107,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $updateNumber = $input->getOption('update-n');
 
         $lastUpdateSchema = $this->getLastUpdate($module);
diff --git a/vendor/drupal/console/src/Command/Module/DownloadCommand.php b/vendor/drupal/console/src/Command/Module/DownloadCommand.php
index 3e8200ff43..27beb0b319 100644
--- a/vendor/drupal/console/src/Command/Module/DownloadCommand.php
+++ b/vendor/drupal/console/src/Command/Module/DownloadCommand.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\Console\Command\Module;
 
+use GuzzleHttp\Client;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Input\InputInterface;
@@ -14,25 +15,22 @@
 use Drupal\Console\Core\Command\Command;
 use Drupal\Console\Command\Shared\ProjectDownloadTrait;
 use Drupal\Console\Utils\DrupalApi;
-use GuzzleHttp\Client;
 use Drupal\Console\Extension\Manager;
 use Drupal\Console\Utils\Validator;
 use Drupal\Console\Utils\Site;
-use Drupal\Console\Core\Utils\ConfigurationManager;
-use Drupal\Console\Core\Utils\ShellProcess;
 
 class DownloadCommand extends Command
 {
     use ProjectDownloadTrait;
 
     /**
- * @var DrupalApi
-*/
+     * @var DrupalApi
+     */
     protected $drupalApi;
 
     /**
- * @var Client
-*/
+     * @var Client
+     */
     protected $httpClient;
 
     /**
@@ -41,29 +39,19 @@ class DownloadCommand extends Command
     protected $appRoot;
 
     /**
- * @var Manager
-*/
+     * @var Manager
+     */
     protected $extensionManager;
 
     /**
- * @var Validator
-*/
+     * @var Validator
+     */
     protected $validator;
 
     /**
- * @var ConfigurationManager
-*/
-    protected $configurationManager;
-
-    /**
- * @var ShellProcess
-*/
-    protected $shellProcess;
-
-    /**
-     * @var string
+     * @var Site
      */
-    protected $root;
+    protected $site;
 
     /**
      * DownloadCommand constructor.
@@ -74,9 +62,6 @@ class DownloadCommand extends Command
      * @param Manager              $extensionManager
      * @param Validator            $validator
      * @param Site                 $site
-     * @param ConfigurationManager $configurationManager
-     * @param ShellProcess         $shellProcess
-     * @param $root
      */
     public function __construct(
         DrupalApi $drupalApi,
@@ -84,10 +69,7 @@ public function __construct(
         $appRoot,
         Manager $extensionManager,
         Validator $validator,
-        Site $site,
-        ConfigurationManager $configurationManager,
-        ShellProcess $shellProcess,
-        $root
+        Site $site
     ) {
         $this->drupalApi = $drupalApi;
         $this->httpClient = $httpClient;
@@ -95,9 +77,6 @@ public function __construct(
         $this->extensionManager = $extensionManager;
         $this->validator = $validator;
         $this->site = $site;
-        $this->configurationManager = $configurationManager;
-        $this->shellProcess = $shellProcess;
-        $this->root = $root;
         parent::__construct();
     }
 
@@ -123,18 +102,6 @@ protected function configure()
                 InputOption::VALUE_NONE,
                 $this->trans('commands.module.download.options.latest')
             )
-            ->addOption(
-                'composer',
-                null,
-                InputOption::VALUE_NONE,
-                $this->trans('commands.module.install.options.composer')
-            )
-            ->addOption(
-                'unstable',
-                null,
-                InputOption::VALUE_NONE,
-                $this->trans('commands.module.download.options.unstable')
-            )
             ->setAliases(['mod']);
     }
 
@@ -143,7 +110,6 @@ protected function configure()
      */
     protected function interact(InputInterface $input, OutputInterface $output)
     {
-        $composer = $input->getOption('composer');
         $module = $input->getArgument('module');
 
         if (!$module) {
@@ -151,15 +117,13 @@ protected function interact(InputInterface $input, OutputInterface $output)
             $input->setArgument('module', $module);
         }
 
-        if (!$composer) {
-            $path = $input->getOption('path');
-            if (!$path) {
-                $path = $this->getIo()->ask(
-                    $this->trans('commands.module.download.questions.path'),
-                    'modules/contrib'
-                );
-                $input->setOption('path', $path);
-            }
+        $path = $input->getOption('path');
+        if (!$path) {
+            $path = $this->getIo()->ask(
+                $this->trans('commands.module.download.questions.path'),
+                'modules/contrib'
+            );
+            $input->setOption('path', $path);
         }
     }
 
@@ -171,82 +135,9 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $modules = $input->getArgument('module');
         $latest = $input->getOption('latest');
         $path = $input->getOption('path');
-        $composer = $input->getOption('composer');
-        $unstable = true;
-
-        if ($composer) {
-            foreach ($modules as $module) {
-                if (!$latest) {
-                    $versions = $this->drupalApi
-                        ->getPackagistModuleReleases($module, 10, $unstable);
-
-                    if (!$versions) {
-                        $this->getIo()->error(
-                            sprintf(
-                                $this->trans(
-                                    'commands.module.download.messages.no-releases'
-                                ),
-                                $module
-                            )
-                        );
-
-                        return 1;
-                    } else {
-                        $version = $this->getIo()->choice(
-                            sprintf(
-                                $this->trans(
-                                    'commands.site.new.questions.composer-release'
-                                ),
-                                $module
-                            ),
-                            $versions
-                        );
-                    }
-                } else {
-                    $versions = $this->drupalApi
-                        ->getPackagistModuleReleases($module, 10, $unstable);
-
-                    if (!$versions) {
-                        $this->getIo()->error(
-                            sprintf(
-                                $this->trans(
-                                    'commands.module.download.messages.no-releases'
-                                ),
-                                $module
-                            )
-                        );
-                        return 1;
-                    } else {
-                        $version = current(
-                            $this->drupalApi
-                                ->getPackagistModuleReleases($module, 1, $unstable)
-                        );
-                    }
-                }
-
-                // Register composer repository
-                $command = "composer config repositories.drupal composer https://packages.drupal.org/8";
-                $this->shellProcess->exec($command, $this->root);
-
-                $command = sprintf(
-                    'composer require drupal/%s:%s --prefer-dist --optimize-autoloader --sort-packages --update-no-dev',
-                    $module,
-                    $version
-                );
-
-                if ($this->shellProcess->exec($command, $this->root)) {
-                    $this->getIo()->success(
-                        sprintf(
-                            $this->trans('commands.module.download.messages.composer'),
-                            $module
-                        )
-                    );
-                }
-            }
-        } else {
-            $this->downloadModules($modules, $latest, $path);
-        }
 
-        return true;
+        $this->downloadModules($modules, $latest, $path);
+
+        return 1;
     }
 }
diff --git a/vendor/drupal/console/src/Command/Module/InstallCommand.php b/vendor/drupal/console/src/Command/Module/InstallCommand.php
index 5e164e6465..7383bbb28c 100644
--- a/vendor/drupal/console/src/Command/Module/InstallCommand.php
+++ b/vendor/drupal/console/src/Command/Module/InstallCommand.php
@@ -120,7 +120,7 @@ protected function configure()
                 'composer',
                 null,
                 InputOption::VALUE_NONE,
-                $this->trans('commands.module.uninstall.options.composer')
+                $this->trans('commands.module.install.options.composer')
             )
             ->setAliases(['moi']);
     }
@@ -148,67 +148,100 @@ protected function execute(InputInterface $input, OutputInterface $output)
 
         $this->site->loadLegacyFile('/core/includes/bootstrap.inc');
 
-        // check module's requirements
-        $this->moduleRequirement($module);
-
+        // When --composer is specified, build a command to Composer require
+        // all the needed modules in one go. This will just download the
+        // modules from the composer endpoint, not do any 'installation', in
+        // Drupal terminology.
         if ($composer) {
-            foreach ($module as $moduleItem) {
-                $command = sprintf(
-                    'composer show drupal/%s ',
-                    $moduleItem
-                );
-
-                $processBuilder = new ProcessBuilder([]);
-                $processBuilder->setWorkingDirectory($this->appRoot);
-                $processBuilder->setArguments(explode(" ", $command));
-                $process = $processBuilder->getProcess();
-                $process->setTty('true');
-                $process->run();
-
-                if ($process->isSuccessful()) {
-                    $this->getIo()->info(
-                        sprintf(
-                            $this->trans('commands.module.install.messages.download-with-composer'),
-                            $moduleItem
-                        )
-                    );
+            $composer_package_list = [];
+            $module_list = [];
+            foreach ($module as $item) {
+                // Decompose each module item passed on the command line into
+                // Composer-ready elements.
+                $temp = explode('/', $item);
+                if (count($temp) === 1) {
+                    $package_namespace = 'drupal';
+                    $package = $temp[0];
                 } else {
-                    $this->getIo()->error(
-                        sprintf(
-                            $this->trans('commands.module.install.messages.not-installed-with-composer'),
-                            $moduleItem
-                        )
-                    );
-                    throw new \RuntimeException($process->getErrorOutput());
+                    $package_namespace = $temp[0];
+                    $package = $temp[1];
                 }
-            }
+                $temp = explode(':', $package);
+                if (count($temp) === 1) {
+                    $package_constraint = null;
+                } else {
+                    $package = $temp[0];
+                    $package_constraint = $temp[1];
+                }
+
+                // Add the Composer argument.
+                $temp = "$package_namespace/$package";
+                if (isset($package_constraint)) {
+                    $temp .= ':' . $package_constraint;
+                }
+                $composer_package_list[] = $temp;
 
-            $unInstalledModules = $module;
-        } else {
-            $resultList = $this->downloadModules($module, $latest);
-
-            $invalidModules = $resultList['invalid'];
-            $unInstalledModules = $resultList['uninstalled'];
-
-            if ($invalidModules) {
-                foreach ($invalidModules as $invalidModule) {
-                    unset($module[array_search($invalidModule, $module)]);
-                    $this->getIo()->error(
-                        sprintf(
-                            $this->trans('commands.module.install.messages.invalid-name'),
-                            $invalidModule
-                        )
-                    );
+                // Add the module to the list of those to be Drupal-installed.
+                if ($package_namespace === 'drupal') {
+                    $module_list[] = $package;
                 }
             }
+            $module = $module_list;
 
-            if (!$unInstalledModules) {
-                $this->getIo()->warning($this->trans('commands.module.install.messages.nothing'));
+            // Run the Composer require command.
+            $command = array_merge(['composer', 'require'], $composer_package_list);
+            $this->getIo()->info('Executing... ' . implode(' ', $command));
+            $processBuilder = new ProcessBuilder([]);
+            $processBuilder->setWorkingDirectory($this->appRoot);
+            $processBuilder->setArguments($command);
+            $processBuilder->inheritEnvironmentVariables();
+            $process = $processBuilder->getProcess();
+            $process->setTty(true);
+            $process->run();
 
-                return 0;
+            if ($process->isSuccessful()) {
+                $this->getIo()->info(
+                    sprintf(
+                        $this->trans('commands.module.install.messages.download-with-composer'),
+                        implode(', ', $composer_package_list)
+                    )
+                );
+            } else {
+                $this->getIo()->error(
+                    sprintf(
+                        $this->trans('commands.module.install.messages.not-installed-with-composer'),
+                        implode(', ', $composer_package_list)
+                    )
+                );
+                throw new \RuntimeException($process->getErrorOutput());
+            }
+        }
+
+        // Build the list of modules to be installed, skipping those that are
+        // installed already.
+        $resultList = $this->downloadModules($module, $latest);
+        $invalidModules = $resultList['invalid'];
+        $unInstalledModules = $resultList['uninstalled'];
+
+        if ($invalidModules) {
+            foreach ($invalidModules as $invalidModule) {
+                unset($module[array_search($invalidModule, $module)]);
+                $this->getIo()->error(
+                    sprintf(
+                        $this->trans('commands.module.install.messages.invalid-name'),
+                        $invalidModule
+                    )
+                );
             }
         }
 
+        // If no modules need to be installed, warn and exit.
+        if (!$unInstalledModules) {
+            $this->getIo()->warning($this->trans('commands.module.install.messages.nothing'));
+            return 0;
+        }
+
+        // Install the needed modules.
         try {
             $this->getIo()->comment(
                 sprintf(
diff --git a/vendor/drupal/console/src/Command/Module/UninstallCommand.php b/vendor/drupal/console/src/Command/Module/UninstallCommand.php
old mode 100644
new mode 100755
index 5fc466bcfc..51014ce6c9
--- a/vendor/drupal/console/src/Command/Module/UninstallCommand.php
+++ b/vendor/drupal/console/src/Command/Module/UninstallCommand.php
@@ -7,19 +7,19 @@
 
 namespace Drupal\Console\Command\Module;
 
+use Drupal\Console\Core\Command\ContainerAwareCommand;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Command\Shared\ProjectDownloadTrait;
 use Drupal\Console\Extension\Manager;
+use Drupal\Console\Utils\Site;
+use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\Extension\ModuleInstallerInterface;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Core\Command\Command;
-use Drupal\Console\Command\Shared\ProjectDownloadTrait;
-use Drupal\Console\Utils\Site;
-use Drupal\Core\Extension\ModuleInstallerInterface;
-use Drupal\Console\Core\Utils\ChainQueue;
-use Drupal\Core\Config\ConfigFactoryInterface;
 
-class UninstallCommand extends Command
+class UninstallCommand extends ContainerAwareCommand
 {
     use ProjectDownloadTrait;
 
@@ -83,7 +83,7 @@ protected function configure()
             ->addArgument(
                 'module',
                 InputArgument::IS_ARRAY,
-                $this->trans('commands.module.uninstall.questions.module')
+                $this->trans('commands.module.uninstall.arguments.module')
             )
             ->addOption(
                 'force',
@@ -179,7 +179,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             }
 
             $dependencies = [];
-            while (list($module) = each($moduleList)) {
+            foreach ($moduleList as $module => $value ) {
                 foreach (array_keys($moduleData[$module]->required_by) as $dependency) {
                     if (isset($installedModules[$dependency]) && !isset($moduleList[$dependency]) && (!array_key_exists($dependency, $profiles))) {
                         $dependencies[] = $dependency;
diff --git a/vendor/drupal/console/src/Command/Module/UpdateCommand.php b/vendor/drupal/console/src/Command/Module/UpdateCommand.php
index 45b04a57a3..84a2823190 100644
--- a/vendor/drupal/console/src/Command/Module/UpdateCommand.php
+++ b/vendor/drupal/console/src/Command/Module/UpdateCommand.php
@@ -112,20 +112,20 @@ protected function execute(InputInterface $input, OutputInterface $output)
         }
 
         if (count($modules) > 1) {
-            $modules = " drupal/" . implode(" drupal/", $modules);
+            $modules = ' drupal/' . implode(' drupal/', $modules);
         } else {
-            $modules = " drupal/" . current($modules);
+            $modules = ' drupal/' . current($modules);
         }
 
         if ($composer) {
             // Register composer repository
-            $command = "composer config repositories.drupal composer https://packages.drupal.org/8";
+            $command = 'composer config repositories.drupal composer https://packages.drupal.org/8';
             $this->shellProcess->exec($command, $this->root);
 
             $command = 'composer update ' . $modules . ' --optimize-autoloader --prefer-dist --no-dev --root-reqs ';
 
             if ($simulate) {
-                $command .= " --dry-run";
+                $command .= ' --dry-run';
             }
 
             if ($this->shellProcess->exec($command, $this->root)) {
diff --git a/vendor/drupal/console/src/Command/Multisite/NewCommand.php b/vendor/drupal/console/src/Command/Multisite/NewCommand.php
index d7d053499d..c70eb616df 100644
--- a/vendor/drupal/console/src/Command/Multisite/NewCommand.php
+++ b/vendor/drupal/console/src/Command/Multisite/NewCommand.php
@@ -8,6 +8,7 @@
 namespace Drupal\Console\Command\Multisite;
 
 use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Utils\Validator;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
@@ -25,14 +26,21 @@ class NewCommand extends Command
 {
     protected $appRoot;
 
+    /**
+     * @var Validator
+     */
+    protected $validator;
+
     /**
      * DebugCommand constructor.
      *
      * @param $appRoot
+     * @param Validator $validator
      */
-    public function __construct($appRoot)
+    public function __construct($appRoot, Validator $validator)
     {
         $this->appRoot = $appRoot;
+        $this->validator = $validator;
         parent::__construct();
     }
 
@@ -80,6 +88,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
     {
         $this->fs = new Filesystem();
         $this->directory = $input->getArgument('directory');
+        $uri = $this->validator->validateUriName($input->getArgument('uri'));
 
         if (!$this->directory) {
             $this->getIo()->error($this->trans('commands.multisite.new.errors.subdir-empty'));
@@ -117,7 +126,6 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $uri = $input->getArgument('uri');
         try {
             $this->addToSitesFile($uri);
         } catch (\Exception $e) {
@@ -154,7 +162,7 @@ protected function addToSitesFile($uri)
             throw new FileNotFoundException($this->trans('commands.multisite.new.errors.sites-missing'));
         }
 
-        $sites_file_contents .= "\n\$sites['$this->directory'] = '$this->directory';";
+        $sites_file_contents .= "\n\$sites['$uri'] = '$this->directory';";
 
         try {
             $this->fs->dumpFile($this->appRoot . '/sites/sites.php', $sites_file_contents);
diff --git a/vendor/drupal/console/src/Command/Multisite/UpdateCommand.php b/vendor/drupal/console/src/Command/Multisite/UpdateCommand.php
index 44b4af025e..e7313d7aef 100644
--- a/vendor/drupal/console/src/Command/Multisite/UpdateCommand.php
+++ b/vendor/drupal/console/src/Command/Multisite/UpdateCommand.php
@@ -8,6 +8,7 @@
 namespace Drupal\Console\Command\Multisite;
 
 use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Utils\Site;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
@@ -23,14 +24,21 @@ class UpdateCommand extends Command
 {
     protected $appRoot;
 
+    /**
+    * @var Site
+    */
+    protected $site;
+
     /**
      * DebugCommand constructor.
      *
      * @param $appRoot
+     * @param Site $site
      */
-    public function __construct($appRoot)
+    public function __construct($appRoot, Site $site)
     {
         $this->appRoot = $appRoot;
+        $this->site = $site;
         parent::__construct();
     }
 
@@ -81,7 +89,7 @@ public function configure()
      */
     protected function interact(InputInterface $input, OutputInterface $output)
     {
-        $this->uri = parse_url($input->getParameterOption(['--uri', '-l'], 'default'), PHP_URL_HOST);
+        $this->uri = $this->site->getMultisiteName($input);
 
         $sites = $this->getMultisite($this->uri);
         if ($this->uri == "default") {
@@ -113,7 +121,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $this->fs = new Filesystem();
 
         if (empty($this->uri)) {
-            $uri =  parse_url($input->getParameterOption(['--uri', '-l'], 'default'), PHP_URL_HOST);
+            $uri =  $this->site->getMultisiteName($input);
             $sites = $this->getMultisite($uri);
             $this->uri = $sites[$uri];
         }
diff --git a/vendor/drupal/console/src/Command/Rest/DisableCommand.php b/vendor/drupal/console/src/Command/Rest/DisableCommand.php
index 8044367df6..5fabbd6b3f 100644
--- a/vendor/drupal/console/src/Command/Rest/DisableCommand.php
+++ b/vendor/drupal/console/src/Command/Rest/DisableCommand.php
@@ -13,8 +13,8 @@
 use Drupal\Console\Core\Command\Command;
 use Drupal\Console\Annotations\DrupalCommand;
 use Drupal\Console\Command\Shared\RestTrait;
-use Drupal\Core\Config\ConfigFactory;
 use Drupal\rest\Plugin\Type\ResourcePluginManager;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
 
 /**
  * @DrupalCommand(
@@ -27,9 +27,9 @@ class DisableCommand extends Command
     use RestTrait;
 
     /**
-     * @var ConfigFactory
+     * @var EntityTypeManagerInterface
      */
-    protected $configFactory;
+    protected $entityTypeManager;
 
     /**
      * @var ResourcePluginManager
@@ -39,14 +39,14 @@ class DisableCommand extends Command
     /**
      * DisableCommand constructor.
      *
-     * @param ConfigFactory         $configFactory
-     * @param ResourcePluginManager $pluginManagerRest
+     * @param EntityTypeManagerInterface $entityTypeManager
+     * @param ResourcePluginManager      $pluginManagerRest
      */
     public function __construct(
-        ConfigFactory $configFactory,
+        EntityTypeManagerInterface $entityTypeManager,
         ResourcePluginManager $pluginManagerRest
     ) {
-        $this->configFactory = $configFactory;
+        $this->entityTypeManager = $entityTypeManager;
         $this->pluginManagerRest = $pluginManagerRest;
         parent::__construct();
     }
@@ -68,10 +68,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
     {
         $resource_id = $input->getArgument('resource-id');
         $rest_resources = $this->getRestResources();
-        $rest_resources_ids = array_merge(
-            array_keys($rest_resources['enabled']),
-            array_keys($rest_resources['disabled'])
-        );
+        $rest_resources_ids = array_keys($rest_resources['enabled']);
 
         if (!$resource_id) {
             $resource_id = $this->getIo()->choice(
diff --git a/vendor/drupal/console/src/Command/Rest/EnableCommand.php b/vendor/drupal/console/src/Command/Rest/EnableCommand.php
index 93af9a64b9..b4829759f5 100644
--- a/vendor/drupal/console/src/Command/Rest/EnableCommand.php
+++ b/vendor/drupal/console/src/Command/Rest/EnableCommand.php
@@ -16,8 +16,7 @@
 use Drupal\Console\Command\Shared\RestTrait;
 use Drupal\rest\Plugin\Type\ResourcePluginManager;
 use Drupal\Core\Authentication\AuthenticationCollector;
-use Drupal\Core\Config\ConfigFactory;
-use Drupal\Core\Entity\EntityManager;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
 
 /**
  * @DrupalCommand(
@@ -29,6 +28,11 @@ class EnableCommand extends ContainerAwareCommand
 {
     use RestTrait;
 
+    /**
+     * @var EntityTypeManagerInterface
+     */
+    protected $entityTypeManager;
+
     /**
      * @var ResourcePluginManager $pluginManagerRest
      */
@@ -39,37 +43,21 @@ class EnableCommand extends ContainerAwareCommand
      */
     protected $authenticationCollector;
 
-    /**
-     * @var ConfigFactory
-     */
-    protected $configFactory;
-
-    /**
-     * The entity manager.
-     *
-     * @var EntityManager
-     */
-    protected $entityManager;
-
     /**
      * EnableCommand constructor.
      *
-     * @param ResourcePluginManager   $pluginManagerRest
-     * @param AuthenticationCollector $authenticationCollector
-     * @param ConfigFactory           $configFactory
-     * @param EntityManager           $entity_manager
-     *   The entity manager.
+     * @param EntityTypeManagerInterface $entityTypeManager
+     * @param ResourcePluginManager      $pluginManagerRest
+     * @param AuthenticationCollector    $authenticationCollector
      */
     public function __construct(
+        EntityTypeManagerInterface $entityTypeManager,
         ResourcePluginManager $pluginManagerRest,
-        AuthenticationCollector $authenticationCollector,
-        ConfigFactory $configFactory,
-        EntityManager $entity_manager
+        AuthenticationCollector $authenticationCollector
     ) {
+        $this->entityTypeManager = $entityTypeManager;
         $this->pluginManagerRest = $pluginManagerRest;
         $this->authenticationCollector = $authenticationCollector;
-        $this->configFactory = $configFactory;
-        $this->entityManager = $entity_manager;
         parent::__construct();
     }
 
@@ -82,7 +70,7 @@ protected function configure()
             ->addArgument(
                 'resource-id',
                 InputArgument::OPTIONAL,
-                $this->trans('commands.rest.debug.arguments.resource-id')
+                $this->trans('commands.rest.enable.arguments.resource-id')
             )
             ->setAliases(['ree']);
     }
@@ -91,10 +79,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
     {
         $resource_id = $input->getArgument('resource-id');
         $rest_resources = $this->getRestResources();
-        $rest_resources_ids = array_merge(
-            array_keys($rest_resources['enabled']),
-            array_keys($rest_resources['disabled'])
-        );
+        $rest_resources_ids = array_keys($rest_resources['disabled']);
+
         if (!$resource_id) {
             $resource_id = $this->getIo()->choiceNoList(
                 $this->trans('commands.rest.enable.arguments.resource-id'),
@@ -114,7 +100,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
 
         $methods = $plugin->availableMethods();
         $method = $this->getIo()->choice(
-            $this->trans('commands.rest.enable.arguments.methods'),
+            $this->trans('commands.rest.enable.messages.methods'),
             $methods
         );
         $this->getIo()->writeln(
@@ -122,12 +108,12 @@ protected function execute(InputInterface $input, OutputInterface $output)
         );
 
         $format = $this->getIo()->choice(
-            $this->trans('commands.rest.enable.arguments.formats'),
+            $this->trans('commands.rest.enable.messages.formats'),
             $this->container->getParameter('serializer.formats')
         );
 
         $this->getIo()->writeln(
-            $this->trans('commands.rest.enable.messages.selected-format') . ' ' . $format
+            $this->trans('commands.rest.enable.messages.selected-formats') . ' ' . $format
         );
 
         // Get Authentication Provider and generate the question
@@ -148,9 +134,9 @@ protected function execute(InputInterface $input, OutputInterface $output)
         );
 
         $format_resource_id = str_replace(':', '.', $resource_id);
-        $config = $this->entityManager->getStorage('rest_resource_config')->load($format_resource_id);
+        $config = $this->entityTypeManager->getStorage('rest_resource_config')->load($format_resource_id);
         if (!$config) {
-            $config = $this->entityManager->getStorage('rest_resource_config')->create(
+            $config = $this->entityTypeManager->getStorage('rest_resource_config')->create(
                 [
                 'id' => $format_resource_id,
                 'granularity' => RestResourceConfigInterface::METHOD_GRANULARITY,
diff --git a/vendor/drupal/console/src/Command/Router/RebuildCommand.php b/vendor/drupal/console/src/Command/Router/RebuildCommand.php
index 8fd4a197c1..d1fda0f0df 100644
--- a/vendor/drupal/console/src/Command/Router/RebuildCommand.php
+++ b/vendor/drupal/console/src/Command/Router/RebuildCommand.php
@@ -45,7 +45,12 @@ protected function execute(InputInterface $input, OutputInterface $output)
             $this->trans('commands.router.rebuild.messages.rebuilding')
         );
 
-        $this->routerBuilder->rebuild();
+        if(!$this->routerBuilder->rebuild()) {
+            $this->getIo()->error(
+                $this->trans('commands.router.rebuild.messages.error-rebuild')
+            );
+            return 1;
+        }
 
         $this->getIo()->success(
             $this->trans('commands.router.rebuild.messages.completed')
diff --git a/vendor/drupal/console/src/Command/Service/OverrideCommand.php b/vendor/drupal/console/src/Command/Service/OverrideCommand.php
new file mode 100644
index 0000000000..bde6ff603b
--- /dev/null
+++ b/vendor/drupal/console/src/Command/Service/OverrideCommand.php
@@ -0,0 +1,247 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\Console\Command\Service\OverrideCommand.
+ */
+namespace Drupal\Console\Command\Service;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+use Drupal\Component\Serialization\Yaml;
+use Drupal\Console\Core\Command\ContainerAwareCommand;
+use Drupal\Console\Core\Utils\ChainQueue;
+
+class OverrideCommand extends ContainerAwareCommand
+{
+    /**
+     * @var string
+     */
+    protected $appRoot;
+
+    /**
+     * @var ChainQueue
+     */
+    protected $chainQueue;
+
+    /**
+     * @var Directory
+     */
+    private $directory;
+
+    /**
+     * @var ServiceFile
+     */
+    private $serviceFile = '/services.yml';
+
+    /**
+     * OverrideCommand constructor.
+     *
+     * @param $appRoot,
+     * @param ChainQueue $chainQueue,
+     */
+    public function __construct(
+        $appRoot,
+        ChainQueue $chainQueue
+    ) {
+        $this->appRoot = $appRoot;
+        $this->chainQueue = $chainQueue;
+
+        $this->directory = sprintf(
+            '%s/%s',
+            $appRoot,
+            \Drupal::service('site.path')
+        );
+
+        parent::__construct();
+    }
+
+    protected function configure()
+    {
+        $this
+            ->setName('service:override')
+            ->setDescription($this->trans('commands.service.override.description'))
+            ->addArgument(
+                'name',
+                InputArgument::REQUIRED,
+                $this->trans('commands.service.override.arguments.name')
+            )
+            ->addOption(
+                'key',
+                null,
+                InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY,
+                $this->trans('commands.service.override.options.key')
+            )
+            ->addOption(
+                'value',
+                null,
+                InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY,
+                $this->trans('commands.service.override.options.value')
+            )
+            ->setAliases(['so']);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function interact(InputInterface $input, OutputInterface $output)
+    {
+        $name = $input->getArgument('name');
+        $services = $this->getServiceFileAsParameters();
+
+        if ($name) {
+            if (!in_array($name, array_keys($services['parameters']))) {
+                $this->getIo()->warning(
+                    sprintf(
+                        $this->trans('commands.service.override.messages.invalid-name'),
+                        $name
+                    )
+                );
+                $name = null;
+            }
+        } else {
+            $name = $this->getIo()->choiceNoList(
+                $this->trans('commands.service.override.questions.name'),
+                array_keys($services['parameters'])
+            );
+            $input->setArgument('name', $name);
+        }
+
+        $key = $input->getOption('key');
+        if (!$key) {
+            if (!$services['parameters'][$name]) {
+                $this->getIo()->newLine();
+                $this->getIo()->errorLite($this->trans('commands.config.override.messages.invalid-config-file'));
+                $this->getIo()->newLine();
+                return 0;
+            }
+
+            $service = $services['parameters'][$name];
+            $input->setOption('key', $this->getKeysFromServices($service));
+        }
+
+        $value = $input->getOption('value');
+        if (!$value) {
+            foreach ($input->getOption('key') as $name) {
+                $value[] = $this->getIo()->ask(
+                    sprintf(
+                        $this->trans('commands.config.override.questions.value'),
+                        $name
+                    )
+                );
+            }
+            $input->setOption('value', $value);
+        }
+    }
+
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $serviceName = $input->getArgument('name');
+        $keys = $input->getOption('key');
+        $values = $input->getOption('value');
+
+
+        $serviceOverrideResult = [];
+        foreach ($keys as $index => $key) {
+            $result = $this->processServicesFile(
+                $serviceName,
+                $key,
+                $values[$index]
+            );
+            $serviceOverrideResult = array_merge($serviceOverrideResult, $result);
+        }
+        $this->getIo()->info($this->trans('commands.service.override.messages.service-name'), false);
+        $this->getIo()->comment($serviceName);
+
+        $tableHeader = [
+            $this->trans('commands.service.override.messages.service-key'),
+            $this->trans('commands.service.override.messages.original'),
+            $this->trans('commands.service.override.messages.updated'),
+        ];
+        $tableRows = $serviceOverrideResult;
+        $this->getIo()->table($tableHeader, $tableRows);
+
+        $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'all']);
+    }
+
+    protected function processServicesFile($serviceName, $key, $value)
+    {
+        $services = $this->getServiceFileAsParameters();
+        $serviceFileName = $this->directory . $this->serviceFile;
+
+        if (is_bool($value)) {
+            $value = $value ? 'true' : 'false';
+        }
+
+        $defaultValue = $services['parameters'][$serviceName][$key];
+        if (is_bool($defaultValue)) {
+            $defaultValue = $defaultValue ? 'true' : 'false';
+        }
+
+        $result[] = [
+            'service-key' => $key,
+            'original' => $defaultValue,
+            'updated' => $value,
+        ];
+
+        $services['parameters'][$serviceName][$key] = $value;
+
+        if (!file_put_contents($serviceFileName, Yaml::encode($services))) {
+            $this->getIo()->error(
+                sprintf(
+                    '%s : %s/services.yml',
+                    $this->trans('commands.service.override.messages.error-writing-file'),
+                    $this->directory
+                )
+            );
+            return 1;
+        }
+
+        return $result;
+    }
+
+    private function getServiceFileAsParameters() {
+
+        $serviceFileName = $this->directory . $this->serviceFile;
+        if (!file_exists($serviceFileName)) {
+            // Copying default services
+            $defaultServicesFile = $this->appRoot . '/sites/default/default.services.yml';
+            if (!copy($defaultServicesFile, $serviceFileName)) {
+                $this->getIo()->error(
+                    sprintf(
+                        '%s: %s/services.yml',
+                        $this->trans('commands.service.override.messages.error-copying-file'),
+                        $this->directory
+                    )
+                );
+                return 1;
+            }
+        }
+
+        return Yaml::decode(file_get_contents($serviceFileName));
+    }
+
+    /**
+     * Allow to search a specific key to override.
+     *
+     * @param $service
+     * @param null $key
+     *
+     * @return array
+     */
+    private function getKeysFromServices($service, $key = null)
+    {
+        $choiceKey = $this->getIo()->choiceNoList(
+            $this->trans('commands.service.override.questions.key'),
+            array_keys($service)
+        );
+
+        $key = is_null($key) ? $choiceKey:$key.'.'.$choiceKey;
+
+        if(is_array($service[$choiceKey])){
+            return $this->getKeysFromConfig($service[$choiceKey], $key);
+        }
+
+        return [$key];
+    }
+}
diff --git a/vendor/drupal/console/src/Command/Shared/ArrayInputTrait.php b/vendor/drupal/console/src/Command/Shared/ArrayInputTrait.php
index a6a016170e..c4615304a9 100644
--- a/vendor/drupal/console/src/Command/Shared/ArrayInputTrait.php
+++ b/vendor/drupal/console/src/Command/Shared/ArrayInputTrait.php
@@ -30,7 +30,7 @@ public function explodeInlineArray($inlineInputs)
             $parameters = [];
             foreach ($explodeInput as $inlineParameter) {
                 $inlineParameter = trim($inlineParameter);
-                list($key, $value) = explode(':', $inlineParameter);
+                list($key, $value) = explode('":"', $inlineParameter);
                 $key = rtrim(ltrim($key, '"'), '"');
                 $value = rtrim(ltrim($value, '"'), '"');
                 if (!empty($value)) {
diff --git a/vendor/drupal/console/src/Command/Shared/ConnectTrait.php b/vendor/drupal/console/src/Command/Shared/ConnectTrait.php
index c4eff2153b..1b2e93f476 100644
--- a/vendor/drupal/console/src/Command/Shared/ConnectTrait.php
+++ b/vendor/drupal/console/src/Command/Shared/ConnectTrait.php
@@ -11,36 +11,26 @@
 
 trait ConnectTrait
 {
-    protected $supportedDrivers = ['mysql','pgsql'];
+    protected $supportedDrivers = ['mysql', 'pgsql', 'sqlite'];
 
-    public function resolveConnection($database = 'default')
+    public function resolveConnection($key = 'default', $target = 'default')
     {
-        $connectionInfo = Database::getConnectionInfo();
-
-        if (!$connectionInfo || !isset($connectionInfo[$database])) {
-            $this->getIo()->error(
-                sprintf(
-                    $this->trans('commands.database.connect.messages.database-not-found'),
-                    $database
-                )
-            );
-
-            return null;
+        $connectionInfo = Database::getConnectionInfo($key);
+        if (empty($connectionInfo[$target])) {
+            throw new \Exception(sprintf(
+                $this->trans('commands.database.connect.messages.database-not-found'),
+                $key,
+                $target
+            ));
         }
-
-        $databaseConnection = $connectionInfo[$database];
-        if (!in_array($databaseConnection['driver'], $this->supportedDrivers)) {
-            $this->getIo()->error(
-                sprintf(
-                    $this->trans('commands.database.connect.messages.database-not-supported'),
-                    $databaseConnection['driver']
-                )
-            );
-
-            return null;
+        else if (!in_array($connectionInfo[$target]['driver'], $this->supportedDrivers)) {
+            throw new \Exception(sprintf(
+                $this->trans('commands.database.connect.messages.database-not-supported'),
+                $connectionInfo[$target]['driver']
+            ));
         }
 
-        return $databaseConnection;
+        return $connectionInfo[$target];
     }
 
     public function getRedBeanConnection($database = 'default')
@@ -66,4 +56,28 @@ public function getRedBeanConnection($database = 'default')
 
         return null;
     }
-}
+
+    public function getConnectionString($databaseConnection) {
+        return sprintf(
+          '%s -A --database=%s --user=%s --password=%s --host=%s --port=%s',
+          $databaseConnection['driver'],
+          $databaseConnection['database'],
+          $databaseConnection['username'],
+          $databaseConnection['password'],
+          $databaseConnection['host'],
+          $databaseConnection['port']
+        );
+    }
+
+    public function escapeConnection($databaseConnection) {
+        $settings = [
+          'driver', 'database', 'username', 'password', 'host', 'port'
+        ];
+
+        foreach ($settings as $setting) {
+            $databaseConnection[$setting] = $databaseConnection[$setting];
+        }
+
+        return $databaseConnection;
+    }
+}
\ No newline at end of file
diff --git a/vendor/drupal/console/src/Command/Shared/EventsTrait.php b/vendor/drupal/console/src/Command/Shared/EventsTrait.php
index bb8ce10ea0..fee9c205f7 100644
--- a/vendor/drupal/console/src/Command/Shared/EventsTrait.php
+++ b/vendor/drupal/console/src/Command/Shared/EventsTrait.php
@@ -37,9 +37,10 @@ public function eventsQuestion()
             }
 
             $callbackSuggestion = str_replace('.', '_', $event);
+
             $callback = $this->getIo()->ask(
                 $this->trans('commands.generate.event.subscriber.questions.callback-name'),
-                $callbackSuggestion
+                $this->stringConverter->underscoreToCamelCase($callbackSuggestion)
             );
 
             $eventCollection[$event] = $callback;
diff --git a/vendor/drupal/console/src/Command/Shared/ExportTrait.php b/vendor/drupal/console/src/Command/Shared/ExportTrait.php
index 78e6faf6bc..e8abf4b060 100644
--- a/vendor/drupal/console/src/Command/Shared/ExportTrait.php
+++ b/vendor/drupal/console/src/Command/Shared/ExportTrait.php
@@ -44,8 +44,8 @@ protected function getConfiguration($configName, $uuid = false, $hash = false, $
     }
 
     /**
-     * @param string      $directory
-     * @param string      $message
+     * @param string $directory
+     * @param string $message
      */
     protected function exportConfig($directory, $message)
     {
@@ -61,7 +61,7 @@ protected function exportConfig($directory, $message)
                 $fileName
             );
 
-            $this->getIo()->writeln('- ' . $configFile);
+            $this->getIo()->writeln("- $configFile");
 
             // Create directory if doesn't exist
             if (!file_exists($directory)) {
@@ -76,8 +76,8 @@ protected function exportConfig($directory, $message)
     }
 
     /**
-     * @param string      $moduleName
-     * @param string      $message
+     * @param string $moduleName
+     * @param string $message
      */
     protected function exportConfigToModule($moduleName, $message)
     {
@@ -104,7 +104,7 @@ protected function exportConfigToModule($moduleName, $message)
                 $fileName
             );
 
-            $this->getIo()->info('- ' . $configFile);
+            $this->getIo()->writeln("- $configFile");
 
             // Create directory if doesn't exist
             if (!file_exists($configDirectory)) {
@@ -116,6 +116,8 @@ protected function exportConfigToModule($moduleName, $message)
                 $yamlConfig
             );
         }
+
+        $this->configExport = [];
     }
 
     protected function fetchDependencies($config, $type = 'config')
@@ -127,13 +129,17 @@ protected function fetchDependencies($config, $type = 'config')
         return null;
     }
 
-    protected function resolveDependencies($dependencies, $optional = false)
+    protected function resolveDependencies($dependencies, $optional = false, $uuid = false, $hash = false)
     {
         foreach ($dependencies as $dependency) {
             if (!array_key_exists($dependency, $this->configExport)) {
-                $this->configExport[$dependency] = ['data' => $this->getConfiguration($dependency), 'optional' => $optional];
+                $this->configExport[$dependency] = [
+                    'data' => $this->getConfiguration($dependency, $uuid, $hash),
+                    'optional' => $optional
+                ];
+
                 if ($dependencies = $this->fetchDependencies($this->configExport[$dependency], 'config')) {
-                    $this->resolveDependencies($dependencies, $optional);
+                    $this->resolveDependencies($dependencies, $optional, $uuid, $hash);
                 }
             }
         }
@@ -142,7 +148,7 @@ protected function resolveDependencies($dependencies, $optional = false)
     protected function exportModuleDependencies($module, $dependencies)
     {
         $module = $this->extensionManager->getModule($module);
-        $info_yaml = $module->info;
+        $info_yaml = Yaml::decode(file_get_contents($module->getPathname(), true));
 
         if (empty($info_yaml['dependencies'])) {
             $info_yaml['dependencies'] = $dependencies;
@@ -161,13 +167,136 @@ protected function exportModuleDependencies($module, $dependencies)
 
             foreach ($dependencies as $dependency) {
                 $this->getIo()->info(
-                    '   [-] ' . $dependency
+                    "   [-] $dependency"
                 );
             }
         } else {
-            $this->getIo()->error($this->trans('commands.site.mode.messages.error-writing-file') . ': ' . $this->getApplication()->getSite()->getModuleInfoFile($module));
+            $this->getIo()->error("{$this->trans('commands.site.mode.messages.error-writing-file')}: {$this->getApplication()->getSite()->getModuleInfoFile($module)}");
 
             return [];
         }
     }
+
+    protected function getFields(
+        $bundle,
+        $optional = false,
+        $removeUuid = false,
+        $removeHash = false
+    ) {
+
+        $fields_definition = $this->entityTypeManager->getDefinition('field_config');
+
+        $fields_storage = $this->entityTypeManager->getStorage('field_config');
+        foreach ($fields_storage->loadMultiple() as $field) {
+            $field_name = "{$fields_definition->getConfigPrefix()}.{$field->id()}";
+            $field_name_config = $this->getConfiguration($field_name, $removeUuid,
+                $removeHash);
+            // Only select fields related with content type
+            if ($field_name_config['bundle'] == $bundle) {
+                $this->configExport[$field_name] = [
+                    'data' => $field_name_config,
+                    'optional' => $optional,
+                ];
+                // Include dependencies in export files
+                if ($dependencies = $this->fetchDependencies($field_name_config,
+                    'config')) {
+                    $this->resolveDependencies($dependencies, $optional, $removeUuid, $removeHash);
+                }
+            }
+        }
+    }
+
+    protected function getBasefieldOverrideFields(
+        $bundle = null,
+        $optional = false,
+        $removeUuid = false,
+        $removeHash = false,
+        $collection = ''
+    ) {
+        $collection_storage = $this->storage->createCollection($collection);
+        foreach ($collection_storage->listAll() as $name) {
+            if(strpos($name, "core.base_field_override.node") !== false) {
+                $configData = $collection_storage->read($name);
+                if ($removeUuid) {
+                    unset($configData['uuid']);
+                }
+                if ($removeHash) {
+                    unset($configData['_core']['default_config_hash']);
+                    if (empty($configData['_core'])) {
+                        unset($configData['_core']);
+                    }
+                }
+
+                if ($configData['bundle'] == $bundle) {
+                    $this->configExport["$name.yml"] = [
+                        'data' => $configData,
+                        'optional' => $optional,
+                    ];
+                    // Include dependencies in export files
+                    if ($dependencies = $this->fetchDependencies($configData,
+                        'config')) {
+                        $this->resolveDependencies($dependencies, $optional, $removeUuid, $removeHash);
+                    }
+                }
+            }
+        }
+    }
+
+    protected function getFormDisplays(
+        $bundle,
+        $optional = false,
+        $removeUuid = false,
+        $removeHash = false
+    ) {
+        $arr = [];
+
+        $form_display_definition = $this->entityTypeManager->getDefinition('entity_form_display');
+        $form_display_storage = $this->entityTypeManager->getStorage('entity_form_display');
+        foreach ($form_display_storage->loadMultiple() as $form_display) {
+            $form_display_name = "{$form_display_definition->getConfigPrefix()}.{$form_display->id()}";
+            $form_display_name_config = $this->getConfiguration($form_display_name,
+                $removeUuid, $removeHash);
+
+            $arr[$form_display_name_config['bundle']] = $form_display_name_config['bundle'];
+            // Only select fields related with content type
+            if ($form_display_name_config['bundle'] == $bundle) {
+                $this->configExport[$form_display_name] = [
+                    'data' => $form_display_name_config,
+                    'optional' => $optional,
+                ];
+                // Include dependencies in export files
+                if ($dependencies = $this->fetchDependencies($form_display_name_config,
+                    'config')) {
+                    $this->resolveDependencies($dependencies, $optional, $removeUuid, $removeHash);
+                }
+            }
+        }
+    }
+
+    protected function getViewDisplays(
+        $bundle,
+        $optional = false,
+        $removeUuid = false,
+        $removeHash = false
+    ) {
+        $view_display_definition = $this->entityTypeManager->getDefinition('entity_view_display');
+        $view_display_storage = $this->entityTypeManager->getStorage('entity_view_display');
+        foreach ($view_display_storage->loadMultiple() as $view_display) {
+            $view_display_name = "{$view_display_definition->getConfigPrefix()}.{$view_display->id()}";
+            $view_display_name_config = $this->getConfiguration($view_display_name,
+                $removeUuid, $removeHash);
+            // Only select fields related with content type
+            if ($view_display_name_config['bundle'] == $bundle) {
+                $this->configExport[$view_display_name] = [
+                    'data' => $view_display_name_config,
+                    'optional' => $optional,
+                ];
+                // Include dependencies in export files
+                if ($dependencies = $this->fetchDependencies($view_display_name_config,
+                    'config')) {
+                    $this->resolveDependencies($dependencies, $optional, $removeUuid, $removeHash);
+                }
+            }
+        }
+    }
 }
diff --git a/vendor/drupal/console/src/Command/Shared/MigrationTrait.php b/vendor/drupal/console/src/Command/Shared/MigrationTrait.php
index 2edd6a7d95..f3c97ef51a 100644
--- a/vendor/drupal/console/src/Command/Shared/MigrationTrait.php
+++ b/vendor/drupal/console/src/Command/Shared/MigrationTrait.php
@@ -9,7 +9,6 @@
 
 use Drupal\Core\Database\Connection;
 use Drupal\Core\Database\Database;
-use Symfony\Component\Console\Input\InputInterface;
 
 /**
  * Class MigrationTrait
diff --git a/vendor/drupal/console/src/Command/Shared/ModuleTrait.php b/vendor/drupal/console/src/Command/Shared/ModuleTrait.php
index a85db71ef2..8bc1edef5e 100644
--- a/vendor/drupal/console/src/Command/Shared/ModuleTrait.php
+++ b/vendor/drupal/console/src/Command/Shared/ModuleTrait.php
@@ -51,43 +51,12 @@ public function moduleQuestion($showProfile = true)
         return $module;
     }
 
-    /**
-     * Verify that install requirements for a list of modules are met.
-     *
-     * @param string[]    $module
-     *   List of modules to verify.
-     *
-     * @throws \Exception
-     *   When one or more requirements are not met.
-     */
-    public function moduleRequirement(array $module)
-    {
-        // TODO: Module dependencies should also be checked
-        // for unmet requirements recursively.
-        $fail = false;
-        foreach ($module as $module_name) {
-            module_load_install($module_name);
-            if ($requirements = \Drupal::moduleHandler()->invoke($module_name, 'requirements', ['install'])) {
-                foreach ($requirements as $requirement) {
-                    if (isset($requirement['severity']) && $requirement['severity'] == REQUIREMENT_ERROR) {
-                        $this->getIo()->info("Module '{$module_name}' cannot be installed: " . $requirement['title'] . ' | ' . $requirement['value']);
-                        $fail = true;
-                    }
-                }
-            }
-        }
-        if ($fail) {
-            throw new \Exception("Some module install requirements are not met.");
-        }
-    }
-
     /**
      * Get module name from user.
      *
      * @return mixed|string
      *   Module name.
-     * @throws \Exception
-     *   When module is not found.
+
      */
     public function getModuleOption()
     {
@@ -98,19 +67,35 @@ public function getModuleOption()
             $module = $this->moduleQuestion();
             $input->setOption('module', $module);
         } else {
-            $missing_modules = $this->validator->getMissingModules([$module]);
-            if ($missing_modules) {
-                throw new \Exception(
-                    sprintf(
-                        $this->trans(
-                            'commands.module.download.messages.no-releases'
-                        ),
-                        $module
-                    )
-                );
-            }
+            $this->validateModule($module);
         }
 
         return $module;
     }
+
+    /**
+     * Validate module.
+     *
+     * @param string $module
+     *   Module name.
+     * @return string
+     *   Module name.
+     *
+     * @throws \Exception
+     *   When module is not found.
+     */
+    public function validateModule($module) {
+        $missing_modules = $this->validator->getMissingModules([$module]);
+        if ($missing_modules) {
+            throw new \Exception(
+                sprintf(
+                    $this->trans(
+                        'commands.module.download.messages.no-releases'
+                    ),
+                    $module
+                )
+            );
+        }
+        return $module;
+    }
 }
diff --git a/vendor/drupal/console/src/Command/Shared/ProjectDownloadTrait.php b/vendor/drupal/console/src/Command/Shared/ProjectDownloadTrait.php
index 88b5cff6e8..c0eb841afe 100644
--- a/vendor/drupal/console/src/Command/Shared/ProjectDownloadTrait.php
+++ b/vendor/drupal/console/src/Command/Shared/ProjectDownloadTrait.php
@@ -37,7 +37,7 @@ public function modulesQuestion()
                 true
             );
 
-            if (empty($moduleName) && is_numeric($moduleName)) {
+            if (empty($moduleName) || is_numeric($moduleName)) {
                 break;
             }
 
@@ -69,7 +69,7 @@ public function modulesUninstallQuestion()
                 true
             );
 
-            if (empty($moduleName) || is_numeric($modules)) {
+            if (empty($moduleName) || is_numeric($moduleName)) {
                 break;
             }
 
@@ -128,6 +128,49 @@ private function downloadModules($modules, $latest, $path = null, $resultList =
 
         return $this->downloadModules($dependencies, $latest, $path, $resultList);
     }
+    
+    private function downloadThemes($themes, $latest, $path = null, $resultList = [])
+    {
+        if (!$resultList) {
+            $resultList = [
+              'invalid' => [],
+              'uninstalled' => [],
+              'dependencies' => []
+            ];
+        }
+        drupal_static_reset('system_rebuild_module_data');
+
+        $missingThemes = $this->validator->getMissingThemes($themes);
+
+        $invalidModules = [];
+        if ($missingThemes) {
+            $this->getIo()->info(
+                sprintf(
+                    $this->trans('commands.theme.install.messages.theme-missing'),
+                    implode(', ', $missingThemes)
+                )
+            );
+            foreach ($missingThemes as $missingTheme) {
+                $version = $this->releasesQuestion($missingTheme, $latest);
+                if ($version) {
+                    $this->downloadProject($missingTheme, $version, 'theme', $path);
+                } else {
+                    $invalidModules[] = $missingTheme;
+                    unset($themes[array_search($missingTheme, $themes)]);
+                }
+                $this->extensionManager->discoverModules();
+            }
+        }
+        $this->themeHandler->install($themes);
+
+        $unInstalledThemes = $this->validator->getUninstalledThemes($themes);
+        
+        if (!$unInstalledThemes) {
+            return 0;
+        }else{
+            return $this->setInfoMessage('commands.theme.install.messages.theme-success', $missingThemes);
+        }
+    }
 
     protected function calculateDependencies($modules)
     {
@@ -166,7 +209,7 @@ public function downloadProject($project, $version, $type, $path = null)
 
         $this->getIo()->comment(
             sprintf(
-                $this->trans('commands.'.$commandKey.'.messages.downloading'),
+                $this->trans('commands.' . $commandKey . '.messages.downloading'),
                 $project,
                 $version
             )
@@ -201,7 +244,7 @@ public function downloadProject($project, $version, $type, $path = null)
             }
 
             $zippy = Zippy::load();
-            if (PHP_OS === "WIN32" || PHP_OS === "WINNT") {
+            if (PHP_OS === 'WIN32' || PHP_OS === 'WINNT') {
                 $container = AdapterContainer::load();
                 $container['Drupal\\Console\\Zippy\\Adapter\\TarGzGNUTarForWindowsAdapter'] = function ($container) {
                     return TarGzGNUTarForWindowsAdapter::newInstance(
@@ -263,17 +306,17 @@ public function releasesQuestion($project, $latest = false, $stable = false)
 
         $this->getIo()->comment(
             sprintf(
-                $this->trans('commands.'.$commandKey.'.messages.getting-releases'),
+                $this->trans('commands.' . $commandKey . '.messages.getting-releases'),
                 implode(',', [$project])
             )
         );
 
-        $releases = $this->drupalApi->getProjectReleases($project, $latest?1:15, $stable);
+        $releases = $this->drupalApi->getProjectReleases($project, $latest? 1 : 15, $stable);
 
         if (!$releases) {
             $this->getIo()->error(
                 sprintf(
-                    $this->trans('commands.'.$commandKey.'.messages.no-releases'),
+                    $this->trans('commands.' . $commandKey . '.messages.no-releases'),
                     implode(',', [$project])
                 )
             );
@@ -286,7 +329,7 @@ public function releasesQuestion($project, $latest = false, $stable = false)
         }
 
         $version = $this->getIo()->choice(
-            $this->trans('commands.'.$commandKey.'.messages.select-release'),
+            $this->trans('commands.' . $commandKey . '.messages.select-release'),
             $releases
         );
 
@@ -303,7 +346,7 @@ private function getExtractPath($type)
         case 'module':
             return 'modules/contrib';
         case 'theme':
-            return 'themes';
+            return 'themes/contrib';
         case 'profile':
             return 'profiles';
         case 'core':
diff --git a/vendor/drupal/console/src/Command/Shared/RestTrait.php b/vendor/drupal/console/src/Command/Shared/RestTrait.php
index a174d028cf..4470c25b52 100644
--- a/vendor/drupal/console/src/Command/Shared/RestTrait.php
+++ b/vendor/drupal/console/src/Command/Shared/RestTrait.php
@@ -49,8 +49,8 @@ public function getRestResources($rest_status = false)
 
     public function getRestDrupalConfig()
     {
-        if ($this->configFactory) {
-            return $this->configFactory->get('rest.settings')->get('resources') ?: [];
+        if ($this->entityTypeManager) {
+            return $this->entityTypeManager->getStorage('rest_resource_config')->loadMultiple() ?: [];
         }
 
         return null;
diff --git a/vendor/drupal/console/src/Command/Shared/ThemeTrait.php b/vendor/drupal/console/src/Command/Shared/ThemeTrait.php
new file mode 100644
index 0000000000..83ef6a83d5
--- /dev/null
+++ b/vendor/drupal/console/src/Command/Shared/ThemeTrait.php
@@ -0,0 +1,88 @@
+<?php
+
+namespace Drupal\Console\Command\Shared;
+
+/**
+ * Class ThemeTrait
+ *
+ * @package Drupal\Console\Command
+ */
+trait ThemeTrait
+{
+    /**
+     * Ask the user to choose a theme.
+     * 
+     * @throws \Exception
+     *   When no modules are found.
+     *
+     * @return string
+     */
+    public function themeQuestion()
+    {
+        $themes = $this->extensionManager->discoverThemes()
+            ->showInstalled()
+            ->showNoCore()
+            ->getList(true);
+
+        if (empty($themes)) {
+            throw new \Exception('No themes installed available');
+        }
+
+        $theme = $this->getIo()->choiceNoList(
+            $this->trans('commands.common.questions.theme'),
+            $themes
+        );
+
+        return $theme;
+    }
+
+    /**
+     * Get theme name from user.
+     *
+     * @return mixed|string
+     *   Theme name.
+
+     */
+    public function getThemeOption()
+    {
+        $input = $this->getIo()->getInput();
+        $theme = $input->getOption('theme');
+        if (!$theme) {
+            // @see Drupal\Console\Command\Shared\ThemeTrait::themeQuestion
+            $theme = $this->themeQuestion();
+            $input->setOption('theme', $theme);
+        } else {
+            $this->validatetheme($theme);
+        }
+
+        return $theme;
+    }
+
+    /**
+     * Validate theme.
+     *
+     * @param string $theme
+     *   Theme name.
+     * @return string
+     *   Theme name.
+     *
+     * @throws \Exception
+     *   When theme is not found.
+     */
+    public function validateTheme($theme)
+    {
+        $missing_themes = $this->validator->getMissingThemes([$theme]);
+        if ($missing_themes) {
+            throw new \Exception(
+                sprintf(
+                    $this->trans(
+                        'commands.common.messages.theme'
+                    ),
+                    $theme
+                )
+            );
+        }
+        return $theme;
+    }
+
+}
diff --git a/vendor/drupal/console/src/Command/Shared/UpdateTrait.php b/vendor/drupal/console/src/Command/Shared/UpdateTrait.php
new file mode 100644
index 0000000000..37a3d0926a
--- /dev/null
+++ b/vendor/drupal/console/src/Command/Shared/UpdateTrait.php
@@ -0,0 +1,111 @@
+<?php
+
+/**
+ * @file
+ * Contains Drupal\Console\Command\Shared\ThemeRegionTrait.
+ */
+
+namespace Drupal\Console\Command\Shared;
+
+trait UpdateTrait
+{
+    /**
+     * @param array $updates
+     * @param string $messageKey
+     * @return mixed
+     */
+    public function showUpdateTable($updates, $messageKey)
+    {
+        if(!$updates) {
+            return 1;
+        }
+
+        $this->getIo()->info($messageKey);
+        $tableHeader = [
+            $this->trans('commands.debug.update.messages.module'),
+            $this->trans('commands.debug.update.messages.update-n'),
+            $this->trans('commands.debug.update.messages.description')
+        ];
+        $tableRows = [];
+        foreach ($updates as $module => $module_updates) {
+            foreach ($module_updates['pending'] as $update_n => $update) {
+                list(, $description) = explode($update_n . " - ", $update);
+                $tableRows[] = [
+                    $module,
+                    $update_n,
+                    trim($description),
+                ];
+            }
+        }
+        $this->getIo()->table($tableHeader, $tableRows);
+    }
+
+    /**
+     * @param array $postUpdates
+     * @param string $messageKey
+     * @return mixed
+     */
+    public function showPostUpdateTable($postUpdates, $messageKey)
+    {
+        if(!$postUpdates) {
+            return 1;
+        }
+
+        $this->getIo()->info($messageKey);
+        $tableHeader = [
+            $this->trans('commands.debug.update.messages.module'),
+            $this->trans('commands.debug.update.messages.post-update'),
+            $this->trans('commands.debug.update.messages.description')
+        ];
+
+        $tableRows = [];
+        foreach ($postUpdates as $module => $module_updates) {
+            foreach ($module_updates['pending'] as $postUpdateFunction => $message) {
+                $tableRows[] = [
+                    $module,
+                    $postUpdateFunction,
+                    $message,
+                ];
+            }
+        }
+        $this->getIo()->table($tableHeader, $tableRows);
+    }
+
+    /**
+     * @param array $composerUpdates
+     * @param boolean $onlyDrupal
+     * @param string $messageKey
+     * @return mixed
+     */
+    public function showComposerUpdateTable($composerUpdates, $onlyDrupal, $messageKey)
+    {
+        if(!$composerUpdates) {
+            return 1;
+        }
+
+        $this->getIo()->info($messageKey);
+        $tableHeader = [
+            $this->trans('commands.debug.update.composer.messages.name'),
+            $this->trans('commands.debug.update.composer.messages.current-version'),
+            $this->trans('commands.debug.update.composer.messages.latest-version'),
+            $this->trans('commands.debug.update.composer.messages.description')
+        ];
+
+        $tableRows = [];
+        foreach ($composerUpdates as $key => $values) {
+            if($onlyDrupal){
+                if(strpos($values->name, 'drupal/') === false ){
+                    continue;
+                }
+            }
+
+            $tableRows[] = [
+                $values->name,
+                $values->version,
+                $values->latest,
+                $values->description,
+            ];
+        }
+        $this->getIo()->table($tableHeader, $tableRows);
+    }
+}
diff --git a/vendor/drupal/console/src/Command/Site/InstallCommand.php b/vendor/drupal/console/src/Command/Site/InstallCommand.php
index 0a5254079e..996dea0496 100644
--- a/vendor/drupal/console/src/Command/Site/InstallCommand.php
+++ b/vendor/drupal/console/src/Command/Site/InstallCommand.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\Console\Command\Site;
 
-use Symfony\Component\Filesystem\Filesystem;
 use Symfony\Component\Config\Definition\Exception\Exception;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputOption;
@@ -78,6 +77,11 @@ protected function configure()
                 InputArgument::OPTIONAL,
                 $this->trans('commands.site.install.arguments.profile')
             )
+            ->addArgument(
+                'db-url',
+                InputArgument::OPTIONAL,
+                $this->trans('commands.site.install.arguments.db-url')
+            )
             ->addOption(
                 'langcode',
                 null,
@@ -176,6 +180,14 @@ protected function configure()
      */
     protected function interact(InputInterface $input, OutputInterface $output)
     {
+        // If Drupal is already installed, and --force is not set, there's no
+        // point to continue.
+        $database = Database::getConnectionInfo();
+        if (!empty($database['default'])  && Database::isActiveConnection() && !$input->getOption('force')) {
+            $this->getIo()->error($this->trans('commands.site.install.messages.already-installed'));
+            exit(1);
+        }
+
         // --profile option
         $profile = $input->getArgument('profile');
         if (!$profile) {
@@ -219,9 +231,42 @@ function ($profile) {
             $input->setOption('langcode', $langcode);
         }
 
-        // Use default database setting if is available
-        $database = Database::getConnectionInfo();
-        if (empty($database['default'])) {
+        $is_database_info_set = false;
+
+        // Use default database setting if they are available.
+        if (!empty($database['default'])) {
+            $this->getIo()->info(
+                sprintf(
+                    $this->trans('commands.site.install.messages.using-current-database'),
+                    $database['default']['driver'],
+                    $database['default']['database'],
+                    $database['default']['username']
+                )
+            );
+            $is_database_info_set = true;
+        }
+
+        // Use the db-url argument if it is entered and valid.
+        if (!$is_database_info_set && !empty($input->getArgument('db-url'))) {
+            try {
+                $database = Database::convertDbUrlToConnectionInfo($input->getArgument('db-url'), $this->appRoot);
+                $this->getIo()->info(
+                    sprintf(
+                        $this->trans('commands.site.install.messages.using-current-database'),
+                        $database['driver'],
+                        $database['database'],
+                        $database['username']
+                    )
+                );
+                $is_database_info_set = true;
+            } catch (\Exception $e) {
+                $this->getIo()->warning('Invalid db-url argument: ' . $e->getMessage());
+            }
+        }
+
+        // Interact if database info is still not available
+        if (!$is_database_info_set) {
+
             // --db-type option
             $dbType = $input->getOption('db-type');
             if (!$dbType) {
@@ -236,79 +281,51 @@ function ($profile) {
                         $dbType = $dbIndex;
                     }
                 }
-
                 $input->setOption('db-type', $dbType);
             }
 
             if ($dbType === 'sqlite') {
                 // --db-file option
-                $dbFile = $input->getOption('db-file');
-                if (!$dbFile) {
+                if (!$input->getOption('db-file')) {
+                    $uri = $this->site->getMultisiteName($input);
+                    $uriPath = $this->site->multisiteMode($uri) ? $this->site->getMultisiteDir($uri) : 'default';
                     $dbFile = $this->getIo()->ask(
                         $this->trans('commands.migrate.execute.questions.db-file'),
-                        'sites/default/files/.ht.sqlite'
+                        'sites/'.$uriPath.'/files/.ht.sqlite'
                     );
                     $input->setOption('db-file', $dbFile);
                 }
             } else {
                 // --db-host option
-                $dbHost = $input->getOption('db-host');
-                if (!$dbHost) {
-                    $dbHost = $this->dbHostQuestion();
-                    $input->setOption('db-host', $dbHost);
+                if (!$input->getOption('db-host')) {
+                    $input->setOption('db-host', $this->dbHostQuestion());
                 }
 
                 // --db-name option
-                $dbName = $input->getOption('db-name');
-                if (!$dbName) {
-                    $dbName = $this->dbNameQuestion();
-                    $input->setOption('db-name', $dbName);
+                if (!$input->getOption('db-name')) {
+                    $input->setOption('db-name', $this->dbNameQuestion());
                 }
 
                 // --db-user option
-                $dbUser = $input->getOption('db-user');
-                if (!$dbUser) {
-                    $dbUser = $this->dbUserQuestion();
-                    $input->setOption('db-user', $dbUser);
+                if (!$input->getOption('db-user')) {
+                    $input->setOption('db-user', $this->dbUserQuestion());
                 }
 
                 // --db-pass option
-                $dbPass = $input->getOption('db-pass');
-                if (!$dbPass) {
-                    $dbPass = $this->dbPassQuestion();
-                    $input->setOption('db-pass', $dbPass);
+                if (!$input->getOption('db-pass')) {
+                    $input->setOption('db-pass', $this->dbPassQuestion());
                 }
 
-                // --db-port prefix
-                $dbPort = $input->getOption('db-port');
-                if (!$dbPort) {
-                    $dbPort = $this->dbPortQuestion();
-                    $input->setOption('db-port', $dbPort);
+                // --db-port option
+                if (!$input->getOption('db-port')) {
+                    $input->setOption('db-port', $this->dbPortQuestion());
                 }
             }
 
-            // --db-prefix
-            $dbPrefix = $input->getOption('db-prefix');
-            if (!$dbPrefix) {
-                $dbPrefix = $this->dbPrefixQuestion();
-                $input->setOption('db-prefix', $dbPrefix);
+            // --db-prefix option
+            if ($input->getOption('db-prefix') === null) {
+                $input->setOption('db-prefix', $this->dbPrefixQuestion());
             }
-        } else {
-            $input->setOption('db-type', $database['default']['driver']);
-            $input->setOption('db-host', $database['default']['host']);
-            $input->setOption('db-name', $database['default']['database']);
-            $input->setOption('db-user', $database['default']['username']);
-            $input->setOption('db-pass', $database['default']['password']);
-            $input->setOption('db-port', $database['default']['port']);
-            $input->setOption('db-prefix', $database['default']['prefix']['default']);
-            $this->getIo()->info(
-                sprintf(
-                    $this->trans('commands.site.install.messages.using-current-database'),
-                    $database['default']['driver'],
-                    $database['default']['database'],
-                    $database['default']['username']
-                )
-            );
         }
 
         // --site-name option
@@ -366,7 +383,7 @@ function ($profile) {
      */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        $uri = parse_url($input->getParameterOption(['--uri', '-l'], 'default'), PHP_URL_HOST);
+        $uri = $this->site->getMultisiteName($input);
 
         if ($this->site->multisiteMode($uri)) {
             if (!$this->site->validMultisite($uri)) {
@@ -381,45 +398,61 @@ protected function execute(InputInterface $input, OutputInterface $output)
             $_SERVER['HTTP_HOST'] = $uri;
         }
 
-        // Database options
-        $dbType = $input->getOption('db-type')?:'mysql';
-        $dbFile = $input->getOption('db-file');
-        $dbHost = $input->getOption('db-host')?:'127.0.0.1';
-        $dbName = $input->getOption('db-name')?:'drupal_'.time();
-        $dbUser = $input->getOption('db-user')?:'root';
-        $dbPass = $input->getOption('db-pass');
-        $dbPrefix = $input->getOption('db-prefix');
-        $dbPort = $input->getOption('db-port')?:'3306';
-        $force = $input->getOption('force');
-
-        $databases = $this->site->getDatabaseTypes();
-
-        if ($dbType === 'sqlite') {
-            $database = [
-              'database' => $dbFile,
-              'prefix' => $dbPrefix,
-              'namespace' => $databases[$dbType]['namespace'],
-              'driver' => $dbType,
-            ];
+        $database_install = null;
 
-            if ($force) {
-                $fs = new Filesystem();
-                $fs->remove($dbFile);
+        // If a database connection is already defined we must use that.
+        $database = Database::getConnectionInfo();
+        if (!empty($database['default'])) {
+            $database_install = $database['default'];
+        }
+
+        // Use the db-url argument if it is entered and valid
+        if (!$database_install && !empty($input->getArgument('db-url'))) {
+            try {
+                $database_install = Database::convertDbUrlToConnectionInfo($input->getArgument('db-url'), $this->appRoot);
+            } catch (\Exception $e) {
+                $this->getIo()->error('Invalid db-url argument: ' . $e->getMessage());
+                return 1;
             }
-        } else {
-            $database = [
-              'database' => $dbName,
-              'username' => $dbUser,
-              'password' => $dbPass,
-              'prefix' => $dbPrefix,
-              'port' => $dbPort,
-              'host' => $dbHost,
-              'namespace' => $databases[$dbType]['namespace'],
-              'driver' => $dbType,
+        }
+
+        // Go for the options passed in if still not defined
+        if (!$database_install) {
+            $database_install = [
+                'database' => $input->getOption('db-name')?:'drupal_'.time(),
+                'username' => $input->getOption('db-user')?:'root',
+                'password' => $input->getOption('db-pass'),
+                'prefix' => $input->getOption('db-prefix'),
+                'port' => $input->getOption('db-port')?:'3306',
+                'host' => $input->getOption('db-host')?:'127.0.0.1',
+                'driver' => $input->getOption('db-type')?:'mysql',
             ];
 
-            if ($force && Database::isActiveConnection()) {
-                $schema = Database::getConnection()->schema();
+            if ($database_install['driver'] === 'sqlite') {
+                $uriPath = $this->site->multisiteMode($uri) ? $this->site->getMultisiteDir($uri) : 'default';
+                $dbFile = $input->getOption('db-file')?:'sites/'.$uriPath.'/files/.ht.sqlite';
+
+                $database_install['database'] = $dbFile;
+                unset(
+                    $database_install['username'],
+                    $database_install['password'],
+                    $database_install['port'],
+                    $database_install['host']
+                );
+            }
+        }
+
+        // Cleanup an installed database.
+        if ($input->getOption('force') && Database::isActiveConnection()) {
+            $connection = Database::getConnection();
+            if ($connection->driver() === 'sqlite') {
+                $tables = $connection->query('SELECT name FROM sqlite_master WHERE type = "table" AND name NOT LIKE "sqlite_%";')
+                    ->fetchAllAssoc('name');
+                foreach (array_keys($tables) as $table) {
+                    $connection->schema()->dropTable($table);
+                }
+            } else {
+                $schema = $connection->schema();
                 $tables = $schema->findTables('%');
                 foreach ($tables as $table) {
                     $schema->dropTable($table);
@@ -430,7 +463,9 @@ protected function execute(InputInterface $input, OutputInterface $output)
         try {
             $drupalFinder = new DrupalFinder();
             $drupalFinder->locateRoot(getcwd());
-            $this->runInstaller($database, $uri);
+            if (($exitCode = $this->runInstaller($database_install, $uri)) !== 0) {
+                return $exitCode;
+            }
 
             $autoload = $this->container->get('class_loader');
             $drupal = new Drupal(
@@ -493,6 +528,12 @@ protected function restoreSitesFile()
     }
 
     protected function runInstaller($database, $uri) {
+
+        if(!Database::isActiveConnection() && !is_null(Database::getConnectionInfo())) {
+            $this->getIo()->error($this->trans('commands.site.install.messages.connection-failed'));
+            return 1;
+        }
+
         $input = $this->getIo()->getInput();
         $this->site->loadLegacyFile('/core/includes/install.core.inc');
 
@@ -544,7 +585,7 @@ protected function runInstaller($database, $uri) {
             $this->getIo()->error($this->trans('commands.site.install.messages.already-installed'));
             return 1;
         } catch (\Exception $e) {
-            $this->getIo()->error($e->getMessage());
+            $this->getIo()->error(html_entity_decode(strip_tags($e->getMessage()), ENT_QUOTES));
             return 1;
         }
 
@@ -556,4 +597,5 @@ protected function runInstaller($database, $uri) {
 
         return 0;
     }
+
 }
diff --git a/vendor/drupal/console/src/Command/Site/MaintenanceCommand.php b/vendor/drupal/console/src/Command/Site/MaintenanceCommand.php
index c94368a5e5..3e18941898 100644
--- a/vendor/drupal/console/src/Command/Site/MaintenanceCommand.php
+++ b/vendor/drupal/console/src/Command/Site/MaintenanceCommand.php
@@ -7,14 +7,14 @@
 
 namespace Drupal\Console\Command\Site;
 
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Core\State\StateInterface;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Core\Command\ContainerAwareCommand;
-use Drupal\Core\State\StateInterface;
-use Drupal\Console\Core\Utils\ChainQueue;
 
-class MaintenanceCommand extends ContainerAwareCommand
+class MaintenanceCommand extends Command
 {
     /**
      * @var StateInterface
@@ -66,7 +66,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             $this->state->set($stateName, true);
             $modeMessage = 'commands.site.maintenance.messages.maintenance-on';
         }
-        if ('OFF' === strtoupper($mode)) {
+        else if ('OFF' === strtoupper($mode)) {
             $this->state->set($stateName, false);
             $modeMessage = 'commands.site.maintenance.messages.maintenance-off';
         }
diff --git a/vendor/drupal/console/src/Command/Site/ModeCommand.php b/vendor/drupal/console/src/Command/Site/ModeCommand.php
index b91d494400..2c765b92e2 100644
--- a/vendor/drupal/console/src/Command/Site/ModeCommand.php
+++ b/vendor/drupal/console/src/Command/Site/ModeCommand.php
@@ -7,16 +7,16 @@
 
 namespace Drupal\Console\Command\Site;
 
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Core\Utils\ConfigurationManager;
+use Drupal\Core\Config\ConfigFactory;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
 use Symfony\Component\Yaml\Yaml;
-use Drupal\Console\Core\Command\ContainerAwareCommand;
-use Drupal\Console\Core\Utils\ConfigurationManager;
-use Drupal\Core\Config\ConfigFactory;
-use Drupal\Console\Core\Utils\ChainQueue;
 
-class ModeCommand extends ContainerAwareCommand
+class ModeCommand extends Command
 {
     /**
      * @var ConfigFactory
diff --git a/vendor/drupal/console/src/Command/Site/StatisticsCommand.php b/vendor/drupal/console/src/Command/Site/StatisticsCommand.php
index 04880b3181..5174c30fa3 100644
--- a/vendor/drupal/console/src/Command/Site/StatisticsCommand.php
+++ b/vendor/drupal/console/src/Command/Site/StatisticsCommand.php
@@ -7,31 +7,26 @@
 
 namespace Drupal\Console\Command\Site;
 
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Core\Command\ContainerAwareCommand;
-use Drupal\Console\Utils\DrupalApi;
-use Drupal\Core\Entity\Query\QueryFactory;
+use Drupal\Console\Core\Command\Command;
 use Drupal\Console\Extension\Manager;
+use Drupal\Console\Utils\DrupalApi;
 use Drupal\Core\Extension\ModuleHandlerInterface;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
 
 /**
  * Class StatisticsCommand
  *
  * @package Drupal\Console\Command\Site
  */
-class StatisticsCommand extends ContainerAwareCommand
+class StatisticsCommand extends Command
 {
     /**
      * @var DrupalApi
      */
     protected $drupalApi;
 
-    /**
-     * @var QueryFactory
-     */
-    protected $entityQuery;
-
     /**
      * @var Manager
      */
@@ -42,22 +37,26 @@ class StatisticsCommand extends ContainerAwareCommand
      */
     protected $moduleHandler;
 
+    /**
+     * @var EntityTypeManagerInterface
+     */
+    protected $entityTypeManager;
+
     /**
      * StatisticsCommand constructor.
      *
-     * @param DrupalApi              $drupalApi
-     * @param QueryFactory           $entityQuery;
-     * @param Manager                $extensionManager
+     * @param DrupalApi $drupalApi
+     * @param Manager $extensionManager
      * @param ModuleHandlerInterface $moduleHandler
      */
     public function __construct(
         DrupalApi $drupalApi,
-        QueryFactory $entityQuery,
+        EntityTypeManagerInterface $entityTypeManager,
         Manager $extensionManager,
         ModuleHandlerInterface $moduleHandler
     ) {
         $this->drupalApi = $drupalApi;
-        $this->entityQuery = $entityQuery;
+        $this->entityTypeManager = $entityTypeManager;
         $this->extensionManager = $extensionManager;
         $this->moduleHandler = $moduleHandler;
         parent::__construct();
@@ -73,7 +72,6 @@ public function configure()
             ->setDescription($this->trans('commands.site.statistics.description'))
             ->setHelp($this->trans('commands.site.statistics.help'))
             ->setAliases(['sst']);
-        ;
     }
 
     /**
@@ -81,98 +79,63 @@ public function configure()
      */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        $bundles = $this->drupalApi->getBundles();
-        foreach ($bundles as $bundleType => $bundleName) {
-            $key = sprintf(
-                $this->trans('commands.site.statistics.messages.node-type'),
-                $bundleName
-            );
-            $statistics[$key] = $this->getNodeTypeCount($bundleType);
+        $statistics = [];
+        if ($this->moduleHandler->moduleExists('node')) {
+            $bundles = $this->drupalApi->getBundles();
+            foreach ($bundles as $bundleType => $bundleName) {
+                $key = sprintf(
+                    $this->trans('commands.site.statistics.messages.node-type'),
+                    $bundleName
+                );
+                $statistics[$key] = $this->getEntitiesCount('node', [
+                    'name' => 'type',
+                    'value' => $bundleType,
+                    'condition' => '=',
+                ]);
+            }
         }
-        $statistics[$this->trans('commands.site.statistics.messages.comments')] = $this->getCommentCount();
-        $statistics[$this->trans('commands.site.statistics.messages.vocabulary')] = $this->getTaxonomyVocabularyCount();
-        $statistics[$this->trans('commands.site.statistics.messages.taxonomy-terms')] = $this->getTaxonomyTermCount();
-        $statistics[$this->trans('commands.site.statistics.messages.files')] = $this->getFileCount();
-        $statistics[$this->trans('commands.site.statistics.messages.users')] = $this->getUserCount();
-        $statistics[$this->trans('commands.site.statistics.messages.views')] = $this->getViewCount();
-        $statistics[$this->trans('commands.site.statistics.messages.modules-enabled')] = $this->getModuleCount(true);
-        $statistics[$this->trans('commands.site.statistics.messages.modules-disabled')] = $this->getModuleCount(false);
-        $statistics[$this->trans('commands.site.statistics.messages.themes-enabled')] = $this->getThemeCount(true);
-        $statistics[$this->trans('commands.site.statistics.messages.themes-disabled')] = $this->getThemeCount(false);
 
-        $this->statisticsList($statistics);
-    }
-
-
-    /**
-     * @param $nodeType
-     * @return mixed
-     */
-    private function getNodeTypeCount($nodeType)
-    {
-        $nodesPerType = $this->entityQuery->get('node')->condition('type', $nodeType)->count();
-        $nodes = $nodesPerType->execute();
-
-        return $nodes;
-    }
-
-    /**
-     * @return mixed
-     */
-    private function getCommentCount()
-    {
-        if (!$this->moduleHandler->moduleExists('comment')) {
-            return 0;
+        if ($this->moduleHandler->moduleExists('comment')) {
+            $statistics[$this->trans('commands.site.statistics.messages.comments')] = $this->getEntitiesCount('comment');
         }
-        
-        $entityQuery = $this->entityQuery->get('comment')->count();
-        $comments = $entityQuery->execute();
-
-        return $comments;
-    }
 
-    /**
-     * @return mixed
-     */
-    private function getTaxonomyVocabularyCount()
-    {
-        $entityQuery = $this->entityQuery->get('taxonomy_vocabulary')->count();
-        $vocabularies = $entityQuery->execute();
+        if ($this->moduleHandler->moduleExists('taxonomy')) {
+            $statistics[$this->trans('commands.site.statistics.messages.vocabulary')] = $this->getEntitiesCount('taxonomy_vocabulary');
+            $statistics[$this->trans('commands.site.statistics.messages.taxonomy-terms')] = $this->getEntitiesCount('taxonomy_term');
+        }
 
-        return $vocabularies;
-    }
+        if ($this->moduleHandler->moduleExists('file')) {
+            $statistics[$this->trans('commands.site.statistics.messages.files')] = $this->getEntitiesCount('file');
+        }
 
-    /**
-     * @return mixed
-     */
-    private function getTaxonomyTermCount()
-    {
-        $entityQuery = $this->entityQuery->get('taxonomy_term')->count();
-        $terms = $entityQuery->execute();
+        if ($this->moduleHandler->moduleExists('user')) {
+            $statistics[$this->trans('commands.site.statistics.messages.users')] = $this->getEntitiesCount('user');
+        }
 
-        return $terms;
-    }
+        if ($this->moduleHandler->moduleExists('views')) {
+            $statistics[$this->trans('commands.site.statistics.messages.views')] = $this->getEntitiesCount('view', [
+                'name' => 'tag',
+                'value' => 'default',
+                'condition' => '<>',
+            ]);
+        }
 
-    /**
-     * @return mixed
-     */
-    private function getFileCount()
-    {
-        $entityQuery = $this->entityQuery->get('file')->count();
-        $files = $entityQuery->execute();
+        $statistics[$this->trans('commands.site.statistics.messages.modules-enabled')] = $this->getModuleCount(true);
+        $statistics[$this->trans('commands.site.statistics.messages.modules-disabled')] = $this->getModuleCount(false);
+        $statistics[$this->trans('commands.site.statistics.messages.themes-enabled')] = $this->getThemeCount(true);
+        $statistics[$this->trans('commands.site.statistics.messages.themes-disabled')] = $this->getThemeCount(false);
 
-        return $files;
+        $this->statisticsList($statistics);
     }
 
-    /**
-     * @return mixed
-     */
-    private function getUserCount()
+    private function getEntitiesCount($entity_type, $condition = [])
     {
-        $entityQuery = $this->entityQuery->get('user')->count();
-        $users = $entityQuery->execute();
+        $entityQuery = $this->entityTypeManager->getStorage($entity_type)->getQuery()->count();
+        if (!empty($condition)) {
+            $entityQuery->condition($condition['name'], $condition['value'], $condition['condition']);
+        }
 
-        return $users;
+        return $entityQuery->execute();
     }
 
     /**
@@ -181,11 +144,8 @@ private function getUserCount()
      */
     private function getModuleCount($status = true)
     {
-        if ($status) {
-            return count($this->extensionManager->discoverModules()->showCore()->showNoCore()->showInstalled()->getList());
-        }
-
-        return count($this->extensionManager->discoverModules()->showCore()->showNoCore()->showUninstalled()->getList());
+        $this->extensionManager->discoverModules();
+        return $this->getExtensionCount($status);
     }
 
     /**
@@ -194,30 +154,28 @@ private function getModuleCount($status = true)
      */
     private function getThemeCount($status = true)
     {
-        if ($status) {
-            return count($this->extensionManager->discoverThemes()->showCore()->showNoCore()->showInstalled()->getList());
-        }
-
-        return count($this->extensionManager->discoverThemes()->showCore()->showNoCore()->showUninstalled()->getList());
+        $this->extensionManager->discoverThemes();
+        return $this->getExtensionCount($status);
     }
 
-    /**
-     * @return mixed
-     */
-    private function getViewCount($status = true, $tag = 'default')
+    private function getExtensionCount($status = true)
     {
-        $entityQuery = $this->entityQuery->get('view')->condition('tag', 'default', '<>')->count();
-        $views = $entityQuery->execute();
+        $this->extensionManager->showCore()->showNoCore();
+        if ($status) {
+            $this->extensionManager->showInstalled();
+        } else {
+            $this->extensionManager->showUninstalled();
+        }
 
-        return $views;
+        return count($this->extensionManager->getList());
     }
 
     /**
-     * @param mixed       $statistics
+     * @param mixed $statistics
      */
     private function statisticsList($statistics)
     {
-        $tableHeader =[
+        $tableHeader = [
             $this->trans('commands.site.statistics.messages.stat-name'),
             $this->trans('commands.site.statistics.messages.stat-quantity'),
         ];
@@ -225,8 +183,8 @@ private function statisticsList($statistics)
         $tableRows = [];
         foreach ($statistics as $type => $amount) {
             $tableRows[] = [
-              $type,
-              $amount
+                $type,
+                $amount
             ];
         }
 
diff --git a/vendor/drupal/console/src/Command/Site/StatusCommand.php b/vendor/drupal/console/src/Command/Site/StatusCommand.php
index be38be1aa2..5c1939f46a 100644
--- a/vendor/drupal/console/src/Command/Site/StatusCommand.php
+++ b/vendor/drupal/console/src/Command/Site/StatusCommand.php
@@ -16,6 +16,8 @@
 use Drupal\Core\Site\Settings;
 use Drupal\Core\Config\ConfigFactory;
 use Drupal\Core\Extension\ThemeHandler;
+use Drupal\Core\Render\RendererInterface;
+use Drupal\Core\StringTranslation\TranslatableMarkup;
 
 /**
  *  This command provides a report of the current drupal installation.
@@ -41,6 +43,20 @@ class StatusCommand extends ContainerAwareCommand
       'directory',
     ];
 
+    /**
+     * A list of system requirements to be skipped from output.
+     *
+     * @var array
+     */
+    protected $systemDataSkipList = [
+      // The PHP memory limit in CLI is different from the one available to the
+      // web server. Skip to avoid confusion.
+      'php_memory_limit',
+      // The web server cannot be determined in CLI since Drupal takes it from
+      // the $_SERVER variable in HTTP requests.
+      'webserver',
+    ];
+
     /**
      * @var SystemManager
      */
@@ -66,27 +82,35 @@ class StatusCommand extends ContainerAwareCommand
      */
     protected $appRoot;
 
+    /**
+     * @var RendererInterface
+     */
+    protected $renderer;
+
     /**
      * DebugCommand constructor.
      *
-     * @param SystemManager $systemManager
-     * @param Settings      $settings
-     * @param ConfigFactory $configFactory
-     * @param ThemeHandler  $themeHandler
+     * @param SystemManager     $systemManager
+     * @param Settings          $settings
+     * @param ConfigFactory     $configFactory
+     * @param ThemeHandler      $themeHandler
      * @param $appRoot
+     * @param RendererInterface $renderer
      */
     public function __construct(
         SystemManager $systemManager = null,
         Settings $settings,
         ConfigFactory $configFactory,
         ThemeHandler $themeHandler,
-        $appRoot
+        $appRoot,
+        RendererInterface $renderer
     ) {
         $this->systemManager = $systemManager;
         $this->settings = $settings;
         $this->configFactory = $configFactory;
         $this->themeHandler = $themeHandler;
         $this->appRoot = $appRoot;
+        $this->renderer = $renderer;
         parent::__construct();
     }
 
@@ -149,15 +173,45 @@ protected function getSystemData()
         $systemData = [];
 
         foreach ($requirements as $key => $requirement) {
-            if ($requirement['title'] instanceof \Drupal\Core\StringTranslation\TranslatableMarkup) {
+            if (in_array($key, $this->systemDataSkipList)) {
+                continue;
+            }
+
+            if ($requirement['title'] instanceof TranslatableMarkup) {
                 $title = $requirement['title']->render();
             } else {
                 $title = $requirement['title'];
             }
 
-            $systemData['system'][$title] = strip_tags($requirement['value']);
+            $value = !empty($requirement['value']) ? strip_tags($requirement['value']) : '';
+            if (isset($requirement['severity'])) {
+                switch ($requirement['severity']) {
+                    case SystemManager::REQUIREMENT_ERROR:
+                        $value = "<error>$value</error>";
+                        break;
+
+                    case SystemManager::REQUIREMENT_WARNING:
+                        $value = "<comment>$value</comment>";
+                        break;
+
+                }
+            }
+
+            if ($this->getIo()->isVerbose()) {
+                $description = !empty($requirement['description']) ? $requirement['description'] : null;
+                if ($description instanceof TranslatableMarkup) {
+                    $description = $description->render();
+                }
+                if (is_array($description)) {
+                    $description = $this->renderer->renderPlain($description);
+                }
+                $value .= $description ? ' (' . strip_tags($description) . ')' : '';
+            }
+
+            $systemData['system'][strip_tags($title)] = $value;
         }
 
+
         if ($this->settings) {
             try {
                 $hashSalt = $this->settings->getHashSalt();
@@ -174,26 +228,24 @@ protected function getSystemData()
     protected function getConnectionData()
     {
         $connectionInfo = Database::getConnectionInfo();
+        $has_password = FALSE;
 
         $connectionData = [];
         foreach ($this->connectionInfoKeys as $connectionInfoKey) {
-            if ("password" == $connectionInfoKey) {
+            if ('password' == $connectionInfoKey) {
+                $has_password = TRUE;
                 continue;
             }
 
-            $connectionKey = $this->trans('commands.site.status.messages.'.$connectionInfoKey);
-            $connectionData['database'][$connectionKey] = $connectionInfo['default'][$connectionInfoKey];
+            if (!empty($connectionInfo['default'][$connectionInfoKey])) {
+                $connectionKey = $this->trans('commands.site.status.messages.' . $connectionInfoKey);
+                $connectionData['database'][$connectionKey] = $connectionInfo['default'][$connectionInfoKey];
+            }
         }
 
-        $connectionData['database'][$this->trans('commands.site.status.messages.connection')] = sprintf(
-            '%s//%s:%s@%s%s/%s',
-            $connectionInfo['default']['driver'],
-            $connectionInfo['default']['username'],
-            $connectionInfo['default']['password'],
-            $connectionInfo['default']['host'],
-            $connectionInfo['default']['port'] ? ':'.$connectionInfo['default']['port'] : '',
-            $connectionInfo['default']['database']
-        );
+        $connection_url = Database::getConnectionInfoAsUrl();
+        $displayable_url = $has_password ? preg_replace('/(?<=:)([^@:]+)(?=@[^@]+$)/', '********', $connection_url, 1) : $connection_url;
+        $connectionData['database'][$this->trans('commands.site.status.messages.connection')] = $displayable_url;
 
         return $connectionData;
     }
@@ -204,8 +256,8 @@ protected function getThemeData()
 
         return [
           'theme' => [
-            $this->trans('commands.site.status.messages.theme_default') => $config->get('default'),
-            $this->trans('commands.site.status.messages.theme_admin') => $config->get('admin'),
+            $this->trans('commands.site.status.messages.theme-default') => $config->get('default'),
+            $this->trans('commands.site.status.messages.theme-admin') => $config->get('admin'),
           ],
         ];
     }
diff --git a/vendor/drupal/console/src/Command/Theme/DownloadCommand.php b/vendor/drupal/console/src/Command/Theme/DownloadCommand.php
index 9e77211e99..ddb5c48822 100644
--- a/vendor/drupal/console/src/Command/Theme/DownloadCommand.php
+++ b/vendor/drupal/console/src/Command/Theme/DownloadCommand.php
@@ -7,16 +7,16 @@
 
 namespace Drupal\Console\Command\Theme;
 
+use Drupal\Console\Command\Shared\ProjectDownloadTrait;
+use Drupal\Console\Core\Command\ContainerAwareCommand;
+use Drupal\Console\Utils\DrupalApi;
+use GuzzleHttp\Client;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Core\Command\Command;
-use Drupal\Console\Command\Shared\ProjectDownloadTrait;
-use Drupal\Console\Utils\DrupalApi;
-use GuzzleHttp\Client;
 
-class DownloadCommand extends Command
+class DownloadCommand extends ContainerAwareCommand
 {
     use ProjectDownloadTrait;
 
@@ -73,12 +73,7 @@ protected function configure()
                 InputArgument::OPTIONAL,
                 $this->trans('commands.theme.download.arguments.version')
             )
-            ->addOption(
-                'composer',
-                null,
-                InputOption::VALUE_NONE,
-                $this->trans('commands.theme.download.options.composer')
-            )->setAliases(['thd']);
+            ->setAliases(['thd']);
     }
 
     /**
@@ -88,24 +83,14 @@ protected function execute(InputInterface $input, OutputInterface $output)
     {
         $theme = $input->getArgument('theme');
         $version = $input->getArgument('version');
-        $composer = $input->getOption('composer');
-
-        if ($composer) {
-            if (!is_array($theme)) {
-                $theme = [$theme];
-            }
-            $this->get('chain_queue')->addCommand(
-                'module:download',
-                [
-                'module' => $theme,
-                '--composer' => true
-                ],
-                true,
-                true
-            );
-        } else {
-            $this->downloadProject($theme, $version, 'theme');
+
+        if(!$version) {
+            return 1;
         }
+
+        $this->downloadProject($theme, $version, 'theme');
+
+        return 1;
     }
 
     /**
@@ -115,9 +100,8 @@ protected function interact(InputInterface $input, OutputInterface $output)
     {
         $theme = $input->getArgument('theme');
         $version = $input->getArgument('version');
-        $composer = $input->getOption('composer');
 
-        if (!$version && !$composer) {
+        if (!$version) {
             $version = $this->releasesQuestion($theme);
             $input->setArgument('version', $version);
         }
diff --git a/vendor/drupal/console/src/Command/Theme/InstallCommand.php b/vendor/drupal/console/src/Command/Theme/InstallCommand.php
index a63acc79f5..aa6888a7a5 100644
--- a/vendor/drupal/console/src/Command/Theme/InstallCommand.php
+++ b/vendor/drupal/console/src/Command/Theme/InstallCommand.php
@@ -12,9 +12,23 @@
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
 use Drupal\Core\Config\UnmetDependenciesException;
+use Drupal\Console\Command\Shared\ProjectDownloadTrait;
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Utils\Site;
+use Drupal\Console\Utils\Validator;
+use Drupal\Core\Extension\ModuleInstallerInterface;
+use Drupal\Console\Utils\DrupalApi;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Core\Utils\ChainQueue;
 
 class InstallCommand extends ThemeBaseCommand
 {
+    use ProjectDownloadTrait;
+    use ModuleTrait;
+    /**
+     * {@inheritdoc}
+     */
     protected function configure()
     {
         $this
@@ -88,7 +102,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             if (count($this->getUnavailableThemes()) > 1) {
                 $this->setErrorMessage('commands.theme.install.messages.themes-missing', $this->getUnavailableThemes());
             } else {
-                $this->setErrorMessage('commands.theme.install.messages.themes-missing', $this->getUnavailableThemes());
+                $resultList = $this->downloadThemes($theme, $default);
             }
         }
 
diff --git a/vendor/drupal/console/src/Command/Theme/ThemeBaseCommand.php b/vendor/drupal/console/src/Command/Theme/ThemeBaseCommand.php
index eb3c1e9760..d83f191505 100644
--- a/vendor/drupal/console/src/Command/Theme/ThemeBaseCommand.php
+++ b/vendor/drupal/console/src/Command/Theme/ThemeBaseCommand.php
@@ -12,7 +12,11 @@
 use Drupal\Core\Config\UnmetDependenciesException;
 use Drupal\Core\Extension\ThemeHandlerInterface;
 use Drupal\Console\Core\Utils\ChainQueue;
-
+use Drupal\Console\Utils\Site;
+use Drupal\Console\Utils\Validator;
+use Drupal\Core\Extension\ModuleInstallerInterface;
+use Drupal\Console\Utils\DrupalApi;
+use Drupal\Console\Extension\Manager;
 /**
  * Class ThemeBaseCommand
  *
@@ -34,12 +38,34 @@ class ThemeBaseCommand extends Command
      * @var ChainQueue
      */
     protected $chainQueue;
-
+    /**
+     * @var Site
+     */
+    protected $site;
+    /**
+     * @var Validator
+     */
+    protected $validator;
+     /**
+     * @var ModuleInstaller
+     */
+    protected $moduleInstaller;
+    /**
+     * @var DrupalApi
+     */
+    protected $drupalApi;
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+    /**
+     * @var string
+     */
+    protected $appRoot;
     /**
      * @var array
      */
     protected $themes;
-
     /**
      * @var array
      */
@@ -61,15 +87,32 @@ class ThemeBaseCommand extends Command
      * @param ConfigFactory $configFactory
      * @param ThemeHandler  $themeHandler
      * @param ChainQueue    $chainQueue
+     * @param Site          $site
+     * @param Validator     $validator
+     * @param ModuleInstaller $moduleInstaller
+     * @param DrupalApi       $drupalApi
+     * @param Manager         $extensionManager
+     * @param $appRoot
      */
     public function __construct(
         ConfigFactoryInterface $configFactory,
         ThemeHandlerInterface $themeHandler,
-        ChainQueue $chainQueue
+        ChainQueue $chainQueue,
+        Site $site,
+        Validator $validator,
+        ModuleInstallerInterface $moduleInstaller,
+        DrupalApi $drupalApi,
+        Manager $extensionManager, $appRoot
     ) {
         $this->configFactory = $configFactory;
         $this->themeHandler = $themeHandler;
         $this->chainQueue = $chainQueue;
+        $this->site = $site;
+        $this->validator = $validator;
+        $this->moduleInstaller = $moduleInstaller;
+        $this->drupalApi = $drupalApi;
+        $this->extensionManager = $extensionManager;
+        $this->appRoot = $appRoot;
         $this->themes = $this->themeHandler->rebuildThemeData();
         parent::__construct();
     }
diff --git a/vendor/drupal/console/src/Command/Update/EntitiesCommand.php b/vendor/drupal/console/src/Command/Update/EntitiesCommand.php
index f77fbad134..9d8fa0e540 100644
--- a/vendor/drupal/console/src/Command/Update/EntitiesCommand.php
+++ b/vendor/drupal/console/src/Command/Update/EntitiesCommand.php
@@ -64,8 +64,8 @@ protected function configure()
         $this
             ->setName('update:entities')
             ->setDescription($this->trans('commands.update.entities.description'))
+            ->enableMaintenance()
             ->setAliases(['upe']);
-        ;
     }
 
     /**
@@ -73,11 +73,6 @@ protected function configure()
      */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        //$state = $this->getDrupalService('state');
-        $this->getIo()->info($this->trans('commands.site.maintenance.messages.maintenance-on'));
-        $this->getIo()->info($this->trans('commands.update.entities.messages.start'));
-        $this->state->set('system.maintenance_mode', true);
-
         try {
             $this->entityDefinitionUpdateManager->applyUpdates();
             /* @var EntityStorageException $e */
@@ -88,9 +83,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             $this->getIo()->error(strtr('%type: @message in %function (line %line of %file).', $variables));
         }
 
-        $this->state->set('system.maintenance_mode', false);
         $this->getIo()->info($this->trans('commands.update.entities.messages.end'));
         $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'all']);
-        $this->getIo()->info($this->trans('commands.site.maintenance.messages.maintenance-off'));
     }
 }
diff --git a/vendor/drupal/console/src/Command/Update/ExecuteCommand.php b/vendor/drupal/console/src/Command/Update/ExecuteCommand.php
index 90a91072d5..7d652f671f 100644
--- a/vendor/drupal/console/src/Command/Update/ExecuteCommand.php
+++ b/vendor/drupal/console/src/Command/Update/ExecuteCommand.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\Console\Command\Update;
 
+use Drupal\Console\Command\Shared\UpdateTrait;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Output\OutputInterface;
@@ -20,6 +21,8 @@
 
 class ExecuteCommand extends Command
 {
+    use UpdateTrait;
+
     /**
      * @var Site
      */
@@ -108,7 +111,8 @@ protected function configure()
                 $this->trans('commands.update.execute.options.update-n'),
                 '9000'
             )
-            ->setAliases(['upex']);
+            ->setAliases(['upex'])
+            ->enableMaintenance();
     }
 
     /**
@@ -127,14 +131,12 @@ protected function execute(InputInterface $input, OutputInterface $output)
 
         $start = $this->getUpdates($this->module!=='all'?$this->module:null);
         $updates = update_resolve_dependencies($start);
-        $dependencyMap = [];
-        foreach ($updates as $function => $update) {
-            $dependencyMap[$function] = !empty($update['reverse_paths']) ? array_keys($update['reverse_paths']) : [];
-        }
+        $allowUpdate = false;
+        $assumeYes = $input->getOption('yes');
 
         if (!$this->checkUpdates($start, $updates)) {
             if ($this->module === 'all') {
-                $this->getIo()->warning(
+                $this->getIo()->info(
                     sprintf(
                         $this->trans(
                             'commands.update.execute.messages.no-pending-updates'
@@ -142,7 +144,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
                     )
                 );
             } else {
-                $this->getIo()->warning(
+                $this->getIo()->info(
                     sprintf(
                         $this->trans(
                             'commands.update.execute.messages.no-module-updates'
@@ -151,43 +153,51 @@ protected function execute(InputInterface $input, OutputInterface $output)
                     )
                 );
             }
-
-            return 0;
-        }
-
-        $maintenanceMode = $this->state->get('system.maintenance_mode', false);
-
-        if (!$maintenanceMode) {
-            $this->getIo()->info($this->trans('commands.site.maintenance.description'));
-            $this->state->set('system.maintenance_mode', true);
+            $this->getIo()->info('');
+        } else {
+            $updateList = update_get_update_list();
+            $this->showUpdateTable($this->module === 'all' ?  $updateList: $updateList[$this->module], $this->trans('commands.update.execute.messages.pending-updates'));
+
+            $allowUpdate = $assumeYes || $this->getIo()->confirm(
+                $this->trans('commands.update.execute.questions.update'),
+                true
+            );
         }
 
-        try {
-            $this->runUpdates(
-                $updates
+        // Handle Post update to execute
+        $allowPostUpdate = false;
+        if(!$postUpdates = $this->postUpdateRegistry->getPendingUpdateInformation()) {
+            $this->getIo()->info(
+                $this->trans('commands.update.execute.messages.no-pending-post-updates')
+            );
+        } else {
+            $this->showPostUpdateTable($postUpdates, $this->trans('commands.update.execute.messages.pending-post-updates'));
+            $allowPostUpdate = $assumeYes || $this->getIo()->confirm(
+                $this->trans('commands.update.execute.questions.post-update'),
+                true
             );
+        }
 
-            // Post Updates are only safe to run after all schemas have been updated.
-            if (!$this->getUpdates()) {
-                $this->runPostUpdates();
+        if($allowUpdate) {
+            try {
+                $this->runUpdates(
+                    $updates
+                );
+            } catch (\Exception $e) {
+                watchdog_exception('update', $e);
+                $this->getIo()->error($e->getMessage());
+                return 1;
             }
-        } catch (\Exception $e) {
-            watchdog_exception('update', $e);
-            $this->getIo()->error($e->getMessage());
-            return 1;
         }
 
-        if (!$maintenanceMode) {
-            $this->state->set('system.maintenance_mode', false);
-            $this->getIo()->info($this->trans('commands.site.maintenance.messages.maintenance-off'));
+        if($allowPostUpdate) {
+            $this->runPostUpdates($postUpdates);
         }
 
-        if (!$this->getUpdates()) {
-            $this->chainQueue->addCommand('update:entities');
+        if($allowPostUpdate || $allowUpdate) {
+            $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'all']);
         }
 
-        $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'all']);
-
         return 0;
     }
 
@@ -269,16 +279,20 @@ private function runUpdates(
     }
 
     /**
+     * @param array $postUpdates
      * @return bool
      */
-    private function runPostUpdates()
+    private function runPostUpdates($postUpdates)
     {
-        $postUpdates = $this->postUpdateRegistry->getPendingUpdateInformation();
+        if(!$postUpdates) {
+            return 0;
+        }
+
         foreach ($postUpdates as $module => $updates) {
             foreach ($updates['pending'] as $updateName => $update) {
                 $this->getIo()->info(
                     sprintf(
-                        $this->trans('commands.update.execute.messages.executing-update'),
+                        $this->trans('commands.update.execute.messages.executing-post-update'),
                         $updateName,
                         $module
                     )
@@ -298,7 +312,9 @@ private function runPostUpdates()
             }
         }
 
-        return true;
+        $this->chainQueue->addCommand('update:entities');
+
+        return 1;
     }
 
     protected function getUpdates($module = null)
@@ -331,13 +347,24 @@ protected function getUpdateList()
 
     private function executeUpdate($function, &$context)
     {
-        if (!$context || !array_key_exists('sandbox', $context)) {
-            $context['sandbox'] = [];
-        }
+        $context['sandbox'] = [];
+        do {
+            if (function_exists($function)) {
+                $return = $function($context['sandbox']);
+
+                if (is_string($return)) {
+                    $this->getIo()->info(
+                        "  ".$return
+                    );
+                }
 
-        if (function_exists($function)) {
-            $function($context['sandbox']);
-        }
+                if (isset($context['sandbox']['#finished']) && ($context['sandbox']['#finished'] < 1)) {
+                    $this->getIo()->info(
+                        '  Processed '.number_format($context['sandbox']['#finished'] * 100, 2).'%'
+                    );
+                }
+            }
+        } while (isset($context['sandbox']['#finished']) && ($context['sandbox']['#finished'] < 1));
 
         return true;
     }
diff --git a/vendor/drupal/console/src/Command/User/CreateCommand.php b/vendor/drupal/console/src/Command/User/CreateCommand.php
index 10e47cadf5..6a14e7b427 100644
--- a/vendor/drupal/console/src/Command/User/CreateCommand.php
+++ b/vendor/drupal/console/src/Command/User/CreateCommand.php
@@ -108,6 +108,9 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $username = $input->getArgument('username');
         $password = $input->getArgument('password');
         $roles = $input->getOption('roles');
+        if (is_string($roles)) {
+            $roles = explode(',', $roles);
+        }
         $email = $input->getOption('email');
         $status = $input->getOption('status');
 
@@ -184,7 +187,7 @@ protected function interact(InputInterface $input, OutputInterface $output)
 
         $roles = $input->getOption('roles');
         if (!$roles) {
-            $systemRoles = $this->drupalApi->getRoles(false, false, false);
+            $systemRoles = $this->drupalApi->getRoles(true, true, false);
             $roles = $this->getIo()->choice(
                 $this->trans('commands.user.create.questions.roles'),
                 array_values($systemRoles),
diff --git a/vendor/drupal/console/src/Command/User/DeleteCommand.php b/vendor/drupal/console/src/Command/User/DeleteCommand.php
index 15f3915873..a00d8e360c 100644
--- a/vendor/drupal/console/src/Command/User/DeleteCommand.php
+++ b/vendor/drupal/console/src/Command/User/DeleteCommand.php
@@ -11,7 +11,6 @@
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
-use Drupal\Core\Entity\Query\QueryFactory;
 use Drupal\Console\Utils\DrupalApi;
 
 /**
@@ -21,11 +20,6 @@
  */
 class DeleteCommand extends UserBase
 {
-    /**
-     * @var QueryFactory
-     */
-    protected $entityQuery;
-
     /**
      * @var DrupalApi
      */
@@ -35,15 +29,12 @@ class DeleteCommand extends UserBase
      * DeleteCommand constructor.
      *
      * @param EntityTypeManagerInterface $entityTypeManager
-     * @param QueryFactory               $entityQuery
      * @param DrupalApi                  $drupalApi
      */
     public function __construct(
         EntityTypeManagerInterface $entityTypeManager,
-        QueryFactory $entityQuery,
         DrupalApi $drupalApi
     ) {
-        $this->entityQuery = $entityQuery;
         $this->drupalApi = $drupalApi;
         parent::__construct($entityTypeManager);
     }
@@ -152,9 +143,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
         if ($roles) {
             $roles = is_array($roles)?$roles:[$roles];
 
-            $query = $this->entityQuery
-                ->get('user')
-                ->condition('roles', array_values($roles), 'IN')
+            $query = $this->entityTypeManager->getStorage('user')->getQuery();
+            $query->condition('roles', array_values($roles), 'IN')
                 ->condition('uid', 1, '>');
             $results = $query->execute();
 
diff --git a/vendor/drupal/console/src/Command/User/LoginUrlCommand.php b/vendor/drupal/console/src/Command/User/LoginUrlCommand.php
index f67eb84ee9..8906b1a0aa 100644
--- a/vendor/drupal/console/src/Command/User/LoginUrlCommand.php
+++ b/vendor/drupal/console/src/Command/User/LoginUrlCommand.php
@@ -11,6 +11,7 @@
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Output\OutputInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Url;
 
 /**
  * Class UserLoginCommand.
@@ -59,6 +60,7 @@ protected function interact(InputInterface $input, OutputInterface $output)
      */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
+
         $user = $input->getArgument('user');
         $userEntity = $this->getUserEntity($user);
 
@@ -73,7 +75,31 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $url = user_pass_reset_url($userEntity) . '/login';
+        if($input->hasOption('uri')){
+          //validate if https is on uri
+          $regx = '/^https:.*/s';
+          if(preg_match($regx, $input->getOption('uri'))){
+              $timestamp = REQUEST_TIME;
+              $langcode = $userEntity->getPreferredLangcode();
+              $url = Url::fromRoute('user.reset',
+                  [
+                  'uid' => $userEntity->id(),
+                  'timestamp' => $timestamp,
+                  'hash' => user_pass_rehash($userEntity, $timestamp),
+                  ],
+                  [
+                  'absolute' => TRUE,
+                  'language' => \Drupal::languageManager()->getLanguage($langcode),
+                  'https' => TRUE,
+                  ]
+              )->toString();
+
+            } else{
+              $url = user_pass_reset_url($userEntity) . '/login';
+            }
+        } else{
+          $url = user_pass_reset_url($userEntity) . '/login';
+        }
         $this->getIo()->success(
             sprintf(
                 $this->trans('commands.user.login.url.messages.url'),
diff --git a/vendor/drupal/console/src/Command/User/UnblockCommand.php b/vendor/drupal/console/src/Command/User/UnblockCommand.php
new file mode 100644
index 0000000000..63d95b1acc
--- /dev/null
+++ b/vendor/drupal/console/src/Command/User/UnblockCommand.php
@@ -0,0 +1,102 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\Console\Command\User\UnblockCommand.
+ */
+
+namespace Drupal\Console\Command\User;
+
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Output\OutputInterface;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
+
+class UnblockCommand extends UserBase
+{
+    /**
+     * UnblockCommand constructor.
+     *
+     * @param EntityTypeManagerInterface $entityTypeManager
+     */
+    public function __construct(
+        EntityTypeManagerInterface $entityTypeManager
+    ) {
+        parent::__construct($entityTypeManager);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this
+            ->setName('user:unblock')
+            ->setDescription($this->trans('commands.user.unblock.description'))
+            ->setHelp($this->trans('commands.user.unblock.help'))
+            ->addArgument(
+                'user',
+                InputArgument::REQUIRED,
+                $this->trans('commands.user.unblock.options.user')
+            )
+            ->setAliases(['uu']);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function interact(InputInterface $input, OutputInterface $output)
+    {
+        $this->getUserArgument();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $user = $input->getArgument('user');
+
+        $userEntity = $this->getUserEntity($user);
+
+        if (!$userEntity) {
+            $this->getIo()->error(
+                sprintf(
+                    $this->trans('commands.user.unblock.errors.invalid-user'),
+                    $user
+                )
+            );
+
+            return 1;
+        }
+
+        if (!$userEntity->isBlocked()) {
+          $this->getIo()->warning(
+            sprintf(
+              $this->trans('commands.user.unblock.warnings.unblocked-user'),
+              $user
+            )
+          );
+
+          return 1;
+        }
+
+        try {
+            $userEntity->activate();
+
+            $userEntity->save();
+
+            $this->getIo()->success(
+              sprintf(
+                $this->trans('commands.user.unblock.messages.unblock-successful'),
+                $user
+              )
+            );
+
+            return 0;
+        } catch (\Exception $e) {
+            $this->getIo()->error($e->getMessage());
+
+            return 1;
+        }
+    }
+}
diff --git a/vendor/drupal/console/src/Command/User/UserBase.php b/vendor/drupal/console/src/Command/User/UserBase.php
index 6239347177..ccb9cae84e 100644
--- a/vendor/drupal/console/src/Command/User/UserBase.php
+++ b/vendor/drupal/console/src/Command/User/UserBase.php
@@ -42,11 +42,10 @@ public function getUserEntity($user)
                 ->getStorage('user')
                 ->load($user);
         } else {
-            $userEntity = reset(
-                $this->entityTypeManager
-                    ->getStorage('user')
-                    ->loadByProperties(['name' => $user])
-            );
+            $userEntities = $this->entityTypeManager
+                ->getStorage('user')
+                ->loadByProperties(['name' => $user]);
+            $userEntity = reset($userEntities);
         }
 
         return $userEntity;
diff --git a/vendor/drupal/console/src/Command/Views/DisableCommand.php b/vendor/drupal/console/src/Command/Views/DisableCommand.php
index dbee8f139c..5f24a2d8b8 100644
--- a/vendor/drupal/console/src/Command/Views/DisableCommand.php
+++ b/vendor/drupal/console/src/Command/Views/DisableCommand.php
@@ -12,7 +12,6 @@
 use Symfony\Component\Console\Output\OutputInterface;
 use Drupal\Console\Core\Command\Command;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
-use Drupal\Core\Entity\Query\QueryFactory;
 
 /**
  * Class DisableCommand
@@ -26,23 +25,15 @@ class DisableCommand extends Command
      */
     protected $entityTypeManager;
 
-    /**
-     * @var QueryFactory
-     */
-    protected $entityQuery;
-
     /**
      * DisableCommand constructor.
      *
      * @param EntityTypeManagerInterface $entityTypeManager
-     * @param QueryFactory               $entityQuery
      */
     public function __construct(
-        EntityTypeManagerInterface $entityTypeManager,
-        QueryFactory $entityQuery
+        EntityTypeManagerInterface $entityTypeManager
     ) {
         $this->entityTypeManager = $entityTypeManager;
-        $this->entityQuery = $entityQuery;
         parent::__construct();
     }
 
@@ -69,10 +60,9 @@ protected function interact(InputInterface $input, OutputInterface $output)
     {
         $viewId = $input->getArgument('view-id');
         if (!$viewId) {
-            $views = $this->entityQuery
-                ->get('view')
-                ->condition('status', 1)
-                ->execute();
+            $query = $this->entityTypeManager->getStorage('view')->getQuery();
+            $views = $query->condition('status', 1)->execute();
+
             $viewId = $this->getIo()->choiceNoList(
                 $this->trans('commands.debug.views.arguments.view-id'),
                 $views
@@ -87,12 +77,10 @@ protected function interact(InputInterface $input, OutputInterface $output)
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $viewId = $input->getArgument('view-id');
-
         $view = $this->entityTypeManager->getStorage('view')->load($viewId);
 
         if (empty($view)) {
             $this->getIo()->error(sprintf($this->trans('commands.debug.views.messages.not-found'), $viewId));
-
             return 1;
         }
 
diff --git a/vendor/drupal/console/src/Command/Views/EnableCommand.php b/vendor/drupal/console/src/Command/Views/EnableCommand.php
index 5102bbf682..8eed396c4f 100644
--- a/vendor/drupal/console/src/Command/Views/EnableCommand.php
+++ b/vendor/drupal/console/src/Command/Views/EnableCommand.php
@@ -13,7 +13,6 @@
 use Symfony\Component\Config\Definition\Exception\Exception;
 use Drupal\Console\Core\Command\Command;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
-use Drupal\Core\Entity\Query\QueryFactory;
 
 /**
  * Class EnableCommand
@@ -27,23 +26,15 @@ class EnableCommand extends Command
      */
     protected $entityTypeManager;
 
-    /**
-     * @var QueryFactory
-     */
-    protected $entityQuery;
-
     /**
      * EnableCommand constructor.
      *
      * @param EntityTypeManagerInterface $entityTypeManager
-     * @param QueryFactory               $entityQuery
      */
     public function __construct(
-        EntityTypeManagerInterface $entityTypeManager,
-        QueryFactory $entityQuery
+        EntityTypeManagerInterface $entityTypeManager
     ) {
         $this->entityTypeManager = $entityTypeManager;
-        $this->entityQuery = $entityQuery;
         parent::__construct();
     }
 
@@ -70,10 +61,9 @@ protected function interact(InputInterface $input, OutputInterface $output)
     {
         $viewId = $input->getArgument('view-id');
         if (!$viewId) {
-            $views = $this->entityQuery
-                ->get('view')
-                ->condition('status', 0)
-                ->execute();
+            $query = $this->entityTypeManager->getStorage('view')->getQuery();
+            $views = $query->condition('status', 0)->execute();
+
             $viewId = $this->getIo()->choiceNoList(
                 $this->trans('commands.debug.views.arguments.view-id'),
                 $views
@@ -88,7 +78,6 @@ protected function interact(InputInterface $input, OutputInterface $output)
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $viewId = $input->getArgument('view-id');
-
         $view = $this->entityTypeManager->getStorage('view')->load($viewId);
 
         if (empty($view)) {
diff --git a/vendor/drupal/console/src/Extension/Extension.php b/vendor/drupal/console/src/Extension/Extension.php
index f664d14354..a34a230b76 100644
--- a/vendor/drupal/console/src/Extension/Extension.php
+++ b/vendor/drupal/console/src/Extension/Extension.php
@@ -134,12 +134,13 @@ public function getTemplatePath($fullPath = false)
     }
 
     /**
+     * @param string $testType
      * @param bool $fullPath
      * @return string
      */
-    public function getTestsPath($fullPath = false)
+    public function getTestsPath($testType, $fullPath = false)
     {
-        return $this->getPath($fullPath) . '/tests';
+        return $this->getPath($fullPath) . '/tests/' . $testType;
     }
 
     /**
@@ -159,4 +160,24 @@ public function getJsTestsPath($fullPath = false)
     {
         return $this->getTestsSourcePath($fullPath) . '/FunctionalJavascript';
     }
+
+    /**
+     * @param BaseExtension $extension
+     */
+    function loadFromParentObj(BaseExtension $extension)
+    {
+        $objValues = get_object_vars($extension);
+        foreach($objValues AS $key => $value)
+        {
+            $this->$key = $value;
+        }
+    }
+
+    /**
+     * @param $root
+     */
+    function setRoot($root) {
+        $this->root = $root;
+    }
+
 }
diff --git a/vendor/drupal/console/src/Extension/Manager.php b/vendor/drupal/console/src/Extension/Manager.php
index 8ad3048875..f06f008ed3 100644
--- a/vendor/drupal/console/src/Extension/Manager.php
+++ b/vendor/drupal/console/src/Extension/Manager.php
@@ -5,6 +5,7 @@
 use Drupal\Console\Utils\Site;
 use GuzzleHttp\Client;
 use GuzzleHttp\Exception\ClientException;
+use  Drupal\Core\Extension\ModuleExtensionList;
 
 /**
  * Class ExtensionManager
@@ -43,21 +44,29 @@ class Manager
      */
     private $extension = null;
 
+    /**
+     * @var Drupal\Core\Extension\ModuleExtensionList
+     */
+    private $extensionList;
+
     /**
      * ExtensionManager constructor.
      *
      * @param Site   $site
      * @param Client $httpClient
      * @param string $appRoot
+     * @param ModuleExtensionList $extensionList
      */
     public function __construct(
         Site $site,
         Client $httpClient,
-        $appRoot
+        $appRoot,
+        ModuleExtensionList $extensionList
     ) {
         $this->site = $site;
         $this->httpClient = $httpClient;
         $this->appRoot = $appRoot;
+        $this->extensionList = $extensionList;
         $this->initialize();
     }
 
@@ -223,7 +232,7 @@ private function discoverExtensions($type)
     {
         if ($type === 'module') {
             $this->site->loadLegacyFile('/core/modules/system/system.module');
-            system_rebuild_module_data();
+            $this->extensionList->reset()->getList();
         }
 
         if ($type === 'theme') {
@@ -311,7 +320,9 @@ private function createExtension($extension)
             $extension->getPathname(),
             $extension->getExtensionFilename()
         );
-        $consoleExtension->unserialize($extension->serialize());
+
+        $consoleExtension->loadFromParentObj($extension);
+        $consoleExtension->setRoot($this->appRoot);
 
         return $consoleExtension;
     }
diff --git a/vendor/drupal/console/src/Generator/BlockTypeGenerator.php b/vendor/drupal/console/src/Generator/BlockTypeGenerator.php
new file mode 100644
index 0000000000..be22c4bc39
--- /dev/null
+++ b/vendor/drupal/console/src/Generator/BlockTypeGenerator.php
@@ -0,0 +1,50 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Generator\BlockTypeGenerator.
+ */
+
+namespace Drupal\Console\Generator;
+
+use Drupal\Console\Core\Generator\Generator;
+use Drupal\Console\Extension\Manager;
+
+class BlockTypeGenerator extends Generator
+{
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * PermissionGenerator constructor.
+     *
+     * @param Manager $extensionManager
+     */
+    public function __construct(
+        Manager $extensionManager
+    ) {
+        $this->extensionManager = $extensionManager;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function generate(array $parameters)
+    {
+
+        $module = $parameters['module'];
+        $class_name = $parameters['class_name'];
+        $blockId = $parameters['block_id'];
+        $description = $parameters['block_description'];
+        $parameters['machine_name'] = $blockId;
+
+        $this->renderFile(
+            'module/src/Plugin/Block/blocktype.php.twig',
+            $this->extensionManager->getPluginPath($module, 'Block') . '/' . $class_name . '.php',
+            $parameters
+        );
+
+    }
+}
diff --git a/vendor/drupal/console/src/Generator/CacheContextGenerator.php b/vendor/drupal/console/src/Generator/CacheContextGenerator.php
index 4c936ab6bb..f611161e51 100644
--- a/vendor/drupal/console/src/Generator/CacheContextGenerator.php
+++ b/vendor/drupal/console/src/Generator/CacheContextGenerator.php
@@ -34,7 +34,7 @@ public function __construct(
     public function generate(array $parameters)
     {
         $module = $parameters['module'];
-        $cache_context = $parameters['ache_context'];
+        $cache_context = $parameters['cache_context'];
         $class = $parameters['class'];
 
         $moduleInstance = $this->extensionManager->getModule($module);
diff --git a/vendor/drupal/console/src/Generator/ComposerGenerator.php b/vendor/drupal/console/src/Generator/ComposerGenerator.php
new file mode 100644
index 0000000000..ff834e23a9
--- /dev/null
+++ b/vendor/drupal/console/src/Generator/ComposerGenerator.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Generator\ComposerGenerator.
+ */
+
+namespace Drupal\Console\Generator;
+
+use Drupal\Console\Core\Generator\Generator;
+use Drupal\Console\Extension\Manager;
+
+/**
+ * Class ComposerGenerator
+ *
+ * @package Drupal\Console\Generator
+ */
+class ComposerGenerator extends Generator
+{
+
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * AjaxCommandGenerator constructor.
+     *
+     * @param Manager $extensionManager
+     */
+    public function __construct(
+      Manager $extensionManager
+    ) {
+        $this->extensionManager = $extensionManager;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function generate(array $parameters)
+    {
+        $machineName = $parameters['machine_name'];
+        $this->renderFile(
+          'module/composer.json.twig',
+          $this->extensionManager->getModule($machineName)
+            ->getPath() . '/composer.json',
+          $parameters
+        );
+    }
+
+}
diff --git a/vendor/drupal/console/src/Generator/ControllerGenerator.php b/vendor/drupal/console/src/Generator/ControllerGenerator.php
index 49d51e510e..1a392e4991 100644
--- a/vendor/drupal/console/src/Generator/ControllerGenerator.php
+++ b/vendor/drupal/console/src/Generator/ControllerGenerator.php
@@ -54,7 +54,7 @@ public function generate(array $parameters)
         if ($test) {
             $this->renderFile(
                 'module/Tests/Controller/controller.php.twig',
-                $moduleInstance->getTestPath('Controller') . '/' . $class . 'Test.php',
+                $moduleInstance->getTestsPath('Controller') . '/' . $class . 'Test.php',
                 $parameters
             );
         }
diff --git a/vendor/drupal/console/src/Generator/DatabaseSettingsGenerator.php b/vendor/drupal/console/src/Generator/DatabaseSettingsGenerator.php
index 46673fbc28..08ac1a0369 100644
--- a/vendor/drupal/console/src/Generator/DatabaseSettingsGenerator.php
+++ b/vendor/drupal/console/src/Generator/DatabaseSettingsGenerator.php
@@ -8,37 +8,30 @@
 namespace Drupal\Console\Generator;
 
 use Drupal\Console\Core\Generator\Generator;
-use Drupal\Core\DrupalKernelInterface;
 
 class DatabaseSettingsGenerator extends Generator
 {
-    /**
-     * @var DrupalKernelInterface
-     */
-    protected $kernel;
-
     /**
      * DatabaseSettingsGenerator constructor.
-     *
-     * @param DrupalKernelInterface $kernel
      */
-    public function __construct(
-        DrupalKernelInterface $kernel
-    ) {
-        $this->kernel = $kernel;
-    }
+    public function __construct() {}
 
     /**
      * {@inheritdoc}
      */
     public function generate(array $parameters)
     {
-        $settingsFile = $this->kernel->getSitePath() . '/settings.php';
+        $uri = parse_url($parameters['uri'], PHP_URL_HOST);
+        $settingsFile = 'sites/'.$uri.'/settings.php';
         if (!is_writable($settingsFile)) {
             return false;
         }
+        $template = 'database/add.php.twig';
+        if ($parameters['default']) {
+            $template = 'database/add-default.php.twig';
+        }
         return $this->renderFile(
-            'database/add.php.twig',
+            $template,
             $settingsFile,
             $parameters,
             FILE_APPEND
diff --git a/vendor/drupal/console/src/Generator/EntityContentGenerator.php b/vendor/drupal/console/src/Generator/EntityContentGenerator.php
index 158c0895fe..0862c8a0bc 100644
--- a/vendor/drupal/console/src/Generator/EntityContentGenerator.php
+++ b/vendor/drupal/console/src/Generator/EntityContentGenerator.php
@@ -64,6 +64,8 @@ public function generate(array $parameters)
         $bundle_entity_type = $parameters['bundle_entity_type'];
         $is_translatable = $parameters['is_translatable'];
         $revisionable = $parameters['revisionable'];
+        $has_forms = $parameters['has_forms'];
+        $has_bundle_permissions = $parameters['has_bundle_permissions'];
 
         $moduleInstance = $this->extensionManager->getModule($module);
         $moduleDir = $moduleInstance->getPath();
@@ -81,27 +83,6 @@ public function generate(array $parameters)
             FILE_APPEND
         );
 
-        $this->renderFile(
-            'module/links.menu-entity-content.yml.twig',
-            $modulePath . '.links.menu.yml',
-            $parameters,
-            FILE_APPEND
-        );
-
-        $this->renderFile(
-            'module/links.task-entity-content.yml.twig',
-            $modulePath . '.links.task.yml',
-            $parameters,
-            FILE_APPEND
-        );
-
-        $this->renderFile(
-            'module/links.action-entity-content.yml.twig',
-            $modulePath . '.links.action.yml',
-            $parameters,
-            FILE_APPEND
-        );
-
         $this->renderFile(
             'module/src/accesscontrolhandler-entity-content.php.twig',
             $moduleSourcePath . 'AccessControlHandler.php',
@@ -128,12 +109,6 @@ public function generate(array $parameters)
             $parameters
         );
 
-        $this->renderFile(
-            'module/src/entity-content-route-provider.php.twig',
-            $moduleSourcePath . 'HtmlRouteProvider.php',
-            $parameters
-        );
-
         $this->renderFile(
             'module/src/Entity/entity-content-views-data.php.twig',
             $moduleEntityPath . 'ViewsData.php',
@@ -146,52 +121,96 @@ public function generate(array $parameters)
             $parameters
         );
 
-        $this->renderFile(
-            'module/src/Entity/Form/entity-settings.php.twig',
-            $moduleFormPath . 'SettingsForm.php',
-            $parameters
-        );
+        if($has_forms) {
+            $this->renderFile(
+                'module/src/entity-content-route-provider.php.twig',
+                $moduleSourcePath . 'HtmlRouteProvider.php',
+                $parameters
+            );
 
-        $this->renderFile(
-            'module/src/Entity/Form/entity-content.php.twig',
-            $moduleFormPath . 'Form.php',
-            $parameters
-        );
+            $this->renderFile(
+                'module/links.menu-entity-content.yml.twig',
+                $modulePath . '.links.menu.yml',
+                $parameters,
+                FILE_APPEND
+            );
 
-        $this->renderFile(
-            'module/src/Entity/Form/entity-content-delete.php.twig',
-            $moduleFormPath . 'DeleteForm.php',
-            $parameters
-        );
+            $this->renderFile(
+                'module/links.task-entity-content.yml.twig',
+                $modulePath . '.links.task.yml',
+                $parameters,
+                FILE_APPEND
+            );
 
-        $this->renderFile(
-            'module/entity-content-page.php.twig',
-            $moduleDir . '/' . $entity_name . '.page.inc',
-            $parameters
-        );
+            $this->renderFile(
+                'module/links.action-entity-content.yml.twig',
+                $modulePath . '.links.action.yml',
+                $parameters,
+                FILE_APPEND
+            );
 
-        $this->renderFile(
-            'module/templates/entity-html.twig',
-            $moduleTemplatePath . $entity_name . '.html.twig',
-            $parameters
-        );
+            $this->renderFile(
+                'module/src/Entity/Form/entity-settings.php.twig',
+                $moduleFormPath . 'SettingsForm.php',
+                $parameters
+            );
 
-        if ($revisionable) {
             $this->renderFile(
-                'module/src/Entity/Form/entity-content-revision-delete.php.twig',
-                $moduleFormPath . 'RevisionDeleteForm.php',
+                'module/src/Entity/Form/entity-content.php.twig',
+                $moduleFormPath . 'Form.php',
                 $parameters
             );
+
+
             $this->renderFile(
-                'module/src/Entity/Form/entity-content-revision-revert-translation.php.twig',
-                $moduleFormPath . 'RevisionRevertTranslationForm.php',
+                'module/src/Entity/Form/entity-content-delete.php.twig',
+                $moduleFormPath . 'DeleteForm.php',
                 $parameters
             );
+
             $this->renderFile(
-                'module/src/Entity/Form/entity-content-revision-revert.php.twig',
-                $moduleFormPath . 'RevisionRevertForm.php',
+                'module/templates/entity-html.twig',
+                $moduleTemplatePath . $entity_name . '.html.twig',
                 $parameters
             );
+
+            $this->renderFile(
+                'module/entity-content-page.php.twig',
+                $moduleDir . '/' . $entity_name . '.page.inc',
+                $parameters
+            );
+        }
+
+
+        if ($revisionable) {
+            if ($has_forms) {
+                if ($is_translatable) {
+                    $this->renderFile(
+                        'module/src/Entity/Form/entity-content-revision-revert-translation.php.twig',
+                        $moduleFormPath . 'RevisionRevertTranslationForm.php',
+                        $parameters
+                    );
+                }
+
+                $this->renderFile(
+                    'module/src/Entity/Form/entity-content-revision-delete.php.twig',
+                    $moduleFormPath . 'RevisionDeleteForm.php',
+                    $parameters
+                );
+
+                $this->renderFile(
+                    'module/src/Entity/Form/entity-content-revision-revert.php.twig',
+                    $moduleFormPath . 'RevisionRevertForm.php',
+                    $parameters
+                );
+
+                $this->renderFile(
+                    'module/src/Controller/entity-controller.php.twig',
+                    $moduleInstance->getControllerPath()  . '/' . $entity_class . 'Controller.php',
+                    $parameters
+                );
+            }
+
             $this->renderFile(
                 'module/src/entity-storage.php.twig',
                 $moduleSourcePath . 'Storage.php',
@@ -202,20 +221,24 @@ public function generate(array $parameters)
                 $moduleSourcePath . 'StorageInterface.php',
                 $parameters
             );
-            $this->renderFile(
-                'module/src/Controller/entity-controller.php.twig',
-                $moduleInstance->getControllerPath()  . '/' . $entity_class . 'Controller.php',
-                $parameters
-            );
         }
 
         if ($bundle_entity_type) {
+
             $this->renderFile(
                 'module/templates/entity-with-bundle-content-add-list-html.twig',
                 $moduleTemplatePath . '/' . str_replace('_', '-', $entity_name) . '-content-add-list.html.twig',
                 $parameters
             );
 
+            if ($has_bundle_permissions) {
+                $this->renderFile(
+                'module/src/entity-content-bundle-permissions.php.twig',
+                $moduleSourcePath . 'Permissions.php',
+                $parameters
+              );
+            }
+
             // Check for hook_theme() in module file and warn ...
             // Check if the module file exists.
             if (!file_exists($moduleFileName)) {
diff --git a/vendor/drupal/console/src/Generator/FormAlterGenerator.php b/vendor/drupal/console/src/Generator/FormAlterGenerator.php
index 47d91533cb..3b2a42a768 100644
--- a/vendor/drupal/console/src/Generator/FormAlterGenerator.php
+++ b/vendor/drupal/console/src/Generator/FormAlterGenerator.php
@@ -35,6 +35,11 @@ public function generate(array $parameters)
     {
         $module = $parameters['module'];
         $module_path =  $this->extensionManager->getModule($module)->getPath();
+        $moduleFilePath =  $this->extensionManager->getModule($module)->getPath() . '/' . $module . '.module';
+
+        $parameters = array_merge($parameters, [
+            'file_exists' => file_exists($moduleFilePath),
+        ]);
 
         $this->renderFile(
             'module/src/Form/form-alter.php.twig',
diff --git a/vendor/drupal/console/src/Generator/FormGenerator.php b/vendor/drupal/console/src/Generator/FormGenerator.php
index 957c6bb4fc..71325c57f5 100644
--- a/vendor/drupal/console/src/Generator/FormGenerator.php
+++ b/vendor/drupal/console/src/Generator/FormGenerator.php
@@ -80,7 +80,7 @@ public function generate(array $parameters)
             $moduleInstance->getFormPath() . '/' . $class_name . '.php',
             $parameters
         );
-        
+
         // Render defaults YML file.
         if ($config_file == true) {
             $this->renderFile(
diff --git a/vendor/drupal/console/src/Generator/ModuleGenerator.php b/vendor/drupal/console/src/Generator/ModuleGenerator.php
index 04ea950961..60aa99ee90 100644
--- a/vendor/drupal/console/src/Generator/ModuleGenerator.php
+++ b/vendor/drupal/console/src/Generator/ModuleGenerator.php
@@ -26,7 +26,6 @@ public function generate(array $parameters)
         $modulePath = $parameters['module_path'];
         $moduleFile = $parameters['module_file'];
         $featuresBundle = $parameters['features_bundle'];
-        $composer = $parameters['composer'];
         $test = $parameters['test'];
         $twigTemplate = $parameters['twig_template'];
 
@@ -61,6 +60,11 @@ public function generate(array $parameters)
 
         $parameters['type'] = 'module';
 
+        // Escape single quotes in long parameter strings.
+        foreach(['description', 'module'] as $param) {
+            $parameters[$param] = str_replace("'", "''", $parameters[$param]);
+        }
+
         $this->renderFile(
             'module/info.yml.twig',
             $moduleDirectory . '/' . $machineName . '.info.yml',
@@ -81,14 +85,6 @@ public function generate(array $parameters)
             $this->createModuleFile($moduleDirectory, $parameters);
         }
 
-        if ($composer) {
-            $this->renderFile(
-                'module/composer.json.twig',
-                $moduleDirectory . '/' . 'composer.json',
-                $parameters
-            );
-        }
-
         if ($test) {
             $this->renderFile(
                 'module/src/Tests/load-test.php.twig',
diff --git a/vendor/drupal/console/src/Generator/PluginBlockGenerator.php b/vendor/drupal/console/src/Generator/PluginBlockGenerator.php
index b8271391bb..5744713045 100644
--- a/vendor/drupal/console/src/Generator/PluginBlockGenerator.php
+++ b/vendor/drupal/console/src/Generator/PluginBlockGenerator.php
@@ -36,6 +36,10 @@ public function generate(array $parameters)
         $inputs = $parameters['inputs'];
         $module = $parameters['module'];
         $class_name = $parameters['class_name'];
+        $twigTemplate = $parameters['twig_template'];
+        $pluginId = $parameters['plugin_id'];
+        $parameters['twig_template_name'] = str_replace('_', '-', $pluginId);
+        $parameters['machine_name'] = $pluginId;
 
         // Consider the type when determining a default value. Figure out what
         // the code looks like for the default value tht we need to generate.
@@ -74,5 +78,43 @@ public function generate(array $parameters)
             $this->extensionManager->getPluginPath($module, 'Block') . '/' . $class_name . '.php',
             $parameters
         );
+
+        if ($twigTemplate) {
+            $moduleDirectory = $this->extensionManager->getModule($module)->getPath();
+            $moduleFilePath = $moduleDirectory . '/' . $module . '.module';
+
+            $parameters['file_exist'] = file_exists($moduleFilePath);
+
+            $this->renderFile(
+                'module/module-block-twig-template-append.twig',
+                $moduleFilePath,
+                $parameters,
+                FILE_APPEND
+            );
+            $moduleDirectory .= '/templates/';
+            if (file_exists($moduleDirectory)) {
+                if (!is_dir($moduleDirectory)) {
+                    throw new \RuntimeException(
+                        sprintf(
+                            'Unable to generate the templates directory as the target directory "%s" exists but is a file.',
+                            realpath($moduleDirectory)
+                        )
+                    );
+                }
+                if (!is_writable($moduleDirectory)) {
+                    throw new \RuntimeException(
+                        sprintf(
+                            'Unable to generate the templates directory as the target directory "%s" is not writable.',
+                            realpath($moduleDirectory)
+                        )
+                    );
+                }
+            }
+            $this->renderFile(
+                'module/templates/plugin-block-html.twig',
+                $moduleDirectory . $parameters['twig_template_name'] . '.html.twig',
+                $parameters
+            );
+        }
     }
 }
diff --git a/vendor/drupal/console/src/Generator/PluginCKEditorButtonGenerator.php b/vendor/drupal/console/src/Generator/PluginCKEditorButtonGenerator.php
index 782080d06b..4cb40d9f05 100644
--- a/vendor/drupal/console/src/Generator/PluginCKEditorButtonGenerator.php
+++ b/vendor/drupal/console/src/Generator/PluginCKEditorButtonGenerator.php
@@ -35,11 +35,17 @@ public function generate(array $parameters)
     {
         $class_name = $parameters['class_name'];
         $module = $parameters['module'];
-
+        $plugin_id = $parameters['plugin_id'];
+        
         $this->renderFile(
             'module/src/Plugin/CKEditorPlugin/ckeditorbutton.php.twig',
             $this->extensionManager->getPluginPath($module, 'CKEditorPlugin') . '/' . $class_name . '.php',
             $parameters
         );
+        $this->renderFile(
+            'module/src/Plugin/CKEditorPlugin/plugin.php.twig',
+             drupal_get_path('module', $module) . '/js/Plugin/'. $plugin_id .'/plugin.js',
+             $parameters
+        );
     }
 }
diff --git a/vendor/drupal/console/src/Generator/PluginDerivativeGenerator.php b/vendor/drupal/console/src/Generator/PluginDerivativeGenerator.php
new file mode 100644
index 0000000000..65f3a94c9e
--- /dev/null
+++ b/vendor/drupal/console/src/Generator/PluginDerivativeGenerator.php
@@ -0,0 +1,57 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Generator\PluginDerivativeGenerator.
+ */
+
+namespace Drupal\Console\Generator;
+
+use Drupal\Console\Core\Generator\Generator;
+use Drupal\Console\Extension\Manager;
+
+class PluginDerivativeGenerator extends Generator
+{
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * PermissionGenerator constructor.
+     *
+     * @param Manager $extensionManager
+     */
+    public function __construct(
+        Manager $extensionManager
+    ) {
+        $this->extensionManager = $extensionManager;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function generate(array $parameters)
+    {
+        $module = $parameters['module'];
+        $class_name = $parameters['class'];
+        $blockLabel = $parameters['block_label'];
+        $blockDescription = $parameters['block_description'];
+        $blockId = $parameters['block_id'];
+        
+        //block_derivative.php.twig
+        $this->renderFile(
+            'module/src/Plugin/Block/block_derivative.php.twig',
+            $this->extensionManager->getPluginPath($module, 'Block') . '/' . $class_name . '.php',
+            $parameters
+        );
+
+        //derivative_block_derivative.php.twig
+        $this->renderFile(
+            'module/src/Plugin/Derivative/derivative_block_derivative.php.twig',
+            $this->extensionManager->getPluginPath($module, 'Derivative') . '/' . $class_name . '.php',
+            $parameters
+        );
+        
+    }
+}
diff --git a/vendor/drupal/console/src/Generator/PluginFieldWidgetGenerator.php b/vendor/drupal/console/src/Generator/PluginFieldWidgetGenerator.php
index 9092392822..2bb0d0e081 100644
--- a/vendor/drupal/console/src/Generator/PluginFieldWidgetGenerator.php
+++ b/vendor/drupal/console/src/Generator/PluginFieldWidgetGenerator.php
@@ -37,10 +37,19 @@ public function generate(array $parameters)
         $module = $parameters['module'];
         $class_name = $parameters['class_name'];
 
+        $moduleInstance = $this->extensionManager->getModule($module);
+
         $this->renderFile(
             'module/src/Plugin/Field/FieldWidget/fieldwidget.php.twig',
             $this->extensionManager->getPluginPath($module, 'Field/FieldWidget') . '/' . $class_name . '.php',
             $parameters
         );
+
+        $this->renderFile(
+            'module/schema.yml.twig',
+            $moduleInstance->getPath() . '/' . $module . '.schema.yml',
+            $parameters,
+            FILE_APPEND
+        );
     }
 }
diff --git a/vendor/drupal/console/src/Generator/PluginMigrateDataParserGenerator.php b/vendor/drupal/console/src/Generator/PluginMigrateDataParserGenerator.php
new file mode 100644
index 0000000000..28aae0f6cb
--- /dev/null
+++ b/vendor/drupal/console/src/Generator/PluginMigrateDataParserGenerator.php
@@ -0,0 +1,45 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Generator\PluginMigrateDataParserGenerator.
+ */
+
+namespace Drupal\Console\Generator;
+
+use Drupal\Console\Core\Generator\Generator;
+use Drupal\Console\Extension\Manager;
+
+class PluginMigrateDataParserGenerator extends Generator
+{
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * PluginMigrateDataParserGenerator constructor.
+     *
+     * @param Manager $extensionManager
+     */
+    public function __construct(
+        Manager $extensionManager
+    ) {
+        $this->extensionManager = $extensionManager;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function generate(array $parameters)
+    {
+        $module = $parameters['module'];
+        $class_name = $parameters['class_name'];
+
+        $this->renderFile(
+            'module/src/Plugin/migrate_plus/data_parser/data_parser.php.twig',
+            $this->extensionManager->getPluginPath($module, 'migrate_plus') . '/data_parser/' . $class_name . '.php',
+            $parameters
+        );
+    }
+}
diff --git a/vendor/drupal/console/src/Generator/PluginQueueWorkerGenerator.php b/vendor/drupal/console/src/Generator/PluginQueueWorkerGenerator.php
new file mode 100644
index 0000000000..1262ea03e6
--- /dev/null
+++ b/vendor/drupal/console/src/Generator/PluginQueueWorkerGenerator.php
@@ -0,0 +1,50 @@
+<?php
+
+namespace Drupal\Console\Generator;
+
+use Drupal\Console\Core\Generator\Generator;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Core\Generator\GeneratorInterface;
+
+/**
+ * Class PluginQueueWorkerGenerator.
+ *
+ * @package Drupal\Console\Generator
+ */
+class PluginQueueWorkerGenerator extends Generator implements GeneratorInterface {
+
+  /**
+   * Extension Manager.
+   *
+   * @var \Drupal\Console\Extension\Manager
+   */
+  protected $extensionManager;
+
+  /**
+   * PluginQueueWorker constructor.
+   *
+   * @param \Drupal\Console\Extension\Manager $extensionManager
+   *   Extension manager.
+   */
+  public function __construct(
+       Manager $extensionManager
+   ) {
+    $this->extensionManager = $extensionManager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function generate(array $parameters) {
+    $module = $parameters['module'];
+    $queue_class = $parameters['class_name'];
+
+    $this->renderer->addSkeletonDir(__DIR__ . '/../../console/templates');
+    $this->renderFile(
+      'module/src/Plugin/QueueWorker/queue_worker.php.twig',
+      $this->extensionManager->getPluginPath($module, 'QueueWorker') . '/' . $queue_class . '.php',
+      $parameters
+    );
+  }
+
+}
diff --git a/vendor/drupal/console/src/Generator/PluginRulesActionGenerator.php b/vendor/drupal/console/src/Generator/PluginRulesActionGenerator.php
index 9a4f5592df..9deade9ad3 100644
--- a/vendor/drupal/console/src/Generator/PluginRulesActionGenerator.php
+++ b/vendor/drupal/console/src/Generator/PluginRulesActionGenerator.php
@@ -35,17 +35,10 @@ public function generate(array $parameters)
     {
         $module = $parameters['module'];
         $class_name = $parameters['class_name'];
-        $plugin_id = $parameters['plugin_id'];
 
         $this->renderFile(
-            'module/src/Plugin/Action/rulesaction.php.twig',
-            $this->extensionManager->getPluginPath($module, 'Action') . '/' . $class_name . '.php',
-            $parameters
-        );
-
-        $this->renderFile(
-            'module/system.action.action.yml.twig',
-            $this->extensionManager->getModule($module)->getPath() . '/config/install/system.action.' . $plugin_id . '.yml',
+            'module/src/Plugin/RulesAction/rulesaction.php.twig',
+            $this->extensionManager->getPluginPath($module, 'RulesAction') . '/' . $class_name . '.php',
             $parameters
         );
     }
diff --git a/vendor/drupal/console/src/Generator/PluginRulesConditionGenerator.php b/vendor/drupal/console/src/Generator/PluginRulesConditionGenerator.php
new file mode 100644
index 0000000000..97453f6e0a
--- /dev/null
+++ b/vendor/drupal/console/src/Generator/PluginRulesConditionGenerator.php
@@ -0,0 +1,45 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Generator\PluginBlockGenerator.
+ */
+
+namespace Drupal\Console\Generator;
+
+use Drupal\Console\Core\Generator\Generator;
+use Drupal\Console\Extension\Manager;
+
+class PluginRulesConditionGenerator extends Generator
+{
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * PluginRulesConditionGenerator constructor.
+     *
+     * @param Manager $extensionManager
+     */
+    public function __construct(
+        Manager $extensionManager
+    ) {
+        $this->extensionManager = $extensionManager;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function generate(array $parameters)
+    {
+        $module = $parameters['module'];
+        $class_name = $parameters['class_name'];
+
+        $this->renderFile(
+            'module/src/Plugin/Condition/rulescondition.php.twig',
+            $this->extensionManager->getPluginPath($module, 'Condition') . '/' . $class_name . '.php',
+            $parameters
+        );
+    }
+}
diff --git a/vendor/drupal/console/src/Generator/PluginRulesDataprocessorGenerator.php b/vendor/drupal/console/src/Generator/PluginRulesDataprocessorGenerator.php
new file mode 100644
index 0000000000..5049ddaec7
--- /dev/null
+++ b/vendor/drupal/console/src/Generator/PluginRulesDataprocessorGenerator.php
@@ -0,0 +1,45 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Generator\PluginBlockGenerator.
+ */
+
+namespace Drupal\Console\Generator;
+
+use Drupal\Console\Core\Generator\Generator;
+use Drupal\Console\Extension\Manager;
+
+class PluginRulesDataprocessorGenerator extends Generator
+{
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * PluginRulesDataprocessorGenerator constructor.
+     *
+     * @param Manager $extensionManager
+     */
+    public function __construct(
+      Manager $extensionManager
+    ) {
+        $this->extensionManager = $extensionManager;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function generate(array $parameters)
+    {
+        $module = $parameters['module'];
+        $class_name = $parameters['class_name'];
+
+        $this->renderFile(
+          'module/src/Plugin/RulesDataProcessor/rulesdataprocessor.php.twig',
+          $this->extensionManager->getPluginPath($module, 'RulesDataProcessor') . '/' . $class_name . '.php',
+          $parameters
+        );
+    }
+}
diff --git a/vendor/drupal/console/src/Generator/PluginSkeletonGenerator.php b/vendor/drupal/console/src/Generator/PluginSkeletonGenerator.php
index ce118a7553..f9b31ed9f5 100644
--- a/vendor/drupal/console/src/Generator/PluginSkeletonGenerator.php
+++ b/vendor/drupal/console/src/Generator/PluginSkeletonGenerator.php
@@ -39,6 +39,7 @@ public function generate(array $parameters)
 
         $parameters['plugin_annotation'] = array_pop(explode('\\', $pluginMetaData['pluginAnnotation']));
         $parameters['plugin_interface'] = array_pop(explode('\\', $pluginMetaData['pluginInterface']));
+        $parameters['namespace'] =  str_replace('/', '\\', $pluginMetaData['subdir']);
 
         $this->renderFile(
             'module/src/Plugin/skeleton.php.twig',
diff --git a/vendor/drupal/console/src/Generator/PluginValidationConstraintGenerator.php b/vendor/drupal/console/src/Generator/PluginValidationConstraintGenerator.php
new file mode 100644
index 0000000000..1c42f7805e
--- /dev/null
+++ b/vendor/drupal/console/src/Generator/PluginValidationConstraintGenerator.php
@@ -0,0 +1,63 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Generator\PluginValidationConstraintGenerator.
+ */
+
+namespace Drupal\Console\Generator;
+
+use Drupal\Console\Core\Generator\Generator;
+use Drupal\Console\Extension\Manager;
+
+class PluginValidationConstraintGenerator extends Generator
+{
+
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * PluginValidationConstraintGenerator constructor.
+     *
+     * @param Manager $extensionManager
+     */
+    public function __construct(Manager $extensionManager) {
+        $this->extensionManager = $extensionManager;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function generate(array $parameters)
+    {
+        $module = $parameters['module'];
+        $className = $parameters['class_name'];
+        $hook = $parameters['hook'];
+        $pluginPath = $this->extensionManager->getPluginPath($module, 'Validation/Constraint') . '/' . $className;
+
+        // Generates Contraint class.
+        $this->renderFile(
+            'module/src/Plugin/Validation/Constraint/constraint.php.twig',
+            $pluginPath . '.php',
+            $parameters
+        );
+
+        // Generates Validator class.
+        $this->renderFile(
+            'module/src/Plugin/Validation/Constraint/validator.php.twig',
+            $pluginPath . 'Validator.php',
+            $parameters
+        );
+
+        if (!empty($hook)) {
+            $this->renderFile(
+                'module/src/Entity/Bundle/entity-bundle-field-info-alter.php.twig',
+                $this->extensionManager->getModule($module)->getPath() . '/' . $module . '.module',
+                $parameters,
+                FILE_APPEND
+            );
+        }
+    }
+}
diff --git a/vendor/drupal/console/src/Generator/PluginViewsFieldGenerator.php b/vendor/drupal/console/src/Generator/PluginViewsFieldGenerator.php
index 997162e695..b2bf4bafe9 100644
--- a/vendor/drupal/console/src/Generator/PluginViewsFieldGenerator.php
+++ b/vendor/drupal/console/src/Generator/PluginViewsFieldGenerator.php
@@ -34,18 +34,22 @@ public function __construct(
     public function generate(array $parameters)
     {
         $module = $parameters['module'];
-        $class_name = $parameters['class_name'];
+        $fields = $parameters['fields'];
 
         $this->renderFile(
             'module/module.views.inc.twig',
             $this->extensionManager->getModule($module)->getPath() . '/' . $module . '.views.inc',
-            $parameters
+            $parameters,
+            FILE_APPEND
         );
 
-        $this->renderFile(
-            'module/src/Plugin/Views/field/field.php.twig',
-            $this->extensionManager->getPluginPath($module, 'views/field') . '/' . $class_name . '.php',
-            $parameters
-        );
+        foreach ($fields as $field) {
+            $field['module'] = $module;
+            $this->renderFile(
+                'module/src/Plugin/Views/field/field.php.twig',
+                $this->extensionManager->getPluginPath($module, 'views/field') . '/' . $field['class_name'] . '.php',
+                $field
+            );
+        }
     }
 }
diff --git a/vendor/drupal/console/src/Generator/ThemeGenerator.php b/vendor/drupal/console/src/Generator/ThemeGenerator.php
index 5ae64db2ad..25a3a5ee2f 100644
--- a/vendor/drupal/console/src/Generator/ThemeGenerator.php
+++ b/vendor/drupal/console/src/Generator/ThemeGenerator.php
@@ -9,6 +9,7 @@
 
 use Drupal\Console\Core\Generator\Generator;
 use Drupal\Console\Extension\Manager;
+use Drupal\Component\Serialization\Yaml;
 
 /**
  *
@@ -71,6 +72,12 @@ public function generate(array $parameters)
             }
         }
 
+        if($parameters['base_theme_regions'] && $parameters['base_theme']) {
+            $defaultRegions = Yaml::decode(file_get_contents($parameters['base_theme_path']));
+            $parameters['base_theme_regions'] = $defaultRegions['regions'];
+            $parameters['base_theme_regions_hidden'] = $defaultRegions['regions_hidden'];
+        }
+
         $themePath = $dir . '/' . $machine_name;
 
         $this->renderFile(
diff --git a/vendor/drupal/console/src/Generator/ThemeSettingGenerator.php b/vendor/drupal/console/src/Generator/ThemeSettingGenerator.php
new file mode 100644
index 0000000000..bf6c8ac91e
--- /dev/null
+++ b/vendor/drupal/console/src/Generator/ThemeSettingGenerator.php
@@ -0,0 +1,154 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Generator\ThemeSettingGenerator.
+ */
+
+namespace Drupal\Console\Generator;
+
+use Drupal\Console\Core\Generator\Generator;
+use Drupal\Console\Extension\Manager;
+use Drupal\Component\Serialization\Yaml;
+use Symfony\Component\Filesystem\Filesystem;
+use Symfony\Component\Filesystem\Exception\IOExceptionInterface;
+use Symfony\Component\Yaml\Dumper;
+use Symfony\Component\Yaml\Parser;
+use Drupal\Console\Core\Style\DrupalStyle;
+
+/**
+ *
+ */
+class ThemeSettingGenerator extends Generator
+{
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * AuthenticationProviderGenerator constructor.
+     *
+     * @param Manager $extensionManager
+     */
+    public function __construct(
+        Manager $extensionManager
+    ) {
+        $this->extensionManager = $extensionManager;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function generate(array $parameters)
+    {
+        $dir = $parameters['theme_path'];
+        $theme = $parameters['theme'];
+        $ymlFile = new Parser();
+        $filesystem = new Filesystem();
+        $file_path = $dir.'/config/install/'.$theme.'.settings.yml';
+        $yaml = new Parser();
+        $data_yml = $this->arrData($parameters);
+        if ($filesystem->exists($dir)) {
+            if ($filesystem->exists($file_path)) {
+                $yaml_parsed = $yaml->parse(file_get_contents($file_path));
+                if (!empty($yaml_parsed) && $parameters['merge-existing-file']) {
+                    $file_yaml = array();
+                    $file_yaml = array_replace_recursive($yaml_parsed, $data_yml);
+                    $this->saveData($filesystem, $file_path, $file_yaml);
+                } elseif (empty($yaml_parsed)) {
+                    $this->saveData($filesystem, $file_path, $data_yml);
+                }
+                return 0;
+            } else {
+                $this->saveData($filesystem, $file_path, $data_yml);
+                return 0;    
+            }
+        } else {
+            return 1;
+        }
+    }
+
+    
+    /**
+     * {@inheritdoc}
+     */
+    public function createFolders($dir)
+    {
+        try {
+            $filesystem = new Filesystem();
+            $filesystem->mkdir($dir.'/config');
+            $filesystem->mkdir($dir.'/config/install');
+        } catch (IOExceptionInterface $e) {
+            $this->getIo()->error('An error occurred while creating your directory at: "%s"', ' '.$e->getPath());
+            return 1;
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function arrData($parameters)
+    {
+        return [
+            'favicon' => [
+                'mimetype' => 'image/vnd.microsoft.icon',
+                'path' => '',
+                'url' => '',
+                'use_default' => $parameters['favicon'], 
+            ],
+            'features' => [
+                'comment_user_picture' => $parameters['commentUserPicture'],
+                'comment_user_verification' => $parameters['commentUserVerification'],
+                'favicon' => $parameters['favicon'],
+                'node_user_picture' => $parameters['nodeUserPicture'],
+            ],
+            'logo' => [
+                'path' => '',
+                'url' => '',
+                'use_default' => $parameters['logo'],
+            ],
+        ];   
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function saveData($filesystem, $file_path, $data_yml)
+    {
+        $yaml = new Parser();
+        $dumper = new Dumper();
+        try {
+            $yaml = $dumper->dump($data_yml, 10);
+        } catch (\Exception $e) {
+            $this->getIo()->error(
+                sprintf(
+                    '%s: %s',
+                    'Error on yml',
+                    $e->getMessage()
+                )
+            );
+            return;
+        }
+        try {
+            file_put_contents($file_path, $yaml);
+        } catch (\Exception $e) {
+            $this->getIo()->error(
+                sprintf(
+                    '%s: %s',
+                    'Error saving the file',
+                    $e->getMessage()
+                )
+            );
+            return;
+        }
+
+        $this->getIo()->success(
+            sprintf(
+                'The file is on: %s',
+                $file_path
+            )
+        );
+    }
+
+}
diff --git a/vendor/drupal/console/src/Utils/Create/NodeData.php b/vendor/drupal/console/src/Utils/Create/NodeData.php
index f4d1f41fea..4d1e98dccd 100644
--- a/vendor/drupal/console/src/Utils/Create/NodeData.php
+++ b/vendor/drupal/console/src/Utils/Create/NodeData.php
@@ -24,6 +24,7 @@ class NodeData extends Base
      * @param $limit
      * @param $titleWords
      * @param $timeRange
+     * @param $revision
      *
      * @return array
      */
@@ -32,6 +33,7 @@ public function create(
         $limit,
         $titleWords,
         $timeRange,
+        $revision,
         $language = LanguageInterface::LANGCODE_NOT_SPECIFIED
     ) {
         $nodes = [];
@@ -55,6 +57,13 @@ public function create(
 
                 $this->generateFieldSampleData($node);
                 $node->save();
+
+                if($revision) {
+                    for ($a = 0; $a < 3; $a++) {
+                        $this->addRevision($node, $a);
+                    }
+                }
+
                 $nodes['success'][] = [
                     'nid' => $node->id(),
                     'node_type' => $bundles[$contentType],
@@ -72,4 +81,16 @@ public function create(
 
         return $nodes;
     }
+
+    /**
+     * @param $node
+     * @param $count
+     */
+    private function addRevision($node, $count) {
+        $node->setTitle($this->getRandom()->sentences(mt_rand(1, 5), true));
+        $node->setNewRevision(TRUE);
+        $node->revision_log = "Revision number $count was created";
+        $node->setRevisionCreationTime(REQUEST_TIME);
+        $node->save();
+    }
 }
diff --git a/vendor/drupal/console/src/Utils/DrupalApi.php b/vendor/drupal/console/src/Utils/DrupalApi.php
index 64a740585c..57a97d1a53 100644
--- a/vendor/drupal/console/src/Utils/DrupalApi.php
+++ b/vendor/drupal/console/src/Utils/DrupalApi.php
@@ -131,7 +131,7 @@ public function getVocabularies()
      *
      * @return array
      */
-    public function getRoles($reset=false, $authenticated=false, $anonymous=false)
+    public function getRoles($reset = false, $authenticated = false, $anonymous = false)
     {
         if ($reset || !$this->roles) {
             $roles = $this->entityTypeManager->getStorage('user_role')->loadMultiple();
@@ -232,86 +232,6 @@ public function downloadFile($url, $destination)
         return file_exists($destination);
     }
 
-    /**
-     * Gets Drupal modules releases from Packagist API.
-     *
-     * @param string $module
-     * @param int    $limit
-     * @param bool   $unstable
-     *
-     * @return array
-     */
-    public function getPackagistModuleReleases($module, $limit = 10, $unstable = true)
-    {
-        if (!trim($module)) {
-            return [];
-        }
-
-        return $this->getComposerReleases(
-            sprintf(
-                'http://packagist.drupal-composer.org/packages/drupal/%s.json',
-                trim($module)
-            ),
-            $limit,
-            $unstable
-        );
-    }
-
-    /**
-     * Gets Drupal releases from Packagist API.
-     *
-     * @param string $url
-     * @param int    $limit
-     * @param bool   $unstable
-     *
-     * @return array
-     */
-    private function getComposerReleases($url, $limit = 10, $unstable = false)
-    {
-        if (!$url) {
-            return [];
-        }
-
-        $packagistResponse = $this->httpClient->getUrlAsString($url);
-
-        if ($packagistResponse->getStatusCode() != 200) {
-            throw new \Exception('Invalid path.');
-        }
-
-        try {
-            $packagistJson = json_decode(
-                $packagistResponse->getBody()->getContents()
-            );
-        } catch (\Exception $e) {
-            return [];
-        }
-
-        $versions = array_keys((array)$packagistJson->package->versions);
-
-        // Remove Drupal 7 versions
-        $i = 0;
-        foreach ($versions as $version) {
-            if (0 === strpos($version, "7.") || 0 === strpos($version, "dev-7.")) {
-                unset($versions[$i]);
-            }
-            $i++;
-        }
-
-        if (!$unstable) {
-            foreach ($versions as $key => $version) {
-                if (strpos($version, "-")) {
-                    unset($versions[$key]);
-                }
-            }
-        }
-
-        if (is_array($versions)) {
-            return array_slice($versions, 0, $limit);
-        }
-
-        return [];
-    }
-
     /**
      * @Todo: Remove when issue https://www.drupal.org/node/2556025 get resolved
      *
diff --git a/vendor/drupal/console/src/Utils/Site.php b/vendor/drupal/console/src/Utils/Site.php
index f3baffc058..2bb0b222eb 100644
--- a/vendor/drupal/console/src/Utils/Site.php
+++ b/vendor/drupal/console/src/Utils/Site.php
@@ -2,6 +2,9 @@
 
 namespace Drupal\Console\Utils;
 
+use Drupal\Console\Core\Style\DrupalStyle;
+use Symfony\Component\Console\Input\ArrayInput;
+use Symfony\Component\Console\Output\ConsoleOutput;
 use Symfony\Component\DependencyInjection\Reference;
 use Symfony\Component\Finder\Finder;
 use Drupal\Core\DependencyInjection\ContainerBuilder;
@@ -28,6 +31,11 @@ class Site
      */
     protected $cacheServicesFile;
 
+    /**
+     * @var DrupalStyle
+     */
+    protected $io;
+
     /**
      * Site constructor.
      *
@@ -40,6 +48,10 @@ public function __construct(
     ) {
         $this->appRoot = $appRoot;
         $this->configurationManager = $configurationManager;
+
+        $output = new ConsoleOutput();
+        $input = new ArrayInput([]);
+        $this->io = new DrupalStyle($input, $output);
     }
 
     public function loadLegacyFile($legacyFile, $relative = true)
@@ -167,6 +179,21 @@ public function getAutoload()
         return include $autoLoadFile;
     }
 
+    /**
+    * @param InputInterface $input
+    * @return string
+    */
+    public function getMultisiteName($input)
+    {
+        $uri = $input->getParameterOption(['--uri', '-l'], 'default');
+
+        if ($uri && !preg_match('/^(http|https):\/\//', $uri)) {
+            $uri = sprintf('http://%s', $uri);
+        }
+
+        return  parse_url($uri, PHP_URL_HOST);
+    }
+
     /**
      * @return boolean
      */
@@ -180,9 +207,41 @@ public function multisiteMode($uri)
     }
 
     /**
+     * @param string $uri
+     *
      * @return boolean
      */
     public function validMultisite($uri)
+    {
+        $sites = $this->getAllMultisites();
+
+        if (isset($sites[$uri]) && is_dir($this->appRoot . "/sites/" . $sites[$uri])) {
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * @param string $uri
+     *
+     * @return string
+     */
+    public function getMultisiteDir($uri)
+    {
+        if(!$this->validMultisite($uri)) {
+            $this->io->error('Invalid multisite, please debug multisite using command drupal debug:mulltisite and choose one');
+            exit();
+        }
+
+        return $this->getAllMultisites()[$uri];
+
+    }
+
+    /**
+     * @return mixed
+     */
+    private function getAllMultisites()
     {
         $multiSiteFile = sprintf(
             '%s/sites/sites.php',
@@ -191,15 +250,11 @@ public function validMultisite($uri)
 
         if (file_exists($multiSiteFile)) {
             include $multiSiteFile;
-        } else {
-            return false;
-        }
 
-        if (isset($sites[$uri]) && is_dir($this->appRoot . "/sites/" . $sites[$uri])) {
-            return true;
+            return $sites;
+        } else {
+            return null;
         }
-
-        return false;
     }
 
     public function getCachedServicesFile()
diff --git a/vendor/drupal/console/src/Utils/Validator.php b/vendor/drupal/console/src/Utils/Validator.php
index b70b93aee9..7385892684 100644
--- a/vendor/drupal/console/src/Utils/Validator.php
+++ b/vendor/drupal/console/src/Utils/Validator.php
@@ -15,9 +15,13 @@ class Validator
     const REGEX_CLASS_NAME = '/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]+$/';
     const REGEX_COMMAND_CLASS_NAME = '/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]+Command$/';
     const REGEX_CONTROLLER_CLASS_NAME = '/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]+Controller$/';
-    const REGEX_MACHINE_NAME = '/^[a-z0-9_]+$/';
+    const REGEX_MACHINE_NAME = '/^[a-z][a-z\d_]+$/';
+    const REGEX_DEPENDENCY_NAME = '/^[a-z0-9_:]+$/';
+    const REGEX_URI_NAME = '/^[a-z0-9_.]+$/';
     // This REGEX remove spaces between words
     const REGEX_REMOVE_SPACES = '/[\\s+]/';
+    // Max length to 32
+    const MAX_MACHINE_NAME = 32;
 
     protected $appRoot;
 
@@ -63,6 +67,20 @@ public function validateClassName($class_name)
         }
     }
 
+    public function validateUriName($uri_name)
+    {
+        if (preg_match(self::REGEX_URI_NAME, $uri_name)) {
+            return $uri_name;
+        } else {
+            throw new \InvalidArgumentException(
+                sprintf(
+                    'Uri name "%s" is invalid, it must starts with a letter, followed by any number of letters, numbers, or underscores.',
+                    $uri_name
+                )
+            );
+        }
+    }
+
     public function validateBundleTitle($bundle_title)
     {
         if (!empty($bundle_title)) {
@@ -116,7 +134,21 @@ public function validateControllerName($class_name)
 
     public function validateMachineName($machine_name)
     {
-        if (preg_match(self::REGEX_MACHINE_NAME, $machine_name)) {
+        // @see https://www.drupal.org/docs/8/creating-custom-modules/naming-and-placing-your-drupal-8-module
+        $reserved_words = [
+            'src', 'lib', 'vendor', 'assets', 'css', 'files', 'images', 'js', 'misc', 'templates', 'includes',
+            'fixtures', 'Drupal',
+        ];
+        if (preg_match(self::REGEX_MACHINE_NAME, $machine_name) && !in_array($machine_name, $reserved_words)) {
+            if (strlen($machine_name) > self::MAX_MACHINE_NAME) {
+                throw new \InvalidArgumentException(
+                    sprintf(
+                        'Machine name "%s" is longer than %s symbols.',
+                        $machine_name,
+                        self::MAX_MACHINE_NAME
+                    )
+                );
+            }
             return $machine_name;
         } else {
             throw new \InvalidArgumentException(
@@ -166,7 +198,7 @@ public function validateMachineNameList($list)
         $list = explode(',', $this->removeSpaces($list));
         foreach ($list as $key => $module) {
             if (!empty($module)) {
-                if (preg_match(self::REGEX_MACHINE_NAME, $module)) {
+                if (preg_match(self::REGEX_DEPENDENCY_NAME, $module)) {
                     $list_checked['success'][] = $module;
                 } else {
                     $list_checked['fail'][] = $module;
@@ -282,7 +314,7 @@ public function getMissingModules($moduleList)
 
         return array_diff($moduleList, $modules);
     }
-
+    
     /**
      * @param $moduleList
      * @return array
@@ -405,4 +437,18 @@ public function validateRoleExistence($role, $roles) {
     public function validateRoleNotExistence($role, $roles) {
         return $this->validateRole($role, $roles, false);
     }
+
+    /**
+     * @param $themeList
+     * @return array
+     */
+    public function getMissingThemes($themeList)
+    {
+        $themes = $this->extensionManager->discoverThemes()
+            ->showInstalled()
+            ->showNoCore()
+            ->getList(true);
+
+        return array_diff($themeList, $themes);
+    }
 }
diff --git a/vendor/drupal/console/templates/base/class.php.twig b/vendor/drupal/console/templates/base/class.php.twig
index e8275a1582..7bca23cf96 100644
--- a/vendor/drupal/console/templates/base/class.php.twig
+++ b/vendor/drupal/console/templates/base/class.php.twig
@@ -23,6 +23,7 @@ use {{ service.class }};
    * @var \{{ service.class }}
    */
   protected ${{service.camel_case_name}};
+
 {% endfor %}
 {% endif %}
 {% endblock %}
diff --git a/vendor/drupal/console/templates/database/add-default.php.twig b/vendor/drupal/console/templates/database/add-default.php.twig
new file mode 100644
index 0000000000..175c133d48
--- /dev/null
+++ b/vendor/drupal/console/templates/database/add-default.php.twig
@@ -0,0 +1,10 @@
+
+$databases['default']['default'] = [
+  'database' => '{{ database }}',
+  'username' => '{{ username }}',
+  'password' => '{{ password }}',
+  'host' => '{{ host }}',
+  'port' => '{{ port }}',
+  'driver' => '{{ driver }}',
+  'prefix' => '{{ prefix }}',
+];
diff --git a/vendor/drupal/console/templates/module/composer.json.twig b/vendor/drupal/console/templates/module/composer.json.twig
index 232f89d3ea..32c8035a0f 100644
--- a/vendor/drupal/console/templates/module/composer.json.twig
+++ b/vendor/drupal/console/templates/module/composer.json.twig
@@ -1,14 +1,56 @@
 {
-  "name": "drupal/{{ machine_name }}",
-  "type": "drupal-{{ type }}",
-  "description": "{{ description }}",
-  "keywords": ["Drupal"],
-  "license": "GPL-2.0+",
-  "homepage": "https://www.drupal.org/project/{{ machine_name }}",
-  "minimum-stability": "dev",
-  "support": {
-    "issues": "https://www.drupal.org/project/issues/{{ machine_name }}",
-    "source": "http://cgit.drupalcode.org/{{ machine_name }}"
-  },
-  "require": { }
+    "name": "{{ machine_name }}",
+    "type": "{{ type }}",
+    "description": "{{ description }}",
+{% if keywords is defined and keywords is not empty %}
+    "keywords": [
+{% for keyword in keywords %}
+        "{{ keyword }}"{% if not loop.last %},{% endif %}
+
+{% endfor %}
+    ],
+{% endif %}
+{% if lincense is defined and lincense is not empty %}
+    "license": "{{ license }}",
+{% endif %}
+{% if homepage is defined and homepage is not empty %}
+    "homepage": "{{ homepage }}",
+{% endif %}
+{% if minimum_stability is defined and minimum_stability is not empty %}
+    "minimum-stability": "{{ minimum_stability }}",
+{% endif %}
+{% if authors is defined and authors is not empty %}
+    "authors": [
+{% for author in authors %}
+        {
+{% if author.name is defined and author.name is not empty %}
+            "name" : "{{ author.name }}",
+{% endif %}
+{% if author.email is defined and author.email is not empty %}
+            "email" : "{{ author.email }}",
+{% endif %}
+{% if author.homepage is defined and author.homepage is not empty %}
+            "homepage" : "{{ author.homepage }}",
+{% endif %}
+{% if author.role is defined and author.role is not empty %}
+            "role" : "{{ author.role }}"
+{% endif %}
+        }{% if not loop.last %},{% endif %}
+{% endfor %}
+    ],
+{% endif %}
+{% if support_items is defined and support_items is not empty %}
+    "support": {
+{% for support in support_items %}
+        "{{ support.channel }}": "{{ support.url }}",
+{% endfor %}
+    },
+{% endif %}
+{% if required_items is defined and required_items is not empty %}
+    "require": {
+{% for required_item in required_items %}
+        "{{ required_item.name }}": "{{ required_item.version }}",
+{% endfor %}
+    }
+{% endif %}
 }
diff --git a/vendor/drupal/console/templates/module/help.php.twig b/vendor/drupal/console/templates/module/help.php.twig
index 28248c1e50..7a4ceb8cf1 100644
--- a/vendor/drupal/console/templates/module/help.php.twig
+++ b/vendor/drupal/console/templates/module/help.php.twig
@@ -1,8 +1,15 @@
 {% block file_methods %}
 {% if not file_exists %}
 {% include 'module/php_tag.php.twig' %}
+
+/**
+ * @file
+ * Main module help for the {{ machine_name }} module.
+ */
+
 {% endif %}
 use Drupal\Core\Routing\RouteMatchInterface;
+
 /**
  * Implements hook_help().
  */
@@ -18,5 +25,4 @@ function {{machine_name}}_help($route_name, RouteMatchInterface $route_match) {
     default:
   }
 }
-
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/js/commands.php.twig b/vendor/drupal/console/templates/module/js/commands.php.twig
index 1c37459dc8..db4db4b4ee 100644
--- a/vendor/drupal/console/templates/module/js/commands.php.twig
+++ b/vendor/drupal/console/templates/module/js/commands.php.twig
@@ -1,5 +1,10 @@
+/**
+* @file
+*/
+
 (function ($, Drupal) {
 Drupal.AjaxCommands.prototype.{{ method }} = function (ajax, response, status) {
   console.log(response.message);
 }
-})(jQuery, Drupal);
\ No newline at end of file
+
+})(jQuery, Drupal);
diff --git a/vendor/drupal/console/templates/module/links.action-entity.yml.twig b/vendor/drupal/console/templates/module/links.action-entity.yml.twig
index 2be50635cd..ae3baa6f8f 100644
--- a/vendor/drupal/console/templates/module/links.action-entity.yml.twig
+++ b/vendor/drupal/console/templates/module/links.action-entity.yml.twig
@@ -3,4 +3,3 @@ entity.{{ entity_name }}.add_form:
   title: 'Add {{ label }}'
   appears_on:
     - entity.{{ entity_name }}.collection
-
diff --git a/vendor/drupal/console/templates/module/links.menu-entity-config.yml.twig b/vendor/drupal/console/templates/module/links.menu-entity-config.yml.twig
index 0afe1feeb4..150f4106ea 100644
--- a/vendor/drupal/console/templates/module/links.menu-entity-config.yml.twig
+++ b/vendor/drupal/console/templates/module/links.menu-entity-config.yml.twig
@@ -7,4 +7,3 @@ entity.{{ entity_name }}.collection:
   description: 'List {{ label }} (bundles)'
   parent: system.admin_structure
   weight: 99
-
diff --git a/vendor/drupal/console/templates/module/links.menu.yml.twig b/vendor/drupal/console/templates/module/links.menu.yml.twig
index 0842ba6a05..9f5f08867d 100644
--- a/vendor/drupal/console/templates/module/links.menu.yml.twig
+++ b/vendor/drupal/console/templates/module/links.menu.yml.twig
@@ -4,4 +4,3 @@
   description: '{{ menu_link_desc }}'
   parent: {{ menu_parent }}
   weight: 99
-
diff --git a/vendor/drupal/console/templates/module/links.task-entity-content.yml.twig b/vendor/drupal/console/templates/module/links.task-entity-content.yml.twig
index 206389c77a..94dc2ccecc 100644
--- a/vendor/drupal/console/templates/module/links.task-entity-content.yml.twig
+++ b/vendor/drupal/console/templates/module/links.task-entity-content.yml.twig
@@ -29,4 +29,3 @@ entity.{{ entity_name }}.delete_form:
   base_route:  entity.{{ entity_name }}.canonical
   title: Delete
   weight: 10
-
diff --git a/vendor/drupal/console/templates/module/module-block-twig-template-append.twig b/vendor/drupal/console/templates/module/module-block-twig-template-append.twig
new file mode 100644
index 0000000000..050d6e7e47
--- /dev/null
+++ b/vendor/drupal/console/templates/module/module-block-twig-template-append.twig
@@ -0,0 +1,22 @@
+{% if file_exist == false %}
+<?php
+
+/**
+ * @file
+ * module file.
+ */
+{% endif %}
+
+/**
+ * Implements hook_theme().
+ */
+function {{module}}_theme() {
+  return [
+    '{{machine_name}}' => [
+      'variables' => [
+        'content' => NULL
+      ],
+      'render element' => 'children',
+    ],
+  ];
+}
diff --git a/vendor/drupal/console/templates/module/module-file.twig b/vendor/drupal/console/templates/module/module-file.twig
index 9dc8767de0..f78c5fbfa0 100644
--- a/vendor/drupal/console/templates/module/module-file.twig
+++ b/vendor/drupal/console/templates/module/module-file.twig
@@ -1,5 +1,6 @@
-{% extends "base/file.php.twig" %}
-
-{% block file_path %}{{machine_name}}.module.{% endblock %}
-
+{% include 'module/php_tag.php.twig' %}
 
+/**
+ * @file
+ * Contains {{machine_name}}.module.
+ */
diff --git a/vendor/drupal/console/templates/module/module.twig b/vendor/drupal/console/templates/module/module.twig
index 53540372f5..4ff21d17ad 100644
--- a/vendor/drupal/console/templates/module/module.twig
+++ b/vendor/drupal/console/templates/module/module.twig
@@ -16,7 +16,9 @@ function {{machine_name}}_help($route_name, RouteMatchInterface $route_match) {
     case 'help.page.{{ machine_name }}':
       $output = '';
       $output .= '<h3>' . t('About') . '</h3>';
+{% if description %}
       $output .= '<p>' . t('{{ description|escape }}') . '</p>';
+{% endif %}
       return $output;
 
     default:
diff --git a/vendor/drupal/console/templates/module/module.views.inc.twig b/vendor/drupal/console/templates/module/module.views.inc.twig
index 98e755c135..31844fa45e 100644
--- a/vendor/drupal/console/templates/module/module.views.inc.twig
+++ b/vendor/drupal/console/templates/module/module.views.inc.twig
@@ -4,16 +4,6 @@
 
 {% block extra_info %} * Provide a custom views field data that isn't tied to any other module.{% endblock %}
 
-{% block use_class %}
-use Drupal\Component\Utility\NestedArray;
-use Drupal\Core\Entity\EntityStorageInterface;
-use Drupal\Core\Entity\Sql\SqlContentEntityStorage;
-use Drupal\Core\Render\Markup;
-use Drupal\field\FieldConfigInterface;
-use Drupal\field\FieldStorageConfigInterface;
-use Drupal\system\ActionConfigEntityInterface;
-{% endblock %}
-
 {% block file_methods %}
 /**
 * Implements hook_views_data().
@@ -26,15 +16,15 @@ function {{module}}_views_data() {
       '#global' => [],
     ];
 
-
-    $data['views']['{{ class_machine_name }}'] = [
-        'title' => t('{{ title }}'),
-        'help' => t('{{ description }}'),
+{% for field in fields %}
+    $data['views']['{{ field.class_machine_name }}'] = [
+        'title' => t('{{ field.title }}'),
+        'help' => t('{{ field.description }}'),
         'field' => [
-            'id' => '{{ class_machine_name }}',
+            'id' => '{{ field.class_machine_name }}',
         ],
     ];
-
+{% endfor %}
     return $data;
 }
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/permission.yml.twig b/vendor/drupal/console/templates/module/permission.yml.twig
index 423e5ee279..b97f973ca1 100644
--- a/vendor/drupal/console/templates/module/permission.yml.twig
+++ b/vendor/drupal/console/templates/module/permission.yml.twig
@@ -1,5 +1,4 @@
 {% if permissions|length %}
-
 {% for permission in permissions %}
 {{ permission.permission }}:
   title: '{{ permission.title }}'
diff --git a/vendor/drupal/console/templates/module/permissions-entity-content.yml.twig b/vendor/drupal/console/templates/module/permissions-entity-content.yml.twig
index 73e8b6804b..beabca8336 100644
--- a/vendor/drupal/console/templates/module/permissions-entity-content.yml.twig
+++ b/vendor/drupal/console/templates/module/permissions-entity-content.yml.twig
@@ -30,3 +30,8 @@ delete all {{ label|lower }} revisions:
   title: 'Delete all revisions'
   description: 'Role requires permission to <em>view {{ label }} revisions</em> and <em>delete rights</em> for {{ label|lower }} entities in question or <em>administer {{ label|lower }} entities</em>.'
 {% endif %}
+
+{% if has_bundle_permissions %}
+permission_callbacks:
+  - \Drupal\{{ module }}\{{ entity_class}}Permissions::generatePermissions
+{% endif %}
diff --git a/vendor/drupal/console/templates/module/post-update.php.twig b/vendor/drupal/console/templates/module/post-update.php.twig
index 0b729e3e2c..3334f4c67f 100644
--- a/vendor/drupal/console/templates/module/post-update.php.twig
+++ b/vendor/drupal/console/templates/module/post-update.php.twig
@@ -6,7 +6,7 @@
  * Implements hook_post_update_NAME() on Module {{ module }} Post Update {{ post_update_name }}.
  */
 function {{ module }}_post_update_{{ post_update_name }}(&$sandbox) {
-    drupal_set_message('Module {{ module }} Post Update # {{ post_update_name }} () was executed successfully.');
+    \Drupal::messenger()->addMessage('Module {{ module }} Post Update # {{ post_update_name }} () was executed successfully.');
 }
 
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/routing-form.yml.twig b/vendor/drupal/console/templates/module/routing-form.yml.twig
index f387bc0589..4a0f623155 100644
--- a/vendor/drupal/console/templates/module/routing-form.yml.twig
+++ b/vendor/drupal/console/templates/module/routing-form.yml.twig
@@ -1,5 +1,4 @@
 {% if class_name is defined %}
-
 {{ module_name }}.{{form_id}}:
   path: '{{ path }}'
   defaults:
@@ -13,6 +12,5 @@
 {% else %}
   requirements:
     _access: 'TRUE'
-  {% endif %}
 {% endif %}
-
+{% endif %}
diff --git a/vendor/drupal/console/templates/module/schema.yml.twig b/vendor/drupal/console/templates/module/schema.yml.twig
new file mode 100644
index 0000000000..8ec814be8b
--- /dev/null
+++ b/vendor/drupal/console/templates/module/schema.yml.twig
@@ -0,0 +1,10 @@
+field.widget.settings.{{ plugin_id }}:
+  type: mapping
+  label: '{{ label }} widget settings'
+  mapping:
+    size:
+      type: integer
+      label: 'Size'
+    placeholder:
+      type: textfield
+      label: 'Placeholder'
diff --git a/vendor/drupal/console/templates/module/services.yml.twig b/vendor/drupal/console/templates/module/services.yml.twig
index 11dfefc628..77df2fadd0 100644
--- a/vendor/drupal/console/templates/module/services.yml.twig
+++ b/vendor/drupal/console/templates/module/services.yml.twig
@@ -1,7 +1,12 @@
-{% if name is defined %}
 {% if not file_exists %}
 services:
 {% endif %}
+{% if logger_channel is defined %}
+  logger.channel.{{ module }}:
+    parent: logger.channel_base
+    arguments: ['{{ module }}']
+{% endif %}
+{% if name is defined %}
   {{ name | lower }}:
     class: {{ class_path }}
 {% if services is defined %}
diff --git a/vendor/drupal/console/templates/module/src/Command/command.php.twig b/vendor/drupal/console/templates/module/src/Command/command.php.twig
index 0b16f4f5d2..647d6d660f 100644
--- a/vendor/drupal/console/templates/module/src/Command/command.php.twig
+++ b/vendor/drupal/console/templates/module/src/Command/command.php.twig
@@ -16,14 +16,13 @@ use Drupal\Console\Core\Command\ContainerAwareCommand;
 {% else %}
 use Drupal\Console\Core\Command\Command;
 {% endif %}
-use Drupal\Console\Annotations\DrupalCommand;
 {% endblock %}
 
 {% block class_declaration %}
 /**
  * Class {{ class_name }}.
  *
- * @DrupalCommand (
+ * Drupal\Console\Annotations\DrupalCommand (
  *     extension="{{extension}}",
  *     extensionType="{{ extension_type }}"
  * )
@@ -39,6 +38,7 @@ class {{ class_name }} extends {% if container_aware %}ContainerAwareCommand{% e
 {{ serviceClassInitialization(services) }}
     parent::__construct();
   }
+
 {% endif %}
 {% endblock %}
 
@@ -53,9 +53,9 @@ class {{ class_name }} extends {% if container_aware %}ContainerAwareCommand{% e
   }
 
 {% if initialize %}
- /**
-  * {@inheritdoc}
-  */
+  /**
+   * {@inheritdoc}
+   */
   protected function initialize(InputInterface $input, OutputInterface $output) {
     parent::initialize($input, $output);
     $this->getIo()->info('initialize');
@@ -63,9 +63,9 @@ class {{ class_name }} extends {% if container_aware %}ContainerAwareCommand{% e
 
 {% endif %}
 {% if interact %}
- /**
-  * {@inheritdoc}
-  */
+  /**
+   * {@inheritdoc}
+   */
   protected function interact(InputInterface $input, OutputInterface $output) {
     $this->getIo()->info('interact');
   }
@@ -81,5 +81,4 @@ class {{ class_name }} extends {% if container_aware %}ContainerAwareCommand{% e
     $this->generator->generate([]);
 {% endif %}
   }
-
-{%- endblock -%}
+{% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Command/console/translations/en/command.yml.twig b/vendor/drupal/console/templates/module/src/Command/console/translations/en/command.yml.twig
index 203b893272..15b3958b67 100644
--- a/vendor/drupal/console/templates/module/src/Command/console/translations/en/command.yml.twig
+++ b/vendor/drupal/console/templates/module/src/Command/console/translations/en/command.yml.twig
@@ -2,4 +2,4 @@ description: 'Drupal Console generated command.'
 options: {}
 arguments: {}
 messages:
-    success: 'I am a new generated command.'
\ No newline at end of file
+    success: 'I am a new generated command.'
diff --git a/vendor/drupal/console/templates/module/src/Controller/controller.php.twig b/vendor/drupal/console/templates/module/src/Controller/controller.php.twig
index 568f3b450f..0743ee5e75 100644
--- a/vendor/drupal/console/templates/module/src/Controller/controller.php.twig
+++ b/vendor/drupal/console/templates/module/src/Controller/controller.php.twig
@@ -14,32 +14,25 @@ use Drupal\Core\Controller\ControllerBase;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 {% endif %}
 {% endblock %}
+
+{% block use_class_services %}
+{% endblock %}
+
 {% block class_declaration %}
 /**
  * Class {{ class_name }}.
  */
 class {{ class_name }} extends ControllerBase {% endblock %}
-{% block class_construct %}
-{% if services is not empty %}
 
-  /**
-   * Constructs a new {{ class_name }} object.
-   */
-  public function __construct({{ servicesAsParameters(services)|join(', ') }}) {
-{{ serviceClassInitialization(services) }}
-  }
-{% endif %}
-{% endblock %}
 {% block class_create %}
 {% if services is not empty %}
-
   /**
    * {@inheritdoc}
    */
   public static function create(ContainerInterface $container) {
-    return new static(
-{{ serviceClassInjection(services) }}
-    );
+    $instance = parent::create($container);
+{{ serviceClassInjectionNoOverride(services) }}
+    return $instance;
   }
 
 {% endif %}
diff --git a/vendor/drupal/console/templates/module/src/Controller/entity-controller.php.twig b/vendor/drupal/console/templates/module/src/Controller/entity-controller.php.twig
index 7e340e0e3b..e948bf9329 100644
--- a/vendor/drupal/console/templates/module/src/Controller/entity-controller.php.twig
+++ b/vendor/drupal/console/templates/module/src/Controller/entity-controller.php.twig
@@ -14,6 +14,7 @@ use Drupal\Core\Controller\ControllerBase;
 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
 use Drupal\Core\Url;
 use Drupal\{{ module }}\Entity\{{ entity_class }}Interface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 {% endblock %}
 {% block class_declaration %}
 /**
@@ -22,58 +23,90 @@ use Drupal\{{ module }}\Entity\{{ entity_class }}Interface;
  *  Returns responses for {{ label }} routes.
  */
 class {{ entity_class }}Controller extends ControllerBase implements ContainerInjectionInterface {% endblock %}
-
 {% block class_methods %}
   /**
-   * Displays a {{ label }}  revision.
+   * The date formatter.
+   *
+   * @var \Drupal\Core\Datetime\DateFormatter
+   */
+  protected $dateFormatter;
+
+  /**
+   * The renderer.
+   *
+   * @var \Drupal\Core\Render\Renderer
+   */
+  protected $renderer;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    $instance = parent::create($container);
+    $instance->dateFormatter = $container->get('date.formatter');
+    $instance->renderer = $container->get('renderer');
+    return $instance;
+  }
+
+  /**
+   * Displays a {{ label }} revision.
    *
    * @param int ${{ entity_name }}_revision
-   *   The {{ label }}  revision ID.
+   *   The {{ label }} revision ID.
    *
    * @return array
    *   An array suitable for drupal_render().
    */
   public function revisionShow(${{ entity_name }}_revision) {
-    ${{ entity_name }} = $this->entityManager()->getStorage('{{ entity_name }}')->loadRevision(${{ entity_name }}_revision);
-    $view_builder = $this->entityManager()->getViewBuilder('{{ entity_name }}');
+    ${{ entity_name }} = $this->entityTypeManager()->getStorage('{{ entity_name }}')
+      ->loadRevision(${{ entity_name }}_revision);
+    $view_builder = $this->entityTypeManager()->getViewBuilder('{{ entity_name }}');
 
     return $view_builder->view(${{ entity_name }});
   }
 
   /**
-   * Page title callback for a {{ label }}  revision.
+   * Page title callback for a {{ label }} revision.
    *
    * @param int ${{ entity_name }}_revision
-   *   The {{ label }}  revision ID.
+   *   The {{ label }} revision ID.
    *
    * @return string
    *   The page title.
    */
   public function revisionPageTitle(${{ entity_name }}_revision) {
-    ${{ entity_name }} = $this->entityManager()->getStorage('{{ entity_name }}')->loadRevision(${{ entity_name }}_revision);
-    return $this->t('Revision of %title from %date', ['%title' => ${{ entity_name }}->label(), '%date' => format_date(${{ entity_name }}->getRevisionCreationTime())]);
+    ${{ entity_name }} = $this->entityTypeManager()->getStorage('{{ entity_name }}')
+      ->loadRevision(${{ entity_name }}_revision);
+    return $this->t('Revision of %title from %date', [
+      '%title' => ${{ entity_name }}->label(),
+      '%date' => $this->dateFormatter->format(${{ entity_name }}->getRevisionCreationTime()),
+    ]);
   }
 
   /**
-   * Generates an overview table of older revisions of a {{ label }} .
+   * Generates an overview table of older revisions of a {{ label }}.
    *
    * @param \Drupal\{{ module }}\Entity\{{ entity_class }}Interface ${{ entity_name }}
-   *   A {{ label }}  object.
+   *   A {{ label }} object.
    *
    * @return array
    *   An array as expected by drupal_render().
    */
   public function revisionOverview({{ entity_class }}Interface ${{ entity_name }}) {
     $account = $this->currentUser();
+    ${{ entity_name }}_storage = $this->entityTypeManager()->getStorage('{{ entity_name }}');
+
+{% if is_translatable %}
     $langcode = ${{ entity_name }}->language()->getId();
     $langname = ${{ entity_name }}->language()->getName();
     $languages = ${{ entity_name }}->getTranslationLanguages();
     $has_translations = (count($languages) > 1);
-    ${{ entity_name }}_storage = $this->entityManager()->getStorage('{{ entity_name }}');
-
     $build['#title'] = $has_translations ? $this->t('@langname revisions for %title', ['@langname' => $langname, '%title' => ${{ entity_name }}->label()]) : $this->t('Revisions for %title', ['%title' => ${{ entity_name }}->label()]);
-    $header = [$this->t('Revision'), $this->t('Operations')];
+{% else %}
+    $build['#title'] = $this->t('Revisions for %title', ['%title' => ${{ entity_name }}->label()]);
+{% endif %}
 
+    $header = [$this->t('Revision'), $this->t('Operations')];
     $revert_permission = (($account->hasPermission("revert all {{ label|lower }} revisions") || $account->hasPermission('administer {{ label|lower }} entities')));
     $delete_permission = (($account->hasPermission("delete all {{ label|lower }} revisions") || $account->hasPermission('administer {{ label|lower }} entities')));
 
@@ -86,18 +119,23 @@ class {{ entity_class }}Controller extends ControllerBase implements ContainerIn
     foreach (array_reverse($vids) as $vid) {
       /** @var \Drupal\{{ module }}\{{ entity_class }}Interface $revision */
       $revision = ${{ entity_name }}_storage->loadRevision($vid);
+{% if is_translatable %}
       // Only show revisions that are affected by the language that is being
       // displayed.
       if ($revision->hasTranslation($langcode) && $revision->getTranslation($langcode)->isRevisionTranslationAffected()) {
+{% endif %}
         $username = [
           '#theme' => 'username',
           '#account' => $revision->getRevisionUser(),
         ];
 
         // Use revision link to link to revisions that are not active.
-        $date = \Drupal::service('date.formatter')->format($revision->getRevisionCreationTime(), 'short');
+        $date = $this->dateFormatter->format($revision->getRevisionCreationTime(), 'short');
         if ($vid != ${{ entity_name }}->getRevisionId()) {
-          $link = $this->l($date, new Url('entity.{{ entity_name }}.revision', ['{{ entity_name }}' => ${{ entity_name }}->id(), '{{ entity_name }}_revision' => $vid]));
+          $link = $this->l($date, new Url('entity.{{ entity_name }}.revision', [
+            '{{ entity_name }}' => ${{ entity_name }}->id(),
+            '{{ entity_name }}_revision' => $vid,
+          ]));
         }
         else {
           $link = ${{ entity_name }}->link($date);
@@ -110,8 +148,11 @@ class {{ entity_class }}Controller extends ControllerBase implements ContainerIn
             '#template' => '{{  '{% trans %}{{ date }} by {{ username }}{% endtrans %}{% if message %}<p class="revision-log">{{ message }}</p>{% endif %}' }}',
             '#context' => [
               'date' => $link,
-              'username' => \Drupal::service('renderer')->renderPlain($username),
-              'message' => ['#markup' => $revision->getRevisionLogMessage(), '#allowed_tags' => Xss::getHtmlTagList()],
+              'username' => $this->renderer->renderPlain($username),
+              'message' => [
+                '#markup' => $revision->getRevisionLogMessage(),
+                '#allowed_tags' => Xss::getHtmlTagList(),
+              ],
             ],
           ],
         ];
@@ -137,10 +178,20 @@ class {{ entity_class }}Controller extends ControllerBase implements ContainerIn
               'title' => $this->t('Revert'),
 {% if is_translatable %}
               'url' => $has_translations ?
-              Url::fromRoute('entity.{{ entity_name }}.translation_revert', ['{{ entity_name }}' => ${{ entity_name }}->id(), '{{ entity_name }}_revision' => $vid, 'langcode' => $langcode]) :
-              Url::fromRoute('entity.{{ entity_name }}.revision_revert', ['{{ entity_name }}' => ${{ entity_name }}->id(), '{{ entity_name }}_revision' => $vid]),
+              Url::fromRoute('entity.{{ entity_name }}.translation_revert', [
+                '{{ entity_name }}' => ${{ entity_name }}->id(),
+                '{{ entity_name }}_revision' => $vid,
+                'langcode' => $langcode,
+              ]) :
+              Url::fromRoute('entity.{{ entity_name }}.revision_revert', [
+                '{{ entity_name }}' => ${{ entity_name }}->id(),
+                '{{ entity_name }}_revision' => $vid,
+              ]),
 {%  else %}
-              'url' => Url::fromRoute('entity.{{ entity_name }}.revision_revert', ['{{ entity_name }}' => ${{ entity_name }}->id(), '{{ entity_name }}_revision' => $vid]),
+              'url' => Url::fromRoute('entity.{{ entity_name }}.revision_revert', [
+                '{{ entity_name }}' => ${{ entity_name }}->id(),
+                '{{ entity_name }}_revision' => $vid,
+              ]),
 {% endif %}
             ];
           }
@@ -148,7 +199,10 @@ class {{ entity_class }}Controller extends ControllerBase implements ContainerIn
           if ($delete_permission) {
             $links['delete'] = [
               'title' => $this->t('Delete'),
-              'url' => Url::fromRoute('entity.{{ entity_name }}.revision_delete', ['{{ entity_name }}' => ${{ entity_name }}->id(), '{{ entity_name }}_revision' => $vid]),
+              'url' => Url::fromRoute('entity.{{ entity_name }}.revision_delete', [
+                '{{ entity_name }}' => ${{ entity_name }}->id(),
+                '{{ entity_name }}_revision' => $vid,
+              ]),
             ];
           }
 
@@ -161,7 +215,9 @@ class {{ entity_class }}Controller extends ControllerBase implements ContainerIn
         }
 
         $rows[] = $row;
+{% if is_translatable %}
       }
+{% endif %}
     }
 
     $build['{{ entity_name }}_revisions_table'] = [
diff --git a/vendor/drupal/console/templates/module/src/Entity/Bundle/entity-bundle-field-info-alter.php.twig b/vendor/drupal/console/templates/module/src/Entity/Bundle/entity-bundle-field-info-alter.php.twig
new file mode 100644
index 0000000000..03e5358cf3
--- /dev/null
+++ b/vendor/drupal/console/templates/module/src/Entity/Bundle/entity-bundle-field-info-alter.php.twig
@@ -0,0 +1,20 @@
+
+{% block use_class %}
+use Drupal\Core\Entity\EntityTypeInterface;
+{% endblock %}
+
+/**
+ * Implements hook_entity_bundle_field_info_alter().
+ */
+function {{module}}_entity_bundle_field_info_alter(&$fields, EntityTypeInterface $entity_type, $bundle) {
+{% if bundle %}
+  if ($bundle === '{{ bundle }}') {
+{% endif %}
+    if (isset($fields['{{ field_id }}'])) {
+      // Use the ID as defined in the annotation of the constraint definition.
+      $fields['{{ field_id }}']->addConstraint('{{ plugin_id }}', []);
+    }
+{% if bundle %}
+  }
+{% endif %}
+}
\ No newline at end of file
diff --git a/vendor/drupal/console/templates/module/src/Entity/Form/entity-content-revision-delete.php.twig b/vendor/drupal/console/templates/module/src/Entity/Form/entity-content-revision-delete.php.twig
index 02674ac116..20352b2dcd 100644
--- a/vendor/drupal/console/templates/module/src/Entity/Form/entity-content-revision-delete.php.twig
+++ b/vendor/drupal/console/templates/module/src/Entity/Form/entity-content-revision-delete.php.twig
@@ -9,8 +9,6 @@ namespace Drupal\{{module}}\Form;
 {% endblock %}
 
 {% block use_class %}
-use Drupal\Core\Database\Connection;
-use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Form\ConfirmFormBase;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Url;
@@ -25,7 +23,6 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
  */
 class {{ entity_class }}RevisionDeleteForm extends ConfirmFormBase {% endblock %}
 {% block class_methods %}
-
   /**
    * The {{ label }} revision.
    *
@@ -38,7 +35,7 @@ class {{ entity_class }}RevisionDeleteForm extends ConfirmFormBase {% endblock %
    *
    * @var \Drupal\Core\Entity\EntityStorageInterface
    */
-  protected ${{ entity_class }}Storage;
+  protected ${{ entity_class[:1]|lower ~ entity_class[1:] }}Storage;
 
   /**
    * The database connection.
@@ -47,28 +44,14 @@ class {{ entity_class }}RevisionDeleteForm extends ConfirmFormBase {% endblock %
    */
   protected $connection;
 
-  /**
-   * Constructs a new {{ entity_class }}RevisionDeleteForm.
-   *
-   * @param \Drupal\Core\Entity\EntityStorageInterface $entity_storage
-   *   The entity storage.
-   * @param \Drupal\Core\Database\Connection $connection
-   *   The database connection.
-   */
-  public function __construct(EntityStorageInterface $entity_storage, Connection $connection) {
-    $this->{{ entity_class }}Storage = $entity_storage;
-    $this->connection = $connection;
-  }
-
   /**
    * {@inheritdoc}
    */
   public static function create(ContainerInterface $container) {
-    $entity_manager = $container->get('entity.manager');
-    return new static(
-      $entity_manager->getStorage('{{ entity_name }}'),
-      $container->get('database')
-    );
+    $instance = parent::create($container);
+    $instance->{{ entity_class[:1]|lower ~ entity_class[1:] }}Storage = $container->get('entity_type.manager')->getStorage('{{ entity_name }}');
+    $instance->connection = $container->get('database');
+    return $instance;
   }
 
   /**
@@ -82,7 +65,9 @@ class {{ entity_class }}RevisionDeleteForm extends ConfirmFormBase {% endblock %
    * {@inheritdoc}
    */
   public function getQuestion() {
-    return t('Are you sure you want to delete the revision from %revision-date?', ['%revision-date' => format_date($this->revision->getRevisionCreationTime())]);
+    return $this->t('Are you sure you want to delete the revision from %revision-date?', [
+      '%revision-date' => format_date($this->revision->getRevisionCreationTime()),
+    ]);
   }
 
   /**
@@ -96,7 +81,7 @@ class {{ entity_class }}RevisionDeleteForm extends ConfirmFormBase {% endblock %
    * {@inheritdoc}
    */
   public function getConfirmText() {
-    return t('Delete');
+    return $this->t('Delete');
   }
 
   /**
@@ -116,7 +101,7 @@ class {{ entity_class }}RevisionDeleteForm extends ConfirmFormBase {% endblock %
     $this->{{ entity_class }}Storage->deleteRevision($this->revision->getRevisionId());
 
     $this->logger('content')->notice('{{ label }}: deleted %title revision %revision.', ['%title' => $this->revision->label(), '%revision' => $this->revision->getRevisionId()]);
-    drupal_set_message(t('Revision from %revision-date of {{ label }} %title has been deleted.', ['%revision-date' => format_date($this->revision->getRevisionCreationTime()), '%title' => $this->revision->label()]));
+    $this->messenger()->addMessage(t('Revision from %revision-date of {{ label }} %title has been deleted.', ['%revision-date' => format_date($this->revision->getRevisionCreationTime()), '%title' => $this->revision->label()]));
     $form_state->setRedirect(
       'entity.{{ entity_name }}.canonical',
        ['{{ entity_name }}' => $this->revision->id()]
diff --git a/vendor/drupal/console/templates/module/src/Entity/Form/entity-content-revision-revert-translation.php.twig b/vendor/drupal/console/templates/module/src/Entity/Form/entity-content-revision-revert-translation.php.twig
index 0c38ba5b35..b31d29eff5 100644
--- a/vendor/drupal/console/templates/module/src/Entity/Form/entity-content-revision-revert-translation.php.twig
+++ b/vendor/drupal/console/templates/module/src/Entity/Form/entity-content-revision-revert-translation.php.twig
@@ -9,23 +9,19 @@ namespace Drupal\{{module}}\Form;
 {% endblock %}
 
 {% block use_class %}
-use Drupal\Core\Datetime\DateFormatterInterface;
-use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\{{module}}\Entity\{{ entity_class }}Interface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 {% endblock %}
 
 {% block class_declaration %}
 /**
- * Provides a form for reverting a {{ label }} revision for a single translation.
+ * Provides a form for reverting a {{ label }} revision for a single trans.
  *
  * @ingroup {{module}}
  */
 class {{ entity_class }}RevisionRevertTranslationForm extends {{ entity_class }}RevisionRevertForm {% endblock %}
 {% block class_methods %}
-
   /**
    * The language to be reverted.
    *
@@ -40,30 +36,13 @@ class {{ entity_class }}RevisionRevertTranslationForm extends {{ entity_class }}
    */
   protected $languageManager;
 
-  /**
-   * Constructs a new {{ entity_class }}RevisionRevertTranslationForm.
-   *
-   * @param \Drupal\Core\Entity\EntityStorageInterface $entity_storage
-   *   The {{ label }} storage.
-   * @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter
-   *   The date formatter service.
-   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
-   *   The language manager.
-   */
-  public function __construct(EntityStorageInterface $entity_storage, DateFormatterInterface $date_formatter, LanguageManagerInterface $language_manager) {
-    parent::__construct($entity_storage, $date_formatter);
-    $this->languageManager = $language_manager;
-  }
-
   /**
    * {@inheritdoc}
    */
   public static function create(ContainerInterface $container) {
-    return new static(
-      $container->get('entity.manager')->getStorage('{{ entity_name }}'),
-      $container->get('date.formatter'),
-      $container->get('language_manager')
-    );
+    $instance = parent::create($container);
+    $instance->languageManager = $container->get('language_manager');
+    return $instance;
   }
 
   /**
@@ -77,7 +56,10 @@ class {{ entity_class }}RevisionRevertTranslationForm extends {{ entity_class }}
    * {@inheritdoc}
    */
   public function getQuestion() {
-    return t('Are you sure you want to revert @language translation to the revision from %revision-date?', ['@language' => $this->languageManager->getLanguageName($this->langcode), '%revision-date' => $this->dateFormatter->format($this->revision->getRevisionCreationTime())]);
+    return $this->t('Are you sure you want to revert @language translation to the revision from %revision-date?', [
+      '@language' => $this->languageManager->getLanguageName($this->langcode),
+      '%revision-date' => $this->dateFormatter->format($this->revision->getRevisionCreationTime()),
+    ]);
   }
 
   /**
diff --git a/vendor/drupal/console/templates/module/src/Entity/Form/entity-content-revision-revert.php.twig b/vendor/drupal/console/templates/module/src/Entity/Form/entity-content-revision-revert.php.twig
index 4077d94177..53ceef0b89 100644
--- a/vendor/drupal/console/templates/module/src/Entity/Form/entity-content-revision-revert.php.twig
+++ b/vendor/drupal/console/templates/module/src/Entity/Form/entity-content-revision-revert.php.twig
@@ -9,8 +9,6 @@ namespace Drupal\{{module}}\Form;
 {% endblock %}
 
 {% block use_class %}
-use Drupal\Core\Datetime\DateFormatterInterface;
-use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Form\ConfirmFormBase;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Url;
@@ -26,7 +24,6 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
  */
 class {{ entity_class }}RevisionRevertForm extends ConfirmFormBase {% endblock %}
 {% block class_methods %}
-
   /**
    * The {{ label }} revision.
    *
@@ -39,7 +36,7 @@ class {{ entity_class }}RevisionRevertForm extends ConfirmFormBase {% endblock %
    *
    * @var \Drupal\Core\Entity\EntityStorageInterface
    */
-  protected ${{ entity_class }}Storage;
+  protected ${{ entity_class[:1]|lower ~ entity_class[1:] }}Storage;
 
   /**
    * The date formatter service.
@@ -48,27 +45,14 @@ class {{ entity_class }}RevisionRevertForm extends ConfirmFormBase {% endblock %
    */
   protected $dateFormatter;
 
-  /**
-   * Constructs a new {{ entity_class }}RevisionRevertForm.
-   *
-   * @param \Drupal\Core\Entity\EntityStorageInterface $entity_storage
-   *   The {{ label }} storage.
-   * @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter
-   *   The date formatter service.
-   */
-  public function __construct(EntityStorageInterface $entity_storage, DateFormatterInterface $date_formatter) {
-    $this->{{ entity_class }}Storage = $entity_storage;
-    $this->dateFormatter = $date_formatter;
-  }
-
   /**
    * {@inheritdoc}
    */
   public static function create(ContainerInterface $container) {
-    return new static(
-      $container->get('entity.manager')->getStorage('{{ entity_name }}'),
-      $container->get('date.formatter')
-    );
+    $instance = parent::create($container);
+    $instance->{{ entity_class[:1]|lower ~ entity_class[1:] }}Storage = $container->get('entity_type.manager')->getStorage('{{ entity_name }}');
+    $instance->dateFormatter = $container->get('date.formatter');
+    return $instance;
   }
 
   /**
@@ -82,7 +66,9 @@ class {{ entity_class }}RevisionRevertForm extends ConfirmFormBase {% endblock %
    * {@inheritdoc}
    */
   public function getQuestion() {
-    return t('Are you sure you want to revert to the revision from %revision-date?', ['%revision-date' => $this->dateFormatter->format($this->revision->getRevisionCreationTime())]);
+    return $this->t('Are you sure you want to revert to the revision from %revision-date?', [
+      '%revision-date' => $this->dateFormatter->format($this->revision->getRevisionCreationTime()),
+    ]);
   }
 
   /**
@@ -96,7 +82,7 @@ class {{ entity_class }}RevisionRevertForm extends ConfirmFormBase {% endblock %
    * {@inheritdoc}
    */
   public function getConfirmText() {
-    return t('Revert');
+    return $this->t('Revert');
   }
 
   /**
@@ -125,11 +111,13 @@ class {{ entity_class }}RevisionRevertForm extends ConfirmFormBase {% endblock %
     $original_revision_timestamp = $this->revision->getRevisionCreationTime();
 
     $this->revision = $this->prepareRevertedRevision($this->revision, $form_state);
-    $this->revision->revision_log = t('Copy of the revision from %date.', ['%date' => $this->dateFormatter->format($original_revision_timestamp)]);
+    $this->revision->revision_log = $this->t('Copy of the revision from %date.', [
+      '%date' => $this->dateFormatter->format($original_revision_timestamp),
+    ]);
     $this->revision->save();
 
     $this->logger('content')->notice('{{ label }}: reverted %title revision %revision.', ['%title' => $this->revision->label(), '%revision' => $this->revision->getRevisionId()]);
-    drupal_set_message(t('{{ label }} %title has been reverted to the revision from %revision-date.', ['%title' => $this->revision->label(), '%revision-date' => $this->dateFormatter->format($original_revision_timestamp)]));
+    $this->messenger()->addMessage(t('{{ label }} %title has been reverted to the revision from %revision-date.', ['%title' => $this->revision->label(), '%revision-date' => $this->dateFormatter->format($original_revision_timestamp)]));
     $form_state->setRedirect(
       'entity.{{ entity_name }}.version_history',
       ['{{ entity_name }}' => $this->revision->id()]
diff --git a/vendor/drupal/console/templates/module/src/Entity/Form/entity-content.php.twig b/vendor/drupal/console/templates/module/src/Entity/Form/entity-content.php.twig
index e21dc74996..7d7ad33919 100644
--- a/vendor/drupal/console/templates/module/src/Entity/Form/entity-content.php.twig
+++ b/vendor/drupal/console/templates/module/src/Entity/Form/entity-content.php.twig
@@ -11,6 +11,7 @@ namespace Drupal\{{module}}\Form;
 {% block use_class %}
 use Drupal\Core\Entity\ContentEntityForm;
 use Drupal\Core\Form\FormStateInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 {% endblock %}
 
 {% block class_declaration %}
@@ -21,11 +22,28 @@ use Drupal\Core\Form\FormStateInterface;
  */
 class {{ entity_class }}Form extends ContentEntityForm {% endblock %}
 {% block class_methods %}
+  /**
+   * The current user account.
+   *
+   * @var \Drupal\Core\Session\AccountProxyInterface
+   */
+  protected $account;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    // Instantiates this form class.
+    $instance = parent::create($container);
+    $instance->account = $container->get('current_user');
+    return $instance;
+  }
+
   /**
    * {@inheritdoc}
    */
   public function buildForm(array $form, FormStateInterface $form_state) {
-    /* @var $entity \Drupal\{{module}}\Entity\{{ entity_class }} */
+    /* @var \Drupal\{{module}}\Entity\{{ entity_class }} $entity */
     $form = parent::buildForm($form, $form_state);
 {% if revisionable %}
 
@@ -39,8 +57,6 @@ class {{ entity_class }}Form extends ContentEntityForm {% endblock %}
     }
 {% endif %}
 
-    $entity = $this->entity;
-
     return $form;
   }
 
@@ -56,8 +72,8 @@ class {{ entity_class }}Form extends ContentEntityForm {% endblock %}
       $entity->setNewRevision();
 
       // If a new revision is created, save the current user as revision author.
-      $entity->setRevisionCreationTime(REQUEST_TIME);
-      $entity->setRevisionUserId(\Drupal::currentUser()->id());
+      $entity->setRevisionCreationTime($this->time->getRequestTime());
+      $entity->setRevisionUserId($this->account->id());
     }
     else {
       $entity->setNewRevision(FALSE);
@@ -68,13 +84,13 @@ class {{ entity_class }}Form extends ContentEntityForm {% endblock %}
 
     switch ($status) {
       case SAVED_NEW:
-        drupal_set_message($this->t('Created the %label {{ label }}.', [
+        $this->messenger()->addMessage($this->t('Created the %label {{ label }}.', [
           '%label' => $entity->label(),
         ]));
         break;
 
       default:
-        drupal_set_message($this->t('Saved the %label {{ label }}.', [
+        $this->messenger()->addMessage($this->t('Saved the %label {{ label }}.', [
           '%label' => $entity->label(),
         ]));
     }
diff --git a/vendor/drupal/console/templates/module/src/Entity/entity-content-views-data.php.twig b/vendor/drupal/console/templates/module/src/Entity/entity-content-views-data.php.twig
index c8ee2645b6..eeb97705b9 100644
--- a/vendor/drupal/console/templates/module/src/Entity/entity-content-views-data.php.twig
+++ b/vendor/drupal/console/templates/module/src/Entity/entity-content-views-data.php.twig
@@ -26,7 +26,6 @@ class {{ entity_class }}ViewsData extends EntityViewsData {% endblock %}
 
     // Additional information for Views integration, such as table joins, can be
     // put here.
-
     return $data;
   }
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Entity/entity-content-with-bundle.theme_hook_suggestions.php.twig b/vendor/drupal/console/templates/module/src/Entity/entity-content-with-bundle.theme_hook_suggestions.php.twig
index 77ea4dfbb1..b95afecd42 100644
--- a/vendor/drupal/console/templates/module/src/Entity/entity-content-with-bundle.theme_hook_suggestions.php.twig
+++ b/vendor/drupal/console/templates/module/src/Entity/entity-content-with-bundle.theme_hook_suggestions.php.twig
@@ -1,8 +1,8 @@
 {% block hook_theme_suggestions_hook %}
 
 /**
-* Implements hook_theme_suggestions_HOOK().
-*/
+ * Implements hook_theme_suggestions_HOOK().
+ */
 function {{ module }}_theme_suggestions_{{ entity_name }}(array $variables) {
   $suggestions = [];
   $entity = $variables['elements']['#{{ entity_name }}'];
diff --git a/vendor/drupal/console/templates/module/src/Entity/entity-content.php.twig b/vendor/drupal/console/templates/module/src/Entity/entity-content.php.twig
index 2925ac6297..fd59692d0e 100644
--- a/vendor/drupal/console/templates/module/src/Entity/entity-content.php.twig
+++ b/vendor/drupal/console/templates/module/src/Entity/entity-content.php.twig
@@ -9,17 +9,22 @@ namespace Drupal\{{ module }}\Entity;
 {% endblock %}
 
 {% block use_class %}
+{% if has_owner or revisionable%}
 use Drupal\Core\Entity\EntityStorageInterface;
+{% endif %}
 use Drupal\Core\Field\BaseFieldDefinition;
 {% if revisionable %}
-use Drupal\Core\Entity\RevisionableContentEntityBase;
+use Drupal\Core\Entity\EditorialContentEntityBase;
 use Drupal\Core\Entity\RevisionableInterface;
 {% else %}
 use Drupal\Core\Entity\ContentEntityBase;
 {% endif %}
 use Drupal\Core\Entity\EntityChangedTrait;
+use Drupal\Core\Entity\EntityPublishedTrait;
 use Drupal\Core\Entity\EntityTypeInterface;
+{% if has_owner %}
 use Drupal\user\UserInterface;
+{% endif %}
 {% endblock %}
 
 {% block class_declaration %}
@@ -45,16 +50,18 @@ use Drupal\user\UserInterface;
  *     "translation" = "Drupal\{{ module }}\{{ entity_class }}TranslationHandler",
 {% endif %}
  *
+{% if has_forms %}
  *     "form" = {
  *       "default" = "Drupal\{{ module }}\Form\{{ entity_class }}Form",
  *       "add" = "Drupal\{{ module }}\Form\{{ entity_class }}Form",
  *       "edit" = "Drupal\{{ module }}\Form\{{ entity_class }}Form",
  *       "delete" = "Drupal\{{ module }}\Form\{{ entity_class }}DeleteForm",
  *     },
- *     "access" = "Drupal\{{ module }}\{{ entity_class }}AccessControlHandler",
  *     "route_provider" = {
  *       "html" = "Drupal\{{ module }}\{{ entity_class }}HtmlRouteProvider",
  *     },
+{% endif %}
+ *     "access" = "Drupal\{{ module }}\{{ entity_class }}AccessControlHandler",
  *   },
  *   base_table = "{{ entity_name }}",
 {% if is_translatable %}
@@ -64,8 +71,9 @@ use Drupal\user\UserInterface;
  *   revision_table = "{{ entity_name }}_revision",
  *   revision_data_table = "{{ entity_name }}_field_revision",
 {% endif %}
-{% if is_translatable %}
- *   translatable = TRUE,
+ *   translatable = {{ is_translatable ? 'TRUE' : 'FALSE' }},
+{% if has_bundle_permissions %}
+ *   permission_granularity = "bundle",
 {% endif %}
  *   admin_permission = "administer {{ label|lower }} entities",
  *   entity_keys = {
@@ -78,10 +86,13 @@ use Drupal\user\UserInterface;
 {% endif %}
  *     "label" = "name",
  *     "uuid" = "uuid",
+{% if has_owner %}
  *     "uid" = "user_id",
+{% endif %}
  *     "langcode" = "langcode",
- *     "status" = "status",
+ *     "published" = "status",
  *   },
+{% if has_forms %}
  *   links = {
  *     "canonical" = "{{ base_path }}/{{ entity_name }}/{{ '{'~entity_name~'}' }}",
 {% if bundle_entity_type %}
@@ -103,21 +114,26 @@ use Drupal\user\UserInterface;
 {% endif %}
  *     "collection" = "{{ base_path }}/{{ entity_name }}",
  *   },
+{% endif %}
 {% if bundle_entity_type %}
  *   bundle_entity_type = "{{ bundle_entity_type }}",
  *   field_ui_base_route = "entity.{{ bundle_entity_type }}.edit_form"
 {% else %}
+{% if has_forms %}
  *   field_ui_base_route = "{{ entity_name }}.settings"
+{% endif %}
 {% endif %}
  * )
  */
-class {{ entity_class }} extends {% if revisionable %}RevisionableContentEntityBase{% else %}ContentEntityBase{% endif %} implements {{ entity_class }}Interface {% endblock %}
+class {{ entity_class }} extends {% if revisionable %}EditorialContentEntityBase{% else %}ContentEntityBase{% endif %} implements {{ entity_class }}Interface {% endblock %}
 
 {% block use_trait %}
   use EntityChangedTrait;
+  use EntityPublishedTrait;
 {% endblock %}
 
 {% block class_methods %}
+{% if has_owner %}
 
   /**
    * {@inheritdoc}
@@ -128,6 +144,7 @@ class {{ entity_class }} extends {% if revisionable %}RevisionableContentEntityB
       'user_id' => \Drupal::currentUser()->id(),
     ];
   }
+{% endif %}
 {% if revisionable %}
 
   /**
@@ -151,6 +168,7 @@ class {{ entity_class }} extends {% if revisionable %}RevisionableContentEntityB
    */
   public function preSave(EntityStorageInterface $storage) {
     parent::preSave($storage);
+{% if is_translatable %}
 
     foreach (array_keys($this->getTranslationLanguages()) as $langcode) {
       $translation = $this->getTranslation($langcode);
@@ -160,9 +178,10 @@ class {{ entity_class }} extends {% if revisionable %}RevisionableContentEntityB
         $translation->setOwnerId(0);
       }
     }
+{% endif %}
 
-    // If no revision author has been set explicitly, make the {{ entity_name }} owner the
-    // revision author.
+    // If no revision author has been set explicitly,
+    // make the {{ entity_name }} owner the revision author.
     if (!$this->getRevisionUser()) {
       $this->setRevisionUserId($this->getOwnerId());
     }
@@ -198,6 +217,7 @@ class {{ entity_class }} extends {% if revisionable %}RevisionableContentEntityB
     $this->set('created', $timestamp);
     return $this;
   }
+{% if has_owner %}
 
   /**
    * {@inheritdoc}
@@ -228,21 +248,7 @@ class {{ entity_class }} extends {% if revisionable %}RevisionableContentEntityB
     $this->set('user_id', $account->id());
     return $this;
   }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function isPublished() {
-    return (bool) $this->getEntityKey('status');
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function setPublished($published) {
-    $this->set('status', $published ? TRUE : FALSE);
-    return $this;
-  }
+{% endif %}
 
   /**
    * {@inheritdoc}
@@ -250,13 +256,19 @@ class {{ entity_class }} extends {% if revisionable %}RevisionableContentEntityB
   public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
     $fields = parent::baseFieldDefinitions($entity_type);
 
+    // Add the published field.
+    $fields += static::publishedBaseFieldDefinitions($entity_type);
+{% if has_owner %}
+
     $fields['user_id'] = BaseFieldDefinition::create('entity_reference')
       ->setLabel(t('Authored by'))
       ->setDescription(t('The user ID of author of the {{ label }} entity.'))
       ->setRevisionable(TRUE)
       ->setSetting('target_type', 'user')
       ->setSetting('handler', 'default')
+{% if is_translatable %}
       ->setTranslatable(TRUE)
+{% endif %}
       ->setDisplayOptions('view', [
         'label' => 'hidden',
         'type' => 'author',
@@ -274,6 +286,7 @@ class {{ entity_class }} extends {% if revisionable %}RevisionableContentEntityB
       ])
       ->setDisplayConfigurable('form', TRUE)
       ->setDisplayConfigurable('view', TRUE);
+{% endif %}
 
     $fields['name'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Name'))
@@ -299,13 +312,7 @@ class {{ entity_class }} extends {% if revisionable %}RevisionableContentEntityB
       ->setDisplayConfigurable('view', TRUE)
       ->setRequired(TRUE);
 
-    $fields['status'] = BaseFieldDefinition::create('boolean')
-      ->setLabel(t('Publishing status'))
-      ->setDescription(t('A boolean indicating whether the {{ label }} is published.'))
-{% if revisionable %}
-      ->setRevisionable(TRUE)
-{% endif %}
-      ->setDefaultValue(TRUE)
+    $fields['status']->setDescription(t('A boolean indicating whether the {{ label }} is published.'))
       ->setDisplayOptions('form', [
         'type' => 'boolean_checkbox',
         'weight' => -3,
diff --git a/vendor/drupal/console/templates/module/src/Entity/interface-entity-content.php.twig b/vendor/drupal/console/templates/module/src/Entity/interface-entity-content.php.twig
index e1d7dfdcaa..e333975788 100644
--- a/vendor/drupal/console/templates/module/src/Entity/interface-entity-content.php.twig
+++ b/vendor/drupal/console/templates/module/src/Entity/interface-entity-content.php.twig
@@ -14,7 +14,10 @@ use Drupal\Core\Entity\ContentEntityInterface;
 use Drupal\Core\Entity\RevisionLogInterface;
 {% endif %}
 use Drupal\Core\Entity\EntityChangedInterface;
+use Drupal\Core\Entity\EntityPublishedInterface;
+{% if has_owner %}
 use Drupal\user\EntityOwnerInterface;
+{% endif %}
 {% endblock %}
 
 {% block class_declaration %}
@@ -23,9 +26,11 @@ use Drupal\user\EntityOwnerInterface;
  *
  * @ingroup {{module}}
  */
-interface {{ entity_class }}Interface extends ContentEntityInterface{% if revisionable %}, RevisionLogInterface{% endif %}, EntityChangedInterface, EntityOwnerInterface {% endblock %}
+interface {{ entity_class }}Interface extends ContentEntityInterface{% if revisionable %}, RevisionLogInterface{% endif %}, EntityChangedInterface, EntityPublishedInterface{% if has_owner %}, EntityOwnerInterface{% endif %} {% endblock %}
 {% block class_methods %}
-  // Add get/set methods for your configuration properties here.
+  /**
+   * Add get/set methods for your configuration properties here.
+   */
 
   /**
    * Gets the {{ label }} name.
@@ -64,27 +69,6 @@ interface {{ entity_class }}Interface extends ContentEntityInterface{% if revisi
    *   The called {{ label }} entity.
    */
   public function setCreatedTime($timestamp);
-
-  /**
-   * Returns the {{ label }} published status indicator.
-   *
-   * Unpublished {{ label }} are only visible to restricted users.
-   *
-   * @return bool
-   *   TRUE if the {{ label }} is published.
-   */
-  public function isPublished();
-
-  /**
-   * Sets the published status of a {{ label }}.
-   *
-   * @param bool $published
-   *   TRUE to set this {{ label }} to published, FALSE to set it to unpublished.
-   *
-   * @return \Drupal\{{ module }}\Entity\{{ entity_class }}Interface
-   *   The called {{ label }} entity.
-   */
-  public function setPublished($published);
 {% if revisionable %}
 
   /**
diff --git a/vendor/drupal/console/templates/module/src/Form/entity-delete.php.twig b/vendor/drupal/console/templates/module/src/Form/entity-delete.php.twig
index be3afd8d53..cde34514cd 100644
--- a/vendor/drupal/console/templates/module/src/Form/entity-delete.php.twig
+++ b/vendor/drupal/console/templates/module/src/Form/entity-delete.php.twig
@@ -47,13 +47,11 @@ class {{ entity_class }}DeleteForm extends EntityConfirmFormBase {% endblock %}
   public function submitForm(array &$form, FormStateInterface $form_state) {
     $this->entity->delete();
 
-    drupal_set_message(
-      $this->t('content @type: deleted @label.',
-        [
-          '@type' => $this->entity->bundle(),
-          '@label' => $this->entity->label(),
-        ]
-        )
+    $this->messenger()->addMessage(
+      $this->t('content @type: deleted @label.', [
+        '@type' => $this->entity->bundle(),
+        '@label' => $this->entity->label(),
+      ])
     );
 
     $form_state->setRedirectUrl($this->getCancelUrl());
diff --git a/vendor/drupal/console/templates/module/src/Form/entity.php.twig b/vendor/drupal/console/templates/module/src/Form/entity.php.twig
index 0ce40406ac..1c8a54c268 100644
--- a/vendor/drupal/console/templates/module/src/Form/entity.php.twig
+++ b/vendor/drupal/console/templates/module/src/Form/entity.php.twig
@@ -58,13 +58,13 @@ class {{ entity_class }}Form extends EntityForm {% endblock %}
 
     switch ($status) {
       case SAVED_NEW:
-        drupal_set_message($this->t('Created the %label {{ label }}.', [
+        $this->messenger()->addMessage($this->t('Created the %label {{ label }}.', [
           '%label' => ${{ entity_name | machine_name }}->label(),
         ]));
         break;
 
       default:
-        drupal_set_message($this->t('Saved the %label {{ label }}.', [
+        $this->messenger()->addMessage($this->t('Saved the %label {{ label }}.', [
           '%label' => ${{ entity_name | machine_name }}->label(),
         ]));
     }
diff --git a/vendor/drupal/console/templates/module/src/Form/form-alter.php.twig b/vendor/drupal/console/templates/module/src/Form/form-alter.php.twig
index f4bf25b18c..41c37bff22 100644
--- a/vendor/drupal/console/templates/module/src/Form/form-alter.php.twig
+++ b/vendor/drupal/console/templates/module/src/Form/form-alter.php.twig
@@ -1,3 +1,11 @@
+{% if not file_exists %}
+{% include 'module/php_tag.php.twig' %}
+
+/**
+ * @file
+ * Contains {{ module }} form alter.
+ */
+{% endif %}
 
 {% block use_class %}
 use Drupal\Core\Form\FormStateInterface;
@@ -12,52 +20,52 @@ use Drupal\Core\Form\FormStateInterface;
 {% endif %}
  */
 function {{ module }}_form_{{ form_id }}_alter(&$form, FormStateInterface $form_state) {
-    drupal_set_message('{{ module }}_form_{{ form_id }}_alter() executed.');
+    \Drupal::messenger()->addMessage('{{ module }}_form_{{ form_id }}_alter() executed.');
 {% else %}
 /**
- * Implements hook_form_alter() on behalf of {{ module }}.module.
+ * Implements hook_form_alter().
  */
 function {{ module }}_form_alter(&$form, FormStateInterface $form_state, $form_id) {
-    // Change form id here
-    if ($form_id == 'form_test_alter_form') {
-        drupal_set_message('form_test_form_alter() executed.');
+  // Change form id here.
+  if ($form_id == 'form_test_alter_form') {
+    \Drupal::messenger()->addMessage('form_test_form_alter() executed.');
 {% endif %}
 
 {%- if metadata.unset -%}
 {% for field in metadata.unset %}
-        $form['{{ field }}']['#access'] = FALSE;
+    $form['{{ field }}']['#access'] = FALSE;
 {% endfor %}
 {% endif %}
 
 {% if inputs %}
 {% for input in inputs %}
-        $form['{{ input.name }}'] = [
-            '#type' => '{{ input.type }}',
-            '#title' => t('{{ input.label|e }}'),
-    {%- if input.description is defined and input.description is defined -%}
-            '#description' => t('{{ input.description|e }}'),
-    {% endif %}
-    {%- if input.options is defined and input.options|length -%}
-            '#options' => {{ input.options }},
-    {% endif %}
-    {%- if input.maxlength is defined and input.maxlength|length -%}
-            '#maxlength' => {{ input.maxlength }},
-    {% endif %}
-    {%- if input.size is defined and input.size|length -%}
-            '#size' => {{ input.size }},
-    {% endif %}
-    {%- if input.default_value is defined and input.default_value|length -%}
-            '#default_value' => '{{ input.default_value }}',
-    {% endif %}
-    {%- if input.weight is defined and input.weight|length -%}
-            '#weight' => '{{ input.weight }}',
-    {% endif %}
-        ];
+    $form['{{ input.name }}'] = [
+      '#type' => '{{ input.type }}',
+      '#title' => t('{{ input.label|e }}'),
+{% if input.description is defined and input.description is not empty %}
+      '#description' => t('{{ input.description|e }}'),
+{% endif %}
+{% if input.options is defined and input.options|length %}
+      '#options' => {{ input.options }},
+{% endif %}
+{% if input.maxlength is defined and input.maxlength|length %}
+      '#maxlength' => {{ input.maxlength }},
+{% endif %}
+{% if input.size is defined and input.size|length %}
+      '#size' => {{ input.size }},
+{% endif %}
+{% if input.default_value is defined and input.default_value|length %}
+      '#default_value' => '{{ input.default_value }}',
+{% endif %}
+{% if input.weight is defined and input.weight is not empty%}
+      '#weight' => '{{ input.weight }}',
+{% endif %}
+    ];
 
 {% endfor %}
 {% endif %}
 {% if form_id is empty %}
-    }
+  }
 {% endif %}
 }
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Form/form-config.php.twig b/vendor/drupal/console/templates/module/src/Form/form-config.php.twig
index 1dc6e75f24..ebea625f3a 100644
--- a/vendor/drupal/console/templates/module/src/Form/form-config.php.twig
+++ b/vendor/drupal/console/templates/module/src/Form/form-config.php.twig
@@ -1,7 +1,7 @@
 {% extends "base/class.php.twig" %}
 
 {% block file_path %}
-Drupal\{{module_name}}\Form\{{ class_name }}.
+\Drupal\{{module_name}}\Form\{{ class_name }}.
 {% endblock %}
 
 {% block namespace_class %}
@@ -12,39 +12,28 @@ namespace Drupal\{{module_name}}\Form;
 use Drupal\Core\Form\ConfigFormBase;
 use Drupal\Core\Form\FormStateInterface;
 {% if services is not empty %}
-use Drupal\Core\Config\ConfigFactoryInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 {% endif %}
 {% endblock %}
 
+{% block use_class_services %}
+{% endblock %}
+
 {% block class_declaration %}
 /**
  * Class {{ class_name }}.
  */
 class {{ class_name }} extends ConfigFormBase {% endblock %}
-{% block class_construct %}
-{% if services is not empty %}
-  /**
-   * Constructs a new {{ class_name }} object.
-   */
-  public function __construct(
-    ConfigFactoryInterface $config_factory,
-      {{ servicesAsParameters(services)|join(',\n    ') }}
-    ) {
-    parent::__construct($config_factory);
-    {{ serviceClassInitialization(services) }}
-  }
-
-{% endif %}
-{% endblock %}
 
 {% block class_create %}
 {% if services is not empty %}
+  /**
+   * {@inheritdoc}
+   */
   public static function create(ContainerInterface $container) {
-    return new static(
-      $container->get('config.factory'),
-      {{ serviceClassInjection(services) }}
-    );
+    $instance = parent::create($container);
+{{ serviceClassInjectionNoOverride(services) }}
+    return $instance;
   }
 
 {% endif %}
@@ -100,13 +89,6 @@ class {{ class_name }} extends ConfigFormBase {% endblock %}
     return parent::buildForm($form, $form_state);
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public function validateForm(array &$form, FormStateInterface $form_state) {
-    parent::validateForm($form, $form_state);
-  }
-
   /**
    * {@inheritdoc}
    */
@@ -115,7 +97,7 @@ class {{ class_name }} extends ConfigFormBase {% endblock %}
 
     $this->config('{{module_name}}.{{class_name_short}}')
 {% for input in inputs %}
-      ->set('{{ input.name }}', $form_state->getValue('{{ input.name }}'))
+      ->set('{{ input.name }}', $form_state->getValue('{{ input.name }}'){% if input.type == 'text_format' %}['value']{% endif %})
 {% endfor %}
       ->save();
   }
diff --git a/vendor/drupal/console/templates/module/src/Form/form.php.twig b/vendor/drupal/console/templates/module/src/Form/form.php.twig
index c2bd37c801..4b990626ba 100644
--- a/vendor/drupal/console/templates/module/src/Form/form.php.twig
+++ b/vendor/drupal/console/templates/module/src/Form/form.php.twig
@@ -16,38 +16,30 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
 {% endif %}
 {% endblock %}
 
+{% block use_class_services %}
+{% endblock %}
+
 {% block class_declaration %}
 /**
  * Class {{ class_name }}.
  */
 class {{ class_name }} extends FormBase {% endblock %}
-{% block class_construct %}
-{% if services is not empty %}
-  /**
-   * Constructs a new {{ class_name }} object.
-   */
-  public function __construct(
-    {{ servicesAsParameters(services)|join(',\n    ') }}
-  ) {
-{{ serviceClassInitialization(services) }}
-  }
-
-{% endif %}
-{% endblock %}
 
 {% block class_create %}
 {% if services is not empty %}
+  /**
+   * {@inheritdoc}
+   */
   public static function create(ContainerInterface $container) {
-    return new static(
-{{ serviceClassInjection(services) }}
-    );
+    $instance = parent::create($container);
+{{ serviceClassInjectionNoOverride(services) }}
+    return $instance;
   }
 
 {% endif %}
 {% endblock %}
 
 {% block class_methods %}
-
   /**
    * {@inheritdoc}
    */
@@ -80,7 +72,7 @@ class {{ class_name }} extends FormBase {% endblock %}
       '#size' => {{ input.size }},
 {% endif %}
 {% if input.default_value is defined and input.default_value|length %}
-      '#default_value' => {{ input.default_value }},
+      '#default_value' => '{{ input.default_value }}',
 {% endif %}
 {% if input.weight is defined and input.weight|length %}
       '#weight' => '{{ input.weight }}',
@@ -99,6 +91,9 @@ class {{ class_name }} extends FormBase {% endblock %}
    * {@inheritdoc}
    */
   public function validateForm(array &$form, FormStateInterface $form_state) {
+    foreach ($form_state->getValues() as $key => $value) {
+      // @TODO: Validate fields.
+    }
     parent::validateForm($form, $form_state);
   }
 
@@ -108,8 +103,11 @@ class {{ class_name }} extends FormBase {% endblock %}
   public function submitForm(array &$form, FormStateInterface $form_state) {
     // Display result.
     foreach ($form_state->getValues() as $key => $value) {
-      drupal_set_message($key . ': ' . $value);
+{% if 'messenger' in services|keys %}
+      $this->messenger->addMessage($key . ': ' . ($key === 'text_format'?$value['value']:$value));
+{% else %}
+      \Drupal::messenger()->addMessage($key . ': ' . ($key === 'text_format'?$value['value']:$value));
+{% endif %}
     }
-
   }
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Generator/generator.php.twig b/vendor/drupal/console/templates/module/src/Generator/generator.php.twig
index 00f7496682..e7a0a8c2b5 100644
--- a/vendor/drupal/console/templates/module/src/Generator/generator.php.twig
+++ b/vendor/drupal/console/templates/module/src/Generator/generator.php.twig
@@ -15,24 +15,22 @@ use Drupal\Console\Core\Generator\GeneratorInterface;
 
 {% block class_declaration %}
 /**
- * Class {{ class_name }}
+ * Class {{ class_name }}.
  *
  * @package Drupal\Console\Generator
  */
-class {{ class_name }} extends Generator implements GeneratorInterface
-{% endblock %}
+class {{ class_name }} extends Generator implements GeneratorInterface {% endblock %}
 
 {% block class_methods %}
   /**
    * {@inheritdoc}
    */
-  public function generate(array $parameters)
-  {
-//    Example how to render a twig template using the renderFile method
-//    $this->renderFile(
-//      'path/to/file.php.twig',
-//      'path/to/file.php',
-//      $parameters
-//    );
+  public function generate(array $parameters) {
+    // Example how to render a twig template using the renderFile method
+    // $this->renderFile(
+    // 'path/to/file.php.twig',
+    // 'path/to/file.php',
+    // $parameters
+    // );.
   }
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Plugin/Action/rulesaction.php.twig b/vendor/drupal/console/templates/module/src/Plugin/Action/rulesaction.php.twig
deleted file mode 100644
index fb0812528a..0000000000
--- a/vendor/drupal/console/templates/module/src/Plugin/Action/rulesaction.php.twig
+++ /dev/null
@@ -1,44 +0,0 @@
-{% extends "base/class.php.twig" %}
-
-{% block file_path %}
-\Drupal\{{module}}\Plugin\Action\{{class_name}}.
-{% endblock %}
-
-{% block namespace_class %}
-namespace Drupal\{{module}}\Plugin\Action;
-{% endblock %}
-
-{% block use_class %}
-use Drupal\Core\Action\ActionBase;
-use Drupal\Core\Session\AccountInterface;
-{% endblock %}
-
-{% block class_declaration %}
-/**
- * Provides a '{{class_name}}' action.
- *
- * @Action(
- *  id = "{{plugin_id}}",
- *  label = @Translation("{{label}}"),
- *  type = "{{type}}",
- * )
- */
-class {{class_name}} extends ActionBase {% endblock %}
-{% block class_methods %}
-  /**
-   * {@inheritdoc}
-   */
-  public function execute($object = NULL) {
-    // Insert code here.
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function access($object, AccountInterface $account = NULL, $return_as_object = FALSE) {
-    $access = $object->status->access('edit', $account, TRUE)
-      ->andIf($object->access('update', $account, TRUE));
-
-    return $return_as_object ? $access : $access->isAllowed();
-  }
-{% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Plugin/Block/block.php.twig b/vendor/drupal/console/templates/module/src/Plugin/Block/block.php.twig
index 7bc5cf477a..e6ee2bb24c 100644
--- a/vendor/drupal/console/templates/module/src/Plugin/Block/block.php.twig
+++ b/vendor/drupal/console/templates/module/src/Plugin/Block/block.php.twig
@@ -19,6 +19,9 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
 {% endif %}
 {% endblock %}
 
+{% block use_class_services %}
+{% endblock %}
+
 {% block class_declaration %}
 /**
  * Provides a '{{class_name}}' block.
@@ -29,42 +32,18 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
  * )
  */
 class {{class_name}} extends BlockBase {% if services is not empty %}implements ContainerFactoryPluginInterface {% endif %}{% endblock %}
-{% block class_construct %}
-{% if services is not empty %}
-  /**
-   * Constructs a new {{class_name}} object.
-   *
-   * @param array $configuration
-   *   A configuration array containing information about the plugin instance.
-   * @param string $plugin_id
-   *   The plugin_id for the plugin instance.
-   * @param string $plugin_definition
-   *   The plugin implementation definition.
-   */
-  public function __construct(
-    array $configuration,
-    $plugin_id,
-    $plugin_definition,
-    {{ servicesAsParameters(services)|join(', \n\t') }}
-  ) {
-    parent::__construct($configuration, $plugin_id, $plugin_definition);
-{{ serviceClassInitialization(services) }}
-  }
-{% endif %}
-{% endblock %}
+
 {% block class_create %}
 {% if services is not empty %}
   /**
    * {@inheritdoc}
    */
   public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
-    return new static(
-      $configuration,
-      $plugin_id,
-      $plugin_definition,
-{{ serviceClassInjection(services) }}
-    );
+    $instance = new static($configuration, $plugin_id, $plugin_definition);
+{{ serviceClassInjectionNoOverride(services) }}
+    return $instance;
   }
+
 {% endif %}
 {% endblock %}
 {% block class_methods %}
@@ -75,9 +54,9 @@ class {{class_name}} extends BlockBase {% if services is not empty %}implements
   public function defaultConfiguration() {
     return [
 {% for input in inputs %}
-      {% if input.default_value is defined and input.default_value|length %}
+{% if input.default_value is defined and input.default_value|length %}
       '{{ input.name }}' => {{ input.default_value }},
-      {% endif %}
+{% endif %}
 {% endfor %}
     ] + parent::defaultConfiguration();
   }
@@ -91,7 +70,7 @@ class {{class_name}} extends BlockBase {% if services is not empty %}implements
       '#type' => '{{ input.type }}',
       '#title' => $this->t('{{ input.label|escape }}'),
 {% if input.description is defined and input.description is not empty %}
-    '#description' => $this->t('{{ input.description|e }}'),
+      '#description' => $this->t('{{ input.description|e }}'),
 {% endif %}
 {% if input.options is defined and input.options|length %}
       '#options' => {{ input.options }},
@@ -117,7 +96,7 @@ class {{class_name}} extends BlockBase {% if services is not empty %}implements
    */
   public function blockSubmit($form, FormStateInterface $form_state) {
 {% for input in inputs %}
-    $this->configuration['{{ input.name }}'] = $form_state->getValue('{{ input.name }}');
+    $this->configuration['{{ input.name }}'] = $form_state->getValue('{{ input.name }}'){% if input.type == 'text_format' %}['value']{% endif %};
 {% endfor %}
   }
 
@@ -127,10 +106,17 @@ class {{class_name}} extends BlockBase {% if services is not empty %}implements
    */
   public function build() {
     $build = [];
+{% if twig_template is defined %}
+    $build['#theme'] = '{{ plugin_id }}';
+{% endif %}
 {% for input in inputs %}
+{% if twig_template is defined %}
+    $build['#conten'][] = $this->configuration['{{ input.name }}'];
+{% else %}
     $build['{{plugin_id}}_{{ input.name }}']['#markup'] = '<p>' . $this->configuration['{{ input.name }}'] . '</p>';
+{% endif %}
 {% else %}
-    $build['{{plugin_id}}']['#markup'] = 'Implement {{class_name}}.';
+     $build['{{plugin_id}}']['#markup'] = 'Implement {{class_name}}.';
 {% endfor %}
 
     return $build;
diff --git a/vendor/drupal/console/templates/module/src/Plugin/Block/block_derivative.php.twig b/vendor/drupal/console/templates/module/src/Plugin/Block/block_derivative.php.twig
new file mode 100644
index 0000000000..afa0917cda
--- /dev/null
+++ b/vendor/drupal/console/templates/module/src/Plugin/Block/block_derivative.php.twig
@@ -0,0 +1,93 @@
+{% extends "base/class.php.twig" %}
+
+{% block file_path %}
+\Drupal\{{module}}\Plugin\Block\{{class}}.
+{% endblock %}
+
+{% block namespace_class %}
+namespace Drupal\{{module}}\Plugin\Block;
+{% endblock %}
+
+{% block use_class %}
+use Drupal\block\BlockBase;
+use Drupal\Core\Entity\EntityManagerInterface;
+use Drupal\Core\Entity\EntityViewBuilderInterface;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\Core\Session\AccountInterface;
+use Drupal\node\NodeInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+{% endblock %}
+
+{% block class_declaration %}
+/**
+ * Provides a '{{class}}' block.
+ *
+ * @Block(
+ *   id = "{{block_id}}",
+ *   admin_label = @Translation("{{block_label}}"),
+ *   category = @Translation("{{block_description}}"),
+ *   deriver = "Drupal\{{module}}\Plugin\Derivative\{{class}}"
+ * )
+ */
+
+class {{class}} extends BlockBase
+{% endblock %}
+  {% block class_properties %}
+  /**
+   * @var EntityViewBuilderInterface.
+   */
+  private $_viewBuilder;
+
+  /**
+   * @var NodeInterface.
+   */
+  private $_node;
+{% endblock %}
+{% block class_construct %}
+
+  /**
+   * Creates a {{class}} instance.
+   *
+   * @param array $configuration
+   * @param string $plugin_id
+   * @param mixed $plugin_definition
+   * @param EntityManagerInterface $entity_manager
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityManagerInterface $entity_manager)
+  {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+    $this->viewBuilder = $entity_manager->getViewBuilder('node');
+    $this->nodeStorage = $entity_manager->getStorage('node');
+    $this->node = $entity_manager->getStorage('node')->load($this->getDerivativeId());
+  }
+{% endblock %}
+{% block class_create %}
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition)
+  {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $container->get('entity.manager')
+    );
+  }
+
+{% endblock %}
+{% block class_methods %}
+  /**
+   * {@inheritdoc}
+   */
+
+  public function build()
+  {
+    if (!$this->node instanceof NodeInterface) {
+      return;
+    }
+    $build = $this->viewBuilder->view($this->node, 'full');
+    return $build;
+  }
+{% endblock %}
\ No newline at end of file
diff --git a/vendor/drupal/console/templates/module/src/Plugin/Block/blocktype.php.twig b/vendor/drupal/console/templates/module/src/Plugin/Block/blocktype.php.twig
new file mode 100644
index 0000000000..edf4b22362
--- /dev/null
+++ b/vendor/drupal/console/templates/module/src/Plugin/Block/blocktype.php.twig
@@ -0,0 +1,25 @@
+{% extends "base/class.php.twig" %}
+
+{% block file_path %}
+\Drupal\{{module}}\Plugin\Block\{{class_name}}.
+{% endblock %}
+
+{% block namespace_class %}
+namespace Drupal\{{module}}\Plugin\Block;
+{% endblock %}
+
+{% block use_class %}
+use Drupal\Core\Block\BlockBase;
+{% endblock %}
+
+{% block class_declaration %}
+
+  /**
+   * {@inheritdoc}
+   */
+  public function build() {
+    $build = [];
+    $build['{{block_id}}']['#markup'] = 'Implement {{class_name}}.';
+    return $build;
+  }
+{% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Plugin/CKEditorPlugin/ckeditorbutton.php.twig b/vendor/drupal/console/templates/module/src/Plugin/CKEditorPlugin/ckeditorbutton.php.twig
index 0e16747fb8..44337bb382 100644
--- a/vendor/drupal/console/templates/module/src/Plugin/CKEditorPlugin/ckeditorbutton.php.twig
+++ b/vendor/drupal/console/templates/module/src/Plugin/CKEditorPlugin/ckeditorbutton.php.twig
@@ -23,7 +23,8 @@ use Drupal\editor\Entity\Editor;
  *
  * @CKEditorPlugin(
  *   id = "{{ plugin_id }}",
- *   label = @Translation("{{ label }}")
+ *   label = @Translation("{{ label }}"),
+ *   module = "{{ module }}"
  * )
  */
 class {{ class_name }} extends CKEditorPluginBase {% endblock %}
@@ -40,12 +41,19 @@ class {{ class_name }} extends CKEditorPluginBase {% endblock %}
     // Make sure that the path to the image matches the file structure of
     // the CKEditor plugin you are implementing.
     return [
-      '{{ button_name }}' => [
-        'label' => t('{{ label }}'),
-        'image' => '{{ button_icon_path }}',
+{% for button in buttons %}
+      '{{ button.name }}' => [
+        'label' => t('{{ button.label }}'),
+        'image' => '{{ button.icon }}',
       ],
+{% endfor %}
     ];
   }
+  /**
+   * {@inheritdoc}
+   */
+  public function isEnabled(Editor $editor) {
+  }
 
   /**
    * {@inheritdoc}
@@ -53,7 +61,7 @@ class {{ class_name }} extends CKEditorPluginBase {% endblock %}
   public function getFile() {
     // Make sure that the path to the plugin.js matches the file structure of
     // the CKEditor plugin you are implementing.
-    return drupal_get_path('module', '{{ module }}') . '/js/plugins/{{ plugin_id }}/plugin.js';
+    return drupal_get_path('module', '{{ module }}') . '/js/Plugin/{{ plugin_id }}/plugin.js';
   }
 
   /**
diff --git a/vendor/drupal/console/templates/module/src/Plugin/CKEditorPlugin/plugin.php.twig b/vendor/drupal/console/templates/module/src/Plugin/CKEditorPlugin/plugin.php.twig
new file mode 100644
index 0000000000..ef332747b6
--- /dev/null
+++ b/vendor/drupal/console/templates/module/src/Plugin/CKEditorPlugin/plugin.php.twig
@@ -0,0 +1,20 @@
+/**
+* DO NOT EDIT THIS FILE.
+* See the following change record for more information,
+* https://www.drupal.org/node/2815083
+* @preserve
+**/
+{% for button in buttons %}
+CKEDITOR.plugins.add('{{ pligins_id }}', {
+    init: function( editor ) {
+        if ( editor.ui.addButton ) {
+            editor.ui.addButton( '{{ button.name }}', {
+                label: 'default ckeditor button',
+                id: '{{ button.name }}',
+                command: '',
+                toolbar: '{{ button.name }},10',
+            } );
+        }
+    }
+} );
+{% endfor %}
\ No newline at end of file
diff --git a/vendor/drupal/console/templates/module/src/Plugin/Condition/condition.php.twig b/vendor/drupal/console/templates/module/src/Plugin/Condition/condition.php.twig
index c782c90f55..be455a4444 100644
--- a/vendor/drupal/console/templates/module/src/Plugin/Condition/condition.php.twig
+++ b/vendor/drupal/console/templates/module/src/Plugin/Condition/condition.php.twig
@@ -16,114 +16,92 @@ use Drupal\Core\Plugin\Context\ContextDefinition;
 
 {% block class_declaration %}
 /**
-* Provides a '{{ label }}' condition to enable a condition based in module selected status.
-*
-* @Condition(
-*   id = "{{ plugin_id }}",
-*   label = @Translation("{{ label }}"),
-*   context = {
-*     "{{ context_id }}" = @ContextDefinition("{{ context_definition_id }}", required = {{ context_definition_required }} , label = @Translation("{{ context_definition_label }}"))
-*   }
-* )
-*
-*/
-class {{ class_name }} extends ConditionPluginBase {% endblock %}
-{% block class_methods %}
-/**
-* {@inheritdoc}
-*/
-public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition)
-{
-    return new static(
-    $configuration,
-    $plugin_id,
-    $plugin_definition
-    );
-}
-
-/**
- * Creates a new {{ class_name }} object.
+ * Provides a '{{ label }}' condition to enable a condition based in module selected status.
+ *
+ * @Condition(
+ *   id = "{{ plugin_id }}",
+ *   label = @Translation("{{ label }}"),
+ *   context = {
+ *     "{{ context_id }}" = @ContextDefinition("{{ context_definition_id }}", required = {{ context_definition_required }} , label = @Translation("{{ context_definition_label }}"))
+ *   }
+ * )
  *
- * @param array $configuration
- *   The plugin configuration, i.e. an array with configuration values keyed
- *   by configuration option name. The special key 'context' may be used to
- *   initialize the defined contexts by setting it to an array of context
- *   values keyed by context names.
- * @param string $plugin_id
- *   The plugin_id for the plugin instance.
- * @param mixed $plugin_definition
- *   The plugin implementation definition.
  */
- public function __construct(array $configuration, $plugin_id, $plugin_definition) {
-    parent::__construct($configuration, $plugin_id, $plugin_definition);
- }
+class {{ class_name }} extends ConditionPluginBase {% endblock %}
+{% block class_methods %}
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    $instance = parent::create($container, $configuration, $plugin_id, $plugin_definition);
+    return $instance;
+  }
 
- /**
+  /**
    * {@inheritdoc}
    */
- public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
-     // Sort all modules by their names.
-     $modules = system_rebuild_module_data();
-     uasort($modules, 'system_sort_modules_by_info_name');
-
-     $options = [NULL => t('Select a module')];
-     foreach($modules as $module_id => $module) {
-         $options[$module_id] = $module->info['name'];
-     }
-
-     $form['module'] = [
-         '#type' => 'select',
-         '#title' => $this->t('Select a module to validate'),
-         '#default_value' => $this->configuration['module'],
-         '#options' => $options,
-         '#description' => $this->t('Module selected status will be use to evaluate condition.'),
-     ];
-
-     return parent::buildConfigurationForm($form, $form_state);
- }
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    // Sort all modules by their names.
+    $modules = system_rebuild_module_data();
+    uasort($modules, 'system_sort_modules_by_info_name');
+
+    $options = [NULL => t('Select a module')];
+    foreach ($modules as $module_id => $module) {
+      $options[$module_id] = $module->info['name'];
+    }
+
+    $form['module'] = [
+      '#type' => 'select',
+      '#title' => $this->t('Select a module to validate'),
+      '#default_value' => $this->configuration['module'],
+      '#options' => $options,
+      '#description' => $this->t('Module selected status will be use to evaluate condition.'),
+    ];
+
+    return parent::buildConfigurationForm($form, $form_state);
+  }
 
-/**
- * {@inheritdoc}
- */
- public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
-     $this->configuration['module'] = $form_state->getValue('module');
-     parent::submitConfigurationForm($form, $form_state);
- }
+  /**
+   * {@inheritdoc}
+   */
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
+    $this->configuration['module'] = $form_state->getValue('module');
+    parent::submitConfigurationForm($form, $form_state);
+  }
 
-/**
- * {@inheritdoc}
- */
- public function defaultConfiguration() {
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultConfiguration() {
     return ['module' => ''] + parent::defaultConfiguration();
- }
+  }
 
-/**
-  * Evaluates the condition and returns TRUE or FALSE accordingly.
-  *
-  * @return bool
-  *   TRUE if the condition has been met, FALSE otherwise.
-  */
+  /**
+   * Evaluates the condition and returns TRUE or FALSE accordingly.
+   *
+   * @return bool
+   *   TRUE if the condition has been met, FALSE otherwise.
+   */
   public function evaluate() {
-      if (empty($this->configuration['module']) && !$this->isNegated()) {
-          return TRUE;
-      }
+    if (empty($this->configuration['module']) && !$this->isNegated()){
+        return TRUE;
+    }
 
-      $module = $this->configuration['module'];
-      $modules = system_rebuild_module_data();
+    $module = $this->configuration['module'];
+    $modules = system_rebuild_module_data();
 
-      return $modules[$module]->status;
+    return $modules[$module]->status;
   }
 
-/**
- * Provides a human readable summary of the condition's configuration.
- */
- public function summary()
- {
-     $module = $this->getContextValue('module');
-     $modules = system_rebuild_module_data();
+  /**
+   * Provides a human readable summary of the condition's configuration.
+   */
+  public function summary() {
+    $module = $this->getContextValue('module');
+    $modules = system_rebuild_module_data();
 
-     $status = ($modules[$module]->status)?t('enabled'):t('disabled');
+    $status = ($modules[$module]->status)?t('enabled'):t('disabled');
 
-     return t('The module @module is @status.', ['@module' => $module, '@status' => $status]);
- }
+    return t('The module @module is @status.', ['@module' => $module, '@status' => $status]);
+  }
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Plugin/Condition/rulescondition.php.twig b/vendor/drupal/console/templates/module/src/Plugin/Condition/rulescondition.php.twig
new file mode 100644
index 0000000000..8b925752d3
--- /dev/null
+++ b/vendor/drupal/console/templates/module/src/Plugin/Condition/rulescondition.php.twig
@@ -0,0 +1,43 @@
+{% extends "base/class.php.twig" %}
+
+{% block file_path %}
+\Drupal\{{module}}\Plugin\Condition\{{class_name}}.
+{% endblock %}
+
+{% block namespace_class %}
+namespace Drupal\{{module}}\Plugin\Condition;
+{% endblock %}
+
+{% block use_class %}
+use Drupal\rules\Core\RulesConditionBase;
+{% endblock %}
+
+{% block class_declaration %}
+/**
+ * Provides a '{{class_name}}' condition.
+ *
+ * @Condition(
+ *  id = "{{plugin_id}}",
+ *  label = @Translation("{{label}}"),
+ *  category = @Translation("{{category}}"),
+{% if context %}
+ *  context = {
+{% for item in context %}
+ *     "{{ item.name }}" = @ContextDefinition("{{ item.type }}",
+ *       label = @Translation("{{ item.label }}"),
+ *       description = @Translation("{{ item.description }}")
+ *     ),
+{% endfor %}
+ *  }
+{% endif %}
+ * )
+ */
+class {{class_name}} extends RulesConditionBase {% endblock %}
+{% block class_methods %}
+  /**
+   * {@inheritdoc}
+   */
+  public function doEvaluate($object = NULL) {
+    // Insert code here.
+  }
+{% endblock %}
\ No newline at end of file
diff --git a/vendor/drupal/console/templates/module/src/Plugin/Derivative/derivative_block_derivative.php.twig b/vendor/drupal/console/templates/module/src/Plugin/Derivative/derivative_block_derivative.php.twig
new file mode 100644
index 0000000000..5ef3a38705
--- /dev/null
+++ b/vendor/drupal/console/templates/module/src/Plugin/Derivative/derivative_block_derivative.php.twig
@@ -0,0 +1,75 @@
+{% extends "base/class.php.twig" %}
+
+{% block file_path %}
+\Drupal\{{module}}\Plugin\Block\{{class}}.
+{% endblock %}
+
+{% block namespace_class %}
+/** 
+ * @file
+ * Contains \Drupal\{{module}}\Plugin\Derivative\{{class}}.php.
+ */
+namespace Drupal\{{module}}\Plugin\Derivative;
+{% endblock %}
+
+{% block use_class %}
+use Drupal\Component\Plugin\Derivative\DeriverBase;
+use Drupal\Core\Entity\EntityStorageInterface;
+use Drupal\Core\Plugin\Discovery\ContainerDeriverInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+{% endblock %}
+
+{% block class_declaration %}
+/**
+ * Provides block plugin definitions.
+ *
+ * @see \Drupal\{{module}}\Plugin\Block\{{class}}
+ */
+class {{class}} extends DeriverBase implements ContainerDeriverInterface
+{% endblock %}
+{% block class_properties %}
+  /**
+   * The node storage.
+   *
+   * @var \Drupal\Core\Entity\EntityStorageInterface
+   */
+  protected $nodeStorage;  
+{% endblock %}
+{% block class_construct %}
+  /**
+   * Creates a new NodeBlock.
+   *
+   * @param \Drupal\Core\Entity\EntityStorageInterface $node_storage
+   *   The node storage.
+   */
+  public function __construct(EntityStorageInterface $node_storage) 
+  {
+    $this->nodeStorage = $node_storage;
+  }
+
+{% endblock %}
+{% block class_create %}
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, $base_plugin_id) 
+  {
+    return new static(
+      $container->get('entity.manager')->getStorage('node')
+    );
+  }
+{% endblock %}
+{% block class_methods %}
+  /**
+   * {@inheritdoc}
+   */
+  public function getDerivativeDefinitions($base_plugin_definition) 
+  {
+    $nodes = $this->nodeStorage->loadByProperties(['type' => 'article']);
+    foreach ($nodes as $node) {
+      $this->derivatives[$node->id()] = $base_plugin_definition;
+      $this->derivatives[$node->id()]['admin_label'] = t('Node block: ') . $node->label();
+    }
+    return $this->derivatives;
+  }
+{% endblock %}
\ No newline at end of file
diff --git a/vendor/drupal/console/templates/module/src/Plugin/Field/FieldFormatter/imageformatter.php.twig b/vendor/drupal/console/templates/module/src/Plugin/Field/FieldFormatter/imageformatter.php.twig
index 92059a4d42..3dd9f52d9a 100644
--- a/vendor/drupal/console/templates/module/src/Plugin/Field/FieldFormatter/imageformatter.php.twig
+++ b/vendor/drupal/console/templates/module/src/Plugin/Field/FieldFormatter/imageformatter.php.twig
@@ -10,13 +10,9 @@ namespace Drupal\{{ module }}\Plugin\Field\FieldFormatter;
 
 {% block use_class %}
 use Drupal\image\Plugin\Field\FieldFormatter\ImageFormatterBase;
-use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Field\FieldItemListInterface;
-use Drupal\Core\Field\FieldDefinitionInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
-use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\Url;
-use Drupal\Core\Utility\LinkGeneratorInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Cache\Cache;
@@ -36,76 +32,38 @@ use Drupal\Core\Cache\Cache;
  */
 class {{ class_name }} extends ImageFormatterBase implements ContainerFactoryPluginInterface {% endblock %}
 {% block class_methods %}
-/**
- * The current user.
- *
- * @var \Drupal\Core\Session\AccountInterface
- */
- protected $currentUser;
-
-/**
- * The link generator.
- *
- * @var \Drupal\Core\Utility\LinkGeneratorInterface
- */
- protected $linkGenerator;
-
-/**
- * The image style entity storage.
- *
- * @var \Drupal\Core\Entity\EntityStorageInterface
- */
- protected $imageStyleStorage;
-
-/**
- * Constructs a new {{ class_name }} object.
- *
- * @param string $plugin_id
- *   The plugin_id for the formatter.
- * @param mixed $plugin_definition
- *   The plugin implementation definition.
- * @param \Drupal\Core\Field\FieldDefinitionInterface $field_definition
- *   The definition of the field to which the formatter is associated.
- * @param array $settings
- *   The formatter settings.
- * @param string $label
- *   The formatter label display setting.
- * @param string $view_mode
- *   The view mode.
- * @param array $third_party_settings
- *   Any third party settings settings.
- * @param \Drupal\Core\Session\AccountInterface $current_user
- *   The current user.
- * @param \Drupal\Core\Utility\LinkGeneratorInterface $link_generator
- *   The link generator service.
- * @param \Drupal\Core\Entity\EntityStorageInterface $image_style_storage
- *   The entity storage for the image.
- */
- public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, AccountInterface $current_user, LinkGeneratorInterface $link_generator, EntityStorageInterface $image_style_storage) {
-    parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $label, $view_mode, $third_party_settings);
-    $this->currentUser = $current_user;
-    $this->linkGenerator = $link_generator;
-    $this->imageStyleStorage = $image_style_storage;
+  /**
+   * The current user.
+   *
+   * @var \Drupal\Core\Session\AccountInterface
+   */
+  protected $currentUser;
+
+  /**
+   * The link generator.
+   *
+   * @var \Drupal\Core\Utility\LinkGeneratorInterface
+   */
+  protected $linkGenerator;
+
+  /**
+   * The image style entity storage.
+   *
+   * @var \Drupal\Core\Entity\EntityStorageInterface
+   */
+  protected $imageStyleStorage;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    $instance = new static($configuration, $plugin_id, $plugin_definition);
+    $instance->currentUser = $container->get('current_user');
+    $instance->linkGenerator = $container->get('link_generator');
+    $instance->imageStyleStorage = $container->get('entity_type.manager')->getStorage('image_style');
+    return $instance;
   }
 
-/**
- * {@inheritdoc}
- */
- public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
-   return new static(
-     $plugin_id,
-     $plugin_definition,
-     $configuration['field_definition'],
-     $configuration['settings'],
-     $configuration['label'],
-     $configuration['view_mode'],
-     $configuration['third_party_settings'],
-     $container->get('current_user'),
-     $container->get('link_generator'),
-     $container->get('entity_type.manager')->getStorage('image_style')
-   );
- }
-
 /**
  * {@inheritdoc}
  */
diff --git a/vendor/drupal/console/templates/module/src/Plugin/Field/FieldWidget/fieldwidget.php.twig b/vendor/drupal/console/templates/module/src/Plugin/Field/FieldWidget/fieldwidget.php.twig
index 86e88fc908..61b54ff711 100644
--- a/vendor/drupal/console/templates/module/src/Plugin/Field/FieldWidget/fieldwidget.php.twig
+++ b/vendor/drupal/console/templates/module/src/Plugin/Field/FieldWidget/fieldwidget.php.twig
@@ -20,6 +20,7 @@ use Drupal\Core\Form\FormStateInterface;
  *
  * @FieldWidget(
  *   id = "{{ plugin_id }}",
+ *   module = "{{ module }}",
  *   label = @Translation("{{ label }}"){% if field_type %},
  *   field_types = {
  *     "{{ field_type }}"
diff --git a/vendor/drupal/console/templates/module/src/Plugin/Mail/mail.php.twig b/vendor/drupal/console/templates/module/src/Plugin/Mail/mail.php.twig
index 878b3eea24..1c9c7d3a6b 100644
--- a/vendor/drupal/console/templates/module/src/Plugin/Mail/mail.php.twig
+++ b/vendor/drupal/console/templates/module/src/Plugin/Mail/mail.php.twig
@@ -16,6 +16,9 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
 {% endif %}
 {% endblock %}
 
+{% block use_class_services %}
+{% endblock %}
+
 {% block class_declaration %}
 /**
  * Provides a '{{class_name}}' mail plugin.
@@ -28,43 +31,15 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
 class {{class_name}} extends PhpMail {% if services is not empty %}implements ContainerFactoryPluginInterface {% endif %}
 {% endblock %}
 
-{% block class_construct %}
-{% if services is not empty %}
-  /**
-   * Constructs a new {{class_name}} object.
-   *
-   * @param array $configuration
-   *   A configuration array containing information about the plugin instance.
-   * @param string $plugin_id
-   *   The plugin_id for the plugin instance.
-   * @param string $plugin_definition
-   *   The plugin implementation definition.
-   */
-  public function __construct(
-        array $configuration,
-        $plugin_id,
-        $plugin_definition,
-        {{ servicesAsParameters(services)|join(', \n\t') }}
-  ) {
-    parent::__construct($configuration, $plugin_id, $plugin_definition);
-{{ serviceClassInitialization(services) }}
-  }
-
-{% endif %}
-{% endblock %}
-
 {% block class_create %}
 {% if services is not empty %}
   /**
    * {@inheritdoc}
    */
   public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
-    return new static(
-      $configuration,
-      $plugin_id,
-      $plugin_definition,
-{{ serviceClassInjection(services) }}
-    );
+    $instance = new static($configuration, $plugin_id, $plugin_definition);
+{{ serviceClassInjectionNoOverride(services) }}
+    return $instance;
   }
 {% endif %}
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Plugin/QueueWorker/queue_worker.php.twig b/vendor/drupal/console/templates/module/src/Plugin/QueueWorker/queue_worker.php.twig
new file mode 100644
index 0000000000..5b200c9613
--- /dev/null
+++ b/vendor/drupal/console/templates/module/src/Plugin/QueueWorker/queue_worker.php.twig
@@ -0,0 +1,29 @@
+{% extends "base/class.php.twig" %}
+
+{% block namespace_class %}
+namespace Drupal\{{ module }}\Plugin\QueueWorker;
+{% endblock %}
+
+{% block use_class %}
+use Drupal\Core\Queue\QueueWorkerBase;
+{% endblock %}
+
+{% block class_declaration %}
+/**
+ * Plugin implementation of the {{ plugin_id }} queueworker.
+ *
+ * @QueueWorker (
+ *   id = "{{ plugin_id }}",
+ *   title = @Translation("{{ label }}"),
+ *   cron = {"time" = {{ cron_time }}}
+ * )
+ */
+class {{ class_name }} extends QueueWorkerBase {% endblock %}
+{% block class_methods %}
+  /**
+   * {@inheritdoc}
+   */
+  public function processItem($data) {
+    // Process item operations.
+  }
+{% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Plugin/Rest/Resource/rest.php.twig b/vendor/drupal/console/templates/module/src/Plugin/Rest/Resource/rest.php.twig
index e2a620d958..1fba836c74 100644
--- a/vendor/drupal/console/templates/module/src/Plugin/Rest/Resource/rest.php.twig
+++ b/vendor/drupal/console/templates/module/src/Plugin/Rest/Resource/rest.php.twig
@@ -9,11 +9,9 @@ namespace Drupal\{{module_name}}\Plugin\rest\resource;
 {% endblock %}
 
 {% block use_class %}
-use Drupal\Core\Session\AccountProxyInterface;
 use Drupal\rest\ModifiedResourceResponse;
 use Drupal\rest\Plugin\ResourceBase;
 use Drupal\rest\ResourceResponse;
-use Psr\Log\LoggerInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
 {% endblock %}
@@ -26,7 +24,9 @@ use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
  *   id = "{{ plugin_id }}",
  *   label = @Translation("{{ plugin_label }}"),
  *   uri_paths = {
- *     "canonical" = "/{{ plugin_url }}"
+{% for state_settings in plugin_states %}
+ *     "{{ state_settings.uri_paths }}" = "{{ plugin_url }}"
+{% endfor %}
  *   }
  * )
  */
@@ -41,78 +41,42 @@ class {{ class_name }} extends ResourceBase {% endblock %}
   protected $currentUser;
 {% endblock %}
 
-{% block class_construct %}
-
-  /**
-   * Constructs a new {{ class_name }} object.
-   *
-   * @param array $configuration
-   *   A configuration array containing information about the plugin instance.
-   * @param string $plugin_id
-   *   The plugin_id for the plugin instance.
-   * @param mixed $plugin_definition
-   *   The plugin implementation definition.
-   * @param array $serializer_formats
-   *   The available serialization formats.
-   * @param \Psr\Log\LoggerInterface $logger
-   *   A logger instance.
-   * @param \Drupal\Core\Session\AccountProxyInterface $current_user
-   *   A current user instance.
-   */
-  public function __construct(
-    array $configuration,
-    $plugin_id,
-    $plugin_definition,
-    array $serializer_formats,
-    LoggerInterface $logger,
-    AccountProxyInterface $current_user) {
-    parent::__construct($configuration, $plugin_id, $plugin_definition, $serializer_formats, $logger);
-
-    $this->currentUser = $current_user;
-  }
-{% endblock %}
-
 {% block class_create %}
 
   /**
    * {@inheritdoc}
    */
   public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
-    return new static(
-      $configuration,
-      $plugin_id,
-      $plugin_definition,
-      $container->getParameter('serializer.formats'),
-      $container->get('logger.factory')->get('{{module_name}}'),
-      $container->get('current_user')
-    );
+    $instance = parent::create($container, $configuration, $plugin_id, $plugin_definition);
+    $instance->logger = $container->get('logger.factory')->get('{{module_name}}');
+    $instance->currentUser = $container->get('current_user');
+    return $instance;
   }
 {% endblock %}
 
 {% block class_methods %}
 {% for state, state_settings in plugin_states %}
 
-  /**
-   * Responds to {{ state }} requests.
-   *
-   * @param \Drupal\Core\Entity\EntityInterface $entity
-   *   The entity object.
-   *
-   * @return \Drupal\rest\{{ state_settings.response_class }}
-   *   The HTTP response object.
-   *
-   * @throws \Symfony\Component\HttpKernel\Exception\HttpException
-   *   Throws exception expected.
-   */
-  public function {{ state|lower }}(EntityInterface $entity) {
+    /**
+     * Responds to {{ state }} requests.
+     *
+     * @param string $payload
+     *
+     * @return \Drupal\rest\{{ state_settings.response_class }}
+     *   The HTTP response object.
+     *
+     * @throws \Symfony\Component\HttpKernel\Exception\HttpException
+     *   Throws exception expected.
+     */
+    public function {{ state|lower }}($payload) {
 
-    // You must to implement the logic of your REST Resource here.
-    // Use current user after pass authentication to validate access.
-    if (!$this->currentUser->hasPermission('access content')) {
-      throw new AccessDeniedHttpException();
-    }
+        // You must to implement the logic of your REST Resource here.
+        // Use current user after pass authentication to validate access.
+        if (!$this->currentUser->hasPermission('access content')) {
+            throw new AccessDeniedHttpException();
+        }
 
-    return new {{ state_settings.response_class }}({{ (state == 'DELETE') ? 'NULL' : '$entity' }}, {{ state_settings.http_code }});
-  }
+        return new {{ state_settings.response_class }}({{ (state == 'DELETE') ? 'NULL' : '$payload' }}, {{ state_settings.http_code }});
+    }
 {% endfor %}
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Plugin/RulesAction/rulesaction.php.twig b/vendor/drupal/console/templates/module/src/Plugin/RulesAction/rulesaction.php.twig
new file mode 100644
index 0000000000..95509bc429
--- /dev/null
+++ b/vendor/drupal/console/templates/module/src/Plugin/RulesAction/rulesaction.php.twig
@@ -0,0 +1,51 @@
+{% extends "base/class.php.twig" %}
+
+{% block file_path %}
+\Drupal\{{module}}\Plugin\RulesAction\{{class_name}}.
+{% endblock %}
+
+{% block namespace_class %}
+namespace Drupal\{{module}}\Plugin\RulesAction;
+{% endblock %}
+
+{% block use_class %}
+use Drupal\rules\Core\RulesActionBase;
+{% endblock %}
+
+{% block class_declaration %}
+/**
+ * Provides a '{{class_name}}' action.
+ *
+ * @RulesAction(
+ *  id = "{{plugin_id}}",
+ *  label = @Translation("{{label}}"),
+ *  category = @Translation("{{category}}"),
+{% if context %}
+ *  context = {
+{% for item in context %}
+ *     "{{ item.name }}" = @ContextDefinition("{{ item.type }}",
+ *       label = @Translation("{{ item.label }}"),
+ *       description = @Translation("{{ item.description }}")
+ *     ),
+{% endfor %}
+ *  }
+{% endif %}
+ * )
+ */
+class {{class_name}} extends RulesActionBase {% endblock %}
+{% block class_methods %}
+  /**
+   * {@inheritdoc}
+   */
+  public function doExecute($object = NULL) {
+    // Insert code here.
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function autoSaveContext() {
+      // Insert code here.
+      return [];
+  }
+{% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Plugin/RulesDataProcessor/rulesdataprocessor.php.twig b/vendor/drupal/console/templates/module/src/Plugin/RulesDataProcessor/rulesdataprocessor.php.twig
new file mode 100644
index 0000000000..223345f6b8
--- /dev/null
+++ b/vendor/drupal/console/templates/module/src/Plugin/RulesDataProcessor/rulesdataprocessor.php.twig
@@ -0,0 +1,34 @@
+{% extends "base/class.php.twig" %}
+
+{% block file_path %}
+Drupal\{{module}}\Plugin\RulesDataProcessor\{{class_name}}.
+{% endblock %}
+
+{% block namespace_class %}
+namespace Drupal\{{module}}\Plugin\RulesDataProcessor;
+{% endblock %}
+
+{% block use_class %}
+use Drupal\Core\Plugin\PluginBase;
+use Drupal\rules\Context\DataProcessorInterface;
+use Drupal\rules\Engine\ExecutionStateInterface;
+{% endblock %}
+
+{% block class_declaration %}
+/**
+ * Provides a '{{class_name}}' action.
+ *
+ * @RulesDataProcessor(
+ *   id = "{{plugin_id}}",
+ *   label = @Translation("{{label}}")
+ * )
+ */
+class {{class_name}} extends PluginBase implements DataProcessorInterface {% endblock %}
+{% block class_methods %}
+  /**
+    * {@inheritdoc}
+    */
+  public function process($value, ExecutionStateInterface $rules_state) {
+     // Insert code here.
+  }
+{% endblock %}
\ No newline at end of file
diff --git a/vendor/drupal/console/templates/module/src/Plugin/Validation/Constraint/constraint.php.twig b/vendor/drupal/console/templates/module/src/Plugin/Validation/Constraint/constraint.php.twig
new file mode 100644
index 0000000000..2de2288465
--- /dev/null
+++ b/vendor/drupal/console/templates/module/src/Plugin/Validation/Constraint/constraint.php.twig
@@ -0,0 +1,34 @@
+{% extends "base/class.php.twig" %}
+
+{% block file_path %}
+\Drupal\{{ module }}\Plugin\Validation\Constraint\{{ class_name }}.
+{% endblock %}
+
+{% block namespace_class %}
+namespace Drupal\{{ module }}\Plugin\Validation\Constraint;
+{% endblock %}
+
+{% block use_class %}
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+{% endblock %}
+
+{% block class_declaration %}
+/**
+ * Plugin implementation of the '{{ plugin_id }}'.
+ *
+ * @Constraint(
+ *   id = "{{ plugin_id }}",
+ *   label = @Translation("{{ label }}", context = "Validation"),
+ * )
+ */
+class {{ class_name }} extends Constraint
+{% endblock %}
+
+{% block class_properties %}
+    // The message that will be shown if the value is empty.
+    public $isEmpty = '%value is empty';
+
+    // The message that will be shown if the value is not unique.
+    public $notUnique = '%value is not unique';
+{% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Plugin/Validation/Constraint/validator.php.twig b/vendor/drupal/console/templates/module/src/Plugin/Validation/Constraint/validator.php.twig
new file mode 100644
index 0000000000..fe7145067e
--- /dev/null
+++ b/vendor/drupal/console/templates/module/src/Plugin/Validation/Constraint/validator.php.twig
@@ -0,0 +1,47 @@
+{% extends "base/class.php.twig" %}
+
+{% block file_path %}
+\Drupal\{{ module }}\Plugin\Validation\Constraint\{{ class_name }}.
+{% endblock %}
+
+{% block namespace_class %}
+namespace Drupal\{{ module }}\Plugin\Validation\Constraint;
+{% endblock %}
+
+{% block use_class %}
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+{% endblock %}
+
+{% block class_declaration %}
+/**
+ * Validates the UniqueInteger constraint.
+ */
+class {{ class_name }}Validator extends ConstraintValidator
+{% endblock %}
+
+{% block class_methods %}
+    /**
+     * {@inheritdoc}
+     */
+    public function validate($items, Constraint $constraint) {
+        foreach ($items as $item) {
+            // First check if the value is not empty.
+            if (empty($item->value)) {
+                // The value is empty, so a violation, aka error, is applied.
+                // The type of violation applied comes from the constraint description
+                // in step 1.
+                $this->context->addViolation($constraint->isEmpty, ['%value' => $item->value]);
+            }
+
+            // Next check if the value is unique.
+            if (!$this->isUnique($item->value)) {
+                $this->context->addViolation($constraint->notUnique, ['%value' => $item->value]);
+            }
+        }
+    }
+
+    private function isUnique($value) {
+        // Here is where the check for a unique value would happen.
+    }
+{% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Plugin/migrate/source/source.php.twig b/vendor/drupal/console/templates/module/src/Plugin/migrate/source/source.php.twig
index 1f8ee6e23f..7ecf8844b1 100644
--- a/vendor/drupal/console/templates/module/src/Plugin/migrate/source/source.php.twig
+++ b/vendor/drupal/console/templates/module/src/Plugin/migrate/source/source.php.twig
@@ -17,7 +17,8 @@ use Drupal\migrate\Plugin\migrate\source\SqlBase;
  * Provides a '{{class_name}}' migrate source.
  *
  * @MigrateSource(
- *  id = "{{plugin_id}}"
+ *  id = "{{plugin_id}}",
+ *  source_module = "{{module}}"
  * )
  */
 class {{class_name}} extends SqlBase {% endblock %}
@@ -26,11 +27,11 @@ class {{class_name}} extends SqlBase {% endblock %}
    * {@inheritdoc}
    */
   public function query() {
-
     return $this->select('{{table}}', '{{alias}}')
-      ->fields('{{alias}}'){% if group_by %}
+      ->fields('{{alias}}')
+{% if group_by %}
       ->groupBy('{{alias}}.{{group_by}}')
-      {% endif %};
+{% endif %};
   }
 
   /**
@@ -38,10 +39,10 @@ class {{class_name}} extends SqlBase {% endblock %}
    */
   public function fields() {
     $fields = [
-    {% for field in fields %}
-  '{{field.id}}' => $this->t('{{field.description}}'),
-    {% endfor %}
-];
+{% for field in fields %}
+      '{{field.id}}' => $this->t('{{field.description}}'),
+{% endfor %}
+    ];
     return $fields;
   }
 
@@ -49,7 +50,6 @@ class {{class_name}} extends SqlBase {% endblock %}
    * {@inheritdoc}
    */
   public function getIds() {
-    return [
-    ];
+    return [];
   }
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Plugin/migrate_plus/data_parser/data_parser.php.twig b/vendor/drupal/console/templates/module/src/Plugin/migrate_plus/data_parser/data_parser.php.twig
new file mode 100644
index 0000000000..9028dc710f
--- /dev/null
+++ b/vendor/drupal/console/templates/module/src/Plugin/migrate_plus/data_parser/data_parser.php.twig
@@ -0,0 +1,39 @@
+{% extends "base/class.php.twig" %}
+
+{% block file_path %}
+\Drupal\{{module}}\Plugin\migrate_plus\data_parser\{{class_name}}.
+{% endblock %}
+
+{% block namespace_class %}
+namespace Drupal\{{module}}\Plugin\migrate_plus\data_parser;
+{% endblock %}
+
+{% block use_class %}
+use Drupal\migrate_plus\DataParserPluginBase;
+{% endblock %}
+
+{% block class_declaration %}
+/**
+* Provides a '{{class_name}}' data parser plugin.
+*
+* @DataParser(
+*  id = "{{plugin_id}}"
+*  title = @Translation("{{plugin_title}}")
+* )
+*/
+class {{class_name}} extends DataParserPluginBase {% endblock %}
+{% block class_methods %}
+  /**
+   * {@inheritdoc}
+   */
+  protected function openSourceUrl($url) {
+    // Plugin logic goes here.
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function fetchNextRow() {
+    // Plugin logic goes here.
+  }
+{% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Plugin/skeleton.php.twig b/vendor/drupal/console/templates/module/src/Plugin/skeleton.php.twig
index 5bce614ab9..d8333f6dfd 100644
--- a/vendor/drupal/console/templates/module/src/Plugin/skeleton.php.twig
+++ b/vendor/drupal/console/templates/module/src/Plugin/skeleton.php.twig
@@ -5,7 +5,7 @@
 {% endblock %}
 
 {% block namespace_class %}
-namespace Drupal\{{module}}\Plugin\{{ plugin }};
+namespace Drupal\{{module}}\{{ namespace }};
 {% endblock %}
 
 {% block use_class %}
@@ -19,15 +19,18 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
 {% endif %}
 {% endblock %}
 
+{% block use_class_services %}
+{% endblock %}
+
 {% block class_declaration %}
 {% if pluginAnnotation is not empty %}
 /**
  * @{{ plugin_annotation }}(
 {% for property in pluginAnnotationProperties %}
 {% if property.name == 'id' %}
- *  id = "{{- plugin_id }}",
+ *  id = "{{- id }}",
 {% elseif property.type == "\\Drupal\\Core\\Annotation\\Translation" %}
- *  {{ property.name }} = @Translation("{{property.description}}"),
+ *  {{ property.name }} = @Translation("{{label}}"),
 {% else %}
  *  {{ property.name }} = "{{ property.type }}",
 {% endif %}
@@ -35,50 +38,26 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
  * )
  */
 {% endif %}
-class {{class_name}} implements {% if plugin_interface is not empty %} {{ plugin_interface }} {% endif %}{% if services is not empty %}, ContainerFactoryPluginInterface {% endif %}{% endblock %}
-{% block class_construct %}
-{% if services is not empty %}
-  /**
-   * Constructs a new {{class_name}} object.
-   *
-   * @param array $configuration
-   *   A configuration array containing information about the plugin instance.
-   * @param string $plugin_id
-   *   The plugin_id for the plugin instance.
-   * @param string $plugin_definition
-   *   The plugin implementation definition.
-   */
-  public function __construct(
-        array $configuration,
-        $plugin_id,
-        $plugin_definition,
-        {{ servicesAsParameters(services)|join(', \n\t') }}
-  ) {
-    parent::__construct($configuration, $plugin_id, $plugin_definition);
-{{ serviceClassInitialization(services) }}
-  }
-{% endif %}
-{% endblock %}
+class {{class_name}} implements {% if plugin_interface is not empty %}{{ plugin_interface }}{% endif %}{% if services is not empty %}, ContainerFactoryPluginInterface {% endif %}{% endblock %}
+
 {% block class_create %}
 {% if services is not empty %}
   /**
    * {@inheritdoc}
    */
   public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
-    return new static(
-      $configuration,
-      $plugin_id,
-      $plugin_definition,
-{{ serviceClassInjection(services) }}
-    );
+    $instance = new static($configuration, $plugin_id, $plugin_definition);
+{{ serviceClassInjectionNoOverride(services) }}
+    return $instance;
   }
 {% endif %}
 {% endblock %}
+
 {% block class_methods %}
 
     /**
-    * {@inheritdoc}
-    */
+     * {@inheritdoc}
+     */
     public function build() {
     $build = [];
 
@@ -86,13 +65,13 @@ class {{class_name}} implements {% if plugin_interface is not empty %} {{ plugin
 
     return $build;
     }
-
   {% for method in pluginInterfaceMethods %}
+
     /**
-      * {@inheritdoc}
-      */
-      {{ method.declaration }} {
-        // {{ method.description }}
-      }
+     * {@inheritdoc}
+     */
+    {{ method.declaration }} {
+
+    }
   {% endfor %}
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/accesscontrolhandler-entity-content.php.twig b/vendor/drupal/console/templates/module/src/accesscontrolhandler-entity-content.php.twig
index 728a276ee8..7aaa3c53b4 100644
--- a/vendor/drupal/console/templates/module/src/accesscontrolhandler-entity-content.php.twig
+++ b/vendor/drupal/console/templates/module/src/accesscontrolhandler-entity-content.php.twig
@@ -28,17 +28,49 @@ class {{ entity_class }}AccessControlHandler extends EntityAccessControlHandler
    */
   protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) {
     /** @var \Drupal\{{ module }}\Entity\{{ entity_class }}Interface $entity */
+
     switch ($operation) {
+
       case 'view':
+
         if (!$entity->isPublished()) {
+{% if has_bundle_permissions %}
+          $permission = $this->checkOwn($entity, 'view unpublished', $account);
+          if (!empty($permission)) {
+            return AccessResult::allowed();
+          }
+
+{%  endif %}
           return AccessResult::allowedIfHasPermission($account, 'view unpublished {{ label|lower }} entities');
         }
+
+{% if has_bundle_permissions %}
+        $permission = $this->checkOwn($entity, $operation, $account);
+        if (!empty($permission)) {
+          return AccessResult::allowed();
+        }
+{%  endif %}
+
         return AccessResult::allowedIfHasPermission($account, 'view published {{ label|lower }} entities');
 
       case 'update':
+
+{% if has_bundle_permissions %}
+        $permission = $this->checkOwn($entity, $operation, $account);
+        if (!empty($permission)) {
+          return AccessResult::allowed();
+        }
+{%  endif %}
         return AccessResult::allowedIfHasPermission($account, 'edit {{ label|lower }} entities');
 
       case 'delete':
+
+{% if has_bundle_permissions %}
+        $permission = $this->checkOwn($entity, $operation, $account);
+        if (!empty($permission)) {
+          return AccessResult::allowed();
+        }
+{%  endif %}
         return AccessResult::allowedIfHasPermission($account, 'delete {{ label|lower }} entities');
     }
 
@@ -52,4 +84,51 @@ class {{ entity_class }}AccessControlHandler extends EntityAccessControlHandler
   protected function checkCreateAccess(AccountInterface $account, array $context, $entity_bundle = NULL) {
     return AccessResult::allowedIfHasPermission($account, 'add {{ label|lower }} entities');
   }
+
+{% if has_bundle_permissions %}
+  /**
+   * Test for given 'own' permission.
+   *
+   * @param \Drupal\Core\Entity\EntityInterface $entity
+   * @param $operation
+   * @param \Drupal\Core\Session\AccountInterface $account
+   *
+   * @return string|null
+   *   The permission string indicating it's allowed.
+   */
+  protected function checkOwn(EntityInterface $entity, $operation, AccountInterface $account) {
+    $status = $entity->isPublished();
+    $uid = $entity->getOwnerId();
+
+    $is_own = $account->isAuthenticated() && $account->id() == $uid;
+    if (!$is_own) {
+      return;
+    }
+
+    $bundle = $entity->bundle();
+
+    $ops = [
+      'create' => '%bundle add own %bundle entities',
+      'view unpublished' => '%bundle view own unpublished %bundle entities',
+      'view' => '%bundle view own entities',
+      'update' => '%bundle edit own entities',
+      'delete' => '%bundle delete own entities',
+    ];
+    $permission = strtr($ops[$operation], ['%bundle' => $bundle]);
+
+    if ($operation === 'view unpublished') {
+      if (!$status && $account->hasPermission($permission)) {
+        return $permission;
+      }
+      else {
+        return NULL;
+      }
+    }
+    if ($account->hasPermission($permission)) {
+      return $permission;
+    }
+
+    return NULL;
+  }
+{% endif %}
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/cache-context.php.twig b/vendor/drupal/console/templates/module/src/cache-context.php.twig
index 87a7b4c197..096a5c02cc 100644
--- a/vendor/drupal/console/templates/module/src/cache-context.php.twig
+++ b/vendor/drupal/console/templates/module/src/cache-context.php.twig
@@ -15,8 +15,8 @@ use Drupal\Core\Cache\Context\CacheContextInterface;
 
 {% block class_declaration %}
 /**
-* Class {{ class }}.
-*/
+ * Class {{ class }}.
+ */
 class {{ class }} implements CacheContextInterface {% endblock %}
 
 {% block class_construct %}
@@ -25,29 +25,29 @@ class {{ class }} implements CacheContextInterface {% endblock %}
    * Constructs a new {{ class }} object.
    */
   public function __construct({{ servicesAsParameters(services)|join(', ') }}) {
-  {{ serviceClassInitialization(services) }}
+{{ serviceClassInitialization(services) }}
   }
 
 {% endblock %}
 
 {% block class_methods %}
   /**
-  * {@inheritdoc}
-  */
+   * {@inheritdoc}
+   */
   public static function getLabel() {
-    drupal_set_message('Lable of cache context');
+    \Drupal::messenger()->addMessage('Lable of cache context');
   }
 
   /**
-  * {@inheritdoc}
-  */
+   * {@inheritdoc}
+   */
   public function getContext() {
     // Actual logic of context variation will lie here.
   }
 
   /**
-  * {@inheritdoc}
-  */
+   * {@inheritdoc}
+   */
   public function getCacheableMetadata() {
     return new CacheableMetadata();
   }
diff --git a/vendor/drupal/console/templates/module/src/entity-content-bundle-permissions.php.twig b/vendor/drupal/console/templates/module/src/entity-content-bundle-permissions.php.twig
new file mode 100644
index 0000000000..5c00b22506
--- /dev/null
+++ b/vendor/drupal/console/templates/module/src/entity-content-bundle-permissions.php.twig
@@ -0,0 +1,92 @@
+
+{% extends "base/class.php.twig" %}
+
+{% block file_path %}
+  \Drupal\{{ module }}\Entity\{{ entity_class }}.
+{% endblock %}
+
+{% block namespace_class %}
+namespace Drupal\{{ module }};
+{% endblock %}
+
+{% block use_class %}
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+use Drupal\{{ module }}\Entity\{{ entity_class }};
+
+{% endblock %}
+
+{% block class_declaration %}
+/**
+ * Provides dynamic permissions for {{ label }} of different types.
+ *
+ * @ingroup {{ module }}
+ *
+ */
+class {{ entity_class }}Permissions{% endblock %}
+
+{% block class_methods %}
+  use StringTranslationTrait;
+
+  /**
+   * Returns an array of node type permissions.
+   *
+   * @return array
+   *   The {{ entity_class }} by bundle permissions.
+   *   @see \Drupal\user\PermissionHandlerInterface::getPermissions()
+   */
+  public function generatePermissions() {
+    $perms = [];
+
+    foreach ({{ entity_class }}::loadMultiple() as $type) {
+      $perms += $this->buildPermissions($type);
+    }
+
+    return $perms;
+  }
+
+  /**
+   * Returns a list of node permissions for a given node type.
+   *
+   * @param \Drupal\{{ module }}\Entity\{{ entity_class }} $type
+   *   The {{ entity_class }} type.
+   *
+   * @return array
+   *   An associative array of permission names and descriptions.
+   */
+  protected function buildPermissions({{ entity_class}} $type) {
+    $type_id = $type->id();
+    $type_params = ['%type_name' => $type->label()];
+
+    return [
+      "$type_id create entities" => [
+        'title' => $this->t('Create new %type_name entities', $type_params),
+      ],
+      "$type_id edit own entities" => [
+        'title' => $this->t('Edit own %type_name entities', $type_params),
+      ],
+      "$type_id edit any entities" => [
+        'title' => $this->t('Edit any %type_name entities', $type_params),
+      ],
+      "$type_id delete own entities" => [
+        'title' => $this->t('Delete own %type_name entities', $type_params),
+      ],
+      "$type_id delete any entities" => [
+        'title' => $this->t('Delete any %type_name entities', $type_params),
+      ],
+{% if revisionable %}
+      "$type_id view revisions" => [
+        'title' => $this->t('View %type_name revisions', $type_params),
+        'description' => t('To view a revision, you also need permission to view the entity item.'),
+      ],
+      "$type_id revert revisions" => [
+        'title' => $this->t('Revert %type_name revisions', $type_params),
+        'description' => t('To revert a revision, you also need permission to edit the entity item.'),
+      ],
+      "$type_id delete revisions" => [
+        'title' => $this->t('Delete %type_name revisions', $type_params),
+        'description' => $this->t('To delete a revision, you also need permission to delete the entity item.'),
+      ],
+{% endif %}
+    ];
+  }
+{% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/entity-content-route-provider.php.twig b/vendor/drupal/console/templates/module/src/entity-content-route-provider.php.twig
index afaa8908a9..6ed15308af 100644
--- a/vendor/drupal/console/templates/module/src/entity-content-route-provider.php.twig
+++ b/vendor/drupal/console/templates/module/src/entity-content-route-provider.php.twig
@@ -80,7 +80,7 @@ class {{ entity_class }}HtmlRouteProvider extends AdminHtmlRouteProvider {% endb
           '_title' => "{$entity_type->getLabel()} revisions",
           '_controller' => '\Drupal\{{ module }}\Controller\{{ entity_class }}Controller::revisionOverview',
         ])
-        ->setRequirement('_permission', 'access {{ label|lower }} revisions')
+        ->setRequirement('_permission', 'view all {{ label|lower }} revisions')
         ->setOption('_admin_route', TRUE);
 
       return $route;
@@ -104,7 +104,7 @@ class {{ entity_class }}HtmlRouteProvider extends AdminHtmlRouteProvider {% endb
           '_controller' => '\Drupal\{{ module }}\Controller\{{ entity_class }}Controller::revisionShow',
           '_title_callback' => '\Drupal\{{ module }}\Controller\{{ entity_class }}Controller::revisionPageTitle',
         ])
-        ->setRequirement('_permission', 'access {{ label|lower }} revisions')
+        ->setRequirement('_permission', 'view all {{ label|lower }} revisions')
         ->setOption('_admin_route', TRUE);
 
       return $route;
@@ -209,4 +209,4 @@ class {{ entity_class }}HtmlRouteProvider extends AdminHtmlRouteProvider {% endb
       return $route;
     }
   }
-{% endblock %}
+{% endblock %}
\ No newline at end of file
diff --git a/vendor/drupal/console/templates/module/src/entity-route-provider.php.twig b/vendor/drupal/console/templates/module/src/entity-route-provider.php.twig
index 860d7b3074..c7b33fdf4f 100644
--- a/vendor/drupal/console/templates/module/src/entity-route-provider.php.twig
+++ b/vendor/drupal/console/templates/module/src/entity-route-provider.php.twig
@@ -11,7 +11,6 @@ namespace Drupal\{{ module }};
 {% block use_class %}
 use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\Entity\Routing\AdminHtmlRouteProvider;
-use Symfony\Component\Routing\Route;
 {% endblock %}
 
 {% block class_declaration %}
@@ -30,7 +29,6 @@ class {{ entity_class }}HtmlRouteProvider extends AdminHtmlRouteProvider {% endb
     $collection = parent::getRoutes($entity_type);
 
     // Provide your custom entity routes here.
-
     return $collection;
   }
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/entity-storage.php.twig b/vendor/drupal/console/templates/module/src/entity-storage.php.twig
index 01aec1cc46..629e1a7d62 100644
--- a/vendor/drupal/console/templates/module/src/entity-storage.php.twig
+++ b/vendor/drupal/console/templates/module/src/entity-storage.php.twig
@@ -11,7 +11,9 @@ namespace Drupal\{{ module }};
 {% block use_class %}
 use Drupal\Core\Entity\Sql\SqlContentEntityStorage;
 use Drupal\Core\Session\AccountInterface;
+{% if is_translatable %}
 use Drupal\Core\Language\LanguageInterface;
+{% endif %}
 use Drupal\{{ module }}\Entity\{{ entity_class }}Interface;
 {% endblock %}
 
@@ -46,6 +48,7 @@ class {{ entity_class }}Storage extends SqlContentEntityStorage implements {{ en
       [':uid' => $account->id()]
     )->fetchCol();
   }
+{% if is_translatable %}
 
   /**
    * {@inheritdoc}
@@ -64,4 +67,5 @@ class {{ entity_class }}Storage extends SqlContentEntityStorage implements {{ en
       ->condition('langcode', $language->getId())
       ->execute();
   }
+{% endif %}
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/entity-translation-handler.php.twig b/vendor/drupal/console/templates/module/src/entity-translation-handler.php.twig
index 4ca6378ec2..39e4661b0e 100644
--- a/vendor/drupal/console/templates/module/src/entity-translation-handler.php.twig
+++ b/vendor/drupal/console/templates/module/src/entity-translation-handler.php.twig
@@ -15,4 +15,4 @@ use Drupal\content_translation\ContentTranslationHandler;
 class {{ entity_class }}TranslationHandler extends ContentTranslationHandler {% endblock %}
 {% block class_methods %}
   // Override here the needed methods from ContentTranslationHandler.
-{% endblock %}
+{%- endblock -%}
\ No newline at end of file
diff --git a/vendor/drupal/console/templates/module/src/event-subscriber.php.twig b/vendor/drupal/console/templates/module/src/event-subscriber.php.twig
index e79389234e..b3f54c9e36 100644
--- a/vendor/drupal/console/templates/module/src/event-subscriber.php.twig
+++ b/vendor/drupal/console/templates/module/src/event-subscriber.php.twig
@@ -20,7 +20,6 @@ use Symfony\Component\EventDispatcher\Event;
 class {{ class }} implements EventSubscriberInterface {% endblock %}
 
 {% block class_construct %}
-
   /**
    * Constructs a new {{ class }} object.
    */
@@ -34,23 +33,23 @@ class {{ class }} implements EventSubscriberInterface {% endblock %}
   /**
    * {@inheritdoc}
    */
-  static function getSubscribedEvents() {
+  public static function getSubscribedEvents() {
 {% for event_name, callback in events %}
     $events['{{ event_name }}'] = ['{{ callback }}'];
 {% endfor %}
 
     return $events;
   }
-
 {% for event_name, callback in events %}
+
   /**
-   * This method is called whenever the {{ event_name }} event is
-   * dispatched.
+   * This method is called when the {{ event_name }} is dispatched.
    *
-   * @param GetResponseEvent $event
+   * @param \Symfony\Component\EventDispatcher\Event $event
+   *   The dispatched event.
    */
   public function {{ callback }}(Event $event) {
-    drupal_set_message('Event {{ event_name }} thrown by Subscriber in module {{ module }}.', 'status', TRUE);
+    \Drupal::messenger()->addMessage('Event {{ event_name }} thrown by Subscriber in module {{ module }}.', 'status', TRUE);
   }
 {% endfor %}
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/interface-entity-storage.php.twig b/vendor/drupal/console/templates/module/src/interface-entity-storage.php.twig
index 050b28708b..d3abdd4bcf 100644
--- a/vendor/drupal/console/templates/module/src/interface-entity-storage.php.twig
+++ b/vendor/drupal/console/templates/module/src/interface-entity-storage.php.twig
@@ -11,7 +11,9 @@ namespace Drupal\{{ module }};
 {% block use_class %}
 use Drupal\Core\Entity\ContentEntityStorageInterface;
 use Drupal\Core\Session\AccountInterface;
+{% if is_translatable %}
 use Drupal\Core\Language\LanguageInterface;
+{% endif %}
 use Drupal\{{ module }}\Entity\{{ entity_class }}Interface;
 {% endblock %}
 
@@ -48,6 +50,7 @@ interface {{ entity_class }}StorageInterface extends ContentEntityStorageInterfa
    *   {{ label }} revision IDs (in ascending order).
    */
   public function userRevisionIds(AccountInterface $account);
+{% if is_translatable %}
 
   /**
    * Counts the number of revisions in the default language.
@@ -67,4 +70,5 @@ interface {{ entity_class }}StorageInterface extends ContentEntityStorageInterfa
    *   The language object.
    */
   public function clearRevisionsLanguage(LanguageInterface $language);
+{% endif %}
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/listbuilder-entity-content.php.twig b/vendor/drupal/console/templates/module/src/listbuilder-entity-content.php.twig
index 46af6648cf..f089408166 100644
--- a/vendor/drupal/console/templates/module/src/listbuilder-entity-content.php.twig
+++ b/vendor/drupal/console/templates/module/src/listbuilder-entity-content.php.twig
@@ -21,8 +21,8 @@ use Drupal\Core\Link;
  * @ingroup {{ module }}
  */
 class {{ entity_class }}ListBuilder extends EntityListBuilder {% endblock %}
-{% block class_methods %}
 
+{% block class_methods %}
   /**
    * {@inheritdoc}
    */
@@ -36,7 +36,7 @@ class {{ entity_class }}ListBuilder extends EntityListBuilder {% endblock %}
    * {@inheritdoc}
    */
   public function buildRow(EntityInterface $entity) {
-    /* @var $entity \Drupal\{{module}}\Entity\{{ entity_class }} */
+    /* @var \Drupal\{{module}}\Entity\{{ entity_class }} $entity */
     $row['id'] = $entity->id();
     $row['name'] = Link::createFromRoute(
       $entity->label(),
diff --git a/vendor/drupal/console/templates/module/system.action.action.yml.twig b/vendor/drupal/console/templates/module/system.action.action.yml.twig
deleted file mode 100644
index 28aec15959..0000000000
--- a/vendor/drupal/console/templates/module/system.action.action.yml.twig
+++ /dev/null
@@ -1,11 +0,0 @@
-id: {{ plugin_id }}
-label: '{{ label }}'
-status: true
-langcode: en
-type: {{ type }}
-plugin: {{ plugin_id }}
-dependencies:
-  module:
-    - {{ type }}
-    - {{ module }}
-
diff --git a/vendor/drupal/console/templates/module/templates/plugin-block-html.twig b/vendor/drupal/console/templates/module/templates/plugin-block-html.twig
new file mode 100644
index 0000000000..0b8088ab0a
--- /dev/null
+++ b/vendor/drupal/console/templates/module/templates/plugin-block-html.twig
@@ -0,0 +1,18 @@
+{{ '{#' }}
+/**
+* @file
+* Default theme implementation to display a block.
+*
+* @see template_preprocess_block()
+*
+* @ingroup themeable
+*/
+{{ '#}' }}
+{{ "{% set classes = [
+    'clear-both',
+] %}" }}
+<div{{ '{{' }} attributes.addClass(classes) {{ '}}' }}>
+    {{ '{% for value in content %}' }}
+        {{ '<p>{{value}}</p>' }}
+    {{ '{% endfor %}' }}
+</div>
diff --git a/vendor/drupal/console/templates/module/twig-template-file.twig b/vendor/drupal/console/templates/module/twig-template-file.twig
index 91e43c8f80..95722bd344 100644
--- a/vendor/drupal/console/templates/module/twig-template-file.twig
+++ b/vendor/drupal/console/templates/module/twig-template-file.twig
@@ -1 +1 @@
-<!-- Add you custom twig html here -->
\ No newline at end of file
+<!-- Add you custom twig html here -->
diff --git a/vendor/drupal/console/templates/module/update.php.twig b/vendor/drupal/console/templates/module/update.php.twig
index 2f8d005f1a..e220e12a4d 100644
--- a/vendor/drupal/console/templates/module/update.php.twig
+++ b/vendor/drupal/console/templates/module/update.php.twig
@@ -6,7 +6,7 @@
  * Implements hook_update_N() on Module {{ module }} Update # {{ update_number }}.
  */
 function {{ module }}_update_{{ update_number }}(&$sandbox) {
-    drupal_set_message('Module {{ module }} Update # {{ update_number }} () was executed successfully.');
+    \Drupal::messenger()->addMessage('Module {{ module }} Update # {{ update_number }} () was executed successfully.');
 }
 
 {% endblock %}
diff --git a/vendor/drupal/console/templates/theme/info.yml.twig b/vendor/drupal/console/templates/theme/info.yml.twig
index fca5fb2714..348a4ecf19 100644
--- a/vendor/drupal/console/templates/theme/info.yml.twig
+++ b/vendor/drupal/console/templates/theme/info.yml.twig
@@ -14,10 +14,22 @@ base theme: {{ base_theme }}
 {% if base_theme == 'classy' %}
 #Using Classy as a base theme https://www.drupal.org/theme-guide/8/classy
 {% endif %}
+{% if regions or base_theme_regions is iterable %}
 
-{% if regions %}
 regions:
+{% if base_theme_regions is iterable %}
+{% for key, default_regions in base_theme_regions %}
+  {{ key }}: {{ default_regions }}
+{% endfor %}
+{% endif %}
 {% for region in regions %}
   {{ region.region_machine_name }}: {{ region.region_name }}
 {% endfor %}
 {% endif %}
+{% if base_theme_regions_hidden is defined and base_theme_regions_hidden is not null %}
+
+regions_hidden:
+{% for default_regions_hidden in base_theme_regions_hidden %}
+  - {{ default_regions_hidden }}
+{% endfor %}
+{% endif %}
\ No newline at end of file
diff --git a/vendor/drupal/console/templates/theme/libraries.yml.twig b/vendor/drupal/console/templates/theme/libraries.yml.twig
index 8d2379ea6a..0c399a019f 100644
--- a/vendor/drupal/console/templates/theme/libraries.yml.twig
+++ b/vendor/drupal/console/templates/theme/libraries.yml.twig
@@ -7,10 +7,10 @@
      #js/your_js.js : {}
 {% for library in libraries %}
 {{ library.library_name }}:
-  version: {{ library.library_version }}
+   version: {{ library.library_version }}
    css:
     theme:
       #js/your_js.js : {}
    js:
      #js/your_js.js : {}
-{% endfor %}
\ No newline at end of file
+{% endfor %}
diff --git a/vendor/drupal/console/uninstall.services.yml b/vendor/drupal/console/uninstall.services.yml
index 51c6ea63cd..3f4a5a10e5 100644
--- a/vendor/drupal/console/uninstall.services.yml
+++ b/vendor/drupal/console/uninstall.services.yml
@@ -4,28 +4,40 @@ services:
     arguments: ['@app.root', '@console.configuration_manager']
   console.extension_manager:
     class: Drupal\Console\Extension\Manager
-    arguments: ['@console.site', '@http_client', '@app.root']
+    arguments: ['@console.site', '@http_client', '@app.root', '@extension.list.module']
   # Commands
   console.server:
     class: Drupal\Console\Command\ServerCommand
     arguments: ['@app.root', '@console.configuration_manager']
     tags:
       - { name: drupal.command }
-  console.site_install:
-    class: Drupal\Console\Command\Site\InstallCommand
-    arguments: ['@console.extension_manager', '@console.site', '@console.configuration_manager', '@app.root']
+  console.database_client:
+    class: Drupal\Console\Command\Database\ClientCommand
     tags:
       - { name: drupal.command }
-  console.multisite_new:
-    class: Drupal\Console\Command\Multisite\NewCommand
-    arguments: ['@app.root']
+  console.database_add:
+    class: Drupal\Console\Command\Database\AddCommand
+    arguments: ['@console.database_settings_generator']
     tags:
       - { name: drupal.command }
-  console.multisite_update:
-    class: Drupal\Console\Command\Multisite\UpdateCommand
+  console.database_query:
+    class: Drupal\Console\Command\Database\QueryCommand
+    tags:
+      - { name: drupal.command }
+  console.database_connect:
+    class: Drupal\Console\Command\Database\ConnectCommand
+    tags:
+      - { name: drupal.command }
+  console.database_restore:
+    class: Drupal\Console\Command\Database\RestoreCommand
     arguments: ['@app.root']
     tags:
       - { name: drupal.command }
+  console.site_install:
+    class: Drupal\Console\Command\Site\InstallCommand
+    arguments: ['@console.extension_manager', '@console.site', '@console.configuration_manager', '@app.root']
+    tags:
+      - { name: drupal.command }
   console.dotenv_init:
     class: \Drupal\Console\Command\DotenvInitCommand
     arguments: ['@console.dotenv_init_generator']
@@ -41,6 +53,11 @@ services:
     arguments: ['@console.docker_init_generator']
     tags:
       - { name: drupal.command }
+  console.composer_update_debug:
+    class: Drupal\Console\Command\Debug\UpdateComposerCommand
+    arguments: ['@console.drupal_finder']
+    tags:
+      - { name: drupal.command }
   # Generators
   console.dotenv_init_generator:
     class: Drupal\Console\Generator\DotenvInitGenerator
@@ -50,6 +67,10 @@ services:
     class: Drupal\Console\Generator\DockerInitGenerator
     tags:
       - { name: drupal.generator }
+  console.database_settings_generator:
+    class: Drupal\Console\Generator\DatabaseSettingsGenerator
+    tags:
+      - { name: drupal.generator }
   # Drupal services
   http_client:
     class: GuzzleHttp\Client
diff --git a/vendor/stecman/symfony-console-completion/.travis.yml b/vendor/stecman/symfony-console-completion/.travis.yml
index 9e6e228079..77ad26c2d3 100644
--- a/vendor/stecman/symfony-console-completion/.travis.yml
+++ b/vendor/stecman/symfony-console-completion/.travis.yml
@@ -11,10 +11,12 @@ matrix:
     - php: 7.2
     - php: nightly
     - php: hhvm
+    - php: hhvm-3.3
       env: COMPOSER_OPTS="--prefer-lowest"
 
   allow_failures:
     - php: nightly
+    - php: hhvm
 
 before_install:
   - sudo apt-get update -qq
diff --git a/vendor/stecman/symfony-console-completion/README.md b/vendor/stecman/symfony-console-completion/README.md
index 642af265ab..15ce85b4a3 100644
--- a/vendor/stecman/symfony-console-completion/README.md
+++ b/vendor/stecman/symfony-console-completion/README.md
@@ -59,7 +59,7 @@ If you don't need any custom completion behaviour, you can simply add the comple
    eval $([program] _completion --generate-hook)
    ```
 
-   By default this registers completion for the absolute path to you application, which will work if the program on accessible on your PATH. You can specify a program name to complete for instead using the `--program` option, which is required if you're using an alias to run the program.
+   By default this registers completion for the absolute path to you application, which will work if the program is accessible on your PATH. You can specify a program name to complete for instead using the `--program` option, which is required if you're using an alias to run the program.
 
 4. If you want the completion to apply automatically for all new shell sessions, add the command from step 3 to your shell's profile (eg. `~/.bash_profile` or `~/.zshrc`)
 
@@ -206,7 +206,7 @@ To have a completion run for both options and arguments matching the specified n
 $handler->addHandler(
     new Completion(
         Completion::ALL_COMMANDS,
-        'pacakge',
+        'package',
         Completion::ALL_TYPES,
         function() {
             // ...
diff --git a/vendor/stecman/symfony-console-completion/composer.json b/vendor/stecman/symfony-console-completion/composer.json
index 196fb37e9d..9d0aa2f5fa 100644
--- a/vendor/stecman/symfony-console-completion/composer.json
+++ b/vendor/stecman/symfony-console-completion/composer.json
@@ -10,7 +10,7 @@
     ],
     "require": {
         "php": ">=5.3.2",
-        "symfony/console": "~2.3 || ~3.0 || ~4.0"
+        "symfony/console": "~2.3 || ~3.0 || ~4.0 || ~5.0"
     },
     "require-dev": {
         "phpunit/phpunit": "~4.8.36 || ~5.7 || ~6.4"
@@ -22,7 +22,7 @@
     },
     "extra": {
         "branch-alias": {
-            "dev-master": "0.6.x-dev"
+            "dev-master": "0.10.x-dev"
         }
     }
 }
diff --git a/vendor/stecman/symfony-console-completion/src/CompletionCommand.php b/vendor/stecman/symfony-console-completion/src/CompletionCommand.php
index 0a4a8090e7..f694c41bda 100644
--- a/vendor/stecman/symfony-console-completion/src/CompletionCommand.php
+++ b/vendor/stecman/symfony-console-completion/src/CompletionCommand.php
@@ -10,7 +10,6 @@
 
 class CompletionCommand extends SymfonyCommand
 {
-
     /**
      * @var CompletionHandler
      */
@@ -49,6 +48,52 @@ public function getNativeDefinition()
         return $this->createDefinition();
     }
 
+    /**
+     * Ignore user-defined global options
+     *
+     * Any global options defined by user-code are meaningless to this command.
+     * Options outside of the core defaults are ignored to avoid name and shortcut conflicts.
+     */
+    public function mergeApplicationDefinition($mergeArgs = true)
+    {
+        // Get current application options
+        $appDefinition = $this->getApplication()->getDefinition();
+        $originalOptions = $appDefinition->getOptions();
+
+        // Temporarily replace application options with a filtered list
+        $appDefinition->setOptions(
+            $this->filterApplicationOptions($originalOptions)
+        );
+
+        parent::mergeApplicationDefinition($mergeArgs);
+
+        // Restore original application options
+        $appDefinition->setOptions($originalOptions);
+    }
+
+    /**
+     * Reduce the passed list of options to the core defaults (if they exist)
+     *
+     * @param InputOption[] $appOptions
+     * @return InputOption[]
+     */
+    protected function filterApplicationOptions(array $appOptions)
+    {
+        return array_filter($appOptions, function(InputOption $option) {
+            static $coreOptions = array(
+                'help' => true,
+                'quiet' => true,
+                'verbose' => true,
+                'version' => true,
+                'ansi' => true,
+                'no-ansi' => true,
+                'no-interaction' => true,
+            );
+
+            return isset($coreOptions[$option->getName()]);
+        });
+    }
+
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $this->handler = new CompletionHandler($this->getApplication());
@@ -76,7 +121,56 @@ protected function execute(InputInterface $input, OutputInterface $output)
             $output->write($hook, true);
         } else {
             $handler->setContext(new EnvironmentCompletionContext());
-            $output->write($this->runCompletion(), true);
+
+            // Get completion results
+            $results = $this->runCompletion();
+
+            // Escape results for the current shell
+            $shellType = $input->getOption('shell-type') ?: $this->getShellType();
+
+            foreach ($results as &$result) {
+                $result = $this->escapeForShell($result, $shellType);
+            }
+
+            $output->write($results, true);
+        }
+
+        return 0;
+    }
+
+    /**
+     * Escape each completion result for the specified shell
+     *
+     * @param string $result - Completion results that should appear in the shell
+     * @param string $shellType - Valid shell type from HookFactory
+     * @return string
+     */
+    protected function escapeForShell($result, $shellType)
+    {
+        switch ($shellType) {
+            // BASH requires special escaping for multi-word and special character results
+            // This emulates registering completion with`-o filenames`, without side-effects like dir name slashes
+            case 'bash':
+                $context = $this->handler->getContext();
+                $wordStart = substr($context->getRawCurrentWord(), 0, 1);
+
+                if ($wordStart == "'") {
+                    // If the current word is single-quoted, escape any single quotes in the result
+                    $result = str_replace("'", "\\'", $result);
+                } else if ($wordStart == '"') {
+                    // If the current word is double-quoted, escape any double quotes in the result
+                    $result = str_replace('"', '\\"', $result);
+                } else {
+                    // Otherwise assume the string is unquoted and word breaks should be escaped
+                    $result = preg_replace('/([\s\'"\\\\])/', '\\\\$1', $result);
+                }
+
+                // Escape output to prevent special characters being lost when passing results to compgen
+                return escapeshellarg($result);
+
+            // No transformation by default
+            default:
+                return $result;
         }
     }
 
diff --git a/vendor/stecman/symfony-console-completion/src/CompletionContext.php b/vendor/stecman/symfony-console-completion/src/CompletionContext.php
index 602925343e..f09ab9b42b 100644
--- a/vendor/stecman/symfony-console-completion/src/CompletionContext.php
+++ b/vendor/stecman/symfony-console-completion/src/CompletionContext.php
@@ -32,17 +32,27 @@ class CompletionContext
     protected $charIndex = 0;
 
     /**
-     * An array containing the individual words in the current command line.
+     * An array of the individual words in the current command line.
      *
      * This is not set until $this->splitCommand() is called, when it is populated by
      * $commandLine exploded by $wordBreaks
      *
      * Bash equivalent: COMP_WORDS
      *
-     * @var array|null
+     * @var string[]|null
      */
     protected $words = null;
 
+    /**
+     * Words from the currently command-line before quotes and escaping is processed
+     *
+     * This is indexed the same as $this->words, but in their raw input terms are in their input form, including
+     * quotes and escaping.
+     *
+     * @var string[]|null
+     */
+    protected $rawWords = null;
+
     /**
      * The index in $this->words containing the word at the current cursor position.
      *
@@ -61,7 +71,7 @@ class CompletionContext
      *
      * @var string
      */
-    protected $wordBreaks = "'\"()= \t\n";
+    protected $wordBreaks = "= \t\n";
 
     /**
      * Set the whole contents of the command line as a string
@@ -101,6 +111,22 @@ public function getCurrentWord()
         return '';
     }
 
+    /**
+     * Return the unprocessed string for the word under the cursor
+     *
+     * This preserves any quotes and escaping that are present in the input command line.
+     *
+     * @return string
+     */
+    public function getRawCurrentWord()
+    {
+        if (isset($this->rawWords[$this->wordIndex])) {
+            return $this->rawWords[$this->wordIndex];
+        }
+
+        return '';
+    }
+
     /**
      * Return a word by index from the command line
      *
@@ -132,6 +158,22 @@ public function getWords()
         return $this->words;
     }
 
+    /**
+     * Get the unprocessed/literal words from the command line
+     *
+     * This is indexed the same as getWords(), but preserves any quoting and escaping from the command line
+     *
+     * @return string[]
+     */
+    public function getRawWords()
+    {
+        if ($this->rawWords === null) {
+            $this->splitCommand();
+        }
+
+        return $this->rawWords;
+    }
+
     /**
      * Get the index of the word the cursor is currently in
      *
@@ -178,12 +220,15 @@ public function setCharIndex($index)
      * This defaults to a sane value based on BASH's word break characters and shouldn't
      * need to be changed unless your completions contain the default word break characters.
      *
+     * @deprecated This is becoming an internal setting that doesn't make sense to expose publicly.
+     *
      * @see wordBreaks
      * @param string $charList - a single string containing all of the characters to break words on
      */
     public function setWordBreaks($charList)
     {
-        $this->wordBreaks = $charList;
+        // Drop quotes from break characters - strings are handled separately to word breaks now
+        $this->wordBreaks = str_replace(array('"', '\''), '', $charList);;
         $this->reset();
     }
 
@@ -194,57 +239,146 @@ public function setWordBreaks($charList)
      */
     protected function splitCommand()
     {
-        $this->words = array();
-        $this->wordIndex = null;
-        $cursor = 0;
+        $tokens = $this->tokenizeString($this->commandLine);
 
-        $breaks = preg_quote($this->wordBreaks);
-
-        if (!preg_match_all("/([^$breaks]*)([$breaks]*)/", $this->commandLine, $matches)) {
-            return;
-        }
-
-        // Groups:
-        // 1: Word
-        // 2: Break characters
-        foreach ($matches[0] as $index => $wholeMatch) {
-            // Determine which word the cursor is in
-            $cursor += strlen($wholeMatch);
-            $word = $matches[1][$index];
-            $breaks = $matches[2][$index];
-
-            if ($this->wordIndex === null && $cursor >= $this->charIndex) {
-                $this->wordIndex = $index;
-
-                // Find the user's cursor position relative to the end of this word
-                // The end of the word is the internal cursor minus any break characters that were captured
-                $cursorWordOffset = $this->charIndex - ($cursor - strlen($breaks));
+        foreach ($tokens as $token) {
+            if ($token['type'] != 'break') {
+                $this->words[] = $this->getTokenValue($token);
+                $this->rawWords[] = $token['value'];
+            }
 
-                if ($cursorWordOffset < 0) {
-                    // Cursor is inside the word - truncate the word at the cursor
-                    // (This emulates normal BASH completion behaviour I've observed, though I'm not entirely sure if it's useful)
-                    $word = substr($word, 0, strlen($word) + $cursorWordOffset);
+            // Determine which word index the cursor is inside once we reach it's offset
+            if ($this->wordIndex === null && $this->charIndex <= $token['offsetEnd']) {
+                $this->wordIndex = count($this->words) - 1;
 
-                } elseif ($cursorWordOffset > 0) {
+                if ($token['type'] == 'break') {
                     // Cursor is in the break-space after a word
                     // Push an empty word at the cursor to allow completion of new terms at the cursor, ignoring words ahead
                     $this->wordIndex++;
-                    $this->words[] = $word;
                     $this->words[] = '';
+                    $this->rawWords[] = '';
                     continue;
                 }
-            }
 
-            if ($word !== '') {
-                $this->words[] = $word;
+                if ($this->charIndex < $token['offsetEnd']) {
+                    // Cursor is inside the current word - truncate the word at the cursor to complete on
+                    // This emulates BASH completion's behaviour with COMP_CWORD
+
+                    // Create a copy of the token with its value truncated
+                    $truncatedToken = $token;
+                    $relativeOffset = $this->charIndex - $token['offset'];
+                    $truncatedToken['value'] = substr($token['value'], 0, $relativeOffset);
+
+                    // Replace the current word with the truncated value
+                    $this->words[$this->wordIndex] = $this->getTokenValue($truncatedToken);
+                    $this->rawWords[$this->wordIndex] = $truncatedToken['value'];
+                }
             }
         }
 
-        if ($this->wordIndex > count($this->words) - 1) {
-            $this->wordIndex = count($this->words) - 1;
+        // Cursor position is past the end of the command line string - consider it a new word
+        if ($this->wordIndex === null) {
+            $this->wordIndex = count($this->words);
+            $this->words[] = '';
+            $this->rawWords[] = '';
         }
     }
 
+    /**
+     * Return a token's value with escaping and quotes removed
+     *
+     * @see self::tokenizeString()
+     * @param array $token
+     * @return string
+     */
+    protected function getTokenValue($token)
+    {
+        $value = $token['value'];
+
+        // Remove outer quote characters (or first quote if unclosed)
+        if ($token['type'] == 'quoted') {
+            $value = preg_replace('/^(?:[\'"])(.*?)(?:[\'"])?$/', '$1', $value);
+        }
+
+        // Remove escape characters
+        $value = preg_replace('/\\\\(.)/', '$1', $value);
+
+        return $value;
+    }
+
+    /**
+     * Break a string into words, quoted strings and non-words (breaks)
+     *
+     * Returns an array of unmodified segments of $string with offset and type information.
+     *
+     * @param string $string
+     * @return array as [ [type => string, value => string, offset => int], ... ]
+     */
+    protected function tokenizeString($string)
+    {
+        // Map capture groups to returned token type
+        $typeMap = array(
+            'double_quote_string' => 'quoted',
+            'single_quote_string' => 'quoted',
+            'word' => 'word',
+            'break' => 'break',
+        );
+
+        // Escape every word break character including whitespace
+        // preg_quote won't work here as it doesn't understand the ignore whitespace flag ("x")
+        $breaks = preg_replace('/(.)/', '\\\$1', $this->wordBreaks);
+
+        $pattern = <<<"REGEX"
+            /(?:
+                (?P<double_quote_string>
+                    "(\\\\.|[^\"\\\\])*(?:"|$)
+                ) |
+                (?P<single_quote_string>
+                    '(\\\\.|[^'\\\\])*(?:'|$)
+                ) |
+                (?P<word>
+                    (?:\\\\.|[^$breaks])+
+                ) |
+                (?P<break>
+                     [$breaks]+
+                )
+            )/x
+REGEX;
+
+        $tokens = array();
+
+        if (!preg_match_all($pattern, $string, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {
+            return $tokens;
+        }
+
+        foreach ($matches as $set) {
+            foreach ($set as $groupName => $match) {
+
+                // Ignore integer indices preg_match outputs (duplicates of named groups)
+                if (is_integer($groupName)) {
+                    continue;
+                }
+
+                // Skip if the offset indicates this group didn't match
+                if ($match[1] === -1) {
+                    continue;
+                }
+
+                $tokens[] = array(
+                    'type' => $typeMap[$groupName],
+                    'value' => $match[0],
+                    'offset' => $match[1],
+                    'offsetEnd' => $match[1] + strlen($match[0])
+                );
+
+                // Move to the next set (only one group should match per set)
+                continue;
+            }
+        }
+
+        return $tokens;
+    }
+
     /**
      * Reset the computed words so that $this->splitWords is forced to run again
      */
diff --git a/vendor/stecman/symfony-console-completion/src/CompletionHandler.php b/vendor/stecman/symfony-console-completion/src/CompletionHandler.php
index 905ea5a081..abd0b0bf5e 100644
--- a/vendor/stecman/symfony-console-completion/src/CompletionHandler.php
+++ b/vendor/stecman/symfony-console-completion/src/CompletionHandler.php
@@ -34,6 +34,12 @@ class CompletionHandler
      */
     protected $helpers = array();
 
+    /**
+     * Index the command name was detected at
+     * @var int
+     */
+    private $commandWordIndex;
+
     public function __construct(Application $application, CompletionContext $context = null)
     {
         $this->application = $application;
@@ -100,13 +106,8 @@ public function runCompletion()
             throw new \RuntimeException('A CompletionContext must be set before requesting completion.');
         }
 
-        $cmdName = $this->getInput()->getFirstArgument();
-
-        try {
-            $this->command = $this->application->find($cmdName);
-        } catch (\InvalidArgumentException $e) {
-            // Exception thrown, when multiple or none commands are found.
-        }
+        // Set the command to query options and arugments from
+        $this->command = $this->detectCommand();
 
         $process = array(
             'completeForOptionValues',
@@ -132,6 +133,9 @@ public function runCompletion()
     /**
      * Get an InputInterface representation of the completion context
      *
+     * @deprecated Incorrectly uses the ArrayInput API and is no longer needed.
+     *             This will be removed in the next major version.
+     *
      * @return ArrayInput
      */
     public function getInput()
@@ -256,7 +260,7 @@ protected function completeForOptionValues()
      */
     protected function completeForCommandName()
     {
-        if (!$this->command || (count($this->context->getWords()) == 2 && $this->context->getWordIndex() == 1)) {
+        if (!$this->command || $this->context->getWordIndex() == $this->commandWordIndex) {
             return $this->getCommandNames();
         }
 
@@ -362,7 +366,8 @@ protected function mapArgumentsToWords($argumentDefinitions)
 
         foreach ($this->context->getWords() as $wordIndex => $word) {
             // Skip program name, command name, options, and option values
-            if ($wordIndex < 2
+            if ($wordIndex == 0
+                || $wordIndex === $this->commandWordIndex
                 || ($word && '-' === $word[0])
                 || in_array($previousWord, $optionsWithArgs)) {
                 $previousWord = $word;
@@ -469,4 +474,44 @@ protected function getCommandNames()
             return array_keys($commands);
         }
     }
+
+    /**
+     * Find the current command name in the command-line
+     *
+     * Note this only cares about flag-type options. Options with values cannot
+     * appear before a command name in Symfony Console application.
+     *
+     * @return Command|null
+     */
+    private function detectCommand()
+    {
+        // Always skip the first word (program name)
+        $skipNext = true;
+
+        foreach ($this->context->getWords() as $index => $word) {
+
+            // Skip word if flagged
+            if ($skipNext) {
+                $skipNext = false;
+                continue;
+            }
+
+            // Skip empty words and words that look like options
+            if (strlen($word) == 0 || $word[0] === '-') {
+                continue;
+            }
+
+            // Return the first unambiguous match to argument-like words
+            try {
+                $cmd = $this->application->find($word);
+                $this->commandWordIndex = $index;
+                return $cmd;
+            } catch (\InvalidArgumentException $e) {
+                // Exception thrown, when multiple or no commands are found.
+            }
+        }
+
+        // No command found
+        return null;
+    }
 }
diff --git a/vendor/stecman/symfony-console-completion/src/HookFactory.php b/vendor/stecman/symfony-console-completion/src/HookFactory.php
index 19601e8b38..d86f9b2ad6 100644
--- a/vendor/stecman/symfony-console-completion/src/HookFactory.php
+++ b/vendor/stecman/symfony-console-completion/src/HookFactory.php
@@ -33,14 +33,17 @@ function %%function_name%% {
 
     # Copy BASH's completion variables to the ones the completion command expects
     # These line up exactly as the library was originally designed for BASH
-    local CMDLINE_CONTENTS="$COMP_LINE"
-    local CMDLINE_CURSOR_INDEX="$COMP_POINT"
+    local CMDLINE_CONTENTS="$COMP_LINE";
+    local CMDLINE_CURSOR_INDEX="$COMP_POINT";
     local CMDLINE_WORDBREAKS="$COMP_WORDBREAKS";
 
-    export CMDLINE_CONTENTS CMDLINE_CURSOR_INDEX CMDLINE_WORDBREAKS
+    export CMDLINE_CONTENTS CMDLINE_CURSOR_INDEX CMDLINE_WORDBREAKS;
 
     local RESULT STATUS;
 
+    # Force splitting by newline instead of default delimiters
+    local IFS=$'\n';
+
     RESULT="$(%%completion_command%% </dev/null)";
     STATUS=$?;
 
@@ -54,7 +57,8 @@ function %%function_name%% {
     # Check if shell provided path completion is requested
     # @see Completion\ShellPathCompletion
     if [ $STATUS -eq 200 ]; then
-        _filedir;
+        # Turn file/dir completion on temporarily and give control back to BASH
+        compopt -o default;
         return 0;
 
     # Bail out if PHP didn't exit cleanly
@@ -75,19 +79,19 @@ function %%function_name%% {
 else
     >&2 echo "Completion was not registered for %%program_name%%:";
     >&2 echo "The 'bash-completion' package is required but doesn't appear to be installed.";
-fi
+fi;
 END
 
         // ZSH Hook
         , 'zsh' => <<<'END'
 # ZSH completion for %%program_path%%
 function %%function_name%% {
-    local -x CMDLINE_CONTENTS="$words"
-    local -x CMDLINE_CURSOR_INDEX
-    (( CMDLINE_CURSOR_INDEX = ${#${(j. .)words[1,CURRENT]}} ))
+    local -x CMDLINE_CONTENTS="$words";
+    local -x CMDLINE_CURSOR_INDEX;
+    (( CMDLINE_CURSOR_INDEX = ${#${(j. .)words[1,CURRENT]}} ));
 
-    local RESULT STATUS
-    RESULT=("${(@f)$( %%completion_command%% )}")
+    local RESULT STATUS;
+    RESULT=("${(@f)$( %%completion_command%% )}");
     STATUS=$?;
 
     # Check if shell provided path completion is requested
@@ -102,7 +106,7 @@ function %%function_name%% {
         return $?;
     fi;
 
-    compadd -- $RESULT
+    compadd -- $RESULT;
 };
 
 compdef %%function_name%% "%%program_name%%";
@@ -148,6 +152,9 @@ public function generateHook($type, $programPath, $programName = null, $multiple
             $completionCommand = $programPath . ' _completion';
         }
 
+        // Pass shell type during completion so output can be encoded if the shell requires it
+        $completionCommand .= " --shell-type $type";
+
         return str_replace(
             array(
                 '%%function_name%%',
diff --git a/vendor/stecman/symfony-console-completion/tests/Stecman/Component/Symfony/Console/BashCompletion/CompletionCommandTest.php b/vendor/stecman/symfony-console-completion/tests/Stecman/Component/Symfony/Console/BashCompletion/CompletionCommandTest.php
new file mode 100644
index 0000000000..78b634d8fd
--- /dev/null
+++ b/vendor/stecman/symfony-console-completion/tests/Stecman/Component/Symfony/Console/BashCompletion/CompletionCommandTest.php
@@ -0,0 +1,41 @@
+<?php
+
+namespace Stecman\Component\Symfony\Console\BashCompletion\Tests;
+
+use PHPUnit\Framework\TestCase;
+use Stecman\Component\Symfony\Console\BashCompletion\CompletionCommand;
+use Symfony\Component\Console\Application;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Input\StringInput;
+use Symfony\Component\Console\Output\NullOutput;
+
+class CompletionCommandTest extends TestCase
+{
+    /**
+     * Ensure conflicting options names and shortcuts from the application do not break the completion command
+     */
+    public function testConflictingGlobalOptions()
+    {
+        $app = new Application('Base application');
+
+        // Conflicting option shortcut
+        $app->getDefinition()->addOption(
+            new InputOption('conflicting-shortcut', 'g', InputOption::VALUE_NONE)
+        );
+
+        // Conflicting option name
+        $app->getDefinition()->addOption(
+            new InputOption('program', null, InputOption::VALUE_REQUIRED)
+        );
+
+        $app->add(new CompletionCommand());
+
+        // Check completion command doesn't throw
+        $app->doRun(new StringInput('_completion -g --program foo'), new NullOutput());
+        $app->doRun(new StringInput('_completion --help'), new NullOutput());
+        $app->doRun(new StringInput('help _completion'), new NullOutput());
+
+        // Check default options are available
+        $app->doRun(new StringInput('_completion -V -vv --no-ansi --quiet'), new NullOutput());
+    }
+}
diff --git a/vendor/stecman/symfony-console-completion/tests/Stecman/Component/Symfony/Console/BashCompletion/CompletionContextTest.php b/vendor/stecman/symfony-console-completion/tests/Stecman/Component/Symfony/Console/BashCompletion/CompletionContextTest.php
index 9374d133a4..30c0667e5f 100644
--- a/vendor/stecman/symfony-console-completion/tests/Stecman/Component/Symfony/Console/BashCompletion/CompletionContextTest.php
+++ b/vendor/stecman/symfony-console-completion/tests/Stecman/Component/Symfony/Console/BashCompletion/CompletionContextTest.php
@@ -92,6 +92,73 @@ public function testWordBreakingWithSmallInputs()
         $this->assertEquals('', $context->getCurrentWord());
     }
 
+    public function testQuotedStringWordBreaking()
+    {
+        $context = new CompletionContext();
+        $context->setCharIndex(1000);
+        $context->setCommandLine('make horse --legs=3 --name="Jeff the horse" --colour Extreme\\ Blanc \'foo " bar\'');
+
+        // Ensure spaces and quotes are processed correctly
+        $this->assertEquals(
+            array(
+                'make',
+                'horse',
+                '--legs',
+                '3',
+                '--name',
+                'Jeff the horse',
+                '--colour',
+                'Extreme Blanc',
+                'foo " bar',
+                '',
+            ),
+            $context->getWords()
+        );
+
+        // Confirm the raw versions of the words are indexed correctly
+        $this->assertEquals(
+            array(
+                'make',
+                'horse',
+                '--legs',
+                '3',
+                '--name',
+                '"Jeff the horse"',
+                '--colour',
+                'Extreme\\ Blanc',
+                "'foo \" bar'",
+                '',
+            ),
+            $context->getRawWords()
+        );
+
+        $context = new CompletionContext();
+        $context->setCommandLine('console --tag=');
+
+        // Cursor after equals symbol on option argument
+        $context->setCharIndex(14);
+        $this->assertEquals(
+            array(
+                'console',
+                '--tag',
+                ''
+            ),
+            $context->getWords()
+        );
+    }
+
+    public function testGetRawCurrentWord()
+    {
+        $context = new CompletionContext();
+
+        $context->setCommandLine('cmd "double quoted" --option \'value\'');
+        $context->setCharIndex(13);
+        $this->assertEquals(1, $context->getWordIndex());
+
+        $this->assertEquals(array('cmd', '"double q', '--option', "'value'"), $context->getRawWords());
+        $this->assertEquals('"double q', $context->getRawCurrentWord());
+    }
+
     public function testConfigureFromEnvironment()
     {
         putenv("CMDLINE_CONTENTS=beam up li");
diff --git a/vendor/stecman/symfony-console-completion/tests/Stecman/Component/Symfony/Console/BashCompletion/CompletionHandlerTest.php b/vendor/stecman/symfony-console-completion/tests/Stecman/Component/Symfony/Console/BashCompletion/CompletionHandlerTest.php
index f93c1aaa30..f5b5935ecc 100644
--- a/vendor/stecman/symfony-console-completion/tests/Stecman/Component/Symfony/Console/BashCompletion/CompletionHandlerTest.php
+++ b/vendor/stecman/symfony-console-completion/tests/Stecman/Component/Symfony/Console/BashCompletion/CompletionHandlerTest.php
@@ -68,6 +68,17 @@ public function testCompleteOptionShortcut()
         $this->assertEquals(array('-j'), $this->getTerms($handler->runCompletion()));
     }
 
+    public function testCompleteOptionShortcutFirst()
+    {
+        // Check command options complete
+        $handler = $this->createHandler('app -v wave --');
+        $this->assertArraySubset(array('--vigorous', '--jazz-hands'), $this->getTerms($handler->runCompletion()));
+
+        // Check unambiguous command name still completes
+        $handler = $this->createHandler('app --quiet wav');
+        $this->assertEquals(array('wave'), $this->getTerms($handler->runCompletion()));
+    }
+
     public function testCompleteDoubleDash()
     {
         $handler = $this->createHandler('app wave --');
@@ -80,6 +91,21 @@ public function testCompleteOptionFull()
         $this->assertArraySubset(array('--jazz-hands'), $this->getTerms($handler->runCompletion()));
     }
 
+    public function testCompleteOptionEqualsValue()
+    {
+        // Cursor at the "=" sign
+        $handler = $this->createHandler('app completion-aware --option-with-suggestions=');
+        $this->assertEquals(array('one-opt', 'two-opt'), $this->getTerms($handler->runCompletion()));
+
+        // Cursor at an opening quote
+        $handler = $this->createHandler('app completion-aware --option-with-suggestions="');
+        $this->assertEquals(array('one-opt', 'two-opt'), $this->getTerms($handler->runCompletion()));
+
+        // Cursor inside a quote with value
+        $handler = $this->createHandler('app completion-aware --option-with-suggestions="two');
+        $this->assertEquals(array('two-opt'), $this->getTerms($handler->runCompletion()));
+    }
+
     public function testCompleteOptionOrder()
     {
         // Completion of options should be able to happen anywhere after the command name
diff --git a/vendor/stecman/symfony-console-completion/tests/Stecman/Component/Symfony/Console/BashCompletion/HookFactoryTest.php b/vendor/stecman/symfony-console-completion/tests/Stecman/Component/Symfony/Console/BashCompletion/HookFactoryTest.php
index c253a62ee4..13559ecebd 100644
--- a/vendor/stecman/symfony-console-completion/tests/Stecman/Component/Symfony/Console/BashCompletion/HookFactoryTest.php
+++ b/vendor/stecman/symfony-console-completion/tests/Stecman/Component/Symfony/Console/BashCompletion/HookFactoryTest.php
@@ -54,6 +54,59 @@ public function generateHookDataProvider()
         );
     }
 
+    public function testForMissingSemiColons()
+    {
+        $class = new \ReflectionClass('Stecman\Component\Symfony\Console\BashCompletion\HookFactory');
+        $properties = $class->getStaticProperties();
+        $hooks = $properties['hooks'];
+
+        // Check each line is commented or closed correctly to be collapsed for eval
+        foreach ($hooks as $shellType => $hook) {
+            $line = strtok($hook, "\n");
+            $lineNumber = 0;
+
+            while ($line !== false) {
+                $lineNumber++;
+
+                if (!$this->isScriptLineValid($line)) {
+                    $this->fail("$shellType hook appears to be missing a semicolon on line $lineNumber:\n> $line");
+                }
+
+                $line = strtok("\n");
+            }
+        }
+    }
+
+    /**
+     * Check if a line of shell script is safe to be collapsed to one line for eval
+     */
+    protected function isScriptLineValid($line)
+    {
+        if (preg_match('/^\s*#/', $line)) {
+            // Line is commented out
+            return true;
+        }
+
+        if (preg_match('/[;\{\}]\s*$/', $line)) {
+            // Line correctly ends with a semicolon or syntax
+            return true;
+        }
+
+        if (preg_match('
+                    /(
+                        ;\s*then |
+                        \s*else
+                    )
+                    \s*$
+                    /x', $line)
+        ) {
+            // Line ends with another permitted sequence
+            return true;
+        }
+
+        return false;
+    }
+
     protected function hasProgram($programName)
     {
         exec(sprintf(
diff --git a/vendor/symfony/config/.gitignore b/vendor/symfony/config/.gitignore
deleted file mode 100644
index c49a5d8df5..0000000000
--- a/vendor/symfony/config/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-vendor/
-composer.lock
-phpunit.xml
diff --git a/vendor/symfony/config/CHANGELOG.md b/vendor/symfony/config/CHANGELOG.md
index 6cb610c478..a650e10ab8 100644
--- a/vendor/symfony/config/CHANGELOG.md
+++ b/vendor/symfony/config/CHANGELOG.md
@@ -1,6 +1,36 @@
 CHANGELOG
 =========
 
+4.4.0
+-----
+
+ * added a way to exclude patterns of resources from being imported by the `import()` method
+
+4.3.0
+-----
+
+ * deprecated using environment variables with `cannotBeEmpty()` if the value is validated with `validate()`
+ * made `Resource\*` classes final and not implement `Serializable` anymore
+ * deprecated the `root()` method in `TreeBuilder`, pass the root node information to the constructor instead
+
+4.2.0
+-----
+
+ * deprecated constructing a `TreeBuilder` without passing root node information
+ * renamed `FileLoaderLoadException` to `LoaderLoadException`
+
+4.1.0
+-----
+
+ * added `setPathSeparator` method to `NodeBuilder` class
+ * added third `$pathSeparator` constructor argument to `BaseNode`
+ * the `Processor` class has been made final
+
+4.0.0
+-----
+
+ * removed `ConfigCachePass`
+
 3.4.0
 -----
 
diff --git a/vendor/symfony/config/ConfigCache.php b/vendor/symfony/config/ConfigCache.php
index b2a39076f9..053059b8ab 100644
--- a/vendor/symfony/config/ConfigCache.php
+++ b/vendor/symfony/config/ConfigCache.php
@@ -31,9 +31,9 @@ class ConfigCache extends ResourceCheckerConfigCache
      * @param string $file  The absolute cache path
      * @param bool   $debug Whether debugging is enabled or not
      */
-    public function __construct($file, $debug)
+    public function __construct(string $file, bool $debug)
     {
-        $this->debug = (bool) $debug;
+        $this->debug = $debug;
 
         $checkers = [];
         if (true === $this->debug) {
diff --git a/vendor/symfony/config/ConfigCacheFactory.php b/vendor/symfony/config/ConfigCacheFactory.php
index 7903cca932..bfb70cb2ce 100644
--- a/vendor/symfony/config/ConfigCacheFactory.php
+++ b/vendor/symfony/config/ConfigCacheFactory.php
@@ -27,7 +27,7 @@ class ConfigCacheFactory implements ConfigCacheFactoryInterface
     /**
      * @param bool $debug The debug flag to pass to ConfigCache
      */
-    public function __construct($debug)
+    public function __construct(bool $debug)
     {
         $this->debug = $debug;
     }
@@ -43,7 +43,7 @@ public function cache($file, $callback)
 
         $cache = new ConfigCache($file, $this->debug);
         if (!$cache->isFresh()) {
-            \call_user_func($callback, $cache);
+            $callback($cache);
         }
 
         return $cache;
diff --git a/vendor/symfony/config/Definition/ArrayNode.php b/vendor/symfony/config/Definition/ArrayNode.php
index 83bab205ec..4a3461119b 100644
--- a/vendor/symfony/config/Definition/ArrayNode.php
+++ b/vendor/symfony/config/Definition/ArrayNode.php
@@ -235,7 +235,7 @@ protected function finalizeValue($value)
             }
 
             if ($child->isDeprecated()) {
-                @trigger_error($child->getDeprecationMessage($name, $this->getPath()), E_USER_DEPRECATED);
+                @trigger_error($child->getDeprecationMessage($name, $this->getPath()), \E_USER_DEPRECATED);
             }
 
             try {
@@ -300,7 +300,31 @@ protected function normalizeValue($value)
 
         // if extra fields are present, throw exception
         if (\count($value) && !$this->ignoreExtraKeys) {
-            $ex = new InvalidConfigurationException(sprintf('Unrecognized option%s "%s" under "%s"', 1 === \count($value) ? '' : 's', implode(', ', array_keys($value)), $this->getPath()));
+            $proposals = array_keys($this->children);
+            sort($proposals);
+            $guesses = [];
+
+            foreach (array_keys($value) as $subject) {
+                $minScore = \INF;
+                foreach ($proposals as $proposal) {
+                    $distance = levenshtein($subject, $proposal);
+                    if ($distance <= $minScore && $distance < 3) {
+                        $guesses[$proposal] = $distance;
+                        $minScore = $distance;
+                    }
+                }
+            }
+
+            $msg = sprintf('Unrecognized option%s "%s" under "%s"', 1 === \count($value) ? '' : 's', implode(', ', array_keys($value)), $this->getPath());
+
+            if (\count($guesses)) {
+                asort($guesses);
+                $msg .= sprintf('. Did you mean "%s"?', implode('", "', array_keys($guesses)));
+            } else {
+                $msg .= sprintf('. Available option%s %s "%s".', 1 === \count($proposals) ? '' : 's', 1 === \count($proposals) ? 'is' : 'are', implode('", "', $proposals));
+            }
+
+            $ex = new InvalidConfigurationException($msg);
             $ex->setPath($this->getPath());
 
             throw $ex;
@@ -318,7 +342,7 @@ protected function normalizeValue($value)
      */
     protected function remapXml($value)
     {
-        foreach ($this->xmlRemappings as list($singular, $plural)) {
+        foreach ($this->xmlRemappings as [$singular, $plural]) {
             if (!isset($value[$singular])) {
                 continue;
             }
@@ -368,7 +392,12 @@ protected function mergeValues($leftSide, $rightSide)
             }
 
             if (!isset($this->children[$k])) {
-                throw new \RuntimeException('merge() expects a normalized config array.');
+                if (!$this->ignoreExtraKeys || $this->removeExtraKeys) {
+                    throw new \RuntimeException('merge() expects a normalized config array.');
+                }
+
+                $leftSide[$k] = $v;
+                continue;
             }
 
             $leftSide[$k] = $this->children[$k]->merge($leftSide[$k], $v);
@@ -376,4 +405,12 @@ protected function mergeValues($leftSide, $rightSide)
 
         return $leftSide;
     }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function allowPlaceholders(): bool
+    {
+        return false;
+    }
 }
diff --git a/vendor/symfony/config/Definition/BaseNode.php b/vendor/symfony/config/Definition/BaseNode.php
index 10bcb49c8b..3d7fd85603 100644
--- a/vendor/symfony/config/Definition/BaseNode.php
+++ b/vendor/symfony/config/Definition/BaseNode.php
@@ -15,6 +15,7 @@
 use Symfony\Component\Config\Definition\Exception\ForbiddenOverwriteException;
 use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException;
 use Symfony\Component\Config\Definition\Exception\InvalidTypeException;
+use Symfony\Component\Config\Definition\Exception\UnsetKeyException;
 
 /**
  * The base node class.
@@ -23,6 +24,11 @@
  */
 abstract class BaseNode implements NodeInterface
 {
+    const DEFAULT_PATH_SEPARATOR = '.';
+
+    private static $placeholderUniquePrefixes = [];
+    private static $placeholders = [];
+
     protected $name;
     protected $parent;
     protected $normalizationClosures = [];
@@ -32,21 +38,63 @@ abstract class BaseNode implements NodeInterface
     protected $deprecationMessage = null;
     protected $equivalentValues = [];
     protected $attributes = [];
+    protected $pathSeparator;
+
+    private $handlingPlaceholder;
 
     /**
-     * @param string|null        $name   The name of the node
-     * @param NodeInterface|null $parent The parent of this node
-     *
      * @throws \InvalidArgumentException if the name contains a period
      */
-    public function __construct($name, NodeInterface $parent = null)
+    public function __construct(?string $name, NodeInterface $parent = null, string $pathSeparator = self::DEFAULT_PATH_SEPARATOR)
     {
-        if (false !== strpos($name = (string) $name, '.')) {
-            throw new \InvalidArgumentException('The name must not contain ".".');
+        if (false !== strpos($name = (string) $name, $pathSeparator)) {
+            throw new \InvalidArgumentException('The name must not contain ".'.$pathSeparator.'".');
         }
 
         $this->name = $name;
         $this->parent = $parent;
+        $this->pathSeparator = $pathSeparator;
+    }
+
+    /**
+     * Register possible (dummy) values for a dynamic placeholder value.
+     *
+     * Matching configuration values will be processed with a provided value, one by one. After a provided value is
+     * successfully processed the configuration value is returned as is, thus preserving the placeholder.
+     *
+     * @internal
+     */
+    public static function setPlaceholder(string $placeholder, array $values): void
+    {
+        if (!$values) {
+            throw new \InvalidArgumentException('At least one value must be provided.');
+        }
+
+        self::$placeholders[$placeholder] = $values;
+    }
+
+    /**
+     * Adds a common prefix for dynamic placeholder values.
+     *
+     * Matching configuration values will be skipped from being processed and are returned as is, thus preserving the
+     * placeholder. An exact match provided by {@see setPlaceholder()} might take precedence.
+     *
+     * @internal
+     */
+    public static function setPlaceholderUniquePrefix(string $prefix): void
+    {
+        self::$placeholderUniquePrefixes[] = $prefix;
+    }
+
+    /**
+     * Resets all current placeholders available.
+     *
+     * @internal
+     */
+    public static function resetPlaceholders(): void
+    {
+        self::$placeholderUniquePrefixes = [];
+        self::$placeholders = [];
     }
 
     /**
@@ -246,13 +294,11 @@ public function getName()
      */
     public function getPath()
     {
-        $path = $this->name;
-
         if (null !== $this->parent) {
-            $path = $this->parent->getPath().'.'.$path;
+            return $this->parent->getPath().$this->pathSeparator.$this->name;
         }
 
-        return $path;
+        return $this->name;
     }
 
     /**
@@ -264,8 +310,34 @@ final public function merge($leftSide, $rightSide)
             throw new ForbiddenOverwriteException(sprintf('Configuration path "%s" cannot be overwritten. You have to define all options for this path, and any of its sub-paths in one configuration section.', $this->getPath()));
         }
 
-        $this->validateType($leftSide);
-        $this->validateType($rightSide);
+        if ($leftSide !== $leftPlaceholders = self::resolvePlaceholderValue($leftSide)) {
+            foreach ($leftPlaceholders as $leftPlaceholder) {
+                $this->handlingPlaceholder = $leftSide;
+                try {
+                    $this->merge($leftPlaceholder, $rightSide);
+                } finally {
+                    $this->handlingPlaceholder = null;
+                }
+            }
+
+            return $rightSide;
+        }
+
+        if ($rightSide !== $rightPlaceholders = self::resolvePlaceholderValue($rightSide)) {
+            foreach ($rightPlaceholders as $rightPlaceholder) {
+                $this->handlingPlaceholder = $rightSide;
+                try {
+                    $this->merge($leftSide, $rightPlaceholder);
+                } finally {
+                    $this->handlingPlaceholder = null;
+                }
+            }
+
+            return $rightSide;
+        }
+
+        $this->doValidateType($leftSide);
+        $this->doValidateType($rightSide);
 
         return $this->mergeValues($leftSide, $rightSide);
     }
@@ -282,6 +354,20 @@ final public function normalize($value)
             $value = $closure($value);
         }
 
+        // resolve placeholder value
+        if ($value !== $placeholders = self::resolvePlaceholderValue($value)) {
+            foreach ($placeholders as $placeholder) {
+                $this->handlingPlaceholder = $value;
+                try {
+                    $this->normalize($placeholder);
+                } finally {
+                    $this->handlingPlaceholder = null;
+                }
+            }
+
+            return $value;
+        }
+
         // replace value with their equivalent
         foreach ($this->equivalentValues as $data) {
             if ($data[0] === $value) {
@@ -290,7 +376,7 @@ final public function normalize($value)
         }
 
         // validate type
-        $this->validateType($value);
+        $this->doValidateType($value);
 
         // normalize value
         return $this->normalizeValue($value);
@@ -323,7 +409,20 @@ public function getParent()
      */
     final public function finalize($value)
     {
-        $this->validateType($value);
+        if ($value !== $placeholders = self::resolvePlaceholderValue($value)) {
+            foreach ($placeholders as $placeholder) {
+                $this->handlingPlaceholder = $value;
+                try {
+                    $this->finalize($placeholder);
+                } finally {
+                    $this->handlingPlaceholder = null;
+                }
+            }
+
+            return $value;
+        }
+
+        $this->doValidateType($value);
 
         $value = $this->finalizeValue($value);
 
@@ -333,6 +432,10 @@ final public function finalize($value)
             try {
                 $value = $closure($value);
             } catch (Exception $e) {
+                if ($e instanceof UnsetKeyException && null !== $this->handlingPlaceholder) {
+                    continue;
+                }
+
                 throw $e;
             } catch (\Exception $e) {
                 throw new InvalidConfigurationException(sprintf('Invalid configuration for path "%s": ', $this->getPath()).$e->getMessage(), $e->getCode(), $e);
@@ -378,4 +481,81 @@ abstract protected function mergeValues($leftSide, $rightSide);
      * @return mixed The finalized value
      */
     abstract protected function finalizeValue($value);
+
+    /**
+     * Tests if placeholder values are allowed for this node.
+     */
+    protected function allowPlaceholders(): bool
+    {
+        return true;
+    }
+
+    /**
+     * Tests if a placeholder is being handled currently.
+     */
+    protected function isHandlingPlaceholder(): bool
+    {
+        return null !== $this->handlingPlaceholder;
+    }
+
+    /**
+     * Gets allowed dynamic types for this node.
+     */
+    protected function getValidPlaceholderTypes(): array
+    {
+        return [];
+    }
+
+    private static function resolvePlaceholderValue($value)
+    {
+        if (\is_string($value)) {
+            if (isset(self::$placeholders[$value])) {
+                return self::$placeholders[$value];
+            }
+
+            foreach (self::$placeholderUniquePrefixes as $placeholderUniquePrefix) {
+                if (0 === strpos($value, $placeholderUniquePrefix)) {
+                    return [];
+                }
+            }
+        }
+
+        return $value;
+    }
+
+    private function doValidateType($value): void
+    {
+        if (null !== $this->handlingPlaceholder && !$this->allowPlaceholders()) {
+            $e = new InvalidTypeException(sprintf('A dynamic value is not compatible with a "%s" node type at path "%s".', static::class, $this->getPath()));
+            $e->setPath($this->getPath());
+
+            throw $e;
+        }
+
+        if (null === $this->handlingPlaceholder || null === $value) {
+            $this->validateType($value);
+
+            return;
+        }
+
+        $knownTypes = array_keys(self::$placeholders[$this->handlingPlaceholder]);
+        $validTypes = $this->getValidPlaceholderTypes();
+
+        if ($validTypes && array_diff($knownTypes, $validTypes)) {
+            $e = new InvalidTypeException(sprintf(
+                'Invalid type for path "%s". Expected %s, but got %s.',
+                $this->getPath(),
+                1 === \count($validTypes) ? '"'.reset($validTypes).'"' : 'one of "'.implode('", "', $validTypes).'"',
+                1 === \count($knownTypes) ? '"'.reset($knownTypes).'"' : 'one of "'.implode('", "', $knownTypes).'"'
+            ));
+            if ($hint = $this->getInfo()) {
+                $e->addHint($hint);
+            }
+            $e->setPath($this->getPath());
+
+            throw $e;
+        }
+
+        $this->validateType($value);
+    }
 }
diff --git a/vendor/symfony/config/Definition/BooleanNode.php b/vendor/symfony/config/Definition/BooleanNode.php
index 85f467b6be..c43c46f016 100644
--- a/vendor/symfony/config/Definition/BooleanNode.php
+++ b/vendor/symfony/config/Definition/BooleanNode.php
@@ -44,4 +44,12 @@ protected function isValueEmpty($value)
         // a boolean value cannot be empty
         return false;
     }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function getValidPlaceholderTypes(): array
+    {
+        return ['bool'];
+    }
 }
diff --git a/vendor/symfony/config/Definition/Builder/ArrayNodeDefinition.php b/vendor/symfony/config/Definition/Builder/ArrayNodeDefinition.php
index 29d1e154fc..60491e0da3 100644
--- a/vendor/symfony/config/Definition/Builder/ArrayNodeDefinition.php
+++ b/vendor/symfony/config/Definition/Builder/ArrayNodeDefinition.php
@@ -39,7 +39,7 @@ class ArrayNodeDefinition extends NodeDefinition implements ParentNodeDefinition
     /**
      * {@inheritdoc}
      */
-    public function __construct($name, NodeParentInterface $parent = null)
+    public function __construct(?string $name, NodeParentInterface $parent = null)
     {
         parent::__construct($name, $parent);
 
@@ -393,7 +393,7 @@ protected function getNodeBuilder()
     protected function createNode()
     {
         if (null === $this->prototype) {
-            $node = new ArrayNode($this->name, $this->parent);
+            $node = new ArrayNode($this->name, $this->parent, $this->pathSeparator);
 
             $this->validateConcreteNode($node);
 
@@ -404,7 +404,7 @@ protected function createNode()
                 $node->addChild($child->getNode());
             }
         } else {
-            $node = new PrototypedArrayNode($this->name, $this->parent);
+            $node = new PrototypedArrayNode($this->name, $this->parent, $this->pathSeparator);
 
             $this->validatePrototypeNode($node);
 
@@ -412,11 +412,7 @@ protected function createNode()
                 $node->setKeyAttribute($this->key, $this->removeKeyItem);
             }
 
-            if (false === $this->allowEmptyValue) {
-                @trigger_error(sprintf('Using %s::cannotBeEmpty() at path "%s" has no effect, consider requiresAtLeastOneElement() instead. In 4.0 both methods will behave the same.', __CLASS__, $node->getPath()), E_USER_DEPRECATED);
-            }
-
-            if (true === $this->atLeastOne) {
+            if (true === $this->atLeastOne || false === $this->allowEmptyValue) {
                 $node->setMinNumberOfElements(1);
             }
 
@@ -476,7 +472,7 @@ protected function validateConcreteNode(ArrayNode $node)
         }
 
         if (false === $this->allowEmptyValue) {
-            @trigger_error(sprintf('->cannotBeEmpty() is not applicable to concrete nodes at path "%s". In 4.0 it will throw an exception.', $path), E_USER_DEPRECATED);
+            throw new InvalidDefinitionException(sprintf('->cannotBeEmpty() is not applicable to concrete nodes at path "%s".', $path));
         }
 
         if (true === $this->atLeastOne) {
@@ -519,4 +515,34 @@ protected function validatePrototypeNode(PrototypedArrayNode $node)
             }
         }
     }
+
+    /**
+     * @return NodeDefinition[]
+     */
+    public function getChildNodeDefinitions()
+    {
+        return $this->children;
+    }
+
+    /**
+     * Finds a node defined by the given $nodePath.
+     *
+     * @param string $nodePath The path of the node to find. e.g "doctrine.orm.mappings"
+     */
+    public function find(string $nodePath): NodeDefinition
+    {
+        $firstPathSegment = (false === $pathSeparatorPos = strpos($nodePath, $this->pathSeparator))
+            ? $nodePath
+            : substr($nodePath, 0, $pathSeparatorPos);
+
+        if (null === $node = ($this->children[$firstPathSegment] ?? null)) {
+            throw new \RuntimeException(sprintf('Node with name "%s" does not exist in the current node "%s".', $firstPathSegment, $this->name));
+        }
+
+        if (false === $pathSeparatorPos) {
+            return $node;
+        }
+
+        return $node->find(substr($nodePath, $pathSeparatorPos + \strlen($this->pathSeparator)));
+    }
 }
diff --git a/vendor/symfony/config/Definition/Builder/BooleanNodeDefinition.php b/vendor/symfony/config/Definition/Builder/BooleanNodeDefinition.php
index 28e56579ad..d19324273b 100644
--- a/vendor/symfony/config/Definition/Builder/BooleanNodeDefinition.php
+++ b/vendor/symfony/config/Definition/Builder/BooleanNodeDefinition.php
@@ -24,7 +24,7 @@ class BooleanNodeDefinition extends ScalarNodeDefinition
     /**
      * {@inheritdoc}
      */
-    public function __construct($name, NodeParentInterface $parent = null)
+    public function __construct(?string $name, NodeParentInterface $parent = null)
     {
         parent::__construct($name, $parent);
 
@@ -38,7 +38,7 @@ public function __construct($name, NodeParentInterface $parent = null)
      */
     protected function instantiateNode()
     {
-        return new BooleanNode($this->name, $this->parent);
+        return new BooleanNode($this->name, $this->parent, $this->pathSeparator);
     }
 
     /**
diff --git a/vendor/symfony/config/Definition/Builder/BuilderAwareInterface.php b/vendor/symfony/config/Definition/Builder/BuilderAwareInterface.php
new file mode 100644
index 0000000000..f30b8736cf
--- /dev/null
+++ b/vendor/symfony/config/Definition/Builder/BuilderAwareInterface.php
@@ -0,0 +1,25 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Config\Definition\Builder;
+
+/**
+ * An interface that can be implemented by nodes which build other nodes.
+ *
+ * @author Roland Franssen <franssen.roland@gmail.com>
+ */
+interface BuilderAwareInterface
+{
+    /**
+     * Sets a custom children builder.
+     */
+    public function setBuilder(NodeBuilder $builder);
+}
diff --git a/vendor/symfony/config/Definition/Builder/EnumNodeDefinition.php b/vendor/symfony/config/Definition/Builder/EnumNodeDefinition.php
index 817906f507..9a9c096e3d 100644
--- a/vendor/symfony/config/Definition/Builder/EnumNodeDefinition.php
+++ b/vendor/symfony/config/Definition/Builder/EnumNodeDefinition.php
@@ -51,6 +51,6 @@ protected function instantiateNode()
             throw new \RuntimeException('You must call ->values() on enum nodes.');
         }
 
-        return new EnumNode($this->name, $this->parent, $this->values);
+        return new EnumNode($this->name, $this->parent, $this->values, $this->pathSeparator);
     }
 }
diff --git a/vendor/symfony/config/Definition/Builder/FloatNodeDefinition.php b/vendor/symfony/config/Definition/Builder/FloatNodeDefinition.php
index c0bed462bf..7b74271ae4 100644
--- a/vendor/symfony/config/Definition/Builder/FloatNodeDefinition.php
+++ b/vendor/symfony/config/Definition/Builder/FloatNodeDefinition.php
@@ -27,6 +27,6 @@ class FloatNodeDefinition extends NumericNodeDefinition
      */
     protected function instantiateNode()
     {
-        return new FloatNode($this->name, $this->parent, $this->min, $this->max);
+        return new FloatNode($this->name, $this->parent, $this->min, $this->max, $this->pathSeparator);
     }
 }
diff --git a/vendor/symfony/config/Definition/Builder/IntegerNodeDefinition.php b/vendor/symfony/config/Definition/Builder/IntegerNodeDefinition.php
index f6c3c147f3..0472a9870d 100644
--- a/vendor/symfony/config/Definition/Builder/IntegerNodeDefinition.php
+++ b/vendor/symfony/config/Definition/Builder/IntegerNodeDefinition.php
@@ -27,6 +27,6 @@ class IntegerNodeDefinition extends NumericNodeDefinition
      */
     protected function instantiateNode()
     {
-        return new IntegerNode($this->name, $this->parent, $this->min, $this->max);
+        return new IntegerNode($this->name, $this->parent, $this->min, $this->max, $this->pathSeparator);
     }
 }
diff --git a/vendor/symfony/config/Definition/Builder/NodeBuilder.php b/vendor/symfony/config/Definition/Builder/NodeBuilder.php
index 2809cb6c6f..be059f5d17 100644
--- a/vendor/symfony/config/Definition/Builder/NodeBuilder.php
+++ b/vendor/symfony/config/Definition/Builder/NodeBuilder.php
@@ -179,7 +179,7 @@ public function node($name, $type)
      */
     public function append(NodeDefinition $node)
     {
-        if ($node instanceof ParentNodeDefinitionInterface) {
+        if ($node instanceof BuilderAwareInterface) {
             $builder = clone $this;
             $builder->setParent(null);
             $node->setBuilder($builder);
diff --git a/vendor/symfony/config/Definition/Builder/NodeDefinition.php b/vendor/symfony/config/Definition/Builder/NodeDefinition.php
index cc245d7489..4d3b2f0bb1 100644
--- a/vendor/symfony/config/Definition/Builder/NodeDefinition.php
+++ b/vendor/symfony/config/Definition/Builder/NodeDefinition.php
@@ -11,6 +11,7 @@
 
 namespace Symfony\Component\Config\Definition\Builder;
 
+use Symfony\Component\Config\Definition\BaseNode;
 use Symfony\Component\Config\Definition\Exception\InvalidDefinitionException;
 use Symfony\Component\Config\Definition\NodeInterface;
 
@@ -33,14 +34,11 @@ abstract class NodeDefinition implements NodeParentInterface
     protected $nullEquivalent;
     protected $trueEquivalent = true;
     protected $falseEquivalent = false;
+    protected $pathSeparator = BaseNode::DEFAULT_PATH_SEPARATOR;
     protected $parent;
     protected $attributes = [];
 
-    /**
-     * @param string|null              $name   The name of the node
-     * @param NodeParentInterface|null $parent The parent
-     */
-    public function __construct($name, NodeParentInterface $parent = null)
+    public function __construct(?string $name, NodeParentInterface $parent = null)
     {
         $this->parent = $parent;
         $this->name = $name;
@@ -350,4 +348,26 @@ protected function normalization()
      * @throws InvalidDefinitionException When the definition is invalid
      */
     abstract protected function createNode();
+
+    /**
+     * Set PathSeparator to use.
+     *
+     * @return $this
+     */
+    public function setPathSeparator(string $separator)
+    {
+        if ($this instanceof ParentNodeDefinitionInterface) {
+            if (method_exists($this, 'getChildNodeDefinitions')) {
+                foreach ($this->getChildNodeDefinitions() as $child) {
+                    $child->setPathSeparator($separator);
+                }
+            } else {
+                @trigger_error(sprintf('Not implementing the "%s::getChildNodeDefinitions()" method in "%s" is deprecated since Symfony 4.1.', ParentNodeDefinitionInterface::class, static::class), \E_USER_DEPRECATED);
+            }
+        }
+
+        $this->pathSeparator = $separator;
+
+        return $this;
+    }
 }
diff --git a/vendor/symfony/config/Definition/Builder/ParentNodeDefinitionInterface.php b/vendor/symfony/config/Definition/Builder/ParentNodeDefinitionInterface.php
index 1bf2ad4bf6..c6328c2944 100644
--- a/vendor/symfony/config/Definition/Builder/ParentNodeDefinitionInterface.php
+++ b/vendor/symfony/config/Definition/Builder/ParentNodeDefinitionInterface.php
@@ -15,8 +15,10 @@
  * An interface that must be implemented by nodes which can have children.
  *
  * @author Victor Berchet <victor@suumit.com>
+ *
+ * @method NodeDefinition[] getChildNodeDefinitions() Gets the child node definitions - not implementing it is deprecated since Symfony 4.2
  */
-interface ParentNodeDefinitionInterface
+interface ParentNodeDefinitionInterface extends BuilderAwareInterface
 {
     /**
      * Returns a builder to add children nodes.
@@ -41,9 +43,4 @@ public function children();
      * @return $this
      */
     public function append(NodeDefinition $node);
-
-    /**
-     * Sets a custom children builder.
-     */
-    public function setBuilder(NodeBuilder $builder);
 }
diff --git a/vendor/symfony/config/Definition/Builder/ScalarNodeDefinition.php b/vendor/symfony/config/Definition/Builder/ScalarNodeDefinition.php
index 6170555ccf..428f61290a 100644
--- a/vendor/symfony/config/Definition/Builder/ScalarNodeDefinition.php
+++ b/vendor/symfony/config/Definition/Builder/ScalarNodeDefinition.php
@@ -27,6 +27,6 @@ class ScalarNodeDefinition extends VariableNodeDefinition
      */
     protected function instantiateNode()
     {
-        return new ScalarNode($this->name, $this->parent);
+        return new ScalarNode($this->name, $this->parent, $this->pathSeparator);
     }
 }
diff --git a/vendor/symfony/config/Definition/Builder/TreeBuilder.php b/vendor/symfony/config/Definition/Builder/TreeBuilder.php
index 384477c501..6605c0eb90 100644
--- a/vendor/symfony/config/Definition/Builder/TreeBuilder.php
+++ b/vendor/symfony/config/Definition/Builder/TreeBuilder.php
@@ -11,6 +11,7 @@
 
 namespace Symfony\Component\Config\Definition\Builder;
 
+use Symfony\Component\Config\Definition\Exception\TreeWithoutRootNodeException;
 use Symfony\Component\Config\Definition\NodeInterface;
 
 /**
@@ -23,29 +24,49 @@ class TreeBuilder implements NodeParentInterface
     protected $tree;
     protected $root;
 
-    /**
-     * @deprecated since 3.4. To be removed in 4.0
-     */
-    protected $builder;
+    public function __construct(string $name = null, string $type = 'array', NodeBuilder $builder = null)
+    {
+        if (null === $name) {
+            @trigger_error('A tree builder without a root node is deprecated since Symfony 4.2 and will not be supported anymore in 5.0.', \E_USER_DEPRECATED);
+        } else {
+            $builder = $builder ?: new NodeBuilder();
+            $this->root = $builder->node($name, $type)->setParent($this);
+        }
+    }
 
     /**
      * Creates the root node.
      *
-     * @param string      $name    The name of the root node
-     * @param string      $type    The type of the root node
-     * @param NodeBuilder $builder A custom node builder instance
+     * @param string $name The name of the root node
+     * @param string $type The type of the root node
      *
      * @return ArrayNodeDefinition|NodeDefinition The root node (as an ArrayNodeDefinition when the type is 'array')
      *
      * @throws \RuntimeException When the node type is not supported
+     *
+     * @deprecated since Symfony 4.3, pass the root name to the constructor instead
      */
     public function root($name, $type = 'array', NodeBuilder $builder = null)
     {
+        @trigger_error(sprintf('The "%s()" method called for the "%s" configuration is deprecated since Symfony 4.3, pass the root name to the constructor instead.', __METHOD__, $name), \E_USER_DEPRECATED);
+
         $builder = $builder ?: new NodeBuilder();
 
         return $this->root = $builder->node($name, $type)->setParent($this);
     }
 
+    /**
+     * @return NodeDefinition|ArrayNodeDefinition The root node (as an ArrayNodeDefinition when the type is 'array')
+     */
+    public function getRootNode(): NodeDefinition
+    {
+        if (null === $this->root) {
+            throw new \RuntimeException(sprintf('Calling "%s()" before creating the root node is not supported, migrate to the new constructor signature instead.', __METHOD__));
+        }
+
+        return $this->root;
+    }
+
     /**
      * Builds the tree.
      *
@@ -55,13 +76,31 @@ public function root($name, $type = 'array', NodeBuilder $builder = null)
      */
     public function buildTree()
     {
-        if (null === $this->root) {
-            throw new \RuntimeException('The configuration tree has no root node.');
-        }
+        $this->assertTreeHasRootNode();
         if (null !== $this->tree) {
             return $this->tree;
         }
 
         return $this->tree = $this->root->getNode(true);
     }
+
+    public function setPathSeparator(string $separator)
+    {
+        $this->assertTreeHasRootNode();
+
+        // unset last built as changing path separator changes all nodes
+        $this->tree = null;
+
+        $this->root->setPathSeparator($separator);
+    }
+
+    /**
+     * @throws \RuntimeException if root node is not defined
+     */
+    private function assertTreeHasRootNode()
+    {
+        if (null === $this->root) {
+            throw new TreeWithoutRootNodeException('The configuration tree has no root node.');
+        }
+    }
 }
diff --git a/vendor/symfony/config/Definition/Builder/VariableNodeDefinition.php b/vendor/symfony/config/Definition/Builder/VariableNodeDefinition.php
index 26565e1771..39a564f4cd 100644
--- a/vendor/symfony/config/Definition/Builder/VariableNodeDefinition.php
+++ b/vendor/symfony/config/Definition/Builder/VariableNodeDefinition.php
@@ -27,7 +27,7 @@ class VariableNodeDefinition extends NodeDefinition
      */
     protected function instantiateNode()
     {
-        return new VariableNode($this->name, $this->parent);
+        return new VariableNode($this->name, $this->parent, $this->pathSeparator);
     }
 
     /**
diff --git a/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php b/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php
index 744f15fd81..77d1664c74 100644
--- a/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php
+++ b/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php
@@ -41,12 +41,7 @@ public function dumpNode(NodeInterface $node, $namespace = null)
         return $ref;
     }
 
-    /**
-     * @param int    $depth
-     * @param bool   $root      If the node is the root node
-     * @param string $namespace The namespace of the node
-     */
-    private function writeNode(NodeInterface $node, $depth = 0, $root = false, $namespace = null)
+    private function writeNode(NodeInterface $node, int $depth = 0, bool $root = false, string $namespace = null)
     {
         $rootName = ($root ? 'config' : $node->getName());
         $rootNamespace = ($namespace ?: ($root ? 'http://example.org/schema/dic/'.$node->getName() : null));
@@ -58,7 +53,7 @@ private function writeNode(NodeInterface $node, $depth = 0, $root = false, $name
             });
 
             if (\count($remapping)) {
-                list($singular) = current($remapping);
+                [$singular] = current($remapping);
                 $rootName = $singular;
             }
         }
@@ -96,7 +91,7 @@ private function writeNode(NodeInterface $node, $depth = 0, $root = false, $name
                 }
 
                 if ($prototype instanceof PrototypedArrayNode) {
-                    $prototype->setName($key);
+                    $prototype->setName($key ?? '');
                     $children = [$key => $prototype];
                 } elseif ($prototype instanceof ArrayNode) {
                     $children = $prototype->getChildren();
@@ -193,7 +188,7 @@ private function writeNode(NodeInterface $node, $depth = 0, $root = false, $name
                 $commentDepth = $depth + 4 + \strlen($attrName) + 2;
                 $commentLines = explode("\n", $comment);
                 $multiline = (\count($commentLines) > 1);
-                $comment = implode(PHP_EOL.str_repeat(' ', $commentDepth), $commentLines);
+                $comment = implode(\PHP_EOL.str_repeat(' ', $commentDepth), $commentLines);
 
                 if ($multiline) {
                     $this->writeLine('<!--', $depth);
@@ -258,26 +253,21 @@ private function writeNode(NodeInterface $node, $depth = 0, $root = false, $name
 
     /**
      * Outputs a single config reference line.
-     *
-     * @param string $text
-     * @param int    $indent
      */
-    private function writeLine($text, $indent = 0)
+    private function writeLine(string $text, int $indent = 0)
     {
         $indent = \strlen($text) + $indent;
         $format = '%'.$indent.'s';
 
-        $this->reference .= sprintf($format, $text).PHP_EOL;
+        $this->reference .= sprintf($format, $text).\PHP_EOL;
     }
 
     /**
      * Renders the string conversion of the value.
      *
      * @param mixed $value
-     *
-     * @return string
      */
-    private function writeValue($value)
+    private function writeValue($value): string
     {
         if ('%%%%not_defined%%%%' === $value) {
             return '';
diff --git a/vendor/symfony/config/Definition/Dumper/YamlReferenceDumper.php b/vendor/symfony/config/Definition/Dumper/YamlReferenceDumper.php
index ba35539460..e19e09ca7c 100644
--- a/vendor/symfony/config/Definition/Dumper/YamlReferenceDumper.php
+++ b/vendor/symfony/config/Definition/Dumper/YamlReferenceDumper.php
@@ -69,11 +69,7 @@ public function dumpNode(NodeInterface $node)
         return $ref;
     }
 
-    /**
-     * @param int  $depth
-     * @param bool $prototypedArray
-     */
-    private function writeNode(NodeInterface $node, NodeInterface $parentNode = null, $depth = 0, $prototypedArray = false)
+    private function writeNode(NodeInterface $node, NodeInterface $parentNode = null, int $depth = 0, bool $prototypedArray = false)
     {
         $comments = [];
         $default = '';
@@ -177,11 +173,8 @@ private function writeNode(NodeInterface $node, NodeInterface $parentNode = null
 
     /**
      * Outputs a single config reference line.
-     *
-     * @param string $text
-     * @param int    $indent
      */
-    private function writeLine($text, $indent = 0)
+    private function writeLine(string $text, int $indent = 0)
     {
         $indent = \strlen($text) + $indent;
         $format = '%'.$indent.'s';
@@ -189,7 +182,7 @@ private function writeLine($text, $indent = 0)
         $this->reference .= sprintf($format, $text)."\n";
     }
 
-    private function writeArray(array $array, $depth)
+    private function writeArray(array $array, int $depth)
     {
         $isIndexed = array_values($array) === $array;
 
@@ -212,10 +205,7 @@ private function writeArray(array $array, $depth)
         }
     }
 
-    /**
-     * @return array
-     */
-    private function getPrototypeChildren(PrototypedArrayNode $node)
+    private function getPrototypeChildren(PrototypedArrayNode $node): array
     {
         $prototype = $node->getPrototype();
         $key = $node->getKeyAttribute();
diff --git a/vendor/symfony/config/Definition/EnumNode.php b/vendor/symfony/config/Definition/EnumNode.php
index 15c8db3e66..23fc508a78 100644
--- a/vendor/symfony/config/Definition/EnumNode.php
+++ b/vendor/symfony/config/Definition/EnumNode.php
@@ -22,14 +22,14 @@ class EnumNode extends ScalarNode
 {
     private $values;
 
-    public function __construct($name, NodeInterface $parent = null, array $values = [])
+    public function __construct(?string $name, NodeInterface $parent = null, array $values = [], string $pathSeparator = BaseNode::DEFAULT_PATH_SEPARATOR)
     {
         $values = array_unique($values);
         if (empty($values)) {
             throw new \InvalidArgumentException('$values must contain at least one element.');
         }
 
-        parent::__construct($name, $parent);
+        parent::__construct($name, $parent, $pathSeparator);
         $this->values = $values;
     }
 
@@ -51,4 +51,12 @@ protected function finalizeValue($value)
 
         return $value;
     }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function allowPlaceholders(): bool
+    {
+        return false;
+    }
 }
diff --git a/vendor/symfony/config/Tests/Fixtures/Builder/VariableNodeDefinition.php b/vendor/symfony/config/Definition/Exception/TreeWithoutRootNodeException.php
similarity index 51%
rename from vendor/symfony/config/Tests/Fixtures/Builder/VariableNodeDefinition.php
rename to vendor/symfony/config/Definition/Exception/TreeWithoutRootNodeException.php
index 6126ed434f..04406fc90b 100644
--- a/vendor/symfony/config/Tests/Fixtures/Builder/VariableNodeDefinition.php
+++ b/vendor/symfony/config/Definition/Exception/TreeWithoutRootNodeException.php
@@ -9,10 +9,13 @@
  * file that was distributed with this source code.
  */
 
-namespace Symfony\Component\Config\Tests\Fixtures\Builder;
+namespace Symfony\Component\Config\Definition\Exception;
 
-use Symfony\Component\Config\Definition\Builder\VariableNodeDefinition as BaseVariableNodeDefinition;
-
-class VariableNodeDefinition extends BaseVariableNodeDefinition
+/**
+ * @author Roland Franssen <franssen.roland@gmail.com>
+ *
+ * @internal
+ */
+class TreeWithoutRootNodeException extends \RuntimeException
 {
 }
diff --git a/vendor/symfony/config/Definition/FloatNode.php b/vendor/symfony/config/Definition/FloatNode.php
index 9eb8789950..8e229ed4c5 100644
--- a/vendor/symfony/config/Definition/FloatNode.php
+++ b/vendor/symfony/config/Definition/FloatNode.php
@@ -40,4 +40,12 @@ protected function validateType($value)
             throw $ex;
         }
     }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function getValidPlaceholderTypes(): array
+    {
+        return ['float'];
+    }
 }
diff --git a/vendor/symfony/config/Definition/IntegerNode.php b/vendor/symfony/config/Definition/IntegerNode.php
index 8ec068a84e..e8c6a81c30 100644
--- a/vendor/symfony/config/Definition/IntegerNode.php
+++ b/vendor/symfony/config/Definition/IntegerNode.php
@@ -35,4 +35,12 @@ protected function validateType($value)
             throw $ex;
         }
     }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function getValidPlaceholderTypes(): array
+    {
+        return ['int'];
+    }
 }
diff --git a/vendor/symfony/config/Definition/NumericNode.php b/vendor/symfony/config/Definition/NumericNode.php
index 439935e455..19c96e8af7 100644
--- a/vendor/symfony/config/Definition/NumericNode.php
+++ b/vendor/symfony/config/Definition/NumericNode.php
@@ -23,9 +23,9 @@ class NumericNode extends ScalarNode
     protected $min;
     protected $max;
 
-    public function __construct($name, NodeInterface $parent = null, $min = null, $max = null)
+    public function __construct(?string $name, NodeInterface $parent = null, $min = null, $max = null, string $pathSeparator = BaseNode::DEFAULT_PATH_SEPARATOR)
     {
-        parent::__construct($name, $parent);
+        parent::__construct($name, $parent, $pathSeparator);
         $this->min = $min;
         $this->max = $max;
     }
diff --git a/vendor/symfony/config/Definition/Processor.php b/vendor/symfony/config/Definition/Processor.php
index 0a935eeb7f..a878b90557 100644
--- a/vendor/symfony/config/Definition/Processor.php
+++ b/vendor/symfony/config/Definition/Processor.php
@@ -15,14 +15,15 @@
  * This class is the entry point for config normalization/merging/finalization.
  *
  * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ *
+ * @final since version 4.1
  */
 class Processor
 {
     /**
      * Processes an array of configurations.
      *
-     * @param NodeInterface $configTree The node tree describing the configuration
-     * @param array         $configs    An array of configuration items to process
+     * @param array $configs An array of configuration items to process
      *
      * @return array The processed configuration
      */
@@ -40,8 +41,7 @@ public function process(NodeInterface $configTree, array $configs)
     /**
      * Processes an array of configurations.
      *
-     * @param ConfigurationInterface $configuration The configuration class
-     * @param array                  $configs       An array of configuration items to process
+     * @param array $configs An array of configuration items to process
      *
      * @return array The processed configuration
      */
diff --git a/vendor/symfony/config/Definition/PrototypedArrayNode.php b/vendor/symfony/config/Definition/PrototypedArrayNode.php
index d18a109abc..f48414e318 100644
--- a/vendor/symfony/config/Definition/PrototypedArrayNode.php
+++ b/vendor/symfony/config/Definition/PrototypedArrayNode.php
@@ -363,11 +363,9 @@ protected function mergeValues($leftSide, $rightSide)
      * Now, the key becomes 'name001' and the child node becomes 'value001' and
      * the prototype of child node 'name001' should be a ScalarNode instead of an ArrayNode instance.
      *
-     * @param string $key The key of the child node
-     *
      * @return mixed The prototype instance
      */
-    private function getPrototypeForChild($key)
+    private function getPrototypeForChild(string $key)
     {
         $prototype = isset($this->valuePrototypes[$key]) ? $this->valuePrototypes[$key] : $this->prototype;
         $prototype->setName($key);
diff --git a/vendor/symfony/config/Definition/ScalarNode.php b/vendor/symfony/config/Definition/ScalarNode.php
index 53c1ed29c2..5ad28ec4c5 100644
--- a/vendor/symfony/config/Definition/ScalarNode.php
+++ b/vendor/symfony/config/Definition/ScalarNode.php
@@ -48,6 +48,20 @@ protected function validateType($value)
      */
     protected function isValueEmpty($value)
     {
+        // assume environment variables are never empty (which in practice is likely to be true during runtime)
+        // not doing so breaks many configs that are valid today
+        if ($this->isHandlingPlaceholder()) {
+            return false;
+        }
+
         return null === $value || '' === $value;
     }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function getValidPlaceholderTypes(): array
+    {
+        return ['bool', 'int', 'float', 'string'];
+    }
 }
diff --git a/vendor/symfony/config/Definition/VariableNode.php b/vendor/symfony/config/Definition/VariableNode.php
index 1a3442d961..5c616f6661 100644
--- a/vendor/symfony/config/Definition/VariableNode.php
+++ b/vendor/symfony/config/Definition/VariableNode.php
@@ -81,6 +81,19 @@ protected function validateType($value)
      */
     protected function finalizeValue($value)
     {
+        // deny environment variables only when using custom validators
+        // this avoids ever passing an empty value to final validation closures
+        if (!$this->allowEmptyValue && $this->isHandlingPlaceholder() && $this->finalValidationClosures) {
+            @trigger_error(sprintf('Setting path "%s" to an environment variable is deprecated since Symfony 4.3. Remove "cannotBeEmpty()", "validate()" or include a prefix/suffix value instead.', $this->getPath()), \E_USER_DEPRECATED);
+//            $e = new InvalidConfigurationException(sprintf('The path "%s" cannot contain an environment variable when empty values are not allowed by definition and are validated.', $this->getPath()));
+//            if ($hint = $this->getInfo()) {
+//                $e->addHint($hint);
+//            }
+//            $e->setPath($this->getPath());
+//
+//            throw $e;
+        }
+
         if (!$this->allowEmptyValue && $this->isValueEmpty($value)) {
             $ex = new InvalidConfigurationException(sprintf('The path "%s" cannot contain an empty value, but got %s.', $this->getPath(), json_encode($value)));
             if ($hint = $this->getInfo()) {
@@ -120,6 +133,8 @@ protected function mergeValues($leftSide, $rightSide)
      * @param mixed $value
      *
      * @return bool
+     *
+     * @see finalizeValue()
      */
     protected function isValueEmpty($value)
     {
diff --git a/vendor/symfony/config/DependencyInjection/ConfigCachePass.php b/vendor/symfony/config/DependencyInjection/ConfigCachePass.php
deleted file mode 100644
index 128bf7e28c..0000000000
--- a/vendor/symfony/config/DependencyInjection/ConfigCachePass.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\DependencyInjection;
-
-@trigger_error(sprintf('The %s class is deprecated since Symfony 3.4 and will be removed in 4.0. Use tagged iterator arguments instead.', ConfigCachePass::class), E_USER_DEPRECATED);
-
-use Symfony\Component\DependencyInjection\Argument\IteratorArgument;
-use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
-use Symfony\Component\DependencyInjection\Compiler\PriorityTaggedServiceTrait;
-use Symfony\Component\DependencyInjection\ContainerBuilder;
-
-/**
- * Adds services tagged config_cache.resource_checker to the config_cache_factory service, ordering them by priority.
- *
- * @author Matthias Pigulla <mp@webfactory.de>
- * @author Benjamin Klotz <bk@webfactory.de>
- *
- * @deprecated since version 3.4, to be removed in 4.0. Use tagged iterator arguments instead.
- */
-class ConfigCachePass implements CompilerPassInterface
-{
-    use PriorityTaggedServiceTrait;
-
-    private $factoryServiceId;
-    private $resourceCheckerTag;
-
-    public function __construct($factoryServiceId = 'config_cache_factory', $resourceCheckerTag = 'config_cache.resource_checker')
-    {
-        $this->factoryServiceId = $factoryServiceId;
-        $this->resourceCheckerTag = $resourceCheckerTag;
-    }
-
-    public function process(ContainerBuilder $container)
-    {
-        $resourceCheckers = $this->findAndSortTaggedServices($this->resourceCheckerTag, $container);
-
-        if (empty($resourceCheckers)) {
-            return;
-        }
-
-        $container->getDefinition($this->factoryServiceId)->replaceArgument(0, new IteratorArgument($resourceCheckers));
-    }
-}
diff --git a/vendor/symfony/config/Exception/FileLoaderImportCircularReferenceException.php b/vendor/symfony/config/Exception/FileLoaderImportCircularReferenceException.php
index 6a3b01cfbe..8c5e736524 100644
--- a/vendor/symfony/config/Exception/FileLoaderImportCircularReferenceException.php
+++ b/vendor/symfony/config/Exception/FileLoaderImportCircularReferenceException.php
@@ -16,9 +16,9 @@
  *
  * @author Fabien Potencier <fabien@symfony.com>
  */
-class FileLoaderImportCircularReferenceException extends FileLoaderLoadException
+class FileLoaderImportCircularReferenceException extends LoaderLoadException
 {
-    public function __construct(array $resources, $code = null, $previous = null)
+    public function __construct(array $resources, int $code = null, \Throwable $previous = null)
     {
         $message = sprintf('Circular reference detected in "%s" ("%s" > "%s").', $this->varToString($resources[0]), implode('" > "', $resources), $resources[0]);
 
diff --git a/vendor/symfony/config/Exception/FileLoaderLoadException.php b/vendor/symfony/config/Exception/FileLoaderLoadException.php
index 82d90eb39b..16beec5930 100644
--- a/vendor/symfony/config/Exception/FileLoaderLoadException.php
+++ b/vendor/symfony/config/Exception/FileLoaderLoadException.php
@@ -15,6 +15,8 @@
  * Exception class for when a resource cannot be loaded or imported.
  *
  * @author Ryan Weaver <ryan@thatsquality.com>
+ *
+ * @deprecated since Symfony 4.2, use LoaderLoadException instead.
  */
 class FileLoaderLoadException extends \Exception
 {
@@ -22,10 +24,10 @@ class FileLoaderLoadException extends \Exception
      * @param string     $resource       The resource that could not be imported
      * @param string     $sourceResource The original resource importing the new resource
      * @param int        $code           The error code
-     * @param \Exception $previous       A previous exception
+     * @param \Throwable $previous       A previous exception
      * @param string     $type           The type of resource
      */
-    public function __construct($resource, $sourceResource = null, $code = null, $previous = null, $type = null)
+    public function __construct(string $resource, string $sourceResource = null, int $code = null, \Throwable $previous = null, string $type = null)
     {
         $message = '';
         if ($previous) {
@@ -42,17 +44,17 @@ public function __construct($resource, $sourceResource = null, $code = null, $pr
 
             // show tweaked trace to complete the human readable sentence
             if (null === $sourceResource) {
-                $message .= sprintf('(which is loaded in resource "%s")', $this->varToString($resource));
+                $message .= sprintf('(which is loaded in resource "%s")', $resource);
             } else {
-                $message .= sprintf('(which is being imported from "%s")', $this->varToString($sourceResource));
+                $message .= sprintf('(which is being imported from "%s")', $sourceResource);
             }
             $message .= '.';
 
         // if there's no previous message, present it the default way
         } elseif (null === $sourceResource) {
-            $message .= sprintf('Cannot load resource "%s".', $this->varToString($resource));
+            $message .= sprintf('Cannot load resource "%s".', $resource);
         } else {
-            $message .= sprintf('Cannot import resource "%s" from "%s".', $this->varToString($resource), $this->varToString($sourceResource));
+            $message .= sprintf('Cannot import resource "%s" from "%s".', $resource, $sourceResource);
         }
 
         // Is the resource located inside a bundle?
diff --git a/vendor/symfony/config/Exception/FileLocatorFileNotFoundException.php b/vendor/symfony/config/Exception/FileLocatorFileNotFoundException.php
index 648cf0e707..3ee4b938f4 100644
--- a/vendor/symfony/config/Exception/FileLocatorFileNotFoundException.php
+++ b/vendor/symfony/config/Exception/FileLocatorFileNotFoundException.php
@@ -20,7 +20,7 @@ class FileLocatorFileNotFoundException extends \InvalidArgumentException
 {
     private $paths;
 
-    public function __construct($message = '', $code = 0, $previous = null, array $paths = [])
+    public function __construct(string $message = '', int $code = 0, \Throwable $previous = null, array $paths = [])
     {
         parent::__construct($message, $code, $previous);
 
diff --git a/vendor/symfony/config/Exception/LoaderLoadException.php b/vendor/symfony/config/Exception/LoaderLoadException.php
new file mode 100644
index 0000000000..41a959d38d
--- /dev/null
+++ b/vendor/symfony/config/Exception/LoaderLoadException.php
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Config\Exception;
+
+/**
+ * Exception class for when a resource cannot be loaded or imported.
+ *
+ * @author Ryan Weaver <ryan@thatsquality.com>
+ */
+class LoaderLoadException extends FileLoaderLoadException
+{
+}
diff --git a/vendor/symfony/config/FileLocator.php b/vendor/symfony/config/FileLocator.php
index c125ba0b13..685ec5b699 100644
--- a/vendor/symfony/config/FileLocator.php
+++ b/vendor/symfony/config/FileLocator.php
@@ -23,7 +23,7 @@ class FileLocator implements FileLocatorInterface
     protected $paths;
 
     /**
-     * @param string|array $paths A path or an array of paths where to look for resources
+     * @param string|string[] $paths A path or an array of paths where to look for resources
      */
     public function __construct($paths = [])
     {
@@ -76,19 +76,15 @@ public function locate($name, $currentPath = null, $first = true)
 
     /**
      * Returns whether the file path is an absolute path.
-     *
-     * @param string $file A file path
-     *
-     * @return bool
      */
-    private function isAbsolutePath($file)
+    private function isAbsolutePath(string $file): bool
     {
         if ('/' === $file[0] || '\\' === $file[0]
             || (\strlen($file) > 3 && ctype_alpha($file[0])
                 && ':' === $file[1]
                 && ('\\' === $file[2] || '/' === $file[2])
             )
-            || null !== parse_url($file, PHP_URL_SCHEME)
+            || null !== parse_url($file, \PHP_URL_SCHEME)
         ) {
             return true;
         }
diff --git a/vendor/symfony/config/Loader/DelegatingLoader.php b/vendor/symfony/config/Loader/DelegatingLoader.php
index 452e81c58b..e40e57d7af 100644
--- a/vendor/symfony/config/Loader/DelegatingLoader.php
+++ b/vendor/symfony/config/Loader/DelegatingLoader.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\Config\Loader;
 
-use Symfony\Component\Config\Exception\FileLoaderLoadException;
+use Symfony\Component\Config\Exception\LoaderLoadException;
 
 /**
  * DelegatingLoader delegates loading to other loaders using a loader resolver.
@@ -34,7 +34,7 @@ public function __construct(LoaderResolverInterface $resolver)
     public function load($resource, $type = null)
     {
         if (false === $loader = $this->resolver->resolve($resource, $type)) {
-            throw new FileLoaderLoadException($resource, null, null, null, $type);
+            throw new LoaderLoadException($resource, null, null, null, $type);
         }
 
         return $loader->load($resource, $type);
diff --git a/vendor/symfony/config/Loader/FileLoader.php b/vendor/symfony/config/Loader/FileLoader.php
index 2f1d471bdd..e87230785b 100644
--- a/vendor/symfony/config/Loader/FileLoader.php
+++ b/vendor/symfony/config/Loader/FileLoader.php
@@ -12,8 +12,8 @@
 namespace Symfony\Component\Config\Loader;
 
 use Symfony\Component\Config\Exception\FileLoaderImportCircularReferenceException;
-use Symfony\Component\Config\Exception\FileLoaderLoadException;
 use Symfony\Component\Config\Exception\FileLocatorFileNotFoundException;
+use Symfony\Component\Config\Exception\LoaderLoadException;
 use Symfony\Component\Config\FileLocatorInterface;
 use Symfony\Component\Config\Resource\FileExistenceResource;
 use Symfony\Component\Config\Resource\GlobResource;
@@ -59,23 +59,37 @@ public function getLocator()
     /**
      * Imports a resource.
      *
-     * @param mixed       $resource       A Resource
-     * @param string|null $type           The resource type or null if unknown
-     * @param bool        $ignoreErrors   Whether to ignore import errors or not
-     * @param string|null $sourceResource The original resource importing the new resource
+     * @param mixed                $resource       A Resource
+     * @param string|null          $type           The resource type or null if unknown
+     * @param bool                 $ignoreErrors   Whether to ignore import errors or not
+     * @param string|null          $sourceResource The original resource importing the new resource
+     * @param string|string[]|null $exclude        Glob patterns to exclude from the import
      *
      * @return mixed
      *
-     * @throws FileLoaderLoadException
+     * @throws LoaderLoadException
      * @throws FileLoaderImportCircularReferenceException
      * @throws FileLocatorFileNotFoundException
      */
-    public function import($resource, $type = null, $ignoreErrors = false, $sourceResource = null)
+    public function import($resource, $type = null, $ignoreErrors = false, $sourceResource = null/*, $exclude = null*/)
     {
+        if (\func_num_args() < 5 && __CLASS__ !== static::class && 0 !== strpos(static::class, 'Symfony\Component\\') && __CLASS__ !== (new \ReflectionMethod($this, __FUNCTION__))->getDeclaringClass()->getName() && !$this instanceof \PHPUnit\Framework\MockObject\MockObject && !$this instanceof \Prophecy\Prophecy\ProphecySubjectInterface && !$this instanceof \Mockery\MockInterface) {
+            @trigger_error(sprintf('The "%s()" method will have a new "$exclude = null" argument in version 5.0, not defining it is deprecated since Symfony 4.4.', __METHOD__), \E_USER_DEPRECATED);
+        }
+        $exclude = \func_num_args() >= 5 ? func_get_arg(4) : null;
+
         if (\is_string($resource) && \strlen($resource) !== $i = strcspn($resource, '*?{[')) {
+            $excluded = [];
+            foreach ((array) $exclude as $pattern) {
+                foreach ($this->glob($pattern, true, $_, false, true) as $path => $info) {
+                    // normalize Windows slashes
+                    $excluded[str_replace('\\', '/', $path)] = true;
+                }
+            }
+
             $ret = [];
             $isSubpath = 0 !== $i && false !== strpos(substr($resource, 0, $i), '/');
-            foreach ($this->glob($resource, false, $_, $ignoreErrors || !$isSubpath) as $path => $info) {
+            foreach ($this->glob($resource, false, $_, $ignoreErrors || !$isSubpath, false, $excluded) as $path => $info) {
                 if (null !== $res = $this->doImport($path, 'glob' === $type ? null : $type, $ignoreErrors, $sourceResource)) {
                     $ret[] = $res;
                 }
@@ -93,7 +107,7 @@ public function import($resource, $type = null, $ignoreErrors = false, $sourceRe
     /**
      * @internal
      */
-    protected function glob($pattern, $recursive, &$resource = null, $ignoreErrors = false)
+    protected function glob(string $pattern, bool $recursive, &$resource = null, bool $ignoreErrors = false, bool $forExclusion = false, array $excluded = [])
     {
         if (\strlen($pattern) === $i = strcspn($pattern, '*?{[')) {
             $prefix = $pattern;
@@ -120,14 +134,12 @@ protected function glob($pattern, $recursive, &$resource = null, $ignoreErrors =
 
             return;
         }
-        $resource = new GlobResource($prefix, $pattern, $recursive);
+        $resource = new GlobResource($prefix, $pattern, $recursive, $forExclusion, $excluded);
 
-        foreach ($resource as $path => $info) {
-            yield $path => $info;
-        }
+        yield from $resource;
     }
 
-    private function doImport($resource, $type = null, $ignoreErrors = false, $sourceResource = null)
+    private function doImport($resource, string $type = null, bool $ignoreErrors = false, $sourceResource = null)
     {
         try {
             $loader = $this->resolve($resource, $type);
@@ -161,11 +173,11 @@ private function doImport($resource, $type = null, $ignoreErrors = false, $sourc
         } catch (\Exception $e) {
             if (!$ignoreErrors) {
                 // prevent embedded imports from nesting multiple exceptions
-                if ($e instanceof FileLoaderLoadException) {
+                if ($e instanceof LoaderLoadException) {
                     throw $e;
                 }
 
-                throw new FileLoaderLoadException($resource, $sourceResource, null, $e, $type);
+                throw new LoaderLoadException($resource, $sourceResource, null, $e, $type);
             }
         }
 
diff --git a/vendor/symfony/config/Loader/Loader.php b/vendor/symfony/config/Loader/Loader.php
index d2f2ec90b9..698ab40afb 100644
--- a/vendor/symfony/config/Loader/Loader.php
+++ b/vendor/symfony/config/Loader/Loader.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\Config\Loader;
 
-use Symfony\Component\Config\Exception\FileLoaderLoadException;
+use Symfony\Component\Config\Exception\LoaderLoadException;
 
 /**
  * Loader is the abstract class used by all built-in loaders.
@@ -59,7 +59,7 @@ public function import($resource, $type = null)
      *
      * @return $this|LoaderInterface
      *
-     * @throws FileLoaderLoadException If no loader is found
+     * @throws LoaderLoadException If no loader is found
      */
     public function resolve($resource, $type = null)
     {
@@ -70,7 +70,7 @@ public function resolve($resource, $type = null)
         $loader = null === $this->resolver ? false : $this->resolver->resolve($resource, $type);
 
         if (false === $loader) {
-            throw new FileLoaderLoadException($resource, null, null, null, $type);
+            throw new LoaderLoadException($resource, null, null, null, $type);
         }
 
         return $loader;
diff --git a/vendor/symfony/config/Resource/ClassExistenceResource.php b/vendor/symfony/config/Resource/ClassExistenceResource.php
index fc0259f418..da76a7b780 100644
--- a/vendor/symfony/config/Resource/ClassExistenceResource.php
+++ b/vendor/symfony/config/Resource/ClassExistenceResource.php
@@ -18,8 +18,10 @@
  * The resource must be a fully-qualified class name.
  *
  * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @final since Symfony 4.3
  */
-class ClassExistenceResource implements SelfCheckingResourceInterface, \Serializable
+class ClassExistenceResource implements SelfCheckingResourceInterface
 {
     private $resource;
     private $exists;
@@ -32,7 +34,7 @@ class ClassExistenceResource implements SelfCheckingResourceInterface, \Serializ
      * @param string    $resource The fully-qualified class name
      * @param bool|null $exists   Boolean when the existency check has already been done
      */
-    public function __construct($resource, $exists = null)
+    public function __construct(string $resource, bool $exists = null)
     {
         $this->resource = $resource;
         if (null !== $exists) {
@@ -112,22 +114,20 @@ public function isFresh($timestamp)
     /**
      * @internal
      */
-    public function serialize()
+    public function __sleep(): array
     {
         if (null === $this->exists) {
             $this->isFresh(0);
         }
 
-        return serialize([$this->resource, $this->exists]);
+        return ['resource', 'exists'];
     }
 
     /**
      * @internal
      */
-    public function unserialize($serialized)
+    public function __wakeup()
     {
-        list($this->resource, $this->exists) = unserialize($serialized);
-
         if (\is_bool($this->exists)) {
             $this->exists = [$this->exists, null];
         }
@@ -190,12 +190,17 @@ public static function throwOnRequiredClass($class, \Exception $previous = null)
             'args' => [$class],
         ];
 
-        if (false === $i = array_search($autoloadFrame, $trace, true)) {
+        if (\PHP_VERSION_ID >= 80000 && isset($trace[1])) {
+            $callerFrame = $trace[1];
+            $i = 2;
+        } elseif (false !== $i = array_search($autoloadFrame, $trace, true)) {
+            $callerFrame = $trace[++$i];
+        } else {
             throw $e;
         }
 
-        if (isset($trace[++$i]['function']) && !isset($trace[$i]['class'])) {
-            switch ($trace[$i]['function']) {
+        if (isset($callerFrame['function']) && !isset($callerFrame['class'])) {
+            switch ($callerFrame['function']) {
                 case 'get_class_methods':
                 case 'get_class_vars':
                 case 'get_parent_class':
@@ -214,8 +219,8 @@ public static function throwOnRequiredClass($class, \Exception $previous = null)
             }
 
             $props = [
-                'file' => isset($trace[$i]['file']) ? $trace[$i]['file'] : null,
-                'line' => isset($trace[$i]['line']) ? $trace[$i]['line'] : null,
+                'file' => isset($callerFrame['file']) ? $callerFrame['file'] : null,
+                'line' => isset($callerFrame['line']) ? $callerFrame['line'] : null,
                 'trace' => \array_slice($trace, 1 + $i),
             ];
 
diff --git a/vendor/symfony/config/Resource/ComposerResource.php b/vendor/symfony/config/Resource/ComposerResource.php
index 9fb304bea8..822766b75b 100644
--- a/vendor/symfony/config/Resource/ComposerResource.php
+++ b/vendor/symfony/config/Resource/ComposerResource.php
@@ -15,8 +15,10 @@
  * ComposerResource tracks the PHP version and Composer dependencies.
  *
  * @author Nicolas Grekas <p@tchwork.com>
+ *
+ * @final since Symfony 4.3
  */
-class ComposerResource implements SelfCheckingResourceInterface, \Serializable
+class ComposerResource implements SelfCheckingResourceInterface
 {
     private $vendors;
 
@@ -51,22 +53,6 @@ public function isFresh($timestamp)
         return array_values(self::$runtimeVendors) === array_values($this->vendors);
     }
 
-    /**
-     * @internal
-     */
-    public function serialize()
-    {
-        return serialize($this->vendors);
-    }
-
-    /**
-     * @internal
-     */
-    public function unserialize($serialized)
-    {
-        $this->vendors = unserialize($serialized);
-    }
-
     private static function refresh()
     {
         self::$runtimeVendors = [];
@@ -74,7 +60,7 @@ private static function refresh()
         foreach (get_declared_classes() as $class) {
             if ('C' === $class[0] && 0 === strpos($class, 'ComposerAutoloaderInit')) {
                 $r = new \ReflectionClass($class);
-                $v = \dirname(\dirname($r->getFileName()));
+                $v = \dirname($r->getFileName(), 2);
                 if (file_exists($v.'/composer/installed.json')) {
                     self::$runtimeVendors[$v] = @filemtime($v.'/composer/installed.json');
                 }
diff --git a/vendor/symfony/config/Resource/DirectoryResource.php b/vendor/symfony/config/Resource/DirectoryResource.php
index e79b19ec2d..3d703db7f6 100644
--- a/vendor/symfony/config/Resource/DirectoryResource.php
+++ b/vendor/symfony/config/Resource/DirectoryResource.php
@@ -15,8 +15,10 @@
  * DirectoryResource represents a resources stored in a subdirectory tree.
  *
  * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @final since Symfony 4.3
  */
-class DirectoryResource implements SelfCheckingResourceInterface, \Serializable
+class DirectoryResource implements SelfCheckingResourceInterface
 {
     private $resource;
     private $pattern;
@@ -27,7 +29,7 @@ class DirectoryResource implements SelfCheckingResourceInterface, \Serializable
      *
      * @throws \InvalidArgumentException
      */
-    public function __construct($resource, $pattern = null)
+    public function __construct(string $resource, string $pattern = null)
     {
         $this->resource = realpath($resource) ?: (file_exists($resource) ? $resource : false);
         $this->pattern = $pattern;
@@ -103,20 +105,4 @@ public function isFresh($timestamp)
 
         return true;
     }
-
-    /**
-     * @internal
-     */
-    public function serialize()
-    {
-        return serialize([$this->resource, $this->pattern]);
-    }
-
-    /**
-     * @internal
-     */
-    public function unserialize($serialized)
-    {
-        list($this->resource, $this->pattern) = unserialize($serialized);
-    }
 }
diff --git a/vendor/symfony/config/Resource/FileExistenceResource.php b/vendor/symfony/config/Resource/FileExistenceResource.php
index 34047651b7..5723416158 100644
--- a/vendor/symfony/config/Resource/FileExistenceResource.php
+++ b/vendor/symfony/config/Resource/FileExistenceResource.php
@@ -18,8 +18,10 @@
  * The resource can be a file or a directory.
  *
  * @author Charles-Henri Bruyand <charleshenri.bruyand@gmail.com>
+ *
+ * @final since Symfony 4.3
  */
-class FileExistenceResource implements SelfCheckingResourceInterface, \Serializable
+class FileExistenceResource implements SelfCheckingResourceInterface
 {
     private $resource;
 
@@ -28,9 +30,9 @@ class FileExistenceResource implements SelfCheckingResourceInterface, \Serializa
     /**
      * @param string $resource The file path to the resource
      */
-    public function __construct($resource)
+    public function __construct(string $resource)
     {
-        $this->resource = (string) $resource;
+        $this->resource = $resource;
         $this->exists = file_exists($resource);
     }
 
@@ -57,20 +59,4 @@ public function isFresh($timestamp)
     {
         return file_exists($this->resource) === $this->exists;
     }
-
-    /**
-     * @internal
-     */
-    public function serialize()
-    {
-        return serialize([$this->resource, $this->exists]);
-    }
-
-    /**
-     * @internal
-     */
-    public function unserialize($serialized)
-    {
-        list($this->resource, $this->exists) = unserialize($serialized);
-    }
 }
diff --git a/vendor/symfony/config/Resource/FileResource.php b/vendor/symfony/config/Resource/FileResource.php
index bee062377b..95fe8a0bf8 100644
--- a/vendor/symfony/config/Resource/FileResource.php
+++ b/vendor/symfony/config/Resource/FileResource.php
@@ -17,8 +17,10 @@
  * The resource can be a file or a directory.
  *
  * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @final since Symfony 4.3
  */
-class FileResource implements SelfCheckingResourceInterface, \Serializable
+class FileResource implements SelfCheckingResourceInterface
 {
     /**
      * @var string|false
@@ -30,7 +32,7 @@ class FileResource implements SelfCheckingResourceInterface, \Serializable
      *
      * @throws \InvalidArgumentException
      */
-    public function __construct($resource)
+    public function __construct(string $resource)
     {
         $this->resource = realpath($resource) ?: (file_exists($resource) ? $resource : false);
 
@@ -62,20 +64,4 @@ public function isFresh($timestamp)
     {
         return false !== ($filemtime = @filemtime($this->resource)) && $filemtime <= $timestamp;
     }
-
-    /**
-     * @internal
-     */
-    public function serialize()
-    {
-        return serialize($this->resource);
-    }
-
-    /**
-     * @internal
-     */
-    public function unserialize($serialized)
-    {
-        $this->resource = unserialize($serialized);
-    }
 }
diff --git a/vendor/symfony/config/Resource/GlobResource.php b/vendor/symfony/config/Resource/GlobResource.php
index 13d2ee7d70..f825a92911 100644
--- a/vendor/symfony/config/Resource/GlobResource.php
+++ b/vendor/symfony/config/Resource/GlobResource.php
@@ -20,13 +20,18 @@
  * Only existence/removal is tracked (not mtimes.)
  *
  * @author Nicolas Grekas <p@tchwork.com>
+ *
+ * @final since Symfony 4.3
  */
-class GlobResource implements \IteratorAggregate, SelfCheckingResourceInterface, \Serializable
+class GlobResource implements \IteratorAggregate, SelfCheckingResourceInterface
 {
     private $prefix;
     private $pattern;
     private $recursive;
     private $hash;
+    private $forExclusion;
+    private $excludedPrefixes;
+    private $globBrace;
 
     /**
      * @param string $prefix    A directory prefix
@@ -35,11 +40,15 @@ class GlobResource implements \IteratorAggregate, SelfCheckingResourceInterface,
      *
      * @throws \InvalidArgumentException
      */
-    public function __construct($prefix, $pattern, $recursive)
+    public function __construct(string $prefix, string $pattern, bool $recursive, bool $forExclusion = false, array $excludedPrefixes = [])
     {
+        ksort($excludedPrefixes);
         $this->prefix = realpath($prefix) ?: (file_exists($prefix) ? $prefix : false);
         $this->pattern = $pattern;
         $this->recursive = $recursive;
+        $this->forExclusion = $forExclusion;
+        $this->excludedPrefixes = $excludedPrefixes;
+        $this->globBrace = \defined('GLOB_BRACE') ? \GLOB_BRACE : 0;
 
         if (false === $this->prefix) {
             throw new \InvalidArgumentException(sprintf('The path "%s" does not exist.', $prefix));
@@ -56,7 +65,7 @@ public function getPrefix()
      */
     public function __toString()
     {
-        return 'glob.'.$this->prefix.$this->pattern.(int) $this->recursive;
+        return 'glob.'.$this->prefix.(int) $this->recursive.$this->pattern.(int) $this->forExclusion.implode("\0", $this->excludedPrefixes);
     }
 
     /**
@@ -76,52 +85,85 @@ public function isFresh($timestamp)
     /**
      * @internal
      */
-    public function serialize()
+    public function __sleep(): array
     {
         if (null === $this->hash) {
             $this->hash = $this->computeHash();
         }
 
-        return serialize([$this->prefix, $this->pattern, $this->recursive, $this->hash]);
+        return ['prefix', 'pattern', 'recursive', 'hash', 'forExclusion', 'excludedPrefixes'];
     }
 
     /**
      * @internal
      */
-    public function unserialize($serialized)
+    public function __wakeup(): void
     {
-        list($this->prefix, $this->pattern, $this->recursive, $this->hash) = unserialize($serialized);
+        $this->globBrace = \defined('GLOB_BRACE') ? \GLOB_BRACE : 0;
     }
 
+    /**
+     * @return \Traversable
+     */
     public function getIterator()
     {
         if (!file_exists($this->prefix) || (!$this->recursive && '' === $this->pattern)) {
             return;
         }
+        $prefix = str_replace('\\', '/', $this->prefix);
+        $paths = null;
+
+        if (0 !== strpos($this->prefix, 'phar://') && false === strpos($this->pattern, '/**/')) {
+            if ($this->globBrace || false === strpos($this->pattern, '{')) {
+                $paths = glob($this->prefix.$this->pattern, \GLOB_NOSORT | $this->globBrace);
+            } elseif (false === strpos($this->pattern, '\\') || !preg_match('/\\\\[,{}]/', $this->pattern)) {
+                foreach ($this->expandGlob($this->pattern) as $p) {
+                    $paths[] = glob($this->prefix.$p, \GLOB_NOSORT);
+                }
+                $paths = array_merge(...$paths);
+            }
+        }
 
-        if (0 !== strpos($this->prefix, 'phar://') && false === strpos($this->pattern, '/**/') && (\defined('GLOB_BRACE') || false === strpos($this->pattern, '{'))) {
-            $paths = glob($this->prefix.$this->pattern, GLOB_NOSORT | (\defined('GLOB_BRACE') ? GLOB_BRACE : 0));
+        if (null !== $paths) {
             sort($paths);
             foreach ($paths as $path) {
-                if ($this->recursive && is_dir($path)) {
-                    $files = iterator_to_array(new \RecursiveIteratorIterator(
-                        new \RecursiveCallbackFilterIterator(
-                            new \RecursiveDirectoryIterator($path, \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::FOLLOW_SYMLINKS),
-                            function (\SplFileInfo $file) { return '.' !== $file->getBasename()[0]; }
-                        ),
-                        \RecursiveIteratorIterator::LEAVES_ONLY
-                    ));
-                    uasort($files, function (\SplFileInfo $a, \SplFileInfo $b) {
-                        return (string) $a > (string) $b ? 1 : -1;
-                    });
-
-                    foreach ($files as $path => $info) {
-                        if ($info->isFile()) {
-                            yield $path => $info;
+                if ($this->excludedPrefixes) {
+                    $normalizedPath = str_replace('\\', '/', $path);
+                    do {
+                        if (isset($this->excludedPrefixes[$dirPath = $normalizedPath])) {
+                            continue 2;
                         }
-                    }
-                } elseif (is_file($path)) {
+                    } while ($prefix !== $dirPath && $dirPath !== $normalizedPath = \dirname($dirPath));
+                }
+
+                if (is_file($path)) {
+                    yield $path => new \SplFileInfo($path);
+                }
+                if (!is_dir($path)) {
+                    continue;
+                }
+                if ($this->forExclusion) {
                     yield $path => new \SplFileInfo($path);
+                    continue;
+                }
+                if (!$this->recursive || isset($this->excludedPrefixes[str_replace('\\', '/', $path)])) {
+                    continue;
+                }
+                $files = iterator_to_array(new \RecursiveIteratorIterator(
+                    new \RecursiveCallbackFilterIterator(
+                        new \RecursiveDirectoryIterator($path, \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::FOLLOW_SYMLINKS),
+                        function (\SplFileInfo $file, $path) {
+                            return !isset($this->excludedPrefixes[str_replace('\\', '/', $path)]) && '.' !== $file->getBasename()[0];
+                        }
+                    ),
+                    \RecursiveIteratorIterator::LEAVES_ONLY
+                ));
+                uasort($files, 'strnatcmp');
+
+                foreach ($files as $path => $info) {
+                    if ($info->isFile()) {
+                        yield $path => $info;
+                    }
                 }
             }
 
@@ -140,13 +182,23 @@ function (\SplFileInfo $file) { return '.' !== $file->getBasename()[0]; }
 
         $prefixLen = \strlen($this->prefix);
         foreach ($finder->followLinks()->sortByName()->in($this->prefix) as $path => $info) {
-            if (preg_match($regex, substr('\\' === \DIRECTORY_SEPARATOR ? str_replace('\\', '/', $path) : $path, $prefixLen)) && $info->isFile()) {
-                yield $path => $info;
+            $normalizedPath = str_replace('\\', '/', $path);
+            if (!preg_match($regex, substr($normalizedPath, $prefixLen)) || !$info->isFile()) {
+                continue;
             }
+            if ($this->excludedPrefixes) {
+                do {
+                    if (isset($this->excludedPrefixes[$dirPath = $normalizedPath])) {
+                        continue 2;
+                    }
+                } while ($prefix !== $dirPath && $dirPath !== $normalizedPath = \dirname($dirPath));
+            }
+
+            yield $path => $info;
         }
     }
 
-    private function computeHash()
+    private function computeHash(): string
     {
         $hash = hash_init('md5');
 
@@ -156,4 +208,34 @@ private function computeHash()
 
         return hash_final($hash);
     }
+
+    private function expandGlob(string $pattern): array
+    {
+        $segments = preg_split('/\{([^{}]*+)\}/', $pattern, -1, \PREG_SPLIT_DELIM_CAPTURE);
+        $paths = [$segments[0]];
+        $patterns = [];
+
+        for ($i = 1; $i < \count($segments); $i += 2) {
+            $patterns = [];
+
+            foreach (explode(',', $segments[$i]) as $s) {
+                foreach ($paths as $p) {
+                    $patterns[] = $p.$s.$segments[1 + $i];
+                }
+            }
+
+            $paths = $patterns;
+        }
+
+        $j = 0;
+        foreach ($patterns as $i => $p) {
+            if (false !== strpos($p, '{')) {
+                $p = $this->expandGlob($p);
+                array_splice($paths, $i + $j, 1, $p);
+                $j += \count($p) - 1;
+            }
+        }
+
+        return $paths;
+    }
 }
diff --git a/vendor/symfony/config/Resource/ReflectionClassResource.php b/vendor/symfony/config/Resource/ReflectionClassResource.php
index cfab1f6c10..2b58bd6632 100644
--- a/vendor/symfony/config/Resource/ReflectionClassResource.php
+++ b/vendor/symfony/config/Resource/ReflectionClassResource.php
@@ -11,13 +11,17 @@
 
 namespace Symfony\Component\Config\Resource;
 
-use Symfony\Component\DependencyInjection\ServiceSubscriberInterface;
+use Symfony\Component\DependencyInjection\ServiceSubscriberInterface as LegacyServiceSubscriberInterface;
 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+use Symfony\Component\Messenger\Handler\MessageSubscriberInterface;
+use Symfony\Contracts\Service\ServiceSubscriberInterface;
 
 /**
  * @author Nicolas Grekas <p@tchwork.com>
+ *
+ * @final since Symfony 4.3
  */
-class ReflectionClassResource implements SelfCheckingResourceInterface, \Serializable
+class ReflectionClassResource implements SelfCheckingResourceInterface
 {
     private $files = [];
     private $className;
@@ -25,7 +29,7 @@ class ReflectionClassResource implements SelfCheckingResourceInterface, \Seriali
     private $excludedVendors = [];
     private $hash;
 
-    public function __construct(\ReflectionClass $classReflector, $excludedVendors = [])
+    public function __construct(\ReflectionClass $classReflector, array $excludedVendors = [])
     {
         $this->className = $classReflector->name;
         $this->classReflector = $classReflector;
@@ -60,22 +64,14 @@ public function __toString()
     /**
      * @internal
      */
-    public function serialize()
+    public function __sleep(): array
     {
         if (null === $this->hash) {
             $this->hash = $this->computeHash();
             $this->loadFiles($this->classReflector);
         }
 
-        return serialize([$this->files, $this->className, $this->hash]);
-    }
-
-    /**
-     * @internal
-     */
-    public function unserialize($serialized)
-    {
-        list($this->files, $this->className, $this->hash) = unserialize($serialized);
+        return ['files', 'className', 'hash'];
     }
 
     private function loadFiles(\ReflectionClass $class)
@@ -102,7 +98,7 @@ private function loadFiles(\ReflectionClass $class)
         } while ($class = $class->getParentClass());
     }
 
-    private function computeHash()
+    private function computeHash(): string
     {
         if (null === $this->classReflector) {
             try {
@@ -121,7 +117,7 @@ private function computeHash()
         return hash_final($hash);
     }
 
-    private function generateSignature(\ReflectionClass $class)
+    private function generateSignature(\ReflectionClass $class): iterable
     {
         yield $class->getDocComment();
         yield (int) $class->isFinal();
@@ -148,65 +144,60 @@ private function generateSignature(\ReflectionClass $class)
             }
         }
 
-        if (\defined('HHVM_VERSION')) {
-            foreach ($class->getMethods(\ReflectionMethod::IS_PUBLIC | \ReflectionMethod::IS_PROTECTED) as $m) {
-                // workaround HHVM bug with variadics, see https://github.com/facebook/hhvm/issues/5762
-                yield preg_replace('/^  @@.*/m', '', new ReflectionMethodHhvmWrapper($m->class, $m->name));
-            }
-        } else {
-            foreach ($class->getMethods(\ReflectionMethod::IS_PUBLIC | \ReflectionMethod::IS_PROTECTED) as $m) {
-                $defaults = [];
-                $parametersWithUndefinedConstants = [];
-                foreach ($m->getParameters() as $p) {
-                    if (!$p->isDefaultValueAvailable()) {
-                        $defaults[$p->name] = null;
+        foreach ($class->getMethods(\ReflectionMethod::IS_PUBLIC | \ReflectionMethod::IS_PROTECTED) as $m) {
+            $defaults = [];
+            $parametersWithUndefinedConstants = [];
+            foreach ($m->getParameters() as $p) {
+                if (!$p->isDefaultValueAvailable()) {
+                    $defaults[$p->name] = null;
 
-                        continue;
-                    }
+                    continue;
+                }
 
-                    if (!$p->isDefaultValueConstant() || \defined($p->getDefaultValueConstantName())) {
-                        $defaults[$p->name] = $p->getDefaultValue();
+                if (!$p->isDefaultValueConstant() || \defined($p->getDefaultValueConstantName())) {
+                    $defaults[$p->name] = $p->getDefaultValue();
 
-                        continue;
-                    }
-
-                    $defaults[$p->name] = $p->getDefaultValueConstantName();
-                    $parametersWithUndefinedConstants[$p->name] = true;
+                    continue;
                 }
 
-                if (!$parametersWithUndefinedConstants) {
-                    yield preg_replace('/^  @@.*/m', '', $m);
-                } else {
-                    $stack = [
-                        $m->getDocComment(),
-                        $m->getName(),
-                        $m->isAbstract(),
-                        $m->isFinal(),
-                        $m->isStatic(),
-                        $m->isPublic(),
-                        $m->isPrivate(),
-                        $m->isProtected(),
-                        $m->returnsReference(),
-                        \PHP_VERSION_ID >= 70000 && $m->hasReturnType() ? (\PHP_VERSION_ID >= 70100 ? $m->getReturnType()->getName() : (string) $m->getReturnType()) : '',
-                    ];
-
-                    foreach ($m->getParameters() as $p) {
-                        if (!isset($parametersWithUndefinedConstants[$p->name])) {
-                            $stack[] = (string) $p;
-                        } else {
-                            $stack[] = $p->isOptional();
-                            $stack[] = \PHP_VERSION_ID >= 70000 && $p->hasType() ? (\PHP_VERSION_ID >= 70100 ? $p->getType()->getName() : (string) $p->getType()) : '';
-                            $stack[] = $p->isPassedByReference();
-                            $stack[] = \PHP_VERSION_ID >= 50600 ? $p->isVariadic() : '';
-                            $stack[] = $p->getName();
-                        }
-                    }
+                $defaults[$p->name] = $p->getDefaultValueConstantName();
+                $parametersWithUndefinedConstants[$p->name] = true;
+            }
+
+            if (!$parametersWithUndefinedConstants) {
+                yield preg_replace('/^  @@.*/m', '', $m);
+            } else {
+                $t = $m->getReturnType();
+                $stack = [
+                    $m->getDocComment(),
+                    $m->getName(),
+                    $m->isAbstract(),
+                    $m->isFinal(),
+                    $m->isStatic(),
+                    $m->isPublic(),
+                    $m->isPrivate(),
+                    $m->isProtected(),
+                    $m->returnsReference(),
+                    $t instanceof \ReflectionNamedType ? ((string) $t->allowsNull()).$t->getName() : (string) $t,
+                ];
 
-                    yield implode(',', $stack);
+                foreach ($m->getParameters() as $p) {
+                    if (!isset($parametersWithUndefinedConstants[$p->name])) {
+                        $stack[] = (string) $p;
+                    } else {
+                        $t = $p->getType();
+                        $stack[] = $p->isOptional();
+                        $stack[] = $t instanceof \ReflectionNamedType ? ((string) $t->allowsNull()).$t->getName() : (string) $t;
+                        $stack[] = $p->isPassedByReference();
+                        $stack[] = $p->isVariadic();
+                        $stack[] = $p->getName();
+                    }
                 }
 
-                yield print_r($defaults, true);
+                yield implode(',', $stack);
             }
+
+            yield print_r($defaults, true);
         }
 
         if ($class->isAbstract() || $class->isInterface() || $class->isTrait()) {
@@ -215,40 +206,22 @@ private function generateSignature(\ReflectionClass $class)
 
         if (interface_exists(EventSubscriberInterface::class, false) && $class->isSubclassOf(EventSubscriberInterface::class)) {
             yield EventSubscriberInterface::class;
-            yield print_r(\call_user_func([$class->name, 'getSubscribedEvents']), true);
+            yield print_r($class->name::getSubscribedEvents(), true);
         }
 
-        if (interface_exists(ServiceSubscriberInterface::class, false) && $class->isSubclassOf(ServiceSubscriberInterface::class)) {
-            yield ServiceSubscriberInterface::class;
-            yield print_r(\call_user_func([$class->name, 'getSubscribedServices']), true);
+        if (interface_exists(MessageSubscriberInterface::class, false) && $class->isSubclassOf(MessageSubscriberInterface::class)) {
+            yield MessageSubscriberInterface::class;
+            foreach ($class->name::getHandledMessages() as $key => $value) {
+                yield $key.print_r($value, true);
+            }
         }
-    }
-}
-
-/**
- * @internal
- */
-class ReflectionMethodHhvmWrapper extends \ReflectionMethod
-{
-    public function getParameters()
-    {
-        $params = [];
 
-        foreach (parent::getParameters() as $i => $p) {
-            $params[] = new ReflectionParameterHhvmWrapper([$this->class, $this->name], $i);
+        if (interface_exists(LegacyServiceSubscriberInterface::class, false) && $class->isSubclassOf(LegacyServiceSubscriberInterface::class)) {
+            yield LegacyServiceSubscriberInterface::class;
+            yield print_r([$class->name, 'getSubscribedServices'](), true);
+        } elseif (interface_exists(ServiceSubscriberInterface::class, false) && $class->isSubclassOf(ServiceSubscriberInterface::class)) {
+            yield ServiceSubscriberInterface::class;
+            yield print_r($class->name::getSubscribedServices(), true);
         }
-
-        return $params;
-    }
-}
-
-/**
- * @internal
- */
-class ReflectionParameterHhvmWrapper extends \ReflectionParameter
-{
-    public function getDefaultValue()
-    {
-        return [$this->isVariadic(), $this->isDefaultValueAvailable() ? parent::getDefaultValue() : null];
     }
 }
diff --git a/vendor/symfony/config/ResourceCheckerConfigCache.php b/vendor/symfony/config/ResourceCheckerConfigCache.php
index 092b95bf01..d41b3c43c7 100644
--- a/vendor/symfony/config/ResourceCheckerConfigCache.php
+++ b/vendor/symfony/config/ResourceCheckerConfigCache.php
@@ -37,7 +37,7 @@ class ResourceCheckerConfigCache implements ConfigCacheInterface
      * @param string                              $file             The absolute cache path
      * @param iterable|ResourceCheckerInterface[] $resourceCheckers The ResourceCheckers to use for the freshness check
      */
-    public function __construct($file, $resourceCheckers = [])
+    public function __construct(string $file, iterable $resourceCheckers = [])
     {
         $this->file = $file;
         $this->resourceCheckers = $resourceCheckers;
@@ -137,28 +137,25 @@ public function write($content, array $metadata = null)
             }
         }
 
-        if (\function_exists('opcache_invalidate') && filter_var(ini_get('opcache.enable'), FILTER_VALIDATE_BOOLEAN)) {
+        if (\function_exists('opcache_invalidate') && filter_var(ini_get('opcache.enable'), \FILTER_VALIDATE_BOOLEAN)) {
             @opcache_invalidate($this->file, true);
         }
     }
 
     /**
      * Gets the meta file path.
-     *
-     * @return string The meta file path
      */
-    private function getMetaFile()
+    private function getMetaFile(): string
     {
         return $this->file.'.meta';
     }
 
-    private function safelyUnserialize($file)
+    private function safelyUnserialize(string $file)
     {
-        $e = null;
         $meta = false;
         $content = file_get_contents($file);
         $signalingException = new \UnexpectedValueException();
-        $prevUnserializeHandler = ini_set('unserialize_callback_func', '');
+        $prevUnserializeHandler = ini_set('unserialize_callback_func', self::class.'::handleUnserializeCallback');
         $prevErrorHandler = set_error_handler(function ($type, $msg, $file, $line, $context = []) use (&$prevErrorHandler, $signalingException) {
             if (__FILE__ === $file) {
                 throw $signalingException;
@@ -169,15 +166,23 @@ private function safelyUnserialize($file)
 
         try {
             $meta = unserialize($content);
-        } catch (\Error $e) {
-        } catch (\Exception $e) {
-        }
-        restore_error_handler();
-        ini_set('unserialize_callback_func', $prevUnserializeHandler);
-        if (null !== $e && $e !== $signalingException) {
-            throw $e;
+        } catch (\Throwable $e) {
+            if ($e !== $signalingException) {
+                throw $e;
+            }
+        } finally {
+            restore_error_handler();
+            ini_set('unserialize_callback_func', $prevUnserializeHandler);
         }
 
         return $meta;
     }
+
+    /**
+     * @internal
+     */
+    public static function handleUnserializeCallback($class)
+    {
+        trigger_error('Class not found: '.$class);
+    }
 }
diff --git a/vendor/symfony/config/ResourceCheckerConfigCacheFactory.php b/vendor/symfony/config/ResourceCheckerConfigCacheFactory.php
index c00fa7db1b..0338635ff5 100644
--- a/vendor/symfony/config/ResourceCheckerConfigCacheFactory.php
+++ b/vendor/symfony/config/ResourceCheckerConfigCacheFactory.php
@@ -24,7 +24,7 @@ class ResourceCheckerConfigCacheFactory implements ConfigCacheFactoryInterface
     /**
      * @param iterable|ResourceCheckerInterface[] $resourceCheckers
      */
-    public function __construct($resourceCheckers = [])
+    public function __construct(iterable $resourceCheckers = [])
     {
         $this->resourceCheckers = $resourceCheckers;
     }
@@ -40,7 +40,7 @@ public function cache($file, $callback)
 
         $cache = new ResourceCheckerConfigCache($file, $this->resourceCheckers);
         if (!$cache->isFresh()) {
-            \call_user_func($callback, $cache);
+            $callback($cache);
         }
 
         return $cache;
diff --git a/vendor/symfony/config/ResourceCheckerInterface.php b/vendor/symfony/config/ResourceCheckerInterface.php
index 612d777864..ac0d402495 100644
--- a/vendor/symfony/config/ResourceCheckerInterface.php
+++ b/vendor/symfony/config/ResourceCheckerInterface.php
@@ -30,8 +30,6 @@ interface ResourceCheckerInterface
      * Queries the ResourceChecker whether it can validate a given
      * resource or not.
      *
-     * @param ResourceInterface $metadata The resource to be checked for freshness
-     *
      * @return bool True if the ResourceChecker can handle this resource type, false if not
      */
     public function supports(ResourceInterface $metadata);
@@ -39,8 +37,7 @@ public function supports(ResourceInterface $metadata);
     /**
      * Validates the resource.
      *
-     * @param ResourceInterface $resource  The resource to be validated
-     * @param int               $timestamp The timestamp at which the cache associated with this resource was created
+     * @param int $timestamp The timestamp at which the cache associated with this resource was created
      *
      * @return bool True if the resource has not changed since the given timestamp, false otherwise
      */
diff --git a/vendor/symfony/config/Tests/ConfigCacheFactoryTest.php b/vendor/symfony/config/Tests/ConfigCacheFactoryTest.php
deleted file mode 100644
index 6190b9b450..0000000000
--- a/vendor/symfony/config/Tests/ConfigCacheFactoryTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\ConfigCacheFactory;
-
-class ConfigCacheFactoryTest extends TestCase
-{
-    public function testCacheWithInvalidCallback()
-    {
-        $this->expectException('InvalidArgumentException');
-        $this->expectExceptionMessage('Invalid type for callback argument. Expected callable, but got "object".');
-        $cacheFactory = new ConfigCacheFactory(true);
-
-        $cacheFactory->cache('file', new \stdClass());
-    }
-}
diff --git a/vendor/symfony/config/Tests/ConfigCacheTest.php b/vendor/symfony/config/Tests/ConfigCacheTest.php
deleted file mode 100644
index d0b70899b5..0000000000
--- a/vendor/symfony/config/Tests/ConfigCacheTest.php
+++ /dev/null
@@ -1,99 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\ConfigCache;
-use Symfony\Component\Config\Tests\Resource\ResourceStub;
-
-class ConfigCacheTest extends TestCase
-{
-    private $cacheFile = null;
-
-    protected function setUp()
-    {
-        $this->cacheFile = tempnam(sys_get_temp_dir(), 'config_');
-    }
-
-    protected function tearDown()
-    {
-        $files = [$this->cacheFile, $this->cacheFile.'.meta'];
-
-        foreach ($files as $file) {
-            if (file_exists($file)) {
-                unlink($file);
-            }
-        }
-    }
-
-    /**
-     * @dataProvider debugModes
-     */
-    public function testCacheIsNotValidIfNothingHasBeenCached($debug)
-    {
-        unlink($this->cacheFile); // remove tempnam() side effect
-        $cache = new ConfigCache($this->cacheFile, $debug);
-
-        $this->assertFalse($cache->isFresh());
-    }
-
-    public function testIsAlwaysFreshInProduction()
-    {
-        $staleResource = new ResourceStub();
-        $staleResource->setFresh(false);
-
-        $cache = new ConfigCache($this->cacheFile, false);
-        $cache->write('', [$staleResource]);
-
-        $this->assertTrue($cache->isFresh());
-    }
-
-    /**
-     * @dataProvider debugModes
-     */
-    public function testIsFreshWhenNoResourceProvided($debug)
-    {
-        $cache = new ConfigCache($this->cacheFile, $debug);
-        $cache->write('', []);
-        $this->assertTrue($cache->isFresh());
-    }
-
-    public function testFreshResourceInDebug()
-    {
-        $freshResource = new ResourceStub();
-        $freshResource->setFresh(true);
-
-        $cache = new ConfigCache($this->cacheFile, true);
-        $cache->write('', [$freshResource]);
-
-        $this->assertTrue($cache->isFresh());
-    }
-
-    public function testStaleResourceInDebug()
-    {
-        $staleResource = new ResourceStub();
-        $staleResource->setFresh(false);
-
-        $cache = new ConfigCache($this->cacheFile, true);
-        $cache->write('', [$staleResource]);
-
-        $this->assertFalse($cache->isFresh());
-    }
-
-    public function debugModes()
-    {
-        return [
-            [true],
-            [false],
-        ];
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/ArrayNodeTest.php b/vendor/symfony/config/Tests/Definition/ArrayNodeTest.php
deleted file mode 100644
index 25c2cfc699..0000000000
--- a/vendor/symfony/config/Tests/Definition/ArrayNodeTest.php
+++ /dev/null
@@ -1,237 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\ArrayNode;
-use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException;
-use Symfony\Component\Config\Definition\ScalarNode;
-
-class ArrayNodeTest extends TestCase
-{
-    public function testNormalizeThrowsExceptionWhenFalseIsNotAllowed()
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidTypeException');
-        $node = new ArrayNode('root');
-        $node->normalize(false);
-    }
-
-    public function testExceptionThrownOnUnrecognizedChild()
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidConfigurationException');
-        $this->expectExceptionMessage('Unrecognized option "foo" under "root"');
-        $node = new ArrayNode('root');
-        $node->normalize(['foo' => 'bar']);
-    }
-
-    public function ignoreAndRemoveMatrixProvider()
-    {
-        $unrecognizedOptionException = new InvalidConfigurationException('Unrecognized option "foo" under "root"');
-
-        return [
-            [true, true, [], 'no exception is thrown for an unrecognized child if the ignoreExtraKeys option is set to true'],
-            [true, false, ['foo' => 'bar'], 'extra keys are not removed when ignoreExtraKeys second option is set to false'],
-            [false, true, $unrecognizedOptionException],
-            [false, false, $unrecognizedOptionException],
-        ];
-    }
-
-    /**
-     * @dataProvider ignoreAndRemoveMatrixProvider
-     */
-    public function testIgnoreAndRemoveBehaviors($ignore, $remove, $expected, $message = '')
-    {
-        if ($expected instanceof \Exception) {
-            $this->expectException(\get_class($expected));
-            $this->expectExceptionMessage($expected->getMessage());
-        }
-        $node = new ArrayNode('root');
-        $node->setIgnoreExtraKeys($ignore, $remove);
-        $result = $node->normalize(['foo' => 'bar']);
-        $this->assertSame($expected, $result, $message);
-    }
-
-    /**
-     * @dataProvider getPreNormalizationTests
-     */
-    public function testPreNormalize($denormalized, $normalized)
-    {
-        $node = new ArrayNode('foo');
-
-        $r = new \ReflectionMethod($node, 'preNormalize');
-        $r->setAccessible(true);
-
-        $this->assertSame($normalized, $r->invoke($node, $denormalized));
-    }
-
-    public function getPreNormalizationTests()
-    {
-        return [
-            [
-                ['foo-bar' => 'foo'],
-                ['foo_bar' => 'foo'],
-            ],
-            [
-                ['foo-bar_moo' => 'foo'],
-                ['foo-bar_moo' => 'foo'],
-            ],
-            [
-                ['anything-with-dash-and-no-underscore' => 'first', 'no_dash' => 'second'],
-                ['anything_with_dash_and_no_underscore' => 'first', 'no_dash' => 'second'],
-            ],
-            [
-                ['foo-bar' => null, 'foo_bar' => 'foo'],
-                ['foo-bar' => null, 'foo_bar' => 'foo'],
-            ],
-        ];
-    }
-
-    /**
-     * @dataProvider getZeroNamedNodeExamplesData
-     */
-    public function testNodeNameCanBeZero($denormalized, $normalized)
-    {
-        $zeroNode = new ArrayNode(0);
-        $zeroNode->addChild(new ScalarNode('name'));
-        $fiveNode = new ArrayNode(5);
-        $fiveNode->addChild(new ScalarNode(0));
-        $fiveNode->addChild(new ScalarNode('new_key'));
-        $rootNode = new ArrayNode('root');
-        $rootNode->addChild($zeroNode);
-        $rootNode->addChild($fiveNode);
-        $rootNode->addChild(new ScalarNode('string_key'));
-        $r = new \ReflectionMethod($rootNode, 'normalizeValue');
-        $r->setAccessible(true);
-
-        $this->assertSame($normalized, $r->invoke($rootNode, $denormalized));
-    }
-
-    public function getZeroNamedNodeExamplesData()
-    {
-        return [
-            [
-                [
-                    0 => [
-                        'name' => 'something',
-                    ],
-                    5 => [
-                        0 => 'this won\'t work too',
-                        'new_key' => 'some other value',
-                    ],
-                    'string_key' => 'just value',
-                ],
-                [
-                    0 => [
-                        'name' => 'something',
-                    ],
-                    5 => [
-                        0 => 'this won\'t work too',
-                        'new_key' => 'some other value',
-                    ],
-                    'string_key' => 'just value',
-                ],
-            ],
-        ];
-    }
-
-    /**
-     * @dataProvider getPreNormalizedNormalizedOrderedData
-     */
-    public function testChildrenOrderIsMaintainedOnNormalizeValue($prenormalized, $normalized)
-    {
-        $scalar1 = new ScalarNode('1');
-        $scalar2 = new ScalarNode('2');
-        $scalar3 = new ScalarNode('3');
-        $node = new ArrayNode('foo');
-        $node->addChild($scalar1);
-        $node->addChild($scalar3);
-        $node->addChild($scalar2);
-
-        $r = new \ReflectionMethod($node, 'normalizeValue');
-        $r->setAccessible(true);
-
-        $this->assertSame($normalized, $r->invoke($node, $prenormalized));
-    }
-
-    public function getPreNormalizedNormalizedOrderedData()
-    {
-        return [
-            [
-                ['2' => 'two', '1' => 'one', '3' => 'three'],
-                ['2' => 'two', '1' => 'one', '3' => 'three'],
-            ],
-        ];
-    }
-
-    public function testAddChildEmptyName()
-    {
-        $this->expectException('InvalidArgumentException');
-        $this->expectExceptionMessage('Child nodes must be named.');
-        $node = new ArrayNode('root');
-
-        $childNode = new ArrayNode('');
-        $node->addChild($childNode);
-    }
-
-    public function testAddChildNameAlreadyExists()
-    {
-        $this->expectException('InvalidArgumentException');
-        $this->expectExceptionMessage('A child node named "foo" already exists.');
-        $node = new ArrayNode('root');
-
-        $childNode = new ArrayNode('foo');
-        $node->addChild($childNode);
-
-        $childNodeWithSameName = new ArrayNode('foo');
-        $node->addChild($childNodeWithSameName);
-    }
-
-    public function testGetDefaultValueWithoutDefaultValue()
-    {
-        $this->expectException('RuntimeException');
-        $this->expectExceptionMessage('The node at path "foo" has no default value.');
-        $node = new ArrayNode('foo');
-        $node->getDefaultValue();
-    }
-
-    public function testSetDeprecated()
-    {
-        $childNode = new ArrayNode('foo');
-        $childNode->setDeprecated('"%node%" is deprecated');
-
-        $this->assertTrue($childNode->isDeprecated());
-        $this->assertSame('"foo" is deprecated', $childNode->getDeprecationMessage($childNode->getName(), $childNode->getPath()));
-
-        $node = new ArrayNode('root');
-        $node->addChild($childNode);
-
-        $deprecationTriggered = false;
-        $deprecationHandler = function ($level, $message, $file, $line) use (&$prevErrorHandler, &$deprecationTriggered) {
-            if (E_USER_DEPRECATED === $level) {
-                return $deprecationTriggered = true;
-            }
-
-            return $prevErrorHandler ? $prevErrorHandler($level, $message, $file, $line) : false;
-        };
-
-        $prevErrorHandler = set_error_handler($deprecationHandler);
-        $node->finalize([]);
-        restore_error_handler();
-
-        $this->assertFalse($deprecationTriggered, '->finalize() should not trigger if the deprecated node is not set');
-
-        $prevErrorHandler = set_error_handler($deprecationHandler);
-        $node->finalize(['foo' => []]);
-        restore_error_handler();
-        $this->assertTrue($deprecationTriggered, '->finalize() should trigger if the deprecated node is set');
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/BooleanNodeTest.php b/vendor/symfony/config/Tests/Definition/BooleanNodeTest.php
deleted file mode 100644
index 8552eeba39..0000000000
--- a/vendor/symfony/config/Tests/Definition/BooleanNodeTest.php
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\BooleanNode;
-
-class BooleanNodeTest extends TestCase
-{
-    /**
-     * @dataProvider getValidValues
-     */
-    public function testNormalize($value)
-    {
-        $node = new BooleanNode('test');
-        $this->assertSame($value, $node->normalize($value));
-    }
-
-    /**
-     * @dataProvider getValidValues
-     *
-     * @param bool $value
-     */
-    public function testValidNonEmptyValues($value)
-    {
-        $node = new BooleanNode('test');
-        $node->setAllowEmptyValue(false);
-
-        $this->assertSame($value, $node->finalize($value));
-    }
-
-    public function getValidValues()
-    {
-        return [
-            [false],
-            [true],
-        ];
-    }
-
-    /**
-     * @dataProvider getInvalidValues
-     */
-    public function testNormalizeThrowsExceptionOnInvalidValues($value)
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidTypeException');
-        $node = new BooleanNode('test');
-        $node->normalize($value);
-    }
-
-    public function getInvalidValues()
-    {
-        return [
-            [null],
-            [''],
-            ['foo'],
-            [0],
-            [1],
-            [0.0],
-            [0.1],
-            [[]],
-            [['foo' => 'bar']],
-            [new \stdClass()],
-        ];
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/Builder/ArrayNodeDefinitionTest.php b/vendor/symfony/config/Tests/Definition/Builder/ArrayNodeDefinitionTest.php
deleted file mode 100644
index 1123b41599..0000000000
--- a/vendor/symfony/config/Tests/Definition/Builder/ArrayNodeDefinitionTest.php
+++ /dev/null
@@ -1,362 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition\Builder;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
-use Symfony\Component\Config\Definition\Builder\ScalarNodeDefinition;
-use Symfony\Component\Config\Definition\Exception\InvalidDefinitionException;
-use Symfony\Component\Config\Definition\Processor;
-
-class ArrayNodeDefinitionTest extends TestCase
-{
-    public function testAppendingSomeNode()
-    {
-        $parent = new ArrayNodeDefinition('root');
-        $child = new ScalarNodeDefinition('child');
-
-        $parent
-            ->children()
-                ->scalarNode('foo')->end()
-                ->scalarNode('bar')->end()
-            ->end()
-            ->append($child);
-
-        $this->assertCount(3, $this->getField($parent, 'children'));
-        $this->assertContains($child, $this->getField($parent, 'children'));
-    }
-
-    /**
-     * @dataProvider providePrototypeNodeSpecificCalls
-     */
-    public function testPrototypeNodeSpecificOption($method, $args)
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidDefinitionException');
-        $node = new ArrayNodeDefinition('root');
-
-        \call_user_func_array([$node, $method], $args);
-
-        $node->getNode();
-    }
-
-    public function providePrototypeNodeSpecificCalls()
-    {
-        return [
-            ['defaultValue', [[]]],
-            ['addDefaultChildrenIfNoneSet', []],
-            ['requiresAtLeastOneElement', []],
-            ['useAttributeAsKey', ['foo']],
-        ];
-    }
-
-    public function testConcreteNodeSpecificOption()
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidDefinitionException');
-        $node = new ArrayNodeDefinition('root');
-        $node
-            ->addDefaultsIfNotSet()
-            ->prototype('array')
-        ;
-        $node->getNode();
-    }
-
-    public function testPrototypeNodesCantHaveADefaultValueWhenUsingDefaultChildren()
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidDefinitionException');
-        $node = new ArrayNodeDefinition('root');
-        $node
-            ->defaultValue([])
-            ->addDefaultChildrenIfNoneSet('foo')
-            ->prototype('array')
-        ;
-        $node->getNode();
-    }
-
-    public function testPrototypedArrayNodeDefaultWhenUsingDefaultChildren()
-    {
-        $node = new ArrayNodeDefinition('root');
-        $node
-            ->addDefaultChildrenIfNoneSet()
-            ->prototype('array')
-        ;
-        $tree = $node->getNode();
-        $this->assertEquals([[]], $tree->getDefaultValue());
-    }
-
-    /**
-     * @dataProvider providePrototypedArrayNodeDefaults
-     */
-    public function testPrototypedArrayNodeDefault($args, $shouldThrowWhenUsingAttrAsKey, $shouldThrowWhenNotUsingAttrAsKey, $defaults)
-    {
-        $node = new ArrayNodeDefinition('root');
-        $node
-            ->addDefaultChildrenIfNoneSet($args)
-            ->prototype('array')
-        ;
-
-        try {
-            $tree = $node->getNode();
-            $this->assertFalse($shouldThrowWhenNotUsingAttrAsKey);
-            $this->assertEquals($defaults, $tree->getDefaultValue());
-        } catch (InvalidDefinitionException $e) {
-            $this->assertTrue($shouldThrowWhenNotUsingAttrAsKey);
-        }
-
-        $node = new ArrayNodeDefinition('root');
-        $node
-            ->useAttributeAsKey('attr')
-            ->addDefaultChildrenIfNoneSet($args)
-            ->prototype('array')
-        ;
-
-        try {
-            $tree = $node->getNode();
-            $this->assertFalse($shouldThrowWhenUsingAttrAsKey);
-            $this->assertEquals($defaults, $tree->getDefaultValue());
-        } catch (InvalidDefinitionException $e) {
-            $this->assertTrue($shouldThrowWhenUsingAttrAsKey);
-        }
-    }
-
-    public function providePrototypedArrayNodeDefaults()
-    {
-        return [
-            [null, true, false, [[]]],
-            [2, true, false, [[], []]],
-            ['2', false, true, ['2' => []]],
-            ['foo', false, true, ['foo' => []]],
-            [['foo'], false, true, ['foo' => []]],
-            [['foo', 'bar'], false, true, ['foo' => [], 'bar' => []]],
-        ];
-    }
-
-    public function testNestedPrototypedArrayNodes()
-    {
-        $nodeDefinition = new ArrayNodeDefinition('root');
-        $nodeDefinition
-            ->addDefaultChildrenIfNoneSet()
-            ->prototype('array')
-                  ->prototype('array')
-        ;
-        $node = $nodeDefinition->getNode();
-
-        $this->assertInstanceOf('Symfony\Component\Config\Definition\PrototypedArrayNode', $node);
-        $this->assertInstanceOf('Symfony\Component\Config\Definition\PrototypedArrayNode', $node->getPrototype());
-    }
-
-    public function testEnabledNodeDefaults()
-    {
-        $node = new ArrayNodeDefinition('root');
-        $node
-            ->canBeEnabled()
-            ->children()
-                ->scalarNode('foo')->defaultValue('bar')->end()
-        ;
-
-        $this->assertEquals(['enabled' => false, 'foo' => 'bar'], $node->getNode()->getDefaultValue());
-    }
-
-    /**
-     * @dataProvider getEnableableNodeFixtures
-     */
-    public function testTrueEnableEnabledNode($expected, $config, $message)
-    {
-        $processor = new Processor();
-        $node = new ArrayNodeDefinition('root');
-        $node
-            ->canBeEnabled()
-            ->children()
-                ->scalarNode('foo')->defaultValue('bar')->end()
-        ;
-
-        $this->assertEquals(
-            $expected,
-            $processor->process($node->getNode(), $config),
-            $message
-        );
-    }
-
-    public function testCanBeDisabled()
-    {
-        $node = new ArrayNodeDefinition('root');
-        $node->canBeDisabled();
-
-        $this->assertTrue($this->getField($node, 'addDefaults'));
-        $this->assertEquals(['enabled' => false], $this->getField($node, 'falseEquivalent'));
-        $this->assertEquals(['enabled' => true], $this->getField($node, 'trueEquivalent'));
-        $this->assertEquals(['enabled' => true], $this->getField($node, 'nullEquivalent'));
-
-        $nodeChildren = $this->getField($node, 'children');
-        $this->assertArrayHasKey('enabled', $nodeChildren);
-
-        $enabledNode = $nodeChildren['enabled'];
-        $this->assertTrue($this->getField($enabledNode, 'default'));
-        $this->assertTrue($this->getField($enabledNode, 'defaultValue'));
-    }
-
-    public function testIgnoreExtraKeys()
-    {
-        $node = new ArrayNodeDefinition('root');
-
-        $this->assertFalse($this->getField($node, 'ignoreExtraKeys'));
-
-        $result = $node->ignoreExtraKeys();
-
-        $this->assertEquals($node, $result);
-        $this->assertTrue($this->getField($node, 'ignoreExtraKeys'));
-    }
-
-    public function testNormalizeKeys()
-    {
-        $node = new ArrayNodeDefinition('root');
-
-        $this->assertTrue($this->getField($node, 'normalizeKeys'));
-
-        $result = $node->normalizeKeys(false);
-
-        $this->assertEquals($node, $result);
-        $this->assertFalse($this->getField($node, 'normalizeKeys'));
-    }
-
-    public function testUnsetChild()
-    {
-        $node = new ArrayNodeDefinition('root');
-        $node
-            ->children()
-                ->scalarNode('value')
-                    ->beforeNormalization()
-                        ->ifTrue(function ($value) {
-                            return empty($value);
-                        })
-                        ->thenUnset()
-                    ->end()
-                ->end()
-            ->end()
-        ;
-
-        $this->assertSame([], $node->getNode()->normalize(['value' => null]));
-    }
-
-    public function testPrototypeVariable()
-    {
-        $node = new ArrayNodeDefinition('root');
-        $this->assertEquals($node->prototype('variable'), $node->variablePrototype());
-    }
-
-    public function testPrototypeScalar()
-    {
-        $node = new ArrayNodeDefinition('root');
-        $this->assertEquals($node->prototype('scalar'), $node->scalarPrototype());
-    }
-
-    public function testPrototypeBoolean()
-    {
-        $node = new ArrayNodeDefinition('root');
-        $this->assertEquals($node->prototype('boolean'), $node->booleanPrototype());
-    }
-
-    public function testPrototypeInteger()
-    {
-        $node = new ArrayNodeDefinition('root');
-        $this->assertEquals($node->prototype('integer'), $node->integerPrototype());
-    }
-
-    public function testPrototypeFloat()
-    {
-        $node = new ArrayNodeDefinition('root');
-        $this->assertEquals($node->prototype('float'), $node->floatPrototype());
-    }
-
-    public function testPrototypeArray()
-    {
-        $node = new ArrayNodeDefinition('root');
-        $this->assertEquals($node->prototype('array'), $node->arrayPrototype());
-    }
-
-    public function testPrototypeEnum()
-    {
-        $node = new ArrayNodeDefinition('root');
-        $this->assertEquals($node->prototype('enum'), $node->enumPrototype());
-    }
-
-    public function getEnableableNodeFixtures()
-    {
-        return [
-            [['enabled' => true, 'foo' => 'bar'], [true], 'true enables an enableable node'],
-            [['enabled' => true, 'foo' => 'bar'], [null], 'null enables an enableable node'],
-            [['enabled' => true, 'foo' => 'bar'], [['enabled' => true]], 'An enableable node can be enabled'],
-            [['enabled' => true, 'foo' => 'baz'], [['foo' => 'baz']], 'any configuration enables an enableable node'],
-            [['enabled' => false, 'foo' => 'baz'], [['foo' => 'baz', 'enabled' => false]], 'An enableable node can be disabled'],
-            [['enabled' => false, 'foo' => 'bar'], [false], 'false disables an enableable node'],
-        ];
-    }
-
-    public function testRequiresAtLeastOneElement()
-    {
-        $node = new ArrayNodeDefinition('root');
-        $node
-            ->requiresAtLeastOneElement()
-            ->integerPrototype();
-
-        $node->getNode()->finalize([1]);
-
-        $this->addToAssertionCount(1);
-    }
-
-    /**
-     * @group legacy
-     * @expectedDeprecation Using Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition::cannotBeEmpty() at path "root" has no effect, consider requiresAtLeastOneElement() instead. In 4.0 both methods will behave the same.
-     */
-    public function testCannotBeEmpty()
-    {
-        $node = new ArrayNodeDefinition('root');
-        $node
-            ->cannotBeEmpty()
-            ->integerPrototype();
-
-        $node->getNode()->finalize([]);
-    }
-
-    public function testSetDeprecated()
-    {
-        $node = new ArrayNodeDefinition('root');
-        $node
-            ->children()
-                ->arrayNode('foo')->setDeprecated('The "%path%" node is deprecated.')->end()
-            ->end()
-        ;
-        $deprecatedNode = $node->getNode()->getChildren()['foo'];
-
-        $this->assertTrue($deprecatedNode->isDeprecated());
-        $this->assertSame('The "root.foo" node is deprecated.', $deprecatedNode->getDeprecationMessage($deprecatedNode->getName(), $deprecatedNode->getPath()));
-    }
-
-    /**
-     * @group legacy
-     * @expectedDeprecation ->cannotBeEmpty() is not applicable to concrete nodes at path "root". In 4.0 it will throw an exception.
-     */
-    public function testCannotBeEmptyOnConcreteNode()
-    {
-        $node = new ArrayNodeDefinition('root');
-        $node->cannotBeEmpty();
-
-        $node->getNode()->finalize([]);
-    }
-
-    protected function getField($object, $field)
-    {
-        $reflection = new \ReflectionProperty($object, $field);
-        $reflection->setAccessible(true);
-
-        return $reflection->getValue($object);
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/Builder/BooleanNodeDefinitionTest.php b/vendor/symfony/config/Tests/Definition/Builder/BooleanNodeDefinitionTest.php
deleted file mode 100644
index 6f568a2df6..0000000000
--- a/vendor/symfony/config/Tests/Definition/Builder/BooleanNodeDefinitionTest.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition\Builder;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\Builder\BooleanNodeDefinition;
-
-class BooleanNodeDefinitionTest extends TestCase
-{
-    public function testCannotBeEmptyThrowsAnException()
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidDefinitionException');
-        $this->expectExceptionMessage('->cannotBeEmpty() is not applicable to BooleanNodeDefinition.');
-        $def = new BooleanNodeDefinition('foo');
-        $def->cannotBeEmpty();
-    }
-
-    public function testSetDeprecated()
-    {
-        $def = new BooleanNodeDefinition('foo');
-        $def->setDeprecated('The "%path%" node is deprecated.');
-
-        $node = $def->getNode();
-
-        $this->assertTrue($node->isDeprecated());
-        $this->assertSame('The "foo" node is deprecated.', $node->getDeprecationMessage($node->getName(), $node->getPath()));
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/Builder/EnumNodeDefinitionTest.php b/vendor/symfony/config/Tests/Definition/Builder/EnumNodeDefinitionTest.php
deleted file mode 100644
index 2e43a1354d..0000000000
--- a/vendor/symfony/config/Tests/Definition/Builder/EnumNodeDefinitionTest.php
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition\Builder;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\Builder\EnumNodeDefinition;
-
-class EnumNodeDefinitionTest extends TestCase
-{
-    public function testWithOneValue()
-    {
-        $def = new EnumNodeDefinition('foo');
-        $def->values(['foo']);
-
-        $node = $def->getNode();
-        $this->assertEquals(['foo'], $node->getValues());
-    }
-
-    public function testWithOneDistinctValue()
-    {
-        $def = new EnumNodeDefinition('foo');
-        $def->values(['foo', 'foo']);
-
-        $node = $def->getNode();
-        $this->assertEquals(['foo'], $node->getValues());
-    }
-
-    public function testNoValuesPassed()
-    {
-        $this->expectException('RuntimeException');
-        $this->expectExceptionMessage('You must call ->values() on enum nodes.');
-        $def = new EnumNodeDefinition('foo');
-        $def->getNode();
-    }
-
-    public function testWithNoValues()
-    {
-        $this->expectException('InvalidArgumentException');
-        $this->expectExceptionMessage('->values() must be called with at least one value.');
-        $def = new EnumNodeDefinition('foo');
-        $def->values([]);
-    }
-
-    public function testGetNode()
-    {
-        $def = new EnumNodeDefinition('foo');
-        $def->values(['foo', 'bar']);
-
-        $node = $def->getNode();
-        $this->assertEquals(['foo', 'bar'], $node->getValues());
-    }
-
-    public function testSetDeprecated()
-    {
-        $def = new EnumNodeDefinition('foo');
-        $def->values(['foo', 'bar']);
-        $def->setDeprecated('The "%path%" node is deprecated.');
-
-        $node = $def->getNode();
-
-        $this->assertTrue($node->isDeprecated());
-        $this->assertSame('The "foo" node is deprecated.', $def->getNode()->getDeprecationMessage($node->getName(), $node->getPath()));
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/Builder/ExprBuilderTest.php b/vendor/symfony/config/Tests/Definition/Builder/ExprBuilderTest.php
deleted file mode 100644
index 2dfb7a0a39..0000000000
--- a/vendor/symfony/config/Tests/Definition/Builder/ExprBuilderTest.php
+++ /dev/null
@@ -1,264 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition\Builder;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\Builder\TreeBuilder;
-
-class ExprBuilderTest extends TestCase
-{
-    public function testAlwaysExpression()
-    {
-        $test = $this->getTestBuilder()
-            ->always($this->returnClosure('new_value'))
-        ->end();
-
-        $this->assertFinalizedValueIs('new_value', $test);
-    }
-
-    public function testIfTrueExpression()
-    {
-        $test = $this->getTestBuilder()
-            ->ifTrue()
-            ->then($this->returnClosure('new_value'))
-        ->end();
-        $this->assertFinalizedValueIs('new_value', $test, ['key' => true]);
-
-        $test = $this->getTestBuilder()
-            ->ifTrue(function ($v) { return true; })
-            ->then($this->returnClosure('new_value'))
-        ->end();
-        $this->assertFinalizedValueIs('new_value', $test);
-
-        $test = $this->getTestBuilder()
-            ->ifTrue(function ($v) { return false; })
-            ->then($this->returnClosure('new_value'))
-        ->end();
-        $this->assertFinalizedValueIs('value', $test);
-    }
-
-    public function testIfStringExpression()
-    {
-        $test = $this->getTestBuilder()
-            ->ifString()
-            ->then($this->returnClosure('new_value'))
-        ->end();
-        $this->assertFinalizedValueIs('new_value', $test);
-
-        $test = $this->getTestBuilder()
-            ->ifString()
-            ->then($this->returnClosure('new_value'))
-        ->end();
-        $this->assertFinalizedValueIs(45, $test, ['key' => 45]);
-    }
-
-    public function testIfNullExpression()
-    {
-        $test = $this->getTestBuilder()
-            ->ifNull()
-            ->then($this->returnClosure('new_value'))
-        ->end();
-        $this->assertFinalizedValueIs('new_value', $test, ['key' => null]);
-
-        $test = $this->getTestBuilder()
-            ->ifNull()
-            ->then($this->returnClosure('new_value'))
-        ->end();
-        $this->assertFinalizedValueIs('value', $test);
-    }
-
-    public function testIfEmptyExpression()
-    {
-        $test = $this->getTestBuilder()
-            ->ifEmpty()
-            ->then($this->returnClosure('new_value'))
-        ->end();
-        $this->assertFinalizedValueIs('new_value', $test, ['key' => []]);
-
-        $test = $this->getTestBuilder()
-            ->ifEmpty()
-            ->then($this->returnClosure('new_value'))
-        ->end();
-        $this->assertFinalizedValueIs('value', $test);
-    }
-
-    public function testIfArrayExpression()
-    {
-        $test = $this->getTestBuilder()
-            ->ifArray()
-            ->then($this->returnClosure('new_value'))
-        ->end();
-        $this->assertFinalizedValueIs('new_value', $test, ['key' => []]);
-
-        $test = $this->getTestBuilder()
-            ->ifArray()
-            ->then($this->returnClosure('new_value'))
-        ->end();
-        $this->assertFinalizedValueIs('value', $test);
-    }
-
-    public function testIfInArrayExpression()
-    {
-        $test = $this->getTestBuilder()
-            ->ifInArray(['foo', 'bar', 'value'])
-            ->then($this->returnClosure('new_value'))
-        ->end();
-        $this->assertFinalizedValueIs('new_value', $test);
-
-        $test = $this->getTestBuilder()
-            ->ifInArray(['foo', 'bar'])
-            ->then($this->returnClosure('new_value'))
-        ->end();
-        $this->assertFinalizedValueIs('value', $test);
-    }
-
-    public function testIfNotInArrayExpression()
-    {
-        $test = $this->getTestBuilder()
-            ->ifNotInArray(['foo', 'bar'])
-            ->then($this->returnClosure('new_value'))
-        ->end();
-        $this->assertFinalizedValueIs('new_value', $test);
-
-        $test = $this->getTestBuilder()
-            ->ifNotInArray(['foo', 'bar', 'value_from_config'])
-            ->then($this->returnClosure('new_value'))
-        ->end();
-        $this->assertFinalizedValueIs('new_value', $test);
-    }
-
-    public function testThenEmptyArrayExpression()
-    {
-        $test = $this->getTestBuilder()
-            ->ifString()
-            ->thenEmptyArray()
-        ->end();
-        $this->assertFinalizedValueIs([], $test);
-    }
-
-    /**
-     * @dataProvider castToArrayValues
-     */
-    public function testCastToArrayExpression($configValue, $expectedValue)
-    {
-        $test = $this->getTestBuilder()
-            ->castToArray()
-        ->end();
-        $this->assertFinalizedValueIs($expectedValue, $test, ['key' => $configValue]);
-    }
-
-    public function castToArrayValues()
-    {
-        yield ['value', ['value']];
-        yield [-3.14, [-3.14]];
-        yield [null, [null]];
-        yield [['value'], ['value']];
-    }
-
-    public function testThenInvalid()
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidConfigurationException');
-        $test = $this->getTestBuilder()
-            ->ifString()
-            ->thenInvalid('Invalid value')
-        ->end();
-        $this->finalizeTestBuilder($test);
-    }
-
-    public function testThenUnsetExpression()
-    {
-        $test = $this->getTestBuilder()
-            ->ifString()
-            ->thenUnset()
-        ->end();
-        $this->assertEquals([], $this->finalizeTestBuilder($test));
-    }
-
-    public function testEndIfPartNotSpecified()
-    {
-        $this->expectException('RuntimeException');
-        $this->expectExceptionMessage('You must specify an if part.');
-        $this->getTestBuilder()->end();
-    }
-
-    public function testEndThenPartNotSpecified()
-    {
-        $this->expectException('RuntimeException');
-        $this->expectExceptionMessage('You must specify a then part.');
-        $builder = $this->getTestBuilder();
-        $builder->ifPart = 'test';
-        $builder->end();
-    }
-
-    /**
-     * Create a test treebuilder with a variable node, and init the validation.
-     *
-     * @return TreeBuilder
-     */
-    protected function getTestBuilder()
-    {
-        $builder = new TreeBuilder();
-
-        return $builder
-            ->root('test')
-            ->children()
-            ->variableNode('key')
-            ->validate()
-        ;
-    }
-
-    /**
-     * Close the validation process and finalize with the given config.
-     *
-     * @param TreeBuilder $testBuilder The tree builder to finalize
-     * @param array       $config      The config you want to use for the finalization, if nothing provided
-     *                                 a simple ['key'=>'value'] will be used
-     *
-     * @return array The finalized config values
-     */
-    protected function finalizeTestBuilder($testBuilder, $config = null)
-    {
-        return $testBuilder
-            ->end()
-            ->end()
-            ->end()
-            ->buildTree()
-            ->finalize(null === $config ? ['key' => 'value'] : $config)
-        ;
-    }
-
-    /**
-     * Return a closure that will return the given value.
-     *
-     * @param mixed $val The value that the closure must return
-     *
-     * @return \Closure
-     */
-    protected function returnClosure($val)
-    {
-        return function ($v) use ($val) {
-            return $val;
-        };
-    }
-
-    /**
-     * Assert that the given test builder, will return the given value.
-     *
-     * @param mixed       $value       The value to test
-     * @param TreeBuilder $treeBuilder The tree builder to finalize
-     * @param mixed       $config      The config values that new to be finalized
-     */
-    protected function assertFinalizedValueIs($value, $treeBuilder, $config = null)
-    {
-        $this->assertEquals(['key' => $value], $this->finalizeTestBuilder($treeBuilder, $config));
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/Builder/NodeBuilderTest.php b/vendor/symfony/config/Tests/Definition/Builder/NodeBuilderTest.php
deleted file mode 100644
index 46518c659a..0000000000
--- a/vendor/symfony/config/Tests/Definition/Builder/NodeBuilderTest.php
+++ /dev/null
@@ -1,91 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition\Builder;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\Builder\NodeBuilder as BaseNodeBuilder;
-use Symfony\Component\Config\Definition\Builder\VariableNodeDefinition as BaseVariableNodeDefinition;
-
-class NodeBuilderTest extends TestCase
-{
-    public function testThrowsAnExceptionWhenTryingToCreateANonRegisteredNodeType()
-    {
-        $this->expectException('RuntimeException');
-        $builder = new BaseNodeBuilder();
-        $builder->node('', 'foobar');
-    }
-
-    public function testThrowsAnExceptionWhenTheNodeClassIsNotFound()
-    {
-        $this->expectException('RuntimeException');
-        $builder = new BaseNodeBuilder();
-        $builder
-            ->setNodeClass('noclasstype', '\\foo\\bar\\noclass')
-            ->node('', 'noclasstype');
-    }
-
-    public function testAddingANewNodeType()
-    {
-        $class = SomeNodeDefinition::class;
-
-        $builder = new BaseNodeBuilder();
-        $node = $builder
-            ->setNodeClass('newtype', $class)
-            ->node('', 'newtype');
-
-        $this->assertInstanceOf($class, $node);
-    }
-
-    public function testOverridingAnExistingNodeType()
-    {
-        $class = SomeNodeDefinition::class;
-
-        $builder = new BaseNodeBuilder();
-        $node = $builder
-            ->setNodeClass('variable', $class)
-            ->node('', 'variable');
-
-        $this->assertInstanceOf($class, $node);
-    }
-
-    public function testNodeTypesAreNotCaseSensitive()
-    {
-        $builder = new BaseNodeBuilder();
-
-        $node1 = $builder->node('', 'VaRiAbLe');
-        $node2 = $builder->node('', 'variable');
-
-        $this->assertInstanceOf(\get_class($node1), $node2);
-
-        $builder->setNodeClass('CuStOm', SomeNodeDefinition::class);
-
-        $node1 = $builder->node('', 'CUSTOM');
-        $node2 = $builder->node('', 'custom');
-
-        $this->assertInstanceOf(\get_class($node1), $node2);
-    }
-
-    public function testNumericNodeCreation()
-    {
-        $builder = new BaseNodeBuilder();
-
-        $node = $builder->integerNode('foo')->min(3)->max(5);
-        $this->assertInstanceOf('Symfony\Component\Config\Definition\Builder\IntegerNodeDefinition', $node);
-
-        $node = $builder->floatNode('bar')->min(3.0)->max(5.0);
-        $this->assertInstanceOf('Symfony\Component\Config\Definition\Builder\FloatNodeDefinition', $node);
-    }
-}
-
-class SomeNodeDefinition extends BaseVariableNodeDefinition
-{
-}
diff --git a/vendor/symfony/config/Tests/Definition/Builder/NumericNodeDefinitionTest.php b/vendor/symfony/config/Tests/Definition/Builder/NumericNodeDefinitionTest.php
deleted file mode 100644
index aa938bbaa7..0000000000
--- a/vendor/symfony/config/Tests/Definition/Builder/NumericNodeDefinitionTest.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition\Builder;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\Builder\FloatNodeDefinition;
-use Symfony\Component\Config\Definition\Builder\IntegerNodeDefinition;
-
-class NumericNodeDefinitionTest extends TestCase
-{
-    public function testIncoherentMinAssertion()
-    {
-        $this->expectException('InvalidArgumentException');
-        $this->expectExceptionMessage('You cannot define a min(4) as you already have a max(3)');
-        $def = new IntegerNodeDefinition('foo');
-        $def->max(3)->min(4);
-    }
-
-    public function testIncoherentMaxAssertion()
-    {
-        $this->expectException('InvalidArgumentException');
-        $this->expectExceptionMessage('You cannot define a max(2) as you already have a min(3)');
-        $node = new IntegerNodeDefinition('foo');
-        $node->min(3)->max(2);
-    }
-
-    public function testIntegerMinAssertion()
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidConfigurationException');
-        $this->expectExceptionMessage('The value 4 is too small for path "foo". Should be greater than or equal to 5');
-        $def = new IntegerNodeDefinition('foo');
-        $def->min(5)->getNode()->finalize(4);
-    }
-
-    public function testIntegerMaxAssertion()
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidConfigurationException');
-        $this->expectExceptionMessage('The value 4 is too big for path "foo". Should be less than or equal to 3');
-        $def = new IntegerNodeDefinition('foo');
-        $def->max(3)->getNode()->finalize(4);
-    }
-
-    public function testIntegerValidMinMaxAssertion()
-    {
-        $def = new IntegerNodeDefinition('foo');
-        $node = $def->min(3)->max(7)->getNode();
-        $this->assertEquals(4, $node->finalize(4));
-    }
-
-    public function testFloatMinAssertion()
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidConfigurationException');
-        $this->expectExceptionMessage('The value 400 is too small for path "foo". Should be greater than or equal to 500');
-        $def = new FloatNodeDefinition('foo');
-        $def->min(5E2)->getNode()->finalize(4e2);
-    }
-
-    public function testFloatMaxAssertion()
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidConfigurationException');
-        $this->expectExceptionMessage('The value 4.3 is too big for path "foo". Should be less than or equal to 0.3');
-        $def = new FloatNodeDefinition('foo');
-        $def->max(0.3)->getNode()->finalize(4.3);
-    }
-
-    public function testFloatValidMinMaxAssertion()
-    {
-        $def = new FloatNodeDefinition('foo');
-        $node = $def->min(3.0)->max(7e2)->getNode();
-        $this->assertEquals(4.5, $node->finalize(4.5));
-    }
-
-    public function testCannotBeEmptyThrowsAnException()
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidDefinitionException');
-        $this->expectExceptionMessage('->cannotBeEmpty() is not applicable to NumericNodeDefinition.');
-        $def = new IntegerNodeDefinition('foo');
-        $def->cannotBeEmpty();
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/Builder/TreeBuilderTest.php b/vendor/symfony/config/Tests/Definition/Builder/TreeBuilderTest.php
deleted file mode 100644
index 53c9c256b3..0000000000
--- a/vendor/symfony/config/Tests/Definition/Builder/TreeBuilderTest.php
+++ /dev/null
@@ -1,134 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition\Builder;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\Builder\TreeBuilder;
-use Symfony\Component\Config\Tests\Fixtures\Builder\NodeBuilder as CustomNodeBuilder;
-
-class TreeBuilderTest extends TestCase
-{
-    public function testUsingACustomNodeBuilder()
-    {
-        $builder = new TreeBuilder();
-        $root = $builder->root('custom', 'array', new CustomNodeBuilder());
-
-        $nodeBuilder = $root->children();
-
-        $this->assertInstanceOf('Symfony\Component\Config\Tests\Fixtures\Builder\NodeBuilder', $nodeBuilder);
-
-        $nodeBuilder = $nodeBuilder->arrayNode('deeper')->children();
-
-        $this->assertInstanceOf('Symfony\Component\Config\Tests\Fixtures\Builder\NodeBuilder', $nodeBuilder);
-    }
-
-    public function testOverrideABuiltInNodeType()
-    {
-        $builder = new TreeBuilder();
-        $root = $builder->root('override', 'array', new CustomNodeBuilder());
-
-        $definition = $root->children()->variableNode('variable');
-
-        $this->assertInstanceOf('Symfony\Component\Config\Tests\Fixtures\Builder\VariableNodeDefinition', $definition);
-    }
-
-    public function testAddANodeType()
-    {
-        $builder = new TreeBuilder();
-        $root = $builder->root('override', 'array', new CustomNodeBuilder());
-
-        $definition = $root->children()->barNode('variable');
-
-        $this->assertInstanceOf('Symfony\Component\Config\Tests\Fixtures\Builder\BarNodeDefinition', $definition);
-    }
-
-    public function testCreateABuiltInNodeTypeWithACustomNodeBuilder()
-    {
-        $builder = new TreeBuilder();
-        $root = $builder->root('builtin', 'array', new CustomNodeBuilder());
-
-        $definition = $root->children()->booleanNode('boolean');
-
-        $this->assertInstanceOf('Symfony\Component\Config\Definition\Builder\BooleanNodeDefinition', $definition);
-    }
-
-    public function testPrototypedArrayNodeUseTheCustomNodeBuilder()
-    {
-        $builder = new TreeBuilder();
-        $root = $builder->root('override', 'array', new CustomNodeBuilder());
-
-        $root->prototype('bar')->end();
-
-        $this->assertInstanceOf('Symfony\Component\Config\Tests\Fixtures\BarNode', $root->getNode(true)->getPrototype());
-    }
-
-    public function testAnExtendedNodeBuilderGetsPropagatedToTheChildren()
-    {
-        $builder = new TreeBuilder();
-
-        $builder->root('propagation')
-            ->children()
-                ->setNodeClass('extended', 'Symfony\Component\Config\Definition\Builder\BooleanNodeDefinition')
-                ->node('foo', 'extended')->end()
-                ->arrayNode('child')
-                    ->children()
-                        ->node('foo', 'extended')
-                    ->end()
-                ->end()
-            ->end()
-        ->end();
-
-        $node = $builder->buildTree();
-        $children = $node->getChildren();
-
-        $this->assertInstanceOf('Symfony\Component\Config\Definition\BooleanNode', $children['foo']);
-
-        $childChildren = $children['child']->getChildren();
-
-        $this->assertInstanceOf('Symfony\Component\Config\Definition\BooleanNode', $childChildren['foo']);
-    }
-
-    public function testDefinitionInfoGetsTransferredToNode()
-    {
-        $builder = new TreeBuilder();
-
-        $builder->root('test')->info('root info')
-            ->children()
-                ->node('child', 'variable')->info('child info')->defaultValue('default')
-            ->end()
-        ->end();
-
-        $tree = $builder->buildTree();
-        $children = $tree->getChildren();
-
-        $this->assertEquals('root info', $tree->getInfo());
-        $this->assertEquals('child info', $children['child']->getInfo());
-    }
-
-    public function testDefinitionExampleGetsTransferredToNode()
-    {
-        $builder = new TreeBuilder();
-
-        $builder->root('test')
-            ->example(['key' => 'value'])
-            ->children()
-                ->node('child', 'variable')->info('child info')->defaultValue('default')->example('example')
-            ->end()
-        ->end();
-
-        $tree = $builder->buildTree();
-        $children = $tree->getChildren();
-
-        $this->assertIsArray($tree->getExample());
-        $this->assertEquals('example', $children['child']->getExample());
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/Dumper/XmlReferenceDumperTest.php b/vendor/symfony/config/Tests/Definition/Dumper/XmlReferenceDumperTest.php
deleted file mode 100644
index 5bc961bab6..0000000000
--- a/vendor/symfony/config/Tests/Definition/Dumper/XmlReferenceDumperTest.php
+++ /dev/null
@@ -1,114 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition\Dumper;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\Dumper\XmlReferenceDumper;
-use Symfony\Component\Config\Tests\Fixtures\Configuration\ExampleConfiguration;
-
-class XmlReferenceDumperTest extends TestCase
-{
-    public function testDumper()
-    {
-        $configuration = new ExampleConfiguration();
-
-        $dumper = new XmlReferenceDumper();
-        $this->assertEquals($this->getConfigurationAsString(), $dumper->dump($configuration));
-    }
-
-    public function testNamespaceDumper()
-    {
-        $configuration = new ExampleConfiguration();
-
-        $dumper = new XmlReferenceDumper();
-        $this->assertEquals(str_replace('http://example.org/schema/dic/acme_root', 'http://symfony.com/schema/dic/symfony', $this->getConfigurationAsString()), $dumper->dump($configuration, 'http://symfony.com/schema/dic/symfony'));
-    }
-
-    private function getConfigurationAsString()
-    {
-        return str_replace("\n", PHP_EOL, <<<'EOL'
-<!-- Namespace: http://example.org/schema/dic/acme_root -->
-<!-- scalar-required: Required -->
-<!-- scalar-deprecated: Deprecated (The child node "scalar_deprecated" at path "acme_root" is deprecated.) -->
-<!-- scalar-deprecated-with-message: Deprecated (Deprecation custom message for "scalar_deprecated_with_message" at "acme_root") -->
-<!-- enum-with-default: One of "this"; "that" -->
-<!-- enum: One of "this"; "that" -->
-<config
-    boolean="true"
-    scalar-empty=""
-    scalar-null="null"
-    scalar-true="true"
-    scalar-false="false"
-    scalar-default="default"
-    scalar-array-empty=""
-    scalar-array-defaults="elem1,elem2"
-    scalar-required=""
-    scalar-deprecated=""
-    scalar-deprecated-with-message=""
-    node-with-a-looong-name=""
-    enum-with-default="this"
-    enum=""
->
-
-    <!-- some info -->
-    <!--
-        child3: this is a long
-                multi-line info text
-                which should be indented;
-                Example: example setting
-    -->
-    <array
-        child1=""
-        child2=""
-        child3=""
-    />
-
-    <!-- prototype -->
-    <scalar-prototyped>scalar value</scalar-prototyped>
-
-    <!-- prototype: Parameter name -->
-    <parameter name="parameter name">scalar value</parameter>
-
-    <!-- prototype -->
-    <connection
-        user=""
-        pass=""
-    />
-
-    <!-- prototype -->
-    <cms-page page="cms page page">
-
-        <!-- prototype -->
-        <!-- title: Required -->
-        <!-- path: Required -->
-        <page
-            locale="page locale"
-            title=""
-            path=""
-        />
-
-    </cms-page>
-
-    <!-- prototype -->
-    <pipou name="pipou name">
-
-        <!-- prototype -->
-        <name didou="" />
-
-    </pipou>
-
-</config>
-
-EOL
-        );
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/Dumper/YamlReferenceDumperTest.php b/vendor/symfony/config/Tests/Definition/Dumper/YamlReferenceDumperTest.php
deleted file mode 100644
index 3cb9121ba6..0000000000
--- a/vendor/symfony/config/Tests/Definition/Dumper/YamlReferenceDumperTest.php
+++ /dev/null
@@ -1,143 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition\Dumper;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\Dumper\YamlReferenceDumper;
-use Symfony\Component\Config\Tests\Fixtures\Configuration\ExampleConfiguration;
-
-class YamlReferenceDumperTest extends TestCase
-{
-    public function testDumper()
-    {
-        $configuration = new ExampleConfiguration();
-
-        $dumper = new YamlReferenceDumper();
-
-        $this->assertEquals($this->getConfigurationAsString(), $dumper->dump($configuration));
-    }
-
-    public function provideDumpAtPath()
-    {
-        return [
-            'Regular node' => ['scalar_true', <<<EOL
-scalar_true:          true
-EOL
-            ],
-            'Array node' => ['array', <<<EOL
-# some info
-array:
-    child1:               ~
-    child2:               ~
-
-    # this is a long
-    # multi-line info text
-    # which should be indented
-    child3:               ~ # Example: example setting
-EOL
-            ],
-            'Regular nested' => ['array.child2', <<<EOL
-child2:               ~
-EOL
-            ],
-            'Prototype' => ['cms_pages.page', <<<EOL
-# Prototype
-page:
-
-    # Prototype
-    locale:
-        title:                ~ # Required
-        path:                 ~ # Required
-EOL
-            ],
-            'Nested prototype' => ['cms_pages.page.locale', <<<EOL
-# Prototype
-locale:
-    title:                ~ # Required
-    path:                 ~ # Required
-EOL
-            ],
-        ];
-    }
-
-    /**
-     * @dataProvider provideDumpAtPath
-     */
-    public function testDumpAtPath($path, $expected)
-    {
-        $configuration = new ExampleConfiguration();
-
-        $dumper = new YamlReferenceDumper();
-
-        $this->assertSame(trim($expected), trim($dumper->dumpAtPath($configuration, $path)));
-    }
-
-    private function getConfigurationAsString()
-    {
-        return <<<'EOL'
-acme_root:
-    boolean:              true
-    scalar_empty:         ~
-    scalar_null:          null
-    scalar_true:          true
-    scalar_false:         false
-    scalar_default:       default
-    scalar_array_empty:   []
-    scalar_array_defaults:
-
-        # Defaults:
-        - elem1
-        - elem2
-    scalar_required:      ~ # Required
-    scalar_deprecated:    ~ # Deprecated (The child node "scalar_deprecated" at path "acme_root" is deprecated.)
-    scalar_deprecated_with_message: ~ # Deprecated (Deprecation custom message for "scalar_deprecated_with_message" at "acme_root")
-    node_with_a_looong_name: ~
-    enum_with_default:    this # One of "this"; "that"
-    enum:                 ~ # One of "this"; "that"
-
-    # some info
-    array:
-        child1:               ~
-        child2:               ~
-
-        # this is a long
-        # multi-line info text
-        # which should be indented
-        child3:               ~ # Example: example setting
-    scalar_prototyped:    []
-    parameters:
-
-        # Prototype: Parameter name
-        name:                 ~
-    connections:
-
-        # Prototype
-        -
-            user:                 ~
-            pass:                 ~
-    cms_pages:
-
-        # Prototype
-        page:
-
-            # Prototype
-            locale:
-                title:                ~ # Required
-                path:                 ~ # Required
-    pipou:
-
-        # Prototype
-        name:                 []
-
-EOL;
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/EnumNodeTest.php b/vendor/symfony/config/Tests/Definition/EnumNodeTest.php
deleted file mode 100644
index fa89eea238..0000000000
--- a/vendor/symfony/config/Tests/Definition/EnumNodeTest.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\EnumNode;
-
-class EnumNodeTest extends TestCase
-{
-    public function testFinalizeValue()
-    {
-        $node = new EnumNode('foo', null, ['foo', 'bar']);
-        $this->assertSame('foo', $node->finalize('foo'));
-    }
-
-    public function testConstructionWithNoValues()
-    {
-        $this->expectException('InvalidArgumentException');
-        $this->expectExceptionMessage('$values must contain at least one element.');
-        new EnumNode('foo', null, []);
-    }
-
-    public function testConstructionWithOneValue()
-    {
-        $node = new EnumNode('foo', null, ['foo']);
-        $this->assertSame('foo', $node->finalize('foo'));
-    }
-
-    public function testConstructionWithOneDistinctValue()
-    {
-        $node = new EnumNode('foo', null, ['foo', 'foo']);
-        $this->assertSame('foo', $node->finalize('foo'));
-    }
-
-    public function testFinalizeWithInvalidValue()
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidConfigurationException');
-        $this->expectExceptionMessage('The value "foobar" is not allowed for path "foo". Permissible values: "foo", "bar"');
-        $node = new EnumNode('foo', null, ['foo', 'bar']);
-        $node->finalize('foobar');
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/FinalizationTest.php b/vendor/symfony/config/Tests/Definition/FinalizationTest.php
deleted file mode 100644
index be68a27c69..0000000000
--- a/vendor/symfony/config/Tests/Definition/FinalizationTest.php
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\Builder\TreeBuilder;
-use Symfony\Component\Config\Definition\NodeInterface;
-use Symfony\Component\Config\Definition\Processor;
-
-class FinalizationTest extends TestCase
-{
-    public function testUnsetKeyWithDeepHierarchy()
-    {
-        $tb = new TreeBuilder();
-        $tree = $tb
-            ->root('config', 'array')
-                ->children()
-                    ->node('level1', 'array')
-                        ->canBeUnset()
-                        ->children()
-                            ->node('level2', 'array')
-                                ->canBeUnset()
-                                ->children()
-                                    ->node('somevalue', 'scalar')->end()
-                                    ->node('anothervalue', 'scalar')->end()
-                                ->end()
-                            ->end()
-                            ->node('level1_scalar', 'scalar')->end()
-                        ->end()
-                    ->end()
-                ->end()
-            ->end()
-            ->buildTree()
-        ;
-
-        $a = [
-            'level1' => [
-                'level2' => [
-                    'somevalue' => 'foo',
-                    'anothervalue' => 'bar',
-                ],
-                'level1_scalar' => 'foo',
-            ],
-        ];
-
-        $b = [
-            'level1' => [
-                'level2' => false,
-            ],
-        ];
-
-        $this->assertEquals([
-            'level1' => [
-                'level1_scalar' => 'foo',
-            ],
-        ], $this->process($tree, [$a, $b]));
-    }
-
-    protected function process(NodeInterface $tree, array $configs)
-    {
-        $processor = new Processor();
-
-        return $processor->process($tree, $configs);
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/FloatNodeTest.php b/vendor/symfony/config/Tests/Definition/FloatNodeTest.php
deleted file mode 100644
index fed9f013db..0000000000
--- a/vendor/symfony/config/Tests/Definition/FloatNodeTest.php
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\FloatNode;
-
-class FloatNodeTest extends TestCase
-{
-    /**
-     * @dataProvider getValidValues
-     */
-    public function testNormalize($value)
-    {
-        $node = new FloatNode('test');
-        $this->assertSame($value, $node->normalize($value));
-    }
-
-    /**
-     * @dataProvider getValidValues
-     *
-     * @param int $value
-     */
-    public function testValidNonEmptyValues($value)
-    {
-        $node = new FloatNode('test');
-        $node->setAllowEmptyValue(false);
-
-        $this->assertSame($value, $node->finalize($value));
-    }
-
-    public function getValidValues()
-    {
-        return [
-            [1798.0],
-            [-678.987],
-            [12.56E45],
-            [0.0],
-            // Integer are accepted too, they will be cast
-            [17],
-            [-10],
-            [0],
-        ];
-    }
-
-    /**
-     * @dataProvider getInvalidValues
-     */
-    public function testNormalizeThrowsExceptionOnInvalidValues($value)
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidTypeException');
-        $node = new FloatNode('test');
-        $node->normalize($value);
-    }
-
-    public function getInvalidValues()
-    {
-        return [
-            [null],
-            [''],
-            ['foo'],
-            [true],
-            [false],
-            [[]],
-            [['foo' => 'bar']],
-            [new \stdClass()],
-        ];
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/IntegerNodeTest.php b/vendor/symfony/config/Tests/Definition/IntegerNodeTest.php
deleted file mode 100644
index 3fb1b771e5..0000000000
--- a/vendor/symfony/config/Tests/Definition/IntegerNodeTest.php
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\IntegerNode;
-
-class IntegerNodeTest extends TestCase
-{
-    /**
-     * @dataProvider getValidValues
-     */
-    public function testNormalize($value)
-    {
-        $node = new IntegerNode('test');
-        $this->assertSame($value, $node->normalize($value));
-    }
-
-    /**
-     * @dataProvider getValidValues
-     *
-     * @param int $value
-     */
-    public function testValidNonEmptyValues($value)
-    {
-        $node = new IntegerNode('test');
-        $node->setAllowEmptyValue(false);
-
-        $this->assertSame($value, $node->finalize($value));
-    }
-
-    public function getValidValues()
-    {
-        return [
-            [1798],
-            [-678],
-            [0],
-        ];
-    }
-
-    /**
-     * @dataProvider getInvalidValues
-     */
-    public function testNormalizeThrowsExceptionOnInvalidValues($value)
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidTypeException');
-        $node = new IntegerNode('test');
-        $node->normalize($value);
-    }
-
-    public function getInvalidValues()
-    {
-        return [
-            [null],
-            [''],
-            ['foo'],
-            [true],
-            [false],
-            [0.0],
-            [0.1],
-            [[]],
-            [['foo' => 'bar']],
-            [new \stdClass()],
-        ];
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/MergeTest.php b/vendor/symfony/config/Tests/Definition/MergeTest.php
deleted file mode 100644
index 8fee2635c7..0000000000
--- a/vendor/symfony/config/Tests/Definition/MergeTest.php
+++ /dev/null
@@ -1,192 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\Builder\TreeBuilder;
-
-class MergeTest extends TestCase
-{
-    public function testForbiddenOverwrite()
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\ForbiddenOverwriteException');
-        $tb = new TreeBuilder();
-        $tree = $tb
-            ->root('root', 'array')
-                ->children()
-                    ->node('foo', 'scalar')
-                        ->cannotBeOverwritten()
-                    ->end()
-                ->end()
-            ->end()
-            ->buildTree()
-        ;
-
-        $a = [
-            'foo' => 'bar',
-        ];
-
-        $b = [
-            'foo' => 'moo',
-        ];
-
-        $tree->merge($a, $b);
-    }
-
-    public function testUnsetKey()
-    {
-        $tb = new TreeBuilder();
-        $tree = $tb
-            ->root('root', 'array')
-                ->children()
-                    ->node('foo', 'scalar')->end()
-                    ->node('bar', 'scalar')->end()
-                    ->node('unsettable', 'array')
-                        ->canBeUnset()
-                        ->children()
-                            ->node('foo', 'scalar')->end()
-                            ->node('bar', 'scalar')->end()
-                        ->end()
-                    ->end()
-                    ->node('unsetted', 'array')
-                        ->canBeUnset()
-                        ->prototype('scalar')->end()
-                    ->end()
-                ->end()
-            ->end()
-            ->buildTree()
-        ;
-
-        $a = [
-            'foo' => 'bar',
-            'unsettable' => [
-                'foo' => 'a',
-                'bar' => 'b',
-            ],
-            'unsetted' => false,
-        ];
-
-        $b = [
-            'foo' => 'moo',
-            'bar' => 'b',
-            'unsettable' => false,
-            'unsetted' => ['a', 'b'],
-        ];
-
-        $this->assertEquals([
-            'foo' => 'moo',
-            'bar' => 'b',
-            'unsettable' => false,
-            'unsetted' => ['a', 'b'],
-        ], $tree->merge($a, $b));
-    }
-
-    public function testDoesNotAllowNewKeysInSubsequentConfigs()
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidConfigurationException');
-        $tb = new TreeBuilder();
-        $tree = $tb
-            ->root('config', 'array')
-                ->children()
-                    ->node('test', 'array')
-                        ->disallowNewKeysInSubsequentConfigs()
-                        ->useAttributeAsKey('key')
-                        ->prototype('array')
-                            ->children()
-                                ->node('value', 'scalar')->end()
-                            ->end()
-                        ->end()
-                    ->end()
-                ->end()
-            ->end()
-            ->buildTree();
-
-        $a = [
-            'test' => [
-                'a' => ['value' => 'foo'],
-            ],
-        ];
-
-        $b = [
-            'test' => [
-                'b' => ['value' => 'foo'],
-            ],
-        ];
-
-        $tree->merge($a, $b);
-    }
-
-    public function testPerformsNoDeepMerging()
-    {
-        $tb = new TreeBuilder();
-
-        $tree = $tb
-            ->root('config', 'array')
-                ->children()
-                    ->node('no_deep_merging', 'array')
-                        ->performNoDeepMerging()
-                        ->children()
-                            ->node('foo', 'scalar')->end()
-                            ->node('bar', 'scalar')->end()
-                        ->end()
-                    ->end()
-                ->end()
-            ->end()
-            ->buildTree()
-        ;
-
-        $a = [
-            'no_deep_merging' => [
-                'foo' => 'a',
-                'bar' => 'b',
-            ],
-        ];
-
-        $b = [
-            'no_deep_merging' => [
-                'c' => 'd',
-            ],
-        ];
-
-        $this->assertEquals([
-            'no_deep_merging' => [
-                'c' => 'd',
-            ],
-        ], $tree->merge($a, $b));
-    }
-
-    public function testPrototypeWithoutAKeyAttribute()
-    {
-        $tb = new TreeBuilder();
-
-        $tree = $tb
-            ->root('config', 'array')
-                ->children()
-                    ->arrayNode('append_elements')
-                        ->prototype('scalar')->end()
-                    ->end()
-                ->end()
-            ->end()
-            ->buildTree()
-        ;
-
-        $a = [
-            'append_elements' => ['a', 'b'],
-        ];
-
-        $b = [
-            'append_elements' => ['c', 'd'],
-        ];
-
-        $this->assertEquals(['append_elements' => ['a', 'b', 'c', 'd']], $tree->merge($a, $b));
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/NormalizationTest.php b/vendor/symfony/config/Tests/Definition/NormalizationTest.php
deleted file mode 100644
index 200a985944..0000000000
--- a/vendor/symfony/config/Tests/Definition/NormalizationTest.php
+++ /dev/null
@@ -1,228 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\Builder\TreeBuilder;
-use Symfony\Component\Config\Definition\NodeInterface;
-
-class NormalizationTest extends TestCase
-{
-    /**
-     * @dataProvider getEncoderTests
-     */
-    public function testNormalizeEncoders($denormalized)
-    {
-        $tb = new TreeBuilder();
-        $tree = $tb
-            ->root('root_name', 'array')
-                ->fixXmlConfig('encoder')
-                ->children()
-                    ->node('encoders', 'array')
-                        ->useAttributeAsKey('class')
-                        ->prototype('array')
-                            ->beforeNormalization()->ifString()->then(function ($v) { return ['algorithm' => $v]; })->end()
-                            ->children()
-                                ->node('algorithm', 'scalar')->end()
-                            ->end()
-                        ->end()
-                    ->end()
-                ->end()
-            ->end()
-            ->buildTree()
-        ;
-
-        $normalized = [
-            'encoders' => [
-                'foo' => ['algorithm' => 'plaintext'],
-            ],
-        ];
-
-        $this->assertNormalized($tree, $denormalized, $normalized);
-    }
-
-    public function getEncoderTests()
-    {
-        $configs = [];
-
-        // XML
-        $configs[] = [
-            'encoder' => [
-                ['class' => 'foo', 'algorithm' => 'plaintext'],
-            ],
-        ];
-
-        // XML when only one element of this type
-        $configs[] = [
-            'encoder' => ['class' => 'foo', 'algorithm' => 'plaintext'],
-        ];
-
-        // YAML/PHP
-        $configs[] = [
-            'encoders' => [
-                ['class' => 'foo', 'algorithm' => 'plaintext'],
-            ],
-        ];
-
-        // YAML/PHP
-        $configs[] = [
-            'encoders' => [
-                'foo' => 'plaintext',
-            ],
-        ];
-
-        // YAML/PHP
-        $configs[] = [
-            'encoders' => [
-                'foo' => ['algorithm' => 'plaintext'],
-            ],
-        ];
-
-        return array_map(function ($v) {
-            return [$v];
-        }, $configs);
-    }
-
-    /**
-     * @dataProvider getAnonymousKeysTests
-     */
-    public function testAnonymousKeysArray($denormalized)
-    {
-        $tb = new TreeBuilder();
-        $tree = $tb
-            ->root('root', 'array')
-                ->children()
-                    ->node('logout', 'array')
-                        ->fixXmlConfig('handler')
-                        ->children()
-                            ->node('handlers', 'array')
-                                ->prototype('scalar')->end()
-                            ->end()
-                        ->end()
-                    ->end()
-                ->end()
-            ->end()
-            ->buildTree()
-        ;
-
-        $normalized = ['logout' => ['handlers' => ['a', 'b', 'c']]];
-
-        $this->assertNormalized($tree, $denormalized, $normalized);
-    }
-
-    public function getAnonymousKeysTests()
-    {
-        $configs = [];
-
-        $configs[] = [
-            'logout' => [
-                'handlers' => ['a', 'b', 'c'],
-            ],
-        ];
-
-        $configs[] = [
-            'logout' => [
-                'handler' => ['a', 'b', 'c'],
-            ],
-        ];
-
-        return array_map(function ($v) { return [$v]; }, $configs);
-    }
-
-    /**
-     * @dataProvider getNumericKeysTests
-     */
-    public function testNumericKeysAsAttributes($denormalized)
-    {
-        $normalized = [
-            'thing' => [42 => ['foo', 'bar'], 1337 => ['baz', 'qux']],
-        ];
-
-        $this->assertNormalized($this->getNumericKeysTestTree(), $denormalized, $normalized);
-    }
-
-    public function getNumericKeysTests()
-    {
-        $configs = [];
-
-        $configs[] = [
-            'thing' => [
-                42 => ['foo', 'bar'], 1337 => ['baz', 'qux'],
-            ],
-        ];
-
-        $configs[] = [
-            'thing' => [
-                ['foo', 'bar', 'id' => 42], ['baz', 'qux', 'id' => 1337],
-            ],
-        ];
-
-        return array_map(function ($v) { return [$v]; }, $configs);
-    }
-
-    public function testNonAssociativeArrayThrowsExceptionIfAttributeNotSet()
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidConfigurationException');
-        $this->expectExceptionMessage('The attribute "id" must be set for path "root.thing".');
-        $denormalized = [
-            'thing' => [
-                ['foo', 'bar'], ['baz', 'qux'],
-            ],
-        ];
-
-        $this->assertNormalized($this->getNumericKeysTestTree(), $denormalized, []);
-    }
-
-    public function testAssociativeArrayPreserveKeys()
-    {
-        $tb = new TreeBuilder();
-        $tree = $tb
-            ->root('root', 'array')
-                ->prototype('array')
-                    ->children()
-                        ->node('foo', 'scalar')->end()
-                    ->end()
-                ->end()
-            ->end()
-            ->buildTree()
-        ;
-
-        $data = ['first' => ['foo' => 'bar']];
-
-        $this->assertNormalized($tree, $data, $data);
-    }
-
-    public static function assertNormalized(NodeInterface $tree, $denormalized, $normalized)
-    {
-        self::assertSame($normalized, $tree->normalize($denormalized));
-    }
-
-    private function getNumericKeysTestTree()
-    {
-        $tb = new TreeBuilder();
-        $tree = $tb
-            ->root('root', 'array')
-                ->children()
-                    ->node('thing', 'array')
-                        ->useAttributeAsKey('id')
-                        ->prototype('array')
-                            ->prototype('scalar')->end()
-                        ->end()
-                    ->end()
-                ->end()
-            ->end()
-            ->buildTree()
-        ;
-
-        return $tree;
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/PrototypedArrayNodeTest.php b/vendor/symfony/config/Tests/Definition/PrototypedArrayNodeTest.php
deleted file mode 100644
index 7a58ead8da..0000000000
--- a/vendor/symfony/config/Tests/Definition/PrototypedArrayNodeTest.php
+++ /dev/null
@@ -1,341 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\ArrayNode;
-use Symfony\Component\Config\Definition\PrototypedArrayNode;
-use Symfony\Component\Config\Definition\ScalarNode;
-use Symfony\Component\Config\Definition\VariableNode;
-
-class PrototypedArrayNodeTest extends TestCase
-{
-    public function testGetDefaultValueReturnsAnEmptyArrayForPrototypes()
-    {
-        $node = new PrototypedArrayNode('root');
-        $prototype = new ArrayNode(null, $node);
-        $node->setPrototype($prototype);
-        $this->assertEmpty($node->getDefaultValue());
-    }
-
-    public function testGetDefaultValueReturnsDefaultValueForPrototypes()
-    {
-        $node = new PrototypedArrayNode('root');
-        $prototype = new ArrayNode(null, $node);
-        $node->setPrototype($prototype);
-        $node->setDefaultValue(['test']);
-        $this->assertEquals(['test'], $node->getDefaultValue());
-    }
-
-    // a remapped key (e.g. "mapping" -> "mappings") should be unset after being used
-    public function testRemappedKeysAreUnset()
-    {
-        $node = new ArrayNode('root');
-        $mappingsNode = new PrototypedArrayNode('mappings');
-        $node->addChild($mappingsNode);
-
-        // each item under mappings is just a scalar
-        $prototype = new ScalarNode(null, $mappingsNode);
-        $mappingsNode->setPrototype($prototype);
-
-        $remappings = [];
-        $remappings[] = ['mapping', 'mappings'];
-        $node->setXmlRemappings($remappings);
-
-        $normalized = $node->normalize(['mapping' => ['foo', 'bar']]);
-        $this->assertEquals(['mappings' => ['foo', 'bar']], $normalized);
-    }
-
-    /**
-     * Tests that when a key attribute is mapped, that key is removed from the array.
-     *
-     *     <things>
-     *         <option id="option1" value="foo">
-     *         <option id="option2" value="bar">
-     *     </things>
-     *
-     * The above should finally be mapped to an array that looks like this
-     * (because "id" is the key attribute).
-     *
-     *     [
-     *         'things' => [
-     *             'option1' => 'foo',
-     *             'option2' => 'bar',
-     *         ]
-     *     ]
-     */
-    public function testMappedAttributeKeyIsRemoved()
-    {
-        $node = new PrototypedArrayNode('root');
-        $node->setKeyAttribute('id', true);
-
-        // each item under the root is an array, with one scalar item
-        $prototype = new ArrayNode(null, $node);
-        $prototype->addChild(new ScalarNode('foo'));
-        $node->setPrototype($prototype);
-
-        $children = [];
-        $children[] = ['id' => 'item_name', 'foo' => 'bar'];
-        $normalized = $node->normalize($children);
-
-        $expected = [];
-        $expected['item_name'] = ['foo' => 'bar'];
-        $this->assertEquals($expected, $normalized);
-    }
-
-    /**
-     * Tests the opposite of the testMappedAttributeKeyIsRemoved because
-     * the removal can be toggled with an option.
-     */
-    public function testMappedAttributeKeyNotRemoved()
-    {
-        $node = new PrototypedArrayNode('root');
-        $node->setKeyAttribute('id', false);
-
-        // each item under the root is an array, with two scalar items
-        $prototype = new ArrayNode(null, $node);
-        $prototype->addChild(new ScalarNode('foo'));
-        $prototype->addChild(new ScalarNode('id')); // the key attribute will remain
-        $node->setPrototype($prototype);
-
-        $children = [];
-        $children[] = ['id' => 'item_name', 'foo' => 'bar'];
-        $normalized = $node->normalize($children);
-
-        $expected = [];
-        $expected['item_name'] = ['id' => 'item_name', 'foo' => 'bar'];
-        $this->assertEquals($expected, $normalized);
-    }
-
-    public function testAddDefaultChildren()
-    {
-        $node = $this->getPrototypeNodeWithDefaultChildren();
-        $node->setAddChildrenIfNoneSet();
-        $this->assertTrue($node->hasDefaultValue());
-        $this->assertEquals([['foo' => 'bar']], $node->getDefaultValue());
-
-        $node = $this->getPrototypeNodeWithDefaultChildren();
-        $node->setKeyAttribute('foobar');
-        $node->setAddChildrenIfNoneSet();
-        $this->assertTrue($node->hasDefaultValue());
-        $this->assertEquals(['defaults' => ['foo' => 'bar']], $node->getDefaultValue());
-
-        $node = $this->getPrototypeNodeWithDefaultChildren();
-        $node->setKeyAttribute('foobar');
-        $node->setAddChildrenIfNoneSet('defaultkey');
-        $this->assertTrue($node->hasDefaultValue());
-        $this->assertEquals(['defaultkey' => ['foo' => 'bar']], $node->getDefaultValue());
-
-        $node = $this->getPrototypeNodeWithDefaultChildren();
-        $node->setKeyAttribute('foobar');
-        $node->setAddChildrenIfNoneSet(['defaultkey']);
-        $this->assertTrue($node->hasDefaultValue());
-        $this->assertEquals(['defaultkey' => ['foo' => 'bar']], $node->getDefaultValue());
-
-        $node = $this->getPrototypeNodeWithDefaultChildren();
-        $node->setKeyAttribute('foobar');
-        $node->setAddChildrenIfNoneSet(['dk1', 'dk2']);
-        $this->assertTrue($node->hasDefaultValue());
-        $this->assertEquals(['dk1' => ['foo' => 'bar'], 'dk2' => ['foo' => 'bar']], $node->getDefaultValue());
-
-        $node = $this->getPrototypeNodeWithDefaultChildren();
-        $node->setAddChildrenIfNoneSet([5, 6]);
-        $this->assertTrue($node->hasDefaultValue());
-        $this->assertEquals([0 => ['foo' => 'bar'], 1 => ['foo' => 'bar']], $node->getDefaultValue());
-
-        $node = $this->getPrototypeNodeWithDefaultChildren();
-        $node->setAddChildrenIfNoneSet(2);
-        $this->assertTrue($node->hasDefaultValue());
-        $this->assertEquals([['foo' => 'bar'], ['foo' => 'bar']], $node->getDefaultValue());
-    }
-
-    public function testDefaultChildrenWinsOverDefaultValue()
-    {
-        $node = $this->getPrototypeNodeWithDefaultChildren();
-        $node->setAddChildrenIfNoneSet();
-        $node->setDefaultValue(['bar' => 'foo']);
-        $this->assertTrue($node->hasDefaultValue());
-        $this->assertEquals([['foo' => 'bar']], $node->getDefaultValue());
-    }
-
-    protected function getPrototypeNodeWithDefaultChildren()
-    {
-        $node = new PrototypedArrayNode('root');
-        $prototype = new ArrayNode(null, $node);
-        $child = new ScalarNode('foo');
-        $child->setDefaultValue('bar');
-        $prototype->addChild($child);
-        $prototype->setAddIfNotSet(true);
-        $node->setPrototype($prototype);
-
-        return $node;
-    }
-
-    /**
-     * Tests that when a key attribute is mapped, that key is removed from the array.
-     * And if only 'value' element is left in the array, it will replace its wrapper array.
-     *
-     *     <things>
-     *         <option id="option1" value="value1">
-     *     </things>
-     *
-     * The above should finally be mapped to an array that looks like this
-     * (because "id" is the key attribute).
-     *
-     *     [
-     *         'things' => [
-     *             'option1' => 'value1'
-     *         ]
-     *     ]
-     *
-     * It's also possible to mix 'value-only' and 'non-value-only' elements in the array.
-     *
-     * <things>
-     *     <option id="option1" value="value1">
-     *     <option id="option2" value="value2" foo="foo2">
-     * </things>
-     *
-     * The above should finally be mapped to an array as follows
-     *
-     * [
-     *     'things' => [
-     *         'option1' => 'value1',
-     *         'option2' => [
-     *             'value' => 'value2',
-     *             'foo' => 'foo2'
-     *         ]
-     *     ]
-     * ]
-     *
-     * The 'value' element can also be ArrayNode:
-     *
-     * <things>
-     *     <option id="option1">
-     *         <value>
-     *            <foo>foo1</foo>
-     *            <bar>bar1</bar>
-     *         </value>
-     *     </option>
-     * </things>
-     *
-     * The above should be finally be mapped to an array as follows
-     *
-     * [
-     *     'things' => [
-     *         'option1' => [
-     *             'foo' => 'foo1',
-     *             'bar' => 'bar1'
-     *         ]
-     *     ]
-     * ]
-     *
-     * If using VariableNode for value node, it's also possible to mix different types of value nodes:
-     *
-     * <things>
-     *     <option id="option1">
-     *         <value>
-     *            <foo>foo1</foo>
-     *            <bar>bar1</bar>
-     *         </value>
-     *     </option>
-     *     <option id="option2" value="value2">
-     * </things>
-     *
-     * The above should be finally mapped to an array as follows
-     *
-     * [
-     *     'things' => [
-     *         'option1' => [
-     *             'foo' => 'foo1',
-     *             'bar' => 'bar1'
-     *         ],
-     *         'option2' => 'value2'
-     *     ]
-     * ]
-     *
-     * @dataProvider getDataForKeyRemovedLeftValueOnly
-     */
-    public function testMappedAttributeKeyIsRemovedLeftValueOnly($value, $children, $expected)
-    {
-        $node = new PrototypedArrayNode('root');
-        $node->setKeyAttribute('id', true);
-
-        // each item under the root is an array, with one scalar item
-        $prototype = new ArrayNode(null, $node);
-        $prototype->addChild(new ScalarNode('id'));
-        $prototype->addChild(new ScalarNode('foo'));
-        $prototype->addChild($value);
-        $node->setPrototype($prototype);
-
-        $normalized = $node->normalize($children);
-        $this->assertEquals($expected, $normalized);
-    }
-
-    public function getDataForKeyRemovedLeftValueOnly()
-    {
-        $scalarValue = new ScalarNode('value');
-
-        $arrayValue = new ArrayNode('value');
-        $arrayValue->addChild(new ScalarNode('foo'));
-        $arrayValue->addChild(new ScalarNode('bar'));
-
-        $variableValue = new VariableNode('value');
-
-        return [
-           [
-               $scalarValue,
-               [
-                   ['id' => 'option1', 'value' => 'value1'],
-               ],
-               ['option1' => 'value1'],
-           ],
-
-           [
-               $scalarValue,
-               [
-                   ['id' => 'option1', 'value' => 'value1'],
-                   ['id' => 'option2', 'value' => 'value2', 'foo' => 'foo2'],
-               ],
-               [
-                   'option1' => 'value1',
-                   'option2' => ['value' => 'value2', 'foo' => 'foo2'],
-               ],
-           ],
-
-           [
-               $arrayValue,
-               [
-                   [
-                       'id' => 'option1',
-                       'value' => ['foo' => 'foo1', 'bar' => 'bar1'],
-                   ],
-               ],
-               [
-                   'option1' => ['foo' => 'foo1', 'bar' => 'bar1'],
-               ],
-           ],
-
-           [$variableValue,
-               [
-                   [
-                       'id' => 'option1', 'value' => ['foo' => 'foo1', 'bar' => 'bar1'],
-                   ],
-                   ['id' => 'option2', 'value' => 'value2'],
-               ],
-               [
-                   'option1' => ['foo' => 'foo1', 'bar' => 'bar1'],
-                   'option2' => 'value2',
-               ],
-           ],
-        ];
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/ScalarNodeTest.php b/vendor/symfony/config/Tests/Definition/ScalarNodeTest.php
deleted file mode 100644
index 4413baf3c7..0000000000
--- a/vendor/symfony/config/Tests/Definition/ScalarNodeTest.php
+++ /dev/null
@@ -1,161 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\ArrayNode;
-use Symfony\Component\Config\Definition\ScalarNode;
-
-class ScalarNodeTest extends TestCase
-{
-    /**
-     * @dataProvider getValidValues
-     */
-    public function testNormalize($value)
-    {
-        $node = new ScalarNode('test');
-        $this->assertSame($value, $node->normalize($value));
-    }
-
-    public function getValidValues()
-    {
-        return [
-            [false],
-            [true],
-            [null],
-            [''],
-            ['foo'],
-            [0],
-            [1],
-            [0.0],
-            [0.1],
-        ];
-    }
-
-    public function testSetDeprecated()
-    {
-        $childNode = new ScalarNode('foo');
-        $childNode->setDeprecated('"%node%" is deprecated');
-
-        $this->assertTrue($childNode->isDeprecated());
-        $this->assertSame('"foo" is deprecated', $childNode->getDeprecationMessage($childNode->getName(), $childNode->getPath()));
-
-        $node = new ArrayNode('root');
-        $node->addChild($childNode);
-
-        $deprecationTriggered = 0;
-        $deprecationHandler = function ($level, $message, $file, $line) use (&$prevErrorHandler, &$deprecationTriggered) {
-            if (E_USER_DEPRECATED === $level) {
-                return ++$deprecationTriggered;
-            }
-
-            return $prevErrorHandler ? $prevErrorHandler($level, $message, $file, $line) : false;
-        };
-
-        $prevErrorHandler = set_error_handler($deprecationHandler);
-        $node->finalize([]);
-        restore_error_handler();
-        $this->assertSame(0, $deprecationTriggered, '->finalize() should not trigger if the deprecated node is not set');
-
-        $prevErrorHandler = set_error_handler($deprecationHandler);
-        $node->finalize(['foo' => '']);
-        restore_error_handler();
-        $this->assertSame(1, $deprecationTriggered, '->finalize() should trigger if the deprecated node is set');
-    }
-
-    /**
-     * @dataProvider getInvalidValues
-     */
-    public function testNormalizeThrowsExceptionOnInvalidValues($value)
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidTypeException');
-        $node = new ScalarNode('test');
-        $node->normalize($value);
-    }
-
-    public function getInvalidValues()
-    {
-        return [
-            [[]],
-            [['foo' => 'bar']],
-            [new \stdClass()],
-        ];
-    }
-
-    public function testNormalizeThrowsExceptionWithoutHint()
-    {
-        $node = new ScalarNode('test');
-
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidTypeException');
-        $this->expectExceptionMessage('Invalid type for path "test". Expected scalar, but got array.');
-
-        $node->normalize([]);
-    }
-
-    public function testNormalizeThrowsExceptionWithErrorMessage()
-    {
-        $node = new ScalarNode('test');
-        $node->setInfo('"the test value"');
-
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidTypeException');
-        $this->expectExceptionMessage("Invalid type for path \"test\". Expected scalar, but got array.\nHint: \"the test value\"");
-
-        $node->normalize([]);
-    }
-
-    /**
-     * @dataProvider getValidNonEmptyValues
-     *
-     * @param mixed $value
-     */
-    public function testValidNonEmptyValues($value)
-    {
-        $node = new ScalarNode('test');
-        $node->setAllowEmptyValue(false);
-
-        $this->assertSame($value, $node->finalize($value));
-    }
-
-    public function getValidNonEmptyValues()
-    {
-        return [
-            [false],
-            [true],
-            ['foo'],
-            [0],
-            [1],
-            [0.0],
-            [0.1],
-        ];
-    }
-
-    /**
-     * @dataProvider getEmptyValues
-     *
-     * @param mixed $value
-     */
-    public function testNotAllowedEmptyValuesThrowException($value)
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidConfigurationException');
-        $node = new ScalarNode('test');
-        $node->setAllowEmptyValue(false);
-        $node->finalize($value);
-    }
-
-    public function getEmptyValues()
-    {
-        return [
-            [null],
-            [''],
-        ];
-    }
-}
diff --git a/vendor/symfony/config/Tests/DependencyInjection/ConfigCachePassTest.php b/vendor/symfony/config/Tests/DependencyInjection/ConfigCachePassTest.php
deleted file mode 100644
index c2b95195dc..0000000000
--- a/vendor/symfony/config/Tests/DependencyInjection/ConfigCachePassTest.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\DependencyInjection;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\DependencyInjection\ConfigCachePass;
-use Symfony\Component\DependencyInjection\Argument\IteratorArgument;
-use Symfony\Component\DependencyInjection\ContainerBuilder;
-use Symfony\Component\DependencyInjection\Reference;
-
-/**
- * @group legacy
- */
-class ConfigCachePassTest extends TestCase
-{
-    public function testThatCheckersAreProcessedInPriorityOrder()
-    {
-        $container = new ContainerBuilder();
-
-        $definition = $container->register('config_cache_factory')->addArgument(null);
-        $container->register('checker_2')->addTag('config_cache.resource_checker', ['priority' => 100]);
-        $container->register('checker_1')->addTag('config_cache.resource_checker', ['priority' => 200]);
-        $container->register('checker_3')->addTag('config_cache.resource_checker');
-
-        $pass = new ConfigCachePass();
-        $pass->process($container);
-
-        $expected = new IteratorArgument([
-            new Reference('checker_1'),
-            new Reference('checker_2'),
-            new Reference('checker_3'),
-        ]);
-        $this->assertEquals($expected, $definition->getArgument(0));
-    }
-
-    public function testThatCheckersCanBeMissing()
-    {
-        $container = new ContainerBuilder();
-
-        $definitionsBefore = \count($container->getDefinitions());
-        $aliasesBefore = \count($container->getAliases());
-
-        $pass = new ConfigCachePass();
-        $pass->process($container);
-
-        // the container is untouched (i.e. no new definitions or aliases)
-        $this->assertCount($definitionsBefore, $container->getDefinitions());
-        $this->assertCount($aliasesBefore, $container->getAliases());
-    }
-}
diff --git a/vendor/symfony/config/Tests/Exception/FileLoaderLoadExceptionTest.php b/vendor/symfony/config/Tests/Exception/FileLoaderLoadExceptionTest.php
deleted file mode 100644
index 8363084c19..0000000000
--- a/vendor/symfony/config/Tests/Exception/FileLoaderLoadExceptionTest.php
+++ /dev/null
@@ -1,98 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Exception;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Exception\FileLoaderLoadException;
-
-class FileLoaderLoadExceptionTest extends TestCase
-{
-    public function testMessageCannotLoadResource()
-    {
-        $exception = new FileLoaderLoadException('resource', null);
-        $this->assertEquals('Cannot load resource "resource".', $exception->getMessage());
-    }
-
-    public function testMessageCannotLoadResourceWithType()
-    {
-        $exception = new FileLoaderLoadException('resource', null, null, null, 'foobar');
-        $this->assertEquals('Cannot load resource "resource". Make sure there is a loader supporting the "foobar" type.', $exception->getMessage());
-    }
-
-    public function testMessageCannotLoadResourceWithAnnotationType()
-    {
-        $exception = new FileLoaderLoadException('resource', null, null, null, 'annotation');
-        $this->assertEquals('Cannot load resource "resource". Make sure annotations are installed and enabled.', $exception->getMessage());
-    }
-
-    public function testMessageCannotImportResourceFromSource()
-    {
-        $exception = new FileLoaderLoadException('resource', 'sourceResource');
-        $this->assertEquals('Cannot import resource "resource" from "sourceResource".', $exception->getMessage());
-    }
-
-    public function testMessageCannotImportBundleResource()
-    {
-        $exception = new FileLoaderLoadException('@resource', 'sourceResource');
-        $this->assertEquals(
-            'Cannot import resource "@resource" from "sourceResource". '.
-            'Make sure the "resource" bundle is correctly registered and loaded in the application kernel class. '.
-            'If the bundle is registered, make sure the bundle path "@resource" is not empty.',
-            $exception->getMessage()
-        );
-    }
-
-    public function testMessageHasPreviousErrorWithDotAndUnableToLoad()
-    {
-        $exception = new FileLoaderLoadException(
-            'resource',
-            null,
-            null,
-            new \Exception('There was a previous error with an ending dot.')
-        );
-        $this->assertEquals(
-            'There was a previous error with an ending dot in resource (which is loaded in resource "resource").',
-            $exception->getMessage()
-        );
-    }
-
-    public function testMessageHasPreviousErrorWithoutDotAndUnableToLoad()
-    {
-        $exception = new FileLoaderLoadException(
-            'resource',
-            null,
-            null,
-            new \Exception('There was a previous error with no ending dot')
-        );
-        $this->assertEquals(
-            'There was a previous error with no ending dot in resource (which is loaded in resource "resource").',
-            $exception->getMessage()
-        );
-    }
-
-    public function testMessageHasPreviousErrorAndUnableToLoadBundle()
-    {
-        $exception = new FileLoaderLoadException(
-            '@resource',
-            null,
-            null,
-            new \Exception('There was a previous error with an ending dot.')
-        );
-        $this->assertEquals(
-            'There was a previous error with an ending dot in @resource '.
-            '(which is loaded in resource "@resource"). '.
-            'Make sure the "resource" bundle is correctly registered and loaded in the application kernel class. '.
-            'If the bundle is registered, make sure the bundle path "@resource" is not empty.',
-            $exception->getMessage()
-        );
-    }
-}
diff --git a/vendor/symfony/config/Tests/FileLocatorTest.php b/vendor/symfony/config/Tests/FileLocatorTest.php
deleted file mode 100644
index e931916af9..0000000000
--- a/vendor/symfony/config/Tests/FileLocatorTest.php
+++ /dev/null
@@ -1,114 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\FileLocator;
-
-class FileLocatorTest extends TestCase
-{
-    /**
-     * @dataProvider getIsAbsolutePathTests
-     */
-    public function testIsAbsolutePath($path)
-    {
-        $loader = new FileLocator([]);
-        $r = new \ReflectionObject($loader);
-        $m = $r->getMethod('isAbsolutePath');
-        $m->setAccessible(true);
-
-        $this->assertTrue($m->invoke($loader, $path), '->isAbsolutePath() returns true for an absolute path');
-    }
-
-    public function getIsAbsolutePathTests()
-    {
-        return [
-            ['/foo.xml'],
-            ['c:\\\\foo.xml'],
-            ['c:/foo.xml'],
-            ['\\server\\foo.xml'],
-            ['https://server/foo.xml'],
-            ['phar://server/foo.xml'],
-        ];
-    }
-
-    public function testLocate()
-    {
-        $loader = new FileLocator(__DIR__.'/Fixtures');
-
-        $this->assertEquals(
-            __DIR__.\DIRECTORY_SEPARATOR.'FileLocatorTest.php',
-            $loader->locate('FileLocatorTest.php', __DIR__),
-            '->locate() returns the absolute filename if the file exists in the given path'
-        );
-
-        $this->assertEquals(
-            __DIR__.'/Fixtures'.\DIRECTORY_SEPARATOR.'foo.xml',
-            $loader->locate('foo.xml', __DIR__),
-            '->locate() returns the absolute filename if the file exists in one of the paths given in the constructor'
-        );
-
-        $this->assertEquals(
-            __DIR__.'/Fixtures'.\DIRECTORY_SEPARATOR.'foo.xml',
-            $loader->locate(__DIR__.'/Fixtures'.\DIRECTORY_SEPARATOR.'foo.xml', __DIR__),
-            '->locate() returns the absolute filename if the file exists in one of the paths given in the constructor'
-        );
-
-        $loader = new FileLocator([__DIR__.'/Fixtures', __DIR__.'/Fixtures/Again']);
-
-        $this->assertEquals(
-            [__DIR__.'/Fixtures'.\DIRECTORY_SEPARATOR.'foo.xml', __DIR__.'/Fixtures/Again'.\DIRECTORY_SEPARATOR.'foo.xml'],
-            $loader->locate('foo.xml', __DIR__, false),
-            '->locate() returns an array of absolute filenames'
-        );
-
-        $this->assertEquals(
-            [__DIR__.'/Fixtures'.\DIRECTORY_SEPARATOR.'foo.xml', __DIR__.'/Fixtures/Again'.\DIRECTORY_SEPARATOR.'foo.xml'],
-            $loader->locate('foo.xml', __DIR__.'/Fixtures', false),
-            '->locate() returns an array of absolute filenames'
-        );
-
-        $loader = new FileLocator(__DIR__.'/Fixtures/Again');
-
-        $this->assertEquals(
-            [__DIR__.'/Fixtures'.\DIRECTORY_SEPARATOR.'foo.xml', __DIR__.'/Fixtures/Again'.\DIRECTORY_SEPARATOR.'foo.xml'],
-            $loader->locate('foo.xml', __DIR__.'/Fixtures', false),
-            '->locate() returns an array of absolute filenames'
-        );
-    }
-
-    public function testLocateThrowsAnExceptionIfTheFileDoesNotExists()
-    {
-        $this->expectException('Symfony\Component\Config\Exception\FileLocatorFileNotFoundException');
-        $this->expectExceptionMessage('The file "foobar.xml" does not exist');
-        $loader = new FileLocator([__DIR__.'/Fixtures']);
-
-        $loader->locate('foobar.xml', __DIR__);
-    }
-
-    public function testLocateThrowsAnExceptionIfTheFileDoesNotExistsInAbsolutePath()
-    {
-        $this->expectException('Symfony\Component\Config\Exception\FileLocatorFileNotFoundException');
-        $loader = new FileLocator([__DIR__.'/Fixtures']);
-
-        $loader->locate(__DIR__.'/Fixtures/foobar.xml', __DIR__);
-    }
-
-    public function testLocateEmpty()
-    {
-        $this->expectException('InvalidArgumentException');
-        $this->expectExceptionMessage('An empty file name is not valid to be located.');
-        $loader = new FileLocator([__DIR__.'/Fixtures']);
-
-        $loader->locate(null, __DIR__);
-    }
-}
diff --git a/vendor/symfony/config/Tests/Fixtures/Again/foo.xml b/vendor/symfony/config/Tests/Fixtures/Again/foo.xml
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/vendor/symfony/config/Tests/Fixtures/BadFileName.php b/vendor/symfony/config/Tests/Fixtures/BadFileName.php
deleted file mode 100644
index 0f79bdd523..0000000000
--- a/vendor/symfony/config/Tests/Fixtures/BadFileName.php
+++ /dev/null
@@ -1,9 +0,0 @@
-<?php
-
-namespace Symfony\Component\Config\Tests\Fixtures;
-
-class FileNameMismatchOnPurpose
-{
-}
-
-throw new \RuntimeException('Mismatch between file name and class name.');
diff --git a/vendor/symfony/config/Tests/Fixtures/BadParent.php b/vendor/symfony/config/Tests/Fixtures/BadParent.php
deleted file mode 100644
index 68d7296ed8..0000000000
--- a/vendor/symfony/config/Tests/Fixtures/BadParent.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-namespace Symfony\Component\Config\Tests\Fixtures;
-
-class BadParent extends MissingParent
-{
-}
diff --git a/vendor/symfony/config/Tests/Fixtures/Builder/BarNodeDefinition.php b/vendor/symfony/config/Tests/Fixtures/Builder/BarNodeDefinition.php
deleted file mode 100644
index b9c62e5377..0000000000
--- a/vendor/symfony/config/Tests/Fixtures/Builder/BarNodeDefinition.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Fixtures\Builder;
-
-use Symfony\Component\Config\Definition\Builder\NodeDefinition;
-use Symfony\Component\Config\Tests\Fixtures\BarNode;
-
-class BarNodeDefinition extends NodeDefinition
-{
-    protected function createNode()
-    {
-        return new BarNode($this->name);
-    }
-}
diff --git a/vendor/symfony/config/Tests/Fixtures/Builder/NodeBuilder.php b/vendor/symfony/config/Tests/Fixtures/Builder/NodeBuilder.php
deleted file mode 100644
index 22b8b32fb6..0000000000
--- a/vendor/symfony/config/Tests/Fixtures/Builder/NodeBuilder.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Fixtures\Builder;
-
-use Symfony\Component\Config\Definition\Builder\NodeBuilder as BaseNodeBuilder;
-
-class NodeBuilder extends BaseNodeBuilder
-{
-    public function barNode($name)
-    {
-        return $this->node($name, 'bar');
-    }
-
-    protected function getNodeClass($type)
-    {
-        switch ($type) {
-            case 'variable':
-                return __NAMESPACE__.'\\'.ucfirst($type).'NodeDefinition';
-            case 'bar':
-                return __NAMESPACE__.'\\'.ucfirst($type).'NodeDefinition';
-            default:
-                return parent::getNodeClass($type);
-        }
-    }
-}
diff --git a/vendor/symfony/config/Tests/Fixtures/Configuration/ExampleConfiguration.php b/vendor/symfony/config/Tests/Fixtures/Configuration/ExampleConfiguration.php
deleted file mode 100644
index 3f02700a18..0000000000
--- a/vendor/symfony/config/Tests/Fixtures/Configuration/ExampleConfiguration.php
+++ /dev/null
@@ -1,102 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Fixtures\Configuration;
-
-use Symfony\Component\Config\Definition\Builder\TreeBuilder;
-use Symfony\Component\Config\Definition\ConfigurationInterface;
-
-class ExampleConfiguration implements ConfigurationInterface
-{
-    public function getConfigTreeBuilder()
-    {
-        $treeBuilder = new TreeBuilder();
-        $rootNode = $treeBuilder->root('acme_root');
-
-        $rootNode
-            ->fixXmlConfig('parameter')
-            ->fixXmlConfig('connection')
-            ->fixXmlConfig('cms_page')
-            ->children()
-                ->booleanNode('boolean')->defaultTrue()->end()
-                ->scalarNode('scalar_empty')->end()
-                ->scalarNode('scalar_null')->defaultNull()->end()
-                ->scalarNode('scalar_true')->defaultTrue()->end()
-                ->scalarNode('scalar_false')->defaultFalse()->end()
-                ->scalarNode('scalar_default')->defaultValue('default')->end()
-                ->scalarNode('scalar_array_empty')->defaultValue([])->end()
-                ->scalarNode('scalar_array_defaults')->defaultValue(['elem1', 'elem2'])->end()
-                ->scalarNode('scalar_required')->isRequired()->end()
-                ->scalarNode('scalar_deprecated')->setDeprecated()->end()
-                ->scalarNode('scalar_deprecated_with_message')->setDeprecated('Deprecation custom message for "%node%" at "%path%"')->end()
-                ->scalarNode('node_with_a_looong_name')->end()
-                ->enumNode('enum_with_default')->values(['this', 'that'])->defaultValue('this')->end()
-                ->enumNode('enum')->values(['this', 'that'])->end()
-                ->arrayNode('array')
-                    ->info('some info')
-                    ->canBeUnset()
-                    ->children()
-                        ->scalarNode('child1')->end()
-                        ->scalarNode('child2')->end()
-                        ->scalarNode('child3')
-                            ->info(
-                                "this is a long\n".
-                                "multi-line info text\n".
-                                'which should be indented'
-                            )
-                            ->example('example setting')
-                        ->end()
-                    ->end()
-                ->end()
-                ->arrayNode('scalar_prototyped')
-                    ->prototype('scalar')->end()
-                ->end()
-                ->arrayNode('parameters')
-                    ->useAttributeAsKey('name')
-                    ->prototype('scalar')->info('Parameter name')->end()
-                ->end()
-                ->arrayNode('connections')
-                    ->prototype('array')
-                        ->children()
-                            ->scalarNode('user')->end()
-                            ->scalarNode('pass')->end()
-                        ->end()
-                    ->end()
-                ->end()
-                ->arrayNode('cms_pages')
-                    ->useAttributeAsKey('page')
-                    ->prototype('array')
-                        ->useAttributeAsKey('locale')
-                        ->prototype('array')
-                            ->children()
-                                ->scalarNode('title')->isRequired()->end()
-                                ->scalarNode('path')->isRequired()->end()
-                            ->end()
-                        ->end()
-                    ->end()
-                ->end()
-                ->arrayNode('pipou')
-                    ->useAttributeAsKey('name')
-                    ->prototype('array')
-                        ->prototype('array')
-                            ->children()
-                                ->scalarNode('didou')
-                                ->end()
-                            ->end()
-                        ->end()
-                    ->end()
-                ->end()
-            ->end()
-        ;
-
-        return $treeBuilder;
-    }
-}
diff --git a/vendor/symfony/config/Tests/Fixtures/ParseError.php b/vendor/symfony/config/Tests/Fixtures/ParseError.php
deleted file mode 100644
index 6bb2213824..0000000000
--- a/vendor/symfony/config/Tests/Fixtures/ParseError.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-namespace Symfony\Component\Config\Tests\Fixtures;
-
-class ParseError
-{
-// missing closing bracket
diff --git a/vendor/symfony/config/Tests/Fixtures/Resource/.hiddenFile b/vendor/symfony/config/Tests/Fixtures/Resource/.hiddenFile
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/vendor/symfony/config/Tests/Fixtures/Resource/ConditionalClass.php b/vendor/symfony/config/Tests/Fixtures/Resource/ConditionalClass.php
deleted file mode 100644
index 2ba48c5b05..0000000000
--- a/vendor/symfony/config/Tests/Fixtures/Resource/ConditionalClass.php
+++ /dev/null
@@ -1,9 +0,0 @@
-<?php
-
-namespace Symfony\Component\Config\Tests\Fixtures\Resource;
-
-if (!class_exists(MissingClass::class)) {
-    class ConditionalClass
-    {
-    }
-}
diff --git a/vendor/symfony/config/Tests/Fixtures/Util/document_type.xml b/vendor/symfony/config/Tests/Fixtures/Util/document_type.xml
deleted file mode 100644
index 4c25228263..0000000000
--- a/vendor/symfony/config/Tests/Fixtures/Util/document_type.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE scan [<!ENTITY test SYSTEM "php://filter/read=convert.base64-encode/resource={{ resource }}">]>
-<scan></scan>
diff --git a/vendor/symfony/config/Tests/Fixtures/Util/invalid.xml b/vendor/symfony/config/Tests/Fixtures/Util/invalid.xml
deleted file mode 100644
index a07af9fd85..0000000000
--- a/vendor/symfony/config/Tests/Fixtures/Util/invalid.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<root>
diff --git a/vendor/symfony/config/Tests/Fixtures/Util/invalid_schema.xml b/vendor/symfony/config/Tests/Fixtures/Util/invalid_schema.xml
deleted file mode 100644
index e2725a2c2a..0000000000
--- a/vendor/symfony/config/Tests/Fixtures/Util/invalid_schema.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<root2 xmlns="http://example.com/schema" />
diff --git a/vendor/symfony/config/Tests/Fixtures/Util/not_readable.xml b/vendor/symfony/config/Tests/Fixtures/Util/not_readable.xml
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/vendor/symfony/config/Tests/Fixtures/Util/schema.xsd b/vendor/symfony/config/Tests/Fixtures/Util/schema.xsd
deleted file mode 100644
index e56820f691..0000000000
--- a/vendor/symfony/config/Tests/Fixtures/Util/schema.xsd
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<xsd:schema xmlns="http://example.com/schema"
-    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-    targetNamespace="http://example.com/schema"
-    elementFormDefault="qualified">
-
-  <xsd:element name="root" />
-</xsd:schema>
diff --git a/vendor/symfony/config/Tests/Fixtures/Util/valid.xml b/vendor/symfony/config/Tests/Fixtures/Util/valid.xml
deleted file mode 100644
index a96bb38267..0000000000
--- a/vendor/symfony/config/Tests/Fixtures/Util/valid.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<root xmlns="http://example.com/schema">
-</root>
diff --git a/vendor/symfony/config/Tests/Fixtures/foo.xml b/vendor/symfony/config/Tests/Fixtures/foo.xml
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/vendor/symfony/config/Tests/Loader/DelegatingLoaderTest.php b/vendor/symfony/config/Tests/Loader/DelegatingLoaderTest.php
deleted file mode 100644
index 38ae6ff7b8..0000000000
--- a/vendor/symfony/config/Tests/Loader/DelegatingLoaderTest.php
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Loader;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Loader\DelegatingLoader;
-use Symfony\Component\Config\Loader\LoaderResolver;
-
-class DelegatingLoaderTest extends TestCase
-{
-    public function testConstructor()
-    {
-        new DelegatingLoader($resolver = new LoaderResolver());
-        $this->assertTrue(true, '__construct() takes a loader resolver as its first argument');
-    }
-
-    public function testGetSetResolver()
-    {
-        $resolver = new LoaderResolver();
-        $loader = new DelegatingLoader($resolver);
-        $this->assertSame($resolver, $loader->getResolver(), '->getResolver() gets the resolver loader');
-        $loader->setResolver($resolver = new LoaderResolver());
-        $this->assertSame($resolver, $loader->getResolver(), '->setResolver() sets the resolver loader');
-    }
-
-    public function testSupports()
-    {
-        $loader1 = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock();
-        $loader1->expects($this->once())->method('supports')->willReturn(true);
-        $loader = new DelegatingLoader(new LoaderResolver([$loader1]));
-        $this->assertTrue($loader->supports('foo.xml'), '->supports() returns true if the resource is loadable');
-
-        $loader1 = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock();
-        $loader1->expects($this->once())->method('supports')->willReturn(false);
-        $loader = new DelegatingLoader(new LoaderResolver([$loader1]));
-        $this->assertFalse($loader->supports('foo.foo'), '->supports() returns false if the resource is not loadable');
-    }
-
-    public function testLoad()
-    {
-        $loader = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock();
-        $loader->expects($this->once())->method('supports')->willReturn(true);
-        $loader->expects($this->once())->method('load');
-        $resolver = new LoaderResolver([$loader]);
-        $loader = new DelegatingLoader($resolver);
-
-        $loader->load('foo');
-    }
-
-    public function testLoadThrowsAnExceptionIfTheResourceCannotBeLoaded()
-    {
-        $this->expectException('Symfony\Component\Config\Exception\FileLoaderLoadException');
-        $loader = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock();
-        $loader->expects($this->once())->method('supports')->willReturn(false);
-        $resolver = new LoaderResolver([$loader]);
-        $loader = new DelegatingLoader($resolver);
-
-        $loader->load('foo');
-    }
-}
diff --git a/vendor/symfony/config/Tests/Loader/FileLoaderTest.php b/vendor/symfony/config/Tests/Loader/FileLoaderTest.php
deleted file mode 100644
index b59ace46f9..0000000000
--- a/vendor/symfony/config/Tests/Loader/FileLoaderTest.php
+++ /dev/null
@@ -1,128 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Loader;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\FileLocator;
-use Symfony\Component\Config\Loader\FileLoader;
-use Symfony\Component\Config\Loader\LoaderResolver;
-
-class FileLoaderTest extends TestCase
-{
-    public function testImportWithFileLocatorDelegation()
-    {
-        $locatorMock = $this->getMockBuilder('Symfony\Component\Config\FileLocatorInterface')->getMock();
-
-        $locatorMockForAdditionalLoader = $this->getMockBuilder('Symfony\Component\Config\FileLocatorInterface')->getMock();
-        $locatorMockForAdditionalLoader->expects($this->any())->method('locate')->will($this->onConsecutiveCalls(
-                ['path/to/file1'],                    // Default
-                ['path/to/file1', 'path/to/file2'],   // First is imported
-                ['path/to/file1', 'path/to/file2'],   // Second is imported
-                ['path/to/file1'],                    // Exception
-                ['path/to/file1', 'path/to/file2']    // Exception
-                ));
-
-        $fileLoader = new TestFileLoader($locatorMock);
-        $fileLoader->setSupports(false);
-        $fileLoader->setCurrentDir('.');
-
-        $additionalLoader = new TestFileLoader($locatorMockForAdditionalLoader);
-        $additionalLoader->setCurrentDir('.');
-
-        $fileLoader->setResolver($loaderResolver = new LoaderResolver([$fileLoader, $additionalLoader]));
-
-        // Default case
-        $this->assertSame('path/to/file1', $fileLoader->import('my_resource'));
-
-        // Check first file is imported if not already loading
-        $this->assertSame('path/to/file1', $fileLoader->import('my_resource'));
-
-        // Check second file is imported if first is already loading
-        $fileLoader->addLoading('path/to/file1');
-        $this->assertSame('path/to/file2', $fileLoader->import('my_resource'));
-
-        // Check exception throws if first (and only available) file is already loading
-        try {
-            $fileLoader->import('my_resource');
-            $this->fail('->import() throws a FileLoaderImportCircularReferenceException if the resource is already loading');
-        } catch (\Exception $e) {
-            $this->assertInstanceOf('Symfony\Component\Config\Exception\FileLoaderImportCircularReferenceException', $e, '->import() throws a FileLoaderImportCircularReferenceException if the resource is already loading');
-        }
-
-        // Check exception throws if all files are already loading
-        try {
-            $fileLoader->addLoading('path/to/file2');
-            $fileLoader->import('my_resource');
-            $this->fail('->import() throws a FileLoaderImportCircularReferenceException if the resource is already loading');
-        } catch (\Exception $e) {
-            $this->assertInstanceOf('Symfony\Component\Config\Exception\FileLoaderImportCircularReferenceException', $e, '->import() throws a FileLoaderImportCircularReferenceException if the resource is already loading');
-        }
-    }
-
-    public function testImportWithGlobLikeResource()
-    {
-        $locatorMock = $this->getMockBuilder('Symfony\Component\Config\FileLocatorInterface')->getMock();
-        $loader = new TestFileLoader($locatorMock);
-
-        $this->assertSame('[foo]', $loader->import('[foo]'));
-    }
-
-    public function testImportWithNoGlobMatch()
-    {
-        $locatorMock = $this->getMockBuilder('Symfony\Component\Config\FileLocatorInterface')->getMock();
-        $loader = new TestFileLoader($locatorMock);
-
-        $this->assertNull($loader->import('./*.abc'));
-    }
-
-    public function testImportWithSimpleGlob()
-    {
-        $loader = new TestFileLoader(new FileLocator(__DIR__));
-
-        $this->assertSame(__FILE__, strtr($loader->import('FileLoaderTest.*'), '/', \DIRECTORY_SEPARATOR));
-    }
-}
-
-class TestFileLoader extends FileLoader
-{
-    private $supports = true;
-
-    public function load($resource, $type = null)
-    {
-        return $resource;
-    }
-
-    public function supports($resource, $type = null)
-    {
-        return $this->supports;
-    }
-
-    public function addLoading($resource)
-    {
-        self::$loading[$resource] = true;
-    }
-
-    public function removeLoading($resource)
-    {
-        unset(self::$loading[$resource]);
-    }
-
-    public function clearLoading()
-    {
-        self::$loading = [];
-    }
-
-    public function setSupports($supports)
-    {
-        $this->supports = $supports;
-    }
-}
diff --git a/vendor/symfony/config/Tests/Loader/LoaderResolverTest.php b/vendor/symfony/config/Tests/Loader/LoaderResolverTest.php
deleted file mode 100644
index aabc2a600d..0000000000
--- a/vendor/symfony/config/Tests/Loader/LoaderResolverTest.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Loader;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Loader\LoaderResolver;
-
-class LoaderResolverTest extends TestCase
-{
-    public function testConstructor()
-    {
-        $resolver = new LoaderResolver([
-            $loader = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock(),
-        ]);
-
-        $this->assertEquals([$loader], $resolver->getLoaders(), '__construct() takes an array of loaders as its first argument');
-    }
-
-    public function testResolve()
-    {
-        $loader = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock();
-        $resolver = new LoaderResolver([$loader]);
-        $this->assertFalse($resolver->resolve('foo.foo'), '->resolve() returns false if no loader is able to load the resource');
-
-        $loader = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock();
-        $loader->expects($this->once())->method('supports')->willReturn(true);
-        $resolver = new LoaderResolver([$loader]);
-        $this->assertEquals($loader, $resolver->resolve(function () {}), '->resolve() returns the loader for the given resource');
-    }
-
-    public function testLoaders()
-    {
-        $resolver = new LoaderResolver();
-        $resolver->addLoader($loader = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock());
-
-        $this->assertEquals([$loader], $resolver->getLoaders(), 'addLoader() adds a loader');
-    }
-}
diff --git a/vendor/symfony/config/Tests/Loader/LoaderTest.php b/vendor/symfony/config/Tests/Loader/LoaderTest.php
deleted file mode 100644
index 35a911ef3a..0000000000
--- a/vendor/symfony/config/Tests/Loader/LoaderTest.php
+++ /dev/null
@@ -1,116 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Loader;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Loader\Loader;
-
-class LoaderTest extends TestCase
-{
-    public function testGetSetResolver()
-    {
-        $resolver = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderResolverInterface')->getMock();
-
-        $loader = new ProjectLoader1();
-        $loader->setResolver($resolver);
-
-        $this->assertSame($resolver, $loader->getResolver(), '->setResolver() sets the resolver loader');
-    }
-
-    public function testResolve()
-    {
-        $resolvedLoader = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock();
-
-        $resolver = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderResolverInterface')->getMock();
-        $resolver->expects($this->once())
-            ->method('resolve')
-            ->with('foo.xml')
-            ->willReturn($resolvedLoader);
-
-        $loader = new ProjectLoader1();
-        $loader->setResolver($resolver);
-
-        $this->assertSame($loader, $loader->resolve('foo.foo'), '->resolve() finds a loader');
-        $this->assertSame($resolvedLoader, $loader->resolve('foo.xml'), '->resolve() finds a loader');
-    }
-
-    public function testResolveWhenResolverCannotFindLoader()
-    {
-        $this->expectException('Symfony\Component\Config\Exception\FileLoaderLoadException');
-        $resolver = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderResolverInterface')->getMock();
-        $resolver->expects($this->once())
-            ->method('resolve')
-            ->with('FOOBAR')
-            ->willReturn(false);
-
-        $loader = new ProjectLoader1();
-        $loader->setResolver($resolver);
-
-        $loader->resolve('FOOBAR');
-    }
-
-    public function testImport()
-    {
-        $resolvedLoader = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock();
-        $resolvedLoader->expects($this->once())
-            ->method('load')
-            ->with('foo')
-            ->willReturn('yes');
-
-        $resolver = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderResolverInterface')->getMock();
-        $resolver->expects($this->once())
-            ->method('resolve')
-            ->with('foo')
-            ->willReturn($resolvedLoader);
-
-        $loader = new ProjectLoader1();
-        $loader->setResolver($resolver);
-
-        $this->assertEquals('yes', $loader->import('foo'));
-    }
-
-    public function testImportWithType()
-    {
-        $resolvedLoader = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock();
-        $resolvedLoader->expects($this->once())
-            ->method('load')
-            ->with('foo', 'bar')
-            ->willReturn('yes');
-
-        $resolver = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderResolverInterface')->getMock();
-        $resolver->expects($this->once())
-            ->method('resolve')
-            ->with('foo', 'bar')
-            ->willReturn($resolvedLoader);
-
-        $loader = new ProjectLoader1();
-        $loader->setResolver($resolver);
-
-        $this->assertEquals('yes', $loader->import('foo', 'bar'));
-    }
-}
-
-class ProjectLoader1 extends Loader
-{
-    public function load($resource, $type = null)
-    {
-    }
-
-    public function supports($resource, $type = null)
-    {
-        return \is_string($resource) && 'foo' === pathinfo($resource, PATHINFO_EXTENSION);
-    }
-
-    public function getType()
-    {
-    }
-}
diff --git a/vendor/symfony/config/Tests/Resource/ClassExistenceResourceTest.php b/vendor/symfony/config/Tests/Resource/ClassExistenceResourceTest.php
deleted file mode 100644
index 8020a57884..0000000000
--- a/vendor/symfony/config/Tests/Resource/ClassExistenceResourceTest.php
+++ /dev/null
@@ -1,130 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Resource;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Resource\ClassExistenceResource;
-use Symfony\Component\Config\Tests\Fixtures\BadFileName;
-use Symfony\Component\Config\Tests\Fixtures\BadParent;
-use Symfony\Component\Config\Tests\Fixtures\ParseError;
-use Symfony\Component\Config\Tests\Fixtures\Resource\ConditionalClass;
-
-class ClassExistenceResourceTest extends TestCase
-{
-    public function testToString()
-    {
-        $res = new ClassExistenceResource('BarClass');
-        $this->assertSame('BarClass', (string) $res);
-    }
-
-    public function testGetResource()
-    {
-        $res = new ClassExistenceResource('BarClass');
-        $this->assertSame('BarClass', $res->getResource());
-    }
-
-    public function testIsFreshWhenClassDoesNotExist()
-    {
-        $res = new ClassExistenceResource('Symfony\Component\Config\Tests\Fixtures\BarClass');
-
-        $this->assertTrue($res->isFresh(time()));
-
-        eval(<<<EOF
-namespace Symfony\Component\Config\Tests\Fixtures;
-
-class BarClass
-{
-}
-EOF
-        );
-
-        $this->assertFalse($res->isFresh(time()));
-    }
-
-    public function testIsFreshWhenClassExists()
-    {
-        $res = new ClassExistenceResource('Symfony\Component\Config\Tests\Resource\ClassExistenceResourceTest');
-
-        $this->assertTrue($res->isFresh(time()));
-    }
-
-    public function testExistsKo()
-    {
-        spl_autoload_register($autoloader = function ($class) use (&$loadedClass) { $loadedClass = $class; });
-
-        try {
-            $res = new ClassExistenceResource('MissingFooClass');
-            $this->assertTrue($res->isFresh(0));
-
-            $this->assertSame('MissingFooClass', $loadedClass);
-
-            $loadedClass = 123;
-
-            new ClassExistenceResource('MissingFooClass', false);
-
-            $this->assertSame(123, $loadedClass);
-        } finally {
-            spl_autoload_unregister($autoloader);
-        }
-    }
-
-    public function testBadParentWithTimestamp()
-    {
-        $res = new ClassExistenceResource(BadParent::class, false);
-        $this->assertTrue($res->isFresh(time()));
-    }
-
-    public function testBadParentWithNoTimestamp()
-    {
-        $this->expectException('ReflectionException');
-        $this->expectExceptionMessage('Class "Symfony\Component\Config\Tests\Fixtures\MissingParent" not found while loading "Symfony\Component\Config\Tests\Fixtures\BadParent".');
-
-        $res = new ClassExistenceResource(BadParent::class, false);
-        $res->isFresh(0);
-    }
-
-    public function testBadFileName()
-    {
-        $this->expectException('ReflectionException');
-        $this->expectExceptionMessage('Mismatch between file name and class name.');
-
-        $res = new ClassExistenceResource(BadFileName::class, false);
-        $res->isFresh(0);
-    }
-
-    public function testBadFileNameBis()
-    {
-        $this->expectException('ReflectionException');
-        $this->expectExceptionMessage('Mismatch between file name and class name.');
-
-        $res = new ClassExistenceResource(BadFileName::class, false);
-        $res->isFresh(0);
-    }
-
-    public function testConditionalClass()
-    {
-        $res = new ClassExistenceResource(ConditionalClass::class, false);
-
-        $this->assertFalse($res->isFresh(0));
-    }
-
-    /**
-     * @requires PHP 7
-     */
-    public function testParseError()
-    {
-        $this->expectException('ParseError');
-
-        $res = new ClassExistenceResource(ParseError::class, false);
-        $res->isFresh(0);
-    }
-}
diff --git a/vendor/symfony/config/Tests/Resource/ComposerResourceTest.php b/vendor/symfony/config/Tests/Resource/ComposerResourceTest.php
deleted file mode 100644
index 6857c766d1..0000000000
--- a/vendor/symfony/config/Tests/Resource/ComposerResourceTest.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Resource;
-
-use Composer\Autoload\ClassLoader;
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Resource\ComposerResource;
-
-class ComposerResourceTest extends TestCase
-{
-    public function testGetVendor()
-    {
-        $res = new ComposerResource();
-
-        $r = new \ReflectionClass(ClassLoader::class);
-        $found = false;
-
-        foreach ($res->getVendors() as $vendor) {
-            if ($vendor && 0 === strpos($r->getFileName(), $vendor)) {
-                $found = true;
-                break;
-            }
-        }
-
-        $this->assertTrue($found);
-    }
-
-    public function testSerializeUnserialize()
-    {
-        $res = new ComposerResource();
-        $ser = unserialize(serialize($res));
-
-        $this->assertTrue($res->isFresh(0));
-        $this->assertTrue($ser->isFresh(0));
-
-        $this->assertEquals($res, $ser);
-    }
-}
diff --git a/vendor/symfony/config/Tests/Resource/DirectoryResourceTest.php b/vendor/symfony/config/Tests/Resource/DirectoryResourceTest.php
deleted file mode 100644
index 40b1790101..0000000000
--- a/vendor/symfony/config/Tests/Resource/DirectoryResourceTest.php
+++ /dev/null
@@ -1,181 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Resource;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Resource\DirectoryResource;
-
-class DirectoryResourceTest extends TestCase
-{
-    protected $directory;
-
-    protected function setUp()
-    {
-        $this->directory = sys_get_temp_dir().\DIRECTORY_SEPARATOR.'symfonyDirectoryIterator';
-        if (!file_exists($this->directory)) {
-            mkdir($this->directory);
-        }
-        touch($this->directory.'/tmp.xml');
-    }
-
-    protected function tearDown()
-    {
-        if (!is_dir($this->directory)) {
-            return;
-        }
-        $this->removeDirectory($this->directory);
-    }
-
-    protected function removeDirectory($directory)
-    {
-        $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($directory), \RecursiveIteratorIterator::CHILD_FIRST);
-        foreach ($iterator as $path) {
-            if (preg_match('#[/\\\\]\.\.?$#', $path->__toString())) {
-                continue;
-            }
-            if ($path->isDir()) {
-                rmdir($path->__toString());
-            } else {
-                unlink($path->__toString());
-            }
-        }
-        rmdir($directory);
-    }
-
-    public function testGetResource()
-    {
-        $resource = new DirectoryResource($this->directory);
-        $this->assertSame(realpath($this->directory), $resource->getResource(), '->getResource() returns the path to the resource');
-    }
-
-    public function testGetPattern()
-    {
-        $resource = new DirectoryResource($this->directory, 'bar');
-        $this->assertEquals('bar', $resource->getPattern());
-    }
-
-    public function testResourceDoesNotExist()
-    {
-        $this->expectException('InvalidArgumentException');
-        $this->expectExceptionMessageRegExp('/The directory ".*" does not exist./');
-        new DirectoryResource('/____foo/foobar'.mt_rand(1, 999999));
-    }
-
-    public function testIsFresh()
-    {
-        $resource = new DirectoryResource($this->directory);
-        $this->assertTrue($resource->isFresh(time() + 10), '->isFresh() returns true if the resource has not changed');
-        $this->assertFalse($resource->isFresh(time() - 86400), '->isFresh() returns false if the resource has been updated');
-    }
-
-    public function testIsFreshForDeletedResources()
-    {
-        $resource = new DirectoryResource($this->directory);
-        $this->removeDirectory($this->directory);
-
-        $this->assertFalse($resource->isFresh(time()), '->isFresh() returns false if the resource does not exist');
-    }
-
-    public function testIsFreshUpdateFile()
-    {
-        $resource = new DirectoryResource($this->directory);
-        touch($this->directory.'/tmp.xml', time() + 20);
-        $this->assertFalse($resource->isFresh(time() + 10), '->isFresh() returns false if an existing file is modified');
-    }
-
-    public function testIsFreshNewFile()
-    {
-        $resource = new DirectoryResource($this->directory);
-        touch($this->directory.'/new.xml', time() + 20);
-        $this->assertFalse($resource->isFresh(time() + 10), '->isFresh() returns false if a new file is added');
-    }
-
-    public function testIsFreshNewFileWithDifferentPattern()
-    {
-        $resource = new DirectoryResource($this->directory, '/.xml$/');
-        touch($this->directory.'/new.yaml', time() + 20);
-        $this->assertTrue($resource->isFresh(time() + 10), '->isFresh() returns true if a new file with a non-matching pattern is added');
-    }
-
-    public function testIsFreshDeleteFile()
-    {
-        $resource = new DirectoryResource($this->directory);
-        $time = time();
-        sleep(1);
-        unlink($this->directory.'/tmp.xml');
-        $this->assertFalse($resource->isFresh($time), '->isFresh() returns false if an existing file is removed');
-    }
-
-    public function testIsFreshDeleteDirectory()
-    {
-        $resource = new DirectoryResource($this->directory);
-        $this->removeDirectory($this->directory);
-        $this->assertFalse($resource->isFresh(time()), '->isFresh() returns false if the whole resource is removed');
-    }
-
-    public function testIsFreshCreateFileInSubdirectory()
-    {
-        $subdirectory = $this->directory.'/subdirectory';
-        mkdir($subdirectory);
-
-        $resource = new DirectoryResource($this->directory);
-        $this->assertTrue($resource->isFresh(time() + 10), '->isFresh() returns true if an unmodified subdirectory exists');
-
-        touch($subdirectory.'/newfile.xml', time() + 20);
-        $this->assertFalse($resource->isFresh(time() + 10), '->isFresh() returns false if a new file in a subdirectory is added');
-    }
-
-    public function testIsFreshModifySubdirectory()
-    {
-        $resource = new DirectoryResource($this->directory);
-
-        $subdirectory = $this->directory.'/subdirectory';
-        mkdir($subdirectory);
-        touch($subdirectory, time() + 20);
-
-        $this->assertFalse($resource->isFresh(time() + 10), '->isFresh() returns false if a subdirectory is modified (e.g. a file gets deleted)');
-    }
-
-    public function testFilterRegexListNoMatch()
-    {
-        $resource = new DirectoryResource($this->directory, '/\.(foo|xml)$/');
-
-        touch($this->directory.'/new.bar', time() + 20);
-        $this->assertTrue($resource->isFresh(time() + 10), '->isFresh() returns true if a new file not matching the filter regex is created');
-    }
-
-    public function testFilterRegexListMatch()
-    {
-        $resource = new DirectoryResource($this->directory, '/\.(foo|xml)$/');
-
-        touch($this->directory.'/new.xml', time() + 20);
-        $this->assertFalse($resource->isFresh(time() + 10), '->isFresh() returns false if an new file matching the filter regex is created ');
-    }
-
-    public function testSerializeUnserialize()
-    {
-        $resource = new DirectoryResource($this->directory, '/\.(foo|xml)$/');
-
-        unserialize(serialize($resource));
-
-        $this->assertSame(realpath($this->directory), $resource->getResource());
-        $this->assertSame('/\.(foo|xml)$/', $resource->getPattern());
-    }
-
-    public function testResourcesWithDifferentPatternsAreDifferent()
-    {
-        $resourceA = new DirectoryResource($this->directory, '/.xml$/');
-        $resourceB = new DirectoryResource($this->directory, '/.yaml$/');
-
-        $this->assertCount(2, array_unique([$resourceA, $resourceB]));
-    }
-}
diff --git a/vendor/symfony/config/Tests/Resource/FileExistenceResourceTest.php b/vendor/symfony/config/Tests/Resource/FileExistenceResourceTest.php
deleted file mode 100644
index 433f65e820..0000000000
--- a/vendor/symfony/config/Tests/Resource/FileExistenceResourceTest.php
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Resource;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Resource\FileExistenceResource;
-
-class FileExistenceResourceTest extends TestCase
-{
-    protected $resource;
-    protected $file;
-    protected $time;
-
-    protected function setUp()
-    {
-        $this->file = realpath(sys_get_temp_dir()).'/tmp.xml';
-        $this->time = time();
-        $this->resource = new FileExistenceResource($this->file);
-    }
-
-    protected function tearDown()
-    {
-        if (file_exists($this->file)) {
-            unlink($this->file);
-        }
-    }
-
-    public function testToString()
-    {
-        $this->assertSame($this->file, (string) $this->resource);
-    }
-
-    public function testGetResource()
-    {
-        $this->assertSame($this->file, $this->resource->getResource(), '->getResource() returns the path to the resource');
-    }
-
-    public function testIsFreshWithExistingResource()
-    {
-        touch($this->file, $this->time);
-        $serialized = serialize(new FileExistenceResource($this->file));
-
-        $resource = unserialize($serialized);
-        $this->assertTrue($resource->isFresh($this->time), '->isFresh() returns true if the resource is still present');
-
-        unlink($this->file);
-        $resource = unserialize($serialized);
-        $this->assertFalse($resource->isFresh($this->time), '->isFresh() returns false if the resource has been deleted');
-    }
-
-    public function testIsFreshWithAbsentResource()
-    {
-        $serialized = serialize(new FileExistenceResource($this->file));
-
-        $resource = unserialize($serialized);
-        $this->assertTrue($resource->isFresh($this->time), '->isFresh() returns true if the resource is still absent');
-
-        touch($this->file, $this->time);
-        $resource = unserialize($serialized);
-        $this->assertFalse($resource->isFresh($this->time), '->isFresh() returns false if the resource has been created');
-    }
-}
diff --git a/vendor/symfony/config/Tests/Resource/FileResourceTest.php b/vendor/symfony/config/Tests/Resource/FileResourceTest.php
deleted file mode 100644
index 968c7e9266..0000000000
--- a/vendor/symfony/config/Tests/Resource/FileResourceTest.php
+++ /dev/null
@@ -1,83 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Resource;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Resource\FileResource;
-
-class FileResourceTest extends TestCase
-{
-    protected $resource;
-    protected $file;
-    protected $time;
-
-    protected function setUp()
-    {
-        $this->file = sys_get_temp_dir().'/tmp.xml';
-        $this->time = time();
-        touch($this->file, $this->time);
-        $this->resource = new FileResource($this->file);
-    }
-
-    protected function tearDown()
-    {
-        if (!file_exists($this->file)) {
-            return;
-        }
-
-        unlink($this->file);
-    }
-
-    public function testGetResource()
-    {
-        $this->assertSame(realpath($this->file), $this->resource->getResource(), '->getResource() returns the path to the resource');
-    }
-
-    public function testGetResourceWithScheme()
-    {
-        $resource = new FileResource('file://'.$this->file);
-        $this->assertSame('file://'.$this->file, $resource->getResource(), '->getResource() returns the path to the schemed resource');
-    }
-
-    public function testToString()
-    {
-        $this->assertSame(realpath($this->file), (string) $this->resource);
-    }
-
-    public function testResourceDoesNotExist()
-    {
-        $this->expectException('InvalidArgumentException');
-        $this->expectExceptionMessageRegExp('/The file ".*" does not exist./');
-        new FileResource('/____foo/foobar'.mt_rand(1, 999999));
-    }
-
-    public function testIsFresh()
-    {
-        $this->assertTrue($this->resource->isFresh($this->time), '->isFresh() returns true if the resource has not changed in same second');
-        $this->assertTrue($this->resource->isFresh($this->time + 10), '->isFresh() returns true if the resource has not changed');
-        $this->assertFalse($this->resource->isFresh($this->time - 86400), '->isFresh() returns false if the resource has been updated');
-    }
-
-    public function testIsFreshForDeletedResources()
-    {
-        unlink($this->file);
-
-        $this->assertFalse($this->resource->isFresh($this->time), '->isFresh() returns false if the resource does not exist');
-    }
-
-    public function testSerializeUnserialize()
-    {
-        unserialize(serialize($this->resource));
-
-        $this->assertSame(realpath($this->file), $this->resource->getResource());
-    }
-}
diff --git a/vendor/symfony/config/Tests/Resource/GlobResourceTest.php b/vendor/symfony/config/Tests/Resource/GlobResourceTest.php
deleted file mode 100644
index cfbfd2b455..0000000000
--- a/vendor/symfony/config/Tests/Resource/GlobResourceTest.php
+++ /dev/null
@@ -1,114 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Resource;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Resource\GlobResource;
-
-class GlobResourceTest extends TestCase
-{
-    protected function tearDown()
-    {
-        $dir = \dirname(__DIR__).'/Fixtures';
-        @rmdir($dir.'/TmpGlob');
-        @unlink($dir.'/TmpGlob');
-        @unlink($dir.'/Resource/TmpGlob');
-        touch($dir.'/Resource/.hiddenFile');
-    }
-
-    public function testIterator()
-    {
-        $dir = \dirname(__DIR__).\DIRECTORY_SEPARATOR.'Fixtures';
-        $resource = new GlobResource($dir, '/Resource', true);
-
-        $paths = iterator_to_array($resource);
-
-        $file = $dir.'/Resource'.\DIRECTORY_SEPARATOR.'ConditionalClass.php';
-        $this->assertEquals([$file => new \SplFileInfo($file)], $paths);
-        $this->assertInstanceOf('SplFileInfo', current($paths));
-        $this->assertSame($dir, $resource->getPrefix());
-
-        $resource = new GlobResource($dir, '/**/Resource', true);
-
-        $paths = iterator_to_array($resource);
-
-        $file = $dir.\DIRECTORY_SEPARATOR.'Resource'.\DIRECTORY_SEPARATOR.'ConditionalClass.php';
-        $this->assertEquals([$file => $file], $paths);
-        $this->assertInstanceOf('SplFileInfo', current($paths));
-        $this->assertSame($dir, $resource->getPrefix());
-    }
-
-    public function testIsFreshNonRecursiveDetectsNewFile()
-    {
-        $dir = \dirname(__DIR__).'/Fixtures';
-        $resource = new GlobResource($dir, '/*', false);
-
-        $this->assertTrue($resource->isFresh(0));
-
-        mkdir($dir.'/TmpGlob');
-        $this->assertTrue($resource->isFresh(0));
-
-        rmdir($dir.'/TmpGlob');
-        $this->assertTrue($resource->isFresh(0));
-
-        touch($dir.'/TmpGlob');
-        $this->assertFalse($resource->isFresh(0));
-
-        unlink($dir.'/TmpGlob');
-        $this->assertTrue($resource->isFresh(0));
-    }
-
-    public function testIsFreshNonRecursiveDetectsRemovedFile()
-    {
-        $dir = \dirname(__DIR__).'/Fixtures';
-        $resource = new GlobResource($dir, '/*', false);
-
-        touch($dir.'/TmpGlob');
-        touch($dir.'/.TmpGlob');
-        $this->assertTrue($resource->isFresh(0));
-
-        unlink($dir.'/.TmpGlob');
-        $this->assertTrue($resource->isFresh(0));
-
-        unlink($dir.'/TmpGlob');
-        $this->assertFalse($resource->isFresh(0));
-    }
-
-    public function testIsFreshRecursiveDetectsRemovedFile()
-    {
-        $dir = \dirname(__DIR__).'/Fixtures';
-        $resource = new GlobResource($dir, '/*', true);
-
-        touch($dir.'/Resource/TmpGlob');
-        $this->assertTrue($resource->isFresh(0));
-
-        unlink($dir.'/Resource/TmpGlob');
-        $this->assertFalse($resource->isFresh(0));
-
-        touch($dir.'/Resource/TmpGlob');
-        $this->assertTrue($resource->isFresh(0));
-
-        unlink($dir.'/Resource/.hiddenFile');
-        $this->assertTrue($resource->isFresh(0));
-    }
-
-    public function testIsFreshRecursiveDetectsNewFile()
-    {
-        $dir = \dirname(__DIR__).'/Fixtures';
-        $resource = new GlobResource($dir, '/*', true);
-
-        $this->assertTrue($resource->isFresh(0));
-
-        touch($dir.'/Resource/TmpGlob');
-        $this->assertFalse($resource->isFresh(0));
-    }
-}
diff --git a/vendor/symfony/config/Tests/Resource/ReflectionClassResourceTest.php b/vendor/symfony/config/Tests/Resource/ReflectionClassResourceTest.php
deleted file mode 100644
index 74ed6b3edc..0000000000
--- a/vendor/symfony/config/Tests/Resource/ReflectionClassResourceTest.php
+++ /dev/null
@@ -1,223 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Resource;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Resource\ReflectionClassResource;
-use Symfony\Component\DependencyInjection\ServiceSubscriberInterface;
-use Symfony\Component\EventDispatcher\EventSubscriberInterface;
-
-class ReflectionClassResourceTest extends TestCase
-{
-    public function testToString()
-    {
-        $res = new ReflectionClassResource(new \ReflectionClass('ErrorException'));
-
-        $this->assertSame('reflection.ErrorException', (string) $res);
-    }
-
-    public function testSerializeUnserialize()
-    {
-        $res = new ReflectionClassResource(new \ReflectionClass(DummyInterface::class));
-        $ser = unserialize(serialize($res));
-
-        $this->assertTrue($res->isFresh(0));
-        $this->assertTrue($ser->isFresh(0));
-
-        $this->assertSame((string) $res, (string) $ser);
-    }
-
-    public function testIsFresh()
-    {
-        $res = new ReflectionClassResource(new \ReflectionClass(__CLASS__));
-        $mtime = filemtime(__FILE__);
-
-        $this->assertTrue($res->isFresh($mtime), '->isFresh() returns true if the resource has not changed in same second');
-        $this->assertTrue($res->isFresh($mtime + 10), '->isFresh() returns true if the resource has not changed');
-        $this->assertTrue($res->isFresh($mtime - 86400), '->isFresh() returns true if the resource has not changed');
-    }
-
-    public function testIsFreshForDeletedResources()
-    {
-        $now = time();
-        $tmp = sys_get_temp_dir().'/tmp.php';
-        file_put_contents($tmp, '<?php class ReflectionClassResourceTestClass {}');
-        require $tmp;
-
-        $res = new ReflectionClassResource(new \ReflectionClass('ReflectionClassResourceTestClass'));
-        $this->assertTrue($res->isFresh($now));
-
-        unlink($tmp);
-        $this->assertFalse($res->isFresh($now), '->isFresh() returns false if the resource does not exist');
-    }
-
-    /**
-     * @dataProvider provideHashedSignature
-     */
-    public function testHashedSignature($changeExpected, $changedLine, $changedCode, $setContext = null)
-    {
-        if ($setContext) {
-            $setContext();
-        }
-
-        $code = <<<'EOPHP'
-/* 0*/
-/* 1*/  class %s extends ErrorException
-/* 2*/  {
-/* 3*/      const FOO = 123;
-/* 4*/
-/* 5*/      public $pub = [];
-/* 6*/
-/* 7*/      protected $prot;
-/* 8*/
-/* 9*/      private $priv;
-/*10*/
-/*11*/      public function pub($arg = null) {}
-/*12*/
-/*13*/      protected function prot($a = []) {}
-/*14*/
-/*15*/      private function priv() {}
-/*16*/
-/*17*/      public function ccc($bar = A_CONSTANT_THAT_FOR_SURE_WILL_NEVER_BE_DEFINED_CCCCCC) {}
-/*18*/  }
-EOPHP;
-
-        static $expectedSignature, $generateSignature;
-
-        if (null === $expectedSignature) {
-            eval(sprintf($code, $class = 'Foo'.str_replace('.', '_', uniqid('', true))));
-            $r = new \ReflectionClass(ReflectionClassResource::class);
-            $generateSignature = $r->getMethod('generateSignature');
-            $generateSignature->setAccessible(true);
-            $generateSignature = $generateSignature->getClosure($r->newInstanceWithoutConstructor());
-            $expectedSignature = implode("\n", iterator_to_array($generateSignature(new \ReflectionClass($class))));
-        }
-
-        $code = explode("\n", $code);
-        if (null !== $changedCode) {
-            $code[$changedLine] = $changedCode;
-        }
-        eval(sprintf(implode("\n", $code), $class = 'Foo'.str_replace('.', '_', uniqid('', true))));
-        $signature = implode("\n", iterator_to_array($generateSignature(new \ReflectionClass($class))));
-
-        if ($changeExpected) {
-            $this->assertNotSame($expectedSignature, $signature);
-        } else {
-            $this->assertSame($expectedSignature, $signature);
-        }
-    }
-
-    public function provideHashedSignature()
-    {
-        yield [0, 0, "// line change\n\n"];
-        yield [1, 0, '/** class docblock */'];
-        yield [1, 1, 'abstract class %s'];
-        yield [1, 1, 'final class %s'];
-        yield [1, 1, 'class %s extends Exception'];
-        yield [1, 1, 'class %s implements '.DummyInterface::class];
-        yield [1, 3, 'const FOO = 456;'];
-        yield [1, 3, 'const BAR = 123;'];
-        yield [1, 4, '/** pub docblock */'];
-        yield [1, 5, 'protected $pub = [];'];
-        yield [1, 5, 'public $pub = [123];'];
-        yield [1, 6, '/** prot docblock */'];
-        yield [1, 7, 'private $prot;'];
-        yield [0, 8, '/** priv docblock */'];
-        yield [0, 9, 'private $priv = 123;'];
-        yield [1, 10, '/** pub docblock */'];
-        if (\PHP_VERSION_ID >= 50600) {
-            yield [1, 11, 'public function pub(...$arg) {}'];
-        }
-        if (\PHP_VERSION_ID >= 70000) {
-            yield [1, 11, 'public function pub($arg = null): Foo {}'];
-        }
-        yield [0, 11, "public function pub(\$arg = null) {\nreturn 123;\n}"];
-        yield [1, 12, '/** prot docblock */'];
-        yield [1, 13, 'protected function prot($a = [123]) {}'];
-        yield [0, 14, '/** priv docblock */'];
-        yield [0, 15, ''];
-
-        if (\PHP_VERSION_ID >= 70400) {
-            // PHP7.4 typed properties without default value are
-            // undefined, make sure this doesn't throw an error
-            yield [1, 5, 'public array $pub;'];
-            yield [0, 7, 'protected int $prot;'];
-            yield [0, 9, 'private string $priv;'];
-        }
-
-        yield [1, 17, 'public function ccc($bar = 187) {}'];
-        yield [1, 17, 'public function ccc($bar = ANOTHER_ONE_THAT_WILL_NEVER_BE_DEFINED_CCCCCCCCC) {}'];
-        yield [1, 17, null, static function () { \define('A_CONSTANT_THAT_FOR_SURE_WILL_NEVER_BE_DEFINED_CCCCCC', 'foo'); }];
-    }
-
-    public function testEventSubscriber()
-    {
-        $res = new ReflectionClassResource(new \ReflectionClass(TestEventSubscriber::class));
-        $this->assertTrue($res->isFresh(0));
-
-        TestEventSubscriber::$subscribedEvents = [123];
-        $this->assertFalse($res->isFresh(0));
-
-        $res = new ReflectionClassResource(new \ReflectionClass(TestEventSubscriber::class));
-        $this->assertTrue($res->isFresh(0));
-    }
-
-    public function testServiceSubscriber()
-    {
-        $res = new ReflectionClassResource(new \ReflectionClass(TestServiceSubscriber::class));
-        $this->assertTrue($res->isFresh(0));
-
-        TestServiceSubscriber::$subscribedServices = [123];
-        $this->assertFalse($res->isFresh(0));
-
-        $res = new ReflectionClassResource(new \ReflectionClass(TestServiceSubscriber::class));
-        $this->assertTrue($res->isFresh(0));
-    }
-
-    public function testIgnoresObjectsInSignature()
-    {
-        $res = new ReflectionClassResource(new \ReflectionClass(TestServiceWithStaticProperty::class));
-        $this->assertTrue($res->isFresh(0));
-
-        TestServiceWithStaticProperty::$initializedObject = new TestServiceWithStaticProperty();
-        $this->assertTrue($res->isFresh(0));
-    }
-}
-
-interface DummyInterface
-{
-}
-
-class TestEventSubscriber implements EventSubscriberInterface
-{
-    public static $subscribedEvents = [];
-
-    public static function getSubscribedEvents()
-    {
-        return self::$subscribedEvents;
-    }
-}
-
-class TestServiceSubscriber implements ServiceSubscriberInterface
-{
-    public static $subscribedServices = [];
-
-    public static function getSubscribedServices()
-    {
-        return self::$subscribedServices;
-    }
-}
-
-class TestServiceWithStaticProperty
-{
-    public static $initializedObject;
-}
diff --git a/vendor/symfony/config/Tests/Resource/ResourceStub.php b/vendor/symfony/config/Tests/Resource/ResourceStub.php
deleted file mode 100644
index b01729cbff..0000000000
--- a/vendor/symfony/config/Tests/Resource/ResourceStub.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Resource;
-
-use Symfony\Component\Config\Resource\SelfCheckingResourceInterface;
-
-class ResourceStub implements SelfCheckingResourceInterface
-{
-    private $fresh = true;
-
-    public function setFresh($isFresh)
-    {
-        $this->fresh = $isFresh;
-    }
-
-    public function __toString()
-    {
-        return 'stub';
-    }
-
-    public function isFresh($timestamp)
-    {
-        return $this->fresh;
-    }
-}
diff --git a/vendor/symfony/config/Tests/ResourceCheckerConfigCacheTest.php b/vendor/symfony/config/Tests/ResourceCheckerConfigCacheTest.php
deleted file mode 100644
index a2c2eeb811..0000000000
--- a/vendor/symfony/config/Tests/ResourceCheckerConfigCacheTest.php
+++ /dev/null
@@ -1,150 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Resource\FileResource;
-use Symfony\Component\Config\ResourceCheckerConfigCache;
-use Symfony\Component\Config\Tests\Resource\ResourceStub;
-
-class ResourceCheckerConfigCacheTest extends TestCase
-{
-    private $cacheFile = null;
-
-    protected function setUp()
-    {
-        $this->cacheFile = tempnam(sys_get_temp_dir(), 'config_');
-    }
-
-    protected function tearDown()
-    {
-        $files = [$this->cacheFile, "{$this->cacheFile}.meta"];
-
-        foreach ($files as $file) {
-            if (file_exists($file)) {
-                unlink($file);
-            }
-        }
-    }
-
-    public function testGetPath()
-    {
-        $cache = new ResourceCheckerConfigCache($this->cacheFile);
-
-        $this->assertSame($this->cacheFile, $cache->getPath());
-    }
-
-    public function testCacheIsNotFreshIfEmpty()
-    {
-        $checker = $this->getMockBuilder('\Symfony\Component\Config\ResourceCheckerInterface')->getMock()
-            ->expects($this->never())->method('supports');
-
-        /* If there is nothing in the cache, it needs to be filled (and thus it's not fresh).
-            It does not matter if you provide checkers or not. */
-
-        unlink($this->cacheFile); // remove tempnam() side effect
-        $cache = new ResourceCheckerConfigCache($this->cacheFile, [$checker]);
-
-        $this->assertFalse($cache->isFresh());
-    }
-
-    public function testCacheIsFreshIfNoCheckerProvided()
-    {
-        /* For example in prod mode, you may choose not to run any checkers
-           at all. In that case, the cache should always be considered fresh. */
-        $cache = new ResourceCheckerConfigCache($this->cacheFile);
-        $this->assertTrue($cache->isFresh());
-    }
-
-    public function testCacheIsFreshIfEmptyCheckerIteratorProvided()
-    {
-        $cache = new ResourceCheckerConfigCache($this->cacheFile, new \ArrayIterator([]));
-        $this->assertTrue($cache->isFresh());
-    }
-
-    public function testResourcesWithoutcheckersAreIgnoredAndConsideredFresh()
-    {
-        /* As in the previous test, but this time we have a resource. */
-        $cache = new ResourceCheckerConfigCache($this->cacheFile);
-        $cache->write('', [new ResourceStub()]);
-
-        $this->assertTrue($cache->isFresh()); // no (matching) ResourceChecker passed
-    }
-
-    public function testIsFreshWithchecker()
-    {
-        $checker = $this->getMockBuilder('\Symfony\Component\Config\ResourceCheckerInterface')->getMock();
-
-        $checker->expects($this->once())
-                  ->method('supports')
-                  ->willReturn(true);
-
-        $checker->expects($this->once())
-                  ->method('isFresh')
-                  ->willReturn(true);
-
-        $cache = new ResourceCheckerConfigCache($this->cacheFile, [$checker]);
-        $cache->write('', [new ResourceStub()]);
-
-        $this->assertTrue($cache->isFresh());
-    }
-
-    public function testIsNotFreshWithchecker()
-    {
-        $checker = $this->getMockBuilder('\Symfony\Component\Config\ResourceCheckerInterface')->getMock();
-
-        $checker->expects($this->once())
-                  ->method('supports')
-                  ->willReturn(true);
-
-        $checker->expects($this->once())
-                  ->method('isFresh')
-                  ->willReturn(false);
-
-        $cache = new ResourceCheckerConfigCache($this->cacheFile, [$checker]);
-        $cache->write('', [new ResourceStub()]);
-
-        $this->assertFalse($cache->isFresh());
-    }
-
-    public function testCacheIsNotFreshWhenUnserializeFails()
-    {
-        $checker = $this->getMockBuilder('\Symfony\Component\Config\ResourceCheckerInterface')->getMock();
-        $cache = new ResourceCheckerConfigCache($this->cacheFile, [$checker]);
-        $cache->write('foo', [new FileResource(__FILE__)]);
-
-        $metaFile = "{$this->cacheFile}.meta";
-        file_put_contents($metaFile, str_replace('FileResource', 'ClassNotHere', file_get_contents($metaFile)));
-
-        $this->assertFalse($cache->isFresh());
-    }
-
-    public function testCacheKeepsContent()
-    {
-        $cache = new ResourceCheckerConfigCache($this->cacheFile);
-        $cache->write('FOOBAR');
-
-        $this->assertSame('FOOBAR', file_get_contents($cache->getPath()));
-    }
-
-    public function testCacheIsNotFreshIfNotExistsMetaFile()
-    {
-        $checker = $this->getMockBuilder('\Symfony\Component\Config\ResourceCheckerInterface')->getMock();
-        $cache = new ResourceCheckerConfigCache($this->cacheFile, [$checker]);
-        $cache->write('foo', [new FileResource(__FILE__)]);
-
-        $metaFile = "{$this->cacheFile}.meta";
-        unlink($metaFile);
-
-        $this->assertFalse($cache->isFresh());
-    }
-}
diff --git a/vendor/symfony/config/Tests/Util/XmlUtilsTest.php b/vendor/symfony/config/Tests/Util/XmlUtilsTest.php
deleted file mode 100644
index 2aecdf8259..0000000000
--- a/vendor/symfony/config/Tests/Util/XmlUtilsTest.php
+++ /dev/null
@@ -1,237 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Util;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Util\XmlUtils;
-
-class XmlUtilsTest extends TestCase
-{
-    public function testLoadFile()
-    {
-        $fixtures = __DIR__.'/../Fixtures/Util/';
-
-        try {
-            XmlUtils::loadFile($fixtures);
-            $this->fail();
-        } catch (\InvalidArgumentException $e) {
-            $this->assertStringContainsString('is not a file', $e->getMessage());
-        }
-
-        try {
-            XmlUtils::loadFile($fixtures.'non_existing.xml');
-            $this->fail();
-        } catch (\InvalidArgumentException $e) {
-            $this->assertStringContainsString('is not a file', $e->getMessage());
-        }
-
-        try {
-            if ('\\' === \DIRECTORY_SEPARATOR) {
-                $this->markTestSkipped('chmod is not supported on Windows');
-            }
-            chmod($fixtures.'not_readable.xml', 000);
-            XmlUtils::loadFile($fixtures.'not_readable.xml');
-            $this->fail();
-        } catch (\InvalidArgumentException $e) {
-            chmod($fixtures.'not_readable.xml', 0644);
-            $this->assertStringContainsString('is not readable', $e->getMessage());
-        }
-
-        try {
-            XmlUtils::loadFile($fixtures.'invalid.xml');
-            $this->fail();
-        } catch (\InvalidArgumentException $e) {
-            $this->assertStringContainsString('ERROR ', $e->getMessage());
-        }
-
-        try {
-            XmlUtils::loadFile($fixtures.'document_type.xml');
-            $this->fail();
-        } catch (\InvalidArgumentException $e) {
-            $this->assertStringContainsString('Document types are not allowed', $e->getMessage());
-        }
-
-        try {
-            XmlUtils::loadFile($fixtures.'invalid_schema.xml', $fixtures.'schema.xsd');
-            $this->fail();
-        } catch (\InvalidArgumentException $e) {
-            $this->assertStringContainsString('ERROR 1845', $e->getMessage());
-        }
-
-        try {
-            XmlUtils::loadFile($fixtures.'invalid_schema.xml', 'invalid_callback_or_file');
-            $this->fail();
-        } catch (\InvalidArgumentException $e) {
-            $this->assertStringContainsString('XSD file or callable', $e->getMessage());
-        }
-
-        $mock = $this->getMockBuilder(Validator::class)->getMock();
-        $mock->expects($this->exactly(2))->method('validate')->will($this->onConsecutiveCalls(false, true));
-
-        try {
-            XmlUtils::loadFile($fixtures.'valid.xml', [$mock, 'validate']);
-            $this->fail();
-        } catch (\InvalidArgumentException $e) {
-            $this->assertRegExp('/The XML file ".+" is not valid\./', $e->getMessage());
-        }
-
-        $this->assertInstanceOf('DOMDocument', XmlUtils::loadFile($fixtures.'valid.xml', [$mock, 'validate']));
-        $this->assertSame([], libxml_get_errors());
-    }
-
-    public function testParseWithInvalidValidatorCallable()
-    {
-        $this->expectException('Symfony\Component\Config\Util\Exception\InvalidXmlException');
-        $this->expectExceptionMessage('The XML is not valid');
-        $fixtures = __DIR__.'/../Fixtures/Util/';
-
-        $mock = $this->getMockBuilder(Validator::class)->getMock();
-        $mock->expects($this->once())->method('validate')->willReturn(false);
-
-        XmlUtils::parse(file_get_contents($fixtures.'valid.xml'), [$mock, 'validate']);
-    }
-
-    public function testLoadFileWithInternalErrorsEnabled()
-    {
-        $internalErrors = libxml_use_internal_errors(true);
-
-        $this->assertSame([], libxml_get_errors());
-        $this->assertInstanceOf('DOMDocument', XmlUtils::loadFile(__DIR__.'/../Fixtures/Util/invalid_schema.xml'));
-        $this->assertSame([], libxml_get_errors());
-
-        libxml_clear_errors();
-        libxml_use_internal_errors($internalErrors);
-    }
-
-    /**
-     * @dataProvider getDataForConvertDomToArray
-     */
-    public function testConvertDomToArray($expected, $xml, $root = false, $checkPrefix = true)
-    {
-        $dom = new \DOMDocument();
-        $dom->loadXML($root ? $xml : '<root>'.$xml.'</root>');
-
-        $this->assertSame($expected, XmlUtils::convertDomElementToArray($dom->documentElement, $checkPrefix));
-    }
-
-    public function getDataForConvertDomToArray()
-    {
-        return [
-            [null, ''],
-            ['bar', 'bar'],
-            [['bar' => 'foobar'], '<foo bar="foobar" />', true],
-            [['foo' => null], '<foo />'],
-            [['foo' => 'bar'], '<foo>bar</foo>'],
-            [['foo' => ['foo' => 'bar']], '<foo foo="bar"/>'],
-            [['foo' => ['foo' => 0]], '<foo><foo>0</foo></foo>'],
-            [['foo' => ['foo' => 'bar']], '<foo><foo>bar</foo></foo>'],
-            [['foo' => ['foo' => 'bar', 'value' => 'text']], '<foo foo="bar">text</foo>'],
-            [['foo' => ['attr' => 'bar', 'foo' => 'text']], '<foo attr="bar"><foo>text</foo></foo>'],
-            [['foo' => ['bar', 'text']], '<foo>bar</foo><foo>text</foo>'],
-            [['foo' => [['foo' => 'bar'], ['foo' => 'text']]], '<foo foo="bar"/><foo foo="text" />'],
-            [['foo' => ['foo' => ['bar', 'text']]], '<foo foo="bar"><foo>text</foo></foo>'],
-            [['foo' => 'bar'], '<foo><!-- Comment -->bar</foo>'],
-            [['foo' => 'text'], '<foo xmlns:h="http://www.example.org/bar" h:bar="bar">text</foo>'],
-            [['foo' => ['bar' => 'bar', 'value' => 'text']], '<foo xmlns:h="http://www.example.org/bar" h:bar="bar">text</foo>', false, false],
-            [['attr' => 1, 'b' => 'hello'], '<foo:a xmlns:foo="http://www.example.org/foo" xmlns:h="http://www.example.org/bar" attr="1" h:bar="bar"><foo:b>hello</foo:b><h:c>2</h:c></foo:a>', true],
-        ];
-    }
-
-    /**
-     * @dataProvider getDataForPhpize
-     */
-    public function testPhpize($expected, $value)
-    {
-        $this->assertSame($expected, XmlUtils::phpize($value));
-    }
-
-    public function getDataForPhpize()
-    {
-        return [
-            ['', ''],
-            [null, 'null'],
-            [true, 'true'],
-            [false, 'false'],
-            [null, 'Null'],
-            [true, 'True'],
-            [false, 'False'],
-            [0, '0'],
-            [1, '1'],
-            [-1, '-1'],
-            [0777, '0777'],
-            [255, '0xFF'],
-            [100.0, '1e2'],
-            [-120.0, '-1.2E2'],
-            [-10100.1, '-10100.1'],
-            ['-10,100.1', '-10,100.1'],
-            ['1234 5678 9101 1121 3141', '1234 5678 9101 1121 3141'],
-            ['1,2,3,4', '1,2,3,4'],
-            ['11,22,33,44', '11,22,33,44'],
-            ['11,222,333,4', '11,222,333,4'],
-            ['1,222,333,444', '1,222,333,444'],
-            ['11,222,333,444', '11,222,333,444'],
-            ['111,222,333,444', '111,222,333,444'],
-            ['1111,2222,3333,4444,5555', '1111,2222,3333,4444,5555'],
-            ['foo', 'foo'],
-            [6, '0b0110'],
-        ];
-    }
-
-    public function testLoadEmptyXmlFile()
-    {
-        $file = __DIR__.'/../Fixtures/foo.xml';
-
-        $this->expectException('InvalidArgumentException');
-        $this->expectExceptionMessage(sprintf('File "%s" does not contain valid XML, it is empty.', $file));
-
-        XmlUtils::loadFile($file);
-    }
-
-    // test for issue https://github.com/symfony/symfony/issues/9731
-    public function testLoadWrongEmptyXMLWithErrorHandler()
-    {
-        $originalDisableEntities = libxml_disable_entity_loader(false);
-        $errorReporting = error_reporting(-1);
-
-        set_error_handler(function ($errno, $errstr) {
-            throw new \Exception($errstr, $errno);
-        });
-
-        $file = __DIR__.'/../Fixtures/foo.xml';
-        try {
-            try {
-                XmlUtils::loadFile($file);
-                $this->fail('An exception should have been raised');
-            } catch (\InvalidArgumentException $e) {
-                $this->assertEquals(sprintf('File "%s" does not contain valid XML, it is empty.', $file), $e->getMessage());
-            }
-        } finally {
-            restore_error_handler();
-            error_reporting($errorReporting);
-        }
-
-        $disableEntities = libxml_disable_entity_loader(true);
-        libxml_disable_entity_loader($disableEntities);
-
-        libxml_disable_entity_loader($originalDisableEntities);
-
-        $this->assertFalse($disableEntities);
-
-        // should not throw an exception
-        XmlUtils::loadFile(__DIR__.'/../Fixtures/Util/valid.xml', __DIR__.'/../Fixtures/Util/schema.xsd');
-    }
-}
-
-interface Validator
-{
-    public function validate();
-}
diff --git a/vendor/symfony/config/Util/XmlUtils.php b/vendor/symfony/config/Util/XmlUtils.php
index c925f315e5..12caa486bf 100644
--- a/vendor/symfony/config/Util/XmlUtils.php
+++ b/vendor/symfony/config/Util/XmlUtils.php
@@ -47,17 +47,21 @@ private function __construct()
     public static function parse($content, $schemaOrCallable = null)
     {
         if (!\extension_loaded('dom')) {
-            throw new \RuntimeException('Extension DOM is required.');
+            throw new \LogicException('Extension DOM is required.');
         }
 
         $internalErrors = libxml_use_internal_errors(true);
-        $disableEntities = libxml_disable_entity_loader(true);
+        if (\LIBXML_VERSION < 20900) {
+            $disableEntities = libxml_disable_entity_loader(true);
+        }
         libxml_clear_errors();
 
         $dom = new \DOMDocument();
         $dom->validateOnParse = true;
-        if (!$dom->loadXML($content, LIBXML_NONET | (\defined('LIBXML_COMPACT') ? LIBXML_COMPACT : 0))) {
-            libxml_disable_entity_loader($disableEntities);
+        if (!$dom->loadXML($content, \LIBXML_NONET | (\defined('LIBXML_COMPACT') ? \LIBXML_COMPACT : 0))) {
+            if (\LIBXML_VERSION < 20900) {
+                libxml_disable_entity_loader($disableEntities);
+            }
 
             throw new XmlParsingException(implode("\n", static::getXmlErrors($internalErrors)));
         }
@@ -65,10 +69,12 @@ public static function parse($content, $schemaOrCallable = null)
         $dom->normalizeDocument();
 
         libxml_use_internal_errors($internalErrors);
-        libxml_disable_entity_loader($disableEntities);
+        if (\LIBXML_VERSION < 20900) {
+            libxml_disable_entity_loader($disableEntities);
+        }
 
         foreach ($dom->childNodes as $child) {
-            if (XML_DOCUMENT_TYPE_NODE === $child->nodeType) {
+            if (\XML_DOCUMENT_TYPE_NODE === $child->nodeType) {
                 throw new XmlParsingException('Document types are not allowed.');
             }
         }
@@ -80,7 +86,7 @@ public static function parse($content, $schemaOrCallable = null)
             $e = null;
             if (\is_callable($schemaOrCallable)) {
                 try {
-                    $valid = \call_user_func($schemaOrCallable, $dom, $internalErrors);
+                    $valid = $schemaOrCallable($dom, $internalErrors);
                 } catch (\Exception $e) {
                     $valid = false;
                 }
@@ -261,7 +267,7 @@ protected static function getXmlErrors($internalErrors)
         $errors = [];
         foreach (libxml_get_errors() as $error) {
             $errors[] = sprintf('[%s %s] %s (in %s - line %d, column %d)',
-                LIBXML_ERR_WARNING == $error->level ? 'WARNING' : 'ERROR',
+                \LIBXML_ERR_WARNING == $error->level ? 'WARNING' : 'ERROR',
                 $error->code,
                 trim($error->message),
                 $error->file ?: 'n/a',
diff --git a/vendor/symfony/config/composer.json b/vendor/symfony/config/composer.json
index c04294dd4c..fd26b4bd8c 100644
--- a/vendor/symfony/config/composer.json
+++ b/vendor/symfony/config/composer.json
@@ -16,19 +16,19 @@
         }
     ],
     "require": {
-        "php": "^5.5.9|>=7.0.8",
-        "symfony/filesystem": "~2.8|~3.0|~4.0",
+        "php": ">=7.1.3",
+        "symfony/filesystem": "^3.4|^4.0|^5.0",
         "symfony/polyfill-ctype": "~1.8"
     },
     "require-dev": {
-        "symfony/finder": "~3.3|~4.0",
-        "symfony/yaml": "~3.0|~4.0",
-        "symfony/dependency-injection": "~3.3|~4.0",
-        "symfony/event-dispatcher": "~3.3|~4.0"
+        "symfony/event-dispatcher": "^3.4|^4.0|^5.0",
+        "symfony/finder": "^3.4|^4.0|^5.0",
+        "symfony/messenger": "^4.1|^5.0",
+        "symfony/service-contracts": "^1.1|^2",
+        "symfony/yaml": "^3.4|^4.0|^5.0"
     },
     "conflict": {
-        "symfony/finder": "<3.3",
-        "symfony/dependency-injection": "<3.3"
+        "symfony/finder": "<3.4"
     },
     "suggest": {
         "symfony/yaml": "To use the yaml reference dumper"
@@ -39,10 +39,5 @@
             "/Tests/"
         ]
     },
-    "minimum-stability": "dev",
-    "extra": {
-        "branch-alias": {
-            "dev-master": "3.4-dev"
-        }
-    }
+    "minimum-stability": "dev"
 }
diff --git a/vendor/symfony/config/phpunit.xml.dist b/vendor/symfony/config/phpunit.xml.dist
deleted file mode 100644
index 1cfdb3cdc6..0000000000
--- a/vendor/symfony/config/phpunit.xml.dist
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/5.2/phpunit.xsd"
-         backupGlobals="false"
-         colors="true"
-         bootstrap="vendor/autoload.php"
-         failOnRisky="true"
-         failOnWarning="true"
->
-    <php>
-        <ini name="error_reporting" value="-1" />
-    </php>
-
-    <testsuites>
-        <testsuite name="Symfony Config Component Test Suite">
-            <directory>./Tests/</directory>
-        </testsuite>
-    </testsuites>
-
-    <filter>
-        <whitelist>
-            <directory>./</directory>
-            <exclude>
-                <directory>./Resources</directory>
-                <directory>./Tests</directory>
-                <directory>./vendor</directory>
-            </exclude>
-        </whitelist>
-    </filter>
-</phpunit>
diff --git a/vendor/symfony/css-selector/.gitignore b/vendor/symfony/css-selector/.gitignore
deleted file mode 100644
index c49a5d8df5..0000000000
--- a/vendor/symfony/css-selector/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-vendor/
-composer.lock
-phpunit.xml
diff --git a/vendor/symfony/css-selector/CHANGELOG.md b/vendor/symfony/css-selector/CHANGELOG.md
index 4061ff20c3..de81fa2e7d 100644
--- a/vendor/symfony/css-selector/CHANGELOG.md
+++ b/vendor/symfony/css-selector/CHANGELOG.md
@@ -1,6 +1,11 @@
 CHANGELOG
 =========
 
+4.4.0
+-----
+
+ * Added support for `*:only-of-type`
+
 2.8.0
 -----
 
diff --git a/vendor/symfony/css-selector/CssSelectorConverter.php b/vendor/symfony/css-selector/CssSelectorConverter.php
index 8d66dbd0e1..d1aeb7eb17 100644
--- a/vendor/symfony/css-selector/CssSelectorConverter.php
+++ b/vendor/symfony/css-selector/CssSelectorConverter.php
@@ -31,7 +31,7 @@ class CssSelectorConverter
     /**
      * @param bool $html Whether HTML support should be enabled. Disable it for XML documents
      */
-    public function __construct($html = true)
+    public function __construct(bool $html = true)
     {
         $this->translator = new Translator();
 
diff --git a/vendor/symfony/css-selector/Exception/ExceptionInterface.php b/vendor/symfony/css-selector/Exception/ExceptionInterface.php
index e4c5ae1b6b..9e259006b0 100644
--- a/vendor/symfony/css-selector/Exception/ExceptionInterface.php
+++ b/vendor/symfony/css-selector/Exception/ExceptionInterface.php
@@ -19,6 +19,6 @@
  *
  * @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
  */
-interface ExceptionInterface
+interface ExceptionInterface extends \Throwable
 {
 }
diff --git a/vendor/symfony/css-selector/Exception/SyntaxErrorException.php b/vendor/symfony/css-selector/Exception/SyntaxErrorException.php
index cb3158a553..1200c979ea 100644
--- a/vendor/symfony/css-selector/Exception/SyntaxErrorException.php
+++ b/vendor/symfony/css-selector/Exception/SyntaxErrorException.php
@@ -25,7 +25,6 @@ class SyntaxErrorException extends ParseException
 {
     /**
      * @param string $expectedValue
-     * @param Token  $foundToken
      *
      * @return self
      */
diff --git a/vendor/symfony/css-selector/LICENSE b/vendor/symfony/css-selector/LICENSE
index 21d7fb9e2f..9e936ec044 100644
--- a/vendor/symfony/css-selector/LICENSE
+++ b/vendor/symfony/css-selector/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2004-2018 Fabien Potencier
+Copyright (c) 2004-2020 Fabien Potencier
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/vendor/symfony/css-selector/Node/AbstractNode.php b/vendor/symfony/css-selector/Node/AbstractNode.php
index 1d5d8ff7ba..1306aeacb9 100644
--- a/vendor/symfony/css-selector/Node/AbstractNode.php
+++ b/vendor/symfony/css-selector/Node/AbstractNode.php
@@ -28,13 +28,10 @@ abstract class AbstractNode implements NodeInterface
      */
     private $nodeName;
 
-    /**
-     * @return string
-     */
-    public function getNodeName()
+    public function getNodeName(): string
     {
         if (null === $this->nodeName) {
-            $this->nodeName = preg_replace('~.*\\\\([^\\\\]+)Node$~', '$1', \get_called_class());
+            $this->nodeName = preg_replace('~.*\\\\([^\\\\]+)Node$~', '$1', static::class);
         }
 
         return $this->nodeName;
diff --git a/vendor/symfony/css-selector/Node/AttributeNode.php b/vendor/symfony/css-selector/Node/AttributeNode.php
index 1caccb6bfe..bf702d9ce4 100644
--- a/vendor/symfony/css-selector/Node/AttributeNode.php
+++ b/vendor/symfony/css-selector/Node/AttributeNode.php
@@ -29,14 +29,7 @@ class AttributeNode extends AbstractNode
     private $operator;
     private $value;
 
-    /**
-     * @param NodeInterface $selector
-     * @param string        $namespace
-     * @param string        $attribute
-     * @param string        $operator
-     * @param string        $value
-     */
-    public function __construct(NodeInterface $selector, $namespace, $attribute, $operator, $value)
+    public function __construct(NodeInterface $selector, ?string $namespace, string $attribute, string $operator, ?string $value)
     {
         $this->selector = $selector;
         $this->namespace = $namespace;
@@ -45,42 +38,27 @@ public function __construct(NodeInterface $selector, $namespace, $attribute, $op
         $this->value = $value;
     }
 
-    /**
-     * @return NodeInterface
-     */
-    public function getSelector()
+    public function getSelector(): NodeInterface
     {
         return $this->selector;
     }
 
-    /**
-     * @return string
-     */
-    public function getNamespace()
+    public function getNamespace(): ?string
     {
         return $this->namespace;
     }
 
-    /**
-     * @return string
-     */
-    public function getAttribute()
+    public function getAttribute(): string
     {
         return $this->attribute;
     }
 
-    /**
-     * @return string
-     */
-    public function getOperator()
+    public function getOperator(): string
     {
         return $this->operator;
     }
 
-    /**
-     * @return string
-     */
-    public function getValue()
+    public function getValue(): ?string
     {
         return $this->value;
     }
@@ -88,7 +66,7 @@ public function getValue()
     /**
      * {@inheritdoc}
      */
-    public function getSpecificity()
+    public function getSpecificity(): Specificity
     {
         return $this->selector->getSpecificity()->plus(new Specificity(0, 1, 0));
     }
@@ -96,7 +74,7 @@ public function getSpecificity()
     /**
      * {@inheritdoc}
      */
-    public function __toString()
+    public function __toString(): string
     {
         $attribute = $this->namespace ? $this->namespace.'|'.$this->attribute : $this->attribute;
 
diff --git a/vendor/symfony/css-selector/Node/ClassNode.php b/vendor/symfony/css-selector/Node/ClassNode.php
index 69462e8e71..1998b4bd5b 100644
--- a/vendor/symfony/css-selector/Node/ClassNode.php
+++ b/vendor/symfony/css-selector/Node/ClassNode.php
@@ -26,28 +26,18 @@ class ClassNode extends AbstractNode
     private $selector;
     private $name;
 
-    /**
-     * @param NodeInterface $selector
-     * @param string        $name
-     */
-    public function __construct(NodeInterface $selector, $name)
+    public function __construct(NodeInterface $selector, string $name)
     {
         $this->selector = $selector;
         $this->name = $name;
     }
 
-    /**
-     * @return NodeInterface
-     */
-    public function getSelector()
+    public function getSelector(): NodeInterface
     {
         return $this->selector;
     }
 
-    /**
-     * @return string
-     */
-    public function getName()
+    public function getName(): string
     {
         return $this->name;
     }
@@ -55,7 +45,7 @@ public function getName()
     /**
      * {@inheritdoc}
      */
-    public function getSpecificity()
+    public function getSpecificity(): Specificity
     {
         return $this->selector->getSpecificity()->plus(new Specificity(0, 1, 0));
     }
@@ -63,7 +53,7 @@ public function getSpecificity()
     /**
      * {@inheritdoc}
      */
-    public function __toString()
+    public function __toString(): string
     {
         return sprintf('%s[%s.%s]', $this->getNodeName(), $this->selector, $this->name);
     }
diff --git a/vendor/symfony/css-selector/Node/CombinedSelectorNode.php b/vendor/symfony/css-selector/Node/CombinedSelectorNode.php
index 2aa583aaf6..f97fd21aeb 100644
--- a/vendor/symfony/css-selector/Node/CombinedSelectorNode.php
+++ b/vendor/symfony/css-selector/Node/CombinedSelectorNode.php
@@ -27,38 +27,24 @@ class CombinedSelectorNode extends AbstractNode
     private $combinator;
     private $subSelector;
 
-    /**
-     * @param NodeInterface $selector
-     * @param string        $combinator
-     * @param NodeInterface $subSelector
-     */
-    public function __construct(NodeInterface $selector, $combinator, NodeInterface $subSelector)
+    public function __construct(NodeInterface $selector, string $combinator, NodeInterface $subSelector)
     {
         $this->selector = $selector;
         $this->combinator = $combinator;
         $this->subSelector = $subSelector;
     }
 
-    /**
-     * @return NodeInterface
-     */
-    public function getSelector()
+    public function getSelector(): NodeInterface
     {
         return $this->selector;
     }
 
-    /**
-     * @return string
-     */
-    public function getCombinator()
+    public function getCombinator(): string
     {
         return $this->combinator;
     }
 
-    /**
-     * @return NodeInterface
-     */
-    public function getSubSelector()
+    public function getSubSelector(): NodeInterface
     {
         return $this->subSelector;
     }
@@ -66,7 +52,7 @@ public function getSubSelector()
     /**
      * {@inheritdoc}
      */
-    public function getSpecificity()
+    public function getSpecificity(): Specificity
     {
         return $this->selector->getSpecificity()->plus($this->subSelector->getSpecificity());
     }
@@ -74,7 +60,7 @@ public function getSpecificity()
     /**
      * {@inheritdoc}
      */
-    public function __toString()
+    public function __toString(): string
     {
         $combinator = ' ' === $this->combinator ? '<followed>' : $this->combinator;
 
diff --git a/vendor/symfony/css-selector/Node/ElementNode.php b/vendor/symfony/css-selector/Node/ElementNode.php
index bcdce7a7a5..7949ed9198 100644
--- a/vendor/symfony/css-selector/Node/ElementNode.php
+++ b/vendor/symfony/css-selector/Node/ElementNode.php
@@ -26,28 +26,18 @@ class ElementNode extends AbstractNode
     private $namespace;
     private $element;
 
-    /**
-     * @param string|null $namespace
-     * @param string|null $element
-     */
-    public function __construct($namespace = null, $element = null)
+    public function __construct(string $namespace = null, string $element = null)
     {
         $this->namespace = $namespace;
         $this->element = $element;
     }
 
-    /**
-     * @return null|string
-     */
-    public function getNamespace()
+    public function getNamespace(): ?string
     {
         return $this->namespace;
     }
 
-    /**
-     * @return null|string
-     */
-    public function getElement()
+    public function getElement(): ?string
     {
         return $this->element;
     }
@@ -55,7 +45,7 @@ public function getElement()
     /**
      * {@inheritdoc}
      */
-    public function getSpecificity()
+    public function getSpecificity(): Specificity
     {
         return new Specificity(0, 0, $this->element ? 1 : 0);
     }
@@ -63,7 +53,7 @@ public function getSpecificity()
     /**
      * {@inheritdoc}
      */
-    public function __toString()
+    public function __toString(): string
     {
         $element = $this->element ?: '*';
 
diff --git a/vendor/symfony/css-selector/Node/FunctionNode.php b/vendor/symfony/css-selector/Node/FunctionNode.php
index 50268255ce..d3e9b4fc7c 100644
--- a/vendor/symfony/css-selector/Node/FunctionNode.php
+++ b/vendor/symfony/css-selector/Node/FunctionNode.php
@@ -30,29 +30,21 @@ class FunctionNode extends AbstractNode
     private $arguments;
 
     /**
-     * @param NodeInterface $selector
-     * @param string        $name
-     * @param Token[]       $arguments
+     * @param Token[] $arguments
      */
-    public function __construct(NodeInterface $selector, $name, array $arguments = array())
+    public function __construct(NodeInterface $selector, string $name, array $arguments = [])
     {
         $this->selector = $selector;
         $this->name = strtolower($name);
         $this->arguments = $arguments;
     }
 
-    /**
-     * @return NodeInterface
-     */
-    public function getSelector()
+    public function getSelector(): NodeInterface
     {
         return $this->selector;
     }
 
-    /**
-     * @return string
-     */
-    public function getName()
+    public function getName(): string
     {
         return $this->name;
     }
@@ -60,7 +52,7 @@ public function getName()
     /**
      * @return Token[]
      */
-    public function getArguments()
+    public function getArguments(): array
     {
         return $this->arguments;
     }
@@ -68,7 +60,7 @@ public function getArguments()
     /**
      * {@inheritdoc}
      */
-    public function getSpecificity()
+    public function getSpecificity(): Specificity
     {
         return $this->selector->getSpecificity()->plus(new Specificity(0, 1, 0));
     }
@@ -76,7 +68,7 @@ public function getSpecificity()
     /**
      * {@inheritdoc}
      */
-    public function __toString()
+    public function __toString(): string
     {
         $arguments = implode(', ', array_map(function (Token $token) {
             return "'".$token->getValue()."'";
diff --git a/vendor/symfony/css-selector/Node/HashNode.php b/vendor/symfony/css-selector/Node/HashNode.php
index ebf9a9872a..f73fa2e740 100644
--- a/vendor/symfony/css-selector/Node/HashNode.php
+++ b/vendor/symfony/css-selector/Node/HashNode.php
@@ -26,28 +26,18 @@ class HashNode extends AbstractNode
     private $selector;
     private $id;
 
-    /**
-     * @param NodeInterface $selector
-     * @param string        $id
-     */
-    public function __construct(NodeInterface $selector, $id)
+    public function __construct(NodeInterface $selector, string $id)
     {
         $this->selector = $selector;
         $this->id = $id;
     }
 
-    /**
-     * @return NodeInterface
-     */
-    public function getSelector()
+    public function getSelector(): NodeInterface
     {
         return $this->selector;
     }
 
-    /**
-     * @return string
-     */
-    public function getId()
+    public function getId(): string
     {
         return $this->id;
     }
@@ -55,7 +45,7 @@ public function getId()
     /**
      * {@inheritdoc}
      */
-    public function getSpecificity()
+    public function getSpecificity(): Specificity
     {
         return $this->selector->getSpecificity()->plus(new Specificity(1, 0, 0));
     }
@@ -63,7 +53,7 @@ public function getSpecificity()
     /**
      * {@inheritdoc}
      */
-    public function __toString()
+    public function __toString(): string
     {
         return sprintf('%s[%s#%s]', $this->getNodeName(), $this->selector, $this->id);
     }
diff --git a/vendor/symfony/css-selector/Node/NegationNode.php b/vendor/symfony/css-selector/Node/NegationNode.php
index bf97caeb58..afa47cf878 100644
--- a/vendor/symfony/css-selector/Node/NegationNode.php
+++ b/vendor/symfony/css-selector/Node/NegationNode.php
@@ -32,18 +32,12 @@ public function __construct(NodeInterface $selector, NodeInterface $subSelector)
         $this->subSelector = $subSelector;
     }
 
-    /**
-     * @return NodeInterface
-     */
-    public function getSelector()
+    public function getSelector(): NodeInterface
     {
         return $this->selector;
     }
 
-    /**
-     * @return NodeInterface
-     */
-    public function getSubSelector()
+    public function getSubSelector(): NodeInterface
     {
         return $this->subSelector;
     }
@@ -51,7 +45,7 @@ public function getSubSelector()
     /**
      * {@inheritdoc}
      */
-    public function getSpecificity()
+    public function getSpecificity(): Specificity
     {
         return $this->selector->getSpecificity()->plus($this->subSelector->getSpecificity());
     }
@@ -59,7 +53,7 @@ public function getSpecificity()
     /**
      * {@inheritdoc}
      */
-    public function __toString()
+    public function __toString(): string
     {
         return sprintf('%s[%s:not(%s)]', $this->getNodeName(), $this->selector, $this->subSelector);
     }
diff --git a/vendor/symfony/css-selector/Node/NodeInterface.php b/vendor/symfony/css-selector/Node/NodeInterface.php
index d919e20c71..b078d26d4d 100644
--- a/vendor/symfony/css-selector/Node/NodeInterface.php
+++ b/vendor/symfony/css-selector/Node/NodeInterface.php
@@ -23,24 +23,9 @@
  */
 interface NodeInterface
 {
-    /**
-     * Returns node's name.
-     *
-     * @return string
-     */
-    public function getNodeName();
+    public function getNodeName(): string;
 
-    /**
-     * Returns node's specificity.
-     *
-     * @return Specificity
-     */
-    public function getSpecificity();
+    public function getSpecificity(): Specificity;
 
-    /**
-     * Returns node's string representation.
-     *
-     * @return string
-     */
-    public function __toString();
+    public function __toString(): string;
 }
diff --git a/vendor/symfony/css-selector/Node/PseudoNode.php b/vendor/symfony/css-selector/Node/PseudoNode.php
index 3842c695e8..7d4a011e1f 100644
--- a/vendor/symfony/css-selector/Node/PseudoNode.php
+++ b/vendor/symfony/css-selector/Node/PseudoNode.php
@@ -26,28 +26,18 @@ class PseudoNode extends AbstractNode
     private $selector;
     private $identifier;
 
-    /**
-     * @param NodeInterface $selector
-     * @param string        $identifier
-     */
-    public function __construct(NodeInterface $selector, $identifier)
+    public function __construct(NodeInterface $selector, string $identifier)
     {
         $this->selector = $selector;
         $this->identifier = strtolower($identifier);
     }
 
-    /**
-     * @return NodeInterface
-     */
-    public function getSelector()
+    public function getSelector(): NodeInterface
     {
         return $this->selector;
     }
 
-    /**
-     * @return string
-     */
-    public function getIdentifier()
+    public function getIdentifier(): string
     {
         return $this->identifier;
     }
@@ -55,7 +45,7 @@ public function getIdentifier()
     /**
      * {@inheritdoc}
      */
-    public function getSpecificity()
+    public function getSpecificity(): Specificity
     {
         return $this->selector->getSpecificity()->plus(new Specificity(0, 1, 0));
     }
@@ -63,7 +53,7 @@ public function getSpecificity()
     /**
      * {@inheritdoc}
      */
-    public function __toString()
+    public function __toString(): string
     {
         return sprintf('%s[%s:%s]', $this->getNodeName(), $this->selector, $this->identifier);
     }
diff --git a/vendor/symfony/css-selector/Node/SelectorNode.php b/vendor/symfony/css-selector/Node/SelectorNode.php
index 5ef2be62a4..a76aa5bb5f 100644
--- a/vendor/symfony/css-selector/Node/SelectorNode.php
+++ b/vendor/symfony/css-selector/Node/SelectorNode.php
@@ -26,28 +26,18 @@ class SelectorNode extends AbstractNode
     private $tree;
     private $pseudoElement;
 
-    /**
-     * @param NodeInterface $tree
-     * @param null|string   $pseudoElement
-     */
-    public function __construct(NodeInterface $tree, $pseudoElement = null)
+    public function __construct(NodeInterface $tree, string $pseudoElement = null)
     {
         $this->tree = $tree;
         $this->pseudoElement = $pseudoElement ? strtolower($pseudoElement) : null;
     }
 
-    /**
-     * @return NodeInterface
-     */
-    public function getTree()
+    public function getTree(): NodeInterface
     {
         return $this->tree;
     }
 
-    /**
-     * @return null|string
-     */
-    public function getPseudoElement()
+    public function getPseudoElement(): ?string
     {
         return $this->pseudoElement;
     }
@@ -55,7 +45,7 @@ public function getPseudoElement()
     /**
      * {@inheritdoc}
      */
-    public function getSpecificity()
+    public function getSpecificity(): Specificity
     {
         return $this->tree->getSpecificity()->plus(new Specificity(0, 0, $this->pseudoElement ? 1 : 0));
     }
@@ -63,7 +53,7 @@ public function getSpecificity()
     /**
      * {@inheritdoc}
      */
-    public function __toString()
+    public function __toString(): string
     {
         return sprintf('%s[%s%s]', $this->getNodeName(), $this->tree, $this->pseudoElement ? '::'.$this->pseudoElement : '');
     }
diff --git a/vendor/symfony/css-selector/Node/Specificity.php b/vendor/symfony/css-selector/Node/Specificity.php
index a11b7f73d8..d0ac8aa1d7 100644
--- a/vendor/symfony/css-selector/Node/Specificity.php
+++ b/vendor/symfony/css-selector/Node/Specificity.php
@@ -33,32 +33,19 @@ class Specificity
     private $b;
     private $c;
 
-    /**
-     * @param int $a
-     * @param int $b
-     * @param int $c
-     */
-    public function __construct($a, $b, $c)
+    public function __construct(int $a, int $b, int $c)
     {
         $this->a = $a;
         $this->b = $b;
         $this->c = $c;
     }
 
-    /**
-     * @return self
-     */
-    public function plus(self $specificity)
+    public function plus(self $specificity): self
     {
         return new self($this->a + $specificity->a, $this->b + $specificity->b, $this->c + $specificity->c);
     }
 
-    /**
-     * Returns global specificity value.
-     *
-     * @return int
-     */
-    public function getValue()
+    public function getValue(): int
     {
         return $this->a * self::A_FACTOR + $this->b * self::B_FACTOR + $this->c * self::C_FACTOR;
     }
@@ -66,10 +53,8 @@ public function getValue()
     /**
      * Returns -1 if the object specificity is lower than the argument,
      * 0 if they are equal, and 1 if the argument is lower.
-     *
-     * @return int
      */
-    public function compareTo(self $specificity)
+    public function compareTo(self $specificity): int
     {
         if ($this->a !== $specificity->a) {
             return $this->a > $specificity->a ? 1 : -1;
diff --git a/vendor/symfony/css-selector/Parser/Handler/CommentHandler.php b/vendor/symfony/css-selector/Parser/Handler/CommentHandler.php
index a29775cab3..93f318844a 100644
--- a/vendor/symfony/css-selector/Parser/Handler/CommentHandler.php
+++ b/vendor/symfony/css-selector/Parser/Handler/CommentHandler.php
@@ -29,7 +29,7 @@ class CommentHandler implements HandlerInterface
     /**
      * {@inheritdoc}
      */
-    public function handle(Reader $reader, TokenStream $stream)
+    public function handle(Reader $reader, TokenStream $stream): bool
     {
         if ('/*' !== $reader->getSubstring(2)) {
             return false;
diff --git a/vendor/symfony/css-selector/Parser/Handler/HandlerInterface.php b/vendor/symfony/css-selector/Parser/Handler/HandlerInterface.php
index de931f6797..9ec714d547 100644
--- a/vendor/symfony/css-selector/Parser/Handler/HandlerInterface.php
+++ b/vendor/symfony/css-selector/Parser/Handler/HandlerInterface.php
@@ -26,8 +26,5 @@
  */
 interface HandlerInterface
 {
-    /**
-     * @return bool
-     */
-    public function handle(Reader $reader, TokenStream $stream);
+    public function handle(Reader $reader, TokenStream $stream): bool;
 }
diff --git a/vendor/symfony/css-selector/Parser/Handler/HashHandler.php b/vendor/symfony/css-selector/Parser/Handler/HashHandler.php
index e451328f17..7ae9b438ca 100644
--- a/vendor/symfony/css-selector/Parser/Handler/HashHandler.php
+++ b/vendor/symfony/css-selector/Parser/Handler/HashHandler.php
@@ -41,7 +41,7 @@ public function __construct(TokenizerPatterns $patterns, TokenizerEscaping $esca
     /**
      * {@inheritdoc}
      */
-    public function handle(Reader $reader, TokenStream $stream)
+    public function handle(Reader $reader, TokenStream $stream): bool
     {
         $match = $reader->findPattern($this->patterns->getHashPattern());
 
diff --git a/vendor/symfony/css-selector/Parser/Handler/IdentifierHandler.php b/vendor/symfony/css-selector/Parser/Handler/IdentifierHandler.php
index 1591fcb54b..7b2a14e2c3 100644
--- a/vendor/symfony/css-selector/Parser/Handler/IdentifierHandler.php
+++ b/vendor/symfony/css-selector/Parser/Handler/IdentifierHandler.php
@@ -41,7 +41,7 @@ public function __construct(TokenizerPatterns $patterns, TokenizerEscaping $esca
     /**
      * {@inheritdoc}
      */
-    public function handle(Reader $reader, TokenStream $stream)
+    public function handle(Reader $reader, TokenStream $stream): bool
     {
         $match = $reader->findPattern($this->patterns->getIdentifierPattern());
 
diff --git a/vendor/symfony/css-selector/Parser/Handler/NumberHandler.php b/vendor/symfony/css-selector/Parser/Handler/NumberHandler.php
index 5955903cd4..8291a68d13 100644
--- a/vendor/symfony/css-selector/Parser/Handler/NumberHandler.php
+++ b/vendor/symfony/css-selector/Parser/Handler/NumberHandler.php
@@ -38,7 +38,7 @@ public function __construct(TokenizerPatterns $patterns)
     /**
      * {@inheritdoc}
      */
-    public function handle(Reader $reader, TokenStream $stream)
+    public function handle(Reader $reader, TokenStream $stream): bool
     {
         $match = $reader->findPattern($this->patterns->getNumberPattern());
 
diff --git a/vendor/symfony/css-selector/Parser/Handler/StringHandler.php b/vendor/symfony/css-selector/Parser/Handler/StringHandler.php
index 00155b0465..6ce83cdc9b 100644
--- a/vendor/symfony/css-selector/Parser/Handler/StringHandler.php
+++ b/vendor/symfony/css-selector/Parser/Handler/StringHandler.php
@@ -43,11 +43,11 @@ public function __construct(TokenizerPatterns $patterns, TokenizerEscaping $esca
     /**
      * {@inheritdoc}
      */
-    public function handle(Reader $reader, TokenStream $stream)
+    public function handle(Reader $reader, TokenStream $stream): bool
     {
         $quote = $reader->getSubstring(1);
 
-        if (!\in_array($quote, array("'", '"'))) {
+        if (!\in_array($quote, ["'", '"'])) {
             return false;
         }
 
@@ -55,7 +55,7 @@ public function handle(Reader $reader, TokenStream $stream)
         $match = $reader->findPattern($this->patterns->getQuotedStringPattern($quote));
 
         if (!$match) {
-            throw new InternalErrorException(sprintf('Should have found at least an empty match at %s.', $reader->getPosition()));
+            throw new InternalErrorException(sprintf('Should have found at least an empty match at %d.', $reader->getPosition()));
         }
 
         // check unclosed strings
diff --git a/vendor/symfony/css-selector/Parser/Handler/WhitespaceHandler.php b/vendor/symfony/css-selector/Parser/Handler/WhitespaceHandler.php
index 396467af0f..21345e32c7 100644
--- a/vendor/symfony/css-selector/Parser/Handler/WhitespaceHandler.php
+++ b/vendor/symfony/css-selector/Parser/Handler/WhitespaceHandler.php
@@ -30,7 +30,7 @@ class WhitespaceHandler implements HandlerInterface
     /**
      * {@inheritdoc}
      */
-    public function handle(Reader $reader, TokenStream $stream)
+    public function handle(Reader $reader, TokenStream $stream): bool
     {
         $match = $reader->findPattern('~^[ \t\r\n\f]+~');
 
diff --git a/vendor/symfony/css-selector/Parser/Parser.php b/vendor/symfony/css-selector/Parser/Parser.php
index 87c05a74b5..a03f1527f1 100644
--- a/vendor/symfony/css-selector/Parser/Parser.php
+++ b/vendor/symfony/css-selector/Parser/Parser.php
@@ -37,7 +37,7 @@ public function __construct(Tokenizer $tokenizer = null)
     /**
      * {@inheritdoc}
      */
-    public function parse($source)
+    public function parse(string $source): array
     {
         $reader = new Reader($source);
         $stream = $this->tokenizer->tokenize($reader);
@@ -50,11 +50,9 @@ public function parse($source)
      *
      * @param Token[] $tokens
      *
-     * @return array
-     *
      * @throws SyntaxErrorException
      */
-    public static function parseSeries(array $tokens)
+    public static function parseSeries(array $tokens): array
     {
         foreach ($tokens as $token) {
             if ($token->isString()) {
@@ -76,38 +74,33 @@ public static function parseSeries(array $tokens)
 
         switch (true) {
             case 'odd' === $joined:
-                return array(2, 1);
+                return [2, 1];
             case 'even' === $joined:
-                return array(2, 0);
+                return [2, 0];
             case 'n' === $joined:
-                return array(1, 0);
+                return [1, 0];
             case false === strpos($joined, 'n'):
-                return array(0, $int($joined));
+                return [0, $int($joined)];
         }
 
         $split = explode('n', $joined);
         $first = isset($split[0]) ? $split[0] : null;
 
-        return array(
+        return [
             $first ? ('-' === $first || '+' === $first ? $int($first.'1') : $int($first)) : 1,
             isset($split[1]) && $split[1] ? $int($split[1]) : 0,
-        );
+        ];
     }
 
-    /**
-     * Parses selector nodes.
-     *
-     * @return array
-     */
-    private function parseSelectorList(TokenStream $stream)
+    private function parseSelectorList(TokenStream $stream): array
     {
         $stream->skipWhitespace();
-        $selectors = array();
+        $selectors = [];
 
         while (true) {
             $selectors[] = $this->parserSelectorNode($stream);
 
-            if ($stream->getPeek()->isDelimiter(array(','))) {
+            if ($stream->getPeek()->isDelimiter([','])) {
                 $stream->getNext();
                 $stream->skipWhitespace();
             } else {
@@ -118,22 +111,15 @@ private function parseSelectorList(TokenStream $stream)
         return $selectors;
     }
 
-    /**
-     * Parses next selector or combined node.
-     *
-     * @return Node\SelectorNode
-     *
-     * @throws SyntaxErrorException
-     */
-    private function parserSelectorNode(TokenStream $stream)
+    private function parserSelectorNode(TokenStream $stream): Node\SelectorNode
     {
-        list($result, $pseudoElement) = $this->parseSimpleSelector($stream);
+        [$result, $pseudoElement] = $this->parseSimpleSelector($stream);
 
         while (true) {
             $stream->skipWhitespace();
             $peek = $stream->getPeek();
 
-            if ($peek->isFileEnd() || $peek->isDelimiter(array(','))) {
+            if ($peek->isFileEnd() || $peek->isDelimiter([','])) {
                 break;
             }
 
@@ -141,14 +127,14 @@ private function parserSelectorNode(TokenStream $stream)
                 throw SyntaxErrorException::pseudoElementFound($pseudoElement, 'not at the end of a selector');
             }
 
-            if ($peek->isDelimiter(array('+', '>', '~'))) {
+            if ($peek->isDelimiter(['+', '>', '~'])) {
                 $combinator = $stream->getNext()->getValue();
                 $stream->skipWhitespace();
             } else {
                 $combinator = ' ';
             }
 
-            list($nextSelector, $pseudoElement) = $this->parseSimpleSelector($stream);
+            [$nextSelector, $pseudoElement] = $this->parseSimpleSelector($stream);
             $result = new Node\CombinedSelectorNode($result, $combinator, $nextSelector);
         }
 
@@ -158,14 +144,9 @@ private function parserSelectorNode(TokenStream $stream)
     /**
      * Parses next simple node (hash, class, pseudo, negation).
      *
-     * @param TokenStream $stream
-     * @param bool        $insideNegation
-     *
-     * @return array
-     *
      * @throws SyntaxErrorException
      */
-    private function parseSimpleSelector(TokenStream $stream, $insideNegation = false)
+    private function parseSimpleSelector(TokenStream $stream, bool $insideNegation = false): array
     {
         $stream->skipWhitespace();
 
@@ -177,8 +158,8 @@ private function parseSimpleSelector(TokenStream $stream, $insideNegation = fals
             $peek = $stream->getPeek();
             if ($peek->isWhitespace()
                 || $peek->isFileEnd()
-                || $peek->isDelimiter(array(',', '+', '>', '~'))
-                || ($insideNegation && $peek->isDelimiter(array(')')))
+                || $peek->isDelimiter([',', '+', '>', '~'])
+                || ($insideNegation && $peek->isDelimiter([')']))
             ) {
                 break;
             }
@@ -189,16 +170,16 @@ private function parseSimpleSelector(TokenStream $stream, $insideNegation = fals
 
             if ($peek->isHash()) {
                 $result = new Node\HashNode($result, $stream->getNext()->getValue());
-            } elseif ($peek->isDelimiter(array('.'))) {
+            } elseif ($peek->isDelimiter(['.'])) {
                 $stream->getNext();
                 $result = new Node\ClassNode($result, $stream->getNextIdentifier());
-            } elseif ($peek->isDelimiter(array('['))) {
+            } elseif ($peek->isDelimiter(['['])) {
                 $stream->getNext();
                 $result = $this->parseAttributeNode($result, $stream);
-            } elseif ($peek->isDelimiter(array(':'))) {
+            } elseif ($peek->isDelimiter([':'])) {
                 $stream->getNext();
 
-                if ($stream->getPeek()->isDelimiter(array(':'))) {
+                if ($stream->getPeek()->isDelimiter([':'])) {
                     $stream->getNext();
                     $pseudoElement = $stream->getNextIdentifier();
 
@@ -206,7 +187,7 @@ private function parseSimpleSelector(TokenStream $stream, $insideNegation = fals
                 }
 
                 $identifier = $stream->getNextIdentifier();
-                if (\in_array(strtolower($identifier), array('first-line', 'first-letter', 'before', 'after'))) {
+                if (\in_array(strtolower($identifier), ['first-line', 'first-letter', 'before', 'after'])) {
                     // Special case: CSS 2.1 pseudo-elements can have a single ':'.
                     // Any new pseudo-element must have two.
                     $pseudoElement = $identifier;
@@ -214,7 +195,7 @@ private function parseSimpleSelector(TokenStream $stream, $insideNegation = fals
                     continue;
                 }
 
-                if (!$stream->getPeek()->isDelimiter(array('('))) {
+                if (!$stream->getPeek()->isDelimiter(['('])) {
                     $result = new Node\PseudoNode($result, $identifier);
 
                     continue;
@@ -228,20 +209,20 @@ private function parseSimpleSelector(TokenStream $stream, $insideNegation = fals
                         throw SyntaxErrorException::nestedNot();
                     }
 
-                    list($argument, $argumentPseudoElement) = $this->parseSimpleSelector($stream, true);
+                    [$argument, $argumentPseudoElement] = $this->parseSimpleSelector($stream, true);
                     $next = $stream->getNext();
 
                     if (null !== $argumentPseudoElement) {
                         throw SyntaxErrorException::pseudoElementFound($argumentPseudoElement, 'inside ::not()');
                     }
 
-                    if (!$next->isDelimiter(array(')'))) {
+                    if (!$next->isDelimiter([')'])) {
                         throw SyntaxErrorException::unexpectedToken('")"', $next);
                     }
 
                     $result = new Node\NegationNode($result, $argument);
                 } else {
-                    $arguments = array();
+                    $arguments = [];
                     $next = null;
 
                     while (true) {
@@ -251,10 +232,10 @@ private function parseSimpleSelector(TokenStream $stream, $insideNegation = fals
                         if ($next->isIdentifier()
                             || $next->isString()
                             || $next->isNumber()
-                            || $next->isDelimiter(array('+', '-'))
+                            || $next->isDelimiter(['+', '-'])
                         ) {
                             $arguments[] = $next;
-                        } elseif ($next->isDelimiter(array(')'))) {
+                        } elseif ($next->isDelimiter([')'])) {
                             break;
                         } else {
                             throw SyntaxErrorException::unexpectedToken('an argument', $next);
@@ -276,19 +257,14 @@ private function parseSimpleSelector(TokenStream $stream, $insideNegation = fals
             throw SyntaxErrorException::unexpectedToken('selector', $stream->getPeek());
         }
 
-        return array($result, $pseudoElement);
+        return [$result, $pseudoElement];
     }
 
-    /**
-     * Parses next element node.
-     *
-     * @return Node\ElementNode
-     */
-    private function parseElementNode(TokenStream $stream)
+    private function parseElementNode(TokenStream $stream): Node\ElementNode
     {
         $peek = $stream->getPeek();
 
-        if ($peek->isIdentifier() || $peek->isDelimiter(array('*'))) {
+        if ($peek->isIdentifier() || $peek->isDelimiter(['*'])) {
             if ($peek->isIdentifier()) {
                 $namespace = $stream->getNext()->getValue();
             } else {
@@ -296,7 +272,7 @@ private function parseElementNode(TokenStream $stream)
                 $namespace = null;
             }
 
-            if ($stream->getPeek()->isDelimiter(array('|'))) {
+            if ($stream->getPeek()->isDelimiter(['|'])) {
                 $stream->getNext();
                 $element = $stream->getNextIdentifierOrStar();
             } else {
@@ -310,26 +286,19 @@ private function parseElementNode(TokenStream $stream)
         return new Node\ElementNode($namespace, $element);
     }
 
-    /**
-     * Parses next attribute node.
-     *
-     * @return Node\AttributeNode
-     *
-     * @throws SyntaxErrorException
-     */
-    private function parseAttributeNode(Node\NodeInterface $selector, TokenStream $stream)
+    private function parseAttributeNode(Node\NodeInterface $selector, TokenStream $stream): Node\AttributeNode
     {
         $stream->skipWhitespace();
         $attribute = $stream->getNextIdentifierOrStar();
 
-        if (null === $attribute && !$stream->getPeek()->isDelimiter(array('|'))) {
+        if (null === $attribute && !$stream->getPeek()->isDelimiter(['|'])) {
             throw SyntaxErrorException::unexpectedToken('"|"', $stream->getPeek());
         }
 
-        if ($stream->getPeek()->isDelimiter(array('|'))) {
+        if ($stream->getPeek()->isDelimiter(['|'])) {
             $stream->getNext();
 
-            if ($stream->getPeek()->isDelimiter(array('='))) {
+            if ($stream->getPeek()->isDelimiter(['='])) {
                 $namespace = null;
                 $stream->getNext();
                 $operator = '|=';
@@ -346,12 +315,12 @@ private function parseAttributeNode(Node\NodeInterface $selector, TokenStream $s
             $stream->skipWhitespace();
             $next = $stream->getNext();
 
-            if ($next->isDelimiter(array(']'))) {
+            if ($next->isDelimiter([']'])) {
                 return new Node\AttributeNode($selector, $namespace, $attribute, 'exists', null);
-            } elseif ($next->isDelimiter(array('='))) {
+            } elseif ($next->isDelimiter(['='])) {
                 $operator = '=';
-            } elseif ($next->isDelimiter(array('^', '$', '*', '~', '|', '!'))
-                && $stream->getPeek()->isDelimiter(array('='))
+            } elseif ($next->isDelimiter(['^', '$', '*', '~', '|', '!'])
+                && $stream->getPeek()->isDelimiter(['='])
             ) {
                 $operator = $next->getValue().'=';
                 $stream->getNext();
@@ -375,7 +344,7 @@ private function parseAttributeNode(Node\NodeInterface $selector, TokenStream $s
         $stream->skipWhitespace();
         $next = $stream->getNext();
 
-        if (!$next->isDelimiter(array(']'))) {
+        if (!$next->isDelimiter([']'])) {
             throw SyntaxErrorException::unexpectedToken('"]"', $next);
         }
 
diff --git a/vendor/symfony/css-selector/Parser/ParserInterface.php b/vendor/symfony/css-selector/Parser/ParserInterface.php
index c5af20367d..51c3d93506 100644
--- a/vendor/symfony/css-selector/Parser/ParserInterface.php
+++ b/vendor/symfony/css-selector/Parser/ParserInterface.php
@@ -28,9 +28,7 @@ interface ParserInterface
     /**
      * Parses given selector source into an array of tokens.
      *
-     * @param string $source
-     *
      * @return SelectorNode[]
      */
-    public function parse($source);
+    public function parse(string $source): array;
 }
diff --git a/vendor/symfony/css-selector/Parser/Reader.php b/vendor/symfony/css-selector/Parser/Reader.php
index 076cb711c0..4b43effed3 100644
--- a/vendor/symfony/css-selector/Parser/Reader.php
+++ b/vendor/symfony/css-selector/Parser/Reader.php
@@ -27,56 +27,33 @@ class Reader
     private $length;
     private $position = 0;
 
-    /**
-     * @param string $source
-     */
-    public function __construct($source)
+    public function __construct(string $source)
     {
         $this->source = $source;
         $this->length = \strlen($source);
     }
 
-    /**
-     * @return bool
-     */
-    public function isEOF()
+    public function isEOF(): bool
     {
         return $this->position >= $this->length;
     }
 
-    /**
-     * @return int
-     */
-    public function getPosition()
+    public function getPosition(): int
     {
         return $this->position;
     }
 
-    /**
-     * @return int
-     */
-    public function getRemainingLength()
+    public function getRemainingLength(): int
     {
         return $this->length - $this->position;
     }
 
-    /**
-     * @param int $length
-     * @param int $offset
-     *
-     * @return string
-     */
-    public function getSubstring($length, $offset = 0)
+    public function getSubstring(int $length, int $offset = 0): string
     {
         return substr($this->source, $this->position + $offset, $length);
     }
 
-    /**
-     * @param string $string
-     *
-     * @return int
-     */
-    public function getOffset($string)
+    public function getOffset(string $string)
     {
         $position = strpos($this->source, $string, $this->position);
 
@@ -84,11 +61,9 @@ public function getOffset($string)
     }
 
     /**
-     * @param string $pattern
-     *
      * @return array|false
      */
-    public function findPattern($pattern)
+    public function findPattern(string $pattern)
     {
         $source = substr($this->source, $this->position);
 
@@ -99,10 +74,7 @@ public function findPattern($pattern)
         return false;
     }
 
-    /**
-     * @param int $length
-     */
-    public function moveForward($length)
+    public function moveForward(int $length)
     {
         $this->position += $length;
     }
diff --git a/vendor/symfony/css-selector/Parser/Shortcut/ClassParser.php b/vendor/symfony/css-selector/Parser/Shortcut/ClassParser.php
index c513de5ff1..17fa8c27e7 100644
--- a/vendor/symfony/css-selector/Parser/Shortcut/ClassParser.php
+++ b/vendor/symfony/css-selector/Parser/Shortcut/ClassParser.php
@@ -31,7 +31,7 @@ class ClassParser implements ParserInterface
     /**
      * {@inheritdoc}
      */
-    public function parse($source)
+    public function parse(string $source): array
     {
         // Matches an optional namespace, optional element, and required class
         // $source = 'test|input.ab6bd_field';
@@ -41,11 +41,11 @@ public function parse($source)
         //     2 => string 'input' (length=5)
         //     3 => string 'ab6bd_field' (length=11)
         if (preg_match('/^(?:([a-z]++)\|)?+([\w-]++|\*)?+\.([\w-]++)$/i', trim($source), $matches)) {
-            return array(
+            return [
                 new SelectorNode(new ClassNode(new ElementNode($matches[1] ?: null, $matches[2] ?: null), $matches[3])),
-            );
+            ];
         }
 
-        return array();
+        return [];
     }
 }
diff --git a/vendor/symfony/css-selector/Parser/Shortcut/ElementParser.php b/vendor/symfony/css-selector/Parser/Shortcut/ElementParser.php
index c29f5e442e..8b9a863869 100644
--- a/vendor/symfony/css-selector/Parser/Shortcut/ElementParser.php
+++ b/vendor/symfony/css-selector/Parser/Shortcut/ElementParser.php
@@ -30,7 +30,7 @@ class ElementParser implements ParserInterface
     /**
      * {@inheritdoc}
      */
-    public function parse($source)
+    public function parse(string $source): array
     {
         // Matches an optional namespace, required element or `*`
         // $source = 'testns|testel';
@@ -39,9 +39,9 @@ public function parse($source)
         //     1 => string 'testns' (length=6)
         //     2 => string 'testel' (length=6)
         if (preg_match('/^(?:([a-z]++)\|)?([\w-]++|\*)$/i', trim($source), $matches)) {
-            return array(new SelectorNode(new ElementNode($matches[1] ?: null, $matches[2])));
+            return [new SelectorNode(new ElementNode($matches[1] ?: null, $matches[2]))];
         }
 
-        return array();
+        return [];
     }
 }
diff --git a/vendor/symfony/css-selector/Parser/Shortcut/EmptyStringParser.php b/vendor/symfony/css-selector/Parser/Shortcut/EmptyStringParser.php
index 16d374af30..222df5cd29 100644
--- a/vendor/symfony/css-selector/Parser/Shortcut/EmptyStringParser.php
+++ b/vendor/symfony/css-selector/Parser/Shortcut/EmptyStringParser.php
@@ -34,13 +34,13 @@ class EmptyStringParser implements ParserInterface
     /**
      * {@inheritdoc}
      */
-    public function parse($source)
+    public function parse(string $source): array
     {
         // Matches an empty string
         if ('' == $source) {
-            return array(new SelectorNode(new ElementNode(null, '*')));
+            return [new SelectorNode(new ElementNode(null, '*'))];
         }
 
-        return array();
+        return [];
     }
 }
diff --git a/vendor/symfony/css-selector/Parser/Shortcut/HashParser.php b/vendor/symfony/css-selector/Parser/Shortcut/HashParser.php
index 3f3883bb8d..fb07ee6cf8 100644
--- a/vendor/symfony/css-selector/Parser/Shortcut/HashParser.php
+++ b/vendor/symfony/css-selector/Parser/Shortcut/HashParser.php
@@ -31,7 +31,7 @@ class HashParser implements ParserInterface
     /**
      * {@inheritdoc}
      */
-    public function parse($source)
+    public function parse(string $source): array
     {
         // Matches an optional namespace, optional element, and required id
         // $source = 'test|input#ab6bd_field';
@@ -41,11 +41,11 @@ public function parse($source)
         //     2 => string 'input' (length=5)
         //     3 => string 'ab6bd_field' (length=11)
         if (preg_match('/^(?:([a-z]++)\|)?+([\w-]++|\*)?+#([\w-]++)$/i', trim($source), $matches)) {
-            return array(
+            return [
                 new SelectorNode(new HashNode(new ElementNode($matches[1] ?: null, $matches[2] ?: null), $matches[3])),
-            );
+            ];
         }
 
-        return array();
+        return [];
     }
 }
diff --git a/vendor/symfony/css-selector/Parser/Token.php b/vendor/symfony/css-selector/Parser/Token.php
index 72baae776d..9a324854b2 100644
--- a/vendor/symfony/css-selector/Parser/Token.php
+++ b/vendor/symfony/css-selector/Parser/Token.php
@@ -35,54 +35,34 @@ class Token
     private $value;
     private $position;
 
-    /**
-     * @param int    $type
-     * @param string $value
-     * @param int    $position
-     */
-    public function __construct($type, $value, $position)
+    public function __construct(?string $type, ?string $value, ?int $position)
     {
         $this->type = $type;
         $this->value = $value;
         $this->position = $position;
     }
 
-    /**
-     * @return int
-     */
-    public function getType()
+    public function getType(): ?int
     {
         return $this->type;
     }
 
-    /**
-     * @return string
-     */
-    public function getValue()
+    public function getValue(): ?string
     {
         return $this->value;
     }
 
-    /**
-     * @return int
-     */
-    public function getPosition()
+    public function getPosition(): ?int
     {
         return $this->position;
     }
 
-    /**
-     * @return bool
-     */
-    public function isFileEnd()
+    public function isFileEnd(): bool
     {
         return self::TYPE_FILE_END === $this->type;
     }
 
-    /**
-     * @return bool
-     */
-    public function isDelimiter(array $values = array())
+    public function isDelimiter(array $values = []): bool
     {
         if (self::TYPE_DELIMITER !== $this->type) {
             return false;
@@ -95,50 +75,32 @@ public function isDelimiter(array $values = array())
         return \in_array($this->value, $values);
     }
 
-    /**
-     * @return bool
-     */
-    public function isWhitespace()
+    public function isWhitespace(): bool
     {
         return self::TYPE_WHITESPACE === $this->type;
     }
 
-    /**
-     * @return bool
-     */
-    public function isIdentifier()
+    public function isIdentifier(): bool
     {
         return self::TYPE_IDENTIFIER === $this->type;
     }
 
-    /**
-     * @return bool
-     */
-    public function isHash()
+    public function isHash(): bool
     {
         return self::TYPE_HASH === $this->type;
     }
 
-    /**
-     * @return bool
-     */
-    public function isNumber()
+    public function isNumber(): bool
     {
         return self::TYPE_NUMBER === $this->type;
     }
 
-    /**
-     * @return bool
-     */
-    public function isString()
+    public function isString(): bool
     {
         return self::TYPE_STRING === $this->type;
     }
 
-    /**
-     * @return string
-     */
-    public function __toString()
+    public function __toString(): string
     {
         if ($this->value) {
             return sprintf('<%s "%s" at %s>', $this->type, $this->value, $this->position);
diff --git a/vendor/symfony/css-selector/Parser/TokenStream.php b/vendor/symfony/css-selector/Parser/TokenStream.php
index 24e8634ad6..f4c2585aa0 100644
--- a/vendor/symfony/css-selector/Parser/TokenStream.php
+++ b/vendor/symfony/css-selector/Parser/TokenStream.php
@@ -29,12 +29,12 @@ class TokenStream
     /**
      * @var Token[]
      */
-    private $tokens = array();
+    private $tokens = [];
 
     /**
      * @var Token[]
      */
-    private $used = array();
+    private $used = [];
 
     /**
      * @var int
@@ -56,7 +56,7 @@ class TokenStream
      *
      * @return $this
      */
-    public function push(Token $token)
+    public function push(Token $token): self
     {
         $this->tokens[] = $token;
 
@@ -68,7 +68,7 @@ public function push(Token $token)
      *
      * @return $this
      */
-    public function freeze()
+    public function freeze(): self
     {
         return $this;
     }
@@ -76,11 +76,9 @@ public function freeze()
     /**
      * Returns next token.
      *
-     * @return Token
-     *
      * @throws InternalErrorException If there is no more token
      */
-    public function getNext()
+    public function getNext(): Token
     {
         if ($this->peeking) {
             $this->peeking = false;
@@ -98,10 +96,8 @@ public function getNext()
 
     /**
      * Returns peeked token.
-     *
-     * @return Token
      */
-    public function getPeek()
+    public function getPeek(): Token
     {
         if (!$this->peeking) {
             $this->peeked = $this->getNext();
@@ -116,7 +112,7 @@ public function getPeek()
      *
      * @return Token[]
      */
-    public function getUsed()
+    public function getUsed(): array
     {
         return $this->used;
     }
@@ -128,7 +124,7 @@ public function getUsed()
      *
      * @throws SyntaxErrorException If next token is not an identifier
      */
-    public function getNextIdentifier()
+    public function getNextIdentifier(): string
     {
         $next = $this->getNext();
 
@@ -142,11 +138,11 @@ public function getNextIdentifier()
     /**
      * Returns nex identifier or star delimiter token.
      *
-     * @return null|string The identifier token value or null if star found
+     * @return string|null The identifier token value or null if star found
      *
      * @throws SyntaxErrorException If next token is not an identifier or a star delimiter
      */
-    public function getNextIdentifierOrStar()
+    public function getNextIdentifierOrStar(): ?string
     {
         $next = $this->getNext();
 
@@ -154,8 +150,8 @@ public function getNextIdentifierOrStar()
             return $next->getValue();
         }
 
-        if ($next->isDelimiter(array('*'))) {
-            return;
+        if ($next->isDelimiter(['*'])) {
+            return null;
         }
 
         throw SyntaxErrorException::unexpectedToken('identifier or "*"', $next);
diff --git a/vendor/symfony/css-selector/Parser/Tokenizer/Tokenizer.php b/vendor/symfony/css-selector/Parser/Tokenizer/Tokenizer.php
index e32b4d20ce..e0dcc5bf14 100644
--- a/vendor/symfony/css-selector/Parser/Tokenizer/Tokenizer.php
+++ b/vendor/symfony/css-selector/Parser/Tokenizer/Tokenizer.php
@@ -38,22 +38,20 @@ public function __construct()
         $patterns = new TokenizerPatterns();
         $escaping = new TokenizerEscaping($patterns);
 
-        $this->handlers = array(
+        $this->handlers = [
             new Handler\WhitespaceHandler(),
             new Handler\IdentifierHandler($patterns, $escaping),
             new Handler\HashHandler($patterns, $escaping),
             new Handler\StringHandler($patterns, $escaping),
             new Handler\NumberHandler($patterns),
             new Handler\CommentHandler(),
-        );
+        ];
     }
 
     /**
      * Tokenize selector source code.
-     *
-     * @return TokenStream
      */
-    public function tokenize(Reader $reader)
+    public function tokenize(Reader $reader): TokenStream
     {
         $stream = new TokenStream();
 
diff --git a/vendor/symfony/css-selector/Parser/Tokenizer/TokenizerEscaping.php b/vendor/symfony/css-selector/Parser/Tokenizer/TokenizerEscaping.php
index 55ea421493..013e827d2b 100644
--- a/vendor/symfony/css-selector/Parser/Tokenizer/TokenizerEscaping.php
+++ b/vendor/symfony/css-selector/Parser/Tokenizer/TokenizerEscaping.php
@@ -30,36 +30,21 @@ public function __construct(TokenizerPatterns $patterns)
         $this->patterns = $patterns;
     }
 
-    /**
-     * @param string $value
-     *
-     * @return string
-     */
-    public function escapeUnicode($value)
+    public function escapeUnicode(string $value): string
     {
         $value = $this->replaceUnicodeSequences($value);
 
         return preg_replace($this->patterns->getSimpleEscapePattern(), '$1', $value);
     }
 
-    /**
-     * @param string $value
-     *
-     * @return string
-     */
-    public function escapeUnicodeAndNewLine($value)
+    public function escapeUnicodeAndNewLine(string $value): string
     {
         $value = preg_replace($this->patterns->getNewLineEscapePattern(), '', $value);
 
         return $this->escapeUnicode($value);
     }
 
-    /**
-     * @param string $value
-     *
-     * @return string
-     */
-    private function replaceUnicodeSequences($value)
+    private function replaceUnicodeSequences(string $value): string
     {
         return preg_replace_callback($this->patterns->getUnicodeEscapePattern(), function ($match) {
             $c = hexdec($match[1]);
@@ -73,6 +58,8 @@ private function replaceUnicodeSequences($value)
             if (0x10000 > $c) {
                 return \chr(0xE0 | $c >> 12).\chr(0x80 | $c >> 6 & 0x3F).\chr(0x80 | $c & 0x3F);
             }
+
+            return '';
         }, $value);
     }
 }
diff --git a/vendor/symfony/css-selector/Parser/Tokenizer/TokenizerPatterns.php b/vendor/symfony/css-selector/Parser/Tokenizer/TokenizerPatterns.php
index bc6130d7d3..5f16ac48f8 100644
--- a/vendor/symfony/css-selector/Parser/Tokenizer/TokenizerPatterns.php
+++ b/vendor/symfony/css-selector/Parser/Tokenizer/TokenizerPatterns.php
@@ -52,60 +52,37 @@ public function __construct()
         $this->quotedStringPattern = '([^\n\r\f%s]|'.$this->stringEscapePattern.')*';
     }
 
-    /**
-     * @return string
-     */
-    public function getNewLineEscapePattern()
+    public function getNewLineEscapePattern(): string
     {
         return '~^'.$this->newLineEscapePattern.'~';
     }
 
-    /**
-     * @return string
-     */
-    public function getSimpleEscapePattern()
+    public function getSimpleEscapePattern(): string
     {
         return '~^'.$this->simpleEscapePattern.'~';
     }
 
-    /**
-     * @return string
-     */
-    public function getUnicodeEscapePattern()
+    public function getUnicodeEscapePattern(): string
     {
         return '~^'.$this->unicodeEscapePattern.'~i';
     }
 
-    /**
-     * @return string
-     */
-    public function getIdentifierPattern()
+    public function getIdentifierPattern(): string
     {
         return '~^'.$this->identifierPattern.'~i';
     }
 
-    /**
-     * @return string
-     */
-    public function getHashPattern()
+    public function getHashPattern(): string
     {
         return '~^'.$this->hashPattern.'~i';
     }
 
-    /**
-     * @return string
-     */
-    public function getNumberPattern()
+    public function getNumberPattern(): string
     {
         return '~^'.$this->numberPattern.'~';
     }
 
-    /**
-     * @param string $quote
-     *
-     * @return string
-     */
-    public function getQuotedStringPattern($quote)
+    public function getQuotedStringPattern(string $quote): string
     {
         return '~^'.sprintf($this->quotedStringPattern, $quote).'~i';
     }
diff --git a/vendor/symfony/css-selector/Tests/CssSelectorConverterTest.php b/vendor/symfony/css-selector/Tests/CssSelectorConverterTest.php
deleted file mode 100644
index a3eea7ad21..0000000000
--- a/vendor/symfony/css-selector/Tests/CssSelectorConverterTest.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\CssSelector\CssSelectorConverter;
-
-class CssSelectorConverterTest extends TestCase
-{
-    public function testCssToXPath()
-    {
-        $converter = new CssSelectorConverter();
-
-        $this->assertEquals('descendant-or-self::*', $converter->toXPath(''));
-        $this->assertEquals('descendant-or-self::h1', $converter->toXPath('h1'));
-        $this->assertEquals("descendant-or-self::h1[@id = 'foo']", $converter->toXPath('h1#foo'));
-        $this->assertEquals("descendant-or-self::h1[@class and contains(concat(' ', normalize-space(@class), ' '), ' foo ')]", $converter->toXPath('h1.foo'));
-        $this->assertEquals('descendant-or-self::foo:h1', $converter->toXPath('foo|h1'));
-        $this->assertEquals('descendant-or-self::h1', $converter->toXPath('H1'));
-    }
-
-    public function testCssToXPathXml()
-    {
-        $converter = new CssSelectorConverter(false);
-
-        $this->assertEquals('descendant-or-self::H1', $converter->toXPath('H1'));
-    }
-
-    /**
-     * @expectedException \Symfony\Component\CssSelector\Exception\ParseException
-     * @expectedExceptionMessage Expected identifier, but <eof at 3> found.
-     */
-    public function testParseExceptions()
-    {
-        $converter = new CssSelectorConverter();
-        $converter->toXPath('h1:');
-    }
-
-    /** @dataProvider getCssToXPathWithoutPrefixTestData */
-    public function testCssToXPathWithoutPrefix($css, $xpath)
-    {
-        $converter = new CssSelectorConverter();
-
-        $this->assertEquals($xpath, $converter->toXPath($css, ''), '->parse() parses an input string and returns a node');
-    }
-
-    public function getCssToXPathWithoutPrefixTestData()
-    {
-        return array(
-            array('h1', 'h1'),
-            array('foo|h1', 'foo:h1'),
-            array('h1, h2, h3', 'h1 | h2 | h3'),
-            array('h1:nth-child(3n+1)', "*/*[(name() = 'h1') and (position() - 1 >= 0 and (position() - 1) mod 3 = 0)]"),
-            array('h1 > p', 'h1/p'),
-            array('h1#foo', "h1[@id = 'foo']"),
-            array('h1.foo', "h1[@class and contains(concat(' ', normalize-space(@class), ' '), ' foo ')]"),
-            array('h1[class*="foo bar"]', "h1[@class and contains(@class, 'foo bar')]"),
-            array('h1[foo|class*="foo bar"]', "h1[@foo:class and contains(@foo:class, 'foo bar')]"),
-            array('h1[class]', 'h1[@class]'),
-            array('h1 .foo', "h1/descendant-or-self::*/*[@class and contains(concat(' ', normalize-space(@class), ' '), ' foo ')]"),
-            array('h1 #foo', "h1/descendant-or-self::*/*[@id = 'foo']"),
-            array('h1 [class*=foo]', "h1/descendant-or-self::*/*[@class and contains(@class, 'foo')]"),
-            array('div>.foo', "div/*[@class and contains(concat(' ', normalize-space(@class), ' '), ' foo ')]"),
-            array('div > .foo', "div/*[@class and contains(concat(' ', normalize-space(@class), ' '), ' foo ')]"),
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Node/AbstractNodeTest.php b/vendor/symfony/css-selector/Tests/Node/AbstractNodeTest.php
deleted file mode 100644
index 5955513380..0000000000
--- a/vendor/symfony/css-selector/Tests/Node/AbstractNodeTest.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Node;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\CssSelector\Node\NodeInterface;
-
-abstract class AbstractNodeTest extends TestCase
-{
-    /** @dataProvider getToStringConversionTestData */
-    public function testToStringConversion(NodeInterface $node, $representation)
-    {
-        $this->assertEquals($representation, (string) $node);
-    }
-
-    /** @dataProvider getSpecificityValueTestData */
-    public function testSpecificityValue(NodeInterface $node, $value)
-    {
-        $this->assertEquals($value, $node->getSpecificity()->getValue());
-    }
-
-    abstract public function getToStringConversionTestData();
-
-    abstract public function getSpecificityValueTestData();
-}
diff --git a/vendor/symfony/css-selector/Tests/Node/AttributeNodeTest.php b/vendor/symfony/css-selector/Tests/Node/AttributeNodeTest.php
deleted file mode 100644
index 1fd090f5a6..0000000000
--- a/vendor/symfony/css-selector/Tests/Node/AttributeNodeTest.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Node;
-
-use Symfony\Component\CssSelector\Node\AttributeNode;
-use Symfony\Component\CssSelector\Node\ElementNode;
-
-class AttributeNodeTest extends AbstractNodeTest
-{
-    public function getToStringConversionTestData()
-    {
-        return array(
-            array(new AttributeNode(new ElementNode(), null, 'attribute', 'exists', null), 'Attribute[Element[*][attribute]]'),
-            array(new AttributeNode(new ElementNode(), null, 'attribute', '$=', 'value'), "Attribute[Element[*][attribute $= 'value']]"),
-            array(new AttributeNode(new ElementNode(), 'namespace', 'attribute', '$=', 'value'), "Attribute[Element[*][namespace|attribute $= 'value']]"),
-        );
-    }
-
-    public function getSpecificityValueTestData()
-    {
-        return array(
-            array(new AttributeNode(new ElementNode(), null, 'attribute', 'exists', null), 10),
-            array(new AttributeNode(new ElementNode(null, 'element'), null, 'attribute', 'exists', null), 11),
-            array(new AttributeNode(new ElementNode(), null, 'attribute', '$=', 'value'), 10),
-            array(new AttributeNode(new ElementNode(), 'namespace', 'attribute', '$=', 'value'), 10),
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Node/ClassNodeTest.php b/vendor/symfony/css-selector/Tests/Node/ClassNodeTest.php
deleted file mode 100644
index e0ab45accc..0000000000
--- a/vendor/symfony/css-selector/Tests/Node/ClassNodeTest.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Node;
-
-use Symfony\Component\CssSelector\Node\ClassNode;
-use Symfony\Component\CssSelector\Node\ElementNode;
-
-class ClassNodeTest extends AbstractNodeTest
-{
-    public function getToStringConversionTestData()
-    {
-        return array(
-            array(new ClassNode(new ElementNode(), 'class'), 'Class[Element[*].class]'),
-        );
-    }
-
-    public function getSpecificityValueTestData()
-    {
-        return array(
-            array(new ClassNode(new ElementNode(), 'class'), 10),
-            array(new ClassNode(new ElementNode(null, 'element'), 'class'), 11),
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Node/CombinedSelectorNodeTest.php b/vendor/symfony/css-selector/Tests/Node/CombinedSelectorNodeTest.php
deleted file mode 100644
index 9547298a6f..0000000000
--- a/vendor/symfony/css-selector/Tests/Node/CombinedSelectorNodeTest.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Node;
-
-use Symfony\Component\CssSelector\Node\CombinedSelectorNode;
-use Symfony\Component\CssSelector\Node\ElementNode;
-
-class CombinedSelectorNodeTest extends AbstractNodeTest
-{
-    public function getToStringConversionTestData()
-    {
-        return array(
-            array(new CombinedSelectorNode(new ElementNode(), '>', new ElementNode()), 'CombinedSelector[Element[*] > Element[*]]'),
-            array(new CombinedSelectorNode(new ElementNode(), ' ', new ElementNode()), 'CombinedSelector[Element[*] <followed> Element[*]]'),
-        );
-    }
-
-    public function getSpecificityValueTestData()
-    {
-        return array(
-            array(new CombinedSelectorNode(new ElementNode(), '>', new ElementNode()), 0),
-            array(new CombinedSelectorNode(new ElementNode(null, 'element'), '>', new ElementNode()), 1),
-            array(new CombinedSelectorNode(new ElementNode(null, 'element'), '>', new ElementNode(null, 'element')), 2),
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Node/ElementNodeTest.php b/vendor/symfony/css-selector/Tests/Node/ElementNodeTest.php
deleted file mode 100644
index 6d24789320..0000000000
--- a/vendor/symfony/css-selector/Tests/Node/ElementNodeTest.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Node;
-
-use Symfony\Component\CssSelector\Node\ElementNode;
-
-class ElementNodeTest extends AbstractNodeTest
-{
-    public function getToStringConversionTestData()
-    {
-        return array(
-            array(new ElementNode(), 'Element[*]'),
-            array(new ElementNode(null, 'element'), 'Element[element]'),
-            array(new ElementNode('namespace', 'element'), 'Element[namespace|element]'),
-        );
-    }
-
-    public function getSpecificityValueTestData()
-    {
-        return array(
-            array(new ElementNode(), 0),
-            array(new ElementNode(null, 'element'), 1),
-            array(new ElementNode('namespace', 'element'), 1),
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Node/FunctionNodeTest.php b/vendor/symfony/css-selector/Tests/Node/FunctionNodeTest.php
deleted file mode 100644
index ee3ce51ba5..0000000000
--- a/vendor/symfony/css-selector/Tests/Node/FunctionNodeTest.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Node;
-
-use Symfony\Component\CssSelector\Node\ElementNode;
-use Symfony\Component\CssSelector\Node\FunctionNode;
-use Symfony\Component\CssSelector\Parser\Token;
-
-class FunctionNodeTest extends AbstractNodeTest
-{
-    public function getToStringConversionTestData()
-    {
-        return array(
-            array(new FunctionNode(new ElementNode(), 'function'), 'Function[Element[*]:function()]'),
-            array(new FunctionNode(new ElementNode(), 'function', array(
-                new Token(Token::TYPE_IDENTIFIER, 'value', 0),
-            )), "Function[Element[*]:function(['value'])]"),
-            array(new FunctionNode(new ElementNode(), 'function', array(
-                new Token(Token::TYPE_STRING, 'value1', 0),
-                new Token(Token::TYPE_NUMBER, 'value2', 0),
-            )), "Function[Element[*]:function(['value1', 'value2'])]"),
-        );
-    }
-
-    public function getSpecificityValueTestData()
-    {
-        return array(
-            array(new FunctionNode(new ElementNode(), 'function'), 10),
-            array(new FunctionNode(new ElementNode(), 'function', array(
-                new Token(Token::TYPE_IDENTIFIER, 'value', 0),
-            )), 10),
-            array(new FunctionNode(new ElementNode(), 'function', array(
-                new Token(Token::TYPE_STRING, 'value1', 0),
-                new Token(Token::TYPE_NUMBER, 'value2', 0),
-            )), 10),
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Node/HashNodeTest.php b/vendor/symfony/css-selector/Tests/Node/HashNodeTest.php
deleted file mode 100644
index 3bc74da945..0000000000
--- a/vendor/symfony/css-selector/Tests/Node/HashNodeTest.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Node;
-
-use Symfony\Component\CssSelector\Node\ElementNode;
-use Symfony\Component\CssSelector\Node\HashNode;
-
-class HashNodeTest extends AbstractNodeTest
-{
-    public function getToStringConversionTestData()
-    {
-        return array(
-            array(new HashNode(new ElementNode(), 'id'), 'Hash[Element[*]#id]'),
-        );
-    }
-
-    public function getSpecificityValueTestData()
-    {
-        return array(
-            array(new HashNode(new ElementNode(), 'id'), 100),
-            array(new HashNode(new ElementNode(null, 'id'), 'class'), 101),
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Node/NegationNodeTest.php b/vendor/symfony/css-selector/Tests/Node/NegationNodeTest.php
deleted file mode 100644
index ed4d2482c3..0000000000
--- a/vendor/symfony/css-selector/Tests/Node/NegationNodeTest.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Node;
-
-use Symfony\Component\CssSelector\Node\ClassNode;
-use Symfony\Component\CssSelector\Node\ElementNode;
-use Symfony\Component\CssSelector\Node\NegationNode;
-
-class NegationNodeTest extends AbstractNodeTest
-{
-    public function getToStringConversionTestData()
-    {
-        return array(
-            array(new NegationNode(new ElementNode(), new ClassNode(new ElementNode(), 'class')), 'Negation[Element[*]:not(Class[Element[*].class])]'),
-        );
-    }
-
-    public function getSpecificityValueTestData()
-    {
-        return array(
-            array(new NegationNode(new ElementNode(), new ClassNode(new ElementNode(), 'class')), 10),
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Node/PseudoNodeTest.php b/vendor/symfony/css-selector/Tests/Node/PseudoNodeTest.php
deleted file mode 100644
index bc57813cc8..0000000000
--- a/vendor/symfony/css-selector/Tests/Node/PseudoNodeTest.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Node;
-
-use Symfony\Component\CssSelector\Node\ElementNode;
-use Symfony\Component\CssSelector\Node\PseudoNode;
-
-class PseudoNodeTest extends AbstractNodeTest
-{
-    public function getToStringConversionTestData()
-    {
-        return array(
-            array(new PseudoNode(new ElementNode(), 'pseudo'), 'Pseudo[Element[*]:pseudo]'),
-        );
-    }
-
-    public function getSpecificityValueTestData()
-    {
-        return array(
-            array(new PseudoNode(new ElementNode(), 'pseudo'), 10),
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Node/SelectorNodeTest.php b/vendor/symfony/css-selector/Tests/Node/SelectorNodeTest.php
deleted file mode 100644
index 5badf71d16..0000000000
--- a/vendor/symfony/css-selector/Tests/Node/SelectorNodeTest.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Node;
-
-use Symfony\Component\CssSelector\Node\ElementNode;
-use Symfony\Component\CssSelector\Node\SelectorNode;
-
-class SelectorNodeTest extends AbstractNodeTest
-{
-    public function getToStringConversionTestData()
-    {
-        return array(
-            array(new SelectorNode(new ElementNode()), 'Selector[Element[*]]'),
-            array(new SelectorNode(new ElementNode(), 'pseudo'), 'Selector[Element[*]::pseudo]'),
-        );
-    }
-
-    public function getSpecificityValueTestData()
-    {
-        return array(
-            array(new SelectorNode(new ElementNode()), 0),
-            array(new SelectorNode(new ElementNode(), 'pseudo'), 1),
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Node/SpecificityTest.php b/vendor/symfony/css-selector/Tests/Node/SpecificityTest.php
deleted file mode 100644
index b58eb8929c..0000000000
--- a/vendor/symfony/css-selector/Tests/Node/SpecificityTest.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Node;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\CssSelector\Node\Specificity;
-
-class SpecificityTest extends TestCase
-{
-    /** @dataProvider getValueTestData */
-    public function testValue(Specificity $specificity, $value)
-    {
-        $this->assertEquals($value, $specificity->getValue());
-    }
-
-    /** @dataProvider getValueTestData */
-    public function testPlusValue(Specificity $specificity, $value)
-    {
-        $this->assertEquals($value + 123, $specificity->plus(new Specificity(1, 2, 3))->getValue());
-    }
-
-    public function getValueTestData()
-    {
-        return array(
-            array(new Specificity(0, 0, 0), 0),
-            array(new Specificity(0, 0, 2), 2),
-            array(new Specificity(0, 3, 0), 30),
-            array(new Specificity(4, 0, 0), 400),
-            array(new Specificity(4, 3, 2), 432),
-        );
-    }
-
-    /** @dataProvider getCompareTestData */
-    public function testCompareTo(Specificity $a, Specificity $b, $result)
-    {
-        $this->assertEquals($result, $a->compareTo($b));
-    }
-
-    public function getCompareTestData()
-    {
-        return array(
-            array(new Specificity(0, 0, 0), new Specificity(0, 0, 0), 0),
-            array(new Specificity(0, 0, 1), new Specificity(0, 0, 1), 0),
-            array(new Specificity(0, 0, 2), new Specificity(0, 0, 1), 1),
-            array(new Specificity(0, 0, 2), new Specificity(0, 0, 3), -1),
-            array(new Specificity(0, 4, 0), new Specificity(0, 4, 0), 0),
-            array(new Specificity(0, 6, 0), new Specificity(0, 5, 11), 1),
-            array(new Specificity(0, 7, 0), new Specificity(0, 8, 0), -1),
-            array(new Specificity(9, 0, 0), new Specificity(9, 0, 0), 0),
-            array(new Specificity(11, 0, 0), new Specificity(10, 11, 0), 1),
-            array(new Specificity(12, 11, 0), new Specificity(13, 0, 0), -1),
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Parser/Handler/AbstractHandlerTest.php b/vendor/symfony/css-selector/Tests/Parser/Handler/AbstractHandlerTest.php
deleted file mode 100644
index f5c9dc8bfe..0000000000
--- a/vendor/symfony/css-selector/Tests/Parser/Handler/AbstractHandlerTest.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Parser\Handler;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\CssSelector\Parser\Reader;
-use Symfony\Component\CssSelector\Parser\Token;
-use Symfony\Component\CssSelector\Parser\TokenStream;
-
-/**
- * @author Jean-François Simon <contact@jfsimon.fr>
- */
-abstract class AbstractHandlerTest extends TestCase
-{
-    /** @dataProvider getHandleValueTestData */
-    public function testHandleValue($value, Token $expectedToken, $remainingContent)
-    {
-        $reader = new Reader($value);
-        $stream = new TokenStream();
-
-        $this->assertTrue($this->generateHandler()->handle($reader, $stream));
-        $this->assertEquals($expectedToken, $stream->getNext());
-        $this->assertRemainingContent($reader, $remainingContent);
-    }
-
-    /** @dataProvider getDontHandleValueTestData */
-    public function testDontHandleValue($value)
-    {
-        $reader = new Reader($value);
-        $stream = new TokenStream();
-
-        $this->assertFalse($this->generateHandler()->handle($reader, $stream));
-        $this->assertStreamEmpty($stream);
-        $this->assertRemainingContent($reader, $value);
-    }
-
-    abstract public function getHandleValueTestData();
-
-    abstract public function getDontHandleValueTestData();
-
-    abstract protected function generateHandler();
-
-    protected function assertStreamEmpty(TokenStream $stream)
-    {
-        $property = new \ReflectionProperty($stream, 'tokens');
-        $property->setAccessible(true);
-
-        $this->assertEquals(array(), $property->getValue($stream));
-    }
-
-    protected function assertRemainingContent(Reader $reader, $remainingContent)
-    {
-        if ('' === $remainingContent) {
-            $this->assertEquals(0, $reader->getRemainingLength());
-            $this->assertTrue($reader->isEOF());
-        } else {
-            $this->assertEquals(\strlen($remainingContent), $reader->getRemainingLength());
-            $this->assertEquals(0, $reader->getOffset($remainingContent));
-        }
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Parser/Handler/CommentHandlerTest.php b/vendor/symfony/css-selector/Tests/Parser/Handler/CommentHandlerTest.php
deleted file mode 100644
index 3961bf7d55..0000000000
--- a/vendor/symfony/css-selector/Tests/Parser/Handler/CommentHandlerTest.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Parser\Handler;
-
-use Symfony\Component\CssSelector\Parser\Handler\CommentHandler;
-use Symfony\Component\CssSelector\Parser\Reader;
-use Symfony\Component\CssSelector\Parser\Token;
-use Symfony\Component\CssSelector\Parser\TokenStream;
-
-class CommentHandlerTest extends AbstractHandlerTest
-{
-    /** @dataProvider getHandleValueTestData */
-    public function testHandleValue($value, Token $unusedArgument, $remainingContent)
-    {
-        $reader = new Reader($value);
-        $stream = new TokenStream();
-
-        $this->assertTrue($this->generateHandler()->handle($reader, $stream));
-        // comments are ignored (not pushed as token in stream)
-        $this->assertStreamEmpty($stream);
-        $this->assertRemainingContent($reader, $remainingContent);
-    }
-
-    public function getHandleValueTestData()
-    {
-        return array(
-            // 2nd argument only exists for inherited method compatibility
-            array('/* comment */', new Token(null, null, null), ''),
-            array('/* comment */foo', new Token(null, null, null), 'foo'),
-        );
-    }
-
-    public function getDontHandleValueTestData()
-    {
-        return array(
-            array('>'),
-            array('+'),
-            array(' '),
-        );
-    }
-
-    protected function generateHandler()
-    {
-        return new CommentHandler();
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Parser/Handler/HashHandlerTest.php b/vendor/symfony/css-selector/Tests/Parser/Handler/HashHandlerTest.php
deleted file mode 100644
index 5730120bf7..0000000000
--- a/vendor/symfony/css-selector/Tests/Parser/Handler/HashHandlerTest.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Parser\Handler;
-
-use Symfony\Component\CssSelector\Parser\Handler\HashHandler;
-use Symfony\Component\CssSelector\Parser\Token;
-use Symfony\Component\CssSelector\Parser\Tokenizer\TokenizerEscaping;
-use Symfony\Component\CssSelector\Parser\Tokenizer\TokenizerPatterns;
-
-class HashHandlerTest extends AbstractHandlerTest
-{
-    public function getHandleValueTestData()
-    {
-        return array(
-            array('#id', new Token(Token::TYPE_HASH, 'id', 0), ''),
-            array('#123', new Token(Token::TYPE_HASH, '123', 0), ''),
-
-            array('#id.class', new Token(Token::TYPE_HASH, 'id', 0), '.class'),
-            array('#id element', new Token(Token::TYPE_HASH, 'id', 0), ' element'),
-        );
-    }
-
-    public function getDontHandleValueTestData()
-    {
-        return array(
-            array('id'),
-            array('123'),
-            array('<'),
-            array('<'),
-            array('#'),
-        );
-    }
-
-    protected function generateHandler()
-    {
-        $patterns = new TokenizerPatterns();
-
-        return new HashHandler($patterns, new TokenizerEscaping($patterns));
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Parser/Handler/IdentifierHandlerTest.php b/vendor/symfony/css-selector/Tests/Parser/Handler/IdentifierHandlerTest.php
deleted file mode 100644
index f56430c7e8..0000000000
--- a/vendor/symfony/css-selector/Tests/Parser/Handler/IdentifierHandlerTest.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Parser\Handler;
-
-use Symfony\Component\CssSelector\Parser\Handler\IdentifierHandler;
-use Symfony\Component\CssSelector\Parser\Token;
-use Symfony\Component\CssSelector\Parser\Tokenizer\TokenizerEscaping;
-use Symfony\Component\CssSelector\Parser\Tokenizer\TokenizerPatterns;
-
-class IdentifierHandlerTest extends AbstractHandlerTest
-{
-    public function getHandleValueTestData()
-    {
-        return array(
-            array('foo', new Token(Token::TYPE_IDENTIFIER, 'foo', 0), ''),
-            array('foo|bar', new Token(Token::TYPE_IDENTIFIER, 'foo', 0), '|bar'),
-            array('foo.class', new Token(Token::TYPE_IDENTIFIER, 'foo', 0), '.class'),
-            array('foo[attr]', new Token(Token::TYPE_IDENTIFIER, 'foo', 0), '[attr]'),
-            array('foo bar', new Token(Token::TYPE_IDENTIFIER, 'foo', 0), ' bar'),
-        );
-    }
-
-    public function getDontHandleValueTestData()
-    {
-        return array(
-            array('>'),
-            array('+'),
-            array(' '),
-            array('*|foo'),
-            array('/* comment */'),
-        );
-    }
-
-    protected function generateHandler()
-    {
-        $patterns = new TokenizerPatterns();
-
-        return new IdentifierHandler($patterns, new TokenizerEscaping($patterns));
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Parser/Handler/NumberHandlerTest.php b/vendor/symfony/css-selector/Tests/Parser/Handler/NumberHandlerTest.php
deleted file mode 100644
index 675fd05b43..0000000000
--- a/vendor/symfony/css-selector/Tests/Parser/Handler/NumberHandlerTest.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Parser\Handler;
-
-use Symfony\Component\CssSelector\Parser\Handler\NumberHandler;
-use Symfony\Component\CssSelector\Parser\Token;
-use Symfony\Component\CssSelector\Parser\Tokenizer\TokenizerPatterns;
-
-class NumberHandlerTest extends AbstractHandlerTest
-{
-    public function getHandleValueTestData()
-    {
-        return array(
-            array('12', new Token(Token::TYPE_NUMBER, '12', 0), ''),
-            array('12.34', new Token(Token::TYPE_NUMBER, '12.34', 0), ''),
-            array('+12.34', new Token(Token::TYPE_NUMBER, '+12.34', 0), ''),
-            array('-12.34', new Token(Token::TYPE_NUMBER, '-12.34', 0), ''),
-
-            array('12 arg', new Token(Token::TYPE_NUMBER, '12', 0), ' arg'),
-            array('12]', new Token(Token::TYPE_NUMBER, '12', 0), ']'),
-        );
-    }
-
-    public function getDontHandleValueTestData()
-    {
-        return array(
-            array('hello'),
-            array('>'),
-            array('+'),
-            array(' '),
-            array('/* comment */'),
-        );
-    }
-
-    protected function generateHandler()
-    {
-        $patterns = new TokenizerPatterns();
-
-        return new NumberHandler($patterns);
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Parser/Handler/StringHandlerTest.php b/vendor/symfony/css-selector/Tests/Parser/Handler/StringHandlerTest.php
deleted file mode 100644
index 8ea5d4d587..0000000000
--- a/vendor/symfony/css-selector/Tests/Parser/Handler/StringHandlerTest.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Parser\Handler;
-
-use Symfony\Component\CssSelector\Parser\Handler\StringHandler;
-use Symfony\Component\CssSelector\Parser\Token;
-use Symfony\Component\CssSelector\Parser\Tokenizer\TokenizerEscaping;
-use Symfony\Component\CssSelector\Parser\Tokenizer\TokenizerPatterns;
-
-class StringHandlerTest extends AbstractHandlerTest
-{
-    public function getHandleValueTestData()
-    {
-        return array(
-            array('"hello"', new Token(Token::TYPE_STRING, 'hello', 1), ''),
-            array('"1"', new Token(Token::TYPE_STRING, '1', 1), ''),
-            array('" "', new Token(Token::TYPE_STRING, ' ', 1), ''),
-            array('""', new Token(Token::TYPE_STRING, '', 1), ''),
-            array("'hello'", new Token(Token::TYPE_STRING, 'hello', 1), ''),
-
-            array("'foo'bar", new Token(Token::TYPE_STRING, 'foo', 1), 'bar'),
-        );
-    }
-
-    public function getDontHandleValueTestData()
-    {
-        return array(
-            array('hello'),
-            array('>'),
-            array('1'),
-            array(' '),
-        );
-    }
-
-    protected function generateHandler()
-    {
-        $patterns = new TokenizerPatterns();
-
-        return new StringHandler($patterns, new TokenizerEscaping($patterns));
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Parser/Handler/WhitespaceHandlerTest.php b/vendor/symfony/css-selector/Tests/Parser/Handler/WhitespaceHandlerTest.php
deleted file mode 100644
index f5f9e71dc2..0000000000
--- a/vendor/symfony/css-selector/Tests/Parser/Handler/WhitespaceHandlerTest.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Parser\Handler;
-
-use Symfony\Component\CssSelector\Parser\Handler\WhitespaceHandler;
-use Symfony\Component\CssSelector\Parser\Token;
-
-class WhitespaceHandlerTest extends AbstractHandlerTest
-{
-    public function getHandleValueTestData()
-    {
-        return array(
-            array(' ', new Token(Token::TYPE_WHITESPACE, ' ', 0), ''),
-            array("\n", new Token(Token::TYPE_WHITESPACE, "\n", 0), ''),
-            array("\t", new Token(Token::TYPE_WHITESPACE, "\t", 0), ''),
-
-            array(' foo', new Token(Token::TYPE_WHITESPACE, ' ', 0), 'foo'),
-            array(' .foo', new Token(Token::TYPE_WHITESPACE, ' ', 0), '.foo'),
-        );
-    }
-
-    public function getDontHandleValueTestData()
-    {
-        return array(
-            array('>'),
-            array('1'),
-            array('a'),
-        );
-    }
-
-    protected function generateHandler()
-    {
-        return new WhitespaceHandler();
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Parser/ParserTest.php b/vendor/symfony/css-selector/Tests/Parser/ParserTest.php
deleted file mode 100644
index 53b35a9547..0000000000
--- a/vendor/symfony/css-selector/Tests/Parser/ParserTest.php
+++ /dev/null
@@ -1,250 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Parser;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\CssSelector\Exception\SyntaxErrorException;
-use Symfony\Component\CssSelector\Node\FunctionNode;
-use Symfony\Component\CssSelector\Node\SelectorNode;
-use Symfony\Component\CssSelector\Parser\Parser;
-use Symfony\Component\CssSelector\Parser\Token;
-
-class ParserTest extends TestCase
-{
-    /** @dataProvider getParserTestData */
-    public function testParser($source, $representation)
-    {
-        $parser = new Parser();
-
-        $this->assertEquals($representation, array_map(function (SelectorNode $node) {
-            return (string) $node->getTree();
-        }, $parser->parse($source)));
-    }
-
-    /** @dataProvider getParserExceptionTestData */
-    public function testParserException($source, $message)
-    {
-        $parser = new Parser();
-
-        try {
-            $parser->parse($source);
-            $this->fail('Parser should throw a SyntaxErrorException.');
-        } catch (SyntaxErrorException $e) {
-            $this->assertEquals($message, $e->getMessage());
-        }
-    }
-
-    /** @dataProvider getPseudoElementsTestData */
-    public function testPseudoElements($source, $element, $pseudo)
-    {
-        $parser = new Parser();
-        $selectors = $parser->parse($source);
-        $this->assertCount(1, $selectors);
-
-        /** @var SelectorNode $selector */
-        $selector = $selectors[0];
-        $this->assertEquals($element, (string) $selector->getTree());
-        $this->assertEquals($pseudo, (string) $selector->getPseudoElement());
-    }
-
-    /** @dataProvider getSpecificityTestData */
-    public function testSpecificity($source, $value)
-    {
-        $parser = new Parser();
-        $selectors = $parser->parse($source);
-        $this->assertCount(1, $selectors);
-
-        /** @var SelectorNode $selector */
-        $selector = $selectors[0];
-        $this->assertEquals($value, $selector->getSpecificity()->getValue());
-    }
-
-    /** @dataProvider getParseSeriesTestData */
-    public function testParseSeries($series, $a, $b)
-    {
-        $parser = new Parser();
-        $selectors = $parser->parse(sprintf(':nth-child(%s)', $series));
-        $this->assertCount(1, $selectors);
-
-        /** @var FunctionNode $function */
-        $function = $selectors[0]->getTree();
-        $this->assertEquals(array($a, $b), Parser::parseSeries($function->getArguments()));
-    }
-
-    /** @dataProvider getParseSeriesExceptionTestData */
-    public function testParseSeriesException($series)
-    {
-        $parser = new Parser();
-        $selectors = $parser->parse(sprintf(':nth-child(%s)', $series));
-        $this->assertCount(1, $selectors);
-
-        /** @var FunctionNode $function */
-        $function = $selectors[0]->getTree();
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\CssSelector\Exception\SyntaxErrorException');
-        Parser::parseSeries($function->getArguments());
-    }
-
-    public function getParserTestData()
-    {
-        return array(
-            array('*', array('Element[*]')),
-            array('*|*', array('Element[*]')),
-            array('*|foo', array('Element[foo]')),
-            array('foo|*', array('Element[foo|*]')),
-            array('foo|bar', array('Element[foo|bar]')),
-            array('#foo#bar', array('Hash[Hash[Element[*]#foo]#bar]')),
-            array('div>.foo', array('CombinedSelector[Element[div] > Class[Element[*].foo]]')),
-            array('div> .foo', array('CombinedSelector[Element[div] > Class[Element[*].foo]]')),
-            array('div >.foo', array('CombinedSelector[Element[div] > Class[Element[*].foo]]')),
-            array('div > .foo', array('CombinedSelector[Element[div] > Class[Element[*].foo]]')),
-            array("div \n>  \t \t .foo", array('CombinedSelector[Element[div] > Class[Element[*].foo]]')),
-            array('td.foo,.bar', array('Class[Element[td].foo]', 'Class[Element[*].bar]')),
-            array('td.foo, .bar', array('Class[Element[td].foo]', 'Class[Element[*].bar]')),
-            array("td.foo\t\r\n\f ,\t\r\n\f .bar", array('Class[Element[td].foo]', 'Class[Element[*].bar]')),
-            array('td.foo,.bar', array('Class[Element[td].foo]', 'Class[Element[*].bar]')),
-            array('td.foo, .bar', array('Class[Element[td].foo]', 'Class[Element[*].bar]')),
-            array("td.foo\t\r\n\f ,\t\r\n\f .bar", array('Class[Element[td].foo]', 'Class[Element[*].bar]')),
-            array('div, td.foo, div.bar span', array('Element[div]', 'Class[Element[td].foo]', 'CombinedSelector[Class[Element[div].bar] <followed> Element[span]]')),
-            array('div > p', array('CombinedSelector[Element[div] > Element[p]]')),
-            array('td:first', array('Pseudo[Element[td]:first]')),
-            array('td :first', array('CombinedSelector[Element[td] <followed> Pseudo[Element[*]:first]]')),
-            array('a[name]', array('Attribute[Element[a][name]]')),
-            array("a[ name\t]", array('Attribute[Element[a][name]]')),
-            array('a [name]', array('CombinedSelector[Element[a] <followed> Attribute[Element[*][name]]]')),
-            array('a[rel="include"]', array("Attribute[Element[a][rel = 'include']]")),
-            array('a[rel = include]', array("Attribute[Element[a][rel = 'include']]")),
-            array("a[hreflang |= 'en']", array("Attribute[Element[a][hreflang |= 'en']]")),
-            array('a[hreflang|=en]', array("Attribute[Element[a][hreflang |= 'en']]")),
-            array('div:nth-child(10)', array("Function[Element[div]:nth-child(['10'])]")),
-            array(':nth-child(2n+2)', array("Function[Element[*]:nth-child(['2', 'n', '+2'])]")),
-            array('div:nth-of-type(10)', array("Function[Element[div]:nth-of-type(['10'])]")),
-            array('div div:nth-of-type(10) .aclass', array("CombinedSelector[CombinedSelector[Element[div] <followed> Function[Element[div]:nth-of-type(['10'])]] <followed> Class[Element[*].aclass]]")),
-            array('label:only', array('Pseudo[Element[label]:only]')),
-            array('a:lang(fr)', array("Function[Element[a]:lang(['fr'])]")),
-            array('div:contains("foo")', array("Function[Element[div]:contains(['foo'])]")),
-            array('div#foobar', array('Hash[Element[div]#foobar]')),
-            array('div:not(div.foo)', array('Negation[Element[div]:not(Class[Element[div].foo])]')),
-            array('td ~ th', array('CombinedSelector[Element[td] ~ Element[th]]')),
-            array('.foo[data-bar][data-baz=0]', array("Attribute[Attribute[Class[Element[*].foo][data-bar]][data-baz = '0']]")),
-        );
-    }
-
-    public function getParserExceptionTestData()
-    {
-        return array(
-            array('attributes(href)/html/body/a', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_DELIMITER, '(', 10))->getMessage()),
-            array('attributes(href)', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_DELIMITER, '(', 10))->getMessage()),
-            array('html/body/a', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_DELIMITER, '/', 4))->getMessage()),
-            array(' ', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_FILE_END, '', 1))->getMessage()),
-            array('div, ', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_FILE_END, '', 5))->getMessage()),
-            array(' , div', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_DELIMITER, ',', 1))->getMessage()),
-            array('p, , div', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_DELIMITER, ',', 3))->getMessage()),
-            array('div > ', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_FILE_END, '', 6))->getMessage()),
-            array('  > div', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_DELIMITER, '>', 2))->getMessage()),
-            array('foo|#bar', SyntaxErrorException::unexpectedToken('identifier or "*"', new Token(Token::TYPE_HASH, 'bar', 4))->getMessage()),
-            array('#.foo', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_DELIMITER, '#', 0))->getMessage()),
-            array('.#foo', SyntaxErrorException::unexpectedToken('identifier', new Token(Token::TYPE_HASH, 'foo', 1))->getMessage()),
-            array(':#foo', SyntaxErrorException::unexpectedToken('identifier', new Token(Token::TYPE_HASH, 'foo', 1))->getMessage()),
-            array('[*]', SyntaxErrorException::unexpectedToken('"|"', new Token(Token::TYPE_DELIMITER, ']', 2))->getMessage()),
-            array('[foo|]', SyntaxErrorException::unexpectedToken('identifier', new Token(Token::TYPE_DELIMITER, ']', 5))->getMessage()),
-            array('[#]', SyntaxErrorException::unexpectedToken('identifier or "*"', new Token(Token::TYPE_DELIMITER, '#', 1))->getMessage()),
-            array('[foo=#]', SyntaxErrorException::unexpectedToken('string or identifier', new Token(Token::TYPE_DELIMITER, '#', 5))->getMessage()),
-            array(':nth-child()', SyntaxErrorException::unexpectedToken('at least one argument', new Token(Token::TYPE_DELIMITER, ')', 11))->getMessage()),
-            array('[href]a', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_IDENTIFIER, 'a', 6))->getMessage()),
-            array('[rel:stylesheet]', SyntaxErrorException::unexpectedToken('operator', new Token(Token::TYPE_DELIMITER, ':', 4))->getMessage()),
-            array('[rel=stylesheet', SyntaxErrorException::unexpectedToken('"]"', new Token(Token::TYPE_FILE_END, '', 15))->getMessage()),
-            array(':lang(fr', SyntaxErrorException::unexpectedToken('an argument', new Token(Token::TYPE_FILE_END, '', 8))->getMessage()),
-            array(':contains("foo', SyntaxErrorException::unclosedString(10)->getMessage()),
-            array('foo!', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_DELIMITER, '!', 3))->getMessage()),
-        );
-    }
-
-    public function getPseudoElementsTestData()
-    {
-        return array(
-            array('foo', 'Element[foo]', ''),
-            array('*', 'Element[*]', ''),
-            array(':empty', 'Pseudo[Element[*]:empty]', ''),
-            array(':BEfore', 'Element[*]', 'before'),
-            array(':aftER', 'Element[*]', 'after'),
-            array(':First-Line', 'Element[*]', 'first-line'),
-            array(':First-Letter', 'Element[*]', 'first-letter'),
-            array('::befoRE', 'Element[*]', 'before'),
-            array('::AFter', 'Element[*]', 'after'),
-            array('::firsT-linE', 'Element[*]', 'first-line'),
-            array('::firsT-letteR', 'Element[*]', 'first-letter'),
-            array('::Selection', 'Element[*]', 'selection'),
-            array('foo:after', 'Element[foo]', 'after'),
-            array('foo::selection', 'Element[foo]', 'selection'),
-            array('lorem#ipsum ~ a#b.c[href]:empty::selection', 'CombinedSelector[Hash[Element[lorem]#ipsum] ~ Pseudo[Attribute[Class[Hash[Element[a]#b].c][href]]:empty]]', 'selection'),
-            array('video::-webkit-media-controls', 'Element[video]', '-webkit-media-controls'),
-        );
-    }
-
-    public function getSpecificityTestData()
-    {
-        return array(
-            array('*', 0),
-            array(' foo', 1),
-            array(':empty ', 10),
-            array(':before', 1),
-            array('*:before', 1),
-            array(':nth-child(2)', 10),
-            array('.bar', 10),
-            array('[baz]', 10),
-            array('[baz="4"]', 10),
-            array('[baz^="4"]', 10),
-            array('#lipsum', 100),
-            array(':not(*)', 0),
-            array(':not(foo)', 1),
-            array(':not(.foo)', 10),
-            array(':not([foo])', 10),
-            array(':not(:empty)', 10),
-            array(':not(#foo)', 100),
-            array('foo:empty', 11),
-            array('foo:before', 2),
-            array('foo::before', 2),
-            array('foo:empty::before', 12),
-            array('#lorem + foo#ipsum:first-child > bar:first-line', 213),
-        );
-    }
-
-    public function getParseSeriesTestData()
-    {
-        return array(
-            array('1n+3', 1, 3),
-            array('1n +3', 1, 3),
-            array('1n + 3', 1, 3),
-            array('1n+ 3', 1, 3),
-            array('1n-3', 1, -3),
-            array('1n -3', 1, -3),
-            array('1n - 3', 1, -3),
-            array('1n- 3', 1, -3),
-            array('n-5', 1, -5),
-            array('odd', 2, 1),
-            array('even', 2, 0),
-            array('3n', 3, 0),
-            array('n', 1, 0),
-            array('+n', 1, 0),
-            array('-n', -1, 0),
-            array('5', 0, 5),
-        );
-    }
-
-    public function getParseSeriesExceptionTestData()
-    {
-        return array(
-            array('foo'),
-            array('n+'),
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Parser/ReaderTest.php b/vendor/symfony/css-selector/Tests/Parser/ReaderTest.php
deleted file mode 100644
index 21eb608462..0000000000
--- a/vendor/symfony/css-selector/Tests/Parser/ReaderTest.php
+++ /dev/null
@@ -1,102 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Parser;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\CssSelector\Parser\Reader;
-
-class ReaderTest extends TestCase
-{
-    public function testIsEOF()
-    {
-        $reader = new Reader('');
-        $this->assertTrue($reader->isEOF());
-
-        $reader = new Reader('hello');
-        $this->assertFalse($reader->isEOF());
-
-        $this->assignPosition($reader, 2);
-        $this->assertFalse($reader->isEOF());
-
-        $this->assignPosition($reader, 5);
-        $this->assertTrue($reader->isEOF());
-    }
-
-    public function testGetRemainingLength()
-    {
-        $reader = new Reader('hello');
-        $this->assertEquals(5, $reader->getRemainingLength());
-
-        $this->assignPosition($reader, 2);
-        $this->assertEquals(3, $reader->getRemainingLength());
-
-        $this->assignPosition($reader, 5);
-        $this->assertEquals(0, $reader->getRemainingLength());
-    }
-
-    public function testGetSubstring()
-    {
-        $reader = new Reader('hello');
-        $this->assertEquals('he', $reader->getSubstring(2));
-        $this->assertEquals('el', $reader->getSubstring(2, 1));
-
-        $this->assignPosition($reader, 2);
-        $this->assertEquals('ll', $reader->getSubstring(2));
-        $this->assertEquals('lo', $reader->getSubstring(2, 1));
-    }
-
-    public function testGetOffset()
-    {
-        $reader = new Reader('hello');
-        $this->assertEquals(2, $reader->getOffset('ll'));
-        $this->assertFalse($reader->getOffset('w'));
-
-        $this->assignPosition($reader, 2);
-        $this->assertEquals(0, $reader->getOffset('ll'));
-        $this->assertFalse($reader->getOffset('he'));
-    }
-
-    public function testFindPattern()
-    {
-        $reader = new Reader('hello');
-
-        $this->assertFalse($reader->findPattern('/world/'));
-        $this->assertEquals(array('hello', 'h'), $reader->findPattern('/^([a-z]).*/'));
-
-        $this->assignPosition($reader, 2);
-        $this->assertFalse($reader->findPattern('/^h.*/'));
-        $this->assertEquals(array('llo'), $reader->findPattern('/^llo$/'));
-    }
-
-    public function testMoveForward()
-    {
-        $reader = new Reader('hello');
-        $this->assertEquals(0, $reader->getPosition());
-
-        $reader->moveForward(2);
-        $this->assertEquals(2, $reader->getPosition());
-    }
-
-    public function testToEnd()
-    {
-        $reader = new Reader('hello');
-        $reader->moveToEnd();
-        $this->assertTrue($reader->isEOF());
-    }
-
-    private function assignPosition(Reader $reader, $value)
-    {
-        $position = new \ReflectionProperty($reader, 'position');
-        $position->setAccessible(true);
-        $position->setValue($reader, $value);
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Parser/Shortcut/ClassParserTest.php b/vendor/symfony/css-selector/Tests/Parser/Shortcut/ClassParserTest.php
deleted file mode 100644
index 7e92f5baee..0000000000
--- a/vendor/symfony/css-selector/Tests/Parser/Shortcut/ClassParserTest.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Parser\Shortcut;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\CssSelector\Node\SelectorNode;
-use Symfony\Component\CssSelector\Parser\Shortcut\ClassParser;
-
-/**
- * @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
- */
-class ClassParserTest extends TestCase
-{
-    /** @dataProvider getParseTestData */
-    public function testParse($source, $representation)
-    {
-        $parser = new ClassParser();
-        $selectors = $parser->parse($source);
-        $this->assertCount(1, $selectors);
-
-        /** @var SelectorNode $selector */
-        $selector = $selectors[0];
-        $this->assertEquals($representation, (string) $selector->getTree());
-    }
-
-    public function getParseTestData()
-    {
-        return array(
-            array('.testclass', 'Class[Element[*].testclass]'),
-            array('testel.testclass', 'Class[Element[testel].testclass]'),
-            array('testns|.testclass', 'Class[Element[testns|*].testclass]'),
-            array('testns|*.testclass', 'Class[Element[testns|*].testclass]'),
-            array('testns|testel.testclass', 'Class[Element[testns|testel].testclass]'),
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Parser/Shortcut/ElementParserTest.php b/vendor/symfony/css-selector/Tests/Parser/Shortcut/ElementParserTest.php
deleted file mode 100644
index 05a730fde1..0000000000
--- a/vendor/symfony/css-selector/Tests/Parser/Shortcut/ElementParserTest.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Parser\Shortcut;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\CssSelector\Node\SelectorNode;
-use Symfony\Component\CssSelector\Parser\Shortcut\ElementParser;
-
-/**
- * @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
- */
-class ElementParserTest extends TestCase
-{
-    /** @dataProvider getParseTestData */
-    public function testParse($source, $representation)
-    {
-        $parser = new ElementParser();
-        $selectors = $parser->parse($source);
-        $this->assertCount(1, $selectors);
-
-        /** @var SelectorNode $selector */
-        $selector = $selectors[0];
-        $this->assertEquals($representation, (string) $selector->getTree());
-    }
-
-    public function getParseTestData()
-    {
-        return array(
-            array('*', 'Element[*]'),
-            array('testel', 'Element[testel]'),
-            array('testns|*', 'Element[testns|*]'),
-            array('testns|testel', 'Element[testns|testel]'),
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Parser/Shortcut/EmptyStringParserTest.php b/vendor/symfony/css-selector/Tests/Parser/Shortcut/EmptyStringParserTest.php
deleted file mode 100644
index 1cf742cf20..0000000000
--- a/vendor/symfony/css-selector/Tests/Parser/Shortcut/EmptyStringParserTest.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Parser\Shortcut;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\CssSelector\Node\SelectorNode;
-use Symfony\Component\CssSelector\Parser\Shortcut\EmptyStringParser;
-
-/**
- * @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
- */
-class EmptyStringParserTest extends TestCase
-{
-    public function testParse()
-    {
-        $parser = new EmptyStringParser();
-        $selectors = $parser->parse('');
-        $this->assertCount(1, $selectors);
-
-        /** @var SelectorNode $selector */
-        $selector = $selectors[0];
-        $this->assertEquals('Element[*]', (string) $selector->getTree());
-
-        $selectors = $parser->parse('this will produce an empty array');
-        $this->assertCount(0, $selectors);
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Parser/Shortcut/HashParserTest.php b/vendor/symfony/css-selector/Tests/Parser/Shortcut/HashParserTest.php
deleted file mode 100644
index 82f555d9ab..0000000000
--- a/vendor/symfony/css-selector/Tests/Parser/Shortcut/HashParserTest.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Parser\Shortcut;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\CssSelector\Node\SelectorNode;
-use Symfony\Component\CssSelector\Parser\Shortcut\HashParser;
-
-/**
- * @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
- */
-class HashParserTest extends TestCase
-{
-    /** @dataProvider getParseTestData */
-    public function testParse($source, $representation)
-    {
-        $parser = new HashParser();
-        $selectors = $parser->parse($source);
-        $this->assertCount(1, $selectors);
-
-        /** @var SelectorNode $selector */
-        $selector = $selectors[0];
-        $this->assertEquals($representation, (string) $selector->getTree());
-    }
-
-    public function getParseTestData()
-    {
-        return array(
-            array('#testid', 'Hash[Element[*]#testid]'),
-            array('testel#testid', 'Hash[Element[testel]#testid]'),
-            array('testns|#testid', 'Hash[Element[testns|*]#testid]'),
-            array('testns|*#testid', 'Hash[Element[testns|*]#testid]'),
-            array('testns|testel#testid', 'Hash[Element[testns|testel]#testid]'),
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Parser/TokenStreamTest.php b/vendor/symfony/css-selector/Tests/Parser/TokenStreamTest.php
deleted file mode 100644
index 44c751ac86..0000000000
--- a/vendor/symfony/css-selector/Tests/Parser/TokenStreamTest.php
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Parser;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\CssSelector\Parser\Token;
-use Symfony\Component\CssSelector\Parser\TokenStream;
-
-class TokenStreamTest extends TestCase
-{
-    public function testGetNext()
-    {
-        $stream = new TokenStream();
-        $stream->push($t1 = new Token(Token::TYPE_IDENTIFIER, 'h1', 0));
-        $stream->push($t2 = new Token(Token::TYPE_DELIMITER, '.', 2));
-        $stream->push($t3 = new Token(Token::TYPE_IDENTIFIER, 'title', 3));
-
-        $this->assertSame($t1, $stream->getNext());
-        $this->assertSame($t2, $stream->getNext());
-        $this->assertSame($t3, $stream->getNext());
-    }
-
-    public function testGetPeek()
-    {
-        $stream = new TokenStream();
-        $stream->push($t1 = new Token(Token::TYPE_IDENTIFIER, 'h1', 0));
-        $stream->push($t2 = new Token(Token::TYPE_DELIMITER, '.', 2));
-        $stream->push($t3 = new Token(Token::TYPE_IDENTIFIER, 'title', 3));
-
-        $this->assertSame($t1, $stream->getPeek());
-        $this->assertSame($t1, $stream->getNext());
-        $this->assertSame($t2, $stream->getPeek());
-        $this->assertSame($t2, $stream->getPeek());
-        $this->assertSame($t2, $stream->getNext());
-    }
-
-    public function testGetNextIdentifier()
-    {
-        $stream = new TokenStream();
-        $stream->push(new Token(Token::TYPE_IDENTIFIER, 'h1', 0));
-
-        $this->assertEquals('h1', $stream->getNextIdentifier());
-    }
-
-    public function testFailToGetNextIdentifier()
-    {
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\CssSelector\Exception\SyntaxErrorException');
-
-        $stream = new TokenStream();
-        $stream->push(new Token(Token::TYPE_DELIMITER, '.', 2));
-        $stream->getNextIdentifier();
-    }
-
-    public function testGetNextIdentifierOrStar()
-    {
-        $stream = new TokenStream();
-
-        $stream->push(new Token(Token::TYPE_IDENTIFIER, 'h1', 0));
-        $this->assertEquals('h1', $stream->getNextIdentifierOrStar());
-
-        $stream->push(new Token(Token::TYPE_DELIMITER, '*', 0));
-        $this->assertNull($stream->getNextIdentifierOrStar());
-    }
-
-    public function testFailToGetNextIdentifierOrStar()
-    {
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\CssSelector\Exception\SyntaxErrorException');
-
-        $stream = new TokenStream();
-        $stream->push(new Token(Token::TYPE_DELIMITER, '.', 2));
-        $stream->getNextIdentifierOrStar();
-    }
-
-    public function testSkipWhitespace()
-    {
-        $stream = new TokenStream();
-        $stream->push($t1 = new Token(Token::TYPE_IDENTIFIER, 'h1', 0));
-        $stream->push($t2 = new Token(Token::TYPE_WHITESPACE, ' ', 2));
-        $stream->push($t3 = new Token(Token::TYPE_IDENTIFIER, 'h1', 3));
-
-        $stream->skipWhitespace();
-        $this->assertSame($t1, $stream->getNext());
-
-        $stream->skipWhitespace();
-        $this->assertSame($t3, $stream->getNext());
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/XPath/Fixtures/ids.html b/vendor/symfony/css-selector/Tests/XPath/Fixtures/ids.html
deleted file mode 100644
index 5799fad25e..0000000000
--- a/vendor/symfony/css-selector/Tests/XPath/Fixtures/ids.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<html id="html"><head>
-  <link id="link-href" href="foo" />
-  <link id="link-nohref" />
-</head><body>
-<div id="outer-div">
- <a id="name-anchor" name="foo"></a>
- <a id="tag-anchor" rel="tag" href="http://localhost/foo">link</a>
- <a id="nofollow-anchor" rel="nofollow" href="https://example.org">
-    link</a>
- <ol id="first-ol" class="a b c">
-   <li id="first-li">content</li>
-   <li id="second-li" lang="En-us">
-     <div id="li-div">
-     </div>
-   </li>
-   <li id="third-li" class="ab c"></li>
-   <li id="fourth-li" class="ab
-c"></li>
-   <li id="fifth-li"></li>
-   <li id="sixth-li"></li>
-   <li id="seventh-li">  </li>
- </ol>
- <p id="paragraph">
-   <b id="p-b">hi</b> <em id="p-em">there</em>
-   <b id="p-b2">guy</b>
-   <input type="checkbox" id="checkbox-unchecked" />
-   <input type="checkbox" id="checkbox-disabled" disabled="" />
-   <input type="text" id="text-checked" checked="checked" />
-   <input type="hidden" />
-   <input type="hidden" disabled="disabled" />
-   <input type="checkbox" id="checkbox-checked" checked="checked" />
-   <input type="checkbox" id="checkbox-disabled-checked"
-          disabled="disabled" checked="checked" />
-   <fieldset id="fieldset" disabled="disabled">
-     <input type="checkbox" id="checkbox-fieldset-disabled" />
-     <input type="hidden" />
-   </fieldset>
- </p>
- <ol id="second-ol">
- </ol>
- <map name="dummymap">
-   <area shape="circle" coords="200,250,25" href="foo.html" id="area-href" />
-   <area shape="default" id="area-nohref" />
- </map>
-</div>
-<div id="foobar-div" foobar="ab bc
-cde"><span id="foobar-span"></span></div>
-</body></html>
diff --git a/vendor/symfony/css-selector/Tests/XPath/Fixtures/lang.xml b/vendor/symfony/css-selector/Tests/XPath/Fixtures/lang.xml
deleted file mode 100644
index 14f8dbed68..0000000000
--- a/vendor/symfony/css-selector/Tests/XPath/Fixtures/lang.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<test>
-  <a id="first" xml:lang="en">a</a>
-  <b id="second" xml:lang="en-US">b</b>
-  <c id="third" xml:lang="en-Nz">c</c>
-  <d id="fourth" xml:lang="En-us">d</d>
-  <e id="fifth" xml:lang="fr">e</e>
-  <f id="sixth" xml:lang="ru">f</f>
-  <g id="seventh" xml:lang="de">
-    <h id="eighth" xml:lang="zh"/>
-  </g>
-</test>
diff --git a/vendor/symfony/css-selector/Tests/XPath/Fixtures/shakespear.html b/vendor/symfony/css-selector/Tests/XPath/Fixtures/shakespear.html
deleted file mode 100644
index 15d1ad33a3..0000000000
--- a/vendor/symfony/css-selector/Tests/XPath/Fixtures/shakespear.html
+++ /dev/null
@@ -1,308 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" debug="true">
-<head>
-	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-</head>
-<body>
-	<div id="test">
-	<div class="dialog">
-	<h2>As You Like It</h2>
-	<div id="playwright">
-	  by William Shakespeare
-	</div>
-	<div class="dialog scene thirdClass" id="scene1">
-	  <h3>ACT I, SCENE III. A room in the palace.</h3>
-	  <div class="dialog">
-	  <div class="direction">Enter CELIA and ROSALIND</div>
-	  </div>
-	  <div id="speech1" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.1">Why, cousin! why, Rosalind! Cupid have mercy! not a word?</div>
-	  </div>
-	  <div id="speech2" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.2">Not one to throw at a dog.</div>
-	  </div>
-	  <div id="speech3" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.3">No, thy words are too precious to be cast away upon</div>
-	  <div id="scene1.3.4">curs; throw some of them at me; come, lame me with reasons.</div>
-	  </div>
-	  <div id="speech4" class="character">ROSALIND</div>
-	  <div id="speech5" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.8">But is all this for your father?</div>
-	  </div>
-	  <div class="dialog">
-	  <div id="scene1.3.5">Then there were two cousins laid up; when the one</div>
-	  <div id="scene1.3.6">should be lamed with reasons and the other mad</div>
-	  <div id="scene1.3.7">without any.</div>
-	  </div>
-	  <div id="speech6" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.9">No, some of it is for my child's father. O, how</div>
-	  <div id="scene1.3.10">full of briers is this working-day world!</div>
-	  </div>
-	  <div id="speech7" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.11">They are but burs, cousin, thrown upon thee in</div>
-	  <div id="scene1.3.12">holiday foolery: if we walk not in the trodden</div>
-	  <div id="scene1.3.13">paths our very petticoats will catch them.</div>
-	  </div>
-	  <div id="speech8" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.14">I could shake them off my coat: these burs are in my heart.</div>
-	  </div>
-	  <div id="speech9" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.15">Hem them away.</div>
-	  </div>
-	  <div id="speech10" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.16">I would try, if I could cry 'hem' and have him.</div>
-	  </div>
-	  <div id="speech11" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.17">Come, come, wrestle with thy affections.</div>
-	  </div>
-	  <div id="speech12" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.18">O, they take the part of a better wrestler than myself!</div>
-	  </div>
-	  <div id="speech13" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.19">O, a good wish upon you! you will try in time, in</div>
-	  <div id="scene1.3.20">despite of a fall. But, turning these jests out of</div>
-	  <div id="scene1.3.21">service, let us talk in good earnest: is it</div>
-	  <div id="scene1.3.22">possible, on such a sudden, you should fall into so</div>
-	  <div id="scene1.3.23">strong a liking with old Sir Rowland's youngest son?</div>
-	  </div>
-	  <div id="speech14" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.24">The duke my father loved his father dearly.</div>
-	  </div>
-	  <div id="speech15" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.25">Doth it therefore ensue that you should love his son</div>
-	  <div id="scene1.3.26">dearly? By this kind of chase, I should hate him,</div>
-	  <div id="scene1.3.27">for my father hated his father dearly; yet I hate</div>
-	  <div id="scene1.3.28">not Orlando.</div>
-	  </div>
-	  <div id="speech16" class="character">ROSALIND</div>
-	  <div title="wtf" class="dialog">
-	  <div id="scene1.3.29">No, faith, hate him not, for my sake.</div>
-	  </div>
-	  <div id="speech17" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.30">Why should I not? doth he not deserve well?</div>
-	  </div>
-	  <div id="speech18" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.31">Let me love him for that, and do you love him</div>
-	  <div id="scene1.3.32">because I do. Look, here comes the duke.</div>
-	  </div>
-	  <div id="speech19" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.33">With his eyes full of anger.</div>
-	  <div class="direction">Enter DUKE FREDERICK, with Lords</div>
-	  </div>
-	  <div id="speech20" class="character">DUKE FREDERICK</div>
-	  <div class="dialog">
-	  <div id="scene1.3.34">Mistress, dispatch you with your safest haste</div>
-	  <div id="scene1.3.35">And get you from our court.</div>
-	  </div>
-	  <div id="speech21" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.36">Me, uncle?</div>
-	  </div>
-	  <div id="speech22" class="character">DUKE FREDERICK</div>
-	  <div class="dialog">
-	  <div id="scene1.3.37">You, cousin</div>
-	  <div id="scene1.3.38">Within these ten days if that thou be'st found</div>
-	  <div id="scene1.3.39">So near our public court as twenty miles,</div>
-	  <div id="scene1.3.40">Thou diest for it.</div>
-	  </div>
-	  <div id="speech23" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.41">                  I do beseech your grace,</div>
-	  <div id="scene1.3.42">Let me the knowledge of my fault bear with me:</div>
-	  <div id="scene1.3.43">If with myself I hold intelligence</div>
-	  <div id="scene1.3.44">Or have acquaintance with mine own desires,</div>
-	  <div id="scene1.3.45">If that I do not dream or be not frantic,--</div>
-	  <div id="scene1.3.46">As I do trust I am not--then, dear uncle,</div>
-	  <div id="scene1.3.47">Never so much as in a thought unborn</div>
-	  <div id="scene1.3.48">Did I offend your highness.</div>
-	  </div>
-	  <div id="speech24" class="character">DUKE FREDERICK</div>
-	  <div class="dialog">
-	  <div id="scene1.3.49">Thus do all traitors:</div>
-	  <div id="scene1.3.50">If their purgation did consist in words,</div>
-	  <div id="scene1.3.51">They are as innocent as grace itself:</div>
-	  <div id="scene1.3.52">Let it suffice thee that I trust thee not.</div>
-	  </div>
-	  <div id="speech25" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.53">Yet your mistrust cannot make me a traitor:</div>
-	  <div id="scene1.3.54">Tell me whereon the likelihood depends.</div>
-	  </div>
-	  <div id="speech26" class="character">DUKE FREDERICK</div>
-	  <div class="dialog">
-	  <div id="scene1.3.55">Thou art thy father's daughter; there's enough.</div>
-	  </div>
-	  <div id="speech27" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.56">So was I when your highness took his dukedom;</div>
-	  <div id="scene1.3.57">So was I when your highness banish'd him:</div>
-	  <div id="scene1.3.58">Treason is not inherited, my lord;</div>
-	  <div id="scene1.3.59">Or, if we did derive it from our friends,</div>
-	  <div id="scene1.3.60">What's that to me? my father was no traitor:</div>
-	  <div id="scene1.3.61">Then, good my liege, mistake me not so much</div>
-	  <div id="scene1.3.62">To think my poverty is treacherous.</div>
-	  </div>
-	  <div id="speech28" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.63">Dear sovereign, hear me speak.</div>
-	  </div>
-	  <div id="speech29" class="character">DUKE FREDERICK</div>
-	  <div class="dialog">
-	  <div id="scene1.3.64">Ay, Celia; we stay'd her for your sake,</div>
-	  <div id="scene1.3.65">Else had she with her father ranged along.</div>
-	  </div>
-	  <div id="speech30" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.66">I did not then entreat to have her stay;</div>
-	  <div id="scene1.3.67">It was your pleasure and your own remorse:</div>
-	  <div id="scene1.3.68">I was too young that time to value her;</div>
-	  <div id="scene1.3.69">But now I know her: if she be a traitor,</div>
-	  <div id="scene1.3.70">Why so am I; we still have slept together,</div>
-	  <div id="scene1.3.71">Rose at an instant, learn'd, play'd, eat together,</div>
-	  <div id="scene1.3.72">And wheresoever we went, like Juno's swans,</div>
-	  <div id="scene1.3.73">Still we went coupled and inseparable.</div>
-	  </div>
-	  <div id="speech31" class="character">DUKE FREDERICK</div>
-	  <div class="dialog">
-	  <div id="scene1.3.74">She is too subtle for thee; and her smoothness,</div>
-	  <div id="scene1.3.75">Her very silence and her patience</div>
-	  <div id="scene1.3.76">Speak to the people, and they pity her.</div>
-	  <div id="scene1.3.77">Thou art a fool: she robs thee of thy name;</div>
-	  <div id="scene1.3.78">And thou wilt show more bright and seem more virtuous</div>
-	  <div id="scene1.3.79">When she is gone. Then open not thy lips:</div>
-	  <div id="scene1.3.80">Firm and irrevocable is my doom</div>
-	  <div id="scene1.3.81">Which I have pass'd upon her; she is banish'd.</div>
-	  </div>
-	  <div id="speech32" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.82">Pronounce that sentence then on me, my liege:</div>
-	  <div id="scene1.3.83">I cannot live out of her company.</div>
-	  </div>
-	  <div id="speech33" class="character">DUKE FREDERICK</div>
-	  <div class="dialog">
-	  <div id="scene1.3.84">You are a fool. You, niece, provide yourself:</div>
-	  <div id="scene1.3.85">If you outstay the time, upon mine honour,</div>
-	  <div id="scene1.3.86">And in the greatness of my word, you die.</div>
-	  <div class="direction">Exeunt DUKE FREDERICK and Lords</div>
-	  </div>
-	  <div id="speech34" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.87">O my poor Rosalind, whither wilt thou go?</div>
-	  <div id="scene1.3.88">Wilt thou change fathers? I will give thee mine.</div>
-	  <div id="scene1.3.89">I charge thee, be not thou more grieved than I am.</div>
-	  </div>
-	  <div id="speech35" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.90">I have more cause.</div>
-	  </div>
-	  <div id="speech36" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.91">                  Thou hast not, cousin;</div>
-	  <div id="scene1.3.92">Prithee be cheerful: know'st thou not, the duke</div>
-	  <div id="scene1.3.93">Hath banish'd me, his daughter?</div>
-	  </div>
-	  <div id="speech37" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.94">That he hath not.</div>
-	  </div>
-	  <div id="speech38" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.95">No, hath not? Rosalind lacks then the love</div>
-	  <div id="scene1.3.96">Which teacheth thee that thou and I am one:</div>
-	  <div id="scene1.3.97">Shall we be sunder'd? shall we part, sweet girl?</div>
-	  <div id="scene1.3.98">No: let my father seek another heir.</div>
-	  <div id="scene1.3.99">Therefore devise with me how we may fly,</div>
-	  <div id="scene1.3.100">Whither to go and what to bear with us;</div>
-	  <div id="scene1.3.101">And do not seek to take your change upon you,</div>
-	  <div id="scene1.3.102">To bear your griefs yourself and leave me out;</div>
-	  <div id="scene1.3.103">For, by this heaven, now at our sorrows pale,</div>
-	  <div id="scene1.3.104">Say what thou canst, I'll go along with thee.</div>
-	  </div>
-	  <div id="speech39" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.105">Why, whither shall we go?</div>
-	  </div>
-	  <div id="speech40" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.106">To seek my uncle in the forest of Arden.</div>
-	  </div>
-	  <div id="speech41" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.107">Alas, what danger will it be to us,</div>
-	  <div id="scene1.3.108">Maids as we are, to travel forth so far!</div>
-	  <div id="scene1.3.109">Beauty provoketh thieves sooner than gold.</div>
-	  </div>
-	  <div id="speech42" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.110">I'll put myself in poor and mean attire</div>
-	  <div id="scene1.3.111">And with a kind of umber smirch my face;</div>
-	  <div id="scene1.3.112">The like do you: so shall we pass along</div>
-	  <div id="scene1.3.113">And never stir assailants.</div>
-	  </div>
-	  <div id="speech43" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.114">Were it not better,</div>
-	  <div id="scene1.3.115">Because that I am more than common tall,</div>
-	  <div id="scene1.3.116">That I did suit me all points like a man?</div>
-	  <div id="scene1.3.117">A gallant curtle-axe upon my thigh,</div>
-	  <div id="scene1.3.118">A boar-spear in my hand; and--in my heart</div>
-	  <div id="scene1.3.119">Lie there what hidden woman's fear there will--</div>
-	  <div id="scene1.3.120">We'll have a swashing and a martial outside,</div>
-	  <div id="scene1.3.121">As many other mannish cowards have</div>
-	  <div id="scene1.3.122">That do outface it with their semblances.</div>
-	  </div>
-	  <div id="speech44" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.123">What shall I call thee when thou art a man?</div>
-	  </div>
-	  <div id="speech45" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.124">I'll have no worse a name than Jove's own page;</div>
-	  <div id="scene1.3.125">And therefore look you call me Ganymede.</div>
-	  <div id="scene1.3.126">But what will you be call'd?</div>
-	  </div>
-	  <div id="speech46" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.127">Something that hath a reference to my state</div>
-	  <div id="scene1.3.128">No longer Celia, but Aliena.</div>
-	  </div>
-	  <div id="speech47" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.129">But, cousin, what if we assay'd to steal</div>
-	  <div id="scene1.3.130">The clownish fool out of your father's court?</div>
-	  <div id="scene1.3.131">Would he not be a comfort to our travel?</div>
-	  </div>
-	  <div id="speech48" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.132">He'll go along o'er the wide world with me;</div>
-	  <div id="scene1.3.133">Leave me alone to woo him. Let's away,</div>
-	  <div id="scene1.3.134">And get our jewels and our wealth together,</div>
-	  <div id="scene1.3.135">Devise the fittest time and safest way</div>
-	  <div id="scene1.3.136">To hide us from pursuit that will be made</div>
-	  <div id="scene1.3.137">After my flight. Now go we in content</div>
-	  <div id="scene1.3.138">To liberty and not to banishment.</div>
-	  <div class="direction">Exeunt</div>
-	  </div>
-	</div>
-	</div>
-</div>
-</body>
-</html>
diff --git a/vendor/symfony/css-selector/Tests/XPath/TranslatorTest.php b/vendor/symfony/css-selector/Tests/XPath/TranslatorTest.php
deleted file mode 100644
index 610458297e..0000000000
--- a/vendor/symfony/css-selector/Tests/XPath/TranslatorTest.php
+++ /dev/null
@@ -1,327 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\XPath;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\CssSelector\XPath\Extension\HtmlExtension;
-use Symfony\Component\CssSelector\XPath\Translator;
-
-class TranslatorTest extends TestCase
-{
-    /** @dataProvider getXpathLiteralTestData */
-    public function testXpathLiteral($value, $literal)
-    {
-        $this->assertEquals($literal, Translator::getXpathLiteral($value));
-    }
-
-    /** @dataProvider getCssToXPathTestData */
-    public function testCssToXPath($css, $xpath)
-    {
-        $translator = new Translator();
-        $translator->registerExtension(new HtmlExtension($translator));
-        $this->assertEquals($xpath, $translator->cssToXPath($css, ''));
-    }
-
-    /** @dataProvider getXmlLangTestData */
-    public function testXmlLang($css, array $elementsId)
-    {
-        $translator = new Translator();
-        $document = new \SimpleXMLElement(file_get_contents(__DIR__.'/Fixtures/lang.xml'));
-        $elements = $document->xpath($translator->cssToXPath($css));
-        $this->assertCount(\count($elementsId), $elements);
-        foreach ($elements as $element) {
-            $this->assertTrue(\in_array($element->attributes()->id, $elementsId));
-        }
-    }
-
-    /** @dataProvider getHtmlIdsTestData */
-    public function testHtmlIds($css, array $elementsId)
-    {
-        $translator = new Translator();
-        $translator->registerExtension(new HtmlExtension($translator));
-        $document = new \DOMDocument();
-        $document->strictErrorChecking = false;
-        $internalErrors = libxml_use_internal_errors(true);
-        $document->loadHTMLFile(__DIR__.'/Fixtures/ids.html');
-        $document = simplexml_import_dom($document);
-        $elements = $document->xpath($translator->cssToXPath($css));
-        $this->assertCount(\count($elementsId), $elementsId);
-        foreach ($elements as $element) {
-            if (null !== $element->attributes()->id) {
-                $this->assertTrue(\in_array($element->attributes()->id, $elementsId));
-            }
-        }
-        libxml_clear_errors();
-        libxml_use_internal_errors($internalErrors);
-    }
-
-    /** @dataProvider getHtmlShakespearTestData */
-    public function testHtmlShakespear($css, $count)
-    {
-        $translator = new Translator();
-        $translator->registerExtension(new HtmlExtension($translator));
-        $document = new \DOMDocument();
-        $document->strictErrorChecking = false;
-        $document->loadHTMLFile(__DIR__.'/Fixtures/shakespear.html');
-        $document = simplexml_import_dom($document);
-        $bodies = $document->xpath('//body');
-        $elements = $bodies[0]->xpath($translator->cssToXPath($css));
-        $this->assertCount($count, $elements);
-    }
-
-    public function getXpathLiteralTestData()
-    {
-        return array(
-            array('foo', "'foo'"),
-            array("foo's bar", '"foo\'s bar"'),
-            array("foo's \"middle\" bar", 'concat(\'foo\', "\'", \'s "middle" bar\')'),
-            array("foo's 'middle' \"bar\"", 'concat(\'foo\', "\'", \'s \', "\'", \'middle\', "\'", \' "bar"\')'),
-        );
-    }
-
-    public function getCssToXPathTestData()
-    {
-        return array(
-            array('*', '*'),
-            array('e', 'e'),
-            array('*|e', 'e'),
-            array('e|f', 'e:f'),
-            array('e[foo]', 'e[@foo]'),
-            array('e[foo|bar]', 'e[@foo:bar]'),
-            array('e[foo="bar"]', "e[@foo = 'bar']"),
-            array('e[foo~="bar"]', "e[@foo and contains(concat(' ', normalize-space(@foo), ' '), ' bar ')]"),
-            array('e[foo^="bar"]', "e[@foo and starts-with(@foo, 'bar')]"),
-            array('e[foo$="bar"]', "e[@foo and substring(@foo, string-length(@foo)-2) = 'bar']"),
-            array('e[foo*="bar"]', "e[@foo and contains(@foo, 'bar')]"),
-            array('e[foo!="bar"]', "e[not(@foo) or @foo != 'bar']"),
-            array('e[foo!="bar"][foo!="baz"]', "e[(not(@foo) or @foo != 'bar') and (not(@foo) or @foo != 'baz')]"),
-            array('e[hreflang|="en"]', "e[@hreflang and (@hreflang = 'en' or starts-with(@hreflang, 'en-'))]"),
-            array('e:nth-child(1)', "*/*[(name() = 'e') and (position() = 1)]"),
-            array('e:nth-last-child(1)', "*/*[(name() = 'e') and (position() = last() - 0)]"),
-            array('e:nth-last-child(2n+2)', "*/*[(name() = 'e') and (last() - position() - 1 >= 0 and (last() - position() - 1) mod 2 = 0)]"),
-            array('e:nth-of-type(1)', '*/e[position() = 1]'),
-            array('e:nth-last-of-type(1)', '*/e[position() = last() - 0]'),
-            array('div e:nth-last-of-type(1) .aclass', "div/descendant-or-self::*/e[position() = last() - 0]/descendant-or-self::*/*[@class and contains(concat(' ', normalize-space(@class), ' '), ' aclass ')]"),
-            array('e:first-child', "*/*[(name() = 'e') and (position() = 1)]"),
-            array('e:last-child', "*/*[(name() = 'e') and (position() = last())]"),
-            array('e:first-of-type', '*/e[position() = 1]'),
-            array('e:last-of-type', '*/e[position() = last()]'),
-            array('e:only-child', "*/*[(name() = 'e') and (last() = 1)]"),
-            array('e:only-of-type', 'e[last() = 1]'),
-            array('e:empty', 'e[not(*) and not(string-length())]'),
-            array('e:EmPTY', 'e[not(*) and not(string-length())]'),
-            array('e:root', 'e[not(parent::*)]'),
-            array('e:hover', 'e[0]'),
-            array('e:contains("foo")', "e[contains(string(.), 'foo')]"),
-            array('e:ConTains(foo)', "e[contains(string(.), 'foo')]"),
-            array('e.warning', "e[@class and contains(concat(' ', normalize-space(@class), ' '), ' warning ')]"),
-            array('e#myid', "e[@id = 'myid']"),
-            array('e:not(:nth-child(odd))', 'e[not(position() - 1 >= 0 and (position() - 1) mod 2 = 0)]'),
-            array('e:nOT(*)', 'e[0]'),
-            array('e f', 'e/descendant-or-self::*/f'),
-            array('e > f', 'e/f'),
-            array('e + f', "e/following-sibling::*[(name() = 'f') and (position() = 1)]"),
-            array('e ~ f', 'e/following-sibling::f'),
-            array('div#container p', "div[@id = 'container']/descendant-or-self::*/p"),
-        );
-    }
-
-    public function getXmlLangTestData()
-    {
-        return array(
-            array(':lang("EN")', array('first', 'second', 'third', 'fourth')),
-            array(':lang("en-us")', array('second', 'fourth')),
-            array(':lang(en-nz)', array('third')),
-            array(':lang(fr)', array('fifth')),
-            array(':lang(ru)', array('sixth')),
-            array(":lang('ZH')", array('eighth')),
-            array(':lang(de) :lang(zh)', array('eighth')),
-            array(':lang(en), :lang(zh)', array('first', 'second', 'third', 'fourth', 'eighth')),
-            array(':lang(es)', array()),
-        );
-    }
-
-    public function getHtmlIdsTestData()
-    {
-        return array(
-            array('div', array('outer-div', 'li-div', 'foobar-div')),
-            array('DIV', array('outer-div', 'li-div', 'foobar-div')),  // case-insensitive in HTML
-            array('div div', array('li-div')),
-            array('div, div div', array('outer-div', 'li-div', 'foobar-div')),
-            array('a[name]', array('name-anchor')),
-            array('a[NAme]', array('name-anchor')), // case-insensitive in HTML:
-            array('a[rel]', array('tag-anchor', 'nofollow-anchor')),
-            array('a[rel="tag"]', array('tag-anchor')),
-            array('a[href*="localhost"]', array('tag-anchor')),
-            array('a[href*=""]', array()),
-            array('a[href^="http"]', array('tag-anchor', 'nofollow-anchor')),
-            array('a[href^="http:"]', array('tag-anchor')),
-            array('a[href^=""]', array()),
-            array('a[href$="org"]', array('nofollow-anchor')),
-            array('a[href$=""]', array()),
-            array('div[foobar~="bc"]', array('foobar-div')),
-            array('div[foobar~="cde"]', array('foobar-div')),
-            array('[foobar~="ab bc"]', array('foobar-div')),
-            array('[foobar~=""]', array()),
-            array('[foobar~=" \t"]', array()),
-            array('div[foobar~="cd"]', array()),
-            array('*[lang|="En"]', array('second-li')),
-            array('[lang|="En-us"]', array('second-li')),
-            // Attribute values are case sensitive
-            array('*[lang|="en"]', array()),
-            array('[lang|="en-US"]', array()),
-            array('*[lang|="e"]', array()),
-            // ... :lang() is not.
-            array(':lang("EN")', array('second-li', 'li-div')),
-            array('*:lang(en-US)', array('second-li', 'li-div')),
-            array(':lang("e")', array()),
-            array('li:nth-child(3)', array('third-li')),
-            array('li:nth-child(10)', array()),
-            array('li:nth-child(2n)', array('second-li', 'fourth-li', 'sixth-li')),
-            array('li:nth-child(even)', array('second-li', 'fourth-li', 'sixth-li')),
-            array('li:nth-child(2n+0)', array('second-li', 'fourth-li', 'sixth-li')),
-            array('li:nth-child(+2n+1)', array('first-li', 'third-li', 'fifth-li', 'seventh-li')),
-            array('li:nth-child(odd)', array('first-li', 'third-li', 'fifth-li', 'seventh-li')),
-            array('li:nth-child(2n+4)', array('fourth-li', 'sixth-li')),
-            array('li:nth-child(3n+1)', array('first-li', 'fourth-li', 'seventh-li')),
-            array('li:nth-child(n)', array('first-li', 'second-li', 'third-li', 'fourth-li', 'fifth-li', 'sixth-li', 'seventh-li')),
-            array('li:nth-child(n-1)', array('first-li', 'second-li', 'third-li', 'fourth-li', 'fifth-li', 'sixth-li', 'seventh-li')),
-            array('li:nth-child(n+1)', array('first-li', 'second-li', 'third-li', 'fourth-li', 'fifth-li', 'sixth-li', 'seventh-li')),
-            array('li:nth-child(n+3)', array('third-li', 'fourth-li', 'fifth-li', 'sixth-li', 'seventh-li')),
-            array('li:nth-child(-n)', array()),
-            array('li:nth-child(-n-1)', array()),
-            array('li:nth-child(-n+1)', array('first-li')),
-            array('li:nth-child(-n+3)', array('first-li', 'second-li', 'third-li')),
-            array('li:nth-last-child(0)', array()),
-            array('li:nth-last-child(2n)', array('second-li', 'fourth-li', 'sixth-li')),
-            array('li:nth-last-child(even)', array('second-li', 'fourth-li', 'sixth-li')),
-            array('li:nth-last-child(2n+2)', array('second-li', 'fourth-li', 'sixth-li')),
-            array('li:nth-last-child(n)', array('first-li', 'second-li', 'third-li', 'fourth-li', 'fifth-li', 'sixth-li', 'seventh-li')),
-            array('li:nth-last-child(n-1)', array('first-li', 'second-li', 'third-li', 'fourth-li', 'fifth-li', 'sixth-li', 'seventh-li')),
-            array('li:nth-last-child(n-3)', array('first-li', 'second-li', 'third-li', 'fourth-li', 'fifth-li', 'sixth-li', 'seventh-li')),
-            array('li:nth-last-child(n+1)', array('first-li', 'second-li', 'third-li', 'fourth-li', 'fifth-li', 'sixth-li', 'seventh-li')),
-            array('li:nth-last-child(n+3)', array('first-li', 'second-li', 'third-li', 'fourth-li', 'fifth-li')),
-            array('li:nth-last-child(-n)', array()),
-            array('li:nth-last-child(-n-1)', array()),
-            array('li:nth-last-child(-n+1)', array('seventh-li')),
-            array('li:nth-last-child(-n+3)', array('fifth-li', 'sixth-li', 'seventh-li')),
-            array('ol:first-of-type', array('first-ol')),
-            array('ol:nth-child(1)', array('first-ol')),
-            array('ol:nth-of-type(2)', array('second-ol')),
-            array('ol:nth-last-of-type(1)', array('second-ol')),
-            array('span:only-child', array('foobar-span')),
-            array('li div:only-child', array('li-div')),
-            array('div *:only-child', array('li-div', 'foobar-span')),
-            array('p:only-of-type', array('paragraph')),
-            array('a:empty', array('name-anchor')),
-            array('a:EMpty', array('name-anchor')),
-            array('li:empty', array('third-li', 'fourth-li', 'fifth-li', 'sixth-li')),
-            array(':root', array('html')),
-            array('html:root', array('html')),
-            array('li:root', array()),
-            array('* :root', array()),
-            array('*:contains("link")', array('html', 'outer-div', 'tag-anchor', 'nofollow-anchor')),
-            array(':CONtains("link")', array('html', 'outer-div', 'tag-anchor', 'nofollow-anchor')),
-            array('*:contains("LInk")', array()),  // case sensitive
-            array('*:contains("e")', array('html', 'nil', 'outer-div', 'first-ol', 'first-li', 'paragraph', 'p-em')),
-            array('*:contains("E")', array()),  // case-sensitive
-            array('.a', array('first-ol')),
-            array('.b', array('first-ol')),
-            array('*.a', array('first-ol')),
-            array('ol.a', array('first-ol')),
-            array('.c', array('first-ol', 'third-li', 'fourth-li')),
-            array('*.c', array('first-ol', 'third-li', 'fourth-li')),
-            array('ol *.c', array('third-li', 'fourth-li')),
-            array('ol li.c', array('third-li', 'fourth-li')),
-            array('li ~ li.c', array('third-li', 'fourth-li')),
-            array('ol > li.c', array('third-li', 'fourth-li')),
-            array('#first-li', array('first-li')),
-            array('li#first-li', array('first-li')),
-            array('*#first-li', array('first-li')),
-            array('li div', array('li-div')),
-            array('li > div', array('li-div')),
-            array('div div', array('li-div')),
-            array('div > div', array()),
-            array('div>.c', array('first-ol')),
-            array('div > .c', array('first-ol')),
-            array('div + div', array('foobar-div')),
-            array('a ~ a', array('tag-anchor', 'nofollow-anchor')),
-            array('a[rel="tag"] ~ a', array('nofollow-anchor')),
-            array('ol#first-ol li:last-child', array('seventh-li')),
-            array('ol#first-ol *:last-child', array('li-div', 'seventh-li')),
-            array('#outer-div:first-child', array('outer-div')),
-            array('#outer-div :first-child', array('name-anchor', 'first-li', 'li-div', 'p-b', 'checkbox-fieldset-disabled', 'area-href')),
-            array('a[href]', array('tag-anchor', 'nofollow-anchor')),
-            array(':not(*)', array()),
-            array('a:not([href])', array('name-anchor')),
-            array('ol :Not(li[class])', array('first-li', 'second-li', 'li-div', 'fifth-li', 'sixth-li', 'seventh-li')),
-            // HTML-specific
-            array(':link', array('link-href', 'tag-anchor', 'nofollow-anchor', 'area-href')),
-            array(':visited', array()),
-            array(':enabled', array('link-href', 'tag-anchor', 'nofollow-anchor', 'checkbox-unchecked', 'text-checked', 'checkbox-checked', 'area-href')),
-            array(':disabled', array('checkbox-disabled', 'checkbox-disabled-checked', 'fieldset', 'checkbox-fieldset-disabled')),
-            array(':checked', array('checkbox-checked', 'checkbox-disabled-checked')),
-        );
-    }
-
-    public function getHtmlShakespearTestData()
-    {
-        return array(
-            array('*', 246),
-            array('div:contains(CELIA)', 26),
-            array('div:only-child', 22), // ?
-            array('div:nth-child(even)', 106),
-            array('div:nth-child(2n)', 106),
-            array('div:nth-child(odd)', 137),
-            array('div:nth-child(2n+1)', 137),
-            array('div:nth-child(n)', 243),
-            array('div:last-child', 53),
-            array('div:first-child', 51),
-            array('div > div', 242),
-            array('div + div', 190),
-            array('div ~ div', 190),
-            array('body', 1),
-            array('body div', 243),
-            array('div', 243),
-            array('div div', 242),
-            array('div div div', 241),
-            array('div, div, div', 243),
-            array('div, a, span', 243),
-            array('.dialog', 51),
-            array('div.dialog', 51),
-            array('div .dialog', 51),
-            array('div.character, div.dialog', 99),
-            array('div.direction.dialog', 0),
-            array('div.dialog.direction', 0),
-            array('div.dialog.scene', 1),
-            array('div.scene.scene', 1),
-            array('div.scene .scene', 0),
-            array('div.direction .dialog ', 0),
-            array('div .dialog .direction', 4),
-            array('div.dialog .dialog .direction', 4),
-            array('#speech5', 1),
-            array('div#speech5', 1),
-            array('div #speech5', 1),
-            array('div.scene div.dialog', 49),
-            array('div#scene1 div.dialog div', 142),
-            array('#scene1 #speech1', 1),
-            array('div[class]', 103),
-            array('div[class=dialog]', 50),
-            array('div[class^=dia]', 51),
-            array('div[class$=log]', 50),
-            array('div[class*=sce]', 1),
-            array('div[class|=dialog]', 50), // ? Seems right
-            array('div[class!=madeup]', 243), // ? Seems right
-            array('div[class~=dialog]', 51), // ? Seems right
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/XPath/Extension/AbstractExtension.php b/vendor/symfony/css-selector/XPath/Extension/AbstractExtension.php
index 026ac06c79..44e0035a78 100644
--- a/vendor/symfony/css-selector/XPath/Extension/AbstractExtension.php
+++ b/vendor/symfony/css-selector/XPath/Extension/AbstractExtension.php
@@ -26,40 +26,40 @@ abstract class AbstractExtension implements ExtensionInterface
     /**
      * {@inheritdoc}
      */
-    public function getNodeTranslators()
+    public function getNodeTranslators(): array
     {
-        return array();
+        return [];
     }
 
     /**
      * {@inheritdoc}
      */
-    public function getCombinationTranslators()
+    public function getCombinationTranslators(): array
     {
-        return array();
+        return [];
     }
 
     /**
      * {@inheritdoc}
      */
-    public function getFunctionTranslators()
+    public function getFunctionTranslators(): array
     {
-        return array();
+        return [];
     }
 
     /**
      * {@inheritdoc}
      */
-    public function getPseudoClassTranslators()
+    public function getPseudoClassTranslators(): array
     {
-        return array();
+        return [];
     }
 
     /**
      * {@inheritdoc}
      */
-    public function getAttributeMatchingTranslators()
+    public function getAttributeMatchingTranslators(): array
     {
-        return array();
+        return [];
     }
 }
diff --git a/vendor/symfony/css-selector/XPath/Extension/AttributeMatchingExtension.php b/vendor/symfony/css-selector/XPath/Extension/AttributeMatchingExtension.php
index 2078dca61d..a9879f1be8 100644
--- a/vendor/symfony/css-selector/XPath/Extension/AttributeMatchingExtension.php
+++ b/vendor/symfony/css-selector/XPath/Extension/AttributeMatchingExtension.php
@@ -29,52 +29,31 @@ class AttributeMatchingExtension extends AbstractExtension
     /**
      * {@inheritdoc}
      */
-    public function getAttributeMatchingTranslators()
+    public function getAttributeMatchingTranslators(): array
     {
-        return array(
-            'exists' => array($this, 'translateExists'),
-            '=' => array($this, 'translateEquals'),
-            '~=' => array($this, 'translateIncludes'),
-            '|=' => array($this, 'translateDashMatch'),
-            '^=' => array($this, 'translatePrefixMatch'),
-            '$=' => array($this, 'translateSuffixMatch'),
-            '*=' => array($this, 'translateSubstringMatch'),
-            '!=' => array($this, 'translateDifferent'),
-        );
+        return [
+            'exists' => [$this, 'translateExists'],
+            '=' => [$this, 'translateEquals'],
+            '~=' => [$this, 'translateIncludes'],
+            '|=' => [$this, 'translateDashMatch'],
+            '^=' => [$this, 'translatePrefixMatch'],
+            '$=' => [$this, 'translateSuffixMatch'],
+            '*=' => [$this, 'translateSubstringMatch'],
+            '!=' => [$this, 'translateDifferent'],
+        ];
     }
 
-    /**
-     * @param XPathExpr $xpath
-     * @param string    $attribute
-     * @param string    $value
-     *
-     * @return XPathExpr
-     */
-    public function translateExists(XPathExpr $xpath, $attribute, $value)
+    public function translateExists(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr
     {
         return $xpath->addCondition($attribute);
     }
 
-    /**
-     * @param XPathExpr $xpath
-     * @param string    $attribute
-     * @param string    $value
-     *
-     * @return XPathExpr
-     */
-    public function translateEquals(XPathExpr $xpath, $attribute, $value)
+    public function translateEquals(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr
     {
         return $xpath->addCondition(sprintf('%s = %s', $attribute, Translator::getXpathLiteral($value)));
     }
 
-    /**
-     * @param XPathExpr $xpath
-     * @param string    $attribute
-     * @param string    $value
-     *
-     * @return XPathExpr
-     */
-    public function translateIncludes(XPathExpr $xpath, $attribute, $value)
+    public function translateIncludes(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr
     {
         return $xpath->addCondition($value ? sprintf(
             '%1$s and contains(concat(\' \', normalize-space(%1$s), \' \'), %2$s)',
@@ -83,14 +62,7 @@ public function translateIncludes(XPathExpr $xpath, $attribute, $value)
         ) : '0');
     }
 
-    /**
-     * @param XPathExpr $xpath
-     * @param string    $attribute
-     * @param string    $value
-     *
-     * @return XPathExpr
-     */
-    public function translateDashMatch(XPathExpr $xpath, $attribute, $value)
+    public function translateDashMatch(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr
     {
         return $xpath->addCondition(sprintf(
             '%1$s and (%1$s = %2$s or starts-with(%1$s, %3$s))',
@@ -100,14 +72,7 @@ public function translateDashMatch(XPathExpr $xpath, $attribute, $value)
         ));
     }
 
-    /**
-     * @param XPathExpr $xpath
-     * @param string    $attribute
-     * @param string    $value
-     *
-     * @return XPathExpr
-     */
-    public function translatePrefixMatch(XPathExpr $xpath, $attribute, $value)
+    public function translatePrefixMatch(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr
     {
         return $xpath->addCondition($value ? sprintf(
             '%1$s and starts-with(%1$s, %2$s)',
@@ -116,14 +81,7 @@ public function translatePrefixMatch(XPathExpr $xpath, $attribute, $value)
         ) : '0');
     }
 
-    /**
-     * @param XPathExpr $xpath
-     * @param string    $attribute
-     * @param string    $value
-     *
-     * @return XPathExpr
-     */
-    public function translateSuffixMatch(XPathExpr $xpath, $attribute, $value)
+    public function translateSuffixMatch(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr
     {
         return $xpath->addCondition($value ? sprintf(
             '%1$s and substring(%1$s, string-length(%1$s)-%2$s) = %3$s',
@@ -133,14 +91,7 @@ public function translateSuffixMatch(XPathExpr $xpath, $attribute, $value)
         ) : '0');
     }
 
-    /**
-     * @param XPathExpr $xpath
-     * @param string    $attribute
-     * @param string    $value
-     *
-     * @return XPathExpr
-     */
-    public function translateSubstringMatch(XPathExpr $xpath, $attribute, $value)
+    public function translateSubstringMatch(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr
     {
         return $xpath->addCondition($value ? sprintf(
             '%1$s and contains(%1$s, %2$s)',
@@ -149,14 +100,7 @@ public function translateSubstringMatch(XPathExpr $xpath, $attribute, $value)
         ) : '0');
     }
 
-    /**
-     * @param XPathExpr $xpath
-     * @param string    $attribute
-     * @param string    $value
-     *
-     * @return XPathExpr
-     */
-    public function translateDifferent(XPathExpr $xpath, $attribute, $value)
+    public function translateDifferent(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr
     {
         return $xpath->addCondition(sprintf(
             $value ? 'not(%1$s) or %1$s != %2$s' : '%s != %s',
@@ -168,7 +112,7 @@ public function translateDifferent(XPathExpr $xpath, $attribute, $value)
     /**
      * {@inheritdoc}
      */
-    public function getName()
+    public function getName(): string
     {
         return 'attribute-matching';
     }
diff --git a/vendor/symfony/css-selector/XPath/Extension/CombinationExtension.php b/vendor/symfony/css-selector/XPath/Extension/CombinationExtension.php
index 0c9cc0320c..aee976e949 100644
--- a/vendor/symfony/css-selector/XPath/Extension/CombinationExtension.php
+++ b/vendor/symfony/css-selector/XPath/Extension/CombinationExtension.php
@@ -28,36 +28,27 @@ class CombinationExtension extends AbstractExtension
     /**
      * {@inheritdoc}
      */
-    public function getCombinationTranslators()
+    public function getCombinationTranslators(): array
     {
-        return array(
-            ' ' => array($this, 'translateDescendant'),
-            '>' => array($this, 'translateChild'),
-            '+' => array($this, 'translateDirectAdjacent'),
-            '~' => array($this, 'translateIndirectAdjacent'),
-        );
+        return [
+            ' ' => [$this, 'translateDescendant'],
+            '>' => [$this, 'translateChild'],
+            '+' => [$this, 'translateDirectAdjacent'],
+            '~' => [$this, 'translateIndirectAdjacent'],
+        ];
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateDescendant(XPathExpr $xpath, XPathExpr $combinedXpath)
+    public function translateDescendant(XPathExpr $xpath, XPathExpr $combinedXpath): XPathExpr
     {
         return $xpath->join('/descendant-or-self::*/', $combinedXpath);
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateChild(XPathExpr $xpath, XPathExpr $combinedXpath)
+    public function translateChild(XPathExpr $xpath, XPathExpr $combinedXpath): XPathExpr
     {
         return $xpath->join('/', $combinedXpath);
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateDirectAdjacent(XPathExpr $xpath, XPathExpr $combinedXpath)
+    public function translateDirectAdjacent(XPathExpr $xpath, XPathExpr $combinedXpath): XPathExpr
     {
         return $xpath
             ->join('/following-sibling::', $combinedXpath)
@@ -65,10 +56,7 @@ public function translateDirectAdjacent(XPathExpr $xpath, XPathExpr $combinedXpa
             ->addCondition('position() = 1');
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateIndirectAdjacent(XPathExpr $xpath, XPathExpr $combinedXpath)
+    public function translateIndirectAdjacent(XPathExpr $xpath, XPathExpr $combinedXpath): XPathExpr
     {
         return $xpath->join('/following-sibling::', $combinedXpath);
     }
@@ -76,7 +64,7 @@ public function translateIndirectAdjacent(XPathExpr $xpath, XPathExpr $combinedX
     /**
      * {@inheritdoc}
      */
-    public function getName()
+    public function getName(): string
     {
         return 'combination';
     }
diff --git a/vendor/symfony/css-selector/XPath/Extension/ExtensionInterface.php b/vendor/symfony/css-selector/XPath/Extension/ExtensionInterface.php
index 3607022891..1a74b90acc 100644
--- a/vendor/symfony/css-selector/XPath/Extension/ExtensionInterface.php
+++ b/vendor/symfony/css-selector/XPath/Extension/ExtensionInterface.php
@@ -30,40 +30,38 @@ interface ExtensionInterface
      *
      * @return callable[]
      */
-    public function getNodeTranslators();
+    public function getNodeTranslators(): array;
 
     /**
      * Returns combination translators.
      *
      * @return callable[]
      */
-    public function getCombinationTranslators();
+    public function getCombinationTranslators(): array;
 
     /**
      * Returns function translators.
      *
      * @return callable[]
      */
-    public function getFunctionTranslators();
+    public function getFunctionTranslators(): array;
 
     /**
      * Returns pseudo-class translators.
      *
      * @return callable[]
      */
-    public function getPseudoClassTranslators();
+    public function getPseudoClassTranslators(): array;
 
     /**
      * Returns attribute operation translators.
      *
      * @return callable[]
      */
-    public function getAttributeMatchingTranslators();
+    public function getAttributeMatchingTranslators(): array;
 
     /**
      * Returns extension name.
-     *
-     * @return string
      */
-    public function getName();
+    public function getName(): string;
 }
diff --git a/vendor/symfony/css-selector/XPath/Extension/FunctionExtension.php b/vendor/symfony/css-selector/XPath/Extension/FunctionExtension.php
index c2606b5ad4..d3f7222a4d 100644
--- a/vendor/symfony/css-selector/XPath/Extension/FunctionExtension.php
+++ b/vendor/symfony/css-selector/XPath/Extension/FunctionExtension.php
@@ -33,34 +33,27 @@ class FunctionExtension extends AbstractExtension
     /**
      * {@inheritdoc}
      */
-    public function getFunctionTranslators()
+    public function getFunctionTranslators(): array
     {
-        return array(
-            'nth-child' => array($this, 'translateNthChild'),
-            'nth-last-child' => array($this, 'translateNthLastChild'),
-            'nth-of-type' => array($this, 'translateNthOfType'),
-            'nth-last-of-type' => array($this, 'translateNthLastOfType'),
-            'contains' => array($this, 'translateContains'),
-            'lang' => array($this, 'translateLang'),
-        );
+        return [
+            'nth-child' => [$this, 'translateNthChild'],
+            'nth-last-child' => [$this, 'translateNthLastChild'],
+            'nth-of-type' => [$this, 'translateNthOfType'],
+            'nth-last-of-type' => [$this, 'translateNthLastOfType'],
+            'contains' => [$this, 'translateContains'],
+            'lang' => [$this, 'translateLang'],
+        ];
     }
 
     /**
-     * @param XPathExpr    $xpath
-     * @param FunctionNode $function
-     * @param bool         $last
-     * @param bool         $addNameTest
-     *
-     * @return XPathExpr
-     *
      * @throws ExpressionErrorException
      */
-    public function translateNthChild(XPathExpr $xpath, FunctionNode $function, $last = false, $addNameTest = true)
+    public function translateNthChild(XPathExpr $xpath, FunctionNode $function, bool $last = false, bool $addNameTest = true): XPathExpr
     {
         try {
-            list($a, $b) = Parser::parseSeries($function->getArguments());
+            [$a, $b] = Parser::parseSeries($function->getArguments());
         } catch (SyntaxErrorException $e) {
-            throw new ExpressionErrorException(sprintf('Invalid series: %s', implode(', ', $function->getArguments())), 0, $e);
+            throw new ExpressionErrorException(sprintf('Invalid series: "%s".', implode('", "', $function->getArguments())), 0, $e);
         }
 
         $xpath->addStarPrefix();
@@ -93,7 +86,7 @@ public function translateNthChild(XPathExpr $xpath, FunctionNode $function, $las
             $expr .= ' - '.$b;
         }
 
-        $conditions = array(sprintf('%s %s 0', $expr, $sign));
+        $conditions = [sprintf('%s %s 0', $expr, $sign)];
 
         if (1 !== $a && -1 !== $a) {
             $conditions[] = sprintf('(%s) mod %d = 0', $expr, $a);
@@ -110,28 +103,20 @@ public function translateNthChild(XPathExpr $xpath, FunctionNode $function, $las
         // -1n+6 means elements 6 and previous
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateNthLastChild(XPathExpr $xpath, FunctionNode $function)
+    public function translateNthLastChild(XPathExpr $xpath, FunctionNode $function): XPathExpr
     {
         return $this->translateNthChild($xpath, $function, true);
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateNthOfType(XPathExpr $xpath, FunctionNode $function)
+    public function translateNthOfType(XPathExpr $xpath, FunctionNode $function): XPathExpr
     {
         return $this->translateNthChild($xpath, $function, false, false);
     }
 
     /**
-     * @return XPathExpr
-     *
      * @throws ExpressionErrorException
      */
-    public function translateNthLastOfType(XPathExpr $xpath, FunctionNode $function)
+    public function translateNthLastOfType(XPathExpr $xpath, FunctionNode $function): XPathExpr
     {
         if ('*' === $xpath->getElement()) {
             throw new ExpressionErrorException('"*:nth-of-type()" is not implemented.');
@@ -141,19 +126,14 @@ public function translateNthLastOfType(XPathExpr $xpath, FunctionNode $function)
     }
 
     /**
-     * @return XPathExpr
-     *
      * @throws ExpressionErrorException
      */
-    public function translateContains(XPathExpr $xpath, FunctionNode $function)
+    public function translateContains(XPathExpr $xpath, FunctionNode $function): XPathExpr
     {
         $arguments = $function->getArguments();
         foreach ($arguments as $token) {
             if (!($token->isString() || $token->isIdentifier())) {
-                throw new ExpressionErrorException(
-                    'Expected a single string or identifier for :contains(), got '
-                    .implode(', ', $arguments)
-                );
+                throw new ExpressionErrorException('Expected a single string or identifier for :contains(), got '.implode(', ', $arguments));
             }
         }
 
@@ -164,19 +144,14 @@ public function translateContains(XPathExpr $xpath, FunctionNode $function)
     }
 
     /**
-     * @return XPathExpr
-     *
      * @throws ExpressionErrorException
      */
-    public function translateLang(XPathExpr $xpath, FunctionNode $function)
+    public function translateLang(XPathExpr $xpath, FunctionNode $function): XPathExpr
     {
         $arguments = $function->getArguments();
         foreach ($arguments as $token) {
             if (!($token->isString() || $token->isIdentifier())) {
-                throw new ExpressionErrorException(
-                    'Expected a single string or identifier for :lang(), got '
-                    .implode(', ', $arguments)
-                );
+                throw new ExpressionErrorException('Expected a single string or identifier for :lang(), got '.implode(', ', $arguments));
             }
         }
 
@@ -189,7 +164,7 @@ public function translateLang(XPathExpr $xpath, FunctionNode $function)
     /**
      * {@inheritdoc}
      */
-    public function getName()
+    public function getName(): string
     {
         return 'function';
     }
diff --git a/vendor/symfony/css-selector/XPath/Extension/HtmlExtension.php b/vendor/symfony/css-selector/XPath/Extension/HtmlExtension.php
index 625ffa5cad..6edc085810 100644
--- a/vendor/symfony/css-selector/XPath/Extension/HtmlExtension.php
+++ b/vendor/symfony/css-selector/XPath/Extension/HtmlExtension.php
@@ -39,34 +39,31 @@ public function __construct(Translator $translator)
     /**
      * {@inheritdoc}
      */
-    public function getPseudoClassTranslators()
+    public function getPseudoClassTranslators(): array
     {
-        return array(
-            'checked' => array($this, 'translateChecked'),
-            'link' => array($this, 'translateLink'),
-            'disabled' => array($this, 'translateDisabled'),
-            'enabled' => array($this, 'translateEnabled'),
-            'selected' => array($this, 'translateSelected'),
-            'invalid' => array($this, 'translateInvalid'),
-            'hover' => array($this, 'translateHover'),
-            'visited' => array($this, 'translateVisited'),
-        );
+        return [
+            'checked' => [$this, 'translateChecked'],
+            'link' => [$this, 'translateLink'],
+            'disabled' => [$this, 'translateDisabled'],
+            'enabled' => [$this, 'translateEnabled'],
+            'selected' => [$this, 'translateSelected'],
+            'invalid' => [$this, 'translateInvalid'],
+            'hover' => [$this, 'translateHover'],
+            'visited' => [$this, 'translateVisited'],
+        ];
     }
 
     /**
      * {@inheritdoc}
      */
-    public function getFunctionTranslators()
+    public function getFunctionTranslators(): array
     {
-        return array(
-            'lang' => array($this, 'translateLang'),
-        );
+        return [
+            'lang' => [$this, 'translateLang'],
+        ];
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateChecked(XPathExpr $xpath)
+    public function translateChecked(XPathExpr $xpath): XPathExpr
     {
         return $xpath->addCondition(
             '(@checked '
@@ -75,18 +72,12 @@ public function translateChecked(XPathExpr $xpath)
         );
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateLink(XPathExpr $xpath)
+    public function translateLink(XPathExpr $xpath): XPathExpr
     {
         return $xpath->addCondition("@href and (name(.) = 'a' or name(.) = 'link' or name(.) = 'area')");
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateDisabled(XPathExpr $xpath)
+    public function translateDisabled(XPathExpr $xpath): XPathExpr
     {
         return $xpath->addCondition(
             '('
@@ -112,10 +103,7 @@ public function translateDisabled(XPathExpr $xpath)
         // todo: in the second half, add "and is not a descendant of that fieldset element's first legend element child, if any."
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateEnabled(XPathExpr $xpath)
+    public function translateEnabled(XPathExpr $xpath): XPathExpr
     {
         return $xpath->addCondition(
             '('
@@ -149,19 +137,14 @@ public function translateEnabled(XPathExpr $xpath)
     }
 
     /**
-     * @return XPathExpr
-     *
      * @throws ExpressionErrorException
      */
-    public function translateLang(XPathExpr $xpath, FunctionNode $function)
+    public function translateLang(XPathExpr $xpath, FunctionNode $function): XPathExpr
     {
         $arguments = $function->getArguments();
         foreach ($arguments as $token) {
             if (!($token->isString() || $token->isIdentifier())) {
-                throw new ExpressionErrorException(
-                    'Expected a single string or identifier for :lang(), got '
-                    .implode(', ', $arguments)
-                );
+                throw new ExpressionErrorException('Expected a single string or identifier for :lang(), got '.implode(', ', $arguments));
             }
         }
 
@@ -174,34 +157,22 @@ public function translateLang(XPathExpr $xpath, FunctionNode $function)
         ));
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateSelected(XPathExpr $xpath)
+    public function translateSelected(XPathExpr $xpath): XPathExpr
     {
         return $xpath->addCondition("(@selected and name(.) = 'option')");
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateInvalid(XPathExpr $xpath)
+    public function translateInvalid(XPathExpr $xpath): XPathExpr
     {
         return $xpath->addCondition('0');
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateHover(XPathExpr $xpath)
+    public function translateHover(XPathExpr $xpath): XPathExpr
     {
         return $xpath->addCondition('0');
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateVisited(XPathExpr $xpath)
+    public function translateVisited(XPathExpr $xpath): XPathExpr
     {
         return $xpath->addCondition('0');
     }
@@ -209,7 +180,7 @@ public function translateVisited(XPathExpr $xpath)
     /**
      * {@inheritdoc}
      */
-    public function getName()
+    public function getName(): string
     {
         return 'html';
     }
diff --git a/vendor/symfony/css-selector/XPath/Extension/NodeExtension.php b/vendor/symfony/css-selector/XPath/Extension/NodeExtension.php
index 715d9611a8..3a26a886d7 100644
--- a/vendor/symfony/css-selector/XPath/Extension/NodeExtension.php
+++ b/vendor/symfony/css-selector/XPath/Extension/NodeExtension.php
@@ -33,21 +33,15 @@ class NodeExtension extends AbstractExtension
 
     private $flags;
 
-    /**
-     * @param int $flags
-     */
-    public function __construct($flags = 0)
+    public function __construct(int $flags = 0)
     {
         $this->flags = $flags;
     }
 
     /**
-     * @param int  $flag
-     * @param bool $on
-     *
      * @return $this
      */
-    public function setFlag($flag, $on)
+    public function setFlag(int $flag, bool $on): self
     {
         if ($on && !$this->hasFlag($flag)) {
             $this->flags += $flag;
@@ -60,12 +54,7 @@ public function setFlag($flag, $on)
         return $this;
     }
 
-    /**
-     * @param int $flag
-     *
-     * @return bool
-     */
-    public function hasFlag($flag)
+    public function hasFlag(int $flag): bool
     {
         return (bool) ($this->flags & $flag);
     }
@@ -73,41 +62,32 @@ public function hasFlag($flag)
     /**
      * {@inheritdoc}
      */
-    public function getNodeTranslators()
+    public function getNodeTranslators(): array
     {
-        return array(
-            'Selector' => array($this, 'translateSelector'),
-            'CombinedSelector' => array($this, 'translateCombinedSelector'),
-            'Negation' => array($this, 'translateNegation'),
-            'Function' => array($this, 'translateFunction'),
-            'Pseudo' => array($this, 'translatePseudo'),
-            'Attribute' => array($this, 'translateAttribute'),
-            'Class' => array($this, 'translateClass'),
-            'Hash' => array($this, 'translateHash'),
-            'Element' => array($this, 'translateElement'),
-        );
+        return [
+            'Selector' => [$this, 'translateSelector'],
+            'CombinedSelector' => [$this, 'translateCombinedSelector'],
+            'Negation' => [$this, 'translateNegation'],
+            'Function' => [$this, 'translateFunction'],
+            'Pseudo' => [$this, 'translatePseudo'],
+            'Attribute' => [$this, 'translateAttribute'],
+            'Class' => [$this, 'translateClass'],
+            'Hash' => [$this, 'translateHash'],
+            'Element' => [$this, 'translateElement'],
+        ];
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateSelector(Node\SelectorNode $node, Translator $translator)
+    public function translateSelector(Node\SelectorNode $node, Translator $translator): XPathExpr
     {
         return $translator->nodeToXPath($node->getTree());
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateCombinedSelector(Node\CombinedSelectorNode $node, Translator $translator)
+    public function translateCombinedSelector(Node\CombinedSelectorNode $node, Translator $translator): XPathExpr
     {
         return $translator->addCombination($node->getCombinator(), $node->getSelector(), $node->getSubSelector());
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateNegation(Node\NegationNode $node, Translator $translator)
+    public function translateNegation(Node\NegationNode $node, Translator $translator): XPathExpr
     {
         $xpath = $translator->nodeToXPath($node->getSelector());
         $subXpath = $translator->nodeToXPath($node->getSubSelector());
@@ -120,30 +100,21 @@ public function translateNegation(Node\NegationNode $node, Translator $translato
         return $xpath->addCondition('0');
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateFunction(Node\FunctionNode $node, Translator $translator)
+    public function translateFunction(Node\FunctionNode $node, Translator $translator): XPathExpr
     {
         $xpath = $translator->nodeToXPath($node->getSelector());
 
         return $translator->addFunction($xpath, $node);
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translatePseudo(Node\PseudoNode $node, Translator $translator)
+    public function translatePseudo(Node\PseudoNode $node, Translator $translator): XPathExpr
     {
         $xpath = $translator->nodeToXPath($node->getSelector());
 
         return $translator->addPseudoClass($xpath, $node->getIdentifier());
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateAttribute(Node\AttributeNode $node, Translator $translator)
+    public function translateAttribute(Node\AttributeNode $node, Translator $translator): XPathExpr
     {
         $name = $node->getAttribute();
         $safe = $this->isSafeName($name);
@@ -168,30 +139,21 @@ public function translateAttribute(Node\AttributeNode $node, Translator $transla
         return $translator->addAttributeMatching($xpath, $node->getOperator(), $attribute, $value);
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateClass(Node\ClassNode $node, Translator $translator)
+    public function translateClass(Node\ClassNode $node, Translator $translator): XPathExpr
     {
         $xpath = $translator->nodeToXPath($node->getSelector());
 
         return $translator->addAttributeMatching($xpath, '~=', '@class', $node->getName());
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateHash(Node\HashNode $node, Translator $translator)
+    public function translateHash(Node\HashNode $node, Translator $translator): XPathExpr
     {
         $xpath = $translator->nodeToXPath($node->getSelector());
 
         return $translator->addAttributeMatching($xpath, '=', '@id', $node->getId());
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateElement(Node\ElementNode $node)
+    public function translateElement(Node\ElementNode $node): XPathExpr
     {
         $element = $node->getElement();
 
@@ -223,19 +185,12 @@ public function translateElement(Node\ElementNode $node)
     /**
      * {@inheritdoc}
      */
-    public function getName()
+    public function getName(): string
     {
         return 'node';
     }
 
-    /**
-     * Tests if given name is safe.
-     *
-     * @param string $name
-     *
-     * @return bool
-     */
-    private function isSafeName($name)
+    private function isSafeName(string $name): bool
     {
         return 0 < preg_match('~^[a-zA-Z_][a-zA-Z0-9_.-]*$~', $name);
     }
diff --git a/vendor/symfony/css-selector/XPath/Extension/PseudoClassExtension.php b/vendor/symfony/css-selector/XPath/Extension/PseudoClassExtension.php
index 378dfb7de1..a50b0486ac 100644
--- a/vendor/symfony/css-selector/XPath/Extension/PseudoClassExtension.php
+++ b/vendor/symfony/css-selector/XPath/Extension/PseudoClassExtension.php
@@ -29,32 +29,26 @@ class PseudoClassExtension extends AbstractExtension
     /**
      * {@inheritdoc}
      */
-    public function getPseudoClassTranslators()
+    public function getPseudoClassTranslators(): array
     {
-        return array(
-            'root' => array($this, 'translateRoot'),
-            'first-child' => array($this, 'translateFirstChild'),
-            'last-child' => array($this, 'translateLastChild'),
-            'first-of-type' => array($this, 'translateFirstOfType'),
-            'last-of-type' => array($this, 'translateLastOfType'),
-            'only-child' => array($this, 'translateOnlyChild'),
-            'only-of-type' => array($this, 'translateOnlyOfType'),
-            'empty' => array($this, 'translateEmpty'),
-        );
+        return [
+            'root' => [$this, 'translateRoot'],
+            'first-child' => [$this, 'translateFirstChild'],
+            'last-child' => [$this, 'translateLastChild'],
+            'first-of-type' => [$this, 'translateFirstOfType'],
+            'last-of-type' => [$this, 'translateLastOfType'],
+            'only-child' => [$this, 'translateOnlyChild'],
+            'only-of-type' => [$this, 'translateOnlyOfType'],
+            'empty' => [$this, 'translateEmpty'],
+        ];
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateRoot(XPathExpr $xpath)
+    public function translateRoot(XPathExpr $xpath): XPathExpr
     {
         return $xpath->addCondition('not(parent::*)');
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateFirstChild(XPathExpr $xpath)
+    public function translateFirstChild(XPathExpr $xpath): XPathExpr
     {
         return $xpath
             ->addStarPrefix()
@@ -62,10 +56,7 @@ public function translateFirstChild(XPathExpr $xpath)
             ->addCondition('position() = 1');
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateLastChild(XPathExpr $xpath)
+    public function translateLastChild(XPathExpr $xpath): XPathExpr
     {
         return $xpath
             ->addStarPrefix()
@@ -74,11 +65,9 @@ public function translateLastChild(XPathExpr $xpath)
     }
 
     /**
-     * @return XPathExpr
-     *
      * @throws ExpressionErrorException
      */
-    public function translateFirstOfType(XPathExpr $xpath)
+    public function translateFirstOfType(XPathExpr $xpath): XPathExpr
     {
         if ('*' === $xpath->getElement()) {
             throw new ExpressionErrorException('"*:first-of-type" is not implemented.');
@@ -90,11 +79,9 @@ public function translateFirstOfType(XPathExpr $xpath)
     }
 
     /**
-     * @return XPathExpr
-     *
      * @throws ExpressionErrorException
      */
-    public function translateLastOfType(XPathExpr $xpath)
+    public function translateLastOfType(XPathExpr $xpath): XPathExpr
     {
         if ('*' === $xpath->getElement()) {
             throw new ExpressionErrorException('"*:last-of-type" is not implemented.');
@@ -105,10 +92,7 @@ public function translateLastOfType(XPathExpr $xpath)
             ->addCondition('position() = last()');
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateOnlyChild(XPathExpr $xpath)
+    public function translateOnlyChild(XPathExpr $xpath): XPathExpr
     {
         return $xpath
             ->addStarPrefix()
@@ -116,24 +100,14 @@ public function translateOnlyChild(XPathExpr $xpath)
             ->addCondition('last() = 1');
     }
 
-    /**
-     * @return XPathExpr
-     *
-     * @throws ExpressionErrorException
-     */
-    public function translateOnlyOfType(XPathExpr $xpath)
+    public function translateOnlyOfType(XPathExpr $xpath): XPathExpr
     {
-        if ('*' === $xpath->getElement()) {
-            throw new ExpressionErrorException('"*:only-of-type" is not implemented.');
-        }
+        $element = $xpath->getElement();
 
-        return $xpath->addCondition('last() = 1');
+        return $xpath->addCondition(sprintf('count(preceding-sibling::%s)=0 and count(following-sibling::%s)=0', $element, $element));
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateEmpty(XPathExpr $xpath)
+    public function translateEmpty(XPathExpr $xpath): XPathExpr
     {
         return $xpath->addCondition('not(*) and not(string-length())');
     }
@@ -141,7 +115,7 @@ public function translateEmpty(XPathExpr $xpath)
     /**
      * {@inheritdoc}
      */
-    public function getName()
+    public function getName(): string
     {
         return 'pseudo-class';
     }
diff --git a/vendor/symfony/css-selector/XPath/Translator.php b/vendor/symfony/css-selector/XPath/Translator.php
index dcf9071ed9..d1b65187ec 100644
--- a/vendor/symfony/css-selector/XPath/Translator.php
+++ b/vendor/symfony/css-selector/XPath/Translator.php
@@ -35,18 +35,18 @@ class Translator implements TranslatorInterface
     /**
      * @var ParserInterface[]
      */
-    private $shortcutParsers = array();
+    private $shortcutParsers = [];
 
     /**
      * @var Extension\ExtensionInterface[]
      */
-    private $extensions = array();
+    private $extensions = [];
 
-    private $nodeTranslators = array();
-    private $combinationTranslators = array();
-    private $functionTranslators = array();
-    private $pseudoClassTranslators = array();
-    private $attributeMatchingTranslators = array();
+    private $nodeTranslators = [];
+    private $combinationTranslators = [];
+    private $functionTranslators = [];
+    private $pseudoClassTranslators = [];
+    private $attributeMatchingTranslators = [];
 
     public function __construct(ParserInterface $parser = null)
     {
@@ -61,12 +61,7 @@ public function __construct(ParserInterface $parser = null)
         ;
     }
 
-    /**
-     * @param string $element
-     *
-     * @return string
-     */
-    public static function getXpathLiteral($element)
+    public static function getXpathLiteral(string $element): string
     {
         if (false === strpos($element, "'")) {
             return "'".$element."'";
@@ -77,7 +72,7 @@ public static function getXpathLiteral($element)
         }
 
         $string = $element;
-        $parts = array();
+        $parts = [];
         while (true) {
             if (false !== $pos = strpos($string, "'")) {
                 $parts[] = sprintf("'%s'", substr($string, 0, $pos));
@@ -89,13 +84,13 @@ public static function getXpathLiteral($element)
             }
         }
 
-        return sprintf('concat(%s)', implode($parts, ', '));
+        return sprintf('concat(%s)', implode(', ', $parts));
     }
 
     /**
      * {@inheritdoc}
      */
-    public function cssToXPath($cssExpr, $prefix = 'descendant-or-self::')
+    public function cssToXPath(string $cssExpr, string $prefix = 'descendant-or-self::'): string
     {
         $selectors = $this->parseSelectors($cssExpr);
 
@@ -114,17 +109,15 @@ public function cssToXPath($cssExpr, $prefix = 'descendant-or-self::')
     /**
      * {@inheritdoc}
      */
-    public function selectorToXPath(SelectorNode $selector, $prefix = 'descendant-or-self::')
+    public function selectorToXPath(SelectorNode $selector, string $prefix = 'descendant-or-self::'): string
     {
         return ($prefix ?: '').$this->nodeToXPath($selector);
     }
 
     /**
-     * Registers an extension.
-     *
      * @return $this
      */
-    public function registerExtension(Extension\ExtensionInterface $extension)
+    public function registerExtension(Extension\ExtensionInterface $extension): self
     {
         $this->extensions[$extension->getName()] = $extension;
 
@@ -138,13 +131,9 @@ public function registerExtension(Extension\ExtensionInterface $extension)
     }
 
     /**
-     * @param string $name
-     *
-     * @return Extension\ExtensionInterface
-     *
      * @throws ExpressionErrorException
      */
-    public function getExtension($name)
+    public function getExtension(string $name): Extension\ExtensionInterface
     {
         if (!isset($this->extensions[$name])) {
             throw new ExpressionErrorException(sprintf('Extension "%s" not registered.', $name));
@@ -154,11 +143,9 @@ public function getExtension($name)
     }
 
     /**
-     * Registers a shortcut parser.
-     *
      * @return $this
      */
-    public function registerParserShortcut(ParserInterface $shortcut)
+    public function registerParserShortcut(ParserInterface $shortcut): self
     {
         $this->shortcutParsers[] = $shortcut;
 
@@ -166,93 +153,69 @@ public function registerParserShortcut(ParserInterface $shortcut)
     }
 
     /**
-     * @return XPathExpr
-     *
      * @throws ExpressionErrorException
      */
-    public function nodeToXPath(NodeInterface $node)
+    public function nodeToXPath(NodeInterface $node): XPathExpr
     {
         if (!isset($this->nodeTranslators[$node->getNodeName()])) {
             throw new ExpressionErrorException(sprintf('Node "%s" not supported.', $node->getNodeName()));
         }
 
-        return \call_user_func($this->nodeTranslators[$node->getNodeName()], $node, $this);
+        return $this->nodeTranslators[$node->getNodeName()]($node, $this);
     }
 
     /**
-     * @param string        $combiner
-     * @param NodeInterface $xpath
-     * @param NodeInterface $combinedXpath
-     *
-     * @return XPathExpr
-     *
      * @throws ExpressionErrorException
      */
-    public function addCombination($combiner, NodeInterface $xpath, NodeInterface $combinedXpath)
+    public function addCombination(string $combiner, NodeInterface $xpath, NodeInterface $combinedXpath): XPathExpr
     {
         if (!isset($this->combinationTranslators[$combiner])) {
             throw new ExpressionErrorException(sprintf('Combiner "%s" not supported.', $combiner));
         }
 
-        return \call_user_func($this->combinationTranslators[$combiner], $this->nodeToXPath($xpath), $this->nodeToXPath($combinedXpath));
+        return $this->combinationTranslators[$combiner]($this->nodeToXPath($xpath), $this->nodeToXPath($combinedXpath));
     }
 
     /**
-     * @return XPathExpr
-     *
      * @throws ExpressionErrorException
      */
-    public function addFunction(XPathExpr $xpath, FunctionNode $function)
+    public function addFunction(XPathExpr $xpath, FunctionNode $function): XPathExpr
     {
         if (!isset($this->functionTranslators[$function->getName()])) {
             throw new ExpressionErrorException(sprintf('Function "%s" not supported.', $function->getName()));
         }
 
-        return \call_user_func($this->functionTranslators[$function->getName()], $xpath, $function);
+        return $this->functionTranslators[$function->getName()]($xpath, $function);
     }
 
     /**
-     * @param XPathExpr $xpath
-     * @param string    $pseudoClass
-     *
-     * @return XPathExpr
-     *
      * @throws ExpressionErrorException
      */
-    public function addPseudoClass(XPathExpr $xpath, $pseudoClass)
+    public function addPseudoClass(XPathExpr $xpath, string $pseudoClass): XPathExpr
     {
         if (!isset($this->pseudoClassTranslators[$pseudoClass])) {
             throw new ExpressionErrorException(sprintf('Pseudo-class "%s" not supported.', $pseudoClass));
         }
 
-        return \call_user_func($this->pseudoClassTranslators[$pseudoClass], $xpath);
+        return $this->pseudoClassTranslators[$pseudoClass]($xpath);
     }
 
     /**
-     * @param XPathExpr $xpath
-     * @param string    $operator
-     * @param string    $attribute
-     * @param string    $value
-     *
-     * @return XPathExpr
-     *
      * @throws ExpressionErrorException
      */
-    public function addAttributeMatching(XPathExpr $xpath, $operator, $attribute, $value)
+    public function addAttributeMatching(XPathExpr $xpath, string $operator, string $attribute, $value): XPathExpr
     {
         if (!isset($this->attributeMatchingTranslators[$operator])) {
             throw new ExpressionErrorException(sprintf('Attribute matcher operator "%s" not supported.', $operator));
         }
 
-        return \call_user_func($this->attributeMatchingTranslators[$operator], $xpath, $attribute, $value);
+        return $this->attributeMatchingTranslators[$operator]($xpath, $attribute, $value);
     }
 
     /**
-     * @param string $css
-     *
      * @return SelectorNode[]
      */
-    private function parseSelectors($css)
+    private function parseSelectors(string $css): array
     {
         foreach ($this->shortcutParsers as $shortcut) {
             $tokens = $shortcut->parse($css);
diff --git a/vendor/symfony/css-selector/XPath/TranslatorInterface.php b/vendor/symfony/css-selector/XPath/TranslatorInterface.php
index 0b5de83d57..c19eefb9c9 100644
--- a/vendor/symfony/css-selector/XPath/TranslatorInterface.php
+++ b/vendor/symfony/css-selector/XPath/TranslatorInterface.php
@@ -27,21 +27,11 @@ interface TranslatorInterface
 {
     /**
      * Translates a CSS selector to an XPath expression.
-     *
-     * @param string $cssExpr
-     * @param string $prefix
-     *
-     * @return string
      */
-    public function cssToXPath($cssExpr, $prefix = 'descendant-or-self::');
+    public function cssToXPath(string $cssExpr, string $prefix = 'descendant-or-self::'): string;
 
     /**
      * Translates a parsed selector node to an XPath expression.
-     *
-     * @param SelectorNode $selector
-     * @param string       $prefix
-     *
-     * @return string
      */
-    public function selectorToXPath(SelectorNode $selector, $prefix = 'descendant-or-self::');
+    public function selectorToXPath(SelectorNode $selector, string $prefix = 'descendant-or-self::'): string;
 }
diff --git a/vendor/symfony/css-selector/XPath/XPathExpr.php b/vendor/symfony/css-selector/XPath/XPathExpr.php
index a1e244c9e4..638cbd0fe0 100644
--- a/vendor/symfony/css-selector/XPath/XPathExpr.php
+++ b/vendor/symfony/css-selector/XPath/XPathExpr.php
@@ -27,13 +27,7 @@ class XPathExpr
     private $element;
     private $condition;
 
-    /**
-     * @param string $path
-     * @param string $element
-     * @param string $condition
-     * @param bool   $starPrefix
-     */
-    public function __construct($path = '', $element = '*', $condition = '', $starPrefix = false)
+    public function __construct(string $path = '', string $element = '*', string $condition = '', bool $starPrefix = false)
     {
         $this->path = $path;
         $this->element = $element;
@@ -44,36 +38,24 @@ public function __construct($path = '', $element = '*', $condition = '', $starPr
         }
     }
 
-    /**
-     * @return string
-     */
-    public function getElement()
+    public function getElement(): string
     {
         return $this->element;
     }
 
-    /**
-     * @return $this
-     */
-    public function addCondition($condition)
+    public function addCondition(string $condition): self
     {
         $this->condition = $this->condition ? sprintf('(%s) and (%s)', $this->condition, $condition) : $condition;
 
         return $this;
     }
 
-    /**
-     * @return string
-     */
-    public function getCondition()
+    public function getCondition(): string
     {
         return $this->condition;
     }
 
-    /**
-     * @return $this
-     */
-    public function addNameTest()
+    public function addNameTest(): self
     {
         if ('*' !== $this->element) {
             $this->addCondition('name() = '.Translator::getXpathLiteral($this->element));
@@ -83,10 +65,7 @@ public function addNameTest()
         return $this;
     }
 
-    /**
-     * @return $this
-     */
-    public function addStarPrefix()
+    public function addStarPrefix(): self
     {
         $this->path .= '*/';
 
@@ -96,12 +75,9 @@ public function addStarPrefix()
     /**
      * Joins another XPathExpr with a combiner.
      *
-     * @param string    $combiner
-     * @param XPathExpr $expr
-     *
      * @return $this
      */
-    public function join($combiner, self $expr)
+    public function join(string $combiner, self $expr): self
     {
         $path = $this->__toString().$combiner;
 
@@ -116,10 +92,7 @@ public function join($combiner, self $expr)
         return $this;
     }
 
-    /**
-     * @return string
-     */
-    public function __toString()
+    public function __toString(): string
     {
         $path = $this->path.$this->element;
         $condition = null === $this->condition || '' === $this->condition ? '' : '['.$this->condition.']';
diff --git a/vendor/symfony/css-selector/composer.json b/vendor/symfony/css-selector/composer.json
index 56ab35b814..667e443ce8 100644
--- a/vendor/symfony/css-selector/composer.json
+++ b/vendor/symfony/css-selector/composer.json
@@ -20,7 +20,7 @@
         }
     ],
     "require": {
-        "php": "^5.5.9|>=7.0.8"
+        "php": ">=7.1.3"
     },
     "autoload": {
         "psr-4": { "Symfony\\Component\\CssSelector\\": "" },
@@ -28,10 +28,5 @@
             "/Tests/"
         ]
     },
-    "minimum-stability": "dev",
-    "extra": {
-        "branch-alias": {
-            "dev-master": "3.4-dev"
-        }
-    }
+    "minimum-stability": "dev"
 }
diff --git a/vendor/symfony/css-selector/phpunit.xml.dist b/vendor/symfony/css-selector/phpunit.xml.dist
deleted file mode 100644
index 65ff1827a3..0000000000
--- a/vendor/symfony/css-selector/phpunit.xml.dist
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd"
-         backupGlobals="false"
-         colors="true"
-         bootstrap="vendor/autoload.php"
-         failOnRisky="true"
-         failOnWarning="true"
->
-    <php>
-        <ini name="error_reporting" value="-1" />
-    </php>
-
-    <testsuites>
-        <testsuite name="Symfony CssSelector Component Test Suite">
-            <directory>./Tests/</directory>
-        </testsuite>
-    </testsuites>
-
-    <filter>
-        <whitelist>
-            <directory>./</directory>
-            <exclude>
-                <directory>./Resources</directory>
-                <directory>./Tests</directory>
-                <directory>./vendor</directory>
-            </exclude>
-        </whitelist>
-    </filter>
-</phpunit>
diff --git a/vendor/symfony/dom-crawler/AbstractUriElement.php b/vendor/symfony/dom-crawler/AbstractUriElement.php
index 192d7922f4..1ef51df59b 100644
--- a/vendor/symfony/dom-crawler/AbstractUriElement.php
+++ b/vendor/symfony/dom-crawler/AbstractUriElement.php
@@ -36,19 +36,21 @@ abstract class AbstractUriElement
     /**
      * @param \DOMElement $node       A \DOMElement instance
      * @param string      $currentUri The URI of the page where the link is embedded (or the base href)
-     * @param string      $method     The method to use for the link (get by default)
+     * @param string      $method     The method to use for the link (GET by default)
      *
      * @throws \InvalidArgumentException if the node is not a link
      */
-    public function __construct(\DOMElement $node, $currentUri, $method = 'GET')
+    public function __construct(\DOMElement $node, string $currentUri = null, ?string $method = 'GET')
     {
-        if (!\in_array(strtolower(substr($currentUri, 0, 4)), array('http', 'file'))) {
-            throw new \InvalidArgumentException(sprintf('Current URI must be an absolute URL ("%s").', $currentUri));
-        }
-
         $this->setNode($node);
         $this->method = $method ? strtoupper($method) : null;
         $this->currentUri = $currentUri;
+
+        $elementUriIsRelative = null === parse_url(trim($this->getRawUri()), PHP_URL_SCHEME);
+        $baseUriIsAbsolute = \in_array(strtolower(substr($this->currentUri, 0, 4)), ['http', 'file']);
+        if ($elementUriIsRelative && !$baseUriIsAbsolute) {
+            throw new \InvalidArgumentException(sprintf('The URL of the element is relative, so you must define its base URI passing an absolute URL to the constructor of the %s class ("%s" was passed).', __CLASS__, $this->currentUri));
+        }
     }
 
     /**
@@ -144,7 +146,7 @@ protected function canonicalizePath($path)
             $path .= '/';
         }
 
-        $output = array();
+        $output = [];
 
         foreach (explode('/', $path) as $segment) {
             if ('..' === $segment) {
@@ -168,24 +170,16 @@ abstract protected function setNode(\DOMElement $node);
 
     /**
      * Removes the query string and the anchor from the given uri.
-     *
-     * @param string $uri The uri to clean
-     *
-     * @return string
      */
-    private function cleanupUri($uri)
+    private function cleanupUri(string $uri): string
     {
         return $this->cleanupQuery($this->cleanupAnchor($uri));
     }
 
     /**
      * Remove the query string from the uri.
-     *
-     * @param string $uri
-     *
-     * @return string
      */
-    private function cleanupQuery($uri)
+    private function cleanupQuery(string $uri): string
     {
         if (false !== $pos = strpos($uri, '?')) {
             return substr($uri, 0, $pos);
@@ -196,12 +190,8 @@ private function cleanupQuery($uri)
 
     /**
      * Remove the anchor from the uri.
-     *
-     * @param string $uri
-     *
-     * @return string
      */
-    private function cleanupAnchor($uri)
+    private function cleanupAnchor(string $uri): string
     {
         if (false !== $pos = strpos($uri, '#')) {
             return substr($uri, 0, $pos);
diff --git a/vendor/symfony/dom-crawler/CHANGELOG.md b/vendor/symfony/dom-crawler/CHANGELOG.md
index e65176f5ac..dc773be06d 100644
--- a/vendor/symfony/dom-crawler/CHANGELOG.md
+++ b/vendor/symfony/dom-crawler/CHANGELOG.md
@@ -1,6 +1,14 @@
 CHANGELOG
 =========
 
+4.2.0
+-----
+
+* The `$currentUri` constructor argument of the `AbstractUriElement`, `Link` and
+  `Image` classes is now optional.
+* The `Crawler::children()` method will have a new `$selector` argument in version 5.0, 
+  not defining it is deprecated.
+
 3.1.0
 -----
 
diff --git a/vendor/symfony/dom-crawler/Crawler.php b/vendor/symfony/dom-crawler/Crawler.php
index 4244700d63..1c99293c0d 100644
--- a/vendor/symfony/dom-crawler/Crawler.php
+++ b/vendor/symfony/dom-crawler/Crawler.php
@@ -30,7 +30,7 @@ class Crawler implements \Countable, \IteratorAggregate
     /**
      * @var array A map of manually registered namespaces
      */
-    private $namespaces = array();
+    private $namespaces = [];
 
     /**
      * @var string The base href value
@@ -45,7 +45,7 @@ class Crawler implements \Countable, \IteratorAggregate
     /**
      * @var \DOMElement[]
      */
-    private $nodes = array();
+    private $nodes = [];
 
     /**
      * Whether the Crawler contains HTML or XML content (used when converting CSS to XPath).
@@ -59,7 +59,7 @@ class Crawler implements \Countable, \IteratorAggregate
      * @param string $uri      The current URI
      * @param string $baseHref The base href value
      */
-    public function __construct($node = null, $uri = null, $baseHref = null)
+    public function __construct($node = null, string $uri = null, string $baseHref = null)
     {
         $this->uri = $uri;
         $this->baseHref = $baseHref ?: $uri;
@@ -92,7 +92,7 @@ public function getBaseHref()
      */
     public function clear()
     {
-        $this->nodes = array();
+        $this->nodes = [];
         $this->document = null;
     }
 
@@ -129,7 +129,7 @@ public function add($node)
      * HTTP 1.1 specification.
      *
      * @param string      $content A string to parse as HTML/XML
-     * @param null|string $type    The content type of the string
+     * @param string|null $type    The content type of the string
      */
     public function addContent($content, $type = null)
     {
@@ -208,7 +208,7 @@ public function addHtmlContent($content, $charset = 'UTF-8')
 
         $this->addDocument($dom);
 
-        $base = $this->filterRelativeXPath('descendant-or-self::base')->extract(array('href'));
+        $base = $this->filterRelativeXPath('descendant-or-self::base')->extract(['href']);
 
         $baseHref = current($base);
         if (\count($base) && !empty($baseHref)) {
@@ -363,7 +363,7 @@ public function eq($position)
      */
     public function each(\Closure $closure)
     {
-        $data = array();
+        $data = [];
         foreach ($this->nodes as $i => $node) {
             $data[] = $closure($this->createSubCrawler($node), $i);
         }
@@ -395,7 +395,7 @@ public function slice($offset = 0, $length = null)
      */
     public function reduce(\Closure $closure)
     {
-        $nodes = array();
+        $nodes = [];
         foreach ($this->nodes as $i => $node) {
             if (false !== $closure($this->createSubCrawler($node), $i)) {
                 $nodes[] = $node;
@@ -487,7 +487,7 @@ public function parents()
         }
 
         $node = $this->getNode(0);
-        $nodes = array();
+        $nodes = [];
 
         while ($node = $node->parentNode) {
             if (XML_ELEMENT_NODE === $node->nodeType) {
@@ -501,19 +501,34 @@ public function parents()
     /**
      * Returns the children nodes of the current selection.
      *
+     * @param string|null $selector An optional CSS selector to filter children
+     *
      * @return self
      *
      * @throws \InvalidArgumentException When current node is empty
+     * @throws \RuntimeException         If the CssSelector Component is not available and $selector is provided
      */
-    public function children()
+    public function children(/* string $selector = null */)
     {
+        if (\func_num_args() < 1 && __CLASS__ !== \get_class($this) && __CLASS__ !== (new \ReflectionMethod($this, __FUNCTION__))->getDeclaringClass()->getName() && !$this instanceof \PHPUnit\Framework\MockObject\MockObject && !$this instanceof \Prophecy\Prophecy\ProphecySubjectInterface) {
+            @trigger_error(sprintf('The "%s()" method will have a new "string $selector = null" argument in version 5.0, not defining it is deprecated since Symfony 4.2.', __METHOD__), E_USER_DEPRECATED);
+        }
+        $selector = 0 < \func_num_args() ? func_get_arg(0) : null;
+
         if (!$this->nodes) {
             throw new \InvalidArgumentException('The current node list is empty.');
         }
 
+        if (null !== $selector) {
+            $converter = $this->createCssSelectorConverter();
+            $xpath = $converter->toXPath($selector, 'child::');
+
+            return $this->filterRelativeXPath($xpath);
+        }
+
         $node = $this->getNode(0)->firstChild;
 
-        return $this->createSubCrawler($node ? $this->sibling($node) : array());
+        return $this->createSubCrawler($node ? $this->sibling($node) : []);
     }
 
     /**
@@ -605,7 +620,7 @@ public function evaluate($xpath)
             throw new \LogicException('Cannot evaluate the expression on an uninitialized crawler.');
         }
 
-        $data = array();
+        $data = [];
         $domxpath = $this->createDOMXPath($this->document, $this->findNamespacePrefixes($xpath));
 
         foreach ($this->nodes as $node) {
@@ -626,7 +641,7 @@ public function evaluate($xpath)
      *
      * Example:
      *
-     * $crawler->filter('h1 a')->extract(array('_text', 'href'));
+     *     $crawler->filter('h1 a')->extract(['_text', 'href']);
      *
      * @param array $attributes An array of attributes
      *
@@ -637,9 +652,9 @@ public function extract($attributes)
         $attributes = (array) $attributes;
         $count = \count($attributes);
 
-        $data = array();
+        $data = [];
         foreach ($this->nodes as $node) {
-            $elements = array();
+            $elements = [];
             foreach ($attributes as $attribute) {
                 if ('_text' === $attribute) {
                     $elements[] = $node->nodeValue;
@@ -691,11 +706,7 @@ public function filterXPath($xpath)
      */
     public function filter($selector)
     {
-        if (!class_exists(CssSelectorConverter::class)) {
-            throw new \RuntimeException('To filter with a CSS selector, install the CssSelector component ("composer require symfony/css-selector"). Or use filterXpath instead.');
-        }
-
-        $converter = new CssSelectorConverter($this->isHtml);
+        $converter = $this->createCssSelectorConverter();
 
         // The CssSelector already prefixes the selector with descendant-or-self::
         return $this->filterRelativeXPath($converter->toXPath($selector));
@@ -710,10 +721,9 @@ public function filter($selector)
      */
     public function selectLink($value)
     {
-        $xpath = sprintf('descendant-or-self::a[contains(concat(\' \', normalize-space(string(.)), \' \'), %s) ', static::xpathLiteral(' '.$value.' ')).
-                            sprintf('or ./img[contains(concat(\' \', normalize-space(string(@alt)), \' \'), %s)]]', static::xpathLiteral(' '.$value.' '));
-
-        return $this->filterRelativeXPath($xpath);
+        return $this->filterRelativeXPath(
+            sprintf('descendant-or-self::a[contains(concat(\' \', normalize-space(string(.)), \' \'), %1$s) or ./img[contains(concat(\' \', normalize-space(string(@alt)), \' \'), %1$s)]]', static::xpathLiteral(' '.$value.' '))
+        );
     }
 
     /**
@@ -739,12 +749,9 @@ public function selectImage($value)
      */
     public function selectButton($value)
     {
-        $translate = 'translate(@type, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz")';
-        $xpath = sprintf('descendant-or-self::input[((contains(%s, "submit") or contains(%1$s, "button")) and contains(concat(\' \', normalize-space(string(@value)), \' \'), %s)) ', $translate, static::xpathLiteral(' '.$value.' ')).
-                         sprintf('or (contains(%s, "image") and contains(concat(\' \', normalize-space(string(@alt)), \' \'), %s)) or @id=%s or @name=%s] ', $translate, static::xpathLiteral(' '.$value.' '), static::xpathLiteral($value), static::xpathLiteral($value)).
-                         sprintf('| descendant-or-self::button[contains(concat(\' \', normalize-space(string(.)), \' \'), %s) or @id=%s or @name=%s]', static::xpathLiteral(' '.$value.' '), static::xpathLiteral($value), static::xpathLiteral($value));
-
-        return $this->filterRelativeXPath($xpath);
+        return $this->filterRelativeXPath(
+            sprintf('descendant-or-self::input[((contains(%1$s, "submit") or contains(%1$s, "button")) and contains(concat(\' \', normalize-space(string(@value)), \' \'), %2$s)) or (contains(%1$s, "image") and contains(concat(\' \', normalize-space(string(@alt)), \' \'), %2$s)) or @id=%3$s or @name=%3$s] | descendant-or-self::button[contains(concat(\' \', normalize-space(string(.)), \' \'), %2$s) or @id=%3$s or @name=%3$s]', 'translate(@type, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz")', static::xpathLiteral(' '.$value.' '), static::xpathLiteral($value))
+        );
     }
 
     /**
@@ -780,7 +787,7 @@ public function link($method = 'get')
      */
     public function links()
     {
-        $links = array();
+        $links = [];
         foreach ($this->nodes as $node) {
             if (!$node instanceof \DOMElement) {
                 throw new \InvalidArgumentException(sprintf('The current node list should contain only DOMElement instances, "%s" found.', \get_class($node)));
@@ -821,7 +828,7 @@ public function image()
      */
     public function images()
     {
-        $images = array();
+        $images = [];
         foreach ($this as $node) {
             if (!$node instanceof \DOMElement) {
                 throw new \InvalidArgumentException(sprintf('The current node list should contain only DOMElement instances, "%s" found.', \get_class($node)));
@@ -889,7 +896,7 @@ public function registerNamespace($prefix, $namespace)
      * Escaped characters are: quotes (") and apostrophe (').
      *
      *  Examples:
-     *  <code>
+     *
      *     echo Crawler::xpathLiteral('foo " bar');
      *     //prints 'foo " bar'
      *
@@ -898,7 +905,7 @@ public function registerNamespace($prefix, $namespace)
      *
      *     echo Crawler::xpathLiteral('a\'b"c');
      *     //prints concat('a', "'", 'b"c')
-     *  </code>
+     *
      *
      * @param string $s String to be escaped
      *
@@ -915,7 +922,7 @@ public static function xpathLiteral($s)
         }
 
         $string = $s;
-        $parts = array();
+        $parts = [];
         while (true) {
             if (false !== $pos = strpos($string, "'")) {
                 $parts[] = sprintf("'%s'", substr($string, 0, $pos));
@@ -958,17 +965,13 @@ private function filterRelativeXPath($xpath)
      *
      * The returned XPath will match elements matching the XPath inside the current crawler
      * when running in the context of a node of the crawler.
-     *
-     * @param string $xpath
-     *
-     * @return string
      */
-    private function relativize($xpath)
+    private function relativize(string $xpath): string
     {
-        $expressions = array();
+        $expressions = [];
 
         // An expression which will never match to replace expressions which cannot match in the crawler
-        // We cannot simply drop
+        // We cannot drop
         $nonMatchingExpression = 'a[name() = "b"]';
 
         $xpathLen = \strlen($xpath);
@@ -1083,10 +1086,11 @@ public function getIterator()
      */
     protected function sibling($node, $siblingDir = 'nextSibling')
     {
-        $nodes = array();
+        $nodes = [];
 
+        $currentNode = $this->getNode(0);
         do {
-            if ($node !== $this->getNode(0) && 1 === $node->nodeType) {
+            if ($node !== $currentNode && XML_ELEMENT_NODE === $node->nodeType) {
                 $nodes[] = $node;
             }
         } while ($node = $node->$siblingDir);
@@ -1095,14 +1099,9 @@ protected function sibling($node, $siblingDir = 'nextSibling')
     }
 
     /**
-     * @param \DOMDocument $document
-     * @param array        $prefixes
-     *
-     * @return \DOMXPath
-     *
      * @throws \InvalidArgumentException
      */
-    private function createDOMXPath(\DOMDocument $document, array $prefixes = array())
+    private function createDOMXPath(\DOMDocument $document, array $prefixes = []): \DOMXPath
     {
         $domxpath = new \DOMXPath($document);
 
@@ -1117,14 +1116,9 @@ private function createDOMXPath(\DOMDocument $document, array $prefixes = array(
     }
 
     /**
-     * @param \DOMXPath $domxpath
-     * @param string    $prefix
-     *
-     * @return string
-     *
      * @throws \InvalidArgumentException
      */
-    private function discoverNamespace(\DOMXPath $domxpath, $prefix)
+    private function discoverNamespace(\DOMXPath $domxpath, string $prefix): ?string
     {
         if (isset($this->namespaces[$prefix])) {
             return $this->namespaces[$prefix];
@@ -1136,20 +1130,17 @@ private function discoverNamespace(\DOMXPath $domxpath, $prefix)
         if ($node = $namespaces->item(0)) {
             return $node->nodeValue;
         }
+
+        return null;
     }
 
-    /**
-     * @param string $xpath
-     *
-     * @return array
-     */
-    private function findNamespacePrefixes($xpath)
+    private function findNamespacePrefixes(string $xpath): array
     {
         if (preg_match_all('/(?P<prefix>[a-z_][a-z_0-9\-\.]*+):[^"\/:]/i', $xpath, $matches)) {
             return array_unique($matches['prefix']);
         }
 
-        return array();
+        return [];
     }
 
     /**
@@ -1168,4 +1159,16 @@ private function createSubCrawler($nodes)
 
         return $crawler;
     }
+
+    /**
+     * @throws \RuntimeException If the CssSelector Component is not available
+     */
+    private function createCssSelectorConverter(): CssSelectorConverter
+    {
+        if (!class_exists(CssSelectorConverter::class)) {
+            throw new \LogicException('To filter with a CSS selector, install the CssSelector component ("composer require symfony/css-selector"). Or use filterXpath instead.');
+        }
+
+        return new CssSelectorConverter($this->isHtml);
+    }
 }
diff --git a/vendor/symfony/dom-crawler/Field/ChoiceFormField.php b/vendor/symfony/dom-crawler/Field/ChoiceFormField.php
index 6f112b5350..8fa1903755 100644
--- a/vendor/symfony/dom-crawler/Field/ChoiceFormField.php
+++ b/vendor/symfony/dom-crawler/Field/ChoiceFormField.php
@@ -45,7 +45,7 @@ class ChoiceFormField extends FormField
     public function hasValue()
     {
         // don't send a value for unchecked checkboxes
-        if (\in_array($this->type, array('checkbox', 'radio')) && null === $this->value) {
+        if (\in_array($this->type, ['checkbox', 'radio']) && null === $this->value) {
             return false;
         }
 
@@ -211,7 +211,7 @@ protected function initialize()
         }
 
         $this->value = null;
-        $this->options = array();
+        $this->options = [];
         $this->multiple = false;
 
         if ('input' == $this->node->nodeName) {
@@ -226,7 +226,7 @@ protected function initialize()
             $this->type = 'select';
             if ($this->node->hasAttribute('multiple')) {
                 $this->multiple = true;
-                $this->value = array();
+                $this->value = [];
                 $this->name = str_replace('[]', '', $this->name);
             }
 
@@ -254,14 +254,10 @@ protected function initialize()
 
     /**
      * Returns option value with associated disabled flag.
-     *
-     * @param \DOMElement $node
-     *
-     * @return array
      */
-    private function buildOptionValue(\DOMElement $node)
+    private function buildOptionValue(\DOMElement $node): array
     {
-        $option = array();
+        $option = [];
 
         $defaultDefaultValue = 'select' === $this->node->nodeName ? '' : 'on';
         $defaultValue = (isset($node->nodeValue) && !empty($node->nodeValue)) ? $node->nodeValue : $defaultDefaultValue;
@@ -301,7 +297,7 @@ public function containsOption($optionValue, $options)
      */
     public function availableOptionValues()
     {
-        $values = array();
+        $values = [];
 
         foreach ($this->options as $option) {
             $values[] = $option['value'];
diff --git a/vendor/symfony/dom-crawler/Field/FileFormField.php b/vendor/symfony/dom-crawler/Field/FileFormField.php
index 3288fc135a..9e21c9c4b9 100644
--- a/vendor/symfony/dom-crawler/Field/FileFormField.php
+++ b/vendor/symfony/dom-crawler/Field/FileFormField.php
@@ -27,12 +27,12 @@ class FileFormField extends FormField
      */
     public function setErrorCode($error)
     {
-        $codes = array(UPLOAD_ERR_INI_SIZE, UPLOAD_ERR_FORM_SIZE, UPLOAD_ERR_PARTIAL, UPLOAD_ERR_NO_FILE, UPLOAD_ERR_NO_TMP_DIR, UPLOAD_ERR_CANT_WRITE, UPLOAD_ERR_EXTENSION);
+        $codes = [UPLOAD_ERR_INI_SIZE, UPLOAD_ERR_FORM_SIZE, UPLOAD_ERR_PARTIAL, UPLOAD_ERR_NO_FILE, UPLOAD_ERR_NO_TMP_DIR, UPLOAD_ERR_CANT_WRITE, UPLOAD_ERR_EXTENSION];
         if (!\in_array($error, $codes)) {
             throw new \InvalidArgumentException(sprintf('The error code %s is not valid.', $error));
         }
 
-        $this->value = array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => $error, 'size' => 0);
+        $this->value = ['name' => '', 'type' => '', 'tmp_name' => '', 'error' => $error, 'size' => 0];
     }
 
     /**
@@ -60,7 +60,7 @@ public function setValue($value)
 
             // copy to a tmp location
             $tmp = sys_get_temp_dir().'/'.strtr(substr(base64_encode(hash('sha256', uniqid(mt_rand(), true), true)), 0, 7), '/', '_');
-            if (array_key_exists('extension', $info)) {
+            if (\array_key_exists('extension', $info)) {
                 $tmp .= '.'.$info['extension'];
             }
             if (is_file($tmp)) {
@@ -75,7 +75,7 @@ public function setValue($value)
             $value = '';
         }
 
-        $this->value = array('name' => $name, 'type' => '', 'tmp_name' => $value, 'error' => $error, 'size' => $size);
+        $this->value = ['name' => $name, 'type' => '', 'tmp_name' => $value, 'error' => $error, 'size' => $size];
     }
 
     /**
diff --git a/vendor/symfony/dom-crawler/Form.php b/vendor/symfony/dom-crawler/Form.php
index 8584e016b0..8bdd364347 100644
--- a/vendor/symfony/dom-crawler/Form.php
+++ b/vendor/symfony/dom-crawler/Form.php
@@ -44,7 +44,7 @@ class Form extends Link implements \ArrayAccess
      *
      * @throws \LogicException if the node is not a button inside a form tag
      */
-    public function __construct(\DOMElement $node, $currentUri, $method = null, $baseHref = null)
+    public function __construct(\DOMElement $node, string $currentUri = null, string $method = null, string $baseHref = null)
     {
         parent::__construct($node, $currentUri, $method);
         $this->baseHref = $baseHref;
@@ -87,7 +87,7 @@ public function setValues(array $values)
      */
     public function getValues()
     {
-        $values = array();
+        $values = [];
         foreach ($this->fields->all() as $name => $field) {
             if ($field->isDisabled()) {
                 continue;
@@ -108,11 +108,11 @@ public function getValues()
      */
     public function getFiles()
     {
-        if (!\in_array($this->getMethod(), array('POST', 'PUT', 'DELETE', 'PATCH'))) {
-            return array();
+        if (!\in_array($this->getMethod(), ['POST', 'PUT', 'DELETE', 'PATCH'])) {
+            return [];
         }
 
-        $files = array();
+        $files = [];
 
         foreach ($this->fields->all() as $name => $field) {
             if ($field->isDisabled()) {
@@ -137,13 +137,13 @@ public function getFiles()
      */
     public function getPhpValues()
     {
-        $values = array();
+        $values = [];
         foreach ($this->getValues() as $name => $value) {
-            $qs = http_build_query(array($name => $value), '', '&');
+            $qs = http_build_query([$name => $value], '', '&');
             if (!empty($qs)) {
                 parse_str($qs, $expandedValue);
                 $varName = substr($name, 0, \strlen(key($expandedValue)));
-                $values = array_replace_recursive($values, array($varName => current($expandedValue)));
+                $values = array_replace_recursive($values, [$varName => current($expandedValue)]);
             }
         }
 
@@ -164,9 +164,9 @@ public function getPhpValues()
      */
     public function getPhpFiles()
     {
-        $values = array();
+        $values = [];
         foreach ($this->getFiles() as $name => $value) {
-            $qs = http_build_query(array($name => $value), '', '&');
+            $qs = http_build_query([$name => $value], '', '&');
             if (!empty($qs)) {
                 parse_str($qs, $expandedValue);
                 $varName = substr($name, 0, \strlen(key($expandedValue)));
@@ -182,7 +182,7 @@ function (&$value, $key) {
 
                 reset($expandedValue);
 
-                $values = array_replace_recursive($values, array($varName => current($expandedValue)));
+                $values = array_replace_recursive($values, [$varName => current($expandedValue)]);
             }
         }
 
@@ -202,9 +202,9 @@ public function getUri()
     {
         $uri = parent::getUri();
 
-        if (!\in_array($this->getMethod(), array('POST', 'PUT', 'DELETE', 'PATCH'))) {
+        if (!\in_array($this->getMethod(), ['POST', 'PUT', 'DELETE', 'PATCH'])) {
             $query = parse_url($uri, PHP_URL_QUERY);
-            $currentParameters = array();
+            $currentParameters = [];
             if ($query) {
                 parse_str($query, $currentParameters);
             }
@@ -379,7 +379,7 @@ public function disableValidation()
     protected function setNode(\DOMElement $node)
     {
         $this->button = $node;
-        if ('button' === $node->nodeName || ('input' === $node->nodeName && \in_array(strtolower($node->getAttribute('type')), array('submit', 'button', 'image')))) {
+        if ('button' === $node->nodeName || ('input' === $node->nodeName && \in_array(strtolower($node->getAttribute('type')), ['submit', 'button', 'image']))) {
             if ($node->hasAttribute('form')) {
                 // if the node has the HTML5-compliant 'form' attribute, use it
                 $formId = $node->getAttribute('form');
@@ -443,14 +443,14 @@ private function initialize()
             // corresponding elements are either descendants or have a matching HTML5 form attribute
             $formId = Crawler::xpathLiteral($this->node->getAttribute('id'));
 
-            $fieldNodes = $xpath->query(sprintf('descendant::input[@form=%s] | descendant::button[@form=%1$s] | descendant::textarea[@form=%1$s] | descendant::select[@form=%1$s] | //form[@id=%1$s]//input[not(@form)] | //form[@id=%1$s]//button[not(@form)] | //form[@id=%1$s]//textarea[not(@form)] | //form[@id=%1$s]//select[not(@form)]', $formId));
+            $fieldNodes = $xpath->query(sprintf('( descendant::input[@form=%s] | descendant::button[@form=%1$s] | descendant::textarea[@form=%1$s] | descendant::select[@form=%1$s] | //form[@id=%1$s]//input[not(@form)] | //form[@id=%1$s]//button[not(@form)] | //form[@id=%1$s]//textarea[not(@form)] | //form[@id=%1$s]//select[not(@form)] )[not(ancestor::template)]', $formId));
             foreach ($fieldNodes as $node) {
                 $this->addField($node);
             }
         } else {
             // do the xpath query with $this->node as the context node, to only find descendant elements
             // however, descendant elements with form attribute are not part of this form
-            $fieldNodes = $xpath->query('descendant::input[not(@form)] | descendant::button[not(@form)] | descendant::textarea[not(@form)] | descendant::select[not(@form)]', $this->node);
+            $fieldNodes = $xpath->query('( descendant::input[not(@form)] | descendant::button[not(@form)] | descendant::textarea[not(@form)] | descendant::select[not(@form)] )[not(ancestor::template)]', $this->node);
             foreach ($fieldNodes as $node) {
                 $this->addField($node);
             }
@@ -480,7 +480,7 @@ private function addField(\DOMElement $node)
             }
         } elseif ('input' == $nodeName && 'file' == strtolower($node->getAttribute('type'))) {
             $this->set(new Field\FileFormField($node));
-        } elseif ('input' == $nodeName && !\in_array(strtolower($node->getAttribute('type')), array('submit', 'button', 'image'))) {
+        } elseif ('input' == $nodeName && !\in_array(strtolower($node->getAttribute('type')), ['submit', 'button', 'image'])) {
             $this->set(new Field\InputFormField($node));
         } elseif ('textarea' == $nodeName) {
             $this->set(new Field\TextareaFormField($node));
diff --git a/vendor/symfony/dom-crawler/FormFieldRegistry.php b/vendor/symfony/dom-crawler/FormFieldRegistry.php
index d2acb15ada..8f432cfbbb 100644
--- a/vendor/symfony/dom-crawler/FormFieldRegistry.php
+++ b/vendor/symfony/dom-crawler/FormFieldRegistry.php
@@ -20,7 +20,7 @@
  */
 class FormFieldRegistry
 {
-    private $fields = array();
+    private $fields = [];
 
     private $base;
 
@@ -34,7 +34,7 @@ public function add(FormField $field)
         $target = &$this->fields;
         while ($segments) {
             if (!\is_array($target)) {
-                $target = array();
+                $target = [];
             }
             $path = array_shift($segments);
             if ('' === $path) {
@@ -57,7 +57,7 @@ public function remove($name)
         $target = &$this->fields;
         while (\count($segments) > 1) {
             $path = array_shift($segments);
-            if (!array_key_exists($path, $target)) {
+            if (!\array_key_exists($path, $target)) {
                 return;
             }
             $target = &$target[$path];
@@ -80,7 +80,7 @@ public function &get($name)
         $target = &$this->fields;
         while ($segments) {
             $path = array_shift($segments);
-            if (!array_key_exists($path, $target)) {
+            if (!\array_key_exists($path, $target)) {
                 throw new \InvalidArgumentException(sprintf('Unreachable field "%s"', $path));
             }
             $target = &$target[$path];
@@ -133,7 +133,7 @@ public function set($name, $value)
     /**
      * Returns the list of field with their value.
      *
-     * @return FormField[] The list of fields as array((string) Fully qualified name => (mixed) value)
+     * @return FormField[] The list of fields as [string] Fully qualified name => (mixed) value)
      */
     public function all()
     {
@@ -167,9 +167,9 @@ private static function create($base, array $values)
      * @param string $base   The name of the base field
      * @param array  $output The initial values
      *
-     * @return array The list of fields as array((string) Fully qualified name => (mixed) value)
+     * @return array The list of fields as [string] Fully qualified name => (mixed) value)
      */
-    private function walk(array $array, $base = '', array &$output = array())
+    private function walk(array $array, $base = '', array &$output = [])
     {
         foreach ($array as $k => $v) {
             $path = empty($base) ? $k : sprintf('%s[%s]', $base, $k);
@@ -186,9 +186,7 @@ private function walk(array $array, $base = '', array &$output = array())
     /**
      * Splits a field name into segments as a web browser would do.
      *
-     * <code>
-     *     getSegments('base[foo][3][]') = array('base', 'foo, '3', '');
-     * </code>
+     *     getSegments('base[foo][3][]') = ['base', 'foo, '3', ''];
      *
      * @param string $name The name of the field
      *
@@ -197,7 +195,7 @@ private function walk(array $array, $base = '', array &$output = array())
     private function getSegments($name)
     {
         if (preg_match('/^(?P<base>[^[]+)(?P<extra>(\[.*)|$)/', $name, $m)) {
-            $segments = array($m['base']);
+            $segments = [$m['base']];
             while (!empty($m['extra'])) {
                 $extra = $m['extra'];
                 if (preg_match('/^\[(?P<segment>.*?)\](?P<extra>.*)$/', $extra, $m)) {
@@ -210,6 +208,6 @@ private function getSegments($name)
             return $segments;
         }
 
-        return array($name);
+        return [$name];
     }
 }
diff --git a/vendor/symfony/dom-crawler/Image.php b/vendor/symfony/dom-crawler/Image.php
index 4d64032580..b1ac5ca2cc 100644
--- a/vendor/symfony/dom-crawler/Image.php
+++ b/vendor/symfony/dom-crawler/Image.php
@@ -16,7 +16,7 @@
  */
 class Image extends AbstractUriElement
 {
-    public function __construct(\DOMElement $node, $currentUri)
+    public function __construct(\DOMElement $node, string $currentUri = null)
     {
         parent::__construct($node, $currentUri, 'GET');
     }
diff --git a/vendor/symfony/dom-crawler/LICENSE b/vendor/symfony/dom-crawler/LICENSE
index 21d7fb9e2f..a677f43763 100644
--- a/vendor/symfony/dom-crawler/LICENSE
+++ b/vendor/symfony/dom-crawler/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2004-2018 Fabien Potencier
+Copyright (c) 2004-2019 Fabien Potencier
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/vendor/symfony/dom-crawler/Tests/CrawlerTest.php b/vendor/symfony/dom-crawler/Tests/CrawlerTest.php
index 9b2d124194..548fd1833f 100644
--- a/vendor/symfony/dom-crawler/Tests/CrawlerTest.php
+++ b/vendor/symfony/dom-crawler/Tests/CrawlerTest.php
@@ -52,7 +52,7 @@ public function testAdd()
         $crawler->add($this->createNodeList());
         $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->add() adds nodes from a \DOMNodeList');
 
-        $list = array();
+        $list = [];
         foreach ($this->createNodeList() as $node) {
             $list[] = $node;
         }
@@ -269,7 +269,7 @@ public function testAddNodeList()
 
     public function testAddNodes()
     {
-        $list = array();
+        $list = [];
         foreach ($this->createNodeList() as $node) {
             $list[] = $node;
         }
@@ -314,7 +314,7 @@ public function testEach()
             return $i.'-'.$node->text();
         });
 
-        $this->assertEquals(array('0-One', '1-Two', '2-Three'), $data, '->each() executes an anonymous function on each node of the list');
+        $this->assertEquals(['0-One', '1-Two', '2-Three'], $data, '->each() executes an anonymous function on each node of the list');
     }
 
     public function testIteration()
@@ -411,11 +411,11 @@ public function testExtract()
     {
         $crawler = $this->createTestCrawler()->filterXPath('//ul[1]/li');
 
-        $this->assertEquals(array('One', 'Two', 'Three'), $crawler->extract('_text'), '->extract() returns an array of extracted data from the node list');
-        $this->assertEquals(array(array('One', 'first'), array('Two', ''), array('Three', '')), $crawler->extract(array('_text', 'class')), '->extract() returns an array of extracted data from the node list');
-        $this->assertEquals(array(array(), array(), array()), $crawler->extract(array()), '->extract() returns empty arrays if the attribute list is empty');
+        $this->assertEquals(['One', 'Two', 'Three'], $crawler->extract('_text'), '->extract() returns an array of extracted data from the node list');
+        $this->assertEquals([['One', 'first'], ['Two', ''], ['Three', '']], $crawler->extract(['_text', 'class']), '->extract() returns an array of extracted data from the node list');
+        $this->assertEquals([[], [], []], $crawler->extract([]), '->extract() returns empty arrays if the attribute list is empty');
 
-        $this->assertEquals(array(), $this->createTestCrawler()->filterXPath('//ol')->extract('_text'), '->extract() returns an empty array if the node list is empty');
+        $this->assertEquals([], $this->createTestCrawler()->filterXPath('//ol')->extract('_text'), '->extract() returns an empty array if the node list is empty');
     }
 
     public function testFilterXpathComplexQueries()
@@ -849,7 +849,7 @@ public function testLinks()
         $links = $crawler->links();
         $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Link', $links[0], '->links() returns an array of Link instances');
 
-        $this->assertEquals(array(), $this->createTestCrawler()->filterXPath('//ol')->links(), '->links() returns an empty array if the node selection is empty');
+        $this->assertEquals([], $this->createTestCrawler()->filterXPath('//ol')->links(), '->links() returns an empty array if the node selection is empty');
     }
 
     public function testImages()
@@ -861,7 +861,7 @@ public function testImages()
         $images = $crawler->images();
         $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Image', $images[0], '->images() returns an array of Image instances');
 
-        $this->assertEquals(array(), $this->createTestCrawler()->filterXPath('//ol')->links(), '->links() returns an empty array if the node selection is empty');
+        $this->assertEquals([], $this->createTestCrawler()->filterXPath('//ol')->links(), '->links() returns an empty array if the node selection is empty');
     }
 
     public function testForm()
@@ -874,9 +874,9 @@ public function testForm()
 
         $this->assertEquals($crawler->form()->getFormNode()->getAttribute('id'), $crawler2->form()->getFormNode()->getAttribute('id'), '->form() works on elements with form attribute');
 
-        $this->assertEquals(array('FooName' => 'FooBar', 'TextName' => 'TextValue', 'FooTextName' => 'FooTextValue'), $crawler->form(array('FooName' => 'FooBar'))->getValues(), '->form() takes an array of values to submit as its first argument');
-        $this->assertEquals(array('FooName' => 'FooValue', 'TextName' => 'TextValue', 'FooTextName' => 'FooTextValue'), $crawler->form()->getValues(), '->getValues() returns correct form values');
-        $this->assertEquals(array('FooBarName' => 'FooBarValue', 'TextName' => 'TextValue', 'FooTextName' => 'FooTextValue'), $crawler2->form()->getValues(), '->getValues() returns correct form values');
+        $this->assertEquals(['FooName' => 'FooBar', 'TextName' => 'TextValue', 'FooTextName' => 'FooTextValue'], $crawler->form(['FooName' => 'FooBar'])->getValues(), '->form() takes an array of values to submit as its first argument');
+        $this->assertEquals(['FooName' => 'FooValue', 'TextName' => 'TextValue', 'FooTextName' => 'FooTextValue'], $crawler->form()->getValues(), '->getValues() returns correct form values');
+        $this->assertEquals(['FooBarName' => 'FooBarValue', 'TextName' => 'TextValue', 'FooTextName' => 'FooTextValue'], $crawler2->form()->getValues(), '->getValues() returns correct form values');
 
         try {
             $this->createTestCrawler()->filterXPath('//ol')->form();
@@ -1004,6 +1004,37 @@ public function testChildren()
         }
     }
 
+    public function testFilteredChildren()
+    {
+        $html = <<<'HTML'
+<!DOCTYPE html>
+<html lang="en">
+<body>
+    <div id="foo">
+        <div class="lorem">
+            <p class="lorem"></p>
+        </div>
+        <div class="lorem">
+            <span class="lorem"></span>
+        </div>
+        <span class="ipsum"></span>
+    </div>
+</body>
+</html>
+HTML;
+
+        $crawler = new Crawler($html);
+        $foo = $crawler->filter('#foo');
+
+        $this->assertEquals(3, $foo->children()->count());
+        $this->assertEquals(2, $foo->children('.lorem')->count());
+        $this->assertEquals(2, $foo->children('div')->count());
+        $this->assertEquals(2, $foo->children('div.lorem')->count());
+        $this->assertEquals(1, $foo->children('span')->count());
+        $this->assertEquals(1, $foo->children('span.ipsum')->count());
+        $this->assertEquals(1, $foo->children('.ipsum')->count());
+    }
+
     public function testParents()
     {
         $crawler = $this->createTestCrawler()->filterXPath('//li[1]');
@@ -1035,13 +1066,13 @@ public function testBaseTag($baseValue, $linkValue, $expectedUri, $currentUri =
 
     public function getBaseTagData()
     {
-        return array(
-            array('http://base.com', 'link', 'http://base.com/link'),
-            array('//base.com', 'link', 'https://base.com/link', 'https://domain.com', '<base> tag can use a schema-less URL'),
-            array('path/', 'link', 'https://domain.com/path/link', 'https://domain.com', '<base> tag can set a path'),
-            array('http://base.com', '#', 'http://base.com#', 'http://domain.com/path/link', '<base> tag does work with links to an anchor'),
-            array('http://base.com', '', 'http://base.com', 'http://domain.com/path/link', '<base> tag does work with empty links'),
-        );
+        return [
+            ['http://base.com', 'link', 'http://base.com/link'],
+            ['//base.com', 'link', 'https://base.com/link', 'https://domain.com', '<base> tag can use a schema-less URL'],
+            ['path/', 'link', 'https://domain.com/path/link', 'https://domain.com', '<base> tag can set a path'],
+            ['http://base.com', '#', 'http://base.com#', 'http://domain.com/path/link', '<base> tag does work with links to an anchor'],
+            ['http://base.com', '', 'http://base.com', 'http://domain.com/path/link', '<base> tag does work with empty links'],
+        ];
     }
 
     /**
@@ -1055,14 +1086,15 @@ public function testBaseTagWithForm($baseValue, $actionValue, $expectedUri, $cur
 
     public function getBaseTagWithFormData()
     {
-        return array(
-            array('https://base.com/', 'link/', 'https://base.com/link/', 'https://base.com/link/', '<base> tag does work with a path and relative form action'),
-            array('/basepath', '/registration', 'http://domain.com/registration', 'http://domain.com/registration', '<base> tag does work with a path and form action'),
-            array('/basepath', '', 'http://domain.com/registration', 'http://domain.com/registration', '<base> tag does work with a path and empty form action'),
-            array('http://base.com/', '/registration', 'http://base.com/registration', 'http://domain.com/registration', '<base> tag does work with a URL and form action'),
-            array('http://base.com', '', 'http://domain.com/path/form', 'http://domain.com/path/form', '<base> tag does work with a URL and an empty form action'),
-            array('http://base.com/path', '/registration', 'http://base.com/registration', 'http://domain.com/path/form', '<base> tag does work with a URL and form action'),
-        );
+        return [
+            ['https://base.com/', 'link/', 'https://base.com/link/', 'https://base.com/link/', '<base> tag does work with a path and relative form action'],
+            ['/basepath', '/registration', 'http://domain.com/registration', 'http://domain.com/registration', '<base> tag does work with a path and form action'],
+            ['/basepath', '', 'http://domain.com/registration', 'http://domain.com/registration', '<base> tag does work with a path and empty form action'],
+            ['http://base.com/', '/registration', 'http://base.com/registration', 'http://domain.com/registration', '<base> tag does work with a URL and form action'],
+            ['http://base.com/', 'http://base.com/registration', 'http://base.com/registration', null, '<base> tag does work with a URL and form action'],
+            ['http://base.com', '', 'http://domain.com/path/form', 'http://domain.com/path/form', '<base> tag does work with a URL and an empty form action'],
+            ['http://base.com/path', '/registration', 'http://base.com/registration', 'http://domain.com/path/form', '<base> tag does work with a URL and form action'],
+        ];
     }
 
     public function testCountOfNestedElements()
@@ -1078,7 +1110,7 @@ public function testEvaluateReturnsTypedResultOfXPathExpressionOnADocumentSubset
 
         $result = $crawler->filterXPath('//form/input')->evaluate('substring-before(@name, "Name")');
 
-        $this->assertSame(array('Text', 'Foo', 'Bar'), $result);
+        $this->assertSame(['Text', 'Foo', 'Bar'], $result);
     }
 
     public function testEvaluateReturnsTypedResultOfNamespacedXPathExpressionOnADocumentSubset()
@@ -1087,7 +1119,7 @@ public function testEvaluateReturnsTypedResultOfNamespacedXPathExpressionOnADocu
 
         $result = $crawler->filterXPath('//yt:accessControl/@action')->evaluate('string(.)');
 
-        $this->assertSame(array('comment', 'videoRespond'), $result);
+        $this->assertSame(['comment', 'videoRespond'], $result);
     }
 
     public function testEvaluateReturnsTypedResultOfNamespacedXPathExpression()
@@ -1097,7 +1129,7 @@ public function testEvaluateReturnsTypedResultOfNamespacedXPathExpression()
 
         $result = $crawler->evaluate('string(//youtube:accessControl/@action)');
 
-        $this->assertSame(array('comment'), $result);
+        $this->assertSame(['comment'], $result);
     }
 
     public function testEvaluateReturnsACrawlerIfXPathExpressionEvaluatesToANode()
@@ -1117,6 +1149,62 @@ public function testEvaluateThrowsAnExceptionIfDocumentIsEmpty()
         (new Crawler())->evaluate('//form/input[1]');
     }
 
+    /**
+     * @group legacy
+     * @expectedDeprecation The "Symfony\Component\DomCrawler\Crawler::children()" method will have a new "string $selector = null" argument in version 5.0, not defining it is deprecated since Symfony 4.2.
+     */
+    public function testInheritedClassCallChildrenWithoutArgument()
+    {
+        $dom = new \DOMDocument();
+        $dom->loadHTML('
+            <html>
+                <body>
+                    <a href="foo">Foo</a>
+                    <a href="/foo">   Fabien\'s Foo   </a>
+                    <a href="/foo">Fabien"s Foo</a>
+                    <a href="/foo">\' Fabien"s Foo</a>
+
+                    <a href="/bar"><img alt="Bar"/></a>
+                    <a href="/bar"><img alt="   Fabien\'s Bar   "/></a>
+                    <a href="/bar"><img alt="Fabien&quot;s Bar"/></a>
+                    <a href="/bar"><img alt="\' Fabien&quot;s Bar"/></a>
+
+                    <a href="?get=param">GetLink</a>
+
+                    <a href="/example">Klausi|Claudiu</a>
+
+                    <form action="foo" id="FooFormId">
+                        <input type="text" value="TextValue" name="TextName" />
+                        <input type="submit" value="FooValue" name="FooName" id="FooId" />
+                        <input type="button" value="BarValue" name="BarName" id="BarId" />
+                        <button value="ButtonValue" name="ButtonName" id="ButtonId" />
+                    </form>
+
+                    <input type="submit" value="FooBarValue" name="FooBarName" form="FooFormId" />
+                    <input type="text" value="FooTextValue" name="FooTextName" form="FooFormId" />
+
+                    <ul class="first">
+                        <li class="first">One</li>
+                        <li>Two</li>
+                        <li>Three</li>
+                    </ul>
+                    <ul>
+                        <li>One Bis</li>
+                        <li>Two Bis</li>
+                        <li>Three Bis</li>
+                    </ul>
+                    <div id="parent">
+                        <div id="child"></div>
+                        <div id="child2" xmlns:foo="http://example.com"></div>
+                    </div>
+                    <div id="sibling"><img /></div>
+                </body>
+            </html>
+        ');
+        $crawlerChild = new ClassThatInheritCrawler($dom);
+        $crawlerChild->children();
+    }
+
     public function createTestCrawler($uri = null)
     {
         $dom = new \DOMDocument();
@@ -1203,3 +1291,11 @@ protected function createNodeList()
         return $domxpath->query('//div');
     }
 }
+
+class ClassThatInheritCrawler extends Crawler
+{
+    public function children()
+    {
+        parent::children();
+    }
+}
diff --git a/vendor/symfony/dom-crawler/Tests/Field/ChoiceFormFieldTest.php b/vendor/symfony/dom-crawler/Tests/Field/ChoiceFormFieldTest.php
index 9592286305..61e776736a 100644
--- a/vendor/symfony/dom-crawler/Tests/Field/ChoiceFormFieldTest.php
+++ b/vendor/symfony/dom-crawler/Tests/Field/ChoiceFormFieldTest.php
@@ -25,7 +25,7 @@ public function testInitialize()
             $this->assertTrue(true, '->initialize() throws a \LogicException if the node is not an input or a select');
         }
 
-        $node = $this->createNode('input', '', array('type' => 'text'));
+        $node = $this->createNode('input', '', ['type' => 'text']);
         try {
             $field = new ChoiceFormField($node);
             $this->fail('->initialize() throws a \LogicException if the node is an input with a type different from checkbox or radio');
@@ -36,12 +36,12 @@ public function testInitialize()
 
     public function testGetType()
     {
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'foo'));
+        $node = $this->createNode('input', '', ['type' => 'radio', 'name' => 'name', 'value' => 'foo']);
         $field = new ChoiceFormField($node);
 
         $this->assertEquals('radio', $field->getType(), '->getType() returns radio for radio buttons');
 
-        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name', 'value' => 'foo'));
+        $node = $this->createNode('input', '', ['type' => 'checkbox', 'name' => 'name', 'value' => 'foo']);
         $field = new ChoiceFormField($node);
 
         $this->assertEquals('checkbox', $field->getType(), '->getType() returns radio for a checkbox');
@@ -54,12 +54,12 @@ public function testGetType()
 
     public function testIsMultiple()
     {
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'foo'));
+        $node = $this->createNode('input', '', ['type' => 'radio', 'name' => 'name', 'value' => 'foo']);
         $field = new ChoiceFormField($node);
 
         $this->assertFalse($field->isMultiple(), '->isMultiple() returns false for radio buttons');
 
-        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name', 'value' => 'foo'));
+        $node = $this->createNode('input', '', ['type' => 'checkbox', 'name' => 'name', 'value' => 'foo']);
         $field = new ChoiceFormField($node);
 
         $this->assertFalse($field->isMultiple(), '->isMultiple() returns false for checkboxes');
@@ -69,12 +69,12 @@ public function testIsMultiple()
 
         $this->assertFalse($field->isMultiple(), '->isMultiple() returns false for selects without the multiple attribute');
 
-        $node = $this->createNode('select', '', array('multiple' => 'multiple'));
+        $node = $this->createNode('select', '', ['multiple' => 'multiple']);
         $field = new ChoiceFormField($node);
 
         $this->assertTrue($field->isMultiple(), '->isMultiple() returns true for selects with the multiple attribute');
 
-        $node = $this->createNode('select', '', array('multiple' => ''));
+        $node = $this->createNode('select', '', ['multiple' => '']);
         $field = new ChoiceFormField($node);
 
         $this->assertTrue($field->isMultiple(), '->isMultiple() returns true for selects with an empty multiple attribute');
@@ -82,14 +82,14 @@ public function testIsMultiple()
 
     public function testSelects()
     {
-        $node = $this->createSelectNode(array('foo' => false, 'bar' => false));
+        $node = $this->createSelectNode(['foo' => false, 'bar' => false]);
         $field = new ChoiceFormField($node);
 
         $this->assertTrue($field->hasValue(), '->hasValue() returns true for selects');
         $this->assertEquals('foo', $field->getValue(), '->getValue() returns the first option if none are selected');
         $this->assertFalse($field->isMultiple(), '->isMultiple() returns false when no multiple attribute is defined');
 
-        $node = $this->createSelectNode(array('foo' => false, 'bar' => true));
+        $node = $this->createSelectNode(['foo' => false, 'bar' => true]);
         $field = new ChoiceFormField($node);
 
         $this->assertEquals('bar', $field->getValue(), '->getValue() returns the selected option');
@@ -105,7 +105,7 @@ public function testSelects()
         }
 
         try {
-            $field->setValue(array('foobar'));
+            $field->setValue(['foobar']);
             $this->fail('->setValue() throws an \InvalidArgumentException if the value is an array');
         } catch (\InvalidArgumentException $e) {
             $this->assertTrue(true, '->setValue() throws an \InvalidArgumentException if the value is an array');
@@ -114,7 +114,7 @@ public function testSelects()
 
     public function testSelectWithEmptyBooleanAttribute()
     {
-        $node = $this->createSelectNode(array('foo' => false, 'bar' => true), array(), '');
+        $node = $this->createSelectNode(['foo' => false, 'bar' => true], [], '');
         $field = new ChoiceFormField($node);
 
         $this->assertEquals('bar', $field->getValue());
@@ -122,7 +122,7 @@ public function testSelectWithEmptyBooleanAttribute()
 
     public function testSelectIsDisabled()
     {
-        $node = $this->createSelectNode(array('foo' => false, 'bar' => true), array('disabled' => 'disabled'));
+        $node = $this->createSelectNode(['foo' => false, 'bar' => true], ['disabled' => 'disabled']);
         $field = new ChoiceFormField($node);
 
         $this->assertTrue($field->isDisabled(), '->isDisabled() returns true for selects with a disabled attribute');
@@ -130,27 +130,27 @@ public function testSelectIsDisabled()
 
     public function testMultipleSelects()
     {
-        $node = $this->createSelectNode(array('foo' => false, 'bar' => false), array('multiple' => 'multiple'));
+        $node = $this->createSelectNode(['foo' => false, 'bar' => false], ['multiple' => 'multiple']);
         $field = new ChoiceFormField($node);
 
-        $this->assertEquals(array(), $field->getValue(), '->setValue() returns an empty array if multiple is true and no option is selected');
+        $this->assertEquals([], $field->getValue(), '->setValue() returns an empty array if multiple is true and no option is selected');
 
         $field->setValue('foo');
-        $this->assertEquals(array('foo'), $field->getValue(), '->setValue() returns an array of options if multiple is true');
+        $this->assertEquals(['foo'], $field->getValue(), '->setValue() returns an array of options if multiple is true');
 
         $field->setValue('bar');
-        $this->assertEquals(array('bar'), $field->getValue(), '->setValue() returns an array of options if multiple is true');
+        $this->assertEquals(['bar'], $field->getValue(), '->setValue() returns an array of options if multiple is true');
 
-        $field->setValue(array('foo', 'bar'));
-        $this->assertEquals(array('foo', 'bar'), $field->getValue(), '->setValue() returns an array of options if multiple is true');
+        $field->setValue(['foo', 'bar']);
+        $this->assertEquals(['foo', 'bar'], $field->getValue(), '->setValue() returns an array of options if multiple is true');
 
-        $node = $this->createSelectNode(array('foo' => true, 'bar' => true), array('multiple' => 'multiple'));
+        $node = $this->createSelectNode(['foo' => true, 'bar' => true], ['multiple' => 'multiple']);
         $field = new ChoiceFormField($node);
 
-        $this->assertEquals(array('foo', 'bar'), $field->getValue(), '->getValue() returns the selected options');
+        $this->assertEquals(['foo', 'bar'], $field->getValue(), '->getValue() returns the selected options');
 
         try {
-            $field->setValue(array('foobar'));
+            $field->setValue(['foobar']);
             $this->fail('->setValue() throws an \InvalidArgumentException if the value is not one of the options');
         } catch (\InvalidArgumentException $e) {
             $this->assertTrue(true, '->setValue() throws an \InvalidArgumentException if the value is not one of the options');
@@ -159,18 +159,18 @@ public function testMultipleSelects()
 
     public function testRadioButtons()
     {
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'foo'));
+        $node = $this->createNode('input', '', ['type' => 'radio', 'name' => 'name', 'value' => 'foo']);
         $field = new ChoiceFormField($node);
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'bar'));
+        $node = $this->createNode('input', '', ['type' => 'radio', 'name' => 'name', 'value' => 'bar']);
         $field->addChoice($node);
 
         $this->assertFalse($field->hasValue(), '->hasValue() returns false when no radio button is selected');
         $this->assertNull($field->getValue(), '->getValue() returns null if no radio button is selected');
         $this->assertFalse($field->isMultiple(), '->isMultiple() returns false for radio buttons');
 
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'foo'));
+        $node = $this->createNode('input', '', ['type' => 'radio', 'name' => 'name', 'value' => 'foo']);
         $field = new ChoiceFormField($node);
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'bar', 'checked' => 'checked'));
+        $node = $this->createNode('input', '', ['type' => 'radio', 'name' => 'name', 'value' => 'bar', 'checked' => 'checked']);
         $field->addChoice($node);
 
         $this->assertTrue($field->hasValue(), '->hasValue() returns true when a radio button is selected');
@@ -189,9 +189,9 @@ public function testRadioButtons()
 
     public function testRadioButtonsWithEmptyBooleanAttribute()
     {
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'foo'));
+        $node = $this->createNode('input', '', ['type' => 'radio', 'name' => 'name', 'value' => 'foo']);
         $field = new ChoiceFormField($node);
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'bar', 'checked' => ''));
+        $node = $this->createNode('input', '', ['type' => 'radio', 'name' => 'name', 'value' => 'bar', 'checked' => '']);
         $field->addChoice($node);
 
         $this->assertTrue($field->hasValue(), '->hasValue() returns true when a radio button is selected');
@@ -200,11 +200,11 @@ public function testRadioButtonsWithEmptyBooleanAttribute()
 
     public function testRadioButtonIsDisabled()
     {
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'foo', 'disabled' => 'disabled'));
+        $node = $this->createNode('input', '', ['type' => 'radio', 'name' => 'name', 'value' => 'foo', 'disabled' => 'disabled']);
         $field = new ChoiceFormField($node);
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'bar'));
+        $node = $this->createNode('input', '', ['type' => 'radio', 'name' => 'name', 'value' => 'bar']);
         $field->addChoice($node);
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'baz', 'disabled' => ''));
+        $node = $this->createNode('input', '', ['type' => 'radio', 'name' => 'name', 'value' => 'baz', 'disabled' => '']);
         $field->addChoice($node);
 
         $field->select('foo');
@@ -222,7 +222,7 @@ public function testRadioButtonIsDisabled()
 
     public function testCheckboxes()
     {
-        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name'));
+        $node = $this->createNode('input', '', ['type' => 'checkbox', 'name' => 'name']);
         $field = new ChoiceFormField($node);
 
         $this->assertFalse($field->hasValue(), '->hasValue() returns false when the checkbox is not checked');
@@ -235,18 +235,18 @@ public function testCheckboxes()
             $this->assertTrue(true, '->initialize() throws a \LogicException for checkboxes');
         }
 
-        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name', 'checked' => 'checked'));
+        $node = $this->createNode('input', '', ['type' => 'checkbox', 'name' => 'name', 'checked' => 'checked']);
         $field = new ChoiceFormField($node);
 
         $this->assertTrue($field->hasValue(), '->hasValue() returns true when the checkbox is checked');
         $this->assertEquals('on', $field->getValue(), '->getValue() returns 1 if the checkbox is checked and has no value attribute');
 
-        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name', 'checked' => 'checked', 'value' => 'foo'));
+        $node = $this->createNode('input', '', ['type' => 'checkbox', 'name' => 'name', 'checked' => 'checked', 'value' => 'foo']);
         $field = new ChoiceFormField($node);
 
         $this->assertEquals('foo', $field->getValue(), '->getValue() returns the value attribute if the checkbox is checked');
 
-        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name', 'checked' => 'checked', 'value' => 'foo'));
+        $node = $this->createNode('input', '', ['type' => 'checkbox', 'name' => 'name', 'checked' => 'checked', 'value' => 'foo']);
         $field = new ChoiceFormField($node);
 
         $field->setValue(false);
@@ -265,7 +265,7 @@ public function testCheckboxes()
 
     public function testCheckboxWithEmptyBooleanAttribute()
     {
-        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name', 'value' => 'foo', 'checked' => ''));
+        $node = $this->createNode('input', '', ['type' => 'checkbox', 'name' => 'name', 'value' => 'foo', 'checked' => '']);
         $field = new ChoiceFormField($node);
 
         $this->assertTrue($field->hasValue(), '->hasValue() returns true when the checkbox is checked');
@@ -274,7 +274,7 @@ public function testCheckboxWithEmptyBooleanAttribute()
 
     public function testTick()
     {
-        $node = $this->createSelectNode(array('foo' => false, 'bar' => false));
+        $node = $this->createSelectNode(['foo' => false, 'bar' => false]);
         $field = new ChoiceFormField($node);
 
         try {
@@ -284,7 +284,7 @@ public function testTick()
             $this->assertTrue(true, '->tick() throws a \LogicException for select boxes');
         }
 
-        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name'));
+        $node = $this->createNode('input', '', ['type' => 'checkbox', 'name' => 'name']);
         $field = new ChoiceFormField($node);
         $field->tick();
         $this->assertEquals('on', $field->getValue(), '->tick() ticks checkboxes');
@@ -292,7 +292,7 @@ public function testTick()
 
     public function testUntick()
     {
-        $node = $this->createSelectNode(array('foo' => false, 'bar' => false));
+        $node = $this->createSelectNode(['foo' => false, 'bar' => false]);
         $field = new ChoiceFormField($node);
 
         try {
@@ -302,7 +302,7 @@ public function testUntick()
             $this->assertTrue(true, '->untick() throws a \LogicException for select boxes');
         }
 
-        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name', 'checked' => 'checked'));
+        $node = $this->createNode('input', '', ['type' => 'checkbox', 'name' => 'name', 'checked' => 'checked']);
         $field = new ChoiceFormField($node);
         $field->untick();
         $this->assertNull($field->getValue(), '->untick() unticks checkboxes');
@@ -310,14 +310,14 @@ public function testUntick()
 
     public function testSelect()
     {
-        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name', 'checked' => 'checked'));
+        $node = $this->createNode('input', '', ['type' => 'checkbox', 'name' => 'name', 'checked' => 'checked']);
         $field = new ChoiceFormField($node);
         $field->select(true);
         $this->assertEquals('on', $field->getValue(), '->select() changes the value of the field');
         $field->select(false);
         $this->assertNull($field->getValue(), '->select() changes the value of the field');
 
-        $node = $this->createSelectNode(array('foo' => false, 'bar' => false));
+        $node = $this->createSelectNode(['foo' => false, 'bar' => false]);
         $field = new ChoiceFormField($node);
         $field->select('foo');
         $this->assertEquals('foo', $field->getValue(), '->select() changes the selected option');
@@ -325,11 +325,11 @@ public function testSelect()
 
     public function testOptionWithNoValue()
     {
-        $node = $this->createSelectNodeWithEmptyOption(array('foo' => false, 'bar' => false));
+        $node = $this->createSelectNodeWithEmptyOption(['foo' => false, 'bar' => false]);
         $field = new ChoiceFormField($node);
         $this->assertEquals('foo', $field->getValue());
 
-        $node = $this->createSelectNodeWithEmptyOption(array('foo' => false, 'bar' => true));
+        $node = $this->createSelectNodeWithEmptyOption(['foo' => false, 'bar' => true]);
         $field = new ChoiceFormField($node);
         $this->assertEquals('bar', $field->getValue());
         $field->select('foo');
@@ -338,28 +338,28 @@ public function testOptionWithNoValue()
 
     public function testDisableValidation()
     {
-        $node = $this->createSelectNode(array('foo' => false, 'bar' => false));
+        $node = $this->createSelectNode(['foo' => false, 'bar' => false]);
         $field = new ChoiceFormField($node);
         $field->disableValidation();
         $field->setValue('foobar');
         $this->assertEquals('foobar', $field->getValue(), '->disableValidation() allows to set a value which is not in the selected options.');
 
-        $node = $this->createSelectNode(array('foo' => false, 'bar' => false), array('multiple' => 'multiple'));
+        $node = $this->createSelectNode(['foo' => false, 'bar' => false], ['multiple' => 'multiple']);
         $field = new ChoiceFormField($node);
         $field->disableValidation();
-        $field->setValue(array('foobar'));
-        $this->assertEquals(array('foobar'), $field->getValue(), '->disableValidation() allows to set a value which is not in the selected options.');
+        $field->setValue(['foobar']);
+        $this->assertEquals(['foobar'], $field->getValue(), '->disableValidation() allows to set a value which is not in the selected options.');
     }
 
     public function testSelectWithEmptyValue()
     {
-        $node = $this->createSelectNodeWithEmptyOption(array('' => true, 'Female' => false, 'Male' => false));
+        $node = $this->createSelectNodeWithEmptyOption(['' => true, 'Female' => false, 'Male' => false]);
         $field = new ChoiceFormField($node);
 
         $this->assertSame('', $field->getValue());
     }
 
-    protected function createSelectNode($options, $attributes = array(), $selectedAttrText = 'selected')
+    protected function createSelectNode($options, $attributes = [], $selectedAttrText = 'selected')
     {
         $document = new \DOMDocument();
         $node = $document->createElement('select');
@@ -381,7 +381,7 @@ protected function createSelectNode($options, $attributes = array(), $selectedAt
         return $node;
     }
 
-    protected function createSelectNodeWithEmptyOption($options, $attributes = array())
+    protected function createSelectNodeWithEmptyOption($options, $attributes = [])
     {
         $document = new \DOMDocument();
         $node = $document->createElement('select');
diff --git a/vendor/symfony/dom-crawler/Tests/Field/FileFormFieldTest.php b/vendor/symfony/dom-crawler/Tests/Field/FileFormFieldTest.php
index 3ce49a46ef..03ab383cbb 100644
--- a/vendor/symfony/dom-crawler/Tests/Field/FileFormFieldTest.php
+++ b/vendor/symfony/dom-crawler/Tests/Field/FileFormFieldTest.php
@@ -17,10 +17,10 @@ class FileFormFieldTest extends FormFieldTestCase
 {
     public function testInitialize()
     {
-        $node = $this->createNode('input', '', array('type' => 'file'));
+        $node = $this->createNode('input', '', ['type' => 'file']);
         $field = new FileFormField($node);
 
-        $this->assertEquals(array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => UPLOAD_ERR_NO_FILE, 'size' => 0), $field->getValue(), '->initialize() sets the value of the field to no file uploaded');
+        $this->assertEquals(['name' => '', 'type' => '', 'tmp_name' => '', 'error' => UPLOAD_ERR_NO_FILE, 'size' => 0], $field->getValue(), '->initialize() sets the value of the field to no file uploaded');
 
         $node = $this->createNode('textarea', '');
         try {
@@ -30,7 +30,7 @@ public function testInitialize()
             $this->assertTrue(true, '->initialize() throws a \LogicException if the node is not an input field');
         }
 
-        $node = $this->createNode('input', '', array('type' => 'text'));
+        $node = $this->createNode('input', '', ['type' => 'text']);
         try {
             $field = new FileFormField($node);
             $this->fail('->initialize() throws a \LogicException if the node is not a file input field');
@@ -44,11 +44,11 @@ public function testInitialize()
      */
     public function testSetValue($method)
     {
-        $node = $this->createNode('input', '', array('type' => 'file'));
+        $node = $this->createNode('input', '', ['type' => 'file']);
         $field = new FileFormField($node);
 
         $field->$method(null);
-        $this->assertEquals(array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => UPLOAD_ERR_NO_FILE, 'size' => 0), $field->getValue(), "->$method() clears the uploaded file if the value is null");
+        $this->assertEquals(['name' => '', 'type' => '', 'tmp_name' => '', 'error' => UPLOAD_ERR_NO_FILE, 'size' => 0], $field->getValue(), "->$method() clears the uploaded file if the value is null");
 
         $field->$method(__FILE__);
         $value = $field->getValue();
@@ -80,15 +80,15 @@ public function testSetValue($method)
 
     public function getSetValueMethods()
     {
-        return array(
-            array('setValue'),
-            array('upload'),
-        );
+        return [
+            ['setValue'],
+            ['upload'],
+        ];
     }
 
     public function testSetErrorCode()
     {
-        $node = $this->createNode('input', '', array('type' => 'file'));
+        $node = $this->createNode('input', '', ['type' => 'file']);
         $field = new FileFormField($node);
 
         $field->setErrorCode(UPLOAD_ERR_FORM_SIZE);
@@ -105,7 +105,7 @@ public function testSetErrorCode()
 
     public function testSetRawFilePath()
     {
-        $node = $this->createNode('input', '', array('type' => 'file'));
+        $node = $this->createNode('input', '', ['type' => 'file']);
         $field = new FileFormField($node);
         $field->setFilePath(__FILE__);
 
diff --git a/vendor/symfony/dom-crawler/Tests/Field/FormFieldTest.php b/vendor/symfony/dom-crawler/Tests/Field/FormFieldTest.php
index d150eb3ac7..e2daa03987 100644
--- a/vendor/symfony/dom-crawler/Tests/Field/FormFieldTest.php
+++ b/vendor/symfony/dom-crawler/Tests/Field/FormFieldTest.php
@@ -17,7 +17,7 @@ class FormFieldTest extends FormFieldTestCase
 {
     public function testGetName()
     {
-        $node = $this->createNode('input', '', array('type' => 'text', 'name' => 'name', 'value' => 'value'));
+        $node = $this->createNode('input', '', ['type' => 'text', 'name' => 'name', 'value' => 'value']);
         $field = new InputFormField($node);
 
         $this->assertEquals('name', $field->getName(), '->getName() returns the name of the field');
@@ -25,7 +25,7 @@ public function testGetName()
 
     public function testGetSetHasValue()
     {
-        $node = $this->createNode('input', '', array('type' => 'text', 'name' => 'name', 'value' => 'value'));
+        $node = $this->createNode('input', '', ['type' => 'text', 'name' => 'name', 'value' => 'value']);
         $field = new InputFormField($node);
 
         $this->assertEquals('value', $field->getValue(), '->getValue() returns the value of the field');
diff --git a/vendor/symfony/dom-crawler/Tests/Field/FormFieldTestCase.php b/vendor/symfony/dom-crawler/Tests/Field/FormFieldTestCase.php
index 2059d049c1..5ca19d9541 100644
--- a/vendor/symfony/dom-crawler/Tests/Field/FormFieldTestCase.php
+++ b/vendor/symfony/dom-crawler/Tests/Field/FormFieldTestCase.php
@@ -15,7 +15,7 @@
 
 class FormFieldTestCase extends TestCase
 {
-    protected function createNode($tag, $value, $attributes = array())
+    protected function createNode($tag, $value, $attributes = [])
     {
         $document = new \DOMDocument();
         $node = $document->createElement($tag, $value);
diff --git a/vendor/symfony/dom-crawler/Tests/Field/InputFormFieldTest.php b/vendor/symfony/dom-crawler/Tests/Field/InputFormFieldTest.php
index 193d301de6..5758f1b7bb 100644
--- a/vendor/symfony/dom-crawler/Tests/Field/InputFormFieldTest.php
+++ b/vendor/symfony/dom-crawler/Tests/Field/InputFormFieldTest.php
@@ -17,7 +17,7 @@ class InputFormFieldTest extends FormFieldTestCase
 {
     public function testInitialize()
     {
-        $node = $this->createNode('input', '', array('type' => 'text', 'name' => 'name', 'value' => 'value'));
+        $node = $this->createNode('input', '', ['type' => 'text', 'name' => 'name', 'value' => 'value']);
         $field = new InputFormField($node);
 
         $this->assertEquals('value', $field->getValue(), '->initialize() sets the value of the field to the value attribute value');
@@ -30,7 +30,7 @@ public function testInitialize()
             $this->assertTrue(true, '->initialize() throws a \LogicException if the node is not an input');
         }
 
-        $node = $this->createNode('input', '', array('type' => 'checkbox'));
+        $node = $this->createNode('input', '', ['type' => 'checkbox']);
         try {
             $field = new InputFormField($node);
             $this->fail('->initialize() throws a \LogicException if the node is a checkbox');
@@ -38,7 +38,7 @@ public function testInitialize()
             $this->assertTrue(true, '->initialize() throws a \LogicException if the node is a checkbox');
         }
 
-        $node = $this->createNode('input', '', array('type' => 'file'));
+        $node = $this->createNode('input', '', ['type' => 'file']);
         try {
             $field = new InputFormField($node);
             $this->fail('->initialize() throws a \LogicException if the node is a file');
diff --git a/vendor/symfony/dom-crawler/Tests/FormTest.php b/vendor/symfony/dom-crawler/Tests/FormTest.php
index 2f653d6c58..2c0ee22c1f 100644
--- a/vendor/symfony/dom-crawler/Tests/FormTest.php
+++ b/vendor/symfony/dom-crawler/Tests/FormTest.php
@@ -129,18 +129,18 @@ public function testConstructorHandlesFormValues()
         $form2 = new Form($buttonElements->item(0), 'http://example.com');
 
         // Tests if form values are correctly assigned to forms
-        $values1 = array(
-            'apples' => array('1', '2'),
+        $values1 = [
+            'apples' => ['1', '2'],
             'form_name' => 'form-1',
             'button_1' => 'Capture fields',
             'outer_field' => 'success',
-        );
-        $values2 = array(
-            'oranges' => array('1', '2', '3'),
+        ];
+        $values2 = [
+            'oranges' => ['1', '2', '3'],
             'form_name' => 'form_2',
             'button_2' => '',
-            'app_frontend_form_type_contact_form_type' => array('contactType' => '', 'firstName' => 'John'),
-        );
+            'app_frontend_form_type_contact_form_type' => ['contactType' => '', 'firstName' => 'John'],
+        ];
 
         $this->assertEquals($values1, $form1->getPhpValues(), 'HTML5-compliant form attribute handled incorrectly');
         $this->assertEquals($values2, $form2->getPhpValues(), 'HTML5-compliant form attribute handled incorrectly');
@@ -161,7 +161,7 @@ public function testMultiValuedFields()
 
         $this->assertEquals(
             array_keys($form->all()),
-            array('foo[2]', 'foo[3]', 'bar[foo][0]', 'bar[foo][foobar]')
+            ['foo[2]', 'foo[3]', 'bar[foo][0]', 'bar[foo][foobar]']
         );
 
         $this->assertEquals($form->get('foo[2]')->getValue(), 'foo');
@@ -175,7 +175,7 @@ public function testMultiValuedFields()
         $this->assertEquals($form->get('foo[2]')->getValue(), 'bar');
         $this->assertEquals($form->get('foo[3]')->getValue(), 'bar');
 
-        $form['bar'] = array('foo' => array('0' => 'bar', 'foobar' => 'foobar'));
+        $form['bar'] = ['foo' => ['0' => 'bar', 'foobar' => 'foobar']];
 
         $this->assertEquals($form->get('bar[foo][0]')->getValue(), 'bar');
         $this->assertEquals($form->get('bar[foo][foobar]')->getValue(), 'foobar');
@@ -193,7 +193,7 @@ public function testConstructor($message, $form, $values)
                 function ($field) {
                     $class = \get_class($field);
 
-                    return array(substr($class, strrpos($class, '\\') + 1), $field->getValue());
+                    return [substr($class, strrpos($class, '\\') + 1), $field->getValue()];
                 },
                 $form->all()
             ),
@@ -203,84 +203,84 @@ function ($field) {
 
     public function provideInitializeValues()
     {
-        return array(
-            array(
+        return [
+            [
                 'does not take into account input fields without a name attribute',
                 '<input type="text" value="foo" />
                  <input type="submit" />',
-                array(),
-            ),
-            array(
+                [],
+            ],
+            [
                 'does not take into account input fields with an empty name attribute value',
                 '<input type="text" name="" value="foo" />
                  <input type="submit" />',
-                array(),
-            ),
-            array(
+                [],
+            ],
+            [
                 'takes into account disabled input fields',
                 '<input type="text" name="foo" value="foo" disabled="disabled" />
                  <input type="submit" />',
-                array('foo' => array('InputFormField', 'foo')),
-            ),
-            array(
+                ['foo' => ['InputFormField', 'foo']],
+            ],
+            [
                 'appends the submitted button value',
                 '<input type="submit" name="bar" value="bar" />',
-                array('bar' => array('InputFormField', 'bar')),
-            ),
-            array(
+                ['bar' => ['InputFormField', 'bar']],
+            ],
+            [
                 'appends the submitted button value for Button element',
                 '<button type="submit" name="bar" value="bar">Bar</button>',
-                array('bar' => array('InputFormField', 'bar')),
-            ),
-            array(
+                ['bar' => ['InputFormField', 'bar']],
+            ],
+            [
                 'appends the submitted button value but not other submit buttons',
                 '<input type="submit" name="bar" value="bar" />
                  <input type="submit" name="foobar" value="foobar" />',
-                 array('foobar' => array('InputFormField', 'foobar')),
-            ),
-            array(
+                 ['foobar' => ['InputFormField', 'foobar']],
+            ],
+            [
                 'turns an image input into x and y fields',
                 '<input type="image" name="bar" />',
-                array('bar.x' => array('InputFormField', '0'), 'bar.y' => array('InputFormField', '0')),
-            ),
-            array(
+                ['bar.x' => ['InputFormField', '0'], 'bar.y' => ['InputFormField', '0']],
+            ],
+            [
                 'returns textareas',
                 '<textarea name="foo">foo</textarea>
                  <input type="submit" />',
-                 array('foo' => array('TextareaFormField', 'foo')),
-            ),
-            array(
+                 ['foo' => ['TextareaFormField', 'foo']],
+            ],
+            [
                 'returns inputs',
                 '<input type="text" name="foo" value="foo" />
                  <input type="submit" />',
-                 array('foo' => array('InputFormField', 'foo')),
-            ),
-            array(
+                 ['foo' => ['InputFormField', 'foo']],
+            ],
+            [
                 'returns checkboxes',
                 '<input type="checkbox" name="foo" value="foo" checked="checked" />
                  <input type="submit" />',
-                 array('foo' => array('ChoiceFormField', 'foo')),
-            ),
-            array(
+                 ['foo' => ['ChoiceFormField', 'foo']],
+            ],
+            [
                 'returns not-checked checkboxes',
                 '<input type="checkbox" name="foo" value="foo" />
                  <input type="submit" />',
-                 array('foo' => array('ChoiceFormField', false)),
-            ),
-            array(
+                 ['foo' => ['ChoiceFormField', false]],
+            ],
+            [
                 'returns radio buttons',
                 '<input type="radio" name="foo" value="foo" />
                  <input type="radio" name="foo" value="bar" checked="bar" />
                  <input type="submit" />',
-                 array('foo' => array('ChoiceFormField', 'bar')),
-            ),
-            array(
+                 ['foo' => ['ChoiceFormField', 'bar']],
+            ],
+            [
                 'returns file inputs',
                 '<input type="file" name="foo" />
                  <input type="submit" />',
-                 array('foo' => array('FileFormField', array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0))),
-            ),
-        );
+                 ['foo' => ['FileFormField', ['name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0]]],
+            ],
+        ];
     }
 
     public function testGetFormNode()
@@ -390,78 +390,86 @@ public function testOffsetExists()
     public function testGetValues()
     {
         $form = $this->createForm('<form><input type="text" name="foo[bar]" value="foo" /><input type="text" name="bar" value="bar" /><select multiple="multiple" name="baz[]"></select><input type="submit" /></form>');
-        $this->assertEquals(array('foo[bar]' => 'foo', 'bar' => 'bar', 'baz' => array()), $form->getValues(), '->getValues() returns all form field values');
+        $this->assertEquals(['foo[bar]' => 'foo', 'bar' => 'bar', 'baz' => []], $form->getValues(), '->getValues() returns all form field values');
 
         $form = $this->createForm('<form><input type="checkbox" name="foo" value="foo" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array('bar' => 'bar'), $form->getValues(), '->getValues() does not include not-checked checkboxes');
+        $this->assertEquals(['bar' => 'bar'], $form->getValues(), '->getValues() does not include not-checked checkboxes');
 
         $form = $this->createForm('<form><input type="file" name="foo" value="foo" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array('bar' => 'bar'), $form->getValues(), '->getValues() does not include file input fields');
+        $this->assertEquals(['bar' => 'bar'], $form->getValues(), '->getValues() does not include file input fields');
 
         $form = $this->createForm('<form><input type="text" name="foo" value="foo" disabled="disabled" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array('bar' => 'bar'), $form->getValues(), '->getValues() does not include disabled fields');
+        $this->assertEquals(['bar' => 'bar'], $form->getValues(), '->getValues() does not include disabled fields');
+
+        $form = $this->createForm('<form><template><input type="text" name="foo" value="foo" /></template><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
+        $this->assertEquals(['bar' => 'bar'], $form->getValues(), '->getValues() does not include template fields');
+        $this->assertFalse($form->has('foo'));
     }
 
     public function testSetValues()
     {
         $form = $this->createForm('<form><input type="checkbox" name="foo" value="foo" checked="checked" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-        $form->setValues(array('foo' => false, 'bar' => 'foo'));
-        $this->assertEquals(array('bar' => 'foo'), $form->getValues(), '->setValues() sets the values of fields');
+        $form->setValues(['foo' => false, 'bar' => 'foo']);
+        $this->assertEquals(['bar' => 'foo'], $form->getValues(), '->setValues() sets the values of fields');
     }
 
     public function testMultiselectSetValues()
     {
         $form = $this->createForm('<form><select multiple="multiple" name="multi"><option value="foo">foo</option><option value="bar">bar</option></select><input type="submit" /></form>');
-        $form->setValues(array('multi' => array('foo', 'bar')));
-        $this->assertEquals(array('multi' => array('foo', 'bar')), $form->getValues(), '->setValue() sets the values of select');
+        $form->setValues(['multi' => ['foo', 'bar']]);
+        $this->assertEquals(['multi' => ['foo', 'bar']], $form->getValues(), '->setValue() sets the values of select');
     }
 
     public function testGetPhpValues()
     {
         $form = $this->createForm('<form><input type="text" name="foo[bar]" value="foo" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array('foo' => array('bar' => 'foo'), 'bar' => 'bar'), $form->getPhpValues(), '->getPhpValues() converts keys with [] to arrays');
+        $this->assertEquals(['foo' => ['bar' => 'foo'], 'bar' => 'bar'], $form->getPhpValues(), '->getPhpValues() converts keys with [] to arrays');
 
         $form = $this->createForm('<form><input type="text" name="fo.o[ba.r]" value="foo" /><input type="text" name="ba r" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array('fo.o' => array('ba.r' => 'foo'), 'ba r' => 'bar'), $form->getPhpValues(), '->getPhpValues() preserves periods and spaces in names');
+        $this->assertEquals(['fo.o' => ['ba.r' => 'foo'], 'ba r' => 'bar'], $form->getPhpValues(), '->getPhpValues() preserves periods and spaces in names');
 
         $form = $this->createForm('<form><input type="text" name="fo.o[ba.r][]" value="foo" /><input type="text" name="fo.o[ba.r][ba.z]" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array('fo.o' => array('ba.r' => array('foo', 'ba.z' => 'bar'))), $form->getPhpValues(), '->getPhpValues() preserves periods and spaces in names recursively');
+        $this->assertEquals(['fo.o' => ['ba.r' => ['foo', 'ba.z' => 'bar']]], $form->getPhpValues(), '->getPhpValues() preserves periods and spaces in names recursively');
 
         $form = $this->createForm('<form><input type="text" name="foo[bar]" value="foo" /><input type="text" name="bar" value="bar" /><select multiple="multiple" name="baz[]"></select><input type="submit" /></form>');
-        $this->assertEquals(array('foo' => array('bar' => 'foo'), 'bar' => 'bar'), $form->getPhpValues(), "->getPhpValues() doesn't return empty values");
+        $this->assertEquals(['foo' => ['bar' => 'foo'], 'bar' => 'bar'], $form->getPhpValues(), "->getPhpValues() doesn't return empty values");
     }
 
     public function testGetFiles()
     {
         $form = $this->createForm('<form><input type="file" name="foo[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array(), $form->getFiles(), '->getFiles() returns an empty array if method is get');
+        $this->assertEquals([], $form->getFiles(), '->getFiles() returns an empty array if method is get');
 
         $form = $this->createForm('<form method="post"><input type="file" name="foo[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array('foo[bar]' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0)), $form->getFiles(), '->getFiles() only returns file fields for POST');
+        $this->assertEquals(['foo[bar]' => ['name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0]], $form->getFiles(), '->getFiles() only returns file fields for POST');
 
         $form = $this->createForm('<form method="post"><input type="file" name="foo[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>', 'put');
-        $this->assertEquals(array('foo[bar]' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0)), $form->getFiles(), '->getFiles() only returns file fields for PUT');
+        $this->assertEquals(['foo[bar]' => ['name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0]], $form->getFiles(), '->getFiles() only returns file fields for PUT');
 
         $form = $this->createForm('<form method="post"><input type="file" name="foo[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>', 'delete');
-        $this->assertEquals(array('foo[bar]' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0)), $form->getFiles(), '->getFiles() only returns file fields for DELETE');
+        $this->assertEquals(['foo[bar]' => ['name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0]], $form->getFiles(), '->getFiles() only returns file fields for DELETE');
 
         $form = $this->createForm('<form method="post"><input type="file" name="foo[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>', 'patch');
-        $this->assertEquals(array('foo[bar]' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0)), $form->getFiles(), '->getFiles() only returns file fields for PATCH');
+        $this->assertEquals(['foo[bar]' => ['name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0]], $form->getFiles(), '->getFiles() only returns file fields for PATCH');
 
         $form = $this->createForm('<form method="post"><input type="file" name="foo[bar]" disabled="disabled" /><input type="submit" /></form>');
-        $this->assertEquals(array(), $form->getFiles(), '->getFiles() does not include disabled file fields');
+        $this->assertEquals([], $form->getFiles(), '->getFiles() does not include disabled file fields');
+
+        $form = $this->createForm('<form method="post"><template><input type="file" name="foo"/></template><input type="text" name="bar" value="bar"/><input type="submit"/></form>');
+        $this->assertEquals([], $form->getFiles(), '->getFiles() does not include template file fields');
+        $this->assertFalse($form->has('foo'));
     }
 
     public function testGetPhpFiles()
     {
         $form = $this->createForm('<form method="post"><input type="file" name="foo[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array('foo' => array('bar' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0))), $form->getPhpFiles(), '->getPhpFiles() converts keys with [] to arrays');
+        $this->assertEquals(['foo' => ['bar' => ['name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0]]], $form->getPhpFiles(), '->getPhpFiles() converts keys with [] to arrays');
 
         $form = $this->createForm('<form method="post"><input type="file" name="f.o o[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array('f.o o' => array('bar' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0))), $form->getPhpFiles(), '->getPhpFiles() preserves periods and spaces in names');
+        $this->assertEquals(['f.o o' => ['bar' => ['name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0]]], $form->getPhpFiles(), '->getPhpFiles() preserves periods and spaces in names');
 
         $form = $this->createForm('<form method="post"><input type="file" name="f.o o[bar][ba.z]" /><input type="file" name="f.o o[bar][]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array('f.o o' => array('bar' => array('ba.z' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0), array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0)))), $form->getPhpFiles(), '->getPhpFiles() preserves periods and spaces in names recursively');
+        $this->assertEquals(['f.o o' => ['bar' => ['ba.z' => ['name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0], ['name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0]]]], $form->getPhpFiles(), '->getPhpFiles() preserves periods and spaces in names recursively');
 
         $form = $this->createForm('<form method="post"><input type="file" name="foo[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
         $files = $form->getPhpFiles();
@@ -470,7 +478,7 @@ public function testGetPhpFiles()
         $this->assertSame(4, $files['foo']['bar']['error'], '->getPhpFiles() converts error to int');
 
         $form = $this->createForm('<form method="post"><input type="file" name="size[error]" /><input type="text" name="error" value="error" /><input type="submit" /></form>');
-        $this->assertEquals(array('size' => array('error' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0))), $form->getPhpFiles(), '->getPhpFiles() int conversion does not collide with file names');
+        $this->assertEquals(['size' => ['error' => ['name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0]]], $form->getPhpFiles(), '->getPhpFiles() int conversion does not collide with file names');
     }
 
     /**
@@ -551,83 +559,83 @@ public function testGetUriWithActionOverride()
 
     public function provideGetUriValues()
     {
-        return array(
-            array(
+        return [
+            [
                 'returns the URI of the form',
                 '<form action="/foo"><input type="submit" /></form>',
-                array(),
+                [],
                 '/foo',
-            ),
-            array(
+            ],
+            [
                 'appends the form values if the method is get',
                 '<form action="/foo"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
-                array(),
+                [],
                 '/foo?foo=foo',
-            ),
-            array(
+            ],
+            [
                 'appends the form values and merges the submitted values',
                 '<form action="/foo"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
-                array('foo' => 'bar'),
+                ['foo' => 'bar'],
                 '/foo?foo=bar',
-            ),
-            array(
+            ],
+            [
                 'does not append values if the method is post',
                 '<form action="/foo" method="post"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
-                array(),
+                [],
                 '/foo',
-            ),
-            array(
+            ],
+            [
                 'does not append values if the method is patch',
                 '<form action="/foo" method="post"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
-                array(),
+                [],
                 '/foo',
                 'PUT',
-            ),
-            array(
+            ],
+            [
                 'does not append values if the method is delete',
                 '<form action="/foo" method="post"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
-                array(),
+                [],
                 '/foo',
                 'DELETE',
-            ),
-            array(
+            ],
+            [
                 'does not append values if the method is put',
                 '<form action="/foo" method="post"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
-                array(),
+                [],
                 '/foo',
                 'PATCH',
-            ),
-            array(
+            ],
+            [
                 'appends the form values to an existing query string',
                 '<form action="/foo?bar=bar"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
-                array(),
+                [],
                 '/foo?bar=bar&foo=foo',
-            ),
-            array(
+            ],
+            [
                 'replaces query values with the form values',
                 '<form action="/foo?bar=bar"><input type="text" name="bar" value="foo" /><input type="submit" /></form>',
-                array(),
+                [],
                 '/foo?bar=foo',
-            ),
-            array(
+            ],
+            [
                 'returns an empty URI if the action is empty',
                 '<form><input type="submit" /></form>',
-                array(),
+                [],
                 '/',
-            ),
-            array(
+            ],
+            [
                 'appends the form values even if the action is empty',
                 '<form><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
-                array(),
+                [],
                 '/?foo=foo',
-            ),
-            array(
+            ],
+            [
                 'chooses the path if the action attribute value is a sharp (#)',
                 '<form action="#" method="post"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
-                array(),
+                [],
                 '/#',
-            ),
-        );
+            ],
+        ];
     }
 
     public function testHas()
@@ -753,7 +761,7 @@ public function testFormRegistrySupportsMultivaluedFields()
         $registry->add($this->getFormFieldMock('bar[baz]'));
 
         $this->assertEquals(
-            array('foo[0]', 'foo[1]', 'bar[5]', 'bar[6]', 'bar[baz]'),
+            ['foo[0]', 'foo[1]', 'bar[5]', 'bar[6]', 'bar[baz]'],
             array_keys($registry->all())
         );
     }
@@ -787,13 +795,13 @@ public function testFormRegistrySetValues()
         $registry->set('foo[3]', 3);
         $registry->set('foo[bar][baz]', 'fbb');
 
-        $registry->set('foo', array(
+        $registry->set('foo', [
             2 => 2,
             3 => 3,
-            'bar' => array(
+            'bar' => [
                 'baz' => 'fbb',
-             ),
-        ));
+             ],
+        ]);
     }
 
     /**
@@ -817,7 +825,7 @@ public function testFormRegistrySetArrayOnNotCompoundField()
         $registry = new FormFieldRegistry();
         $registry->add($this->getFormFieldMock('bar'));
 
-        $registry->set('bar', array('baz'));
+        $registry->set('bar', ['baz']);
     }
 
     public function testDifferentFieldTypesWithSameName()
@@ -846,7 +854,7 @@ protected function getFormFieldMock($name, $value = null)
     {
         $field = $this
             ->getMockBuilder('Symfony\\Component\\DomCrawler\\Field\\FormField')
-            ->setMethods(array('getName', 'getValue', 'setValue', 'initialize'))
+            ->setMethods(['getName', 'getValue', 'setValue', 'initialize'])
             ->disableOriginalConstructor()
             ->getMock()
         ;
@@ -854,13 +862,13 @@ protected function getFormFieldMock($name, $value = null)
         $field
             ->expects($this->any())
             ->method('getName')
-            ->will($this->returnValue($name))
+            ->willReturn($name)
         ;
 
         $field
             ->expects($this->any())
             ->method('getValue')
-            ->will($this->returnValue($value))
+            ->willReturn($value)
         ;
 
         return $field;
@@ -869,7 +877,7 @@ protected function getFormFieldMock($name, $value = null)
     protected function createForm($form, $method = null, $currentUri = null)
     {
         $dom = new \DOMDocument();
-        $dom->loadHTML('<html>'.$form.'</html>');
+        @$dom->loadHTML('<html>'.$form.'</html>');
 
         $xPath = new \DOMXPath($dom);
         $nodes = $xPath->query('//input | //button');
@@ -948,15 +956,15 @@ public function testgetPhpValuesWithEmptyTextarea()
     {
         $dom = new \DOMDocument();
         $dom->loadHTML('
-              <html>
-                  <form>
-                      <textarea name="example"></textarea>
-                  </form>
-              </html>
-          ');
+            <html>
+                <form>
+                    <textarea name="example"></textarea>
+                </form>
+            </html>'
+        );
 
         $nodes = $dom->getElementsByTagName('form');
         $form = new Form($nodes->item(0), 'http://example.com');
-        $this->assertEquals($form->getPhpValues(), array('example' => ''));
+        $this->assertEquals($form->getPhpValues(), ['example' => '']);
     }
 }
diff --git a/vendor/symfony/dom-crawler/Tests/ImageTest.php b/vendor/symfony/dom-crawler/Tests/ImageTest.php
index 309578a902..6aecadbc14 100644
--- a/vendor/symfony/dom-crawler/Tests/ImageTest.php
+++ b/vendor/symfony/dom-crawler/Tests/ImageTest.php
@@ -27,6 +27,27 @@ public function testConstructorWithANonImgTag()
         new Image($dom->getElementsByTagName('div')->item(0), 'http://www.example.com/');
     }
 
+    public function testBaseUriIsOptionalWhenImageUrlIsAbsolute()
+    {
+        $dom = new \DOMDocument();
+        $dom->loadHTML('<html><img alt="foo" src="https://example.com/foo" /></html>');
+
+        $image = new Image($dom->getElementsByTagName('img')->item(0));
+        $this->assertSame('https://example.com/foo', $image->getUri());
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testAbsoluteBaseUriIsMandatoryWhenImageUrlIsRelative()
+    {
+        $dom = new \DOMDocument();
+        $dom->loadHTML('<html><img alt="foo" src="/foo" /></html>');
+
+        $image = new Image($dom->getElementsByTagName('img')->item(0), 'example.com');
+        $image->getUri();
+    }
+
     /**
      * @dataProvider getGetUriTests
      */
@@ -41,9 +62,9 @@ public function testGetUri($url, $currentUri, $expected)
 
     public function getGetUriTests()
     {
-        return array(
-            array('/foo.png', 'http://localhost/bar/foo/', 'http://localhost/foo.png'),
-            array('foo.png', 'http://localhost/bar/foo/', 'http://localhost/bar/foo/foo.png'),
-        );
+        return [
+            ['/foo.png', 'http://localhost/bar/foo/', 'http://localhost/foo.png'],
+            ['foo.png', 'http://localhost/bar/foo/', 'http://localhost/bar/foo/foo.png'],
+        ];
     }
 }
diff --git a/vendor/symfony/dom-crawler/Tests/LinkTest.php b/vendor/symfony/dom-crawler/Tests/LinkTest.php
index 3f0364705f..76805bb764 100644
--- a/vendor/symfony/dom-crawler/Tests/LinkTest.php
+++ b/vendor/symfony/dom-crawler/Tests/LinkTest.php
@@ -27,15 +27,25 @@ public function testConstructorWithANonATag()
         new Link($dom->getElementsByTagName('div')->item(0), 'http://www.example.com/');
     }
 
+    public function testBaseUriIsOptionalWhenLinkUrlIsAbsolute()
+    {
+        $dom = new \DOMDocument();
+        $dom->loadHTML('<html><a href="https://example.com/foo">foo</a></html>');
+
+        $link = new Link($dom->getElementsByTagName('a')->item(0));
+        $this->assertSame('https://example.com/foo', $link->getUri());
+    }
+
     /**
      * @expectedException \InvalidArgumentException
      */
-    public function testConstructorWithAnInvalidCurrentUri()
+    public function testAbsoluteBaseUriIsMandatoryWhenLinkUrlIsRelative()
     {
         $dom = new \DOMDocument();
         $dom->loadHTML('<html><a href="/foo">foo</a></html>');
 
-        new Link($dom->getElementsByTagName('a')->item(0), 'example.com');
+        $link = new Link($dom->getElementsByTagName('a')->item(0), 'example.com');
+        $link->getUri();
     }
 
     public function testGetNode()
@@ -101,61 +111,61 @@ public function testGetUriOnLink($url, $currentUri, $expected)
 
     public function getGetUriTests()
     {
-        return array(
-            array('/foo', 'http://localhost/bar/foo/', 'http://localhost/foo'),
-            array('/foo', 'http://localhost/bar/foo', 'http://localhost/foo'),
-            array('
-            /foo', 'http://localhost/bar/foo/', 'http://localhost/foo'),
-            array('/foo
-            ', 'http://localhost/bar/foo', 'http://localhost/foo'),
-
-            array('foo', 'http://localhost/bar/foo/', 'http://localhost/bar/foo/foo'),
-            array('foo', 'http://localhost/bar/foo', 'http://localhost/bar/foo'),
-
-            array('', 'http://localhost/bar/', 'http://localhost/bar/'),
-            array('#', 'http://localhost/bar/', 'http://localhost/bar/#'),
-            array('#bar', 'http://localhost/bar?a=b', 'http://localhost/bar?a=b#bar'),
-            array('#bar', 'http://localhost/bar/#foo', 'http://localhost/bar/#bar'),
-            array('?a=b', 'http://localhost/bar#foo', 'http://localhost/bar?a=b'),
-            array('?a=b', 'http://localhost/bar/', 'http://localhost/bar/?a=b'),
-
-            array('http://login.foo.com/foo', 'http://localhost/bar/', 'http://login.foo.com/foo'),
-            array('https://login.foo.com/foo', 'https://localhost/bar/', 'https://login.foo.com/foo'),
-            array('mailto:foo@bar.com', 'http://localhost/foo', 'mailto:foo@bar.com'),
+        return [
+            ['/foo', 'http://localhost/bar/foo/', 'http://localhost/foo'],
+            ['/foo', 'http://localhost/bar/foo', 'http://localhost/foo'],
+            ['
+            /foo', 'http://localhost/bar/foo/', 'http://localhost/foo'],
+            ['/foo
+            ', 'http://localhost/bar/foo', 'http://localhost/foo'],
+
+            ['foo', 'http://localhost/bar/foo/', 'http://localhost/bar/foo/foo'],
+            ['foo', 'http://localhost/bar/foo', 'http://localhost/bar/foo'],
+
+            ['', 'http://localhost/bar/', 'http://localhost/bar/'],
+            ['#', 'http://localhost/bar/', 'http://localhost/bar/#'],
+            ['#bar', 'http://localhost/bar?a=b', 'http://localhost/bar?a=b#bar'],
+            ['#bar', 'http://localhost/bar/#foo', 'http://localhost/bar/#bar'],
+            ['?a=b', 'http://localhost/bar#foo', 'http://localhost/bar?a=b'],
+            ['?a=b', 'http://localhost/bar/', 'http://localhost/bar/?a=b'],
+
+            ['http://login.foo.com/foo', 'http://localhost/bar/', 'http://login.foo.com/foo'],
+            ['https://login.foo.com/foo', 'https://localhost/bar/', 'https://login.foo.com/foo'],
+            ['mailto:foo@bar.com', 'http://localhost/foo', 'mailto:foo@bar.com'],
 
             // tests schema relative URL (issue #7169)
-            array('//login.foo.com/foo', 'http://localhost/bar/', 'http://login.foo.com/foo'),
-            array('//login.foo.com/foo', 'https://localhost/bar/', 'https://login.foo.com/foo'),
-
-            array('?foo=2', 'http://localhost?foo=1', 'http://localhost?foo=2'),
-            array('?foo=2', 'http://localhost/?foo=1', 'http://localhost/?foo=2'),
-            array('?foo=2', 'http://localhost/bar?foo=1', 'http://localhost/bar?foo=2'),
-            array('?foo=2', 'http://localhost/bar/?foo=1', 'http://localhost/bar/?foo=2'),
-            array('?bar=2', 'http://localhost?foo=1', 'http://localhost?bar=2'),
-
-            array('foo', 'http://login.foo.com/bar/baz?/query/string', 'http://login.foo.com/bar/foo'),
-
-            array('.', 'http://localhost/foo/bar/baz', 'http://localhost/foo/bar/'),
-            array('./', 'http://localhost/foo/bar/baz', 'http://localhost/foo/bar/'),
-            array('./foo', 'http://localhost/foo/bar/baz', 'http://localhost/foo/bar/foo'),
-            array('..', 'http://localhost/foo/bar/baz', 'http://localhost/foo/'),
-            array('../', 'http://localhost/foo/bar/baz', 'http://localhost/foo/'),
-            array('../foo', 'http://localhost/foo/bar/baz', 'http://localhost/foo/foo'),
-            array('../..', 'http://localhost/foo/bar/baz', 'http://localhost/'),
-            array('../../', 'http://localhost/foo/bar/baz', 'http://localhost/'),
-            array('../../foo', 'http://localhost/foo/bar/baz', 'http://localhost/foo'),
-            array('../../foo', 'http://localhost/bar/foo/', 'http://localhost/foo'),
-            array('../bar/../../foo', 'http://localhost/bar/foo/', 'http://localhost/foo'),
-            array('../bar/./../../foo', 'http://localhost/bar/foo/', 'http://localhost/foo'),
-            array('../../', 'http://localhost/', 'http://localhost/'),
-            array('../../', 'http://localhost', 'http://localhost/'),
-
-            array('/foo', 'http://localhost?bar=1', 'http://localhost/foo'),
-            array('/foo', 'http://localhost#bar', 'http://localhost/foo'),
-            array('/foo', 'file:///', 'file:///foo'),
-            array('/foo', 'file:///bar/baz', 'file:///foo'),
-            array('foo', 'file:///', 'file:///foo'),
-            array('foo', 'file:///bar/baz', 'file:///bar/foo'),
-        );
+            ['//login.foo.com/foo', 'http://localhost/bar/', 'http://login.foo.com/foo'],
+            ['//login.foo.com/foo', 'https://localhost/bar/', 'https://login.foo.com/foo'],
+
+            ['?foo=2', 'http://localhost?foo=1', 'http://localhost?foo=2'],
+            ['?foo=2', 'http://localhost/?foo=1', 'http://localhost/?foo=2'],
+            ['?foo=2', 'http://localhost/bar?foo=1', 'http://localhost/bar?foo=2'],
+            ['?foo=2', 'http://localhost/bar/?foo=1', 'http://localhost/bar/?foo=2'],
+            ['?bar=2', 'http://localhost?foo=1', 'http://localhost?bar=2'],
+
+            ['foo', 'http://login.foo.com/bar/baz?/query/string', 'http://login.foo.com/bar/foo'],
+
+            ['.', 'http://localhost/foo/bar/baz', 'http://localhost/foo/bar/'],
+            ['./', 'http://localhost/foo/bar/baz', 'http://localhost/foo/bar/'],
+            ['./foo', 'http://localhost/foo/bar/baz', 'http://localhost/foo/bar/foo'],
+            ['..', 'http://localhost/foo/bar/baz', 'http://localhost/foo/'],
+            ['../', 'http://localhost/foo/bar/baz', 'http://localhost/foo/'],
+            ['../foo', 'http://localhost/foo/bar/baz', 'http://localhost/foo/foo'],
+            ['../..', 'http://localhost/foo/bar/baz', 'http://localhost/'],
+            ['../../', 'http://localhost/foo/bar/baz', 'http://localhost/'],
+            ['../../foo', 'http://localhost/foo/bar/baz', 'http://localhost/foo'],
+            ['../../foo', 'http://localhost/bar/foo/', 'http://localhost/foo'],
+            ['../bar/../../foo', 'http://localhost/bar/foo/', 'http://localhost/foo'],
+            ['../bar/./../../foo', 'http://localhost/bar/foo/', 'http://localhost/foo'],
+            ['../../', 'http://localhost/', 'http://localhost/'],
+            ['../../', 'http://localhost', 'http://localhost/'],
+
+            ['/foo', 'http://localhost?bar=1', 'http://localhost/foo'],
+            ['/foo', 'http://localhost#bar', 'http://localhost/foo'],
+            ['/foo', 'file:///', 'file:///foo'],
+            ['/foo', 'file:///bar/baz', 'file:///foo'],
+            ['foo', 'file:///', 'file:///foo'],
+            ['foo', 'file:///bar/baz', 'file:///bar/foo'],
+        ];
     }
 }
diff --git a/vendor/symfony/dom-crawler/composer.json b/vendor/symfony/dom-crawler/composer.json
index ed50e6ee6b..167d0fdfe5 100644
--- a/vendor/symfony/dom-crawler/composer.json
+++ b/vendor/symfony/dom-crawler/composer.json
@@ -16,12 +16,12 @@
         }
     ],
     "require": {
-        "php": "^5.5.9|>=7.0.8",
+        "php": "^7.1.3",
         "symfony/polyfill-ctype": "~1.8",
         "symfony/polyfill-mbstring": "~1.0"
     },
     "require-dev": {
-        "symfony/css-selector": "~2.8|~3.0|~4.0"
+        "symfony/css-selector": "~3.4|~4.0"
     },
     "suggest": {
         "symfony/css-selector": ""
@@ -35,7 +35,7 @@
     "minimum-stability": "dev",
     "extra": {
         "branch-alias": {
-            "dev-master": "3.4-dev"
+            "dev-master": "4.2-dev"
         }
     }
 }
diff --git a/vendor/symfony/dom-crawler/phpunit.xml.dist b/vendor/symfony/dom-crawler/phpunit.xml.dist
index ad714a8fd8..5f63490ce9 100644
--- a/vendor/symfony/dom-crawler/phpunit.xml.dist
+++ b/vendor/symfony/dom-crawler/phpunit.xml.dist
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd"
+         xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/5.2/phpunit.xsd"
          backupGlobals="false"
          colors="true"
          bootstrap="vendor/autoload.php"
diff --git a/vendor/symfony/filesystem/.gitignore b/vendor/symfony/filesystem/.gitignore
deleted file mode 100644
index c49a5d8df5..0000000000
--- a/vendor/symfony/filesystem/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-vendor/
-composer.lock
-phpunit.xml
diff --git a/vendor/symfony/filesystem/CHANGELOG.md b/vendor/symfony/filesystem/CHANGELOG.md
index d01f5f45e1..0b633ef2a7 100644
--- a/vendor/symfony/filesystem/CHANGELOG.md
+++ b/vendor/symfony/filesystem/CHANGELOG.md
@@ -1,6 +1,23 @@
 CHANGELOG
 =========
 
+4.4.0
+-----
+
+ * support for passing a `null` value to `Filesystem::isAbsolutePath()` is deprecated and will be removed in 5.0
+
+4.3.0
+-----
+
+ * support for passing arrays to `Filesystem::dumpFile()` is deprecated and will be removed in 5.0
+ * support for passing arrays to `Filesystem::appendToFile()` is deprecated and will be removed in 5.0
+
+4.0.0
+-----
+
+ * removed `LockHandler`
+ * Support for passing relative paths to `Filesystem::makePathRelative()` has been removed.
+
 3.4.0
 -----
 
diff --git a/vendor/symfony/filesystem/Exception/ExceptionInterface.php b/vendor/symfony/filesystem/Exception/ExceptionInterface.php
index 8f4f10aac7..fc438d9f31 100644
--- a/vendor/symfony/filesystem/Exception/ExceptionInterface.php
+++ b/vendor/symfony/filesystem/Exception/ExceptionInterface.php
@@ -16,6 +16,6 @@
  *
  * @author Romain Neutron <imprec@gmail.com>
  */
-interface ExceptionInterface
+interface ExceptionInterface extends \Throwable
 {
 }
diff --git a/vendor/symfony/filesystem/Exception/FileNotFoundException.php b/vendor/symfony/filesystem/Exception/FileNotFoundException.php
index bcc8fe81fc..48b6408095 100644
--- a/vendor/symfony/filesystem/Exception/FileNotFoundException.php
+++ b/vendor/symfony/filesystem/Exception/FileNotFoundException.php
@@ -19,7 +19,7 @@
  */
 class FileNotFoundException extends IOException
 {
-    public function __construct($message = null, $code = 0, \Exception $previous = null, $path = null)
+    public function __construct(string $message = null, int $code = 0, \Throwable $previous = null, string $path = null)
     {
         if (null === $message) {
             if (null === $path) {
diff --git a/vendor/symfony/filesystem/Exception/IOException.php b/vendor/symfony/filesystem/Exception/IOException.php
index 144e0e602b..fea26e4ddc 100644
--- a/vendor/symfony/filesystem/Exception/IOException.php
+++ b/vendor/symfony/filesystem/Exception/IOException.php
@@ -22,7 +22,7 @@ class IOException extends \RuntimeException implements IOExceptionInterface
 {
     private $path;
 
-    public function __construct($message, $code = 0, \Exception $previous = null, $path = null)
+    public function __construct(string $message, int $code = 0, \Throwable $previous = null, string $path = null)
     {
         $this->path = $path;
 
diff --git a/vendor/symfony/filesystem/Exception/InvalidArgumentException.php b/vendor/symfony/filesystem/Exception/InvalidArgumentException.php
new file mode 100644
index 0000000000..abadc20029
--- /dev/null
+++ b/vendor/symfony/filesystem/Exception/InvalidArgumentException.php
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Filesystem\Exception;
+
+/**
+ * @author Christian Flothmann <christian.flothmann@sensiolabs.de>
+ */
+class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface
+{
+}
diff --git a/vendor/symfony/filesystem/Filesystem.php b/vendor/symfony/filesystem/Filesystem.php
index 96b2e96009..95e4a80107 100644
--- a/vendor/symfony/filesystem/Filesystem.php
+++ b/vendor/symfony/filesystem/Filesystem.php
@@ -12,6 +12,7 @@
 namespace Symfony\Component\Filesystem;
 
 use Symfony\Component\Filesystem\Exception\FileNotFoundException;
+use Symfony\Component\Filesystem\Exception\InvalidArgumentException;
 use Symfony\Component\Filesystem\Exception\IOException;
 
 /**
@@ -250,7 +251,7 @@ public function chgrp($files, $group, $recursive = false)
                 $this->chgrp(new \FilesystemIterator($file), $group, true);
             }
             if (is_link($file) && \function_exists('lchgrp')) {
-                if (true !== @lchgrp($file, $group) || (\defined('HHVM_VERSION') && !posix_getgrnam($group))) {
+                if (true !== @lchgrp($file, $group)) {
                     throw new IOException(sprintf('Failed to chgrp file "%s".', $file), 0, null, $file);
                 }
             } else {
@@ -293,13 +294,9 @@ public function rename($origin, $target, $overwrite = false)
     /**
      * Tells whether a file exists and is readable.
      *
-     * @param string $filename Path to the file
-     *
-     * @return bool
-     *
      * @throws IOException When windows path is longer than 258 characters
      */
-    private function isReadable($filename)
+    private function isReadable(string $filename): bool
     {
         $maxPathLength = \PHP_MAXPATHLEN - 2;
 
@@ -380,11 +377,9 @@ public function hardlink($originFile, $targetFiles)
     }
 
     /**
-     * @param string $origin
-     * @param string $target
      * @param string $linkType Name of the link type, typically 'symbolic' or 'hard'
      */
-    private function linkException($origin, $target, $linkType)
+    private function linkException(string $origin, string $target, string $linkType)
     {
         if (self::$lastError) {
             if ('\\' === \DIRECTORY_SEPARATOR && false !== strpos(self::$lastError, 'error code(1314)')) {
@@ -445,8 +440,12 @@ public function readlink($path, $canonicalize = false)
      */
     public function makePathRelative($endPath, $startPath)
     {
-        if (!$this->isAbsolutePath($endPath) || !$this->isAbsolutePath($startPath)) {
-            @trigger_error(sprintf('Support for passing relative paths to %s() is deprecated since Symfony 3.4 and will be removed in 4.0.', __METHOD__), \E_USER_DEPRECATED);
+        if (!$this->isAbsolutePath($startPath)) {
+            throw new InvalidArgumentException(sprintf('The start path "%s" is not absolute.', $startPath));
+        }
+
+        if (!$this->isAbsolutePath($endPath)) {
+            throw new InvalidArgumentException(sprintf('The end path "%s" is not absolute.', $endPath));
         }
 
         // Normalize separators on Windows
@@ -461,11 +460,11 @@ public function makePathRelative($endPath, $startPath)
                 : [$path, null];
         };
 
-        $splitPath = function ($path, $absolute) {
+        $splitPath = function ($path) {
             $result = [];
 
             foreach (explode('/', trim($path, '/')) as $segment) {
-                if ('..' === $segment && ($absolute || \count($result))) {
+                if ('..' === $segment) {
                     array_pop($result);
                 } elseif ('.' !== $segment && '' !== $segment) {
                     $result[] = $segment;
@@ -475,11 +474,11 @@ public function makePathRelative($endPath, $startPath)
             return $result;
         };
 
-        list($endPath, $endDriveLetter) = $splitDriveLetter($endPath);
-        list($startPath, $startDriveLetter) = $splitDriveLetter($startPath);
+        [$endPath, $endDriveLetter] = $splitDriveLetter($endPath);
+        [$startPath, $startDriveLetter] = $splitDriveLetter($startPath);
 
-        $startPathArr = $splitPath($startPath, static::isAbsolutePath($startPath));
-        $endPathArr = $splitPath($endPath, static::isAbsolutePath($endPath));
+        $startPathArr = $splitPath($startPath);
+        $endPathArr = $splitPath($endPath);
 
         if ($endDriveLetter && $startDriveLetter && $endDriveLetter != $startDriveLetter) {
             // End path is on another drive, so no relative path exists
@@ -535,6 +534,10 @@ public function mirror($originDir, $targetDir, \Traversable $iterator = null, $o
         $originDir = rtrim($originDir, '/\\');
         $originDirLen = \strlen($originDir);
 
+        if (!$this->exists($originDir)) {
+            throw new IOException(sprintf('The origin directory specified "%s" was not found.', $originDir), 0, null, $originDir);
+        }
+
         // Iterate in destination folder to remove obsolete entries
         if ($this->exists($targetDir) && isset($options['delete']) && $options['delete']) {
             $deleteIterator = $iterator;
@@ -551,41 +554,32 @@ public function mirror($originDir, $targetDir, \Traversable $iterator = null, $o
             }
         }
 
-        $copyOnWindows = false;
-        if (isset($options['copy_on_windows'])) {
-            $copyOnWindows = $options['copy_on_windows'];
-        }
+        $copyOnWindows = $options['copy_on_windows'] ?? false;
 
         if (null === $iterator) {
             $flags = $copyOnWindows ? \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::FOLLOW_SYMLINKS : \FilesystemIterator::SKIP_DOTS;
             $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($originDir, $flags), \RecursiveIteratorIterator::SELF_FIRST);
         }
 
-        if ($this->exists($originDir)) {
-            $this->mkdir($targetDir);
-        }
+        $this->mkdir($targetDir);
+        $filesCreatedWhileMirroring = [];
 
         foreach ($iterator as $file) {
+            if ($file->getPathname() === $targetDir || $file->getRealPath() === $targetDir || isset($filesCreatedWhileMirroring[$file->getRealPath()])) {
+                continue;
+            }
+
             $target = $targetDir.substr($file->getPathname(), $originDirLen);
+            $filesCreatedWhileMirroring[$target] = true;
 
-            if ($copyOnWindows) {
-                if (is_file($file)) {
-                    $this->copy($file, $target, isset($options['override']) ? $options['override'] : false);
-                } elseif (is_dir($file)) {
-                    $this->mkdir($target);
-                } else {
-                    throw new IOException(sprintf('Unable to guess "%s" file type.', $file), 0, null, $file);
-                }
+            if (!$copyOnWindows && is_link($file)) {
+                $this->symlink($file->getLinkTarget(), $target);
+            } elseif (is_dir($file)) {
+                $this->mkdir($target);
+            } elseif (is_file($file)) {
+                $this->copy($file, $target, isset($options['override']) ? $options['override'] : false);
             } else {
-                if (is_link($file)) {
-                    $this->symlink($file->getLinkTarget(), $target);
-                } elseif (is_dir($file)) {
-                    $this->mkdir($target);
-                } elseif (is_file($file)) {
-                    $this->copy($file, $target, isset($options['override']) ? $options['override'] : false);
-                } else {
-                    throw new IOException(sprintf('Unable to guess "%s" file type.', $file), 0, null, $file);
-                }
+                throw new IOException(sprintf('Unable to guess "%s" file type.', $file), 0, null, $file);
             }
         }
     }
@@ -599,6 +593,10 @@ public function mirror($originDir, $targetDir, \Traversable $iterator = null, $o
      */
     public function isAbsolutePath($file)
     {
+        if (null === $file) {
+            @trigger_error(sprintf('Calling "%s()" with a null in the $file argument is deprecated since Symfony 4.4.', __METHOD__), \E_USER_DEPRECATED);
+        }
+
         return '' !== (string) $file && (strspn($file, '/\\', 0, 1)
             || (\strlen($file) > 3 && ctype_alpha($file[0])
                 && ':' === $file[1]
@@ -619,7 +617,7 @@ public function isAbsolutePath($file)
      */
     public function tempnam($dir, $prefix)
     {
-        list($scheme, $hierarchy) = $this->getSchemeAndHierarchy($dir);
+        [$scheme, $hierarchy] = $this->getSchemeAndHierarchy($dir);
 
         // If no scheme or scheme is "file" or "gs" (Google Cloud) create temp file in local filesystem
         if (null === $scheme || 'file' === $scheme || 'gs' === $scheme) {
@@ -663,13 +661,17 @@ public function tempnam($dir, $prefix)
     /**
      * Atomically dumps content into a file.
      *
-     * @param string $filename The file to be written to
-     * @param string $content  The data to write into the file
+     * @param string          $filename The file to be written to
+     * @param string|resource $content  The data to write into the file
      *
      * @throws IOException if the file cannot be written to
      */
     public function dumpFile($filename, $content)
     {
+        if (\is_array($content)) {
+            @trigger_error(sprintf('Calling "%s()" with an array in the $content argument is deprecated since Symfony 4.3.', __METHOD__), \E_USER_DEPRECATED);
+        }
+
         $dir = \dirname($filename);
 
         if (!is_dir($dir)) {
@@ -684,25 +686,33 @@ public function dumpFile($filename, $content)
         // when the filesystem supports chmod.
         $tmpFile = $this->tempnam($dir, basename($filename));
 
-        if (false === @file_put_contents($tmpFile, $content)) {
-            throw new IOException(sprintf('Failed to write file "%s".', $filename), 0, null, $filename);
-        }
+        try {
+            if (false === @file_put_contents($tmpFile, $content)) {
+                throw new IOException(sprintf('Failed to write file "%s".', $filename), 0, null, $filename);
+            }
 
-        @chmod($tmpFile, file_exists($filename) ? fileperms($filename) : 0666 & ~umask());
+            @chmod($tmpFile, file_exists($filename) ? fileperms($filename) : 0666 & ~umask());
 
-        $this->rename($tmpFile, $filename, true);
+            $this->rename($tmpFile, $filename, true);
+        } finally {
+            @unlink($tmpFile);
+        }
     }
 
     /**
      * Appends content to an existing file.
      *
-     * @param string $filename The file to which to append content
-     * @param string $content  The content to append
+     * @param string          $filename The file to which to append content
+     * @param string|resource $content  The content to append
      *
      * @throws IOException If the file is not writable
      */
     public function appendToFile($filename, $content)
     {
+        if (\is_array($content)) {
+            @trigger_error(sprintf('Calling "%s()" with an array in the $content argument is deprecated since Symfony 4.3.', __METHOD__), \E_USER_DEPRECATED);
+        }
+
         $dir = \dirname($filename);
 
         if (!is_dir($dir)) {
@@ -718,24 +728,15 @@ public function appendToFile($filename, $content)
         }
     }
 
-    /**
-     * @param mixed $files
-     *
-     * @return array|\Traversable
-     */
-    private function toIterable($files)
+    private function toIterable($files): iterable
     {
         return \is_array($files) || $files instanceof \Traversable ? $files : [$files];
     }
 
     /**
      * Gets a 2-tuple of scheme (may be null) and hierarchical part of a filename (e.g. file:///tmp -> [file, tmp]).
-     *
-     * @param string $filename The filename to be parsed
-     *
-     * @return array The filename scheme and hierarchical part
      */
-    private function getSchemeAndHierarchy($filename)
+    private function getSchemeAndHierarchy(string $filename): array
     {
         $components = explode('://', $filename, 2);
 
@@ -743,21 +744,18 @@ private function getSchemeAndHierarchy($filename)
     }
 
     /**
-     * @param callable $func
-     *
      * @return mixed
      */
-    private static function box($func)
+    private static function box(callable $func)
     {
         self::$lastError = null;
         set_error_handler(__CLASS__.'::handleError');
         try {
-            $result = \call_user_func_array($func, \array_slice(\func_get_args(), 1));
+            $result = $func(...\array_slice(\func_get_args(), 1));
             restore_error_handler();
 
             return $result;
         } catch (\Throwable $e) {
-        } catch (\Exception $e) {
         }
         restore_error_handler();
 
diff --git a/vendor/symfony/filesystem/LockHandler.php b/vendor/symfony/filesystem/LockHandler.php
deleted file mode 100644
index 2aacfa719b..0000000000
--- a/vendor/symfony/filesystem/LockHandler.php
+++ /dev/null
@@ -1,121 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Filesystem;
-
-use Symfony\Component\Filesystem\Exception\IOException;
-use Symfony\Component\Lock\Store\FlockStore;
-use Symfony\Component\Lock\Store\SemaphoreStore;
-
-@trigger_error(sprintf('The %s class is deprecated since Symfony 3.4 and will be removed in 4.0. Use %s or %s instead.', LockHandler::class, SemaphoreStore::class, FlockStore::class), \E_USER_DEPRECATED);
-
-/**
- * LockHandler class provides a simple abstraction to lock anything by means of
- * a file lock.
- *
- * A locked file is created based on the lock name when calling lock(). Other
- * lock handlers will not be able to lock the same name until it is released
- * (explicitly by calling release() or implicitly when the instance holding the
- * lock is destroyed).
- *
- * @author Grégoire Pineau <lyrixx@lyrixx.info>
- * @author Romain Neutron <imprec@gmail.com>
- * @author Nicolas Grekas <p@tchwork.com>
- *
- * @deprecated since version 3.4, to be removed in 4.0. Use Symfony\Component\Lock\Store\SemaphoreStore or Symfony\Component\Lock\Store\FlockStore instead.
- */
-class LockHandler
-{
-    private $file;
-    private $handle;
-
-    /**
-     * @param string      $name     The lock name
-     * @param string|null $lockPath The directory to store the lock. Default values will use temporary directory
-     *
-     * @throws IOException If the lock directory could not be created or is not writable
-     */
-    public function __construct($name, $lockPath = null)
-    {
-        $lockPath = $lockPath ?: sys_get_temp_dir();
-
-        if (!is_dir($lockPath)) {
-            $fs = new Filesystem();
-            $fs->mkdir($lockPath);
-        }
-
-        if (!is_writable($lockPath)) {
-            throw new IOException(sprintf('The directory "%s" is not writable.', $lockPath), 0, null, $lockPath);
-        }
-
-        $this->file = sprintf('%s/sf.%s.%s.lock', $lockPath, preg_replace('/[^a-z0-9\._-]+/i', '-', $name), hash('sha256', $name));
-    }
-
-    /**
-     * Lock the resource.
-     *
-     * @param bool $blocking Wait until the lock is released
-     *
-     * @return bool Returns true if the lock was acquired, false otherwise
-     *
-     * @throws IOException If the lock file could not be created or opened
-     */
-    public function lock($blocking = false)
-    {
-        if ($this->handle) {
-            return true;
-        }
-
-        $error = null;
-
-        // Silence error reporting
-        set_error_handler(function ($errno, $msg) use (&$error) {
-            $error = $msg;
-        });
-
-        if (!$this->handle = fopen($this->file, 'r+') ?: fopen($this->file, 'r')) {
-            if ($this->handle = fopen($this->file, 'x')) {
-                chmod($this->file, 0666);
-            } elseif (!$this->handle = fopen($this->file, 'r+') ?: fopen($this->file, 'r')) {
-                usleep(100); // Give some time for chmod() to complete
-                $this->handle = fopen($this->file, 'r+') ?: fopen($this->file, 'r');
-            }
-        }
-        restore_error_handler();
-
-        if (!$this->handle) {
-            throw new IOException($error, 0, null, $this->file);
-        }
-
-        // On Windows, even if PHP doc says the contrary, LOCK_NB works, see
-        // https://bugs.php.net/54129
-        if (!flock($this->handle, \LOCK_EX | ($blocking ? 0 : \LOCK_NB))) {
-            fclose($this->handle);
-            $this->handle = null;
-
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Release the resource.
-     */
-    public function release()
-    {
-        if ($this->handle) {
-            flock($this->handle, \LOCK_UN | \LOCK_NB);
-            fclose($this->handle);
-            $this->handle = null;
-        }
-    }
-}
diff --git a/vendor/symfony/filesystem/Tests/ExceptionTest.php b/vendor/symfony/filesystem/Tests/ExceptionTest.php
deleted file mode 100644
index 300acf1034..0000000000
--- a/vendor/symfony/filesystem/Tests/ExceptionTest.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Filesystem\Tests;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Filesystem\Exception\FileNotFoundException;
-use Symfony\Component\Filesystem\Exception\IOException;
-
-/**
- * Test class for Filesystem.
- */
-class ExceptionTest extends TestCase
-{
-    public function testGetPath()
-    {
-        $e = new IOException('', 0, null, '/foo');
-        $this->assertEquals('/foo', $e->getPath(), 'The pass should be returned.');
-    }
-
-    public function testGeneratedMessage()
-    {
-        $e = new FileNotFoundException(null, 0, null, '/foo');
-        $this->assertEquals('/foo', $e->getPath());
-        $this->assertEquals('File "/foo" could not be found.', $e->getMessage(), 'A message should be generated.');
-    }
-
-    public function testGeneratedMessageWithoutPath()
-    {
-        $e = new FileNotFoundException();
-        $this->assertEquals('File could not be found.', $e->getMessage(), 'A message should be generated.');
-    }
-
-    public function testCustomMessage()
-    {
-        $e = new FileNotFoundException('bar', 0, null, '/foo');
-        $this->assertEquals('bar', $e->getMessage(), 'A custom message should be possible still.');
-    }
-}
diff --git a/vendor/symfony/filesystem/Tests/FilesystemTest.php b/vendor/symfony/filesystem/Tests/FilesystemTest.php
deleted file mode 100644
index b157cc4ed3..0000000000
--- a/vendor/symfony/filesystem/Tests/FilesystemTest.php
+++ /dev/null
@@ -1,1684 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Filesystem\Tests;
-
-use Symfony\Component\Filesystem\Exception\IOException;
-
-/**
- * Test class for Filesystem.
- */
-class FilesystemTest extends FilesystemTestCase
-{
-    public function testCopyCreatesNewFile()
-    {
-        $sourceFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_source_file';
-        $targetFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_target_file';
-
-        file_put_contents($sourceFilePath, 'SOURCE FILE');
-
-        $this->filesystem->copy($sourceFilePath, $targetFilePath);
-
-        $this->assertFileExists($targetFilePath);
-        $this->assertStringEqualsFile($targetFilePath, 'SOURCE FILE');
-    }
-
-    public function testCopyFails()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        $sourceFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_source_file';
-        $targetFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_target_file';
-
-        $this->filesystem->copy($sourceFilePath, $targetFilePath);
-    }
-
-    public function testCopyUnreadableFileFails()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        // skip test on Windows; PHP can't easily set file as unreadable on Windows
-        if ('\\' === \DIRECTORY_SEPARATOR) {
-            $this->markTestSkipped('This test cannot run on Windows.');
-        }
-
-        if (!getenv('USER') || 'root' === getenv('USER')) {
-            $this->markTestSkipped('This test will fail if run under superuser');
-        }
-
-        $sourceFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_source_file';
-        $targetFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_target_file';
-
-        file_put_contents($sourceFilePath, 'SOURCE FILE');
-
-        // make sure target cannot be read
-        $this->filesystem->chmod($sourceFilePath, 0222);
-
-        $this->filesystem->copy($sourceFilePath, $targetFilePath);
-    }
-
-    public function testCopyOverridesExistingFileIfModified()
-    {
-        $sourceFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_source_file';
-        $targetFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_target_file';
-
-        file_put_contents($sourceFilePath, 'SOURCE FILE');
-        file_put_contents($targetFilePath, 'TARGET FILE');
-        touch($targetFilePath, time() - 1000);
-
-        $this->filesystem->copy($sourceFilePath, $targetFilePath);
-
-        $this->assertFileExists($targetFilePath);
-        $this->assertStringEqualsFile($targetFilePath, 'SOURCE FILE');
-    }
-
-    public function testCopyDoesNotOverrideExistingFileByDefault()
-    {
-        $sourceFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_source_file';
-        $targetFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_target_file';
-
-        file_put_contents($sourceFilePath, 'SOURCE FILE');
-        file_put_contents($targetFilePath, 'TARGET FILE');
-
-        // make sure both files have the same modification time
-        $modificationTime = time() - 1000;
-        touch($sourceFilePath, $modificationTime);
-        touch($targetFilePath, $modificationTime);
-
-        $this->filesystem->copy($sourceFilePath, $targetFilePath);
-
-        $this->assertFileExists($targetFilePath);
-        $this->assertStringEqualsFile($targetFilePath, 'TARGET FILE');
-    }
-
-    public function testCopyOverridesExistingFileIfForced()
-    {
-        $sourceFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_source_file';
-        $targetFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_target_file';
-
-        file_put_contents($sourceFilePath, 'SOURCE FILE');
-        file_put_contents($targetFilePath, 'TARGET FILE');
-
-        // make sure both files have the same modification time
-        $modificationTime = time() - 1000;
-        touch($sourceFilePath, $modificationTime);
-        touch($targetFilePath, $modificationTime);
-
-        $this->filesystem->copy($sourceFilePath, $targetFilePath, true);
-
-        $this->assertFileExists($targetFilePath);
-        $this->assertStringEqualsFile($targetFilePath, 'SOURCE FILE');
-    }
-
-    public function testCopyWithOverrideWithReadOnlyTargetFails()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        // skip test on Windows; PHP can't easily set file as unwritable on Windows
-        if ('\\' === \DIRECTORY_SEPARATOR) {
-            $this->markTestSkipped('This test cannot run on Windows.');
-        }
-
-        if (!getenv('USER') || 'root' === getenv('USER')) {
-            $this->markTestSkipped('This test will fail if run under superuser');
-        }
-
-        $sourceFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_source_file';
-        $targetFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_target_file';
-
-        file_put_contents($sourceFilePath, 'SOURCE FILE');
-        file_put_contents($targetFilePath, 'TARGET FILE');
-
-        // make sure both files have the same modification time
-        $modificationTime = time() - 1000;
-        touch($sourceFilePath, $modificationTime);
-        touch($targetFilePath, $modificationTime);
-
-        // make sure target is read-only
-        $this->filesystem->chmod($targetFilePath, 0444);
-
-        $this->filesystem->copy($sourceFilePath, $targetFilePath, true);
-    }
-
-    public function testCopyCreatesTargetDirectoryIfItDoesNotExist()
-    {
-        $sourceFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_source_file';
-        $targetFileDirectory = $this->workspace.\DIRECTORY_SEPARATOR.'directory';
-        $targetFilePath = $targetFileDirectory.\DIRECTORY_SEPARATOR.'copy_target_file';
-
-        file_put_contents($sourceFilePath, 'SOURCE FILE');
-
-        $this->filesystem->copy($sourceFilePath, $targetFilePath);
-
-        $this->assertDirectoryExists($targetFileDirectory);
-        $this->assertFileExists($targetFilePath);
-        $this->assertStringEqualsFile($targetFilePath, 'SOURCE FILE');
-    }
-
-    /**
-     * @group network
-     */
-    public function testCopyForOriginUrlsAndExistingLocalFileDefaultsToCopy()
-    {
-        if (!\in_array('https', stream_get_wrappers())) {
-            $this->markTestSkipped('"https" stream wrapper is not enabled.');
-        }
-        $sourceFilePath = 'https://symfony.com/images/common/logo/logo_symfony_header.png';
-        $targetFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_target_file';
-
-        file_put_contents($targetFilePath, 'TARGET FILE');
-
-        $this->filesystem->copy($sourceFilePath, $targetFilePath, false);
-
-        $this->assertFileExists($targetFilePath);
-        $this->assertEquals(file_get_contents($sourceFilePath), file_get_contents($targetFilePath));
-    }
-
-    public function testMkdirCreatesDirectoriesRecursively()
-    {
-        $directory = $this->workspace
-            .\DIRECTORY_SEPARATOR.'directory'
-            .\DIRECTORY_SEPARATOR.'sub_directory';
-
-        $this->filesystem->mkdir($directory);
-
-        $this->assertDirectoryExists($directory);
-    }
-
-    public function testMkdirCreatesDirectoriesFromArray()
-    {
-        $basePath = $this->workspace.\DIRECTORY_SEPARATOR;
-        $directories = [
-            $basePath.'1', $basePath.'2', $basePath.'3',
-        ];
-
-        $this->filesystem->mkdir($directories);
-
-        $this->assertDirectoryExists($basePath.'1');
-        $this->assertDirectoryExists($basePath.'2');
-        $this->assertDirectoryExists($basePath.'3');
-    }
-
-    public function testMkdirCreatesDirectoriesFromTraversableObject()
-    {
-        $basePath = $this->workspace.\DIRECTORY_SEPARATOR;
-        $directories = new \ArrayObject([
-            $basePath.'1', $basePath.'2', $basePath.'3',
-        ]);
-
-        $this->filesystem->mkdir($directories);
-
-        $this->assertDirectoryExists($basePath.'1');
-        $this->assertDirectoryExists($basePath.'2');
-        $this->assertDirectoryExists($basePath.'3');
-    }
-
-    public function testMkdirCreatesDirectoriesFails()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        $basePath = $this->workspace.\DIRECTORY_SEPARATOR;
-        $dir = $basePath.'2';
-
-        file_put_contents($dir, '');
-
-        $this->filesystem->mkdir($dir);
-    }
-
-    public function testTouchCreatesEmptyFile()
-    {
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'1';
-
-        $this->filesystem->touch($file);
-
-        $this->assertFileExists($file);
-    }
-
-    public function testTouchFails()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'1'.\DIRECTORY_SEPARATOR.'2';
-
-        $this->filesystem->touch($file);
-    }
-
-    public function testTouchCreatesEmptyFilesFromArray()
-    {
-        $basePath = $this->workspace.\DIRECTORY_SEPARATOR;
-        $files = [
-            $basePath.'1', $basePath.'2', $basePath.'3',
-        ];
-
-        $this->filesystem->touch($files);
-
-        $this->assertFileExists($basePath.'1');
-        $this->assertFileExists($basePath.'2');
-        $this->assertFileExists($basePath.'3');
-    }
-
-    public function testTouchCreatesEmptyFilesFromTraversableObject()
-    {
-        $basePath = $this->workspace.\DIRECTORY_SEPARATOR;
-        $files = new \ArrayObject([
-            $basePath.'1', $basePath.'2', $basePath.'3',
-        ]);
-
-        $this->filesystem->touch($files);
-
-        $this->assertFileExists($basePath.'1');
-        $this->assertFileExists($basePath.'2');
-        $this->assertFileExists($basePath.'3');
-    }
-
-    public function testRemoveCleansFilesAndDirectoriesIteratively()
-    {
-        $basePath = $this->workspace.\DIRECTORY_SEPARATOR.'directory'.\DIRECTORY_SEPARATOR;
-
-        mkdir($basePath);
-        mkdir($basePath.'dir');
-        touch($basePath.'file');
-
-        $this->filesystem->remove($basePath);
-
-        $this->assertFileDoesNotExist($basePath);
-    }
-
-    public function testRemoveCleansArrayOfFilesAndDirectories()
-    {
-        $basePath = $this->workspace.\DIRECTORY_SEPARATOR;
-
-        mkdir($basePath.'dir');
-        touch($basePath.'file');
-
-        $files = [
-            $basePath.'dir', $basePath.'file',
-        ];
-
-        $this->filesystem->remove($files);
-
-        $this->assertFileDoesNotExist($basePath.'dir');
-        $this->assertFileDoesNotExist($basePath.'file');
-    }
-
-    public function testRemoveCleansTraversableObjectOfFilesAndDirectories()
-    {
-        $basePath = $this->workspace.\DIRECTORY_SEPARATOR;
-
-        mkdir($basePath.'dir');
-        touch($basePath.'file');
-
-        $files = new \ArrayObject([
-            $basePath.'dir', $basePath.'file',
-        ]);
-
-        $this->filesystem->remove($files);
-
-        $this->assertFileDoesNotExist($basePath.'dir');
-        $this->assertFileDoesNotExist($basePath.'file');
-    }
-
-    public function testRemoveIgnoresNonExistingFiles()
-    {
-        $basePath = $this->workspace.\DIRECTORY_SEPARATOR;
-
-        mkdir($basePath.'dir');
-
-        $files = [
-            $basePath.'dir', $basePath.'file',
-        ];
-
-        $this->filesystem->remove($files);
-
-        $this->assertFileDoesNotExist($basePath.'dir');
-    }
-
-    public function testRemoveThrowsExceptionOnPermissionDenied()
-    {
-        $this->markAsSkippedIfChmodIsMissing();
-
-        $basePath = $this->workspace.\DIRECTORY_SEPARATOR.'dir_permissions';
-        mkdir($basePath);
-        $file = $basePath.\DIRECTORY_SEPARATOR.'file';
-        touch($file);
-        chmod($basePath, 0400);
-
-        try {
-            $this->filesystem->remove($file);
-            $this->fail('Filesystem::remove() should throw an exception');
-        } catch (IOException $e) {
-            $this->assertStringContainsString('Failed to remove file "'.$file.'"', $e->getMessage());
-            $this->assertStringContainsString('Permission denied', $e->getMessage());
-        } finally {
-            // Make sure we can clean up this file
-            chmod($basePath, 0777);
-        }
-    }
-
-    public function testRemoveCleansInvalidLinks()
-    {
-        $this->markAsSkippedIfSymlinkIsMissing();
-
-        $basePath = $this->workspace.\DIRECTORY_SEPARATOR.'directory'.\DIRECTORY_SEPARATOR;
-
-        mkdir($basePath);
-        mkdir($basePath.'dir');
-        // create symlink to nonexistent file
-        @symlink($basePath.'file', $basePath.'file-link');
-
-        // create symlink to dir using trailing forward slash
-        $this->filesystem->symlink($basePath.'dir/', $basePath.'dir-link');
-        $this->assertDirectoryExists($basePath.'dir-link');
-
-        // create symlink to nonexistent dir
-        rmdir($basePath.'dir');
-        $this->assertFalse('\\' === \DIRECTORY_SEPARATOR ? @readlink($basePath.'dir-link') : is_dir($basePath.'dir-link'));
-
-        $this->filesystem->remove($basePath);
-
-        $this->assertFileDoesNotExist($basePath);
-    }
-
-    public function testFilesExists()
-    {
-        $basePath = $this->workspace.\DIRECTORY_SEPARATOR.'directory'.\DIRECTORY_SEPARATOR;
-
-        mkdir($basePath);
-        touch($basePath.'file1');
-        mkdir($basePath.'folder');
-
-        $this->assertTrue($this->filesystem->exists($basePath.'file1'));
-        $this->assertTrue($this->filesystem->exists($basePath.'folder'));
-    }
-
-    public function testFilesExistsFails()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        if ('\\' !== \DIRECTORY_SEPARATOR) {
-            $this->markTestSkipped('Long file names are an issue on Windows');
-        }
-        $basePath = $this->workspace.'\\directory\\';
-        $maxPathLength = \PHP_MAXPATHLEN - 2;
-
-        $oldPath = getcwd();
-        mkdir($basePath);
-        chdir($basePath);
-        $file = str_repeat('T', $maxPathLength - \strlen($basePath) + 1);
-        $path = $basePath.$file;
-        exec('TYPE NUL >>'.$file); // equivalent of touch, we can not use the php touch() here because it suffers from the same limitation
-        $this->longPathNamesWindows[] = $path; // save this so we can clean up later
-        chdir($oldPath);
-        $this->filesystem->exists($path);
-    }
-
-    public function testFilesExistsTraversableObjectOfFilesAndDirectories()
-    {
-        $basePath = $this->workspace.\DIRECTORY_SEPARATOR;
-
-        mkdir($basePath.'dir');
-        touch($basePath.'file');
-
-        $files = new \ArrayObject([
-            $basePath.'dir', $basePath.'file',
-        ]);
-
-        $this->assertTrue($this->filesystem->exists($files));
-    }
-
-    public function testFilesNotExistsTraversableObjectOfFilesAndDirectories()
-    {
-        $basePath = $this->workspace.\DIRECTORY_SEPARATOR;
-
-        mkdir($basePath.'dir');
-        touch($basePath.'file');
-        touch($basePath.'file2');
-
-        $files = new \ArrayObject([
-            $basePath.'dir', $basePath.'file', $basePath.'file2',
-        ]);
-
-        unlink($basePath.'file');
-
-        $this->assertFalse($this->filesystem->exists($files));
-    }
-
-    public function testInvalidFileNotExists()
-    {
-        $basePath = $this->workspace.\DIRECTORY_SEPARATOR.'directory'.\DIRECTORY_SEPARATOR;
-
-        $this->assertFalse($this->filesystem->exists($basePath.time()));
-    }
-
-    public function testChmodChangesFileMode()
-    {
-        $this->markAsSkippedIfChmodIsMissing();
-
-        $dir = $this->workspace.\DIRECTORY_SEPARATOR.'dir';
-        mkdir($dir);
-        $file = $dir.\DIRECTORY_SEPARATOR.'file';
-        touch($file);
-
-        $this->filesystem->chmod($file, 0400);
-        $this->filesystem->chmod($dir, 0753);
-
-        $this->assertFilePermissions(753, $dir);
-        $this->assertFilePermissions(400, $file);
-    }
-
-    public function testChmodWithWrongModLeavesPreviousPermissionsUntouched()
-    {
-        $this->markAsSkippedIfChmodIsMissing();
-
-        if (\defined('HHVM_VERSION')) {
-            $this->markTestSkipped('chmod() changes permissions even when passing invalid modes on HHVM');
-        }
-
-        $dir = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        touch($dir);
-
-        $permissions = fileperms($dir);
-
-        $this->filesystem->chmod($dir, 'Wrongmode');
-
-        $this->assertSame($permissions, fileperms($dir));
-    }
-
-    public function testChmodRecursive()
-    {
-        $this->markAsSkippedIfChmodIsMissing();
-
-        $dir = $this->workspace.\DIRECTORY_SEPARATOR.'dir';
-        mkdir($dir);
-        $file = $dir.\DIRECTORY_SEPARATOR.'file';
-        touch($file);
-
-        $this->filesystem->chmod($file, 0400, 0000, true);
-        $this->filesystem->chmod($dir, 0753, 0000, true);
-
-        $this->assertFilePermissions(753, $dir);
-        $this->assertFilePermissions(753, $file);
-    }
-
-    public function testChmodAppliesUmask()
-    {
-        $this->markAsSkippedIfChmodIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        touch($file);
-
-        $this->filesystem->chmod($file, 0770, 0022);
-        $this->assertFilePermissions(750, $file);
-    }
-
-    public function testChmodChangesModeOfArrayOfFiles()
-    {
-        $this->markAsSkippedIfChmodIsMissing();
-
-        $directory = $this->workspace.\DIRECTORY_SEPARATOR.'directory';
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $files = [$directory, $file];
-
-        mkdir($directory);
-        touch($file);
-
-        $this->filesystem->chmod($files, 0753);
-
-        $this->assertFilePermissions(753, $file);
-        $this->assertFilePermissions(753, $directory);
-    }
-
-    public function testChmodChangesModeOfTraversableFileObject()
-    {
-        $this->markAsSkippedIfChmodIsMissing();
-
-        $directory = $this->workspace.\DIRECTORY_SEPARATOR.'directory';
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $files = new \ArrayObject([$directory, $file]);
-
-        mkdir($directory);
-        touch($file);
-
-        $this->filesystem->chmod($files, 0753);
-
-        $this->assertFilePermissions(753, $file);
-        $this->assertFilePermissions(753, $directory);
-    }
-
-    public function testChmodChangesZeroModeOnSubdirectoriesOnRecursive()
-    {
-        $this->markAsSkippedIfChmodIsMissing();
-
-        $directory = $this->workspace.\DIRECTORY_SEPARATOR.'directory';
-        $subdirectory = $directory.\DIRECTORY_SEPARATOR.'subdirectory';
-
-        mkdir($directory);
-        mkdir($subdirectory);
-        chmod($subdirectory, 0000);
-
-        $this->filesystem->chmod($directory, 0753, 0000, true);
-
-        $this->assertFilePermissions(753, $subdirectory);
-    }
-
-    public function testChown()
-    {
-        $this->markAsSkippedIfPosixIsMissing();
-
-        $dir = $this->workspace.\DIRECTORY_SEPARATOR.'dir';
-        mkdir($dir);
-
-        $owner = $this->getFileOwner($dir);
-        $this->filesystem->chown($dir, $owner);
-
-        $this->assertSame($owner, $this->getFileOwner($dir));
-    }
-
-    public function testChownRecursive()
-    {
-        $this->markAsSkippedIfPosixIsMissing();
-
-        $dir = $this->workspace.\DIRECTORY_SEPARATOR.'dir';
-        mkdir($dir);
-        $file = $dir.\DIRECTORY_SEPARATOR.'file';
-        touch($file);
-
-        $owner = $this->getFileOwner($dir);
-        $this->filesystem->chown($dir, $owner, true);
-
-        $this->assertSame($owner, $this->getFileOwner($file));
-    }
-
-    public function testChownSymlink()
-    {
-        $this->markAsSkippedIfSymlinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        touch($file);
-
-        $this->filesystem->symlink($file, $link);
-
-        $owner = $this->getFileOwner($link);
-        $this->filesystem->chown($link, $owner);
-
-        $this->assertSame($owner, $this->getFileOwner($link));
-    }
-
-    public function testChownLink()
-    {
-        $this->markAsSkippedIfLinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        touch($file);
-
-        $this->filesystem->hardlink($file, $link);
-
-        $owner = $this->getFileOwner($link);
-        $this->filesystem->chown($link, $owner);
-
-        $this->assertSame($owner, $this->getFileOwner($link));
-    }
-
-    public function testChownSymlinkFails()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        $this->markAsSkippedIfSymlinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        touch($file);
-
-        $this->filesystem->symlink($file, $link);
-
-        $this->filesystem->chown($link, 'user'.time().mt_rand(1000, 9999));
-    }
-
-    public function testChownLinkFails()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        $this->markAsSkippedIfLinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        touch($file);
-
-        $this->filesystem->hardlink($file, $link);
-
-        $this->filesystem->chown($link, 'user'.time().mt_rand(1000, 9999));
-    }
-
-    public function testChownFail()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        $this->markAsSkippedIfPosixIsMissing();
-
-        $dir = $this->workspace.\DIRECTORY_SEPARATOR.'dir';
-        mkdir($dir);
-
-        $this->filesystem->chown($dir, 'user'.time().mt_rand(1000, 9999));
-    }
-
-    public function testChgrp()
-    {
-        $this->markAsSkippedIfPosixIsMissing();
-
-        $dir = $this->workspace.\DIRECTORY_SEPARATOR.'dir';
-        mkdir($dir);
-
-        $group = $this->getFileGroup($dir);
-        $this->filesystem->chgrp($dir, $group);
-
-        $this->assertSame($group, $this->getFileGroup($dir));
-    }
-
-    public function testChgrpRecursive()
-    {
-        $this->markAsSkippedIfPosixIsMissing();
-
-        $dir = $this->workspace.\DIRECTORY_SEPARATOR.'dir';
-        mkdir($dir);
-        $file = $dir.\DIRECTORY_SEPARATOR.'file';
-        touch($file);
-
-        $group = $this->getFileGroup($dir);
-        $this->filesystem->chgrp($dir, $group, true);
-
-        $this->assertSame($group, $this->getFileGroup($file));
-    }
-
-    public function testChgrpSymlink()
-    {
-        $this->markAsSkippedIfSymlinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        touch($file);
-
-        $this->filesystem->symlink($file, $link);
-
-        $group = $this->getFileGroup($link);
-        $this->filesystem->chgrp($link, $group);
-
-        $this->assertSame($group, $this->getFileGroup($link));
-    }
-
-    public function testChgrpLink()
-    {
-        $this->markAsSkippedIfLinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        touch($file);
-
-        $this->filesystem->hardlink($file, $link);
-
-        $group = $this->getFileGroup($link);
-        $this->filesystem->chgrp($link, $group);
-
-        $this->assertSame($group, $this->getFileGroup($link));
-    }
-
-    public function testChgrpSymlinkFails()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        $this->markAsSkippedIfSymlinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        touch($file);
-
-        $this->filesystem->symlink($file, $link);
-
-        $this->filesystem->chgrp($link, 'user'.time().mt_rand(1000, 9999));
-    }
-
-    public function testChgrpLinkFails()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        $this->markAsSkippedIfLinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        touch($file);
-
-        $this->filesystem->hardlink($file, $link);
-
-        $this->filesystem->chgrp($link, 'user'.time().mt_rand(1000, 9999));
-    }
-
-    public function testChgrpFail()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        $this->markAsSkippedIfPosixIsMissing();
-
-        $dir = $this->workspace.\DIRECTORY_SEPARATOR.'dir';
-        mkdir($dir);
-
-        $this->filesystem->chgrp($dir, 'user'.time().mt_rand(1000, 9999));
-    }
-
-    public function testRename()
-    {
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $newPath = $this->workspace.\DIRECTORY_SEPARATOR.'new_file';
-        touch($file);
-
-        $this->filesystem->rename($file, $newPath);
-
-        $this->assertFileDoesNotExist($file);
-        $this->assertFileExists($newPath);
-    }
-
-    public function testRenameThrowsExceptionIfTargetAlreadyExists()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $newPath = $this->workspace.\DIRECTORY_SEPARATOR.'new_file';
-
-        touch($file);
-        touch($newPath);
-
-        $this->filesystem->rename($file, $newPath);
-    }
-
-    public function testRenameOverwritesTheTargetIfItAlreadyExists()
-    {
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $newPath = $this->workspace.\DIRECTORY_SEPARATOR.'new_file';
-
-        touch($file);
-        touch($newPath);
-
-        $this->filesystem->rename($file, $newPath, true);
-
-        $this->assertFileDoesNotExist($file);
-        $this->assertFileExists($newPath);
-    }
-
-    public function testRenameThrowsExceptionOnError()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.uniqid('fs_test_', true);
-        $newPath = $this->workspace.\DIRECTORY_SEPARATOR.'new_file';
-
-        $this->filesystem->rename($file, $newPath);
-    }
-
-    public function testSymlink()
-    {
-        if ('\\' === \DIRECTORY_SEPARATOR) {
-            $this->markTestSkipped('Windows does not support creating "broken" symlinks');
-        }
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        // $file does not exist right now: creating "broken" links is a wanted feature
-        $this->filesystem->symlink($file, $link);
-
-        $this->assertTrue(is_link($link));
-
-        // Create the linked file AFTER creating the link
-        touch($file);
-
-        $this->assertEquals($file, readlink($link));
-    }
-
-    /**
-     * @depends testSymlink
-     */
-    public function testRemoveSymlink()
-    {
-        $this->markAsSkippedIfSymlinkIsMissing();
-
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        $this->filesystem->remove($link);
-
-        $this->assertFalse(is_link($link));
-        $this->assertFalse(is_file($link));
-        $this->assertDirectoryDoesNotExist($link);
-    }
-
-    public function testSymlinkIsOverwrittenIfPointsToDifferentTarget()
-    {
-        $this->markAsSkippedIfSymlinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        touch($file);
-        symlink($this->workspace, $link);
-
-        $this->filesystem->symlink($file, $link);
-
-        $this->assertTrue(is_link($link));
-        $this->assertEquals($file, readlink($link));
-    }
-
-    public function testSymlinkIsNotOverwrittenIfAlreadyCreated()
-    {
-        $this->markAsSkippedIfSymlinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        touch($file);
-        symlink($file, $link);
-
-        $this->filesystem->symlink($file, $link);
-
-        $this->assertTrue(is_link($link));
-        $this->assertEquals($file, readlink($link));
-    }
-
-    public function testSymlinkCreatesTargetDirectoryIfItDoesNotExist()
-    {
-        $this->markAsSkippedIfSymlinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link1 = $this->workspace.\DIRECTORY_SEPARATOR.'dir'.\DIRECTORY_SEPARATOR.'link';
-        $link2 = $this->workspace.\DIRECTORY_SEPARATOR.'dir'.\DIRECTORY_SEPARATOR.'subdir'.\DIRECTORY_SEPARATOR.'link';
-
-        touch($file);
-
-        $this->filesystem->symlink($file, $link1);
-        $this->filesystem->symlink($file, $link2);
-
-        $this->assertTrue(is_link($link1));
-        $this->assertEquals($file, readlink($link1));
-        $this->assertTrue(is_link($link2));
-        $this->assertEquals($file, readlink($link2));
-    }
-
-    public function testLink()
-    {
-        $this->markAsSkippedIfLinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        touch($file);
-        $this->filesystem->hardlink($file, $link);
-
-        $this->assertTrue(is_file($link));
-        $this->assertEquals(fileinode($file), fileinode($link));
-    }
-
-    /**
-     * @depends testLink
-     */
-    public function testRemoveLink()
-    {
-        $this->markAsSkippedIfLinkIsMissing();
-
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        $this->filesystem->remove($link);
-
-        $this->assertTrue(!is_file($link));
-    }
-
-    public function testLinkIsOverwrittenIfPointsToDifferentTarget()
-    {
-        $this->markAsSkippedIfLinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $file2 = $this->workspace.\DIRECTORY_SEPARATOR.'file2';
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        touch($file);
-        touch($file2);
-        link($file2, $link);
-
-        $this->filesystem->hardlink($file, $link);
-
-        $this->assertTrue(is_file($link));
-        $this->assertEquals(fileinode($file), fileinode($link));
-    }
-
-    public function testLinkIsNotOverwrittenIfAlreadyCreated()
-    {
-        $this->markAsSkippedIfLinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        touch($file);
-        link($file, $link);
-
-        $this->filesystem->hardlink($file, $link);
-
-        $this->assertTrue(is_file($link));
-        $this->assertEquals(fileinode($file), fileinode($link));
-    }
-
-    public function testLinkWithSeveralTargets()
-    {
-        $this->markAsSkippedIfLinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link1 = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-        $link2 = $this->workspace.\DIRECTORY_SEPARATOR.'link2';
-
-        touch($file);
-
-        $this->filesystem->hardlink($file, [$link1, $link2]);
-
-        $this->assertTrue(is_file($link1));
-        $this->assertEquals(fileinode($file), fileinode($link1));
-        $this->assertTrue(is_file($link2));
-        $this->assertEquals(fileinode($file), fileinode($link2));
-    }
-
-    public function testLinkWithSameTarget()
-    {
-        $this->markAsSkippedIfLinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        touch($file);
-
-        // practically same as testLinkIsNotOverwrittenIfAlreadyCreated
-        $this->filesystem->hardlink($file, [$link, $link]);
-
-        $this->assertTrue(is_file($link));
-        $this->assertEquals(fileinode($file), fileinode($link));
-    }
-
-    public function testReadRelativeLink()
-    {
-        $this->markAsSkippedIfSymlinkIsMissing();
-
-        if ('\\' === \DIRECTORY_SEPARATOR) {
-            $this->markTestSkipped('Relative symbolic links are not supported on Windows');
-        }
-
-        $file = $this->workspace.'/file';
-        $link1 = $this->workspace.'/dir/link';
-        $link2 = $this->workspace.'/dir/link2';
-        touch($file);
-
-        $this->filesystem->symlink('../file', $link1);
-        $this->filesystem->symlink('link', $link2);
-
-        $this->assertEquals($this->normalize('../file'), $this->filesystem->readlink($link1));
-        $this->assertEquals('link', $this->filesystem->readlink($link2));
-        $this->assertEquals($file, $this->filesystem->readlink($link1, true));
-        $this->assertEquals($file, $this->filesystem->readlink($link2, true));
-        $this->assertEquals($file, $this->filesystem->readlink($file, true));
-    }
-
-    public function testReadAbsoluteLink()
-    {
-        $this->markAsSkippedIfSymlinkIsMissing();
-
-        $file = $this->normalize($this->workspace.'/file');
-        $link1 = $this->normalize($this->workspace.'/dir/link');
-        $link2 = $this->normalize($this->workspace.'/dir/link2');
-        touch($file);
-
-        $this->filesystem->symlink($file, $link1);
-        $this->filesystem->symlink($link1, $link2);
-
-        $this->assertEquals($file, $this->filesystem->readlink($link1));
-        $this->assertEquals($link1, $this->filesystem->readlink($link2));
-        $this->assertEquals($file, $this->filesystem->readlink($link1, true));
-        $this->assertEquals($file, $this->filesystem->readlink($link2, true));
-        $this->assertEquals($file, $this->filesystem->readlink($file, true));
-    }
-
-    public function testReadBrokenLink()
-    {
-        $this->markAsSkippedIfSymlinkIsMissing();
-
-        if ('\\' === \DIRECTORY_SEPARATOR) {
-            $this->markTestSkipped('Windows does not support creating "broken" symlinks');
-        }
-
-        $file = $this->workspace.'/file';
-        $link = $this->workspace.'/link';
-
-        $this->filesystem->symlink($file, $link);
-
-        $this->assertEquals($file, $this->filesystem->readlink($link));
-        $this->assertNull($this->filesystem->readlink($link, true));
-
-        touch($file);
-        $this->assertEquals($file, $this->filesystem->readlink($link, true));
-    }
-
-    public function testReadLinkDefaultPathDoesNotExist()
-    {
-        $this->assertNull($this->filesystem->readlink($this->normalize($this->workspace.'/invalid')));
-    }
-
-    public function testReadLinkDefaultPathNotLink()
-    {
-        $file = $this->normalize($this->workspace.'/file');
-        touch($file);
-
-        $this->assertNull($this->filesystem->readlink($file));
-    }
-
-    public function testReadLinkCanonicalizePath()
-    {
-        $this->markAsSkippedIfSymlinkIsMissing();
-
-        $file = $this->normalize($this->workspace.'/file');
-        mkdir($this->normalize($this->workspace.'/dir'));
-        touch($file);
-
-        $this->assertEquals($file, $this->filesystem->readlink($this->normalize($this->workspace.'/dir/../file'), true));
-    }
-
-    public function testReadLinkCanonicalizedPathDoesNotExist()
-    {
-        $this->assertNull($this->filesystem->readlink($this->normalize($this->workspace.'invalid'), true));
-    }
-
-    /**
-     * @dataProvider providePathsForMakePathRelative
-     */
-    public function testMakePathRelative($endPath, $startPath, $expectedPath)
-    {
-        $path = $this->filesystem->makePathRelative($endPath, $startPath);
-
-        $this->assertEquals($expectedPath, $path);
-    }
-
-    public function providePathsForMakePathRelative()
-    {
-        $paths = [
-            ['/var/lib/symfony/src/Symfony/', '/var/lib/symfony/src/Symfony/Component', '../'],
-            ['/var/lib/symfony/src/Symfony/', '/var/lib/symfony/src/Symfony/Component/', '../'],
-            ['/var/lib/symfony/src/Symfony', '/var/lib/symfony/src/Symfony/Component', '../'],
-            ['/var/lib/symfony/src/Symfony', '/var/lib/symfony/src/Symfony/Component/', '../'],
-            ['/usr/lib/symfony/', '/var/lib/symfony/src/Symfony/Component', '../../../../../../usr/lib/symfony/'],
-            ['/var/lib/symfony/src/Symfony/', '/var/lib/symfony/', 'src/Symfony/'],
-            ['/aa/bb', '/aa/bb', './'],
-            ['/aa/bb', '/aa/bb/', './'],
-            ['/aa/bb/', '/aa/bb', './'],
-            ['/aa/bb/', '/aa/bb/', './'],
-            ['/aa/bb/cc', '/aa/bb/cc/dd', '../'],
-            ['/aa/bb/cc', '/aa/bb/cc/dd/', '../'],
-            ['/aa/bb/cc/', '/aa/bb/cc/dd', '../'],
-            ['/aa/bb/cc/', '/aa/bb/cc/dd/', '../'],
-            ['/aa/bb/cc', '/aa', 'bb/cc/'],
-            ['/aa/bb/cc', '/aa/', 'bb/cc/'],
-            ['/aa/bb/cc/', '/aa', 'bb/cc/'],
-            ['/aa/bb/cc/', '/aa/', 'bb/cc/'],
-            ['/a/aab/bb', '/a/aa', '../aab/bb/'],
-            ['/a/aab/bb', '/a/aa/', '../aab/bb/'],
-            ['/a/aab/bb/', '/a/aa', '../aab/bb/'],
-            ['/a/aab/bb/', '/a/aa/', '../aab/bb/'],
-            ['/a/aab/bb/', '/', 'a/aab/bb/'],
-            ['/a/aab/bb/', '/b/aab', '../../a/aab/bb/'],
-            ['/aab/bb', '/aa', '../aab/bb/'],
-            ['/aab', '/aa', '../aab/'],
-            ['/aa/bb/cc', '/aa/dd/..', 'bb/cc/'],
-            ['/aa/../bb/cc', '/aa/dd/..', '../bb/cc/'],
-            ['/aa/bb/../../cc', '/aa/../dd/..', 'cc/'],
-            ['/../aa/bb/cc', '/aa/dd/..', 'bb/cc/'],
-            ['/../../aa/../bb/cc', '/aa/dd/..', '../bb/cc/'],
-            ['C:/aa/bb/cc', 'C:/aa/dd/..', 'bb/cc/'],
-            ['C:/aa/bb/cc', 'c:/aa/dd/..', 'bb/cc/'],
-            ['c:/aa/../bb/cc', 'c:/aa/dd/..', '../bb/cc/'],
-            ['C:/aa/bb/../../cc', 'C:/aa/../dd/..', 'cc/'],
-            ['C:/../aa/bb/cc', 'C:/aa/dd/..', 'bb/cc/'],
-            ['C:/../../aa/../bb/cc', 'C:/aa/dd/..', '../bb/cc/'],
-            ['D:/', 'C:/aa/../bb/cc', 'D:/'],
-            ['D:/aa/bb', 'C:/aa', 'D:/aa/bb/'],
-            ['D:/../../aa/../bb/cc', 'C:/aa/dd/..', 'D:/bb/cc/'],
-        ];
-
-        if ('\\' === \DIRECTORY_SEPARATOR) {
-            $paths[] = ['c:\var\lib/symfony/src/Symfony/', 'c:/var/lib/symfony/', 'src/Symfony/'];
-        }
-
-        return $paths;
-    }
-
-    /**
-     * @group legacy
-     * @dataProvider provideLegacyPathsForMakePathRelativeWithRelativePaths
-     * @expectedDeprecation Support for passing relative paths to Symfony\Component\Filesystem\Filesystem::makePathRelative() is deprecated since Symfony 3.4 and will be removed in 4.0.
-     */
-    public function testMakePathRelativeWithRelativePaths($endPath, $startPath, $expectedPath)
-    {
-        $path = $this->filesystem->makePathRelative($endPath, $startPath);
-
-        $this->assertEquals($expectedPath, $path);
-    }
-
-    public function provideLegacyPathsForMakePathRelativeWithRelativePaths()
-    {
-        return [
-            ['usr/lib/symfony/', 'var/lib/symfony/src/Symfony/Component', '../../../../../../usr/lib/symfony/'],
-            ['aa/bb', 'aa/cc', '../bb/'],
-            ['aa/cc', 'bb/cc', '../../aa/cc/'],
-            ['aa/bb', 'aa/./cc', '../bb/'],
-            ['aa/./bb', 'aa/cc', '../bb/'],
-            ['aa/./bb', 'aa/./cc', '../bb/'],
-            ['../../', '../../', './'],
-            ['../aa/bb/', 'aa/bb/', '../../../aa/bb/'],
-            ['../../../', '../../', '../'],
-            ['', '', './'],
-            ['', 'aa/', '../'],
-            ['aa/', '', 'aa/'],
-        ];
-    }
-
-    public function testMirrorCopiesFilesAndDirectoriesRecursively()
-    {
-        $sourcePath = $this->workspace.\DIRECTORY_SEPARATOR.'source'.\DIRECTORY_SEPARATOR;
-        $directory = $sourcePath.'directory'.\DIRECTORY_SEPARATOR;
-        $file1 = $directory.'file1';
-        $file2 = $sourcePath.'file2';
-
-        mkdir($sourcePath);
-        mkdir($directory);
-        file_put_contents($file1, 'FILE1');
-        file_put_contents($file2, 'FILE2');
-
-        $targetPath = $this->workspace.\DIRECTORY_SEPARATOR.'target'.\DIRECTORY_SEPARATOR;
-
-        $this->filesystem->mirror($sourcePath, $targetPath);
-
-        $this->assertDirectoryExists($targetPath);
-        $this->assertDirectoryExists($targetPath.'directory');
-        $this->assertFileEquals($file1, $targetPath.'directory'.\DIRECTORY_SEPARATOR.'file1');
-        $this->assertFileEquals($file2, $targetPath.'file2');
-
-        $this->filesystem->remove($file1);
-
-        $this->filesystem->mirror($sourcePath, $targetPath, null, ['delete' => false]);
-        $this->assertTrue($this->filesystem->exists($targetPath.'directory'.\DIRECTORY_SEPARATOR.'file1'));
-
-        $this->filesystem->mirror($sourcePath, $targetPath, null, ['delete' => true]);
-        $this->assertFalse($this->filesystem->exists($targetPath.'directory'.\DIRECTORY_SEPARATOR.'file1'));
-
-        file_put_contents($file1, 'FILE1');
-
-        $this->filesystem->mirror($sourcePath, $targetPath, null, ['delete' => true]);
-        $this->assertTrue($this->filesystem->exists($targetPath.'directory'.\DIRECTORY_SEPARATOR.'file1'));
-
-        $this->filesystem->remove($directory);
-        $this->filesystem->mirror($sourcePath, $targetPath, null, ['delete' => true]);
-        $this->assertFalse($this->filesystem->exists($targetPath.'directory'));
-        $this->assertFalse($this->filesystem->exists($targetPath.'directory'.\DIRECTORY_SEPARATOR.'file1'));
-    }
-
-    public function testMirrorCreatesEmptyDirectory()
-    {
-        $sourcePath = $this->workspace.\DIRECTORY_SEPARATOR.'source'.\DIRECTORY_SEPARATOR;
-
-        mkdir($sourcePath);
-
-        $targetPath = $this->workspace.\DIRECTORY_SEPARATOR.'target'.\DIRECTORY_SEPARATOR;
-
-        $this->filesystem->mirror($sourcePath, $targetPath);
-
-        $this->assertDirectoryExists($targetPath);
-
-        $this->filesystem->remove($sourcePath);
-    }
-
-    public function testMirrorCopiesLinks()
-    {
-        $this->markAsSkippedIfSymlinkIsMissing();
-
-        $sourcePath = $this->workspace.\DIRECTORY_SEPARATOR.'source'.\DIRECTORY_SEPARATOR;
-
-        mkdir($sourcePath);
-        file_put_contents($sourcePath.'file1', 'FILE1');
-        symlink($sourcePath.'file1', $sourcePath.'link1');
-
-        $targetPath = $this->workspace.\DIRECTORY_SEPARATOR.'target'.\DIRECTORY_SEPARATOR;
-
-        $this->filesystem->mirror($sourcePath, $targetPath);
-
-        $this->assertDirectoryExists($targetPath);
-        $this->assertFileEquals($sourcePath.'file1', $targetPath.'link1');
-        $this->assertTrue(is_link($targetPath.\DIRECTORY_SEPARATOR.'link1'));
-    }
-
-    public function testMirrorCopiesLinkedDirectoryContents()
-    {
-        $this->markAsSkippedIfSymlinkIsMissing(true);
-
-        $sourcePath = $this->workspace.\DIRECTORY_SEPARATOR.'source'.\DIRECTORY_SEPARATOR;
-
-        mkdir($sourcePath.'nested/', 0777, true);
-        file_put_contents($sourcePath.'/nested/file1.txt', 'FILE1');
-        // Note: We symlink directory, not file
-        symlink($sourcePath.'nested', $sourcePath.'link1');
-
-        $targetPath = $this->workspace.\DIRECTORY_SEPARATOR.'target'.\DIRECTORY_SEPARATOR;
-
-        $this->filesystem->mirror($sourcePath, $targetPath);
-
-        $this->assertDirectoryExists($targetPath);
-        $this->assertFileEquals($sourcePath.'/nested/file1.txt', $targetPath.'link1/file1.txt');
-        $this->assertTrue(is_link($targetPath.\DIRECTORY_SEPARATOR.'link1'));
-    }
-
-    public function testMirrorCopiesRelativeLinkedContents()
-    {
-        $this->markAsSkippedIfSymlinkIsMissing(true);
-
-        $sourcePath = $this->workspace.\DIRECTORY_SEPARATOR.'source'.\DIRECTORY_SEPARATOR;
-        $oldPath = getcwd();
-
-        mkdir($sourcePath.'nested/', 0777, true);
-        file_put_contents($sourcePath.'/nested/file1.txt', 'FILE1');
-        // Note: Create relative symlink
-        chdir($sourcePath);
-        symlink('nested', 'link1');
-
-        chdir($oldPath);
-
-        $targetPath = $this->workspace.\DIRECTORY_SEPARATOR.'target'.\DIRECTORY_SEPARATOR;
-
-        $this->filesystem->mirror($sourcePath, $targetPath);
-
-        $this->assertDirectoryExists($targetPath);
-        $this->assertFileEquals($sourcePath.'/nested/file1.txt', $targetPath.'link1/file1.txt');
-        $this->assertTrue(is_link($targetPath.\DIRECTORY_SEPARATOR.'link1'));
-        $this->assertEquals('\\' === \DIRECTORY_SEPARATOR ? realpath($sourcePath.'\nested') : 'nested', readlink($targetPath.\DIRECTORY_SEPARATOR.'link1'));
-    }
-
-    public function testMirrorContentsWithSameNameAsSourceOrTargetWithoutDeleteOption()
-    {
-        $sourcePath = $this->workspace.\DIRECTORY_SEPARATOR.'source'.\DIRECTORY_SEPARATOR;
-
-        mkdir($sourcePath);
-        touch($sourcePath.'source');
-        touch($sourcePath.'target');
-
-        $targetPath = $this->workspace.\DIRECTORY_SEPARATOR.'target'.\DIRECTORY_SEPARATOR;
-
-        $oldPath = getcwd();
-        chdir($this->workspace);
-
-        $this->filesystem->mirror('source', $targetPath);
-
-        chdir($oldPath);
-
-        $this->assertDirectoryExists($targetPath);
-        $this->assertFileExists($targetPath.'source');
-        $this->assertFileExists($targetPath.'target');
-    }
-
-    public function testMirrorContentsWithSameNameAsSourceOrTargetWithDeleteOption()
-    {
-        $sourcePath = $this->workspace.\DIRECTORY_SEPARATOR.'source'.\DIRECTORY_SEPARATOR;
-
-        mkdir($sourcePath);
-        touch($sourcePath.'source');
-
-        $targetPath = $this->workspace.\DIRECTORY_SEPARATOR.'target'.\DIRECTORY_SEPARATOR;
-
-        mkdir($targetPath);
-        touch($targetPath.'source');
-        touch($targetPath.'target');
-
-        $oldPath = getcwd();
-        chdir($this->workspace);
-
-        $this->filesystem->mirror('source', 'target', null, ['delete' => true]);
-
-        chdir($oldPath);
-
-        $this->assertDirectoryExists($targetPath);
-        $this->assertFileExists($targetPath.'source');
-        $this->assertFileDoesNotExist($targetPath.'target');
-    }
-
-    public function testMirrorFromSubdirectoryInToParentDirectory()
-    {
-        $targetPath = $this->workspace.\DIRECTORY_SEPARATOR.'foo'.\DIRECTORY_SEPARATOR;
-        $sourcePath = $targetPath.'bar'.\DIRECTORY_SEPARATOR;
-        $file1 = $sourcePath.'file1';
-        $file2 = $sourcePath.'file2';
-
-        $this->filesystem->mkdir($sourcePath);
-        file_put_contents($file1, 'FILE1');
-        file_put_contents($file2, 'FILE2');
-
-        $this->filesystem->mirror($sourcePath, $targetPath);
-
-        $this->assertFileEquals($file1, $targetPath.'file1');
-    }
-
-    /**
-     * @dataProvider providePathsForIsAbsolutePath
-     */
-    public function testIsAbsolutePath($path, $expectedResult)
-    {
-        $result = $this->filesystem->isAbsolutePath($path);
-
-        $this->assertEquals($expectedResult, $result);
-    }
-
-    public function providePathsForIsAbsolutePath()
-    {
-        return [
-            ['/var/lib', true],
-            ['c:\\\\var\\lib', true],
-            ['\\var\\lib', true],
-            ['var/lib', false],
-            ['../var/lib', false],
-            ['', false],
-            [null, false],
-        ];
-    }
-
-    public function testTempnam()
-    {
-        $dirname = $this->workspace;
-
-        $filename = $this->filesystem->tempnam($dirname, 'foo');
-
-        $this->assertFileExists($filename);
-    }
-
-    public function testTempnamWithFileScheme()
-    {
-        $scheme = 'file://';
-        $dirname = $scheme.$this->workspace;
-
-        $filename = $this->filesystem->tempnam($dirname, 'foo');
-
-        $this->assertStringStartsWith($scheme, $filename);
-        $this->assertFileExists($filename);
-    }
-
-    public function testTempnamWithMockScheme()
-    {
-        stream_wrapper_register('mock', 'Symfony\Component\Filesystem\Tests\Fixtures\MockStream\MockStream');
-
-        $scheme = 'mock://';
-        $dirname = $scheme.$this->workspace;
-
-        $filename = $this->filesystem->tempnam($dirname, 'foo');
-
-        $this->assertStringStartsWith($scheme, $filename);
-        $this->assertFileExists($filename);
-    }
-
-    public function testTempnamWithZlibSchemeFails()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        $scheme = 'compress.zlib://';
-        $dirname = $scheme.$this->workspace;
-
-        // The compress.zlib:// stream does not support mode x: creates the file, errors "failed to open stream: operation failed" and returns false
-        $this->filesystem->tempnam($dirname, 'bar');
-    }
-
-    public function testTempnamWithPHPTempSchemeFails()
-    {
-        $scheme = 'php://temp';
-        $dirname = $scheme;
-
-        $filename = $this->filesystem->tempnam($dirname, 'bar');
-
-        $this->assertStringStartsWith($scheme, $filename);
-
-        // The php://temp stream deletes the file after close
-        $this->assertFileDoesNotExist($filename);
-    }
-
-    public function testTempnamWithPharSchemeFails()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        // Skip test if Phar disabled phar.readonly must be 0 in php.ini
-        if (!\Phar::canWrite()) {
-            $this->markTestSkipped('This test cannot run when phar.readonly is 1.');
-        }
-
-        $scheme = 'phar://';
-        $dirname = $scheme.$this->workspace;
-        $pharname = 'foo.phar';
-
-        new \Phar($this->workspace.'/'.$pharname, 0, $pharname);
-        // The phar:// stream does not support mode x: fails to create file, errors "failed to open stream: phar error: "$filename" is not a file in phar "$pharname"" and returns false
-        $this->filesystem->tempnam($dirname, $pharname.'/bar');
-    }
-
-    public function testTempnamWithHTTPSchemeFails()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        $scheme = 'http://';
-        $dirname = $scheme.$this->workspace;
-
-        // The http:// scheme is read-only
-        $this->filesystem->tempnam($dirname, 'bar');
-    }
-
-    public function testTempnamOnUnwritableFallsBackToSysTmp()
-    {
-        $scheme = 'file://';
-        $dirname = $scheme.$this->workspace.\DIRECTORY_SEPARATOR.'does_not_exist';
-
-        $filename = $this->filesystem->tempnam($dirname, 'bar');
-        $realTempDir = realpath(sys_get_temp_dir());
-        $this->assertStringStartsWith(rtrim($scheme.$realTempDir, \DIRECTORY_SEPARATOR), $filename);
-        $this->assertFileExists($filename);
-
-        // Tear down
-        @unlink($filename);
-    }
-
-    public function testDumpFile()
-    {
-        $filename = $this->workspace.\DIRECTORY_SEPARATOR.'foo'.\DIRECTORY_SEPARATOR.'baz.txt';
-
-        // skip mode check on Windows
-        if ('\\' !== \DIRECTORY_SEPARATOR) {
-            $oldMask = umask(0002);
-        }
-
-        $this->filesystem->dumpFile($filename, 'bar');
-        $this->assertFileExists($filename);
-        $this->assertStringEqualsFile($filename, 'bar');
-
-        // skip mode check on Windows
-        if ('\\' !== \DIRECTORY_SEPARATOR) {
-            $this->assertFilePermissions(664, $filename);
-            umask($oldMask);
-        }
-    }
-
-    public function testDumpFileWithArray()
-    {
-        $filename = $this->workspace.\DIRECTORY_SEPARATOR.'foo'.\DIRECTORY_SEPARATOR.'baz.txt';
-
-        $this->filesystem->dumpFile($filename, ['bar']);
-
-        $this->assertFileExists($filename);
-        $this->assertStringEqualsFile($filename, 'bar');
-    }
-
-    public function testDumpFileWithResource()
-    {
-        $filename = $this->workspace.\DIRECTORY_SEPARATOR.'foo'.\DIRECTORY_SEPARATOR.'baz.txt';
-
-        $resource = fopen('php://memory', 'rw');
-        fwrite($resource, 'bar');
-        fseek($resource, 0);
-
-        $this->filesystem->dumpFile($filename, $resource);
-
-        fclose($resource);
-        $this->assertFileExists($filename);
-        $this->assertStringEqualsFile($filename, 'bar');
-    }
-
-    public function testDumpFileOverwritesAnExistingFile()
-    {
-        $filename = $this->workspace.\DIRECTORY_SEPARATOR.'foo.txt';
-        file_put_contents($filename, 'FOO BAR');
-
-        $this->filesystem->dumpFile($filename, 'bar');
-
-        $this->assertFileExists($filename);
-        $this->assertStringEqualsFile($filename, 'bar');
-    }
-
-    public function testDumpFileWithFileScheme()
-    {
-        if (\defined('HHVM_VERSION')) {
-            $this->markTestSkipped('HHVM does not handle the file:// scheme correctly');
-        }
-
-        $scheme = 'file://';
-        $filename = $scheme.$this->workspace.\DIRECTORY_SEPARATOR.'foo'.\DIRECTORY_SEPARATOR.'baz.txt';
-
-        $this->filesystem->dumpFile($filename, 'bar');
-
-        $this->assertFileExists($filename);
-        $this->assertStringEqualsFile($filename, 'bar');
-    }
-
-    public function testDumpFileWithZlibScheme()
-    {
-        $scheme = 'compress.zlib://';
-        $filename = $this->workspace.\DIRECTORY_SEPARATOR.'foo'.\DIRECTORY_SEPARATOR.'baz.txt';
-
-        $this->filesystem->dumpFile($filename, 'bar');
-
-        // Zlib stat uses file:// wrapper so remove scheme
-        $this->assertFileExists(str_replace($scheme, '', $filename));
-        $this->assertStringEqualsFile($filename, 'bar');
-    }
-
-    public function testAppendToFile()
-    {
-        $filename = $this->workspace.\DIRECTORY_SEPARATOR.'foo'.\DIRECTORY_SEPARATOR.'bar.txt';
-
-        // skip mode check on Windows
-        if ('\\' !== \DIRECTORY_SEPARATOR) {
-            $oldMask = umask(0002);
-        }
-
-        $this->filesystem->dumpFile($filename, 'foo');
-
-        $this->filesystem->appendToFile($filename, 'bar');
-
-        $this->assertFileExists($filename);
-        $this->assertStringEqualsFile($filename, 'foobar');
-
-        // skip mode check on Windows
-        if ('\\' !== \DIRECTORY_SEPARATOR) {
-            $this->assertFilePermissions(664, $filename);
-            umask($oldMask);
-        }
-    }
-
-    public function testAppendToFileWithScheme()
-    {
-        if (\defined('HHVM_VERSION')) {
-            $this->markTestSkipped('HHVM does not handle the file:// scheme correctly');
-        }
-
-        $scheme = 'file://';
-        $filename = $scheme.$this->workspace.\DIRECTORY_SEPARATOR.'foo'.\DIRECTORY_SEPARATOR.'baz.txt';
-        $this->filesystem->dumpFile($filename, 'foo');
-
-        $this->filesystem->appendToFile($filename, 'bar');
-
-        $this->assertFileExists($filename);
-        $this->assertStringEqualsFile($filename, 'foobar');
-    }
-
-    public function testAppendToFileWithZlibScheme()
-    {
-        $scheme = 'compress.zlib://';
-        $filename = $this->workspace.\DIRECTORY_SEPARATOR.'foo'.\DIRECTORY_SEPARATOR.'baz.txt';
-        $this->filesystem->dumpFile($filename, 'foo');
-
-        // Zlib stat uses file:// wrapper so remove it
-        $this->assertStringEqualsFile(str_replace($scheme, '', $filename), 'foo');
-
-        $this->filesystem->appendToFile($filename, 'bar');
-
-        $this->assertFileExists($filename);
-        $this->assertStringEqualsFile($filename, 'foobar');
-    }
-
-    public function testAppendToFileCreateTheFileIfNotExists()
-    {
-        $filename = $this->workspace.\DIRECTORY_SEPARATOR.'foo'.\DIRECTORY_SEPARATOR.'bar.txt';
-
-        // skip mode check on Windows
-        if ('\\' !== \DIRECTORY_SEPARATOR) {
-            $oldMask = umask(0002);
-        }
-
-        $this->filesystem->appendToFile($filename, 'bar');
-
-        // skip mode check on Windows
-        if ('\\' !== \DIRECTORY_SEPARATOR) {
-            $this->assertFilePermissions(664, $filename);
-            umask($oldMask);
-        }
-
-        $this->assertFileExists($filename);
-        $this->assertStringEqualsFile($filename, 'bar');
-    }
-
-    public function testDumpKeepsExistingPermissionsWhenOverwritingAnExistingFile()
-    {
-        $this->markAsSkippedIfChmodIsMissing();
-
-        $filename = $this->workspace.\DIRECTORY_SEPARATOR.'foo.txt';
-        file_put_contents($filename, 'FOO BAR');
-        chmod($filename, 0745);
-
-        $this->filesystem->dumpFile($filename, 'bar', null);
-
-        $this->assertFilePermissions(745, $filename);
-    }
-
-    public function testCopyShouldKeepExecutionPermission()
-    {
-        $this->markAsSkippedIfChmodIsMissing();
-
-        $sourceFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_source_file';
-        $targetFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_target_file';
-
-        file_put_contents($sourceFilePath, 'SOURCE FILE');
-        chmod($sourceFilePath, 0745);
-
-        $this->filesystem->copy($sourceFilePath, $targetFilePath);
-
-        $this->assertFilePermissions(767, $targetFilePath);
-    }
-
-    /**
-     * Normalize the given path (transform each blackslash into a real directory separator).
-     *
-     * @param string $path
-     *
-     * @return string
-     */
-    private function normalize($path)
-    {
-        return str_replace('/', \DIRECTORY_SEPARATOR, $path);
-    }
-}
diff --git a/vendor/symfony/filesystem/Tests/FilesystemTestCase.php b/vendor/symfony/filesystem/Tests/FilesystemTestCase.php
deleted file mode 100644
index b7038550d8..0000000000
--- a/vendor/symfony/filesystem/Tests/FilesystemTestCase.php
+++ /dev/null
@@ -1,165 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Filesystem\Tests;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Filesystem\Filesystem;
-
-class FilesystemTestCase extends TestCase
-{
-    private $umask;
-
-    protected $longPathNamesWindows = [];
-
-    /**
-     * @var Filesystem
-     */
-    protected $filesystem = null;
-
-    /**
-     * @var string
-     */
-    protected $workspace = null;
-
-    /**
-     * @var bool|null Flag for hard links on Windows
-     */
-    private static $linkOnWindows = null;
-
-    /**
-     * @var bool|null Flag for symbolic links on Windows
-     */
-    private static $symlinkOnWindows = null;
-
-    public static function setUpBeforeClass()
-    {
-        if ('\\' === \DIRECTORY_SEPARATOR) {
-            self::$linkOnWindows = true;
-            $originFile = tempnam(sys_get_temp_dir(), 'li');
-            $targetFile = tempnam(sys_get_temp_dir(), 'li');
-            if (true !== @link($originFile, $targetFile)) {
-                $report = error_get_last();
-                if (\is_array($report) && false !== strpos($report['message'], 'error code(1314)')) {
-                    self::$linkOnWindows = false;
-                }
-            } else {
-                @unlink($targetFile);
-            }
-
-            self::$symlinkOnWindows = true;
-            $originDir = tempnam(sys_get_temp_dir(), 'sl');
-            $targetDir = tempnam(sys_get_temp_dir(), 'sl');
-            if (true !== @symlink($originDir, $targetDir)) {
-                $report = error_get_last();
-                if (\is_array($report) && false !== strpos($report['message'], 'error code(1314)')) {
-                    self::$symlinkOnWindows = false;
-                }
-            } else {
-                @unlink($targetDir);
-            }
-        }
-    }
-
-    protected function setUp()
-    {
-        $this->umask = umask(0);
-        $this->filesystem = new Filesystem();
-        $this->workspace = sys_get_temp_dir().'/'.microtime(true).'.'.mt_rand();
-        mkdir($this->workspace, 0777, true);
-        $this->workspace = realpath($this->workspace);
-    }
-
-    protected function tearDown()
-    {
-        if (!empty($this->longPathNamesWindows)) {
-            foreach ($this->longPathNamesWindows as $path) {
-                exec('DEL '.$path);
-            }
-            $this->longPathNamesWindows = [];
-        }
-
-        $this->filesystem->remove($this->workspace);
-        umask($this->umask);
-    }
-
-    /**
-     * @param int    $expectedFilePerms Expected file permissions as three digits (i.e. 755)
-     * @param string $filePath
-     */
-    protected function assertFilePermissions($expectedFilePerms, $filePath)
-    {
-        $actualFilePerms = (int) substr(sprintf('%o', fileperms($filePath)), -3);
-        $this->assertEquals(
-            $expectedFilePerms,
-            $actualFilePerms,
-            sprintf('File permissions for %s must be %s. Actual %s', $filePath, $expectedFilePerms, $actualFilePerms)
-        );
-    }
-
-    protected function getFileOwner($filepath)
-    {
-        $this->markAsSkippedIfPosixIsMissing();
-
-        $infos = stat($filepath);
-
-        return ($datas = posix_getpwuid($infos['uid'])) ? $datas['name'] : null;
-    }
-
-    protected function getFileGroup($filepath)
-    {
-        $this->markAsSkippedIfPosixIsMissing();
-
-        $infos = stat($filepath);
-        if ($datas = posix_getgrgid($infos['gid'])) {
-            return $datas['name'];
-        }
-
-        $this->markTestSkipped('Unable to retrieve file group name');
-    }
-
-    protected function markAsSkippedIfLinkIsMissing()
-    {
-        if (!\function_exists('link')) {
-            $this->markTestSkipped('link is not supported');
-        }
-
-        if ('\\' === \DIRECTORY_SEPARATOR && false === self::$linkOnWindows) {
-            $this->markTestSkipped('link requires "Create hard links" privilege on windows');
-        }
-    }
-
-    protected function markAsSkippedIfSymlinkIsMissing($relative = false)
-    {
-        if ('\\' === \DIRECTORY_SEPARATOR && false === self::$symlinkOnWindows) {
-            $this->markTestSkipped('symlink requires "Create symbolic links" privilege on Windows');
-        }
-
-        // https://bugs.php.net/69473
-        if ($relative && '\\' === \DIRECTORY_SEPARATOR && 1 === \PHP_ZTS) {
-            $this->markTestSkipped('symlink does not support relative paths on thread safe Windows PHP versions');
-        }
-    }
-
-    protected function markAsSkippedIfChmodIsMissing()
-    {
-        if ('\\' === \DIRECTORY_SEPARATOR) {
-            $this->markTestSkipped('chmod is not supported on Windows');
-        }
-    }
-
-    protected function markAsSkippedIfPosixIsMissing()
-    {
-        if (!\function_exists('posix_isatty')) {
-            $this->markTestSkipped('Function posix_isatty is required.');
-        }
-    }
-}
diff --git a/vendor/symfony/filesystem/Tests/Fixtures/MockStream/MockStream.php b/vendor/symfony/filesystem/Tests/Fixtures/MockStream/MockStream.php
deleted file mode 100644
index 3d80a90582..0000000000
--- a/vendor/symfony/filesystem/Tests/Fixtures/MockStream/MockStream.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Filesystem\Tests\Fixtures\MockStream;
-
-/**
- * Mock stream class to be used with stream_wrapper_register.
- * stream_wrapper_register('mock', 'Symfony\Component\Filesystem\Tests\Fixtures\MockStream\MockStream').
- */
-class MockStream
-{
-    /**
-     * Opens file or URL.
-     *
-     * @param string $path        Specifies the URL that was passed to the original function
-     * @param string $mode        The mode used to open the file, as detailed for fopen()
-     * @param int    $options     Holds additional flags set by the streams API
-     * @param string $opened_path If the path is opened successfully, and STREAM_USE_PATH is set in options,
-     *                            opened_path should be set to the full path of the file/resource that was actually opened
-     *
-     * @return bool
-     */
-    public function stream_open($path, $mode, $options, &$opened_path)
-    {
-        return true;
-    }
-
-    /**
-     * @param string $path  The file path or URL to stat
-     * @param array  $flags Holds additional flags set by the streams API
-     *
-     * @return array File stats
-     */
-    public function url_stat($path, $flags)
-    {
-        return [];
-    }
-}
diff --git a/vendor/symfony/filesystem/Tests/LockHandlerTest.php b/vendor/symfony/filesystem/Tests/LockHandlerTest.php
deleted file mode 100644
index b63e0c224f..0000000000
--- a/vendor/symfony/filesystem/Tests/LockHandlerTest.php
+++ /dev/null
@@ -1,144 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Filesystem\Tests;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Filesystem\Exception\IOException;
-use Symfony\Component\Filesystem\Filesystem;
-use Symfony\Component\Filesystem\LockHandler;
-
-/**
- * @group legacy
- */
-class LockHandlerTest extends TestCase
-{
-    public function testConstructWhenRepositoryDoesNotExist()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        $this->expectExceptionMessage('Failed to create "/a/b/c/d/e": mkdir(): Permission denied');
-        if (!getenv('USER') || 'root' === getenv('USER')) {
-            $this->markTestSkipped('This test will fail if run under superuser');
-        }
-        new LockHandler('lock', '/a/b/c/d/e');
-    }
-
-    public function testConstructWhenRepositoryIsNotWriteable()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        $this->expectExceptionMessage('The directory "/" is not writable.');
-        if (!getenv('USER') || 'root' === getenv('USER')) {
-            $this->markTestSkipped('This test will fail if run under superuser');
-        }
-        new LockHandler('lock', '/');
-    }
-
-    public function testErrorHandlingInLockIfLockPathBecomesUnwritable()
-    {
-        // skip test on Windows; PHP can't easily set file as unreadable on Windows
-        if ('\\' === \DIRECTORY_SEPARATOR) {
-            $this->markTestSkipped('This test cannot run on Windows.');
-        }
-
-        if (!getenv('USER') || 'root' === getenv('USER')) {
-            $this->markTestSkipped('This test will fail if run under superuser');
-        }
-
-        $lockPath = sys_get_temp_dir().'/'.uniqid('', true);
-        $e = null;
-        $wrongMessage = null;
-
-        try {
-            mkdir($lockPath);
-
-            $lockHandler = new LockHandler('lock', $lockPath);
-
-            chmod($lockPath, 0444);
-
-            $lockHandler->lock();
-        } catch (IOException $e) {
-            if (false === strpos($e->getMessage(), 'Permission denied')) {
-                $wrongMessage = $e->getMessage();
-            } else {
-                $this->addToAssertionCount(1);
-            }
-        } catch (\Exception $e) {
-        } catch (\Throwable $e) {
-        }
-
-        if (is_dir($lockPath)) {
-            $fs = new Filesystem();
-            $fs->remove($lockPath);
-        }
-
-        $this->assertInstanceOf('Symfony\Component\Filesystem\Exception\IOException', $e, sprintf('Expected IOException to be thrown, got %s instead.', \get_class($e)));
-        $this->assertNull($wrongMessage, sprintf('Expected exception message to contain "Permission denied", got "%s" instead.', $wrongMessage));
-    }
-
-    public function testConstructSanitizeName()
-    {
-        $lock = new LockHandler('<?php echo "% hello word ! %" ?>');
-
-        $file = sprintf('%s/sf.-php-echo-hello-word-.4b3d9d0d27ddef3a78a64685dda3a963e478659a9e5240feaf7b4173a8f28d5f.lock', sys_get_temp_dir());
-        // ensure the file does not exist before the lock
-        @unlink($file);
-
-        $lock->lock();
-
-        $this->assertFileExists($file);
-
-        $lock->release();
-    }
-
-    public function testLockRelease()
-    {
-        $name = 'symfony-test-filesystem.lock';
-
-        $l1 = new LockHandler($name);
-        $l2 = new LockHandler($name);
-
-        $this->assertTrue($l1->lock());
-        $this->assertFalse($l2->lock());
-
-        $l1->release();
-
-        $this->assertTrue($l2->lock());
-        $l2->release();
-    }
-
-    public function testLockTwice()
-    {
-        $name = 'symfony-test-filesystem.lock';
-
-        $lockHandler = new LockHandler($name);
-
-        $this->assertTrue($lockHandler->lock());
-        $this->assertTrue($lockHandler->lock());
-
-        $lockHandler->release();
-    }
-
-    public function testLockIsReleased()
-    {
-        $name = 'symfony-test-filesystem.lock';
-
-        $l1 = new LockHandler($name);
-        $l2 = new LockHandler($name);
-
-        $this->assertTrue($l1->lock());
-        $this->assertFalse($l2->lock());
-
-        $l1 = null;
-
-        $this->assertTrue($l2->lock());
-        $l2->release();
-    }
-}
diff --git a/vendor/symfony/filesystem/composer.json b/vendor/symfony/filesystem/composer.json
index ee48b0b238..95df9d3e58 100644
--- a/vendor/symfony/filesystem/composer.json
+++ b/vendor/symfony/filesystem/composer.json
@@ -16,7 +16,7 @@
         }
     ],
     "require": {
-        "php": "^5.5.9|>=7.0.8",
+        "php": ">=7.1.3",
         "symfony/polyfill-ctype": "~1.8"
     },
     "autoload": {
diff --git a/vendor/symfony/filesystem/phpunit.xml.dist b/vendor/symfony/filesystem/phpunit.xml.dist
deleted file mode 100644
index 5515fff1ac..0000000000
--- a/vendor/symfony/filesystem/phpunit.xml.dist
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/5.2/phpunit.xsd"
-         backupGlobals="false"
-         colors="true"
-         bootstrap="vendor/autoload.php"
-         failOnRisky="true"
-         failOnWarning="true"
->
-    <php>
-        <ini name="error_reporting" value="-1" />
-    </php>
-
-    <testsuites>
-        <testsuite name="Symfony Filesystem Component Test Suite">
-            <directory>./Tests/</directory>
-        </testsuite>
-    </testsuites>
-
-    <filter>
-        <whitelist>
-            <directory>./</directory>
-            <exclude>
-                <directory>./Tests</directory>
-                <directory>./vendor</directory>
-            </exclude>
-        </whitelist>
-    </filter>
-</phpunit>
diff --git a/vendor/symfony/finder/.gitignore b/vendor/symfony/finder/.gitignore
deleted file mode 100644
index c49a5d8df5..0000000000
--- a/vendor/symfony/finder/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-vendor/
-composer.lock
-phpunit.xml
diff --git a/vendor/symfony/finder/CHANGELOG.md b/vendor/symfony/finder/CHANGELOG.md
index 53c34be860..2045184e83 100644
--- a/vendor/symfony/finder/CHANGELOG.md
+++ b/vendor/symfony/finder/CHANGELOG.md
@@ -1,6 +1,25 @@
 CHANGELOG
 =========
 
+4.3.0
+-----
+
+ * added Finder::ignoreVCSIgnored() to ignore files based on rules listed in .gitignore
+
+4.2.0
+-----
+
+ * added $useNaturalSort option to Finder::sortByName() method
+ * the `Finder::sortByName()` method will have a new `$useNaturalSort`
+   argument in version 5.0, not defining it is deprecated
+ * added `Finder::reverseSorting()` to reverse the sorting
+
+4.0.0
+-----
+
+ * removed `ExceptionInterface`
+ * removed `Symfony\Component\Finder\Iterator\FilterIterator`
+
 3.4.0
 -----
 
diff --git a/vendor/symfony/finder/Comparator/DateComparator.php b/vendor/symfony/finder/Comparator/DateComparator.php
index 3de43ef4b8..d17c77a9d3 100644
--- a/vendor/symfony/finder/Comparator/DateComparator.php
+++ b/vendor/symfony/finder/Comparator/DateComparator.php
@@ -23,7 +23,7 @@ class DateComparator extends Comparator
      *
      * @throws \InvalidArgumentException If the test is not understood
      */
-    public function __construct($test)
+    public function __construct(string $test)
     {
         if (!preg_match('#^\s*(==|!=|[<>]=?|after|since|before|until)?\s*(.+?)\s*$#i', $test, $matches)) {
             throw new \InvalidArgumentException(sprintf('Don\'t understand "%s" as a date test.', $test));
diff --git a/vendor/symfony/finder/Comparator/NumberComparator.php b/vendor/symfony/finder/Comparator/NumberComparator.php
index f62c0e5740..80667c9ddd 100644
--- a/vendor/symfony/finder/Comparator/NumberComparator.php
+++ b/vendor/symfony/finder/Comparator/NumberComparator.php
@@ -39,7 +39,7 @@ class NumberComparator extends Comparator
      *
      * @throws \InvalidArgumentException If the test is not understood
      */
-    public function __construct($test)
+    public function __construct(?string $test)
     {
         if (!preg_match('#^\s*(==|!=|[<>]=?)?\s*([0-9\.]+)\s*([kmg]i?)?\s*$#i', $test, $matches)) {
             throw new \InvalidArgumentException(sprintf('Don\'t understand "%s" as a number test.', $test));
diff --git a/vendor/symfony/config/Tests/Fixtures/BarNode.php b/vendor/symfony/finder/Exception/DirectoryNotFoundException.php
similarity index 57%
rename from vendor/symfony/config/Tests/Fixtures/BarNode.php
rename to vendor/symfony/finder/Exception/DirectoryNotFoundException.php
index 0b9c32deda..c6cc0f2736 100644
--- a/vendor/symfony/config/Tests/Fixtures/BarNode.php
+++ b/vendor/symfony/finder/Exception/DirectoryNotFoundException.php
@@ -9,10 +9,11 @@
  * file that was distributed with this source code.
  */
 
-namespace Symfony\Component\Config\Tests\Fixtures;
+namespace Symfony\Component\Finder\Exception;
 
-use Symfony\Component\Config\Definition\ArrayNode;
-
-class BarNode extends ArrayNode
+/**
+ * @author Andreas Erhard <andreas.erhard@i-med.ac.at>
+ */
+class DirectoryNotFoundException extends \InvalidArgumentException
 {
 }
diff --git a/vendor/symfony/finder/Exception/ExceptionInterface.php b/vendor/symfony/finder/Exception/ExceptionInterface.php
deleted file mode 100644
index 161e9686d2..0000000000
--- a/vendor/symfony/finder/Exception/ExceptionInterface.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Exception;
-
-/**
- * @author Jean-François Simon <contact@jfsimon.fr>
- *
- * @deprecated since 3.3, to be removed in 4.0.
- */
-interface ExceptionInterface
-{
-    /**
-     * @return \Symfony\Component\Finder\Adapter\AdapterInterface
-     */
-    public function getAdapter();
-}
diff --git a/vendor/symfony/finder/Finder.php b/vendor/symfony/finder/Finder.php
index 3e8a9483ea..cf91436214 100644
--- a/vendor/symfony/finder/Finder.php
+++ b/vendor/symfony/finder/Finder.php
@@ -13,6 +13,7 @@
 
 use Symfony\Component\Finder\Comparator\DateComparator;
 use Symfony\Component\Finder\Comparator\NumberComparator;
+use Symfony\Component\Finder\Exception\DirectoryNotFoundException;
 use Symfony\Component\Finder\Iterator\CustomFilterIterator;
 use Symfony\Component\Finder\Iterator\DateRangeFilterIterator;
 use Symfony\Component\Finder\Iterator\DepthRangeFilterIterator;
@@ -39,6 +40,7 @@ class Finder implements \IteratorAggregate, \Countable
 {
     const IGNORE_VCS_FILES = 1;
     const IGNORE_DOT_FILES = 2;
+    const IGNORE_VCS_IGNORED_FILES = 4;
 
     private $mode = 0;
     private $names = [];
@@ -48,6 +50,7 @@ class Finder implements \IteratorAggregate, \Countable
     private $depths = [];
     private $sizes = [];
     private $followLinks = false;
+    private $reverseSorting = false;
     private $sort = false;
     private $ignore = 0;
     private $dirs = [];
@@ -107,17 +110,20 @@ public function files()
      *
      *     $finder->depth('> 1') // the Finder will start matching at level 1.
      *     $finder->depth('< 3') // the Finder will descend at most 3 levels of directories below the starting point.
+     *     $finder->depth(['>= 1', '< 3'])
      *
-     * @param string|int $level The depth level expression
+     * @param string|int|string[]|int[] $levels The depth level expression or an array of depth levels
      *
      * @return $this
      *
      * @see DepthRangeFilterIterator
      * @see NumberComparator
      */
-    public function depth($level)
+    public function depth($levels)
     {
-        $this->depths[] = new Comparator\NumberComparator($level);
+        foreach ((array) $levels as $level) {
+            $this->depths[] = new Comparator\NumberComparator($level);
+        }
 
         return $this;
     }
@@ -131,8 +137,9 @@ public function depth($level)
      *     $finder->date('until 2 days ago');
      *     $finder->date('> now - 2 hours');
      *     $finder->date('>= 2005-10-15');
+     *     $finder->date(['>= 2005-10-15', '<= 2006-05-27']);
      *
-     * @param string $date A date range string
+     * @param string|string[] $dates A date range string or an array of date ranges
      *
      * @return $this
      *
@@ -140,9 +147,11 @@ public function depth($level)
      * @see DateRangeFilterIterator
      * @see DateComparator
      */
-    public function date($date)
+    public function date($dates)
     {
-        $this->dates[] = new Comparator\DateComparator($date);
+        foreach ((array) $dates as $date) {
+            $this->dates[] = new Comparator\DateComparator($date);
+        }
 
         return $this;
     }
@@ -155,16 +164,17 @@ public function date($date)
      *     $finder->name('*.php')
      *     $finder->name('/\.php$/') // same as above
      *     $finder->name('test.php')
+     *     $finder->name(['test.py', 'test.php'])
      *
-     * @param string $pattern A pattern (a regexp, a glob, or a string)
+     * @param string|string[] $patterns A pattern (a regexp, a glob, or a string) or an array of patterns
      *
      * @return $this
      *
      * @see FilenameFilterIterator
      */
-    public function name($pattern)
+    public function name($patterns)
     {
-        $this->names[] = $pattern;
+        $this->names = array_merge($this->names, (array) $patterns);
 
         return $this;
     }
@@ -172,15 +182,15 @@ public function name($pattern)
     /**
      * Adds rules that files must not match.
      *
-     * @param string $pattern A pattern (a regexp, a glob, or a string)
+     * @param string|string[] $patterns A pattern (a regexp, a glob, or a string) or an array of patterns
      *
      * @return $this
      *
      * @see FilenameFilterIterator
      */
-    public function notName($pattern)
+    public function notName($patterns)
     {
-        $this->notNames[] = $pattern;
+        $this->notNames = array_merge($this->notNames, (array) $patterns);
 
         return $this;
     }
@@ -192,16 +202,17 @@ public function notName($pattern)
      *
      *     $finder->contains('Lorem ipsum')
      *     $finder->contains('/Lorem ipsum/i')
+     *     $finder->contains(['dolor', '/ipsum/i'])
      *
-     * @param string $pattern A pattern (string or regexp)
+     * @param string|string[] $patterns A pattern (string or regexp) or an array of patterns
      *
      * @return $this
      *
      * @see FilecontentFilterIterator
      */
-    public function contains($pattern)
+    public function contains($patterns)
     {
-        $this->contains[] = $pattern;
+        $this->contains = array_merge($this->contains, (array) $patterns);
 
         return $this;
     }
@@ -213,16 +224,17 @@ public function contains($pattern)
      *
      *     $finder->notContains('Lorem ipsum')
      *     $finder->notContains('/Lorem ipsum/i')
+     *     $finder->notContains(['lorem', '/dolor/i'])
      *
-     * @param string $pattern A pattern (string or regexp)
+     * @param string|string[] $patterns A pattern (string or regexp) or an array of patterns
      *
      * @return $this
      *
      * @see FilecontentFilterIterator
      */
-    public function notContains($pattern)
+    public function notContains($patterns)
     {
-        $this->notContains[] = $pattern;
+        $this->notContains = array_merge($this->notContains, (array) $patterns);
 
         return $this;
     }
@@ -234,18 +246,19 @@ public function notContains($pattern)
      *
      *     $finder->path('some/special/dir')
      *     $finder->path('/some\/special\/dir/') // same as above
+     *     $finder->path(['some dir', 'another/dir'])
      *
      * Use only / as dirname separator.
      *
-     * @param string $pattern A pattern (a regexp or a string)
+     * @param string|string[] $patterns A pattern (a regexp or a string) or an array of patterns
      *
      * @return $this
      *
      * @see FilenameFilterIterator
      */
-    public function path($pattern)
+    public function path($patterns)
     {
-        $this->paths[] = $pattern;
+        $this->paths = array_merge($this->paths, (array) $patterns);
 
         return $this;
     }
@@ -257,18 +270,19 @@ public function path($pattern)
      *
      *     $finder->notPath('some/special/dir')
      *     $finder->notPath('/some\/special\/dir/') // same as above
+     *     $finder->notPath(['some/file.txt', 'another/file.log'])
      *
      * Use only / as dirname separator.
      *
-     * @param string $pattern A pattern (a regexp or a string)
+     * @param string|string[] $patterns A pattern (a regexp or a string) or an array of patterns
      *
      * @return $this
      *
      * @see FilenameFilterIterator
      */
-    public function notPath($pattern)
+    public function notPath($patterns)
     {
-        $this->notPaths[] = $pattern;
+        $this->notPaths = array_merge($this->notPaths, (array) $patterns);
 
         return $this;
     }
@@ -279,17 +293,20 @@ public function notPath($pattern)
      *     $finder->size('> 10K');
      *     $finder->size('<= 1Ki');
      *     $finder->size(4);
+     *     $finder->size(['> 10K', '< 20K'])
      *
-     * @param string|int $size A size range string or an integer
+     * @param string|int|string[]|int[] $sizes A size range string or an integer or an array of size ranges
      *
      * @return $this
      *
      * @see SizeRangeFilterIterator
      * @see NumberComparator
      */
-    public function size($size)
+    public function size($sizes)
     {
-        $this->sizes[] = new Comparator\NumberComparator($size);
+        foreach ((array) $sizes as $size) {
+            $this->sizes[] = new Comparator\NumberComparator($size);
+        }
 
         return $this;
     }
@@ -358,6 +375,24 @@ public function ignoreVCS($ignoreVCS)
         return $this;
     }
 
+    /**
+     * Forces Finder to obey .gitignore and ignore files based on rules listed there.
+     *
+     * This option is disabled by default.
+     *
+     * @return $this
+     */
+    public function ignoreVCSIgnored(bool $ignoreVCSIgnored)
+    {
+        if ($ignoreVCSIgnored) {
+            $this->ignore |= static::IGNORE_VCS_IGNORED_FILES;
+        } else {
+            $this->ignore &= ~static::IGNORE_VCS_IGNORED_FILES;
+        }
+
+        return $this;
+    }
+
     /**
      * Adds VCS patterns.
      *
@@ -397,13 +432,20 @@ public function sort(\Closure $closure)
      *
      * This can be slow as all the matching files and directories must be retrieved for comparison.
      *
+     * @param bool $useNaturalSort Whether to use natural sort or not, disabled by default
+     *
      * @return $this
      *
      * @see SortableIterator
      */
-    public function sortByName()
+    public function sortByName(/* bool $useNaturalSort = false */)
     {
-        $this->sort = Iterator\SortableIterator::SORT_BY_NAME;
+        if (\func_num_args() < 1 && __CLASS__ !== static::class && __CLASS__ !== (new \ReflectionMethod($this, __FUNCTION__))->getDeclaringClass()->getName() && !$this instanceof \PHPUnit\Framework\MockObject\MockObject && !$this instanceof \Prophecy\Prophecy\ProphecySubjectInterface && !$this instanceof \Mockery\MockInterface) {
+            @trigger_error(sprintf('The "%s()" method will have a new "bool $useNaturalSort = false" argument in version 5.0, not defining it is deprecated since Symfony 4.2.', __METHOD__), \E_USER_DEPRECATED);
+        }
+        $useNaturalSort = 0 < \func_num_args() && func_get_arg(0);
+
+        $this->sort = $useNaturalSort ? Iterator\SortableIterator::SORT_BY_NAME_NATURAL : Iterator\SortableIterator::SORT_BY_NAME;
 
         return $this;
     }
@@ -442,6 +484,18 @@ public function sortByAccessedTime()
         return $this;
     }
 
+    /**
+     * Reverses the sorting.
+     *
+     * @return $this
+     */
+    public function reverseSorting()
+    {
+        $this->reverseSorting = true;
+
+        return $this;
+    }
+
     /**
      * Sorts files and directories by the last inode changed time.
      *
@@ -532,7 +586,7 @@ public function ignoreUnreadableDirs($ignore = true)
      *
      * @return $this
      *
-     * @throws \InvalidArgumentException if one of the directories does not exist
+     * @throws DirectoryNotFoundException if one of the directories does not exist
      */
     public function in($dirs)
     {
@@ -545,7 +599,7 @@ public function in($dirs)
                 sort($glob);
                 $resolvedDirs = array_merge($resolvedDirs, array_map([$this, 'normalizeDir'], $glob));
             } else {
-                throw new \InvalidArgumentException(sprintf('The "%s" directory does not exist.', $dir));
+                throw new DirectoryNotFoundException(sprintf('The "%s" directory does not exist.', $dir));
             }
         }
 
@@ -616,7 +670,7 @@ public function append($iterator)
     }
 
     /**
-     * Check if the any results were found.
+     * Check if any results were found.
      *
      * @return bool
      */
@@ -639,12 +693,7 @@ public function count()
         return iterator_count($this->getIterator());
     }
 
-    /**
-     * @param string $dir
-     *
-     * @return \Iterator
-     */
-    private function searchInDirectory($dir)
+    private function searchInDirectory(string $dir): \Iterator
     {
         $exclude = $this->exclude;
         $notPaths = $this->notPaths;
@@ -657,6 +706,14 @@ private function searchInDirectory($dir)
             $notPaths[] = '#(^|/)\..+(/|$)#';
         }
 
+        if (static::IGNORE_VCS_IGNORED_FILES === (static::IGNORE_VCS_IGNORED_FILES & $this->ignore)) {
+            $gitignoreFilePath = sprintf('%s/.gitignore', $dir);
+            if (!is_readable($gitignoreFilePath)) {
+                throw new \RuntimeException(sprintf('The "ignoreVCSIgnored" option cannot be used by the Finder as the "%s" file is not readable.', $gitignoreFilePath));
+            }
+            $notPaths = array_merge($notPaths, [Gitignore::toRegex(file_get_contents($gitignoreFilePath))]);
+        }
+
         $minDepth = 0;
         $maxDepth = \PHP_INT_MAX;
 
@@ -725,8 +782,8 @@ private function searchInDirectory($dir)
             $iterator = new Iterator\PathFilterIterator($iterator, $this->paths, $notPaths);
         }
 
-        if ($this->sort) {
-            $iteratorAggregate = new Iterator\SortableIterator($iterator, $this->sort);
+        if ($this->sort || $this->reverseSorting) {
+            $iteratorAggregate = new Iterator\SortableIterator($iterator, $this->sort, $this->reverseSorting);
             $iterator = $iteratorAggregate->getIterator();
         }
 
@@ -737,12 +794,8 @@ private function searchInDirectory($dir)
      * Normalizes given directory names by removing trailing slashes.
      *
      * Excluding: (s)ftp:// or ssh2.(s)ftp:// wrapper
-     *
-     * @param string $dir
-     *
-     * @return string
      */
-    private function normalizeDir($dir)
+    private function normalizeDir(string $dir): string
     {
         if ('/' === $dir) {
             return $dir;
diff --git a/vendor/symfony/finder/Gitignore.php b/vendor/symfony/finder/Gitignore.php
new file mode 100644
index 0000000000..dfe0a0a26d
--- /dev/null
+++ b/vendor/symfony/finder/Gitignore.php
@@ -0,0 +1,133 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Finder;
+
+/**
+ * Gitignore matches against text.
+ *
+ * @author Ahmed Abdou <mail@ahmd.io>
+ */
+class Gitignore
+{
+    /**
+     * Returns a regexp which is the equivalent of the gitignore pattern.
+     *
+     * @return string The regexp
+     */
+    public static function toRegex(string $gitignoreFileContent): string
+    {
+        $gitignoreFileContent = preg_replace('/^[^\\\r\n]*#.*/m', '', $gitignoreFileContent);
+        $gitignoreLines = preg_split('/\r\n|\r|\n/', $gitignoreFileContent);
+
+        $positives = [];
+        $negatives = [];
+        foreach ($gitignoreLines as $i => $line) {
+            $line = trim($line);
+            if ('' === $line) {
+                continue;
+            }
+
+            if (1 === preg_match('/^!/', $line)) {
+                $positives[$i] = null;
+                $negatives[$i] = self::getRegexFromGitignore(preg_replace('/^!(.*)/', '${1}', $line), true);
+
+                continue;
+            }
+            $negatives[$i] = null;
+            $positives[$i] = self::getRegexFromGitignore($line);
+        }
+
+        $index = 0;
+        $patterns = [];
+        foreach ($positives as $pattern) {
+            if (null === $pattern) {
+                continue;
+            }
+
+            $negativesAfter = array_filter(\array_slice($negatives, ++$index));
+            if ([] !== $negativesAfter) {
+                $pattern .= sprintf('(?<!%s)', implode('|', $negativesAfter));
+            }
+
+            $patterns[] = $pattern;
+        }
+
+        return sprintf('/^((%s))$/', implode(')|(', $patterns));
+    }
+
+    private static function getRegexFromGitignore(string $gitignorePattern, bool $negative = false): string
+    {
+        $regex = '';
+        $isRelativePath = false;
+        // If there is a separator at the beginning or middle (or both) of the pattern, then the pattern is relative to the directory level of the particular .gitignore file itself
+        $slashPosition = strpos($gitignorePattern, '/');
+        if (false !== $slashPosition && \strlen($gitignorePattern) - 1 !== $slashPosition) {
+            if (0 === $slashPosition) {
+                $gitignorePattern = substr($gitignorePattern, 1);
+            }
+
+            $isRelativePath = true;
+            $regex .= '^';
+        }
+
+        if ('/' === $gitignorePattern[\strlen($gitignorePattern) - 1]) {
+            $gitignorePattern = substr($gitignorePattern, 0, -1);
+        }
+
+        $iMax = \strlen($gitignorePattern);
+        for ($i = 0; $i < $iMax; ++$i) {
+            $tripleChars = substr($gitignorePattern, $i, 3);
+            if ('**/' === $tripleChars || '/**' === $tripleChars) {
+                $regex .= '.*';
+                $i += 2;
+                continue;
+            }
+
+            $doubleChars = substr($gitignorePattern, $i, 2);
+            if ('**' === $doubleChars) {
+                $regex .= '.*';
+                ++$i;
+                continue;
+            }
+            if ('*/' === $doubleChars) {
+                $regex .= '[^\/]*\/?[^\/]*';
+                ++$i;
+                continue;
+            }
+
+            $c = $gitignorePattern[$i];
+            switch ($c) {
+                case '*':
+                    $regex .= $isRelativePath ? '[^\/]*' : '[^\/]*\/?[^\/]*';
+                    break;
+                case '/':
+                case '.':
+                case ':':
+                case '(':
+                case ')':
+                case '{':
+                case '}':
+                    $regex .= '\\'.$c;
+                    break;
+                default:
+                    $regex .= $c;
+            }
+        }
+
+        if ($negative) {
+            // a lookbehind assertion has to be a fixed width (it can not have nested '|' statements)
+            return sprintf('%s$|%s\/$', $regex, $regex);
+        }
+
+        return '(?>'.$regex.'($|\/.*))';
+    }
+}
diff --git a/vendor/symfony/finder/Iterator/CustomFilterIterator.php b/vendor/symfony/finder/Iterator/CustomFilterIterator.php
index 896f7e912f..a30bbd0b9d 100644
--- a/vendor/symfony/finder/Iterator/CustomFilterIterator.php
+++ b/vendor/symfony/finder/Iterator/CustomFilterIterator.php
@@ -19,7 +19,7 @@
  *
  * @author Fabien Potencier <fabien@symfony.com>
  */
-class CustomFilterIterator extends FilterIterator
+class CustomFilterIterator extends \FilterIterator
 {
     private $filters = [];
 
@@ -51,7 +51,7 @@ public function accept()
         $fileinfo = $this->current();
 
         foreach ($this->filters as $filter) {
-            if (false === \call_user_func($filter, $fileinfo)) {
+            if (false === $filter($fileinfo)) {
                 return false;
             }
         }
diff --git a/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php b/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php
index 8a47321a3c..2e97e00d37 100644
--- a/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php
+++ b/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php
@@ -18,7 +18,7 @@
  *
  * @author Fabien Potencier <fabien@symfony.com>
  */
-class DateRangeFilterIterator extends FilterIterator
+class DateRangeFilterIterator extends \FilterIterator
 {
     private $comparators = [];
 
diff --git a/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php b/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php
index d9bbeb48f1..18e751d77b 100644
--- a/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php
+++ b/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php
@@ -16,7 +16,7 @@
  *
  * @author Fabien Potencier <fabien@symfony.com>
  */
-class DepthRangeFilterIterator extends FilterIterator
+class DepthRangeFilterIterator extends \FilterIterator
 {
     private $minDepth = 0;
 
@@ -25,7 +25,7 @@ class DepthRangeFilterIterator extends FilterIterator
      * @param int                        $minDepth The min depth
      * @param int                        $maxDepth The max depth
      */
-    public function __construct(\RecursiveIteratorIterator $iterator, $minDepth = 0, $maxDepth = \PHP_INT_MAX)
+    public function __construct(\RecursiveIteratorIterator $iterator, int $minDepth = 0, int $maxDepth = \PHP_INT_MAX)
     {
         $this->minDepth = $minDepth;
         $iterator->setMaxDepth(\PHP_INT_MAX === $maxDepth ? -1 : $maxDepth);
diff --git a/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php b/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php
index 60bc4e814c..6a1b291ade 100644
--- a/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php
+++ b/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php
@@ -16,7 +16,7 @@
  *
  * @author Fabien Potencier <fabien@symfony.com>
  */
-class ExcludeDirectoryFilterIterator extends FilterIterator implements \RecursiveIterator
+class ExcludeDirectoryFilterIterator extends \FilterIterator implements \RecursiveIterator
 {
     private $iterator;
     private $isRecursive;
@@ -68,6 +68,9 @@ public function accept()
         return true;
     }
 
+    /**
+     * @return bool
+     */
     public function hasChildren()
     {
         return $this->isRecursive && $this->iterator->hasChildren();
diff --git a/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php b/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php
index e9811d4a03..a4c4eec72e 100644
--- a/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php
+++ b/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php
@@ -16,7 +16,7 @@
  *
  * @author Fabien Potencier <fabien@symfony.com>
  */
-class FileTypeFilterIterator extends FilterIterator
+class FileTypeFilterIterator extends \FilterIterator
 {
     const ONLY_FILES = 1;
     const ONLY_DIRECTORIES = 2;
@@ -27,7 +27,7 @@ class FileTypeFilterIterator extends FilterIterator
      * @param \Iterator $iterator The Iterator to filter
      * @param int       $mode     The mode (self::ONLY_FILES or self::ONLY_DIRECTORIES)
      */
-    public function __construct(\Iterator $iterator, $mode)
+    public function __construct(\Iterator $iterator, int $mode)
     {
         $this->mode = $mode;
 
diff --git a/vendor/symfony/finder/Iterator/FilterIterator.php b/vendor/symfony/finder/Iterator/FilterIterator.php
deleted file mode 100644
index c16dd8fa9e..0000000000
--- a/vendor/symfony/finder/Iterator/FilterIterator.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Iterator;
-
-/**
- * This iterator just overrides the rewind method in order to correct a PHP bug,
- * which existed before version 5.5.23/5.6.7.
- *
- * @see https://bugs.php.net/68557
- *
- * @author Alex Bogomazov
- *
- * @deprecated since 3.4, to be removed in 4.0.
- */
-abstract class FilterIterator extends \FilterIterator
-{
-    /**
-     * This is a workaround for the problem with \FilterIterator leaving inner \FilesystemIterator in wrong state after
-     * rewind in some cases.
-     *
-     * @see FilterIterator::rewind()
-     */
-    public function rewind()
-    {
-        if (\PHP_VERSION_ID > 50607 || (\PHP_VERSION_ID > 50523 && \PHP_VERSION_ID < 50600)) {
-            parent::rewind();
-
-            return;
-        }
-
-        $iterator = $this;
-        while ($iterator instanceof \OuterIterator) {
-            $innerIterator = $iterator->getInnerIterator();
-
-            if ($innerIterator instanceof RecursiveDirectoryIterator) {
-                // this condition is necessary for iterators to work properly with non-local filesystems like ftp
-                if ($innerIterator->isRewindable()) {
-                    $innerIterator->next();
-                    $innerIterator->rewind();
-                }
-            } elseif ($innerIterator instanceof \FilesystemIterator) {
-                $innerIterator->next();
-                $innerIterator->rewind();
-            }
-
-            $iterator = $innerIterator;
-        }
-
-        parent::rewind();
-    }
-}
diff --git a/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php b/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php
index ee365a58b0..18b082ec0b 100644
--- a/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php
+++ b/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php
@@ -16,7 +16,7 @@
  *
  * @author Fabien Potencier <fabien@symfony.com>
  */
-abstract class MultiplePcreFilterIterator extends FilterIterator
+abstract class MultiplePcreFilterIterator extends \FilterIterator
 {
     protected $matchRegexps = [];
     protected $noMatchRegexps = [];
diff --git a/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php b/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php
index 63764d407d..7616b14a24 100644
--- a/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php
+++ b/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php
@@ -37,13 +37,9 @@ class RecursiveDirectoryIterator extends \RecursiveDirectoryIterator
     private $directorySeparator = '/';
 
     /**
-     * @param string $path
-     * @param int    $flags
-     * @param bool   $ignoreUnreadableDirs
-     *
      * @throws \RuntimeException
      */
-    public function __construct($path, $flags, $ignoreUnreadableDirs = false)
+    public function __construct(string $path, int $flags, bool $ignoreUnreadableDirs = false)
     {
         if ($flags & (self::CURRENT_AS_PATHNAME | self::CURRENT_AS_SELF)) {
             throw new \RuntimeException('This iterator only support returning current as fileinfo.');
@@ -120,11 +116,6 @@ public function rewind()
             return;
         }
 
-        // @see https://bugs.php.net/68557
-        if (\PHP_VERSION_ID < 50523 || \PHP_VERSION_ID >= 50600 && \PHP_VERSION_ID < 50607) {
-            parent::next();
-        }
-
         parent::rewind();
     }
 
@@ -139,11 +130,6 @@ public function isRewindable()
             return $this->rewindable;
         }
 
-        // workaround for an HHVM bug, should be removed when https://github.com/facebook/hhvm/issues/7281 is fixed
-        if ('' === $this->getPath()) {
-            return $this->rewindable = false;
-        }
-
         if (false !== $stream = @opendir($this->getPath())) {
             $infos = stream_get_meta_data($stream);
             closedir($stream);
diff --git a/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php b/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php
index 4e521c8c90..2aeef67b87 100644
--- a/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php
+++ b/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php
@@ -18,7 +18,7 @@
  *
  * @author Fabien Potencier <fabien@symfony.com>
  */
-class SizeRangeFilterIterator extends FilterIterator
+class SizeRangeFilterIterator extends \FilterIterator
 {
     private $comparators = [];
 
diff --git a/vendor/symfony/finder/Iterator/SortableIterator.php b/vendor/symfony/finder/Iterator/SortableIterator.php
index e67997d117..8f0090c746 100644
--- a/vendor/symfony/finder/Iterator/SortableIterator.php
+++ b/vendor/symfony/finder/Iterator/SortableIterator.php
@@ -18,11 +18,13 @@
  */
 class SortableIterator implements \IteratorAggregate
 {
+    const SORT_BY_NONE = 0;
     const SORT_BY_NAME = 1;
     const SORT_BY_TYPE = 2;
     const SORT_BY_ACCESSED_TIME = 3;
     const SORT_BY_CHANGED_TIME = 4;
     const SORT_BY_MODIFIED_TIME = 5;
+    const SORT_BY_NAME_NATURAL = 6;
 
     private $iterator;
     private $sort;
@@ -33,47 +35,66 @@ class SortableIterator implements \IteratorAggregate
      *
      * @throws \InvalidArgumentException
      */
-    public function __construct(\Traversable $iterator, $sort)
+    public function __construct(\Traversable $iterator, $sort, bool $reverseOrder = false)
     {
         $this->iterator = $iterator;
+        $order = $reverseOrder ? -1 : 1;
 
         if (self::SORT_BY_NAME === $sort) {
-            $this->sort = static function ($a, $b) {
-                return strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname());
+            $this->sort = static function ($a, $b) use ($order) {
+                return $order * strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname());
+            };
+        } elseif (self::SORT_BY_NAME_NATURAL === $sort) {
+            $this->sort = static function ($a, $b) use ($order) {
+                return $order * strnatcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname());
             };
         } elseif (self::SORT_BY_TYPE === $sort) {
-            $this->sort = static function ($a, $b) {
+            $this->sort = static function ($a, $b) use ($order) {
                 if ($a->isDir() && $b->isFile()) {
-                    return -1;
+                    return -$order;
                 } elseif ($a->isFile() && $b->isDir()) {
-                    return 1;
+                    return $order;
                 }
 
-                return strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname());
+                return $order * strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname());
             };
         } elseif (self::SORT_BY_ACCESSED_TIME === $sort) {
-            $this->sort = static function ($a, $b) {
-                return $a->getATime() - $b->getATime();
+            $this->sort = static function ($a, $b) use ($order) {
+                return $order * ($a->getATime() - $b->getATime());
             };
         } elseif (self::SORT_BY_CHANGED_TIME === $sort) {
-            $this->sort = static function ($a, $b) {
-                return $a->getCTime() - $b->getCTime();
+            $this->sort = static function ($a, $b) use ($order) {
+                return $order * ($a->getCTime() - $b->getCTime());
             };
         } elseif (self::SORT_BY_MODIFIED_TIME === $sort) {
-            $this->sort = static function ($a, $b) {
-                return $a->getMTime() - $b->getMTime();
+            $this->sort = static function ($a, $b) use ($order) {
+                return $order * ($a->getMTime() - $b->getMTime());
             };
+        } elseif (self::SORT_BY_NONE === $sort) {
+            $this->sort = $order;
         } elseif (\is_callable($sort)) {
-            $this->sort = $sort;
+            $this->sort = $reverseOrder ? static function ($a, $b) use ($sort) { return -$sort($a, $b); } : $sort;
         } else {
             throw new \InvalidArgumentException('The SortableIterator takes a PHP callable or a valid built-in sort algorithm as an argument.');
         }
     }
 
+    /**
+     * @return \Traversable
+     */
     public function getIterator()
     {
+        if (1 === $this->sort) {
+            return $this->iterator;
+        }
+
         $array = iterator_to_array($this->iterator, true);
-        uasort($array, $this->sort);
+
+        if (-1 === $this->sort) {
+            $array = array_reverse($array);
+        } else {
+            uasort($array, $this->sort);
+        }
 
         return new \ArrayIterator($array);
     }
diff --git a/vendor/symfony/finder/SplFileInfo.php b/vendor/symfony/finder/SplFileInfo.php
index 0f4e025b22..62c9faa6e9 100644
--- a/vendor/symfony/finder/SplFileInfo.php
+++ b/vendor/symfony/finder/SplFileInfo.php
@@ -26,7 +26,7 @@ class SplFileInfo extends \SplFileInfo
      * @param string $relativePath     The relative path
      * @param string $relativePathname The relative path name
      */
-    public function __construct($file, $relativePath, $relativePathname)
+    public function __construct(string $file, string $relativePath, string $relativePathname)
     {
         parent::__construct($file);
         $this->relativePath = $relativePath;
@@ -57,6 +57,13 @@ public function getRelativePathname()
         return $this->relativePathname;
     }
 
+    public function getFilenameWithoutExtension(): string
+    {
+        $filename = $this->getFilename();
+
+        return pathinfo($filename, \PATHINFO_FILENAME);
+    }
+
     /**
      * Returns the contents of the file.
      *
diff --git a/vendor/symfony/finder/Tests/Comparator/ComparatorTest.php b/vendor/symfony/finder/Tests/Comparator/ComparatorTest.php
deleted file mode 100644
index 2f56092ed8..0000000000
--- a/vendor/symfony/finder/Tests/Comparator/ComparatorTest.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Comparator;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Finder\Comparator\Comparator;
-
-class ComparatorTest extends TestCase
-{
-    public function testGetSetOperator()
-    {
-        $comparator = new Comparator();
-        try {
-            $comparator->setOperator('foo');
-            $this->fail('->setOperator() throws an \InvalidArgumentException if the operator is not valid.');
-        } catch (\Exception $e) {
-            $this->assertInstanceOf('InvalidArgumentException', $e, '->setOperator() throws an \InvalidArgumentException if the operator is not valid.');
-        }
-
-        $comparator = new Comparator();
-        $comparator->setOperator('>');
-        $this->assertEquals('>', $comparator->getOperator(), '->getOperator() returns the current operator');
-    }
-
-    public function testGetSetTarget()
-    {
-        $comparator = new Comparator();
-        $comparator->setTarget(8);
-        $this->assertEquals(8, $comparator->getTarget(), '->getTarget() returns the target');
-    }
-
-    /**
-     * @dataProvider getTestData
-     */
-    public function testTest($operator, $target, $match, $noMatch)
-    {
-        $c = new Comparator();
-        $c->setOperator($operator);
-        $c->setTarget($target);
-
-        foreach ($match as $m) {
-            $this->assertTrue($c->test($m), '->test() tests a string against the expression');
-        }
-
-        foreach ($noMatch as $m) {
-            $this->assertFalse($c->test($m), '->test() tests a string against the expression');
-        }
-    }
-
-    public function getTestData()
-    {
-        return [
-            ['<', '1000', ['500', '999'], ['1000', '1500']],
-        ];
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Comparator/DateComparatorTest.php b/vendor/symfony/finder/Tests/Comparator/DateComparatorTest.php
deleted file mode 100644
index 3aebf52449..0000000000
--- a/vendor/symfony/finder/Tests/Comparator/DateComparatorTest.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Comparator;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Finder\Comparator\DateComparator;
-
-class DateComparatorTest extends TestCase
-{
-    public function testConstructor()
-    {
-        try {
-            new DateComparator('foobar');
-            $this->fail('__construct() throws an \InvalidArgumentException if the test expression is not valid.');
-        } catch (\Exception $e) {
-            $this->assertInstanceOf('InvalidArgumentException', $e, '__construct() throws an \InvalidArgumentException if the test expression is not valid.');
-        }
-
-        try {
-            new DateComparator('');
-            $this->fail('__construct() throws an \InvalidArgumentException if the test expression is not valid.');
-        } catch (\Exception $e) {
-            $this->assertInstanceOf('InvalidArgumentException', $e, '__construct() throws an \InvalidArgumentException if the test expression is not valid.');
-        }
-    }
-
-    /**
-     * @dataProvider getTestData
-     */
-    public function testTest($test, $match, $noMatch)
-    {
-        $c = new DateComparator($test);
-
-        foreach ($match as $m) {
-            $this->assertTrue($c->test($m), '->test() tests a string against the expression');
-        }
-
-        foreach ($noMatch as $m) {
-            $this->assertFalse($c->test($m), '->test() tests a string against the expression');
-        }
-    }
-
-    public function getTestData()
-    {
-        return [
-            ['< 2005-10-10', [strtotime('2005-10-09')], [strtotime('2005-10-15')]],
-            ['until 2005-10-10', [strtotime('2005-10-09')], [strtotime('2005-10-15')]],
-            ['before 2005-10-10', [strtotime('2005-10-09')], [strtotime('2005-10-15')]],
-            ['> 2005-10-10', [strtotime('2005-10-15')], [strtotime('2005-10-09')]],
-            ['after 2005-10-10', [strtotime('2005-10-15')], [strtotime('2005-10-09')]],
-            ['since 2005-10-10', [strtotime('2005-10-15')], [strtotime('2005-10-09')]],
-            ['!= 2005-10-10', [strtotime('2005-10-11')], [strtotime('2005-10-10')]],
-        ];
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Comparator/NumberComparatorTest.php b/vendor/symfony/finder/Tests/Comparator/NumberComparatorTest.php
deleted file mode 100644
index 5b49b660a7..0000000000
--- a/vendor/symfony/finder/Tests/Comparator/NumberComparatorTest.php
+++ /dev/null
@@ -1,108 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Comparator;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Finder\Comparator\NumberComparator;
-
-class NumberComparatorTest extends TestCase
-{
-    /**
-     * @dataProvider getConstructorTestData
-     */
-    public function testConstructor($successes, $failures)
-    {
-        foreach ($successes as $s) {
-            new NumberComparator($s);
-        }
-
-        foreach ($failures as $f) {
-            try {
-                new NumberComparator($f);
-                $this->fail('__construct() throws an \InvalidArgumentException if the test expression is not valid.');
-            } catch (\Exception $e) {
-                $this->assertInstanceOf('InvalidArgumentException', $e, '__construct() throws an \InvalidArgumentException if the test expression is not valid.');
-            }
-        }
-    }
-
-    /**
-     * @dataProvider getTestData
-     */
-    public function testTest($test, $match, $noMatch)
-    {
-        $c = new NumberComparator($test);
-
-        foreach ($match as $m) {
-            $this->assertTrue($c->test($m), '->test() tests a string against the expression');
-        }
-
-        foreach ($noMatch as $m) {
-            $this->assertFalse($c->test($m), '->test() tests a string against the expression');
-        }
-    }
-
-    public function getTestData()
-    {
-        return [
-            ['< 1000', ['500', '999'], ['1000', '1500']],
-
-            ['< 1K', ['500', '999'], ['1000', '1500']],
-            ['<1k', ['500', '999'], ['1000', '1500']],
-            ['  < 1 K ', ['500', '999'], ['1000', '1500']],
-            ['<= 1K', ['1000'], ['1001']],
-            ['> 1K', ['1001'], ['1000']],
-            ['>= 1K', ['1000'], ['999']],
-
-            ['< 1KI', ['500', '1023'], ['1024', '1500']],
-            ['<= 1KI', ['1024'], ['1025']],
-            ['> 1KI', ['1025'], ['1024']],
-            ['>= 1KI', ['1024'], ['1023']],
-
-            ['1KI', ['1024'], ['1023', '1025']],
-            ['==1KI', ['1024'], ['1023', '1025']],
-
-            ['==1m', ['1000000'], ['999999', '1000001']],
-            ['==1mi', [1024 * 1024], [1024 * 1024 - 1, 1024 * 1024 + 1]],
-
-            ['==1g', ['1000000000'], ['999999999', '1000000001']],
-            ['==1gi', [1024 * 1024 * 1024], [1024 * 1024 * 1024 - 1, 1024 * 1024 * 1024 + 1]],
-
-            ['!= 1000', ['500', '999'], ['1000']],
-        ];
-    }
-
-    public function getConstructorTestData()
-    {
-        return [
-            [
-                [
-                    '1', '0',
-                    '3.5', '33.55', '123.456', '123456.78',
-                    '.1', '.123',
-                    '.0', '0.0',
-                    '1.', '0.', '123.',
-                    '==1', '!=1', '<1', '>1', '<=1', '>=1',
-                    '==1k', '==1ki', '==1m', '==1mi', '==1g', '==1gi',
-                    '1k', '1ki', '1m', '1mi', '1g', '1gi',
-                ],
-                [
-                    false, null, '',
-                    ' ', 'foobar',
-                    '=1', '===1',
-                    '0 . 1', '123 .45', '234. 567',
-                    '..', '.0.', '0.1.2',
-                ],
-            ],
-        ];
-    }
-}
diff --git a/vendor/symfony/finder/Tests/FinderTest.php b/vendor/symfony/finder/Tests/FinderTest.php
deleted file mode 100644
index 442186d2be..0000000000
--- a/vendor/symfony/finder/Tests/FinderTest.php
+++ /dev/null
@@ -1,752 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests;
-
-use Symfony\Component\Finder\Finder;
-
-class FinderTest extends Iterator\RealIteratorTestCase
-{
-    public function testCreate()
-    {
-        $this->assertInstanceOf('Symfony\Component\Finder\Finder', Finder::create());
-    }
-
-    public function testDirectories()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->directories());
-        $this->assertIterator($this->toAbsolute(['foo', 'toto']), $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $finder->directories();
-        $finder->files();
-        $finder->directories();
-        $this->assertIterator($this->toAbsolute(['foo', 'toto']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testFiles()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->files());
-        $this->assertIterator($this->toAbsolute(['foo/bar.tmp', 'test.php', 'test.py', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $finder->files();
-        $finder->directories();
-        $finder->files();
-        $this->assertIterator($this->toAbsolute(['foo/bar.tmp', 'test.php', 'test.py', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testRemoveTrailingSlash()
-    {
-        $finder = $this->buildFinder();
-
-        $expected = $this->toAbsolute(['foo/bar.tmp', 'test.php', 'test.py', 'foo bar']);
-        $in = self::$tmpDir.'//';
-
-        $this->assertIterator($expected, $finder->in($in)->files()->getIterator());
-    }
-
-    public function testSymlinksNotResolved()
-    {
-        if ('\\' === \DIRECTORY_SEPARATOR) {
-            $this->markTestSkipped('symlinks are not supported on Windows');
-        }
-
-        $finder = $this->buildFinder();
-
-        symlink($this->toAbsolute('foo'), $this->toAbsolute('baz'));
-        $expected = $this->toAbsolute(['baz/bar.tmp']);
-        $in = self::$tmpDir.'/baz/';
-        try {
-            $this->assertIterator($expected, $finder->in($in)->files()->getIterator());
-            unlink($this->toAbsolute('baz'));
-        } catch (\Exception $e) {
-            unlink($this->toAbsolute('baz'));
-            throw $e;
-        }
-    }
-
-    public function testBackPathNotNormalized()
-    {
-        $finder = $this->buildFinder();
-
-        $expected = $this->toAbsolute(['foo/../foo/bar.tmp']);
-        $in = self::$tmpDir.'/foo/../foo/';
-        $this->assertIterator($expected, $finder->in($in)->files()->getIterator());
-    }
-
-    public function testDepth()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->depth('< 1'));
-        $this->assertIterator($this->toAbsolute(['foo', 'test.php', 'test.py', 'toto', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->depth('<= 0'));
-        $this->assertIterator($this->toAbsolute(['foo', 'test.php', 'test.py', 'toto', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->depth('>= 1'));
-        $this->assertIterator($this->toAbsolute(['foo/bar.tmp']), $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $finder->depth('< 1')->depth('>= 1');
-        $this->assertIterator([], $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testName()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->name('*.php'));
-        $this->assertIterator($this->toAbsolute(['test.php']), $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $finder->name('test.ph*');
-        $finder->name('test.py');
-        $this->assertIterator($this->toAbsolute(['test.php', 'test.py']), $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $finder->name('~^test~i');
-        $this->assertIterator($this->toAbsolute(['test.php', 'test.py']), $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $finder->name('~\\.php$~i');
-        $this->assertIterator($this->toAbsolute(['test.php']), $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $finder->name('test.p{hp,y}');
-        $this->assertIterator($this->toAbsolute(['test.php', 'test.py']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testNotName()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->notName('*.php'));
-        $this->assertIterator($this->toAbsolute(['foo', 'foo/bar.tmp', 'test.py', 'toto', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $finder->notName('*.php');
-        $finder->notName('*.py');
-        $this->assertIterator($this->toAbsolute(['foo', 'foo/bar.tmp', 'toto', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $finder->name('test.ph*');
-        $finder->name('test.py');
-        $finder->notName('*.php');
-        $finder->notName('*.py');
-        $this->assertIterator([], $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $finder->name('test.ph*');
-        $finder->name('test.py');
-        $finder->notName('*.p{hp,y}');
-        $this->assertIterator([], $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    /**
-     * @dataProvider getRegexNameTestData
-     */
-    public function testRegexName($regex)
-    {
-        $finder = $this->buildFinder();
-        $finder->name($regex);
-        $this->assertIterator($this->toAbsolute(['test.py', 'test.php']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testSize()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->files()->size('< 1K')->size('> 500'));
-        $this->assertIterator($this->toAbsolute(['test.php']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testDate()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->files()->date('until last month'));
-        $this->assertIterator($this->toAbsolute(['foo/bar.tmp', 'test.php']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testExclude()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->exclude('foo'));
-        $this->assertIterator($this->toAbsolute(['test.php', 'test.py', 'toto', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testIgnoreVCS()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->ignoreVCS(false)->ignoreDotFiles(false));
-        $this->assertIterator($this->toAbsolute(['.git', 'foo', 'foo/bar.tmp', 'test.php', 'test.py', 'toto', 'toto/.git', '.bar', '.foo', '.foo/.bar', '.foo/bar', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $finder->ignoreVCS(false)->ignoreVCS(false)->ignoreDotFiles(false);
-        $this->assertIterator($this->toAbsolute(['.git', 'foo', 'foo/bar.tmp', 'test.php', 'test.py', 'toto', 'toto/.git', '.bar', '.foo', '.foo/.bar', '.foo/bar', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->ignoreVCS(true)->ignoreDotFiles(false));
-        $this->assertIterator($this->toAbsolute(['foo', 'foo/bar.tmp', 'test.php', 'test.py', 'toto', '.bar', '.foo', '.foo/.bar', '.foo/bar', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testIgnoreVCSCanBeDisabledAfterFirstIteration()
-    {
-        $finder = $this->buildFinder();
-        $finder->in(self::$tmpDir);
-        $finder->ignoreDotFiles(false);
-
-        $this->assertIterator($this->toAbsolute(['foo', 'foo/bar.tmp', 'test.php', 'test.py', 'toto', '.bar', '.foo', '.foo/.bar', '.foo/bar', 'foo bar']), $finder->getIterator());
-
-        $finder->ignoreVCS(false);
-        $this->assertIterator($this->toAbsolute(['.git', 'foo', 'foo/bar.tmp', 'test.php', 'test.py', 'toto', 'toto/.git', '.bar', '.foo', '.foo/.bar', '.foo/bar', 'foo bar']), $finder->getIterator());
-    }
-
-    public function testIgnoreDotFiles()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->ignoreDotFiles(false)->ignoreVCS(false));
-        $this->assertIterator($this->toAbsolute(['.git', '.bar', '.foo', '.foo/.bar', '.foo/bar', 'foo', 'foo/bar.tmp', 'test.php', 'test.py', 'toto', 'toto/.git', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $finder->ignoreDotFiles(false)->ignoreDotFiles(false)->ignoreVCS(false);
-        $this->assertIterator($this->toAbsolute(['.git', '.bar', '.foo', '.foo/.bar', '.foo/bar', 'foo', 'foo/bar.tmp', 'test.php', 'test.py', 'toto', 'toto/.git', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->ignoreDotFiles(true)->ignoreVCS(false));
-        $this->assertIterator($this->toAbsolute(['foo', 'foo/bar.tmp', 'test.php', 'test.py', 'toto', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testIgnoreDotFilesCanBeDisabledAfterFirstIteration()
-    {
-        $finder = $this->buildFinder();
-        $finder->in(self::$tmpDir);
-
-        $this->assertIterator($this->toAbsolute(['foo', 'foo/bar.tmp', 'test.php', 'test.py', 'toto', 'foo bar']), $finder->getIterator());
-
-        $finder->ignoreDotFiles(false);
-        $this->assertIterator($this->toAbsolute(['foo', 'foo/bar.tmp', 'test.php', 'test.py', 'toto', '.bar', '.foo', '.foo/.bar', '.foo/bar', 'foo bar']), $finder->getIterator());
-    }
-
-    public function testSortByName()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->sortByName());
-        $this->assertIterator($this->toAbsolute(['foo', 'foo bar', 'foo/bar.tmp', 'test.php', 'test.py', 'toto']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testSortByType()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->sortByType());
-        $this->assertIterator($this->toAbsolute(['foo', 'foo bar', 'toto', 'foo/bar.tmp', 'test.php', 'test.py']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testSortByAccessedTime()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->sortByAccessedTime());
-        $this->assertIterator($this->toAbsolute(['foo/bar.tmp', 'test.php', 'toto', 'test.py', 'foo', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testSortByChangedTime()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->sortByChangedTime());
-        $this->assertIterator($this->toAbsolute(['toto', 'test.py', 'test.php', 'foo/bar.tmp', 'foo', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testSortByModifiedTime()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->sortByModifiedTime());
-        $this->assertIterator($this->toAbsolute(['foo/bar.tmp', 'test.php', 'toto', 'test.py', 'foo', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testSort()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->sort(function (\SplFileInfo $a, \SplFileInfo $b) { return strcmp($a->getRealPath(), $b->getRealPath()); }));
-        $this->assertIterator($this->toAbsolute(['foo', 'foo bar', 'foo/bar.tmp', 'test.php', 'test.py', 'toto']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testFilter()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->filter(function (\SplFileInfo $f) { return false !== strpos($f, 'test'); }));
-        $this->assertIterator($this->toAbsolute(['test.php', 'test.py']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testFollowLinks()
-    {
-        if ('\\' == \DIRECTORY_SEPARATOR) {
-            $this->markTestSkipped('symlinks are not supported on Windows');
-        }
-
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->followLinks());
-        $this->assertIterator($this->toAbsolute(['foo', 'foo/bar.tmp', 'test.php', 'test.py', 'toto', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testIn()
-    {
-        $finder = $this->buildFinder();
-        $iterator = $finder->files()->name('*.php')->depth('< 1')->in([self::$tmpDir, __DIR__])->getIterator();
-
-        $expected = [
-            self::$tmpDir.\DIRECTORY_SEPARATOR.'test.php',
-            __DIR__.\DIRECTORY_SEPARATOR.'FinderTest.php',
-            __DIR__.\DIRECTORY_SEPARATOR.'GlobTest.php',
-        ];
-
-        $this->assertIterator($expected, $iterator);
-    }
-
-    public function testInWithNonExistentDirectory()
-    {
-        $this->expectException('InvalidArgumentException');
-        $finder = new Finder();
-        $finder->in('foobar');
-    }
-
-    public function testInWithGlob()
-    {
-        $finder = $this->buildFinder();
-        $finder->in([__DIR__.'/Fixtures/*/B/C/', __DIR__.'/Fixtures/*/*/B/C/'])->getIterator();
-
-        $this->assertIterator($this->toAbsoluteFixtures(['A/B/C/abc.dat', 'copy/A/B/C/abc.dat.copy']), $finder);
-    }
-
-    public function testInWithNonDirectoryGlob()
-    {
-        $this->expectException('InvalidArgumentException');
-        $finder = new Finder();
-        $finder->in(__DIR__.'/Fixtures/A/a*');
-    }
-
-    public function testInWithGlobBrace()
-    {
-        if (!\defined('GLOB_BRACE')) {
-            $this->markTestSkipped('Glob brace is not supported on this system.');
-        }
-
-        $finder = $this->buildFinder();
-        $finder->in([__DIR__.'/Fixtures/{A,copy/A}/B/C'])->getIterator();
-
-        $this->assertIterator($this->toAbsoluteFixtures(['A/B/C/abc.dat', 'copy/A/B/C/abc.dat.copy']), $finder);
-    }
-
-    public function testGetIteratorWithoutIn()
-    {
-        $this->expectException('LogicException');
-        $finder = Finder::create();
-        $finder->getIterator();
-    }
-
-    public function testGetIterator()
-    {
-        $finder = $this->buildFinder();
-        $dirs = [];
-        foreach ($finder->directories()->in(self::$tmpDir) as $dir) {
-            $dirs[] = (string) $dir;
-        }
-
-        $expected = $this->toAbsolute(['foo', 'toto']);
-
-        sort($dirs);
-        sort($expected);
-
-        $this->assertEquals($expected, $dirs, 'implements the \IteratorAggregate interface');
-
-        $finder = $this->buildFinder();
-        $this->assertEquals(2, iterator_count($finder->directories()->in(self::$tmpDir)), 'implements the \IteratorAggregate interface');
-
-        $finder = $this->buildFinder();
-        $a = iterator_to_array($finder->directories()->in(self::$tmpDir));
-        $a = array_values(array_map('strval', $a));
-        sort($a);
-        $this->assertEquals($expected, $a, 'implements the \IteratorAggregate interface');
-    }
-
-    public function testRelativePath()
-    {
-        $finder = $this->buildFinder()->in(self::$tmpDir);
-
-        $paths = [];
-
-        foreach ($finder as $file) {
-            $paths[] = $file->getRelativePath();
-        }
-
-        $ref = ['', '', '', '', 'foo', ''];
-
-        sort($ref);
-        sort($paths);
-
-        $this->assertEquals($ref, $paths);
-    }
-
-    public function testRelativePathname()
-    {
-        $finder = $this->buildFinder()->in(self::$tmpDir)->sortByName();
-
-        $paths = [];
-
-        foreach ($finder as $file) {
-            $paths[] = $file->getRelativePathname();
-        }
-
-        $ref = ['test.php', 'toto', 'test.py', 'foo', 'foo'.\DIRECTORY_SEPARATOR.'bar.tmp', 'foo bar'];
-
-        sort($paths);
-        sort($ref);
-
-        $this->assertEquals($ref, $paths);
-    }
-
-    public function testAppendWithAFinder()
-    {
-        $finder = $this->buildFinder();
-        $finder->files()->in(self::$tmpDir.\DIRECTORY_SEPARATOR.'foo');
-
-        $finder1 = $this->buildFinder();
-        $finder1->directories()->in(self::$tmpDir);
-
-        $finder = $finder->append($finder1);
-
-        $this->assertIterator($this->toAbsolute(['foo', 'foo/bar.tmp', 'toto']), $finder->getIterator());
-    }
-
-    public function testAppendWithAnArray()
-    {
-        $finder = $this->buildFinder();
-        $finder->files()->in(self::$tmpDir.\DIRECTORY_SEPARATOR.'foo');
-
-        $finder->append($this->toAbsolute(['foo', 'toto']));
-
-        $this->assertIterator($this->toAbsolute(['foo', 'foo/bar.tmp', 'toto']), $finder->getIterator());
-    }
-
-    public function testAppendReturnsAFinder()
-    {
-        $this->assertInstanceOf('Symfony\\Component\\Finder\\Finder', Finder::create()->append([]));
-    }
-
-    public function testAppendDoesNotRequireIn()
-    {
-        $finder = $this->buildFinder();
-        $finder->in(self::$tmpDir.\DIRECTORY_SEPARATOR.'foo');
-
-        $finder1 = Finder::create()->append($finder);
-
-        $this->assertIterator(iterator_to_array($finder->getIterator()), $finder1->getIterator());
-    }
-
-    public function testCountDirectories()
-    {
-        $directory = Finder::create()->directories()->in(self::$tmpDir);
-        $i = 0;
-
-        foreach ($directory as $dir) {
-            ++$i;
-        }
-
-        $this->assertCount($i, $directory);
-    }
-
-    public function testCountFiles()
-    {
-        $files = Finder::create()->files()->in(__DIR__.\DIRECTORY_SEPARATOR.'Fixtures');
-        $i = 0;
-
-        foreach ($files as $file) {
-            ++$i;
-        }
-
-        $this->assertCount($i, $files);
-    }
-
-    public function testCountWithoutIn()
-    {
-        $this->expectException('LogicException');
-        $finder = Finder::create()->files();
-        \count($finder);
-    }
-
-    public function testHasResults()
-    {
-        $finder = $this->buildFinder();
-        $finder->in(__DIR__);
-        $this->assertTrue($finder->hasResults());
-    }
-
-    public function testNoResults()
-    {
-        $finder = $this->buildFinder();
-        $finder->in(__DIR__)->name('DoesNotExist');
-        $this->assertFalse($finder->hasResults());
-    }
-
-    /**
-     * @dataProvider getContainsTestData
-     */
-    public function testContains($matchPatterns, $noMatchPatterns, $expected)
-    {
-        $finder = $this->buildFinder();
-        $finder->in(__DIR__.\DIRECTORY_SEPARATOR.'Fixtures')
-            ->name('*.txt')->sortByName()
-            ->contains($matchPatterns)
-            ->notContains($noMatchPatterns);
-
-        $this->assertIterator($this->toAbsoluteFixtures($expected), $finder);
-    }
-
-    public function testContainsOnDirectory()
-    {
-        $finder = $this->buildFinder();
-        $finder->in(__DIR__)
-            ->directories()
-            ->name('Fixtures')
-            ->contains('abc');
-        $this->assertIterator([], $finder);
-    }
-
-    public function testNotContainsOnDirectory()
-    {
-        $finder = $this->buildFinder();
-        $finder->in(__DIR__)
-            ->directories()
-            ->name('Fixtures')
-            ->notContains('abc');
-        $this->assertIterator([], $finder);
-    }
-
-    /**
-     * Searching in multiple locations involves AppendIterator which does an unnecessary rewind which leaves FilterIterator
-     * with inner FilesystemIterator in an invalid state.
-     *
-     * @see https://bugs.php.net/68557
-     */
-    public function testMultipleLocations()
-    {
-        $locations = [
-            self::$tmpDir.'/',
-            self::$tmpDir.'/toto/',
-        ];
-
-        // it is expected that there are test.py test.php in the tmpDir
-        $finder = new Finder();
-        $finder->in($locations)
-            // the default flag IGNORE_DOT_FILES fixes the problem indirectly
-            // so we set it to false for better isolation
-            ->ignoreDotFiles(false)
-            ->depth('< 1')->name('test.php');
-
-        $this->assertCount(1, $finder);
-    }
-
-    /**
-     * Searching in multiple locations with sub directories involves
-     * AppendIterator which does an unnecessary rewind which leaves
-     * FilterIterator with inner FilesystemIterator in an invalid state.
-     *
-     * @see https://bugs.php.net/68557
-     */
-    public function testMultipleLocationsWithSubDirectories()
-    {
-        $locations = [
-            __DIR__.'/Fixtures/one',
-            self::$tmpDir.\DIRECTORY_SEPARATOR.'toto',
-        ];
-
-        $finder = $this->buildFinder();
-        $finder->in($locations)->depth('< 10')->name('*.neon');
-
-        $expected = [
-            __DIR__.'/Fixtures/one'.\DIRECTORY_SEPARATOR.'b'.\DIRECTORY_SEPARATOR.'c.neon',
-            __DIR__.'/Fixtures/one'.\DIRECTORY_SEPARATOR.'b'.\DIRECTORY_SEPARATOR.'d.neon',
-        ];
-
-        $this->assertIterator($expected, $finder);
-        $this->assertIteratorInForeach($expected, $finder);
-    }
-
-    /**
-     * Iterator keys must be the file pathname.
-     */
-    public function testIteratorKeys()
-    {
-        $finder = $this->buildFinder()->in(self::$tmpDir);
-        foreach ($finder as $key => $file) {
-            $this->assertEquals($file->getPathname(), $key);
-        }
-    }
-
-    public function testRegexSpecialCharsLocationWithPathRestrictionContainingStartFlag()
-    {
-        $finder = $this->buildFinder();
-        $finder->in(__DIR__.\DIRECTORY_SEPARATOR.'Fixtures'.\DIRECTORY_SEPARATOR.'r+e.gex[c]a(r)s')
-            ->path('/^dir/');
-
-        $expected = ['r+e.gex[c]a(r)s'.\DIRECTORY_SEPARATOR.'dir', 'r+e.gex[c]a(r)s'.\DIRECTORY_SEPARATOR.'dir'.\DIRECTORY_SEPARATOR.'bar.dat'];
-        $this->assertIterator($this->toAbsoluteFixtures($expected), $finder);
-    }
-
-    public function getContainsTestData()
-    {
-        return [
-            ['', '', []],
-            ['foo', 'bar', []],
-            ['', 'foobar', ['dolor.txt', 'ipsum.txt', 'lorem.txt']],
-            ['lorem ipsum dolor sit amet', 'foobar', ['lorem.txt']],
-            ['sit', 'bar', ['dolor.txt', 'ipsum.txt', 'lorem.txt']],
-            ['dolor sit amet', '@^L@m', ['dolor.txt', 'ipsum.txt']],
-            ['/^lorem ipsum dolor sit amet$/m', 'foobar', ['lorem.txt']],
-            ['lorem', 'foobar', ['lorem.txt']],
-            ['', 'lorem', ['dolor.txt', 'ipsum.txt']],
-            ['ipsum dolor sit amet', '/^IPSUM/m', ['lorem.txt']],
-        ];
-    }
-
-    public function getRegexNameTestData()
-    {
-        return [
-            ['~.+\\.p.+~i'],
-            ['~t.*s~i'],
-        ];
-    }
-
-    /**
-     * @dataProvider getTestPathData
-     */
-    public function testPath($matchPatterns, $noMatchPatterns, array $expected)
-    {
-        $finder = $this->buildFinder();
-        $finder->in(__DIR__.\DIRECTORY_SEPARATOR.'Fixtures')
-            ->path($matchPatterns)
-            ->notPath($noMatchPatterns);
-
-        $this->assertIterator($this->toAbsoluteFixtures($expected), $finder);
-    }
-
-    public function getTestPathData()
-    {
-        return [
-            ['', '', []],
-            ['/^A\/B\/C/', '/C$/',
-                ['A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'C'.\DIRECTORY_SEPARATOR.'abc.dat'],
-            ],
-            ['/^A\/B/', 'foobar',
-                [
-                    'A'.\DIRECTORY_SEPARATOR.'B',
-                    'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'C',
-                    'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'ab.dat',
-                    'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'C'.\DIRECTORY_SEPARATOR.'abc.dat',
-                ],
-            ],
-            ['A/B/C', 'foobar',
-                [
-                    'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'C',
-                    'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'C'.\DIRECTORY_SEPARATOR.'abc.dat',
-                    'copy'.\DIRECTORY_SEPARATOR.'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'C',
-                    'copy'.\DIRECTORY_SEPARATOR.'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'C'.\DIRECTORY_SEPARATOR.'abc.dat.copy',
-                ],
-            ],
-            ['A/B', 'foobar',
-                [
-                    //dirs
-                    'A'.\DIRECTORY_SEPARATOR.'B',
-                    'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'C',
-                    'copy'.\DIRECTORY_SEPARATOR.'A'.\DIRECTORY_SEPARATOR.'B',
-                    'copy'.\DIRECTORY_SEPARATOR.'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'C',
-                    //files
-                    'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'ab.dat',
-                    'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'C'.\DIRECTORY_SEPARATOR.'abc.dat',
-                    'copy'.\DIRECTORY_SEPARATOR.'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'ab.dat.copy',
-                    'copy'.\DIRECTORY_SEPARATOR.'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'C'.\DIRECTORY_SEPARATOR.'abc.dat.copy',
-                ],
-            ],
-            ['/^with space\//', 'foobar',
-                [
-                    'with space'.\DIRECTORY_SEPARATOR.'foo.txt',
-                ],
-            ],
-        ];
-    }
-
-    public function testAccessDeniedException()
-    {
-        if ('\\' === \DIRECTORY_SEPARATOR) {
-            $this->markTestSkipped('chmod is not supported on Windows');
-        }
-
-        $finder = $this->buildFinder();
-        $finder->files()->in(self::$tmpDir);
-
-        // make 'foo' directory non-readable
-        $testDir = self::$tmpDir.\DIRECTORY_SEPARATOR.'foo';
-        chmod($testDir, 0333);
-
-        if (false === $couldRead = is_readable($testDir)) {
-            try {
-                $this->assertIterator($this->toAbsolute(['foo bar', 'test.php', 'test.py']), $finder->getIterator());
-                $this->fail('Finder should throw an exception when opening a non-readable directory.');
-            } catch (\Exception $e) {
-                $expectedExceptionClass = 'Symfony\\Component\\Finder\\Exception\\AccessDeniedException';
-                if ($e instanceof \PHPUnit\Framework\ExpectationFailedException) {
-                    $this->fail(sprintf("Expected exception:\n%s\nGot:\n%s\nWith comparison failure:\n%s", $expectedExceptionClass, 'PHPUnit\Framework\ExpectationFailedException', $e->getComparisonFailure()->getExpectedAsString()));
-                }
-
-                $this->assertInstanceOf($expectedExceptionClass, $e);
-            }
-        }
-
-        // restore original permissions
-        chmod($testDir, 0777);
-        clearstatcache(true, $testDir);
-
-        if ($couldRead) {
-            $this->markTestSkipped('could read test files while test requires unreadable');
-        }
-    }
-
-    public function testIgnoredAccessDeniedException()
-    {
-        if ('\\' === \DIRECTORY_SEPARATOR) {
-            $this->markTestSkipped('chmod is not supported on Windows');
-        }
-
-        $finder = $this->buildFinder();
-        $finder->files()->ignoreUnreadableDirs()->in(self::$tmpDir);
-
-        // make 'foo' directory non-readable
-        $testDir = self::$tmpDir.\DIRECTORY_SEPARATOR.'foo';
-        chmod($testDir, 0333);
-
-        if (false === ($couldRead = is_readable($testDir))) {
-            $this->assertIterator($this->toAbsolute(['foo bar', 'test.php', 'test.py']), $finder->getIterator());
-        }
-
-        // restore original permissions
-        chmod($testDir, 0777);
-        clearstatcache(true, $testDir);
-
-        if ($couldRead) {
-            $this->markTestSkipped('could read test files while test requires unreadable');
-        }
-    }
-
-    protected function buildFinder()
-    {
-        return Finder::create();
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Fixtures/.dot/a b/vendor/symfony/finder/Tests/Fixtures/.dot/a
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/vendor/symfony/finder/Tests/Fixtures/.dot/b/c.neon b/vendor/symfony/finder/Tests/Fixtures/.dot/b/c.neon
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/vendor/symfony/finder/Tests/Fixtures/.dot/b/d.neon b/vendor/symfony/finder/Tests/Fixtures/.dot/b/d.neon
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/vendor/symfony/finder/Tests/Fixtures/A/B/C/abc.dat b/vendor/symfony/finder/Tests/Fixtures/A/B/C/abc.dat
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/vendor/symfony/finder/Tests/Fixtures/A/B/ab.dat b/vendor/symfony/finder/Tests/Fixtures/A/B/ab.dat
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/vendor/symfony/finder/Tests/Fixtures/A/a.dat b/vendor/symfony/finder/Tests/Fixtures/A/a.dat
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/vendor/symfony/finder/Tests/Fixtures/copy/A/B/C/abc.dat.copy b/vendor/symfony/finder/Tests/Fixtures/copy/A/B/C/abc.dat.copy
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/vendor/symfony/finder/Tests/Fixtures/copy/A/B/ab.dat.copy b/vendor/symfony/finder/Tests/Fixtures/copy/A/B/ab.dat.copy
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/vendor/symfony/finder/Tests/Fixtures/copy/A/a.dat.copy b/vendor/symfony/finder/Tests/Fixtures/copy/A/a.dat.copy
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/vendor/symfony/finder/Tests/Fixtures/dolor.txt b/vendor/symfony/finder/Tests/Fixtures/dolor.txt
deleted file mode 100644
index 658bec6985..0000000000
--- a/vendor/symfony/finder/Tests/Fixtures/dolor.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-dolor sit amet
-DOLOR SIT AMET
\ No newline at end of file
diff --git a/vendor/symfony/finder/Tests/Fixtures/ipsum.txt b/vendor/symfony/finder/Tests/Fixtures/ipsum.txt
deleted file mode 100644
index c7f392d6fb..0000000000
--- a/vendor/symfony/finder/Tests/Fixtures/ipsum.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-ipsum dolor sit amet
-IPSUM DOLOR SIT AMET
\ No newline at end of file
diff --git a/vendor/symfony/finder/Tests/Fixtures/lorem.txt b/vendor/symfony/finder/Tests/Fixtures/lorem.txt
deleted file mode 100644
index 2991a2cacb..0000000000
--- a/vendor/symfony/finder/Tests/Fixtures/lorem.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-lorem ipsum dolor sit amet
-LOREM IPSUM DOLOR SIT AMET
\ No newline at end of file
diff --git a/vendor/symfony/finder/Tests/Fixtures/one/.dot b/vendor/symfony/finder/Tests/Fixtures/one/.dot
deleted file mode 100644
index 1028065f8a..0000000000
--- a/vendor/symfony/finder/Tests/Fixtures/one/.dot
+++ /dev/null
@@ -1 +0,0 @@
-.dot
\ No newline at end of file
diff --git a/vendor/symfony/finder/Tests/Fixtures/one/a b/vendor/symfony/finder/Tests/Fixtures/one/a
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/vendor/symfony/finder/Tests/Fixtures/one/b/c.neon b/vendor/symfony/finder/Tests/Fixtures/one/b/c.neon
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/vendor/symfony/finder/Tests/Fixtures/one/b/d.neon b/vendor/symfony/finder/Tests/Fixtures/one/b/d.neon
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/vendor/symfony/finder/Tests/Fixtures/r+e.gex[c]a(r)s/dir/bar.dat b/vendor/symfony/finder/Tests/Fixtures/r+e.gex[c]a(r)s/dir/bar.dat
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/vendor/symfony/finder/Tests/Fixtures/with space/foo.txt b/vendor/symfony/finder/Tests/Fixtures/with space/foo.txt
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/vendor/symfony/finder/Tests/GlobTest.php b/vendor/symfony/finder/Tests/GlobTest.php
deleted file mode 100644
index 2d48799c5c..0000000000
--- a/vendor/symfony/finder/Tests/GlobTest.php
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Finder\Finder;
-use Symfony\Component\Finder\Glob;
-
-class GlobTest extends TestCase
-{
-    public function testGlobToRegexDelimiters()
-    {
-        $this->assertEquals('#^(?=[^\.])\#$#', Glob::toRegex('#'));
-        $this->assertEquals('#^\.[^/]*$#', Glob::toRegex('.*'));
-        $this->assertEquals('^\.[^/]*$', Glob::toRegex('.*', true, true, ''));
-        $this->assertEquals('/^\.[^/]*$/', Glob::toRegex('.*', true, true, '/'));
-    }
-
-    public function testGlobToRegexDoubleStarStrictDots()
-    {
-        $finder = new Finder();
-        $finder->ignoreDotFiles(false);
-        $regex = Glob::toRegex('/**/*.neon');
-
-        foreach ($finder->in(__DIR__) as $k => $v) {
-            $k = str_replace(\DIRECTORY_SEPARATOR, '/', $k);
-            if (preg_match($regex, substr($k, \strlen(__DIR__)))) {
-                $match[] = substr($k, 10 + \strlen(__DIR__));
-            }
-        }
-        sort($match);
-
-        $this->assertSame(['one/b/c.neon', 'one/b/d.neon'], $match);
-    }
-
-    public function testGlobToRegexDoubleStarNonStrictDots()
-    {
-        $finder = new Finder();
-        $finder->ignoreDotFiles(false);
-        $regex = Glob::toRegex('/**/*.neon', false);
-
-        foreach ($finder->in(__DIR__) as $k => $v) {
-            $k = str_replace(\DIRECTORY_SEPARATOR, '/', $k);
-            if (preg_match($regex, substr($k, \strlen(__DIR__)))) {
-                $match[] = substr($k, 10 + \strlen(__DIR__));
-            }
-        }
-        sort($match);
-
-        $this->assertSame(['.dot/b/c.neon', '.dot/b/d.neon', 'one/b/c.neon', 'one/b/d.neon'], $match);
-    }
-
-    public function testGlobToRegexDoubleStarWithoutLeadingSlash()
-    {
-        $finder = new Finder();
-        $finder->ignoreDotFiles(false);
-        $regex = Glob::toRegex('/Fixtures/one/**');
-
-        foreach ($finder->in(__DIR__) as $k => $v) {
-            $k = str_replace(\DIRECTORY_SEPARATOR, '/', $k);
-            if (preg_match($regex, substr($k, \strlen(__DIR__)))) {
-                $match[] = substr($k, 10 + \strlen(__DIR__));
-            }
-        }
-        sort($match);
-
-        $this->assertSame(['one/a', 'one/b', 'one/b/c.neon', 'one/b/d.neon'], $match);
-    }
-
-    public function testGlobToRegexDoubleStarWithoutLeadingSlashNotStrictLeadingDot()
-    {
-        $finder = new Finder();
-        $finder->ignoreDotFiles(false);
-        $regex = Glob::toRegex('/Fixtures/one/**', false);
-
-        foreach ($finder->in(__DIR__) as $k => $v) {
-            $k = str_replace(\DIRECTORY_SEPARATOR, '/', $k);
-            if (preg_match($regex, substr($k, \strlen(__DIR__)))) {
-                $match[] = substr($k, 10 + \strlen(__DIR__));
-            }
-        }
-        sort($match);
-
-        $this->assertSame(['one/.dot', 'one/a', 'one/b', 'one/b/c.neon', 'one/b/d.neon'], $match);
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/CustomFilterIteratorTest.php b/vendor/symfony/finder/Tests/Iterator/CustomFilterIteratorTest.php
deleted file mode 100644
index 56d958cb60..0000000000
--- a/vendor/symfony/finder/Tests/Iterator/CustomFilterIteratorTest.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-use Symfony\Component\Finder\Iterator\CustomFilterIterator;
-
-class CustomFilterIteratorTest extends IteratorTestCase
-{
-    public function testWithInvalidFilter()
-    {
-        $this->expectException('InvalidArgumentException');
-        new CustomFilterIterator(new Iterator(), ['foo']);
-    }
-
-    /**
-     * @dataProvider getAcceptData
-     */
-    public function testAccept($filters, $expected)
-    {
-        $inner = new Iterator(['test.php', 'test.py', 'foo.php']);
-
-        $iterator = new CustomFilterIterator($inner, $filters);
-
-        $this->assertIterator($expected, $iterator);
-    }
-
-    public function getAcceptData()
-    {
-        return [
-            [[function (\SplFileInfo $fileinfo) { return false; }], []],
-            [[function (\SplFileInfo $fileinfo) { return 0 === strpos($fileinfo, 'test'); }], ['test.php', 'test.py']],
-            [['is_dir'], []],
-        ];
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/DateRangeFilterIteratorTest.php b/vendor/symfony/finder/Tests/Iterator/DateRangeFilterIteratorTest.php
deleted file mode 100644
index 7b1800b157..0000000000
--- a/vendor/symfony/finder/Tests/Iterator/DateRangeFilterIteratorTest.php
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-use Symfony\Component\Finder\Comparator\DateComparator;
-use Symfony\Component\Finder\Iterator\DateRangeFilterIterator;
-
-class DateRangeFilterIteratorTest extends RealIteratorTestCase
-{
-    /**
-     * @dataProvider getAcceptData
-     */
-    public function testAccept($size, $expected)
-    {
-        $files = self::$files;
-        $files[] = self::toAbsolute('doesnotexist');
-        $inner = new Iterator($files);
-
-        $iterator = new DateRangeFilterIterator($inner, $size);
-
-        $this->assertIterator($expected, $iterator);
-    }
-
-    public function getAcceptData()
-    {
-        $since20YearsAgo = [
-            '.git',
-            'test.py',
-            'foo',
-            'foo/bar.tmp',
-            'test.php',
-            'toto',
-            'toto/.git',
-            '.bar',
-            '.foo',
-            '.foo/.bar',
-            'foo bar',
-            '.foo/bar',
-        ];
-
-        $since2MonthsAgo = [
-            '.git',
-            'test.py',
-            'foo',
-            'toto',
-            'toto/.git',
-            '.bar',
-            '.foo',
-            '.foo/.bar',
-            'foo bar',
-            '.foo/bar',
-        ];
-
-        $untilLastMonth = [
-            'foo/bar.tmp',
-            'test.php',
-        ];
-
-        return [
-            [[new DateComparator('since 20 years ago')], $this->toAbsolute($since20YearsAgo)],
-            [[new DateComparator('since 2 months ago')], $this->toAbsolute($since2MonthsAgo)],
-            [[new DateComparator('until last month')], $this->toAbsolute($untilLastMonth)],
-        ];
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/DepthRangeFilterIteratorTest.php b/vendor/symfony/finder/Tests/Iterator/DepthRangeFilterIteratorTest.php
deleted file mode 100644
index 5ef2ed41b3..0000000000
--- a/vendor/symfony/finder/Tests/Iterator/DepthRangeFilterIteratorTest.php
+++ /dev/null
@@ -1,83 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-use Symfony\Component\Finder\Iterator\DepthRangeFilterIterator;
-
-class DepthRangeFilterIteratorTest extends RealIteratorTestCase
-{
-    /**
-     * @dataProvider getAcceptData
-     */
-    public function testAccept($minDepth, $maxDepth, $expected)
-    {
-        $inner = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($this->toAbsolute(), \FilesystemIterator::SKIP_DOTS), \RecursiveIteratorIterator::SELF_FIRST);
-
-        $iterator = new DepthRangeFilterIterator($inner, $minDepth, $maxDepth);
-
-        $actual = array_keys(iterator_to_array($iterator));
-        sort($expected);
-        sort($actual);
-        $this->assertEquals($expected, $actual);
-    }
-
-    public function getAcceptData()
-    {
-        $lessThan1 = [
-            '.git',
-            'test.py',
-            'foo',
-            'test.php',
-            'toto',
-            '.foo',
-            '.bar',
-            'foo bar',
-        ];
-
-        $lessThanOrEqualTo1 = [
-            '.git',
-            'test.py',
-            'foo',
-            'foo/bar.tmp',
-            'test.php',
-            'toto',
-            'toto/.git',
-            '.foo',
-            '.foo/.bar',
-            '.bar',
-            'foo bar',
-            '.foo/bar',
-        ];
-
-        $graterThanOrEqualTo1 = [
-            'toto/.git',
-            'foo/bar.tmp',
-            '.foo/.bar',
-            '.foo/bar',
-        ];
-
-        $equalTo1 = [
-            'toto/.git',
-            'foo/bar.tmp',
-            '.foo/.bar',
-            '.foo/bar',
-        ];
-
-        return [
-            [0, 0, $this->toAbsolute($lessThan1)],
-            [0, 1, $this->toAbsolute($lessThanOrEqualTo1)],
-            [2, \PHP_INT_MAX, []],
-            [1, \PHP_INT_MAX, $this->toAbsolute($graterThanOrEqualTo1)],
-            [1, 1, $this->toAbsolute($equalTo1)],
-        ];
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/ExcludeDirectoryFilterIteratorTest.php b/vendor/symfony/finder/Tests/Iterator/ExcludeDirectoryFilterIteratorTest.php
deleted file mode 100644
index 2835ba57c8..0000000000
--- a/vendor/symfony/finder/Tests/Iterator/ExcludeDirectoryFilterIteratorTest.php
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-use Symfony\Component\Finder\Iterator\ExcludeDirectoryFilterIterator;
-use Symfony\Component\Finder\Iterator\RecursiveDirectoryIterator;
-
-class ExcludeDirectoryFilterIteratorTest extends RealIteratorTestCase
-{
-    /**
-     * @dataProvider getAcceptData
-     */
-    public function testAccept($directories, $expected)
-    {
-        $inner = new \RecursiveIteratorIterator(new RecursiveDirectoryIterator($this->toAbsolute(), \FilesystemIterator::SKIP_DOTS), \RecursiveIteratorIterator::SELF_FIRST);
-
-        $iterator = new ExcludeDirectoryFilterIterator($inner, $directories);
-
-        $this->assertIterator($expected, $iterator);
-    }
-
-    public function getAcceptData()
-    {
-        $foo = [
-            '.bar',
-            '.foo',
-            '.foo/.bar',
-            '.foo/bar',
-            '.git',
-            'test.py',
-            'test.php',
-            'toto',
-            'toto/.git',
-            'foo bar',
-        ];
-
-        $fo = [
-            '.bar',
-            '.foo',
-            '.foo/.bar',
-            '.foo/bar',
-            '.git',
-            'test.py',
-            'foo',
-            'foo/bar.tmp',
-            'test.php',
-            'toto',
-            'toto/.git',
-            'foo bar',
-        ];
-
-        $toto = [
-            '.bar',
-            '.foo',
-            '.foo/.bar',
-            '.foo/bar',
-            '.git',
-            'test.py',
-            'foo',
-            'foo/bar.tmp',
-            'test.php',
-            'foo bar',
-        ];
-
-        return [
-            [['foo'], $this->toAbsolute($foo)],
-            [['fo'], $this->toAbsolute($fo)],
-            [['toto/'], $this->toAbsolute($toto)],
-        ];
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/FileTypeFilterIteratorTest.php b/vendor/symfony/finder/Tests/Iterator/FileTypeFilterIteratorTest.php
deleted file mode 100644
index fe03b434ad..0000000000
--- a/vendor/symfony/finder/Tests/Iterator/FileTypeFilterIteratorTest.php
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-use Symfony\Component\Finder\Iterator\FileTypeFilterIterator;
-
-class FileTypeFilterIteratorTest extends RealIteratorTestCase
-{
-    /**
-     * @dataProvider getAcceptData
-     */
-    public function testAccept($mode, $expected)
-    {
-        $inner = new InnerTypeIterator(self::$files);
-
-        $iterator = new FileTypeFilterIterator($inner, $mode);
-
-        $this->assertIterator($expected, $iterator);
-    }
-
-    public function getAcceptData()
-    {
-        $onlyFiles = [
-            'test.py',
-            'foo/bar.tmp',
-            'test.php',
-            '.bar',
-            '.foo/.bar',
-            '.foo/bar',
-            'foo bar',
-        ];
-
-        $onlyDirectories = [
-            '.git',
-            'foo',
-            'toto',
-            'toto/.git',
-            '.foo',
-        ];
-
-        return [
-            [FileTypeFilterIterator::ONLY_FILES, $this->toAbsolute($onlyFiles)],
-            [FileTypeFilterIterator::ONLY_DIRECTORIES, $this->toAbsolute($onlyDirectories)],
-        ];
-    }
-}
-
-class InnerTypeIterator extends \ArrayIterator
-{
-    public function current()
-    {
-        return new \SplFileInfo(parent::current());
-    }
-
-    public function isFile()
-    {
-        return $this->current()->isFile();
-    }
-
-    public function isDir()
-    {
-        return $this->current()->isDir();
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/FilecontentFilterIteratorTest.php b/vendor/symfony/finder/Tests/Iterator/FilecontentFilterIteratorTest.php
deleted file mode 100644
index f4f70c8e8c..0000000000
--- a/vendor/symfony/finder/Tests/Iterator/FilecontentFilterIteratorTest.php
+++ /dev/null
@@ -1,86 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-use Symfony\Component\Finder\Iterator\FilecontentFilterIterator;
-
-class FilecontentFilterIteratorTest extends IteratorTestCase
-{
-    public function testAccept()
-    {
-        $inner = new MockFileListIterator(['test.txt']);
-        $iterator = new FilecontentFilterIterator($inner, [], []);
-        $this->assertIterator(['test.txt'], $iterator);
-    }
-
-    public function testDirectory()
-    {
-        $inner = new MockFileListIterator(['directory']);
-        $iterator = new FilecontentFilterIterator($inner, ['directory'], []);
-        $this->assertIterator([], $iterator);
-    }
-
-    public function testUnreadableFile()
-    {
-        $inner = new MockFileListIterator(['file r-']);
-        $iterator = new FilecontentFilterIterator($inner, ['file r-'], []);
-        $this->assertIterator([], $iterator);
-    }
-
-    /**
-     * @dataProvider getTestFilterData
-     */
-    public function testFilter(\Iterator $inner, array $matchPatterns, array $noMatchPatterns, array $resultArray)
-    {
-        $iterator = new FilecontentFilterIterator($inner, $matchPatterns, $noMatchPatterns);
-        $this->assertIterator($resultArray, $iterator);
-    }
-
-    public function getTestFilterData()
-    {
-        $inner = new MockFileListIterator();
-
-        $inner[] = new MockSplFileInfo([
-            'name' => 'a.txt',
-            'contents' => 'Lorem ipsum...',
-            'type' => 'file',
-            'mode' => 'r+', ]
-        );
-
-        $inner[] = new MockSplFileInfo([
-            'name' => 'b.yml',
-            'contents' => 'dolor sit...',
-            'type' => 'file',
-            'mode' => 'r+', ]
-        );
-
-        $inner[] = new MockSplFileInfo([
-            'name' => 'some/other/dir/third.php',
-            'contents' => 'amet...',
-            'type' => 'file',
-            'mode' => 'r+', ]
-        );
-
-        $inner[] = new MockSplFileInfo([
-            'name' => 'unreadable-file.txt',
-            'contents' => false,
-            'type' => 'file',
-            'mode' => 'r+', ]
-        );
-
-        return [
-            [$inner, ['.'], [], ['a.txt', 'b.yml', 'some/other/dir/third.php']],
-            [$inner, ['ipsum'], [], ['a.txt']],
-            [$inner, ['i', 'amet'], ['Lorem', 'amet'], ['b.yml']],
-        ];
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/FilenameFilterIteratorTest.php b/vendor/symfony/finder/Tests/Iterator/FilenameFilterIteratorTest.php
deleted file mode 100644
index 9270dd1cd3..0000000000
--- a/vendor/symfony/finder/Tests/Iterator/FilenameFilterIteratorTest.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-use Symfony\Component\Finder\Iterator\FilenameFilterIterator;
-
-class FilenameFilterIteratorTest extends IteratorTestCase
-{
-    /**
-     * @dataProvider getAcceptData
-     */
-    public function testAccept($matchPatterns, $noMatchPatterns, $expected)
-    {
-        $inner = new InnerNameIterator(['test.php', 'test.py', 'foo.php']);
-
-        $iterator = new FilenameFilterIterator($inner, $matchPatterns, $noMatchPatterns);
-
-        $this->assertIterator($expected, $iterator);
-    }
-
-    public function getAcceptData()
-    {
-        return [
-            [['test.*'], [], ['test.php', 'test.py']],
-            [[], ['test.*'], ['foo.php']],
-            [['*.php'], ['test.*'], ['foo.php']],
-            [['*.php', '*.py'], ['foo.*'], ['test.php', 'test.py']],
-            [['/\.php$/'], [], ['test.php', 'foo.php']],
-            [[], ['/\.php$/'], ['test.py']],
-        ];
-    }
-}
-
-class InnerNameIterator extends \ArrayIterator
-{
-    public function current()
-    {
-        return new \SplFileInfo(parent::current());
-    }
-
-    public function getFilename()
-    {
-        return parent::current();
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/FilterIteratorTest.php b/vendor/symfony/finder/Tests/Iterator/FilterIteratorTest.php
deleted file mode 100644
index 181b1464fc..0000000000
--- a/vendor/symfony/finder/Tests/Iterator/FilterIteratorTest.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-/**
- * @author Alex Bogomazov
- *
- * @group legacy
- */
-class FilterIteratorTest extends RealIteratorTestCase
-{
-    public function testFilterFilesystemIterators()
-    {
-        $i = new \FilesystemIterator($this->toAbsolute());
-
-        // it is expected that there are test.py test.php in the tmpDir
-        $i = $this->getMockForAbstractClass('Symfony\Component\Finder\Iterator\FilterIterator', [$i]);
-        $i->expects($this->any())
-            ->method('accept')
-            ->willReturnCallback(function () use ($i) {
-                return (bool) preg_match('/\.php/', (string) $i->current());
-            }
-        );
-
-        $c = 0;
-        foreach ($i as $item) {
-            ++$c;
-        }
-
-        $this->assertEquals(1, $c);
-
-        $i->rewind();
-
-        $c = 0;
-        foreach ($i as $item) {
-            ++$c;
-        }
-
-        // This would fail in php older than 5.5.23/5.6.7 with \FilterIterator
-        // but works with Symfony\Component\Finder\Iterator\FilterIterator
-        // see https://bugs.php.net/68557
-        $this->assertEquals(1, $c);
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/Iterator.php b/vendor/symfony/finder/Tests/Iterator/Iterator.php
deleted file mode 100644
index 3e21a07004..0000000000
--- a/vendor/symfony/finder/Tests/Iterator/Iterator.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-class Iterator implements \Iterator
-{
-    protected $values = [];
-
-    public function __construct(array $values = [])
-    {
-        foreach ($values as $value) {
-            $this->attach(new \SplFileInfo($value));
-        }
-        $this->rewind();
-    }
-
-    public function attach(\SplFileInfo $fileinfo)
-    {
-        $this->values[] = $fileinfo;
-    }
-
-    public function rewind()
-    {
-        reset($this->values);
-    }
-
-    public function valid()
-    {
-        return false !== $this->current();
-    }
-
-    public function next()
-    {
-        next($this->values);
-    }
-
-    public function current()
-    {
-        return current($this->values);
-    }
-
-    public function key()
-    {
-        return key($this->values);
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/IteratorTestCase.php b/vendor/symfony/finder/Tests/Iterator/IteratorTestCase.php
deleted file mode 100644
index c7dfd79e30..0000000000
--- a/vendor/symfony/finder/Tests/Iterator/IteratorTestCase.php
+++ /dev/null
@@ -1,93 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-use PHPUnit\Framework\TestCase;
-
-abstract class IteratorTestCase extends TestCase
-{
-    protected function assertIterator($expected, \Traversable $iterator)
-    {
-        // set iterator_to_array $use_key to false to avoid values merge
-        // this made FinderTest::testAppendWithAnArray() fail with GnuFinderAdapter
-        $values = array_map(function (\SplFileInfo $fileinfo) { return str_replace('/', \DIRECTORY_SEPARATOR, $fileinfo->getPathname()); }, iterator_to_array($iterator, false));
-
-        $expected = array_map(function ($path) { return str_replace('/', \DIRECTORY_SEPARATOR, $path); }, $expected);
-
-        sort($values);
-        sort($expected);
-
-        $this->assertEquals($expected, array_values($values));
-    }
-
-    protected function assertOrderedIterator($expected, \Traversable $iterator)
-    {
-        $values = array_map(function (\SplFileInfo $fileinfo) { return $fileinfo->getPathname(); }, iterator_to_array($iterator));
-
-        $this->assertEquals($expected, array_values($values));
-    }
-
-    /**
-     *  Same as assertOrderedIterator, but checks the order of groups of
-     *  array elements.
-     *
-     *  @param array $expected - an array of arrays. For any two subarrays
-     *      $a and $b such that $a goes before $b in $expected, the method
-     *      asserts that any element of $a goes before any element of $b
-     *      in the sequence generated by $iterator
-     */
-    protected function assertOrderedIteratorForGroups(array $expected, \Traversable $iterator)
-    {
-        $values = array_values(array_map(function (\SplFileInfo $fileinfo) { return $fileinfo->getPathname(); }, iterator_to_array($iterator)));
-
-        foreach ($expected as $subarray) {
-            $temp = [];
-            while (\count($values) && \count($temp) < \count($subarray)) {
-                $temp[] = array_shift($values);
-            }
-            sort($temp);
-            sort($subarray);
-            $this->assertEquals($subarray, $temp);
-        }
-    }
-
-    /**
-     * Same as IteratorTestCase::assertIterator with foreach usage.
-     */
-    protected function assertIteratorInForeach(array $expected, \Traversable $iterator)
-    {
-        $values = [];
-        foreach ($iterator as $file) {
-            $this->assertInstanceOf('Symfony\\Component\\Finder\\SplFileInfo', $file);
-            $values[] = $file->getPathname();
-        }
-
-        sort($values);
-        sort($expected);
-
-        $this->assertEquals($expected, array_values($values));
-    }
-
-    /**
-     * Same as IteratorTestCase::assertOrderedIterator with foreach usage.
-     */
-    protected function assertOrderedIteratorInForeach(array $expected, \Traversable $iterator)
-    {
-        $values = [];
-        foreach ($iterator as $file) {
-            $this->assertInstanceOf('Symfony\\Component\\Finder\\SplFileInfo', $file);
-            $values[] = $file->getPathname();
-        }
-
-        $this->assertEquals($expected, array_values($values));
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/MockFileListIterator.php b/vendor/symfony/finder/Tests/Iterator/MockFileListIterator.php
deleted file mode 100644
index 670478d7a7..0000000000
--- a/vendor/symfony/finder/Tests/Iterator/MockFileListIterator.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-class MockFileListIterator extends \ArrayIterator
-{
-    public function __construct(array $filesArray = [])
-    {
-        $files = array_map(function ($file) { return new MockSplFileInfo($file); }, $filesArray);
-        parent::__construct($files);
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/MockSplFileInfo.php b/vendor/symfony/finder/Tests/Iterator/MockSplFileInfo.php
deleted file mode 100644
index 58bb5979e9..0000000000
--- a/vendor/symfony/finder/Tests/Iterator/MockSplFileInfo.php
+++ /dev/null
@@ -1,132 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-class MockSplFileInfo extends \SplFileInfo
-{
-    const TYPE_DIRECTORY = 1;
-    const TYPE_FILE = 2;
-    const TYPE_UNKNOWN = 3;
-
-    private $contents = null;
-    private $mode = null;
-    private $type = null;
-    private $relativePath = null;
-    private $relativePathname = null;
-
-    public function __construct($param)
-    {
-        if (\is_string($param)) {
-            parent::__construct($param);
-        } elseif (\is_array($param)) {
-            $defaults = [
-                'name' => 'file.txt',
-                'contents' => null,
-                'mode' => null,
-                'type' => null,
-                'relativePath' => null,
-                'relativePathname' => null,
-            ];
-            $defaults = array_merge($defaults, $param);
-            parent::__construct($defaults['name']);
-            $this->setContents($defaults['contents']);
-            $this->setMode($defaults['mode']);
-            $this->setType($defaults['type']);
-            $this->setRelativePath($defaults['relativePath']);
-            $this->setRelativePathname($defaults['relativePathname']);
-        } else {
-            throw new \RuntimeException(sprintf('Incorrect parameter "%s"', $param));
-        }
-    }
-
-    public function isFile()
-    {
-        if (null === $this->type) {
-            return false !== strpos($this->getFilename(), 'file');
-        }
-
-        return self::TYPE_FILE === $this->type;
-    }
-
-    public function isDir()
-    {
-        if (null === $this->type) {
-            return false !== strpos($this->getFilename(), 'directory');
-        }
-
-        return self::TYPE_DIRECTORY === $this->type;
-    }
-
-    public function isReadable()
-    {
-        if (null === $this->mode) {
-            return preg_match('/r\+/', $this->getFilename());
-        }
-
-        return preg_match('/r\+/', $this->mode);
-    }
-
-    public function getContents()
-    {
-        return $this->contents;
-    }
-
-    public function setContents($contents)
-    {
-        $this->contents = $contents;
-    }
-
-    public function setMode($mode)
-    {
-        $this->mode = $mode;
-    }
-
-    public function setType($type)
-    {
-        if (\is_string($type)) {
-            switch ($type) {
-                case 'directory':
-                case 'd':
-                    $this->type = self::TYPE_DIRECTORY;
-                    break;
-                case 'file':
-                case 'f':
-                    $this->type = self::TYPE_FILE;
-                    break;
-                default:
-                    $this->type = self::TYPE_UNKNOWN;
-            }
-        } else {
-            $this->type = $type;
-        }
-    }
-
-    public function setRelativePath($relativePath)
-    {
-        $this->relativePath = $relativePath;
-    }
-
-    public function setRelativePathname($relativePathname)
-    {
-        $this->relativePathname = $relativePathname;
-    }
-
-    public function getRelativePath()
-    {
-        return $this->relativePath;
-    }
-
-    public function getRelativePathname()
-    {
-        return $this->relativePathname;
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/MultiplePcreFilterIteratorTest.php b/vendor/symfony/finder/Tests/Iterator/MultiplePcreFilterIteratorTest.php
deleted file mode 100644
index 955677695b..0000000000
--- a/vendor/symfony/finder/Tests/Iterator/MultiplePcreFilterIteratorTest.php
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Finder\Iterator\MultiplePcreFilterIterator;
-
-class MultiplePcreFilterIteratorTest extends TestCase
-{
-    /**
-     * @dataProvider getIsRegexFixtures
-     */
-    public function testIsRegex($string, $isRegex, $message)
-    {
-        $testIterator = new TestMultiplePcreFilterIterator();
-        $this->assertEquals($isRegex, $testIterator->isRegex($string), $message);
-    }
-
-    public function getIsRegexFixtures()
-    {
-        return [
-            ['foo', false, 'string'],
-            [' foo ', false, '" " is not a valid delimiter'],
-            ['\\foo\\', false, '"\\" is not a valid delimiter'],
-            ['afooa', false, '"a" is not a valid delimiter'],
-            ['//', false, 'the pattern should contain at least 1 character'],
-            ['/a/', true, 'valid regex'],
-            ['/foo/', true, 'valid regex'],
-            ['/foo/i', true, 'valid regex with a single modifier'],
-            ['/foo/imsxu', true, 'valid regex with multiple modifiers'],
-            ['#foo#', true, '"#" is a valid delimiter'],
-            ['{foo}', true, '"{,}" is a valid delimiter pair'],
-            ['[foo]', true, '"[,]" is a valid delimiter pair'],
-            ['(foo)', true, '"(,)" is a valid delimiter pair'],
-            ['<foo>', true, '"<,>" is a valid delimiter pair'],
-            ['*foo.*', false, '"*" is not considered as a valid delimiter'],
-            ['?foo.?', false, '"?" is not considered as a valid delimiter'],
-        ];
-    }
-}
-
-class TestMultiplePcreFilterIterator extends MultiplePcreFilterIterator
-{
-    public function __construct()
-    {
-    }
-
-    public function accept()
-    {
-        throw new \BadFunctionCallException('Not implemented');
-    }
-
-    public function isRegex($str)
-    {
-        return parent::isRegex($str);
-    }
-
-    public function toRegex($str)
-    {
-        throw new \BadFunctionCallException('Not implemented');
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/PathFilterIteratorTest.php b/vendor/symfony/finder/Tests/Iterator/PathFilterIteratorTest.php
deleted file mode 100644
index 9040ee04c3..0000000000
--- a/vendor/symfony/finder/Tests/Iterator/PathFilterIteratorTest.php
+++ /dev/null
@@ -1,82 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-use Symfony\Component\Finder\Iterator\PathFilterIterator;
-
-class PathFilterIteratorTest extends IteratorTestCase
-{
-    /**
-     * @dataProvider getTestFilterData
-     */
-    public function testFilter(\Iterator $inner, array $matchPatterns, array $noMatchPatterns, array $resultArray)
-    {
-        $iterator = new PathFilterIterator($inner, $matchPatterns, $noMatchPatterns);
-        $this->assertIterator($resultArray, $iterator);
-    }
-
-    public function getTestFilterData()
-    {
-        $inner = new MockFileListIterator();
-
-        //PATH:   A/B/C/abc.dat
-        $inner[] = new MockSplFileInfo([
-            'name' => 'abc.dat',
-            'relativePathname' => 'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'C'.\DIRECTORY_SEPARATOR.'abc.dat',
-        ]);
-
-        //PATH:   A/B/ab.dat
-        $inner[] = new MockSplFileInfo([
-            'name' => 'ab.dat',
-            'relativePathname' => 'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'ab.dat',
-        ]);
-
-        //PATH:   A/a.dat
-        $inner[] = new MockSplFileInfo([
-            'name' => 'a.dat',
-            'relativePathname' => 'A'.\DIRECTORY_SEPARATOR.'a.dat',
-        ]);
-
-        //PATH:   copy/A/B/C/abc.dat.copy
-        $inner[] = new MockSplFileInfo([
-            'name' => 'abc.dat.copy',
-            'relativePathname' => 'copy'.\DIRECTORY_SEPARATOR.'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'C'.\DIRECTORY_SEPARATOR.'abc.dat',
-        ]);
-
-        //PATH:   copy/A/B/ab.dat.copy
-        $inner[] = new MockSplFileInfo([
-            'name' => 'ab.dat.copy',
-            'relativePathname' => 'copy'.\DIRECTORY_SEPARATOR.'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'ab.dat',
-        ]);
-
-        //PATH:   copy/A/a.dat.copy
-        $inner[] = new MockSplFileInfo([
-            'name' => 'a.dat.copy',
-            'relativePathname' => 'copy'.\DIRECTORY_SEPARATOR.'A'.\DIRECTORY_SEPARATOR.'a.dat',
-        ]);
-
-        return [
-            [$inner, ['/^A/'],       [], ['abc.dat', 'ab.dat', 'a.dat']],
-            [$inner, ['/^A\/B/'],    [], ['abc.dat', 'ab.dat']],
-            [$inner, ['/^A\/B\/C/'], [], ['abc.dat']],
-            [$inner, ['/A\/B\/C/'], [], ['abc.dat', 'abc.dat.copy']],
-
-            [$inner, ['A'],      [], ['abc.dat', 'ab.dat', 'a.dat', 'abc.dat.copy', 'ab.dat.copy', 'a.dat.copy']],
-            [$inner, ['A/B'],    [], ['abc.dat', 'ab.dat', 'abc.dat.copy', 'ab.dat.copy']],
-            [$inner, ['A/B/C'], [], ['abc.dat', 'abc.dat.copy']],
-
-            [$inner, ['copy/A'],      [], ['abc.dat.copy', 'ab.dat.copy', 'a.dat.copy']],
-            [$inner, ['copy/A/B'],    [], ['abc.dat.copy', 'ab.dat.copy']],
-            [$inner, ['copy/A/B/C'], [], ['abc.dat.copy']],
-        ];
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/RealIteratorTestCase.php b/vendor/symfony/finder/Tests/Iterator/RealIteratorTestCase.php
deleted file mode 100644
index 70048a5ea6..0000000000
--- a/vendor/symfony/finder/Tests/Iterator/RealIteratorTestCase.php
+++ /dev/null
@@ -1,119 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-abstract class RealIteratorTestCase extends IteratorTestCase
-{
-    protected static $tmpDir;
-    protected static $files;
-
-    public static function setUpBeforeClass()
-    {
-        self::$tmpDir = realpath(sys_get_temp_dir()).\DIRECTORY_SEPARATOR.'symfony_finder';
-
-        self::$files = [
-            '.git/',
-            '.foo/',
-            '.foo/.bar',
-            '.foo/bar',
-            '.bar',
-            'test.py',
-            'foo/',
-            'foo/bar.tmp',
-            'test.php',
-            'toto/',
-            'toto/.git/',
-            'foo bar',
-        ];
-
-        self::$files = self::toAbsolute(self::$files);
-
-        if (is_dir(self::$tmpDir)) {
-            self::tearDownAfterClass();
-        } else {
-            mkdir(self::$tmpDir);
-        }
-
-        foreach (self::$files as $file) {
-            if (\DIRECTORY_SEPARATOR === $file[\strlen($file) - 1]) {
-                mkdir($file);
-            } else {
-                touch($file);
-            }
-        }
-
-        file_put_contents(self::toAbsolute('test.php'), str_repeat(' ', 800));
-        file_put_contents(self::toAbsolute('test.py'), str_repeat(' ', 2000));
-
-        touch(self::toAbsolute('foo/bar.tmp'), strtotime('2005-10-15'));
-        touch(self::toAbsolute('test.php'), strtotime('2005-10-15'));
-    }
-
-    public static function tearDownAfterClass()
-    {
-        $paths = new \RecursiveIteratorIterator(
-             new \RecursiveDirectoryIterator(self::$tmpDir, \RecursiveDirectoryIterator::SKIP_DOTS),
-             \RecursiveIteratorIterator::CHILD_FIRST
-         );
-
-        foreach ($paths as $path) {
-            if ($path->isDir()) {
-                if ($path->isLink()) {
-                    @unlink($path);
-                } else {
-                    @rmdir($path);
-                }
-            } else {
-                @unlink($path);
-            }
-        }
-    }
-
-    protected static function toAbsolute($files = null)
-    {
-        /*
-         * Without the call to setUpBeforeClass() property can be null.
-         */
-        if (!self::$tmpDir) {
-            self::$tmpDir = realpath(sys_get_temp_dir()).\DIRECTORY_SEPARATOR.'symfony_finder';
-        }
-
-        if (\is_array($files)) {
-            $f = [];
-            foreach ($files as $file) {
-                if (\is_array($file)) {
-                    $f[] = self::toAbsolute($file);
-                } else {
-                    $f[] = self::$tmpDir.\DIRECTORY_SEPARATOR.str_replace('/', \DIRECTORY_SEPARATOR, $file);
-                }
-            }
-
-            return $f;
-        }
-
-        if (\is_string($files)) {
-            return self::$tmpDir.\DIRECTORY_SEPARATOR.str_replace('/', \DIRECTORY_SEPARATOR, $files);
-        }
-
-        return self::$tmpDir;
-    }
-
-    protected static function toAbsoluteFixtures($files)
-    {
-        $f = [];
-        foreach ($files as $file) {
-            $f[] = realpath(__DIR__.\DIRECTORY_SEPARATOR.'..'.\DIRECTORY_SEPARATOR.'Fixtures'.\DIRECTORY_SEPARATOR.$file);
-        }
-
-        return $f;
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/RecursiveDirectoryIteratorTest.php b/vendor/symfony/finder/Tests/Iterator/RecursiveDirectoryIteratorTest.php
deleted file mode 100644
index 037810aea7..0000000000
--- a/vendor/symfony/finder/Tests/Iterator/RecursiveDirectoryIteratorTest.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-use Symfony\Component\Finder\Iterator\RecursiveDirectoryIterator;
-
-class RecursiveDirectoryIteratorTest extends IteratorTestCase
-{
-    /**
-     * @group network
-     */
-    public function testRewindOnFtp()
-    {
-        try {
-            $i = new RecursiveDirectoryIterator('ftp://speedtest.tele2.net/', \RecursiveDirectoryIterator::SKIP_DOTS);
-        } catch (\UnexpectedValueException $e) {
-            $this->markTestSkipped('Unsupported stream "ftp".');
-        }
-
-        $i->rewind();
-
-        $this->assertTrue(true);
-    }
-
-    /**
-     * @group network
-     */
-    public function testSeekOnFtp()
-    {
-        try {
-            $i = new RecursiveDirectoryIterator('ftp://speedtest.tele2.net/', \RecursiveDirectoryIterator::SKIP_DOTS);
-        } catch (\UnexpectedValueException $e) {
-            $this->markTestSkipped('Unsupported stream "ftp".');
-        }
-
-        $contains = [
-            'ftp://speedtest.tele2.net'.\DIRECTORY_SEPARATOR.'1000GB.zip',
-            'ftp://speedtest.tele2.net'.\DIRECTORY_SEPARATOR.'100GB.zip',
-        ];
-        $actual = [];
-
-        $i->seek(0);
-        $actual[] = $i->getPathname();
-
-        $i->seek(1);
-        $actual[] = $i->getPathname();
-
-        $this->assertEquals($contains, $actual);
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/SizeRangeFilterIteratorTest.php b/vendor/symfony/finder/Tests/Iterator/SizeRangeFilterIteratorTest.php
deleted file mode 100644
index b1e431ba52..0000000000
--- a/vendor/symfony/finder/Tests/Iterator/SizeRangeFilterIteratorTest.php
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-use Symfony\Component\Finder\Comparator\NumberComparator;
-use Symfony\Component\Finder\Iterator\SizeRangeFilterIterator;
-
-class SizeRangeFilterIteratorTest extends RealIteratorTestCase
-{
-    /**
-     * @dataProvider getAcceptData
-     */
-    public function testAccept($size, $expected)
-    {
-        $inner = new InnerSizeIterator(self::$files);
-
-        $iterator = new SizeRangeFilterIterator($inner, $size);
-
-        $this->assertIterator($expected, $iterator);
-    }
-
-    public function getAcceptData()
-    {
-        $lessThan1KGreaterThan05K = [
-            '.foo',
-            '.git',
-            'foo',
-            'test.php',
-            'toto',
-            'toto/.git',
-        ];
-
-        return [
-            [[new NumberComparator('< 1K'), new NumberComparator('> 0.5K')], $this->toAbsolute($lessThan1KGreaterThan05K)],
-        ];
-    }
-}
-
-class InnerSizeIterator extends \ArrayIterator
-{
-    public function current()
-    {
-        return new \SplFileInfo(parent::current());
-    }
-
-    public function getFilename()
-    {
-        return parent::current();
-    }
-
-    public function isFile()
-    {
-        return $this->current()->isFile();
-    }
-
-    public function getSize()
-    {
-        return $this->current()->getSize();
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/SortableIteratorTest.php b/vendor/symfony/finder/Tests/Iterator/SortableIteratorTest.php
deleted file mode 100644
index 118c4769f2..0000000000
--- a/vendor/symfony/finder/Tests/Iterator/SortableIteratorTest.php
+++ /dev/null
@@ -1,179 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-use Symfony\Component\Finder\Iterator\SortableIterator;
-
-class SortableIteratorTest extends RealIteratorTestCase
-{
-    public function testConstructor()
-    {
-        try {
-            new SortableIterator(new Iterator([]), 'foobar');
-            $this->fail('__construct() throws an \InvalidArgumentException exception if the mode is not valid');
-        } catch (\Exception $e) {
-            $this->assertInstanceOf('InvalidArgumentException', $e, '__construct() throws an \InvalidArgumentException exception if the mode is not valid');
-        }
-    }
-
-    /**
-     * @dataProvider getAcceptData
-     */
-    public function testAccept($mode, $expected)
-    {
-        if (!\is_callable($mode)) {
-            switch ($mode) {
-                case SortableIterator::SORT_BY_ACCESSED_TIME:
-                    touch(self::toAbsolute('.git'));
-                    sleep(1);
-                    file_get_contents(self::toAbsolute('.bar'));
-                    break;
-                case SortableIterator::SORT_BY_CHANGED_TIME:
-                    file_put_contents(self::toAbsolute('test.php'), 'foo');
-                    sleep(1);
-                    file_put_contents(self::toAbsolute('test.py'), 'foo');
-                    break;
-                case SortableIterator::SORT_BY_MODIFIED_TIME:
-                    file_put_contents(self::toAbsolute('test.php'), 'foo');
-                    sleep(1);
-                    file_put_contents(self::toAbsolute('test.py'), 'foo');
-                    break;
-            }
-        }
-
-        $inner = new Iterator(self::$files);
-
-        $iterator = new SortableIterator($inner, $mode);
-
-        if (SortableIterator::SORT_BY_ACCESSED_TIME === $mode
-            || SortableIterator::SORT_BY_CHANGED_TIME === $mode
-            || SortableIterator::SORT_BY_MODIFIED_TIME === $mode
-        ) {
-            if ('\\' === \DIRECTORY_SEPARATOR && SortableIterator::SORT_BY_MODIFIED_TIME !== $mode) {
-                $this->markTestSkipped('Sorting by atime or ctime is not supported on Windows');
-            }
-            $this->assertOrderedIteratorForGroups($expected, $iterator);
-        } else {
-            $this->assertOrderedIterator($expected, $iterator);
-        }
-    }
-
-    public function getAcceptData()
-    {
-        $sortByName = [
-            '.bar',
-            '.foo',
-            '.foo/.bar',
-            '.foo/bar',
-            '.git',
-            'foo',
-            'foo bar',
-            'foo/bar.tmp',
-            'test.php',
-            'test.py',
-            'toto',
-            'toto/.git',
-        ];
-
-        $sortByType = [
-            '.foo',
-            '.git',
-            'foo',
-            'toto',
-            'toto/.git',
-            '.bar',
-            '.foo/.bar',
-            '.foo/bar',
-            'foo bar',
-            'foo/bar.tmp',
-            'test.php',
-            'test.py',
-        ];
-
-        $customComparison = [
-            '.bar',
-            '.foo',
-            '.foo/.bar',
-            '.foo/bar',
-            '.git',
-            'foo',
-            'foo bar',
-            'foo/bar.tmp',
-            'test.php',
-            'test.py',
-            'toto',
-            'toto/.git',
-        ];
-
-        $sortByAccessedTime = [
-            // For these two files the access time was set to 2005-10-15
-            ['foo/bar.tmp', 'test.php'],
-            // These files were created more or less at the same time
-            [
-                '.git',
-                '.foo',
-                '.foo/.bar',
-                '.foo/bar',
-                'test.py',
-                'foo',
-                'toto',
-                'toto/.git',
-                'foo bar',
-            ],
-            // This file was accessed after sleeping for 1 sec
-            ['.bar'],
-        ];
-
-        $sortByChangedTime = [
-            [
-                '.git',
-                '.foo',
-                '.foo/.bar',
-                '.foo/bar',
-                '.bar',
-                'foo',
-                'foo/bar.tmp',
-                'toto',
-                'toto/.git',
-                'foo bar',
-            ],
-            ['test.php'],
-            ['test.py'],
-        ];
-
-        $sortByModifiedTime = [
-            [
-                '.git',
-                '.foo',
-                '.foo/.bar',
-                '.foo/bar',
-                '.bar',
-                'foo',
-                'foo/bar.tmp',
-                'toto',
-                'toto/.git',
-                'foo bar',
-            ],
-            ['test.php'],
-            ['test.py'],
-        ];
-
-        return [
-            [SortableIterator::SORT_BY_NAME, $this->toAbsolute($sortByName)],
-            [SortableIterator::SORT_BY_TYPE, $this->toAbsolute($sortByType)],
-            [SortableIterator::SORT_BY_ACCESSED_TIME, $this->toAbsolute($sortByAccessedTime)],
-            [SortableIterator::SORT_BY_CHANGED_TIME, $this->toAbsolute($sortByChangedTime)],
-            [SortableIterator::SORT_BY_MODIFIED_TIME, $this->toAbsolute($sortByModifiedTime)],
-            [function (\SplFileInfo $a, \SplFileInfo $b) { return strcmp($a->getRealPath(), $b->getRealPath()); }, $this->toAbsolute($customComparison)],
-        ];
-    }
-}
diff --git a/vendor/symfony/finder/composer.json b/vendor/symfony/finder/composer.json
index b0895524be..7a696aa7fe 100644
--- a/vendor/symfony/finder/composer.json
+++ b/vendor/symfony/finder/composer.json
@@ -16,7 +16,7 @@
         }
     ],
     "require": {
-        "php": "^5.5.9|>=7.0.8"
+        "php": ">=7.1.3"
     },
     "autoload": {
         "psr-4": { "Symfony\\Component\\Finder\\": "" },
diff --git a/vendor/symfony/finder/phpunit.xml.dist b/vendor/symfony/finder/phpunit.xml.dist
deleted file mode 100644
index 078847af96..0000000000
--- a/vendor/symfony/finder/phpunit.xml.dist
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/5.2/phpunit.xsd"
-         backupGlobals="false"
-         colors="true"
-         bootstrap="vendor/autoload.php"
-         failOnRisky="true"
-         failOnWarning="true"
->
-    <php>
-        <ini name="error_reporting" value="-1" />
-    </php>
-
-    <testsuites>
-        <testsuite name="Symfony Finder Component Test Suite">
-            <directory>./Tests/</directory>
-        </testsuite>
-    </testsuites>
-
-    <filter>
-        <whitelist>
-            <directory>./</directory>
-            <exclude>
-                <directory>./Tests</directory>
-                <directory>./vendor</directory>
-            </exclude>
-        </whitelist>
-    </filter>
-</phpunit>
-- 
GitLab


From f6ca9a1f40943ae379370e088a6d7b067dd7559f Mon Sep 17 00:00:00 2001
From: Brian Weaver <weaver.299@osu.edu>
Date: Mon, 30 Nov 2020 15:06:07 -0500
Subject: [PATCH 16/23] switch to drupal/core-composer-scaffold, remove
 rvtraveller/qs-composer-installer

---
 .editorconfig                                 |    2 +-
 .gitattributes                                |   61 +
 composer.json                                 |   28 +-
 composer.lock                                 |  132 +-
 vendor/composer/autoload_classmap.php         |   31 +-
 vendor/composer/autoload_psr4.php             |    3 +-
 vendor/composer/autoload_static.php           |   49 +-
 vendor/composer/installed.json                |  136 +-
 .../drupal-scaffold/.editorconfig             |   17 -
 .../drupal-scaffold/.gitignore                |    1 -
 .../drupal-scaffold/.scenarios.lock/install   |   52 -
 .../.scenarios.lock/phpunit4/.gitignore       |    1 -
 .../.scenarios.lock/phpunit4/composer.json    |   53 -
 .../.scenarios.lock/phpunit4/composer.lock    | 2153 --------------
 .../.scenarios.lock/phpunit4/src              |    1 -
 .../.scenarios.lock/phpunit4/tests            |    1 -
 .../drupal-scaffold/.travis.yml               |   42 -
 .../drupal-composer/drupal-scaffold/README.md |  121 -
 .../drupal-scaffold/composer.json             |   51 -
 .../drupal-scaffold/composer.lock             | 2490 -----------------
 .../drupal-scaffold/phpunit.xml.dist          |   15 -
 .../src/DrupalScaffoldCommand.php             |   36 -
 .../drupal-scaffold/src/FileFetcher.php       |   87 -
 .../drupal-scaffold/src/Handler.php           |  411 ---
 .../drupal-scaffold/src/Plugin.php            |  103 -
 .../src/PrestissimoFileFetcher.php            |   87 -
 .../drupal-scaffold/tests/FetcherTest.php     |   79 -
 .../drupal-scaffold/tests/PluginTest.php      |  195 --
 .../AllowedPackages.php                       |  217 ++
 .../CommandProvider.php                       |    8 +-
 .../ComposerScaffoldCommand.php               |   56 +
 .../GenerateAutoloadReferenceFile.php         |  124 +
 vendor/drupal/core-composer-scaffold/Git.php  |   72 +
 .../drupal/core-composer-scaffold/Handler.php |  249 ++
 .../core-composer-scaffold/Interpolator.php   |  157 ++
 .../drupal/core-composer-scaffold/LICENSE.txt |  339 +++
 .../ManageGitIgnore.php                       |  125 +
 .../core-composer-scaffold/ManageOptions.php  |   92 +
 .../Operations/AbstractOperation.php          |   53 +
 .../Operations/AppendOp.php                   |  206 ++
 .../Operations/OperationData.php              |  227 ++
 .../Operations/OperationFactory.php           |  161 ++
 .../Operations/OperationInterface.php         |   69 +
 .../Operations/ReplaceOp.php                  |  127 +
 .../Operations/ScaffoldFileCollection.php     |  198 ++
 .../Operations/ScaffoldResult.php             |   61 +
 .../Operations/SkipOp.php                     |   54 +
 .../drupal/core-composer-scaffold/Plugin.php  |  147 +
 .../PostPackageEventListenerInterface.php     |   24 +
 .../drupal/core-composer-scaffold/README.md   |  519 ++++
 .../ScaffoldFileInfo.php                      |  139 +
 .../ScaffoldFilePath.php                      |  202 ++
 .../ScaffoldOptions.php                       |  203 ++
 .../drupal/core-composer-scaffold/TESTING.txt |   18 +
 .../core-composer-scaffold/composer.json      |   32 +
 .../rvtraveller/qs-composer-installer/LICENSE |   21 -
 .../qs-composer-installer/README.md           |   22 -
 .../qs-composer-installer/composer.json       |   22 -
 .../src/QuicksilverComposerInstaller.php      |  111 -
 .../QuicksilverComposerInstallerPlugin.php    |   20 -
 web/.csslintrc                                |   40 +
 web/.eslintignore                             |    8 +
 web/.eslintrc.json                            |    3 +
 web/.htaccess                                 |   20 +-
 64 files changed, 4157 insertions(+), 6427 deletions(-)
 create mode 100644 .gitattributes
 delete mode 100644 vendor/drupal-composer/drupal-scaffold/.editorconfig
 delete mode 100644 vendor/drupal-composer/drupal-scaffold/.gitignore
 delete mode 100755 vendor/drupal-composer/drupal-scaffold/.scenarios.lock/install
 delete mode 100644 vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/.gitignore
 delete mode 100644 vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/composer.json
 delete mode 100644 vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/composer.lock
 delete mode 120000 vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/src
 delete mode 120000 vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/tests
 delete mode 100644 vendor/drupal-composer/drupal-scaffold/.travis.yml
 delete mode 100644 vendor/drupal-composer/drupal-scaffold/README.md
 delete mode 100644 vendor/drupal-composer/drupal-scaffold/composer.json
 delete mode 100644 vendor/drupal-composer/drupal-scaffold/composer.lock
 delete mode 100644 vendor/drupal-composer/drupal-scaffold/phpunit.xml.dist
 delete mode 100644 vendor/drupal-composer/drupal-scaffold/src/DrupalScaffoldCommand.php
 delete mode 100644 vendor/drupal-composer/drupal-scaffold/src/FileFetcher.php
 delete mode 100644 vendor/drupal-composer/drupal-scaffold/src/Handler.php
 delete mode 100644 vendor/drupal-composer/drupal-scaffold/src/Plugin.php
 delete mode 100644 vendor/drupal-composer/drupal-scaffold/src/PrestissimoFileFetcher.php
 delete mode 100644 vendor/drupal-composer/drupal-scaffold/tests/FetcherTest.php
 delete mode 100644 vendor/drupal-composer/drupal-scaffold/tests/PluginTest.php
 create mode 100644 vendor/drupal/core-composer-scaffold/AllowedPackages.php
 rename vendor/{drupal-composer/drupal-scaffold/src => drupal/core-composer-scaffold}/CommandProvider.php (72%)
 create mode 100644 vendor/drupal/core-composer-scaffold/ComposerScaffoldCommand.php
 create mode 100644 vendor/drupal/core-composer-scaffold/GenerateAutoloadReferenceFile.php
 create mode 100644 vendor/drupal/core-composer-scaffold/Git.php
 create mode 100644 vendor/drupal/core-composer-scaffold/Handler.php
 create mode 100644 vendor/drupal/core-composer-scaffold/Interpolator.php
 create mode 100644 vendor/drupal/core-composer-scaffold/LICENSE.txt
 create mode 100644 vendor/drupal/core-composer-scaffold/ManageGitIgnore.php
 create mode 100644 vendor/drupal/core-composer-scaffold/ManageOptions.php
 create mode 100644 vendor/drupal/core-composer-scaffold/Operations/AbstractOperation.php
 create mode 100644 vendor/drupal/core-composer-scaffold/Operations/AppendOp.php
 create mode 100644 vendor/drupal/core-composer-scaffold/Operations/OperationData.php
 create mode 100644 vendor/drupal/core-composer-scaffold/Operations/OperationFactory.php
 create mode 100644 vendor/drupal/core-composer-scaffold/Operations/OperationInterface.php
 create mode 100644 vendor/drupal/core-composer-scaffold/Operations/ReplaceOp.php
 create mode 100644 vendor/drupal/core-composer-scaffold/Operations/ScaffoldFileCollection.php
 create mode 100644 vendor/drupal/core-composer-scaffold/Operations/ScaffoldResult.php
 create mode 100644 vendor/drupal/core-composer-scaffold/Operations/SkipOp.php
 create mode 100644 vendor/drupal/core-composer-scaffold/Plugin.php
 create mode 100644 vendor/drupal/core-composer-scaffold/PostPackageEventListenerInterface.php
 create mode 100644 vendor/drupal/core-composer-scaffold/README.md
 create mode 100644 vendor/drupal/core-composer-scaffold/ScaffoldFileInfo.php
 create mode 100644 vendor/drupal/core-composer-scaffold/ScaffoldFilePath.php
 create mode 100644 vendor/drupal/core-composer-scaffold/ScaffoldOptions.php
 create mode 100644 vendor/drupal/core-composer-scaffold/TESTING.txt
 create mode 100644 vendor/drupal/core-composer-scaffold/composer.json
 delete mode 100644 vendor/rvtraveller/qs-composer-installer/LICENSE
 delete mode 100644 vendor/rvtraveller/qs-composer-installer/README.md
 delete mode 100644 vendor/rvtraveller/qs-composer-installer/composer.json
 delete mode 100644 vendor/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstaller.php
 delete mode 100644 vendor/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstallerPlugin.php
 create mode 100644 web/.csslintrc
 create mode 100644 web/.eslintignore
 create mode 100644 web/.eslintrc.json

diff --git a/.editorconfig b/.editorconfig
index 12bcb27e4e..686c443cec 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -13,5 +13,5 @@ charset = utf-8
 trim_trailing_whitespace = true
 insert_final_newline = true
 
-[{composer.json,composer.lock}]
+[composer.{json,lock}]
 indent_size = 4
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000000..a37894e8e4
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,61 @@
+# Drupal git normalization
+# @see https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html
+# @see https://www.drupal.org/node/1542048
+
+# Normally these settings would be done with macro attributes for improved
+# readability and easier maintenance. However macros can only be defined at the
+# repository root directory. Drupal avoids making any assumptions about where it
+# is installed.
+
+# Define text file attributes.
+# - Treat them as text.
+# - Ensure no CRLF line-endings, neither on checkout nor on checkin.
+# - Detect whitespace errors.
+#   - Exposed by default in `git diff --color` on the CLI.
+#   - Validate with `git diff --check`.
+#   - Deny applying with `git apply --whitespace=error-all`.
+#   - Fix automatically with `git apply --whitespace=fix`.
+
+*.config  text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.css     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.dist    text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.engine  text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
+*.html    text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=html
+*.inc     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
+*.install text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
+*.js      text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.json    text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.lock    text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.map     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.md      text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.module  text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
+*.php     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
+*.po      text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.profile text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
+*.script  text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.sh      text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
+*.sql     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.svg     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.theme   text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
+*.twig    text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.txt     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.xml     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.yml     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+
+# Define binary file attributes.
+# - Do not treat them as text.
+# - Include binary diff in patches instead of "binary files differ."
+*.eot     -text diff
+*.exe     -text diff
+*.gif     -text diff
+*.gz      -text diff
+*.ico     -text diff
+*.jpeg    -text diff
+*.jpg     -text diff
+*.otf     -text diff
+*.phar    -text diff
+*.png     -text diff
+*.svgz    -text diff
+*.ttf     -text diff
+*.woff    -text diff
+*.woff2   -text diff
diff --git a/composer.json b/composer.json
index 1360db06d2..2348c7adb5 100644
--- a/composer.json
+++ b/composer.json
@@ -86,7 +86,6 @@
         "desandro/imagesloaded": "4.1.4",
         "desandro/masonry": "4.2",
         "dimsemenov/magnific-popup": "1.1",
-        "drupal-composer/drupal-scaffold": "2.5.4",
         "drupal/address": "1.1",
         "drupal/addtocalendar": "3.2",
         "drupal/admin_toolbar": "2.4",
@@ -106,6 +105,7 @@
         "drupal/config_update": "1.5",
         "drupal/console": "1.9.7",
         "drupal/content_access": "1.0-alpha1",
+        "drupal/core-composer-scaffold": "^9.0",
         "drupal/core-recommended": "8.9.10",
         "drupal/crop": "2.1",
         "drupal/ctools": "3.4",
@@ -192,7 +192,6 @@
         "gdsmith/jquery.easing": "1.4.1",
         "oomphinc/composer-installers-extender": "2.0",
         "pantheon-systems/quicksilver-pushback": "1.0.1",
-        "rvtraveller/qs-composer-installer": "1.1",
         "zaporylie/composer-drupal-optimizations": "1.1"
     },
     "require-dev": {},
@@ -255,18 +254,19 @@
         },
         "drupal-scaffold": {
             "source": "https://raw.githubusercontent.com/pantheon-systems/drops-8-scaffolding/{version}/{path}",
-            "includes": [
-                "sites/default/default.services.pantheon.preproduction.yml",
-                "sites/default/settings.pantheon.php"
-            ],
-            "excludes": [
-                ".csslintrc",
-                ".editorconfig",
-                ".eslintignore",
-                ".eslintrc.json",
-                ".htaccess",
-                "web.config"
-            ]
+            "locations": {
+              "web-root": "web/"
+            },
+            "file-mapping": {
+              "[web-root]/INSTALL.txt": false,
+              "[web-root]/README.txt": false,
+              "[web-root]/example.gitignore": false,
+              "[web-root]/modules/README.txt": false,
+              "[web-root]/profiles/README.txt": false,
+              "[web-root]/sites/README.txt": false,
+              "[web-root]/themes/README.txt": false,
+              "[web-root]/web.config": false
+            }
         },
         "patches": {
             "drupal/core": {
diff --git a/composer.lock b/composer.lock
index 63649e18a4..49f64243a6 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "d70eba8d9113b670ca935392605877f5",
+    "content-hash": "df313a5863c9258df18719ef6cfe21e0",
     "packages": [
         {
             "name": "alchemy/zippy",
@@ -1970,51 +1970,6 @@
             ],
             "time": "2019-06-08T11:03:04+00:00"
         },
-        {
-            "name": "drupal-composer/drupal-scaffold",
-            "version": "2.5.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/drupal-composer/drupal-scaffold.git",
-                "reference": "fc6bf4ceecb5d47327f54d48d4d4f67b17da956d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/drupal-composer/drupal-scaffold/zipball/fc6bf4ceecb5d47327f54d48d4d4f67b17da956d",
-                "reference": "fc6bf4ceecb5d47327f54d48d4d4f67b17da956d",
-                "shasum": ""
-            },
-            "require": {
-                "composer-plugin-api": "^1.0.0",
-                "composer/semver": "^1.4",
-                "php": ">=5.4.5"
-            },
-            "require-dev": {
-                "composer/composer": "dev-master",
-                "g1a/composer-test-scenarios": "^2.1.0",
-                "phpunit/phpunit": "^6",
-                "squizlabs/php_codesniffer": "^2.8"
-            },
-            "type": "composer-plugin",
-            "extra": {
-                "class": "DrupalComposer\\DrupalScaffold\\Plugin",
-                "branch-alias": {
-                    "dev-master": "2.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "DrupalComposer\\DrupalScaffold\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "GPL-2.0-or-later"
-            ],
-            "description": "Composer Plugin for updating the Drupal scaffold files when using drupal/core",
-            "abandoned": "drupal/core-composer-scaffold",
-            "time": "2018-07-27T10:07:07+00:00"
-        },
         {
             "name": "drupal/address",
             "version": "1.1.0",
@@ -3643,6 +3598,53 @@
             "description": "Drupal is an open source content management platform powering millions of websites and applications.",
             "time": "2020-11-26T01:49:15+00:00"
         },
+        {
+            "name": "drupal/core-composer-scaffold",
+            "version": "9.0.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/drupal/core-composer-scaffold.git",
+                "reference": "c017751a6bb9b2ffe56f0fab607ba67c21604bfd"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/drupal/core-composer-scaffold/zipball/c017751a6bb9b2ffe56f0fab607ba67c21604bfd",
+                "reference": "c017751a6bb9b2ffe56f0fab607ba67c21604bfd",
+                "shasum": ""
+            },
+            "require": {
+                "composer-plugin-api": "^1 || ^2",
+                "php": ">=7.3.0"
+            },
+            "conflict": {
+                "drupal-composer/drupal-scaffold": "*"
+            },
+            "require-dev": {
+                "composer/composer": "^1.8@stable"
+            },
+            "type": "composer-plugin",
+            "extra": {
+                "class": "Drupal\\Composer\\Plugin\\Scaffold\\Plugin",
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Drupal\\Composer\\Plugin\\Scaffold\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "GPL-2.0-or-later"
+            ],
+            "description": "A flexible Composer project scaffold builder.",
+            "homepage": "https://www.drupal.org/project/drupal",
+            "keywords": [
+                "drupal"
+            ],
+            "time": "2020-08-07T22:30:24+00:00"
+        },
         {
             "name": "drupal/core-recommended",
             "version": "8.9.10",
@@ -10982,44 +10984,6 @@
             ],
             "time": "2020-04-22T17:19:51+00:00"
         },
-        {
-            "name": "rvtraveller/qs-composer-installer",
-            "version": "1.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/rvtraveller/qs-composer-installer.git",
-                "reference": "20d6f4397e4b77599646767ad030092a60f5f92a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/rvtraveller/qs-composer-installer/zipball/20d6f4397e4b77599646767ad030092a60f5f92a",
-                "reference": "20d6f4397e4b77599646767ad030092a60f5f92a",
-                "shasum": ""
-            },
-            "require": {
-                "composer-plugin-api": "~1.0",
-                "composer/installers": "~1.0"
-            },
-            "require-dev": {
-                "composer/composer": "~1.0@dev"
-            },
-            "type": "composer-plugin",
-            "extra": {
-                "class": "rvtraveller\\QuicksilverComposerInstaller\\QuicksilverComposerInstallerPlugin"
-            },
-            "autoload": {
-                "psr-4": {
-                    "rvtraveller\\QuicksilverComposerInstaller\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "Install Quicksilver modules for Pantheon into custom locations.",
-            "homepage": "https://github.com/rvtraveller/qs-composer-installer",
-            "time": "2017-01-27T20:40:31+00:00"
-        },
         {
             "name": "simplesamlphp/saml2",
             "version": "v3.4.5",
diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php
index 20c8bdc6fa..fde1ea6131 100644
--- a/vendor/composer/autoload_classmap.php
+++ b/vendor/composer/autoload_classmap.php
@@ -747,12 +747,6 @@
     'DrupalCodeGenerator\\Twig\\TwigSortSetNode' => $vendorDir . '/chi-teck/drupal-code-generator/src/Twig/TwigSortSetNode.php',
     'DrupalCodeGenerator\\Twig\\TwigSortTokenParser' => $vendorDir . '/chi-teck/drupal-code-generator/src/Twig/TwigSortTokenParser.php',
     'DrupalCodeGenerator\\Utils' => $vendorDir . '/chi-teck/drupal-code-generator/src/Utils.php',
-    'DrupalComposer\\DrupalScaffold\\CommandProvider' => $vendorDir . '/drupal-composer/drupal-scaffold/src/CommandProvider.php',
-    'DrupalComposer\\DrupalScaffold\\DrupalScaffoldCommand' => $vendorDir . '/drupal-composer/drupal-scaffold/src/DrupalScaffoldCommand.php',
-    'DrupalComposer\\DrupalScaffold\\FileFetcher' => $vendorDir . '/drupal-composer/drupal-scaffold/src/FileFetcher.php',
-    'DrupalComposer\\DrupalScaffold\\Handler' => $vendorDir . '/drupal-composer/drupal-scaffold/src/Handler.php',
-    'DrupalComposer\\DrupalScaffold\\Plugin' => $vendorDir . '/drupal-composer/drupal-scaffold/src/Plugin.php',
-    'DrupalComposer\\DrupalScaffold\\PrestissimoFileFetcher' => $vendorDir . '/drupal-composer/drupal-scaffold/src/PrestissimoFileFetcher.php',
     'DrupalFinder\\DrupalFinder' => $vendorDir . '/webflo/drupal-finder/src/DrupalFinder.php',
     'DrupalProject\\composer\\ScriptHandler' => $baseDir . '/scripts/composer/ScriptHandler.php',
     'Drupal\\Component\\Annotation\\AnnotationBase' => $baseDir . '/web/core/lib/Drupal/Component/Annotation/AnnotationBase.php',
@@ -911,6 +905,29 @@
     'Drupal\\Component\\Uuid\\Uuid' => $baseDir . '/web/core/lib/Drupal/Component/Uuid/Uuid.php',
     'Drupal\\Component\\Uuid\\UuidInterface' => $baseDir . '/web/core/lib/Drupal/Component/Uuid/UuidInterface.php',
     'Drupal\\Component\\Version\\Constraint' => $baseDir . '/web/core/lib/Drupal/Component/Version/Constraint.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\AllowedPackages' => $vendorDir . '/drupal/core-composer-scaffold/AllowedPackages.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\CommandProvider' => $vendorDir . '/drupal/core-composer-scaffold/CommandProvider.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\ComposerScaffoldCommand' => $vendorDir . '/drupal/core-composer-scaffold/ComposerScaffoldCommand.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\GenerateAutoloadReferenceFile' => $vendorDir . '/drupal/core-composer-scaffold/GenerateAutoloadReferenceFile.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\Git' => $vendorDir . '/drupal/core-composer-scaffold/Git.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\Handler' => $vendorDir . '/drupal/core-composer-scaffold/Handler.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\Interpolator' => $vendorDir . '/drupal/core-composer-scaffold/Interpolator.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\ManageGitIgnore' => $vendorDir . '/drupal/core-composer-scaffold/ManageGitIgnore.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\ManageOptions' => $vendorDir . '/drupal/core-composer-scaffold/ManageOptions.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\AbstractOperation' => $vendorDir . '/drupal/core-composer-scaffold/Operations/AbstractOperation.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\AppendOp' => $vendorDir . '/drupal/core-composer-scaffold/Operations/AppendOp.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\OperationData' => $vendorDir . '/drupal/core-composer-scaffold/Operations/OperationData.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\OperationFactory' => $vendorDir . '/drupal/core-composer-scaffold/Operations/OperationFactory.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\OperationInterface' => $vendorDir . '/drupal/core-composer-scaffold/Operations/OperationInterface.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\ReplaceOp' => $vendorDir . '/drupal/core-composer-scaffold/Operations/ReplaceOp.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\ScaffoldFileCollection' => $vendorDir . '/drupal/core-composer-scaffold/Operations/ScaffoldFileCollection.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\ScaffoldResult' => $vendorDir . '/drupal/core-composer-scaffold/Operations/ScaffoldResult.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\SkipOp' => $vendorDir . '/drupal/core-composer-scaffold/Operations/SkipOp.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\Plugin' => $vendorDir . '/drupal/core-composer-scaffold/Plugin.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\PostPackageEventListenerInterface' => $vendorDir . '/drupal/core-composer-scaffold/PostPackageEventListenerInterface.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\ScaffoldFileInfo' => $vendorDir . '/drupal/core-composer-scaffold/ScaffoldFileInfo.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\ScaffoldFilePath' => $vendorDir . '/drupal/core-composer-scaffold/ScaffoldFilePath.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\ScaffoldOptions' => $vendorDir . '/drupal/core-composer-scaffold/ScaffoldOptions.php',
     'Drupal\\Console\\Annotations\\DrupalCommand' => $vendorDir . '/drupal/console/src/Annotations/DrupalCommand.php',
     'Drupal\\Console\\Annotations\\DrupalCommandAnnotationReader' => $vendorDir . '/drupal/console/src/Annotations/DrupalCommandAnnotationReader.php',
     'Drupal\\Console\\Application' => $vendorDir . '/drupal/console/src/Application.php',
@@ -6010,8 +6027,6 @@
     'enshrined\\svgSanitize\\data\\AttributeInterface' => $vendorDir . '/enshrined/svg-sanitize/src/data/AttributeInterface.php',
     'enshrined\\svgSanitize\\data\\TagInterface' => $vendorDir . '/enshrined/svg-sanitize/src/data/TagInterface.php',
     'enshrined\\svgSanitize\\data\\XPath' => $vendorDir . '/enshrined/svg-sanitize/src/data/XPath.php',
-    'rvtraveller\\QuicksilverComposerInstaller\\QuicksilverComposerInstaller' => $vendorDir . '/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstaller.php',
-    'rvtraveller\\QuicksilverComposerInstaller\\QuicksilverComposerInstallerPlugin' => $vendorDir . '/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstallerPlugin.php',
     'zaporylie\\ComposerDrupalOptimizations\\Cache' => $vendorDir . '/zaporylie/composer-drupal-optimizations/src/Cache.php',
     'zaporylie\\ComposerDrupalOptimizations\\Plugin' => $vendorDir . '/zaporylie/composer-drupal-optimizations/src/Plugin.php',
     'zaporylie\\ComposerDrupalOptimizations\\TruncatedComposerRepository' => $vendorDir . '/zaporylie/composer-drupal-optimizations/src/TruncatedComposerRepository.php',
diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php
index 4ad8fd1499..f6474efec0 100644
--- a/vendor/composer/autoload_psr4.php
+++ b/vendor/composer/autoload_psr4.php
@@ -7,7 +7,6 @@
 
 return array(
     'zaporylie\\ComposerDrupalOptimizations\\' => array($vendorDir . '/zaporylie/composer-drupal-optimizations/src'),
-    'rvtraveller\\QuicksilverComposerInstaller\\' => array($vendorDir . '/rvtraveller/qs-composer-installer/src'),
     'enshrined\\svgSanitize\\' => array($vendorDir . '/enshrined/svg-sanitize/src'),
     'cweagans\\Composer\\' => array($vendorDir . '/cweagans/composer-patches/src'),
     'XdgBaseDir\\' => array($vendorDir . '/dnoegel/php-xdg-base-dir/src'),
@@ -85,8 +84,8 @@
     'Drupal\\Console\\Core\\' => array($vendorDir . '/drupal/console-core/src'),
     'Drupal\\Console\\Composer\\Plugin\\' => array($vendorDir . '/drupal/console-extend-plugin/src'),
     'Drupal\\Console\\' => array($vendorDir . '/drupal/console/src'),
+    'Drupal\\Composer\\Plugin\\Scaffold\\' => array($vendorDir . '/drupal/core-composer-scaffold'),
     'Drupal\\Component\\' => array($baseDir . '/web/core/lib/Drupal/Component'),
-    'DrupalComposer\\DrupalScaffold\\' => array($vendorDir . '/drupal-composer/drupal-scaffold/src'),
     'DrupalCodeGenerator\\' => array($vendorDir . '/chi-teck/drupal-code-generator/src'),
     'Doctrine\\Common\\Lexer\\' => array($vendorDir . '/doctrine/lexer/lib/Doctrine/Common/Lexer'),
     'Doctrine\\Common\\Inflector\\' => array($vendorDir . '/doctrine/inflector/lib/Doctrine/Common/Inflector'),
diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php
index cbad37edc3..1509b85962 100644
--- a/vendor/composer/autoload_static.php
+++ b/vendor/composer/autoload_static.php
@@ -48,10 +48,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         array (
             'zaporylie\\ComposerDrupalOptimizations\\' => 38,
         ),
-        'r' => 
-        array (
-            'rvtraveller\\QuicksilverComposerInstaller\\' => 41,
-        ),
         'e' => 
         array (
             'enshrined\\svgSanitize\\' => 22,
@@ -176,8 +172,8 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
             'Drupal\\Console\\Core\\' => 20,
             'Drupal\\Console\\Composer\\Plugin\\' => 31,
             'Drupal\\Console\\' => 15,
+            'Drupal\\Composer\\Plugin\\Scaffold\\' => 32,
             'Drupal\\Component\\' => 17,
-            'DrupalComposer\\DrupalScaffold\\' => 30,
             'DrupalCodeGenerator\\' => 20,
             'Doctrine\\Common\\Lexer\\' => 22,
             'Doctrine\\Common\\Inflector\\' => 26,
@@ -211,10 +207,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         array (
             0 => __DIR__ . '/..' . '/zaporylie/composer-drupal-optimizations/src',
         ),
-        'rvtraveller\\QuicksilverComposerInstaller\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/rvtraveller/qs-composer-installer/src',
-        ),
         'enshrined\\svgSanitize\\' => 
         array (
             0 => __DIR__ . '/..' . '/enshrined/svg-sanitize/src',
@@ -523,13 +515,13 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         array (
             0 => __DIR__ . '/..' . '/drupal/console/src',
         ),
-        'Drupal\\Component\\' => 
+        'Drupal\\Composer\\Plugin\\Scaffold\\' => 
         array (
-            0 => __DIR__ . '/../..' . '/web/core/lib/Drupal/Component',
+            0 => __DIR__ . '/..' . '/drupal/core-composer-scaffold',
         ),
-        'DrupalComposer\\DrupalScaffold\\' => 
+        'Drupal\\Component\\' => 
         array (
-            0 => __DIR__ . '/..' . '/drupal-composer/drupal-scaffold/src',
+            0 => __DIR__ . '/../..' . '/web/core/lib/Drupal/Component',
         ),
         'DrupalCodeGenerator\\' => 
         array (
@@ -1424,12 +1416,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'DrupalCodeGenerator\\Twig\\TwigSortSetNode' => __DIR__ . '/..' . '/chi-teck/drupal-code-generator/src/Twig/TwigSortSetNode.php',
         'DrupalCodeGenerator\\Twig\\TwigSortTokenParser' => __DIR__ . '/..' . '/chi-teck/drupal-code-generator/src/Twig/TwigSortTokenParser.php',
         'DrupalCodeGenerator\\Utils' => __DIR__ . '/..' . '/chi-teck/drupal-code-generator/src/Utils.php',
-        'DrupalComposer\\DrupalScaffold\\CommandProvider' => __DIR__ . '/..' . '/drupal-composer/drupal-scaffold/src/CommandProvider.php',
-        'DrupalComposer\\DrupalScaffold\\DrupalScaffoldCommand' => __DIR__ . '/..' . '/drupal-composer/drupal-scaffold/src/DrupalScaffoldCommand.php',
-        'DrupalComposer\\DrupalScaffold\\FileFetcher' => __DIR__ . '/..' . '/drupal-composer/drupal-scaffold/src/FileFetcher.php',
-        'DrupalComposer\\DrupalScaffold\\Handler' => __DIR__ . '/..' . '/drupal-composer/drupal-scaffold/src/Handler.php',
-        'DrupalComposer\\DrupalScaffold\\Plugin' => __DIR__ . '/..' . '/drupal-composer/drupal-scaffold/src/Plugin.php',
-        'DrupalComposer\\DrupalScaffold\\PrestissimoFileFetcher' => __DIR__ . '/..' . '/drupal-composer/drupal-scaffold/src/PrestissimoFileFetcher.php',
         'DrupalFinder\\DrupalFinder' => __DIR__ . '/..' . '/webflo/drupal-finder/src/DrupalFinder.php',
         'DrupalProject\\composer\\ScriptHandler' => __DIR__ . '/../..' . '/scripts/composer/ScriptHandler.php',
         'Drupal\\Component\\Annotation\\AnnotationBase' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Component/Annotation/AnnotationBase.php',
@@ -1588,6 +1574,29 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Drupal\\Component\\Uuid\\Uuid' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Component/Uuid/Uuid.php',
         'Drupal\\Component\\Uuid\\UuidInterface' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Component/Uuid/UuidInterface.php',
         'Drupal\\Component\\Version\\Constraint' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Component/Version/Constraint.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\AllowedPackages' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/AllowedPackages.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\CommandProvider' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/CommandProvider.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\ComposerScaffoldCommand' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/ComposerScaffoldCommand.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\GenerateAutoloadReferenceFile' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/GenerateAutoloadReferenceFile.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\Git' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Git.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\Handler' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Handler.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\Interpolator' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Interpolator.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\ManageGitIgnore' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/ManageGitIgnore.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\ManageOptions' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/ManageOptions.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\AbstractOperation' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Operations/AbstractOperation.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\AppendOp' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Operations/AppendOp.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\OperationData' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Operations/OperationData.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\OperationFactory' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Operations/OperationFactory.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\OperationInterface' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Operations/OperationInterface.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\ReplaceOp' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Operations/ReplaceOp.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\ScaffoldFileCollection' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Operations/ScaffoldFileCollection.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\ScaffoldResult' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Operations/ScaffoldResult.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\SkipOp' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Operations/SkipOp.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\Plugin' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Plugin.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\PostPackageEventListenerInterface' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/PostPackageEventListenerInterface.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\ScaffoldFileInfo' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/ScaffoldFileInfo.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\ScaffoldFilePath' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/ScaffoldFilePath.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\ScaffoldOptions' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/ScaffoldOptions.php',
         'Drupal\\Console\\Annotations\\DrupalCommand' => __DIR__ . '/..' . '/drupal/console/src/Annotations/DrupalCommand.php',
         'Drupal\\Console\\Annotations\\DrupalCommandAnnotationReader' => __DIR__ . '/..' . '/drupal/console/src/Annotations/DrupalCommandAnnotationReader.php',
         'Drupal\\Console\\Application' => __DIR__ . '/..' . '/drupal/console/src/Application.php',
@@ -6687,8 +6696,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'enshrined\\svgSanitize\\data\\AttributeInterface' => __DIR__ . '/..' . '/enshrined/svg-sanitize/src/data/AttributeInterface.php',
         'enshrined\\svgSanitize\\data\\TagInterface' => __DIR__ . '/..' . '/enshrined/svg-sanitize/src/data/TagInterface.php',
         'enshrined\\svgSanitize\\data\\XPath' => __DIR__ . '/..' . '/enshrined/svg-sanitize/src/data/XPath.php',
-        'rvtraveller\\QuicksilverComposerInstaller\\QuicksilverComposerInstaller' => __DIR__ . '/..' . '/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstaller.php',
-        'rvtraveller\\QuicksilverComposerInstaller\\QuicksilverComposerInstallerPlugin' => __DIR__ . '/..' . '/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstallerPlugin.php',
         'zaporylie\\ComposerDrupalOptimizations\\Cache' => __DIR__ . '/..' . '/zaporylie/composer-drupal-optimizations/src/Cache.php',
         'zaporylie\\ComposerDrupalOptimizations\\Plugin' => __DIR__ . '/..' . '/zaporylie/composer-drupal-optimizations/src/Plugin.php',
         'zaporylie\\ComposerDrupalOptimizations\\TruncatedComposerRepository' => __DIR__ . '/..' . '/zaporylie/composer-drupal-optimizations/src/TruncatedComposerRepository.php',
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index dcaaf3e86c..18ddc716df 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -2029,53 +2029,6 @@
             "php"
         ]
     },
-    {
-        "name": "drupal-composer/drupal-scaffold",
-        "version": "2.5.4",
-        "version_normalized": "2.5.4.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/drupal-composer/drupal-scaffold.git",
-            "reference": "fc6bf4ceecb5d47327f54d48d4d4f67b17da956d"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/drupal-composer/drupal-scaffold/zipball/fc6bf4ceecb5d47327f54d48d4d4f67b17da956d",
-            "reference": "fc6bf4ceecb5d47327f54d48d4d4f67b17da956d",
-            "shasum": ""
-        },
-        "require": {
-            "composer-plugin-api": "^1.0.0",
-            "composer/semver": "^1.4",
-            "php": ">=5.4.5"
-        },
-        "require-dev": {
-            "composer/composer": "dev-master",
-            "g1a/composer-test-scenarios": "^2.1.0",
-            "phpunit/phpunit": "^6",
-            "squizlabs/php_codesniffer": "^2.8"
-        },
-        "time": "2018-07-27T10:07:07+00:00",
-        "type": "composer-plugin",
-        "extra": {
-            "class": "DrupalComposer\\DrupalScaffold\\Plugin",
-            "branch-alias": {
-                "dev-master": "2.0.x-dev"
-            }
-        },
-        "installation-source": "dist",
-        "autoload": {
-            "psr-4": {
-                "DrupalComposer\\DrupalScaffold\\": "src/"
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "GPL-2.0-or-later"
-        ],
-        "description": "Composer Plugin for updating the Drupal scaffold files when using drupal/core",
-        "abandoned": "drupal/core-composer-scaffold"
-    },
     {
         "name": "drupal/address",
         "version": "1.1.0",
@@ -3754,6 +3707,55 @@
         ],
         "description": "Drupal is an open source content management platform powering millions of websites and applications."
     },
+    {
+        "name": "drupal/core-composer-scaffold",
+        "version": "9.0.9",
+        "version_normalized": "9.0.9.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/drupal/core-composer-scaffold.git",
+            "reference": "c017751a6bb9b2ffe56f0fab607ba67c21604bfd"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/drupal/core-composer-scaffold/zipball/c017751a6bb9b2ffe56f0fab607ba67c21604bfd",
+            "reference": "c017751a6bb9b2ffe56f0fab607ba67c21604bfd",
+            "shasum": ""
+        },
+        "require": {
+            "composer-plugin-api": "^1 || ^2",
+            "php": ">=7.3.0"
+        },
+        "conflict": {
+            "drupal-composer/drupal-scaffold": "*"
+        },
+        "require-dev": {
+            "composer/composer": "^1.8@stable"
+        },
+        "time": "2020-08-07T22:30:24+00:00",
+        "type": "composer-plugin",
+        "extra": {
+            "class": "Drupal\\Composer\\Plugin\\Scaffold\\Plugin",
+            "branch-alias": {
+                "dev-master": "1.0.x-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "Drupal\\Composer\\Plugin\\Scaffold\\": ""
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "GPL-2.0-or-later"
+        ],
+        "description": "A flexible Composer project scaffold builder.",
+        "homepage": "https://www.drupal.org/project/drupal",
+        "keywords": [
+            "drupal"
+        ]
+    },
     {
         "name": "drupal/core-recommended",
         "version": "8.9.10",
@@ -11337,46 +11339,6 @@
             "xmldsig"
         ]
     },
-    {
-        "name": "rvtraveller/qs-composer-installer",
-        "version": "1.1",
-        "version_normalized": "1.1.0.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/rvtraveller/qs-composer-installer.git",
-            "reference": "20d6f4397e4b77599646767ad030092a60f5f92a"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/rvtraveller/qs-composer-installer/zipball/20d6f4397e4b77599646767ad030092a60f5f92a",
-            "reference": "20d6f4397e4b77599646767ad030092a60f5f92a",
-            "shasum": ""
-        },
-        "require": {
-            "composer-plugin-api": "~1.0",
-            "composer/installers": "~1.0"
-        },
-        "require-dev": {
-            "composer/composer": "~1.0@dev"
-        },
-        "time": "2017-01-27T20:40:31+00:00",
-        "type": "composer-plugin",
-        "extra": {
-            "class": "rvtraveller\\QuicksilverComposerInstaller\\QuicksilverComposerInstallerPlugin"
-        },
-        "installation-source": "dist",
-        "autoload": {
-            "psr-4": {
-                "rvtraveller\\QuicksilverComposerInstaller\\": "src"
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "MIT"
-        ],
-        "description": "Install Quicksilver modules for Pantheon into custom locations.",
-        "homepage": "https://github.com/rvtraveller/qs-composer-installer"
-    },
     {
         "name": "simplesamlphp/saml2",
         "version": "v3.4.5",
diff --git a/vendor/drupal-composer/drupal-scaffold/.editorconfig b/vendor/drupal-composer/drupal-scaffold/.editorconfig
deleted file mode 100644
index 12bcb27e4e..0000000000
--- a/vendor/drupal-composer/drupal-scaffold/.editorconfig
+++ /dev/null
@@ -1,17 +0,0 @@
-# Drupal editor configuration normalization
-# @see http://editorconfig.org/
-
-# This is the top-most .editorconfig file; do not search in parent directories.
-root = true
-
-# All files.
-[*]
-end_of_line = LF
-indent_style = space
-indent_size = 2
-charset = utf-8
-trim_trailing_whitespace = true
-insert_final_newline = true
-
-[{composer.json,composer.lock}]
-indent_size = 4
diff --git a/vendor/drupal-composer/drupal-scaffold/.gitignore b/vendor/drupal-composer/drupal-scaffold/.gitignore
deleted file mode 100644
index 22d0d82f80..0000000000
--- a/vendor/drupal-composer/drupal-scaffold/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-vendor
diff --git a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/install b/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/install
deleted file mode 100755
index 8e691b0c15..0000000000
--- a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/install
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/bin/bash
-
-SCENARIO=$1
-DEPENDENCIES=${2-install}
-
-# Convert the aliases 'highest', 'lowest' and 'lock' to
-# the corresponding composer command to run.
-case $DEPENDENCIES in
-  highest)
-    DEPENDENCIES=update
-    ;;
-  lowest)
-    DEPENDENCIES='update --prefer-lowest'
-    ;;
-  lock|default|"")
-    DEPENDENCIES=install
-    ;;
-esac
-
-original_name=scenarios
-recommended_name=".scenarios.lock"
-
-base="$original_name"
-if [ -d "$recommended_name" ] ; then
-  base="$recommended_name"
-fi
-
-# If scenario is not specified, install the lockfile at
-# the root of the project.
-dir="$base/${SCENARIO}"
-if [ -z "$SCENARIO" ] || [ "$SCENARIO" == "default" ] ; then
-  SCENARIO=default
-  dir=.
-fi
-
-# Test to make sure that the selected scenario exists.
-if [ ! -d "$dir" ] ; then
-  echo "Requested scenario '${SCENARIO}' does not exist."
-  exit 1
-fi
-
-echo
-echo "::"
-echo ":: Switch to ${SCENARIO} scenario"
-echo "::"
-echo
-
-set -ex
-
-composer -n validate --working-dir=$dir --no-check-all --ansi
-composer -n --working-dir=$dir ${DEPENDENCIES} --prefer-dist --no-scripts
-composer -n --working-dir=$dir info
diff --git a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/.gitignore b/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/.gitignore
deleted file mode 100644
index 22d0d82f80..0000000000
--- a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-vendor
diff --git a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/composer.json b/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/composer.json
deleted file mode 100644
index 52d5a59b13..0000000000
--- a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/composer.json
+++ /dev/null
@@ -1,53 +0,0 @@
-{
-    "name": "drupal-composer/drupal-scaffold",
-    "description": "Composer Plugin for updating the Drupal scaffold files when using drupal/core",
-    "type": "composer-plugin",
-    "license": "GPL-2.0-or-later",
-    "require": {
-        "php": ">=5.4.5",
-        "composer-plugin-api": "^1.0.0",
-        "composer/semver": "^1.4"
-    },
-    "autoload": {
-        "psr-4": {
-            "DrupalComposer\\DrupalScaffold\\": "src/"
-        }
-    },
-    "extra": {
-        "class": "DrupalComposer\\DrupalScaffold\\Plugin",
-        "branch-alias": {
-            "dev-master": "2.0.x-dev"
-        }
-    },
-    "scripts": {
-        "cs": "phpcs --standard=PSR2 -n src",
-        "cbf": "phpcbf --standard=PSR2 -n src",
-        "unit": "phpunit --colors=always",
-        "lint": [
-            "find src -name '*.php' -print0 | xargs -0 -n1 php -l"
-        ],
-        "test": [
-            "@lint",
-            "@unit"
-        ],
-        "scenario": ".scenarios.lock/install",
-        "post-update-cmd": [
-            "create-scenario phpunit4 'phpunit/phpunit:^4.8.36' --platform-php '5.5.27'"
-        ]
-    },
-    "config": {
-        "optimize-autoloader": true,
-        "sort-packages": true,
-        "platform": {
-            "php": "5.5.27"
-        },
-        "vendor-dir": "../../vendor"
-    },
-    "require-dev": {
-        "composer/composer": "dev-master",
-        "g1a/composer-test-scenarios": "^2.1.0",
-        "phpunit/phpunit": "^4.8.36",
-        "squizlabs/php_codesniffer": "^2.8"
-    },
-    "minimum-stability": "stable"
-}
diff --git a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/composer.lock b/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/composer.lock
deleted file mode 100644
index 084a62b1e5..0000000000
--- a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/composer.lock
+++ /dev/null
@@ -1,2153 +0,0 @@
-{
-    "_readme": [
-        "This file locks the dependencies of your project to a known state",
-        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
-        "This file is @generated automatically"
-    ],
-    "content-hash": "445ab29fa63d93c2f4ff7da62f90de16",
-    "packages": [
-        {
-            "name": "composer/semver",
-            "version": "1.4.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/semver.git",
-                "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/semver/zipball/c7cb9a2095a074d131b65a8a0cd294479d785573",
-                "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.3.2 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.5 || ^5.0.5",
-                "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Composer\\Semver\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nils Adermann",
-                    "email": "naderman@naderman.de",
-                    "homepage": "http://www.naderman.de"
-                },
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
-                },
-                {
-                    "name": "Rob Bast",
-                    "email": "rob.bast@gmail.com",
-                    "homepage": "http://robbast.nl"
-                }
-            ],
-            "description": "Semver library that offers utilities, version constraint parsing and validation.",
-            "keywords": [
-                "semantic",
-                "semver",
-                "validation",
-                "versioning"
-            ],
-            "time": "2016-08-30T16:08:34+00:00"
-        }
-    ],
-    "packages-dev": [
-        {
-            "name": "composer/ca-bundle",
-            "version": "1.1.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/ca-bundle.git",
-                "reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/ca-bundle/zipball/d2c0a83b7533d6912e8d516756ebd34f893e9169",
-                "reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169",
-                "shasum": ""
-            },
-            "require": {
-                "ext-openssl": "*",
-                "ext-pcre": "*",
-                "php": "^5.3.2 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5",
-                "psr/log": "^1.0",
-                "symfony/process": "^2.5 || ^3.0 || ^4.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Composer\\CaBundle\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
-                }
-            ],
-            "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
-            "keywords": [
-                "cabundle",
-                "cacert",
-                "certificate",
-                "ssl",
-                "tls"
-            ],
-            "time": "2018-03-29T19:57:20+00:00"
-        },
-        {
-            "name": "composer/composer",
-            "version": "dev-master",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/composer.git",
-                "reference": "837ad7c14e8ce364296e0d0600d04c415b6e359d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/composer/zipball/837ad7c14e8ce364296e0d0600d04c415b6e359d",
-                "reference": "837ad7c14e8ce364296e0d0600d04c415b6e359d",
-                "shasum": ""
-            },
-            "require": {
-                "composer/ca-bundle": "^1.0",
-                "composer/semver": "^1.0",
-                "composer/spdx-licenses": "^1.2",
-                "composer/xdebug-handler": "^1.1",
-                "justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0",
-                "php": "^5.3.2 || ^7.0",
-                "psr/log": "^1.0",
-                "seld/jsonlint": "^1.4",
-                "seld/phar-utils": "^1.0",
-                "symfony/console": "^2.7 || ^3.0 || ^4.0",
-                "symfony/filesystem": "^2.7 || ^3.0 || ^4.0",
-                "symfony/finder": "^2.7 || ^3.0 || ^4.0",
-                "symfony/process": "^2.7 || ^3.0 || ^4.0"
-            },
-            "conflict": {
-                "symfony/console": "2.8.38"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7",
-                "phpunit/phpunit-mock-objects": "^2.3 || ^3.0"
-            },
-            "suggest": {
-                "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
-                "ext-zip": "Enabling the zip extension allows you to unzip archives",
-                "ext-zlib": "Allow gzip compression of HTTP requests"
-            },
-            "bin": [
-                "bin/composer"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.7-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Composer\\": "src/Composer"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nils Adermann",
-                    "email": "naderman@naderman.de",
-                    "homepage": "http://www.naderman.de"
-                },
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
-                }
-            ],
-            "description": "Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere.",
-            "homepage": "https://getcomposer.org/",
-            "keywords": [
-                "autoload",
-                "dependency",
-                "package"
-            ],
-            "time": "2018-06-07T09:15:18+00:00"
-        },
-        {
-            "name": "composer/spdx-licenses",
-            "version": "1.4.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/spdx-licenses.git",
-                "reference": "cb17687e9f936acd7e7245ad3890f953770dec1b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/cb17687e9f936acd7e7245ad3890f953770dec1b",
-                "reference": "cb17687e9f936acd7e7245ad3890f953770dec1b",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.3.2 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5",
-                "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Composer\\Spdx\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nils Adermann",
-                    "email": "naderman@naderman.de",
-                    "homepage": "http://www.naderman.de"
-                },
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
-                },
-                {
-                    "name": "Rob Bast",
-                    "email": "rob.bast@gmail.com",
-                    "homepage": "http://robbast.nl"
-                }
-            ],
-            "description": "SPDX licenses list and validation library.",
-            "keywords": [
-                "license",
-                "spdx",
-                "validator"
-            ],
-            "time": "2018-04-30T10:33:04+00:00"
-        },
-        {
-            "name": "composer/xdebug-handler",
-            "version": "1.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/xdebug-handler.git",
-                "reference": "c919dc6c62e221fc6406f861ea13433c0aa24f08"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/c919dc6c62e221fc6406f861ea13433c0aa24f08",
-                "reference": "c919dc6c62e221fc6406f861ea13433c0aa24f08",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.3.2 || ^7.0",
-                "psr/log": "^1.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Composer\\XdebugHandler\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "John Stevenson",
-                    "email": "john-stevenson@blueyonder.co.uk"
-                }
-            ],
-            "description": "Restarts a process without xdebug.",
-            "keywords": [
-                "Xdebug",
-                "performance"
-            ],
-            "time": "2018-04-11T15:42:36+00:00"
-        },
-        {
-            "name": "doctrine/instantiator",
-            "version": "1.0.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/instantiator.git",
-                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
-                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3,<8.0-DEV"
-            },
-            "require-dev": {
-                "athletic/athletic": "~0.1.8",
-                "ext-pdo": "*",
-                "ext-phar": "*",
-                "phpunit/phpunit": "~4.0",
-                "squizlabs/php_codesniffer": "~2.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Marco Pivetta",
-                    "email": "ocramius@gmail.com",
-                    "homepage": "http://ocramius.github.com/"
-                }
-            ],
-            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
-            "homepage": "https://github.com/doctrine/instantiator",
-            "keywords": [
-                "constructor",
-                "instantiate"
-            ],
-            "time": "2015-06-14T21:17:01+00:00"
-        },
-        {
-            "name": "g1a/composer-test-scenarios",
-            "version": "2.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/g1a/composer-test-scenarios.git",
-                "reference": "4c2b990712dbcb87a0ab618e46f908c731c3a0bb"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/4c2b990712dbcb87a0ab618e46f908c731c3a0bb",
-                "reference": "4c2b990712dbcb87a0ab618e46f908c731c3a0bb",
-                "shasum": ""
-            },
-            "bin": [
-                "scripts/create-scenario",
-                "scripts/dependency-licenses",
-                "scripts/install-scenario"
-            ],
-            "type": "library",
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Greg Anderson",
-                    "email": "greg.1.anderson@greenknowe.org"
-                }
-            ],
-            "description": "Useful scripts for testing multiple sets of Composer dependencies.",
-            "time": "2018-06-10T21:56:28+00:00"
-        },
-        {
-            "name": "justinrainbow/json-schema",
-            "version": "5.2.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/justinrainbow/json-schema.git",
-                "reference": "8560d4314577199ba51bf2032f02cd1315587c23"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/8560d4314577199ba51bf2032f02cd1315587c23",
-                "reference": "8560d4314577199ba51bf2032f02cd1315587c23",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "friendsofphp/php-cs-fixer": "^2.1",
-                "json-schema/json-schema-test-suite": "1.2.0",
-                "phpunit/phpunit": "^4.8.35"
-            },
-            "bin": [
-                "bin/validate-json"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "5.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "JsonSchema\\": "src/JsonSchema/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Bruno Prieto Reis",
-                    "email": "bruno.p.reis@gmail.com"
-                },
-                {
-                    "name": "Justin Rainbow",
-                    "email": "justin.rainbow@gmail.com"
-                },
-                {
-                    "name": "Igor Wiedler",
-                    "email": "igor@wiedler.ch"
-                },
-                {
-                    "name": "Robert Schönthal",
-                    "email": "seroscho@googlemail.com"
-                }
-            ],
-            "description": "A library to validate a json schema.",
-            "homepage": "https://github.com/justinrainbow/json-schema",
-            "keywords": [
-                "json",
-                "schema"
-            ],
-            "time": "2018-02-14T22:26:30+00:00"
-        },
-        {
-            "name": "phpdocumentor/reflection-common",
-            "version": "1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
-                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
-                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.5"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.6"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src"
-                    ]
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jaap van Otterdijk",
-                    "email": "opensource@ijaap.nl"
-                }
-            ],
-            "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
-            "homepage": "http://www.phpdoc.org",
-            "keywords": [
-                "FQSEN",
-                "phpDocumentor",
-                "phpdoc",
-                "reflection",
-                "static analysis"
-            ],
-            "time": "2017-09-11T18:02:19+00:00"
-        },
-        {
-            "name": "phpdocumentor/reflection-docblock",
-            "version": "3.2.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "4aada1f93c72c35e22fb1383b47fee43b8f1d157"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/4aada1f93c72c35e22fb1383b47fee43b8f1d157",
-                "reference": "4aada1f93c72c35e22fb1383b47fee43b8f1d157",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.5",
-                "phpdocumentor/reflection-common": "^1.0@dev",
-                "phpdocumentor/type-resolver": "^0.3.0",
-                "webmozart/assert": "^1.0"
-            },
-            "require-dev": {
-                "mockery/mockery": "^0.9.4",
-                "phpunit/phpunit": "^4.4"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src/"
-                    ]
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Mike van Riel",
-                    "email": "me@mikevanriel.com"
-                }
-            ],
-            "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
-            "time": "2017-08-08T06:39:58+00:00"
-        },
-        {
-            "name": "phpdocumentor/type-resolver",
-            "version": "0.3.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpDocumentor/TypeResolver.git",
-                "reference": "fb3933512008d8162b3cdf9e18dba9309b7c3773"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/fb3933512008d8162b3cdf9e18dba9309b7c3773",
-                "reference": "fb3933512008d8162b3cdf9e18dba9309b7c3773",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.5 || ^7.0",
-                "phpdocumentor/reflection-common": "^1.0"
-            },
-            "require-dev": {
-                "mockery/mockery": "^0.9.4",
-                "phpunit/phpunit": "^5.2||^4.8.24"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src/"
-                    ]
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Mike van Riel",
-                    "email": "me@mikevanriel.com"
-                }
-            ],
-            "time": "2017-06-03T08:32:36+00:00"
-        },
-        {
-            "name": "phpspec/prophecy",
-            "version": "1.7.6",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/33a7e3c4fda54e912ff6338c48823bd5c0f0b712",
-                "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/instantiator": "^1.0.2",
-                "php": "^5.3|^7.0",
-                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
-                "sebastian/comparator": "^1.1|^2.0|^3.0",
-                "sebastian/recursion-context": "^1.0|^2.0|^3.0"
-            },
-            "require-dev": {
-                "phpspec/phpspec": "^2.5|^3.2",
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.7.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Prophecy\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Konstantin Kudryashov",
-                    "email": "ever.zet@gmail.com",
-                    "homepage": "http://everzet.com"
-                },
-                {
-                    "name": "Marcello Duarte",
-                    "email": "marcello.duarte@gmail.com"
-                }
-            ],
-            "description": "Highly opinionated mocking framework for PHP 5.3+",
-            "homepage": "https://github.com/phpspec/prophecy",
-            "keywords": [
-                "Double",
-                "Dummy",
-                "fake",
-                "mock",
-                "spy",
-                "stub"
-            ],
-            "time": "2018-04-18T13:57:24+00:00"
-        },
-        {
-            "name": "phpunit/php-code-coverage",
-            "version": "2.2.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
-                "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979",
-                "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3",
-                "phpunit/php-file-iterator": "~1.3",
-                "phpunit/php-text-template": "~1.2",
-                "phpunit/php-token-stream": "~1.3",
-                "sebastian/environment": "^1.3.2",
-                "sebastian/version": "~1.0"
-            },
-            "require-dev": {
-                "ext-xdebug": ">=2.1.4",
-                "phpunit/phpunit": "~4"
-            },
-            "suggest": {
-                "ext-dom": "*",
-                "ext-xdebug": ">=2.2.1",
-                "ext-xmlwriter": "*"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.2.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sb@sebastian-bergmann.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
-            "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
-            "keywords": [
-                "coverage",
-                "testing",
-                "xunit"
-            ],
-            "time": "2015-10-06T15:47:00+00:00"
-        },
-        {
-            "name": "phpunit/php-file-iterator",
-            "version": "1.4.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
-                "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4",
-                "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.4.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sb@sebastian-bergmann.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "FilterIterator implementation that filters files based on a list of suffixes.",
-            "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
-            "keywords": [
-                "filesystem",
-                "iterator"
-            ],
-            "time": "2017-11-27T13:52:08+00:00"
-        },
-        {
-            "name": "phpunit/php-text-template",
-            "version": "1.2.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-text-template.git",
-                "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
-                "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "type": "library",
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "Simple template engine.",
-            "homepage": "https://github.com/sebastianbergmann/php-text-template/",
-            "keywords": [
-                "template"
-            ],
-            "time": "2015-06-21T13:50:34+00:00"
-        },
-        {
-            "name": "phpunit/php-timer",
-            "version": "1.0.9",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-timer.git",
-                "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
-                "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.3.3 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sb@sebastian-bergmann.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "Utility class for timing",
-            "homepage": "https://github.com/sebastianbergmann/php-timer/",
-            "keywords": [
-                "timer"
-            ],
-            "time": "2017-02-26T11:10:40+00:00"
-        },
-        {
-            "name": "phpunit/php-token-stream",
-            "version": "1.4.12",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-token-stream.git",
-                "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16",
-                "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16",
-                "shasum": ""
-            },
-            "require": {
-                "ext-tokenizer": "*",
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.2"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.4-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                }
-            ],
-            "description": "Wrapper around PHP's tokenizer extension.",
-            "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
-            "keywords": [
-                "tokenizer"
-            ],
-            "time": "2017-12-04T08:55:13+00:00"
-        },
-        {
-            "name": "phpunit/phpunit",
-            "version": "4.8.36",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "46023de9a91eec7dfb06cc56cb4e260017298517"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517",
-                "reference": "46023de9a91eec7dfb06cc56cb4e260017298517",
-                "shasum": ""
-            },
-            "require": {
-                "ext-dom": "*",
-                "ext-json": "*",
-                "ext-pcre": "*",
-                "ext-reflection": "*",
-                "ext-spl": "*",
-                "php": ">=5.3.3",
-                "phpspec/prophecy": "^1.3.1",
-                "phpunit/php-code-coverage": "~2.1",
-                "phpunit/php-file-iterator": "~1.4",
-                "phpunit/php-text-template": "~1.2",
-                "phpunit/php-timer": "^1.0.6",
-                "phpunit/phpunit-mock-objects": "~2.3",
-                "sebastian/comparator": "~1.2.2",
-                "sebastian/diff": "~1.2",
-                "sebastian/environment": "~1.3",
-                "sebastian/exporter": "~1.2",
-                "sebastian/global-state": "~1.0",
-                "sebastian/version": "~1.0",
-                "symfony/yaml": "~2.1|~3.0"
-            },
-            "suggest": {
-                "phpunit/php-invoker": "~1.1"
-            },
-            "bin": [
-                "phpunit"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.8.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "The PHP Unit Testing framework.",
-            "homepage": "https://phpunit.de/",
-            "keywords": [
-                "phpunit",
-                "testing",
-                "xunit"
-            ],
-            "time": "2017-06-21T08:07:12+00:00"
-        },
-        {
-            "name": "phpunit/phpunit-mock-objects",
-            "version": "2.3.8",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
-                "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983",
-                "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/instantiator": "^1.0.2",
-                "php": ">=5.3.3",
-                "phpunit/php-text-template": "~1.2",
-                "sebastian/exporter": "~1.2"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.4"
-            },
-            "suggest": {
-                "ext-soap": "*"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.3.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sb@sebastian-bergmann.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "Mock Object library for PHPUnit",
-            "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
-            "keywords": [
-                "mock",
-                "xunit"
-            ],
-            "time": "2015-10-02T06:51:40+00:00"
-        },
-        {
-            "name": "psr/log",
-            "version": "1.0.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/log.git",
-                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
-                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Psr\\Log\\": "Psr/Log/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "http://www.php-fig.org/"
-                }
-            ],
-            "description": "Common interface for logging libraries",
-            "homepage": "https://github.com/php-fig/log",
-            "keywords": [
-                "log",
-                "psr",
-                "psr-3"
-            ],
-            "time": "2016-10-10T12:19:37+00:00"
-        },
-        {
-            "name": "sebastian/comparator",
-            "version": "1.2.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/comparator.git",
-                "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
-                "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3",
-                "sebastian/diff": "~1.2",
-                "sebastian/exporter": "~1.2 || ~2.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.4"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.2.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Jeff Welch",
-                    "email": "whatthejeff@gmail.com"
-                },
-                {
-                    "name": "Volker Dusch",
-                    "email": "github@wallbash.com"
-                },
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@2bepublished.at"
-                },
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                }
-            ],
-            "description": "Provides the functionality to compare PHP values for equality",
-            "homepage": "http://www.github.com/sebastianbergmann/comparator",
-            "keywords": [
-                "comparator",
-                "compare",
-                "equality"
-            ],
-            "time": "2017-01-29T09:50:25+00:00"
-        },
-        {
-            "name": "sebastian/diff",
-            "version": "1.4.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/diff.git",
-                "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4",
-                "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.3.3 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.4-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Kore Nordmann",
-                    "email": "mail@kore-nordmann.de"
-                },
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                }
-            ],
-            "description": "Diff implementation",
-            "homepage": "https://github.com/sebastianbergmann/diff",
-            "keywords": [
-                "diff"
-            ],
-            "time": "2017-05-22T07:24:03+00:00"
-        },
-        {
-            "name": "sebastian/environment",
-            "version": "1.3.8",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/environment.git",
-                "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea",
-                "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.3.3 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8 || ^5.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                }
-            ],
-            "description": "Provides functionality to handle HHVM/PHP environments",
-            "homepage": "http://www.github.com/sebastianbergmann/environment",
-            "keywords": [
-                "Xdebug",
-                "environment",
-                "hhvm"
-            ],
-            "time": "2016-08-18T05:49:44+00:00"
-        },
-        {
-            "name": "sebastian/exporter",
-            "version": "1.2.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/exporter.git",
-                "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4",
-                "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3",
-                "sebastian/recursion-context": "~1.0"
-            },
-            "require-dev": {
-                "ext-mbstring": "*",
-                "phpunit/phpunit": "~4.4"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Jeff Welch",
-                    "email": "whatthejeff@gmail.com"
-                },
-                {
-                    "name": "Volker Dusch",
-                    "email": "github@wallbash.com"
-                },
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@2bepublished.at"
-                },
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                },
-                {
-                    "name": "Adam Harvey",
-                    "email": "aharvey@php.net"
-                }
-            ],
-            "description": "Provides the functionality to export PHP variables for visualization",
-            "homepage": "http://www.github.com/sebastianbergmann/exporter",
-            "keywords": [
-                "export",
-                "exporter"
-            ],
-            "time": "2016-06-17T09:04:28+00:00"
-        },
-        {
-            "name": "sebastian/global-state",
-            "version": "1.1.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/global-state.git",
-                "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4",
-                "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.2"
-            },
-            "suggest": {
-                "ext-uopz": "*"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                }
-            ],
-            "description": "Snapshotting of global state",
-            "homepage": "http://www.github.com/sebastianbergmann/global-state",
-            "keywords": [
-                "global state"
-            ],
-            "time": "2015-10-12T03:26:01+00:00"
-        },
-        {
-            "name": "sebastian/recursion-context",
-            "version": "1.0.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/recursion-context.git",
-                "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7",
-                "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.4"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Jeff Welch",
-                    "email": "whatthejeff@gmail.com"
-                },
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                },
-                {
-                    "name": "Adam Harvey",
-                    "email": "aharvey@php.net"
-                }
-            ],
-            "description": "Provides functionality to recursively process PHP variables",
-            "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
-            "time": "2016-10-03T07:41:43+00:00"
-        },
-        {
-            "name": "sebastian/version",
-            "version": "1.0.6",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/version.git",
-                "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
-                "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
-                "shasum": ""
-            },
-            "type": "library",
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "Library that helps with managing the version number of Git-hosted PHP projects",
-            "homepage": "https://github.com/sebastianbergmann/version",
-            "time": "2015-06-21T13:59:46+00:00"
-        },
-        {
-            "name": "seld/jsonlint",
-            "version": "1.7.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Seldaek/jsonlint.git",
-                "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/d15f59a67ff805a44c50ea0516d2341740f81a38",
-                "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.3 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
-            },
-            "bin": [
-                "bin/jsonlint"
-            ],
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Seld\\JsonLint\\": "src/Seld/JsonLint/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
-                }
-            ],
-            "description": "JSON Linter",
-            "keywords": [
-                "json",
-                "linter",
-                "parser",
-                "validator"
-            ],
-            "time": "2018-01-24T12:46:19+00:00"
-        },
-        {
-            "name": "seld/phar-utils",
-            "version": "1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Seldaek/phar-utils.git",
-                "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/7009b5139491975ef6486545a39f3e6dad5ac30a",
-                "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Seld\\PharUtils\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be"
-                }
-            ],
-            "description": "PHAR file format utilities, for when PHP phars you up",
-            "keywords": [
-                "phra"
-            ],
-            "time": "2015-10-13T18:44:15+00:00"
-        },
-        {
-            "name": "squizlabs/php_codesniffer",
-            "version": "2.9.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
-                "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62",
-                "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62",
-                "shasum": ""
-            },
-            "require": {
-                "ext-simplexml": "*",
-                "ext-tokenizer": "*",
-                "ext-xmlwriter": "*",
-                "php": ">=5.1.2"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.0"
-            },
-            "bin": [
-                "scripts/phpcs",
-                "scripts/phpcbf"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "CodeSniffer.php",
-                    "CodeSniffer/CLI.php",
-                    "CodeSniffer/Exception.php",
-                    "CodeSniffer/File.php",
-                    "CodeSniffer/Fixer.php",
-                    "CodeSniffer/Report.php",
-                    "CodeSniffer/Reporting.php",
-                    "CodeSniffer/Sniff.php",
-                    "CodeSniffer/Tokens.php",
-                    "CodeSniffer/Reports/",
-                    "CodeSniffer/Tokenizers/",
-                    "CodeSniffer/DocGenerators/",
-                    "CodeSniffer/Standards/AbstractPatternSniff.php",
-                    "CodeSniffer/Standards/AbstractScopeSniff.php",
-                    "CodeSniffer/Standards/AbstractVariableSniff.php",
-                    "CodeSniffer/Standards/IncorrectPatternException.php",
-                    "CodeSniffer/Standards/Generic/Sniffs/",
-                    "CodeSniffer/Standards/MySource/Sniffs/",
-                    "CodeSniffer/Standards/PEAR/Sniffs/",
-                    "CodeSniffer/Standards/PSR1/Sniffs/",
-                    "CodeSniffer/Standards/PSR2/Sniffs/",
-                    "CodeSniffer/Standards/Squiz/Sniffs/",
-                    "CodeSniffer/Standards/Zend/Sniffs/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Greg Sherwood",
-                    "role": "lead"
-                }
-            ],
-            "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
-            "homepage": "http://www.squizlabs.com/php-codesniffer",
-            "keywords": [
-                "phpcs",
-                "standards"
-            ],
-            "time": "2017-05-22T02:43:20+00:00"
-        },
-        {
-            "name": "symfony/console",
-            "version": "v3.4.11",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/console.git",
-                "reference": "36f83f642443c46f3cf751d4d2ee5d047d757a27"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/36f83f642443c46f3cf751d4d2ee5d047d757a27",
-                "reference": "36f83f642443c46f3cf751d4d2ee5d047d757a27",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/debug": "~2.8|~3.0|~4.0",
-                "symfony/polyfill-mbstring": "~1.0"
-            },
-            "conflict": {
-                "symfony/dependency-injection": "<3.4",
-                "symfony/process": "<3.3"
-            },
-            "require-dev": {
-                "psr/log": "~1.0",
-                "symfony/config": "~3.3|~4.0",
-                "symfony/dependency-injection": "~3.4|~4.0",
-                "symfony/event-dispatcher": "~2.8|~3.0|~4.0",
-                "symfony/lock": "~3.4|~4.0",
-                "symfony/process": "~3.3|~4.0"
-            },
-            "suggest": {
-                "psr/log-implementation": "For using the console logger",
-                "symfony/event-dispatcher": "",
-                "symfony/lock": "",
-                "symfony/process": ""
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Console\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Console Component",
-            "homepage": "https://symfony.com",
-            "time": "2018-05-16T08:49:21+00:00"
-        },
-        {
-            "name": "symfony/debug",
-            "version": "v3.4.11",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/debug.git",
-                "reference": "b28fd73fefbac341f673f5efd707d539d6a19f68"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/debug/zipball/b28fd73fefbac341f673f5efd707d539d6a19f68",
-                "reference": "b28fd73fefbac341f673f5efd707d539d6a19f68",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "psr/log": "~1.0"
-            },
-            "conflict": {
-                "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
-            },
-            "require-dev": {
-                "symfony/http-kernel": "~2.8|~3.0|~4.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Debug\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Debug Component",
-            "homepage": "https://symfony.com",
-            "time": "2018-05-16T14:03:39+00:00"
-        },
-        {
-            "name": "symfony/filesystem",
-            "version": "v3.4.11",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/filesystem.git",
-                "reference": "8e03ca3fa52a0f56b87506f38cf7bd3f9442b3a0"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/8e03ca3fa52a0f56b87506f38cf7bd3f9442b3a0",
-                "reference": "8e03ca3fa52a0f56b87506f38cf7bd3f9442b3a0",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/polyfill-ctype": "~1.8"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Filesystem\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Filesystem Component",
-            "homepage": "https://symfony.com",
-            "time": "2018-05-16T08:49:21+00:00"
-        },
-        {
-            "name": "symfony/finder",
-            "version": "v3.4.11",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/finder.git",
-                "reference": "472a92f3df8b247b49ae364275fb32943b9656c6"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/472a92f3df8b247b49ae364275fb32943b9656c6",
-                "reference": "472a92f3df8b247b49ae364275fb32943b9656c6",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.5.9|>=7.0.8"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Finder\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Finder Component",
-            "homepage": "https://symfony.com",
-            "time": "2018-05-16T08:49:21+00:00"
-        },
-        {
-            "name": "symfony/polyfill-ctype",
-            "version": "v1.8.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/7cc359f1b7b80fc25ed7796be7d96adc9b354bae",
-                "reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.8-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Polyfill\\Ctype\\": ""
-                },
-                "files": [
-                    "bootstrap.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                },
-                {
-                    "name": "Gert de Pagter",
-                    "email": "BackEndTea@gmail.com"
-                }
-            ],
-            "description": "Symfony polyfill for ctype functions",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "ctype",
-                "polyfill",
-                "portable"
-            ],
-            "time": "2018-04-30T19:57:29+00:00"
-        },
-        {
-            "name": "symfony/polyfill-mbstring",
-            "version": "v1.8.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "3296adf6a6454a050679cde90f95350ad604b171"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171",
-                "reference": "3296adf6a6454a050679cde90f95350ad604b171",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "suggest": {
-                "ext-mbstring": "For best performance"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.8-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Polyfill\\Mbstring\\": ""
-                },
-                "files": [
-                    "bootstrap.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill for the Mbstring extension",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "mbstring",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "time": "2018-04-26T10:06:28+00:00"
-        },
-        {
-            "name": "symfony/process",
-            "version": "v3.4.11",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/process.git",
-                "reference": "4cbf2db9abcb01486a21b7a059e03a62fae63187"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/4cbf2db9abcb01486a21b7a059e03a62fae63187",
-                "reference": "4cbf2db9abcb01486a21b7a059e03a62fae63187",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.5.9|>=7.0.8"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Process\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Process Component",
-            "homepage": "https://symfony.com",
-            "time": "2018-05-16T08:49:21+00:00"
-        },
-        {
-            "name": "symfony/yaml",
-            "version": "v3.4.11",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/yaml.git",
-                "reference": "c5010cc1692ce1fa328b1fb666961eb3d4a85bb0"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/c5010cc1692ce1fa328b1fb666961eb3d4a85bb0",
-                "reference": "c5010cc1692ce1fa328b1fb666961eb3d4a85bb0",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/polyfill-ctype": "~1.8"
-            },
-            "conflict": {
-                "symfony/console": "<3.4"
-            },
-            "require-dev": {
-                "symfony/console": "~3.4|~4.0"
-            },
-            "suggest": {
-                "symfony/console": "For validating YAML files using the lint command"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Yaml\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Yaml Component",
-            "homepage": "https://symfony.com",
-            "time": "2018-05-03T23:18:14+00:00"
-        },
-        {
-            "name": "webmozart/assert",
-            "version": "1.3.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/webmozart/assert.git",
-                "reference": "0df1908962e7a3071564e857d86874dad1ef204a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a",
-                "reference": "0df1908962e7a3071564e857d86874dad1ef204a",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.3.3 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.6",
-                "sebastian/version": "^1.0.1"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Webmozart\\Assert\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@gmail.com"
-                }
-            ],
-            "description": "Assertions to validate method input/output with nice error messages.",
-            "keywords": [
-                "assert",
-                "check",
-                "validate"
-            ],
-            "time": "2018-01-29T19:49:41+00:00"
-        }
-    ],
-    "aliases": [],
-    "minimum-stability": "stable",
-    "stability-flags": {
-        "composer/composer": 20
-    },
-    "prefer-stable": false,
-    "prefer-lowest": false,
-    "platform": {
-        "php": ">=5.4.5"
-    },
-    "platform-dev": [],
-    "platform-overrides": {
-        "php": "5.5.27"
-    }
-}
diff --git a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/src b/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/src
deleted file mode 120000
index 929cb3dc9b..0000000000
--- a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/src
+++ /dev/null
@@ -1 +0,0 @@
-../../src
\ No newline at end of file
diff --git a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/tests b/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/tests
deleted file mode 120000
index c2ebfe530b..0000000000
--- a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/tests
+++ /dev/null
@@ -1 +0,0 @@
-../../tests
\ No newline at end of file
diff --git a/vendor/drupal-composer/drupal-scaffold/.travis.yml b/vendor/drupal-composer/drupal-scaffold/.travis.yml
deleted file mode 100644
index ba2f61edd1..0000000000
--- a/vendor/drupal-composer/drupal-scaffold/.travis.yml
+++ /dev/null
@@ -1,42 +0,0 @@
-language: php
-
-branches:
-  # Only test the master branch and SemVer tags.
-  only:
-    - master
-    - /^[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+.*$/
-
-matrix:
-  fast_finish: true
-  include:
-    - php: 7.2
-      env: 'DEPENCENCIES=highest'
-    - php: 7.2
-    - php: 7.1
-    - php: 7.0.11
-    - php: 5.6
-      env: 'SCENARIO=phpunit4'
-    - php: 5.5
-      env: 'SCENARIO=phpunit4'
-    - php: 5.5
-      env: 'SCENARIO=phpunit4 DEPENDENCIES=lowest'
-
-sudo: false
-
-git:
- depth: 10000
-
-before_install:
-  - phpenv config-rm xdebug.ini
-  - composer --verbose self-update
-  - composer --version
-
-install:
-  - 'composer scenario "${SCENARIO}" "${DEPENDENCIES}"'
-
-before_script:
-  - git config --global user.email "travisci@example.com"
-  - git config --global user.name "Travis CI Test"
-
-script:
-  - composer test
diff --git a/vendor/drupal-composer/drupal-scaffold/README.md b/vendor/drupal-composer/drupal-scaffold/README.md
deleted file mode 100644
index 03e14933cc..0000000000
--- a/vendor/drupal-composer/drupal-scaffold/README.md
+++ /dev/null
@@ -1,121 +0,0 @@
-# drupal-scaffold
-
-[![Build Status](https://travis-ci.org/drupal-composer/drupal-scaffold.svg?branch=master)](https://travis-ci.org/drupal-composer/drupal-scaffold)
-
-Composer plugin for automatically downloading Drupal scaffold files (like
-`index.php`, `update.php`, …) when using `drupal/core` via Composer.
-
-It is recommended that the vendor directory be placed in its standard location
-at the project root, outside of the Drupal root; however, the location of the
-vendor directory and the name of the Drupal root may be placed in whatever
-location suits the project.  Drupal-scaffold will generate the autoload.php
-file at the Drupal root to require the Composer-generated autoload file in the
-vendor directory.
-
-## Usage
-
-Run `composer require drupal-composer/drupal-scaffold:dev-master` in your composer
-project before installing or updating `drupal/core`.
-
-Once drupal-scaffold is required by your project, it will automatically update
-your scaffold files whenever `composer update` changes the version of
-`drupal/core` installed.
-
-## Configuration
-
-You can configure the plugin with providing some settings in the `extra` section
-of your root `composer.json`.
-
-```json
-{
-  "extra": {
-    "drupal-scaffold": {
-      "source": "https://cgit.drupalcode.org/drupal/plain/{path}?h={version}",
-      "excludes": [
-        "google123.html",
-        "robots.txt"
-      ],
-      "includes": [
-        "sites/default/example.settings.my.php"
-      ],
-      "initial": {
-        "sites/default/default.services.yml": "sites/default/services.yml",
-        "sites/default/default.settings.php": "sites/default/settings.php"
-      },
-      "omit-defaults": false
-    }
-  }
-}
-```
-The `source` option may be used to specify the URL to download the
-scaffold files from; the default source is drupal.org. The literal string
-`{version}` in the `source` option is replaced with the current version of
-Drupal core being updated prior to download.
-
-With the `drupal-scaffold` option `excludes`, you can provide additional paths
-that should not be copied or overwritten. The plugin provides no excludes by
-default.
-
-Default includes are provided by the plugin:
-```
-.csslintrc
-.editorconfig
-.eslintignore
-.eslintrc (Drupal <= 8.2.x)
-.eslintrc.json (Drupal >= 8.3.x)
-.gitattributes
-.ht.router.php (Drupal >= 8.5.x)
-.htaccess
-index.php
-robots.txt
-sites/default/default.settings.php
-sites/default/default.services.yml
-sites/development.services.yml
-sites/example.settings.local.php
-sites/example.sites.php
-update.php
-web.config
-```
-
-When setting `omit-defaults` to `true`, neither the default excludes nor the
-default includes will be provided; in this instance, only those files explicitly
-listed in the `excludes` and `includes` options will be considered. If
-`omit-defaults` is `false` (the default), then any items listed in `excludes`
-or `includes` will be in addition to the usual defaults.
-
-The `initial` hash lists files that should be copied over only if they do not
-exist in the destination. The key specifies the path to the source file, and
-the value indicates the path to the destination file.
-
-## Limitation
-
-When using Composer to install or update the Drupal development branch, the
-scaffold files are always taken from the HEAD of the branch (or, more
-specifically, from the most recent development .tar.gz archive). This might
-not be what you want when using an old development version (e.g. when the
-version is fixed via composer.lock). To avoid problems, always commit your
-scaffold files to the repository any time that composer.lock is committed.
-Note that the correct scaffold files are retrieved when using a tagged release
-of `drupal/core` (recommended).
-
-## Custom command
-
-The plugin by default is only downloading the scaffold files when installing or
-updating `drupal/core`. If you want to call it manually, you have to add the
-command callback to the `scripts`-section of your root `composer.json`, like this:
-
-```json
-{
-  "scripts": {
-    "drupal-scaffold": "DrupalComposer\\DrupalScaffold\\Plugin::scaffold"
-  }
-}
-```
-
-After that you can manually download the scaffold files according to your
-configuration by using `composer drupal-scaffold`.
-
-It is assumed that the scaffold files will be committed to the repository, to
-ensure that the correct files are used on the CI server (see **Limitation**,
-above). After running `composer install` for the first time commit the scaffold
-files to your repository.
diff --git a/vendor/drupal-composer/drupal-scaffold/composer.json b/vendor/drupal-composer/drupal-scaffold/composer.json
deleted file mode 100644
index b08ff80fc8..0000000000
--- a/vendor/drupal-composer/drupal-scaffold/composer.json
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-    "name": "drupal-composer/drupal-scaffold",
-    "description": "Composer Plugin for updating the Drupal scaffold files when using drupal/core",
-    "type": "composer-plugin",
-    "license": "GPL-2.0-or-later",
-    "require": {
-        "php": ">=5.4.5",
-        "composer-plugin-api": "^1.0.0",
-        "composer/semver": "^1.4"
-    },
-    "autoload": {
-        "psr-4": {
-            "DrupalComposer\\DrupalScaffold\\": "src/"
-        }
-    },
-    "extra": {
-        "class": "DrupalComposer\\DrupalScaffold\\Plugin",
-        "branch-alias": {
-            "dev-master": "2.0.x-dev"
-        }
-    },
-    "scripts": {
-        "cs": "phpcs --standard=PSR2 -n src",
-        "cbf": "phpcbf --standard=PSR2 -n src",
-        "unit": "phpunit --colors=always",
-        "lint": [
-            "find src -name '*.php' -print0 | xargs -0 -n1 php -l"
-        ],
-        "test": [
-            "@lint",
-            "@unit"
-        ],
-        "scenario": ".scenarios.lock/install",
-        "post-update-cmd": [
-            "create-scenario phpunit4 'phpunit/phpunit:^4.8.36' --platform-php '5.5.27'"
-        ]
-    },
-    "config": {
-        "optimize-autoloader": true,
-        "sort-packages": true,
-        "platform": {
-            "php": "7.0.8"
-        }
-    },
-    "require-dev": {
-        "composer/composer": "dev-master",
-        "g1a/composer-test-scenarios": "^2.1.0",
-        "phpunit/phpunit": "^6",
-        "squizlabs/php_codesniffer": "^2.8"
-    }
-}
diff --git a/vendor/drupal-composer/drupal-scaffold/composer.lock b/vendor/drupal-composer/drupal-scaffold/composer.lock
deleted file mode 100644
index 707e504608..0000000000
--- a/vendor/drupal-composer/drupal-scaffold/composer.lock
+++ /dev/null
@@ -1,2490 +0,0 @@
-{
-    "_readme": [
-        "This file locks the dependencies of your project to a known state",
-        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
-        "This file is @generated automatically"
-    ],
-    "content-hash": "cc2cd84cd41c52965cd00f2e515bb6d3",
-    "packages": [
-        {
-            "name": "composer/semver",
-            "version": "1.4.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/semver.git",
-                "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/semver/zipball/c7cb9a2095a074d131b65a8a0cd294479d785573",
-                "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.3.2 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.5 || ^5.0.5",
-                "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Composer\\Semver\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nils Adermann",
-                    "email": "naderman@naderman.de",
-                    "homepage": "http://www.naderman.de"
-                },
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
-                },
-                {
-                    "name": "Rob Bast",
-                    "email": "rob.bast@gmail.com",
-                    "homepage": "http://robbast.nl"
-                }
-            ],
-            "description": "Semver library that offers utilities, version constraint parsing and validation.",
-            "keywords": [
-                "semantic",
-                "semver",
-                "validation",
-                "versioning"
-            ],
-            "time": "2016-08-30T16:08:34+00:00"
-        }
-    ],
-    "packages-dev": [
-        {
-            "name": "composer/ca-bundle",
-            "version": "1.1.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/ca-bundle.git",
-                "reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/ca-bundle/zipball/d2c0a83b7533d6912e8d516756ebd34f893e9169",
-                "reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169",
-                "shasum": ""
-            },
-            "require": {
-                "ext-openssl": "*",
-                "ext-pcre": "*",
-                "php": "^5.3.2 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5",
-                "psr/log": "^1.0",
-                "symfony/process": "^2.5 || ^3.0 || ^4.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Composer\\CaBundle\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
-                }
-            ],
-            "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
-            "keywords": [
-                "cabundle",
-                "cacert",
-                "certificate",
-                "ssl",
-                "tls"
-            ],
-            "time": "2018-03-29T19:57:20+00:00"
-        },
-        {
-            "name": "composer/composer",
-            "version": "dev-master",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/composer.git",
-                "reference": "837ad7c14e8ce364296e0d0600d04c415b6e359d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/composer/zipball/837ad7c14e8ce364296e0d0600d04c415b6e359d",
-                "reference": "837ad7c14e8ce364296e0d0600d04c415b6e359d",
-                "shasum": ""
-            },
-            "require": {
-                "composer/ca-bundle": "^1.0",
-                "composer/semver": "^1.0",
-                "composer/spdx-licenses": "^1.2",
-                "composer/xdebug-handler": "^1.1",
-                "justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0",
-                "php": "^5.3.2 || ^7.0",
-                "psr/log": "^1.0",
-                "seld/jsonlint": "^1.4",
-                "seld/phar-utils": "^1.0",
-                "symfony/console": "^2.7 || ^3.0 || ^4.0",
-                "symfony/filesystem": "^2.7 || ^3.0 || ^4.0",
-                "symfony/finder": "^2.7 || ^3.0 || ^4.0",
-                "symfony/process": "^2.7 || ^3.0 || ^4.0"
-            },
-            "conflict": {
-                "symfony/console": "2.8.38"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7",
-                "phpunit/phpunit-mock-objects": "^2.3 || ^3.0"
-            },
-            "suggest": {
-                "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
-                "ext-zip": "Enabling the zip extension allows you to unzip archives",
-                "ext-zlib": "Allow gzip compression of HTTP requests"
-            },
-            "bin": [
-                "bin/composer"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.7-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Composer\\": "src/Composer"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nils Adermann",
-                    "email": "naderman@naderman.de",
-                    "homepage": "http://www.naderman.de"
-                },
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
-                }
-            ],
-            "description": "Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere.",
-            "homepage": "https://getcomposer.org/",
-            "keywords": [
-                "autoload",
-                "dependency",
-                "package"
-            ],
-            "time": "2018-06-07T09:15:18+00:00"
-        },
-        {
-            "name": "composer/spdx-licenses",
-            "version": "1.4.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/spdx-licenses.git",
-                "reference": "cb17687e9f936acd7e7245ad3890f953770dec1b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/cb17687e9f936acd7e7245ad3890f953770dec1b",
-                "reference": "cb17687e9f936acd7e7245ad3890f953770dec1b",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.3.2 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5",
-                "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Composer\\Spdx\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nils Adermann",
-                    "email": "naderman@naderman.de",
-                    "homepage": "http://www.naderman.de"
-                },
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
-                },
-                {
-                    "name": "Rob Bast",
-                    "email": "rob.bast@gmail.com",
-                    "homepage": "http://robbast.nl"
-                }
-            ],
-            "description": "SPDX licenses list and validation library.",
-            "keywords": [
-                "license",
-                "spdx",
-                "validator"
-            ],
-            "time": "2018-04-30T10:33:04+00:00"
-        },
-        {
-            "name": "composer/xdebug-handler",
-            "version": "1.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/xdebug-handler.git",
-                "reference": "c919dc6c62e221fc6406f861ea13433c0aa24f08"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/c919dc6c62e221fc6406f861ea13433c0aa24f08",
-                "reference": "c919dc6c62e221fc6406f861ea13433c0aa24f08",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.3.2 || ^7.0",
-                "psr/log": "^1.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Composer\\XdebugHandler\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "John Stevenson",
-                    "email": "john-stevenson@blueyonder.co.uk"
-                }
-            ],
-            "description": "Restarts a process without xdebug.",
-            "keywords": [
-                "Xdebug",
-                "performance"
-            ],
-            "time": "2018-04-11T15:42:36+00:00"
-        },
-        {
-            "name": "doctrine/instantiator",
-            "version": "1.0.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/instantiator.git",
-                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
-                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3,<8.0-DEV"
-            },
-            "require-dev": {
-                "athletic/athletic": "~0.1.8",
-                "ext-pdo": "*",
-                "ext-phar": "*",
-                "phpunit/phpunit": "~4.0",
-                "squizlabs/php_codesniffer": "~2.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Marco Pivetta",
-                    "email": "ocramius@gmail.com",
-                    "homepage": "http://ocramius.github.com/"
-                }
-            ],
-            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
-            "homepage": "https://github.com/doctrine/instantiator",
-            "keywords": [
-                "constructor",
-                "instantiate"
-            ],
-            "time": "2015-06-14T21:17:01+00:00"
-        },
-        {
-            "name": "g1a/composer-test-scenarios",
-            "version": "2.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/g1a/composer-test-scenarios.git",
-                "reference": "4c2b990712dbcb87a0ab618e46f908c731c3a0bb"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/4c2b990712dbcb87a0ab618e46f908c731c3a0bb",
-                "reference": "4c2b990712dbcb87a0ab618e46f908c731c3a0bb",
-                "shasum": ""
-            },
-            "bin": [
-                "scripts/create-scenario",
-                "scripts/dependency-licenses",
-                "scripts/install-scenario"
-            ],
-            "type": "library",
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Greg Anderson",
-                    "email": "greg.1.anderson@greenknowe.org"
-                }
-            ],
-            "description": "Useful scripts for testing multiple sets of Composer dependencies.",
-            "time": "2018-06-10T21:56:28+00:00"
-        },
-        {
-            "name": "justinrainbow/json-schema",
-            "version": "5.2.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/justinrainbow/json-schema.git",
-                "reference": "8560d4314577199ba51bf2032f02cd1315587c23"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/8560d4314577199ba51bf2032f02cd1315587c23",
-                "reference": "8560d4314577199ba51bf2032f02cd1315587c23",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "friendsofphp/php-cs-fixer": "^2.1",
-                "json-schema/json-schema-test-suite": "1.2.0",
-                "phpunit/phpunit": "^4.8.35"
-            },
-            "bin": [
-                "bin/validate-json"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "5.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "JsonSchema\\": "src/JsonSchema/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Bruno Prieto Reis",
-                    "email": "bruno.p.reis@gmail.com"
-                },
-                {
-                    "name": "Justin Rainbow",
-                    "email": "justin.rainbow@gmail.com"
-                },
-                {
-                    "name": "Igor Wiedler",
-                    "email": "igor@wiedler.ch"
-                },
-                {
-                    "name": "Robert Schönthal",
-                    "email": "seroscho@googlemail.com"
-                }
-            ],
-            "description": "A library to validate a json schema.",
-            "homepage": "https://github.com/justinrainbow/json-schema",
-            "keywords": [
-                "json",
-                "schema"
-            ],
-            "time": "2018-02-14T22:26:30+00:00"
-        },
-        {
-            "name": "myclabs/deep-copy",
-            "version": "1.7.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/myclabs/DeepCopy.git",
-                "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e",
-                "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.6 || ^7.0"
-            },
-            "require-dev": {
-                "doctrine/collections": "^1.0",
-                "doctrine/common": "^2.6",
-                "phpunit/phpunit": "^4.1"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "DeepCopy\\": "src/DeepCopy/"
-                },
-                "files": [
-                    "src/DeepCopy/deep_copy.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "Create deep copies (clones) of your objects",
-            "keywords": [
-                "clone",
-                "copy",
-                "duplicate",
-                "object",
-                "object graph"
-            ],
-            "time": "2017-10-19T19:58:43+00:00"
-        },
-        {
-            "name": "phar-io/manifest",
-            "version": "1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phar-io/manifest.git",
-                "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0",
-                "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0",
-                "shasum": ""
-            },
-            "require": {
-                "ext-dom": "*",
-                "ext-phar": "*",
-                "phar-io/version": "^1.0.1",
-                "php": "^5.6 || ^7.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Arne Blankerts",
-                    "email": "arne@blankerts.de",
-                    "role": "Developer"
-                },
-                {
-                    "name": "Sebastian Heuer",
-                    "email": "sebastian@phpeople.de",
-                    "role": "Developer"
-                },
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "Developer"
-                }
-            ],
-            "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
-            "time": "2017-03-05T18:14:27+00:00"
-        },
-        {
-            "name": "phar-io/version",
-            "version": "1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phar-io/version.git",
-                "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df",
-                "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.6 || ^7.0"
-            },
-            "type": "library",
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Arne Blankerts",
-                    "email": "arne@blankerts.de",
-                    "role": "Developer"
-                },
-                {
-                    "name": "Sebastian Heuer",
-                    "email": "sebastian@phpeople.de",
-                    "role": "Developer"
-                },
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "Developer"
-                }
-            ],
-            "description": "Library for handling version information and constraints",
-            "time": "2017-03-05T17:38:23+00:00"
-        },
-        {
-            "name": "phpdocumentor/reflection-common",
-            "version": "1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
-                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
-                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.5"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.6"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src"
-                    ]
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jaap van Otterdijk",
-                    "email": "opensource@ijaap.nl"
-                }
-            ],
-            "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
-            "homepage": "http://www.phpdoc.org",
-            "keywords": [
-                "FQSEN",
-                "phpDocumentor",
-                "phpdoc",
-                "reflection",
-                "static analysis"
-            ],
-            "time": "2017-09-11T18:02:19+00:00"
-        },
-        {
-            "name": "phpdocumentor/reflection-docblock",
-            "version": "4.3.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "94fd0001232e47129dd3504189fa1c7225010d08"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08",
-                "reference": "94fd0001232e47129dd3504189fa1c7225010d08",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.0",
-                "phpdocumentor/reflection-common": "^1.0.0",
-                "phpdocumentor/type-resolver": "^0.4.0",
-                "webmozart/assert": "^1.0"
-            },
-            "require-dev": {
-                "doctrine/instantiator": "~1.0.5",
-                "mockery/mockery": "^1.0",
-                "phpunit/phpunit": "^6.4"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src/"
-                    ]
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Mike van Riel",
-                    "email": "me@mikevanriel.com"
-                }
-            ],
-            "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
-            "time": "2017-11-30T07:14:17+00:00"
-        },
-        {
-            "name": "phpdocumentor/type-resolver",
-            "version": "0.4.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpDocumentor/TypeResolver.git",
-                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7",
-                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.5 || ^7.0",
-                "phpdocumentor/reflection-common": "^1.0"
-            },
-            "require-dev": {
-                "mockery/mockery": "^0.9.4",
-                "phpunit/phpunit": "^5.2||^4.8.24"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src/"
-                    ]
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Mike van Riel",
-                    "email": "me@mikevanriel.com"
-                }
-            ],
-            "time": "2017-07-14T14:27:02+00:00"
-        },
-        {
-            "name": "phpspec/prophecy",
-            "version": "1.7.6",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/33a7e3c4fda54e912ff6338c48823bd5c0f0b712",
-                "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/instantiator": "^1.0.2",
-                "php": "^5.3|^7.0",
-                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
-                "sebastian/comparator": "^1.1|^2.0|^3.0",
-                "sebastian/recursion-context": "^1.0|^2.0|^3.0"
-            },
-            "require-dev": {
-                "phpspec/phpspec": "^2.5|^3.2",
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.7.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Prophecy\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Konstantin Kudryashov",
-                    "email": "ever.zet@gmail.com",
-                    "homepage": "http://everzet.com"
-                },
-                {
-                    "name": "Marcello Duarte",
-                    "email": "marcello.duarte@gmail.com"
-                }
-            ],
-            "description": "Highly opinionated mocking framework for PHP 5.3+",
-            "homepage": "https://github.com/phpspec/prophecy",
-            "keywords": [
-                "Double",
-                "Dummy",
-                "fake",
-                "mock",
-                "spy",
-                "stub"
-            ],
-            "time": "2018-04-18T13:57:24+00:00"
-        },
-        {
-            "name": "phpunit/php-code-coverage",
-            "version": "5.3.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
-                "reference": "c89677919c5dd6d3b3852f230a663118762218ac"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c89677919c5dd6d3b3852f230a663118762218ac",
-                "reference": "c89677919c5dd6d3b3852f230a663118762218ac",
-                "shasum": ""
-            },
-            "require": {
-                "ext-dom": "*",
-                "ext-xmlwriter": "*",
-                "php": "^7.0",
-                "phpunit/php-file-iterator": "^1.4.2",
-                "phpunit/php-text-template": "^1.2.1",
-                "phpunit/php-token-stream": "^2.0.1",
-                "sebastian/code-unit-reverse-lookup": "^1.0.1",
-                "sebastian/environment": "^3.0",
-                "sebastian/version": "^2.0.1",
-                "theseer/tokenizer": "^1.1"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^6.0"
-            },
-            "suggest": {
-                "ext-xdebug": "^2.5.5"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "5.3.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
-            "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
-            "keywords": [
-                "coverage",
-                "testing",
-                "xunit"
-            ],
-            "time": "2018-04-06T15:36:58+00:00"
-        },
-        {
-            "name": "phpunit/php-file-iterator",
-            "version": "1.4.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
-                "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4",
-                "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.4.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sb@sebastian-bergmann.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "FilterIterator implementation that filters files based on a list of suffixes.",
-            "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
-            "keywords": [
-                "filesystem",
-                "iterator"
-            ],
-            "time": "2017-11-27T13:52:08+00:00"
-        },
-        {
-            "name": "phpunit/php-text-template",
-            "version": "1.2.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-text-template.git",
-                "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
-                "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "type": "library",
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "Simple template engine.",
-            "homepage": "https://github.com/sebastianbergmann/php-text-template/",
-            "keywords": [
-                "template"
-            ],
-            "time": "2015-06-21T13:50:34+00:00"
-        },
-        {
-            "name": "phpunit/php-timer",
-            "version": "1.0.9",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-timer.git",
-                "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
-                "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.3.3 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sb@sebastian-bergmann.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "Utility class for timing",
-            "homepage": "https://github.com/sebastianbergmann/php-timer/",
-            "keywords": [
-                "timer"
-            ],
-            "time": "2017-02-26T11:10:40+00:00"
-        },
-        {
-            "name": "phpunit/php-token-stream",
-            "version": "2.0.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-token-stream.git",
-                "reference": "791198a2c6254db10131eecfe8c06670700904db"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db",
-                "reference": "791198a2c6254db10131eecfe8c06670700904db",
-                "shasum": ""
-            },
-            "require": {
-                "ext-tokenizer": "*",
-                "php": "^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^6.2.4"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.0-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                }
-            ],
-            "description": "Wrapper around PHP's tokenizer extension.",
-            "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
-            "keywords": [
-                "tokenizer"
-            ],
-            "time": "2017-11-27T05:48:46+00:00"
-        },
-        {
-            "name": "phpunit/phpunit",
-            "version": "6.5.8",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "4f21a3c6b97c42952fd5c2837bb354ec0199b97b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4f21a3c6b97c42952fd5c2837bb354ec0199b97b",
-                "reference": "4f21a3c6b97c42952fd5c2837bb354ec0199b97b",
-                "shasum": ""
-            },
-            "require": {
-                "ext-dom": "*",
-                "ext-json": "*",
-                "ext-libxml": "*",
-                "ext-mbstring": "*",
-                "ext-xml": "*",
-                "myclabs/deep-copy": "^1.6.1",
-                "phar-io/manifest": "^1.0.1",
-                "phar-io/version": "^1.0",
-                "php": "^7.0",
-                "phpspec/prophecy": "^1.7",
-                "phpunit/php-code-coverage": "^5.3",
-                "phpunit/php-file-iterator": "^1.4.3",
-                "phpunit/php-text-template": "^1.2.1",
-                "phpunit/php-timer": "^1.0.9",
-                "phpunit/phpunit-mock-objects": "^5.0.5",
-                "sebastian/comparator": "^2.1",
-                "sebastian/diff": "^2.0",
-                "sebastian/environment": "^3.1",
-                "sebastian/exporter": "^3.1",
-                "sebastian/global-state": "^2.0",
-                "sebastian/object-enumerator": "^3.0.3",
-                "sebastian/resource-operations": "^1.0",
-                "sebastian/version": "^2.0.1"
-            },
-            "conflict": {
-                "phpdocumentor/reflection-docblock": "3.0.2",
-                "phpunit/dbunit": "<3.0"
-            },
-            "require-dev": {
-                "ext-pdo": "*"
-            },
-            "suggest": {
-                "ext-xdebug": "*",
-                "phpunit/php-invoker": "^1.1"
-            },
-            "bin": [
-                "phpunit"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "6.5.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "The PHP Unit Testing framework.",
-            "homepage": "https://phpunit.de/",
-            "keywords": [
-                "phpunit",
-                "testing",
-                "xunit"
-            ],
-            "time": "2018-04-10T11:38:34+00:00"
-        },
-        {
-            "name": "phpunit/phpunit-mock-objects",
-            "version": "5.0.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
-                "reference": "3eaf040f20154d27d6da59ca2c6e28ac8fd56dce"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/3eaf040f20154d27d6da59ca2c6e28ac8fd56dce",
-                "reference": "3eaf040f20154d27d6da59ca2c6e28ac8fd56dce",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/instantiator": "^1.0.5",
-                "php": "^7.0",
-                "phpunit/php-text-template": "^1.2.1",
-                "sebastian/exporter": "^3.1"
-            },
-            "conflict": {
-                "phpunit/phpunit": "<6.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^6.5"
-            },
-            "suggest": {
-                "ext-soap": "*"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "5.0.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "Mock Object library for PHPUnit",
-            "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
-            "keywords": [
-                "mock",
-                "xunit"
-            ],
-            "time": "2018-05-29T13:50:43+00:00"
-        },
-        {
-            "name": "psr/log",
-            "version": "1.0.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/log.git",
-                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
-                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Psr\\Log\\": "Psr/Log/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "http://www.php-fig.org/"
-                }
-            ],
-            "description": "Common interface for logging libraries",
-            "homepage": "https://github.com/php-fig/log",
-            "keywords": [
-                "log",
-                "psr",
-                "psr-3"
-            ],
-            "time": "2016-10-10T12:19:37+00:00"
-        },
-        {
-            "name": "sebastian/code-unit-reverse-lookup",
-            "version": "1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
-                "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
-                "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.6 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^5.7 || ^6.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                }
-            ],
-            "description": "Looks up which function or method a line of code belongs to",
-            "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
-            "time": "2017-03-04T06:30:41+00:00"
-        },
-        {
-            "name": "sebastian/comparator",
-            "version": "2.1.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/comparator.git",
-                "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/34369daee48eafb2651bea869b4b15d75ccc35f9",
-                "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.0",
-                "sebastian/diff": "^2.0 || ^3.0",
-                "sebastian/exporter": "^3.1"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^6.4"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.1.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Jeff Welch",
-                    "email": "whatthejeff@gmail.com"
-                },
-                {
-                    "name": "Volker Dusch",
-                    "email": "github@wallbash.com"
-                },
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@2bepublished.at"
-                },
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                }
-            ],
-            "description": "Provides the functionality to compare PHP values for equality",
-            "homepage": "https://github.com/sebastianbergmann/comparator",
-            "keywords": [
-                "comparator",
-                "compare",
-                "equality"
-            ],
-            "time": "2018-02-01T13:46:46+00:00"
-        },
-        {
-            "name": "sebastian/diff",
-            "version": "2.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/diff.git",
-                "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd",
-                "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^6.2"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.0-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Kore Nordmann",
-                    "email": "mail@kore-nordmann.de"
-                },
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                }
-            ],
-            "description": "Diff implementation",
-            "homepage": "https://github.com/sebastianbergmann/diff",
-            "keywords": [
-                "diff"
-            ],
-            "time": "2017-08-03T08:09:46+00:00"
-        },
-        {
-            "name": "sebastian/environment",
-            "version": "3.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/environment.git",
-                "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5",
-                "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^6.1"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.1.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                }
-            ],
-            "description": "Provides functionality to handle HHVM/PHP environments",
-            "homepage": "http://www.github.com/sebastianbergmann/environment",
-            "keywords": [
-                "Xdebug",
-                "environment",
-                "hhvm"
-            ],
-            "time": "2017-07-01T08:51:00+00:00"
-        },
-        {
-            "name": "sebastian/exporter",
-            "version": "3.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/exporter.git",
-                "reference": "234199f4528de6d12aaa58b612e98f7d36adb937"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937",
-                "reference": "234199f4528de6d12aaa58b612e98f7d36adb937",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.0",
-                "sebastian/recursion-context": "^3.0"
-            },
-            "require-dev": {
-                "ext-mbstring": "*",
-                "phpunit/phpunit": "^6.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.1.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Jeff Welch",
-                    "email": "whatthejeff@gmail.com"
-                },
-                {
-                    "name": "Volker Dusch",
-                    "email": "github@wallbash.com"
-                },
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@2bepublished.at"
-                },
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                },
-                {
-                    "name": "Adam Harvey",
-                    "email": "aharvey@php.net"
-                }
-            ],
-            "description": "Provides the functionality to export PHP variables for visualization",
-            "homepage": "http://www.github.com/sebastianbergmann/exporter",
-            "keywords": [
-                "export",
-                "exporter"
-            ],
-            "time": "2017-04-03T13:19:02+00:00"
-        },
-        {
-            "name": "sebastian/global-state",
-            "version": "2.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/global-state.git",
-                "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4",
-                "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^6.0"
-            },
-            "suggest": {
-                "ext-uopz": "*"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.0-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                }
-            ],
-            "description": "Snapshotting of global state",
-            "homepage": "http://www.github.com/sebastianbergmann/global-state",
-            "keywords": [
-                "global state"
-            ],
-            "time": "2017-04-27T15:39:26+00:00"
-        },
-        {
-            "name": "sebastian/object-enumerator",
-            "version": "3.0.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/object-enumerator.git",
-                "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5",
-                "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.0",
-                "sebastian/object-reflector": "^1.1.1",
-                "sebastian/recursion-context": "^3.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^6.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                }
-            ],
-            "description": "Traverses array structures and object graphs to enumerate all referenced objects",
-            "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
-            "time": "2017-08-03T12:35:26+00:00"
-        },
-        {
-            "name": "sebastian/object-reflector",
-            "version": "1.1.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/object-reflector.git",
-                "reference": "773f97c67f28de00d397be301821b06708fca0be"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be",
-                "reference": "773f97c67f28de00d397be301821b06708fca0be",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^6.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.1-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                }
-            ],
-            "description": "Allows reflection of object attributes, including inherited and non-public ones",
-            "homepage": "https://github.com/sebastianbergmann/object-reflector/",
-            "time": "2017-03-29T09:07:27+00:00"
-        },
-        {
-            "name": "sebastian/recursion-context",
-            "version": "3.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/recursion-context.git",
-                "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8",
-                "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^6.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Jeff Welch",
-                    "email": "whatthejeff@gmail.com"
-                },
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                },
-                {
-                    "name": "Adam Harvey",
-                    "email": "aharvey@php.net"
-                }
-            ],
-            "description": "Provides functionality to recursively process PHP variables",
-            "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
-            "time": "2017-03-03T06:23:57+00:00"
-        },
-        {
-            "name": "sebastian/resource-operations",
-            "version": "1.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/resource-operations.git",
-                "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
-                "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.6.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                }
-            ],
-            "description": "Provides a list of PHP built-in functions that operate on resources",
-            "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
-            "time": "2015-07-28T20:34:47+00:00"
-        },
-        {
-            "name": "sebastian/version",
-            "version": "2.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/version.git",
-                "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
-                "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.6"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.0.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "Library that helps with managing the version number of Git-hosted PHP projects",
-            "homepage": "https://github.com/sebastianbergmann/version",
-            "time": "2016-10-03T07:35:21+00:00"
-        },
-        {
-            "name": "seld/jsonlint",
-            "version": "1.7.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Seldaek/jsonlint.git",
-                "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/d15f59a67ff805a44c50ea0516d2341740f81a38",
-                "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.3 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
-            },
-            "bin": [
-                "bin/jsonlint"
-            ],
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Seld\\JsonLint\\": "src/Seld/JsonLint/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
-                }
-            ],
-            "description": "JSON Linter",
-            "keywords": [
-                "json",
-                "linter",
-                "parser",
-                "validator"
-            ],
-            "time": "2018-01-24T12:46:19+00:00"
-        },
-        {
-            "name": "seld/phar-utils",
-            "version": "1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Seldaek/phar-utils.git",
-                "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/7009b5139491975ef6486545a39f3e6dad5ac30a",
-                "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Seld\\PharUtils\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be"
-                }
-            ],
-            "description": "PHAR file format utilities, for when PHP phars you up",
-            "keywords": [
-                "phra"
-            ],
-            "time": "2015-10-13T18:44:15+00:00"
-        },
-        {
-            "name": "squizlabs/php_codesniffer",
-            "version": "2.9.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
-                "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62",
-                "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62",
-                "shasum": ""
-            },
-            "require": {
-                "ext-simplexml": "*",
-                "ext-tokenizer": "*",
-                "ext-xmlwriter": "*",
-                "php": ">=5.1.2"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.0"
-            },
-            "bin": [
-                "scripts/phpcs",
-                "scripts/phpcbf"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "CodeSniffer.php",
-                    "CodeSniffer/CLI.php",
-                    "CodeSniffer/Exception.php",
-                    "CodeSniffer/File.php",
-                    "CodeSniffer/Fixer.php",
-                    "CodeSniffer/Report.php",
-                    "CodeSniffer/Reporting.php",
-                    "CodeSniffer/Sniff.php",
-                    "CodeSniffer/Tokens.php",
-                    "CodeSniffer/Reports/",
-                    "CodeSniffer/Tokenizers/",
-                    "CodeSniffer/DocGenerators/",
-                    "CodeSniffer/Standards/AbstractPatternSniff.php",
-                    "CodeSniffer/Standards/AbstractScopeSniff.php",
-                    "CodeSniffer/Standards/AbstractVariableSniff.php",
-                    "CodeSniffer/Standards/IncorrectPatternException.php",
-                    "CodeSniffer/Standards/Generic/Sniffs/",
-                    "CodeSniffer/Standards/MySource/Sniffs/",
-                    "CodeSniffer/Standards/PEAR/Sniffs/",
-                    "CodeSniffer/Standards/PSR1/Sniffs/",
-                    "CodeSniffer/Standards/PSR2/Sniffs/",
-                    "CodeSniffer/Standards/Squiz/Sniffs/",
-                    "CodeSniffer/Standards/Zend/Sniffs/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Greg Sherwood",
-                    "role": "lead"
-                }
-            ],
-            "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
-            "homepage": "http://www.squizlabs.com/php-codesniffer",
-            "keywords": [
-                "phpcs",
-                "standards"
-            ],
-            "time": "2017-05-22T02:43:20+00:00"
-        },
-        {
-            "name": "symfony/console",
-            "version": "v3.4.11",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/console.git",
-                "reference": "36f83f642443c46f3cf751d4d2ee5d047d757a27"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/36f83f642443c46f3cf751d4d2ee5d047d757a27",
-                "reference": "36f83f642443c46f3cf751d4d2ee5d047d757a27",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/debug": "~2.8|~3.0|~4.0",
-                "symfony/polyfill-mbstring": "~1.0"
-            },
-            "conflict": {
-                "symfony/dependency-injection": "<3.4",
-                "symfony/process": "<3.3"
-            },
-            "require-dev": {
-                "psr/log": "~1.0",
-                "symfony/config": "~3.3|~4.0",
-                "symfony/dependency-injection": "~3.4|~4.0",
-                "symfony/event-dispatcher": "~2.8|~3.0|~4.0",
-                "symfony/lock": "~3.4|~4.0",
-                "symfony/process": "~3.3|~4.0"
-            },
-            "suggest": {
-                "psr/log-implementation": "For using the console logger",
-                "symfony/event-dispatcher": "",
-                "symfony/lock": "",
-                "symfony/process": ""
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Console\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Console Component",
-            "homepage": "https://symfony.com",
-            "time": "2018-05-16T08:49:21+00:00"
-        },
-        {
-            "name": "symfony/debug",
-            "version": "v3.4.11",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/debug.git",
-                "reference": "b28fd73fefbac341f673f5efd707d539d6a19f68"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/debug/zipball/b28fd73fefbac341f673f5efd707d539d6a19f68",
-                "reference": "b28fd73fefbac341f673f5efd707d539d6a19f68",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "psr/log": "~1.0"
-            },
-            "conflict": {
-                "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
-            },
-            "require-dev": {
-                "symfony/http-kernel": "~2.8|~3.0|~4.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Debug\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Debug Component",
-            "homepage": "https://symfony.com",
-            "time": "2018-05-16T14:03:39+00:00"
-        },
-        {
-            "name": "symfony/filesystem",
-            "version": "v3.4.11",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/filesystem.git",
-                "reference": "8e03ca3fa52a0f56b87506f38cf7bd3f9442b3a0"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/8e03ca3fa52a0f56b87506f38cf7bd3f9442b3a0",
-                "reference": "8e03ca3fa52a0f56b87506f38cf7bd3f9442b3a0",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/polyfill-ctype": "~1.8"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Filesystem\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Filesystem Component",
-            "homepage": "https://symfony.com",
-            "time": "2018-05-16T08:49:21+00:00"
-        },
-        {
-            "name": "symfony/finder",
-            "version": "v3.4.11",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/finder.git",
-                "reference": "472a92f3df8b247b49ae364275fb32943b9656c6"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/472a92f3df8b247b49ae364275fb32943b9656c6",
-                "reference": "472a92f3df8b247b49ae364275fb32943b9656c6",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.5.9|>=7.0.8"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Finder\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Finder Component",
-            "homepage": "https://symfony.com",
-            "time": "2018-05-16T08:49:21+00:00"
-        },
-        {
-            "name": "symfony/polyfill-ctype",
-            "version": "v1.8.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/7cc359f1b7b80fc25ed7796be7d96adc9b354bae",
-                "reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.8-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Polyfill\\Ctype\\": ""
-                },
-                "files": [
-                    "bootstrap.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                },
-                {
-                    "name": "Gert de Pagter",
-                    "email": "BackEndTea@gmail.com"
-                }
-            ],
-            "description": "Symfony polyfill for ctype functions",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "ctype",
-                "polyfill",
-                "portable"
-            ],
-            "time": "2018-04-30T19:57:29+00:00"
-        },
-        {
-            "name": "symfony/polyfill-mbstring",
-            "version": "v1.8.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "3296adf6a6454a050679cde90f95350ad604b171"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171",
-                "reference": "3296adf6a6454a050679cde90f95350ad604b171",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "suggest": {
-                "ext-mbstring": "For best performance"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.8-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Polyfill\\Mbstring\\": ""
-                },
-                "files": [
-                    "bootstrap.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill for the Mbstring extension",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "mbstring",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "time": "2018-04-26T10:06:28+00:00"
-        },
-        {
-            "name": "symfony/process",
-            "version": "v3.4.11",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/process.git",
-                "reference": "4cbf2db9abcb01486a21b7a059e03a62fae63187"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/4cbf2db9abcb01486a21b7a059e03a62fae63187",
-                "reference": "4cbf2db9abcb01486a21b7a059e03a62fae63187",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.5.9|>=7.0.8"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Process\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Process Component",
-            "homepage": "https://symfony.com",
-            "time": "2018-05-16T08:49:21+00:00"
-        },
-        {
-            "name": "theseer/tokenizer",
-            "version": "1.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/theseer/tokenizer.git",
-                "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b",
-                "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b",
-                "shasum": ""
-            },
-            "require": {
-                "ext-dom": "*",
-                "ext-tokenizer": "*",
-                "ext-xmlwriter": "*",
-                "php": "^7.0"
-            },
-            "type": "library",
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Arne Blankerts",
-                    "email": "arne@blankerts.de",
-                    "role": "Developer"
-                }
-            ],
-            "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
-            "time": "2017-04-07T12:08:54+00:00"
-        },
-        {
-            "name": "webmozart/assert",
-            "version": "1.3.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/webmozart/assert.git",
-                "reference": "0df1908962e7a3071564e857d86874dad1ef204a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a",
-                "reference": "0df1908962e7a3071564e857d86874dad1ef204a",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.3.3 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.6",
-                "sebastian/version": "^1.0.1"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Webmozart\\Assert\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@gmail.com"
-                }
-            ],
-            "description": "Assertions to validate method input/output with nice error messages.",
-            "keywords": [
-                "assert",
-                "check",
-                "validate"
-            ],
-            "time": "2018-01-29T19:49:41+00:00"
-        }
-    ],
-    "aliases": [],
-    "minimum-stability": "stable",
-    "stability-flags": {
-        "composer/composer": 20
-    },
-    "prefer-stable": false,
-    "prefer-lowest": false,
-    "platform": {
-        "php": ">=5.4.5"
-    },
-    "platform-dev": [],
-    "platform-overrides": {
-        "php": "7.0.8"
-    }
-}
diff --git a/vendor/drupal-composer/drupal-scaffold/phpunit.xml.dist b/vendor/drupal-composer/drupal-scaffold/phpunit.xml.dist
deleted file mode 100644
index ac16a3eafb..0000000000
--- a/vendor/drupal-composer/drupal-scaffold/phpunit.xml.dist
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd"
-    backupGlobals="false"
-    colors="true"
-    bootstrap="vendor/autoload.php"
-    verbose="true"
->
-    <testsuites>
-        <testsuite name="drupal-scaffold">
-            <directory>./tests/</directory>
-        </testsuite>
-    </testsuites>
-</phpunit>
diff --git a/vendor/drupal-composer/drupal-scaffold/src/DrupalScaffoldCommand.php b/vendor/drupal-composer/drupal-scaffold/src/DrupalScaffoldCommand.php
deleted file mode 100644
index 485a2f531a..0000000000
--- a/vendor/drupal-composer/drupal-scaffold/src/DrupalScaffoldCommand.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-namespace DrupalComposer\DrupalScaffold;
-
-use Composer\Command\BaseCommand;
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Output\OutputInterface;
-
-/**
- * The "drupal:scaffold" command class.
- *
- * Downloads scaffold files and generates the autoload.php file.
- */
-class DrupalScaffoldCommand extends BaseCommand {
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function configure() {
-    parent::configure();
-    $this
-      ->setName('drupal:scaffold')
-      ->setDescription('Update the Drupal scaffold files.');
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function execute(InputInterface $input, OutputInterface $output) {
-    $handler = new Handler($this->getComposer(), $this->getIO());
-    $handler->downloadScaffold();
-    // Generate the autoload.php file after generating the scaffold files.
-    $handler->generateAutoload();
-  }
-
-}
diff --git a/vendor/drupal-composer/drupal-scaffold/src/FileFetcher.php b/vendor/drupal-composer/drupal-scaffold/src/FileFetcher.php
deleted file mode 100644
index 653e7f22f1..0000000000
--- a/vendor/drupal-composer/drupal-scaffold/src/FileFetcher.php
+++ /dev/null
@@ -1,87 +0,0 @@
-<?php
-
-namespace DrupalComposer\DrupalScaffold;
-
-use Composer\IO\IOInterface;
-use Composer\Util\Filesystem;
-use Composer\Util\RemoteFilesystem;
-
-/**
- * Downloads all required files and writes it to the file system.
- */
-class FileFetcher {
-
-  /**
-   * @var \Composer\Util\RemoteFilesystem
-   */
-  protected $remoteFilesystem;
-
-  /**
-   * @var \Composer\IO\IOInterface
-   */
-  protected $io;
-
-  /**
-   * @var bool
-   *
-   * A boolean indicating if progress should be displayed.
-   */
-  protected $progress;
-
-  protected $source;
-  protected $filenames;
-  protected $fs;
-
-  /**
-   * Constructs this FileFetcher object.
-   */
-  public function __construct(RemoteFilesystem $remoteFilesystem, $source, IOInterface $io, $progress = TRUE) {
-    $this->remoteFilesystem = $remoteFilesystem;
-    $this->io = $io;
-    $this->source = $source;
-    $this->fs = new Filesystem();
-    $this->progress = $progress;
-  }
-
-  /**
-   * Downloads all required files and writes it to the file system.
-   */
-  public function fetch($version, $destination, $override) {
-    foreach ($this->filenames as $sourceFilename => $filename) {
-      $target = "$destination/$filename";
-      if ($override || !file_exists($target)) {
-        $url = $this->getUri($sourceFilename, $version);
-        $this->fs->ensureDirectoryExists($destination . '/' . dirname($filename));
-        if ($this->progress) {
-          $this->io->writeError("  - <info>$filename</info> (<comment>$url</comment>): ", FALSE);
-          $this->remoteFilesystem->copy($url, $url, $target, $this->progress);
-          // Used to put a new line because the remote file system does not put
-          // one.
-          $this->io->writeError('');
-        }
-        else {
-          $this->remoteFilesystem->copy($url, $url, $target, $this->progress);
-        }
-      }
-    }
-  }
-
-  /**
-   * Set filenames.
-   */
-  public function setFilenames(array $filenames) {
-    $this->filenames = $filenames;
-  }
-
-  /**
-   * Replace filename and version in the source pattern with their values.
-   */
-  protected function getUri($filename, $version) {
-    $map = [
-      '{path}' => $filename,
-      '{version}' => $version,
-    ];
-    return str_replace(array_keys($map), array_values($map), $this->source);
-  }
-
-}
diff --git a/vendor/drupal-composer/drupal-scaffold/src/Handler.php b/vendor/drupal-composer/drupal-scaffold/src/Handler.php
deleted file mode 100644
index 1bdefe0f69..0000000000
--- a/vendor/drupal-composer/drupal-scaffold/src/Handler.php
+++ /dev/null
@@ -1,411 +0,0 @@
-<?php
-
-namespace DrupalComposer\DrupalScaffold;
-
-use Composer\Script\Event;
-use Composer\Installer\PackageEvent;
-use Composer\Plugin\CommandEvent;
-use Composer\Composer;
-use Composer\DependencyResolver\Operation\InstallOperation;
-use Composer\DependencyResolver\Operation\UpdateOperation;
-use Composer\EventDispatcher\EventDispatcher;
-use Composer\IO\IOInterface;
-use Composer\Package\PackageInterface;
-use Composer\Semver\Semver;
-use Composer\Util\Filesystem;
-use Composer\Util\RemoteFilesystem;
-use Symfony\Component\Filesystem\Filesystem as SymfonyFilesystem;
-
-/**
- * Core class of the plugin, contains all logic which files should be fetched.
- */
-class Handler {
-
-  const PRE_DRUPAL_SCAFFOLD_CMD = 'pre-drupal-scaffold-cmd';
-  const POST_DRUPAL_SCAFFOLD_CMD = 'post-drupal-scaffold-cmd';
-
-  /**
-   * @var \Composer\Composer
-   */
-  protected $composer;
-
-  /**
-   * @var \Composer\IO\IOInterface
-   */
-  protected $io;
-
-  /**
-   * @var bool
-   *
-   * A boolean indicating if progress should be displayed.
-   */
-  protected $progress;
-
-  /**
-   * @var \Composer\Package\PackageInterface
-   */
-  protected $drupalCorePackage;
-
-  /**
-   * Handler constructor.
-   *
-   * @param \Composer\Composer $composer
-   * @param \Composer\IO\IOInterface $io
-   */
-  public function __construct(Composer $composer, IOInterface $io) {
-    $this->composer = $composer;
-    $this->io = $io;
-    $this->progress = TRUE;
-
-    // Pre-load all of our sources so that we do not run up
-    // against problems in `composer update` operations.
-    $this->manualLoad();
-  }
-
-  protected function manualLoad() {
-    $src_dir = __DIR__;
-
-    $classes = [
-      'CommandProvider',
-      'DrupalScaffoldCommand',
-      'FileFetcher',
-      'PrestissimoFileFetcher',
-    ];
-
-    foreach ($classes as $src) {
-      if (!class_exists('\\DrupalComposer\\DrupalScaffold\\' . $src)) {
-        include "{$src_dir}/{$src}.php";
-      }
-    }
-  }
-
-  /**
-   * @param $operation
-   * @return mixed
-   */
-  protected function getCorePackage($operation) {
-    if ($operation instanceof InstallOperation) {
-      $package = $operation->getPackage();
-    }
-    elseif ($operation instanceof UpdateOperation) {
-      $package = $operation->getTargetPackage();
-    }
-    if (isset($package) && $package instanceof PackageInterface && $package->getName() == 'drupal/core') {
-      return $package;
-    }
-    return NULL;
-  }
-
-  /**
-   * Get the command options.
-   *
-   * @param \Composer\Plugin\CommandEvent $event
-   */
-  public function onCmdBeginsEvent(CommandEvent $event) {
-    if ($event->getInput()->hasOption('no-progress')) {
-      $this->progress = !($event->getInput()->getOption('no-progress'));
-    }
-    else {
-      $this->progress = TRUE;
-    }
-  }
-
-  /**
-   * Marks scaffolding to be processed after an install or update command.
-   *
-   * @param \Composer\Installer\PackageEvent $event
-   */
-  public function onPostPackageEvent(PackageEvent $event) {
-    $package = $this->getCorePackage($event->getOperation());
-    if ($package) {
-      // By explicitly setting the core package, the onPostCmdEvent() will
-      // process the scaffolding automatically.
-      $this->drupalCorePackage = $package;
-    }
-  }
-
-  /**
-   * Post install command event to execute the scaffolding.
-   *
-   * @param \Composer\Script\Event $event
-   */
-  public function onPostCmdEvent(Event $event) {
-    // Only install the scaffolding if drupal/core was installed,
-    // AND there are no scaffolding files present.
-    if (isset($this->drupalCorePackage)) {
-      $this->downloadScaffold();
-      // Generate the autoload.php file after generating the scaffold files.
-      $this->generateAutoload();
-    }
-  }
-
-  /**
-   * Downloads drupal scaffold files for the current process.
-   */
-  public function downloadScaffold() {
-    $drupalCorePackage = $this->getDrupalCorePackage();
-    $webroot = realpath($this->getWebRoot());
-
-    // Collect options, excludes and settings files.
-    $options = $this->getOptions();
-    $files = array_diff($this->getIncludes(), $this->getExcludes());
-
-    // Call any pre-scaffold scripts that may be defined.
-    $dispatcher = new EventDispatcher($this->composer, $this->io);
-    $dispatcher->dispatch(self::PRE_DRUPAL_SCAFFOLD_CMD);
-
-    $version = $this->getDrupalCoreVersion($drupalCorePackage);
-
-    $remoteFs = new RemoteFilesystem($this->io);
-
-    $fetcher = new PrestissimoFileFetcher($remoteFs, $options['source'], $this->io, $this->progress, $this->composer->getConfig());
-    $fetcher->setFilenames(array_combine($files, $files));
-    $fetcher->fetch($version, $webroot, TRUE);
-
-    $fetcher->setFilenames($this->getInitial());
-    $fetcher->fetch($version, $webroot, FALSE);
-
-    // Call post-scaffold scripts.
-    $dispatcher->dispatch(self::POST_DRUPAL_SCAFFOLD_CMD);
-  }
-
-  /**
-   * Generate the autoload file at the project root.  Include the
-   * autoload file that Composer generated.
-   */
-  public function generateAutoload() {
-    $vendorPath = $this->getVendorPath();
-    $webroot = $this->getWebRoot();
-
-    // Calculate the relative path from the webroot (location of the
-    // project autoload.php) to the vendor directory.
-    $fs = new SymfonyFilesystem();
-    $relativeVendorPath = $fs->makePathRelative($vendorPath, realpath($webroot));
-
-    $fs->dumpFile($webroot . "/autoload.php", $this->autoLoadContents($relativeVendorPath));
-  }
-
-  /**
-   * Build the contents of the autoload file.
-   *
-   * @return string
-   */
-  protected function autoLoadContents($relativeVendorPath) {
-    $relativeVendorPath = rtrim($relativeVendorPath, '/');
-
-    $autoloadContents = <<<EOF
-<?php
-
-/**
- * @file
- * Includes the autoloader created by Composer.
- *
- * This file was generated by drupal-composer/drupal-scaffold.
- * https://github.com/drupal-composer/drupal-scaffold
- *
- * @see composer.json
- * @see index.php
- * @see core/install.php
- * @see core/rebuild.php
- * @see core/modules/statistics/statistics.php
- */
-
-return require __DIR__ . '/$relativeVendorPath/autoload.php';
-
-EOF;
-    return $autoloadContents;
-  }
-
-  /**
-   * Get the path to the 'vendor' directory.
-   *
-   * @return string
-   */
-  public function getVendorPath() {
-    $config = $this->composer->getConfig();
-    $filesystem = new Filesystem();
-    $filesystem->ensureDirectoryExists($config->get('vendor-dir'));
-    $vendorPath = $filesystem->normalizePath(realpath($config->get('vendor-dir')));
-
-    return $vendorPath;
-  }
-
-  /**
-   * Look up the Drupal core package object, or return it from where we cached
-   * it in the $drupalCorePackage field.
-   *
-   * @return \Composer\Package\PackageInterface
-   */
-  public function getDrupalCorePackage() {
-    if (!isset($this->drupalCorePackage)) {
-      $this->drupalCorePackage = $this->getPackage('drupal/core');
-    }
-    return $this->drupalCorePackage;
-  }
-
-  /**
-   * Returns the Drupal core version for the given package.
-   *
-   * @param \Composer\Package\PackageInterface $drupalCorePackage
-   *
-   * @return string
-   */
-  protected function getDrupalCoreVersion(PackageInterface $drupalCorePackage) {
-    $version = $drupalCorePackage->getPrettyVersion();
-    if ($drupalCorePackage->getStability() == 'dev' && substr($version, -4) == '-dev') {
-      $version = substr($version, 0, -4);
-      return $version;
-    }
-    return $version;
-  }
-
-  /**
-   * Retrieve the path to the web root.
-   *
-   * @return string
-   */
-  public function getWebRoot() {
-    $drupalCorePackage = $this->getDrupalCorePackage();
-    $installationManager = $this->composer->getInstallationManager();
-    $corePath = $installationManager->getInstallPath($drupalCorePackage);
-    // Webroot is the parent path of the drupal core installation path.
-    $webroot = dirname($corePath);
-
-    return $webroot;
-  }
-
-  /**
-   * Retrieve a package from the current composer process.
-   *
-   * @param string $name
-   *   Name of the package to get from the current composer installation.
-   *
-   * @return \Composer\Package\PackageInterface
-   */
-  protected function getPackage($name) {
-    return $this->composer->getRepositoryManager()->getLocalRepository()->findPackage($name, '*');
-  }
-
-  /**
-   * Retrieve excludes from optional "extra" configuration.
-   *
-   * @return array
-   */
-  protected function getExcludes() {
-    return $this->getNamedOptionList('excludes', 'getExcludesDefault');
-  }
-
-  /**
-   * Retrieve list of additional settings files from optional "extra" configuration.
-   *
-   * @return array
-   */
-  protected function getIncludes() {
-    return $this->getNamedOptionList('includes', 'getIncludesDefault');
-  }
-
-  /**
-   * Retrieve list of initial files from optional "extra" configuration.
-   *
-   * @return array
-   */
-  protected function getInitial() {
-    return $this->getNamedOptionList('initial', 'getInitialDefault');
-  }
-
-  /**
-   * Retrieve a named list of options from optional "extra" configuration.
-   * Respects 'omit-defaults', and either includes or does not include the
-   * default values, as requested.
-   *
-   * @return array
-   */
-  protected function getNamedOptionList($optionName, $defaultFn) {
-    $options = $this->getOptions($this->composer);
-    $result = array();
-    if (empty($options['omit-defaults'])) {
-      $result = $this->$defaultFn();
-    }
-    $result = array_merge($result, (array) $options[$optionName]);
-
-    return $result;
-  }
-
-  /**
-   * Retrieve excludes from optional "extra" configuration.
-   *
-   * @return array
-   */
-  protected function getOptions() {
-    $extra = $this->composer->getPackage()->getExtra() + ['drupal-scaffold' => []];
-    $options = $extra['drupal-scaffold'] + [
-      'omit-defaults' => FALSE,
-      'excludes' => [],
-      'includes' => [],
-      'initial' => [],
-      'source' => 'https://cgit.drupalcode.org/drupal/plain/{path}?h={version}',
-      // Github: https://raw.githubusercontent.com/drupal/drupal/{version}/{path}
-    ];
-    return $options;
-  }
-
-  /**
-   * Holds default excludes.
-   */
-  protected function getExcludesDefault() {
-    return [];
-  }
-
-  /**
-   * Holds default settings files list.
-   */
-  protected function getIncludesDefault() {
-    $version = $this->getDrupalCoreVersion($this->getDrupalCorePackage());
-    list($major, $minor) = explode('.', $version, 3);
-    $version = "$major.$minor";
-
-    /**
-     * Files from 8.3.x
-     *
-     * @see https://cgit.drupalcode.org/drupal/tree/?h=8.3.x
-     */
-    $common = [
-      '.csslintrc',
-      '.editorconfig',
-      '.eslintignore',
-      '.gitattributes',
-      '.htaccess',
-      'index.php',
-      'robots.txt',
-      'sites/default/default.settings.php',
-      'sites/default/default.services.yml',
-      'sites/development.services.yml',
-      'sites/example.settings.local.php',
-      'sites/example.sites.php',
-      'update.php',
-      'web.config',
-    ];
-
-    // Version specific variations.
-    if (Semver::satisfies($version, '<8.3')) {
-      $common[] = '.eslintrc';
-    }
-    if (Semver::satisfies($version, '>=8.3')) {
-      $common[] = '.eslintrc.json';
-    }
-    if (Semver::satisfies($version, '>=8.5')) {
-      $common[] = '.ht.router.php';
-    }
-
-    sort($common);
-    return $common;
-  }
-
-  /**
-   * Holds default initial files.
-   */
-  protected function getInitialDefault() {
-    return [];
-  }
-
-}
diff --git a/vendor/drupal-composer/drupal-scaffold/src/Plugin.php b/vendor/drupal-composer/drupal-scaffold/src/Plugin.php
deleted file mode 100644
index 7833903f59..0000000000
--- a/vendor/drupal-composer/drupal-scaffold/src/Plugin.php
+++ /dev/null
@@ -1,103 +0,0 @@
-<?php
-
-namespace DrupalComposer\DrupalScaffold;
-
-use Composer\Script\Event;
-use Composer\Plugin\CommandEvent;
-use Composer\Composer;
-use Composer\EventDispatcher\EventSubscriberInterface;
-use Composer\Installer\PackageEvent;
-use Composer\Installer\PackageEvents;
-use Composer\IO\IOInterface;
-use Composer\Plugin\Capable;
-use Composer\Plugin\PluginEvents;
-use Composer\Plugin\PluginInterface;
-use Composer\Script\ScriptEvents;
-
-/**
- * Composer plugin for handling drupal scaffold.
- */
-class Plugin implements PluginInterface, EventSubscriberInterface, Capable {
-
-  /**
-   * @var \DrupalComposer\DrupalScaffold\Handler
-   */
-  protected $handler;
-
-  /**
-   * {@inheritdoc}
-   */
-  public function activate(Composer $composer, IOInterface $io) {
-    // We use a separate PluginScripts object. This way we separate
-    // functionality and also avoid some debug issues with the plugin being
-    // copied on initialisation.
-    // @see \Composer\Plugin\PluginManager::registerPackage()
-    $this->handler = new Handler($composer, $io);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getCapabilities() {
-    return array(
-      'Composer\Plugin\Capability\CommandProvider' => 'DrupalComposer\DrupalScaffold\CommandProvider',
-    );
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function getSubscribedEvents() {
-    return array(
-      PackageEvents::POST_PACKAGE_INSTALL => 'postPackage',
-      PackageEvents::POST_PACKAGE_UPDATE => 'postPackage',
-      ScriptEvents::POST_UPDATE_CMD => 'postCmd',
-      PluginEvents::COMMAND => 'cmdBegins',
-    );
-  }
-
-  /**
-   * Command begins event callback.
-   *
-   * @param \Composer\Plugin\CommandEvent $event
-   */
-  public function cmdBegins(CommandEvent $event) {
-    $this->handler->onCmdBeginsEvent($event);
-  }
-
-  /**
-   * Post package event behaviour.
-   *
-   * @param \Composer\Installer\PackageEvent $event
-   */
-  public function postPackage(PackageEvent $event) {
-    $this->handler->onPostPackageEvent($event);
-  }
-
-  /**
-   * Post command event callback.
-   *
-   * @param \Composer\Script\Event $event
-   */
-  public function postCmd(Event $event) {
-    $this->handler->onPostCmdEvent($event);
-  }
-
-  /**
-   * Script callback for putting in composer scripts to download the
-   * scaffold files.
-   *
-   * @param \Composer\Script\Event $event
-   *
-   * @deprecated since version 2.5.0, to be removed in 3.0. Use the command
-   *   "composer drupal:scaffold" instead.
-   */
-  public static function scaffold(Event $event) {
-    @trigger_error('\DrupalComposer\DrupalScaffold\Plugin::scaffold is deprecated since version 2.5.0 and will be removed in 3.0. Use "composer drupal:scaffold" instead.', E_USER_DEPRECATED);
-    $handler = new Handler($event->getComposer(), $event->getIO());
-    $handler->downloadScaffold();
-    // Generate the autoload.php file after generating the scaffold files.
-    $handler->generateAutoload();
-  }
-
-}
diff --git a/vendor/drupal-composer/drupal-scaffold/src/PrestissimoFileFetcher.php b/vendor/drupal-composer/drupal-scaffold/src/PrestissimoFileFetcher.php
deleted file mode 100644
index 30b7c233c4..0000000000
--- a/vendor/drupal-composer/drupal-scaffold/src/PrestissimoFileFetcher.php
+++ /dev/null
@@ -1,87 +0,0 @@
-<?php
-
-namespace DrupalComposer\DrupalScaffold;
-
-use Composer\Util\RemoteFilesystem;
-use Composer\Config;
-use Composer\IO\IOInterface;
-use Hirak\Prestissimo\CopyRequest;
-use Hirak\Prestissimo\CurlMulti;
-
-/**
- * Extends the default FileFetcher and uses hirak/prestissimo for parallel
- * downloads.
- */
-class PrestissimoFileFetcher extends FileFetcher {
-
-  /**
-   * @var \Composer\Config
-   */
-  protected $config;
-
-  /**
-   * Constructs this PrestissimoFileFetcher object.
-   */
-  public function __construct(RemoteFilesystem $remoteFilesystem, $source, IOInterface $io, $progress = TRUE, Config $config) {
-    parent::__construct($remoteFilesystem, $source, $io, $progress);
-    $this->config = $config;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function fetch($version, $destination, $override) {
-    if (class_exists(CurlMulti::class)) {
-      $this->fetchWithPrestissimo($version, $destination, $override);
-      return;
-    }
-    parent::fetch($version, $destination, $override);
-  }
-
-  /**
-   * Fetch files in parallel.
-   */
-  protected function fetchWithPrestissimo($version, $destination, $override) {
-    $requests = [];
-
-    foreach ($this->filenames as $sourceFilename => $filename) {
-      $target = "$destination/$filename";
-      if ($override || !file_exists($target)) {
-        $url = $this->getUri($sourceFilename, $version);
-        $this->fs->ensureDirectoryExists($destination . '/' . dirname($filename));
-        $requests[] = new CopyRequest($url, $target, FALSE, $this->io, $this->config);
-      }
-    }
-
-    $successCnt = $failureCnt = 0;
-    $errors = [];
-    $totalCnt = count($requests);
-    if ($totalCnt == 0) {
-      return;
-    }
-
-    $multi = new CurlMulti();
-    $multi->setRequests($requests);
-    do {
-      $multi->setupEventLoop();
-      $multi->wait();
-      $result = $multi->getFinishedResults();
-      $successCnt += $result['successCnt'];
-      $failureCnt += $result['failureCnt'];
-      if (isset($result['errors'])) {
-        $errors += $result['errors'];
-      }
-      if ($this->progress) {
-        foreach ($result['urls'] as $url) {
-          $this->io->writeError("  - Downloading <comment>$successCnt</comment>/<comment>$totalCnt</comment>: <info>$url</info>", TRUE);
-        }
-      }
-    } while ($multi->remain());
-
-    $urls = array_keys($errors);
-    if ($urls) {
-      throw new \Exception('Failed to download ' . implode(", ", $urls));
-    }
-  }
-
-}
diff --git a/vendor/drupal-composer/drupal-scaffold/tests/FetcherTest.php b/vendor/drupal-composer/drupal-scaffold/tests/FetcherTest.php
deleted file mode 100644
index ea822f928e..0000000000
--- a/vendor/drupal-composer/drupal-scaffold/tests/FetcherTest.php
+++ /dev/null
@@ -1,79 +0,0 @@
-<?php
-
-namespace DrupalComposer\DrupalScaffold\Tests;
-
-use Composer\IO\NullIO;
-use Composer\Util\Filesystem;
-use Composer\Util\RemoteFilesystem;
-use DrupalComposer\DrupalScaffold\FileFetcher;
-use PHPUnit\Framework\TestCase;
-
-class FetcherTest extends TestCase {
-
-  /**
-   * @var \Composer\Util\Filesystem
-   */
-  protected $fs;
-
-  /**
-   * @var string
-   */
-  protected $tmpDir;
-
-  /**
-   * @var string
-   */
-  protected $rootDir;
-
-  /**
-   * @var string
-   */
-  protected $tmpReleaseTag;
-
-  /**
-   * SetUp test.
-   */
-  public function setUp() {
-    $this->rootDir = realpath(realpath(__DIR__ . '/..'));
-
-    // Prepare temp directory.
-    $this->fs = new Filesystem();
-    $this->tmpDir = realpath(sys_get_temp_dir()) . DIRECTORY_SEPARATOR . 'drupal-scaffold';
-    $this->ensureDirectoryExistsAndClear($this->tmpDir);
-
-    chdir($this->tmpDir);
-  }
-
-  /**
-   * Makes sure the given directory exists and has no content.
-   *
-   * @param string $directory
-   */
-  protected function ensureDirectoryExistsAndClear($directory) {
-    if (is_dir($directory)) {
-      $this->fs->removeDirectory($directory);
-    }
-    mkdir($directory, 0777, TRUE);
-  }
-
-  public function testFetch() {
-    $fetcher = new FileFetcher(new RemoteFilesystem(new NullIO()), 'https://cgit.drupalcode.org/drupal/plain/{path}?h={version}', new NullIO());
-    $fetcher->setFilenames([
-      '.htaccess' => '.htaccess',
-      'sites/default/default.settings.php' => 'sites/default/default.settings.php',
-    ]);
-    $fetcher->fetch('8.1.1', $this->tmpDir, TRUE);
-    $this->assertFileExists($this->tmpDir . '/.htaccess');
-    $this->assertFileExists($this->tmpDir . '/sites/default/default.settings.php');
-  }
-
-  public function testInitialFetch() {
-    $fetcher = new FileFetcher(new RemoteFilesystem(new NullIO()), 'https://cgit.drupalcode.org/drupal/plain/{path}?h={version}', new NullIO());
-    $fetcher->setFilenames([
-      'sites/default/default.settings.php' => 'sites/default/settings.php',
-    ]);
-    $fetcher->fetch('8.1.1', $this->tmpDir, FALSE);
-    $this->assertFileExists($this->tmpDir . '/sites/default/settings.php');
-  }
-
-}
diff --git a/vendor/drupal-composer/drupal-scaffold/tests/PluginTest.php b/vendor/drupal-composer/drupal-scaffold/tests/PluginTest.php
deleted file mode 100644
index a392e060d9..0000000000
--- a/vendor/drupal-composer/drupal-scaffold/tests/PluginTest.php
+++ /dev/null
@@ -1,195 +0,0 @@
-<?php
-
-namespace DrupalComposer\DrupalScaffold\Tests;
-
-use Composer\Util\Filesystem;
-use PHPUnit\Framework\TestCase;
-
-/**
- * Tests composer plugin functionality.
- */
-class PluginTest extends TestCase {
-
-  /**
-   * @var \Composer\Util\Filesystem
-   */
-  protected $fs;
-
-  /**
-   * @var string
-   */
-  protected $tmpDir;
-
-  /**
-   * @var string
-   */
-  protected $rootDir;
-
-  /**
-   * @var string
-   */
-  protected $tmpReleaseTag;
-
-  /**
-   * SetUp test.
-   */
-  public function setUp() {
-    $this->rootDir = realpath(realpath(__DIR__ . '/..'));
-
-    // Prepare temp directory.
-    $this->fs = new Filesystem();
-    $this->tmpDir = realpath(sys_get_temp_dir()) . DIRECTORY_SEPARATOR . 'drupal-scaffold';
-    $this->ensureDirectoryExistsAndClear($this->tmpDir);
-
-    $this->writeTestReleaseTag();
-    $this->writeComposerJSON();
-
-    chdir($this->tmpDir);
-  }
-
-  /**
-   * TearDown.
-   *
-   * @return void
-   */
-  public function tearDown() {
-    $this->fs->removeDirectory($this->tmpDir);
-    $this->git(sprintf('tag -d "%s"', $this->tmpReleaseTag));
-  }
-
-  /**
-   * Tests a simple composer install without core, but adding core later.
-   */
-  public function testComposerInstallAndUpdate() {
-    $exampleScaffoldFile = $this->tmpDir . DIRECTORY_SEPARATOR . 'index.php';
-    $this->assertFileNotExists($exampleScaffoldFile, 'Scaffold file should not be exist.');
-    $this->composer('install --no-dev --prefer-dist');
-    $this->assertFileExists($this->tmpDir . DIRECTORY_SEPARATOR . 'core', 'Drupal core is installed.');
-    $this->assertFileExists($exampleScaffoldFile, 'Scaffold file should be automatically installed.');
-    $this->fs->remove($exampleScaffoldFile);
-    $this->assertFileNotExists($exampleScaffoldFile, 'Scaffold file should not be exist.');
-    $this->composer('drupal:scaffold');
-    $this->assertFileExists($exampleScaffoldFile, 'Scaffold file should be installed by "drupal:scaffold" command.');
-
-    foreach (['8.0.1', '8.1.x-dev', '8.3.0', '8.5.x-dev'] as $version) {
-      // We touch a scaffold file, so we can check the file was modified after
-      // the scaffold update.
-      touch($exampleScaffoldFile);
-      $mtime_touched = filemtime($exampleScaffoldFile);
-      // Requiring a newer version triggers "composer update".
-      $this->composer('require --update-with-dependencies --prefer-dist --update-no-dev drupal/core:"' . $version . '"');
-      clearstatcache();
-      $mtime_after = filemtime($exampleScaffoldFile);
-      $this->assertNotEquals($mtime_after, $mtime_touched, 'Scaffold file was modified by composer update. (' . $version . ')');
-      switch ($version) {
-        case '8.0.1':
-        case '8.1.x-dev':
-          $this->assertFileExists($this->tmpDir . DIRECTORY_SEPARATOR . '.eslintrc');
-          $this->assertFileNotExists($this->tmpDir . DIRECTORY_SEPARATOR . '.eslintrc.json');
-          $this->assertFileNotExists($this->tmpDir . DIRECTORY_SEPARATOR . '.ht.router.php');
-          break;
-
-        case '8.3.0':
-          // Note we don't clean up .eslintrc file.
-          $this->assertFileExists($this->tmpDir . DIRECTORY_SEPARATOR . '.eslintrc');
-          $this->assertFileExists($this->tmpDir . DIRECTORY_SEPARATOR . '.eslintrc.json');
-          $this->assertFileNotExists($this->tmpDir . DIRECTORY_SEPARATOR . '.ht.router.php');
-          break;
-
-        case '8.5.x-dev':
-          $this->assertFileExists($this->tmpDir . DIRECTORY_SEPARATOR . '.eslintrc');
-          $this->assertFileExists($this->tmpDir . DIRECTORY_SEPARATOR . '.eslintrc.json');
-          $this->assertFileExists($this->tmpDir . DIRECTORY_SEPARATOR . '.ht.router.php');
-          break;
-      }
-    }
-
-    // We touch a scaffold file, so we can check the file was modified by the
-    // custom command.
-    file_put_contents($exampleScaffoldFile, 1);
-    $this->composer('drupal:scaffold');
-    $this->assertNotEquals(file_get_contents($exampleScaffoldFile), 1, 'Scaffold file was modified by custom command.');
-  }
-
-  /**
-   * Writes the default composer json to the temp direcoty.
-   */
-  protected function writeComposerJSON() {
-    $json = json_encode($this->composerJSONDefaults(), JSON_PRETTY_PRINT);
-    // Write composer.json.
-    file_put_contents($this->tmpDir . '/composer.json', $json);
-  }
-
-  /**
-   * Writes a tag for the current commit, so we can reference it directly in the
-   * composer.json.
-   */
-  protected function writeTestReleaseTag() {
-    // Tag the current state.
-    $this->tmpReleaseTag = '999.0.' . time();
-    $this->git(sprintf('tag -a "%s" -m "%s"', $this->tmpReleaseTag, 'Tag for testing this exact commit'));
-  }
-
-  /**
-   * Provides the default composer.json data.
-   *
-   * @return array
-   */
-  protected function composerJSONDefaults() {
-    return array(
-      'repositories' => array(
-        array(
-          'type' => 'vcs',
-          'url' => $this->rootDir,
-        ),
-      ),
-      'require' => array(
-        'drupal-composer/drupal-scaffold' => $this->tmpReleaseTag,
-        'composer/installers' => '^1.0.20',
-        'drupal/core' => '8.0.0',
-      ),
-      'minimum-stability' => 'dev',
-    );
-  }
-
-  /**
-   * Wrapper for the composer command.
-   *
-   * @param string $command
-   *   Composer command name, arguments and/or options.
-   */
-  protected function composer($command) {
-    chdir($this->tmpDir);
-    passthru(escapeshellcmd($this->rootDir . '/vendor/bin/composer ' . $command), $exit_code);
-    if ($exit_code !== 0) {
-      throw new \Exception('Composer returned a non-zero exit code');
-    }
-  }
-
-  /**
-   * Wrapper for git command in the root directory.
-   *
-   * @param $command
-   *   Git command name, arguments and/or options.
-   */
-  protected function git($command) {
-    chdir($this->rootDir);
-    passthru(escapeshellcmd('git ' . $command), $exit_code);
-    if ($exit_code !== 0) {
-      throw new \Exception('Git returned a non-zero exit code');
-    }
-  }
-
-  /**
-   * Makes sure the given directory exists and has no content.
-   *
-   * @param string $directory
-   */
-  protected function ensureDirectoryExistsAndClear($directory) {
-    if (is_dir($directory)) {
-      $this->fs->removeDirectory($directory);
-    }
-    mkdir($directory, 0777, TRUE);
-  }
-
-}
diff --git a/vendor/drupal/core-composer-scaffold/AllowedPackages.php b/vendor/drupal/core-composer-scaffold/AllowedPackages.php
new file mode 100644
index 0000000000..481492f009
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/AllowedPackages.php
@@ -0,0 +1,217 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold;
+
+use Composer\Composer;
+use Composer\DependencyResolver\Operation\OperationInterface;
+use Composer\Installer\PackageEvent;
+use Composer\IO\IOInterface;
+use Composer\Package\PackageInterface;
+
+/**
+ * Determine recursively which packages have been allowed to scaffold files.
+ *
+ * If the root-level composer.json allows drupal/core, and drupal/core allows
+ * drupal/assets, then the later package will also implicitly be allowed.
+ *
+ * @internal
+ */
+class AllowedPackages implements PostPackageEventListenerInterface {
+
+  /**
+   * The Composer service.
+   *
+   * @var \Composer\Composer
+   */
+  protected $composer;
+
+  /**
+   * Composer's I/O service.
+   *
+   * @var \Composer\IO\IOInterface
+   */
+  protected $io;
+
+  /**
+   * Manager of the options in the top-level composer.json's 'extra' section.
+   *
+   * @var \Drupal\Composer\Plugin\Scaffold\ManageOptions
+   */
+  protected $manageOptions;
+
+  /**
+   * The list of new packages added by this Composer command.
+   *
+   * @var array
+   */
+  protected $newPackages = [];
+
+  /**
+   * AllowedPackages constructor.
+   *
+   * @param \Composer\Composer $composer
+   *   The composer object.
+   * @param \Composer\IO\IOInterface $io
+   *   IOInterface to write to.
+   * @param \Drupal\Composer\Plugin\Scaffold\ManageOptions $manage_options
+   *   Manager of the options in the top-level composer.json's 'extra' section.
+   */
+  public function __construct(Composer $composer, IOInterface $io, ManageOptions $manage_options) {
+    $this->composer = $composer;
+    $this->io = $io;
+    $this->manageOptions = $manage_options;
+  }
+
+  /**
+   * Gets a list of all packages that are allowed to copy scaffold files.
+   *
+   * We will implicitly allow the projects 'drupal/legacy-scaffold-assets'
+   * and 'drupal/core' to scaffold files, if they are present. Any other
+   * project must be explicitly whitelisted in the top-level composer.json
+   * file in order to be allowed to override scaffold files.
+   * Configuration for packages specified later will override configuration
+   * specified by packages listed earlier. In other words, the last listed
+   * package has the highest priority. The root package will always be returned
+   * at the end of the list.
+   *
+   * @return \Composer\Package\PackageInterface[]
+   *   An array of allowed Composer packages.
+   */
+  public function getAllowedPackages() {
+    $top_level_packages = $this->getTopLevelAllowedPackages();
+    $allowed_packages = $this->recursiveGetAllowedPackages($top_level_packages);
+    // If the root package defines any file mappings, then implicitly add it
+    // to the list of allowed packages. Add it at the end so that it overrides
+    // all the preceding packages.
+    if ($this->manageOptions->getOptions()->hasFileMapping()) {
+      $root_package = $this->composer->getPackage();
+      unset($allowed_packages[$root_package->getName()]);
+      $allowed_packages[$root_package->getName()] = $root_package;
+    }
+    // Handle any newly-added packages that are not already allowed.
+    return $this->evaluateNewPackages($allowed_packages);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function event(PackageEvent $event) {
+    $operation = $event->getOperation();
+    // Determine the package. Later, in evaluateNewPackages(), we will report
+    // which of the newly-installed packages have scaffold operations, and
+    // whether or not they are allowed to scaffold by the allowed-packages
+    // option in the root-level composer.json file.
+    $operationType = $this->getOperationType($operation);
+    $package = $operationType === 'update' ? $operation->getTargetPackage() : $operation->getPackage();
+    if (ScaffoldOptions::hasOptions($package->getExtra())) {
+      $this->newPackages[$package->getName()] = $package;
+    }
+  }
+
+  /**
+   * Gets all packages that are allowed in the top-level composer.json.
+   *
+   * We will implicitly allow the projects 'drupal/legacy-scaffold-assets'
+   * and 'drupal/core' to scaffold files, if they are present. Any other
+   * project must be explicitly whitelisted in the top-level composer.json
+   * file in order to be allowed to override scaffold files.
+   *
+   * @return array
+   *   An array of allowed Composer package names.
+   */
+  protected function getTopLevelAllowedPackages() {
+    $implicit_packages = [
+      'drupal/legacy-scaffold-assets',
+      'drupal/core',
+    ];
+    $top_level_packages = $this->manageOptions->getOptions()->allowedPackages();
+    return array_merge($implicit_packages, $top_level_packages);
+  }
+
+  /**
+   * Builds a name-to-package mapping from a list of package names.
+   *
+   * @param string[] $packages_to_allow
+   *   List of package names to allow.
+   * @param array $allowed_packages
+   *   Mapping of package names to PackageInterface of packages already
+   *   accumulated.
+   *
+   * @return \Composer\Package\PackageInterface[]
+   *   Mapping of package names to PackageInterface in priority order.
+   */
+  protected function recursiveGetAllowedPackages(array $packages_to_allow, array $allowed_packages = []) {
+    foreach ($packages_to_allow as $name) {
+      $package = $this->getPackage($name);
+      if ($package instanceof PackageInterface && !isset($allowed_packages[$name])) {
+        $allowed_packages[$name] = $package;
+        $package_options = $this->manageOptions->packageOptions($package);
+        $allowed_packages = $this->recursiveGetAllowedPackages($package_options->allowedPackages(), $allowed_packages);
+      }
+    }
+    return $allowed_packages;
+  }
+
+  /**
+   * Evaluates newly-added packages and see if they are already allowed.
+   *
+   * For now we will only emit warnings if they are not.
+   *
+   * @param array $allowed_packages
+   *   Mapping of package names to PackageInterface of packages already
+   *   accumulated.
+   *
+   * @return \Composer\Package\PackageInterface[]
+   *   Mapping of package names to PackageInterface in priority order.
+   */
+  protected function evaluateNewPackages(array $allowed_packages) {
+    foreach ($this->newPackages as $name => $newPackage) {
+      if (!array_key_exists($name, $allowed_packages)) {
+        $this->io->write("Not scaffolding files for <comment>{$name}</comment>, because it is not listed in the element 'extra.drupal-scaffold.allowed-packages' in the root-level composer.json file.");
+      }
+      else {
+        $this->io->write("Package <comment>{$name}</comment> has scaffold operations, and is already allowed in the root-level composer.json file.");
+      }
+    }
+    // @todo We could prompt the user and ask if they wish to allow a
+    // newly-added package. This might be useful if, for example, the user
+    // might wish to require an installation profile that contains scaffolded
+    // assets. For more information, see:
+    // https://www.drupal.org/project/drupal/issues/3064990
+    return $allowed_packages;
+  }
+
+  /**
+   * Determine the type of the provided operation.
+   *
+   * Adjusts API used for Composer 1 or Composer 2.
+   *
+   * @param \Composer\DependencyResolver\Operation\OperationInterface $operation
+   *   The operation object.
+   *
+   * @return string
+   *   The operation type.
+   */
+  protected function getOperationType(OperationInterface $operation) {
+    // Use Composer 2 method.
+    if (method_exists($operation, 'getOperationType')) {
+      return $operation->getOperationType();
+    }
+    // Fallback to Composer 1 method.
+    return $operation->getJobType();
+  }
+
+  /**
+   * Retrieves a package from the current composer process.
+   *
+   * @param string $name
+   *   Name of the package to get from the current composer installation.
+   *
+   * @return \Composer\Package\PackageInterface|null
+   *   The Composer package.
+   */
+  protected function getPackage($name) {
+    return $this->composer->getRepositoryManager()->getLocalRepository()->findPackage($name, '*');
+  }
+
+}
diff --git a/vendor/drupal-composer/drupal-scaffold/src/CommandProvider.php b/vendor/drupal/core-composer-scaffold/CommandProvider.php
similarity index 72%
rename from vendor/drupal-composer/drupal-scaffold/src/CommandProvider.php
rename to vendor/drupal/core-composer-scaffold/CommandProvider.php
index 327a7f229e..6597039399 100644
--- a/vendor/drupal-composer/drupal-scaffold/src/CommandProvider.php
+++ b/vendor/drupal/core-composer-scaffold/CommandProvider.php
@@ -1,11 +1,13 @@
 <?php
 
-namespace DrupalComposer\DrupalScaffold;
+namespace Drupal\Composer\Plugin\Scaffold;
 
 use Composer\Plugin\Capability\CommandProvider as CommandProviderCapability;
 
 /**
  * List of all commands provided by this package.
+ *
+ * @internal
  */
 class CommandProvider implements CommandProviderCapability {
 
@@ -13,9 +15,7 @@ class CommandProvider implements CommandProviderCapability {
    * {@inheritdoc}
    */
   public function getCommands() {
-    return [
-      new DrupalScaffoldCommand(),
-    ];
+    return [new ComposerScaffoldCommand()];
   }
 
 }
diff --git a/vendor/drupal/core-composer-scaffold/ComposerScaffoldCommand.php b/vendor/drupal/core-composer-scaffold/ComposerScaffoldCommand.php
new file mode 100644
index 0000000000..6de8aa4bf8
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/ComposerScaffoldCommand.php
@@ -0,0 +1,56 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold;
+
+use Composer\Command\BaseCommand;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+/**
+ * The "drupal:scaffold" command class.
+ *
+ * Manually run the scaffold operation that normally happens after
+ * 'composer install'.
+ *
+ * @internal
+ */
+class ComposerScaffoldCommand extends BaseCommand {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function configure() {
+    $this
+      ->setName('drupal:scaffold')
+      ->setAliases(['scaffold'])
+      ->setDescription('Update the Drupal scaffold files.')
+      ->setHelp(
+        <<<EOT
+The <info>drupal:scaffold</info> command places the scaffold files in their
+respective locations according to the layout stipulated in the composer.json
+file.
+
+<info>php composer.phar drupal:scaffold</info>
+
+It is usually not necessary to call <info>drupal:scaffold</info> manually,
+because it is called automatically as needed, e.g. after an <info>install</info>
+or <info>update</info> command. Note, though, that only packages explicitly
+allowed to scaffold in the top-level composer.json will be processed by this
+command.
+
+For more information, see https://www.drupal.org/docs/develop/using-composer/using-drupals-composer-scaffold.
+EOT
+            );
+
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function execute(InputInterface $input, OutputInterface $output) {
+    $handler = new Handler($this->getComposer(), $this->getIO());
+    $handler->scaffold();
+    return 0;
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/GenerateAutoloadReferenceFile.php b/vendor/drupal/core-composer-scaffold/GenerateAutoloadReferenceFile.php
new file mode 100644
index 0000000000..4a57638826
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/GenerateAutoloadReferenceFile.php
@@ -0,0 +1,124 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold;
+
+use Composer\IO\IOInterface;
+use Composer\Util\Filesystem;
+use Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldResult;
+
+/**
+ * Generates an 'autoload.php' that includes the autoloader created by Composer.
+ *
+ * @internal
+ */
+final class GenerateAutoloadReferenceFile {
+
+  /**
+   * This class provides only static methods.
+   */
+  private function __construct() {
+  }
+
+  /**
+   * Generates the autoload file at the specified location.
+   *
+   * This only writes a bit of PHP that includes the autoload file that
+   * Composer generated. Drupal does this so that it can guarantee that there
+   * will always be an `autoload.php` file in a well-known location.
+   *
+   * @param \Composer\IO\IOInterface $io
+   *   IOInterface to write to.
+   * @param string $package_name
+   *   The name of the package defining the autoload file (the root package).
+   * @param string $web_root
+   *   The path to the web root.
+   * @param string $vendor
+   *   The path to the vendor directory.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldResult
+   *   The result of the autoload file generation.
+   */
+  public static function generateAutoload(IOInterface $io, $package_name, $web_root, $vendor) {
+    $autoload_path = static::autoloadPath($package_name, $web_root);
+    // Calculate the relative path from the webroot (location of the project
+    // autoload.php) to the vendor directory.
+    $fs = new Filesystem();
+    $relative_autoload_path = $fs->findShortestPath($autoload_path->fullPath(), "$vendor/autoload.php");
+    file_put_contents($autoload_path->fullPath(), static::autoLoadContents($relative_autoload_path));
+    return new ScaffoldResult($autoload_path, TRUE);
+  }
+
+  /**
+   * Determines whether or not the autoload file has been committed.
+   *
+   * @param \Composer\IO\IOInterface $io
+   *   IOInterface to write to.
+   * @param string $package_name
+   *   The name of the package defining the autoload file (the root package).
+   * @param string $web_root
+   *   The path to the web root.
+   *
+   * @return bool
+   *   True if autoload.php file exists and has been committed to the repository
+   */
+  public static function autoloadFileCommitted(IOInterface $io, $package_name, $web_root) {
+    $autoload_path = static::autoloadPath($package_name, $web_root);
+    $autoload_file = $autoload_path->fullPath();
+    $location = dirname($autoload_file);
+    if (!file_exists($autoload_file)) {
+      return FALSE;
+    }
+    return Git::checkTracked($io, $autoload_file, $location);
+  }
+
+  /**
+   * Generates a scaffold file path object for the autoload file.
+   *
+   * @param string $package_name
+   *   The name of the package defining the autoload file (the root package).
+   * @param string $web_root
+   *   The path to the web root.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath
+   *   Object wrapping the relative and absolute path to the destination file.
+   */
+  protected static function autoloadPath($package_name, $web_root) {
+    $rel_path = 'autoload.php';
+    $dest_rel_path = '[web-root]/' . $rel_path;
+    $dest_full_path = $web_root . '/' . $rel_path;
+    return new ScaffoldFilePath('autoload', $package_name, $dest_rel_path, $dest_full_path);
+  }
+
+  /**
+   * Builds the contents of the autoload file.
+   *
+   * @param string $relative_autoload_path
+   *   The relative path to the autoloader in vendor.
+   *
+   * @return string
+   *   Return the contents for the autoload.php.
+   */
+  protected static function autoLoadContents($relative_autoload_path) {
+    $relative_autoload_path = preg_replace('#^\./#', '', $relative_autoload_path);
+    return <<<EOF
+<?php
+
+/**
+ * @file
+ * Includes the autoloader created by Composer.
+ *
+ * This file was generated by drupal-scaffold.
+ *
+ * @see composer.json
+ * @see index.php
+ * @see core/install.php
+ * @see core/rebuild.php
+ * @see core/modules/statistics/statistics.php
+ */
+
+return require __DIR__ . '/{$relative_autoload_path}';
+
+EOF;
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/Git.php b/vendor/drupal/core-composer-scaffold/Git.php
new file mode 100644
index 0000000000..015e472eb2
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/Git.php
@@ -0,0 +1,72 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold;
+
+use Composer\IO\IOInterface;
+use Composer\Util\ProcessExecutor;
+
+/**
+ * Provide some Git utility operations
+ *
+ * @internal
+ */
+class Git {
+
+  /**
+   * This class provides only static methods.
+   */
+  private function __construct() {
+  }
+
+  /**
+   * Determines whether the specified scaffold file is already ignored.
+   *
+   * @param string $path
+   *   Path to scaffold file to check.
+   * @param string $dir
+   *   Base directory for git process.
+   *
+   * @return bool
+   *   Whether the specified file is already ignored or not (TRUE if ignored).
+   */
+  public static function checkIgnore(IOInterface $io, $path, $dir = NULL) {
+    $process = new ProcessExecutor($io);
+    $output = '';
+    $exitCode = $process->execute('git check-ignore ' . $process->escape($path), $output, $dir);
+    return $exitCode == 0;
+  }
+
+  /**
+   * Determines whether the specified scaffold file is tracked by git.
+   *
+   * @param string $path
+   *   Path to scaffold file to check.
+   * @param string $dir
+   *   Base directory for git process.
+   *
+   * @return bool
+   *   Whether the specified file is already tracked or not (TRUE if tracked).
+   */
+  public static function checkTracked(IOInterface $io, $path, $dir = NULL) {
+    $process = new ProcessExecutor($io);
+    $output = '';
+    $exitCode = $process->execute('git ls-files --error-unmatch ' . $process->escape($path), $output, $dir);
+    return $exitCode == 0;
+  }
+
+  /**
+   * Checks to see if the project root dir is in a git repository.
+   *
+   * @param string $dir
+   *   Base directory for git process.
+   * @return bool
+   *   True if this is a repository.
+   */
+  public static function isRepository(IOInterface $io, $dir = NULL) {
+    $process = new ProcessExecutor($io);
+    $output = '';
+    $exitCode = $process->execute('git rev-parse --show-toplevel', $output, $dir);
+    return $exitCode == 0;
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/Handler.php b/vendor/drupal/core-composer-scaffold/Handler.php
new file mode 100644
index 0000000000..3e51f909a3
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/Handler.php
@@ -0,0 +1,249 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold;
+
+use Composer\Composer;
+use Composer\EventDispatcher\EventDispatcher;
+use Composer\Installer\PackageEvent;
+use Composer\IO\IOInterface;
+use Composer\Package\PackageInterface;
+use Composer\Util\Filesystem;
+use Drupal\Composer\Plugin\Scaffold\Operations\OperationData;
+use Drupal\Composer\Plugin\Scaffold\Operations\OperationFactory;
+use Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldFileCollection;
+
+/**
+ * Core class of the plugin.
+ *
+ * Contains the primary logic which determines the files to be fetched and
+ * processed.
+ *
+ * @internal
+ */
+class Handler {
+
+  /**
+   * Composer hook called before scaffolding begins.
+   */
+  const PRE_DRUPAL_SCAFFOLD_CMD = 'pre-drupal-scaffold-cmd';
+
+  /**
+   * Composer hook called after scaffolding completes.
+   */
+  const POST_DRUPAL_SCAFFOLD_CMD = 'post-drupal-scaffold-cmd';
+
+  /**
+   * The Composer service.
+   *
+   * @var \Composer\Composer
+   */
+  protected $composer;
+
+  /**
+   * Composer's I/O service.
+   *
+   * @var \Composer\IO\IOInterface
+   */
+  protected $io;
+
+  /**
+   * The scaffold options in the top-level composer.json's 'extra' section.
+   *
+   * @var \Drupal\Composer\Plugin\Scaffold\ManageOptions
+   */
+  protected $manageOptions;
+
+  /**
+   * The manager that keeps track of which packages are allowed to scaffold.
+   *
+   * @var \Drupal\Composer\Plugin\Scaffold\AllowedPackages
+   */
+  protected $manageAllowedPackages;
+
+  /**
+   * The list of listeners that are notified after a package event.
+   *
+   * @var \Drupal\Composer\Plugin\Scaffold\PostPackageEventListenerInterface[]
+   */
+  protected $postPackageListeners = [];
+
+  /**
+   * Handler constructor.
+   *
+   * @param \Composer\Composer $composer
+   *   The Composer service.
+   * @param \Composer\IO\IOInterface $io
+   *   The Composer I/O service.
+   */
+  public function __construct(Composer $composer, IOInterface $io) {
+    $this->composer = $composer;
+    $this->io = $io;
+    $this->manageOptions = new ManageOptions($composer);
+    $this->manageAllowedPackages = new AllowedPackages($composer, $io, $this->manageOptions);
+  }
+
+  /**
+   * Registers post-package events if the 'require' command was called.
+   */
+  public function requireWasCalled() {
+    // In order to differentiate between post-package events called after
+    // 'composer require' vs. the same events called at other times, we will
+    // only install our handler when a 'require' event is detected.
+    $this->postPackageListeners[] = $this->manageAllowedPackages;
+  }
+
+  /**
+   * Posts package command event.
+   *
+   * We want to detect packages 'require'd that have scaffold files, but are not
+   * yet allowed in the top-level composer.json file.
+   *
+   * @param \Composer\Installer\PackageEvent $event
+   *   Composer package event sent on install/update/remove.
+   */
+  public function onPostPackageEvent(PackageEvent $event) {
+    foreach ($this->postPackageListeners as $listener) {
+      $listener->event($event);
+    }
+  }
+
+  /**
+   * Creates scaffold operation objects for all items in the file mappings.
+   *
+   * @param \Composer\Package\PackageInterface $package
+   *   The package that relative paths will be relative from.
+   * @param array $package_file_mappings
+   *   The package file mappings array keyed by destination path and the values
+   *   are operation metadata arrays.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface[]
+   *   A list of scaffolding operation objects
+   */
+  protected function createScaffoldOperations(PackageInterface $package, array $package_file_mappings) {
+    $scaffold_op_factory = new OperationFactory($this->composer);
+    $scaffold_ops = [];
+    foreach ($package_file_mappings as $dest_rel_path => $data) {
+      $operation_data = new OperationData($dest_rel_path, $data);
+      $scaffold_ops[$dest_rel_path] = $scaffold_op_factory->create($package, $operation_data);
+    }
+    return $scaffold_ops;
+  }
+
+  /**
+   * Copies all scaffold files from source to destination.
+   */
+  public function scaffold() {
+    // Recursively get the list of allowed packages. Only allowed packages
+    // may declare scaffold files. Note that the top-level composer.json file
+    // is implicitly allowed.
+    $allowed_packages = $this->manageAllowedPackages->getAllowedPackages();
+    if (empty($allowed_packages)) {
+      $this->io->write("Nothing scaffolded because no packages are allowed in the top-level composer.json file.");
+      return;
+    }
+
+    // Call any pre-scaffold scripts that may be defined.
+    $dispatcher = new EventDispatcher($this->composer, $this->io);
+    $dispatcher->dispatch(self::PRE_DRUPAL_SCAFFOLD_CMD);
+
+    // Fetch the list of file mappings from each allowed package and normalize
+    // them.
+    $file_mappings = $this->getFileMappingsFromPackages($allowed_packages);
+
+    $location_replacements = $this->manageOptions->getLocationReplacements();
+    $scaffold_options = $this->manageOptions->getOptions();
+
+    // Create a collection of scaffolded files to process. This determines which
+    // take priority and which are combined.
+    $scaffold_files = new ScaffoldFileCollection($file_mappings, $location_replacements);
+
+    // Get the scaffold files whose contents on disk match what we are about to
+    // write. We can remove these from consideration, as rewriting would be a
+    // no-op.
+    $unchanged = $scaffold_files->checkUnchanged();
+    $scaffold_files->filterFiles($unchanged);
+
+    // Process the list of scaffolded files.
+    $scaffold_results = $scaffold_files->processScaffoldFiles($this->io, $scaffold_options);
+
+    // Generate an autoload file in the document root that includes the
+    // autoload.php file in the vendor directory, wherever that is. Drupal
+    // requires this in order to easily locate relocated vendor dirs.
+    $web_root = $this->manageOptions->getOptions()->getLocation('web-root');
+    if (!GenerateAutoloadReferenceFile::autoloadFileCommitted($this->io, $this->rootPackageName(), $web_root)) {
+      $scaffold_results[] = GenerateAutoloadReferenceFile::generateAutoload($this->io, $this->rootPackageName(), $web_root, $this->getVendorPath());
+    }
+
+    // Add the managed scaffold files to .gitignore if applicable.
+    $gitIgnoreManager = new ManageGitIgnore($this->io, getcwd());
+    $gitIgnoreManager->manageIgnored($scaffold_results, $scaffold_options);
+
+    // Call post-scaffold scripts.
+    $dispatcher->dispatch(self::POST_DRUPAL_SCAFFOLD_CMD);
+  }
+
+  /**
+   * Gets the path to the 'vendor' directory.
+   *
+   * @return string
+   *   The file path of the vendor directory.
+   */
+  protected function getVendorPath() {
+    $vendor_dir = $this->composer->getConfig()->get('vendor-dir');
+    $filesystem = new Filesystem();
+    return $filesystem->normalizePath(realpath($vendor_dir));
+  }
+
+  /**
+   * Gets a consolidated list of file mappings from all allowed packages.
+   *
+   * @param \Composer\Package\Package[] $allowed_packages
+   *   A multidimensional array of file mappings, as returned by
+   *   self::getAllowedPackages().
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface[][]
+   *   An array of destination paths => scaffold operation objects.
+   */
+  protected function getFileMappingsFromPackages(array $allowed_packages) {
+    $file_mappings = [];
+    foreach ($allowed_packages as $package_name => $package) {
+      $file_mappings[$package_name] = $this->getPackageFileMappings($package);
+    }
+    return $file_mappings;
+  }
+
+  /**
+   * Gets the array of file mappings provided by a given package.
+   *
+   * @param \Composer\Package\PackageInterface $package
+   *   The Composer package from which to get the file mappings.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface[]
+   *   An array of destination paths => scaffold operation objects.
+   */
+  protected function getPackageFileMappings(PackageInterface $package) {
+    $options = $this->manageOptions->packageOptions($package);
+    if ($options->hasFileMapping()) {
+      return $this->createScaffoldOperations($package, $options->fileMapping());
+    }
+    // Warn the user if they allow a package that does not have any scaffold
+    // files. We will ignore drupal/core, though, as it is implicitly allowed,
+    // but might not have scaffold files (version 8.7.x and earlier).
+    if (!$options->hasAllowedPackages() && ($package->getName() != 'drupal/core')) {
+      $this->io->writeError("The allowed package {$package->getName()} does not provide a file mapping for Composer Scaffold.");
+    }
+    return [];
+  }
+
+  /**
+   * Gets the root package name.
+   *
+   * @return string
+   *   The package name of the root project
+   */
+  protected function rootPackageName() {
+    $root_package = $this->composer->getPackage();
+    return $root_package->getName();
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/Interpolator.php b/vendor/drupal/core-composer-scaffold/Interpolator.php
new file mode 100644
index 0000000000..c9f6a4fedb
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/Interpolator.php
@@ -0,0 +1,157 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold;
+
+/**
+ * Injects config values from an associative array into a string.
+ *
+ * @internal
+ */
+class Interpolator {
+
+  /**
+   * The character sequence that identifies the start of a token.
+   *
+   * @var string
+   */
+  protected $startToken;
+
+  /**
+   * The character sequence that identifies the end of a token.
+   *
+   * @var string
+   */
+  protected $endToken;
+
+  /**
+   * The associative array of replacements.
+   *
+   * @var array
+   */
+  protected $data = [];
+
+  /**
+   * Interpolator constructor.
+   *
+   * @param string $start_token
+   *   The start marker for a token, e.g. '['.
+   * @param string $end_token
+   *   The end marker for a token, e.g. ']'.
+   */
+  public function __construct($start_token = '\\[', $end_token = '\\]') {
+    $this->startToken = $start_token;
+    $this->endToken = $end_token;
+  }
+
+  /**
+   * Sets the data set to use when interpolating.
+   *
+   * @param array $data
+   *   The key:value pairs to use when interpolating.
+   *
+   * @return $this
+   */
+  public function setData(array $data) {
+    $this->data = $data;
+    return $this;
+  }
+
+  /**
+   * Adds to the data set to use when interpolating.
+   *
+   * @param array $data
+   *   The key:value pairs to use when interpolating.
+   *
+   * @return $this
+   */
+  public function addData(array $data) {
+    $this->data = array_merge($this->data, $data);
+    return $this;
+  }
+
+  /**
+   * Replaces tokens in a string with values from an associative array.
+   *
+   * Tokens are surrounded by delimiters, e.g. square brackets "[key]". The
+   * characters that surround the key may be defined when the Interpolator is
+   * constructed.
+   *
+   * Example:
+   * If the message is 'Hello, [user.name]', then the value of the user.name
+   * item is fetched from the array, and the token [user.name] is replaced with
+   * the result.
+   *
+   * @param string $message
+   *   Message containing tokens to be replaced.
+   * @param array $extra
+   *   Data to use for interpolation in addition to whatever was provided to
+   *   self::setData().
+   * @param string|bool $default
+   *   (optional) The value to substitute for tokens that are not found in the
+   *   data. If FALSE, then missing tokens are not replaced. Defaults to an
+   *   empty string.
+   *
+   * @return string
+   *   The message after replacements have been made.
+   */
+  public function interpolate($message, array $extra = [], $default = '') {
+    $data = $extra + $this->data;
+    $replacements = $this->replacements($message, $data, $default);
+    return strtr($message, $replacements);
+  }
+
+  /**
+   * Finds the tokens that exist in a message and builds a replacement array.
+   *
+   * All of the replacements in the data array are looked up given the token
+   * keys from the provided message. Keys that do not exist in the configuration
+   * are replaced with the default value.
+   *
+   * @param string $message
+   *   String with tokens.
+   * @param array $data
+   *   Data to use for interpolation.
+   * @param string $default
+   *   (optional) The value to substitute for tokens that are not found in the
+   *   data. If FALSE, then missing tokens are not replaced. Defaults to an
+   *   empty string.
+   *
+   * @return string[]
+   *   An array of replacements to make. Keyed by tokens and the replacements
+   *   are the values.
+   */
+  protected function replacements($message, array $data, $default = '') {
+    $tokens = $this->findTokens($message);
+    $replacements = [];
+    foreach ($tokens as $sourceText => $key) {
+      $replacement_text = array_key_exists($key, $data) ? $data[$key] : $default;
+      if ($replacement_text !== FALSE) {
+        $replacements[$sourceText] = $replacement_text;
+      }
+    }
+    return $replacements;
+  }
+
+  /**
+   * Finds all of the tokens in the provided message.
+   *
+   * @param string $message
+   *   String with tokens.
+   *
+   * @return string[]
+   *   map of token to key, e.g. {{key}} => key
+   */
+  protected function findTokens($message) {
+    $reg_ex = '#' . $this->startToken . '([a-zA-Z0-9._-]+)' . $this->endToken . '#';
+    if (!preg_match_all($reg_ex, $message, $matches, PREG_SET_ORDER)) {
+      return [];
+    }
+    $tokens = [];
+    foreach ($matches as $matchSet) {
+      list($sourceText, $key) = $matchSet;
+      $tokens[$sourceText] = $key;
+    }
+    return $tokens;
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/LICENSE.txt b/vendor/drupal/core-composer-scaffold/LICENSE.txt
new file mode 100644
index 0000000000..94fb84639c
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/LICENSE.txt
@@ -0,0 +1,339 @@
+        GNU GENERAL PUBLIC LICENSE
+           Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+          Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+        GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+          NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+         END OF TERMS AND CONDITIONS
+
+      How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/vendor/drupal/core-composer-scaffold/ManageGitIgnore.php b/vendor/drupal/core-composer-scaffold/ManageGitIgnore.php
new file mode 100644
index 0000000000..524cb2ff60
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/ManageGitIgnore.php
@@ -0,0 +1,125 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold;
+
+use Composer\IO\IOInterface;
+
+/**
+ * Manage the .gitignore file.
+ *
+ * @internal
+ */
+class ManageGitIgnore {
+
+  /**
+   * Composer's I/O service.
+   *
+   * @var \Composer\IO\IOInterface
+   */
+  protected $io;
+
+  /**
+   * The directory where the project is located.
+   *
+   * @var string
+   */
+  protected $dir;
+
+  /**
+   * ManageGitIgnore constructor.
+   *
+   * @param string $dir
+   *   The directory where the project is located.
+   */
+  public function __construct(IOInterface $io, $dir) {
+    $this->io = $io;
+    $this->dir = $dir;
+  }
+
+  /**
+   * Manages gitignore files.
+   *
+   * @param \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldResult[] $files
+   *   A list of scaffold results, each of which holds a path and whether
+   *   or not that file is managed.
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldOptions $options
+   *   Configuration options from the composer.json extras section.
+   */
+  public function manageIgnored(array $files, ScaffoldOptions $options) {
+    if (!$this->managementOfGitIgnoreEnabled($options)) {
+      return;
+    }
+
+    // Accumulate entries to add to .gitignore, sorted into buckets based on the
+    // location of the .gitignore file the entry should be added to.
+    $add_to_git_ignore = [];
+    foreach ($files as $scaffoldResult) {
+      $path = $scaffoldResult->destination()->fullPath();
+      $is_ignored = Git::checkIgnore($this->io, $path, $this->dir);
+      if (!$is_ignored) {
+        $is_tracked = Git::checkTracked($this->io, $path, $this->dir);
+        if (!$is_tracked && $scaffoldResult->isManaged()) {
+          $dir = realpath(dirname($path));
+          $name = basename($path);
+          $add_to_git_ignore[$dir][] = '/' . $name;
+        }
+      }
+    }
+    // Write out the .gitignore files one at a time.
+    foreach ($add_to_git_ignore as $dir => $entries) {
+      $this->addToGitIgnore($dir, $entries);
+    }
+  }
+
+  /**
+   * Determines whether we should manage gitignore files.
+   *
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldOptions $options
+   *   Configuration options from the composer.json extras section.
+   *
+   * @return bool
+   *   Whether or not gitignore files should be managed.
+   */
+  protected function managementOfGitIgnoreEnabled(ScaffoldOptions $options) {
+    // If the composer.json stipulates whether gitignore is managed or not, then
+    // follow its recommendation.
+    if ($options->hasGitIgnore()) {
+      return $options->gitIgnore();
+    }
+
+    // Do not manage .gitignore if there is no repository here.
+    if (!Git::isRepository($this->io, $this->dir)) {
+      return FALSE;
+    }
+
+    // If the composer.json did not specify whether or not .gitignore files
+    // should be managed, then manage them if the vendor directory is ignored.
+    return Git::checkIgnore($this->io, 'vendor', $this->dir);
+  }
+
+  /**
+   * Adds a set of entries to the specified .gitignore file.
+   *
+   * @param string $dir
+   *   Path to directory where gitignore should be written.
+   * @param string[] $entries
+   *   Entries to write to .gitignore file.
+   */
+  protected function addToGitIgnore($dir, array $entries) {
+    sort($entries);
+    $git_ignore_path = $dir . '/.gitignore';
+    $contents = '';
+
+    // Appending to existing .gitignore files.
+    if (file_exists($git_ignore_path)) {
+      $contents = file_get_contents($git_ignore_path);
+      if (!empty($contents) && substr($contents, -1) != "\n") {
+        $contents .= "\n";
+      }
+    }
+
+    $contents .= implode("\n", $entries);
+    file_put_contents($git_ignore_path, $contents);
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/ManageOptions.php b/vendor/drupal/core-composer-scaffold/ManageOptions.php
new file mode 100644
index 0000000000..56cb1a0a1a
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/ManageOptions.php
@@ -0,0 +1,92 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold;
+
+use Composer\Composer;
+use Composer\Package\PackageInterface;
+use Composer\Util\Filesystem;
+
+/**
+ * Per-project options from the 'extras' section of the composer.json file.
+ *
+ * Projects that describe scaffold files do so via their scaffold options.
+ * This data is pulled from the 'drupal-scaffold' portion of the extras
+ * section of the project data.
+ *
+ * @internal
+ */
+class ManageOptions {
+
+  /**
+   * The Composer service.
+   *
+   * @var \Composer\Composer
+   */
+  protected $composer;
+
+  /**
+   * ManageOptions constructor.
+   *
+   * @param \Composer\Composer $composer
+   *   The Composer service.
+   */
+  public function __construct(Composer $composer) {
+    $this->composer = $composer;
+  }
+
+  /**
+   * Gets the root-level scaffold options for this project.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\ScaffoldOptions
+   *   The scaffold options object.
+   */
+  public function getOptions() {
+    return $this->packageOptions($this->composer->getPackage());
+  }
+
+  /**
+   * Gets the scaffold options for the stipulated project.
+   *
+   * @param \Composer\Package\PackageInterface $package
+   *   The package to fetch the scaffold options from.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\ScaffoldOptions
+   *   The scaffold options object.
+   */
+  public function packageOptions(PackageInterface $package) {
+    return ScaffoldOptions::create($package->getExtra());
+  }
+
+  /**
+   * Creates an interpolator for the 'locations' element.
+   *
+   * The interpolator returned will replace a path string with the tokens
+   * defined in the 'locations' element.
+   *
+   * Note that only the root package may define locations.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Interpolator
+   *   Interpolator that will do replacements in a string using tokens in
+   *   'locations' element.
+   */
+  public function getLocationReplacements() {
+    return (new Interpolator())->setData($this->ensureLocations());
+  }
+
+  /**
+   * Ensures that all of the locations defined in the scaffold files exist.
+   *
+   * Create them on the filesystem if they do not.
+   */
+  protected function ensureLocations() {
+    $fs = new Filesystem();
+    $locations = $this->getOptions()->locations() + ['web_root' => './'];
+    $locations = array_map(function ($location) use ($fs) {
+      $fs->ensureDirectoryExists($location);
+      $location = realpath($location);
+      return $location;
+    }, $locations);
+    return $locations;
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/Operations/AbstractOperation.php b/vendor/drupal/core-composer-scaffold/Operations/AbstractOperation.php
new file mode 100644
index 0000000000..a2a9945328
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/Operations/AbstractOperation.php
@@ -0,0 +1,53 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold\Operations;
+
+use Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath;
+
+/**
+ * Provides default behaviors for operations.
+ *
+ * @internal
+ */
+abstract class AbstractOperation implements OperationInterface {
+
+  /**
+   * Cached contents of scaffold file to be written to disk.
+   *
+   * @var string
+   */
+  protected $contents;
+
+  /**
+   * {@inheritdoc}
+   */
+  final public function contents() {
+    if (!isset($this->contents)) {
+      $this->contents = $this->generateContents();
+    }
+    return $this->contents;
+  }
+
+  /**
+   * Load the scaffold contents or otherwise generate what is needed.
+   *
+   * @return string
+   *   The contents of the scaffold file.
+   */
+  abstract protected function generateContents();
+
+  /**
+   * {@inheritdoc}
+   */
+  public function scaffoldOverExistingTarget(OperationInterface $existing_target) {
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function scaffoldAtNewLocation(ScaffoldFilePath $destination) {
+    return $this;
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/Operations/AppendOp.php b/vendor/drupal/core-composer-scaffold/Operations/AppendOp.php
new file mode 100644
index 0000000000..0e5b51023a
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/Operations/AppendOp.php
@@ -0,0 +1,206 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold\Operations;
+
+use Composer\IO\IOInterface;
+use Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath;
+use Drupal\Composer\Plugin\Scaffold\ScaffoldOptions;
+
+/**
+ * Scaffold operation to add to the beginning and/or end of a scaffold file.
+ *
+ * @internal
+ */
+class AppendOp extends AbstractOperation {
+
+  /**
+   * Identifies Append operations.
+   */
+  const ID = 'append';
+
+  /**
+   * Path to the source file to prepend, if any.
+   *
+   * @var \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath
+   */
+  protected $prepend;
+
+  /**
+   * Path to the source file to append, if any.
+   *
+   * @var \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath
+   */
+  protected $append;
+
+  /**
+   * Path to the default data to use when appending to an empty file.
+   *
+   * @var \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath
+   */
+  protected $default;
+
+  /**
+   * An indicator of whether the file we are appending to is managed or not.
+   */
+  protected $managed;
+
+  /**
+   * An indicator of whether we are allowed to append to a non-scaffolded file.
+   */
+  protected $forceAppend;
+
+  /**
+   * The contents from the file that we are prepending / appending to.
+   *
+   * @var string
+   */
+  protected $originalContents;
+
+  /**
+   * Constructs an AppendOp.
+   *
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $prepend_path
+   *   The relative path to the prepend file.
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $append_path
+   *   The relative path to the append file.
+   * @param bool $force_append
+   *   TRUE if is okay to append to a file that was not scaffolded.
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $default_path
+   *   The relative path to the default data.
+   */
+  public function __construct(ScaffoldFilePath $prepend_path = NULL, ScaffoldFilePath $append_path = NULL, $force_append = FALSE, ScaffoldFilePath $default_path = NULL) {
+    $this->forceAppend = $force_append;
+    $this->prepend = $prepend_path;
+    $this->append = $append_path;
+    $this->default = $default_path;
+    $this->managed = TRUE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function generateContents() {
+    // Fetch the prepend contents, if provided.
+    $prepend_contents = '';
+    if (!empty($this->prepend)) {
+      $prepend_contents = file_get_contents($this->prepend->fullPath()) . "\n";
+    }
+    // Fetch the append contents, if provided.
+    $append_contents = '';
+    if (!empty($this->append)) {
+      $append_contents = "\n" . file_get_contents($this->append->fullPath());
+    }
+
+    // Get the original contents, or the default data if the original is empty.
+    $original_contents = $this->originalContents;
+    if (empty($original_contents) && !empty($this->default)) {
+      $original_contents = file_get_contents($this->default->fullPath());
+    }
+
+    // Attach it all together.
+    return $prepend_contents . $original_contents . $append_contents;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function process(ScaffoldFilePath $destination, IOInterface $io, ScaffoldOptions $options) {
+    $destination_path = $destination->fullPath();
+    $interpolator = $destination->getInterpolator();
+
+    // Be extra-noisy of creating a new file or appending to a non-scaffold
+    // file. Note that if the file already has the append contents, then the
+    // OperationFactory will make a SkipOp instead, and we will not get here.
+    if (!$this->managed) {
+      $message = '  - <info>NOTICE</info> Modifying existing file at <info>[dest-rel-path]</info>.';
+      if (!file_exists($destination_path)) {
+        $message = '  - <info>NOTICE</info> Creating a new file at <info>[dest-rel-path]</info>.';
+      }
+      $message .= ' Examine the contents and ensure that it came out correctly.';
+      $io->write($interpolator->interpolate($message));
+    }
+
+    // Notify that we are prepending, if there is prepend data.
+    if (!empty($this->prepend)) {
+      $this->prepend->addInterpolationData($interpolator, 'prepend');
+      $io->write($interpolator->interpolate("  - Prepend to <info>[dest-rel-path]</info> from <info>[prepend-rel-path]</info>"));
+    }
+    // Notify that we are appending, if there is append data.
+    $append_contents = '';
+    if (!empty($this->append)) {
+      $this->append->addInterpolationData($interpolator, 'append');
+      $io->write($interpolator->interpolate("  - Append to <info>[dest-rel-path]</info> from <info>[append-rel-path]</info>"));
+    }
+
+    // Write the resulting data
+    file_put_contents($destination_path, $this->contents());
+
+    // Return a ScaffoldResult with knowledge of whether this file is managed.
+    return new ScaffoldResult($destination, $this->managed);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function scaffoldOverExistingTarget(OperationInterface $existing_target) {
+    $this->originalContents = $existing_target->contents();
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function scaffoldAtNewLocation(ScaffoldFilePath $destination) {
+    // If there is no existing scaffold file at the target location, then any
+    // append we do will be to an unmanaged file.
+    $this->managed = FALSE;
+
+    // Default: do not allow an append over a file that was not scaffolded.
+    if (!$this->forceAppend) {
+      $message = "  - Skip <info>[dest-rel-path]</info>: cannot append to a path that was not scaffolded unless 'force-append' property is set.";
+      return new SkipOp($message);
+    }
+
+    // If the target file does not exist, then we will allow the append to
+    // happen if we have default data to provide for it.
+    if (!file_exists($destination->fullPath())) {
+      if (!empty($this->default)) {
+        return $this;
+      }
+      $message = "  - Skip <info>[dest-rel-path]</info>: no file exists at the target path, and no default data provided.";
+      return new SkipOp($message);
+    }
+
+    // If the target file DOES exist, and it already contains the append/prepend
+    // data, then we will skip the operation.
+    $existingData = file_get_contents($destination->fullPath());
+    if ($this->existingFileHasData($existingData, $this->append) || $this->existingFileHasData($existingData, $this->prepend)) {
+      $message = "  - Skip <info>[dest-rel-path]</info>: the file already has the append/prepend data.";
+      return new SkipOp($message);
+    }
+
+    // Cache the original data to use during append.
+    $this->originalContents = $existingData;
+
+    return $this;
+  }
+
+  /**
+   * Check to see if the append/prepend data has already been applied.
+   * @param string $contents
+   *   The contents of the target file.
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $data_path
+   *   The path to the data to append or prepend
+   * @return bool
+   *   'TRUE' if the append/prepend data already exists in contents.
+   */
+  protected function existingFileHasData($contents, $data_path) {
+    if (empty($data_path)) {
+      return FALSE;
+    }
+    $data = file_get_contents($data_path->fullPath());
+
+    return strpos($contents, $data) !== FALSE;
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/Operations/OperationData.php b/vendor/drupal/core-composer-scaffold/Operations/OperationData.php
new file mode 100644
index 0000000000..9aa73611c0
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/Operations/OperationData.php
@@ -0,0 +1,227 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold\Operations;
+
+/**
+ * Holds parameter data for operation objects during operation creation only.
+ *
+ * @internal
+ */
+class OperationData {
+
+  const MODE = 'mode';
+  const PATH = 'path';
+  const OVERWRITE = 'overwrite';
+  const PREPEND = 'prepend';
+  const APPEND = 'append';
+  const DEFAULT = 'default';
+  const FORCE_APPEND = 'force-append';
+
+  /**
+   * The parameter data.
+   *
+   * @var array
+   */
+  protected $data;
+
+  /**
+   * The destination path
+   *
+   * @var string
+   */
+  protected $destination;
+
+  /**
+   * OperationData constructor.
+   *
+   * @param mixed $data
+   *   The raw data array to wrap.
+   */
+  public function __construct($destination, $data) {
+    $this->destination = $destination;
+    $this->data = $this->normalizeScaffoldMetadata($destination, $data);
+  }
+
+  /**
+   * Gets the destination path that this operation data is associated with.
+   *
+   * @return string
+   *   The destination path for the scaffold result.
+   */
+  public function destination() {
+    return $this->destination;
+  }
+
+  /**
+   * Gets operation mode
+   *
+   * @return string
+   *   Operation mode.
+   */
+  public function mode() {
+    return $this->data[self::MODE];
+  }
+
+  /**
+   * Checks if path exists
+   *
+   * @return bool
+   *   Returns true if path exists
+   */
+  public function hasPath() {
+    return isset($this->data[self::PATH]);
+  }
+
+  /**
+   * Gets path
+   *
+   * @return string
+   *   The path.
+   */
+  public function path() {
+    return $this->data[self::PATH];
+  }
+
+  /**
+   * Determines overwrite.
+   *
+   * @return bool
+   *   Returns true if overwrite mode was selected.
+   */
+  public function overwrite() {
+    return !empty($this->data[self::OVERWRITE]);
+  }
+
+  /**
+   * Determines whether 'force-append' has been set.
+   *
+   * @return bool
+   *   Returns true if 'force-append' mode was selected.
+   */
+  public function forceAppend() {
+    if ($this->hasDefault()) {
+      return TRUE;
+    }
+    return !empty($this->data[self::FORCE_APPEND]);
+  }
+
+  /**
+   * Checks if prepend path exists.
+   *
+   * @return bool
+   *   Returns true if prepend exists.
+   */
+  public function hasPrepend() {
+    return isset($this->data[self::PREPEND]);
+  }
+
+  /**
+   * Gets prepend path.
+   *
+   * @return string
+   *   Path to prepend data
+   */
+  public function prepend() {
+    return $this->data[self::PREPEND];
+  }
+
+  /**
+   * Checks if append path exists.
+   *
+   * @return bool
+   *   Returns true if prepend exists.
+   */
+  public function hasAppend() {
+    return isset($this->data[self::APPEND]);
+  }
+
+  /**
+   * Gets append path.
+   *
+   * @return string
+   *   Path to append data
+   */
+  public function append() {
+    return $this->data[self::APPEND];
+  }
+
+  /**
+   * Checks if default path exists.
+   *
+   * @return bool
+   *   Returns true if there is default data available.
+   */
+  public function hasDefault() {
+    return isset($this->data[self::DEFAULT]);
+  }
+
+  /**
+   * Gets default path.
+   *
+   * @return string
+   *   Path to default data
+   */
+  public function default() {
+    return $this->data[self::DEFAULT];
+  }
+
+  /**
+   * Normalizes metadata by converting literal values into arrays.
+   *
+   * Conversions performed include:
+   *   - Boolean 'false' means "skip".
+   *   - A string means "replace", with the string value becoming the path.
+   *
+   * @param string $destination
+   *   The destination path for the scaffold file.
+   * @param mixed $value
+   *   The metadata for this operation object, which varies by operation type.
+   *
+   * @return array
+   *   Normalized scaffold metadata with default values.
+   */
+  protected function normalizeScaffoldMetadata($destination, $value) {
+    $defaultScaffoldMetadata = [
+      self::MODE => ReplaceOp::ID,
+      self::PREPEND => NULL,
+      self::APPEND => NULL,
+      self::DEFAULT => NULL,
+      self::OVERWRITE => TRUE,
+    ];
+
+    return $this->convertScaffoldMetadata($destination, $value) + $defaultScaffoldMetadata;
+  }
+
+  /**
+   * Performs the conversion-to-array step in normalizeScaffoldMetadata.
+   *
+   * @param string $destination
+   *   The destination path for the scaffold file.
+   * @param mixed $value
+   *   The metadata for this operation object, which varies by operation type.
+   *
+   * @return array
+   *   Normalized scaffold metadata.
+   */
+  protected function convertScaffoldMetadata($destination, $value) {
+    if (is_bool($value)) {
+      if (!$value) {
+        return [self::MODE => SkipOp::ID];
+      }
+      throw new \RuntimeException("File mapping {$destination} cannot be given the value 'true'.");
+    }
+    if (empty($value)) {
+      throw new \RuntimeException("File mapping {$destination} cannot be empty.");
+    }
+    if (is_string($value)) {
+      $value = [self::PATH => $value];
+    }
+    // If there is no 'mode', but there is an 'append' or a 'prepend' path,
+    // then the mode is 'append' (append + prepend).
+    if (!isset($value[self::MODE]) && (isset($value[self::APPEND]) || isset($value[self::PREPEND]))) {
+      $value[self::MODE] = AppendOp::ID;
+    }
+    return $value;
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/Operations/OperationFactory.php b/vendor/drupal/core-composer-scaffold/Operations/OperationFactory.php
new file mode 100644
index 0000000000..b256e0e15f
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/Operations/OperationFactory.php
@@ -0,0 +1,161 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold\Operations;
+
+use Composer\Composer;
+use Composer\Package\PackageInterface;
+use Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath;
+
+/**
+ * Create Scaffold operation objects based on provided metadata.
+ *
+ * @internal
+ */
+class OperationFactory {
+
+  /**
+   * The Composer service.
+   *
+   * @var \Composer\Composer
+   */
+  protected $composer;
+
+  /**
+   * OperationFactory constructor.
+   *
+   * @param \Composer\Composer $composer
+   *   Reference to the 'Composer' object, since the Scaffold Operation Factory
+   *   is also responsible for evaluating relative package paths as it creates
+   *   scaffold operations.
+   */
+  public function __construct(Composer $composer) {
+    $this->composer = $composer;
+  }
+
+  /**
+   * Creates a scaffolding operation object as determined by the metadata.
+   *
+   * @param \Composer\Package\PackageInterface $package
+   *   The package that relative paths will be relative from.
+   * @param OperationData $operation_data
+   *   The parameter data for this operation object; varies by operation type.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface
+   *   The scaffolding operation object (skip, replace, etc.)
+   *
+   * @throws \RuntimeException
+   *   Exception thrown when parameter data does not identify a known scaffol
+   *   operation.
+   */
+  public function create(PackageInterface $package, OperationData $operation_data) {
+    switch ($operation_data->mode()) {
+      case SkipOp::ID:
+        return new SkipOp();
+
+      case ReplaceOp::ID:
+        return $this->createReplaceOp($package, $operation_data);
+
+      case AppendOp::ID:
+        return $this->createAppendOp($package, $operation_data);
+    }
+    throw new \RuntimeException("Unknown scaffold operation mode <comment>{$operation_data->mode()}</comment>.");
+  }
+
+  /**
+   * Creates a 'replace' scaffold op.
+   *
+   * Replace ops may copy or symlink, depending on settings.
+   *
+   * @param \Composer\Package\PackageInterface $package
+   *   The package that relative paths will be relative from.
+   * @param OperationData $operation_data
+   *   The parameter data for this operation object, i.e. the relative 'path'.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface
+   *   A scaffold replace operation object.
+   */
+  protected function createReplaceOp(PackageInterface $package, OperationData $operation_data) {
+    if (!$operation_data->hasPath()) {
+      throw new \RuntimeException("'path' component required for 'replace' operations.");
+    }
+    $package_name = $package->getName();
+    $package_path = $this->getPackagePath($package);
+    $source = ScaffoldFilePath::sourcePath($package_name, $package_path, $operation_data->destination(), $operation_data->path());
+    $op = new ReplaceOp($source, $operation_data->overwrite());
+    return $op;
+  }
+
+  /**
+   * Creates an 'append' (or 'prepend') scaffold op.
+   *
+   * @param \Composer\Package\PackageInterface $package
+   *   The package that relative paths will be relative from.
+   * @param OperationData $operation_data
+   *   The parameter data for this operation object, i.e. the relative 'path'.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface
+   *   A scaffold replace operation object.
+   */
+  protected function createAppendOp(PackageInterface $package, OperationData $operation_data) {
+    $package_name = $package->getName();
+    $package_path = $this->getPackagePath($package);
+    $prepend_source_file = NULL;
+    $append_source_file = NULL;
+    $default_data_file = NULL;
+    if ($operation_data->hasPrepend()) {
+      $prepend_source_file = ScaffoldFilePath::sourcePath($package_name, $package_path, $operation_data->destination(), $operation_data->prepend());
+    }
+    if ($operation_data->hasAppend()) {
+      $append_source_file = ScaffoldFilePath::sourcePath($package_name, $package_path, $operation_data->destination(), $operation_data->append());
+    }
+    if ($operation_data->hasDefault()) {
+      $default_data_file = ScaffoldFilePath::sourcePath($package_name, $package_path, $operation_data->destination(), $operation_data->default());
+    }
+    if (!$this->hasContent($prepend_source_file) && !$this->hasContent($append_source_file)) {
+      $message = '  - Keep <info>[dest-rel-path]</info> unchanged: no content to prepend / append was provided.';
+      return new SkipOp($message);
+    }
+
+    return new AppendOp($prepend_source_file, $append_source_file, $operation_data->forceAppend(), $default_data_file);
+  }
+
+  /**
+   * Checks to see if the specified scaffold file exists and has content.
+   *
+   * @param Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $file
+   *   Scaffold file to check.
+   * @return bool
+   *   True if the file exists and has content.
+   */
+  protected function hasContent(ScaffoldFilePath $file = NULL) {
+    if (!$file) {
+      return FALSE;
+    }
+    $path = $file->fullPath();
+    return is_file($path) && (filesize($path) > 0);
+  }
+
+  /**
+   * Gets the file path of a package.
+   *
+   * Note that if we call getInstallPath on the root package, we get the
+   * wrong answer (the installation manager thinks our package is in
+   * vendor). We therefore add special checking for this case.
+   *
+   * @param \Composer\Package\PackageInterface $package
+   *   The package.
+   *
+   * @return string
+   *   The file path.
+   */
+  protected function getPackagePath(PackageInterface $package) {
+    if ($package->getName() == $this->composer->getPackage()->getName()) {
+      // This will respect the --working-dir option if Composer is invoked with
+      // it. There is no API or method to determine the filesystem path of
+      // a package's composer.json file.
+      return getcwd();
+    }
+    return $this->composer->getInstallationManager()->getInstallPath($package);
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/Operations/OperationInterface.php b/vendor/drupal/core-composer-scaffold/Operations/OperationInterface.php
new file mode 100644
index 0000000000..9dc20e0fc9
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/Operations/OperationInterface.php
@@ -0,0 +1,69 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold\Operations;
+
+use Composer\IO\IOInterface;
+use Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath;
+use Drupal\Composer\Plugin\Scaffold\ScaffoldOptions;
+
+/**
+ * Interface for scaffold operation objects.
+ *
+ * @internal
+ */
+interface OperationInterface {
+
+  /**
+   * Returns the exact data that will be written to the scaffold files.
+   *
+   * @return string
+   *   Data to be written to the scaffold location.
+   */
+  public function contents();
+
+  /**
+   * Process this scaffold operation.
+   *
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $destination
+   *   Scaffold file's destination path.
+   * @param \Composer\IO\IOInterface $io
+   *   IOInterface to write to.
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldOptions $options
+   *   Various options that may alter the behavior of the operation.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldResult
+   *   Result of the scaffolding operation.
+   */
+  public function process(ScaffoldFilePath $destination, IOInterface $io, ScaffoldOptions $options);
+
+  /**
+   * Determines what to do if operation is used at same path as a previous op.
+   *
+   * Default behavior is to scaffold this operation at the specified
+   * destination, ignoring whatever was there before.
+   *
+   * @param OperationInterface $existing_target
+   *   Existing file at the destination path that we should combine with.
+   *
+   * @return OperationInterface
+   *   The op to use at this destination.
+   */
+  public function scaffoldOverExistingTarget(OperationInterface $existing_target);
+
+  /**
+   * Determines what to do if operation is used without a previous operation.
+   *
+   * Default behavior is to scaffold this operation at the specified
+   * destination. Most operations overwrite rather than modify existing files,
+   * and therefore do not need to do anything special when there is no existing
+   * file.
+   *
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $destination
+   *   Scaffold file's destination path.
+   *
+   * @return OperationInterface
+   *   The op to use at this destination.
+   */
+  public function scaffoldAtNewLocation(ScaffoldFilePath $destination);
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/Operations/ReplaceOp.php b/vendor/drupal/core-composer-scaffold/Operations/ReplaceOp.php
new file mode 100644
index 0000000000..66f8ea35b3
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/Operations/ReplaceOp.php
@@ -0,0 +1,127 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold\Operations;
+
+use Composer\IO\IOInterface;
+use Composer\Util\Filesystem;
+use Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath;
+use Drupal\Composer\Plugin\Scaffold\ScaffoldOptions;
+
+/**
+ * Scaffold operation to copy or symlink from source to destination.
+ *
+ * @internal
+ */
+class ReplaceOp extends AbstractOperation {
+
+  /**
+   * Identifies Replace operations.
+   */
+  const ID = 'replace';
+
+  /**
+   * The relative path to the source file.
+   *
+   * @var \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath
+   */
+  protected $source;
+
+  /**
+   * Whether to overwrite existing files.
+   *
+   * @var bool
+   */
+  protected $overwrite;
+
+  /**
+   * Constructs a ReplaceOp.
+   *
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $sourcePath
+   *   The relative path to the source file.
+   * @param bool $overwrite
+   *   Whether to allow this scaffold file to overwrite files already at
+   *   the destination. Defaults to TRUE.
+   */
+  public function __construct(ScaffoldFilePath $sourcePath, $overwrite = TRUE) {
+    $this->source = $sourcePath;
+    $this->overwrite = $overwrite;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function generateContents() {
+    return file_get_contents($this->source->fullPath());
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function process(ScaffoldFilePath $destination, IOInterface $io, ScaffoldOptions $options) {
+    $fs = new Filesystem();
+    $destination_path = $destination->fullPath();
+    // Do nothing if overwrite is 'false' and a file already exists at the
+    // destination.
+    if ($this->overwrite === FALSE && file_exists($destination_path)) {
+      $interpolator = $destination->getInterpolator();
+      $io->write($interpolator->interpolate("  - Skip <info>[dest-rel-path]</info> because it already exists and overwrite is <comment>false</comment>."));
+      return new ScaffoldResult($destination, FALSE);
+    }
+
+    // Get rid of the destination if it exists, and make sure that
+    // the directory where it's going to be placed exists.
+    $fs->remove($destination_path);
+    $fs->ensureDirectoryExists(dirname($destination_path));
+    if ($options->symlink()) {
+      return $this->symlinkScaffold($destination, $io);
+    }
+    return $this->copyScaffold($destination, $io);
+  }
+
+  /**
+   * Copies the scaffold file.
+   *
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $destination
+   *   Scaffold file to process.
+   * @param \Composer\IO\IOInterface $io
+   *   IOInterface to writing to.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldResult
+   *   The scaffold result.
+   */
+  protected function copyScaffold(ScaffoldFilePath $destination, IOInterface $io) {
+    $interpolator = $destination->getInterpolator();
+    $this->source->addInterpolationData($interpolator);
+    $success = file_put_contents($destination->fullPath(), $this->contents());
+    if (!$success) {
+      throw new \RuntimeException($interpolator->interpolate("Could not copy source file <info>[src-rel-path]</info> to <info>[dest-rel-path]</info>!"));
+    }
+    $io->write($interpolator->interpolate("  - Copy <info>[dest-rel-path]</info> from <info>[src-rel-path]</info>"));
+    return new ScaffoldResult($destination, $this->overwrite);
+  }
+
+  /**
+   * Symlinks the scaffold file.
+   *
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $destination
+   *   Scaffold file to process.
+   * @param \Composer\IO\IOInterface $io
+   *   IOInterface to writing to.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldResult
+   *   The scaffold result.
+   */
+  protected function symlinkScaffold(ScaffoldFilePath $destination, IOInterface $io) {
+    $interpolator = $destination->getInterpolator();
+    try {
+      $fs = new Filesystem();
+      $fs->relativeSymlink($this->source->fullPath(), $destination->fullPath());
+    }
+    catch (\Exception $e) {
+      throw new \RuntimeException($interpolator->interpolate("Could not symlink source file <info>[src-rel-path]</info> to <info>[dest-rel-path]</info>!"), [], $e);
+    }
+    $io->write($interpolator->interpolate("  - Link <info>[dest-rel-path]</info> from <info>[src-rel-path]</info>"));
+    return new ScaffoldResult($destination, $this->overwrite);
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/Operations/ScaffoldFileCollection.php b/vendor/drupal/core-composer-scaffold/Operations/ScaffoldFileCollection.php
new file mode 100644
index 0000000000..3551b80aea
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/Operations/ScaffoldFileCollection.php
@@ -0,0 +1,198 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold\Operations;
+
+use Composer\IO\IOInterface;
+use Drupal\Composer\Plugin\Scaffold\Interpolator;
+use Drupal\Composer\Plugin\Scaffold\ScaffoldFileInfo;
+use Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath;
+use Drupal\Composer\Plugin\Scaffold\ScaffoldOptions;
+
+/**
+ * Collection of scaffold files.
+ *
+ * @internal
+ */
+class ScaffoldFileCollection implements \IteratorAggregate {
+
+  /**
+   * Nested list of all scaffold files.
+   *
+   * The top level array maps from the package name to the collection of
+   * scaffold files provided by that package. Each collection of scaffold files
+   * is keyed by destination path.
+   *
+   * @var \Drupal\Composer\Plugin\Scaffold\ScaffoldFileInfo[][]
+   */
+  protected $scaffoldFilesByProject = [];
+
+  /**
+   * ScaffoldFileCollection constructor.
+   *
+   * @param \Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface[][] $file_mappings
+   *   A multidimensional array of file mappings.
+   * @param \Drupal\Composer\Plugin\Scaffold\Interpolator $location_replacements
+   *   An object with the location mappings (e.g. [web-root]).
+   */
+  public function __construct(array $file_mappings, Interpolator $location_replacements) {
+    // Collection of all destination paths to be scaffolded. Used to determine
+    // when two projects scaffold the same file and we have to either replace or
+    // combine them together.
+    // @see OperationInterface::scaffoldOverExistingTarget().
+    $scaffoldFiles = [];
+
+    // Build the list of ScaffoldFileInfo objects by project.
+    foreach ($file_mappings as $package_name => $package_file_mappings) {
+      foreach ($package_file_mappings as $destination_rel_path => $op) {
+        $destination = ScaffoldFilePath::destinationPath($package_name, $destination_rel_path, $location_replacements);
+
+        // If there was already a scaffolding operation happening at this path,
+        // allow the new operation to decide how to handle the override.
+        // Usually, the new operation will replace whatever was there before.
+        if (isset($scaffoldFiles[$destination_rel_path])) {
+          $previous_scaffold_file = $scaffoldFiles[$destination_rel_path];
+          $op = $op->scaffoldOverExistingTarget($previous_scaffold_file->op());
+
+          // Remove the previous op so we only touch the destination once.
+          $message = "  - Skip <info>[dest-rel-path]</info>: overridden in <comment>{$package_name}</comment>";
+          $this->scaffoldFilesByProject[$previous_scaffold_file->packageName()][$destination_rel_path] = new ScaffoldFileInfo($destination, new SkipOp($message));
+        }
+        // If there is NOT already a scaffolding operation happening at this
+        // path, notify the scaffold operation of this fact.
+        else {
+          $op = $op->scaffoldAtNewLocation($destination);
+        }
+
+        // Combine the scaffold operation with the destination and record it.
+        $scaffold_file = new ScaffoldFileInfo($destination, $op);
+        $scaffoldFiles[$destination_rel_path] = $scaffold_file;
+        $this->scaffoldFilesByProject[$package_name][$destination_rel_path] = $scaffold_file;
+      }
+    }
+  }
+
+  /**
+   * Removes any item that has a path matching any path in the provided list.
+   *
+   * Matching is done via destination path.
+   *
+   * @param string[] $files_to_filter
+   *   List of destination paths
+   */
+  public function filterFiles(array $files_to_filter) {
+    foreach ($this->scaffoldFilesByProject as $project_name => $scaffold_files) {
+      foreach ($scaffold_files as $destination_rel_path => $scaffold_file) {
+        if (in_array($destination_rel_path, $files_to_filter, TRUE)) {
+          unset($scaffold_files[$destination_rel_path]);
+        }
+      }
+      $this->scaffoldFilesByProject[$project_name] = $scaffold_files;
+      if (!$this->checkListHasItemWithContent($scaffold_files)) {
+        unset($this->scaffoldFilesByProject[$project_name]);
+      }
+    }
+  }
+
+  /**
+   * Scans through a list of scaffold files and determines if any has contents.
+   *
+   * @param Drupal\Composer\Plugin\Scaffold\ScaffoldFileInfo[] $scaffold_files
+   *   List of scaffold files, path: ScaffoldFileInfo
+   *
+   * @return bool
+   *   TRUE if at least one item in the list has content
+   */
+  protected function checkListHasItemWithContent(array $scaffold_files) {
+    foreach ($scaffold_files as $destination_rel_path => $scaffold_file) {
+      $contents = $scaffold_file->op()->contents();
+      if (!empty($contents)) {
+        return TRUE;
+      }
+    }
+    return FALSE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getIterator() {
+    return new \ArrayIterator($this->scaffoldFilesByProject);
+  }
+
+  /**
+   * Processes the files in our collection.
+   *
+   * @param \Composer\IO\IOInterface $io
+   *   The Composer IO object.
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldOptions $scaffold_options
+   *   The scaffold options.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldResult[]
+   *   The results array.
+   */
+  public function processScaffoldFiles(IOInterface $io, ScaffoldOptions $scaffold_options) {
+    $results = [];
+    foreach ($this as $project_name => $scaffold_files) {
+      $io->write("Scaffolding files for <comment>{$project_name}</comment>:");
+      foreach ($scaffold_files as $scaffold_file) {
+        $results[$scaffold_file->destination()->relativePath()] = $scaffold_file->process($io, $scaffold_options);
+      }
+    }
+    return $results;
+  }
+
+  /**
+   * Processes the iterator created by ScaffoldFileCollection::create().
+   *
+   * @param \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldFileCollection $collection
+   *   The iterator to process.
+   * @param \Composer\IO\IOInterface $io
+   *   The Composer IO object.
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldOptions $scaffold_options
+   *   The scaffold options.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldResult[]
+   *   The results array.
+   *
+   * @deprecated. Called when upgrading from the Core Composer Scaffold plugin
+   *   version 8.8.x due to a bug in the plugin and handler classes. Do not use
+   *   in 8.9.x or 9.x, and remove in Drupal 10.x.
+   */
+  public static function process(ScaffoldFileCollection $collection, IOInterface $io, ScaffoldOptions $scaffold_options) {
+    $results = [];
+    foreach ($collection as $project_name => $scaffold_files) {
+      $io->write("Scaffolding files for <comment>{$project_name}</comment>:");
+      foreach ($scaffold_files as $scaffold_file) {
+        $results[$scaffold_file->destination()->relativePath()] = $scaffold_file->process($io, $scaffold_options);
+      }
+    }
+    return $results;
+  }
+
+  /**
+   * Returns the list of files that have not changed since they were scaffolded.
+   *
+   * Note that there are two reasons a file may have changed:
+   *   - The user modified it after it was scaffolded.
+   *   - The package the file came to was updated, and the file is different in
+   *     the new version.
+   *
+   * With the current scaffold code, we cannot tell the difference between the
+   * two. @see https://www.drupal.org/project/drupal/issues/3092563
+   *
+   * @return string[]
+   *   List of relative paths to unchanged files on disk.
+   */
+  public function checkUnchanged() {
+    $results = [];
+    foreach ($this as $project_name => $scaffold_files) {
+      foreach ($scaffold_files as $scaffold_file) {
+        if (!$scaffold_file->hasChanged()) {
+          $results[] = $scaffold_file->destination()->relativePath();
+        }
+      }
+    }
+    return $results;
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/Operations/ScaffoldResult.php b/vendor/drupal/core-composer-scaffold/Operations/ScaffoldResult.php
new file mode 100644
index 0000000000..3445b5307f
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/Operations/ScaffoldResult.php
@@ -0,0 +1,61 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold\Operations;
+
+use Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath;
+
+/**
+ * Record the result of a scaffold operation.
+ *
+ * @internal
+ */
+class ScaffoldResult {
+
+  /**
+   * The path to the scaffold file that was processed.
+   *
+   * @var \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath
+   */
+  protected $destination;
+
+  /**
+   * Indicates if this scaffold file is managed by the scaffold command.
+   *
+   * @var bool
+   */
+  protected $managed;
+
+  /**
+   * ScaffoldResult constructor.
+   *
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $destination
+   *   The path to the scaffold file that was processed.
+   * @param bool $isManaged
+   *   (optional) Whether this result is managed. Defaults to FALSE.
+   */
+  public function __construct(ScaffoldFilePath $destination, $isManaged = FALSE) {
+    $this->destination = $destination;
+    $this->managed = $isManaged;
+  }
+
+  /**
+   * Determines whether this scaffold file is managed.
+   *
+   * @return bool
+   *   TRUE if this scaffold file is managed, FALSE if not.
+   */
+  public function isManaged() {
+    return $this->managed;
+  }
+
+  /**
+   * Gets the destination scaffold file that this result refers to.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath
+   *   The destination path for the scaffold result.
+   */
+  public function destination() {
+    return $this->destination;
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/Operations/SkipOp.php b/vendor/drupal/core-composer-scaffold/Operations/SkipOp.php
new file mode 100644
index 0000000000..4180bd8683
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/Operations/SkipOp.php
@@ -0,0 +1,54 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold\Operations;
+
+use Composer\IO\IOInterface;
+use Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath;
+use Drupal\Composer\Plugin\Scaffold\ScaffoldOptions;
+
+/**
+ * Scaffold operation to skip a scaffold file (do nothing).
+ *
+ * @internal
+ */
+class SkipOp extends AbstractOperation {
+
+  /**
+   * Identifies Skip operations.
+   */
+  const ID = 'skip';
+
+  /**
+   * The message to output while processing.
+   *
+   * @var string
+   */
+  protected $message;
+
+  /**
+   * SkipOp constructor.
+   *
+   * @param string $message
+   *   (optional) A custom message to output while skipping.
+   */
+  public function __construct($message = "  - Skip <info>[dest-rel-path]</info>: disabled") {
+    $this->message = $message;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function generateContents() {
+    return '';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function process(ScaffoldFilePath $destination, IOInterface $io, ScaffoldOptions $options) {
+    $interpolator = $destination->getInterpolator();
+    $io->write($interpolator->interpolate($this->message));
+    return new ScaffoldResult($destination, FALSE);
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/Plugin.php b/vendor/drupal/core-composer-scaffold/Plugin.php
new file mode 100644
index 0000000000..2f5214fb22
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/Plugin.php
@@ -0,0 +1,147 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold;
+
+use Composer\Composer;
+use Composer\EventDispatcher\EventSubscriberInterface;
+use Composer\IO\IOInterface;
+use Composer\Installer\PackageEvent;
+use Composer\Installer\PackageEvents;
+use Composer\Plugin\Capability\CommandProvider;
+use Composer\Plugin\Capable;
+use Composer\Plugin\CommandEvent;
+use Composer\Plugin\PluginEvents;
+use Composer\Plugin\PluginInterface;
+use Composer\Script\Event;
+use Composer\Script\ScriptEvents;
+use Drupal\Composer\Plugin\Scaffold\CommandProvider as ScaffoldCommandProvider;
+
+/**
+ * Composer plugin for handling drupal scaffold.
+ *
+ * @internal
+ */
+class Plugin implements PluginInterface, EventSubscriberInterface, Capable {
+
+  /**
+   * The Composer service.
+   *
+   * @var \Composer\Composer
+   */
+  protected $composer;
+
+  /**
+   * Composer's I/O service.
+   *
+   * @var \Composer\IO\IOInterface
+   */
+  protected $io;
+
+  /**
+   * The Composer Scaffold handler.
+   *
+   * @var \Drupal\Composer\Plugin\Scaffold\Handler
+   */
+  protected $handler;
+
+  /**
+   * Record whether the 'require' command was called.
+   *
+   * @param bool
+   */
+  protected $requireWasCalled;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function activate(Composer $composer, IOInterface $io) {
+    $this->composer = $composer;
+    $this->io = $io;
+    $this->requireWasCalled = FALSE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function deactivate(Composer $composer, IOInterface $io) {
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function uninstall(Composer $composer, IOInterface $io) {
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCapabilities() {
+    return [CommandProvider::class => ScaffoldCommandProvider::class];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getSubscribedEvents() {
+    // Important note: We only instantiate our handler on "post" events.
+    return [
+      ScriptEvents::POST_UPDATE_CMD => 'postCmd',
+      ScriptEvents::POST_INSTALL_CMD => 'postCmd',
+      PackageEvents::POST_PACKAGE_INSTALL => 'postPackage',
+      PluginEvents::COMMAND => 'onCommand',
+    ];
+  }
+
+  /**
+   * Post command event callback.
+   *
+   * @param \Composer\Script\Event $event
+   *   The Composer event.
+   */
+  public function postCmd(Event $event) {
+    $this->handler()->scaffold();
+  }
+
+  /**
+   * Post package event behavior.
+   *
+   * @param \Composer\Installer\PackageEvent $event
+   *   Composer package event sent on install/update/remove.
+   */
+  public function postPackage(PackageEvent $event) {
+    $this->handler()->onPostPackageEvent($event);
+  }
+
+  /**
+   * Pre command event callback.
+   *
+   * @param \Composer\Plugin\CommandEvent $event
+   *   The Composer command event.
+   */
+  public function onCommand(CommandEvent $event) {
+    if ($event->getCommandName() == 'require') {
+      if ($this->handler) {
+        throw new \Error('Core Scaffold Plugin handler instantiated too early. See https://www.drupal.org/project/drupal/issues/3104922');
+      }
+      $this->requireWasCalled = TRUE;
+    }
+  }
+
+  /**
+   * Lazy-instantiate the handler object. It is dangerous to update a Composer
+   * plugin if it loads any classes prior to the `composer update` operation,
+   * and later tries to use them in a post-update hook.
+   */
+  protected function handler() {
+    if (!$this->handler) {
+      $this->handler = new Handler($this->composer, $this->io);
+      // On instantiation of our handler, notify it if the 'require' command
+      // was executed.
+      if ($this->requireWasCalled) {
+        $this->handler->requireWasCalled();
+      }
+    }
+    return $this->handler;
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/PostPackageEventListenerInterface.php b/vendor/drupal/core-composer-scaffold/PostPackageEventListenerInterface.php
new file mode 100644
index 0000000000..61356b145c
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/PostPackageEventListenerInterface.php
@@ -0,0 +1,24 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold;
+
+use Composer\Installer\PackageEvent;
+
+/**
+ * Interface for post package event listeners.
+ *
+ * @see \Drupal\Composer\Plugin\Scaffold\Handler::onPostPackageEvent
+ *
+ * @internal
+ */
+interface PostPackageEventListenerInterface {
+
+  /**
+   * Handles package events during a 'composer require' operation.
+   *
+   * @param \Composer\Installer\PackageEvent $event
+   *   Composer package event sent on install/update/remove.
+   */
+  public function event(PackageEvent $event);
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/README.md b/vendor/drupal/core-composer-scaffold/README.md
new file mode 100644
index 0000000000..2830e5565e
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/README.md
@@ -0,0 +1,519 @@
+# Drupal Composer Scaffold
+
+This project provides a composer plugin for placing scaffold files (like
+`index.php`, `update.php`, …) from the `drupal/core` project into their desired
+location inside the web root. Only individual files may be scaffolded with this
+plugin.
+
+The purpose of scaffolding files is to allow Drupal sites to be fully managed by
+Composer, and still allow individual asset files to be placed in arbitrary
+locations. The goal of doing this is to enable a properly configured composer
+template to produce a file layout that exactly matches the file layout of a
+Drupal 8.7.x and earlier tarball distribution. Other file layouts will also be
+possible; for example, a project layout very similar to the current
+[drupal-composer/drupal-project](https://github.com/drupal-composer/drupal-scaffold)
+template will also be provided. When one of these projects is used, the user
+should be able to use `composer require` and `composer update` on a Drupal site
+immediately after untarring the downloaded archive.
+
+Note that the dependencies of a Drupal site are only able to scaffold files if
+explicitly granted that right in the top-level composer.json file. See
+[allowed packages](#allowed-packages), below.
+
+## Usage
+
+Drupal Composer Scaffold is used by requiring `drupal/core-composer-scaffold` in your
+project, and providing configuration settings in the `extra` section of your
+project's composer.json file. Additional configuration from the composer.json
+file of your project's dependencies is also consulted in order to scaffold the
+files a project needs. Additional information may be added to the beginning or
+end of scaffold files, as is commonly done to `.htaccess` and `robots.txt`
+files. See [altering scaffold files](#altering-scaffold-files) for more
+information.
+
+Typically, the scaffold operations run automatically as needed, e.g. after
+`composer install`, so it is usually not necessary to do anything different
+to scaffold a project once the configuration is set up in the project
+composer.json file, as described below. To scaffold files directly, run:
+```
+composer drupal:scaffold
+```
+
+### Allowed Packages
+
+Scaffold files are stored inside of projects that are required from the main
+project's composer.json file as usual. The scaffolding operation happens after
+`composer install`, and involves copying or symlinking the desired assets to
+their destination location. In order to prevent arbitrary dependencies from
+copying files via the scaffold mechanism, only those projects that are
+specifically permitted by the top-level project will be used to scaffold files.
+
+Example: Permit scaffolding from the project `drupal/core`
+```
+  "name": "my/project",
+  ...
+  "extra": {
+    "drupal-scaffold": {
+      "allowed-packages": [
+        "drupal/core"
+      ],
+      ...
+    }
+  }
+```
+Allowing a package to scaffold files also permits it to delegate permission to
+scaffold to any project that it requires itself. This allows a package to
+organize its scaffold assets as it sees fit. For example, the project
+`drupal/core` may choose to store its assets in a subproject `drupal/assets`.
+
+It is possible for a project to obtain scaffold files from multiple projects.
+For example, a Drupal project using a distribution, and installing on a specific
+web hosting service provider might take its scaffold files from:
+
+- Drupal core
+- Its distribution
+- A project provided by the hosting provider
+- The project itself
+
+Each project allowed to scaffold by the top-level project will be used in turn,
+with projects declared later in the `allowed-packages` list taking precedence
+over the projects named before. `drupal/core` is implicitly allowed and will be
+placed at the top of the list. The top-level composer.json itself is also
+implicitly allowed to scaffold files, and its scaffold files have highest
+priority.
+
+### Defining Project Locations
+
+The top-level project in turn must define where the web root is located. It does
+so via the `locations` mapping, as shown below:
+```
+  "name": "my/project",
+  ...
+  "extra": {
+    "drupal-scaffold": {
+      "locations": {
+        "web-root": "./docroot"
+      },
+      ...
+    }
+  }
+```
+This makes it possible to configure a project with different file layouts; for
+example, either the `drupal/drupal` file layout or the
+`drupal-composer/drupal-project` file layout could be used to set up a project.
+
+If a web-root is not explicitly defined, then it will default to `./`.
+
+### Altering Scaffold Files
+
+Sometimes, a project might wish to use a scaffold file provided by a dependency,
+but alter it in some way. Two forms of alteration are supported: appending and
+patching.
+
+The example below shows a project that appends additional entries onto the end
+of the `robots.txt` file provided by `drupal/core`:
+```
+  "name": "my/project",
+  ...
+  "extra": {
+    "drupal-scaffold": {
+      "file-mapping": {
+        "[web-root]/robots.txt": {
+          "append": "assets/my-robots-additions.txt",
+        }
+      }
+    }
+  }
+```
+It is also possible to prepend to a scaffold file instead of, or in addition to
+appending by including a "prepend" entry that provides the relative path to the
+file to prepend to the scaffold file.
+
+The example below demonstrates the use of the `post-drupal-scaffold-cmd` hook
+to patch the `.htaccess` file using a patch.
+```
+  "name": "my/project",
+  ...
+  "scripts": {
+    "post-drupal-scaffold-cmd": [
+      "cd docroot && patch -p1 <../patches/htaccess-ssl.patch"
+    ]
+  }
+```
+
+### Defining Scaffold Files
+
+The placement of scaffold assets is under the control of the project that
+provides them, but the location is always relative to some directory defined by
+the root project -- usually the web root. For example, the scaffold file
+`robots.txt` is copied from its source location, `assets/robots.txt` into the
+web root in the snippet below.
+```
+{
+  "name": "drupal/assets",
+  ...
+  "extra": {
+    "drupal-scaffold": {
+      "file-mapping": {
+        "[web-root]/robots.txt": "assets/robots.txt",
+        ...
+      }
+    }
+  }
+}
+```
+
+### Excluding Scaffold Files
+
+Sometimes, a project might prefer to entirely replace a scaffold file provided
+by a dependency, and receive no further updates for it. This can be done by
+setting the value for the scaffold file to exclude to `false`:
+```
+  "name": "my/project",
+  ...
+  "extra": {
+    "drupal-scaffold": {
+      "file-mapping": {
+        "[web-root]/robots.txt": false
+      }
+    }
+  }
+```
+If possible, use the `append` and `prepend` directives as explained in [altering
+scaffold files](#altering-scaffold-files), above. Excluding a file means that
+your project will not get any bug fixes or other updates to files that are
+modified locally.
+
+### Overwrite
+
+By default, scaffold files overwrite whatever content exists at the target
+location. Sometimes a project may wish to provide the initial contents for a
+file that will not be changed in subsequent updates. This can be done by setting
+the `overwrite` flag to `false`, as shown in the example below:
+```
+{
+  "name": "service-provider/d8-scaffold-files",
+  "extra": {
+    "drupal-scaffold": {
+      "file-mapping": {
+        "[web-root]/sites/default/settings.php": {
+          "mode": "replace",
+          "path": "assets/sites/default/settings.php",
+          "overwrite": false
+        }
+      }
+    }
+  }
+}
+```
+Note that the `overwrite` directive is intended to be used by starter kits,
+service providers, and so on. Individual Drupal sites should exclude the file
+by setting its value to false instead.
+
+### Autoload File
+
+The scaffold tool automatically creates the required `autoload.php` file at the
+Drupal root as part of the scaffolding operation. This file should not be
+modified or customized in any way. If it is committed to the repository, though,
+then the scaffold tool will stop managing it. If the location of the `vendor`
+directory is changed for any reason, and the `autoload.php` file has been
+committed to the repository, manually delete it and then run `composer install`
+to update it.
+
+## Specifications
+
+Reference section for the configuration directives for the "drupal-scaffold"
+section of the "extra" section of a `composer.json` file appear below.
+
+### allowed-packages
+
+The `allowed-packages` configuration setting contains an ordered list of package
+names that will be used during the scaffolding phase.
+```
+"allowed-packages": [
+  "example/assets",
+],
+```
+### file-mapping
+
+The `file-mapping` configuration setting consists of a map from the destination
+path of the file to scaffold to a set of properties that control how the file
+should be scaffolded.
+
+The available properties are as follows:
+
+- mode: One of "replace", "append" or "skip".
+- path: The path to the source file to write over the destination file.
+- prepend: The path to the source file to prepend to the destination file, which
+  must always be a scaffold file provided by some other project.
+- append: Like `prepend`, but appends content rather than prepends.
+- overwrite: If `false`, prevents a `replace` from happening if the destination
+  already exists.
+
+The mode may be inferred from the other properties. If the mode is not
+specified, then the following defaults will be supplied:
+
+- replace: Selected if a `path` property is present, or if the entry's value is
+  a string rather than a property set.
+- append: Selected if a `prepend` or `append` property is present.
+- skip: Selected if the entry's value is a boolean `false`.
+
+Examples:
+```
+"file-mapping": {
+  "[web-root]/sites/default/default.settings.php": {
+    "mode": "replace",
+    "path": "assets/sites/default/default.settings.php",
+    "overwrite": true
+  },
+  "[web-root]/sites/default/settings.php": {
+    "mode": "replace",
+    "path": "assets/sites/default/settings.php",
+    "overwrite": false
+  },
+  "[web-root]/robots.txt": {
+    "mode": "append",
+    "prepend": "assets/robots-prequel.txt",
+    "append": "assets/robots-append.txt"
+  },
+  "[web-root]/.htaccess": {
+    "mode": "skip",
+  }
+}
+```
+The short-form of the above example would be:
+```
+"file-mapping": {
+  "[web-root]/sites/default/default.settings.php": "assets/sites/default/default.settings.php",
+  "[web-root]/sites/default/settings.php": {
+    "path": "assets/sites/default/settings.php",
+    "overwrite": false
+  },
+  "[web-root]/robots.txt": {
+    "prepend": "assets/robots-prequel.txt",
+    "append": "assets/robots-append.txt"
+  },
+  "[web-root]/.htaccess": false
+}
+```
+Note that there is no distinct "prepend" mode; "append" mode is used to both
+append and prepend to scaffold files. The reason for this is that scaffold file
+entries are identified in the file-mapping section keyed by their destination
+path, and it is not possible for multiple entries to have the same key. If
+"prepend" were a separate mode, then it would not be possible to both prepend
+and append to the same file.
+
+By default, append operations may only be applied to files that were scaffolded
+by a previously evaluated project. If the `force-append` attribute is added to
+an `append` operation, though, then the append will be made to non-scaffolded
+files if and only if the append text does not already appear in the file. When
+using this mode, it is also possible to provide default contents to use in the
+event that the destination file is entirely missing.
+
+The example below demonstrates scaffolding a settings-custom.php file, and
+including it from the existing `settings.php` file.
+
+```
+"file-mapping": {
+  "[web-root]/sites/default/settings-custom.php": "assets/settings-custom.php",
+  "[web-root]/sites/default/settings.php": {
+    "append": "assets/include-settings-custom.txt",
+    "force-append": true,
+    "default": "assets/initial-default-settings.txt"
+  }
+}
+```
+
+Note that the example above still works if used with a project that scaffolds
+the settings.php file.
+
+### gitignore
+
+The `gitignore` configuration setting controls whether or not this plugin will
+manage `.gitignore` files for files written during the scaffold operation.
+
+- true: `.gitignore` files will be updated when scaffold files are written.
+- false: `.gitignore` files will never be modified.
+- Not set: `.gitignore` files will be updated if the target directory is a local
+working copy of a git repository, and the `vendor` directory is ignored
+in that repository.
+
+### locations
+
+The `locations` configuration setting contains a list of named locations that
+may be used in placing scaffold files. The only required location is `web-root`.
+Other locations may also be defined if desired.
+```
+"locations": {
+  "web-root": "./docroot"
+},
+```
+### symlink
+
+The `symlink` property causes `replace` operations to make a symlink to the
+source file rather than copying it. This is useful when doing core development,
+as the symlink files themselves should not be edited. Note that `append`
+operations override the `symlink` option, to prevent the original scaffold
+assets from being altered.
+```
+"symlink": true,
+```
+## Managing Scaffold Files
+
+Scaffold files should be treated the same way that the `vendor` directory is
+handled. If you need to commit `vendor` (e.g. in order to deploy your site),
+then you should also commit your scaffold files. You should not commit your
+`vendor` directory or scaffold files unless it is necessary.
+
+If a dependency provides a scaffold file with `overwrite` set to `false`, that
+file should be committed to your repository.
+
+By default, `.gitignore` files will be automatically updated if needed when
+scaffold files are written. See the `gitignore` setting in the Specifications
+section above.
+
+## Examples
+
+Some full-length examples appear below.
+
+Sample composer.json for a project that relies on packages that use composer-scaffold:
+```
+{
+  "name": "my/project",
+  "require": {
+    "drupal/core-composer-scaffold": "*",
+    "composer/installers": "^1.2",
+    "cweagans/composer-patches": "^1.6.5",
+    "drupal/core": "^8.8.x-dev",
+    "service-provider/d8-scaffold-files": "^1"
+  },
+  "config": {
+    "optimize-autoloader": true,
+    "sort-packages": true
+  },
+  "extra": {
+    "drupal-scaffold": {
+      "allowed-packages": [
+        "drupal/core"
+      ],
+      "locations": {
+        "web-root": "./docroot"
+      },
+      "symlink": true,
+      "file-mapping": {
+        "[web-root]/.htaccess": false,
+        "[web-root]/robots.txt": "assets/robots-default.txt"
+      }
+    }
+  }
+}
+```
+
+Sample composer.json for drupal/core, with assets placed in a different project:
+
+```
+{
+  "name": "drupal/core",
+  "extra": {
+    "drupal-scaffold": {
+      "allowed-packages": [
+        "drupal/assets",
+      ]
+    }
+  }
+}
+```
+
+Sample composer.json for composer-scaffold files in drupal/assets:
+
+```
+{
+  "name": "drupal/assets",
+  "extra": {
+    "drupal-scaffold": {
+      "file-mapping": {
+        "[web-root]/.csslintrc": "assets/.csslintrc",
+        "[web-root]/.editorconfig": "assets/.editorconfig",
+        "[web-root]/.eslintignore": "assets/.eslintignore",
+        "[web-root]/.eslintrc.json": "assets/.eslintrc.json",
+        "[web-root]/.gitattributes": "assets/.gitattributes",
+        "[web-root]/.ht.router.php": "assets/.ht.router.php",
+        "[web-root]/.htaccess": "assets/.htaccess",
+        "[web-root]/sites/default/default.services.yml": "assets/default.services.yml",
+        "[web-root]/sites/default/default.settings.php": "assets/default.settings.php",
+        "[web-root]/sites/example.settings.local.php": "assets/example.settings.local.php",
+        "[web-root]/sites/example.sites.php": "assets/example.sites.php",
+        "[web-root]/index.php": "assets/index.php",
+        "[web-root]/robots.txt": "assets/robots.txt",
+        "[web-root]/update.php": "assets/update.php",
+        "[web-root]/web.config": "assets/web.config"
+      }
+    }
+  }
+}
+```
+
+Sample composer.json for a library that implements composer-scaffold:
+
+```
+{
+  "name": "service-provider/d8-scaffold-files",
+  "extra": {
+    "drupal-scaffold": {
+      "file-mapping": {
+        "[web-root]/sites/default/settings.php": "assets/sites/default/settings.php"
+      }
+    }
+  }
+}
+```
+
+Append to robots.txt:
+
+```
+{
+  "name": "service-provider/d8-scaffold-files",
+  "extra": {
+    "drupal-scaffold": {
+      "file-mapping": {
+        "[web-root]/robots.txt": {
+          "append": "assets/my-robots-additions.txt",
+        }
+      }
+    }
+  }
+}
+```
+
+Patch a file after it's copied:
+
+```
+"post-drupal-scaffold-cmd": [
+  "cd docroot && patch -p1 <../patches/htaccess-ssl.patch"
+]
+```
+
+## Related Plugins
+
+### drupal-composer/drupal-scaffold
+
+Previous versions of Drupal Composer Scaffold (see community project,
+[drupal-composer/drupal-scaffold](https://github.com/drupal-composer/drupal-project))
+downloaded each scaffold file directly from its distribution server (e.g.
+`https://git.drupalcode.org`) to the desired destination directory. This was
+necessary, because there was no subtree split of the scaffold files available.
+Copying the scaffold assets from projects already downloaded by Composer is more
+effective, as downloading and unpacking archive files is more efficient than
+downloading each scaffold file individually.
+
+### composer/installers
+
+The [composer/installers](https://github.com/composer/installers) plugin is
+similar to this plugin in that it allows dependencies to be installed in
+locations other than the `vendor` directory. However, Composer and the
+`composer/installers` plugin have a limitation that one project cannot be moved
+inside of another project. Therefore, if you use `composer/installers` to place
+Drupal modules inside the directory `web/modules/contrib`, then you cannot also
+use `composer/installers` to place files such as `index.php` and `robots.txt`
+into the `web` directory. The drupal-scaffold plugin was created to work around
+this limitation.
diff --git a/vendor/drupal/core-composer-scaffold/ScaffoldFileInfo.php b/vendor/drupal/core-composer-scaffold/ScaffoldFileInfo.php
new file mode 100644
index 0000000000..08ce59cfba
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/ScaffoldFileInfo.php
@@ -0,0 +1,139 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold;
+
+use Composer\IO\IOInterface;
+use Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface;
+
+/**
+ * Data object that keeps track of one scaffold file.
+ *
+ * Scaffold files are identified primarily by their destination path. Each
+ * scaffold file also has an 'operation' object that controls how the scaffold
+ * file will be placed (e.g. via copy or symlink, or maybe by appending multiple
+ * files together). The operation may have one or more source files.
+ *
+ * @internal
+ */
+class ScaffoldFileInfo {
+
+  /**
+   * The path to the destination.
+   *
+   * @var \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath
+   */
+  protected $destination;
+
+  /**
+   * The operation used to create the destination.
+   *
+   * @var \Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface
+   */
+  protected $op;
+
+  /**
+   * Constructs a ScaffoldFileInfo object.
+   *
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $destination
+   *   The full and relative paths to the destination file and the package
+   *   defining it.
+   * @param \Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface $op
+   *   Operations object that will handle scaffolding operations.
+   */
+  public function __construct(ScaffoldFilePath $destination, OperationInterface $op) {
+    $this->destination = $destination;
+    $this->op = $op;
+  }
+
+  /**
+   * Gets the Scaffold operation.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface
+   *   Operations object that handles scaffolding (copy, make symlink, etc).
+   */
+  public function op() {
+    return $this->op;
+  }
+
+  /**
+   * Gets the package name.
+   *
+   * @return string
+   *   The name of the package this scaffold file info was collected from.
+   */
+  public function packageName() {
+    return $this->destination->packageName();
+  }
+
+  /**
+   * Gets the destination.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath
+   *   The scaffold path to the destination file.
+   */
+  public function destination() {
+    return $this->destination;
+  }
+
+  /**
+   * Determines if this scaffold file has been overridden by another package.
+   *
+   * @param string $providing_package
+   *   The name of the package that provides the scaffold file at this location,
+   *   as returned by self::findProvidingPackage()
+   *
+   * @return bool
+   *   Whether this scaffold file if overridden or removed.
+   */
+  public function overridden($providing_package) {
+    return $this->packageName() !== $providing_package;
+  }
+
+  /**
+   * Replaces placeholders in a message.
+   *
+   * @param string $message
+   *   Message with placeholders to fill in.
+   * @param array $extra
+   *   Additional data to merge with the interpolator.
+   * @param mixed $default
+   *   Default value to use for missing placeholders, or FALSE to keep them.
+   *
+   * @return string
+   *   Interpolated string with placeholders replaced.
+   */
+  public function interpolate($message, array $extra = [], $default = FALSE) {
+    $interpolator = $this->destination->getInterpolator();
+    return $interpolator->interpolate($message, $extra, $default);
+  }
+
+  /**
+   * Moves a single scaffold file from source to destination.
+   *
+   * @param \Composer\IO\IOInterface $io
+   *   The scaffold file to be processed.
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldOptions $options
+   *   Assorted operational options, e.g. whether the destination should be a
+   *   symlink.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldResult
+   *   The scaffold result.
+   */
+  public function process(IOInterface $io, ScaffoldOptions $options) {
+    return $this->op()->process($this->destination, $io, $options);
+  }
+
+  /**
+   * Returns TRUE if the target does not exist or has changed.
+   *
+   * @return bool
+   */
+  final public function hasChanged() {
+    $path = $this->destination()->fullPath();
+    if (!file_exists($path)) {
+      return TRUE;
+    }
+    return $this->op()->contents() !== file_get_contents($path);
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/ScaffoldFilePath.php b/vendor/drupal/core-composer-scaffold/ScaffoldFilePath.php
new file mode 100644
index 0000000000..5fb5af41d0
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/ScaffoldFilePath.php
@@ -0,0 +1,202 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold;
+
+use Composer\Util\Filesystem;
+
+/**
+ * Manage the path to a file to scaffold.
+ *
+ * Both the relative and full path to the file is maintained so that the shorter
+ * name may be used in progress and error messages, as needed. The name of the
+ * package that provided the file path is also recorded for the same reason.
+ *
+ * ScaffoldFilePaths may be used to represent destination scaffold files, or the
+ * source files used to create them. Static factory methods named
+ * destinationPath and sourcePath, respectively, are provided to create
+ * ScaffoldFilePath objects.
+ *
+ * @internal
+ */
+class ScaffoldFilePath {
+
+  /**
+   * The type of scaffold file this is, 'src' or 'dest'.
+   *
+   * @var string
+   */
+  protected $type;
+
+  /**
+   * The name of the package containing the file.
+   *
+   * @var string
+   */
+  protected $packageName;
+
+  /**
+   * The relative path to the file.
+   *
+   * @var string
+   */
+  protected $relativePath;
+
+  /**
+   * The full path to the file.
+   *
+   * @var string
+   */
+  protected $fullPath;
+
+  /**
+   * ScaffoldFilePath constructor.
+   *
+   * @param string $path_type
+   *   The type of scaffold file this is, 'src' or 'dest'.
+   * @param string $package_name
+   *   The name of the package containing the file.
+   * @param string $rel_path
+   *   The relative path to the file.
+   * @param string $full_path
+   *   The full path to the file.
+   */
+  public function __construct($path_type, $package_name, $rel_path, $full_path) {
+    $this->type = $path_type;
+    $this->packageName = $package_name;
+    $this->relativePath = $rel_path;
+    $this->fullPath = $full_path;
+
+    // Ensure that the full path really is a full path. We do not use
+    // 'realpath' here because the file specified by the full path might
+    // not exist yet.
+    $fs = new Filesystem();
+    if (!$fs->isAbsolutePath($this->fullPath)) {
+      $this->fullPath = getcwd() . '/' . $this->fullPath;
+    }
+  }
+
+  /**
+   * Gets the name of the package this source file was pulled from.
+   *
+   * @return string
+   *   Name of package.
+   */
+  public function packageName() {
+    return $this->packageName;
+  }
+
+  /**
+   * Gets the relative path to the source file (best to use in messages).
+   *
+   * @return string
+   *   Relative path to file.
+   */
+  public function relativePath() {
+    return $this->relativePath;
+  }
+
+  /**
+   * Gets the full path to the source file.
+   *
+   * @return string
+   *   Full path to file.
+   */
+  public function fullPath() {
+    return $this->fullPath;
+  }
+
+  /**
+   * Converts the relative source path into an absolute path.
+   *
+   * The path returned will be relative to the package installation location.
+   *
+   * @param string $package_name
+   *   The name of the package containing the source file. Only used for error
+   *   messages.
+   * @param string $package_path
+   *   The installation path of the package containing the source file.
+   * @param string $destination
+   *   Destination location provided as a relative path. Only used for error
+   *   messages.
+   * @param string $source
+   *   Source location provided as a relative path.
+   *
+   * @return self
+   *   Object wrapping the relative and absolute path to the source file.
+   */
+  public static function sourcePath($package_name, $package_path, $destination, $source) {
+    // Complain if there is no source path.
+    if (empty($source)) {
+      throw new \RuntimeException("No scaffold file path given for {$destination} in package {$package_name}.");
+    }
+    // Calculate the full path to the source scaffold file.
+    $source_full_path = $package_path . '/' . $source;
+    if (!file_exists($source_full_path)) {
+      throw new \RuntimeException("Scaffold file {$source} not found in package {$package_name}.");
+    }
+    if (is_dir($source_full_path)) {
+      throw new \RuntimeException("Scaffold file {$source} in package {$package_name} is a directory; only files may be scaffolded.");
+    }
+    return new self('src', $package_name, $source, $source_full_path);
+  }
+
+  /**
+   * Converts the relative destination path into an absolute path.
+   *
+   * Any placeholders in the destination path, e.g. '[web-root]', will be
+   * replaced using the provided location replacements interpolator.
+   *
+   * @param string $package_name
+   *   The name of the package defining the destination path.
+   * @param string $destination
+   *   The relative path to the destination file being scaffolded.
+   * @param \Drupal\Composer\Plugin\Scaffold\Interpolator $location_replacements
+   *   Interpolator that includes the [web-root] and any other available
+   *   placeholder replacements.
+   *
+   * @return self
+   *   Object wrapping the relative and absolute path to the destination file.
+   */
+  public static function destinationPath($package_name, $destination, Interpolator $location_replacements) {
+    $dest_full_path = $location_replacements->interpolate($destination);
+    return new self('dest', $package_name, $destination, $dest_full_path);
+  }
+
+  /**
+   * Adds data about the relative and full path to the provided interpolator.
+   *
+   * @param \Drupal\Composer\Plugin\Scaffold\Interpolator $interpolator
+   *   Interpolator to add data to.
+   * @param string $name_prefix
+   *   (optional) Prefix to add before -rel-path and -full-path item names.
+   *   Defaults to path type provided when constructing this object.
+   */
+  public function addInterpolationData(Interpolator $interpolator, $name_prefix = '') {
+    if (empty($name_prefix)) {
+      $name_prefix = $this->type;
+    }
+    $data = [
+      'package-name' => $this->packageName(),
+      "{$name_prefix}-rel-path" => $this->relativePath(),
+      "{$name_prefix}-full-path" => $this->fullPath(),
+    ];
+    $interpolator->addData($data);
+  }
+
+  /**
+   * Interpolate a string using the data from this scaffold file info.
+   *
+   * @param string $name_prefix
+   *   (optional) Prefix to add before -rel-path and -full-path item names.
+   *   Defaults to path type provided when constructing this object.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Interpolator
+   *   An interpolator for making string replacements.
+   */
+  public function getInterpolator($name_prefix = '') {
+    $interpolator = new Interpolator();
+    $this->addInterpolationData($interpolator, $name_prefix);
+    return $interpolator;
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/ScaffoldOptions.php b/vendor/drupal/core-composer-scaffold/ScaffoldOptions.php
new file mode 100644
index 0000000000..05cd864245
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/ScaffoldOptions.php
@@ -0,0 +1,203 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold;
+
+/**
+ * Per-project options from the 'extras' section of the composer.json file.
+ *
+ * Projects that describe scaffold files do so via their scaffold options. This
+ * data is pulled from the 'drupal-scaffold' portion of the extras section of
+ * the project data.
+ *
+ * @internal
+ */
+class ScaffoldOptions {
+
+  /**
+   * The raw data from the 'extras' section of the top-level composer.json file.
+   *
+   * @var array
+   */
+  protected $options = [];
+
+  /**
+   * ScaffoldOptions constructor.
+   *
+   * @param array $options
+   *   The scaffold options taken from the 'drupal-scaffold' section.
+   */
+  protected function __construct(array $options) {
+    $this->options = $options + [
+      "allowed-packages" => [],
+      "locations" => [],
+      "symlink" => FALSE,
+      "file-mapping" => [],
+    ];
+
+    // Define any default locations.
+    $this->options['locations'] += [
+      'project-root' => '.',
+      'web-root' => '.',
+    ];
+  }
+
+  /**
+   * Determines if the provided 'extras' section has scaffold options.
+   *
+   * @param array $extras
+   *   The contents of the 'extras' section.
+   *
+   * @return bool
+   *   True if scaffold options have been declared
+   */
+  public static function hasOptions(array $extras) {
+    return array_key_exists('drupal-scaffold', $extras);
+  }
+
+  /**
+   * Creates a scaffold options object.
+   *
+   * @param array $extras
+   *   The contents of the 'extras' section.
+   *
+   * @return self
+   *   The scaffold options object representing the provided scaffold options
+   */
+  public static function create(array $extras) {
+    $options = static::hasOptions($extras) ? $extras['drupal-scaffold'] : [];
+    return new self($options);
+  }
+
+  /**
+   * Creates a new scaffold options object with some values overridden.
+   *
+   * @param array $options
+   *   Override values.
+   *
+   * @return self
+   *   The scaffold options object representing the provided scaffold options
+   */
+  protected function override(array $options) {
+    return new self($options + $this->options);
+  }
+
+  /**
+   * Creates a new scaffold options object with an overridden 'symlink' value.
+   *
+   * @param bool $symlink
+   *   Whether symlinking should be enabled or not.
+   *
+   * @return self
+   *   The scaffold options object representing the provided scaffold options
+   */
+  public function overrideSymlink($symlink) {
+    return $this->override(['symlink' => $symlink]);
+  }
+
+  /**
+   * Determines whether any allowed packages were defined.
+   *
+   * @return bool
+   *   Whether there are allowed packages
+   */
+  public function hasAllowedPackages() {
+    return !empty($this->allowedPackages());
+  }
+
+  /**
+   * Gets allowed packages from these options.
+   *
+   * @return array
+   *   The list of allowed packages
+   */
+  public function allowedPackages() {
+    return $this->options['allowed-packages'];
+  }
+
+  /**
+   * Gets the location mapping table, e.g. 'webroot' => './'.
+   *
+   * @return array
+   *   A map of name : location values
+   */
+  public function locations() {
+    return $this->options['locations'];
+  }
+
+  /**
+   * Determines whether a given named location is defined.
+   *
+   * @param string $name
+   *   The location name to search for.
+   *
+   * @return bool
+   *   True if the specified named location exist.
+   */
+  protected function hasLocation($name) {
+    return array_key_exists($name, $this->locations());
+  }
+
+  /**
+   * Gets a specific named location.
+   *
+   * @param string $name
+   *   The name of the location to fetch.
+   *
+   * @return string
+   *   The value of the provided named location
+   */
+  public function getLocation($name) {
+    return $this->hasLocation($name) ? $this->locations()[$name] : FALSE;
+  }
+
+  /**
+   * Determines if symlink mode is set.
+   *
+   * @return bool
+   *   Whether or not 'symlink' mode
+   */
+  public function symlink() {
+    return $this->options['symlink'];
+  }
+
+  /**
+   * Determines if there are file mappings.
+   *
+   * @return bool
+   *   Whether or not the scaffold options contain any file mappings
+   */
+  public function hasFileMapping() {
+    return !empty($this->fileMapping());
+  }
+
+  /**
+   * Returns the actual file mappings.
+   *
+   * @return array
+   *   File mappings for just this config type.
+   */
+  public function fileMapping() {
+    return $this->options['file-mapping'];
+  }
+
+  /**
+   * Determines if there is defined a value for the 'gitignore' option.
+   *
+   * @return bool
+   *   Whether or not there is a 'gitignore' option setting
+   */
+  public function hasGitIgnore() {
+    return isset($this->options['gitignore']);
+  }
+
+  /**
+   * Gets the value of the 'gitignore' option.
+   *
+   * @return bool
+   *   The 'gitignore' option, or TRUE if undefined.
+   */
+  public function gitIgnore() {
+    return $this->hasGitIgnore() ? $this->options['gitignore'] : TRUE;
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/TESTING.txt b/vendor/drupal/core-composer-scaffold/TESTING.txt
new file mode 100644
index 0000000000..429c3f7a45
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/TESTING.txt
@@ -0,0 +1,18 @@
+HOW-TO: Test this Drupal composer plugin
+
+In order to test this plugin, you'll need to get the entire Drupal repo and
+run the tests there.
+
+You'll find the tests under core/tests/Drupal/Tests/Composer/Plugin.
+
+You can get the full Drupal repo here:
+https://www.drupal.org/project/drupal/git-instructions
+
+You can find more information about running PHPUnit tests with Drupal here:
+https://www.drupal.org/node/2116263
+
+Each component in the Drupal\Composer\Plugin namespace has its own annotated test
+group. You can use this group to run only the tests for this component. Like
+this:
+
+$ ./vendor/bin/phpunit -c core --group Scaffold
diff --git a/vendor/drupal/core-composer-scaffold/composer.json b/vendor/drupal/core-composer-scaffold/composer.json
new file mode 100644
index 0000000000..ca9d6d7b48
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/composer.json
@@ -0,0 +1,32 @@
+{
+  "name": "drupal/core-composer-scaffold",
+  "description": "A flexible Composer project scaffold builder.",
+  "type": "composer-plugin",
+  "keywords": ["drupal"],
+  "homepage": "https://www.drupal.org/project/drupal",
+  "license": "GPL-2.0-or-later",
+  "require": {
+    "composer-plugin-api": "^1 || ^2",
+    "php": ">=7.3.0"
+  },
+  "conflict": {
+    "drupal-composer/drupal-scaffold": "*"
+  },
+  "autoload": {
+    "psr-4": {
+      "Drupal\\Composer\\Plugin\\Scaffold\\": ""
+    }
+  },
+  "extra": {
+    "class": "Drupal\\Composer\\Plugin\\Scaffold\\Plugin",
+    "branch-alias": {
+      "dev-master": "1.0.x-dev"
+    }
+  },
+  "config": {
+    "sort-packages": true
+  },
+  "require-dev": {
+    "composer/composer": "^1.8@stable"
+  }
+}
diff --git a/vendor/rvtraveller/qs-composer-installer/LICENSE b/vendor/rvtraveller/qs-composer-installer/LICENSE
deleted file mode 100644
index a80b363ea4..0000000000
--- a/vendor/rvtraveller/qs-composer-installer/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2016 Brian Thompson
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/vendor/rvtraveller/qs-composer-installer/README.md b/vendor/rvtraveller/qs-composer-installer/README.md
deleted file mode 100644
index 05a64b0693..0000000000
--- a/vendor/rvtraveller/qs-composer-installer/README.md
+++ /dev/null
@@ -1,22 +0,0 @@
-# Quicksilver Composer Installer #
-
-Creates a new "type" in Composer for `quicksilver-script`s so you can treat them separately in Composer installations.  This allows you to include Quicksilver scripts as part of a composer based project on Pantheon[https://pantheon.io].
-
-To use this custom installer, require it in your project (root-level) composer.json file. Then, any Composer project of type `quicksiver-script` will be placed in the directory `web/private/scripts/quicksilver`. This path may be customized in the `installer-paths` item in `extras`.
-
-The `web/private/scripts/quicksilver` path (or your customized path) should be added to your project's .gitignore.
-
-## Example composer.json file ##
-
-```
-{
-  "require": {
-    "rvtraveller/qs-composer-installer": "1.0"
-  },
-  "extra": {
-    "installer-paths": {
-      "web/private/scripts/quicksilver/{$name}": ["type:quicksilver-script"]
-    }
-  }
-}
-```
diff --git a/vendor/rvtraveller/qs-composer-installer/composer.json b/vendor/rvtraveller/qs-composer-installer/composer.json
deleted file mode 100644
index 2ff33116fa..0000000000
--- a/vendor/rvtraveller/qs-composer-installer/composer.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
-  "name": "rvtraveller/qs-composer-installer",
-  "description": "Install Quicksilver modules for Pantheon into custom locations.",
-  "type": "composer-plugin",
-  "license": "MIT",
-  "homepage": "https://github.com/rvtraveller/qs-composer-installer",
-  "autoload": {
-    "psr-4": {
-      "rvtraveller\\QuicksilverComposerInstaller\\": "src"
-    }
-  },
-  "extra": {
-    "class": "rvtraveller\\QuicksilverComposerInstaller\\QuicksilverComposerInstallerPlugin"
-  },
-  "require": {
-    "composer-plugin-api": "~1.0",
-    "composer/installers": "~1.0"
-  },
-  "require-dev": {
-    "composer/composer": "~1.0@dev"
-  }
-}
diff --git a/vendor/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstaller.php b/vendor/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstaller.php
deleted file mode 100644
index 91dd99d361..0000000000
--- a/vendor/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstaller.php
+++ /dev/null
@@ -1,111 +0,0 @@
-<?php
-
-namespace rvtraveller\QuicksilverComposerInstaller;
-
-use Composer\Package\PackageInterface;
-use Composer\Installer\LibraryInstaller;
-
-class QuicksilverComposerInstaller extends LibraryInstaller
-{
-
-
-  /**
-   * Replace vars in a path
-   *
-   * @param  string $path
-   * @param  array  $vars
-   * @return string
-   */
-  protected function templatePath($path, array $vars = array())
-  {
-    if (strpos($path, '{') !== false) {
-      extract($vars);
-      preg_match_all('@\{\$([A-Za-z0-9_]*)\}@i', $path, $matches);
-      if (!empty($matches[1])) {
-        foreach ($matches[1] as $var) {
-          $path = str_replace('{$' . $var . '}', $$var, $path);
-        }
-      }
-    }
-
-    return $path;
-  }
-
-  /**
-   * Search through a passed paths array for a custom install path.
-   *
-   * @param  array  $paths
-   * @param  string $name
-   * @param  string $type
-   * @param  string $vendor = NULL
-   * @return string
-   */
-  protected function mapCustomInstallPaths(array $paths, $name, $type, $vendor = NULL)
-  {
-    foreach ($paths as $path => $names) {
-      if (in_array($name, $names) || in_array('type:' . $type, $names) || in_array('vendor:' . $vendor, $names)) {
-        return $path;
-      }
-    }
-
-    return false;
-  }
-
-  /**
-   * Return the install path based on package type.
-   *
-   * @param  PackageInterface $package
-   * @param  string           $frameworkType
-   * @return string
-   */
-  public function getInstallPath(PackageInterface $package, $frameworkType = '')
-  {
-    $packageType = $package->getType();
-
-    $prettyName = $package->getPrettyName();
-    if (strpos($prettyName, '/') !== false) {
-      list($vendor, $name) = explode('/', $prettyName);
-    } else {
-      $vendor = '';
-      $name = $prettyName;
-    }
-
-    $availableVars = [
-      'name' => $name,
-      'vendor' => $vendor,
-      'type' => $packageType
-    ];
-
-    $extra = $package->getExtra();
-    if (!empty($extra['installer-name'])) {
-      $availableVars['name'] = $extra['installer-name'];
-    }
-
-    if ($this->composer->getPackage()) {
-      $extra = $this->composer->getPackage()->getExtra();
-      if (!empty($extra['installer-paths'])) {
-        $customPath = $this->mapCustomInstallPaths($extra['installer-paths'], $prettyName, $packageType, $vendor);
-        if ($customPath !== false) {
-          return $this->templatePath($customPath, $availableVars);
-        }
-      }
-    }
-
-    $locations = [
-      'quicksilver-script' => 'web/private/scripts/quicksilver/{$name}/',
-      'quicksilver-module' => 'web/private/scripts/quicksilver/{$name}/',
-    ];
-
-    return $this->templatePath($locations[$packageType], $availableVars);
-  }
-
-
-  /**
-   * {@inheritDoc}
-   */
-  public function supports($packageType)
-  {
-    return in_array($packageType, ['quicksilver-script', 'quicksilver-module']);
-  }
-
-}
diff --git a/vendor/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstallerPlugin.php b/vendor/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstallerPlugin.php
deleted file mode 100644
index 0e8e27effb..0000000000
--- a/vendor/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstallerPlugin.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-
-namespace rvtraveller\QuicksilverComposerInstaller;
-
-use Composer\Composer;
-use Composer\IO\IOInterface;
-use Composer\Plugin\PluginInterface;
-
-class QuicksilverComposerInstallerPlugin implements PluginInterface
-{
-  public function activate(Composer $composer, IOInterface $io)
-  {
-    // Strange autoloading problem on CircleCI
-    if (!class_exists(QuickSilverComposerInstaller::class)) {
-      include_once __DIR__ . '/QuicksilverComposerInstaller.php';
-    }
-    $installer = new QuickSilverComposerInstaller($io, $composer);
-    $composer->getInstallationManager()->addInstaller($installer);
-  }
-}
diff --git a/web/.csslintrc b/web/.csslintrc
new file mode 100644
index 0000000000..177e4fcc7e
--- /dev/null
+++ b/web/.csslintrc
@@ -0,0 +1,40 @@
+--errors=box-model,
+         display-property-grouping,
+         duplicate-background-images,
+         duplicate-properties,
+         empty-rules,
+         ids,
+         import,
+         important,
+         known-properties,
+         outline-none,
+         overqualified-elements,
+         qualified-headings,
+         shorthand,
+         star-property-hack,
+         text-indent,
+         underscore-property-hack,
+         unique-headings,
+         unqualified-attributes,
+         vendor-prefix,
+         zero-units
+--ignore=adjoining-classes,
+         box-sizing,
+         bulletproof-font-face,
+         compatible-vendor-prefixes,
+         errors,
+         fallback-colors,
+         floats,
+         font-faces,
+         font-sizes,
+         gradients,
+         import-ie-limit,
+         order-alphabetical,
+         regex-selectors,
+         rules-count,
+         selector-max,
+         selector-max-approaching,
+         selector-newline,
+         universal-selector
+--exclude-list=core/assets,
+               vendor
diff --git a/web/.eslintignore b/web/.eslintignore
new file mode 100644
index 0000000000..9c134873d4
--- /dev/null
+++ b/web/.eslintignore
@@ -0,0 +1,8 @@
+core/**/*
+vendor/**/*
+sites/**/files/**/*
+libraries/**/*
+sites/**/libraries/**/*
+profiles/**/libraries/**/*
+**/js_test_files/**/*
+**/node_modules/**/*
diff --git a/web/.eslintrc.json b/web/.eslintrc.json
new file mode 100644
index 0000000000..d4bbc92052
--- /dev/null
+++ b/web/.eslintrc.json
@@ -0,0 +1,3 @@
+{
+  "extends": "./core/.eslintrc.json"
+}
diff --git a/web/.htaccess b/web/.htaccess
index 09b703d23f..6f9123d14b 100644
--- a/web/.htaccess
+++ b/web/.htaccess
@@ -3,7 +3,7 @@
 #
 
 # Protect files and directories from prying eyes.
-<FilesMatch "\.(engine|inc|install|make|module|profile|po|sh|.*sql|theme|twig|tpl(\.php)?|xtmpl|yml)(~|\.sw[op]|\.bak|\.orig|\.save)?$|^(\.(?!well-known).*|Entries.*|Repository|Root|Tag|Template|composer\.(json|lock))$|^#.*#$|\.php(~|\.sw[op]|\.bak|\.orig|\.save)$">
+<FilesMatch "\.(engine|inc|install|make|module|profile|po|sh|.*sql|theme|twig|tpl(\.php)?|xtmpl|yml)(~|\.sw[op]|\.bak|\.orig|\.save)?$|^(\.(?!well-known).*|Entries.*|Repository|Root|Tag|Template|composer\.(json|lock)|web\.config)$|^#.*#$|\.php(~|\.sw[op]|\.bak|\.orig|\.save)$">
   <IfModule mod_authz_core.c>
     Require all denied
   </IfModule>
@@ -27,16 +27,9 @@ AddEncoding gzip svgz
 # Drupal\Core\DrupalKernel::bootEnvironment() for settings that can be
 # changed at runtime.
 
-# PHP 5, Apache 1 and 2.
-<IfModule mod_php5.c>
+# PHP 7, Apache 1 and 2.
+<IfModule mod_php7.c>
   php_value assert.active                   0
-  php_flag session.auto_start               off
-  php_value mbstring.http_input             pass
-  php_value mbstring.http_output            pass
-  php_flag mbstring.encoding_translation    off
-  # PHP 5.6 has deprecated $HTTP_RAW_POST_DATA and produces warnings if this is
-  # not set.
-  php_value always_populate_raw_post_data   -1
 </IfModule>
 
 # Requires mod_expires to be enabled.
@@ -144,7 +137,6 @@ AddEncoding gzip svgz
   # security, you can replace '!/' with '!^/'.
   # Allow access to PHP files in /core (like authorize.php or install.php):
   RewriteCond %{REQUEST_URI} !/core/[^/]*\.php$
-  RewriteCond %{REQUEST_URI} !/simplesaml/[^/]*\.php.*$
   # Allow access to test-specific PHP files:
   RewriteCond %{REQUEST_URI} !/core/modules/system/tests/https?.php
   # Allow access to Statistics module's custom front controller.
@@ -168,9 +160,9 @@ AddEncoding gzip svgz
     RewriteCond %{REQUEST_FILENAME}\.gz -s
     RewriteRule ^(.*)\.js $1\.js\.gz [QSA]
 
-    # Serve correct content types, and prevent mod_deflate double gzip.
-    RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1]
-    RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1]
+    # Serve correct content types, and prevent double compression.
+    RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1,E=no-brotli:1]
+    RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1,E=no-brotli:1]
 
     <FilesMatch "(\.js\.gz|\.css\.gz)$">
       # Serve correct encoding type.
-- 
GitLab


From 7f34af52a8606db7c36f4aef3c58812db310e96a Mon Sep 17 00:00:00 2001
From: Brian Weaver <weaver.299@osu.edu>
Date: Mon, 30 Nov 2020 15:10:02 -0500
Subject: [PATCH 17/23] remove zaporylie/composer-drupal-optimizations

---
 composer.json                                 |   3 +-
 composer.lock                                 |  45 +----
 vendor/composer/autoload_classmap.php         |   3 -
 vendor/composer/autoload_psr4.php             |   1 -
 vendor/composer/autoload_static.php           |  11 --
 vendor/composer/installed.json                |  45 -----
 .../composer-drupal-optimizations/.gitignore  |   4 -
 .../composer-drupal-optimizations/.travis.yml |  47 -----
 .../composer-drupal-optimizations/README.md   |  68 --------
 .../composer.json                             |  27 ---
 .../phpunit.xml.dist                          |  27 ---
 .../src/Cache.php                             | 127 --------------
 .../src/Plugin.php                            |  71 --------
 .../src/TruncatedComposerRepository.php       |  26 ---
 .../tests/CacheTest.php                       | 161 ------------------
 .../tests/DefaultRequireTest.php              |  40 -----
 16 files changed, 2 insertions(+), 704 deletions(-)
 delete mode 100644 vendor/zaporylie/composer-drupal-optimizations/.gitignore
 delete mode 100644 vendor/zaporylie/composer-drupal-optimizations/.travis.yml
 delete mode 100644 vendor/zaporylie/composer-drupal-optimizations/README.md
 delete mode 100644 vendor/zaporylie/composer-drupal-optimizations/composer.json
 delete mode 100644 vendor/zaporylie/composer-drupal-optimizations/phpunit.xml.dist
 delete mode 100644 vendor/zaporylie/composer-drupal-optimizations/src/Cache.php
 delete mode 100644 vendor/zaporylie/composer-drupal-optimizations/src/Plugin.php
 delete mode 100644 vendor/zaporylie/composer-drupal-optimizations/src/TruncatedComposerRepository.php
 delete mode 100644 vendor/zaporylie/composer-drupal-optimizations/tests/CacheTest.php
 delete mode 100644 vendor/zaporylie/composer-drupal-optimizations/tests/DefaultRequireTest.php

diff --git a/composer.json b/composer.json
index 2348c7adb5..b87ed6814c 100644
--- a/composer.json
+++ b/composer.json
@@ -191,8 +191,7 @@
         "enyo/dropzone": "5.1.1",
         "gdsmith/jquery.easing": "1.4.1",
         "oomphinc/composer-installers-extender": "2.0",
-        "pantheon-systems/quicksilver-pushback": "1.0.1",
-        "zaporylie/composer-drupal-optimizations": "1.1"
+        "pantheon-systems/quicksilver-pushback": "1.0.1"
     },
     "require-dev": {},
     "conflict": {
diff --git a/composer.lock b/composer.lock
index 49f64243a6..f65fb16877 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "df313a5863c9258df18719ef6cfe21e0",
+    "content-hash": "04322a544764f633495fd1d9c5c319f8",
     "packages": [
         {
             "name": "alchemy/zippy",
@@ -13427,49 +13427,6 @@
                 "apr1"
             ],
             "time": "2015-02-11T11:06:42+00:00"
-        },
-        {
-            "name": "zaporylie/composer-drupal-optimizations",
-            "version": "1.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/zaporylie/composer-drupal-optimizations.git",
-                "reference": "173c198fd7c9aefa5e5b68cd755ee63eb0abf7e8"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/zaporylie/composer-drupal-optimizations/zipball/173c198fd7c9aefa5e5b68cd755ee63eb0abf7e8",
-                "reference": "173c198fd7c9aefa5e5b68cd755ee63eb0abf7e8",
-                "shasum": ""
-            },
-            "require": {
-                "composer-plugin-api": "^1.1"
-            },
-            "require-dev": {
-                "composer/composer": "^1.6",
-                "phpunit/phpunit": "^6"
-            },
-            "type": "composer-plugin",
-            "extra": {
-                "class": "zaporylie\\ComposerDrupalOptimizations\\Plugin"
-            },
-            "autoload": {
-                "psr-4": {
-                    "zaporylie\\ComposerDrupalOptimizations\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "GPL-2.0-or-later"
-            ],
-            "authors": [
-                {
-                    "name": "Jakub Piasecki",
-                    "email": "jakub@piaseccy.pl"
-                }
-            ],
-            "description": "Composer plugin to improve composer performance for Drupal projects",
-            "time": "2019-02-20T10:00:17+00:00"
         }
     ],
     "packages-dev": [],
diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php
index fde1ea6131..817a87ee3d 100644
--- a/vendor/composer/autoload_classmap.php
+++ b/vendor/composer/autoload_classmap.php
@@ -6027,7 +6027,4 @@
     'enshrined\\svgSanitize\\data\\AttributeInterface' => $vendorDir . '/enshrined/svg-sanitize/src/data/AttributeInterface.php',
     'enshrined\\svgSanitize\\data\\TagInterface' => $vendorDir . '/enshrined/svg-sanitize/src/data/TagInterface.php',
     'enshrined\\svgSanitize\\data\\XPath' => $vendorDir . '/enshrined/svg-sanitize/src/data/XPath.php',
-    'zaporylie\\ComposerDrupalOptimizations\\Cache' => $vendorDir . '/zaporylie/composer-drupal-optimizations/src/Cache.php',
-    'zaporylie\\ComposerDrupalOptimizations\\Plugin' => $vendorDir . '/zaporylie/composer-drupal-optimizations/src/Plugin.php',
-    'zaporylie\\ComposerDrupalOptimizations\\TruncatedComposerRepository' => $vendorDir . '/zaporylie/composer-drupal-optimizations/src/TruncatedComposerRepository.php',
 );
diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php
index f6474efec0..204fed7266 100644
--- a/vendor/composer/autoload_psr4.php
+++ b/vendor/composer/autoload_psr4.php
@@ -6,7 +6,6 @@
 $baseDir = dirname($vendorDir);
 
 return array(
-    'zaporylie\\ComposerDrupalOptimizations\\' => array($vendorDir . '/zaporylie/composer-drupal-optimizations/src'),
     'enshrined\\svgSanitize\\' => array($vendorDir . '/enshrined/svg-sanitize/src'),
     'cweagans\\Composer\\' => array($vendorDir . '/cweagans/composer-patches/src'),
     'XdgBaseDir\\' => array($vendorDir . '/dnoegel/php-xdg-base-dir/src'),
diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php
index 1509b85962..1d7b45c22e 100644
--- a/vendor/composer/autoload_static.php
+++ b/vendor/composer/autoload_static.php
@@ -44,10 +44,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
     );
 
     public static $prefixLengthsPsr4 = array (
-        'z' => 
-        array (
-            'zaporylie\\ComposerDrupalOptimizations\\' => 38,
-        ),
         'e' => 
         array (
             'enshrined\\svgSanitize\\' => 22,
@@ -203,10 +199,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
     );
 
     public static $prefixDirsPsr4 = array (
-        'zaporylie\\ComposerDrupalOptimizations\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/zaporylie/composer-drupal-optimizations/src',
-        ),
         'enshrined\\svgSanitize\\' => 
         array (
             0 => __DIR__ . '/..' . '/enshrined/svg-sanitize/src',
@@ -6696,9 +6688,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'enshrined\\svgSanitize\\data\\AttributeInterface' => __DIR__ . '/..' . '/enshrined/svg-sanitize/src/data/AttributeInterface.php',
         'enshrined\\svgSanitize\\data\\TagInterface' => __DIR__ . '/..' . '/enshrined/svg-sanitize/src/data/TagInterface.php',
         'enshrined\\svgSanitize\\data\\XPath' => __DIR__ . '/..' . '/enshrined/svg-sanitize/src/data/XPath.php',
-        'zaporylie\\ComposerDrupalOptimizations\\Cache' => __DIR__ . '/..' . '/zaporylie/composer-drupal-optimizations/src/Cache.php',
-        'zaporylie\\ComposerDrupalOptimizations\\Plugin' => __DIR__ . '/..' . '/zaporylie/composer-drupal-optimizations/src/Plugin.php',
-        'zaporylie\\ComposerDrupalOptimizations\\TruncatedComposerRepository' => __DIR__ . '/..' . '/zaporylie/composer-drupal-optimizations/src/TruncatedComposerRepository.php',
     );
 
     public static function getInitializer(ClassLoader $loader)
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 18ddc716df..20a73a20d6 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -13862,50 +13862,5 @@
             "MD5",
             "apr1"
         ]
-    },
-    {
-        "name": "zaporylie/composer-drupal-optimizations",
-        "version": "1.1.0",
-        "version_normalized": "1.1.0.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/zaporylie/composer-drupal-optimizations.git",
-            "reference": "173c198fd7c9aefa5e5b68cd755ee63eb0abf7e8"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/zaporylie/composer-drupal-optimizations/zipball/173c198fd7c9aefa5e5b68cd755ee63eb0abf7e8",
-            "reference": "173c198fd7c9aefa5e5b68cd755ee63eb0abf7e8",
-            "shasum": ""
-        },
-        "require": {
-            "composer-plugin-api": "^1.1"
-        },
-        "require-dev": {
-            "composer/composer": "^1.6",
-            "phpunit/phpunit": "^6"
-        },
-        "time": "2019-02-20T10:00:17+00:00",
-        "type": "composer-plugin",
-        "extra": {
-            "class": "zaporylie\\ComposerDrupalOptimizations\\Plugin"
-        },
-        "installation-source": "dist",
-        "autoload": {
-            "psr-4": {
-                "zaporylie\\ComposerDrupalOptimizations\\": "src/"
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "GPL-2.0-or-later"
-        ],
-        "authors": [
-            {
-                "name": "Jakub Piasecki",
-                "email": "jakub@piaseccy.pl"
-            }
-        ],
-        "description": "Composer plugin to improve composer performance for Drupal projects"
     }
 ]
diff --git a/vendor/zaporylie/composer-drupal-optimizations/.gitignore b/vendor/zaporylie/composer-drupal-optimizations/.gitignore
deleted file mode 100644
index 6de133df86..0000000000
--- a/vendor/zaporylie/composer-drupal-optimizations/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-/vendor/
-composer.lock
-.phpunit.result.cache
-/test
diff --git a/vendor/zaporylie/composer-drupal-optimizations/.travis.yml b/vendor/zaporylie/composer-drupal-optimizations/.travis.yml
deleted file mode 100644
index addd889106..0000000000
--- a/vendor/zaporylie/composer-drupal-optimizations/.travis.yml
+++ /dev/null
@@ -1,47 +0,0 @@
-language: php
-dist: trusty
-sudo: false
-
-php:
-  - 5.6
-  - 7.0
-  - 7.1
-  - 7.2
-  - 7.3
-
-env:
-  matrix:
-    - RELEASE=stable COMPOSER_CHANNEL=stable
-    - RELEASE=dev COMPOSER_CHANNEL=stable
-    - RELEASE=stable COMPOSER_CHANNEL=snapshot
-
-matrix:
-  exclude:
-    - php: 5.6
-      env: RELEASE=dev COMPOSER_CHANNEL=stable
-    - php: 5.6
-      env: RELEASE=stable COMPOSER_CHANNEL=snapshot
-
-before_install:
-  - if [[ $TRAVIS_PHP_VERSION = 5.6 ]]; then export COMPOSER_MEMORY_LIMIT=-1; fi;
-  - composer --verbose self-update --$COMPOSER_CHANNEL
-  - composer --version
-
-install:
-  - composer --verbose validate
-
-script:
-  # Run automated tests.
-  - if [[ ${TRAVIS_PHP_VERSION:0:3} != "5.6" ]]; then composer install && ./vendor/bin/phpunit; fi
-  - cd .. && composer create-project drupal-composer/drupal-project:8.x-dev drupal-project --stability dev --no-interaction
-  - ls -lah . && cd drupal-project
-  # zaporylie/composer-drupal-optimizations has been added to drupal-composer/drupal-project and now must be removed
-  # in order to measure the performance change.
-  - composer remove zaporylie/composer-drupal-optimizations
-  - if [[ $RELEASE = dev ]]; then composer --verbose require --no-update --dev webflo/drupal-core-require-dev:8.6.x-dev; fi;
-  - if [[ $RELEASE = dev ]]; then composer --verbose require --no-update drupal/core:8.6.x-dev; fi;
-  - if [[ $RELEASE = dev ]]; then composer --verbose update; fi;
-  # Check the performance.
-  - composer update nothing --profile
-  - composer config repositories.local path "../composer-drupal-optimizations" && composer require zaporylie/composer-drupal-optimizations:@dev
-  - composer update nothing --profile
diff --git a/vendor/zaporylie/composer-drupal-optimizations/README.md b/vendor/zaporylie/composer-drupal-optimizations/README.md
deleted file mode 100644
index 182be1a5d9..0000000000
--- a/vendor/zaporylie/composer-drupal-optimizations/README.md
+++ /dev/null
@@ -1,68 +0,0 @@
-Optimize Composer for Drupal projects
-====
-[![Build Status](https://travis-ci.org/zaporylie/composer-drupal-optimizations.svg?branch=master)](https://travis-ci.org/zaporylie/composer-drupal-optimizations)
-![Packagist](https://img.shields.io/packagist/v/zaporylie/composer-drupal-optimizations.svg)
-
-
-# About
-
-This composer-plugin contains set of improvements that makes running heavy duty composer commands (i.e. `composer update` or `composer require`) much faster.
-
-# Installation
-
-```bash
-composer require zaporylie/composer-drupal-optimizations:^1.0
-```
-
-No configuration required 🎊
-
-# Optimizations
-
-- Reduce memory usage and CPU usage by removing legacy symfony tags
-
-# Benchmark
-
-Following numbers are for clean https://github.com/drupal-composer/drupal-project/ without and with this plugin.
-
-Before:
-
-```
-Memory usage: 323.19MB (peak: 1121.09MB), time: 13.68s
-```
-
-After:
-
-```
-Memory usage: 238.66MB (peak: 297.17MB), time: 4.84s
-```
-
-> php 7.2, macOS High Sierra, i7, 16GB RAM
-
-# Configuration
-
-If no configuration is provided this package will provide sensible defaults based on the content of project's composer.json
-file. Default configuration should cover 99% of the cases. However, in case you want to manually specify the tags
-that should be filtered out you are welcome to use the `extra` section:
-
-```json
-{
-  "extra": {
-    "composer-drupal-optimizations": {
-      "require": {
-        "symfony/symfony": ">3.4"
-      }
-    }
-  }
-}
-```
-
-***Recommendation note:***
-Use defaults (skip config above) if possible - this package will be maintained throughout the Drupal's lifecycle in order
-to optimize legacy constraints in parallel with Drupal's requirements.
-
-All you have to do is to make sure your drupal core constraint is set to `drupal/core: ^8.5` or above.
-
-# Credits
-
-- Symfony community - idea and development; Special thanks to @nicolas-grekas
-- Jakub Piasecki - port and maintenance
diff --git a/vendor/zaporylie/composer-drupal-optimizations/composer.json b/vendor/zaporylie/composer-drupal-optimizations/composer.json
deleted file mode 100644
index 415f844a3f..0000000000
--- a/vendor/zaporylie/composer-drupal-optimizations/composer.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
-    "name": "zaporylie/composer-drupal-optimizations",
-    "description": "Composer plugin to improve composer performance for Drupal projects",
-    "type": "composer-plugin",
-    "license": "GPL-2.0-or-later",
-    "authors": [
-        {
-            "name": "Jakub Piasecki",
-            "email": "jakub@piaseccy.pl"
-        }
-    ],
-    "require": {
-        "composer-plugin-api": "^1.1"
-    },
-    "require-dev": {
-        "composer/composer": "^1.6",
-        "phpunit/phpunit": "^6"
-    },
-    "autoload": {
-        "psr-4": {
-            "zaporylie\\ComposerDrupalOptimizations\\": "src/"
-        }
-    },
-    "extra": {
-        "class": "zaporylie\\ComposerDrupalOptimizations\\Plugin"
-    }
-}
diff --git a/vendor/zaporylie/composer-drupal-optimizations/phpunit.xml.dist b/vendor/zaporylie/composer-drupal-optimizations/phpunit.xml.dist
deleted file mode 100644
index 179ca29b14..0000000000
--- a/vendor/zaporylie/composer-drupal-optimizations/phpunit.xml.dist
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit backupGlobals="true"
-         backupStaticAttributes="false"
-         colors="true"
-         convertErrorsToExceptions="true"
-         convertNoticesToExceptions="true"
-         convertWarningsToExceptions="true"
-         processIsolation="false"
-         stopOnFailure="false"
->
-    <testsuites>
-        <testsuite name="Test Suite">
-            <directory>./tests</directory>
-        </testsuite>
-    </testsuites>
-
-    <php>
-        <ini name="error_reporting" value="-1" />
-    </php>
-
-    <filter>
-        <whitelist>
-            <directory>./src/</directory>
-        </whitelist>
-    </filter>
-</phpunit>
diff --git a/vendor/zaporylie/composer-drupal-optimizations/src/Cache.php b/vendor/zaporylie/composer-drupal-optimizations/src/Cache.php
deleted file mode 100644
index 815b43286e..0000000000
--- a/vendor/zaporylie/composer-drupal-optimizations/src/Cache.php
+++ /dev/null
@@ -1,127 +0,0 @@
-<?php
-
-namespace zaporylie\ComposerDrupalOptimizations;
-
-use Composer\Cache as BaseCache;
-use Composer\Semver\Constraint\Constraint;
-use Composer\Semver\VersionParser;
-
-/**
- * Class Cache
- * @package zaporylie\ComposerDrupalOptimizations
- */
-class Cache extends BaseCache
-{
-
-    /**
-     * @var array
-     */
-    protected $packages = [];
-
-    /**
-     * @var \Composer\Semver\VersionParser
-     */
-    protected $versionParser;
-
-    /**
-     * {@inheritdoc}
-     */
-    public function read($file)
-    {
-        $content = $this->readFile($file);
-        if (!\is_array($data = json_decode($content, true))) {
-            return $content;
-        }
-        foreach (array_keys($this->packages) as $key) {
-            list($provider, ) = explode('/', $key, 2);
-            if (0 === strpos($file, "provider-$provider\$")) {
-                $data = $this->removeLegacyTags($data);
-                break;
-            }
-        }
-        return json_encode($data);
-    }
-
-    protected function readFile($file)
-    {
-        return parent::read($file);
-    }
-
-    /**
-     * Removes legacy tags from $data.
-     *
-     * @param array $data
-     * @return array
-     */
-    public function removeLegacyTags(array $data)
-    {
-        // Skip if the list of packages is empty.
-        if (!$this->packages || empty($data['packages'])) {
-            return $data;
-        }
-
-        // Skip if none of the packages was found.
-        if (!array_diff_key($data['packages'], $this->packages)) {
-            return $data;
-        }
-
-        foreach ($this->packages as $packageName => $packageVersionConstraint) {
-            if (!isset($data['packages'][$packageName])) {
-                continue;
-            }
-            $packages = [];
-            $specificPackage = $data['packages'][$packageName];
-            foreach ($specificPackage as $version => $composerJson) {
-                if ('dev-master' === $version) {
-                    $normalizedVersion = $this->versionParser->normalize($composerJson['extra']['branch-alias']['dev-master']);
-                } else {
-                    $normalizedVersion = $composerJson['version_normalized'];
-                }
-                $packageConstraint = $this->versionParser->parseConstraints($packageVersionConstraint);
-                $versionConstraint = new Constraint('==', $normalizedVersion);
-                if ($packageConstraint->matches($versionConstraint)) {
-                    $packages += isset($composerJson['replace']) ? $composerJson['replace'] : [];
-                } else {
-                    unset($specificPackage[$version]);
-                }
-            }
-
-            // Ignore requirements: their intersection with versions of the package gives empty result.
-            if (!$specificPackage) {
-                continue;
-            }
-            $data['packages'][$packageName] = $specificPackage;
-
-            unset($specificPackage['dev-master']);
-            foreach ($data['packages'] as $name => $versions) {
-                if (!isset($packages[$name]) || null === $devMasterAlias = (isset($versions['dev-master']['extra']['branch-alias']['dev-master']) ? $versions['dev-master']['extra']['branch-alias']['dev-master'] : null)) {
-                    continue;
-                }
-                $devMaster = $versions['dev-master'];
-                $versions = array_intersect_key($versions, $specificPackage);
-                $packageConstraint = $this->versionParser->parseConstraints($packageVersionConstraint);
-                $versionConstraint = new Constraint('==', $this->versionParser->normalize($devMasterAlias));
-                if ($packageConstraint->matches($versionConstraint)) {
-                    $versions['dev-master'] = $devMaster;
-                }
-                if ($versions) {
-                    $data['packages'][$name] = $versions;
-                }
-            }
-        }
-        return $data;
-
-    }
-
-    /**
-     * @param array $packages
-     *
-     * @return $this
-     */
-    public function setRequiredVersionConstraints(array $packages) {
-        $this->versionParser = new VersionParser();
-        $this->packages = $packages;
-        return $this;
-    }
-
-}
diff --git a/vendor/zaporylie/composer-drupal-optimizations/src/Plugin.php b/vendor/zaporylie/composer-drupal-optimizations/src/Plugin.php
deleted file mode 100644
index 7069aac49c..0000000000
--- a/vendor/zaporylie/composer-drupal-optimizations/src/Plugin.php
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php
-
-namespace zaporylie\ComposerDrupalOptimizations;
-
-use Composer\Composer;
-use Composer\Factory;
-use Composer\IO\IOInterface;
-use Composer\Plugin\PluginInterface;
-use Composer\Repository\RepositoryFactory;
-use Composer\Repository\RepositoryManager;
-use Composer\Semver\Constraint\Constraint;
-use Composer\Semver\Constraint\ConstraintInterface;
-
-class Plugin implements PluginInterface
-{
-
-    public function activate(Composer $composer, IOInterface $io)
-    {
-        // Set default version constraints based on the composer requirements.
-        $extra = $composer->getPackage()->getExtra();
-        $packages = $composer->getPackage()->getRequires();
-        if (!isset($extra['composer-drupal-optimizations']['require']) && isset($packages['drupal/core'])) {
-            $coreConstraint = $packages['drupal/core']->getConstraint();
-            $extra['composer-drupal-optimizations']['require'] = static::getDefaultRequire($coreConstraint);
-            if (!empty($extra['composer-drupal-optimizations']['require']) && $io->isVerbose()) {
-                $io->write('Required tags were not explicitly set so the zaporylie/composer-drupal-optimizations set default based on project\'s composer.json content.');
-            }
-        }
-        if (!empty($extra['composer-drupal-optimizations']['require']) && $io->isVerbose()) {
-            foreach ($extra['composer-drupal-optimizations']['require'] as $package => $version) {
-                $io->write(sprintf('extra.commerce-drupal-optimizations.require.%s: \'%s\'', $package, $version));
-            }
-        }
-
-        $rfs = Factory::createRemoteFilesystem($io, $composer->getConfig());
-        $manager = RepositoryFactory::manager($io, $composer->getConfig(), $composer->getEventDispatcher(), $rfs);
-        $setRepositories = \Closure::bind(function (RepositoryManager $manager) use ($extra) {
-            $manager->repositoryClasses = $this->repositoryClasses;
-            $manager->setRepositoryClass('composer', TruncatedComposerRepository::class);
-            $manager->repositories = $this->repositories;
-            $i = 0;
-            foreach (RepositoryFactory::defaultRepos(null, $this->config, $manager) as $repo) {
-                $manager->repositories[$i++] = $repo;
-                if ($repo instanceof TruncatedComposerRepository && !empty($extra['composer-drupal-optimizations']['require'])) {
-                  $repo->setRequiredVersionConstraints($extra['composer-drupal-optimizations']['require']);
-                }
-            }
-            $manager->setLocalRepository($this->getLocalRepository());
-        }, $composer->getRepositoryManager(), RepositoryManager::class);
-        $setRepositories($manager);
-        $composer->setRepositoryManager($manager);
-    }
-
-    /**
-     * Negotiates default require constraint and package for given drupal/core.
-     *
-     * @param \Composer\Semver\Constraint\ConstraintInterface
-     *
-     * @return array
-     */
-    static public function getDefaultRequire(ConstraintInterface $coreConstraint)
-    {
-        if ((new Constraint('>=', '8.5.0'))->matches($coreConstraint)
-          && !(new Constraint('<', '8.5.0'))->matches($coreConstraint)) {
-            return [
-              'symfony/symfony' => '>3.4',
-            ];
-        }
-        return [];
-    }
-}
diff --git a/vendor/zaporylie/composer-drupal-optimizations/src/TruncatedComposerRepository.php b/vendor/zaporylie/composer-drupal-optimizations/src/TruncatedComposerRepository.php
deleted file mode 100644
index 23f8ecf08b..0000000000
--- a/vendor/zaporylie/composer-drupal-optimizations/src/TruncatedComposerRepository.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-namespace zaporylie\ComposerDrupalOptimizations;
-
-use Composer\Config;
-use Composer\EventDispatcher\EventDispatcher;
-use Composer\IO\IOInterface;
-use Composer\Repository\ComposerRepository as BaseComposerRepository;
-use Composer\Util\RemoteFilesystem;
-
-class TruncatedComposerRepository extends BaseComposerRepository
-{
-    public function __construct(array $repoConfig, IOInterface $io, Config $config, EventDispatcher $eventDispatcher = null, RemoteFilesystem $rfs = null)
-    {
-        parent::__construct($repoConfig, $io, $config, $eventDispatcher, $rfs);
-        $this->cache = new Cache($io, $config->get('cache-repo-dir').'/'.preg_replace('{[^a-z0-9.]}i', '-', $this->url), 'a-z0-9.$');
-    }
-    protected function fetchFile($filename, $cacheKey = null, $sha256 = null, $storeLastModifiedTime = false)
-    {
-        $data = parent::fetchFile($filename, $cacheKey, $sha256, $storeLastModifiedTime);
-        return \is_array($data) ? $this->cache->removeLegacyTags($data) : $data;
-    }
-    public function setRequiredVersionConstraints(array $packages) {
-        $this->cache->setRequiredVersionConstraints($packages);
-    }
-}
diff --git a/vendor/zaporylie/composer-drupal-optimizations/tests/CacheTest.php b/vendor/zaporylie/composer-drupal-optimizations/tests/CacheTest.php
deleted file mode 100644
index 2eb471fa9b..0000000000
--- a/vendor/zaporylie/composer-drupal-optimizations/tests/CacheTest.php
+++ /dev/null
@@ -1,161 +0,0 @@
-<?php
-
-namespace zaporylie\ComposerDrupalOptimizations\Tests;
-
-use Composer\IO\NullIO;
-use PHPUnit\Framework\TestCase;
-use zaporylie\ComposerDrupalOptimizations\Cache;
-
-class CacheTest extends TestCase
-{
-
-    /**
-     * Tests if data is not malformed and only valid array from valid provider
-     * is processed.
-     *
-     * @param $provided
-     * @param $expected
-     *
-     * @dataProvider provideReadTest
-     * @covers \zaporylie\ComposerDrupalOptimizations\Cache::read
-     */
-    public function testRead($provided, $expected)
-    {
-        $cache = new class(new NullIO(), 'test') extends Cache {
-            protected $packages = [
-              'vendor/package' => 'version',
-            ];
-            protected function readFile($file)
-            {
-                // Remove provider - used only for tests.
-                if (0 === strpos($file, 'provider-vendor$')) {
-                    $file = substr($file, 16);
-                }
-                return $file;
-            }
-            public function removeLegacyTags(array $data)
-            {
-                $data['status'] = 'ok';
-                return $data;
-            }
-        };
-        static::assertEquals($expected, $cache->read($provided));
-    }
-
-    /**
-     * Test data.
-     */
-    function provideReadTest()
-    {
-        yield 'normal' => ['{"a":"b"}', '{"a":"b"}'];
-        yield 'falsy' => ['{"a":"b"', '{"a":"b"'];
-        yield 'empty' => ['', ''];
-        yield 'matching-incorrect-provider' => ['{"provider":"vendor"}', '{"provider":"vendor"}'];
-        yield 'matching' => ['provider-vendor${"provider":"vendor"}', '{"provider":"vendor","status":"ok"}'];
-    }
-
-    /**
-     * @dataProvider provideRemoveLegacyTags
-     * @covers \zaporylie\ComposerDrupalOptimizations\Cache::removeLegacyTags
-     */
-    public function testRemoveLegacyTags(array $expected, array $packages, array $versionConstraints)
-    {
-        /** @var Cache $cache */
-        $cache = (new \ReflectionClass(Cache::class))->newInstanceWithoutConstructor();
-        $cache->setRequiredVersionConstraints($versionConstraints);
-        $this->assertSame(['packages' => $expected], $cache->removeLegacyTags(['packages' => $packages]));
-    }
-
-    /**
-     * Test data.
-     */
-    public function provideRemoveLegacyTags()
-    {
-        yield 'no-symfony/symfony' => [[123], [123], ['symfony/symfony' => '~1']];
-        $branchAlias = function ($versionAlias) {
-            return [
-              'extra' => [
-                'branch-alias' => [
-                  'dev-master' => $versionAlias.'-dev',
-                ],
-              ],
-            ];
-        };
-        $packages = [
-          'foo/unrelated' => [
-            '1.0.0' => [],
-          ],
-          'symfony/symfony' => [
-            '3.3.0' => [
-              'version_normalized' => '3.3.0.0',
-              'replace' => ['symfony/foo' => 'self.version'],
-            ],
-            '3.4.0' => [
-              'version_normalized' => '3.4.0.0',
-              'replace' => ['symfony/foo' => 'self.version'],
-            ],
-            'dev-master' => $branchAlias('3.5') + [
-                'replace' => ['symfony/foo' => 'self.version'],
-              ],
-          ],
-          'symfony/foo' => [
-            '3.3.0' => ['version_normalized' => '3.3.0.0'],
-            '3.4.0' => ['version_normalized' => '3.4.0.0'],
-            'dev-master' => $branchAlias('3.5'),
-          ],
-        ];
-        yield 'empty-intersection-ignores' => [$packages, $packages, ['symfony/symfony' => '~2.0']];
-        yield 'empty-intersection-ignores' => [$packages, $packages, ['symfony/symfony' => '~4.0']];
-        $expected = $packages;
-        unset($expected['symfony/symfony']['3.3.0']);
-        unset($expected['symfony/foo']['3.3.0']);
-        yield 'non-empty-intersection-filters' => [$expected, $packages, ['symfony/symfony' => '~3.4']];
-        unset($expected['symfony/symfony']['3.4.0']);
-        unset($expected['symfony/foo']['3.4.0']);
-        yield 'master-only' => [$expected, $packages, ['symfony/symfony' => '~3.5']];
-        $packages = [
-          'symfony/symfony' => [
-            '2.8.0' => [
-              'version_normalized' => '2.8.0.0',
-              'replace' => [
-                'symfony/legacy' => 'self.version',
-                'symfony/foo' => 'self.version',
-              ],
-            ],
-          ],
-          'symfony/legacy' => [
-            '2.8.0' => ['version_normalized' => '2.8.0.0'],
-            'dev-master' => $branchAlias('2.8'),
-          ],
-        ];
-        yield 'legacy-are-not-filtered' => [$packages, $packages, ['symfony/symfony' => '~3.0']];
-        $packages = [
-          'symfony/symfony' => [
-            '2.8.0' => [
-              'version_normalized' => '2.8.0.0',
-              'replace' => [
-                'symfony/foo' => 'self.version',
-                'symfony/new' => 'self.version',
-              ],
-            ],
-            'dev-master' => $branchAlias('3.0') + [
-                'replace' => [
-                  'symfony/foo' => 'self.version',
-                  'symfony/new' => 'self.version',
-                ],
-              ],
-          ],
-          'symfony/foo' => [
-            '2.8.0' => ['version_normalized' => '2.8.0.0'],
-            'dev-master' => $branchAlias('3.0'),
-          ],
-          'symfony/new' => [
-            'dev-master' => $branchAlias('3.0'),
-          ],
-        ];
-        $expected = $packages;
-        unset($expected['symfony/symfony']['dev-master']);
-        unset($expected['symfony/foo']['dev-master']);
-        yield 'master-is-filtered-only-when-in-range' => [$expected, $packages, ['symfony/symfony' => '~2.8']];
-    }
-}
diff --git a/vendor/zaporylie/composer-drupal-optimizations/tests/DefaultRequireTest.php b/vendor/zaporylie/composer-drupal-optimizations/tests/DefaultRequireTest.php
deleted file mode 100644
index e3368c48ec..0000000000
--- a/vendor/zaporylie/composer-drupal-optimizations/tests/DefaultRequireTest.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-
-namespace zaporylie\ComposerDrupalOptimizations\Tests;
-
-use Composer\Semver\VersionParser;
-use PHPUnit\Framework\TestCase;
-use zaporylie\ComposerDrupalOptimizations\Plugin;
-
-class DefaultRequireTest extends TestCase
-{
-
-    /**
-     * Tests default require provider.
-     *
-     * @param $provided
-     * @param $expected
-     * @dataProvider provideTestData
-     */
-    public function testDefaultRequire($provided, $expected)
-    {
-        $versionParser = new VersionParser();
-        self::assertEquals($expected, Plugin::getDefaultRequire($versionParser->parseConstraints($provided)));
-    }
-
-    /**
-     * Test data.
-     */
-    function provideTestData()
-    {
-        yield 'exact-below' => ['8.2.0', []];
-        yield 'exact-above' => ['8.6.0', ['symfony/symfony' => '>3.4']];
-        yield 'exact-min' => ['8.5.0', ['symfony/symfony' => '>3.4']];
-        yield 'range-below' => ['~8.4.0', []];
-        yield 'range-overlapping' => ['>8.4.0 <8.6.0', []];
-        yield 'range-below-above' => ['~8.2.0|~8.6.0', []];
-        yield 'range-above' => ['~8.6.0', ['symfony/symfony' => '>3.4']];
-        yield 'range-min' => ['^8.5', ['symfony/symfony' => '>3.4']];
-    }
-
-}
-- 
GitLab


From 49dff35a7c0ff4c85fbc1d5611e2d8ea1cbe9946 Mon Sep 17 00:00:00 2001
From: Brian Canini <canini.16@osu.edu>
Date: Mon, 7 Dec 2020 11:43:32 -0500
Subject: [PATCH 18/23] asc admin theme

---
 web/themes/asc_seven/asc_seven.info.yml      | 32 ++++++++++++++++
 web/themes/asc_seven/asc_seven.libraries.yml |  4 ++
 web/themes/asc_seven/asc_seven.theme         | 18 +++++++++
 web/themes/asc_seven/css/customstyle.css     | 39 ++++++++++++++++++++
 4 files changed, 93 insertions(+)
 create mode 100644 web/themes/asc_seven/asc_seven.info.yml
 create mode 100644 web/themes/asc_seven/asc_seven.libraries.yml
 create mode 100644 web/themes/asc_seven/asc_seven.theme
 create mode 100644 web/themes/asc_seven/css/customstyle.css

diff --git a/web/themes/asc_seven/asc_seven.info.yml b/web/themes/asc_seven/asc_seven.info.yml
new file mode 100644
index 0000000000..8d15068c3c
--- /dev/null
+++ b/web/themes/asc_seven/asc_seven.info.yml
@@ -0,0 +1,32 @@
+# This theme is marked as @internal. It is intended to evolve and change over
+# minor releases.
+# Change record https://www.drupal.org/node/2582945.
+# As the UI of Drupal improves between minor versions, the mark up and assets
+# in the Seven theme will change. The Seven theme is not backwards
+# compatible. If you wish to modify the output or assets of Seven you can:
+# 1. Copy the whole of Seven and rename it as your own administration theme. You
+# will need to manually manage your own updates if you want to stay up to
+# date with Seven's bug fixes and feature support.
+#
+# 2. Sub-theme Seven. This is only recommended if you want to make minor
+# tweaks and understand that Seven could break your modifications as it
+# changes.
+name: 'asc_seven'
+type: theme
+base theme: seven
+description: 'Adds custom CSS to default administration theme for Drupal 8.'
+alt text: 'Default administration theme for Drupal 8 with simple blocks, clean lines, and custom CSS.'
+package: Core
+version: VERSION
+core: 8.x
+
+regions:
+  header: 'Header'
+  pre_content: 'Pre-content'
+  breadcrumb: 'Breadcrumb'
+  highlighted: 'Highlighted'
+  help: 'Help'
+  content: 'Content'
+
+libraries:
+ - 'asc_seven/global-styling'
diff --git a/web/themes/asc_seven/asc_seven.libraries.yml b/web/themes/asc_seven/asc_seven.libraries.yml
new file mode 100644
index 0000000000..52f4220a86
--- /dev/null
+++ b/web/themes/asc_seven/asc_seven.libraries.yml
@@ -0,0 +1,4 @@
+global-styling:
+  css:
+    theme:
+      css/customstyle.css: {}
diff --git a/web/themes/asc_seven/asc_seven.theme b/web/themes/asc_seven/asc_seven.theme
new file mode 100644
index 0000000000..68fe732890
--- /dev/null
+++ b/web/themes/asc_seven/asc_seven.theme
@@ -0,0 +1,18 @@
+<?php
+use \Drupal\Core\Form\FormStateInterface;
+
+function asc_seven_form_user_cancel_form_alter(&$form, FormStateInterface $form_state, $form_id) {
+  // Don't allow delet users or content when disabling an account
+  unset($form['user_cancel_method']['#options']['user_cancel_block_unpublish']);
+  unset($form['user_cancel_method']['#options']['user_cancel_reassign']);
+  unset($form['user_cancel_method']['#options']['user_cancel_delete']);
+  unset($form['user_cancel_confirm']);
+}
+
+function asc_seven_form_user_multiple_cancel_confirm_alter(&$form, FormStateInterface $form_state, $form_id) {
+  // Don't allow delet users or content when disabling an account
+  unset($form['user_cancel_method']['#options']['user_cancel_block_unpublish']);
+  unset($form['user_cancel_method']['#options']['user_cancel_reassign']);
+  unset($form['user_cancel_method']['#options']['user_cancel_delete']);
+  unset($form['user_cancel_confirm']);
+}
diff --git a/web/themes/asc_seven/css/customstyle.css b/web/themes/asc_seven/css/customstyle.css
new file mode 100644
index 0000000000..42c1f96ba8
--- /dev/null
+++ b/web/themes/asc_seven/css/customstyle.css
@@ -0,0 +1,39 @@
+/*
+// Landing Page Slideshow Labels
+// --------------------------------------------------
+*/
+#field-slides2-values .form-type-checkbox label {
+  font-size: 16px;
+}
+
+
+/*
+// Background Color Selection Box
+// --------------------------------------------------
+*/
+
+.field--name-field-background-color .form-select option[value="lgray-bg"]{
+  background-color: red !important;
+}
+/*select option {
+  margin: 40px;
+  background: rgba(0, 0, 0, 0.3);
+  color: #fff;
+  text-shadow: 0 1px 0 rgba(0, 0, 0, 0.4);
+}
+
+select option[value="1"] {
+  background: rgba(100, 100, 100, 0.3);
+}
+
+select option[value="2"] {
+  background: rgba(150, 150, 150, 0.3);
+}
+
+select option[value="3"] {
+  background: rgba(200, 200, 200, 0.3);
+}
+
+select option[value="4"] {
+  background: rgba(250, 250, 250, 0.3);
+}*/
-- 
GitLab


From 66a666ba5bec5961317b9529698c8d692e96fd0a Mon Sep 17 00:00:00 2001
From: Brian Canini <canini.16@osu.edu>
Date: Thu, 17 Dec 2020 09:55:32 -0500
Subject: [PATCH 19/23] updating .them, js, and styles for new people filters

---
 .../drush/examples/Commands/art/sandwich.txt  |  48 +-
 web/themes/asc_bootstrap/asc_bootstrap.theme  |  36 +-
 .../assets/sass/components/_filters.scss      | 390 ++++++++-
 .../assets/sass/components/_people.scss       | 186 +---
 web/themes/asc_bootstrap/css/style.css        | 822 ++++++++++++------
 web/themes/asc_bootstrap/js/scripts.js        |  11 +-
 6 files changed, 989 insertions(+), 504 deletions(-)

diff --git a/vendor/drush/drush/examples/Commands/art/sandwich.txt b/vendor/drush/drush/examples/Commands/art/sandwich.txt
index 6c4c3097bf..dac8ca02e4 100644
--- a/vendor/drush/drush/examples/Commands/art/sandwich.txt
+++ b/vendor/drush/drush/examples/Commands/art/sandwich.txt
@@ -1,24 +1,24 @@
- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
- . . .  . . . . . . . .:8 ;t;;t;;;;:..:;%SX888@X%t;.. . . . 
- . .  .. . . . . . .%t%;%@%%%%%%%%%%X@8888XS%t;...:;ttt%X. .
- . . .  . . . . . .X:8%X%%%XS%%%%%%%XS%%%%%@%%%%X%%%@%S88 . 
- . . . . . .  .  . X@ @%%%X8X%%%88%%%8X%%%%%%%%%XXt@8@88@. .
- . . . . .  . . .t@tS;%%8XSX%@XSX%@XSS%8@@88X@888X8SS S;S.  
- . . . . . . .@%XS%%%%%S8@X%@8%XXSSXX%S@SSSX888.;@ 888@ . . 
- . . . . . :.8:S%%%XS8X@@X%S@SSSS8SXSXXX%X88X:;@8@:S  88S. .
- . . .  .8%S8%%%%%%8@SSSXXXSXSXSXSXSSS8S888 :@%:%XX:%8%:X:  
- . .  .:8 %%%%@%%8@S%%XXSXSSSS8S@X%XSXX88 ;@X;SX88X8;%X88t. 
- . . 88S%S%%%%8XSSXSX@@S@%XS8@SS%@S%888 88@S:8. .;.@%X:@8;. 
- . .  88.8888888@XX   888888%X%@XX 88SS8@@;S@8.%;8@S%%:8   .
- . .  S%:8 @SSSS8 @@8@8 8 88888888@%S:8:S8 @..%S SXX8888;. .
- . . %:8S8888@88SXS S S::X@.8.8 X%S%8X:X88..% @@.S.%% .;. . 
- .    .XX8@8;;%%t;;;;:@X@888888@888888.88S;8:8  ...    . . .
- . . 8.;;@8@8:%%%%%t.8@%ttX@8@@@S8%8 X8S;X:@; :... . . . . .
- . tS:8@;88.;:8888X8S:.tX88888X88  S8tStS88 :.. . . . . . . 
- .:X;;:t%;tt%888S@8XS888@8.:tt@;88.tXXX8:::... . . . . . . .
- .:X8St:8SXS XS8@X 8.8%888%X8@@X88tXS8t; . . . . . . .  . . 
- .    :8888.88888888X@@X @ X X%S%;88;8t .. . .  . . . . .  .
- ... ..: .    .@@888%St    @ @ 8SS 8:; . . . . . . . . . . .
-   .  .  .      ..::. ..:;;::::. ... . . . . . . . . . . . .
- .. . . .     . .. . .  .  .  .. . . . . . .  . . . . . . . 
+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
+ . . .  . . . . . . . .:8 ;t;;t;;;;:..:;%SX888@X%t;.. . . . 
+ . .  .. . . . . . .%t%;%@%%%%%%%%%%X@8888XS%t;...:;ttt%X. .
+ . . .  . . . . . .X:8%X%%%XS%%%%%%%XS%%%%%@%%%%X%%%@%S88 . 
+ . . . . . .  .  . X@ @%%%X8X%%%88%%%8X%%%%%%%%%XXt@8@88@. .
+ . . . . .  . . .t@tS;%%8XSX%@XSX%@XSS%8@@88X@888X8SS S;S.  
+ . . . . . . .@%XS%%%%%S8@X%@8%XXSSXX%S@SSSX888.;@ 888@ . . 
+ . . . . . :.8:S%%%XS8X@@X%S@SSSS8SXSXXX%X88X:;@8@:S  88S. .
+ . . .  .8%S8%%%%%%8@SSSXXXSXSXSXSXSSS8S888 :@%:%XX:%8%:X:  
+ . .  .:8 %%%%@%%8@S%%XXSXSSSS8S@X%XSXX88 ;@X;SX88X8;%X88t. 
+ . . 88S%S%%%%8XSSXSX@@S@%XS8@SS%@S%888 88@S:8. .;.@%X:@8;. 
+ . .  88.8888888@XX   888888%X%@XX 88SS8@@;S@8.%;8@S%%:8   .
+ . .  S%:8 @SSSS8 @@8@8 8 88888888@%S:8:S8 @..%S SXX8888;. .
+ . . %:8S8888@88SXS S S::X@.8.8 X%S%8X:X88..% @@.S.%% .;. . 
+ .    .XX8@8;;%%t;;;;:@X@888888@888888.88S;8:8  ...    . . .
+ . . 8.;;@8@8:%%%%%t.8@%ttX@8@@@S8%8 X8S;X:@; :... . . . . .
+ . tS:8@;88.;:8888X8S:.tX88888X88  S8tStS88 :.. . . . . . . 
+ .:X;;:t%;tt%888S@8XS888@8.:tt@;88.tXXX8:::... . . . . . . .
+ .:X8St:8SXS XS8@X 8.8%888%X8@@X88tXS8t; . . . . . . .  . . 
+ .    :8888.88888888X@@X @ X X%S%;88;8t .. . .  . . . . .  .
+ ... ..: .    .@@888%St    @ @ 8SS 8:; . . . . . . . . . . .
+   .  .  .      ..::. ..:;;::::. ... . . . . . . . . . . . .
+ .. . . .     . .. . .  .  .  .. . . . . . .  . . . . . . . 
diff --git a/web/themes/asc_bootstrap/asc_bootstrap.theme b/web/themes/asc_bootstrap/asc_bootstrap.theme
index b35f5d8110..1279614a6d 100755
--- a/web/themes/asc_bootstrap/asc_bootstrap.theme
+++ b/web/themes/asc_bootstrap/asc_bootstrap.theme
@@ -599,11 +599,35 @@ function asc_bootstrap_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $
   * people filters
   */
   if($form['#id'] == 'views-exposed-form-people-directory-page-1') {
+    /*
+    * add new HTML content to filters (headers and spacer)
+    * and setting weights for where they should appear in the form hierarchy
+    */
+    $form['filter_heading'] = array(
+      '#markup' => '<h2 class="filter-heading">Filter</h2>',
+      '#weight' => -10,
+    );
+    $form['filter_search_heading'] = array(
+      '#markup' => '<div class="filter-linebreak"></div>',
+      '#weight' => 4,
+    );
+    $form['spacer'] = array(
+      '#markup' => '<div class="filter-spacer"></div>',
+      '#weight' => 1.5,
+    );
+    /*
+    * setting up weights for form elements
+    */
+    $form['field_appointment_target_id']['#weight'] = 1;
+    $form['field_research_interests_target_id']['#weight'] = 2;
+    $form['field_other_target_id']['#weight'] = 3;
+    $form['combine']['#weight'] = 5;
+    $form['keys']['#attributes']['placeholder'] = t('Search Keywords');
     /*
     * checking if taxonomy has vocabulary - if not, don't display field
     */
     if(count($form['field_appointment_target_id']['#options']) == 0) {
-      $form['field_appointment_target_id']['#access'] = FALSE;
+      $form['field_appointment_target_id_collapsible']['#access'] = FALSE;
     }
     else {
       $tid = array_shift(array_keys($form['field_appointment_target_id']['#options']));
@@ -613,13 +637,13 @@ function asc_bootstrap_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $
         if(!empty($vid)) {
           $vocab = Vocabulary::load($vid);
           $vocab_label = $vocab->get('name');
-          $form['#info']['filter-field_appointment_target_id']['label'] = $vocab_label;
+          $form['field_appointment_target_id_collapsible']['#title'] = $vocab_label;
         }
       }
     }
 
     if(count($form['field_research_interests_target_id']['#options']) == 0) {
-      $form['field_research_interests_target_id']['#access'] = FALSE;
+      $form['field_research_interests_target_id_collapsible']['#access'] = FALSE;
     }
     else {
       $tid = array_shift(array_keys($form['field_research_interests_target_id']['#options']));
@@ -629,14 +653,14 @@ function asc_bootstrap_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $
         if(!empty($vid)) {
           $vocab = Vocabulary::load($vid);
           $vocab_label = $vocab->get('name');
-          $form['#info']['filter-field_research_interests_target_id']['label'] = $vocab_label;
+          $form['field_research_interests_target_id_collapsible']['#title'] = $vocab_label;
         }
       }
     }
 
 
     if(count($form['field_other_target_id']['#options']) == 0) {
-      $form['field_other_target_id']['#access'] = FALSE;
+      $form['field_other_target_id_collapsible']['#access'] = FALSE;
     }
     else {
       $tid = array_shift(array_keys($form['field_other_target_id']['#options']));
@@ -646,7 +670,7 @@ function asc_bootstrap_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $
         if(!empty($vid)) {
           $vocab = Vocabulary::load($vid);
           $vocab_label = $vocab->get('name');
-          $form['#info']['filter-field_other_target_id']['label'] = $vocab_label;
+          $form['field_other_target_id_collapsible']['#title'] = $vocab_label;
         }
       }
     }
diff --git a/web/themes/asc_bootstrap/assets/sass/components/_filters.scss b/web/themes/asc_bootstrap/assets/sass/components/_filters.scss
index 35301c7700..64a4ca56d6 100644
--- a/web/themes/asc_bootstrap/assets/sass/components/_filters.scss
+++ b/web/themes/asc_bootstrap/assets/sass/components/_filters.scss
@@ -223,7 +223,15 @@
 // --------------------------------------------------
 //## Events.
 
+.path-events {
+  .page-header {
+    margin: 44px 0 0;
+    border-bottom: none;
+  }
+}
+
 .view-events {
+
   .view-filters {
     background: #D8D8D8;
     padding: 10px 20px;
@@ -234,6 +242,14 @@
     width: 100%;
   }
 
+  .filter-linebreak {
+    padding: 8px;
+
+    @media (max-width: 1200px) {
+      display: none;
+    }
+  }
+
   .filter-spacer {
     display: none;
 
@@ -283,8 +299,19 @@
 
   .form-actions {
 
+    .button {
+      text-transform: uppercase;
+      border-radius: 0;
+    }
+
     .form-submit {
       float: right;
+
+      @media (max-width: 768px) {
+        width: 100%;
+        margin: 10px 0;
+        float: none;
+      }
     }
 
     .btn-primary {
@@ -297,9 +324,9 @@
       }
     }
 
-    .button {
-      text-transform: uppercase;
-      border-radius: 0;
+    @media (max-width: 768px) {
+      display: flex;
+      flex-direction: column-reverse;
     }
   }
 
@@ -309,7 +336,15 @@
 // --------------------------------------------------
 //## Gallery filters.
 
+.path-gallery {
+  .page-header {
+    margin: 44px 0 0;
+    border-bottom: none;
+  }
+}
+
 .view-gallery-directory {
+
   .control-label {
     display: none;
   }
@@ -324,6 +359,14 @@
     width: 100%;
   }
 
+  .filter-linebreak {
+    padding: 8px;
+
+    @media (max-width: 1200px) {
+      display: none;
+    }
+  }
+
   .filter-spacer {
     width: 100%;
     margin-top: 15px;
@@ -370,8 +413,19 @@
 
   .form-actions {
 
+    .button {
+      text-transform: uppercase;
+      border-radius: 0;
+    }
+
     .form-submit {
       float: right;
+
+      @media (max-width: 768px) {
+        width: 100%;
+        margin: 10px 0;
+        float: none;
+      }
     }
 
     .btn-primary {
@@ -384,9 +438,9 @@
       }
     }
 
-    .button {
-      text-transform: uppercase;
-      border-radius: 0;
+    @media (max-width: 768px) {
+      display: flex;
+      flex-direction: column-reverse;
     }
   }
 
@@ -396,7 +450,15 @@
 // --------------------------------------------------
 //## News story.
 
+.path-news {
+  .page-header {
+    margin: 44px 0 0;
+    border-bottom: none;
+  }
+}
+
 .view-news {
+
   .view-filters {
     background: #D8D8D8;
     padding: 10px;
@@ -407,6 +469,14 @@
     width: 100%;
   }
 
+  .filter-linebreak {
+    padding: 8px;
+
+    @media (max-width: 1200px) {
+      display: none;
+    }
+  }
+
   .filter-spacer {
     display: none;
 
@@ -456,8 +526,19 @@
 
   .form-actions {
 
+    .button {
+      text-transform: uppercase;
+      border-radius: 0;
+    }
+
     .form-submit {
       float: right;
+
+      @media (max-width: 768px) {
+        width: 100%;
+        margin: 10px 0;
+        float: none;
+      }
     }
 
     .btn-primary {
@@ -470,16 +551,219 @@
       }
     }
 
+    @media (max-width: 768px) {
+      display: flex;
+      flex-direction: column-reverse;
+    }
+  }
+}
+
+
+// --------------------------------------------------
+//## People Directory.
+
+.path-people {
+  .page-header {
+    margin: 44px 0 0;
+    border-bottom: none;
+  }
+}
+
+.view-people-directory {
+
+  .view-filters {
+    background: #D8D8D8;
+    padding: 10px;
+  }
+
+  .filter-heading {
+    color: #225D62;
+    width: 100%;
+  }
+
+  .filter-linebreak {
+
+    @media (max-width: 1200px) {
+      display: none;
+    }
+  }
+
+  .filter-spacer {
+    display: none;
+
+    @media (max-width: 1200px) {
+      display: block;
+    }
+  }
+
+  .select-wrapper {
+    margin-right: 10px;
+
+    select {
+      min-width: 250px;
+
+      @media (max-width: 1200px) {
+        margin-top: 10px;
+        min-width: 273px;
+      }
+
+      @media (max-width: 768px) {
+        margin-top: 0;
+        min-width: 0;
+      }
+    }
+
+    &:after {
+      color: #555555;
+      font-size: 12px;
+    }
+
+    @media (max-width: 768px) {
+      width: 100%;
+    }
+  }
+
+  .form-type-textfield {
+    margin-right: 10px;
+
+    input {
+      min-width: 250px;
+    }
+
+    @media (max-width: 768px) {
+      width: 100%;
+    }
+  }
+
+}
+
+#views-exposed-form-people-directory-page-1 {
+  .form-item {
+    margin-right: 20px;
+
+    .panel-heading {
+      padding: 0 15px;
+
+      .panel-title {
+
+        .fa {
+          float: right;
+          margin-top: 5px;
+        }
+      }
+    }
+
+    @media (max-width: 768px) {
+      width: 100%;
+    }
+  }
+
+  .form-checkbox {
+    -webkit-appearance: none;
+    -moz-appearance: none;
+    -ie-appearance: none;
+    background-color: #fafafa;
+    border: 1px solid #cacece;
+    box-shadow: 0 1px 2px rgba(0,0,0,0.05);
+    padding: 9px;
+    border-radius: 3px;
+    display: inline-block;
+    position: relative;
+    top: 4px;
+    margin-right: 10px;
+
+    &:active, &:checked:active {
+      box-shadow: 0 1px 2px rgba(0,0,0,0.05), inset 0px 1px 3px rgba(0,0,0,0.1);
+    }
+
+    &:checked {
+      background-color: #442369;
+      border: 1px solid #adb8c0;
+      box-shadow: 0 1px 2px rgba(0,0,0,0.05), inset 0px -15px 10px -12px rgba(0,0,0,0.05), inset 15px 10px -12px rgba(255,255,255,0.1);
+      color: #99a1a7;
+    }
+
+    &:checked:after {
+      content: '\2713';
+      font-size: 14px;
+      position: absolute;
+      top: 0px;
+      left: 3px;
+      color: $white;
+    }
+  }
+
+  .form-item-combine {
+
+    @media (max-width: 768px) {
+      width: 100%;
+    }
+  }
+
+  .form-actions {
+
     .button {
       text-transform: uppercase;
       border-radius: 0;
     }
+
+    .form-submit {
+      float: right;
+
+      @media (max-width: 768px) {
+        width: 100%;
+        margin: 10px 0;
+        float: none;
+      }
+    }
+
+    .btn-primary {
+      background-color: #26686d;
+      border-color: #225d62;
+
+      &:hover {
+        background-color: #1b494c;
+        border-color: #1e5357;
+      }
+    }
+
+    @media (max-width: 768px) {
+      display: flex;
+      flex-direction: column-reverse;
+    }
+  }
+
+}
+
+.block-views-exposed-filter-blockpeople-directory-page-1 {
+  padding: 20px 0px;
+
+  .form-wrapper {
+    margin-top: 20px;
+
+    legend {
+      text-transform: uppercase;
+      color: #4A4A4A;
+      font-weight: bold;
+      font-size: 18px;
+      border-bottom: none;
+      margin-bottom: 5px;
+    }
   }
 }
 
+
+
 // --------------------------------------------------
 //## Research Directory.
 
+.path-research-project-directory{
+  .page-header {
+    margin: 44px 0 0;
+    border-bottom: none;
+  }
+}
+
 .view-research-project-directory {
 
   .view-filters {
@@ -492,6 +776,14 @@
     width: 100%;
   }
 
+  .filter-linebreak {
+    padding: 8px;
+
+    @media (max-width: 1200px) {
+      display: none;
+    }
+  }
+
   .form-type-textfield {
     margin-right: 10px;
 
@@ -514,8 +806,19 @@
 
   .form-actions {
 
+    .button {
+      text-transform: uppercase;
+      border-radius: 0;
+    }
+
     .form-submit {
       float: right;
+
+      @media (max-width: 768px) {
+        width: 100%;
+        margin: 10px 0;
+        float: none;
+      }
     }
 
     .btn-primary {
@@ -528,9 +831,9 @@
       }
     }
 
-    .button {
-      text-transform: uppercase;
-      border-radius: 0;
+    @media (max-width: 768px) {
+      display: flex;
+      flex-direction: column-reverse;
     }
   }
 
@@ -540,7 +843,15 @@
 // --------------------------------------------------
 //## Research Directory Mobile.
 
+.path-research-project-directory-mobile{
+  .page-header {
+    margin: 44px 0 0;
+    border-bottom: none;
+  }
+}
+
 .view-research-project-directory-mobile {
+
   .view-filters {
       background: #D8D8D8;
       padding: 10px;
@@ -551,6 +862,14 @@
     width: 100%;
   }
 
+  .filter-linebreak {
+    padding: 8px;
+
+    @media (max-width: 1200px) {
+      display: none;
+    }
+  }
+
   .form-item {
     background: $white;
     padding: 5px 10px;
@@ -595,8 +914,19 @@
 
   .form-actions {
 
+    .button {
+      text-transform: uppercase;
+      border-radius: 0;
+    }
+
     .form-submit {
       float: right;
+
+      @media (max-width: 768px) {
+        width: 100%;
+        margin: 10px 0;
+        float: none;
+      }
     }
 
     .btn-primary {
@@ -609,9 +939,9 @@
       }
     }
 
-    .button {
-      text-transform: uppercase;
-      border-radius: 0;
+    @media (max-width: 768px) {
+      display: flex;
+      flex-direction: column-reverse;
     }
   }
 
@@ -642,7 +972,15 @@
 // --------------------------------------------------
 //## Research Gallery filters.
 
+.path-research-project-gallery{
+  .page-header {
+    margin: 44px 0 0;
+    border-bottom: none;
+  }
+}
+
 .view-research-project-gallery {
+
   .control-label {
     display: none;
   }
@@ -657,6 +995,14 @@
     width: 100%;
   }
 
+  .filter-linebreak {
+    padding: 8px;
+
+    @media (max-width: 1200px) {
+      display: none;
+    }
+  }
+
   .filter-spacer {
     width: 100%;
     margin-top: 15px;
@@ -703,8 +1049,19 @@
 
   .form-actions {
 
+    .button {
+      text-transform: uppercase;
+      border-radius: 0;
+    }
+
     .form-submit {
       float: right;
+
+      @media (max-width: 768px) {
+        width: 100%;
+        margin: 10px 0;
+        float: none;
+      }
     }
 
     .btn-primary {
@@ -717,10 +1074,13 @@
       }
     }
 
-    .button {
-      text-transform: uppercase;
-      border-radius: 0;
+    @media (max-width: 768px) {
+      display: flex;
+      flex-direction: column-reverse;
     }
   }
 
 }
+
+
+
diff --git a/web/themes/asc_bootstrap/assets/sass/components/_people.scss b/web/themes/asc_bootstrap/assets/sass/components/_people.scss
index 44964aae14..45d520a1b2 100644
--- a/web/themes/asc_bootstrap/assets/sass/components/_people.scss
+++ b/web/themes/asc_bootstrap/assets/sass/components/_people.scss
@@ -7,7 +7,6 @@
 
 //## People grid.
 .view-people-directory {
-  margin-bottom: 40px;
 
   h3 {
     text-transform: uppercase;
@@ -71,180 +70,38 @@
       }
     }
   }
-
-  .square-opic {
-    max-width: 220px;
-    max-height: 220px;
-    overflow: hidden;
-    position: relative;
-
-    &:after {
-      content: "";
-      display: block;
-      padding-bottom: 100%;
-    }
-
-    @media (max-width: 768px) {
-      max-width: 100%;
-      max-height: 630px;
-    }
-  }
-
-  .square-opic-content {
-      position: absolute;
-      width: 100%;
-      height: 100%;
-  }
 }
 
-
-
-// --------------------------------------------------
-
-//## Siderbar and Filters form.
-
-
-.block-views-exposed-filter-blockpeople-directory-page-1 {
-  padding: 20px 0px;
-
+.view-display-id-page_1 {
+  margin-bottom: 40px;
 }
 
-#views-exposed-form-people-directory-page-1 {
-  .form-item {
-      width: 100%;
-  }
-
-  .form-checkbox {
-    -webkit-appearance: none;
-    -moz-appearance: none;
-    -ie-appearance: none;
-    background-color: #fafafa;
-    border: 1px solid #cacece;
-    box-shadow: 0 1px 2px rgba(0,0,0,0.05);
-    padding: 9px;
-    border-radius: 3px;
-    display: inline-block;
-    position: relative;
-    top: 4px;
-
-    &:active, &:checked:active {
-      box-shadow: 0 1px 2px rgba(0,0,0,0.05), inset 0px 1px 3px rgba(0,0,0,0.1);
-    }
-
-    &:checked {
-      background-color: #442369;
-      border: 1px solid #adb8c0;
-      box-shadow: 0 1px 2px rgba(0,0,0,0.05), inset 0px -15px 10px -12px rgba(0,0,0,0.05), inset 15px 10px -12px rgba(255,255,255,0.1);
-      color: #99a1a7;
-    }
+.square-opic {
+  max-width: 220px;
+  max-height: 220px;
+  overflow: hidden;
+  position: relative;
 
-    &:checked:after {
-      content: '\2713';
-      font-size: 14px;
-      position: absolute;
-      top: 0px;
-      left: 3px;
-      color: $white;
-    }
+  &:after {
+    content: "";
+    display: block;
+    padding-bottom: 100%;
   }
 
-  .form-wrapper {
-    margin-top: 20px;
-
-    legend {
-      text-transform: uppercase;
-      color: #4A4A4A;
-      font-weight: bold;
-      font-size: 18px;
-      border-bottom: none;
-      margin-bottom: 5px;
-    }
-  }
-
-  label {
-    width: 90%;
-    margin-left: 28px;
-
-    input {
-      margin-left: -28px;
-      margin-right: 8px;
-    }
+  @media (max-width: 768px) {
+    max-width: 100%;
+    max-height: 630px;
   }
 }
 
-
-
-// --------------------------------------------------
-
-//## Mobile View.
-
-#views-exposed-form-people-directory-page-2 {
-  background: #D8D8D8;
-  padding: 10px;
-
-  details {
-    background: #ffffff;
-    padding: 5px 10px;
-    border-radius: 8px;
-    margin: 10px 0;
-  }
-
-  .ppl-filter-heading {
-    color: #225D62;
-    margin: 5px 0;
-    text-transform: capitalize;
-  }
-
-  .ppl-taxon-heading {
-    margin-top: 20px;
-  }
-
-  .form-checkbox {
-    -webkit-appearance: none;
-    -moz-appearance: none;
-    -ie-appearance: none;
-    background-color: #fafafa;
-    border: 1px solid #cacece;
-    box-shadow: 0 1px 2px rgba(0,0,0,0.05), inset 0px -15px 10px -12px rgba(0,0,0,0.05);
-    padding: 9px;
-    border-radius: 3px;
-    display: inline-block;
-    position: relative;
-    top: 4px;
-    margin-right: 5px;
-
-    &:active, &:checked:active {
-      box-shadow: 0 1px 2px rgba(0,0,0,0.05), inset 0px 1px 3px rgba(0,0,0,0.1);
-    }
-
-    &:checked {
-      background-color: #442369;
-      border: 1px solid #adb8c0;
-      box-shadow: 0 1px 2px rgba(0,0,0,0.05), inset 0px -15px 10px -12px rgba(0,0,0,0.05), inset 15px 10px -12px rgba(255,255,255,0.1);
-      color: #99a1a7;
-    }
-
-    &:checked:after {
-      content: '\2713';
-      font-size: 14px;
-      position: absolute;
-      top: 0px;
-      left: 3px;
-      color: $white;
-    }
-  }
-
-  #edit-submit-people-directory {
-    text-transform: uppercase;
-  }
-
-  #edit-reset {
-    text-transform: uppercase;
-  }
-
+.square-opic-content {
+    position: absolute;
+    width: 100%;
+    height: 100%;
 }
 
 
+
 // --------------------------------------------------
 
 //## Bio.
@@ -280,11 +137,6 @@
     h1 {
       margin-bottom: 0;
     }
-
-    .bio-pronoun {
-      font-size: 14px;
-      font-style: italic;
-    }
   }
 
 }
diff --git a/web/themes/asc_bootstrap/css/style.css b/web/themes/asc_bootstrap/css/style.css
index e8e2058d68..a8e1f0c0b1 100644
--- a/web/themes/asc_bootstrap/css/style.css
+++ b/web/themes/asc_bootstrap/css/style.css
@@ -10570,484 +10570,863 @@ article .field--name-body {
 }
 
 /* line 227, ../assets/sass/components/_filters.scss */
+.path-events .page-header {
+  margin: 44px 0 0;
+  border-bottom: none;
+}
+
+/* line 235, ../assets/sass/components/_filters.scss */
 .view-events .view-filters {
   background: #D8D8D8;
   padding: 10px 20px;
 }
-/* line 232, ../assets/sass/components/_filters.scss */
+/* line 240, ../assets/sass/components/_filters.scss */
 .view-events .filter-heading {
   color: #225D62;
   width: 100%;
 }
-/* line 237, ../assets/sass/components/_filters.scss */
+/* line 245, ../assets/sass/components/_filters.scss */
+.view-events .filter-linebreak {
+  padding: 8px;
+}
+@media (max-width: 1200px) {
+  /* line 245, ../assets/sass/components/_filters.scss */
+  .view-events .filter-linebreak {
+    display: none;
+  }
+}
+/* line 253, ../assets/sass/components/_filters.scss */
 .view-events .filter-spacer {
   display: none;
 }
 @media (max-width: 1200px) {
-  /* line 237, ../assets/sass/components/_filters.scss */
+  /* line 253, ../assets/sass/components/_filters.scss */
   .view-events .filter-spacer {
     display: block;
   }
 }
-/* line 245, ../assets/sass/components/_filters.scss */
+/* line 261, ../assets/sass/components/_filters.scss */
 .view-events .select-wrapper {
   margin-right: 10px;
 }
-/* line 248, ../assets/sass/components/_filters.scss */
+/* line 264, ../assets/sass/components/_filters.scss */
 .view-events .select-wrapper select {
   min-width: 250px;
 }
 @media (max-width: 1200px) {
-  /* line 248, ../assets/sass/components/_filters.scss */
+  /* line 264, ../assets/sass/components/_filters.scss */
   .view-events .select-wrapper select {
     margin-top: 10px;
     min-width: 273px;
   }
 }
 @media (max-width: 768px) {
-  /* line 248, ../assets/sass/components/_filters.scss */
+  /* line 264, ../assets/sass/components/_filters.scss */
   .view-events .select-wrapper select {
     margin-top: 0;
     min-width: 0;
   }
 }
-/* line 262, ../assets/sass/components/_filters.scss */
+/* line 278, ../assets/sass/components/_filters.scss */
 .view-events .select-wrapper:after {
   color: #555555;
   font-size: 12px;
 }
 @media (max-width: 768px) {
-  /* line 245, ../assets/sass/components/_filters.scss */
+  /* line 261, ../assets/sass/components/_filters.scss */
   .view-events .select-wrapper {
     width: 100%;
   }
 }
-/* line 272, ../assets/sass/components/_filters.scss */
+/* line 288, ../assets/sass/components/_filters.scss */
 .view-events .form-type-textfield {
   margin-right: 10px;
 }
-/* line 275, ../assets/sass/components/_filters.scss */
+/* line 291, ../assets/sass/components/_filters.scss */
 .view-events .form-type-textfield input {
   min-width: 250px;
 }
 @media (max-width: 768px) {
-  /* line 272, ../assets/sass/components/_filters.scss */
+  /* line 288, ../assets/sass/components/_filters.scss */
   .view-events .form-type-textfield {
     width: 100%;
   }
 }
-/* line 286, ../assets/sass/components/_filters.scss */
+/* line 302, ../assets/sass/components/_filters.scss */
+.view-events .form-actions .button {
+  text-transform: uppercase;
+  border-radius: 0;
+}
+/* line 307, ../assets/sass/components/_filters.scss */
 .view-events .form-actions .form-submit {
   float: right;
 }
-/* line 290, ../assets/sass/components/_filters.scss */
+@media (max-width: 768px) {
+  /* line 307, ../assets/sass/components/_filters.scss */
+  .view-events .form-actions .form-submit {
+    width: 100%;
+    margin: 10px 0;
+    float: none;
+  }
+}
+/* line 317, ../assets/sass/components/_filters.scss */
 .view-events .form-actions .btn-primary {
   background-color: #26686d;
   border-color: #225d62;
 }
-/* line 294, ../assets/sass/components/_filters.scss */
+/* line 321, ../assets/sass/components/_filters.scss */
 .view-events .form-actions .btn-primary:hover {
   background-color: #1b494c;
   border-color: #1e5357;
 }
-/* line 300, ../assets/sass/components/_filters.scss */
-.view-events .form-actions .button {
-  text-transform: uppercase;
-  border-radius: 0;
+@media (max-width: 768px) {
+  /* line 300, ../assets/sass/components/_filters.scss */
+  .view-events .form-actions {
+    display: flex;
+    flex-direction: column-reverse;
+  }
 }
 
-/* line 313, ../assets/sass/components/_filters.scss */
+/* line 340, ../assets/sass/components/_filters.scss */
+.path-gallery .page-header {
+  margin: 44px 0 0;
+  border-bottom: none;
+}
+
+/* line 348, ../assets/sass/components/_filters.scss */
 .view-gallery-directory .control-label {
   display: none;
 }
-/* line 317, ../assets/sass/components/_filters.scss */
+/* line 352, ../assets/sass/components/_filters.scss */
 .view-gallery-directory .view-filters {
   background: #D8D8D8;
   padding: 20px 15px 15px;
 }
-/* line 322, ../assets/sass/components/_filters.scss */
+/* line 357, ../assets/sass/components/_filters.scss */
 .view-gallery-directory .filter-heading {
   color: #225D62;
   width: 100%;
 }
-/* line 327, ../assets/sass/components/_filters.scss */
+/* line 362, ../assets/sass/components/_filters.scss */
+.view-gallery-directory .filter-linebreak {
+  padding: 8px;
+}
+@media (max-width: 1200px) {
+  /* line 362, ../assets/sass/components/_filters.scss */
+  .view-gallery-directory .filter-linebreak {
+    display: none;
+  }
+}
+/* line 370, ../assets/sass/components/_filters.scss */
 .view-gallery-directory .filter-spacer {
   width: 100%;
   margin-top: 15px;
 }
-/* line 332, ../assets/sass/components/_filters.scss */
+/* line 375, ../assets/sass/components/_filters.scss */
 .view-gallery-directory .select-wrapper {
   margin-right: 10px;
 }
-/* line 335, ../assets/sass/components/_filters.scss */
+/* line 378, ../assets/sass/components/_filters.scss */
 .view-gallery-directory .select-wrapper select {
   min-width: 250px;
 }
 @media (max-width: 1200px) {
-  /* line 335, ../assets/sass/components/_filters.scss */
+  /* line 378, ../assets/sass/components/_filters.scss */
   .view-gallery-directory .select-wrapper select {
     margin-top: 10px;
     min-width: 273px;
   }
 }
 @media (max-width: 768px) {
-  /* line 335, ../assets/sass/components/_filters.scss */
+  /* line 378, ../assets/sass/components/_filters.scss */
   .view-gallery-directory .select-wrapper select {
     margin-top: 0;
     min-width: 0;
   }
 }
-/* line 349, ../assets/sass/components/_filters.scss */
+/* line 392, ../assets/sass/components/_filters.scss */
 .view-gallery-directory .select-wrapper:after {
   color: #555555;
   font-size: 12px;
 }
 @media (max-width: 768px) {
-  /* line 332, ../assets/sass/components/_filters.scss */
+  /* line 375, ../assets/sass/components/_filters.scss */
   .view-gallery-directory .select-wrapper {
     width: 100%;
   }
 }
-/* line 359, ../assets/sass/components/_filters.scss */
+/* line 402, ../assets/sass/components/_filters.scss */
 .view-gallery-directory .form-type-textfield {
   margin-right: 10px;
 }
-/* line 362, ../assets/sass/components/_filters.scss */
+/* line 405, ../assets/sass/components/_filters.scss */
 .view-gallery-directory .form-type-textfield input {
   min-width: 250px;
 }
 @media (max-width: 768px) {
-  /* line 359, ../assets/sass/components/_filters.scss */
+  /* line 402, ../assets/sass/components/_filters.scss */
   .view-gallery-directory .form-type-textfield {
     width: 100%;
   }
 }
-/* line 373, ../assets/sass/components/_filters.scss */
+/* line 416, ../assets/sass/components/_filters.scss */
+.view-gallery-directory .form-actions .button {
+  text-transform: uppercase;
+  border-radius: 0;
+}
+/* line 421, ../assets/sass/components/_filters.scss */
 .view-gallery-directory .form-actions .form-submit {
   float: right;
 }
-/* line 377, ../assets/sass/components/_filters.scss */
+@media (max-width: 768px) {
+  /* line 421, ../assets/sass/components/_filters.scss */
+  .view-gallery-directory .form-actions .form-submit {
+    width: 100%;
+    margin: 10px 0;
+    float: none;
+  }
+}
+/* line 431, ../assets/sass/components/_filters.scss */
 .view-gallery-directory .form-actions .btn-primary {
   background-color: #26686d;
   border-color: #225d62;
 }
-/* line 381, ../assets/sass/components/_filters.scss */
+/* line 435, ../assets/sass/components/_filters.scss */
 .view-gallery-directory .form-actions .btn-primary:hover {
   background-color: #1b494c;
   border-color: #1e5357;
 }
-/* line 387, ../assets/sass/components/_filters.scss */
-.view-gallery-directory .form-actions .button {
-  text-transform: uppercase;
-  border-radius: 0;
+@media (max-width: 768px) {
+  /* line 414, ../assets/sass/components/_filters.scss */
+  .view-gallery-directory .form-actions {
+    display: flex;
+    flex-direction: column-reverse;
+  }
+}
+
+/* line 454, ../assets/sass/components/_filters.scss */
+.path-news .page-header {
+  margin: 44px 0 0;
+  border-bottom: none;
 }
 
-/* line 400, ../assets/sass/components/_filters.scss */
+/* line 462, ../assets/sass/components/_filters.scss */
 .view-news .view-filters {
   background: #D8D8D8;
   padding: 10px;
 }
-/* line 405, ../assets/sass/components/_filters.scss */
+/* line 467, ../assets/sass/components/_filters.scss */
 .view-news .filter-heading {
   color: #225D62;
   width: 100%;
 }
-/* line 410, ../assets/sass/components/_filters.scss */
+/* line 472, ../assets/sass/components/_filters.scss */
+.view-news .filter-linebreak {
+  padding: 8px;
+}
+@media (max-width: 1200px) {
+  /* line 472, ../assets/sass/components/_filters.scss */
+  .view-news .filter-linebreak {
+    display: none;
+  }
+}
+/* line 480, ../assets/sass/components/_filters.scss */
 .view-news .filter-spacer {
   display: none;
 }
 @media (max-width: 1200px) {
-  /* line 410, ../assets/sass/components/_filters.scss */
+  /* line 480, ../assets/sass/components/_filters.scss */
   .view-news .filter-spacer {
     display: block;
   }
 }
-/* line 418, ../assets/sass/components/_filters.scss */
+/* line 488, ../assets/sass/components/_filters.scss */
 .view-news .select-wrapper {
   margin-right: 10px;
 }
-/* line 421, ../assets/sass/components/_filters.scss */
+/* line 491, ../assets/sass/components/_filters.scss */
 .view-news .select-wrapper select {
   min-width: 250px;
 }
 @media (max-width: 1200px) {
-  /* line 421, ../assets/sass/components/_filters.scss */
+  /* line 491, ../assets/sass/components/_filters.scss */
   .view-news .select-wrapper select {
     margin-top: 10px;
     min-width: 273px;
   }
 }
 @media (max-width: 768px) {
-  /* line 421, ../assets/sass/components/_filters.scss */
+  /* line 491, ../assets/sass/components/_filters.scss */
   .view-news .select-wrapper select {
     margin-top: 0;
     min-width: 0;
   }
 }
-/* line 435, ../assets/sass/components/_filters.scss */
+/* line 505, ../assets/sass/components/_filters.scss */
 .view-news .select-wrapper:after {
   color: #555555;
   font-size: 12px;
 }
 @media (max-width: 768px) {
-  /* line 418, ../assets/sass/components/_filters.scss */
+  /* line 488, ../assets/sass/components/_filters.scss */
   .view-news .select-wrapper {
     width: 100%;
   }
 }
-/* line 445, ../assets/sass/components/_filters.scss */
+/* line 515, ../assets/sass/components/_filters.scss */
 .view-news .form-type-textfield {
   margin-right: 10px;
 }
-/* line 448, ../assets/sass/components/_filters.scss */
+/* line 518, ../assets/sass/components/_filters.scss */
 .view-news .form-type-textfield input {
   min-width: 250px;
 }
 @media (max-width: 768px) {
-  /* line 445, ../assets/sass/components/_filters.scss */
+  /* line 515, ../assets/sass/components/_filters.scss */
   .view-news .form-type-textfield {
     width: 100%;
   }
 }
-/* line 459, ../assets/sass/components/_filters.scss */
+/* line 529, ../assets/sass/components/_filters.scss */
+.view-news .form-actions .button {
+  text-transform: uppercase;
+  border-radius: 0;
+}
+/* line 534, ../assets/sass/components/_filters.scss */
 .view-news .form-actions .form-submit {
   float: right;
 }
-/* line 463, ../assets/sass/components/_filters.scss */
+@media (max-width: 768px) {
+  /* line 534, ../assets/sass/components/_filters.scss */
+  .view-news .form-actions .form-submit {
+    width: 100%;
+    margin: 10px 0;
+    float: none;
+  }
+}
+/* line 544, ../assets/sass/components/_filters.scss */
 .view-news .form-actions .btn-primary {
   background-color: #26686d;
   border-color: #225d62;
 }
-/* line 467, ../assets/sass/components/_filters.scss */
+/* line 548, ../assets/sass/components/_filters.scss */
 .view-news .form-actions .btn-primary:hover {
   background-color: #1b494c;
   border-color: #1e5357;
 }
-/* line 473, ../assets/sass/components/_filters.scss */
-.view-news .form-actions .button {
+@media (max-width: 768px) {
+  /* line 527, ../assets/sass/components/_filters.scss */
+  .view-news .form-actions {
+    display: flex;
+    flex-direction: column-reverse;
+  }
+}
+
+/* line 566, ../assets/sass/components/_filters.scss */
+.path-people .page-header {
+  margin: 44px 0 0;
+  border-bottom: none;
+}
+
+/* line 574, ../assets/sass/components/_filters.scss */
+.view-people-directory .view-filters {
+  background: #D8D8D8;
+  padding: 10px;
+}
+/* line 579, ../assets/sass/components/_filters.scss */
+.view-people-directory .filter-heading {
+  color: #225D62;
+  width: 100%;
+}
+@media (max-width: 1200px) {
+  /* line 584, ../assets/sass/components/_filters.scss */
+  .view-people-directory .filter-linebreak {
+    display: none;
+  }
+}
+/* line 591, ../assets/sass/components/_filters.scss */
+.view-people-directory .filter-spacer {
+  display: none;
+}
+@media (max-width: 1200px) {
+  /* line 591, ../assets/sass/components/_filters.scss */
+  .view-people-directory .filter-spacer {
+    display: block;
+  }
+}
+/* line 599, ../assets/sass/components/_filters.scss */
+.view-people-directory .select-wrapper {
+  margin-right: 10px;
+}
+/* line 602, ../assets/sass/components/_filters.scss */
+.view-people-directory .select-wrapper select {
+  min-width: 250px;
+}
+@media (max-width: 1200px) {
+  /* line 602, ../assets/sass/components/_filters.scss */
+  .view-people-directory .select-wrapper select {
+    margin-top: 10px;
+    min-width: 273px;
+  }
+}
+@media (max-width: 768px) {
+  /* line 602, ../assets/sass/components/_filters.scss */
+  .view-people-directory .select-wrapper select {
+    margin-top: 0;
+    min-width: 0;
+  }
+}
+/* line 616, ../assets/sass/components/_filters.scss */
+.view-people-directory .select-wrapper:after {
+  color: #555555;
+  font-size: 12px;
+}
+@media (max-width: 768px) {
+  /* line 599, ../assets/sass/components/_filters.scss */
+  .view-people-directory .select-wrapper {
+    width: 100%;
+  }
+}
+/* line 626, ../assets/sass/components/_filters.scss */
+.view-people-directory .form-type-textfield {
+  margin-right: 10px;
+}
+/* line 629, ../assets/sass/components/_filters.scss */
+.view-people-directory .form-type-textfield input {
+  min-width: 250px;
+}
+@media (max-width: 768px) {
+  /* line 626, ../assets/sass/components/_filters.scss */
+  .view-people-directory .form-type-textfield {
+    width: 100%;
+  }
+}
+
+/* line 641, ../assets/sass/components/_filters.scss */
+#views-exposed-form-people-directory-page-1 .form-item {
+  margin-right: 20px;
+}
+/* line 644, ../assets/sass/components/_filters.scss */
+#views-exposed-form-people-directory-page-1 .form-item .panel-heading {
+  padding: 0 15px;
+}
+/* line 649, ../assets/sass/components/_filters.scss */
+#views-exposed-form-people-directory-page-1 .form-item .panel-heading .panel-title .fa {
+  float: right;
+  margin-top: 5px;
+}
+@media (max-width: 768px) {
+  /* line 641, ../assets/sass/components/_filters.scss */
+  #views-exposed-form-people-directory-page-1 .form-item {
+    width: 100%;
+  }
+}
+/* line 661, ../assets/sass/components/_filters.scss */
+#views-exposed-form-people-directory-page-1 .form-checkbox {
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  -ie-appearance: none;
+  background-color: #fafafa;
+  border: 1px solid #cacece;
+  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+  padding: 9px;
+  border-radius: 3px;
+  display: inline-block;
+  position: relative;
+  top: 4px;
+  margin-right: 10px;
+}
+/* line 675, ../assets/sass/components/_filters.scss */
+#views-exposed-form-people-directory-page-1 .form-checkbox:active, #views-exposed-form-people-directory-page-1 .form-checkbox:checked:active {
+  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05), inset 0px 1px 3px rgba(0, 0, 0, 0.1);
+}
+/* line 679, ../assets/sass/components/_filters.scss */
+#views-exposed-form-people-directory-page-1 .form-checkbox:checked {
+  background-color: #442369;
+  border: 1px solid #adb8c0;
+  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05), inset 0px -15px 10px -12px rgba(0, 0, 0, 0.05), inset 15px 10px -12px rgba(255, 255, 255, 0.1);
+  color: #99a1a7;
+}
+/* line 686, ../assets/sass/components/_filters.scss */
+#views-exposed-form-people-directory-page-1 .form-checkbox:checked:after {
+  content: '\2713';
+  font-size: 14px;
+  position: absolute;
+  top: 0px;
+  left: 3px;
+  color: #ffffff;
+}
+@media (max-width: 768px) {
+  /* line 696, ../assets/sass/components/_filters.scss */
+  #views-exposed-form-people-directory-page-1 .form-item-combine {
+    width: 100%;
+  }
+}
+/* line 705, ../assets/sass/components/_filters.scss */
+#views-exposed-form-people-directory-page-1 .form-actions .button {
   text-transform: uppercase;
   border-radius: 0;
 }
+/* line 710, ../assets/sass/components/_filters.scss */
+#views-exposed-form-people-directory-page-1 .form-actions .form-submit {
+  float: right;
+}
+@media (max-width: 768px) {
+  /* line 710, ../assets/sass/components/_filters.scss */
+  #views-exposed-form-people-directory-page-1 .form-actions .form-submit {
+    width: 100%;
+    margin: 10px 0;
+    float: none;
+  }
+}
+/* line 720, ../assets/sass/components/_filters.scss */
+#views-exposed-form-people-directory-page-1 .form-actions .btn-primary {
+  background-color: #26686d;
+  border-color: #225d62;
+}
+/* line 724, ../assets/sass/components/_filters.scss */
+#views-exposed-form-people-directory-page-1 .form-actions .btn-primary:hover {
+  background-color: #1b494c;
+  border-color: #1e5357;
+}
+@media (max-width: 768px) {
+  /* line 703, ../assets/sass/components/_filters.scss */
+  #views-exposed-form-people-directory-page-1 .form-actions {
+    display: flex;
+    flex-direction: column-reverse;
+  }
+}
+
+/* line 738, ../assets/sass/components/_filters.scss */
+.block-views-exposed-filter-blockpeople-directory-page-1 {
+  padding: 20px 0px;
+}
+/* line 741, ../assets/sass/components/_filters.scss */
+.block-views-exposed-filter-blockpeople-directory-page-1 .form-wrapper {
+  margin-top: 20px;
+}
+/* line 744, ../assets/sass/components/_filters.scss */
+.block-views-exposed-filter-blockpeople-directory-page-1 .form-wrapper legend {
+  text-transform: uppercase;
+  color: #4A4A4A;
+  font-weight: bold;
+  font-size: 18px;
+  border-bottom: none;
+  margin-bottom: 5px;
+}
 
-/* line 485, ../assets/sass/components/_filters.scss */
+/* line 761, ../assets/sass/components/_filters.scss */
+.path-research-project-directory .page-header {
+  margin: 44px 0 0;
+  border-bottom: none;
+}
+
+/* line 769, ../assets/sass/components/_filters.scss */
 .view-research-project-directory .view-filters {
   background: #D8D8D8;
   padding: 10px;
 }
-/* line 490, ../assets/sass/components/_filters.scss */
+/* line 774, ../assets/sass/components/_filters.scss */
 .view-research-project-directory .filter-heading {
   color: #225D62;
   width: 100%;
 }
-/* line 495, ../assets/sass/components/_filters.scss */
+/* line 779, ../assets/sass/components/_filters.scss */
+.view-research-project-directory .filter-linebreak {
+  padding: 8px;
+}
+@media (max-width: 1200px) {
+  /* line 779, ../assets/sass/components/_filters.scss */
+  .view-research-project-directory .filter-linebreak {
+    display: none;
+  }
+}
+/* line 787, ../assets/sass/components/_filters.scss */
 .view-research-project-directory .form-type-textfield {
   margin-right: 10px;
 }
-/* line 498, ../assets/sass/components/_filters.scss */
+/* line 790, ../assets/sass/components/_filters.scss */
 .view-research-project-directory .form-type-textfield input {
   min-width: 250px;
 }
-/* line 505, ../assets/sass/components/_filters.scss */
+/* line 797, ../assets/sass/components/_filters.scss */
 .view-research-project-directory .select-wrapper select {
   min-width: 250px;
 }
-/* line 509, ../assets/sass/components/_filters.scss */
+/* line 801, ../assets/sass/components/_filters.scss */
 .view-research-project-directory .select-wrapper:after {
   color: #555555;
   font-size: 12px;
 }
-/* line 517, ../assets/sass/components/_filters.scss */
+/* line 809, ../assets/sass/components/_filters.scss */
+.view-research-project-directory .form-actions .button {
+  text-transform: uppercase;
+  border-radius: 0;
+}
+/* line 814, ../assets/sass/components/_filters.scss */
 .view-research-project-directory .form-actions .form-submit {
   float: right;
 }
-/* line 521, ../assets/sass/components/_filters.scss */
+@media (max-width: 768px) {
+  /* line 814, ../assets/sass/components/_filters.scss */
+  .view-research-project-directory .form-actions .form-submit {
+    width: 100%;
+    margin: 10px 0;
+    float: none;
+  }
+}
+/* line 824, ../assets/sass/components/_filters.scss */
 .view-research-project-directory .form-actions .btn-primary {
   background-color: #26686d;
   border-color: #225d62;
 }
-/* line 525, ../assets/sass/components/_filters.scss */
+/* line 828, ../assets/sass/components/_filters.scss */
 .view-research-project-directory .form-actions .btn-primary:hover {
   background-color: #1b494c;
   border-color: #1e5357;
 }
-/* line 531, ../assets/sass/components/_filters.scss */
-.view-research-project-directory .form-actions .button {
-  text-transform: uppercase;
-  border-radius: 0;
+@media (max-width: 768px) {
+  /* line 807, ../assets/sass/components/_filters.scss */
+  .view-research-project-directory .form-actions {
+    display: flex;
+    flex-direction: column-reverse;
+  }
 }
 
-/* line 544, ../assets/sass/components/_filters.scss */
+/* line 847, ../assets/sass/components/_filters.scss */
+.path-research-project-directory-mobile .page-header {
+  margin: 44px 0 0;
+  border-bottom: none;
+}
+
+/* line 855, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .view-filters {
   background: #D8D8D8;
   padding: 10px;
 }
-/* line 549, ../assets/sass/components/_filters.scss */
+/* line 860, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .filter-heading {
   color: #225D62;
   width: 100%;
 }
-/* line 554, ../assets/sass/components/_filters.scss */
+/* line 865, ../assets/sass/components/_filters.scss */
+.view-research-project-directory-mobile .filter-linebreak {
+  padding: 8px;
+}
+@media (max-width: 1200px) {
+  /* line 865, ../assets/sass/components/_filters.scss */
+  .view-research-project-directory-mobile .filter-linebreak {
+    display: none;
+  }
+}
+/* line 873, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .form-item {
   background: #ffffff;
   padding: 5px 10px;
   border-radius: 8px;
   margin: 10px 0;
 }
-/* line 561, ../assets/sass/components/_filters.scss */
+/* line 880, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .form-type-textfield {
   width: 100%;
   background: transparent;
   padding: 0;
 }
-/* line 566, ../assets/sass/components/_filters.scss */
+/* line 885, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .form-type-textfield label {
   display: none;
 }
-/* line 570, ../assets/sass/components/_filters.scss */
+/* line 889, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .form-type-textfield .form-control {
   width: 100%;
   border-radius: 0;
 }
-/* line 576, ../assets/sass/components/_filters.scss */
+/* line 895, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .form-type-textfield {
   margin-right: 10px;
 }
-/* line 579, ../assets/sass/components/_filters.scss */
+/* line 898, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .form-type-textfield input {
   min-width: 250px;
 }
-/* line 586, ../assets/sass/components/_filters.scss */
+/* line 905, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .select-wrapper select {
   min-width: 250px;
 }
-/* line 590, ../assets/sass/components/_filters.scss */
+/* line 909, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .select-wrapper:after {
   color: #555555;
   font-size: 12px;
 }
-/* line 598, ../assets/sass/components/_filters.scss */
+/* line 917, ../assets/sass/components/_filters.scss */
+.view-research-project-directory-mobile .form-actions .button {
+  text-transform: uppercase;
+  border-radius: 0;
+}
+/* line 922, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .form-actions .form-submit {
   float: right;
 }
-/* line 602, ../assets/sass/components/_filters.scss */
+@media (max-width: 768px) {
+  /* line 922, ../assets/sass/components/_filters.scss */
+  .view-research-project-directory-mobile .form-actions .form-submit {
+    width: 100%;
+    margin: 10px 0;
+    float: none;
+  }
+}
+/* line 932, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .form-actions .btn-primary {
   background-color: #26686d;
   border-color: #225d62;
 }
-/* line 606, ../assets/sass/components/_filters.scss */
+/* line 936, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .form-actions .btn-primary:hover {
   background-color: #1b494c;
   border-color: #1e5357;
 }
-/* line 612, ../assets/sass/components/_filters.scss */
-.view-research-project-directory-mobile .form-actions .button {
-  text-transform: uppercase;
-  border-radius: 0;
+@media (max-width: 768px) {
+  /* line 915, ../assets/sass/components/_filters.scss */
+  .view-research-project-directory-mobile .form-actions {
+    display: flex;
+    flex-direction: column-reverse;
+  }
 }
-/* line 619, ../assets/sass/components/_filters.scss */
+/* line 949, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .views-row .views-col {
   background: #F9F9F9;
   border: #DDD solid 1px;
   padding: 20px;
   margin-bottom: 15px;
 }
-/* line 627, ../assets/sass/components/_filters.scss */
+/* line 957, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .form-item-field-research-departments-target-id-all {
   display: none;
 }
-/* line 631, ../assets/sass/components/_filters.scss */
+/* line 961, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .form-item-field-research-other-target-id-all {
   display: none;
 }
-/* line 635, ../assets/sass/components/_filters.scss */
+/* line 965, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .form-item-field-research-year-target-id-all {
   display: none;
 }
 
-/* line 646, ../assets/sass/components/_filters.scss */
+/* line 976, ../assets/sass/components/_filters.scss */
+.path-research-project-gallery .page-header {
+  margin: 44px 0 0;
+  border-bottom: none;
+}
+
+/* line 984, ../assets/sass/components/_filters.scss */
 .view-research-project-gallery .control-label {
   display: none;
 }
-/* line 650, ../assets/sass/components/_filters.scss */
+/* line 988, ../assets/sass/components/_filters.scss */
 .view-research-project-gallery .view-filters {
   background: #D8D8D8;
   padding: 20px 15px 15px;
 }
-/* line 655, ../assets/sass/components/_filters.scss */
+/* line 993, ../assets/sass/components/_filters.scss */
 .view-research-project-gallery .filter-heading {
   color: #225D62;
   width: 100%;
 }
-/* line 660, ../assets/sass/components/_filters.scss */
+/* line 998, ../assets/sass/components/_filters.scss */
+.view-research-project-gallery .filter-linebreak {
+  padding: 8px;
+}
+@media (max-width: 1200px) {
+  /* line 998, ../assets/sass/components/_filters.scss */
+  .view-research-project-gallery .filter-linebreak {
+    display: none;
+  }
+}
+/* line 1006, ../assets/sass/components/_filters.scss */
 .view-research-project-gallery .filter-spacer {
   width: 100%;
   margin-top: 15px;
 }
-/* line 665, ../assets/sass/components/_filters.scss */
+/* line 1011, ../assets/sass/components/_filters.scss */
 .view-research-project-gallery .select-wrapper {
   margin-right: 10px;
 }
-/* line 668, ../assets/sass/components/_filters.scss */
+/* line 1014, ../assets/sass/components/_filters.scss */
 .view-research-project-gallery .select-wrapper select {
   min-width: 250px;
 }
 @media (max-width: 1200px) {
-  /* line 668, ../assets/sass/components/_filters.scss */
+  /* line 1014, ../assets/sass/components/_filters.scss */
   .view-research-project-gallery .select-wrapper select {
     margin-top: 10px;
     min-width: 273px;
   }
 }
 @media (max-width: 768px) {
-  /* line 668, ../assets/sass/components/_filters.scss */
+  /* line 1014, ../assets/sass/components/_filters.scss */
   .view-research-project-gallery .select-wrapper select {
     margin-top: 0;
     min-width: 0;
   }
 }
-/* line 682, ../assets/sass/components/_filters.scss */
+/* line 1028, ../assets/sass/components/_filters.scss */
 .view-research-project-gallery .select-wrapper:after {
   color: #555555;
   font-size: 12px;
 }
 @media (max-width: 768px) {
-  /* line 665, ../assets/sass/components/_filters.scss */
+  /* line 1011, ../assets/sass/components/_filters.scss */
   .view-research-project-gallery .select-wrapper {
     width: 100%;
   }
 }
-/* line 692, ../assets/sass/components/_filters.scss */
+/* line 1038, ../assets/sass/components/_filters.scss */
 .view-research-project-gallery .form-type-textfield {
   margin-right: 10px;
 }
-/* line 695, ../assets/sass/components/_filters.scss */
+/* line 1041, ../assets/sass/components/_filters.scss */
 .view-research-project-gallery .form-type-textfield input {
   min-width: 250px;
 }
 @media (max-width: 768px) {
-  /* line 692, ../assets/sass/components/_filters.scss */
+  /* line 1038, ../assets/sass/components/_filters.scss */
   .view-research-project-gallery .form-type-textfield {
     width: 100%;
   }
 }
-/* line 706, ../assets/sass/components/_filters.scss */
+/* line 1052, ../assets/sass/components/_filters.scss */
+.view-research-project-gallery .form-actions .button {
+  text-transform: uppercase;
+  border-radius: 0;
+}
+/* line 1057, ../assets/sass/components/_filters.scss */
 .view-research-project-gallery .form-actions .form-submit {
   float: right;
 }
-/* line 710, ../assets/sass/components/_filters.scss */
+@media (max-width: 768px) {
+  /* line 1057, ../assets/sass/components/_filters.scss */
+  .view-research-project-gallery .form-actions .form-submit {
+    width: 100%;
+    margin: 10px 0;
+    float: none;
+  }
+}
+/* line 1067, ../assets/sass/components/_filters.scss */
 .view-research-project-gallery .form-actions .btn-primary {
   background-color: #26686d;
   border-color: #225d62;
 }
-/* line 714, ../assets/sass/components/_filters.scss */
+/* line 1071, ../assets/sass/components/_filters.scss */
 .view-research-project-gallery .form-actions .btn-primary:hover {
   background-color: #1b494c;
   border-color: #1e5357;
 }
-/* line 720, ../assets/sass/components/_filters.scss */
-.view-research-project-gallery .form-actions .button {
-  text-transform: uppercase;
-  border-radius: 0;
+@media (max-width: 768px) {
+  /* line 1050, ../assets/sass/components/_filters.scss */
+  .view-research-project-gallery .form-actions {
+    display: flex;
+    flex-direction: column-reverse;
+  }
 }
 
 /* line 10, ../assets/sass/components/_gallery.scss */
@@ -12346,43 +12725,39 @@ article.news-story {
   width: 100% !important;
 }
 
-/* line 9, ../assets/sass/components/_people.scss */
-.view-people-directory {
-  margin-bottom: 40px;
-}
-/* line 12, ../assets/sass/components/_people.scss */
+/* line 11, ../assets/sass/components/_people.scss */
 .view-people-directory h3 {
   text-transform: uppercase;
 }
-/* line 16, ../assets/sass/components/_people.scss */
+/* line 15, ../assets/sass/components/_people.scss */
 .view-people-directory .row {
   display: flex;
 }
 @media (max-width: 768px) {
-  /* line 16, ../assets/sass/components/_people.scss */
+  /* line 15, ../assets/sass/components/_people.scss */
   .view-people-directory .row {
     display: block;
   }
 }
-/* line 24, ../assets/sass/components/_people.scss */
+/* line 23, ../assets/sass/components/_people.scss */
 .view-people-directory .view-header {
   margin-bottom: 20px;
   padding-bottom: 20px;
   border-bottom: solid #979797 3px;
 }
-/* line 30, ../assets/sass/components/_people.scss */
+/* line 29, ../assets/sass/components/_people.scss */
 .view-people-directory .people-row {
   font-size: 14px;
   line-height: 1.6;
   display: flex;
 }
 @media (max-width: 768px) {
-  /* line 30, ../assets/sass/components/_people.scss */
+  /* line 29, ../assets/sass/components/_people.scss */
   .view-people-directory .people-row {
     display: block;
   }
 }
-/* line 39, ../assets/sass/components/_people.scss */
+/* line 38, ../assets/sass/components/_people.scss */
 .view-people-directory .people-row .inner-people-grid {
   flex: 1;
   background: #F9F9F9;
@@ -12390,274 +12765,143 @@ article.news-story {
   margin-bottom: 30px;
 }
 @media (max-width: 768px) {
-  /* line 39, ../assets/sass/components/_people.scss */
+  /* line 38, ../assets/sass/components/_people.scss */
   .view-people-directory .people-row .inner-people-grid {
     flex: none;
   }
 }
-/* line 49, ../assets/sass/components/_people.scss */
+/* line 48, ../assets/sass/components/_people.scss */
 .view-people-directory .people-row .inner-people-grid .views-field-user-picture {
   margin-bottom: 10px;
 }
-/* line 55, ../assets/sass/components/_people.scss */
+/* line 54, ../assets/sass/components/_people.scss */
 .view-people-directory .people-row .inner-people-grid .views-field-nothing-1 img {
   width: 100%;
 }
-/* line 60, ../assets/sass/components/_people.scss */
+/* line 59, ../assets/sass/components/_people.scss */
 .view-people-directory .people-row .inner-people-grid .views-field-field-first-name,
 .view-people-directory .people-row .inner-people-grid .views-field-field-last-name {
   font-weight: bold;
   font-size: 16px;
 }
-/* line 67, ../assets/sass/components/_people.scss */
+/* line 66, ../assets/sass/components/_people.scss */
 .view-people-directory .people-row .inner-people-grid .views-field-field-first-name a:hover,
 .view-people-directory .people-row .inner-people-grid .views-field-field-last-name a:hover {
   color: #bb0000;
 }
+
 /* line 75, ../assets/sass/components/_people.scss */
-.view-people-directory .square-opic {
+.view-display-id-page_1 {
+  margin-bottom: 40px;
+}
+
+/* line 79, ../assets/sass/components/_people.scss */
+.square-opic {
   max-width: 220px;
   max-height: 220px;
   overflow: hidden;
   position: relative;
 }
-/* line 81, ../assets/sass/components/_people.scss */
-.view-people-directory .square-opic:after {
+/* line 85, ../assets/sass/components/_people.scss */
+.square-opic:after {
   content: "";
   display: block;
   padding-bottom: 100%;
 }
 @media (max-width: 768px) {
-  /* line 75, ../assets/sass/components/_people.scss */
-  .view-people-directory .square-opic {
+  /* line 79, ../assets/sass/components/_people.scss */
+  .square-opic {
     max-width: 100%;
     max-height: 630px;
   }
 }
-/* line 93, ../assets/sass/components/_people.scss */
-.view-people-directory .square-opic-content {
+
+/* line 97, ../assets/sass/components/_people.scss */
+.square-opic-content {
   position: absolute;
   width: 100%;
   height: 100%;
 }
 
-/* line 107, ../assets/sass/components/_people.scss */
-.block-views-exposed-filter-blockpeople-directory-page-1 {
-  padding: 20px 0px;
-}
-
-/* line 113, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-1 .form-item {
-  width: 100%;
-}
-/* line 117, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-1 .form-checkbox {
-  -webkit-appearance: none;
-  -moz-appearance: none;
-  -ie-appearance: none;
-  background-color: #fafafa;
-  border: 1px solid #cacece;
-  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
-  padding: 9px;
-  border-radius: 3px;
-  display: inline-block;
-  position: relative;
-  top: 4px;
-}
-/* line 130, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-1 .form-checkbox:active, #views-exposed-form-people-directory-page-1 .form-checkbox:checked:active {
-  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05), inset 0px 1px 3px rgba(0, 0, 0, 0.1);
-}
-/* line 134, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-1 .form-checkbox:checked {
-  background-color: #442369;
-  border: 1px solid #adb8c0;
-  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05), inset 0px -15px 10px -12px rgba(0, 0, 0, 0.05), inset 15px 10px -12px rgba(255, 255, 255, 0.1);
-  color: #99a1a7;
-}
-/* line 141, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-1 .form-checkbox:checked:after {
-  content: '\2713';
-  font-size: 14px;
-  position: absolute;
-  top: 0px;
-  left: 3px;
-  color: #ffffff;
-}
-/* line 151, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-1 .form-wrapper {
-  margin-top: 20px;
-}
-/* line 154, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-1 .form-wrapper legend {
-  text-transform: uppercase;
-  color: #4A4A4A;
-  font-weight: bold;
-  font-size: 18px;
-  border-bottom: none;
-  margin-bottom: 5px;
-}
-/* line 164, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-1 label {
-  width: 90%;
-  margin-left: 28px;
-}
-/* line 168, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-1 label input {
-  margin-left: -28px;
-  margin-right: 8px;
-}
-
-/* line 181, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-2 {
-  background: #D8D8D8;
-  padding: 10px;
-}
-/* line 185, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-2 details {
-  background: #ffffff;
-  padding: 5px 10px;
-  border-radius: 8px;
-  margin: 10px 0;
-}
-/* line 192, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-2 .ppl-filter-heading {
-  color: #225D62;
-  margin: 5px 0;
-  text-transform: capitalize;
-}
-/* line 198, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-2 .ppl-taxon-heading {
-  margin-top: 20px;
-}
-/* line 202, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-2 .form-checkbox {
-  -webkit-appearance: none;
-  -moz-appearance: none;
-  -ie-appearance: none;
-  background-color: #fafafa;
-  border: 1px solid #cacece;
-  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05), inset 0px -15px 10px -12px rgba(0, 0, 0, 0.05);
-  padding: 9px;
-  border-radius: 3px;
-  display: inline-block;
-  position: relative;
-  top: 4px;
-  margin-right: 5px;
-}
-/* line 216, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-2 .form-checkbox:active, #views-exposed-form-people-directory-page-2 .form-checkbox:checked:active {
-  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05), inset 0px 1px 3px rgba(0, 0, 0, 0.1);
-}
-/* line 220, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-2 .form-checkbox:checked {
-  background-color: #442369;
-  border: 1px solid #adb8c0;
-  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05), inset 0px -15px 10px -12px rgba(0, 0, 0, 0.05), inset 15px 10px -12px rgba(255, 255, 255, 0.1);
-  color: #99a1a7;
-}
-/* line 227, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-2 .form-checkbox:checked:after {
-  content: '\2713';
-  font-size: 14px;
-  position: absolute;
-  top: 0px;
-  left: 3px;
-  color: #ffffff;
-}
-/* line 237, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-2 #edit-submit-people-directory {
-  text-transform: uppercase;
-}
-/* line 241, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-2 #edit-reset {
-  text-transform: uppercase;
-}
-
-/* line 252, ../assets/sass/components/_people.scss */
+/* line 109, ../assets/sass/components/_people.scss */
 .path-user .page-header {
   display: none;
 }
 
-/* line 256, ../assets/sass/components/_people.scss */
+/* line 113, ../assets/sass/components/_people.scss */
 .bio-header-top {
   background: #F9F9F9;
 }
-/* line 261, ../assets/sass/components/_people.scss */
+/* line 118, ../assets/sass/components/_people.scss */
 .bio-header-top .bio-top-right img {
   padding: 15px 0;
   width: 100%;
 }
-/* line 269, ../assets/sass/components/_people.scss */
+/* line 126, ../assets/sass/components/_people.scss */
 .bio-header-top .field--name-field-google-map-location .field--item {
   padding: 20px 0;
 }
-/* line 272, ../assets/sass/components/_people.scss */
+/* line 129, ../assets/sass/components/_people.scss */
 .bio-header-top .field--name-field-google-map-location .field--item .geolocation-formatter-map-wrapper {
   border: solid 2px #979797;
 }
-/* line 280, ../assets/sass/components/_people.scss */
+/* line 137, ../assets/sass/components/_people.scss */
 .bio-header-top .bio-top-left h1 {
   margin-bottom: 0;
 }
-/* line 284, ../assets/sass/components/_people.scss */
-.bio-header-top .bio-top-left .bio-pronoun {
-  font-size: 14px;
-  font-style: italic;
-}
 
-/* line 292, ../assets/sass/components/_people.scss */
+/* line 144, ../assets/sass/components/_people.scss */
 .bio-header {
   width: 100%;
   float: left;
   margin: 0 0 20px;
 }
 
-/* line 298, ../assets/sass/components/_people.scss */
+/* line 150, ../assets/sass/components/_people.scss */
 .bio-btm-left {
   margin-bottom: 40px;
 }
-/* line 301, ../assets/sass/components/_people.scss */
+/* line 153, ../assets/sass/components/_people.scss */
 .bio-btm-left h2 {
   font-size: 22px;
 }
-/* line 305, ../assets/sass/components/_people.scss */
+/* line 157, ../assets/sass/components/_people.scss */
 .bio-btm-left .carousel {
   height: auto;
   overflow: hidden;
   width: 100%;
 }
-/* line 310, ../assets/sass/components/_people.scss */
+/* line 162, ../assets/sass/components/_people.scss */
 .bio-btm-left .carousel .field--name-field-media-image {
   padding-bottom: 0;
 }
-/* line 313, ../assets/sass/components/_people.scss */
+/* line 165, ../assets/sass/components/_people.scss */
 .bio-btm-left .carousel .field--name-field-media-image .img-responsive {
   width: 100%;
 }
 @media (max-width: 1030px) {
-  /* line 305, ../assets/sass/components/_people.scss */
+  /* line 157, ../assets/sass/components/_people.scss */
   .bio-btm-left .carousel {
     height: auto;
   }
 }
-/* line 323, ../assets/sass/components/_people.scss */
+/* line 175, ../assets/sass/components/_people.scss */
 .bio-btm-left .bio-exp {
   padding-left: 0;
 }
-/* line 327, ../assets/sass/components/_people.scss */
+/* line 179, ../assets/sass/components/_people.scss */
 .bio-btm-left .taxonomy-people-heading {
   float: left;
   width: 100%;
   padding-top: 15px;
 }
-/* line 332, ../assets/sass/components/_people.scss */
+/* line 184, ../assets/sass/components/_people.scss */
 .bio-btm-left .taxonomy-people-heading h2 {
   line-height: 0;
   font-size: 18px;
 }
 
-/* line 340, ../assets/sass/components/_people.scss */
+/* line 192, ../assets/sass/components/_people.scss */
 .bio-btm-right h3 {
   font-size: 18px;
   padding-top: 20px;
diff --git a/web/themes/asc_bootstrap/js/scripts.js b/web/themes/asc_bootstrap/js/scripts.js
index 6e0f236a8c..00b6ed699b 100644
--- a/web/themes/asc_bootstrap/js/scripts.js
+++ b/web/themes/asc_bootstrap/js/scripts.js
@@ -85,6 +85,11 @@ jQuery(document).ready(function(){
     });
   }
 
+  //add arrow to people filter taxonomy
+  if(jQuery("#views-exposed-form-people-directory-page-1").length) {
+    jQuery(".panel-title").append("<i class='fa fa-angle-down' aria-hidden='true'></i>");
+  }
+
   //accordions change fontawesome character
   jQuery(".panel-title").click(function(){
     //jQuery(this).find("svg").toggleClass('fa-angle-up', addOrRemove);
@@ -136,9 +141,9 @@ jQuery(document).ready(function(){
   }*/
 
   //redirect if mobile for people directory main page
-  if(((window.location.pathname == '/people')||(window.location.pathname == '/directory')) && (jQuery(window).width() <= 740)) {
-      document.location = "people-mobile";
-  }
+  // if(((window.location.pathname == '/people')||(window.location.pathname == '/directory')) && (jQuery(window).width() <= 740)) {
+  //     document.location = "people-mobile";
+  // }
   //redirect if mobile for research directory main page
   if((window.location.pathname == '/research-project-directory') && (jQuery(window).width() <= 740)) {
       document.location = "research-project-directory-mobile";
-- 
GitLab


From 61f6502d773f2462fff3af0f5676bac0927289da Mon Sep 17 00:00:00 2001
From: briancanini <38499693+briancanini@users.noreply.github.com>
Date: Thu, 17 Dec 2020 09:57:41 -0500
Subject: [PATCH 20/23] Delete sandwich.txt

not even sure why this is here
---
 .../drush/examples/Commands/art/sandwich.txt  | 24 -------------------
 1 file changed, 24 deletions(-)
 delete mode 100644 vendor/drush/drush/examples/Commands/art/sandwich.txt

diff --git a/vendor/drush/drush/examples/Commands/art/sandwich.txt b/vendor/drush/drush/examples/Commands/art/sandwich.txt
deleted file mode 100644
index dac8ca02e4..0000000000
--- a/vendor/drush/drush/examples/Commands/art/sandwich.txt
+++ /dev/null
@@ -1,24 +0,0 @@
- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
- . . .  . . . . . . . .:8 ;t;;t;;;;:..:;%SX888@X%t;.. . . . 
- . .  .. . . . . . .%t%;%@%%%%%%%%%%X@8888XS%t;...:;ttt%X. .
- . . .  . . . . . .X:8%X%%%XS%%%%%%%XS%%%%%@%%%%X%%%@%S88 . 
- . . . . . .  .  . X@ @%%%X8X%%%88%%%8X%%%%%%%%%XXt@8@88@. .
- . . . . .  . . .t@tS;%%8XSX%@XSX%@XSS%8@@88X@888X8SS S;S.  
- . . . . . . .@%XS%%%%%S8@X%@8%XXSSXX%S@SSSX888.;@ 888@ . . 
- . . . . . :.8:S%%%XS8X@@X%S@SSSS8SXSXXX%X88X:;@8@:S  88S. .
- . . .  .8%S8%%%%%%8@SSSXXXSXSXSXSXSSS8S888 :@%:%XX:%8%:X:  
- . .  .:8 %%%%@%%8@S%%XXSXSSSS8S@X%XSXX88 ;@X;SX88X8;%X88t. 
- . . 88S%S%%%%8XSSXSX@@S@%XS8@SS%@S%888 88@S:8. .;.@%X:@8;. 
- . .  88.8888888@XX   888888%X%@XX 88SS8@@;S@8.%;8@S%%:8   .
- . .  S%:8 @SSSS8 @@8@8 8 88888888@%S:8:S8 @..%S SXX8888;. .
- . . %:8S8888@88SXS S S::X@.8.8 X%S%8X:X88..% @@.S.%% .;. . 
- .    .XX8@8;;%%t;;;;:@X@888888@888888.88S;8:8  ...    . . .
- . . 8.;;@8@8:%%%%%t.8@%ttX@8@@@S8%8 X8S;X:@; :... . . . . .
- . tS:8@;88.;:8888X8S:.tX88888X88  S8tStS88 :.. . . . . . . 
- .:X;;:t%;tt%888S@8XS888@8.:tt@;88.tXXX8:::... . . . . . . .
- .:X8St:8SXS XS8@X 8.8%888%X8@@X88tXS8t; . . . . . . .  . . 
- .    :8888.88888888X@@X @ X X%S%;88;8t .. . .  . . . . .  .
- ... ..: .    .@@888%St    @ @ 8SS 8:; . . . . . . . . . . .
-   .  .  .      ..::. ..:;;::::. ... . . . . . . . . . . . .
- .. . . .     . .. . .  .  .  .. . . . . . .  . . . . . . . 
-- 
GitLab


From d92093fa3d93f81c320095de0b692bf10e705a0f Mon Sep 17 00:00:00 2001
From: Brian Canini <canini.16@osu.edu>
Date: Thu, 17 Dec 2020 13:23:09 -0500
Subject: [PATCH 21/23] moving header on people directory view below filters

---
 web/themes/asc_bootstrap/asc_bootstrap.theme  |   8 ++
 .../templates/views/views-view.html.twig      | 113 ++++++++++++++++++
 2 files changed, 121 insertions(+)
 create mode 100644 web/themes/asc_bootstrap/templates/views/views-view.html.twig

diff --git a/web/themes/asc_bootstrap/asc_bootstrap.theme b/web/themes/asc_bootstrap/asc_bootstrap.theme
index 1279614a6d..a8751a64c9 100755
--- a/web/themes/asc_bootstrap/asc_bootstrap.theme
+++ b/web/themes/asc_bootstrap/asc_bootstrap.theme
@@ -769,3 +769,11 @@ function asc_bootstrap_views_pre_render(\Drupal\views\ViewExecutable $view) {
       $view->field['field_research_other']->options['label'] = $vocab_other_label;
   }
 }
+
+/*
+* views
+*/
+function asc_bootstrap_preprocess_views_view(&$vars) {
+  //adds view name variable which is used to identify which view directory user is on (based off view id)
+  $vars['view_name'] = $vars['id'];
+}
diff --git a/web/themes/asc_bootstrap/templates/views/views-view.html.twig b/web/themes/asc_bootstrap/templates/views/views-view.html.twig
new file mode 100644
index 0000000000..ba59444dd0
--- /dev/null
+++ b/web/themes/asc_bootstrap/templates/views/views-view.html.twig
@@ -0,0 +1,113 @@
+{#
+/**
+ * @file
+ * Default theme implementation for main view template.
+ *
+ * Available variables:
+ * - attributes: Remaining HTML attributes for the element.
+ * - css_name: A css-safe version of the view name.
+ * - css_class: The user-specified classes names, if any.
+ * - header: The optional header.
+ * - footer: The optional footer.
+ * - rows: The results of the view query, if any.
+ * - empty: The content to display if there are no rows.
+ * - pager: The optional pager next/prev links to display.
+ * - exposed: Exposed widget form/info to display.
+ * - feed_icons: Optional feed icons to display.
+ * - more: An optional link to the next page of results.
+ * - title: Title of the view, only used when displaying in the admin preview.
+ * - title_prefix: Additional output populated by modules, intended to be
+ *   displayed in front of the view title.
+ * - title_suffix: Additional output populated by modules, intended to be
+ *   displayed after the view title.
+ * - attachment_before: An optional attachment view to be displayed before the
+ *   view content.
+ * - attachment_after: An optional attachment view to be displayed after the
+ *   view content.
+ * - dom_id: Unique id for every view being printed to give unique class for
+ *   JavaScript.
+ *
+ * @ingroup templates
+ *
+ * @see template_preprocess_views_view()
+ */
+#}
+{%
+  set classes = [
+    'view',
+    'view-' ~ id|clean_class,
+    'view-id-' ~ id,
+    'view-display-id-' ~ display_id,
+    dom_id ? 'js-view-dom-id-' ~ dom_id,
+  ]
+%}
+<div{{ attributes.addClass(classes) }}>
+  {{ title_prefix }}
+  {% if title %}
+    {{ title }}
+  {% endif %}
+  {{ title_suffix }}
+
+  {% if view_name == 'people_directory'%}
+    {% if exposed %}
+      <div class="view-filters form-group">
+        {{ exposed }}
+      </div>
+    {% endif %}
+    {% if header %}
+      <div class="view-header">
+        {{ header }}
+      </div>
+    {% endif %}
+
+  {% else %}
+
+    {% if header %}
+      <div class="view-header">
+        {{ header }}
+      </div>
+    {% endif %}
+    {% if exposed %}
+      <div class="view-filters form-group">
+        {{ exposed }}
+      </div>
+    {% endif %}
+  {% endif %}
+  {% if attachment_before %}
+    <div class="attachment attachment-before">
+      {{ attachment_before }}
+    </div>
+  {% endif %}
+
+  {% if rows %}
+    <div class="view-content">
+      {{ rows }}
+    </div>
+  {% elseif empty %}
+    <div class="view-empty">
+      {{ empty }}
+    </div>
+  {% endif %}
+
+  {% if pager %}
+    {{ pager }}
+  {% endif %}
+  {% if attachment_after %}
+    <div class="attachment attachment-after">
+      {{ attachment_after }}
+    </div>
+  {% endif %}
+  {% if more %}
+    {{ more }}
+  {% endif %}
+  {% if footer %}
+    <div class="view-footer">
+      {{ footer }}
+    </div>
+  {% endif %}
+  {% if feed_icons %}
+    <div class="feed-icons">
+      {{ feed_icons }}
+    </div>
+  {% endif %}
+</div>
-- 
GitLab


From 4aa28d009eaa7a15d38f8ff740760dd46fdeb4c3 Mon Sep 17 00:00:00 2001
From: Brian Canini <canini.16@osu.edu>
Date: Mon, 21 Dec 2020 09:13:27 -0500
Subject: [PATCH 22/23] setting up new version of osu webfont

---
 web/themes/asc_bootstrap/asc_bootstrap.libraries.yml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/web/themes/asc_bootstrap/asc_bootstrap.libraries.yml b/web/themes/asc_bootstrap/asc_bootstrap.libraries.yml
index c613638a92..ed9e1a5842 100755
--- a/web/themes/asc_bootstrap/asc_bootstrap.libraries.yml
+++ b/web/themes/asc_bootstrap/asc_bootstrap.libraries.yml
@@ -52,14 +52,14 @@ bootstrap-scripts:
 
 
 osu-webfonts:
-        remote: https://www.osu.edu/assets/fonts/webfonts.css
-        version: 1.0
+        remote: https://www.osu.edu/assets/fonts/extended/webfonts.css?ver=5.4.4
+        version: 5.4.4
         license:
           name: Hoftype
           url: http://www.fontspring.com/fflicense/hoftype
         css:
           theme:
-            https://www.osu.edu/assets/fonts/webfonts.css: { type: external, minified: false }
+            https://www.osu.edu/assets/fonts/extended/webfonts.css?ver=5.4.4: { type: external, minified: false }
 
 font-awesome:
   remote: https://fortawesome.github.io/Font-Awesome/
-- 
GitLab


From 95bf6eb3e100922aef0b038455d8b16096ef3160 Mon Sep 17 00:00:00 2001
From: Brian Canini <canini.16@osu.edu>
Date: Mon, 21 Dec 2020 12:26:29 -0500
Subject: [PATCH 23/23] Updating drupal/libraries (3.0.0-alpha1 =>
 3.0.0-alpha6)

---
 composer.json                                 |  2 +-
 composer.lock                                 | 25 ++++++++++---------
 vendor/composer/installed.json                | 25 ++++++++++---------
 web/modules/libraries/CHANGELOG.txt           |  1 +
 web/modules/libraries/libraries.drush.inc     |  4 +--
 web/modules/libraries/libraries.info.yml      | 10 ++++----
 web/modules/libraries/libraries.install       |  2 +-
 web/modules/libraries/libraries.module        | 21 ++++++++--------
 .../LibraryTypeNotFoundException.php          |  2 +-
 .../src/ExternalLibrary/LibraryManager.php    |  4 ++-
 .../Utility/LibraryIdAccessorInterface.php    |  2 +-
 .../example_info_file.libraries.info.yml      |  7 +++---
 .../libraries_test/libraries_test.info.yml    |  9 +++----
 .../libraries_test/libraries_test.module      |  3 ++-
 .../src/Controller/ExampleController.php      |  2 +-
 15 files changed, 62 insertions(+), 57 deletions(-)

diff --git a/composer.json b/composer.json
index b87ed6814c..8adadea075 100644
--- a/composer.json
+++ b/composer.json
@@ -131,7 +131,7 @@
         "drupal/honeypot": "1.30",
         "drupal/image_popup": "1.1",
         "drupal/inline_entity_form": "1.0-rc7",
-        "drupal/libraries": "3.0.0-alpha1",
+        "drupal/libraries": "3.0.0-alpha6",
         "drupal/link_attributes": "1.11",
         "drupal/linkit": "5.0-beta11",
         "drupal/magnific_popup": "1.3",
diff --git a/composer.lock b/composer.lock
index f65fb16877..e2bb65b40e 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "04322a544764f633495fd1d9c5c319f8",
+    "content-hash": "05c3df16b95e0ab7c48b01e1c2443a8b",
     "packages": [
         {
             "name": "alchemy/zippy",
@@ -5432,29 +5432,26 @@
         },
         {
             "name": "drupal/libraries",
-            "version": "3.0.0-alpha1",
+            "version": "3.0.0-alpha6",
             "source": {
                 "type": "git",
                 "url": "https://git.drupalcode.org/project/libraries.git",
-                "reference": "8.x-3.0-alpha1"
+                "reference": "8.x-3.0-alpha6"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://ftp.drupal.org/files/projects/libraries-8.x-3.0-alpha1.zip",
-                "reference": "8.x-3.0-alpha1",
-                "shasum": "bb07036b1eaeea7d736fc7e72416238830cd8d67"
+                "url": "https://ftp.drupal.org/files/projects/libraries-8.x-3.0-alpha6.zip",
+                "reference": "8.x-3.0-alpha6",
+                "shasum": "d2aaf7f0968a1864457a7741b7e38ab11ef83e2c"
             },
             "require": {
-                "drupal/core": "~8.0"
+                "drupal/core": "^8 || ^9"
             },
             "type": "drupal-module",
             "extra": {
-                "branch-alias": {
-                    "dev-3.x": "3.x-dev"
-                },
                 "drupal": {
-                    "version": "8.x-3.0-alpha1",
-                    "datestamp": "1517046484",
+                    "version": "8.x-3.0-alpha6",
+                    "datestamp": "1608099124",
                     "security-coverage": {
                         "status": "not-covered",
                         "message": "Alpha releases are not covered by Drupal security advisories."
@@ -5470,6 +5467,10 @@
                     "name": "Pol",
                     "homepage": "https://www.drupal.org/user/47194"
                 },
+                {
+                    "name": "joseph.olstad",
+                    "homepage": "https://www.drupal.org/user/1321830"
+                },
                 {
                     "name": "rjacobs",
                     "homepage": "https://www.drupal.org/user/422459"
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 20a73a20d6..5059f1b042 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -5594,30 +5594,27 @@
     },
     {
         "name": "drupal/libraries",
-        "version": "3.0.0-alpha1",
-        "version_normalized": "3.0.0.0-alpha1",
+        "version": "3.0.0-alpha6",
+        "version_normalized": "3.0.0.0-alpha6",
         "source": {
             "type": "git",
             "url": "https://git.drupalcode.org/project/libraries.git",
-            "reference": "8.x-3.0-alpha1"
+            "reference": "8.x-3.0-alpha6"
         },
         "dist": {
             "type": "zip",
-            "url": "https://ftp.drupal.org/files/projects/libraries-8.x-3.0-alpha1.zip",
-            "reference": "8.x-3.0-alpha1",
-            "shasum": "bb07036b1eaeea7d736fc7e72416238830cd8d67"
+            "url": "https://ftp.drupal.org/files/projects/libraries-8.x-3.0-alpha6.zip",
+            "reference": "8.x-3.0-alpha6",
+            "shasum": "d2aaf7f0968a1864457a7741b7e38ab11ef83e2c"
         },
         "require": {
-            "drupal/core": "~8.0"
+            "drupal/core": "^8 || ^9"
         },
         "type": "drupal-module",
         "extra": {
-            "branch-alias": {
-                "dev-3.x": "3.x-dev"
-            },
             "drupal": {
-                "version": "8.x-3.0-alpha1",
-                "datestamp": "1517046484",
+                "version": "8.x-3.0-alpha6",
+                "datestamp": "1608099124",
                 "security-coverage": {
                     "status": "not-covered",
                     "message": "Alpha releases are not covered by Drupal security advisories."
@@ -5634,6 +5631,10 @@
                 "name": "Pol",
                 "homepage": "https://www.drupal.org/user/47194"
             },
+            {
+                "name": "joseph.olstad",
+                "homepage": "https://www.drupal.org/user/1321830"
+            },
             {
                 "name": "rjacobs",
                 "homepage": "https://www.drupal.org/user/422459"
diff --git a/web/modules/libraries/CHANGELOG.txt b/web/modules/libraries/CHANGELOG.txt
index 6d1daa8351..e0785a691d 100644
--- a/web/modules/libraries/CHANGELOG.txt
+++ b/web/modules/libraries/CHANGELOG.txt
@@ -1,6 +1,7 @@
 
 Libraries 8.x-3.x, xxxx-xx-xx
 -----------------------------
+#2882709 by Kingdutch: Fix "LibraryIdAccessorInterface" name
 #2833756 by 20th: Check that public://library-definitions directory does not exist
 #2825940 by tstoeckler, rjacobs: Remove LibrariesServiceProvider
 #2816115 by rjacobs: Remove ExtensionHandler service
diff --git a/web/modules/libraries/libraries.drush.inc b/web/modules/libraries/libraries.drush.inc
index 22b7d62da0..3d9f7cd429 100644
--- a/web/modules/libraries/libraries.drush.inc
+++ b/web/modules/libraries/libraries.drush.inc
@@ -62,8 +62,8 @@ function libraries_drush_invalidate_cache() {
  */
 function libraries_drush_list() {
   $libraries = array();
-  foreach (libraries_info() as $name => $info) {
-    $libraries[$name] = libraries_detect($name);
+  foreach (\Drupal::service('libraries.manager')->info() as $name => $info) {
+    $libraries[$name] = \Drupal::service('libraries.manager')->getLibrary($name);
   }
   ksort($libraries);
 
diff --git a/web/modules/libraries/libraries.info.yml b/web/modules/libraries/libraries.info.yml
index 02136222c7..68ea958a3f 100644
--- a/web/modules/libraries/libraries.info.yml
+++ b/web/modules/libraries/libraries.info.yml
@@ -1,10 +1,10 @@
 name: Libraries
 type: module
 description: Allows version-dependent and shared usage of external libraries.
-# core: 8.x
+core: 8.x
+core_version_requirement: ^8 || ^9
 
-# Information added by Drupal.org packaging script on 2018-01-27
-version: '8.x-3.0-alpha1'
-core: '8.x'
+# Information added by Drupal.org packaging script on 2020-12-16
+version: '8.x-3.0-alpha6'
 project: 'libraries'
-datestamp: 1517046488
+datestamp: 1608099126
diff --git a/web/modules/libraries/libraries.install b/web/modules/libraries/libraries.install
index a2edea4928..666f84ecea 100644
--- a/web/modules/libraries/libraries.install
+++ b/web/modules/libraries/libraries.install
@@ -23,6 +23,6 @@ function libraries_install() {
  */
 function libraries_uninstall() {
   if (is_dir('public://library-definitions')) {
-    file_unmanaged_delete_recursive('public://library-definitions');
+    \Drupal::service('file_system')->deleteRecursive('public://library-definitions');
   }
 }
diff --git a/web/modules/libraries/libraries.module b/web/modules/libraries/libraries.module
index 3006c345ce..7028d2f977 100644
--- a/web/modules/libraries/libraries.module
+++ b/web/modules/libraries/libraries.module
@@ -11,6 +11,7 @@
 use Drupal\libraries\ExternalLibrary\Utility\LibraryAccessorInterface;
 use Drupal\libraries\ExternalLibrary\Utility\LibraryIdAccessorInterface;
 use Symfony\Component\Yaml\Parser;
+use Drupal\Core\Extension\Dependency;
 
 /**
  * Implements hook_library_info_build().
@@ -115,7 +116,7 @@ function libraries_get_libraries() {
   // Similar to 'modules' and 'themes' directories inside an installation
   // profile, installation profiles may want to place libraries into a
   // 'libraries' directory.
-  if ($profile = drupal_get_profile()) {
+  if ($profile = \Drupal::installProfile()) {
     $profile_path = drupal_get_path('profile', $profile);
     $searchdir[] = "$profile_path/libraries";
   };
@@ -167,7 +168,7 @@ function libraries_get_libraries() {
  * https://www.drupal.org/node/2170763
  */
 function libraries_scan_info_files() {
-  $profile = drupal_get_path('profile', drupal_get_profile());
+  $profile = drupal_get_path('profile', \Drupal::installProfile());
   $config = DrupalKernel::findSitePath(\Drupal::request());
 
   // Build a list of directories.
@@ -181,7 +182,7 @@ function libraries_scan_info_files() {
   $files = array();
   foreach ($directories as $dir) {
     if (file_exists($dir)) {
-      $files = array_merge($files, file_scan_directory($dir, '@^[a-z0-9._-]+\.libraries\.info\.yml$@', array(
+      $files = array_merge($files, \Drupal::service('file_system')->scanDirectory($dir, '@^[a-z0-9._-]+\.libraries\.info\.yml$@', array(
         'key' => 'name',
         'recurse' => FALSE,
       )));
@@ -345,9 +346,9 @@ function libraries_prepare_files(&$library, $version = NULL, $variant = NULL) {
 function libraries_detect_dependencies(&$library, $version = NULL, $variant = NULL) {
   if (isset($library['dependencies'])) {
     foreach ($library['dependencies'] as &$dependency_string) {
-      $dependency_info = ModuleHandler::parseDependency($dependency_string);
-      $dependency = libraries_detect($dependency_info['name']);
-      if (!$dependency['installed']) {
+      $dependency = Dependency::createFromString($dependency_string);
+      $info = libraries_detect($dependency->getName());
+      if (!$info['installed']) {
         $library['installed'] = FALSE;
         $library['error'] = 'missing dependency';
         $library['error message'] = t('The %dependency library, which the %library library depends on, is not installed.', array(
@@ -355,19 +356,19 @@ function libraries_detect_dependencies(&$library, $version = NULL, $variant = NU
           '%library' => $library['name'],
         ));
       }
-      elseif (drupal_check_incompatibility($dependency_info, $dependency['version'])) {
+      elseif (!$dependency->isCompatible($info['version'])) {
         $library['installed'] = FALSE;
         $library['error'] = 'incompatible dependency';
         $library['error message'] = t('The version %dependency_version of the %dependency library is not compatible with the %library library.', array(
-          '%dependency_version' => $dependency['version'],
-          '%dependency' => $dependency['name'],
+          '%dependency_version' => $info['version'],
+          '%dependency' => $info['name'],
           '%library' => $library['name'],
         ));
       }
 
       // Remove the version string from the dependency, so libraries_load() can
       // load the libraries directly.
-      $dependency_string = $dependency_info['name'];
+      $dependency_string = $info['name'];
     }
   }
 }
diff --git a/web/modules/libraries/src/ExternalLibrary/Exception/LibraryTypeNotFoundException.php b/web/modules/libraries/src/ExternalLibrary/Exception/LibraryTypeNotFoundException.php
index b5655bba09..4b382837f0 100644
--- a/web/modules/libraries/src/ExternalLibrary/Exception/LibraryTypeNotFoundException.php
+++ b/web/modules/libraries/src/ExternalLibrary/Exception/LibraryTypeNotFoundException.php
@@ -8,7 +8,7 @@
 /**
  * Provides an exception for a library definition without a type declaration.
  */
-class LibraryTypeNotFoundException extends \RuntimeException implements LibraryAccessorInterface {
+class LibraryTypeNotFoundException extends \RuntimeException implements LibraryIdAccessorInterface {
 
   use LibraryIdAccessorTrait;
 
diff --git a/web/modules/libraries/src/ExternalLibrary/LibraryManager.php b/web/modules/libraries/src/ExternalLibrary/LibraryManager.php
index 17a62236e2..6b92d9dc9c 100644
--- a/web/modules/libraries/src/ExternalLibrary/LibraryManager.php
+++ b/web/modules/libraries/src/ExternalLibrary/LibraryManager.php
@@ -61,7 +61,9 @@ public function getLibrary($id) {
   public function getRequiredLibraryIds() {
     $library_ids = [];
     foreach (['module', 'theme'] as $type) {
-      foreach (system_get_info($type) as $info) {
+      $service_id = 'extension.list.' . $type;
+      $extension_list = \Drupal::service($service_id);
+      foreach ($extension_list->getAllInstalledInfo() as $info) {
         if (isset($info['library_dependencies'])) {
           $library_ids = array_merge($library_ids, $info['library_dependencies']);
         }
diff --git a/web/modules/libraries/src/ExternalLibrary/Utility/LibraryIdAccessorInterface.php b/web/modules/libraries/src/ExternalLibrary/Utility/LibraryIdAccessorInterface.php
index 98928e9dec..1634382bce 100644
--- a/web/modules/libraries/src/ExternalLibrary/Utility/LibraryIdAccessorInterface.php
+++ b/web/modules/libraries/src/ExternalLibrary/Utility/LibraryIdAccessorInterface.php
@@ -5,7 +5,7 @@
 /**
  * Provides an interface for classes giving access to a library ID.
  */
-interface LibraryAccessorIdInterface {
+interface LibraryIdAccessorInterface {
 
   /**
    * Returns the ID of the library.
diff --git a/web/modules/libraries/tests/example/example_info_file.libraries.info.yml b/web/modules/libraries/tests/example/example_info_file.libraries.info.yml
index 529af045cf..d0ffc711a3 100644
--- a/web/modules/libraries/tests/example/example_info_file.libraries.info.yml
+++ b/web/modules/libraries/tests/example/example_info_file.libraries.info.yml
@@ -1,8 +1,7 @@
 # This is an example info file of a library used for testing purposes.
 name: Example info file
 
-# Information added by Drupal.org packaging script on 2018-01-27
-version: '8.x-3.0-alpha1'
-core: '8.x'
+# Information added by Drupal.org packaging script on 2020-12-16
+version: '8.x-3.0-alpha6'
 project: 'libraries'
-datestamp: 1517046488
+datestamp: 1608099126
diff --git a/web/modules/libraries/tests/modules/libraries_test/libraries_test.info.yml b/web/modules/libraries/tests/modules/libraries_test/libraries_test.info.yml
index be54ba548f..f2bb897e8a 100644
--- a/web/modules/libraries/tests/modules/libraries_test/libraries_test.info.yml
+++ b/web/modules/libraries/tests/modules/libraries_test/libraries_test.info.yml
@@ -1,7 +1,7 @@
 name: Libraries test module
 type: module
 description: Tests library detection and loading.
-# core: 8.x
+core: 8.x
 dependencies:
   - libraries
 hidden: TRUE
@@ -9,8 +9,7 @@ library_dependencies:
   - test_asset_library
   - test_asset_multiple_library
 
-# Information added by Drupal.org packaging script on 2018-01-27
-version: '8.x-3.0-alpha1'
-core: '8.x'
+# Information added by Drupal.org packaging script on 2020-12-16
+version: '8.x-3.0-alpha6'
 project: 'libraries'
-datestamp: 1517046488
+datestamp: 1608099126
diff --git a/web/modules/libraries/tests/modules/libraries_test/libraries_test.module b/web/modules/libraries/tests/modules/libraries_test/libraries_test.module
index 1a30ebc1c3..af1a4ac39a 100644
--- a/web/modules/libraries/tests/modules/libraries_test/libraries_test.module
+++ b/web/modules/libraries/tests/modules/libraries_test/libraries_test.module
@@ -6,6 +6,7 @@
  */
 
 use Drupal\Component\Utility\SafeMarkup;
+use Drupal\Core\Messenger\MessengerTrait;
 
 /**
  * Implements hook_libraries_info().
@@ -461,7 +462,7 @@ function _libraries_test_callback(&$library, $version, $variant, $group) {
   // Only set the message for the top-level library to prevent confusing,
   // duplicate messages.
   if (!isset($version) && !isset($variant) && \Drupal::state()->get('libraries_test.cache', FALSE)) {
-    drupal_set_message(SafeMarkup::set("The <em>$group</em> callback group was invoked."));
+    \Drupal::messenger()->addMessage(SafeMarkup::set("The <em>$group</em> callback group was invoked."));
   }
 }
 
diff --git a/web/modules/libraries/tests/modules/libraries_test/src/Controller/ExampleController.php b/web/modules/libraries/tests/modules/libraries_test/src/Controller/ExampleController.php
index 217ebf2f8a..522967c50b 100644
--- a/web/modules/libraries/tests/modules/libraries_test/src/Controller/ExampleController.php
+++ b/web/modules/libraries/tests/modules/libraries_test/src/Controller/ExampleController.php
@@ -23,7 +23,7 @@ public static function create(ContainerInterface $container) {
    * more information.
    */
   private function buildPage($library, $variant = NULL) {
-    libraries_load($library, $variant);
+    \Drupal::service('libraries.manager')->load($library, $variant);
     // JavaScript and CSS files can be checked directly by SimpleTest, so we only
     // need to manually check for PHP files.
     $output = '';
-- 
GitLab