From bc02f6fd4109ae90aaed2f0870deb0779978d71c Mon Sep 17 00:00:00 2001
From: Michael Lee <lee.5151@osu.edu>
Date: Mon, 23 May 2022 13:44:08 -0400
Subject: [PATCH] Upgrading drupal/core (9.3.12 => 9.3.13)

---
 composer.lock                                 |   26 +-
 vendor/composer/installed.json                |   30 +-
 vendor/composer/installed.php                 |  242 +-
 web/core/MAINTAINERS.txt                      |    4 +-
 .../assets/vendor/backbone/backbone-min.js    |    4 +-
 .../assets/vendor/backbone/backbone-min.map   |    2 +-
 web/core/assets/vendor/backbone/backbone.js   |   68 +-
 web/core/assets/vendor/ckeditor5/list/list.js |    2 +-
 .../vendor/underscore/underscore-min.js       |    6 +-
 .../vendor/underscore/underscore-min.js.map   |    2 +-
 web/core/core.libraries.yml                   |   11 +-
 web/core/lib/Drupal.php                       |    2 +-
 web/core/lib/Drupal/Core/Cron.php             |    6 +-
 web/core/lib/Drupal/Core/Database/Schema.php  |    7 +-
 .../lib/Drupal/Core/Queue/DatabaseQueue.php   |    4 +-
 .../Drupal/Core/Queue/QueueWorkerManager.php  |   13 +-
 .../Queue/QueueWorkerManagerInterface.php     |    7 +
 .../Core/Render/Element/FormElement.php       |    3 +
 .../Core/Render/Element/RenderElement.php     |    3 +
 web/core/misc/cspell/dictionary.txt           |    7 +-
 .../modules/ckeditor5/ckeditor5.ckeditor5.yml |   88 +-
 .../modules/ckeditor5/ckeditor5.libraries.yml |    5 -
 .../config/schema/ckeditor5.schema.yml        |   17 +
 .../modules/ckeditor5/css/filter.admin.css    |    4 -
 .../modules/ckeditor5/js/build/drupalMedia.js |    2 +-
 .../ckeditor5/js/ckeditor5.admin.es6.js       |   16 +-
 .../js/ckeditor5.filter.admin.es6.js          |  104 +-
 .../ckeditor5/js/ckeditor5.filter.admin.js    |   59 -
 .../drupalEmphasis/src/drupalemphasis.js      |    4 +-
 .../src/drupalemphasisediting.js              |    7 +-
 .../drupalEmphasis/src/index.js               |    2 +-
 .../drupalHtmlEngine/src/drupalhtmlbuilder.js |   23 +-
 .../drupalHtmlEngine/src/drupalhtmlengine.js  |    8 +-
 .../drupalHtmlEngine/src/drupalhtmlwriter.js  |    4 +-
 .../drupalHtmlEngine/src/index.js             |    2 +-
 .../ckeditor5_plugins/drupalImage/README.md   |   16 -
 .../drupalImage/src/drupalimage.js            |    2 +-
 .../src/drupalimagealternativetext.js         |    4 +-
 .../drupalImage/src/drupalimageediting.js     |  213 +-
 .../drupalimagealternativetextediting.js      |    6 +-
 .../drupalimagealternativetextui.js           |    8 +-
 .../ui/imagealternativetextformview.js        |    6 +-
 .../ui/missingalternativetextview.js          |    2 +-
 .../src/imageupload/drupalfilerepository.js   |    4 +-
 .../src/imageupload/drupalimageupload.js      |    4 +-
 .../imageupload/drupalimageuploadadapter.js   |   24 +-
 .../imageupload/drupalimageuploadediting.js   |    4 +-
 .../drupalImage/src/index.js                  |    2 +-
 .../drupalMedia/src/drupalelementstyle.js     |    4 +-
 .../drupalelementstylecommand.js              |  140 +-
 .../drupalelementstyleediting.js              |  245 +-
 .../drupalelementstyleui.js                   |  352 ++-
 .../src/drupalelementstyle/utils.js           |   70 +
 .../src/drupallinkmedia/drupallinkmedia.js    |    2 +-
 .../drupallinkmedia/drupallinkmediaediting.js |    2 +-
 .../src/drupallinkmedia/drupallinkmediaui.js  |    2 +-
 .../drupalMedia/src/drupalmedia.js            |   14 +-
 .../drupalMedia/src/drupalmediacaption.js     |   10 +-
 .../drupalmediacaptioncommand.js              |    4 +-
 .../drupalmediacaptionediting.js              |   10 +-
 .../drupalmediacaptionui.js                   |    2 +-
 .../drupalMedia/src/drupalmediaediting.js     |  216 +-
 .../src/drupalmediageneralhtmlsupport.js      |    9 +-
 .../src/drupalmediametadatarepository.js      |    7 +-
 .../drupalMedia/src/drupalmediatoolbar.js     |   11 +-
 .../drupalMedia/src/drupalmediaui.js          |    4 +-
 .../drupalMedia/src/index.js                  |    2 +-
 .../drupalMedia/src/insertdrupalmedia.js      |   26 +-
 .../src/mediaimagetextalternative.js          |    9 +-
 .../mediaimagetextalternativecommand.js       |    2 +-
 .../mediaimagetextalternativeediting.js       |   89 +-
 .../mediaimagetextalternativeui.js            |    8 +-
 .../drupalMedia/src/ui/utils.js               |    4 +-
 .../drupalMedia/src/utils.js                  |   35 +-
 .../Controller/CKEditor5MediaController.php   |    1 +
 .../ckeditor5/src/HTMLRestrictions.php        |  120 +-
 .../Plugin/CKEditor4To5Upgrade/Contrib.php    |   59 +
 .../src/Plugin/CKEditor4To5Upgrade/Core.php   |   14 +
 .../CKEditor5Plugin/GlobalAttribute.php       |   48 +
 .../src/Plugin/CKEditor5Plugin/Heading.php    |    2 +-
 .../src/Plugin/CKEditor5Plugin/ListPlugin.php |   90 +
 .../src/Plugin/CKEditor5Plugin/Media.php      |  147 +-
 .../src/Plugin/CKEditor5PluginDefinition.php  |   26 +-
 .../src/Plugin/CKEditor5PluginManager.php     |   14 +-
 .../ckeditor5/src/Plugin/Editor/CKEditor5.php |   35 +-
 .../CKEditor5ElementConstraintValidator.php   |    2 +-
 ...mentalCompatibilityConstraintValidator.php |   20 +-
 .../SourceEditingPreventSelfXssConstraint.php |   28 +
 ...itingPreventSelfXssConstraintValidator.php |  121 +
 ...ditingRedundantTagsConstraintValidator.php |    8 +-
 .../ckeditor5/src/SmartDefaultSettings.php    |   42 +-
 .../ckeditor5_drupalelementstyle_test.module  |    3 +-
 ...keditor5_incompatible_filter_test.info.yml |    6 +
 .../Plugin/Filter/FilterIsIncompatible.php    |   26 +
 ...itor5_plugin_elements_subset.ckeditor5.yml |    3 +
 .../ckeditor5_test.ckeditor5.yml              |    2 +-
 .../Functional/MediaEntityMetadataApiTest.php |   12 +-
 .../src/FunctionalJavascript/AdminUiTest.php  |   36 +-
 .../CKEditor5AllowedTagsTest.php              |   47 +-
 .../FunctionalJavascript/CKEditor5Test.php    |  129 +-
 .../src/FunctionalJavascript/ImageTest.php    |    4 +-
 .../FunctionalJavascript/MediaLibraryTest.php |    5 -
 .../src/FunctionalJavascript/MediaTest.php    |  334 ++-
 .../src/FunctionalJavascript/TableTest.php    |  227 ++
 .../CKEditor4to5UpgradeCompletenessTest.php   |   14 +
 .../src/Kernel/CKEditor5PluginManagerTest.php |    7 +-
 .../src/Kernel/ConfigurablePluginTest.php     |    4 +
 .../src/Kernel/SmartDefaultSettingsTest.php   |  181 +-
 .../tests/src/Kernel/ValidatorsTest.php       |   85 +-
 .../src/Kernel/WildcardHtmlSupportTest.php    |    7 +-
 .../tests/src/Unit/HTMLRestrictionsTest.php   |  186 +-
 .../tests/src/Unit/HeadingPluginTest.php      |  120 +
 .../tests/src/Unit/LanguagePluginTest.php     |  110 +
 .../tests/src/Unit/ListPluginTest.php         |  102 +
 .../src/Unit/SourceEditingPluginTest.php      |  179 ++
 web/core/modules/contextual/contextual.module |    2 +-
 .../EntityAutocompleteController.php          |   36 +-
 .../QueueWorker/CronQueueTestLeaseTime.php    |   27 +
 .../tests/src/Kernel/System/CronQueueTest.php |   62 +-
 ...0.2-rc2-b.xml => drupal.sec.2.0-rc2-b.xml} |    0
 ...sec.0.2-rc2.xml => drupal.sec.2.0-rc2.xml} |    0
 ...c2-b.xml => semver_test.sec.2.0-rc2-b.xml} |    0
 ....2-rc2.xml => semver_test.sec.2.0-rc2.xml} |    0
 .../src/Functional/UpdateSemverTestBase.php   |   18 +-
 web/core/package.json                         |   34 +-
 .../languages/en/node/page.csv                |    2 +-
 .../languages/es/node/page.csv                |    2 +-
 .../demo_umami/themes/umami/README.txt        |    2 +-
 .../Core/Asset/AttachedAssetsTest.php         |    2 +-
 .../KernelTests/Core/Database/SchemaTest.php  |   55 +
 .../Core/Entity/EntityAutocompleteTest.php    |   16 +-
 .../claro/css/components/action-link.css      |   90 +
 .../claro/css/components/action-link.pcss.css |   72 +
 .../themes/claro/css/components/details.css   |   11 +-
 .../claro/css/components/details.pcss.css     |   11 +-
 .../themes/claro/css/components/dialog.css    |    2 +-
 .../claro/css/components/dialog.pcss.css      |    2 +-
 .../claro/css/components/dropbutton.css       |    2 +-
 .../claro/css/components/dropbutton.pcss.css  |    2 +-
 .../css/components/form--password-confirm.css |   14 +
 .../form--password-confirm.pcss.css           |   16 +
 .../themes/claro/css/components/pager.css     |   32 +-
 .../claro/css/components/pager.pcss.css       |   27 +-
 .../themes/claro/css/components/progress.css  |    6 +
 .../claro/css/components/progress.pcss.css    |    6 +
 .../themes/claro/css/components/skip-link.css |    8 +-
 .../claro/css/components/skip-link.pcss.css   |   11 +-
 .../components/system-admin--admin-list.css   |   15 +-
 .../system-admin--admin-list.pcss.css         |   13 +-
 .../css/components/system-status-counter.css  |   25 +
 .../components/system-status-counter.pcss.css |   19 +
 .../system-status-report-general-info.css     |   35 +
 ...system-status-report-general-info.pcss.css |   26 +
 .../css/components/system-status-report.css   |   24 +
 .../components/system-status-report.pcss.css  |   19 +
 .../themes/claro/css/components/tabledrag.css |   13 +
 .../claro/css/components/tabledrag.pcss.css   |   10 +
 .../themes/claro/css/components/tables.css    |   23 +-
 .../claro/css/components/tables.pcss.css      |   11 +
 .../css/components/tablesort-indicator.css    |   54 +-
 .../components/tablesort-indicator.pcss.css   |   25 +
 web/core/yarn.lock                            | 2096 ++++++-----------
 162 files changed, 5474 insertions(+), 2478 deletions(-)
 delete mode 100644 web/core/modules/ckeditor5/css/filter.admin.css
 delete mode 100644 web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/README.md
 create mode 100644 web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalelementstyle/utils.js
 create mode 100644 web/core/modules/ckeditor5/src/Plugin/CKEditor4To5Upgrade/Contrib.php
 create mode 100644 web/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/GlobalAttribute.php
 create mode 100644 web/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/ListPlugin.php
 create mode 100644 web/core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingPreventSelfXssConstraint.php
 create mode 100644 web/core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingPreventSelfXssConstraintValidator.php
 create mode 100644 web/core/modules/ckeditor5/tests/modules/ckeditor5_incompatible_filter_test/ckeditor5_incompatible_filter_test.info.yml
 create mode 100644 web/core/modules/ckeditor5/tests/modules/ckeditor5_incompatible_filter_test/src/Plugin/Filter/FilterIsIncompatible.php
 create mode 100644 web/core/modules/ckeditor5/tests/src/FunctionalJavascript/TableTest.php
 create mode 100644 web/core/modules/ckeditor5/tests/src/Unit/HeadingPluginTest.php
 create mode 100644 web/core/modules/ckeditor5/tests/src/Unit/LanguagePluginTest.php
 create mode 100644 web/core/modules/ckeditor5/tests/src/Unit/ListPluginTest.php
 create mode 100644 web/core/modules/ckeditor5/tests/src/Unit/SourceEditingPluginTest.php
 create mode 100644 web/core/modules/system/tests/modules/cron_queue_test/src/Plugin/QueueWorker/CronQueueTestLeaseTime.php
 rename web/core/modules/update/tests/fixtures/release-history/{drupal.sec.0.2-rc2-b.xml => drupal.sec.2.0-rc2-b.xml} (100%)
 rename web/core/modules/update/tests/fixtures/release-history/{drupal.sec.0.2-rc2.xml => drupal.sec.2.0-rc2.xml} (100%)
 rename web/core/modules/update/tests/fixtures/release-history/{semver_test.sec.0.2-rc2-b.xml => semver_test.sec.2.0-rc2-b.xml} (100%)
 rename web/core/modules/update/tests/fixtures/release-history/{semver_test.sec.0.2-rc2.xml => semver_test.sec.2.0-rc2.xml} (100%)

diff --git a/composer.lock b/composer.lock
index a74df31f82..de80c3e923 100644
--- a/composer.lock
+++ b/composer.lock
@@ -2954,16 +2954,16 @@
         },
         {
             "name": "drupal/core",
-            "version": "9.3.12",
+            "version": "9.3.13",
             "source": {
                 "type": "git",
                 "url": "https://github.com/drupal/core.git",
-                "reference": "ed6af33093f66a9c5048d02f9f2c326ad0e7e90c"
+                "reference": "02ba7a3a42612a04124ac5131df0726e1e5097c6"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/drupal/core/zipball/ed6af33093f66a9c5048d02f9f2c326ad0e7e90c",
-                "reference": "ed6af33093f66a9c5048d02f9f2c326ad0e7e90c",
+                "url": "https://api.github.com/repos/drupal/core/zipball/02ba7a3a42612a04124ac5131df0726e1e5097c6",
+                "reference": "02ba7a3a42612a04124ac5131df0726e1e5097c6",
                 "shasum": ""
             },
             "require": {
@@ -3205,9 +3205,9 @@
             ],
             "description": "Drupal is an open source content management platform powering millions of websites and applications.",
             "support": {
-                "source": "https://github.com/drupal/core/tree/9.3.12"
+                "source": "https://github.com/drupal/core/tree/9.3.13"
             },
-            "time": "2022-04-20T14:25:27+00:00"
+            "time": "2022-05-11T09:20:58+00:00"
         },
         {
             "name": "drupal/core-composer-scaffold",
@@ -3261,16 +3261,16 @@
         },
         {
             "name": "drupal/core-recommended",
-            "version": "9.3.12",
+            "version": "9.3.13",
             "source": {
                 "type": "git",
                 "url": "https://github.com/drupal/core-recommended.git",
-                "reference": "a8fa50016c1aa1eb7f4e54f590e6343d286c418f"
+                "reference": "0fe76c7af47fafcff37d8cb6053014e52e0f4a69"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/drupal/core-recommended/zipball/a8fa50016c1aa1eb7f4e54f590e6343d286c418f",
-                "reference": "a8fa50016c1aa1eb7f4e54f590e6343d286c418f",
+                "url": "https://api.github.com/repos/drupal/core-recommended/zipball/0fe76c7af47fafcff37d8cb6053014e52e0f4a69",
+                "reference": "0fe76c7af47fafcff37d8cb6053014e52e0f4a69",
                 "shasum": ""
             },
             "require": {
@@ -3279,7 +3279,7 @@
                 "doctrine/annotations": "1.13.2",
                 "doctrine/lexer": "1.2.1",
                 "doctrine/reflection": "1.2.2",
-                "drupal/core": "9.3.12",
+                "drupal/core": "9.3.13",
                 "egulias/email-validator": "3.1.2",
                 "guzzlehttp/guzzle": "6.5.5",
                 "guzzlehttp/promises": "1.5.1",
@@ -3341,9 +3341,9 @@
             ],
             "description": "Locked core dependencies; require this project INSTEAD OF drupal/core.",
             "support": {
-                "source": "https://github.com/drupal/core-recommended/tree/9.3.12"
+                "source": "https://github.com/drupal/core-recommended/tree/9.3.13"
             },
-            "time": "2022-04-20T14:25:27+00:00"
+            "time": "2022-05-11T09:20:58+00:00"
         },
         {
             "name": "drupal/crop",
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index d763e090d0..86c3899c9d 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -3036,17 +3036,17 @@
         },
         {
             "name": "drupal/core",
-            "version": "9.3.12",
-            "version_normalized": "9.3.12.0",
+            "version": "9.3.13",
+            "version_normalized": "9.3.13.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/drupal/core.git",
-                "reference": "ed6af33093f66a9c5048d02f9f2c326ad0e7e90c"
+                "reference": "02ba7a3a42612a04124ac5131df0726e1e5097c6"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/drupal/core/zipball/ed6af33093f66a9c5048d02f9f2c326ad0e7e90c",
-                "reference": "ed6af33093f66a9c5048d02f9f2c326ad0e7e90c",
+                "url": "https://api.github.com/repos/drupal/core/zipball/02ba7a3a42612a04124ac5131df0726e1e5097c6",
+                "reference": "02ba7a3a42612a04124ac5131df0726e1e5097c6",
                 "shasum": ""
             },
             "require": {
@@ -3213,7 +3213,7 @@
                 "drupal/workflows": "self.version",
                 "drupal/workspaces": "self.version"
             },
-            "time": "2022-04-20T14:25:27+00:00",
+            "time": "2022-05-11T09:20:58+00:00",
             "type": "drupal-core",
             "extra": {
                 "drupal-scaffold": {
@@ -3294,7 +3294,7 @@
             ],
             "description": "Drupal is an open source content management platform powering millions of websites and applications.",
             "support": {
-                "source": "https://github.com/drupal/core/tree/9.3.12"
+                "source": "https://github.com/drupal/core/tree/9.3.13"
             },
             "install-path": "../../web/core"
         },
@@ -3350,17 +3350,17 @@
         },
         {
             "name": "drupal/core-recommended",
-            "version": "9.3.12",
-            "version_normalized": "9.3.12.0",
+            "version": "9.3.13",
+            "version_normalized": "9.3.13.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/drupal/core-recommended.git",
-                "reference": "a8fa50016c1aa1eb7f4e54f590e6343d286c418f"
+                "reference": "0fe76c7af47fafcff37d8cb6053014e52e0f4a69"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/drupal/core-recommended/zipball/a8fa50016c1aa1eb7f4e54f590e6343d286c418f",
-                "reference": "a8fa50016c1aa1eb7f4e54f590e6343d286c418f",
+                "url": "https://api.github.com/repos/drupal/core-recommended/zipball/0fe76c7af47fafcff37d8cb6053014e52e0f4a69",
+                "reference": "0fe76c7af47fafcff37d8cb6053014e52e0f4a69",
                 "shasum": ""
             },
             "require": {
@@ -3369,7 +3369,7 @@
                 "doctrine/annotations": "1.13.2",
                 "doctrine/lexer": "1.2.1",
                 "doctrine/reflection": "1.2.2",
-                "drupal/core": "9.3.12",
+                "drupal/core": "9.3.13",
                 "egulias/email-validator": "3.1.2",
                 "guzzlehttp/guzzle": "6.5.5",
                 "guzzlehttp/promises": "1.5.1",
@@ -3424,7 +3424,7 @@
             "conflict": {
                 "webflo/drupal-core-strict": "*"
             },
-            "time": "2022-04-20T14:25:27+00:00",
+            "time": "2022-05-11T09:20:58+00:00",
             "type": "metapackage",
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -3432,7 +3432,7 @@
             ],
             "description": "Locked core dependencies; require this project INSTEAD OF drupal/core.",
             "support": {
-                "source": "https://github.com/drupal/core-recommended/tree/9.3.12"
+                "source": "https://github.com/drupal/core-recommended/tree/9.3.13"
             },
             "install-path": null
         },
diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php
index 64e96a5dd3..39a00312f7 100644
--- a/vendor/composer/installed.php
+++ b/vendor/composer/installed.php
@@ -5,7 +5,7 @@
         'type' => 'project',
         'install_path' => __DIR__ . '/../../',
         'aliases' => array(),
-        'reference' => '51f5173881510201397d977bee2cd820809999e7',
+        'reference' => 'e84dd64613669ee59f663ea0db62b53e321ee2c8',
         'name' => 'osu-asc-webservices/d8-upstream',
         'dev' => true,
     ),
@@ -271,7 +271,7 @@
         'drupal/action' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/addtocalendar' => array(
@@ -304,7 +304,7 @@
         'drupal/aggregator' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/allowed_formats' => array(
@@ -328,25 +328,25 @@
         'drupal/automated_cron' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/ban' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/bartik' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/basic_auth' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/better_exposed_filters' => array(
@@ -361,19 +361,19 @@
         'drupal/big_pipe' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/block' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/block_content' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/block_field' => array(
@@ -406,7 +406,7 @@
         'drupal/book' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/bootstrap' => array(
@@ -421,7 +421,7 @@
         'drupal/breakpoint' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/cache_control_override' => array(
@@ -445,13 +445,13 @@
         'drupal/ckeditor' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/ckeditor5' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/ckeditor_indentblock' => array(
@@ -466,31 +466,31 @@
         'drupal/claro' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/classy' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/color' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/comment' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/config' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/config_direct_save' => array(
@@ -523,7 +523,7 @@
         'drupal/config_translation' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/config_update' => array(
@@ -574,7 +574,7 @@
         'drupal/contact' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/content_access' => array(
@@ -589,52 +589,52 @@
         'drupal/content_moderation' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/content_translation' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/contextual' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/core' => array(
-            'pretty_version' => '9.3.12',
-            'version' => '9.3.12.0',
+            'pretty_version' => '9.3.13',
+            'version' => '9.3.13.0',
             'type' => 'drupal-core',
             'install_path' => __DIR__ . '/../../web/core',
             'aliases' => array(),
-            'reference' => 'ed6af33093f66a9c5048d02f9f2c326ad0e7e90c',
+            'reference' => '02ba7a3a42612a04124ac5131df0726e1e5097c6',
             'dev_requirement' => false,
         ),
         'drupal/core-annotation' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/core-assertion' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/core-bridge' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/core-class-finder' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/core-composer-scaffold' => array(
@@ -649,136 +649,136 @@
         'drupal/core-datetime' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/core-dependency-injection' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/core-diff' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/core-discovery' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/core-event-dispatcher' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/core-file-cache' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/core-file-security' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/core-filesystem' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/core-front-matter' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/core-gettext' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/core-graph' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/core-http-foundation' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/core-php-storage' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/core-plugin' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/core-proxy-builder' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/core-recommended' => array(
-            'pretty_version' => '9.3.12',
-            'version' => '9.3.12.0',
+            'pretty_version' => '9.3.13',
+            'version' => '9.3.13.0',
             'type' => 'metapackage',
             'install_path' => NULL,
             'aliases' => array(),
-            'reference' => 'a8fa50016c1aa1eb7f4e54f590e6343d286c418f',
+            'reference' => '0fe76c7af47fafcff37d8cb6053014e52e0f4a69',
             'dev_requirement' => false,
         ),
         'drupal/core-render' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/core-serialization' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/core-transliteration' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/core-utility' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/core-uuid' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/core-version' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/crop' => array(
@@ -802,19 +802,19 @@
         'drupal/datetime' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/datetime_range' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/dblog' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/dropzonejs' => array(
@@ -838,13 +838,13 @@
         'drupal/dynamic_page_cache' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/editor' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/editor_advanced_link' => array(
@@ -913,7 +913,7 @@
         'drupal/entity_reference' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/entity_reference_revisions' => array(
@@ -946,7 +946,7 @@
         'drupal/field' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/field_group' => array(
@@ -961,7 +961,7 @@
         'drupal/field_layout' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/field_permissions' => array(
@@ -976,13 +976,13 @@
         'drupal/field_ui' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/file' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/file_browser' => array(
@@ -997,7 +997,7 @@
         'drupal/filter' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/focal_point' => array(
@@ -1012,7 +1012,7 @@
         'drupal/forum' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/google_analytics' => array(
@@ -1036,25 +1036,25 @@
         'drupal/hal' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/help' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/help_topics' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/history' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/honeypot' => array(
@@ -1069,7 +1069,7 @@
         'drupal/image' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/inline_entity_form' => array(
@@ -1084,7 +1084,7 @@
         'drupal/inline_form_errors' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/jquery_ui' => array(
@@ -1126,25 +1126,25 @@
         'drupal/jsonapi' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/language' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/layout_builder' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/layout_discovery' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/libraries' => array(
@@ -1159,7 +1159,7 @@
         'drupal/link' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/link_attributes' => array(
@@ -1183,7 +1183,7 @@
         'drupal/locale' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/mathjax' => array(
@@ -1198,7 +1198,7 @@
         'drupal/media' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/media_entity_browser' => array(
@@ -1222,7 +1222,7 @@
         'drupal/media_library' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/menu_block' => array(
@@ -1246,13 +1246,13 @@
         'drupal/menu_link_content' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/menu_ui' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/metatag' => array(
@@ -1267,7 +1267,7 @@
         'drupal/migrate' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/migrate_devel' => array(
@@ -1282,19 +1282,19 @@
         'drupal/migrate_drupal' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/migrate_drupal_multilingual' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/migrate_drupal_ui' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/migrate_plus' => array(
@@ -1318,7 +1318,7 @@
         'drupal/minimal' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/mobile_detect' => array(
@@ -1360,25 +1360,25 @@
         'drupal/node' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/olivero' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/options' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/page_cache' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/pantheon_advanced_page_cache' => array(
@@ -1402,13 +1402,13 @@
         'drupal/path' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/path_alias' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/pathauto' => array(
@@ -1432,13 +1432,13 @@
         'drupal/quickedit' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/rdf' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/rebuild_cache_access' => array(
@@ -1480,13 +1480,13 @@
         'drupal/responsive_image' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/rest' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/roleassign' => array(
@@ -1510,7 +1510,7 @@
         'drupal/search' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/search_api' => array(
@@ -1534,25 +1534,25 @@
         'drupal/serialization' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/settings_tray' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/seven' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/shortcut' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/simple_gmap' => array(
@@ -1621,19 +1621,19 @@
         'drupal/standard' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/stark' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/statistics' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/superfish' => array(
@@ -1657,31 +1657,31 @@
         'drupal/syslog' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/system' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/taxonomy' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/telephone' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/text' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/token' => array(
@@ -1696,19 +1696,19 @@
         'drupal/toolbar' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/tour' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/tracker' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/twig_tweak' => array(
@@ -1741,13 +1741,13 @@
         'drupal/update' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/user' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/userprotect' => array(
@@ -1780,7 +1780,7 @@
         'drupal/views' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/views_ajax_history' => array(
@@ -1840,7 +1840,7 @@
         'drupal/views_ui' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/webform' => array(
@@ -1855,13 +1855,13 @@
         'drupal/workflows' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drupal/workspaces' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '9.3.12',
+                0 => '9.3.13',
             ),
         ),
         'drush-ops/behat-drush-endpoint' => array(
@@ -2101,7 +2101,7 @@
             'type' => 'project',
             'install_path' => __DIR__ . '/../../',
             'aliases' => array(),
-            'reference' => '51f5173881510201397d977bee2cd820809999e7',
+            'reference' => 'e84dd64613669ee59f663ea0db62b53e321ee2c8',
             'dev_requirement' => false,
         ),
         'pantheon-systems/quicksilver-pushback' => array(
diff --git a/web/core/MAINTAINERS.txt b/web/core/MAINTAINERS.txt
index 9d4167887e..af402e73e0 100644
--- a/web/core/MAINTAINERS.txt
+++ b/web/core/MAINTAINERS.txt
@@ -108,7 +108,7 @@ Bootstrap
 
 Breakpoint
 - Peter Droogmans 'attiks' https://www.drupal.org/u/attiks
-- Marc Drummond 'mdrummond' https://www.drupal.org/u/mdrummond
+- Heather Brooke Drummond 'RainbowArray' https://www.drupal.org/u/rainbowarray
 
 Cache
 - Nathaniel Catchpole 'catch' https://www.drupal.org/u/catch
@@ -370,7 +370,7 @@ REST
 
 Responsive Image
 - Peter Droogmans 'attiks' https://www.drupal.org/u/attiks
-- Marc Drummond 'mdrummond' https://www.drupal.org/u/mdrummond
+- Heather Brooke Drummond 'RainbowArray' https://www.drupal.org/u/rainbowarray
 - Jelle Sebreghts 'Jelle_S' https://www.drupal.org/u/jelle_s
 
 Routing
diff --git a/web/core/assets/vendor/backbone/backbone-min.js b/web/core/assets/vendor/backbone/backbone-min.js
index c8c33e0d7f..10945d244e 100644
--- a/web/core/assets/vendor/backbone/backbone-min.js
+++ b/web/core/assets/vendor/backbone/backbone-min.js
@@ -1,2 +1,2 @@
-(function(t){var e=typeof self=="object"&&self.self===self&&self||typeof global=="object"&&global.global===global&&global;if(typeof define==="function"&&define.amd){define(["underscore","jquery","exports"],function(i,n,r){e.Backbone=t(e,r,i,n)})}else if(typeof exports!=="undefined"){var i=require("underscore"),n;try{n=require("jquery")}catch(r){}t(e,exports,i,n)}else{e.Backbone=t(e,{},e._,e.jQuery||e.Zepto||e.ender||e.$)}})(function(t,e,i,n){var r=t.Backbone;var s=Array.prototype.slice;e.VERSION="1.4.0";e.$=n;e.noConflict=function(){t.Backbone=r;return this};e.emulateHTTP=false;e.emulateJSON=false;var a=e.Events={};var o=/\s+/;var h;var u=function(t,e,n,r,s){var a=0,h;if(n&&typeof n==="object"){if(r!==void 0&&"context"in s&&s.context===void 0)s.context=r;for(h=i.keys(n);a<h.length;a++){e=u(t,e,h[a],n[h[a]],s)}}else if(n&&o.test(n)){for(h=n.split(o);a<h.length;a++){e=t(e,h[a],r,s)}}else{e=t(e,n,r,s)}return e};a.on=function(t,e,i){this._events=u(l,this._events||{},t,e,{context:i,ctx:this,listening:h});if(h){var n=this._listeners||(this._listeners={});n[h.id]=h;h.interop=false}return this};a.listenTo=function(t,e,n){if(!t)return this;var r=t._listenId||(t._listenId=i.uniqueId("l"));var s=this._listeningTo||(this._listeningTo={});var a=h=s[r];if(!a){this._listenId||(this._listenId=i.uniqueId("l"));a=h=s[r]=new g(this,t)}var o=c(t,e,n,this);h=void 0;if(o)throw o;if(a.interop)a.on(e,n);return this};var l=function(t,e,i,n){if(i){var r=t[e]||(t[e]=[]);var s=n.context,a=n.ctx,o=n.listening;if(o)o.count++;r.push({callback:i,context:s,ctx:s||a,listening:o})}return t};var c=function(t,e,i,n){try{t.on(e,i,n)}catch(r){return r}};a.off=function(t,e,i){if(!this._events)return this;this._events=u(f,this._events,t,e,{context:i,listeners:this._listeners});return this};a.stopListening=function(t,e,n){var r=this._listeningTo;if(!r)return this;var s=t?[t._listenId]:i.keys(r);for(var a=0;a<s.length;a++){var o=r[s[a]];if(!o)break;o.obj.off(e,n,this);if(o.interop)o.off(e,n)}if(i.isEmpty(r))this._listeningTo=void 0;return this};var f=function(t,e,n,r){if(!t)return;var s=r.context,a=r.listeners;var o=0,h;if(!e&&!s&&!n){for(h=i.keys(a);o<h.length;o++){a[h[o]].cleanup()}return}h=e?[e]:i.keys(t);for(;o<h.length;o++){e=h[o];var u=t[e];if(!u)break;var l=[];for(var c=0;c<u.length;c++){var f=u[c];if(n&&n!==f.callback&&n!==f.callback._callback||s&&s!==f.context){l.push(f)}else{var d=f.listening;if(d)d.off(e,n)}}if(l.length){t[e]=l}else{delete t[e]}}return t};a.once=function(t,e,i){var n=u(d,{},t,e,this.off.bind(this));if(typeof t==="string"&&i==null)e=void 0;return this.on(n,e,i)};a.listenToOnce=function(t,e,i){var n=u(d,{},e,i,this.stopListening.bind(this,t));return this.listenTo(t,n)};var d=function(t,e,n,r){if(n){var s=t[e]=i.once(function(){r(e,s);n.apply(this,arguments)});s._callback=n}return t};a.trigger=function(t){if(!this._events)return this;var e=Math.max(0,arguments.length-1);var i=Array(e);for(var n=0;n<e;n++)i[n]=arguments[n+1];u(v,this._events,t,void 0,i);return this};var v=function(t,e,i,n){if(t){var r=t[e];var s=t.all;if(r&&s)s=s.slice();if(r)p(r,n);if(s)p(s,[e].concat(n))}return t};var p=function(t,e){var i,n=-1,r=t.length,s=e[0],a=e[1],o=e[2];switch(e.length){case 0:while(++n<r)(i=t[n]).callback.call(i.ctx);return;case 1:while(++n<r)(i=t[n]).callback.call(i.ctx,s);return;case 2:while(++n<r)(i=t[n]).callback.call(i.ctx,s,a);return;case 3:while(++n<r)(i=t[n]).callback.call(i.ctx,s,a,o);return;default:while(++n<r)(i=t[n]).callback.apply(i.ctx,e);return}};var g=function(t,e){this.id=t._listenId;this.listener=t;this.obj=e;this.interop=true;this.count=0;this._events=void 0};g.prototype.on=a.on;g.prototype.off=function(t,e){var i;if(this.interop){this._events=u(f,this._events,t,e,{context:void 0,listeners:void 0});i=!this._events}else{this.count--;i=this.count===0}if(i)this.cleanup()};g.prototype.cleanup=function(){delete this.listener._listeningTo[this.obj._listenId];if(!this.interop)delete this.obj._listeners[this.id]};a.bind=a.on;a.unbind=a.off;i.extend(e,a);var m=e.Model=function(t,e){var n=t||{};e||(e={});this.preinitialize.apply(this,arguments);this.cid=i.uniqueId(this.cidPrefix);this.attributes={};if(e.collection)this.collection=e.collection;if(e.parse)n=this.parse(n,e)||{};var r=i.result(this,"defaults");n=i.defaults(i.extend({},r,n),r);this.set(n,e);this.changed={};this.initialize.apply(this,arguments)};i.extend(m.prototype,a,{changed:null,validationError:null,idAttribute:"id",cidPrefix:"c",preinitialize:function(){},initialize:function(){},toJSON:function(t){return i.clone(this.attributes)},sync:function(){return e.sync.apply(this,arguments)},get:function(t){return this.attributes[t]},escape:function(t){return i.escape(this.get(t))},has:function(t){return this.get(t)!=null},matches:function(t){return!!i.iteratee(t,this)(this.attributes)},set:function(t,e,n){if(t==null)return this;var r;if(typeof t==="object"){r=t;n=e}else{(r={})[t]=e}n||(n={});if(!this._validate(r,n))return false;var s=n.unset;var a=n.silent;var o=[];var h=this._changing;this._changing=true;if(!h){this._previousAttributes=i.clone(this.attributes);this.changed={}}var u=this.attributes;var l=this.changed;var c=this._previousAttributes;for(var f in r){e=r[f];if(!i.isEqual(u[f],e))o.push(f);if(!i.isEqual(c[f],e)){l[f]=e}else{delete l[f]}s?delete u[f]:u[f]=e}if(this.idAttribute in r)this.id=this.get(this.idAttribute);if(!a){if(o.length)this._pending=n;for(var d=0;d<o.length;d++){this.trigger("change:"+o[d],this,u[o[d]],n)}}if(h)return this;if(!a){while(this._pending){n=this._pending;this._pending=false;this.trigger("change",this,n)}}this._pending=false;this._changing=false;return this},unset:function(t,e){return this.set(t,void 0,i.extend({},e,{unset:true}))},clear:function(t){var e={};for(var n in this.attributes)e[n]=void 0;return this.set(e,i.extend({},t,{unset:true}))},hasChanged:function(t){if(t==null)return!i.isEmpty(this.changed);return i.has(this.changed,t)},changedAttributes:function(t){if(!t)return this.hasChanged()?i.clone(this.changed):false;var e=this._changing?this._previousAttributes:this.attributes;var n={};var r;for(var s in t){var a=t[s];if(i.isEqual(e[s],a))continue;n[s]=a;r=true}return r?n:false},previous:function(t){if(t==null||!this._previousAttributes)return null;return this._previousAttributes[t]},previousAttributes:function(){return i.clone(this._previousAttributes)},fetch:function(t){t=i.extend({parse:true},t);var e=this;var n=t.success;t.success=function(i){var r=t.parse?e.parse(i,t):i;if(!e.set(r,t))return false;if(n)n.call(t.context,e,i,t);e.trigger("sync",e,i,t)};G(this,t);return this.sync("read",this,t)},save:function(t,e,n){var r;if(t==null||typeof t==="object"){r=t;n=e}else{(r={})[t]=e}n=i.extend({validate:true,parse:true},n);var s=n.wait;if(r&&!s){if(!this.set(r,n))return false}else if(!this._validate(r,n)){return false}var a=this;var o=n.success;var h=this.attributes;n.success=function(t){a.attributes=h;var e=n.parse?a.parse(t,n):t;if(s)e=i.extend({},r,e);if(e&&!a.set(e,n))return false;if(o)o.call(n.context,a,t,n);a.trigger("sync",a,t,n)};G(this,n);if(r&&s)this.attributes=i.extend({},h,r);var u=this.isNew()?"create":n.patch?"patch":"update";if(u==="patch"&&!n.attrs)n.attrs=r;var l=this.sync(u,this,n);this.attributes=h;return l},destroy:function(t){t=t?i.clone(t):{};var e=this;var n=t.success;var r=t.wait;var s=function(){e.stopListening();e.trigger("destroy",e,e.collection,t)};t.success=function(i){if(r)s();if(n)n.call(t.context,e,i,t);if(!e.isNew())e.trigger("sync",e,i,t)};var a=false;if(this.isNew()){i.defer(t.success)}else{G(this,t);a=this.sync("delete",this,t)}if(!r)s();return a},url:function(){var t=i.result(this,"urlRoot")||i.result(this.collection,"url")||V();if(this.isNew())return t;var e=this.get(this.idAttribute);return t.replace(/[^\/]$/,"$&/")+encodeURIComponent(e)},parse:function(t,e){return t},clone:function(){return new this.constructor(this.attributes)},isNew:function(){return!this.has(this.idAttribute)},isValid:function(t){return this._validate({},i.extend({},t,{validate:true}))},_validate:function(t,e){if(!e.validate||!this.validate)return true;t=i.extend({},this.attributes,t);var n=this.validationError=this.validate(t,e)||null;if(!n)return true;this.trigger("invalid",this,n,i.extend(e,{validationError:n}));return false}});var _=e.Collection=function(t,e){e||(e={});this.preinitialize.apply(this,arguments);if(e.model)this.model=e.model;if(e.comparator!==void 0)this.comparator=e.comparator;this._reset();this.initialize.apply(this,arguments);if(t)this.reset(t,i.extend({silent:true},e))};var y={add:true,remove:true,merge:true};var b={add:true,remove:false};var x=function(t,e,i){i=Math.min(Math.max(i,0),t.length);var n=Array(t.length-i);var r=e.length;var s;for(s=0;s<n.length;s++)n[s]=t[s+i];for(s=0;s<r;s++)t[s+i]=e[s];for(s=0;s<n.length;s++)t[s+r+i]=n[s]};i.extend(_.prototype,a,{model:m,preinitialize:function(){},initialize:function(){},toJSON:function(t){return this.map(function(e){return e.toJSON(t)})},sync:function(){return e.sync.apply(this,arguments)},add:function(t,e){return this.set(t,i.extend({merge:false},e,b))},remove:function(t,e){e=i.extend({},e);var n=!i.isArray(t);t=n?[t]:t.slice();var r=this._removeModels(t,e);if(!e.silent&&r.length){e.changes={added:[],merged:[],removed:r};this.trigger("update",this,e)}return n?r[0]:r},set:function(t,e){if(t==null)return;e=i.extend({},y,e);if(e.parse&&!this._isModel(t)){t=this.parse(t,e)||[]}var n=!i.isArray(t);t=n?[t]:t.slice();var r=e.at;if(r!=null)r=+r;if(r>this.length)r=this.length;if(r<0)r+=this.length+1;var s=[];var a=[];var o=[];var h=[];var u={};var l=e.add;var c=e.merge;var f=e.remove;var d=false;var v=this.comparator&&r==null&&e.sort!==false;var p=i.isString(this.comparator)?this.comparator:null;var g,m;for(m=0;m<t.length;m++){g=t[m];var _=this.get(g);if(_){if(c&&g!==_){var b=this._isModel(g)?g.attributes:g;if(e.parse)b=_.parse(b,e);_.set(b,e);o.push(_);if(v&&!d)d=_.hasChanged(p)}if(!u[_.cid]){u[_.cid]=true;s.push(_)}t[m]=_}else if(l){g=t[m]=this._prepareModel(g,e);if(g){a.push(g);this._addReference(g,e);u[g.cid]=true;s.push(g)}}}if(f){for(m=0;m<this.length;m++){g=this.models[m];if(!u[g.cid])h.push(g)}if(h.length)this._removeModels(h,e)}var w=false;var E=!v&&l&&f;if(s.length&&E){w=this.length!==s.length||i.some(this.models,function(t,e){return t!==s[e]});this.models.length=0;x(this.models,s,0);this.length=this.models.length}else if(a.length){if(v)d=true;x(this.models,a,r==null?this.length:r);this.length=this.models.length}if(d)this.sort({silent:true});if(!e.silent){for(m=0;m<a.length;m++){if(r!=null)e.index=r+m;g=a[m];g.trigger("add",g,this,e)}if(d||w)this.trigger("sort",this,e);if(a.length||h.length||o.length){e.changes={added:a,removed:h,merged:o};this.trigger("update",this,e)}}return n?t[0]:t},reset:function(t,e){e=e?i.clone(e):{};for(var n=0;n<this.models.length;n++){this._removeReference(this.models[n],e)}e.previousModels=this.models;this._reset();t=this.add(t,i.extend({silent:true},e));if(!e.silent)this.trigger("reset",this,e);return t},push:function(t,e){return this.add(t,i.extend({at:this.length},e))},pop:function(t){var e=this.at(this.length-1);return this.remove(e,t)},unshift:function(t,e){return this.add(t,i.extend({at:0},e))},shift:function(t){var e=this.at(0);return this.remove(e,t)},slice:function(){return s.apply(this.models,arguments)},get:function(t){if(t==null)return void 0;return this._byId[t]||this._byId[this.modelId(this._isModel(t)?t.attributes:t)]||t.cid&&this._byId[t.cid]},has:function(t){return this.get(t)!=null},at:function(t){if(t<0)t+=this.length;return this.models[t]},where:function(t,e){return this[e?"find":"filter"](t)},findWhere:function(t){return this.where(t,true)},sort:function(t){var e=this.comparator;if(!e)throw new Error("Cannot sort a set without a comparator");t||(t={});var n=e.length;if(i.isFunction(e))e=e.bind(this);if(n===1||i.isString(e)){this.models=this.sortBy(e)}else{this.models.sort(e)}if(!t.silent)this.trigger("sort",this,t);return this},pluck:function(t){return this.map(t+"")},fetch:function(t){t=i.extend({parse:true},t);var e=t.success;var n=this;t.success=function(i){var r=t.reset?"reset":"set";n[r](i,t);if(e)e.call(t.context,n,i,t);n.trigger("sync",n,i,t)};G(this,t);return this.sync("read",this,t)},create:function(t,e){e=e?i.clone(e):{};var n=e.wait;t=this._prepareModel(t,e);if(!t)return false;if(!n)this.add(t,e);var r=this;var s=e.success;e.success=function(t,e,i){if(n)r.add(t,i);if(s)s.call(i.context,t,e,i)};t.save(null,e);return t},parse:function(t,e){return t},clone:function(){return new this.constructor(this.models,{model:this.model,comparator:this.comparator})},modelId:function(t){return t[this.model.prototype.idAttribute||"id"]},values:function(){return new E(this,k)},keys:function(){return new E(this,I)},entries:function(){return new E(this,S)},_reset:function(){this.length=0;this.models=[];this._byId={}},_prepareModel:function(t,e){if(this._isModel(t)){if(!t.collection)t.collection=this;return t}e=e?i.clone(e):{};e.collection=this;var n=new this.model(t,e);if(!n.validationError)return n;this.trigger("invalid",this,n.validationError,e);return false},_removeModels:function(t,e){var i=[];for(var n=0;n<t.length;n++){var r=this.get(t[n]);if(!r)continue;var s=this.indexOf(r);this.models.splice(s,1);this.length--;delete this._byId[r.cid];var a=this.modelId(r.attributes);if(a!=null)delete this._byId[a];if(!e.silent){e.index=s;r.trigger("remove",r,this,e)}i.push(r);this._removeReference(r,e)}return i},_isModel:function(t){return t instanceof m},_addReference:function(t,e){this._byId[t.cid]=t;var i=this.modelId(t.attributes);if(i!=null)this._byId[i]=t;t.on("all",this._onModelEvent,this)},_removeReference:function(t,e){delete this._byId[t.cid];var i=this.modelId(t.attributes);if(i!=null)delete this._byId[i];if(this===t.collection)delete t.collection;t.off("all",this._onModelEvent,this)},_onModelEvent:function(t,e,i,n){if(e){if((t==="add"||t==="remove")&&i!==this)return;if(t==="destroy")this.remove(e,n);if(t==="change"){var r=this.modelId(e.previousAttributes());var s=this.modelId(e.attributes);if(r!==s){if(r!=null)delete this._byId[r];if(s!=null)this._byId[s]=e}}}this.trigger.apply(this,arguments)}});var w=typeof Symbol==="function"&&Symbol.iterator;if(w){_.prototype[w]=_.prototype.values}var E=function(t,e){this._collection=t;this._kind=e;this._index=0};var k=1;var I=2;var S=3;if(w){E.prototype[w]=function(){return this}}E.prototype.next=function(){if(this._collection){if(this._index<this._collection.length){var t=this._collection.at(this._index);this._index++;var e;if(this._kind===k){e=t}else{var i=this._collection.modelId(t.attributes);if(this._kind===I){e=i}else{e=[i,t]}}return{value:e,done:false}}this._collection=void 0}return{value:void 0,done:true}};var T=e.View=function(t){this.cid=i.uniqueId("view");this.preinitialize.apply(this,arguments);i.extend(this,i.pick(t,H));this._ensureElement();this.initialize.apply(this,arguments)};var P=/^(\S+)\s*(.*)$/;var H=["model","collection","el","id","attributes","className","tagName","events"];i.extend(T.prototype,a,{tagName:"div",$:function(t){return this.$el.find(t)},preinitialize:function(){},initialize:function(){},render:function(){return this},remove:function(){this._removeElement();this.stopListening();return this},_removeElement:function(){this.$el.remove()},setElement:function(t){this.undelegateEvents();this._setElement(t);this.delegateEvents();return this},_setElement:function(t){this.$el=t instanceof e.$?t:e.$(t);this.el=this.$el[0]},delegateEvents:function(t){t||(t=i.result(this,"events"));if(!t)return this;this.undelegateEvents();for(var e in t){var n=t[e];if(!i.isFunction(n))n=this[n];if(!n)continue;var r=e.match(P);this.delegate(r[1],r[2],n.bind(this))}return this},delegate:function(t,e,i){this.$el.on(t+".delegateEvents"+this.cid,e,i);return this},undelegateEvents:function(){if(this.$el)this.$el.off(".delegateEvents"+this.cid);return this},undelegate:function(t,e,i){this.$el.off(t+".delegateEvents"+this.cid,e,i);return this},_createElement:function(t){return document.createElement(t)},_ensureElement:function(){if(!this.el){var t=i.extend({},i.result(this,"attributes"));if(this.id)t.id=i.result(this,"id");if(this.className)t["class"]=i.result(this,"className");this.setElement(this._createElement(i.result(this,"tagName")));this._setAttributes(t)}else{this.setElement(i.result(this,"el"))}},_setAttributes:function(t){this.$el.attr(t)}});var $=function(t,e,i,n){switch(e){case 1:return function(){return t[i](this[n])};case 2:return function(e){return t[i](this[n],e)};case 3:return function(e,r){return t[i](this[n],C(e,this),r)};case 4:return function(e,r,s){return t[i](this[n],C(e,this),r,s)};default:return function(){var e=s.call(arguments);e.unshift(this[n]);return t[i].apply(t,e)}}};var A=function(t,e,n,r){i.each(n,function(i,n){if(e[n])t.prototype[n]=$(e,i,n,r)})};var C=function(t,e){if(i.isFunction(t))return t;if(i.isObject(t)&&!e._isModel(t))return R(t);if(i.isString(t))return function(e){return e.get(t)};return t};var R=function(t){var e=i.matches(t);return function(t){return e(t.attributes)}};var M={forEach:3,each:3,map:3,collect:3,reduce:0,foldl:0,inject:0,reduceRight:0,foldr:0,find:3,detect:3,filter:3,select:3,reject:3,every:3,all:3,some:3,any:3,include:3,includes:3,contains:3,invoke:0,max:3,min:3,toArray:1,size:1,first:3,head:3,take:3,initial:3,rest:3,tail:3,drop:3,last:3,without:0,difference:0,indexOf:3,shuffle:1,lastIndexOf:3,isEmpty:1,chain:1,sample:3,partition:3,groupBy:3,countBy:3,sortBy:3,indexBy:3,findIndex:3,findLastIndex:3};var N={keys:1,values:1,pairs:1,invert:1,pick:0,omit:0,chain:1,isEmpty:1};i.each([[_,M,"models"],[m,N,"attributes"]],function(t){var e=t[0],n=t[1],r=t[2];e.mixin=function(t){var n=i.reduce(i.functions(t),function(t,e){t[e]=0;return t},{});A(e,t,n,r)};A(e,i,n,r)});e.sync=function(t,n,r){var s=j[t];i.defaults(r||(r={}),{emulateHTTP:e.emulateHTTP,emulateJSON:e.emulateJSON});var a={type:s,dataType:"json"};if(!r.url){a.url=i.result(n,"url")||V()}if(r.data==null&&n&&(t==="create"||t==="update"||t==="patch")){a.contentType="application/json";a.data=JSON.stringify(r.attrs||n.toJSON(r))}if(r.emulateJSON){a.contentType="application/x-www-form-urlencoded";a.data=a.data?{model:a.data}:{}}if(r.emulateHTTP&&(s==="PUT"||s==="DELETE"||s==="PATCH")){a.type="POST";if(r.emulateJSON)a.data._method=s;var o=r.beforeSend;r.beforeSend=function(t){t.setRequestHeader("X-HTTP-Method-Override",s);if(o)return o.apply(this,arguments)}}if(a.type!=="GET"&&!r.emulateJSON){a.processData=false}var h=r.error;r.error=function(t,e,i){r.textStatus=e;r.errorThrown=i;if(h)h.call(r.context,t,e,i)};var u=r.xhr=e.ajax(i.extend(a,r));n.trigger("request",n,u,r);return u};var j={create:"POST",update:"PUT",patch:"PATCH","delete":"DELETE",read:"GET"};e.ajax=function(){return e.$.ajax.apply(e.$,arguments)};var O=e.Router=function(t){t||(t={});this.preinitialize.apply(this,arguments);if(t.routes)this.routes=t.routes;this._bindRoutes();this.initialize.apply(this,arguments)};var U=/\((.*?)\)/g;var z=/(\(\?)?:\w+/g;var q=/\*\w+/g;var F=/[\-{}\[\]+?.,\\\^$|#\s]/g;i.extend(O.prototype,a,{preinitialize:function(){},initialize:function(){},route:function(t,n,r){if(!i.isRegExp(t))t=this._routeToRegExp(t);if(i.isFunction(n)){r=n;n=""}if(!r)r=this[n];var s=this;e.history.route(t,function(i){var a=s._extractParameters(t,i);if(s.execute(r,a,n)!==false){s.trigger.apply(s,["route:"+n].concat(a));s.trigger("route",n,a);e.history.trigger("route",s,n,a)}});return this},execute:function(t,e,i){if(t)t.apply(this,e)},navigate:function(t,i){e.history.navigate(t,i);return this},_bindRoutes:function(){if(!this.routes)return;this.routes=i.result(this,"routes");var t,e=i.keys(this.routes);while((t=e.pop())!=null){this.route(t,this.routes[t])}},_routeToRegExp:function(t){t=t.replace(F,"\\$&").replace(U,"(?:$1)?").replace(z,function(t,e){return e?t:"([^/?]+)"}).replace(q,"([^?]*?)");return new RegExp("^"+t+"(?:\\?([\\s\\S]*))?$")},_extractParameters:function(t,e){var n=t.exec(e).slice(1);return i.map(n,function(t,e){if(e===n.length-1)return t||null;return t?decodeURIComponent(t):null})}});var B=e.History=function(){this.handlers=[];this.checkUrl=this.checkUrl.bind(this);if(typeof window!=="undefined"){this.location=window.location;this.history=window.history}};var J=/^[#\/]|\s+$/g;var L=/^\/+|\/+$/g;var W=/#.*$/;B.started=false;i.extend(B.prototype,a,{interval:50,atRoot:function(){var t=this.location.pathname.replace(/[^\/]$/,"$&/");return t===this.root&&!this.getSearch()},matchRoot:function(){var t=this.decodeFragment(this.location.pathname);var e=t.slice(0,this.root.length-1)+"/";return e===this.root},decodeFragment:function(t){return decodeURI(t.replace(/%25/g,"%2525"))},getSearch:function(){var t=this.location.href.replace(/#.*/,"").match(/\?.+/);return t?t[0]:""},getHash:function(t){var e=(t||this).location.href.match(/#(.*)$/);return e?e[1]:""},getPath:function(){var t=this.decodeFragment(this.location.pathname+this.getSearch()).slice(this.root.length-1);return t.charAt(0)==="/"?t.slice(1):t},getFragment:function(t){if(t==null){if(this._usePushState||!this._wantsHashChange){t=this.getPath()}else{t=this.getHash()}}return t.replace(J,"")},start:function(t){if(B.started)throw new Error("Backbone.history has already been started");B.started=true;this.options=i.extend({root:"/"},this.options,t);this.root=this.options.root;this._wantsHashChange=this.options.hashChange!==false;this._hasHashChange="onhashchange"in window&&(document.documentMode===void 0||document.documentMode>7);this._useHashChange=this._wantsHashChange&&this._hasHashChange;this._wantsPushState=!!this.options.pushState;this._hasPushState=!!(this.history&&this.history.pushState);this._usePushState=this._wantsPushState&&this._hasPushState;this.fragment=this.getFragment();this.root=("/"+this.root+"/").replace(L,"/");if(this._wantsHashChange&&this._wantsPushState){if(!this._hasPushState&&!this.atRoot()){var e=this.root.slice(0,-1)||"/";this.location.replace(e+"#"+this.getPath());return true}else if(this._hasPushState&&this.atRoot()){this.navigate(this.getHash(),{replace:true})}}if(!this._hasHashChange&&this._wantsHashChange&&!this._usePushState){this.iframe=document.createElement("iframe");this.iframe.src="javascript:0";this.iframe.style.display="none";this.iframe.tabIndex=-1;var n=document.body;var r=n.insertBefore(this.iframe,n.firstChild).contentWindow;r.document.open();r.document.close();r.location.hash="#"+this.fragment}var s=window.addEventListener||function(t,e){return attachEvent("on"+t,e)};if(this._usePushState){s("popstate",this.checkUrl,false)}else if(this._useHashChange&&!this.iframe){s("hashchange",this.checkUrl,false)}else if(this._wantsHashChange){this._checkUrlInterval=setInterval(this.checkUrl,this.interval)}if(!this.options.silent)return this.loadUrl()},stop:function(){var t=window.removeEventListener||function(t,e){return detachEvent("on"+t,e)};if(this._usePushState){t("popstate",this.checkUrl,false)}else if(this._useHashChange&&!this.iframe){t("hashchange",this.checkUrl,false)}if(this.iframe){document.body.removeChild(this.iframe);this.iframe=null}if(this._checkUrlInterval)clearInterval(this._checkUrlInterval);B.started=false},route:function(t,e){this.handlers.unshift({route:t,callback:e})},checkUrl:function(t){var e=this.getFragment();if(e===this.fragment&&this.iframe){e=this.getHash(this.iframe.contentWindow)}if(e===this.fragment)return false;if(this.iframe)this.navigate(e);this.loadUrl()},loadUrl:function(t){if(!this.matchRoot())return false;t=this.fragment=this.getFragment(t);return i.some(this.handlers,function(e){if(e.route.test(t)){e.callback(t);return true}})},navigate:function(t,e){if(!B.started)return false;if(!e||e===true)e={trigger:!!e};t=this.getFragment(t||"");var i=this.root;if(t===""||t.charAt(0)==="?"){i=i.slice(0,-1)||"/"}var n=i+t;t=t.replace(W,"");var r=this.decodeFragment(t);if(this.fragment===r)return;this.fragment=r;if(this._usePushState){this.history[e.replace?"replaceState":"pushState"]({},document.title,n)}else if(this._wantsHashChange){this._updateHash(this.location,t,e.replace);if(this.iframe&&t!==this.getHash(this.iframe.contentWindow)){var s=this.iframe.contentWindow;if(!e.replace){s.document.open();s.document.close()}this._updateHash(s.location,t,e.replace)}}else{return this.location.assign(n)}if(e.trigger)return this.loadUrl(t)},_updateHash:function(t,e,i){if(i){var n=t.href.replace(/(javascript:|#).*$/,"");t.replace(n+"#"+e)}else{t.hash="#"+e}}});e.history=new B;var D=function(t,e){var n=this;var r;if(t&&i.has(t,"constructor")){r=t.constructor}else{r=function(){return n.apply(this,arguments)}}i.extend(r,n,e);r.prototype=i.create(n.prototype,t);r.prototype.constructor=r;r.__super__=n.prototype;return r};m.extend=_.extend=O.extend=T.extend=B.extend=D;var V=function(){throw new Error('A "url" property or function must be specified')};var G=function(t,e){var i=e.error;e.error=function(n){if(i)i.call(e.context,t,n,e);t.trigger("error",t,n,e)}};return e});
-//# sourceMappingURL=backbone-min.map
\ No newline at end of file
+(function(r){var n=typeof self=="object"&&self.self===self&&self||typeof global=="object"&&global.global===global&&global;if(typeof define==="function"&&define.amd){define(["underscore","jquery","exports"],function(t,e,i){n.Backbone=r(n,i,t,e)})}else if(typeof exports!=="undefined"){var t=require("underscore"),e;try{e=require("jquery")}catch(t){}r(n,exports,t,e)}else{n.Backbone=r(n,{},n._,n.jQuery||n.Zepto||n.ender||n.$)}})(function(t,h,x,e){var i=t.Backbone;var a=Array.prototype.slice;h.VERSION="1.4.1";h.$=e;h.noConflict=function(){t.Backbone=i;return this};h.emulateHTTP=false;h.emulateJSON=false;var r=h.Events={};var o=/\s+/;var l;var u=function(t,e,i,r,n){var s=0,a;if(i&&typeof i==="object"){if(r!==void 0&&"context"in n&&n.context===void 0)n.context=r;for(a=x.keys(i);s<a.length;s++){e=u(t,e,a[s],i[a[s]],n)}}else if(i&&o.test(i)){for(a=i.split(o);s<a.length;s++){e=t(e,a[s],r,n)}}else{e=t(e,i,r,n)}return e};r.on=function(t,e,i){this._events=u(n,this._events||{},t,e,{context:i,ctx:this,listening:l});if(l){var r=this._listeners||(this._listeners={});r[l.id]=l;l.interop=false}return this};r.listenTo=function(t,e,i){if(!t)return this;var r=t._listenId||(t._listenId=x.uniqueId("l"));var n=this._listeningTo||(this._listeningTo={});var s=l=n[r];if(!s){this._listenId||(this._listenId=x.uniqueId("l"));s=l=n[r]=new p(this,t)}var a=c(t,e,i,this);l=void 0;if(a)throw a;if(s.interop)s.on(e,i);return this};var n=function(t,e,i,r){if(i){var n=t[e]||(t[e]=[]);var s=r.context,a=r.ctx,o=r.listening;if(o)o.count++;n.push({callback:i,context:s,ctx:s||a,listening:o})}return t};var c=function(t,e,i,r){try{t.on(e,i,r)}catch(t){return t}};r.off=function(t,e,i){if(!this._events)return this;this._events=u(s,this._events,t,e,{context:i,listeners:this._listeners});return this};r.stopListening=function(t,e,i){var r=this._listeningTo;if(!r)return this;var n=t?[t._listenId]:x.keys(r);for(var s=0;s<n.length;s++){var a=r[n[s]];if(!a)break;a.obj.off(e,i,this);if(a.interop)a.off(e,i)}if(x.isEmpty(r))this._listeningTo=void 0;return this};var s=function(t,e,i,r){if(!t)return;var n=r.context,s=r.listeners;var a=0,o;if(!e&&!n&&!i){for(o=x.keys(s);a<o.length;a++){s[o[a]].cleanup()}return}o=e?[e]:x.keys(t);for(;a<o.length;a++){e=o[a];var h=t[e];if(!h)break;var l=[];for(var u=0;u<h.length;u++){var c=h[u];if(i&&i!==c.callback&&i!==c.callback._callback||n&&n!==c.context){l.push(c)}else{var f=c.listening;if(f)f.off(e,i)}}if(l.length){t[e]=l}else{delete t[e]}}return t};r.once=function(t,e,i){var r=u(f,{},t,e,this.off.bind(this));if(typeof t==="string"&&i==null)e=void 0;return this.on(r,e,i)};r.listenToOnce=function(t,e,i){var r=u(f,{},e,i,this.stopListening.bind(this,t));return this.listenTo(t,r)};var f=function(t,e,i,r){if(i){var n=t[e]=x.once(function(){r(e,n);i.apply(this,arguments)});n._callback=i}return t};r.trigger=function(t){if(!this._events)return this;var e=Math.max(0,arguments.length-1);var i=Array(e);for(var r=0;r<e;r++)i[r]=arguments[r+1];u(d,this._events,t,void 0,i);return this};var d=function(t,e,i,r){if(t){var n=t[e];var s=t.all;if(n&&s)s=s.slice();if(n)v(n,r);if(s)v(s,[e].concat(r))}return t};var v=function(t,e){var i,r=-1,n=t.length,s=e[0],a=e[1],o=e[2];switch(e.length){case 0:while(++r<n)(i=t[r]).callback.call(i.ctx);return;case 1:while(++r<n)(i=t[r]).callback.call(i.ctx,s);return;case 2:while(++r<n)(i=t[r]).callback.call(i.ctx,s,a);return;case 3:while(++r<n)(i=t[r]).callback.call(i.ctx,s,a,o);return;default:while(++r<n)(i=t[r]).callback.apply(i.ctx,e);return}};var p=function(t,e){this.id=t._listenId;this.listener=t;this.obj=e;this.interop=true;this.count=0;this._events=void 0};p.prototype.on=r.on;p.prototype.off=function(t,e){var i;if(this.interop){this._events=u(s,this._events,t,e,{context:void 0,listeners:void 0});i=!this._events}else{this.count--;i=this.count===0}if(i)this.cleanup()};p.prototype.cleanup=function(){delete this.listener._listeningTo[this.obj._listenId];if(!this.interop)delete this.obj._listeners[this.id]};r.bind=r.on;r.unbind=r.off;x.extend(h,r);var g=h.Model=function(t,e){var i=t||{};e||(e={});this.preinitialize.apply(this,arguments);this.cid=x.uniqueId(this.cidPrefix);this.attributes={};if(e.collection)this.collection=e.collection;if(e.parse)i=this.parse(i,e)||{};var r=x.result(this,"defaults");i=x.defaults(x.extend({},r,i),r);this.set(i,e);this.changed={};this.initialize.apply(this,arguments)};x.extend(g.prototype,r,{changed:null,validationError:null,idAttribute:"id",cidPrefix:"c",preinitialize:function(){},initialize:function(){},toJSON:function(t){return x.clone(this.attributes)},sync:function(){return h.sync.apply(this,arguments)},get:function(t){return this.attributes[t]},escape:function(t){return x.escape(this.get(t))},has:function(t){return this.get(t)!=null},matches:function(t){return!!x.iteratee(t,this)(this.attributes)},set:function(t,e,i){if(t==null)return this;var r;if(typeof t==="object"){r=t;i=e}else{(r={})[t]=e}i||(i={});if(!this._validate(r,i))return false;var n=i.unset;var s=i.silent;var a=[];var o=this._changing;this._changing=true;if(!o){this._previousAttributes=x.clone(this.attributes);this.changed={}}var h=this.attributes;var l=this.changed;var u=this._previousAttributes;for(var c in r){e=r[c];if(!x.isEqual(h[c],e))a.push(c);if(!x.isEqual(u[c],e)){l[c]=e}else{delete l[c]}n?delete h[c]:h[c]=e}if(this.idAttribute in r){var f=this.id;this.id=this.get(this.idAttribute);this.trigger("changeId",this,f,i)}if(!s){if(a.length)this._pending=i;for(var d=0;d<a.length;d++){this.trigger("change:"+a[d],this,h[a[d]],i)}}if(o)return this;if(!s){while(this._pending){i=this._pending;this._pending=false;this.trigger("change",this,i)}}this._pending=false;this._changing=false;return this},unset:function(t,e){return this.set(t,void 0,x.extend({},e,{unset:true}))},clear:function(t){var e={};for(var i in this.attributes)e[i]=void 0;return this.set(e,x.extend({},t,{unset:true}))},hasChanged:function(t){if(t==null)return!x.isEmpty(this.changed);return x.has(this.changed,t)},changedAttributes:function(t){if(!t)return this.hasChanged()?x.clone(this.changed):false;var e=this._changing?this._previousAttributes:this.attributes;var i={};var r;for(var n in t){var s=t[n];if(x.isEqual(e[n],s))continue;i[n]=s;r=true}return r?i:false},previous:function(t){if(t==null||!this._previousAttributes)return null;return this._previousAttributes[t]},previousAttributes:function(){return x.clone(this._previousAttributes)},fetch:function(i){i=x.extend({parse:true},i);var r=this;var n=i.success;i.success=function(t){var e=i.parse?r.parse(t,i):t;if(!r.set(e,i))return false;if(n)n.call(i.context,r,t,i);r.trigger("sync",r,t,i)};G(this,i);return this.sync("read",this,i)},save:function(t,e,i){var r;if(t==null||typeof t==="object"){r=t;i=e}else{(r={})[t]=e}i=x.extend({validate:true,parse:true},i);var n=i.wait;if(r&&!n){if(!this.set(r,i))return false}else if(!this._validate(r,i)){return false}var s=this;var a=i.success;var o=this.attributes;i.success=function(t){s.attributes=o;var e=i.parse?s.parse(t,i):t;if(n)e=x.extend({},r,e);if(e&&!s.set(e,i))return false;if(a)a.call(i.context,s,t,i);s.trigger("sync",s,t,i)};G(this,i);if(r&&n)this.attributes=x.extend({},o,r);var h=this.isNew()?"create":i.patch?"patch":"update";if(h==="patch"&&!i.attrs)i.attrs=r;var l=this.sync(h,this,i);this.attributes=o;return l},destroy:function(e){e=e?x.clone(e):{};var i=this;var r=e.success;var n=e.wait;var s=function(){i.stopListening();i.trigger("destroy",i,i.collection,e)};e.success=function(t){if(n)s();if(r)r.call(e.context,i,t,e);if(!i.isNew())i.trigger("sync",i,t,e)};var t=false;if(this.isNew()){x.defer(e.success)}else{G(this,e);t=this.sync("delete",this,e)}if(!n)s();return t},url:function(){var t=x.result(this,"urlRoot")||x.result(this.collection,"url")||V();if(this.isNew())return t;var e=this.get(this.idAttribute);return t.replace(/[^\/]$/,"$&/")+encodeURIComponent(e)},parse:function(t,e){return t},clone:function(){return new this.constructor(this.attributes)},isNew:function(){return!this.has(this.idAttribute)},isValid:function(t){return this._validate({},x.extend({},t,{validate:true}))},_validate:function(t,e){if(!e.validate||!this.validate)return true;t=x.extend({},this.attributes,t);var i=this.validationError=this.validate(t,e)||null;if(!i)return true;this.trigger("invalid",this,i,x.extend(e,{validationError:i}));return false}});var m=h.Collection=function(t,e){e||(e={});this.preinitialize.apply(this,arguments);if(e.model)this.model=e.model;if(e.comparator!==void 0)this.comparator=e.comparator;this._reset();this.initialize.apply(this,arguments);if(t)this.reset(t,x.extend({silent:true},e))};var w={add:true,remove:true,merge:true};var _={add:true,remove:false};var E=function(t,e,i){i=Math.min(Math.max(i,0),t.length);var r=Array(t.length-i);var n=e.length;var s;for(s=0;s<r.length;s++)r[s]=t[s+i];for(s=0;s<n;s++)t[s+i]=e[s];for(s=0;s<r.length;s++)t[s+n+i]=r[s]};x.extend(m.prototype,r,{model:g,preinitialize:function(){},initialize:function(){},toJSON:function(e){return this.map(function(t){return t.toJSON(e)})},sync:function(){return h.sync.apply(this,arguments)},add:function(t,e){return this.set(t,x.extend({merge:false},e,_))},remove:function(t,e){e=x.extend({},e);var i=!x.isArray(t);t=i?[t]:t.slice();var r=this._removeModels(t,e);if(!e.silent&&r.length){e.changes={added:[],merged:[],removed:r};this.trigger("update",this,e)}return i?r[0]:r},set:function(t,e){if(t==null)return;e=x.extend({},w,e);if(e.parse&&!this._isModel(t)){t=this.parse(t,e)||[]}var i=!x.isArray(t);t=i?[t]:t.slice();var r=e.at;if(r!=null)r=+r;if(r>this.length)r=this.length;if(r<0)r+=this.length+1;var n=[];var s=[];var a=[];var o=[];var h={};var l=e.add;var u=e.merge;var c=e.remove;var f=false;var d=this.comparator&&r==null&&e.sort!==false;var v=x.isString(this.comparator)?this.comparator:null;var p,g;for(g=0;g<t.length;g++){p=t[g];var m=this.get(p);if(m){if(u&&p!==m){var _=this._isModel(p)?p.attributes:p;if(e.parse)_=m.parse(_,e);m.set(_,e);a.push(m);if(d&&!f)f=m.hasChanged(v)}if(!h[m.cid]){h[m.cid]=true;n.push(m)}t[g]=m}else if(l){p=t[g]=this._prepareModel(p,e);if(p){s.push(p);this._addReference(p,e);h[p.cid]=true;n.push(p)}}}if(c){for(g=0;g<this.length;g++){p=this.models[g];if(!h[p.cid])o.push(p)}if(o.length)this._removeModels(o,e)}var y=false;var b=!d&&l&&c;if(n.length&&b){y=this.length!==n.length||x.some(this.models,function(t,e){return t!==n[e]});this.models.length=0;E(this.models,n,0);this.length=this.models.length}else if(s.length){if(d)f=true;E(this.models,s,r==null?this.length:r);this.length=this.models.length}if(f)this.sort({silent:true});if(!e.silent){for(g=0;g<s.length;g++){if(r!=null)e.index=r+g;p=s[g];p.trigger("add",p,this,e)}if(f||y)this.trigger("sort",this,e);if(s.length||o.length||a.length){e.changes={added:s,removed:o,merged:a};this.trigger("update",this,e)}}return i?t[0]:t},reset:function(t,e){e=e?x.clone(e):{};for(var i=0;i<this.models.length;i++){this._removeReference(this.models[i],e)}e.previousModels=this.models;this._reset();t=this.add(t,x.extend({silent:true},e));if(!e.silent)this.trigger("reset",this,e);return t},push:function(t,e){return this.add(t,x.extend({at:this.length},e))},pop:function(t){var e=this.at(this.length-1);return this.remove(e,t)},unshift:function(t,e){return this.add(t,x.extend({at:0},e))},shift:function(t){var e=this.at(0);return this.remove(e,t)},slice:function(){return a.apply(this.models,arguments)},get:function(t){if(t==null)return void 0;return this._byId[t]||this._byId[this.modelId(this._isModel(t)?t.attributes:t,t.idAttribute)]||t.cid&&this._byId[t.cid]},has:function(t){return this.get(t)!=null},at:function(t){if(t<0)t+=this.length;return this.models[t]},where:function(t,e){return this[e?"find":"filter"](t)},findWhere:function(t){return this.where(t,true)},sort:function(t){var e=this.comparator;if(!e)throw new Error("Cannot sort a set without a comparator");t||(t={});var i=e.length;if(x.isFunction(e))e=e.bind(this);if(i===1||x.isString(e)){this.models=this.sortBy(e)}else{this.models.sort(e)}if(!t.silent)this.trigger("sort",this,t);return this},pluck:function(t){return this.map(t+"")},fetch:function(i){i=x.extend({parse:true},i);var r=i.success;var n=this;i.success=function(t){var e=i.reset?"reset":"set";n[e](t,i);if(r)r.call(i.context,n,t,i);n.trigger("sync",n,t,i)};G(this,i);return this.sync("read",this,i)},create:function(t,e){e=e?x.clone(e):{};var r=e.wait;t=this._prepareModel(t,e);if(!t)return false;if(!r)this.add(t,e);var n=this;var s=e.success;e.success=function(t,e,i){if(r)n.add(t,i);if(s)s.call(i.context,t,e,i)};t.save(null,e);return t},parse:function(t,e){return t},clone:function(){return new this.constructor(this.models,{model:this.model,comparator:this.comparator})},modelId:function(t,e){return t[e||this.model.prototype.idAttribute||"id"]},values:function(){return new b(this,I)},keys:function(){return new b(this,k)},entries:function(){return new b(this,S)},_reset:function(){this.length=0;this.models=[];this._byId={}},_prepareModel:function(t,e){if(this._isModel(t)){if(!t.collection)t.collection=this;return t}e=e?x.clone(e):{};e.collection=this;var i;if(this.model.prototype){i=new this.model(t,e)}else{i=this.model(t,e)}if(!i.validationError)return i;this.trigger("invalid",this,i.validationError,e);return false},_removeModels:function(t,e){var i=[];for(var r=0;r<t.length;r++){var n=this.get(t[r]);if(!n)continue;var s=this.indexOf(n);this.models.splice(s,1);this.length--;delete this._byId[n.cid];var a=this.modelId(n.attributes,n.idAttribute);if(a!=null)delete this._byId[a];if(!e.silent){e.index=s;n.trigger("remove",n,this,e)}i.push(n);this._removeReference(n,e)}return i},_isModel:function(t){return t instanceof g},_addReference:function(t,e){this._byId[t.cid]=t;var i=this.modelId(t.attributes,t.idAttribute);if(i!=null)this._byId[i]=t;t.on("all",this._onModelEvent,this)},_removeReference:function(t,e){delete this._byId[t.cid];var i=this.modelId(t.attributes,t.idAttribute);if(i!=null)delete this._byId[i];if(this===t.collection)delete t.collection;t.off("all",this._onModelEvent,this)},_onModelEvent:function(t,e,i,r){if(e){if((t==="add"||t==="remove")&&i!==this)return;if(t==="destroy")this.remove(e,r);if(t==="changeId"){var n=this.modelId(e.previousAttributes(),e.idAttribute);var s=this.modelId(e.attributes,e.idAttribute);if(n!=null)delete this._byId[n];if(s!=null)this._byId[s]=e}}this.trigger.apply(this,arguments)}});var y=typeof Symbol==="function"&&Symbol.iterator;if(y){m.prototype[y]=m.prototype.values}var b=function(t,e){this._collection=t;this._kind=e;this._index=0};var I=1;var k=2;var S=3;if(y){b.prototype[y]=function(){return this}}b.prototype.next=function(){if(this._collection){if(this._index<this._collection.length){var t=this._collection.at(this._index);this._index++;var e;if(this._kind===I){e=t}else{var i=this._collection.modelId(t.attributes,t.idAttribute);if(this._kind===k){e=i}else{e=[i,t]}}return{value:e,done:false}}this._collection=void 0}return{value:void 0,done:true}};var A=h.View=function(t){this.cid=x.uniqueId("view");this.preinitialize.apply(this,arguments);x.extend(this,x.pick(t,P));this._ensureElement();this.initialize.apply(this,arguments)};var T=/^(\S+)\s*(.*)$/;var P=["model","collection","el","id","attributes","className","tagName","events"];x.extend(A.prototype,r,{tagName:"div",$:function(t){return this.$el.find(t)},preinitialize:function(){},initialize:function(){},render:function(){return this},remove:function(){this._removeElement();this.stopListening();return this},_removeElement:function(){this.$el.remove()},setElement:function(t){this.undelegateEvents();this._setElement(t);this.delegateEvents();return this},_setElement:function(t){this.$el=t instanceof h.$?t:h.$(t);this.el=this.$el[0]},delegateEvents:function(t){t||(t=x.result(this,"events"));if(!t)return this;this.undelegateEvents();for(var e in t){var i=t[e];if(!x.isFunction(i))i=this[i];if(!i)continue;var r=e.match(T);this.delegate(r[1],r[2],i.bind(this))}return this},delegate:function(t,e,i){this.$el.on(t+".delegateEvents"+this.cid,e,i);return this},undelegateEvents:function(){if(this.$el)this.$el.off(".delegateEvents"+this.cid);return this},undelegate:function(t,e,i){this.$el.off(t+".delegateEvents"+this.cid,e,i);return this},_createElement:function(t){return document.createElement(t)},_ensureElement:function(){if(!this.el){var t=x.extend({},x.result(this,"attributes"));if(this.id)t.id=x.result(this,"id");if(this.className)t["class"]=x.result(this,"className");this.setElement(this._createElement(x.result(this,"tagName")));this._setAttributes(t)}else{this.setElement(x.result(this,"el"))}},_setAttributes:function(t){this.$el.attr(t)}});var H=function(r,t,n,s){switch(t){case 1:return function(){return r[n](this[s])};case 2:return function(t){return r[n](this[s],t)};case 3:return function(t,e){return r[n](this[s],C(t,this),e)};case 4:return function(t,e,i){return r[n](this[s],C(t,this),e,i)};default:return function(){var t=a.call(arguments);t.unshift(this[s]);return r[n].apply(r,t)}}};var $=function(i,r,t,n){x.each(t,function(t,e){if(r[e])i.prototype[e]=H(r,t,e,n)})};var C=function(e,t){if(x.isFunction(e))return e;if(x.isObject(e)&&!t._isModel(e))return R(e);if(x.isString(e))return function(t){return t.get(e)};return e};var R=function(t){var e=x.matches(t);return function(t){return e(t.attributes)}};var M={forEach:3,each:3,map:3,collect:3,reduce:0,foldl:0,inject:0,reduceRight:0,foldr:0,find:3,detect:3,filter:3,select:3,reject:3,every:3,all:3,some:3,any:3,include:3,includes:3,contains:3,invoke:0,max:3,min:3,toArray:1,size:1,first:3,head:3,take:3,initial:3,rest:3,tail:3,drop:3,last:3,without:0,difference:0,indexOf:3,shuffle:1,lastIndexOf:3,isEmpty:1,chain:1,sample:3,partition:3,groupBy:3,countBy:3,sortBy:3,indexBy:3,findIndex:3,findLastIndex:3};var N={keys:1,values:1,pairs:1,invert:1,pick:0,omit:0,chain:1,isEmpty:1};x.each([[m,M,"models"],[g,N,"attributes"]],function(t){var i=t[0],e=t[1],r=t[2];i.mixin=function(t){var e=x.reduce(x.functions(t),function(t,e){t[e]=0;return t},{});$(i,t,e,r)};$(i,x,e,r)});h.sync=function(t,e,r){var i=j[t];x.defaults(r||(r={}),{emulateHTTP:h.emulateHTTP,emulateJSON:h.emulateJSON});var n={type:i,dataType:"json"};if(!r.url){n.url=x.result(e,"url")||V()}if(r.data==null&&e&&(t==="create"||t==="update"||t==="patch")){n.contentType="application/json";n.data=JSON.stringify(r.attrs||e.toJSON(r))}if(r.emulateJSON){n.contentType="application/x-www-form-urlencoded";n.data=n.data?{model:n.data}:{}}if(r.emulateHTTP&&(i==="PUT"||i==="DELETE"||i==="PATCH")){n.type="POST";if(r.emulateJSON)n.data._method=i;var s=r.beforeSend;r.beforeSend=function(t){t.setRequestHeader("X-HTTP-Method-Override",i);if(s)return s.apply(this,arguments)}}if(n.type!=="GET"&&!r.emulateJSON){n.processData=false}var a=r.error;r.error=function(t,e,i){r.textStatus=e;r.errorThrown=i;if(a)a.call(r.context,t,e,i)};var o=r.xhr=h.ajax(x.extend(n,r));e.trigger("request",e,o,r);return o};var j={create:"POST",update:"PUT",patch:"PATCH",delete:"DELETE",read:"GET"};h.ajax=function(){return h.$.ajax.apply(h.$,arguments)};var O=h.Router=function(t){t||(t={});this.preinitialize.apply(this,arguments);if(t.routes)this.routes=t.routes;this._bindRoutes();this.initialize.apply(this,arguments)};var U=/\((.*?)\)/g;var z=/(\(\?)?:\w+/g;var q=/\*\w+/g;var F=/[\-{}\[\]+?.,\\\^$|#\s]/g;x.extend(O.prototype,r,{preinitialize:function(){},initialize:function(){},route:function(i,r,n){if(!x.isRegExp(i))i=this._routeToRegExp(i);if(x.isFunction(r)){n=r;r=""}if(!n)n=this[r];var s=this;h.history.route(i,function(t){var e=s._extractParameters(i,t);if(s.execute(n,e,r)!==false){s.trigger.apply(s,["route:"+r].concat(e));s.trigger("route",r,e);h.history.trigger("route",s,r,e)}});return this},execute:function(t,e,i){if(t)t.apply(this,e)},navigate:function(t,e){h.history.navigate(t,e);return this},_bindRoutes:function(){if(!this.routes)return;this.routes=x.result(this,"routes");var t,e=x.keys(this.routes);while((t=e.pop())!=null){this.route(t,this.routes[t])}},_routeToRegExp:function(t){t=t.replace(F,"\\$&").replace(U,"(?:$1)?").replace(z,function(t,e){return e?t:"([^/?]+)"}).replace(q,"([^?]*?)");return new RegExp("^"+t+"(?:\\?([\\s\\S]*))?$")},_extractParameters:function(t,e){var i=t.exec(e).slice(1);return x.map(i,function(t,e){if(e===i.length-1)return t||null;return t?decodeURIComponent(t):null})}});var B=h.History=function(){this.handlers=[];this.checkUrl=this.checkUrl.bind(this);if(typeof window!=="undefined"){this.location=window.location;this.history=window.history}};var J=/^[#\/]|\s+$/g;var L=/^\/+|\/+$/g;var W=/#.*$/;B.started=false;x.extend(B.prototype,r,{interval:50,atRoot:function(){var t=this.location.pathname.replace(/[^\/]$/,"$&/");return t===this.root&&!this.getSearch()},matchRoot:function(){var t=this.decodeFragment(this.location.pathname);var e=t.slice(0,this.root.length-1)+"/";return e===this.root},decodeFragment:function(t){return decodeURI(t.replace(/%25/g,"%2525"))},getSearch:function(){var t=this.location.href.replace(/#.*/,"").match(/\?.+/);return t?t[0]:""},getHash:function(t){var e=(t||this).location.href.match(/#(.*)$/);return e?e[1]:""},getPath:function(){var t=this.decodeFragment(this.location.pathname+this.getSearch()).slice(this.root.length-1);return t.charAt(0)==="/"?t.slice(1):t},getFragment:function(t){if(t==null){if(this._usePushState||!this._wantsHashChange){t=this.getPath()}else{t=this.getHash()}}return t.replace(J,"")},start:function(t){if(B.started)throw new Error("Backbone.history has already been started");B.started=true;this.options=x.extend({root:"/"},this.options,t);this.root=this.options.root;this._wantsHashChange=this.options.hashChange!==false;this._hasHashChange="onhashchange"in window&&(document.documentMode===void 0||document.documentMode>7);this._useHashChange=this._wantsHashChange&&this._hasHashChange;this._wantsPushState=!!this.options.pushState;this._hasPushState=!!(this.history&&this.history.pushState);this._usePushState=this._wantsPushState&&this._hasPushState;this.fragment=this.getFragment();this.root=("/"+this.root+"/").replace(L,"/");if(this._wantsHashChange&&this._wantsPushState){if(!this._hasPushState&&!this.atRoot()){var e=this.root.slice(0,-1)||"/";this.location.replace(e+"#"+this.getPath());return true}else if(this._hasPushState&&this.atRoot()){this.navigate(this.getHash(),{replace:true})}}if(!this._hasHashChange&&this._wantsHashChange&&!this._usePushState){this.iframe=document.createElement("iframe");this.iframe.src="javascript:0";this.iframe.style.display="none";this.iframe.tabIndex=-1;var i=document.body;var r=i.insertBefore(this.iframe,i.firstChild).contentWindow;r.document.open();r.document.close();r.location.hash="#"+this.fragment}var n=window.addEventListener||function(t,e){return attachEvent("on"+t,e)};if(this._usePushState){n("popstate",this.checkUrl,false)}else if(this._useHashChange&&!this.iframe){n("hashchange",this.checkUrl,false)}else if(this._wantsHashChange){this._checkUrlInterval=setInterval(this.checkUrl,this.interval)}if(!this.options.silent)return this.loadUrl()},stop:function(){var t=window.removeEventListener||function(t,e){return detachEvent("on"+t,e)};if(this._usePushState){t("popstate",this.checkUrl,false)}else if(this._useHashChange&&!this.iframe){t("hashchange",this.checkUrl,false)}if(this.iframe){document.body.removeChild(this.iframe);this.iframe=null}if(this._checkUrlInterval)clearInterval(this._checkUrlInterval);B.started=false},route:function(t,e){this.handlers.unshift({route:t,callback:e})},checkUrl:function(t){var e=this.getFragment();if(e===this.fragment&&this.iframe){e=this.getHash(this.iframe.contentWindow)}if(e===this.fragment)return false;if(this.iframe)this.navigate(e);this.loadUrl()},loadUrl:function(e){if(!this.matchRoot())return false;e=this.fragment=this.getFragment(e);return x.some(this.handlers,function(t){if(t.route.test(e)){t.callback(e);return true}})},navigate:function(t,e){if(!B.started)return false;if(!e||e===true)e={trigger:!!e};t=this.getFragment(t||"");var i=this.root;if(t===""||t.charAt(0)==="?"){i=i.slice(0,-1)||"/"}var r=i+t;t=t.replace(W,"");var n=this.decodeFragment(t);if(this.fragment===n)return;this.fragment=n;if(this._usePushState){this.history[e.replace?"replaceState":"pushState"]({},document.title,r)}else if(this._wantsHashChange){this._updateHash(this.location,t,e.replace);if(this.iframe&&t!==this.getHash(this.iframe.contentWindow)){var s=this.iframe.contentWindow;if(!e.replace){s.document.open();s.document.close()}this._updateHash(s.location,t,e.replace)}}else{return this.location.assign(r)}if(e.trigger)return this.loadUrl(t)},_updateHash:function(t,e,i){if(i){var r=t.href.replace(/(javascript:|#).*$/,"");t.replace(r+"#"+e)}else{t.hash="#"+e}}});h.history=new B;var D=function(t,e){var i=this;var r;if(t&&x.has(t,"constructor")){r=t.constructor}else{r=function(){return i.apply(this,arguments)}}x.extend(r,i,e);r.prototype=x.create(i.prototype,t);r.prototype.constructor=r;r.__super__=i.prototype;return r};g.extend=m.extend=O.extend=A.extend=B.extend=D;var V=function(){throw new Error('A "url" property or function must be specified')};var G=function(e,i){var r=i.error;i.error=function(t){if(r)r.call(i.context,e,t,i);e.trigger("error",e,t,i)}};return h});
+//# sourceMappingURL=backbone-min.js.map
\ No newline at end of file
diff --git a/web/core/assets/vendor/backbone/backbone-min.map b/web/core/assets/vendor/backbone/backbone-min.map
index a45f7c13e9..c1bcd82abd 100644
--- a/web/core/assets/vendor/backbone/backbone-min.map
+++ b/web/core/assets/vendor/backbone/backbone-min.map
@@ -1 +1 @@
-{"version":3,"file":"backbone-min.js","sources":["backbone.js"],"names":["factory","root","self","global","define","amd","_","$","exports","Backbone","require","e","jQuery","Zepto","ender","previousBackbone","slice","Array","prototype","VERSION","noConflict","this","emulateHTTP","emulateJSON","Events","eventSplitter","_listening","eventsApi","iteratee","events","name","callback","opts","i","names","context","keys","length","test","split","on","_events","onApi","ctx","listening","listeners","_listeners","id","interop","listenTo","obj","_listenId","uniqueId","listeningTo","_listeningTo","Listening","error","tryCatchOn","options","handlers","count","push","off","offApi","stopListening","ids","isEmpty","cleanup","remaining","j","handler","_callback","once","onceMap","bind","listenToOnce","map","offer","apply","arguments","trigger","Math","max","args","triggerApi","objEvents","allEvents","all","triggerEvents","concat","ev","l","a1","a2","a3","call","listener","unbind","extend","Model","attributes","attrs","preinitialize","cid","cidPrefix","collection","parse","defaults","result","set","changed","initialize","validationError","idAttribute","toJSON","clone","sync","get","attr","escape","has","matches","key","val","_validate","unset","silent","changes","changing","_changing","_previousAttributes","current","prev","isEqual","_pending","clear","hasChanged","changedAttributes","diff","old","previous","previousAttributes","fetch","model","success","resp","serverAttrs","wrapError","save","validate","wait","method","isNew","patch","xhr","destroy","defer","url","base","urlError","replace","encodeURIComponent","constructor","isValid","Collection","models","comparator","_reset","reset","setOptions","add","remove","merge","addOptions","splice","array","insert","at","min","tail","singular","isArray","removed","_removeModels","added","merged","_isModel","toAdd","toMerge","toRemove","modelMap","sort","sortable","sortAttr","isString","existing","_prepareModel","_addReference","orderChanged","some","m","index","_removeReference","previousModels","pop","unshift","shift","_byId","modelId","where","first","findWhere","Error","isFunction","sortBy","pluck","create","callbackOpts","values","CollectionIterator","ITERATOR_VALUES","ITERATOR_KEYS","entries","ITERATOR_KEYSVALUES","indexOf","_onModelEvent","event","prevId","$$iterator","Symbol","iterator","kind","_collection","_kind","_index","next","value","done","View","pick","viewOptions","_ensureElement","delegateEventSplitter","tagName","selector","$el","find","render","_removeElement","setElement","element","undelegateEvents","_setElement","delegateEvents","el","match","delegate","eventName","undelegate","_createElement","document","createElement","className","_setAttributes","addMethod","attribute","cb","defaultVal","addUnderscoreMethods","Class","methods","each","instance","isObject","modelMatcher","matcher","collectionMethods","forEach","collect","reduce","foldl","inject","reduceRight","foldr","detect","filter","select","reject","every","any","include","includes","contains","invoke","toArray","size","head","take","initial","rest","drop","last","without","difference","shuffle","lastIndexOf","chain","sample","partition","groupBy","countBy","indexBy","findIndex","findLastIndex","modelMethods","pairs","invert","omit","config","Base","mixin","mappings","functions","memo","type","methodMap","params","dataType","data","contentType","JSON","stringify","_method","beforeSend","setRequestHeader","processData","textStatus","errorThrown","ajax","update","delete","read","Router","routes","_bindRoutes","optionalParam","namedParam","splatParam","escapeRegExp","route","isRegExp","_routeToRegExp","router","history","fragment","_extractParameters","execute","navigate","optional","RegExp","exec","param","decodeURIComponent","History","checkUrl","window","location","routeStripper","rootStripper","pathStripper","started","interval","atRoot","path","pathname","getSearch","matchRoot","decodeFragment","rootPath","decodeURI","href","getHash","getPath","charAt","getFragment","_usePushState","_wantsHashChange","start","hashChange","_hasHashChange","documentMode","_useHashChange","_wantsPushState","pushState","_hasPushState","iframe","src","style","display","tabIndex","body","iWindow","insertBefore","firstChild","contentWindow","open","close","hash","addEventListener","attachEvent","_checkUrlInterval","setInterval","loadUrl","stop","removeEventListener","detachEvent","removeChild","clearInterval","decodedFragment","title","_updateHash","assign","protoProps","staticProps","parent","child","__super__"],"mappings":"CAOA,SAAUA,GAIR,GAAIC,SAAcC,OAAQ,UAAYA,KAAKA,OAASA,MAAQA,YAC3CC,SAAU,UAAYA,OAAOA,SAAWA,QAAUA,MAGnE,UAAWC,UAAW,YAAcA,OAAOC,IAAK,CAC9CD,QAAQ,aAAc,SAAU,WAAY,SAASE,EAAGC,EAAGC,GAGzDP,EAAKQ,SAAWT,EAAQC,EAAMO,EAASF,EAAGC,SAIvC,UAAWC,WAAY,YAAa,CACzC,GAAIF,GAAII,QAAQ,cAAeH,CAC/B,KAAMA,EAAIG,QAAQ,UAAa,MAAOC,IACtCX,EAAQC,EAAMO,QAASF,EAAGC,OAGrB,CACLN,EAAKQ,SAAWT,EAAQC,KAAUA,EAAKK,EAAGL,EAAKW,QAAUX,EAAKY,OAASZ,EAAKa,OAASb,EAAKM,MAG3F,SAASN,EAAMQ,EAAUH,EAAGC,GAO7B,GAAIQ,GAAmBd,EAAKQ,QAG5B,IAAIO,GAAQC,MAAMC,UAAUF,KAG5BP,GAASU,QAAU,OAInBV,GAASF,EAAIA,CAIbE,GAASW,WAAa,WACpBnB,EAAKQ,SAAWM,CAChB,OAAOM,MAMTZ,GAASa,YAAc,KAMvBb,GAASc,YAAc,KAevB,IAAIC,GAASf,EAASe,SAGtB,IAAIC,GAAgB,KAGpB,IAAIC,EAKJ,IAAIC,GAAY,SAASC,EAAUC,EAAQC,EAAMC,EAAUC,GACzD,GAAIC,GAAI,EAAGC,CACX,IAAIJ,SAAeA,KAAS,SAAU,CAEpC,GAAIC,QAAkB,IAAK,WAAaC,IAAQA,EAAKG,cAAiB,GAAGH,EAAKG,QAAUJ,CACxF,KAAKG,EAAQ5B,EAAE8B,KAAKN,GAAOG,EAAIC,EAAMG,OAASJ,IAAK,CACjDJ,EAASF,EAAUC,EAAUC,EAAQK,EAAMD,GAAIH,EAAKI,EAAMD,IAAKD,QAE5D,IAAIF,GAAQL,EAAca,KAAKR,GAAO,CAE3C,IAAKI,EAAQJ,EAAKS,MAAMd,GAAgBQ,EAAIC,EAAMG,OAAQJ,IAAK,CAC7DJ,EAASD,EAASC,EAAQK,EAAMD,GAAIF,EAAUC,QAE3C,CAELH,EAASD,EAASC,EAAQC,EAAMC,EAAUC,GAE5C,MAAOH,GAKTL,GAAOgB,GAAK,SAASV,EAAMC,EAAUI,GACnCd,KAAKoB,QAAUd,EAAUe,EAAOrB,KAAKoB,YAAeX,EAAMC,GACxDI,QAASA,EACTQ,IAAKtB,KACLuB,UAAWlB,GAGb,IAAIA,EAAY,CACd,GAAImB,GAAYxB,KAAKyB,aAAezB,KAAKyB,cACzCD,GAAUnB,EAAWqB,IAAMrB,CAG3BA,GAAWsB,QAAU,MAGvB,MAAO3B,MAMTG,GAAOyB,SAAW,SAASC,EAAKpB,EAAMC,GACpC,IAAKmB,EAAK,MAAO7B,KACjB,IAAI0B,GAAKG,EAAIC,YAAcD,EAAIC,UAAY7C,EAAE8C,SAAS,KACtD,IAAIC,GAAchC,KAAKiC,eAAiBjC,KAAKiC,gBAC7C,IAAIV,GAAYlB,EAAa2B,EAAYN,EAIzC,KAAKH,EAAW,CACdvB,KAAK8B,YAAc9B,KAAK8B,UAAY7C,EAAE8C,SAAS,KAC/CR,GAAYlB,EAAa2B,EAAYN,GAAM,GAAIQ,GAAUlC,KAAM6B,GAIjE,GAAIM,GAAQC,EAAWP,EAAKpB,EAAMC,EAAUV,KAC5CK,OAAkB,EAElB,IAAI8B,EAAO,KAAMA,EAEjB,IAAIZ,EAAUI,QAASJ,EAAUJ,GAAGV,EAAMC,EAE1C,OAAOV,MAIT,IAAIqB,GAAQ,SAASb,EAAQC,EAAMC,EAAU2B,GAC3C,GAAI3B,EAAU,CACZ,GAAI4B,GAAW9B,EAAOC,KAAUD,EAAOC,MACvC,IAAIK,GAAUuB,EAAQvB,QAASQ,EAAMe,EAAQf,IAAKC,EAAYc,EAAQd,SACtE,IAAIA,EAAWA,EAAUgB,OAEzBD,GAASE,MAAM9B,SAAUA,EAAUI,QAASA,EAASQ,IAAKR,GAAWQ,EAAKC,UAAWA,IAEvF,MAAOf,GAKT,IAAI4B,GAAa,SAASP,EAAKpB,EAAMC,EAAUI,GAC7C,IACEe,EAAIV,GAAGV,EAAMC,EAAUI,GACvB,MAAOxB,GACP,MAAOA,IAQXa,GAAOsC,IAAM,SAAShC,EAAMC,EAAUI,GACpC,IAAKd,KAAKoB,QAAS,MAAOpB,KAC1BA,MAAKoB,QAAUd,EAAUoC,EAAQ1C,KAAKoB,QAASX,EAAMC,GACnDI,QAASA,EACTU,UAAWxB,KAAKyB,YAGlB,OAAOzB,MAKTG,GAAOwC,cAAgB,SAASd,EAAKpB,EAAMC,GACzC,GAAIsB,GAAchC,KAAKiC,YACvB,KAAKD,EAAa,MAAOhC,KAEzB,IAAI4C,GAAMf,GAAOA,EAAIC,WAAa7C,EAAE8B,KAAKiB,EACzC,KAAK,GAAIpB,GAAI,EAAGA,EAAIgC,EAAI5B,OAAQJ,IAAK,CACnC,GAAIW,GAAYS,EAAYY,EAAIhC,GAIhC,KAAKW,EAAW,KAEhBA,GAAUM,IAAIY,IAAIhC,EAAMC,EAAUV,KAClC,IAAIuB,EAAUI,QAASJ,EAAUkB,IAAIhC,EAAMC,GAE7C,GAAIzB,EAAE4D,QAAQb,GAAchC,KAAKiC,iBAAoB,EAErD,OAAOjC,MAIT,IAAI0C,GAAS,SAASlC,EAAQC,EAAMC,EAAU2B,GAC5C,IAAK7B,EAAQ,MAEb,IAAIM,GAAUuB,EAAQvB,QAASU,EAAYa,EAAQb,SACnD,IAAIZ,GAAI,EAAGC,CAGX,KAAKJ,IAASK,IAAYJ,EAAU,CAClC,IAAKG,EAAQ5B,EAAE8B,KAAKS,GAAYZ,EAAIC,EAAMG,OAAQJ,IAAK,CACrDY,EAAUX,EAAMD,IAAIkC,UAEtB,OAGFjC,EAAQJ,GAAQA,GAAQxB,EAAE8B,KAAKP,EAC/B,MAAOI,EAAIC,EAAMG,OAAQJ,IAAK,CAC5BH,EAAOI,EAAMD,EACb,IAAI0B,GAAW9B,EAAOC,EAGtB,KAAK6B,EAAU,KAGf,IAAIS,KACJ,KAAK,GAAIC,GAAI,EAAGA,EAAIV,EAAStB,OAAQgC,IAAK,CACxC,GAAIC,GAAUX,EAASU,EACvB,IACEtC,GAAYA,IAAauC,EAAQvC,UAC/BA,IAAauC,EAAQvC,SAASwC,WAC5BpC,GAAWA,IAAYmC,EAAQnC,QACnC,CACAiC,EAAUP,KAAKS,OACV,CACL,GAAI1B,GAAY0B,EAAQ1B,SACxB,IAAIA,EAAWA,EAAUkB,IAAIhC,EAAMC,IAKvC,GAAIqC,EAAU/B,OAAQ,CACpBR,EAAOC,GAAQsC,MACV,OACEvC,GAAOC,IAIlB,MAAOD,GAOTL,GAAOgD,KAAO,SAAS1C,EAAMC,EAAUI,GAErC,GAAIN,GAASF,EAAU8C,KAAa3C,EAAMC,EAAUV,KAAKyC,IAAIY,KAAKrD,MAClE,UAAWS,KAAS,UAAYK,GAAW,KAAMJ,MAAgB,EACjE,OAAOV,MAAKmB,GAAGX,EAAQE,EAAUI,GAInCX,GAAOmD,aAAe,SAASzB,EAAKpB,EAAMC,GAExC,GAAIF,GAASF,EAAU8C,KAAa3C,EAAMC,EAAUV,KAAK2C,cAAcU,KAAKrD,KAAM6B,GAClF,OAAO7B,MAAK4B,SAASC,EAAKrB,GAK5B,IAAI4C,GAAU,SAASG,EAAK9C,EAAMC,EAAU8C,GAC1C,GAAI9C,EAAU,CACZ,GAAIyC,GAAOI,EAAI9C,GAAQxB,EAAEkE,KAAK,WAC5BK,EAAM/C,EAAM0C,EACZzC,GAAS+C,MAAMzD,KAAM0D,YAEvBP,GAAKD,UAAYxC,EAEnB,MAAO6C,GAOTpD,GAAOwD,QAAU,SAASlD,GACxB,IAAKT,KAAKoB,QAAS,MAAOpB,KAE1B,IAAIgB,GAAS4C,KAAKC,IAAI,EAAGH,UAAU1C,OAAS,EAC5C,IAAI8C,GAAOlE,MAAMoB,EACjB,KAAK,GAAIJ,GAAI,EAAGA,EAAII,EAAQJ,IAAKkD,EAAKlD,GAAK8C,UAAU9C,EAAI,EAEzDN,GAAUyD,EAAY/D,KAAKoB,QAASX,MAAW,GAAGqD,EAClD,OAAO9D,MAIT,IAAI+D,GAAa,SAASC,EAAWvD,EAAMC,EAAUoD,GACnD,GAAIE,EAAW,CACb,GAAIxD,GAASwD,EAAUvD,EACvB,IAAIwD,GAAYD,EAAUE,GAC1B,IAAI1D,GAAUyD,EAAWA,EAAYA,EAAUtE,OAC/C,IAAIa,EAAQ2D,EAAc3D,EAAQsD,EAClC,IAAIG,EAAWE,EAAcF,GAAYxD,GAAM2D,OAAON,IAExD,MAAOE,GAMT,IAAIG,GAAgB,SAAS3D,EAAQsD,GACnC,GAAIO,GAAIzD,GAAK,EAAG0D,EAAI9D,EAAOQ,OAAQuD,EAAKT,EAAK,GAAIU,EAAKV,EAAK,GAAIW,EAAKX,EAAK,EACzE,QAAQA,EAAK9C,QACX,IAAK,GAAG,QAASJ,EAAI0D,GAAID,EAAK7D,EAAOI,IAAIF,SAASgE,KAAKL,EAAG/C,IAAM,OAChE,KAAK,GAAG,QAASV,EAAI0D,GAAID,EAAK7D,EAAOI,IAAIF,SAASgE,KAAKL,EAAG/C,IAAKiD,EAAK,OACpE,KAAK,GAAG,QAAS3D,EAAI0D,GAAID,EAAK7D,EAAOI,IAAIF,SAASgE,KAAKL,EAAG/C,IAAKiD,EAAIC,EAAK,OACxE,KAAK,GAAG,QAAS5D,EAAI0D,GAAID,EAAK7D,EAAOI,IAAIF,SAASgE,KAAKL,EAAG/C,IAAKiD,EAAIC,EAAIC,EAAK,OAC5E,SAAS,QAAS7D,EAAI0D,GAAID,EAAK7D,EAAOI,IAAIF,SAAS+C,MAAMY,EAAG/C,IAAKwC,EAAO,SAM5E,IAAI5B,GAAY,SAASyC,EAAU9C,GACjC7B,KAAK0B,GAAKiD,EAAS7C,SACnB9B,MAAK2E,SAAWA,CAChB3E,MAAK6B,IAAMA,CACX7B,MAAK2B,QAAU,IACf3B,MAAKuC,MAAQ,CACbvC,MAAKoB,YAAe,GAGtBc,GAAUrC,UAAUsB,GAAKhB,EAAOgB,EAMhCe,GAAUrC,UAAU4C,IAAM,SAAShC,EAAMC,GACvC,GAAIoC,EACJ,IAAI9C,KAAK2B,QAAS,CAChB3B,KAAKoB,QAAUd,EAAUoC,EAAQ1C,KAAKoB,QAASX,EAAMC,GACnDI,YAAc,GACdU,cAAgB,IAElBsB,IAAW9C,KAAKoB,YACX,CACLpB,KAAKuC,OACLO,GAAU9C,KAAKuC,QAAU,EAE3B,GAAIO,EAAS9C,KAAK8C,UAIpBZ,GAAUrC,UAAUiD,QAAU,iBACrB9C,MAAK2E,SAAS1C,aAAajC,KAAK6B,IAAIC,UAC3C,KAAK9B,KAAK2B,cAAgB3B,MAAK6B,IAAIJ,WAAWzB,KAAK0B,IAIrDvB,GAAOkD,KAASlD,EAAOgB,EACvBhB,GAAOyE,OAASzE,EAAOsC,GAIvBxD,GAAE4F,OAAOzF,EAAUe,EAYnB,IAAI2E,GAAQ1F,EAAS0F,MAAQ,SAASC,EAAY1C,GAChD,GAAI2C,GAAQD,KACZ1C,KAAYA,KACZrC,MAAKiF,cAAcxB,MAAMzD,KAAM0D,UAC/B1D,MAAKkF,IAAMjG,EAAE8C,SAAS/B,KAAKmF,UAC3BnF,MAAK+E,aACL,IAAI1C,EAAQ+C,WAAYpF,KAAKoF,WAAa/C,EAAQ+C,UAClD,IAAI/C,EAAQgD,MAAOL,EAAQhF,KAAKqF,MAAML,EAAO3C,MAC7C,IAAIiD,GAAWrG,EAAEsG,OAAOvF,KAAM,WAC9BgF,GAAQ/F,EAAEqG,SAASrG,EAAE4F,UAAWS,EAAUN,GAAQM,EAClDtF,MAAKwF,IAAIR,EAAO3C,EAChBrC,MAAKyF,UACLzF,MAAK0F,WAAWjC,MAAMzD,KAAM0D,WAI9BzE,GAAE4F,OAAOC,EAAMjF,UAAWM,GAGxBsF,QAAS,KAGTE,gBAAiB,KAIjBC,YAAa,KAIbT,UAAW,IAIXF,cAAe,aAIfS,WAAY,aAGZG,OAAQ,SAASxD,GACf,MAAOpD,GAAE6G,MAAM9F,KAAK+E,aAKtBgB,KAAM,WACJ,MAAO3G,GAAS2G,KAAKtC,MAAMzD,KAAM0D,YAInCsC,IAAK,SAASC,GACZ,MAAOjG,MAAK+E,WAAWkB,IAIzBC,OAAQ,SAASD,GACf,MAAOhH,GAAEiH,OAAOlG,KAAKgG,IAAIC,KAK3BE,IAAK,SAASF,GACZ,MAAOjG,MAAKgG,IAAIC,IAAS,MAI3BG,QAAS,SAASpB,GAChB,QAAS/F,EAAEsB,SAASyE,EAAOhF,MAAMA,KAAK+E,aAMxCS,IAAK,SAASa,EAAKC,EAAKjE,GACtB,GAAIgE,GAAO,KAAM,MAAOrG,KAGxB,IAAIgF,EACJ,UAAWqB,KAAQ,SAAU,CAC3BrB,EAAQqB,CACRhE,GAAUiE,MACL,EACJtB,MAAYqB,GAAOC,EAGtBjE,IAAYA,KAGZ,KAAKrC,KAAKuG,UAAUvB,EAAO3C,GAAU,MAAO,MAG5C,IAAImE,GAAanE,EAAQmE,KACzB,IAAIC,GAAapE,EAAQoE,MACzB,IAAIC,KACJ,IAAIC,GAAa3G,KAAK4G,SACtB5G,MAAK4G,UAAY,IAEjB,KAAKD,EAAU,CACb3G,KAAK6G,oBAAsB5H,EAAE6G,MAAM9F,KAAK+E,WACxC/E,MAAKyF,WAGP,GAAIqB,GAAU9G,KAAK+E,UACnB,IAAIU,GAAUzF,KAAKyF,OACnB,IAAIsB,GAAU/G,KAAK6G,mBAGnB,KAAK,GAAIZ,KAAQjB,GAAO,CACtBsB,EAAMtB,EAAMiB,EACZ,KAAKhH,EAAE+H,QAAQF,EAAQb,GAAOK,GAAMI,EAAQlE,KAAKyD,EACjD,KAAKhH,EAAE+H,QAAQD,EAAKd,GAAOK,GAAM,CAC/Bb,EAAQQ,GAAQK,MACX,OACEb,GAAQQ,GAEjBO,QAAeM,GAAQb,GAAQa,EAAQb,GAAQK,EAIjD,GAAItG,KAAK4F,cAAeZ,GAAOhF,KAAK0B,GAAK1B,KAAKgG,IAAIhG,KAAK4F,YAGvD,KAAKa,EAAQ,CACX,GAAIC,EAAQ1F,OAAQhB,KAAKiH,SAAW5E,CACpC,KAAK,GAAIzB,GAAI,EAAGA,EAAI8F,EAAQ1F,OAAQJ,IAAK,CACvCZ,KAAK2D,QAAQ,UAAY+C,EAAQ9F,GAAIZ,KAAM8G,EAAQJ,EAAQ9F,IAAKyB,IAMpE,GAAIsE,EAAU,MAAO3G,KACrB,KAAKyG,EAAQ,CACX,MAAOzG,KAAKiH,SAAU,CACpB5E,EAAUrC,KAAKiH,QACfjH,MAAKiH,SAAW,KAChBjH,MAAK2D,QAAQ,SAAU3D,KAAMqC,IAGjCrC,KAAKiH,SAAW,KAChBjH,MAAK4G,UAAY,KACjB,OAAO5G,OAKTwG,MAAO,SAASP,EAAM5D,GACpB,MAAOrC,MAAKwF,IAAIS,MAAW,GAAGhH,EAAE4F,UAAWxC,GAAUmE,MAAO,SAI9DU,MAAO,SAAS7E,GACd,GAAI2C,KACJ,KAAK,GAAIqB,KAAOrG,MAAK+E,WAAYC,EAAMqB,OAAY,EACnD,OAAOrG,MAAKwF,IAAIR,EAAO/F,EAAE4F,UAAWxC,GAAUmE,MAAO,SAKvDW,WAAY,SAASlB,GACnB,GAAIA,GAAQ,KAAM,OAAQhH,EAAE4D,QAAQ7C,KAAKyF,QACzC,OAAOxG,GAAEkH,IAAInG,KAAKyF,QAASQ,IAS7BmB,kBAAmB,SAASC,GAC1B,IAAKA,EAAM,MAAOrH,MAAKmH,aAAelI,EAAE6G,MAAM9F,KAAKyF,SAAW,KAC9D,IAAI6B,GAAMtH,KAAK4G,UAAY5G,KAAK6G,oBAAsB7G,KAAK+E,UAC3D,IAAIU,KACJ,IAAI0B,EACJ,KAAK,GAAIlB,KAAQoB,GAAM,CACrB,GAAIf,GAAMe,EAAKpB,EACf,IAAIhH,EAAE+H,QAAQM,EAAIrB,GAAOK,GAAM,QAC/Bb,GAAQQ,GAAQK,CAChBa,GAAa,KAEf,MAAOA,GAAa1B,EAAU,OAKhC8B,SAAU,SAAStB,GACjB,GAAIA,GAAQ,OAASjG,KAAK6G,oBAAqB,MAAO,KACtD,OAAO7G,MAAK6G,oBAAoBZ,IAKlCuB,mBAAoB,WAClB,MAAOvI,GAAE6G,MAAM9F,KAAK6G,sBAKtBY,MAAO,SAASpF,GACdA,EAAUpD,EAAE4F,QAAQQ,MAAO,MAAOhD,EAClC,IAAIqF,GAAQ1H,IACZ,IAAI2H,GAAUtF,EAAQsF,OACtBtF,GAAQsF,QAAU,SAASC,GACzB,GAAIC,GAAcxF,EAAQgD,MAAQqC,EAAMrC,MAAMuC,EAAMvF,GAAWuF,CAC/D,KAAKF,EAAMlC,IAAIqC,EAAaxF,GAAU,MAAO,MAC7C,IAAIsF,EAASA,EAAQjD,KAAKrC,EAAQvB,QAAS4G,EAAOE,EAAMvF,EACxDqF,GAAM/D,QAAQ,OAAQ+D,EAAOE,EAAMvF,GAErCyF,GAAU9H,KAAMqC,EAChB,OAAOrC,MAAK+F,KAAK,OAAQ/F,KAAMqC,IAMjC0F,KAAM,SAAS1B,EAAKC,EAAKjE,GAEvB,GAAI2C,EACJ,IAAIqB,GAAO,YAAeA,KAAQ,SAAU,CAC1CrB,EAAQqB,CACRhE,GAAUiE,MACL,EACJtB,MAAYqB,GAAOC,EAGtBjE,EAAUpD,EAAE4F,QAAQmD,SAAU,KAAM3C,MAAO,MAAOhD,EAClD,IAAI4F,GAAO5F,EAAQ4F,IAKnB,IAAIjD,IAAUiD,EAAM,CAClB,IAAKjI,KAAKwF,IAAIR,EAAO3C,GAAU,MAAO,WACjC,KAAKrC,KAAKuG,UAAUvB,EAAO3C,GAAU,CAC1C,MAAO,OAKT,GAAIqF,GAAQ1H,IACZ,IAAI2H,GAAUtF,EAAQsF,OACtB,IAAI5C,GAAa/E,KAAK+E,UACtB1C,GAAQsF,QAAU,SAASC,GAEzBF,EAAM3C,WAAaA,CACnB,IAAI8C,GAAcxF,EAAQgD,MAAQqC,EAAMrC,MAAMuC,EAAMvF,GAAWuF,CAC/D,IAAIK,EAAMJ,EAAc5I,EAAE4F,UAAWG,EAAO6C,EAC5C,IAAIA,IAAgBH,EAAMlC,IAAIqC,EAAaxF,GAAU,MAAO,MAC5D,IAAIsF,EAASA,EAAQjD,KAAKrC,EAAQvB,QAAS4G,EAAOE,EAAMvF,EACxDqF,GAAM/D,QAAQ,OAAQ+D,EAAOE,EAAMvF,GAErCyF,GAAU9H,KAAMqC,EAGhB,IAAI2C,GAASiD,EAAMjI,KAAK+E,WAAa9F,EAAE4F,UAAWE,EAAYC,EAE9D,IAAIkD,GAASlI,KAAKmI,QAAU,SAAW9F,EAAQ+F,MAAQ,QAAU,QACjE,IAAIF,IAAW,UAAY7F,EAAQ2C,MAAO3C,EAAQ2C,MAAQA,CAC1D,IAAIqD,GAAMrI,KAAK+F,KAAKmC,EAAQlI,KAAMqC,EAGlCrC,MAAK+E,WAAaA,CAElB,OAAOsD,IAMTC,QAAS,SAASjG,GAChBA,EAAUA,EAAUpD,EAAE6G,MAAMzD,KAC5B,IAAIqF,GAAQ1H,IACZ,IAAI2H,GAAUtF,EAAQsF,OACtB,IAAIM,GAAO5F,EAAQ4F,IAEnB,IAAIK,GAAU,WACZZ,EAAM/E,eACN+E,GAAM/D,QAAQ,UAAW+D,EAAOA,EAAMtC,WAAY/C,GAGpDA,GAAQsF,QAAU,SAASC,GACzB,GAAIK,EAAMK,GACV,IAAIX,EAASA,EAAQjD,KAAKrC,EAAQvB,QAAS4G,EAAOE,EAAMvF,EACxD,KAAKqF,EAAMS,QAAST,EAAM/D,QAAQ,OAAQ+D,EAAOE,EAAMvF,GAGzD,IAAIgG,GAAM,KACV,IAAIrI,KAAKmI,QAAS,CAChBlJ,EAAEsJ,MAAMlG,EAAQsF,aACX,CACLG,EAAU9H,KAAMqC,EAChBgG,GAAMrI,KAAK+F,KAAK,SAAU/F,KAAMqC,GAElC,IAAK4F,EAAMK,GACX,OAAOD,IAMTG,IAAK,WACH,GAAIC,GACFxJ,EAAEsG,OAAOvF,KAAM,YACff,EAAEsG,OAAOvF,KAAKoF,WAAY,QAC1BsD,GACF,IAAI1I,KAAKmI,QAAS,MAAOM,EACzB,IAAI/G,GAAK1B,KAAKgG,IAAIhG,KAAK4F,YACvB,OAAO6C,GAAKE,QAAQ,SAAU,OAASC,mBAAmBlH,IAK5D2D,MAAO,SAASuC,EAAMvF,GACpB,MAAOuF,IAIT9B,MAAO,WACL,MAAO,IAAI9F,MAAK6I,YAAY7I,KAAK+E,aAInCoD,MAAO,WACL,OAAQnI,KAAKmG,IAAInG,KAAK4F,cAIxBkD,QAAS,SAASzG,GAChB,MAAOrC,MAAKuG,aAActH,EAAE4F,UAAWxC,GAAU2F,SAAU,SAK7DzB,UAAW,SAASvB,EAAO3C,GACzB,IAAKA,EAAQ2F,WAAahI,KAAKgI,SAAU,MAAO,KAChDhD,GAAQ/F,EAAE4F,UAAW7E,KAAK+E,WAAYC,EACtC,IAAI7C,GAAQnC,KAAK2F,gBAAkB3F,KAAKgI,SAAShD,EAAO3C,IAAY,IACpE,KAAKF,EAAO,MAAO,KACnBnC,MAAK2D,QAAQ,UAAW3D,KAAMmC,EAAOlD,EAAE4F,OAAOxC,GAAUsD,gBAAiBxD,IACzE,OAAO,SAkBX,IAAI4G,GAAa3J,EAAS2J,WAAa,SAASC,EAAQ3G,GACtDA,IAAYA,KACZrC,MAAKiF,cAAcxB,MAAMzD,KAAM0D,UAC/B,IAAIrB,EAAQqF,MAAO1H,KAAK0H,MAAQrF,EAAQqF,KACxC,IAAIrF,EAAQ4G,iBAAoB,GAAGjJ,KAAKiJ,WAAa5G,EAAQ4G,UAC7DjJ,MAAKkJ,QACLlJ,MAAK0F,WAAWjC,MAAMzD,KAAM0D,UAC5B,IAAIsF,EAAQhJ,KAAKmJ,MAAMH,EAAQ/J,EAAE4F,QAAQ4B,OAAQ,MAAOpE,IAI1D,IAAI+G,IAAcC,IAAK,KAAMC,OAAQ,KAAMC,MAAO,KAClD,IAAIC,IAAcH,IAAK,KAAMC,OAAQ,MAGrC,IAAIG,GAAS,SAASC,EAAOC,EAAQC,GACnCA,EAAKhG,KAAKiG,IAAIjG,KAAKC,IAAI+F,EAAI,GAAIF,EAAM1I,OACrC,IAAI8I,GAAOlK,MAAM8J,EAAM1I,OAAS4I,EAChC,IAAI5I,GAAS2I,EAAO3I,MACpB,IAAIJ,EACJ,KAAKA,EAAI,EAAGA,EAAIkJ,EAAK9I,OAAQJ,IAAKkJ,EAAKlJ,GAAK8I,EAAM9I,EAAIgJ,EACtD,KAAKhJ,EAAI,EAAGA,EAAII,EAAQJ,IAAK8I,EAAM9I,EAAIgJ,GAAMD,EAAO/I,EACpD,KAAKA,EAAI,EAAGA,EAAIkJ,EAAK9I,OAAQJ,IAAK8I,EAAM9I,EAAII,EAAS4I,GAAME,EAAKlJ,GAIlE3B,GAAE4F,OAAOkE,EAAWlJ,UAAWM,GAI7BuH,MAAO5C,EAKPG,cAAe,aAIfS,WAAY,aAIZG,OAAQ,SAASxD,GACf,MAAOrC,MAAKuD,IAAI,SAASmE,GAAS,MAAOA,GAAM7B,OAAOxD,MAIxD0D,KAAM,WACJ,MAAO3G,GAAS2G,KAAKtC,MAAMzD,KAAM0D,YAMnC2F,IAAK,SAASL,EAAQ3G,GACpB,MAAOrC,MAAKwF,IAAIwD,EAAQ/J,EAAE4F,QAAQ0E,MAAO,OAAQlH,EAASmH,KAI5DF,OAAQ,SAASN,EAAQ3G,GACvBA,EAAUpD,EAAE4F,UAAWxC,EACvB,IAAI0H,IAAY9K,EAAE+K,QAAQhB,EAC1BA,GAASe,GAAYf,GAAUA,EAAOrJ,OACtC,IAAIsK,GAAUjK,KAAKkK,cAAclB,EAAQ3G,EACzC,KAAKA,EAAQoE,QAAUwD,EAAQjJ,OAAQ,CACrCqB,EAAQqE,SAAWyD,SAAWC,UAAYH,QAASA,EACnDjK,MAAK2D,QAAQ,SAAU3D,KAAMqC,GAE/B,MAAO0H,GAAWE,EAAQ,GAAKA,GAOjCzE,IAAK,SAASwD,EAAQ3G,GACpB,GAAI2G,GAAU,KAAM,MAEpB3G,GAAUpD,EAAE4F,UAAWuE,EAAY/G,EACnC,IAAIA,EAAQgD,QAAUrF,KAAKqK,SAASrB,GAAS,CAC3CA,EAAShJ,KAAKqF,MAAM2D,EAAQ3G,OAG9B,GAAI0H,IAAY9K,EAAE+K,QAAQhB,EAC1BA,GAASe,GAAYf,GAAUA,EAAOrJ,OAEtC,IAAIiK,GAAKvH,EAAQuH,EACjB,IAAIA,GAAM,KAAMA,GAAMA,CACtB,IAAIA,EAAK5J,KAAKgB,OAAQ4I,EAAK5J,KAAKgB,MAChC,IAAI4I,EAAK,EAAGA,GAAM5J,KAAKgB,OAAS,CAEhC,IAAIwE,KACJ,IAAI8E,KACJ,IAAIC,KACJ,IAAIC,KACJ,IAAIC,KAEJ,IAAIpB,GAAMhH,EAAQgH,GAClB,IAAIE,GAAQlH,EAAQkH,KACpB,IAAID,GAASjH,EAAQiH,MAErB,IAAIoB,GAAO,KACX,IAAIC,GAAW3K,KAAKiJ,YAAcW,GAAM,MAAQvH,EAAQqI,OAAS,KACjE,IAAIE,GAAW3L,EAAE4L,SAAS7K,KAAKiJ,YAAcjJ,KAAKiJ,WAAa,IAI/D,IAAIvB,GAAO9G,CACX,KAAKA,EAAI,EAAGA,EAAIoI,EAAOhI,OAAQJ,IAAK,CAClC8G,EAAQsB,EAAOpI,EAIf,IAAIkK,GAAW9K,KAAKgG,IAAI0B,EACxB,IAAIoD,EAAU,CACZ,GAAIvB,GAAS7B,IAAUoD,EAAU,CAC/B,GAAI9F,GAAQhF,KAAKqK,SAAS3C,GAASA,EAAM3C,WAAa2C,CACtD,IAAIrF,EAAQgD,MAAOL,EAAQ8F,EAASzF,MAAML,EAAO3C,EACjDyI,GAAStF,IAAIR,EAAO3C,EACpBkI,GAAQ/H,KAAKsI,EACb,IAAIH,IAAaD,EAAMA,EAAOI,EAAS3D,WAAWyD,GAEpD,IAAKH,EAASK,EAAS5F,KAAM,CAC3BuF,EAASK,EAAS5F,KAAO,IACzBM,GAAIhD,KAAKsI,GAEX9B,EAAOpI,GAAKkK,MAGP,IAAIzB,EAAK,CACd3B,EAAQsB,EAAOpI,GAAKZ,KAAK+K,cAAcrD,EAAOrF,EAC9C,IAAIqF,EAAO,CACT4C,EAAM9H,KAAKkF,EACX1H,MAAKgL,cAActD,EAAOrF,EAC1BoI,GAAS/C,EAAMxC,KAAO,IACtBM,GAAIhD,KAAKkF,KAMf,GAAI4B,EAAQ,CACV,IAAK1I,EAAI,EAAGA,EAAIZ,KAAKgB,OAAQJ,IAAK,CAChC8G,EAAQ1H,KAAKgJ,OAAOpI,EACpB,KAAK6J,EAAS/C,EAAMxC,KAAMsF,EAAShI,KAAKkF,GAE1C,GAAI8C,EAASxJ,OAAQhB,KAAKkK,cAAcM,EAAUnI,GAIpD,GAAI4I,GAAe,KACnB,IAAItC,IAAWgC,GAAYtB,GAAOC,CAClC,IAAI9D,EAAIxE,QAAU2H,EAAS,CACzBsC,EAAejL,KAAKgB,SAAWwE,EAAIxE,QAAU/B,EAAEiM,KAAKlL,KAAKgJ,OAAQ,SAASmC,EAAGC,GAC3E,MAAOD,KAAM3F,EAAI4F,IAEnBpL,MAAKgJ,OAAOhI,OAAS,CACrByI,GAAOzJ,KAAKgJ,OAAQxD,EAAK,EACzBxF,MAAKgB,OAAShB,KAAKgJ,OAAOhI,WACrB,IAAIsJ,EAAMtJ,OAAQ,CACvB,GAAI2J,EAAUD,EAAO,IACrBjB,GAAOzJ,KAAKgJ,OAAQsB,EAAOV,GAAM,KAAO5J,KAAKgB,OAAS4I,EACtD5J,MAAKgB,OAAShB,KAAKgJ,OAAOhI,OAI5B,GAAI0J,EAAM1K,KAAK0K,MAAMjE,OAAQ,MAG7B,KAAKpE,EAAQoE,OAAQ,CACnB,IAAK7F,EAAI,EAAGA,EAAI0J,EAAMtJ,OAAQJ,IAAK,CACjC,GAAIgJ,GAAM,KAAMvH,EAAQ+I,MAAQxB,EAAKhJ,CACrC8G,GAAQ4C,EAAM1J,EACd8G,GAAM/D,QAAQ,MAAO+D,EAAO1H,KAAMqC,GAEpC,GAAIqI,GAAQO,EAAcjL,KAAK2D,QAAQ,OAAQ3D,KAAMqC,EACrD,IAAIiI,EAAMtJ,QAAUwJ,EAASxJ,QAAUuJ,EAAQvJ,OAAQ,CACrDqB,EAAQqE,SACNyD,MAAOG,EACPL,QAASO,EACTJ,OAAQG,EAEVvK,MAAK2D,QAAQ,SAAU3D,KAAMqC,IAKjC,MAAO0H,GAAWf,EAAO,GAAKA,GAOhCG,MAAO,SAASH,EAAQ3G,GACtBA,EAAUA,EAAUpD,EAAE6G,MAAMzD,KAC5B,KAAK,GAAIzB,GAAI,EAAGA,EAAIZ,KAAKgJ,OAAOhI,OAAQJ,IAAK,CAC3CZ,KAAKqL,iBAAiBrL,KAAKgJ,OAAOpI,GAAIyB,GAExCA,EAAQiJ,eAAiBtL,KAAKgJ,MAC9BhJ,MAAKkJ,QACLF,GAAShJ,KAAKqJ,IAAIL,EAAQ/J,EAAE4F,QAAQ4B,OAAQ,MAAOpE,GACnD,KAAKA,EAAQoE,OAAQzG,KAAK2D,QAAQ,QAAS3D,KAAMqC,EACjD,OAAO2G,IAITxG,KAAM,SAASkF,EAAOrF,GACpB,MAAOrC,MAAKqJ,IAAI3B,EAAOzI,EAAE4F,QAAQ+E,GAAI5J,KAAKgB,QAASqB,KAIrDkJ,IAAK,SAASlJ,GACZ,GAAIqF,GAAQ1H,KAAK4J,GAAG5J,KAAKgB,OAAS,EAClC,OAAOhB,MAAKsJ,OAAO5B,EAAOrF,IAI5BmJ,QAAS,SAAS9D,EAAOrF,GACvB,MAAOrC,MAAKqJ,IAAI3B,EAAOzI,EAAE4F,QAAQ+E,GAAI,GAAIvH,KAI3CoJ,MAAO,SAASpJ,GACd,GAAIqF,GAAQ1H,KAAK4J,GAAG,EACpB,OAAO5J,MAAKsJ,OAAO5B,EAAOrF,IAI5B1C,MAAO,WACL,MAAOA,GAAM8D,MAAMzD,KAAKgJ,OAAQtF,YAKlCsC,IAAK,SAASnE,GACZ,GAAIA,GAAO,KAAM,WAAY,EAC7B,OAAO7B,MAAK0L,MAAM7J,IAChB7B,KAAK0L,MAAM1L,KAAK2L,QAAQ3L,KAAKqK,SAASxI,GAAOA,EAAIkD,WAAalD,KAC9DA,EAAIqD,KAAOlF,KAAK0L,MAAM7J,EAAIqD,MAI9BiB,IAAK,SAAStE,GACZ,MAAO7B,MAAKgG,IAAInE,IAAQ,MAI1B+H,GAAI,SAASwB,GACX,GAAIA,EAAQ,EAAGA,GAASpL,KAAKgB,MAC7B,OAAOhB,MAAKgJ,OAAOoC,IAKrBQ,MAAO,SAAS5G,EAAO6G,GACrB,MAAO7L,MAAK6L,EAAQ,OAAS,UAAU7G,IAKzC8G,UAAW,SAAS9G,GAClB,MAAOhF,MAAK4L,MAAM5G,EAAO,OAM3B0F,KAAM,SAASrI,GACb,GAAI4G,GAAajJ,KAAKiJ,UACtB,KAAKA,EAAY,KAAM,IAAI8C,OAAM,yCACjC1J,KAAYA,KAEZ,IAAIrB,GAASiI,EAAWjI,MACxB,IAAI/B,EAAE+M,WAAW/C,GAAaA,EAAaA,EAAW5F,KAAKrD,KAG3D,IAAIgB,IAAW,GAAK/B,EAAE4L,SAAS5B,GAAa,CAC1CjJ,KAAKgJ,OAAShJ,KAAKiM,OAAOhD,OACrB,CACLjJ,KAAKgJ,OAAO0B,KAAKzB,GAEnB,IAAK5G,EAAQoE,OAAQzG,KAAK2D,QAAQ,OAAQ3D,KAAMqC,EAChD,OAAOrC,OAITkM,MAAO,SAASjG,GACd,MAAOjG,MAAKuD,IAAI0C,EAAO,KAMzBwB,MAAO,SAASpF,GACdA,EAAUpD,EAAE4F,QAAQQ,MAAO,MAAOhD,EAClC,IAAIsF,GAAUtF,EAAQsF,OACtB,IAAIvC,GAAapF,IACjBqC,GAAQsF,QAAU,SAASC,GACzB,GAAIM,GAAS7F,EAAQ8G,MAAQ,QAAU,KACvC/D,GAAW8C,GAAQN,EAAMvF,EACzB,IAAIsF,EAASA,EAAQjD,KAAKrC,EAAQvB,QAASsE,EAAYwC,EAAMvF,EAC7D+C,GAAWzB,QAAQ,OAAQyB,EAAYwC,EAAMvF,GAE/CyF,GAAU9H,KAAMqC,EAChB,OAAOrC,MAAK+F,KAAK,OAAQ/F,KAAMqC,IAMjC8J,OAAQ,SAASzE,EAAOrF,GACtBA,EAAUA,EAAUpD,EAAE6G,MAAMzD,KAC5B,IAAI4F,GAAO5F,EAAQ4F,IACnBP,GAAQ1H,KAAK+K,cAAcrD,EAAOrF,EAClC,KAAKqF,EAAO,MAAO,MACnB,KAAKO,EAAMjI,KAAKqJ,IAAI3B,EAAOrF,EAC3B,IAAI+C,GAAapF,IACjB,IAAI2H,GAAUtF,EAAQsF,OACtBtF,GAAQsF,QAAU,SAASwD,EAAGvD,EAAMwE,GAClC,GAAInE,EAAM7C,EAAWiE,IAAI8B,EAAGiB,EAC5B,IAAIzE,EAASA,EAAQjD,KAAK0H,EAAatL,QAASqK,EAAGvD,EAAMwE,GAE3D1E,GAAMK,KAAK,KAAM1F,EACjB,OAAOqF,IAKTrC,MAAO,SAASuC,EAAMvF,GACpB,MAAOuF,IAIT9B,MAAO,WACL,MAAO,IAAI9F,MAAK6I,YAAY7I,KAAKgJ,QAC/BtB,MAAO1H,KAAK0H,MACZuB,WAAYjJ,KAAKiJ,cAKrB0C,QAAS,SAAS3G,GAChB,MAAOA,GAAMhF,KAAK0H,MAAM7H,UAAU+F,aAAe,OAInDyG,OAAQ,WACN,MAAO,IAAIC,GAAmBtM,KAAMuM,IAItCxL,KAAM,WACJ,MAAO,IAAIuL,GAAmBtM,KAAMwM,IAItCC,QAAS,WACP,MAAO,IAAIH,GAAmBtM,KAAM0M,IAKtCxD,OAAQ,WACNlJ,KAAKgB,OAAS,CACdhB,MAAKgJ,SACLhJ,MAAK0L,UAKPX,cAAe,SAAS/F,EAAO3C,GAC7B,GAAIrC,KAAKqK,SAASrF,GAAQ,CACxB,IAAKA,EAAMI,WAAYJ,EAAMI,WAAapF,IAC1C,OAAOgF,GAET3C,EAAUA,EAAUpD,EAAE6G,MAAMzD,KAC5BA,GAAQ+C,WAAapF,IACrB,IAAI0H,GAAQ,GAAI1H,MAAK0H,MAAM1C,EAAO3C,EAClC,KAAKqF,EAAM/B,gBAAiB,MAAO+B,EACnC1H,MAAK2D,QAAQ,UAAW3D,KAAM0H,EAAM/B,gBAAiBtD,EACrD,OAAO,QAIT6H,cAAe,SAASlB,EAAQ3G,GAC9B,GAAI4H,KACJ,KAAK,GAAIrJ,GAAI,EAAGA,EAAIoI,EAAOhI,OAAQJ,IAAK,CACtC,GAAI8G,GAAQ1H,KAAKgG,IAAIgD,EAAOpI,GAC5B,KAAK8G,EAAO,QAEZ,IAAI0D,GAAQpL,KAAK2M,QAAQjF,EACzB1H,MAAKgJ,OAAOS,OAAO2B,EAAO,EAC1BpL,MAAKgB,eAIEhB,MAAK0L,MAAMhE,EAAMxC,IACxB,IAAIxD,GAAK1B,KAAK2L,QAAQjE,EAAM3C,WAC5B,IAAIrD,GAAM,WAAa1B,MAAK0L,MAAMhK,EAElC,KAAKW,EAAQoE,OAAQ,CACnBpE,EAAQ+I,MAAQA,CAChB1D,GAAM/D,QAAQ,SAAU+D,EAAO1H,KAAMqC,GAGvC4H,EAAQzH,KAAKkF,EACb1H,MAAKqL,iBAAiB3D,EAAOrF,GAE/B,MAAO4H,IAKTI,SAAU,SAAS3C,GACjB,MAAOA,aAAiB5C,IAI1BkG,cAAe,SAAStD,EAAOrF,GAC7BrC,KAAK0L,MAAMhE,EAAMxC,KAAOwC,CACxB,IAAIhG,GAAK1B,KAAK2L,QAAQjE,EAAM3C,WAC5B,IAAIrD,GAAM,KAAM1B,KAAK0L,MAAMhK,GAAMgG,CACjCA,GAAMvG,GAAG,MAAOnB,KAAK4M,cAAe5M,OAItCqL,iBAAkB,SAAS3D,EAAOrF,SACzBrC,MAAK0L,MAAMhE,EAAMxC,IACxB,IAAIxD,GAAK1B,KAAK2L,QAAQjE,EAAM3C,WAC5B,IAAIrD,GAAM,WAAa1B,MAAK0L,MAAMhK,EAClC,IAAI1B,OAAS0H,EAAMtC,iBAAmBsC,GAAMtC,UAC5CsC,GAAMjF,IAAI,MAAOzC,KAAK4M,cAAe5M,OAOvC4M,cAAe,SAASC,EAAOnF,EAAOtC,EAAY/C,GAChD,GAAIqF,EAAO,CACT,IAAKmF,IAAU,OAASA,IAAU,WAAazH,IAAepF,KAAM,MACpE,IAAI6M,IAAU,UAAW7M,KAAKsJ,OAAO5B,EAAOrF,EAC5C,IAAIwK,IAAU,SAAU,CACtB,GAAIC,GAAS9M,KAAK2L,QAAQjE,EAAMF,qBAChC,IAAI9F,GAAK1B,KAAK2L,QAAQjE,EAAM3C,WAC5B,IAAI+H,IAAWpL,EAAI,CACjB,GAAIoL,GAAU,WAAa9M,MAAK0L,MAAMoB,EACtC,IAAIpL,GAAM,KAAM1B,KAAK0L,MAAMhK,GAAMgG,IAIvC1H,KAAK2D,QAAQF,MAAMzD,KAAM0D,aAQ7B,IAAIqJ,SAAoBC,UAAW,YAAcA,OAAOC,QACxD,IAAIF,EAAY,CACdhE,EAAWlJ,UAAUkN,GAAchE,EAAWlJ,UAAUwM,OAU1D,GAAIC,GAAqB,SAASlH,EAAY8H,GAC5ClN,KAAKmN,YAAc/H,CACnBpF,MAAKoN,MAAQF,CACblN,MAAKqN,OAAS,EAMhB,IAAId,GAAkB,CACtB,IAAIC,GAAgB,CACpB,IAAIE,GAAsB,CAG1B,IAAIK,EAAY,CACdT,EAAmBzM,UAAUkN,GAAc,WACzC,MAAO/M,OAIXsM,EAAmBzM,UAAUyN,KAAO,WAClC,GAAItN,KAAKmN,YAAa,CAGpB,GAAInN,KAAKqN,OAASrN,KAAKmN,YAAYnM,OAAQ,CACzC,GAAI0G,GAAQ1H,KAAKmN,YAAYvD,GAAG5J,KAAKqN,OACrCrN,MAAKqN,QAGL,IAAIE,EACJ,IAAIvN,KAAKoN,QAAUb,EAAiB,CAClCgB,EAAQ7F,MACH,CACL,GAAIhG,GAAK1B,KAAKmN,YAAYxB,QAAQjE,EAAM3C,WACxC,IAAI/E,KAAKoN,QAAUZ,EAAe,CAChCe,EAAQ7L,MACH,CACL6L,GAAS7L,EAAIgG,IAGjB,OAAQ6F,MAAOA,EAAOC,KAAM,OAK9BxN,KAAKmN,gBAAmB,GAG1B,OAAQI,UAAY,GAAGC,KAAM,MAgB/B,IAAIC,GAAOrO,EAASqO,KAAO,SAASpL,GAClCrC,KAAKkF,IAAMjG,EAAE8C,SAAS,OACtB/B,MAAKiF,cAAcxB,MAAMzD,KAAM0D,UAC/BzE,GAAE4F,OAAO7E,KAAMf,EAAEyO,KAAKrL,EAASsL,GAC/B3N,MAAK4N,gBACL5N,MAAK0F,WAAWjC,MAAMzD,KAAM0D,WAI9B,IAAImK,GAAwB,gBAG5B,IAAIF,IAAe,QAAS,aAAc,KAAM,KAAM,aAAc,YAAa,UAAW,SAG5F1O,GAAE4F,OAAO4I,EAAK5N,UAAWM,GAGvB2N,QAAS,MAIT5O,EAAG,SAAS6O,GACV,MAAO/N,MAAKgO,IAAIC,KAAKF,IAKvB9I,cAAe,aAIfS,WAAY,aAKZwI,OAAQ,WACN,MAAOlO,OAKTsJ,OAAQ,WACNtJ,KAAKmO,gBACLnO,MAAK2C,eACL,OAAO3C,OAMTmO,eAAgB,WACdnO,KAAKgO,IAAI1E,UAKX8E,WAAY,SAASC,GACnBrO,KAAKsO,kBACLtO,MAAKuO,YAAYF,EACjBrO,MAAKwO,gBACL,OAAOxO,OAQTuO,YAAa,SAASE,GACpBzO,KAAKgO,IAAMS,YAAcrP,GAASF,EAAIuP,EAAKrP,EAASF,EAAEuP,EACtDzO,MAAKyO,GAAKzO,KAAKgO,IAAI,IAgBrBQ,eAAgB,SAAShO,GACvBA,IAAWA,EAASvB,EAAEsG,OAAOvF,KAAM,UACnC,KAAKQ,EAAQ,MAAOR,KACpBA,MAAKsO,kBACL,KAAK,GAAIjI,KAAO7F,GAAQ,CACtB,GAAI0H,GAAS1H,EAAO6F,EACpB,KAAKpH,EAAE+M,WAAW9D,GAASA,EAASlI,KAAKkI,EACzC,KAAKA,EAAQ,QACb,IAAIwG,GAAQrI,EAAIqI,MAAMb,EACtB7N,MAAK2O,SAASD,EAAM,GAAIA,EAAM,GAAIxG,EAAO7E,KAAKrD,OAEhD,MAAOA,OAMT2O,SAAU,SAASC,EAAWb,EAAUpJ,GACtC3E,KAAKgO,IAAI7M,GAAGyN,EAAY,kBAAoB5O,KAAKkF,IAAK6I,EAAUpJ,EAChE,OAAO3E,OAMTsO,iBAAkB,WAChB,GAAItO,KAAKgO,IAAKhO,KAAKgO,IAAIvL,IAAI,kBAAoBzC,KAAKkF,IACpD,OAAOlF,OAKT6O,WAAY,SAASD,EAAWb,EAAUpJ,GACxC3E,KAAKgO,IAAIvL,IAAImM,EAAY,kBAAoB5O,KAAKkF,IAAK6I,EAAUpJ,EACjE,OAAO3E,OAKT8O,eAAgB,SAAShB,GACvB,MAAOiB,UAASC,cAAclB,IAOhCF,eAAgB,WACd,IAAK5N,KAAKyO,GAAI,CACZ,GAAIzJ,GAAQ/F,EAAE4F,UAAW5F,EAAEsG,OAAOvF,KAAM,cACxC,IAAIA,KAAK0B,GAAIsD,EAAMtD,GAAKzC,EAAEsG,OAAOvF,KAAM,KACvC,IAAIA,KAAKiP,UAAWjK,EAAM,SAAW/F,EAAEsG,OAAOvF,KAAM,YACpDA,MAAKoO,WAAWpO,KAAK8O,eAAe7P,EAAEsG,OAAOvF,KAAM,YACnDA,MAAKkP,eAAelK,OACf,CACLhF,KAAKoO,WAAWnP,EAAEsG,OAAOvF,KAAM,SAMnCkP,eAAgB,SAASnK,GACvB/E,KAAKgO,IAAI/H,KAAKlB,KAYlB,IAAIoK,GAAY,SAAS1G,EAAMzH,EAAQkH,EAAQkH,GAC7C,OAAQpO,GACN,IAAK,GAAG,MAAO,YACb,MAAOyH,GAAKP,GAAQlI,KAAKoP,IAE3B,KAAK,GAAG,MAAO,UAAS7B,GACtB,MAAO9E,GAAKP,GAAQlI,KAAKoP,GAAY7B,GAEvC,KAAK,GAAG,MAAO,UAAShN,EAAUO,GAChC,MAAO2H,GAAKP,GAAQlI,KAAKoP,GAAYC,EAAG9O,EAAUP,MAAOc,GAE3D,KAAK,GAAG,MAAO,UAASP,EAAU+O,EAAYxO,GAC5C,MAAO2H,GAAKP,GAAQlI,KAAKoP,GAAYC,EAAG9O,EAAUP,MAAOsP,EAAYxO,GAEvE,SAAS,MAAO,YACd,GAAIgD,GAAOnE,EAAM+E,KAAKhB,UACtBI,GAAK0H,QAAQxL,KAAKoP,GAClB,OAAO3G,GAAKP,GAAQzE,MAAMgF,EAAM3E,KAKtC,IAAIyL,GAAuB,SAASC,EAAO/G,EAAMgH,EAASL,GACxDnQ,EAAEyQ,KAAKD,EAAS,SAASzO,EAAQkH,GAC/B,GAAIO,EAAKP,GAASsH,EAAM3P,UAAUqI,GAAUiH,EAAU1G,EAAMzH,EAAQkH,EAAQkH,KAKhF,IAAIC,GAAK,SAAS9O,EAAUoP,GAC1B,GAAI1Q,EAAE+M,WAAWzL,GAAW,MAAOA,EACnC,IAAItB,EAAE2Q,SAASrP,KAAcoP,EAAStF,SAAS9J,GAAW,MAAOsP,GAAatP,EAC9E,IAAItB,EAAE4L,SAAStK,GAAW,MAAO,UAASmH,GAAS,MAAOA,GAAM1B,IAAIzF,GACpE,OAAOA,GAET,IAAIsP,GAAe,SAAS7K,GAC1B,GAAI8K,GAAU7Q,EAAEmH,QAAQpB,EACxB,OAAO,UAAS0C,GACd,MAAOoI,GAAQpI,EAAM3C,aAOzB,IAAIgL,IAAqBC,QAAS,EAAGN,KAAM,EAAGnM,IAAK,EAAG0M,QAAS,EAAGC,OAAQ,EACxEC,MAAO,EAAGC,OAAQ,EAAGC,YAAa,EAAGC,MAAO,EAAGrC,KAAM,EAAGsC,OAAQ,EAAGC,OAAQ,EAC3EC,OAAQ,EAAGC,OAAQ,EAAGC,MAAO,EAAGzM,IAAK,EAAGgH,KAAM,EAAG0F,IAAK,EAAGC,QAAS,EAAGC,SAAU,EAC/EC,SAAU,EAAGC,OAAQ,EAAGnN,IAAK,EAAGgG,IAAK,EAAGoH,QAAS,EAAGC,KAAM,EAAGrF,MAAO,EACpEsF,KAAM,EAAGC,KAAM,EAAGC,QAAS,EAAGC,KAAM,EAAGxH,KAAM,EAAGyH,KAAM,EAAGC,KAAM,EAC/DC,QAAS,EAAGC,WAAY,EAAG/E,QAAS,EAAGgF,QAAS,EAAGC,YAAa,EAChE/O,QAAS,EAAGgP,MAAO,EAAGC,OAAQ,EAAGC,UAAW,EAAGC,QAAS,EAAGC,QAAS,EACpEhG,OAAQ,EAAGiG,QAAS,EAAGC,UAAW,EAAGC,cAAe,EAKtD,IAAIC,IAAgBtR,KAAM,EAAGsL,OAAQ,EAAGiG,MAAO,EAAGC,OAAQ,EAAG7E,KAAM,EACjE8E,KAAM,EAAGX,MAAO,EAAGhP,QAAS,EAI9B5D,GAAEyQ,OACC3G,EAAYgH,EAAmB,WAC/BjL,EAAOuN,EAAc,eACrB,SAASI,GACV,GAAIC,GAAOD,EAAO,GACdhD,EAAUgD,EAAO,GACjBrD,EAAYqD,EAAO,EAEvBC,GAAKC,MAAQ,SAAS9Q,GACpB,GAAI+Q,GAAW3T,EAAEiR,OAAOjR,EAAE4T,UAAUhR,GAAM,SAASiR,EAAMrS,GACvDqS,EAAKrS,GAAQ,CACb,OAAOqS,OAETvD,GAAqBmD,EAAM7Q,EAAK+Q,EAAUxD,GAG5CG,GAAqBmD,EAAMzT,EAAGwQ,EAASL,IAqBzChQ,GAAS2G,KAAO,SAASmC,EAAQR,EAAOrF,GACtC,GAAI0Q,GAAOC,EAAU9K,EAGrBjJ,GAAEqG,SAASjD,IAAYA,OACrBpC,YAAab,EAASa,YACtBC,YAAad,EAASc,aAIxB,IAAI+S,IAAUF,KAAMA,EAAMG,SAAU,OAGpC,KAAK7Q,EAAQmG,IAAK,CAChByK,EAAOzK,IAAMvJ,EAAEsG,OAAOmC,EAAO,QAAUgB,IAIzC,GAAIrG,EAAQ8Q,MAAQ,MAAQzL,IAAUQ,IAAW,UAAYA,IAAW,UAAYA,IAAW,SAAU,CACvG+K,EAAOG,YAAc,kBACrBH,GAAOE,KAAOE,KAAKC,UAAUjR,EAAQ2C,OAAS0C,EAAM7B,OAAOxD,IAI7D,GAAIA,EAAQnC,YAAa,CACvB+S,EAAOG,YAAc,mCACrBH,GAAOE,KAAOF,EAAOE,MAAQzL,MAAOuL,EAAOE,SAK7C,GAAI9Q,EAAQpC,cAAgB8S,IAAS,OAASA,IAAS,UAAYA,IAAS,SAAU,CACpFE,EAAOF,KAAO,MACd,IAAI1Q,EAAQnC,YAAa+S,EAAOE,KAAKI,QAAUR,CAC/C,IAAIS,GAAanR,EAAQmR,UACzBnR,GAAQmR,WAAa,SAASnL,GAC5BA,EAAIoL,iBAAiB,yBAA0BV,EAC/C,IAAIS,EAAY,MAAOA,GAAW/P,MAAMzD,KAAM0D,YAKlD,GAAIuP,EAAOF,OAAS,QAAU1Q,EAAQnC,YAAa,CACjD+S,EAAOS,YAAc,MAIvB,GAAIvR,GAAQE,EAAQF,KACpBE,GAAQF,MAAQ,SAASkG,EAAKsL,EAAYC,GACxCvR,EAAQsR,WAAaA,CACrBtR,GAAQuR,YAAcA,CACtB,IAAIzR,EAAOA,EAAMuC,KAAKrC,EAAQvB,QAASuH,EAAKsL,EAAYC,GAI1D,IAAIvL,GAAMhG,EAAQgG,IAAMjJ,EAASyU,KAAK5U,EAAE4F,OAAOoO,EAAQ5Q,GACvDqF,GAAM/D,QAAQ,UAAW+D,EAAOW,EAAKhG,EACrC,OAAOgG,GAIT,IAAI2K,IACF7G,OAAQ,OACR2H,OAAQ,MACR1L,MAAO,QACP2L,SAAQ,SACRC,KAAM,MAKR5U,GAASyU,KAAO,WACd,MAAOzU,GAASF,EAAE2U,KAAKpQ,MAAMrE,EAASF,EAAGwE,WAQ3C,IAAIuQ,GAAS7U,EAAS6U,OAAS,SAAS5R,GACtCA,IAAYA,KACZrC,MAAKiF,cAAcxB,MAAMzD,KAAM0D,UAC/B,IAAIrB,EAAQ6R,OAAQlU,KAAKkU,OAAS7R,EAAQ6R,MAC1ClU,MAAKmU,aACLnU,MAAK0F,WAAWjC,MAAMzD,KAAM0D,WAK9B,IAAI0Q,GAAgB,YACpB,IAAIC,GAAgB,cACpB,IAAIC,GAAgB,QACpB,IAAIC,GAAgB,0BAGpBtV,GAAE4F,OAAOoP,EAAOpU,UAAWM,GAIzB8E,cAAe,aAIfS,WAAY,aAQZ8O,MAAO,SAASA,EAAO/T,EAAMC,GAC3B,IAAKzB,EAAEwV,SAASD,GAAQA,EAAQxU,KAAK0U,eAAeF,EACpD,IAAIvV,EAAE+M,WAAWvL,GAAO,CACtBC,EAAWD,CACXA,GAAO,GAET,IAAKC,EAAUA,EAAWV,KAAKS,EAC/B,IAAIkU,GAAS3U,IACbZ,GAASwV,QAAQJ,MAAMA,EAAO,SAASK,GACrC,GAAI/Q,GAAO6Q,EAAOG,mBAAmBN,EAAOK,EAC5C,IAAIF,EAAOI,QAAQrU,EAAUoD,EAAMrD,KAAU,MAAO,CAClDkU,EAAOhR,QAAQF,MAAMkR,GAAS,SAAWlU,GAAM2D,OAAON,GACtD6Q,GAAOhR,QAAQ,QAASlD,EAAMqD,EAC9B1E,GAASwV,QAAQjR,QAAQ,QAASgR,EAAQlU,EAAMqD,KAGpD,OAAO9D,OAKT+U,QAAS,SAASrU,EAAUoD,EAAMrD,GAChC,GAAIC,EAAUA,EAAS+C,MAAMzD,KAAM8D,IAIrCkR,SAAU,SAASH,EAAUxS,GAC3BjD,EAASwV,QAAQI,SAASH,EAAUxS,EACpC,OAAOrC,OAMTmU,YAAa,WACX,IAAKnU,KAAKkU,OAAQ,MAClBlU,MAAKkU,OAASjV,EAAEsG,OAAOvF,KAAM,SAC7B,IAAIwU,GAAON,EAASjV,EAAE8B,KAAKf,KAAKkU,OAChC,QAAQM,EAAQN,EAAO3I,QAAU,KAAM,CACrCvL,KAAKwU,MAAMA,EAAOxU,KAAKkU,OAAOM,MAMlCE,eAAgB,SAASF,GACvBA,EAAQA,EAAM7L,QAAQ4L,EAAc,QACjC5L,QAAQyL,EAAe,WACvBzL,QAAQ0L,EAAY,SAAS3F,EAAOuG,GACnC,MAAOA,GAAWvG,EAAQ,aAE3B/F,QAAQ2L,EAAY,WACvB,OAAO,IAAIY,QAAO,IAAMV,EAAQ,yBAMlCM,mBAAoB,SAASN,EAAOK,GAClC,GAAI5B,GAASuB,EAAMW,KAAKN,GAAUlV,MAAM,EACxC,OAAOV,GAAEsE,IAAI0P,EAAQ,SAASmC,EAAOxU,GAEnC,GAAIA,IAAMqS,EAAOjS,OAAS,EAAG,MAAOoU,IAAS,IAC7C,OAAOA,GAAQC,mBAAmBD,GAAS,SAcjD,IAAIE,GAAUlW,EAASkW,QAAU,WAC/BtV,KAAKsC,WACLtC,MAAKuV,SAAWvV,KAAKuV,SAASlS,KAAKrD,KAGnC,UAAWwV,UAAW,YAAa,CACjCxV,KAAKyV,SAAWD,OAAOC,QACvBzV,MAAK4U,QAAUY,OAAOZ,SAK1B,IAAIc,GAAgB,cAGpB,IAAIC,GAAe,YAGnB,IAAIC,GAAe,MAGnBN,GAAQO,QAAU,KAGlB5W,GAAE4F,OAAOyQ,EAAQzV,UAAWM,GAI1B2V,SAAU,GAGVC,OAAQ,WACN,GAAIC,GAAOhW,KAAKyV,SAASQ,SAAStN,QAAQ,SAAU,MACpD,OAAOqN,KAAShW,KAAKpB,OAASoB,KAAKkW,aAIrCC,UAAW,WACT,GAAIH,GAAOhW,KAAKoW,eAAepW,KAAKyV,SAASQ,SAC7C,IAAII,GAAWL,EAAKrW,MAAM,EAAGK,KAAKpB,KAAKoC,OAAS,GAAK,GACrD,OAAOqV,KAAarW,KAAKpB,MAM3BwX,eAAgB,SAASvB,GACvB,MAAOyB,WAAUzB,EAASlM,QAAQ,OAAQ,WAK5CuN,UAAW,WACT,GAAIxH,GAAQ1O,KAAKyV,SAASc,KAAK5N,QAAQ,MAAO,IAAI+F,MAAM,OACxD,OAAOA,GAAQA,EAAM,GAAK,IAK5B8H,QAAS,SAAShB,GAChB,GAAI9G,IAAS8G,GAAUxV,MAAMyV,SAASc,KAAK7H,MAAM,SACjD,OAAOA,GAAQA,EAAM,GAAK,IAI5B+H,QAAS,WACP,GAAIT,GAAOhW,KAAKoW,eACdpW,KAAKyV,SAASQ,SAAWjW,KAAKkW,aAC9BvW,MAAMK,KAAKpB,KAAKoC,OAAS,EAC3B,OAAOgV,GAAKU,OAAO,KAAO,IAAMV,EAAKrW,MAAM,GAAKqW,GAIlDW,YAAa,SAAS9B,GACpB,GAAIA,GAAY,KAAM,CACpB,GAAI7U,KAAK4W,gBAAkB5W,KAAK6W,iBAAkB,CAChDhC,EAAW7U,KAAKyW,cACX,CACL5B,EAAW7U,KAAKwW,WAGpB,MAAO3B,GAASlM,QAAQ+M,EAAe,KAKzCoB,MAAO,SAASzU,GACd,GAAIiT,EAAQO,QAAS,KAAM,IAAI9J,OAAM,4CACrCuJ,GAAQO,QAAU,IAIlB7V,MAAKqC,QAAmBpD,EAAE4F,QAAQjG,KAAM,KAAMoB,KAAKqC,QAASA,EAC5DrC,MAAKpB,KAAmBoB,KAAKqC,QAAQzD,IACrCoB,MAAK6W,iBAAmB7W,KAAKqC,QAAQ0U,aAAe,KACpD/W,MAAKgX,eAAmB,gBAAkBxB,UAAWzG,SAASkI,mBAAsB,IAAKlI,SAASkI,aAAe,EACjHjX,MAAKkX,eAAmBlX,KAAK6W,kBAAoB7W,KAAKgX,cACtDhX,MAAKmX,kBAAqBnX,KAAKqC,QAAQ+U,SACvCpX,MAAKqX,iBAAsBrX,KAAK4U,SAAW5U,KAAK4U,QAAQwC,UACxDpX,MAAK4W,cAAmB5W,KAAKmX,iBAAmBnX,KAAKqX,aACrDrX,MAAK6U,SAAmB7U,KAAK2W,aAG7B3W,MAAKpB,MAAQ,IAAMoB,KAAKpB,KAAO,KAAK+J,QAAQgN,EAAc,IAI1D,IAAI3V,KAAK6W,kBAAoB7W,KAAKmX,gBAAiB,CAIjD,IAAKnX,KAAKqX,gBAAkBrX,KAAK+V,SAAU,CACzC,GAAIM,GAAWrW,KAAKpB,KAAKe,MAAM,GAAI,IAAM,GACzCK,MAAKyV,SAAS9M,QAAQ0N,EAAW,IAAMrW,KAAKyW,UAE5C,OAAO,UAIF,IAAIzW,KAAKqX,eAAiBrX,KAAK+V,SAAU,CAC9C/V,KAAKgV,SAAShV,KAAKwW,WAAY7N,QAAS,QAQ5C,IAAK3I,KAAKgX,gBAAkBhX,KAAK6W,mBAAqB7W,KAAK4W,cAAe,CACxE5W,KAAKsX,OAASvI,SAASC,cAAc,SACrChP,MAAKsX,OAAOC,IAAM,cAClBvX,MAAKsX,OAAOE,MAAMC,QAAU,MAC5BzX,MAAKsX,OAAOI,UAAY,CACxB,IAAIC,GAAO5I,SAAS4I,IAEpB,IAAIC,GAAUD,EAAKE,aAAa7X,KAAKsX,OAAQK,EAAKG,YAAYC,aAC9DH,GAAQ7I,SAASiJ,MACjBJ,GAAQ7I,SAASkJ,OACjBL,GAAQnC,SAASyC,KAAO,IAAMlY,KAAK6U,SAIrC,GAAIsD,GAAmB3C,OAAO2C,kBAAoB,SAASvJ,EAAWjK,GACpE,MAAOyT,aAAY,KAAOxJ,EAAWjK,GAKvC,IAAI3E,KAAK4W,cAAe,CACtBuB,EAAiB,WAAYnY,KAAKuV,SAAU,WACvC,IAAIvV,KAAKkX,iBAAmBlX,KAAKsX,OAAQ,CAC9Ca,EAAiB,aAAcnY,KAAKuV,SAAU,WACzC,IAAIvV,KAAK6W,iBAAkB,CAChC7W,KAAKqY,kBAAoBC,YAAYtY,KAAKuV,SAAUvV,KAAK8V,UAG3D,IAAK9V,KAAKqC,QAAQoE,OAAQ,MAAOzG,MAAKuY,WAKxCC,KAAM,WAEJ,GAAIC,GAAsBjD,OAAOiD,qBAAuB,SAAS7J,EAAWjK,GAC1E,MAAO+T,aAAY,KAAO9J,EAAWjK,GAIvC,IAAI3E,KAAK4W,cAAe,CACtB6B,EAAoB,WAAYzY,KAAKuV,SAAU,WAC1C,IAAIvV,KAAKkX,iBAAmBlX,KAAKsX,OAAQ,CAC9CmB,EAAoB,aAAczY,KAAKuV,SAAU,OAInD,GAAIvV,KAAKsX,OAAQ,CACfvI,SAAS4I,KAAKgB,YAAY3Y,KAAKsX,OAC/BtX,MAAKsX,OAAS,KAIhB,GAAItX,KAAKqY,kBAAmBO,cAAc5Y,KAAKqY,kBAC/C/C,GAAQO,QAAU,OAKpBrB,MAAO,SAASA,EAAO9T,GACrBV,KAAKsC,SAASkJ,SAASgJ,MAAOA,EAAO9T,SAAUA,KAKjD6U,SAAU,SAASjW,GACjB,GAAIwH,GAAU9G,KAAK2W,aAInB,IAAI7P,IAAY9G,KAAK6U,UAAY7U,KAAKsX,OAAQ,CAC5CxQ,EAAU9G,KAAKwW,QAAQxW,KAAKsX,OAAOS,eAGrC,GAAIjR,IAAY9G,KAAK6U,SAAU,MAAO,MACtC,IAAI7U,KAAKsX,OAAQtX,KAAKgV,SAASlO,EAC/B9G,MAAKuY,WAMPA,QAAS,SAAS1D,GAEhB,IAAK7U,KAAKmW,YAAa,MAAO,MAC9BtB,GAAW7U,KAAK6U,SAAW7U,KAAK2W,YAAY9B,EAC5C,OAAO5V,GAAEiM,KAAKlL,KAAKsC,SAAU,SAASW,GACpC,GAAIA,EAAQuR,MAAMvT,KAAK4T,GAAW,CAChC5R,EAAQvC,SAASmU,EACjB,OAAO,UAYbG,SAAU,SAASH,EAAUxS,GAC3B,IAAKiT,EAAQO,QAAS,MAAO,MAC7B,KAAKxT,GAAWA,IAAY,KAAMA,GAAWsB,UAAWtB,EAGxDwS,GAAW7U,KAAK2W,YAAY9B,GAAY,GAGxC,IAAIwB,GAAWrW,KAAKpB,IACpB,IAAIiW,IAAa,IAAMA,EAAS6B,OAAO,KAAO,IAAK,CACjDL,EAAWA,EAAS1W,MAAM,GAAI,IAAM,IAEtC,GAAI6I,GAAM6N,EAAWxB,CAGrBA,GAAWA,EAASlM,QAAQiN,EAAc,GAG1C,IAAIiD,GAAkB7Y,KAAKoW,eAAevB,EAE1C,IAAI7U,KAAK6U,WAAagE,EAAiB,MACvC7Y,MAAK6U,SAAWgE,CAGhB,IAAI7Y,KAAK4W,cAAe,CACtB5W,KAAK4U,QAAQvS,EAAQsG,QAAU,eAAiB,gBAAiBoG,SAAS+J,MAAOtQ,OAI5E,IAAIxI,KAAK6W,iBAAkB,CAChC7W,KAAK+Y,YAAY/Y,KAAKyV,SAAUZ,EAAUxS,EAAQsG,QAClD,IAAI3I,KAAKsX,QAAUzC,IAAa7U,KAAKwW,QAAQxW,KAAKsX,OAAOS,eAAgB,CACvE,GAAIH,GAAU5X,KAAKsX,OAAOS,aAK1B,KAAK1V,EAAQsG,QAAS,CACpBiP,EAAQ7I,SAASiJ,MACjBJ,GAAQ7I,SAASkJ,QAGnBjY,KAAK+Y,YAAYnB,EAAQnC,SAAUZ,EAAUxS,EAAQsG,cAKlD,CACL,MAAO3I,MAAKyV,SAASuD,OAAOxQ,GAE9B,GAAInG,EAAQsB,QAAS,MAAO3D,MAAKuY,QAAQ1D,IAK3CkE,YAAa,SAAStD,EAAUZ,EAAUlM,GACxC,GAAIA,EAAS,CACX,GAAI4N,GAAOd,EAASc,KAAK5N,QAAQ,qBAAsB,GACvD8M,GAAS9M,QAAQ4N,EAAO,IAAM1B,OACzB,CAELY,EAASyC,KAAO,IAAMrD,KAO5BzV,GAASwV,QAAU,GAAIU,EAQvB,IAAIzQ,GAAS,SAASoU,EAAYC,GAChC,GAAIC,GAASnZ,IACb,IAAIoZ,EAKJ,IAAIH,GAAcha,EAAEkH,IAAI8S,EAAY,eAAgB,CAClDG,EAAQH,EAAWpQ,gBACd,CACLuQ,EAAQ,WAAY,MAAOD,GAAO1V,MAAMzD,KAAM0D,YAIhDzE,EAAE4F,OAAOuU,EAAOD,EAAQD,EAIxBE,GAAMvZ,UAAYZ,EAAEkN,OAAOgN,EAAOtZ,UAAWoZ,EAC7CG,GAAMvZ,UAAUgJ,YAAcuQ,CAI9BA,GAAMC,UAAYF,EAAOtZ,SAEzB,OAAOuZ,GAITtU,GAAMD,OAASkE,EAAWlE,OAASoP,EAAOpP,OAAS4I,EAAK5I,OAASyQ,EAAQzQ,OAASA,CAGlF,IAAI6D,GAAW,WACb,KAAM,IAAIqD,OAAM,kDAIlB,IAAIjE,GAAY,SAASJ,EAAOrF,GAC9B,GAAIF,GAAQE,EAAQF,KACpBE,GAAQF,MAAQ,SAASyF,GACvB,GAAIzF,EAAOA,EAAMuC,KAAKrC,EAAQvB,QAAS4G,EAAOE,EAAMvF,EACpDqF,GAAM/D,QAAQ,QAAS+D,EAAOE,EAAMvF,IAIxC,OAAOjD"}
\ No newline at end of file
+{"version":3,"sources":["backbone.js"],"names":["factory","root","self","global","define","amd","_","$","exports","Backbone","require","e","jQuery","Zepto","ender","previousBackbone","slice","Array","prototype","VERSION","noConflict","this","emulateHTTP","emulateJSON","Events","eventSplitter","_listening","eventsApi","iteratee","events","name","callback","opts","i","names","context","keys","length","test","split","on","_events","onApi","ctx","listening","listeners","_listeners","id","interop","listenTo","obj","_listenId","uniqueId","listeningTo","_listeningTo","Listening","error","tryCatchOn","options","handlers","count","push","off","offApi","stopListening","ids","isEmpty","cleanup","remaining","j","handler","_callback","once","onceMap","bind","listenToOnce","map","offer","apply","arguments","trigger","Math","max","args","triggerApi","objEvents","allEvents","all","triggerEvents","concat","ev","l","a1","a2","a3","call","listener","unbind","extend","Model","attributes","attrs","preinitialize","cid","cidPrefix","collection","parse","defaults","result","set","changed","initialize","validationError","idAttribute","toJSON","clone","sync","get","attr","escape","has","matches","key","val","_validate","unset","silent","changes","changing","_changing","_previousAttributes","current","prev","isEqual","prevId","_pending","clear","hasChanged","changedAttributes","diff","old","previous","previousAttributes","fetch","model","success","resp","serverAttrs","wrapError","save","validate","wait","method","isNew","patch","xhr","destroy","defer","url","base","urlError","replace","encodeURIComponent","constructor","isValid","Collection","models","comparator","_reset","reset","setOptions","add","remove","merge","addOptions","splice","array","insert","at","min","tail","singular","isArray","removed","_removeModels","added","merged","_isModel","toAdd","toMerge","toRemove","modelMap","sort","sortable","sortAttr","isString","existing","_prepareModel","_addReference","orderChanged","some","m","index","_removeReference","previousModels","pop","unshift","shift","_byId","modelId","where","first","findWhere","Error","isFunction","sortBy","pluck","create","callbackOpts","values","CollectionIterator","ITERATOR_VALUES","ITERATOR_KEYS","entries","ITERATOR_KEYSVALUES","indexOf","_onModelEvent","event","$$iterator","Symbol","iterator","kind","_collection","_kind","_index","next","value","done","View","pick","viewOptions","_ensureElement","delegateEventSplitter","tagName","selector","$el","find","render","_removeElement","setElement","element","undelegateEvents","_setElement","delegateEvents","el","match","delegate","eventName","undelegate","_createElement","document","createElement","className","_setAttributes","addMethod","attribute","cb","defaultVal","addUnderscoreMethods","Class","methods","each","instance","isObject","modelMatcher","matcher","collectionMethods","forEach","collect","reduce","foldl","inject","reduceRight","foldr","detect","filter","select","reject","every","any","include","includes","contains","invoke","toArray","size","head","take","initial","rest","drop","last","without","difference","shuffle","lastIndexOf","chain","sample","partition","groupBy","countBy","indexBy","findIndex","findLastIndex","modelMethods","pairs","invert","omit","config","Base","mixin","mappings","functions","memo","type","methodMap","params","dataType","data","contentType","JSON","stringify","_method","beforeSend","setRequestHeader","processData","textStatus","errorThrown","ajax","update","delete","read","Router","routes","_bindRoutes","optionalParam","namedParam","splatParam","escapeRegExp","route","isRegExp","_routeToRegExp","router","history","fragment","_extractParameters","execute","navigate","optional","RegExp","exec","param","decodeURIComponent","History","checkUrl","window","location","routeStripper","rootStripper","pathStripper","started","interval","atRoot","path","pathname","getSearch","matchRoot","decodeFragment","rootPath","decodeURI","href","getHash","getPath","charAt","getFragment","_usePushState","_wantsHashChange","start","hashChange","_hasHashChange","documentMode","_useHashChange","_wantsPushState","pushState","_hasPushState","iframe","src","style","display","tabIndex","body","iWindow","insertBefore","firstChild","contentWindow","open","close","hash","addEventListener","attachEvent","_checkUrlInterval","setInterval","loadUrl","stop","removeEventListener","detachEvent","removeChild","clearInterval","decodedFragment","title","_updateHash","assign","protoProps","staticProps","parent","child","__super__"],"mappings":"CAOA,SAAUA,GAIR,IAAIC,SAAcC,MAAQ,UAAYA,KAAKA,OAASA,MAAQA,aAC3CC,QAAU,UAAYA,OAAOA,SAAWA,QAAUA,OAGnE,UAAWC,SAAW,YAAcA,OAAOC,IAAK,CAC9CD,OAAO,CAAC,aAAc,SAAU,WAAY,SAASE,EAAGC,EAAGC,GAGzDP,EAAKQ,SAAWT,EAAQC,EAAMO,EAASF,EAAGC,UAIvC,UAAWC,UAAY,YAAa,CACzC,IAAIF,EAAII,QAAQ,cAAeH,EAC/B,IAAMA,EAAIG,QAAQ,UAAa,MAAOC,IACtCX,EAAQC,EAAMO,QAASF,EAAGC,OAGrB,CACLN,EAAKQ,SAAWT,EAAQC,EAAM,GAAIA,EAAKK,EAAGL,EAAKW,QAAUX,EAAKY,OAASZ,EAAKa,OAASb,EAAKM,KAvB9F,CA0BG,SAASN,EAAMQ,EAAUH,EAAGC,GAO7B,IAAIQ,EAAmBd,EAAKQ,SAG5B,IAAIO,EAAQC,MAAMC,UAAUF,MAG5BP,EAASU,QAAU,QAInBV,EAASF,EAAIA,EAIbE,EAASW,WAAa,WACpBnB,EAAKQ,SAAWM,EAChB,OAAOM,MAMTZ,EAASa,YAAc,MAMvBb,EAASc,YAAc,MAevB,IAAIC,EAASf,EAASe,OAAS,GAG/B,IAAIC,EAAgB,MAGpB,IAAIC,EAKJ,IAAIC,EAAY,SAASC,EAAUC,EAAQC,EAAMC,EAAUC,GACzD,IAAIC,EAAI,EAAGC,EACX,GAAIJ,UAAeA,IAAS,SAAU,CAEpC,GAAIC,SAAkB,GAAK,YAAaC,GAAQA,EAAKG,eAAiB,EAAGH,EAAKG,QAAUJ,EACxF,IAAKG,EAAQ5B,EAAE8B,KAAKN,GAAOG,EAAIC,EAAMG,OAASJ,IAAK,CACjDJ,EAASF,EAAUC,EAAUC,EAAQK,EAAMD,GAAIH,EAAKI,EAAMD,IAAKD,SAE5D,GAAIF,GAAQL,EAAca,KAAKR,GAAO,CAE3C,IAAKI,EAAQJ,EAAKS,MAAMd,GAAgBQ,EAAIC,EAAMG,OAAQJ,IAAK,CAC7DJ,EAASD,EAASC,EAAQK,EAAMD,GAAIF,EAAUC,QAE3C,CAELH,EAASD,EAASC,EAAQC,EAAMC,EAAUC,GAE5C,OAAOH,GAKTL,EAAOgB,GAAK,SAASV,EAAMC,EAAUI,GACnCd,KAAKoB,QAAUd,EAAUe,EAAOrB,KAAKoB,SAAW,GAAIX,EAAMC,EAAU,CAClEI,QAASA,EACTQ,IAAKtB,KACLuB,UAAWlB,IAGb,GAAIA,EAAY,CACd,IAAImB,EAAYxB,KAAKyB,aAAezB,KAAKyB,WAAa,IACtDD,EAAUnB,EAAWqB,IAAMrB,EAG3BA,EAAWsB,QAAU,MAGvB,OAAO3B,MAMTG,EAAOyB,SAAW,SAASC,EAAKpB,EAAMC,GACpC,IAAKmB,EAAK,OAAO7B,KACjB,IAAI0B,EAAKG,EAAIC,YAAcD,EAAIC,UAAY7C,EAAE8C,SAAS,MACtD,IAAIC,EAAchC,KAAKiC,eAAiBjC,KAAKiC,aAAe,IAC5D,IAAIV,EAAYlB,EAAa2B,EAAYN,GAIzC,IAAKH,EAAW,CACdvB,KAAK8B,YAAc9B,KAAK8B,UAAY7C,EAAE8C,SAAS,MAC/CR,EAAYlB,EAAa2B,EAAYN,GAAM,IAAIQ,EAAUlC,KAAM6B,GAIjE,IAAIM,EAAQC,EAAWP,EAAKpB,EAAMC,EAAUV,MAC5CK,OAAkB,EAElB,GAAI8B,EAAO,MAAMA,EAEjB,GAAIZ,EAAUI,QAASJ,EAAUJ,GAAGV,EAAMC,GAE1C,OAAOV,MAIT,IAAIqB,EAAQ,SAASb,EAAQC,EAAMC,EAAU2B,GAC3C,GAAI3B,EAAU,CACZ,IAAI4B,EAAW9B,EAAOC,KAAUD,EAAOC,GAAQ,IAC/C,IAAIK,EAAUuB,EAAQvB,QAASQ,EAAMe,EAAQf,IAAKC,EAAYc,EAAQd,UACtE,GAAIA,EAAWA,EAAUgB,QAEzBD,EAASE,KAAK,CAAC9B,SAAUA,EAAUI,QAASA,EAASQ,IAAKR,GAAWQ,EAAKC,UAAWA,IAEvF,OAAOf,GAKT,IAAI4B,EAAa,SAASP,EAAKpB,EAAMC,EAAUI,GAC7C,IACEe,EAAIV,GAAGV,EAAMC,EAAUI,GACvB,MAAOxB,GACP,OAAOA,IAQXa,EAAOsC,IAAM,SAAShC,EAAMC,EAAUI,GACpC,IAAKd,KAAKoB,QAAS,OAAOpB,KAC1BA,KAAKoB,QAAUd,EAAUoC,EAAQ1C,KAAKoB,QAASX,EAAMC,EAAU,CAC7DI,QAASA,EACTU,UAAWxB,KAAKyB,aAGlB,OAAOzB,MAKTG,EAAOwC,cAAgB,SAASd,EAAKpB,EAAMC,GACzC,IAAIsB,EAAchC,KAAKiC,aACvB,IAAKD,EAAa,OAAOhC,KAEzB,IAAI4C,EAAMf,EAAM,CAACA,EAAIC,WAAa7C,EAAE8B,KAAKiB,GACzC,IAAK,IAAIpB,EAAI,EAAGA,EAAIgC,EAAI5B,OAAQJ,IAAK,CACnC,IAAIW,EAAYS,EAAYY,EAAIhC,IAIhC,IAAKW,EAAW,MAEhBA,EAAUM,IAAIY,IAAIhC,EAAMC,EAAUV,MAClC,GAAIuB,EAAUI,QAASJ,EAAUkB,IAAIhC,EAAMC,GAE7C,GAAIzB,EAAE4D,QAAQb,GAAchC,KAAKiC,kBAAoB,EAErD,OAAOjC,MAIT,IAAI0C,EAAS,SAASlC,EAAQC,EAAMC,EAAU2B,GAC5C,IAAK7B,EAAQ,OAEb,IAAIM,EAAUuB,EAAQvB,QAASU,EAAYa,EAAQb,UACnD,IAAIZ,EAAI,EAAGC,EAGX,IAAKJ,IAASK,IAAYJ,EAAU,CAClC,IAAKG,EAAQ5B,EAAE8B,KAAKS,GAAYZ,EAAIC,EAAMG,OAAQJ,IAAK,CACrDY,EAAUX,EAAMD,IAAIkC,UAEtB,OAGFjC,EAAQJ,EAAO,CAACA,GAAQxB,EAAE8B,KAAKP,GAC/B,KAAOI,EAAIC,EAAMG,OAAQJ,IAAK,CAC5BH,EAAOI,EAAMD,GACb,IAAI0B,EAAW9B,EAAOC,GAGtB,IAAK6B,EAAU,MAGf,IAAIS,EAAY,GAChB,IAAK,IAAIC,EAAI,EAAGA,EAAIV,EAAStB,OAAQgC,IAAK,CACxC,IAAIC,EAAUX,EAASU,GACvB,GACEtC,GAAYA,IAAauC,EAAQvC,UAC/BA,IAAauC,EAAQvC,SAASwC,WAC5BpC,GAAWA,IAAYmC,EAAQnC,QACnC,CACAiC,EAAUP,KAAKS,OACV,CACL,IAAI1B,EAAY0B,EAAQ1B,UACxB,GAAIA,EAAWA,EAAUkB,IAAIhC,EAAMC,IAKvC,GAAIqC,EAAU/B,OAAQ,CACpBR,EAAOC,GAAQsC,MACV,QACEvC,EAAOC,IAIlB,OAAOD,GAOTL,EAAOgD,KAAO,SAAS1C,EAAMC,EAAUI,GAErC,IAAIN,EAASF,EAAU8C,EAAS,GAAI3C,EAAMC,EAAUV,KAAKyC,IAAIY,KAAKrD,OAClE,UAAWS,IAAS,UAAYK,GAAW,KAAMJ,OAAgB,EACjE,OAAOV,KAAKmB,GAAGX,EAAQE,EAAUI,IAInCX,EAAOmD,aAAe,SAASzB,EAAKpB,EAAMC,GAExC,IAAIF,EAASF,EAAU8C,EAAS,GAAI3C,EAAMC,EAAUV,KAAK2C,cAAcU,KAAKrD,KAAM6B,IAClF,OAAO7B,KAAK4B,SAASC,EAAKrB,IAK5B,IAAI4C,EAAU,SAASG,EAAK9C,EAAMC,EAAU8C,GAC1C,GAAI9C,EAAU,CACZ,IAAIyC,EAAOI,EAAI9C,GAAQxB,EAAEkE,KAAK,WAC5BK,EAAM/C,EAAM0C,GACZzC,EAAS+C,MAAMzD,KAAM0D,aAEvBP,EAAKD,UAAYxC,EAEnB,OAAO6C,GAOTpD,EAAOwD,QAAU,SAASlD,GACxB,IAAKT,KAAKoB,QAAS,OAAOpB,KAE1B,IAAIgB,EAAS4C,KAAKC,IAAI,EAAGH,UAAU1C,OAAS,GAC5C,IAAI8C,EAAOlE,MAAMoB,GACjB,IAAK,IAAIJ,EAAI,EAAGA,EAAII,EAAQJ,IAAKkD,EAAKlD,GAAK8C,UAAU9C,EAAI,GAEzDN,EAAUyD,EAAY/D,KAAKoB,QAASX,OAAW,EAAGqD,GAClD,OAAO9D,MAIT,IAAI+D,EAAa,SAASC,EAAWvD,EAAMC,EAAUoD,GACnD,GAAIE,EAAW,CACb,IAAIxD,EAASwD,EAAUvD,GACvB,IAAIwD,EAAYD,EAAUE,IAC1B,GAAI1D,GAAUyD,EAAWA,EAAYA,EAAUtE,QAC/C,GAAIa,EAAQ2D,EAAc3D,EAAQsD,GAClC,GAAIG,EAAWE,EAAcF,EAAW,CAACxD,GAAM2D,OAAON,IAExD,OAAOE,GAMT,IAAIG,EAAgB,SAAS3D,EAAQsD,GACnC,IAAIO,EAAIzD,GAAK,EAAG0D,EAAI9D,EAAOQ,OAAQuD,EAAKT,EAAK,GAAIU,EAAKV,EAAK,GAAIW,EAAKX,EAAK,GACzE,OAAQA,EAAK9C,QACX,KAAK,EAAG,QAASJ,EAAI0D,GAAID,EAAK7D,EAAOI,IAAIF,SAASgE,KAAKL,EAAG/C,KAAM,OAChE,KAAK,EAAG,QAASV,EAAI0D,GAAID,EAAK7D,EAAOI,IAAIF,SAASgE,KAAKL,EAAG/C,IAAKiD,GAAK,OACpE,KAAK,EAAG,QAAS3D,EAAI0D,GAAID,EAAK7D,EAAOI,IAAIF,SAASgE,KAAKL,EAAG/C,IAAKiD,EAAIC,GAAK,OACxE,KAAK,EAAG,QAAS5D,EAAI0D,GAAID,EAAK7D,EAAOI,IAAIF,SAASgE,KAAKL,EAAG/C,IAAKiD,EAAIC,EAAIC,GAAK,OAC5E,QAAS,QAAS7D,EAAI0D,GAAID,EAAK7D,EAAOI,IAAIF,SAAS+C,MAAMY,EAAG/C,IAAKwC,GAAO,SAM5E,IAAI5B,EAAY,SAASyC,EAAU9C,GACjC7B,KAAK0B,GAAKiD,EAAS7C,UACnB9B,KAAK2E,SAAWA,EAChB3E,KAAK6B,IAAMA,EACX7B,KAAK2B,QAAU,KACf3B,KAAKuC,MAAQ,EACbvC,KAAKoB,aAAe,GAGtBc,EAAUrC,UAAUsB,GAAKhB,EAAOgB,GAMhCe,EAAUrC,UAAU4C,IAAM,SAAShC,EAAMC,GACvC,IAAIoC,EACJ,GAAI9C,KAAK2B,QAAS,CAChB3B,KAAKoB,QAAUd,EAAUoC,EAAQ1C,KAAKoB,QAASX,EAAMC,EAAU,CAC7DI,aAAc,EACdU,eAAgB,IAElBsB,GAAW9C,KAAKoB,YACX,CACLpB,KAAKuC,QACLO,EAAU9C,KAAKuC,QAAU,EAE3B,GAAIO,EAAS9C,KAAK8C,WAIpBZ,EAAUrC,UAAUiD,QAAU,kBACrB9C,KAAK2E,SAAS1C,aAAajC,KAAK6B,IAAIC,WAC3C,IAAK9B,KAAK2B,eAAgB3B,KAAK6B,IAAIJ,WAAWzB,KAAK0B,KAIrDvB,EAAOkD,KAASlD,EAAOgB,GACvBhB,EAAOyE,OAASzE,EAAOsC,IAIvBxD,EAAE4F,OAAOzF,EAAUe,GAYnB,IAAI2E,EAAQ1F,EAAS0F,MAAQ,SAASC,EAAY1C,GAChD,IAAI2C,EAAQD,GAAc,GAC1B1C,IAAYA,EAAU,IACtBrC,KAAKiF,cAAcxB,MAAMzD,KAAM0D,WAC/B1D,KAAKkF,IAAMjG,EAAE8C,SAAS/B,KAAKmF,WAC3BnF,KAAK+E,WAAa,GAClB,GAAI1C,EAAQ+C,WAAYpF,KAAKoF,WAAa/C,EAAQ+C,WAClD,GAAI/C,EAAQgD,MAAOL,EAAQhF,KAAKqF,MAAML,EAAO3C,IAAY,GACzD,IAAIiD,EAAWrG,EAAEsG,OAAOvF,KAAM,YAC9BgF,EAAQ/F,EAAEqG,SAASrG,EAAE4F,OAAO,GAAIS,EAAUN,GAAQM,GAClDtF,KAAKwF,IAAIR,EAAO3C,GAChBrC,KAAKyF,QAAU,GACfzF,KAAK0F,WAAWjC,MAAMzD,KAAM0D,YAI9BzE,EAAE4F,OAAOC,EAAMjF,UAAWM,EAAQ,CAGhCsF,QAAS,KAGTE,gBAAiB,KAIjBC,YAAa,KAIbT,UAAW,IAIXF,cAAe,aAIfS,WAAY,aAGZG,OAAQ,SAASxD,GACf,OAAOpD,EAAE6G,MAAM9F,KAAK+E,aAKtBgB,KAAM,WACJ,OAAO3G,EAAS2G,KAAKtC,MAAMzD,KAAM0D,YAInCsC,IAAK,SAASC,GACZ,OAAOjG,KAAK+E,WAAWkB,IAIzBC,OAAQ,SAASD,GACf,OAAOhH,EAAEiH,OAAOlG,KAAKgG,IAAIC,KAK3BE,IAAK,SAASF,GACZ,OAAOjG,KAAKgG,IAAIC,IAAS,MAI3BG,QAAS,SAASpB,GAChB,QAAS/F,EAAEsB,SAASyE,EAAOhF,KAAlBf,CAAwBe,KAAK+E,aAMxCS,IAAK,SAASa,EAAKC,EAAKjE,GACtB,GAAIgE,GAAO,KAAM,OAAOrG,KAGxB,IAAIgF,EACJ,UAAWqB,IAAQ,SAAU,CAC3BrB,EAAQqB,EACRhE,EAAUiE,MACL,EACJtB,EAAQ,IAAIqB,GAAOC,EAGtBjE,IAAYA,EAAU,IAGtB,IAAKrC,KAAKuG,UAAUvB,EAAO3C,GAAU,OAAO,MAG5C,IAAImE,EAAanE,EAAQmE,MACzB,IAAIC,EAAapE,EAAQoE,OACzB,IAAIC,EAAa,GACjB,IAAIC,EAAa3G,KAAK4G,UACtB5G,KAAK4G,UAAY,KAEjB,IAAKD,EAAU,CACb3G,KAAK6G,oBAAsB5H,EAAE6G,MAAM9F,KAAK+E,YACxC/E,KAAKyF,QAAU,GAGjB,IAAIqB,EAAU9G,KAAK+E,WACnB,IAAIU,EAAUzF,KAAKyF,QACnB,IAAIsB,EAAU/G,KAAK6G,oBAGnB,IAAK,IAAIZ,KAAQjB,EAAO,CACtBsB,EAAMtB,EAAMiB,GACZ,IAAKhH,EAAE+H,QAAQF,EAAQb,GAAOK,GAAMI,EAAQlE,KAAKyD,GACjD,IAAKhH,EAAE+H,QAAQD,EAAKd,GAAOK,GAAM,CAC/Bb,EAAQQ,GAAQK,MACX,QACEb,EAAQQ,GAEjBO,SAAeM,EAAQb,GAAQa,EAAQb,GAAQK,EAIjD,GAAItG,KAAK4F,eAAeZ,EAAO,CAC7B,IAAIiC,EAASjH,KAAK0B,GAClB1B,KAAK0B,GAAK1B,KAAKgG,IAAIhG,KAAK4F,aACxB5F,KAAK2D,QAAQ,WAAY3D,KAAMiH,EAAQ5E,GAIzC,IAAKoE,EAAQ,CACX,GAAIC,EAAQ1F,OAAQhB,KAAKkH,SAAW7E,EACpC,IAAK,IAAIzB,EAAI,EAAGA,EAAI8F,EAAQ1F,OAAQJ,IAAK,CACvCZ,KAAK2D,QAAQ,UAAY+C,EAAQ9F,GAAIZ,KAAM8G,EAAQJ,EAAQ9F,IAAKyB,IAMpE,GAAIsE,EAAU,OAAO3G,KACrB,IAAKyG,EAAQ,CACX,MAAOzG,KAAKkH,SAAU,CACpB7E,EAAUrC,KAAKkH,SACflH,KAAKkH,SAAW,MAChBlH,KAAK2D,QAAQ,SAAU3D,KAAMqC,IAGjCrC,KAAKkH,SAAW,MAChBlH,KAAK4G,UAAY,MACjB,OAAO5G,MAKTwG,MAAO,SAASP,EAAM5D,GACpB,OAAOrC,KAAKwF,IAAIS,OAAW,EAAGhH,EAAE4F,OAAO,GAAIxC,EAAS,CAACmE,MAAO,SAI9DW,MAAO,SAAS9E,GACd,IAAI2C,EAAQ,GACZ,IAAK,IAAIqB,KAAOrG,KAAK+E,WAAYC,EAAMqB,QAAY,EACnD,OAAOrG,KAAKwF,IAAIR,EAAO/F,EAAE4F,OAAO,GAAIxC,EAAS,CAACmE,MAAO,SAKvDY,WAAY,SAASnB,GACnB,GAAIA,GAAQ,KAAM,OAAQhH,EAAE4D,QAAQ7C,KAAKyF,SACzC,OAAOxG,EAAEkH,IAAInG,KAAKyF,QAASQ,IAS7BoB,kBAAmB,SAASC,GAC1B,IAAKA,EAAM,OAAOtH,KAAKoH,aAAenI,EAAE6G,MAAM9F,KAAKyF,SAAW,MAC9D,IAAI8B,EAAMvH,KAAK4G,UAAY5G,KAAK6G,oBAAsB7G,KAAK+E,WAC3D,IAAIU,EAAU,GACd,IAAI2B,EACJ,IAAK,IAAInB,KAAQqB,EAAM,CACrB,IAAIhB,EAAMgB,EAAKrB,GACf,GAAIhH,EAAE+H,QAAQO,EAAItB,GAAOK,GAAM,SAC/Bb,EAAQQ,GAAQK,EAChBc,EAAa,KAEf,OAAOA,EAAa3B,EAAU,OAKhC+B,SAAU,SAASvB,GACjB,GAAIA,GAAQ,OAASjG,KAAK6G,oBAAqB,OAAO,KACtD,OAAO7G,KAAK6G,oBAAoBZ,IAKlCwB,mBAAoB,WAClB,OAAOxI,EAAE6G,MAAM9F,KAAK6G,sBAKtBa,MAAO,SAASrF,GACdA,EAAUpD,EAAE4F,OAAO,CAACQ,MAAO,MAAOhD,GAClC,IAAIsF,EAAQ3H,KACZ,IAAI4H,EAAUvF,EAAQuF,QACtBvF,EAAQuF,QAAU,SAASC,GACzB,IAAIC,EAAczF,EAAQgD,MAAQsC,EAAMtC,MAAMwC,EAAMxF,GAAWwF,EAC/D,IAAKF,EAAMnC,IAAIsC,EAAazF,GAAU,OAAO,MAC7C,GAAIuF,EAASA,EAAQlD,KAAKrC,EAAQvB,QAAS6G,EAAOE,EAAMxF,GACxDsF,EAAMhE,QAAQ,OAAQgE,EAAOE,EAAMxF,IAErC0F,EAAU/H,KAAMqC,GAChB,OAAOrC,KAAK+F,KAAK,OAAQ/F,KAAMqC,IAMjC2F,KAAM,SAAS3B,EAAKC,EAAKjE,GAEvB,IAAI2C,EACJ,GAAIqB,GAAO,aAAeA,IAAQ,SAAU,CAC1CrB,EAAQqB,EACRhE,EAAUiE,MACL,EACJtB,EAAQ,IAAIqB,GAAOC,EAGtBjE,EAAUpD,EAAE4F,OAAO,CAACoD,SAAU,KAAM5C,MAAO,MAAOhD,GAClD,IAAI6F,EAAO7F,EAAQ6F,KAKnB,GAAIlD,IAAUkD,EAAM,CAClB,IAAKlI,KAAKwF,IAAIR,EAAO3C,GAAU,OAAO,WACjC,IAAKrC,KAAKuG,UAAUvB,EAAO3C,GAAU,CAC1C,OAAO,MAKT,IAAIsF,EAAQ3H,KACZ,IAAI4H,EAAUvF,EAAQuF,QACtB,IAAI7C,EAAa/E,KAAK+E,WACtB1C,EAAQuF,QAAU,SAASC,GAEzBF,EAAM5C,WAAaA,EACnB,IAAI+C,EAAczF,EAAQgD,MAAQsC,EAAMtC,MAAMwC,EAAMxF,GAAWwF,EAC/D,GAAIK,EAAMJ,EAAc7I,EAAE4F,OAAO,GAAIG,EAAO8C,GAC5C,GAAIA,IAAgBH,EAAMnC,IAAIsC,EAAazF,GAAU,OAAO,MAC5D,GAAIuF,EAASA,EAAQlD,KAAKrC,EAAQvB,QAAS6G,EAAOE,EAAMxF,GACxDsF,EAAMhE,QAAQ,OAAQgE,EAAOE,EAAMxF,IAErC0F,EAAU/H,KAAMqC,GAGhB,GAAI2C,GAASkD,EAAMlI,KAAK+E,WAAa9F,EAAE4F,OAAO,GAAIE,EAAYC,GAE9D,IAAImD,EAASnI,KAAKoI,QAAU,SAAW/F,EAAQgG,MAAQ,QAAU,SACjE,GAAIF,IAAW,UAAY9F,EAAQ2C,MAAO3C,EAAQ2C,MAAQA,EAC1D,IAAIsD,EAAMtI,KAAK+F,KAAKoC,EAAQnI,KAAMqC,GAGlCrC,KAAK+E,WAAaA,EAElB,OAAOuD,GAMTC,QAAS,SAASlG,GAChBA,EAAUA,EAAUpD,EAAE6G,MAAMzD,GAAW,GACvC,IAAIsF,EAAQ3H,KACZ,IAAI4H,EAAUvF,EAAQuF,QACtB,IAAIM,EAAO7F,EAAQ6F,KAEnB,IAAIK,EAAU,WACZZ,EAAMhF,gBACNgF,EAAMhE,QAAQ,UAAWgE,EAAOA,EAAMvC,WAAY/C,IAGpDA,EAAQuF,QAAU,SAASC,GACzB,GAAIK,EAAMK,IACV,GAAIX,EAASA,EAAQlD,KAAKrC,EAAQvB,QAAS6G,EAAOE,EAAMxF,GACxD,IAAKsF,EAAMS,QAAST,EAAMhE,QAAQ,OAAQgE,EAAOE,EAAMxF,IAGzD,IAAIiG,EAAM,MACV,GAAItI,KAAKoI,QAAS,CAChBnJ,EAAEuJ,MAAMnG,EAAQuF,aACX,CACLG,EAAU/H,KAAMqC,GAChBiG,EAAMtI,KAAK+F,KAAK,SAAU/F,KAAMqC,GAElC,IAAK6F,EAAMK,IACX,OAAOD,GAMTG,IAAK,WACH,IAAIC,EACFzJ,EAAEsG,OAAOvF,KAAM,YACff,EAAEsG,OAAOvF,KAAKoF,WAAY,QAC1BuD,IACF,GAAI3I,KAAKoI,QAAS,OAAOM,EACzB,IAAIhH,EAAK1B,KAAKgG,IAAIhG,KAAK4F,aACvB,OAAO8C,EAAKE,QAAQ,SAAU,OAASC,mBAAmBnH,IAK5D2D,MAAO,SAASwC,EAAMxF,GACpB,OAAOwF,GAIT/B,MAAO,WACL,OAAO,IAAI9F,KAAK8I,YAAY9I,KAAK+E,aAInCqD,MAAO,WACL,OAAQpI,KAAKmG,IAAInG,KAAK4F,cAIxBmD,QAAS,SAAS1G,GAChB,OAAOrC,KAAKuG,UAAU,GAAItH,EAAE4F,OAAO,GAAIxC,EAAS,CAAC4F,SAAU,SAK7D1B,UAAW,SAASvB,EAAO3C,GACzB,IAAKA,EAAQ4F,WAAajI,KAAKiI,SAAU,OAAO,KAChDjD,EAAQ/F,EAAE4F,OAAO,GAAI7E,KAAK+E,WAAYC,GACtC,IAAI7C,EAAQnC,KAAK2F,gBAAkB3F,KAAKiI,SAASjD,EAAO3C,IAAY,KACpE,IAAKF,EAAO,OAAO,KACnBnC,KAAK2D,QAAQ,UAAW3D,KAAMmC,EAAOlD,EAAE4F,OAAOxC,EAAS,CAACsD,gBAAiBxD,KACzE,OAAO,SAkBX,IAAI6G,EAAa5J,EAAS4J,WAAa,SAASC,EAAQ5G,GACtDA,IAAYA,EAAU,IACtBrC,KAAKiF,cAAcxB,MAAMzD,KAAM0D,WAC/B,GAAIrB,EAAQsF,MAAO3H,KAAK2H,MAAQtF,EAAQsF,MACxC,GAAItF,EAAQ6G,kBAAoB,EAAGlJ,KAAKkJ,WAAa7G,EAAQ6G,WAC7DlJ,KAAKmJ,SACLnJ,KAAK0F,WAAWjC,MAAMzD,KAAM0D,WAC5B,GAAIuF,EAAQjJ,KAAKoJ,MAAMH,EAAQhK,EAAE4F,OAAO,CAAC4B,OAAQ,MAAOpE,KAI1D,IAAIgH,EAAa,CAACC,IAAK,KAAMC,OAAQ,KAAMC,MAAO,MAClD,IAAIC,EAAa,CAACH,IAAK,KAAMC,OAAQ,OAGrC,IAAIG,EAAS,SAASC,EAAOC,EAAQC,GACnCA,EAAKjG,KAAKkG,IAAIlG,KAAKC,IAAIgG,EAAI,GAAIF,EAAM3I,QACrC,IAAI+I,EAAOnK,MAAM+J,EAAM3I,OAAS6I,GAChC,IAAI7I,EAAS4I,EAAO5I,OACpB,IAAIJ,EACJ,IAAKA,EAAI,EAAGA,EAAImJ,EAAK/I,OAAQJ,IAAKmJ,EAAKnJ,GAAK+I,EAAM/I,EAAIiJ,GACtD,IAAKjJ,EAAI,EAAGA,EAAII,EAAQJ,IAAK+I,EAAM/I,EAAIiJ,GAAMD,EAAOhJ,GACpD,IAAKA,EAAI,EAAGA,EAAImJ,EAAK/I,OAAQJ,IAAK+I,EAAM/I,EAAII,EAAS6I,GAAME,EAAKnJ,IAIlE3B,EAAE4F,OAAOmE,EAAWnJ,UAAWM,EAAQ,CAIrCwH,MAAO7C,EAKPG,cAAe,aAIfS,WAAY,aAIZG,OAAQ,SAASxD,GACf,OAAOrC,KAAKuD,IAAI,SAASoE,GAAS,OAAOA,EAAM9B,OAAOxD,MAIxD0D,KAAM,WACJ,OAAO3G,EAAS2G,KAAKtC,MAAMzD,KAAM0D,YAMnC4F,IAAK,SAASL,EAAQ5G,GACpB,OAAOrC,KAAKwF,IAAIyD,EAAQhK,EAAE4F,OAAO,CAAC2E,MAAO,OAAQnH,EAASoH,KAI5DF,OAAQ,SAASN,EAAQ5G,GACvBA,EAAUpD,EAAE4F,OAAO,GAAIxC,GACvB,IAAI2H,GAAY/K,EAAEgL,QAAQhB,GAC1BA,EAASe,EAAW,CAACf,GAAUA,EAAOtJ,QACtC,IAAIuK,EAAUlK,KAAKmK,cAAclB,EAAQ5G,GACzC,IAAKA,EAAQoE,QAAUyD,EAAQlJ,OAAQ,CACrCqB,EAAQqE,QAAU,CAAC0D,MAAO,GAAIC,OAAQ,GAAIH,QAASA,GACnDlK,KAAK2D,QAAQ,SAAU3D,KAAMqC,GAE/B,OAAO2H,EAAWE,EAAQ,GAAKA,GAOjC1E,IAAK,SAASyD,EAAQ5G,GACpB,GAAI4G,GAAU,KAAM,OAEpB5G,EAAUpD,EAAE4F,OAAO,GAAIwE,EAAYhH,GACnC,GAAIA,EAAQgD,QAAUrF,KAAKsK,SAASrB,GAAS,CAC3CA,EAASjJ,KAAKqF,MAAM4D,EAAQ5G,IAAY,GAG1C,IAAI2H,GAAY/K,EAAEgL,QAAQhB,GAC1BA,EAASe,EAAW,CAACf,GAAUA,EAAOtJ,QAEtC,IAAIkK,EAAKxH,EAAQwH,GACjB,GAAIA,GAAM,KAAMA,GAAMA,EACtB,GAAIA,EAAK7J,KAAKgB,OAAQ6I,EAAK7J,KAAKgB,OAChC,GAAI6I,EAAK,EAAGA,GAAM7J,KAAKgB,OAAS,EAEhC,IAAIwE,EAAM,GACV,IAAI+E,EAAQ,GACZ,IAAIC,EAAU,GACd,IAAIC,EAAW,GACf,IAAIC,EAAW,GAEf,IAAIpB,EAAMjH,EAAQiH,IAClB,IAAIE,EAAQnH,EAAQmH,MACpB,IAAID,EAASlH,EAAQkH,OAErB,IAAIoB,EAAO,MACX,IAAIC,EAAW5K,KAAKkJ,YAAcW,GAAM,MAAQxH,EAAQsI,OAAS,MACjE,IAAIE,EAAW5L,EAAE6L,SAAS9K,KAAKkJ,YAAclJ,KAAKkJ,WAAa,KAI/D,IAAIvB,EAAO/G,EACX,IAAKA,EAAI,EAAGA,EAAIqI,EAAOjI,OAAQJ,IAAK,CAClC+G,EAAQsB,EAAOrI,GAIf,IAAImK,EAAW/K,KAAKgG,IAAI2B,GACxB,GAAIoD,EAAU,CACZ,GAAIvB,GAAS7B,IAAUoD,EAAU,CAC/B,IAAI/F,EAAQhF,KAAKsK,SAAS3C,GAASA,EAAM5C,WAAa4C,EACtD,GAAItF,EAAQgD,MAAOL,EAAQ+F,EAAS1F,MAAML,EAAO3C,GACjD0I,EAASvF,IAAIR,EAAO3C,GACpBmI,EAAQhI,KAAKuI,GACb,GAAIH,IAAaD,EAAMA,EAAOI,EAAS3D,WAAWyD,GAEpD,IAAKH,EAASK,EAAS7F,KAAM,CAC3BwF,EAASK,EAAS7F,KAAO,KACzBM,EAAIhD,KAAKuI,GAEX9B,EAAOrI,GAAKmK,OAGP,GAAIzB,EAAK,CACd3B,EAAQsB,EAAOrI,GAAKZ,KAAKgL,cAAcrD,EAAOtF,GAC9C,GAAIsF,EAAO,CACT4C,EAAM/H,KAAKmF,GACX3H,KAAKiL,cAActD,EAAOtF,GAC1BqI,EAAS/C,EAAMzC,KAAO,KACtBM,EAAIhD,KAAKmF,KAMf,GAAI4B,EAAQ,CACV,IAAK3I,EAAI,EAAGA,EAAIZ,KAAKgB,OAAQJ,IAAK,CAChC+G,EAAQ3H,KAAKiJ,OAAOrI,GACpB,IAAK8J,EAAS/C,EAAMzC,KAAMuF,EAASjI,KAAKmF,GAE1C,GAAI8C,EAASzJ,OAAQhB,KAAKmK,cAAcM,EAAUpI,GAIpD,IAAI6I,EAAe,MACnB,IAAItC,GAAWgC,GAAYtB,GAAOC,EAClC,GAAI/D,EAAIxE,QAAU4H,EAAS,CACzBsC,EAAelL,KAAKgB,SAAWwE,EAAIxE,QAAU/B,EAAEkM,KAAKnL,KAAKiJ,OAAQ,SAASmC,EAAGC,GAC3E,OAAOD,IAAM5F,EAAI6F,KAEnBrL,KAAKiJ,OAAOjI,OAAS,EACrB0I,EAAO1J,KAAKiJ,OAAQzD,EAAK,GACzBxF,KAAKgB,OAAShB,KAAKiJ,OAAOjI,YACrB,GAAIuJ,EAAMvJ,OAAQ,CACvB,GAAI4J,EAAUD,EAAO,KACrBjB,EAAO1J,KAAKiJ,OAAQsB,EAAOV,GAAM,KAAO7J,KAAKgB,OAAS6I,GACtD7J,KAAKgB,OAAShB,KAAKiJ,OAAOjI,OAI5B,GAAI2J,EAAM3K,KAAK2K,KAAK,CAAClE,OAAQ,OAG7B,IAAKpE,EAAQoE,OAAQ,CACnB,IAAK7F,EAAI,EAAGA,EAAI2J,EAAMvJ,OAAQJ,IAAK,CACjC,GAAIiJ,GAAM,KAAMxH,EAAQgJ,MAAQxB,EAAKjJ,EACrC+G,EAAQ4C,EAAM3J,GACd+G,EAAMhE,QAAQ,MAAOgE,EAAO3H,KAAMqC,GAEpC,GAAIsI,GAAQO,EAAclL,KAAK2D,QAAQ,OAAQ3D,KAAMqC,GACrD,GAAIkI,EAAMvJ,QAAUyJ,EAASzJ,QAAUwJ,EAAQxJ,OAAQ,CACrDqB,EAAQqE,QAAU,CAChB0D,MAAOG,EACPL,QAASO,EACTJ,OAAQG,GAEVxK,KAAK2D,QAAQ,SAAU3D,KAAMqC,IAKjC,OAAO2H,EAAWf,EAAO,GAAKA,GAOhCG,MAAO,SAASH,EAAQ5G,GACtBA,EAAUA,EAAUpD,EAAE6G,MAAMzD,GAAW,GACvC,IAAK,IAAIzB,EAAI,EAAGA,EAAIZ,KAAKiJ,OAAOjI,OAAQJ,IAAK,CAC3CZ,KAAKsL,iBAAiBtL,KAAKiJ,OAAOrI,GAAIyB,GAExCA,EAAQkJ,eAAiBvL,KAAKiJ,OAC9BjJ,KAAKmJ,SACLF,EAASjJ,KAAKsJ,IAAIL,EAAQhK,EAAE4F,OAAO,CAAC4B,OAAQ,MAAOpE,IACnD,IAAKA,EAAQoE,OAAQzG,KAAK2D,QAAQ,QAAS3D,KAAMqC,GACjD,OAAO4G,GAITzG,KAAM,SAASmF,EAAOtF,GACpB,OAAOrC,KAAKsJ,IAAI3B,EAAO1I,EAAE4F,OAAO,CAACgF,GAAI7J,KAAKgB,QAASqB,KAIrDmJ,IAAK,SAASnJ,GACZ,IAAIsF,EAAQ3H,KAAK6J,GAAG7J,KAAKgB,OAAS,GAClC,OAAOhB,KAAKuJ,OAAO5B,EAAOtF,IAI5BoJ,QAAS,SAAS9D,EAAOtF,GACvB,OAAOrC,KAAKsJ,IAAI3B,EAAO1I,EAAE4F,OAAO,CAACgF,GAAI,GAAIxH,KAI3CqJ,MAAO,SAASrJ,GACd,IAAIsF,EAAQ3H,KAAK6J,GAAG,GACpB,OAAO7J,KAAKuJ,OAAO5B,EAAOtF,IAI5B1C,MAAO,WACL,OAAOA,EAAM8D,MAAMzD,KAAKiJ,OAAQvF,YAKlCsC,IAAK,SAASnE,GACZ,GAAIA,GAAO,KAAM,YAAY,EAC7B,OAAO7B,KAAK2L,MAAM9J,IAChB7B,KAAK2L,MAAM3L,KAAK4L,QAAQ5L,KAAKsK,SAASzI,GAAOA,EAAIkD,WAAalD,EAAKA,EAAI+D,eACvE/D,EAAIqD,KAAOlF,KAAK2L,MAAM9J,EAAIqD,MAI9BiB,IAAK,SAAStE,GACZ,OAAO7B,KAAKgG,IAAInE,IAAQ,MAI1BgI,GAAI,SAASwB,GACX,GAAIA,EAAQ,EAAGA,GAASrL,KAAKgB,OAC7B,OAAOhB,KAAKiJ,OAAOoC,IAKrBQ,MAAO,SAAS7G,EAAO8G,GACrB,OAAO9L,KAAK8L,EAAQ,OAAS,UAAU9G,IAKzC+G,UAAW,SAAS/G,GAClB,OAAOhF,KAAK6L,MAAM7G,EAAO,OAM3B2F,KAAM,SAAStI,GACb,IAAI6G,EAAalJ,KAAKkJ,WACtB,IAAKA,EAAY,MAAM,IAAI8C,MAAM,0CACjC3J,IAAYA,EAAU,IAEtB,IAAIrB,EAASkI,EAAWlI,OACxB,GAAI/B,EAAEgN,WAAW/C,GAAaA,EAAaA,EAAW7F,KAAKrD,MAG3D,GAAIgB,IAAW,GAAK/B,EAAE6L,SAAS5B,GAAa,CAC1ClJ,KAAKiJ,OAASjJ,KAAKkM,OAAOhD,OACrB,CACLlJ,KAAKiJ,OAAO0B,KAAKzB,GAEnB,IAAK7G,EAAQoE,OAAQzG,KAAK2D,QAAQ,OAAQ3D,KAAMqC,GAChD,OAAOrC,MAITmM,MAAO,SAASlG,GACd,OAAOjG,KAAKuD,IAAI0C,EAAO,KAMzByB,MAAO,SAASrF,GACdA,EAAUpD,EAAE4F,OAAO,CAACQ,MAAO,MAAOhD,GAClC,IAAIuF,EAAUvF,EAAQuF,QACtB,IAAIxC,EAAapF,KACjBqC,EAAQuF,QAAU,SAASC,GACzB,IAAIM,EAAS9F,EAAQ+G,MAAQ,QAAU,MACvChE,EAAW+C,GAAQN,EAAMxF,GACzB,GAAIuF,EAASA,EAAQlD,KAAKrC,EAAQvB,QAASsE,EAAYyC,EAAMxF,GAC7D+C,EAAWzB,QAAQ,OAAQyB,EAAYyC,EAAMxF,IAE/C0F,EAAU/H,KAAMqC,GAChB,OAAOrC,KAAK+F,KAAK,OAAQ/F,KAAMqC,IAMjC+J,OAAQ,SAASzE,EAAOtF,GACtBA,EAAUA,EAAUpD,EAAE6G,MAAMzD,GAAW,GACvC,IAAI6F,EAAO7F,EAAQ6F,KACnBP,EAAQ3H,KAAKgL,cAAcrD,EAAOtF,GAClC,IAAKsF,EAAO,OAAO,MACnB,IAAKO,EAAMlI,KAAKsJ,IAAI3B,EAAOtF,GAC3B,IAAI+C,EAAapF,KACjB,IAAI4H,EAAUvF,EAAQuF,QACtBvF,EAAQuF,QAAU,SAASwD,EAAGvD,EAAMwE,GAClC,GAAInE,EAAM9C,EAAWkE,IAAI8B,EAAGiB,GAC5B,GAAIzE,EAASA,EAAQlD,KAAK2H,EAAavL,QAASsK,EAAGvD,EAAMwE,IAE3D1E,EAAMK,KAAK,KAAM3F,GACjB,OAAOsF,GAKTtC,MAAO,SAASwC,EAAMxF,GACpB,OAAOwF,GAIT/B,MAAO,WACL,OAAO,IAAI9F,KAAK8I,YAAY9I,KAAKiJ,OAAQ,CACvCtB,MAAO3H,KAAK2H,MACZuB,WAAYlJ,KAAKkJ,cAKrB0C,QAAS,SAAS5G,EAAOY,GACvB,OAAOZ,EAAMY,GAAe5F,KAAK2H,MAAM9H,UAAU+F,aAAe,OAIlE0G,OAAQ,WACN,OAAO,IAAIC,EAAmBvM,KAAMwM,IAItCzL,KAAM,WACJ,OAAO,IAAIwL,EAAmBvM,KAAMyM,IAItCC,QAAS,WACP,OAAO,IAAIH,EAAmBvM,KAAM2M,IAKtCxD,OAAQ,WACNnJ,KAAKgB,OAAS,EACdhB,KAAKiJ,OAAS,GACdjJ,KAAK2L,MAAS,IAKhBX,cAAe,SAAShG,EAAO3C,GAC7B,GAAIrC,KAAKsK,SAAStF,GAAQ,CACxB,IAAKA,EAAMI,WAAYJ,EAAMI,WAAapF,KAC1C,OAAOgF,EAET3C,EAAUA,EAAUpD,EAAE6G,MAAMzD,GAAW,GACvCA,EAAQ+C,WAAapF,KAErB,IAAI2H,EACJ,GAAI3H,KAAK2H,MAAM9H,UAAW,CACxB8H,EAAQ,IAAI3H,KAAK2H,MAAM3C,EAAO3C,OACzB,CAELsF,EAAQ3H,KAAK2H,MAAM3C,EAAO3C,GAG5B,IAAKsF,EAAMhC,gBAAiB,OAAOgC,EACnC3H,KAAK2D,QAAQ,UAAW3D,KAAM2H,EAAMhC,gBAAiBtD,GACrD,OAAO,OAIT8H,cAAe,SAASlB,EAAQ5G,GAC9B,IAAI6H,EAAU,GACd,IAAK,IAAItJ,EAAI,EAAGA,EAAIqI,EAAOjI,OAAQJ,IAAK,CACtC,IAAI+G,EAAQ3H,KAAKgG,IAAIiD,EAAOrI,IAC5B,IAAK+G,EAAO,SAEZ,IAAI0D,EAAQrL,KAAK4M,QAAQjF,GACzB3H,KAAKiJ,OAAOS,OAAO2B,EAAO,GAC1BrL,KAAKgB,gBAIEhB,KAAK2L,MAAMhE,EAAMzC,KACxB,IAAIxD,EAAK1B,KAAK4L,QAAQjE,EAAM5C,WAAY4C,EAAM/B,aAC9C,GAAIlE,GAAM,YAAa1B,KAAK2L,MAAMjK,GAElC,IAAKW,EAAQoE,OAAQ,CACnBpE,EAAQgJ,MAAQA,EAChB1D,EAAMhE,QAAQ,SAAUgE,EAAO3H,KAAMqC,GAGvC6H,EAAQ1H,KAAKmF,GACb3H,KAAKsL,iBAAiB3D,EAAOtF,GAE/B,OAAO6H,GAKTI,SAAU,SAAS3C,GACjB,OAAOA,aAAiB7C,GAI1BmG,cAAe,SAAStD,EAAOtF,GAC7BrC,KAAK2L,MAAMhE,EAAMzC,KAAOyC,EACxB,IAAIjG,EAAK1B,KAAK4L,QAAQjE,EAAM5C,WAAY4C,EAAM/B,aAC9C,GAAIlE,GAAM,KAAM1B,KAAK2L,MAAMjK,GAAMiG,EACjCA,EAAMxG,GAAG,MAAOnB,KAAK6M,cAAe7M,OAItCsL,iBAAkB,SAAS3D,EAAOtF,UACzBrC,KAAK2L,MAAMhE,EAAMzC,KACxB,IAAIxD,EAAK1B,KAAK4L,QAAQjE,EAAM5C,WAAY4C,EAAM/B,aAC9C,GAAIlE,GAAM,YAAa1B,KAAK2L,MAAMjK,GAClC,GAAI1B,OAAS2H,EAAMvC,kBAAmBuC,EAAMvC,WAC5CuC,EAAMlF,IAAI,MAAOzC,KAAK6M,cAAe7M,OAOvC6M,cAAe,SAASC,EAAOnF,EAAOvC,EAAY/C,GAChD,GAAIsF,EAAO,CACT,IAAKmF,IAAU,OAASA,IAAU,WAAa1H,IAAepF,KAAM,OACpE,GAAI8M,IAAU,UAAW9M,KAAKuJ,OAAO5B,EAAOtF,GAC5C,GAAIyK,IAAU,WAAY,CACxB,IAAI7F,EAASjH,KAAK4L,QAAQjE,EAAMF,qBAAsBE,EAAM/B,aAC5D,IAAIlE,EAAK1B,KAAK4L,QAAQjE,EAAM5C,WAAY4C,EAAM/B,aAC9C,GAAIqB,GAAU,YAAajH,KAAK2L,MAAM1E,GACtC,GAAIvF,GAAM,KAAM1B,KAAK2L,MAAMjK,GAAMiG,GAGrC3H,KAAK2D,QAAQF,MAAMzD,KAAM0D,cAQ7B,IAAIqJ,SAAoBC,SAAW,YAAcA,OAAOC,SACxD,GAAIF,EAAY,CACd/D,EAAWnJ,UAAUkN,GAAc/D,EAAWnJ,UAAUyM,OAU1D,IAAIC,EAAqB,SAASnH,EAAY8H,GAC5ClN,KAAKmN,YAAc/H,EACnBpF,KAAKoN,MAAQF,EACblN,KAAKqN,OAAS,GAMhB,IAAIb,EAAkB,EACtB,IAAIC,EAAgB,EACpB,IAAIE,EAAsB,EAG1B,GAAII,EAAY,CACdR,EAAmB1M,UAAUkN,GAAc,WACzC,OAAO/M,MAIXuM,EAAmB1M,UAAUyN,KAAO,WAClC,GAAItN,KAAKmN,YAAa,CAGpB,GAAInN,KAAKqN,OAASrN,KAAKmN,YAAYnM,OAAQ,CACzC,IAAI2G,EAAQ3H,KAAKmN,YAAYtD,GAAG7J,KAAKqN,QACrCrN,KAAKqN,SAGL,IAAIE,EACJ,GAAIvN,KAAKoN,QAAUZ,EAAiB,CAClCe,EAAQ5F,MACH,CACL,IAAIjG,EAAK1B,KAAKmN,YAAYvB,QAAQjE,EAAM5C,WAAY4C,EAAM/B,aAC1D,GAAI5F,KAAKoN,QAAUX,EAAe,CAChCc,EAAQ7L,MACH,CACL6L,EAAQ,CAAC7L,EAAIiG,IAGjB,MAAO,CAAC4F,MAAOA,EAAOC,KAAM,OAK9BxN,KAAKmN,iBAAmB,EAG1B,MAAO,CAACI,WAAY,EAAGC,KAAM,OAgB/B,IAAIC,EAAOrO,EAASqO,KAAO,SAASpL,GAClCrC,KAAKkF,IAAMjG,EAAE8C,SAAS,QACtB/B,KAAKiF,cAAcxB,MAAMzD,KAAM0D,WAC/BzE,EAAE4F,OAAO7E,KAAMf,EAAEyO,KAAKrL,EAASsL,IAC/B3N,KAAK4N,iBACL5N,KAAK0F,WAAWjC,MAAMzD,KAAM0D,YAI9B,IAAImK,EAAwB,iBAG5B,IAAIF,EAAc,CAAC,QAAS,aAAc,KAAM,KAAM,aAAc,YAAa,UAAW,UAG5F1O,EAAE4F,OAAO4I,EAAK5N,UAAWM,EAAQ,CAG/B2N,QAAS,MAIT5O,EAAG,SAAS6O,GACV,OAAO/N,KAAKgO,IAAIC,KAAKF,IAKvB9I,cAAe,aAIfS,WAAY,aAKZwI,OAAQ,WACN,OAAOlO,MAKTuJ,OAAQ,WACNvJ,KAAKmO,iBACLnO,KAAK2C,gBACL,OAAO3C,MAMTmO,eAAgB,WACdnO,KAAKgO,IAAIzE,UAKX6E,WAAY,SAASC,GACnBrO,KAAKsO,mBACLtO,KAAKuO,YAAYF,GACjBrO,KAAKwO,iBACL,OAAOxO,MAQTuO,YAAa,SAASE,GACpBzO,KAAKgO,IAAMS,aAAcrP,EAASF,EAAIuP,EAAKrP,EAASF,EAAEuP,GACtDzO,KAAKyO,GAAKzO,KAAKgO,IAAI,IAgBrBQ,eAAgB,SAAShO,GACvBA,IAAWA,EAASvB,EAAEsG,OAAOvF,KAAM,WACnC,IAAKQ,EAAQ,OAAOR,KACpBA,KAAKsO,mBACL,IAAK,IAAIjI,KAAO7F,EAAQ,CACtB,IAAI2H,EAAS3H,EAAO6F,GACpB,IAAKpH,EAAEgN,WAAW9D,GAASA,EAASnI,KAAKmI,GACzC,IAAKA,EAAQ,SACb,IAAIuG,EAAQrI,EAAIqI,MAAMb,GACtB7N,KAAK2O,SAASD,EAAM,GAAIA,EAAM,GAAIvG,EAAO9E,KAAKrD,OAEhD,OAAOA,MAMT2O,SAAU,SAASC,EAAWb,EAAUpJ,GACtC3E,KAAKgO,IAAI7M,GAAGyN,EAAY,kBAAoB5O,KAAKkF,IAAK6I,EAAUpJ,GAChE,OAAO3E,MAMTsO,iBAAkB,WAChB,GAAItO,KAAKgO,IAAKhO,KAAKgO,IAAIvL,IAAI,kBAAoBzC,KAAKkF,KACpD,OAAOlF,MAKT6O,WAAY,SAASD,EAAWb,EAAUpJ,GACxC3E,KAAKgO,IAAIvL,IAAImM,EAAY,kBAAoB5O,KAAKkF,IAAK6I,EAAUpJ,GACjE,OAAO3E,MAKT8O,eAAgB,SAAShB,GACvB,OAAOiB,SAASC,cAAclB,IAOhCF,eAAgB,WACd,IAAK5N,KAAKyO,GAAI,CACZ,IAAIzJ,EAAQ/F,EAAE4F,OAAO,GAAI5F,EAAEsG,OAAOvF,KAAM,eACxC,GAAIA,KAAK0B,GAAIsD,EAAMtD,GAAKzC,EAAEsG,OAAOvF,KAAM,MACvC,GAAIA,KAAKiP,UAAWjK,EAAM,SAAW/F,EAAEsG,OAAOvF,KAAM,aACpDA,KAAKoO,WAAWpO,KAAK8O,eAAe7P,EAAEsG,OAAOvF,KAAM,aACnDA,KAAKkP,eAAelK,OACf,CACLhF,KAAKoO,WAAWnP,EAAEsG,OAAOvF,KAAM,SAMnCkP,eAAgB,SAASnK,GACvB/E,KAAKgO,IAAI/H,KAAKlB,MAYlB,IAAIoK,EAAY,SAASzG,EAAM1H,EAAQmH,EAAQiH,GAC7C,OAAQpO,GACN,KAAK,EAAG,OAAO,WACb,OAAO0H,EAAKP,GAAQnI,KAAKoP,KAE3B,KAAK,EAAG,OAAO,SAAS7B,GACtB,OAAO7E,EAAKP,GAAQnI,KAAKoP,GAAY7B,IAEvC,KAAK,EAAG,OAAO,SAAShN,EAAUO,GAChC,OAAO4H,EAAKP,GAAQnI,KAAKoP,GAAYC,EAAG9O,EAAUP,MAAOc,IAE3D,KAAK,EAAG,OAAO,SAASP,EAAU+O,EAAYxO,GAC5C,OAAO4H,EAAKP,GAAQnI,KAAKoP,GAAYC,EAAG9O,EAAUP,MAAOsP,EAAYxO,IAEvE,QAAS,OAAO,WACd,IAAIgD,EAAOnE,EAAM+E,KAAKhB,WACtBI,EAAK2H,QAAQzL,KAAKoP,IAClB,OAAO1G,EAAKP,GAAQ1E,MAAMiF,EAAM5E,MAKtC,IAAIyL,EAAuB,SAASC,EAAO9G,EAAM+G,EAASL,GACxDnQ,EAAEyQ,KAAKD,EAAS,SAASzO,EAAQmH,GAC/B,GAAIO,EAAKP,GAASqH,EAAM3P,UAAUsI,GAAUgH,EAAUzG,EAAM1H,EAAQmH,EAAQiH,MAKhF,IAAIC,EAAK,SAAS9O,EAAUoP,GAC1B,GAAI1Q,EAAEgN,WAAW1L,GAAW,OAAOA,EACnC,GAAItB,EAAE2Q,SAASrP,KAAcoP,EAASrF,SAAS/J,GAAW,OAAOsP,EAAatP,GAC9E,GAAItB,EAAE6L,SAASvK,GAAW,OAAO,SAASoH,GAAS,OAAOA,EAAM3B,IAAIzF,IACpE,OAAOA,GAET,IAAIsP,EAAe,SAAS7K,GAC1B,IAAI8K,EAAU7Q,EAAEmH,QAAQpB,GACxB,OAAO,SAAS2C,GACd,OAAOmI,EAAQnI,EAAM5C,cAOzB,IAAIgL,EAAoB,CAACC,QAAS,EAAGN,KAAM,EAAGnM,IAAK,EAAG0M,QAAS,EAAGC,OAAQ,EACxEC,MAAO,EAAGC,OAAQ,EAAGC,YAAa,EAAGC,MAAO,EAAGrC,KAAM,EAAGsC,OAAQ,EAAGC,OAAQ,EAC3EC,OAAQ,EAAGC,OAAQ,EAAGC,MAAO,EAAGzM,IAAK,EAAGiH,KAAM,EAAGyF,IAAK,EAAGC,QAAS,EAAGC,SAAU,EAC/EC,SAAU,EAAGC,OAAQ,EAAGnN,IAAK,EAAGiG,IAAK,EAAGmH,QAAS,EAAGC,KAAM,EAAGpF,MAAO,EACpEqF,KAAM,EAAGC,KAAM,EAAGC,QAAS,EAAGC,KAAM,EAAGvH,KAAM,EAAGwH,KAAM,EAAGC,KAAM,EAC/DC,QAAS,EAAGC,WAAY,EAAG9E,QAAS,EAAG+E,QAAS,EAAGC,YAAa,EAChE/O,QAAS,EAAGgP,MAAO,EAAGC,OAAQ,EAAGC,UAAW,EAAGC,QAAS,EAAGC,QAAS,EACpE/F,OAAQ,EAAGgG,QAAS,EAAGC,UAAW,EAAGC,cAAe,GAKtD,IAAIC,EAAe,CAACtR,KAAM,EAAGuL,OAAQ,EAAGgG,MAAO,EAAGC,OAAQ,EAAG7E,KAAM,EACjE8E,KAAM,EAAGX,MAAO,EAAGhP,QAAS,GAI9B5D,EAAEyQ,KAAK,CACL,CAAC1G,EAAY+G,EAAmB,UAChC,CAACjL,EAAOuN,EAAc,eACrB,SAASI,GACV,IAAIC,EAAOD,EAAO,GACdhD,EAAUgD,EAAO,GACjBrD,EAAYqD,EAAO,GAEvBC,EAAKC,MAAQ,SAAS9Q,GACpB,IAAI+Q,EAAW3T,EAAEiR,OAAOjR,EAAE4T,UAAUhR,GAAM,SAASiR,EAAMrS,GACvDqS,EAAKrS,GAAQ,EACb,OAAOqS,GACN,IACHvD,EAAqBmD,EAAM7Q,EAAK+Q,EAAUxD,IAG5CG,EAAqBmD,EAAMzT,EAAGwQ,EAASL,KAqBzChQ,EAAS2G,KAAO,SAASoC,EAAQR,EAAOtF,GACtC,IAAI0Q,EAAOC,EAAU7K,GAGrBlJ,EAAEqG,SAASjD,IAAYA,EAAU,IAAK,CACpCpC,YAAab,EAASa,YACtBC,YAAad,EAASc,cAIxB,IAAI+S,EAAS,CAACF,KAAMA,EAAMG,SAAU,QAGpC,IAAK7Q,EAAQoG,IAAK,CAChBwK,EAAOxK,IAAMxJ,EAAEsG,OAAOoC,EAAO,QAAUgB,IAIzC,GAAItG,EAAQ8Q,MAAQ,MAAQxL,IAAUQ,IAAW,UAAYA,IAAW,UAAYA,IAAW,SAAU,CACvG8K,EAAOG,YAAc,mBACrBH,EAAOE,KAAOE,KAAKC,UAAUjR,EAAQ2C,OAAS2C,EAAM9B,OAAOxD,IAI7D,GAAIA,EAAQnC,YAAa,CACvB+S,EAAOG,YAAc,oCACrBH,EAAOE,KAAOF,EAAOE,KAAO,CAACxL,MAAOsL,EAAOE,MAAQ,GAKrD,GAAI9Q,EAAQpC,cAAgB8S,IAAS,OAASA,IAAS,UAAYA,IAAS,SAAU,CACpFE,EAAOF,KAAO,OACd,GAAI1Q,EAAQnC,YAAa+S,EAAOE,KAAKI,QAAUR,EAC/C,IAAIS,EAAanR,EAAQmR,WACzBnR,EAAQmR,WAAa,SAASlL,GAC5BA,EAAImL,iBAAiB,yBAA0BV,GAC/C,GAAIS,EAAY,OAAOA,EAAW/P,MAAMzD,KAAM0D,YAKlD,GAAIuP,EAAOF,OAAS,QAAU1Q,EAAQnC,YAAa,CACjD+S,EAAOS,YAAc,MAIvB,IAAIvR,EAAQE,EAAQF,MACpBE,EAAQF,MAAQ,SAASmG,EAAKqL,EAAYC,GACxCvR,EAAQsR,WAAaA,EACrBtR,EAAQuR,YAAcA,EACtB,GAAIzR,EAAOA,EAAMuC,KAAKrC,EAAQvB,QAASwH,EAAKqL,EAAYC,IAI1D,IAAItL,EAAMjG,EAAQiG,IAAMlJ,EAASyU,KAAK5U,EAAE4F,OAAOoO,EAAQ5Q,IACvDsF,EAAMhE,QAAQ,UAAWgE,EAAOW,EAAKjG,GACrC,OAAOiG,GAIT,IAAI0K,EAAY,CACd5G,OAAU,OACV0H,OAAU,MACVzL,MAAS,QACT0L,OAAU,SACVC,KAAQ,OAKV5U,EAASyU,KAAO,WACd,OAAOzU,EAASF,EAAE2U,KAAKpQ,MAAMrE,EAASF,EAAGwE,YAQ3C,IAAIuQ,EAAS7U,EAAS6U,OAAS,SAAS5R,GACtCA,IAAYA,EAAU,IACtBrC,KAAKiF,cAAcxB,MAAMzD,KAAM0D,WAC/B,GAAIrB,EAAQ6R,OAAQlU,KAAKkU,OAAS7R,EAAQ6R,OAC1ClU,KAAKmU,cACLnU,KAAK0F,WAAWjC,MAAMzD,KAAM0D,YAK9B,IAAI0Q,EAAgB,aACpB,IAAIC,EAAgB,eACpB,IAAIC,EAAgB,SACpB,IAAIC,EAAgB,2BAGpBtV,EAAE4F,OAAOoP,EAAOpU,UAAWM,EAAQ,CAIjC8E,cAAe,aAIfS,WAAY,aAQZ8O,MAAO,SAASA,EAAO/T,EAAMC,GAC3B,IAAKzB,EAAEwV,SAASD,GAAQA,EAAQxU,KAAK0U,eAAeF,GACpD,GAAIvV,EAAEgN,WAAWxL,GAAO,CACtBC,EAAWD,EACXA,EAAO,GAET,IAAKC,EAAUA,EAAWV,KAAKS,GAC/B,IAAIkU,EAAS3U,KACbZ,EAASwV,QAAQJ,MAAMA,EAAO,SAASK,GACrC,IAAI/Q,EAAO6Q,EAAOG,mBAAmBN,EAAOK,GAC5C,GAAIF,EAAOI,QAAQrU,EAAUoD,EAAMrD,KAAU,MAAO,CAClDkU,EAAOhR,QAAQF,MAAMkR,EAAQ,CAAC,SAAWlU,GAAM2D,OAAON,IACtD6Q,EAAOhR,QAAQ,QAASlD,EAAMqD,GAC9B1E,EAASwV,QAAQjR,QAAQ,QAASgR,EAAQlU,EAAMqD,MAGpD,OAAO9D,MAKT+U,QAAS,SAASrU,EAAUoD,EAAMrD,GAChC,GAAIC,EAAUA,EAAS+C,MAAMzD,KAAM8D,IAIrCkR,SAAU,SAASH,EAAUxS,GAC3BjD,EAASwV,QAAQI,SAASH,EAAUxS,GACpC,OAAOrC,MAMTmU,YAAa,WACX,IAAKnU,KAAKkU,OAAQ,OAClBlU,KAAKkU,OAASjV,EAAEsG,OAAOvF,KAAM,UAC7B,IAAIwU,EAAON,EAASjV,EAAE8B,KAAKf,KAAKkU,QAChC,OAAQM,EAAQN,EAAO1I,QAAU,KAAM,CACrCxL,KAAKwU,MAAMA,EAAOxU,KAAKkU,OAAOM,MAMlCE,eAAgB,SAASF,GACvBA,EAAQA,EAAM5L,QAAQ2L,EAAc,QACnC3L,QAAQwL,EAAe,WACvBxL,QAAQyL,EAAY,SAAS3F,EAAOuG,GACnC,OAAOA,EAAWvG,EAAQ,aAE3B9F,QAAQ0L,EAAY,YACrB,OAAO,IAAIY,OAAO,IAAMV,EAAQ,yBAMlCM,mBAAoB,SAASN,EAAOK,GAClC,IAAI5B,EAASuB,EAAMW,KAAKN,GAAUlV,MAAM,GACxC,OAAOV,EAAEsE,IAAI0P,EAAQ,SAASmC,EAAOxU,GAEnC,GAAIA,IAAMqS,EAAOjS,OAAS,EAAG,OAAOoU,GAAS,KAC7C,OAAOA,EAAQC,mBAAmBD,GAAS,UAcjD,IAAIE,EAAUlW,EAASkW,QAAU,WAC/BtV,KAAKsC,SAAW,GAChBtC,KAAKuV,SAAWvV,KAAKuV,SAASlS,KAAKrD,MAGnC,UAAWwV,SAAW,YAAa,CACjCxV,KAAKyV,SAAWD,OAAOC,SACvBzV,KAAK4U,QAAUY,OAAOZ,UAK1B,IAAIc,EAAgB,eAGpB,IAAIC,EAAe,aAGnB,IAAIC,EAAe,OAGnBN,EAAQO,QAAU,MAGlB5W,EAAE4F,OAAOyQ,EAAQzV,UAAWM,EAAQ,CAIlC2V,SAAU,GAGVC,OAAQ,WACN,IAAIC,EAAOhW,KAAKyV,SAASQ,SAASrN,QAAQ,SAAU,OACpD,OAAOoN,IAAShW,KAAKpB,OAASoB,KAAKkW,aAIrCC,UAAW,WACT,IAAIH,EAAOhW,KAAKoW,eAAepW,KAAKyV,SAASQ,UAC7C,IAAII,EAAWL,EAAKrW,MAAM,EAAGK,KAAKpB,KAAKoC,OAAS,GAAK,IACrD,OAAOqV,IAAarW,KAAKpB,MAM3BwX,eAAgB,SAASvB,GACvB,OAAOyB,UAAUzB,EAASjM,QAAQ,OAAQ,WAK5CsN,UAAW,WACT,IAAIxH,EAAQ1O,KAAKyV,SAASc,KAAK3N,QAAQ,MAAO,IAAI8F,MAAM,QACxD,OAAOA,EAAQA,EAAM,GAAK,IAK5B8H,QAAS,SAAShB,GAChB,IAAI9G,GAAS8G,GAAUxV,MAAMyV,SAASc,KAAK7H,MAAM,UACjD,OAAOA,EAAQA,EAAM,GAAK,IAI5B+H,QAAS,WACP,IAAIT,EAAOhW,KAAKoW,eACdpW,KAAKyV,SAASQ,SAAWjW,KAAKkW,aAC9BvW,MAAMK,KAAKpB,KAAKoC,OAAS,GAC3B,OAAOgV,EAAKU,OAAO,KAAO,IAAMV,EAAKrW,MAAM,GAAKqW,GAIlDW,YAAa,SAAS9B,GACpB,GAAIA,GAAY,KAAM,CACpB,GAAI7U,KAAK4W,gBAAkB5W,KAAK6W,iBAAkB,CAChDhC,EAAW7U,KAAKyW,cACX,CACL5B,EAAW7U,KAAKwW,WAGpB,OAAO3B,EAASjM,QAAQ8M,EAAe,KAKzCoB,MAAO,SAASzU,GACd,GAAIiT,EAAQO,QAAS,MAAM,IAAI7J,MAAM,6CACrCsJ,EAAQO,QAAU,KAIlB7V,KAAKqC,QAAmBpD,EAAE4F,OAAO,CAACjG,KAAM,KAAMoB,KAAKqC,QAASA,GAC5DrC,KAAKpB,KAAmBoB,KAAKqC,QAAQzD,KACrCoB,KAAK6W,iBAAmB7W,KAAKqC,QAAQ0U,aAAe,MACpD/W,KAAKgX,eAAmB,iBAAkBxB,SAAWzG,SAASkI,oBAAsB,GAAKlI,SAASkI,aAAe,GACjHjX,KAAKkX,eAAmBlX,KAAK6W,kBAAoB7W,KAAKgX,eACtDhX,KAAKmX,kBAAqBnX,KAAKqC,QAAQ+U,UACvCpX,KAAKqX,iBAAsBrX,KAAK4U,SAAW5U,KAAK4U,QAAQwC,WACxDpX,KAAK4W,cAAmB5W,KAAKmX,iBAAmBnX,KAAKqX,cACrDrX,KAAK6U,SAAmB7U,KAAK2W,cAG7B3W,KAAKpB,MAAQ,IAAMoB,KAAKpB,KAAO,KAAKgK,QAAQ+M,EAAc,KAI1D,GAAI3V,KAAK6W,kBAAoB7W,KAAKmX,gBAAiB,CAIjD,IAAKnX,KAAKqX,gBAAkBrX,KAAK+V,SAAU,CACzC,IAAIM,EAAWrW,KAAKpB,KAAKe,MAAM,GAAI,IAAM,IACzCK,KAAKyV,SAAS7M,QAAQyN,EAAW,IAAMrW,KAAKyW,WAE5C,OAAO,UAIF,GAAIzW,KAAKqX,eAAiBrX,KAAK+V,SAAU,CAC9C/V,KAAKgV,SAAShV,KAAKwW,UAAW,CAAC5N,QAAS,QAQ5C,IAAK5I,KAAKgX,gBAAkBhX,KAAK6W,mBAAqB7W,KAAK4W,cAAe,CACxE5W,KAAKsX,OAASvI,SAASC,cAAc,UACrChP,KAAKsX,OAAOC,IAAM,eAClBvX,KAAKsX,OAAOE,MAAMC,QAAU,OAC5BzX,KAAKsX,OAAOI,UAAY,EACxB,IAAIC,EAAO5I,SAAS4I,KAEpB,IAAIC,EAAUD,EAAKE,aAAa7X,KAAKsX,OAAQK,EAAKG,YAAYC,cAC9DH,EAAQ7I,SAASiJ,OACjBJ,EAAQ7I,SAASkJ,QACjBL,EAAQnC,SAASyC,KAAO,IAAMlY,KAAK6U,SAIrC,IAAIsD,EAAmB3C,OAAO2C,kBAAoB,SAASvJ,EAAWjK,GACpE,OAAOyT,YAAY,KAAOxJ,EAAWjK,IAKvC,GAAI3E,KAAK4W,cAAe,CACtBuB,EAAiB,WAAYnY,KAAKuV,SAAU,YACvC,GAAIvV,KAAKkX,iBAAmBlX,KAAKsX,OAAQ,CAC9Ca,EAAiB,aAAcnY,KAAKuV,SAAU,YACzC,GAAIvV,KAAK6W,iBAAkB,CAChC7W,KAAKqY,kBAAoBC,YAAYtY,KAAKuV,SAAUvV,KAAK8V,UAG3D,IAAK9V,KAAKqC,QAAQoE,OAAQ,OAAOzG,KAAKuY,WAKxCC,KAAM,WAEJ,IAAIC,EAAsBjD,OAAOiD,qBAAuB,SAAS7J,EAAWjK,GAC1E,OAAO+T,YAAY,KAAO9J,EAAWjK,IAIvC,GAAI3E,KAAK4W,cAAe,CACtB6B,EAAoB,WAAYzY,KAAKuV,SAAU,YAC1C,GAAIvV,KAAKkX,iBAAmBlX,KAAKsX,OAAQ,CAC9CmB,EAAoB,aAAczY,KAAKuV,SAAU,OAInD,GAAIvV,KAAKsX,OAAQ,CACfvI,SAAS4I,KAAKgB,YAAY3Y,KAAKsX,QAC/BtX,KAAKsX,OAAS,KAIhB,GAAItX,KAAKqY,kBAAmBO,cAAc5Y,KAAKqY,mBAC/C/C,EAAQO,QAAU,OAKpBrB,MAAO,SAASA,EAAO9T,GACrBV,KAAKsC,SAASmJ,QAAQ,CAAC+I,MAAOA,EAAO9T,SAAUA,KAKjD6U,SAAU,SAASjW,GACjB,IAAIwH,EAAU9G,KAAK2W,cAInB,GAAI7P,IAAY9G,KAAK6U,UAAY7U,KAAKsX,OAAQ,CAC5CxQ,EAAU9G,KAAKwW,QAAQxW,KAAKsX,OAAOS,eAGrC,GAAIjR,IAAY9G,KAAK6U,SAAU,OAAO,MACtC,GAAI7U,KAAKsX,OAAQtX,KAAKgV,SAASlO,GAC/B9G,KAAKuY,WAMPA,QAAS,SAAS1D,GAEhB,IAAK7U,KAAKmW,YAAa,OAAO,MAC9BtB,EAAW7U,KAAK6U,SAAW7U,KAAK2W,YAAY9B,GAC5C,OAAO5V,EAAEkM,KAAKnL,KAAKsC,SAAU,SAASW,GACpC,GAAIA,EAAQuR,MAAMvT,KAAK4T,GAAW,CAChC5R,EAAQvC,SAASmU,GACjB,OAAO,SAYbG,SAAU,SAASH,EAAUxS,GAC3B,IAAKiT,EAAQO,QAAS,OAAO,MAC7B,IAAKxT,GAAWA,IAAY,KAAMA,EAAU,CAACsB,UAAWtB,GAGxDwS,EAAW7U,KAAK2W,YAAY9B,GAAY,IAGxC,IAAIwB,EAAWrW,KAAKpB,KACpB,GAAIiW,IAAa,IAAMA,EAAS6B,OAAO,KAAO,IAAK,CACjDL,EAAWA,EAAS1W,MAAM,GAAI,IAAM,IAEtC,IAAI8I,EAAM4N,EAAWxB,EAGrBA,EAAWA,EAASjM,QAAQgN,EAAc,IAG1C,IAAIiD,EAAkB7Y,KAAKoW,eAAevB,GAE1C,GAAI7U,KAAK6U,WAAagE,EAAiB,OACvC7Y,KAAK6U,SAAWgE,EAGhB,GAAI7Y,KAAK4W,cAAe,CACtB5W,KAAK4U,QAAQvS,EAAQuG,QAAU,eAAiB,aAAa,GAAImG,SAAS+J,MAAOrQ,QAI5E,GAAIzI,KAAK6W,iBAAkB,CAChC7W,KAAK+Y,YAAY/Y,KAAKyV,SAAUZ,EAAUxS,EAAQuG,SAClD,GAAI5I,KAAKsX,QAAUzC,IAAa7U,KAAKwW,QAAQxW,KAAKsX,OAAOS,eAAgB,CACvE,IAAIH,EAAU5X,KAAKsX,OAAOS,cAK1B,IAAK1V,EAAQuG,QAAS,CACpBgP,EAAQ7I,SAASiJ,OACjBJ,EAAQ7I,SAASkJ,QAGnBjY,KAAK+Y,YAAYnB,EAAQnC,SAAUZ,EAAUxS,EAAQuG,cAKlD,CACL,OAAO5I,KAAKyV,SAASuD,OAAOvQ,GAE9B,GAAIpG,EAAQsB,QAAS,OAAO3D,KAAKuY,QAAQ1D,IAK3CkE,YAAa,SAAStD,EAAUZ,EAAUjM,GACxC,GAAIA,EAAS,CACX,IAAI2N,EAAOd,EAASc,KAAK3N,QAAQ,qBAAsB,IACvD6M,EAAS7M,QAAQ2N,EAAO,IAAM1B,OACzB,CAELY,EAASyC,KAAO,IAAMrD,MAO5BzV,EAASwV,QAAU,IAAIU,EAQvB,IAAIzQ,EAAS,SAASoU,EAAYC,GAChC,IAAIC,EAASnZ,KACb,IAAIoZ,EAKJ,GAAIH,GAAcha,EAAEkH,IAAI8S,EAAY,eAAgB,CAClDG,EAAQH,EAAWnQ,gBACd,CACLsQ,EAAQ,WAAY,OAAOD,EAAO1V,MAAMzD,KAAM0D,YAIhDzE,EAAE4F,OAAOuU,EAAOD,EAAQD,GAIxBE,EAAMvZ,UAAYZ,EAAEmN,OAAO+M,EAAOtZ,UAAWoZ,GAC7CG,EAAMvZ,UAAUiJ,YAAcsQ,EAI9BA,EAAMC,UAAYF,EAAOtZ,UAEzB,OAAOuZ,GAITtU,EAAMD,OAASmE,EAAWnE,OAASoP,EAAOpP,OAAS4I,EAAK5I,OAASyQ,EAAQzQ,OAASA,EAGlF,IAAI8D,EAAW,WACb,MAAM,IAAIqD,MAAM,mDAIlB,IAAIjE,EAAY,SAASJ,EAAOtF,GAC9B,IAAIF,EAAQE,EAAQF,MACpBE,EAAQF,MAAQ,SAAS0F,GACvB,GAAI1F,EAAOA,EAAMuC,KAAKrC,EAAQvB,QAAS6G,EAAOE,EAAMxF,GACpDsF,EAAMhE,QAAQ,QAASgE,EAAOE,EAAMxF,KAIxC,OAAOjD"}
\ No newline at end of file
diff --git a/web/core/assets/vendor/backbone/backbone.js b/web/core/assets/vendor/backbone/backbone.js
index 3e09d0dcb0..fd64012a35 100644
--- a/web/core/assets/vendor/backbone/backbone.js
+++ b/web/core/assets/vendor/backbone/backbone.js
@@ -1,6 +1,6 @@
-//     Backbone.js 1.4.0
+//     Backbone.js 1.4.1
 
-//     (c) 2010-2019 Jeremy Ashkenas and DocumentCloud
+//     (c) 2010-2022 Jeremy Ashkenas and DocumentCloud
 //     Backbone may be freely distributed under the MIT license.
 //     For all details and documentation:
 //     http://backbonejs.org
@@ -44,7 +44,7 @@
   var slice = Array.prototype.slice;
 
   // Current version of the library. Keep in sync with `package.json`.
-  Backbone.VERSION = '1.4.0';
+  Backbone.VERSION = '1.4.1';
 
   // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns
   // the `$` variable.
@@ -516,7 +516,11 @@
       }
 
       // Update the `id`.
-      if (this.idAttribute in attrs) this.id = this.get(this.idAttribute);
+      if (this.idAttribute in attrs) {
+        var prevId = this.id;
+        this.id = this.get(this.idAttribute);
+        this.trigger('changeId', this, prevId, options);
+      }
 
       // Trigger all relevant attribute changes.
       if (!silent) {
@@ -994,7 +998,7 @@
     get: function(obj) {
       if (obj == null) return void 0;
       return this._byId[obj] ||
-        this._byId[this.modelId(this._isModel(obj) ? obj.attributes : obj)] ||
+        this._byId[this.modelId(this._isModel(obj) ? obj.attributes : obj, obj.idAttribute)] ||
         obj.cid && this._byId[obj.cid];
     },
 
@@ -1098,8 +1102,8 @@
     },
 
     // Define how to uniquely identify models in the collection.
-    modelId: function(attrs) {
-      return attrs[this.model.prototype.idAttribute || 'id'];
+    modelId: function(attrs, idAttribute) {
+      return attrs[idAttribute || this.model.prototype.idAttribute || 'id'];
     },
 
     // Get an iterator of all models in this collection.
@@ -1134,7 +1138,15 @@
       }
       options = options ? _.clone(options) : {};
       options.collection = this;
-      var model = new this.model(attrs, options);
+
+      var model;
+      if (this.model.prototype) {
+        model = new this.model(attrs, options);
+      } else {
+        // ES class methods didn't have prototype
+        model = this.model(attrs, options);
+      }
+
       if (!model.validationError) return model;
       this.trigger('invalid', this, model.validationError, options);
       return false;
@@ -1154,7 +1166,7 @@
         // Remove references before triggering 'remove' event to prevent an
         // infinite loop. #3693
         delete this._byId[model.cid];
-        var id = this.modelId(model.attributes);
+        var id = this.modelId(model.attributes, model.idAttribute);
         if (id != null) delete this._byId[id];
 
         if (!options.silent) {
@@ -1177,7 +1189,7 @@
     // Internal method to create a model's ties to a collection.
     _addReference: function(model, options) {
       this._byId[model.cid] = model;
-      var id = this.modelId(model.attributes);
+      var id = this.modelId(model.attributes, model.idAttribute);
       if (id != null) this._byId[id] = model;
       model.on('all', this._onModelEvent, this);
     },
@@ -1185,7 +1197,7 @@
     // Internal method to sever a model's ties to a collection.
     _removeReference: function(model, options) {
       delete this._byId[model.cid];
-      var id = this.modelId(model.attributes);
+      var id = this.modelId(model.attributes, model.idAttribute);
       if (id != null) delete this._byId[id];
       if (this === model.collection) delete model.collection;
       model.off('all', this._onModelEvent, this);
@@ -1199,13 +1211,11 @@
       if (model) {
         if ((event === 'add' || event === 'remove') && collection !== this) return;
         if (event === 'destroy') this.remove(model, options);
-        if (event === 'change') {
-          var prevId = this.modelId(model.previousAttributes());
-          var id = this.modelId(model.attributes);
-          if (prevId !== id) {
-            if (prevId != null) delete this._byId[prevId];
-            if (id != null) this._byId[id] = model;
-          }
+        if (event === 'changeId') {
+          var prevId = this.modelId(model.previousAttributes(), model.idAttribute);
+          var id = this.modelId(model.attributes, model.idAttribute);
+          if (prevId != null) delete this._byId[prevId];
+          if (id != null) this._byId[id] = model;
         }
       }
       this.trigger.apply(this, arguments);
@@ -1261,7 +1271,7 @@
         if (this._kind === ITERATOR_VALUES) {
           value = model;
         } else {
-          var id = this._collection.modelId(model.attributes);
+          var id = this._collection.modelId(model.attributes, model.idAttribute);
           if (this._kind === ITERATOR_KEYS) {
             value = id;
           } else { // ITERATOR_KEYSVALUES
@@ -1615,11 +1625,11 @@
 
   // Map from CRUD to HTTP for our default `Backbone.sync` implementation.
   var methodMap = {
-    create: 'POST',
-    update: 'PUT',
-    patch: 'PATCH',
-    delete: 'DELETE',
-    read: 'GET'
+    'create': 'POST',
+    'update': 'PUT',
+    'patch': 'PATCH',
+    'delete': 'DELETE',
+    'read': 'GET'
   };
 
   // Set the default implementation of `Backbone.ajax` to proxy through to `$`.
@@ -1712,11 +1722,11 @@
     // against the current location hash.
     _routeToRegExp: function(route) {
       route = route.replace(escapeRegExp, '\\$&')
-        .replace(optionalParam, '(?:$1)?')
-        .replace(namedParam, function(match, optional) {
-          return optional ? match : '([^/?]+)';
-        })
-        .replace(splatParam, '([^?]*?)');
+      .replace(optionalParam, '(?:$1)?')
+      .replace(namedParam, function(match, optional) {
+        return optional ? match : '([^/?]+)';
+      })
+      .replace(splatParam, '([^?]*?)');
       return new RegExp('^' + route + '(?:\\?([\\s\\S]*))?$');
     },
 
diff --git a/web/core/assets/vendor/ckeditor5/list/list.js b/web/core/assets/vendor/ckeditor5/list/list.js
index 54d830d3ac..a9da4d8961 100644
--- a/web/core/assets/vendor/ckeditor5/list/list.js
+++ b/web/core/assets/vendor/ckeditor5/list/list.js
@@ -2,4 +2,4 @@
 /*!
  * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  * For licensing, see LICENSE.md.
- */(()=>{var t={389:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var s=i(609),n=i.n(s)()((function(t){return t[1]}));n.push([t.id,".ck.ck-collapsible.ck-collapsible_collapsed>.ck-collapsible__children{display:none}:root{--ck-collapsible-arrow-size:calc(var(--ck-icon-size)*0.5)}.ck.ck-collapsible>.ck.ck-button{border-radius:0;font-weight:700;padding:var(--ck-spacing-medium) var(--ck-spacing-large);width:100%}.ck.ck-collapsible>.ck.ck-button:focus{background:transparent}.ck.ck-collapsible>.ck.ck-button:active,.ck.ck-collapsible>.ck.ck-button:hover:not(:focus),.ck.ck-collapsible>.ck.ck-button:not(:focus){background:transparent;border-color:transparent;box-shadow:none}.ck.ck-collapsible>.ck.ck-button>.ck-icon{margin-right:var(--ck-spacing-medium);width:var(--ck-collapsible-arrow-size)}.ck.ck-collapsible>.ck-collapsible__children{padding:0 var(--ck-spacing-large) var(--ck-spacing-large)}.ck.ck-collapsible.ck-collapsible_collapsed>.ck.ck-button .ck-icon{transform:rotate(-90deg)}",""]);const o=n},543:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var s=i(609),n=i.n(s)()((function(t){return t[1]}));n.push([t.id,".ck.ck-list-properties.ck-list-properties_without-styles{padding:var(--ck-spacing-large)}.ck.ck-list-properties.ck-list-properties_without-styles>*{min-width:14em}.ck.ck-list-properties.ck-list-properties_without-styles>*+*{margin-top:var(--ck-spacing-standard)}.ck.ck-list-properties.ck-list-properties_with-numbered-properties>.ck-list-styles-list{grid-template-columns:repeat(4,auto)}.ck.ck-list-properties.ck-list-properties_with-numbered-properties>.ck-collapsible{border-top:1px solid var(--ck-color-base-border)}.ck.ck-list-properties.ck-list-properties_with-numbered-properties>.ck-collapsible>.ck-collapsible__children>*{width:100%}.ck.ck-list-properties.ck-list-properties_with-numbered-properties>.ck-collapsible>.ck-collapsible__children>*+*{margin-top:var(--ck-spacing-standard)}.ck.ck-list-properties .ck.ck-numbered-list-properties__start-index .ck-input{min-width:auto;width:100%}.ck.ck-list-properties .ck.ck-numbered-list-properties__reversed-order{background:transparent;margin-bottom:calc(var(--ck-spacing-tiny)*-1);padding-left:0;padding-right:0}.ck.ck-list-properties .ck.ck-numbered-list-properties__reversed-order:active,.ck.ck-list-properties .ck.ck-numbered-list-properties__reversed-order:hover{background:none;border-color:transparent;box-shadow:none}",""]);const o=n},657:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var s=i(609),n=i.n(s)()((function(t){return t[1]}));n.push([t.id,".ck.ck-list-styles-list{display:grid}:root{--ck-list-style-button-size:44px}.ck.ck-list-styles-list{column-gap:var(--ck-spacing-medium);grid-template-columns:repeat(3,auto);padding:var(--ck-spacing-large);row-gap:var(--ck-spacing-medium)}.ck.ck-list-styles-list .ck-button{box-sizing:content-box;margin:0;padding:0}.ck.ck-list-styles-list .ck-button,.ck.ck-list-styles-list .ck-button .ck-icon{height:var(--ck-list-style-button-size);width:var(--ck-list-style-button-size)}",""]);const o=n},250:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var s=i(609),n=i.n(s)()((function(t){return t[1]}));n.push([t.id,':root{--ck-todo-list-checkmark-size:16px}.ck-content .todo-list{list-style:none}.ck-content .todo-list li{margin-bottom:5px}.ck-content .todo-list li .todo-list{margin-top:5px}.ck-content .todo-list .todo-list__label>input{-webkit-appearance:none;border:0;display:inline-block;height:var(--ck-todo-list-checkmark-size);left:-25px;margin-left:0;margin-right:-15px;position:relative;right:0;vertical-align:middle;width:var(--ck-todo-list-checkmark-size)}.ck-content .todo-list .todo-list__label>input:before{border:1px solid #333;border-radius:2px;box-sizing:border-box;content:"";display:block;height:100%;position:absolute;transition:box-shadow .25s ease-in-out,background .25s ease-in-out,border .25s ease-in-out;width:100%}.ck-content .todo-list .todo-list__label>input:after{border-color:transparent;border-style:solid;border-width:0 calc(var(--ck-todo-list-checkmark-size)/8) calc(var(--ck-todo-list-checkmark-size)/8) 0;box-sizing:content-box;content:"";display:block;height:calc(var(--ck-todo-list-checkmark-size)/2.6);left:calc(var(--ck-todo-list-checkmark-size)/3);pointer-events:none;position:absolute;top:calc(var(--ck-todo-list-checkmark-size)/5.3);transform:rotate(45deg);width:calc(var(--ck-todo-list-checkmark-size)/5.3)}.ck-content .todo-list .todo-list__label>input[checked]:before{background:#26ab33;border-color:#26ab33}.ck-content .todo-list .todo-list__label>input[checked]:after{border-color:#fff}.ck-content .todo-list .todo-list__label .todo-list__label__description{vertical-align:middle}[dir=rtl] .todo-list .todo-list__label>input{left:0;margin-left:-15px;margin-right:0;right:-25px}.ck-editor__editable .todo-list .todo-list__label>input{cursor:pointer}.ck-editor__editable .todo-list .todo-list__label>input:hover:before{box-shadow:0 0 0 5px rgba(0,0,0,.1)}',""]);const o=n},609:t=>{"use strict";t.exports=function(t){var e=[];return e.toString=function(){return this.map((function(e){var i=t(e);return e[2]?"@media ".concat(e[2]," {").concat(i,"}"):i})).join("")},e.i=function(t,i,s){"string"==typeof t&&(t=[[null,t,""]]);var n={};if(s)for(var o=0;o<this.length;o++){var r=this[o][0];null!=r&&(n[r]=!0)}for(var l=0;l<t.length;l++){var a=[].concat(t[l]);s&&n[a[0]]||(i&&(a[2]?a[2]="".concat(i," and ").concat(a[2]):a[2]=i),e.push(a))}},e}},62:(t,e,i)=>{"use strict";var s,n=function(){return void 0===s&&(s=Boolean(window&&document&&document.all&&!window.atob)),s},o=function(){var t={};return function(e){if(void 0===t[e]){var i=document.querySelector(e);if(window.HTMLIFrameElement&&i instanceof window.HTMLIFrameElement)try{i=i.contentDocument.head}catch(t){i=null}t[e]=i}return t[e]}}(),r=[];function l(t){for(var e=-1,i=0;i<r.length;i++)if(r[i].identifier===t){e=i;break}return e}function a(t,e){for(var i={},s=[],n=0;n<t.length;n++){var o=t[n],a=e.base?o[0]+e.base:o[0],c=i[a]||0,d="".concat(a," ").concat(c);i[a]=c+1;var u=l(d),m={css:o[1],media:o[2],sourceMap:o[3]};-1!==u?(r[u].references++,r[u].updater(m)):r.push({identifier:d,updater:b(m,e),references:1}),s.push(d)}return s}function c(t){var e=document.createElement("style"),s=t.attributes||{};if(void 0===s.nonce){var n=i.nc;n&&(s.nonce=n)}if(Object.keys(s).forEach((function(t){e.setAttribute(t,s[t])})),"function"==typeof t.insert)t.insert(e);else{var r=o(t.insert||"head");if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(e)}return e}var d,u=(d=[],function(t,e){return d[t]=e,d.filter(Boolean).join("\n")});function m(t,e,i,s){var n=i?"":s.media?"@media ".concat(s.media," {").concat(s.css,"}"):s.css;if(t.styleSheet)t.styleSheet.cssText=u(e,n);else{var o=document.createTextNode(n),r=t.childNodes;r[e]&&t.removeChild(r[e]),r.length?t.insertBefore(o,r[e]):t.appendChild(o)}}function p(t,e,i){var s=i.css,n=i.media,o=i.sourceMap;if(n?t.setAttribute("media",n):t.removeAttribute("media"),o&&"undefined"!=typeof btoa&&(s+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),t.styleSheet)t.styleSheet.cssText=s;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(s))}}var h=null,g=0;function b(t,e){var i,s,n;if(e.singleton){var o=g++;i=h||(h=c(e)),s=m.bind(null,i,o,!1),n=m.bind(null,i,o,!0)}else i=c(e),s=p.bind(null,i,e),n=function(){!function(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t)}(i)};return s(t),function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap)return;s(t=e)}else n()}}t.exports=function(t,e){(e=e||{}).singleton||"boolean"==typeof e.singleton||(e.singleton=n());var i=a(t=t||[],e);return function(t){if(t=t||[],"[object Array]"===Object.prototype.toString.call(t)){for(var s=0;s<i.length;s++){var n=l(i[s]);r[n].references--}for(var o=a(t,e),c=0;c<i.length;c++){var d=l(i[c]);0===r[d].references&&(r[d].updater(),r.splice(d,1))}i=o}}}},704:(t,e,i)=>{t.exports=i(79)("./src/core.js")},492:(t,e,i)=>{t.exports=i(79)("./src/engine.js")},331:(t,e,i)=>{t.exports=i(79)("./src/enter.js")},181:(t,e,i)=>{t.exports=i(79)("./src/typing.js")},273:(t,e,i)=>{t.exports=i(79)("./src/ui.js")},209:(t,e,i)=>{t.exports=i(79)("./src/utils.js")},79:t=>{"use strict";t.exports=CKEditor5.dll}},e={};function i(s){var n=e[s];if(void 0!==n)return n.exports;var o=e[s]={id:s,exports:{}};return t[s](o,o.exports,i),o.exports}i.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return i.d(e,{a:e}),e},i.d=(t,e)=>{for(var s in e)i.o(e,s)&&!i.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:e[s]})},i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),i.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var s={};(()=>{"use strict";i.r(s),i.d(s,{List:()=>j,ListEditing:()=>H,ListProperties:()=>ut,ListPropertiesEditing:()=>G,ListPropertiesUI:()=>ct,ListUI:()=>D,TodoList:()=>It,TodoListEditing:()=>wt,TodoListUI:()=>yt});var t=i(704),e=i(209);class n extends t.Command{constructor(t,e){super(t),this.type=e}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(t={}){const e=this.editor.model,i=e.document,s=Array.from(i.selection.getSelectedBlocks()).filter((t=>r(t,e.schema))),n=void 0!==t.forceValue?!t.forceValue:this.value;e.change((t=>{if(n){let e=s[s.length-1].nextSibling,i=Number.POSITIVE_INFINITY,n=[];for(;e&&"listItem"==e.name&&0!==e.getAttribute("listIndent");){const t=e.getAttribute("listIndent");t<i&&(i=t);const s=t-i;n.push({element:e,listIndent:s}),e=e.nextSibling}n=n.reverse();for(const e of n)t.setAttribute("listIndent",e.listIndent,e.element)}if(!n){let t=Number.POSITIVE_INFINITY;for(const e of s)e.is("element","listItem")&&e.getAttribute("listIndent")<t&&(t=e.getAttribute("listIndent"));t=0===t?1:t,o(s,!0,t),o(s,!1,t)}for(const e of s.reverse())n&&"listItem"==e.name?t.rename(e,"paragraph"):n||"listItem"==e.name?n||"listItem"!=e.name||e.getAttribute("listType")==this.type||t.setAttribute("listType",this.type,e):(t.setAttributes({listType:this.type,listIndent:0},e),t.rename(e,"listItem"));this.fire("_executeCleanup",s)}))}_getValue(){const t=(0,e.first)(this.editor.model.document.selection.getSelectedBlocks());return!!t&&t.is("element","listItem")&&t.getAttribute("listType")==this.type}_checkEnabled(){if(this.value)return!0;const t=this.editor.model.document.selection,i=this.editor.model.schema,s=(0,e.first)(t.getSelectedBlocks());return!!s&&r(s,i)}}function o(t,e,i){const s=e?t[0]:t[t.length-1];if(s.is("element","listItem")){let n=s[e?"previousSibling":"nextSibling"],o=s.getAttribute("listIndent");for(;n&&n.is("element","listItem")&&n.getAttribute("listIndent")>=i;)o>n.getAttribute("listIndent")&&(o=n.getAttribute("listIndent")),n.getAttribute("listIndent")==o&&t[e?"unshift":"push"](n),n=n[e?"previousSibling":"nextSibling"]}}function r(t,e){return e.checkChild(t.parent,"listItem")&&!e.isObject(t)}class l extends t.Command{constructor(t,e){super(t),this._indentBy="forward"==e?1:-1}refresh(){this.isEnabled=this._checkEnabled()}execute(){const t=this.editor.model,e=t.document;let i=Array.from(e.selection.getSelectedBlocks());t.change((t=>{const e=i[i.length-1];let s=e.nextSibling;for(;s&&"listItem"==s.name&&s.getAttribute("listIndent")>e.getAttribute("listIndent");)i.push(s),s=s.nextSibling;this._indentBy<0&&(i=i.reverse());for(const e of i){const i=e.getAttribute("listIndent")+this._indentBy;i<0?t.rename(e,"paragraph"):t.setAttribute("listIndent",i,e)}this.fire("_executeCleanup",i)}))}_checkEnabled(){const t=(0,e.first)(this.editor.model.document.selection.getSelectedBlocks());if(!t||!t.is("element","listItem"))return!1;if(this._indentBy>0){const e=t.getAttribute("listIndent"),i=t.getAttribute("listType");let s=t.previousSibling;for(;s&&s.is("element","listItem")&&s.getAttribute("listIndent")>=e;){if(s.getAttribute("listIndent")==e)return s.getAttribute("listType")==i;s=s.previousSibling}return!1}return!0}}var a=i(331),c=i(181),d=i(492),u=i(273);function m(t,e){const i=e.mapper,s=e.writer,n="numbered"==t.getAttribute("listType")?"ol":"ul",o=function(t){const e=t.createContainerElement("li");return e.getFillerOffset=I,e}(s),r=s.createContainerElement(n,null);return s.insert(s.createPositionAt(r,0),o),i.bindElements(t,o),o}function p(t,e,i,s){const n=e.parent,o=i.mapper,r=i.writer;let l=o.toViewPosition(s.createPositionBefore(t));const a=b(t.previousSibling,{sameIndent:!0,smallerIndent:!0,listIndent:t.getAttribute("listIndent")}),c=t.previousSibling;if(a&&a.getAttribute("listIndent")==t.getAttribute("listIndent")){const t=o.toViewElement(a);l=r.breakContainer(r.createPositionAfter(t))}else if(c&&"listItem"==c.name){l=o.toViewPosition(s.createPositionAt(c,"end"));const t=o.findMappedViewAncestor(l),e=v(t);l=e?r.createPositionBefore(e):r.createPositionAt(t,"end")}else l=o.toViewPosition(s.createPositionBefore(t));if(l=g(l),r.insert(l,n),c&&"listItem"==c.name){const t=o.toViewElement(c),i=r.createRange(r.createPositionAt(t,0),l).getWalker({ignoreElementEnd:!0});for(const t of i)if(t.item.is("element","li")){const s=r.breakContainer(r.createPositionBefore(t.item)),n=t.item.parent,o=r.createPositionAt(e,"end");h(r,o.nodeBefore,o.nodeAfter),r.move(r.createRangeOn(n),o),i.position=s}}else{const i=n.nextSibling;if(i&&(i.is("element","ul")||i.is("element","ol"))){let s=null;for(const e of i.getChildren()){const i=o.toModelElement(e);if(!(i&&i.getAttribute("listIndent")>t.getAttribute("listIndent")))break;s=e}s&&(r.breakContainer(r.createPositionAfter(s)),r.move(r.createRangeOn(s.parent),r.createPositionAt(e,"end")))}}h(r,n,n.nextSibling),h(r,n.previousSibling,n)}function h(t,e,i){return!e||!i||"ul"!=e.name&&"ol"!=e.name||e.name!=i.name||e.getAttribute("class")!==i.getAttribute("class")?null:t.mergeContainers(t.createPositionAfter(e))}function g(t){return t.getLastMatchingPosition((t=>t.item.is("uiElement")))}function b(t,e){const i=!!e.sameIndent,s=!!e.smallerIndent,n=e.listIndent;let o=t;for(;o&&"listItem"==o.name;){const t=o.getAttribute("listIndent");if(i&&n==t||s&&n>t)return o;o="forward"===e.direction?o.nextSibling:o.previousSibling}return null}function f(t,e,i,s){t.ui.componentFactory.add(e,(n=>{const o=t.commands.get(e),r=new u.ButtonView(n);return r.set({label:i,icon:s,tooltip:!0,isToggleable:!0}),r.bind("isOn","isEnabled").to(o,"value","isEnabled"),r.on("execute",(()=>{t.execute(e),t.editing.view.focus()})),r}))}function v(t){for(const e of t.getChildren())if("ul"==e.name||"ol"==e.name)return e;return null}function w(t,e){const i=[],s=t.parent,n={ignoreElementEnd:!0,startPosition:t,shallow:!0,direction:e},o=s.getAttribute("listIndent"),r=[...new d.TreeWalker(n)].filter((t=>t.item.is("element"))).map((t=>t.item));for(const t of r){if(!t.is("element","listItem"))break;if(t.getAttribute("listIndent")<o)break;if(!(t.getAttribute("listIndent")>o)){if(t.getAttribute("listType")!==s.getAttribute("listType"))break;if(t.getAttribute("listStyle")!==s.getAttribute("listStyle"))break;if(t.getAttribute("listReversed")!==s.getAttribute("listReversed"))break;if(t.getAttribute("listStart")!==s.getAttribute("listStart"))break;"backward"===e?i.unshift(t):i.push(t)}}return i}function y(t){let e=[...t.document.selection.getSelectedBlocks()].filter((t=>t.is("element","listItem"))).map((e=>{const i=t.change((t=>t.createPositionAt(e,0)));return[...w(i,"backward"),...w(i,"forward")]})).flat();return e=[...new Set(e)],e}const k=["disc","circle","square"],A=["decimal","decimal-leading-zero","lower-roman","upper-roman","lower-latin","upper-latin"];function I(){const t=!this.isEmpty&&("ul"==this.getChild(0).name||"ol"==this.getChild(0).name);return this.isEmpty||t?0:d.getFillerOffset.call(this)}function x(t){return(e,i,s)=>{const n=s.consumable;if(!n.test(i.item,"insert")||!n.test(i.item,"attribute:listType")||!n.test(i.item,"attribute:listIndent"))return;n.consume(i.item,"insert"),n.consume(i.item,"attribute:listType"),n.consume(i.item,"attribute:listIndent");const o=i.item;p(o,m(o,s),s,t)}}function T(t,e,i){if(!i.consumable.test(e.item,t.name))return;const s=i.mapper.toViewElement(e.item),n=i.writer;n.breakContainer(n.createPositionBefore(s)),n.breakContainer(n.createPositionAfter(s));const o=s.parent,r="numbered"==e.attributeNewValue?"ol":"ul";n.rename(r,o)}function V(t,e,i){i.consumable.consume(e.item,t.name);const s=i.mapper.toViewElement(e.item).parent,n=i.writer;h(n,s,s.nextSibling),h(n,s.previousSibling,s)}function C(t,e,i){if(i.consumable.test(e.item,t.name)&&"listItem"!=e.item.name){let t=i.mapper.toViewPosition(e.range.start);const s=i.writer,n=[];for(;("ul"==t.parent.name||"ol"==t.parent.name)&&(t=s.breakContainer(t),"li"==t.parent.name);){const e=t,i=s.createPositionAt(t.parent,"end");if(!e.isEqual(i)){const t=s.remove(s.createRange(e,i));n.push(t)}t=s.createPositionAfter(t.parent)}if(n.length>0){for(let e=0;e<n.length;e++){const i=t.nodeBefore;if(t=s.insert(t,n[e]).end,e>0){const e=h(s,i,i.nextSibling);e&&e.parent==i&&t.offset--}}h(s,t.nodeBefore,t.nodeAfter)}}}function S(t,e,i){const s=i.mapper.toViewPosition(e.position),n=s.nodeBefore,o=s.nodeAfter;h(i.writer,n,o)}function _(t,e,i){if(i.consumable.consume(e.viewItem,{name:!0})){const t=i.writer,s=t.createElement("listItem"),n=function(t){let e=0,i=t.parent;for(;i;){if(i.is("element","li"))e++;else{const t=i.previousSibling;t&&t.is("element","li")&&e++}i=i.parent}return e}(e.viewItem);t.setAttribute("listIndent",n,s);const o=e.viewItem.parent&&"ol"==e.viewItem.parent.name?"numbered":"bulleted";if(t.setAttribute("listType",o,s),!i.safeInsert(s,e.modelCursor))return;const r=function(t,e,i){const{writer:s,schema:n}=i;let o=s.createPositionAfter(t);for(const r of e)if("ul"==r.name||"ol"==r.name)o=i.convertItem(r,o).modelCursor;else{const e=i.convertItem(r,s.createPositionAt(t,"end")),l=e.modelRange.start.nodeAfter;l&&l.is("element")&&!n.checkChild(t,l.name)&&(t=e.modelCursor.parent.is("element","listItem")?e.modelCursor.parent:B(e.modelCursor),o=s.createPositionAfter(t))}return o}(s,e.viewItem.getChildren(),i);e.modelRange=t.createRange(e.modelCursor,r),i.updateConversionResult(s,e)}}function L(t,e,i){if(i.consumable.test(e.viewItem,{name:!0})){const t=Array.from(e.viewItem.getChildren());for(const e of t){!(e.is("element","li")||N(e))&&e._remove()}}}function z(t,e,i){if(i.consumable.test(e.viewItem,{name:!0})){if(0===e.viewItem.childCount)return;const t=[...e.viewItem.getChildren()];let i=!1;for(const e of t)i&&!N(e)&&e._remove(),N(e)&&(i=!0)}}function P(t){return(e,i)=>{if(i.isPhantom)return;const s=i.modelPosition.nodeBefore;if(s&&s.is("element","listItem")){const e=i.mapper.toViewElement(s),n=e.getAncestors().find(N),o=t.createPositionAt(e,0).getWalker();for(const t of o){if("elementStart"==t.type&&t.item.is("element","li")){i.viewPosition=t.previousPosition;break}if("elementEnd"==t.type&&t.item==n){i.viewPosition=t.nextPosition;break}}}}}function E(t,[e,i]){let s,n=e.is("documentFragment")?e.getChild(0):e;if(s=i?this.createSelection(i):this.document.selection,n&&n.is("element","listItem")){const t=s.getFirstPosition();let e=null;if(t.parent.is("element","listItem")?e=t.parent:t.nodeBefore&&t.nodeBefore.is("element","listItem")&&(e=t.nodeBefore),e){const t=e.getAttribute("listIndent");if(t>0)for(;n&&n.is("element","listItem");)n._setAttribute("listIndent",n.getAttribute("listIndent")+t),n=n.nextSibling}}}function B(t){const e=new d.TreeWalker({startPosition:t});let i;do{i=e.next()}while(!i.value.item.is("element","listItem"));return i.value.item}function M(t,e,i,s,n,o){const r=b(e.nodeBefore,{sameIndent:!0,smallerIndent:!0,listIndent:t,foo:"b"}),l=n.mapper,a=n.writer,c=r?r.getAttribute("listIndent"):null;let d;if(r)if(c==t){const t=l.toViewElement(r).parent;d=a.createPositionAfter(t)}else{const t=o.createPositionAt(r,"end");d=l.toViewPosition(t)}else d=i;d=g(d);for(const t of[...s.getChildren()])N(t)&&(d=a.move(a.createRangeOn(t),d).end,h(a,t,t.nextSibling),h(a,t.previousSibling,t))}function N(t){return t.is("element","ol")||t.is("element","ul")}class H extends t.Plugin{static get pluginName(){return"ListEditing"}static get requires(){return[a.Enter,c.Delete]}init(){const t=this.editor;t.model.schema.register("listItem",{inheritAllFrom:"$block",allowAttributes:["listType","listIndent"]});const e=t.data,i=t.editing;var s;t.model.document.registerPostFixer((e=>function(t,e){const i=t.document.differ.getChanges(),s=new Map;let n=!1;for(const s of i)if("insert"==s.type&&"listItem"==s.name)o(s.position);else if("insert"==s.type&&"listItem"!=s.name){if("$text"!=s.name){const i=s.position.nodeAfter;i.hasAttribute("listIndent")&&(e.removeAttribute("listIndent",i),n=!0),i.hasAttribute("listType")&&(e.removeAttribute("listType",i),n=!0),i.hasAttribute("listStyle")&&(e.removeAttribute("listStyle",i),n=!0),i.hasAttribute("listReversed")&&(e.removeAttribute("listReversed",i),n=!0),i.hasAttribute("listStart")&&(e.removeAttribute("listStart",i),n=!0);for(const e of Array.from(t.createRangeIn(i)).filter((t=>t.item.is("element","listItem"))))o(e.previousPosition)}o(s.position.getShiftedBy(s.length))}else"remove"==s.type&&"listItem"==s.name?o(s.position):("attribute"==s.type&&"listIndent"==s.attributeKey||"attribute"==s.type&&"listType"==s.attributeKey)&&o(s.range.start);for(const t of s.values())r(t),l(t);return n;function o(t){const e=t.nodeBefore;if(e&&e.is("element","listItem")){let t=e;if(s.has(t))return;for(let e=t.previousSibling;e&&e.is("element","listItem");e=t.previousSibling)if(t=e,s.has(t))return;s.set(e,t)}else{const e=t.nodeAfter;e&&e.is("element","listItem")&&s.set(e,e)}}function r(t){let i=0,s=null;for(;t&&t.is("element","listItem");){const o=t.getAttribute("listIndent");if(o>i){let r;null===s?(s=o-i,r=i):(s>o&&(s=o),r=o-s),e.setAttribute("listIndent",r,t),n=!0}else s=null,i=t.getAttribute("listIndent")+1;t=t.nextSibling}}function l(t){let i=[],s=null;for(;t&&t.is("element","listItem");){const o=t.getAttribute("listIndent");if(s&&s.getAttribute("listIndent")>o&&(i=i.slice(0,o+1)),0!=o)if(i[o]){const s=i[o];t.getAttribute("listType")!=s&&(e.setAttribute("listType",s,t),n=!0)}else i[o]=t.getAttribute("listType");s=t,t=t.nextSibling}}}(t.model,e))),i.mapper.registerViewToModelLength("li",R),e.mapper.registerViewToModelLength("li",R),i.mapper.on("modelToViewPosition",P(i.view)),i.mapper.on("viewToModelPosition",(s=t.model,(t,e)=>{const i=e.viewPosition,n=i.parent,o=e.mapper;if("ul"==n.name||"ol"==n.name){if(i.isAtEnd){const t=o.toModelElement(i.nodeBefore),n=o.getModelLength(i.nodeBefore);e.modelPosition=s.createPositionBefore(t).getShiftedBy(n)}else{const t=o.toModelElement(i.nodeAfter);e.modelPosition=s.createPositionBefore(t)}t.stop()}else if("li"==n.name&&i.nodeBefore&&("ul"==i.nodeBefore.name||"ol"==i.nodeBefore.name)){const r=o.toModelElement(n);let l=1,a=i.nodeBefore;for(;a&&N(a);)l+=o.getModelLength(a),a=a.previousSibling;e.modelPosition=s.createPositionBefore(r).getShiftedBy(l),t.stop()}})),e.mapper.on("modelToViewPosition",P(i.view)),t.conversion.for("editingDowncast").add((e=>{e.on("insert",C,{priority:"high"}),e.on("insert:listItem",x(t.model)),e.on("attribute:listType:listItem",T,{priority:"high"}),e.on("attribute:listType:listItem",V,{priority:"low"}),e.on("attribute:listIndent:listItem",function(t){return(e,i,s)=>{if(!s.consumable.consume(i.item,"attribute:listIndent"))return;const n=s.mapper.toViewElement(i.item),o=s.writer;o.breakContainer(o.createPositionBefore(n)),o.breakContainer(o.createPositionAfter(n));const r=n.parent,l=r.previousSibling,a=o.createRangeOn(r);o.remove(a),l&&l.nextSibling&&h(o,l,l.nextSibling),M(i.attributeOldValue+1,i.range.start,a.start,n,s,t),p(i.item,n,s,t);for(const t of i.item.getChildren())s.consumable.consume(t,"insert")}}(t.model)),e.on("remove:listItem",function(t){return(e,i,s)=>{const n=s.mapper.toViewPosition(i.position).getLastMatchingPosition((t=>!t.item.is("element","li"))).nodeAfter,o=s.writer;o.breakContainer(o.createPositionBefore(n)),o.breakContainer(o.createPositionAfter(n));const r=n.parent,l=r.previousSibling,a=o.createRangeOn(r),c=o.remove(a);l&&l.nextSibling&&h(o,l,l.nextSibling),M(s.mapper.toModelElement(n).getAttribute("listIndent")+1,i.position,a.start,n,s,t);for(const t of o.createRangeIn(c).getItems())s.mapper.unbindViewElement(t);e.stop()}}(t.model)),e.on("remove",S,{priority:"low"})})),t.conversion.for("dataDowncast").add((e=>{e.on("insert",C,{priority:"high"}),e.on("insert:listItem",x(t.model))})),t.conversion.for("upcast").add((t=>{t.on("element:ul",L,{priority:"high"}),t.on("element:ol",L,{priority:"high"}),t.on("element:li",z,{priority:"high"}),t.on("element:li",_)})),t.model.on("insertContent",E,{priority:"high"}),t.commands.add("numberedList",new n(t,"numbered")),t.commands.add("bulletedList",new n(t,"bulleted")),t.commands.add("indentList",new l(t,"forward")),t.commands.add("outdentList",new l(t,"backward"));const o=i.view.document;this.listenTo(o,"enter",((t,e)=>{const i=this.editor.model.document,s=i.selection.getLastPosition().parent;i.selection.isCollapsed&&"listItem"==s.name&&s.isEmpty&&(this.editor.execute("outdentList"),e.preventDefault(),t.stop())}),{context:"li"}),this.listenTo(o,"delete",((t,e)=>{if("backward"!==e.direction)return;const i=this.editor.model.document.selection;if(!i.isCollapsed)return;const s=i.getFirstPosition();if(!s.isAtStart)return;const n=s.parent;if("listItem"!==n.name)return;n.previousSibling&&"listItem"===n.previousSibling.name||(this.editor.execute("outdentList"),e.preventDefault(),t.stop())}),{context:"li"}),this.listenTo(t.editing.view.document,"tab",((e,i)=>{const s=i.shiftKey?"outdentList":"indentList";this.editor.commands.get(s).isEnabled&&(t.execute(s),i.stopPropagation(),i.preventDefault(),e.stop())}),{context:"li"})}afterInit(){const t=this.editor.commands,e=t.get("indent"),i=t.get("outdent");e&&e.registerChildCommand(t.get("indentList")),i&&i.registerChildCommand(t.get("outdentList"))}}function R(t){let e=1;for(const i of t.getChildren())if("ul"==i.name||"ol"==i.name)for(const t of i.getChildren())e+=R(t);return e}const O='<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M7 5.75c0 .414.336.75.75.75h9.5a.75.75 0 1 0 0-1.5h-9.5a.75.75 0 0 0-.75.75zM3.5 3v5H2V3.7H1v-1h2.5V3zM.343 17.857l2.59-3.257H2.92a.6.6 0 1 0-1.04 0H.302a2 2 0 1 1 3.995 0h-.001c-.048.405-.16.734-.333.988-.175.254-.59.692-1.244 1.312H4.3v1h-4l.043-.043zM7 14.75a.75.75 0 0 1 .75-.75h9.5a.75.75 0 1 1 0 1.5h-9.5a.75.75 0 0 1-.75-.75z"/></svg>',F='<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M7 5.75c0 .414.336.75.75.75h9.5a.75.75 0 1 0 0-1.5h-9.5a.75.75 0 0 0-.75.75zm-6 0C1 4.784 1.777 4 2.75 4c.966 0 1.75.777 1.75 1.75 0 .966-.777 1.75-1.75 1.75C1.784 7.5 1 6.723 1 5.75zm6 9c0 .414.336.75.75.75h9.5a.75.75 0 1 0 0-1.5h-9.5a.75.75 0 0 0-.75.75zm-6 0c0-.966.777-1.75 1.75-1.75.966 0 1.75.777 1.75 1.75 0 .966-.777 1.75-1.75 1.75-.966 0-1.75-.777-1.75-1.75z"/></svg>';class D extends t.Plugin{static get pluginName(){return"ListUI"}init(){const t=this.editor.t;f(this.editor,"numberedList",t("Numbered List"),O),f(this.editor,"bulletedList",t("Bulleted List"),F)}}class j extends t.Plugin{static get requires(){return[H,D]}static get pluginName(){return"List"}}class U extends t.Command{constructor(t,e){super(t),this._defaultType=e}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(t={}){this._tryToConvertItemsToList(t);const e=this.editor.model,i=y(e);i.length&&e.change((e=>{for(const s of i)e.setAttribute("listStyle",t.type||this._defaultType,s)}))}_getValue(){const t=this.editor.model.document.selection.getFirstPosition().parent;return t&&t.is("element","listItem")?t.getAttribute("listStyle"):null}_checkEnabled(){const t=this.editor,e=t.commands.get("numberedList"),i=t.commands.get("bulletedList");return e.isEnabled||i.isEnabled}_tryToConvertItemsToList(t){if(!t.type)return;const e=(i=t.type,k.includes(i)?"bulleted":A.includes(i)?"numbered":null);var i;if(!e)return;const s=this.editor,n=e+"List";s.commands.get(n).value||s.execute(n)}}class q extends t.Command{refresh(){const t=this._getValue();this.value=t,this.isEnabled=null!=t}execute(t={}){const e=this.editor.model,i=y(e).filter((t=>"numbered"==t.getAttribute("listType")));e.change((e=>{for(const s of i)e.setAttribute("listReversed",!!t.reversed,s)}))}_getValue(){const t=this.editor.model.document.selection.getFirstPosition().parent;return t&&t.is("element","listItem")&&"numbered"==t.getAttribute("listType")?t.getAttribute("listReversed"):null}}class K extends t.Command{refresh(){const t=this._getValue();this.value=t,this.isEnabled=null!=t}execute(t={}){const e=this.editor.model,i=y(e).filter((t=>"numbered"==t.getAttribute("listType")));e.change((e=>{for(const s of i)e.setAttribute("listStart",t.startIndex||1,s)}))}_getValue(){const t=this.editor.model.document.selection.getFirstPosition().parent;return t&&t.is("element","listItem")&&"numbered"==t.getAttribute("listType")?t.getAttribute("listStart"):null}}const Z="default";class G extends t.Plugin{static get requires(){return[H]}static get pluginName(){return"ListPropertiesEditing"}constructor(t){super(t),t.config.define("list",{properties:{styles:!0,startIndex:!1,reversed:!1}})}init(){const t=this.editor,e=t.model,i=function(t){const e=[];t.styles&&e.push({attributeName:"listStyle",defaultValue:Z,addCommand(t){t.commands.add("listStyle",new U(t,Z))},appliesToListItem:()=>!0,setAttributeOnDowncast(t,e,i){e&&e!==Z?t.setStyle("list-style-type",e,i):t.removeStyle("list-style-type",i)},getAttributeOnUpcast:t=>t.getStyle("list-style-type")||Z});t.reversed&&e.push({attributeName:"listReversed",defaultValue:!1,addCommand(t){t.commands.add("listReversed",new q(t))},appliesToListItem:t=>"numbered"==t.getAttribute("listType"),setAttributeOnDowncast(t,e,i){e?t.setAttribute("reversed","reversed",i):t.removeAttribute("reversed",i)},getAttributeOnUpcast:t=>t.hasAttribute("reversed")});t.startIndex&&e.push({attributeName:"listStart",defaultValue:1,addCommand(t){t.commands.add("listStart",new K(t))},appliesToListItem:t=>"numbered"==t.getAttribute("listType"),setAttributeOnDowncast(t,e,i){1!=e?t.setAttribute("start",e,i):t.removeAttribute("start",i)},getAttributeOnUpcast:t=>t.getAttribute("start")||1});return e}(t.config.get("list.properties"));e.schema.extend("listItem",{allowAttributes:i.map((t=>t.attributeName))});for(const e of i)e.addCommand(t);var s;this.listenTo(t.commands.get("indentList"),"_executeCleanup",function(t,e){return(i,s)=>{const n=s[0],o=n.getAttribute("listIndent"),r=s.filter((t=>t.getAttribute("listIndent")===o));let l=null;n.previousSibling.getAttribute("listIndent")+1!==o&&(l=b(n.previousSibling,{sameIndent:!0,direction:"backward",listIndent:o})),t.model.change((t=>{for(const i of r)for(const s of e)if(s.appliesToListItem(i)){const e=null==l?s.defaultValue:l.getAttribute(s.attributeName);t.setAttribute(s.attributeName,e,i)}}))}}(t,i)),this.listenTo(t.commands.get("outdentList"),"_executeCleanup",function(t,e){return(i,s)=>{if(!(s=s.reverse().filter((t=>t.is("element","listItem")))).length)return;const n=s[0].getAttribute("listIndent"),o=s[0].getAttribute("listType");let r=s[0].previousSibling;if(r.is("element","listItem"))for(;r.getAttribute("listIndent")!==n;)r=r.previousSibling;else r=null;r||(r=s[s.length-1].nextSibling),r&&r.is("element","listItem")&&r.getAttribute("listType")===o&&t.model.change((t=>{const i=s.filter((t=>t.getAttribute("listIndent")===n));for(const s of i)for(const i of e)if(i.appliesToListItem(s)){const e=i.attributeName,n=r.getAttribute(e);t.setAttribute(e,n,s)}}))}}(t,i)),this.listenTo(t.commands.get("bulletedList"),"_executeCleanup",Y(t)),this.listenTo(t.commands.get("numberedList"),"_executeCleanup",Y(t)),e.document.registerPostFixer(function(t,e){return i=>{let s=!1;const n=J(t.model.document.differ.getChanges()).filter((t=>"todo"!==t.getAttribute("listType")));if(!n.length)return s;let o=n[n.length-1].nextSibling;if((!o||!o.is("element","listItem"))&&(o=n[0].previousSibling,o)){const t=n[0].getAttribute("listIndent");for(;o.is("element","listItem")&&o.getAttribute("listIndent")!==t&&(o=o.previousSibling,o););}for(const t of e){const e=t.attributeName;for(const r of n)if(t.appliesToListItem(r))if(r.hasAttribute(e)){const n=r.previousSibling;$(n,r,t.attributeName)&&(i.setAttribute(e,n.getAttribute(e),r),s=!0)}else W(o,r,t)?i.setAttribute(e,o.getAttribute(e),r):i.setAttribute(e,t.defaultValue,r),s=!0;else i.removeAttribute(e,r)}return s}}(t,i)),t.conversion.for("upcast").add((s=i,t=>{t.on("element:li",((t,e,i)=>{const n=e.viewItem.parent;if(!n)return;const o=e.modelRange.start.nodeAfter||e.modelRange.end.nodeBefore;for(const t of s)if(t.appliesToListItem(o)){const e=t.getAttributeOnUpcast(n);i.writer.setAttribute(t.attributeName,e,o)}}),{priority:"low"})})),t.conversion.for("downcast").add(function(t){return i=>{for(const s of t)i.on(`attribute:${s.attributeName}:listItem`,((t,i,n)=>{const o=n.writer,r=i.item,l=b(r.previousSibling,{sameIndent:!0,listIndent:r.getAttribute("listIndent"),direction:"backward"}),a=n.mapper.toViewElement(r);e(r,l)||o.breakContainer(o.createPositionBefore(a)),s.setAttributeOnDowncast(o,i.attributeNewValue,a.parent)}),{priority:"low"})};function e(t,e){return e&&t.getAttribute("listType")===e.getAttribute("listType")&&t.getAttribute("listIndent")===e.getAttribute("listIndent")&&t.getAttribute("listStyle")===e.getAttribute("listStyle")&&t.getAttribute("listReversed")===e.getAttribute("listReversed")&&t.getAttribute("listStart")===e.getAttribute("listStart")}}(i)),this._mergeListAttributesWhileMergingLists(i)}afterInit(){const t=this.editor;t.commands.get("todoList")&&t.model.document.registerPostFixer(function(t){return e=>{const i=J(t.model.document.differ.getChanges()).filter((t=>"todo"===t.getAttribute("listType")&&(t.hasAttribute("listStyle")||t.hasAttribute("listReversed")||t.hasAttribute("listStart"))));if(!i.length)return!1;for(const t of i)e.removeAttribute("listStyle",t),e.removeAttribute("listReversed",t),e.removeAttribute("listStart",t);return!0}}(t))}_mergeListAttributesWhileMergingLists(t){const e=this.editor.model;let i;this.listenTo(e,"deleteContent",((t,[e])=>{const s=e.getFirstPosition(),n=e.getLastPosition();if(s.parent===n.parent)return;if(!s.parent.is("element","listItem"))return;const o=n.parent.nextSibling;if(!o||!o.is("element","listItem"))return;const r=b(s.parent,{sameIndent:!0,listIndent:o.getAttribute("listIndent")});r&&r.getAttribute("listType")===o.getAttribute("listType")&&(i=r)}),{priority:"high"}),this.listenTo(e,"deleteContent",(()=>{i&&(e.change((e=>{const s=b(i.nextSibling,{sameIndent:!0,listIndent:i.getAttribute("listIndent"),direction:"forward"});if(!s)return void(i=null);const n=[s,...w(e.createPositionAt(s,0),"forward")];for(const s of n)for(const n of t)if(n.appliesToListItem(s)){const t=n.attributeName,o=i.getAttribute(t);e.setAttribute(t,o,s)}})),i=null)}),{priority:"low"})}}function W(t,e,i){if(!t)return!1;const s=t.getAttribute(i.attributeName);return!!s&&(s!=i.defaultValue&&t.getAttribute("listType")===e.getAttribute("listType"))}function $(t,e,i){if(!t||!t.is("element","listItem"))return!1;if(e.getAttribute("listType")!==t.getAttribute("listType"))return!1;const s=t.getAttribute("listIndent");if(s<1||s!==e.getAttribute("listIndent"))return!1;const n=t.getAttribute(i);return!(!n||n===e.getAttribute(i))}function Y(t){return(e,i)=>{i=i.filter((t=>t.is("element","listItem"))),t.model.change((t=>{for(const e of i)t.removeAttribute("listStyle",e)}))}}function J(t){const e=[];for(const i of t){const t=Q(i);t&&t.is("element","listItem")&&e.push(t)}return e}function Q(t){return"attribute"===t.type?t.range.start.nodeAfter:"insert"===t.type?t.position.nodeAfter:null}var X=i(62),tt=i.n(X),et=i(389),it={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};tt()(et.Z,it);et.Z.locals;class st extends u.View{constructor(t,e){super(t);const i=this.bindTemplate;this.set("isCollapsed",!1),this.set("label",""),this.buttonView=this._createButtonView(),this.children=this.createCollection(),this.set("_collapsibleAriaLabelUid"),e&&this.children.addMany(e),this.setTemplate({tag:"div",attributes:{class:["ck","ck-collapsible",i.if("isCollapsed","ck-collapsible_collapsed")]},children:[this.buttonView,{tag:"div",attributes:{class:["ck","ck-collapsible__children"],role:"region",hidden:i.if("isCollapsed","hidden"),"aria-labelledby":i.to("_collapsibleAriaLabelUid")},children:this.children}]})}render(){super.render(),this._collapsibleAriaLabelUid=this.buttonView.labelView.element.id}_createButtonView(){const t=new u.ButtonView(this.locale),e=t.bindTemplate;return t.set({withText:!0,icon:'<svg viewBox="0 0 10 10" xmlns="http://www.w3.org/2000/svg"><path d="M.941 4.523a.75.75 0 1 1 1.06-1.06l3.006 3.005 3.005-3.005a.75.75 0 1 1 1.06 1.06l-3.549 3.55a.75.75 0 0 1-1.168-.136L.941 4.523z"/></svg>'}),t.extendTemplate({attributes:{"aria-expanded":e.to("isOn",(t=>String(t)))}}),t.bind("label").to(this),t.bind("isOn").to(this,"isCollapsed",(t=>!t)),t.on("execute",(()=>{this.isCollapsed=!this.isCollapsed})),t}}var nt=i(543),ot={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};tt()(nt.Z,ot);nt.Z.locals;class rt extends u.View{constructor(t,{enabledProperties:i,styleButtonViews:s,styleGridAriaLabel:n}){super(t);const o=["ck","ck-list-properties"];this.children=this.createCollection(),this.stylesView=null,this.additionalPropertiesCollapsibleView=null,this.startIndexFieldView=null,this.reversedSwitchButtonView=null,this.focusTracker=new e.FocusTracker,this.keystrokes=new e.KeystrokeHandler,this.focusables=new u.ViewCollection,this.focusCycler=new u.FocusCycler({focusables:this.focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}}),i.styles?(this.stylesView=this._createStylesView(s,n),this.children.add(this.stylesView)):o.push("ck-list-properties_without-styles"),(i.startIndex||i.reversed)&&(this._addNumberedListPropertyViews(i,s),o.push("ck-list-properties_with-numbered-properties")),this.setTemplate({tag:"div",attributes:{class:o},children:this.children})}render(){if(super.render(),this.stylesView){for(const t of this.stylesView.children)this.focusables.add(t),this.focusTracker.add(t.element);(this.startIndexFieldView||this.reversedSwitchButtonView)&&(this.focusables.add(this.children.last.buttonView),this.focusTracker.add(this.children.last.buttonView.element))}if(this.startIndexFieldView){this.focusables.add(this.startIndexFieldView),this.focusTracker.add(this.startIndexFieldView.element),this.listenTo(this.startIndexFieldView.element,"selectstart",((t,e)=>{e.stopPropagation()}),{priority:"high"});const t=t=>t.stopPropagation();this.keystrokes.set("arrowright",t),this.keystrokes.set("arrowleft",t),this.keystrokes.set("arrowup",t),this.keystrokes.set("arrowdown",t)}this.reversedSwitchButtonView&&(this.focusables.add(this.reversedSwitchButtonView),this.focusTracker.add(this.reversedSwitchButtonView.element)),this.keystrokes.listenTo(this.element)}focus(){this.focusCycler.focusFirst()}focusLast(){this.focusCycler.focusLast()}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}_createStylesView(t,e){const i=new u.View(this.locale);return i.children=i.createCollection(this.locale),i.children.addMany(t),i.setTemplate({tag:"div",attributes:{"aria-label":e,class:["ck","ck-list-styles-list"]},children:i.children}),i.children.delegate("execute").to(this),i}_addNumberedListPropertyViews(t){const e=this.locale.t,i=[];t.startIndex&&(this.startIndexFieldView=this._createStartIndexField(),i.push(this.startIndexFieldView)),t.reversed&&(this.reversedSwitchButtonView=this._createReversedSwitchButton(),i.push(this.reversedSwitchButtonView)),t.styles?(this.additionalPropertiesCollapsibleView=new st(this.locale,i),this.additionalPropertiesCollapsibleView.set({label:e("List properties"),isCollapsed:!0}),this.additionalPropertiesCollapsibleView.buttonView.bind("isEnabled").toMany(i,"isEnabled",((...t)=>t.some((t=>t)))),this.additionalPropertiesCollapsibleView.buttonView.on("change:isEnabled",((t,e,i)=>{i||(this.additionalPropertiesCollapsibleView.isCollapsed=!0)})),this.children.add(this.additionalPropertiesCollapsibleView)):this.children.addMany(i)}_createStartIndexField(){const t=this.locale.t,e=new u.LabeledFieldView(this.locale,u.createLabeledInputNumber);return e.set({label:t("Start at"),class:"ck-numbered-list-properties__start-index"}),e.fieldView.set({min:1,step:1,value:1,inputMode:"numeric"}),e.fieldView.on("input",(()=>{const i=e.fieldView.element,s=i.valueAsNumber;Number.isNaN(s)||(i.checkValidity()?this.fire("listStart",{startIndex:s}):e.errorText=t("Start index must be greater than 0."))})),e}_createReversedSwitchButton(){const t=this.locale.t,e=new u.SwitchButtonView(this.locale);return e.set({withText:!0,label:t("Reversed order"),class:"ck-numbered-list-properties__reversed-order"}),e.delegate("execute").to(this,"listReversed"),e}}var lt=i(657),at={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};tt()(lt.Z,at);lt.Z.locals;class ct extends t.Plugin{static get pluginName(){return"ListPropertiesUI"}init(){const t=this.editor,e=t.locale.t,i=t.config.get("list.properties");i.styles&&t.ui.componentFactory.add("bulletedList",dt({editor:t,parentCommandName:"bulletedList",buttonLabel:e("Bulleted List"),buttonIcon:F,styleGridAriaLabel:e("Bulleted list styles toolbar"),styleDefinitions:[{label:e("Toggle the disc list style"),tooltip:e("Disc"),type:"disc",icon:'<svg viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg"><path d="M35 29a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17z" fill-opacity=".163"/><path d="M11 27a3 3 0 1 1 0 6 3 3 0 0 1 0-6zm0-9a3 3 0 1 1 0 6 3 3 0 0 1 0-6zm0-9a3 3 0 1 1 0 6 3 3 0 0 1 0-6z"/></svg>'},{label:e("Toggle the circle list style"),tooltip:e("Circle"),type:"circle",icon:'<svg viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg"><path d="M35 29a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17z" fill-opacity=".163"/><path d="M11 27a3 3 0 1 1 0 6 3 3 0 0 1 0-6zm0 1a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm0-10a3 3 0 1 1 0 6 3 3 0 0 1 0-6zm0 1a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm0-10a3 3 0 1 1 0 6 3 3 0 0 1 0-6zm0 1a2 2 0 1 0 0 4 2 2 0 0 0 0-4z"/></svg>'},{label:e("Toggle the square list style"),tooltip:e("Square"),type:"square",icon:'<svg viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg"><path d="M35 29a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17z" fill-opacity=".163"/><path d="M14 27v6H8v-6h6zm0-9v6H8v-6h6zm0-9v6H8V9h6z"/></svg>'}]})),(i.styles||i.startIndex||i.reversed)&&t.ui.componentFactory.add("numberedList",dt({editor:t,parentCommandName:"numberedList",buttonLabel:e("Numbered List"),buttonIcon:O,styleGridAriaLabel:e("Numbered list styles toolbar"),styleDefinitions:[{label:e("Toggle the decimal list style"),tooltip:e("Decimal"),type:"decimal",icon:'<svg viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg"><path d="M35 29a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17z" fill-opacity=".163"/><path d="M10.29 15V8.531H9.286c-.14.393-.4.736-.778 1.03-.378.295-.728.495-1.05.6v1.121a4.257 4.257 0 0 0 1.595-.936V15h1.235zm3.343 0v-1.235h-1.235V15h1.235zM11.3 24v-1.147H8.848c.064-.111.148-.226.252-.343.104-.117.351-.354.74-.712.39-.357.66-.631.81-.821.225-.288.39-.562.494-.824.104-.263.156-.539.156-.829 0-.51-.182-.936-.545-1.279-.363-.342-.863-.514-1.499-.514-.58 0-1.063.148-1.45.444-.387.296-.617.784-.69 1.463l1.23.124c.024-.36.112-.619.264-.774.153-.155.358-.233.616-.233.26 0 .465.074.613.222.148.148.222.36.222.635 0 .25-.085.501-.255.756-.126.185-.468.536-1.024 1.055-.692.641-1.155 1.156-1.389 1.544-.234.389-.375.8-.422 1.233H11.3zm2.333 0v-1.235h-1.235V24h1.235zM9.204 34.11c.615 0 1.129-.2 1.542-.598.413-.398.62-.88.62-1.446 0-.39-.11-.722-.332-.997a1.5 1.5 0 0 0-.886-.532c.619-.337.928-.788.928-1.353 0-.399-.151-.756-.453-1.073-.366-.386-.852-.58-1.459-.58a2.25 2.25 0 0 0-.96.2 1.617 1.617 0 0 0-.668.55c-.16.232-.28.544-.358.933l1.138.194c.032-.282.123-.495.272-.642.15-.146.33-.22.54-.22.215 0 .386.065.515.194s.193.302.193.518c0 .255-.087.46-.263.613-.176.154-.43.227-.765.218l-.136 1.006c.22-.061.409-.092.567-.092.24 0 .444.09.61.272.168.182.251.428.251.739 0 .328-.087.589-.261.782a.833.833 0 0 1-.644.29.841.841 0 0 1-.607-.242c-.167-.16-.27-.394-.307-.698l-1.196.145c.062.542.285.98.668 1.316.384.335.868.503 1.45.503zm4.43-.11v-1.235h-1.236V34h1.235z"/></svg>'},{label:e("Toggle the decimal with leading zero list style"),tooltip:e("Decimal with leading zero"),type:"decimal-leading-zero",icon:'<svg viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg"><path d="M35 29a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17z" fill-opacity=".163"/><path d="M5.714 15.11c.624 0 1.11-.22 1.46-.66.421-.533.632-1.408.632-2.627 0-1.222-.21-2.096-.629-2.624-.351-.445-.839-.668-1.463-.668-.624 0-1.11.22-1.459.66-.422.533-.633 1.406-.633 2.619 0 1.236.192 2.095.576 2.577.384.482.89.723 1.516.723zm0-1.024a.614.614 0 0 1-.398-.14c-.115-.094-.211-.283-.287-.565-.077-.283-.115-.802-.115-1.558s.043-1.294.128-1.613c.064-.246.155-.417.272-.512a.617.617 0 0 1 .4-.143.61.61 0 0 1 .398.143c.116.095.211.284.288.567.076.283.114.802.114 1.558s-.043 1.292-.128 1.608c-.064.246-.155.417-.272.512a.617.617 0 0 1-.4.143zm6.078.914V8.531H10.79c-.14.393-.4.736-.778 1.03-.378.295-.728.495-1.05.6v1.121a4.257 4.257 0 0 0 1.595-.936V15h1.235zm3.344 0v-1.235h-1.235V15h1.235zm-9.422 9.11c.624 0 1.11-.22 1.46-.66.421-.533.632-1.408.632-2.627 0-1.222-.21-2.096-.629-2.624-.351-.445-.839-.668-1.463-.668-.624 0-1.11.22-1.459.66-.422.533-.633 1.406-.633 2.619 0 1.236.192 2.095.576 2.577.384.482.89.723 1.516.723zm0-1.024a.614.614 0 0 1-.398-.14c-.115-.094-.211-.283-.287-.565-.077-.283-.115-.802-.115-1.558s.043-1.294.128-1.613c.064-.246.155-.417.272-.512a.617.617 0 0 1 .4-.143.61.61 0 0 1 .398.143c.116.095.211.284.288.567.076.283.114.802.114 1.558s-.043 1.292-.128 1.608c-.064.246-.155.417-.272.512a.617.617 0 0 1-.4.143zm7.088.914v-1.147H10.35c.065-.111.149-.226.253-.343.104-.117.35-.354.74-.712.39-.357.66-.631.81-.821.225-.288.39-.562.493-.824.104-.263.156-.539.156-.829 0-.51-.181-.936-.544-1.279-.364-.342-.863-.514-1.499-.514-.58 0-1.063.148-1.45.444-.387.296-.617.784-.69 1.463l1.23.124c.024-.36.112-.619.264-.774.152-.155.357-.233.615-.233.261 0 .465.074.613.222.148.148.222.36.222.635 0 .25-.085.501-.255.756-.126.185-.467.536-1.024 1.055-.691.641-1.154 1.156-1.388 1.544-.235.389-.375.8-.422 1.233h4.328zm2.334 0v-1.235h-1.235V24h1.235zM5.714 34.11c.624 0 1.11-.22 1.46-.66.421-.533.632-1.408.632-2.627 0-1.222-.21-2.096-.629-2.624-.351-.445-.839-.668-1.463-.668-.624 0-1.11.22-1.459.66-.422.533-.633 1.406-.633 2.619 0 1.236.192 2.095.576 2.577.384.482.89.723 1.516.723zm0-1.024a.614.614 0 0 1-.398-.14c-.115-.094-.211-.283-.287-.565-.077-.283-.115-.802-.115-1.558s.043-1.294.128-1.613c.064-.246.155-.417.272-.512a.617.617 0 0 1 .4-.143.61.61 0 0 1 .398.143c.116.095.211.284.288.567.076.283.114.802.114 1.558s-.043 1.292-.128 1.608c-.064.246-.155.417-.272.512a.617.617 0 0 1-.4.143zm4.992 1.024c.616 0 1.13-.2 1.543-.598.413-.398.62-.88.62-1.446 0-.39-.111-.722-.332-.997a1.5 1.5 0 0 0-.886-.532c.618-.337.927-.788.927-1.353 0-.399-.15-.756-.452-1.073-.366-.386-.853-.58-1.46-.58a2.25 2.25 0 0 0-.96.2 1.617 1.617 0 0 0-.667.55c-.16.232-.28.544-.359.933l1.139.194c.032-.282.123-.495.272-.642.15-.146.33-.22.54-.22.214 0 .386.065.515.194s.193.302.193.518c0 .255-.088.46-.264.613-.175.154-.43.227-.764.218l-.136 1.006c.22-.061.408-.092.566-.092.24 0 .444.09.611.272.167.182.25.428.25.739 0 .328-.086.589-.26.782a.833.833 0 0 1-.644.29.841.841 0 0 1-.607-.242c-.167-.16-.27-.394-.308-.698l-1.195.145c.062.542.284.98.668 1.316.384.335.867.503 1.45.503zm4.43-.11v-1.235h-1.235V34h1.235z"/></svg>'},{label:e("Toggle the lower–roman list style"),tooltip:e("Lower–roman"),type:"lower-roman",icon:'<svg viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg"><path d="M35 29a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17z" fill-opacity=".163"/><path d="M11.88 8.7V7.558h-1.234V8.7h1.234zm0 5.3V9.333h-1.234V14h1.234zm2.5 0v-1.235h-1.234V14h1.235zm-4.75 4.7v-1.142H8.395V18.7H9.63zm0 5.3v-4.667H8.395V24H9.63zm2.5-5.3v-1.142h-1.234V18.7h1.235zm0 5.3v-4.667h-1.234V24h1.235zm2.501 0v-1.235h-1.235V24h1.235zM7.38 28.7v-1.142H6.145V28.7H7.38zm0 5.3v-4.667H6.145V34H7.38zm2.5-5.3v-1.142H8.646V28.7H9.88zm0 5.3v-4.667H8.646V34H9.88zm2.5-5.3v-1.142h-1.234V28.7h1.235zm0 5.3v-4.667h-1.234V34h1.235zm2.501 0v-1.235h-1.235V34h1.235z"/></svg>'},{label:e("Toggle the upper–roman list style"),tooltip:e("Upper-roman"),type:"upper-roman",icon:'<svg viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg"><path d="M35 29a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17z" fill-opacity=".163"/><path d="M11.916 15V8.558h-1.301V15h1.3zm2.465 0v-1.235h-1.235V15h1.235zM9.665 25v-6.442h-1.3V25h1.3zm2.5 0v-6.442h-1.3V25h1.3zm2.466 0v-1.235h-1.235V25h1.235zm-7.216 9v-6.442h-1.3V34h1.3zm2.5 0v-6.442h-1.3V34h1.3zm2.501 0v-6.442h-1.3V34h1.3zm2.465 0v-1.235h-1.235V34h1.235z"/></svg>'},{label:e("Toggle the lower–latin list style"),tooltip:e("Lower-latin"),type:"lower-latin",icon:'<svg viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg"><path d="M35 29a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17z" fill-opacity=".163"/><path d="M9.62 14.105c.272 0 .528-.05.768-.153s.466-.257.677-.462c.009.024.023.072.044.145.047.161.086.283.119.365h1.221a2.649 2.649 0 0 1-.222-.626c-.04-.195-.059-.498-.059-.908l.013-1.441c0-.536-.055-.905-.165-1.105-.11-.201-.3-.367-.569-.497-.27-.13-.68-.195-1.23-.195-.607 0-1.064.108-1.371.325-.308.217-.525.55-.65 1.002l1.12.202c.076-.217.176-.369.299-.455.123-.086.294-.13.514-.13.325 0 .546.05.663.152.118.101.176.27.176.508v.123c-.222.093-.622.194-1.2.303-.427.082-.755.178-.982.288-.227.11-.403.268-.53.474a1.327 1.327 0 0 0-.188.706c0 .398.138.728.415.988.277.261.656.391 1.136.391zm.368-.87a.675.675 0 0 1-.492-.189.606.606 0 0 1-.193-.448c0-.176.08-.32.241-.435.106-.07.33-.142.673-.215a7.19 7.19 0 0 0 .751-.19v.247c0 .296-.016.496-.048.602a.773.773 0 0 1-.295.409 1.07 1.07 0 0 1-.637.22zm4.645.765v-1.235h-1.235V14h1.235zM10.2 25.105c.542 0 1.003-.215 1.382-.646.38-.43.57-1.044.57-1.84 0-.771-.187-1.362-.559-1.774a1.82 1.82 0 0 0-1.41-.617c-.522 0-.973.216-1.354.65v-2.32H7.594V25h1.147v-.686a1.9 1.9 0 0 0 .67.592c.26.133.523.2.79.2zm-.299-.975c-.354 0-.638-.164-.852-.492-.153-.232-.229-.59-.229-1.073 0-.468.098-.818.295-1.048a.93.93 0 0 1 .738-.345c.302 0 .55.118.743.354.193.236.29.62.29 1.154 0 .5-.096.868-.288 1.1-.192.233-.424.35-.697.35zm4.478.87v-1.235h-1.234V25h1.234zm-4.017 9.105c.6 0 1.08-.142 1.437-.426.357-.284.599-.704.725-1.261l-1.213-.207c-.061.326-.167.555-.316.688a.832.832 0 0 1-.576.2.916.916 0 0 1-.75-.343c-.185-.228-.278-.62-.278-1.173 0-.498.091-.853.274-1.066.183-.212.429-.318.736-.318.232 0 .42.061.565.184.145.123.238.306.28.55l1.216-.22c-.146-.501-.387-.874-.722-1.119-.336-.244-.788-.366-1.356-.366-.695 0-1.245.214-1.653.643-.407.43-.61 1.03-.61 1.8 0 .762.202 1.358.608 1.788.406.431.95.646 1.633.646zM14.633 34v-1.235h-1.235V34h1.235z"/></svg>'},{label:e("Toggle the upper–latin list style"),tooltip:e("Upper-latin"),type:"upper-latin",icon:'<svg viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg"><path d="M35 29a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17z" fill-opacity=".163"/><path d="m7.88 15 .532-1.463h2.575L11.549 15h1.415l-2.58-6.442H9.01L6.5 15h1.38zm2.69-2.549H8.811l.87-2.39.887 2.39zM14.88 15v-1.235h-1.234V15h1.234zM9.352 25c.83-.006 1.352-.02 1.569-.044.346-.038.636-.14.872-.305.236-.166.422-.387.558-.664.137-.277.205-.562.205-.855 0-.372-.106-.695-.317-.97-.21-.276-.512-.471-.905-.585a1.51 1.51 0 0 0 .661-.567 1.5 1.5 0 0 0 .244-.83c0-.28-.066-.53-.197-.754a1.654 1.654 0 0 0-.495-.539 1.676 1.676 0 0 0-.672-.266c-.25-.042-.63-.063-1.14-.063H7.158V25h2.193zm.142-3.88H8.46v-1.49h.747c.612 0 .983.007 1.112.022.217.026.38.102.49.226.11.125.165.287.165.486a.68.68 0 0 1-.192.503.86.86 0 0 1-.525.23 11.47 11.47 0 0 1-.944.023h.18zm.17 2.795H8.46v-1.723h1.05c.592 0 .977.03 1.154.092.177.062.313.16.406.295a.84.84 0 0 1 .14.492c0 .228-.06.41-.181.547a.806.806 0 0 1-.473.257c-.126.026-.423.04-.892.04zM14.88 25v-1.235h-1.234V25h1.234zm-5.018 9.11c.691 0 1.262-.17 1.711-.512.45-.341.772-.864.965-1.567l-1.261-.4c-.109.472-.287.818-.536 1.037-.25.22-.547.33-.892.33-.47 0-.85-.173-1.143-.519-.293-.345-.44-.925-.44-1.74 0-.767.15-1.322.447-1.665.297-.343.684-.514 1.162-.514.346 0 .64.096.881.29.242.193.4.457.477.79l1.288-.307c-.147-.516-.367-.911-.66-1.187-.492-.465-1.132-.698-1.92-.698-.902 0-1.63.296-2.184.89-.554.593-.83 1.426-.83 2.498 0 1.014.275 1.813.825 2.397.551.585 1.254.877 2.11.877zM14.88 34v-1.235h-1.234V34h1.234z"/></svg>'}]}))}}function dt({editor:t,parentCommandName:e,buttonLabel:i,buttonIcon:s,styleGridAriaLabel:n,styleDefinitions:o}){const r=t.commands.get(e);return l=>{const a=(0,u.createDropdown)(l,u.SplitButtonView),c=a.buttonView;a.bind("isEnabled").to(r),a.class="ck-list-styles-dropdown",c.on("execute",(()=>{t.execute(e),t.editing.view.focus()})),c.set({label:i,icon:s,tooltip:!0,isToggleable:!0}),c.bind("isOn").to(r,"value",(t=>!!t));const d=function({editor:t,dropdownView:e,parentCommandName:i,styleDefinitions:s,styleGridAriaLabel:n}){const o=t.locale,r=t.config.get("list.properties");let l;"numberedList"!=i&&(r.startIndex=!1,r.reversed=!1);if(r.styles){const e=t.commands.get("listStyle"),n=function({editor:t,listStyleCommand:e,parentCommandName:i}){const s=t.locale,n=t.commands.get(i);return({label:i,type:o,icon:r,tooltip:l})=>{const a=new u.ButtonView(s);return a.set({label:i,icon:r,tooltip:l}),e.on("change:value",(()=>{a.isOn=e.value===o})),a.on("execute",(()=>{n.value?e.value!==o?t.execute("listStyle",{type:o}):t.execute("listStyle",{type:e._defaultType}):t.model.change((()=>{t.execute("listStyle",{type:o})})),t.editing.view.focus()})),a}}({editor:t,parentCommandName:i,listStyleCommand:e});l=s.map(n)}const a=new rt(o,{styleGridAriaLabel:n,enabledProperties:r,styleButtonViews:l});if(r.startIndex){const e=t.commands.get("listStart");a.startIndexFieldView.bind("isEnabled").to(e),a.startIndexFieldView.fieldView.bind("value").to(e),a.on("listStart",((e,i)=>t.execute("listStart",i)))}if(r.reversed){const e=t.commands.get("listReversed");a.reversedSwitchButtonView.bind("isEnabled").to(e),a.reversedSwitchButtonView.bind("isOn").to(e,"value"),a.on("listReversed",(()=>{const i=e.value;t.execute("listReversed",{reversed:!i})}))}return a.delegate("execute").to(e),a}({editor:t,dropdownView:a,parentCommandName:e,styleGridAriaLabel:n,styleDefinitions:o});return a.panelView.children.add(d),a}}class ut extends t.Plugin{static get requires(){return[G,ct]}static get pluginName(){return"ListProperties"}}const mt="todoListChecked";class pt extends t.Command{constructor(t){super(t),this._selectedElements=[],this.on("execute",(()=>{this.refresh()}),{priority:"highest"})}refresh(){this._selectedElements=this._getSelectedItems(),this.value=this._selectedElements.every((t=>!!t.getAttribute("todoListChecked"))),this.isEnabled=!!this._selectedElements.length}_getSelectedItems(){const t=this.editor.model,e=t.schema,i=t.document.selection.getFirstRange(),s=i.start.parent,n=[];e.checkAttribute(s,mt)&&n.push(s);for(const t of i.getItems())e.checkAttribute(t,mt)&&!n.includes(t)&&n.push(t);return n}execute(t={}){this.editor.model.change((e=>{for(const i of this._selectedElements){(void 0===t.forceValue?!this.value:t.forceValue)?e.setAttribute(mt,!0,i):e.removeAttribute(mt,i)}}))}}function ht(t,e,i){const s=e.modelCursor,n=s.parent,o=e.viewItem;if("checkbox"!=o.getAttribute("type")||"listItem"!=n.name||!s.isAtStart)return;if(!i.consumable.consume(o,{name:!0}))return;const r=i.writer;r.setAttribute("listType","todo",n),e.viewItem.hasAttribute("checked")&&r.setAttribute("todoListChecked",!0,n),e.modelRange=r.createRange(s)}function gt(t){return(e,i)=>{const s=i.modelPosition,n=s.parent;if(!n.is("element","listItem")||"todo"!=n.getAttribute("listType"))return;const o=ft(i.mapper.toViewElement(n),t);o&&(i.viewPosition=i.mapper.findPositionIn(o,s.offset))}}function bt(t,i,s,n){return i.createUIElement("label",{class:"todo-list__label",contenteditable:!1},(function(i){const o=(0,e.createElement)(document,"input",{type:"checkbox"});s&&o.setAttribute("checked","checked"),o.addEventListener("change",(()=>n(t)));const r=this.toDomElement(i);return r.appendChild(o),r}))}function ft(t,e){const i=e.createRangeIn(t);for(const t of i)if(t.item.is("containerElement","span")&&t.item.hasClass("todo-list__label__description"))return t.item}const vt=(0,e.parseKeystroke)("Ctrl+Enter");class wt extends t.Plugin{static get pluginName(){return"TodoListEditing"}static get requires(){return[H]}init(){const t=this.editor,{editing:i,data:s,model:o}=t;o.schema.extend("listItem",{allowAttributes:["todoListChecked"]}),o.schema.addAttributeCheck(((t,e)=>{const i=t.last;if("todoListChecked"==e&&"listItem"==i.name&&"todo"!=i.getAttribute("listType"))return!1})),t.commands.add("todoList",new n(t,"todo"));const r=new pt(t);var l,a;t.commands.add("checkTodoList",r),t.commands.add("todoListCheck",r),s.downcastDispatcher.on("insert:listItem",function(t){return(e,i,s)=>{const n=s.consumable;if(!n.test(i.item,"insert")||!n.test(i.item,"attribute:listType")||!n.test(i.item,"attribute:listIndent"))return;if("todo"!=i.item.getAttribute("listType"))return;const o=i.item;n.consume(o,"insert"),n.consume(o,"attribute:listType"),n.consume(o,"attribute:listIndent"),n.consume(o,"attribute:todoListChecked");const r=s.writer,l=m(o,s);r.addClass("todo-list",l.parent);const a=r.createContainerElement("label",{class:"todo-list__label"}),c=r.createEmptyElement("input",{type:"checkbox",disabled:"disabled"}),d=r.createContainerElement("span",{class:"todo-list__label__description"});o.getAttribute("todoListChecked")&&r.setAttribute("checked","checked",c),r.insert(r.createPositionAt(l,0),a),r.insert(r.createPositionAt(a,0),c),r.insert(r.createPositionAfter(c),d),p(o,l,s,t)}}(o),{priority:"high"}),s.upcastDispatcher.on("element:input",ht,{priority:"high"}),i.downcastDispatcher.on("insert:listItem",function(t,e){return(i,s,n)=>{const o=n.consumable;if(!o.test(s.item,"insert")||!o.test(s.item,"attribute:listType")||!o.test(s.item,"attribute:listIndent"))return;if("todo"!=s.item.getAttribute("listType"))return;const r=s.item;o.consume(r,"insert"),o.consume(r,"attribute:listType"),o.consume(r,"attribute:listIndent"),o.consume(r,"attribute:todoListChecked");const l=n.writer,a=m(r,n),c=!!r.getAttribute("todoListChecked"),d=bt(r,l,c,e),u=l.createContainerElement("span",{class:"todo-list__label__description"});l.addClass("todo-list",a.parent),l.insert(l.createPositionAt(a,0),d),l.insert(l.createPositionAfter(d),u),p(r,a,n,t)}}(o,(t=>this._handleCheckmarkChange(t))),{priority:"high"}),i.downcastDispatcher.on("attribute:listType:listItem",(l=t=>this._handleCheckmarkChange(t),a=i.view,(t,e,i)=>{if(!i.consumable.consume(e.item,t.name))return;const s=i.mapper.toViewElement(e.item),n=i.writer,o=function(t,e){const i=e.createRangeIn(t);for(const t of i)if(t.item.is("uiElement","label"))return t.item}(s,a);if("todo"==e.attributeNewValue){const t=!!e.item.getAttribute("todoListChecked"),i=bt(e.item,n,t,l),o=n.createContainerElement("span",{class:"todo-list__label__description"}),r=n.createRangeIn(s),a=v(s),c=g(r.start),d=a?n.createPositionBefore(a):r.end,u=n.createRange(c,d);n.addClass("todo-list",s.parent),n.move(u,n.createPositionAt(o,0)),n.insert(n.createPositionAt(s,0),i),n.insert(n.createPositionAfter(i),o)}else if("todo"==e.attributeOldValue){const t=ft(s,a);n.removeClass("todo-list",s.parent),n.remove(o),n.move(n.createRangeIn(t),n.createPositionBefore(t)),n.remove(t)}})),i.downcastDispatcher.on("attribute:todoListChecked:listItem",function(t){return(e,i,s)=>{if("todo"!=i.item.getAttribute("listType"))return;if(!s.consumable.consume(i.item,"attribute:todoListChecked"))return;const{mapper:n,writer:o}=s,r=!!i.item.getAttribute("todoListChecked"),l=n.toViewElement(i.item).getChild(0),a=bt(i.item,o,r,t);o.insert(o.createPositionAfter(l),a),o.remove(l)}}((t=>this._handleCheckmarkChange(t)))),i.mapper.on("modelToViewPosition",gt(i.view)),s.mapper.on("modelToViewPosition",gt(i.view)),this.listenTo(i.view.document,"arrowKey",function(t,i){return(s,n)=>{if("left"!=(0,e.getLocalizedArrowKeyCodeDirection)(n.keyCode,i.contentLanguageDirection))return;const o=t.schema,r=t.document.selection;if(!r.isCollapsed)return;const l=r.getFirstPosition(),a=l.parent;if("listItem"===a.name&&"todo"==a.getAttribute("listType")&&l.isAtStart){const e=o.getNearestSelectionRange(t.createPositionBefore(a),"backward");e&&t.change((t=>t.setSelection(e))),n.preventDefault(),n.stopPropagation(),s.stop()}}}(o,t.locale),{context:"li"}),this.listenTo(i.view.document,"keydown",((i,s)=>{(0,e.getCode)(s)===vt&&(t.execute("checkTodoList"),i.stop())}),{priority:"high"});const c=new Set;this.listenTo(o,"applyOperation",((t,e)=>{const i=e[0];if("rename"==i.type&&"listItem"==i.oldName){const t=i.position.nodeAfter;t.hasAttribute("todoListChecked")&&c.add(t)}else if("changeAttribute"==i.type&&"listType"==i.key&&"todo"===i.oldValue)for(const t of i.range.getItems())t.hasAttribute("todoListChecked")&&"todo"!==t.getAttribute("listType")&&c.add(t)})),o.document.registerPostFixer((t=>{let e=!1;for(const i of c)t.removeAttribute("todoListChecked",i),e=!0;return c.clear(),e}))}_handleCheckmarkChange(t){const e=this.editor,i=e.model,s=Array.from(i.document.selection.getRanges());i.change((i=>{i.setSelection(t,"end"),e.execute("checkTodoList"),i.setSelection(s)}))}}class yt extends t.Plugin{static get pluginName(){return"TodoListUI"}init(){const t=this.editor.t;f(this.editor,"todoList",t("To-do List"),'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="m2.315 14.705 2.224-2.24a.689.689 0 0 1 .963 0 .664.664 0 0 1 0 .949L2.865 16.07a.682.682 0 0 1-.112.089.647.647 0 0 1-.852-.051L.688 14.886a.635.635 0 0 1 0-.903.647.647 0 0 1 .91 0l.717.722zm5.185.045a.75.75 0 0 1 .75-.75h9.5a.75.75 0 1 1 0 1.5h-9.5a.75.75 0 0 1-.75-.75zM2.329 5.745l2.21-2.226a.689.689 0 0 1 .963 0 .664.664 0 0 1 0 .95L2.865 7.125a.685.685 0 0 1-.496.196.644.644 0 0 1-.468-.187L.688 5.912a.635.635 0 0 1 0-.903.647.647 0 0 1 .91 0l.73.736zM7.5 5.75A.75.75 0 0 1 8.25 5h9.5a.75.75 0 1 1 0 1.5h-9.5a.75.75 0 0 1-.75-.75z"/></svg>')}}var kt=i(250),At={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};tt()(kt.Z,At);kt.Z.locals;class It extends t.Plugin{static get requires(){return[wt,yt]}static get pluginName(){return"TodoList"}}})(),(window.CKEditor5=window.CKEditor5||{}).list=s})();
\ No newline at end of file
+ */(()=>{var t={389:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});var n=i(609),s=i.n(n)()((function(t){return t[1]}));s.push([t.id,".ck.ck-collapsible.ck-collapsible_collapsed>.ck-collapsible__children{display:none}:root{--ck-collapsible-arrow-size:calc(var(--ck-icon-size)*0.5)}.ck.ck-collapsible>.ck.ck-button{border-radius:0;font-weight:700;padding:var(--ck-spacing-medium) var(--ck-spacing-large);width:100%}.ck.ck-collapsible>.ck.ck-button:focus{background:transparent}.ck.ck-collapsible>.ck.ck-button:active,.ck.ck-collapsible>.ck.ck-button:hover:not(:focus),.ck.ck-collapsible>.ck.ck-button:not(:focus){background:transparent;border-color:transparent;box-shadow:none}.ck.ck-collapsible>.ck.ck-button>.ck-icon{margin-right:var(--ck-spacing-medium);width:var(--ck-collapsible-arrow-size)}.ck.ck-collapsible>.ck-collapsible__children{padding:0 var(--ck-spacing-large) var(--ck-spacing-large)}.ck.ck-collapsible.ck-collapsible_collapsed>.ck.ck-button .ck-icon{transform:rotate(-90deg)}",""]);const r=s},78:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});var n=i(609),s=i.n(n)()((function(t){return t[1]}));s.push([t.id,".ck-editor__editable .ck-list-bogus-paragraph{display:block}",""]);const r=s},543:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});var n=i(609),s=i.n(n)()((function(t){return t[1]}));s.push([t.id,".ck.ck-list-properties.ck-list-properties_without-styles{padding:var(--ck-spacing-large)}.ck.ck-list-properties.ck-list-properties_without-styles>*{min-width:14em}:is(.ck.ck-list-properties.ck-list-properties_without-styles>*)+*{margin-top:var(--ck-spacing-standard)}.ck.ck-list-properties.ck-list-properties_with-numbered-properties>.ck-list-styles-list{grid-template-columns:repeat(4,auto)}.ck.ck-list-properties.ck-list-properties_with-numbered-properties>.ck-collapsible{border-top:1px solid var(--ck-color-base-border)}.ck.ck-list-properties.ck-list-properties_with-numbered-properties>.ck-collapsible>.ck-collapsible__children>*{width:100%}:is(.ck.ck-list-properties.ck-list-properties_with-numbered-properties>.ck-collapsible>.ck-collapsible__children>*)+*{margin-top:var(--ck-spacing-standard)}.ck.ck-list-properties .ck.ck-numbered-list-properties__start-index .ck-input{min-width:auto;width:100%}.ck.ck-list-properties .ck.ck-numbered-list-properties__reversed-order{background:transparent;margin-bottom:calc(var(--ck-spacing-tiny)*-1);padding-left:0;padding-right:0}.ck.ck-list-properties .ck.ck-numbered-list-properties__reversed-order:active,.ck.ck-list-properties .ck.ck-numbered-list-properties__reversed-order:hover{background:none;border-color:transparent;box-shadow:none}",""]);const r=s},657:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});var n=i(609),s=i.n(n)()((function(t){return t[1]}));s.push([t.id,".ck.ck-list-styles-list{display:grid}:root{--ck-list-style-button-size:44px}.ck.ck-list-styles-list{column-gap:var(--ck-spacing-medium);grid-template-columns:repeat(3,auto);padding:var(--ck-spacing-large);row-gap:var(--ck-spacing-medium)}.ck.ck-list-styles-list .ck-button{box-sizing:content-box;margin:0;padding:0}.ck.ck-list-styles-list .ck-button,.ck.ck-list-styles-list .ck-button .ck-icon{height:var(--ck-list-style-button-size);width:var(--ck-list-style-button-size)}",""]);const r=s},250:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});var n=i(609),s=i.n(n)()((function(t){return t[1]}));s.push([t.id,':root{--ck-todo-list-checkmark-size:16px}.ck-content .todo-list{list-style:none}.ck-content .todo-list li{margin-bottom:5px}.ck-content .todo-list li .todo-list{margin-top:5px}.ck-content .todo-list .todo-list__label>input{-webkit-appearance:none;border:0;display:inline-block;height:var(--ck-todo-list-checkmark-size);left:-25px;margin-left:0;margin-right:-15px;position:relative;right:0;vertical-align:middle;width:var(--ck-todo-list-checkmark-size)}.ck-content .todo-list .todo-list__label>input:before{border:1px solid #333;border-radius:2px;box-sizing:border-box;content:"";display:block;height:100%;position:absolute;transition:box-shadow .25s ease-in-out,background .25s ease-in-out,border .25s ease-in-out;width:100%}.ck-content .todo-list .todo-list__label>input:after{border-color:transparent;border-style:solid;border-width:0 calc(var(--ck-todo-list-checkmark-size)/8) calc(var(--ck-todo-list-checkmark-size)/8) 0;box-sizing:content-box;content:"";display:block;height:calc(var(--ck-todo-list-checkmark-size)/2.6);left:calc(var(--ck-todo-list-checkmark-size)/3);pointer-events:none;position:absolute;top:calc(var(--ck-todo-list-checkmark-size)/5.3);transform:rotate(45deg);width:calc(var(--ck-todo-list-checkmark-size)/5.3)}.ck-content .todo-list .todo-list__label>input[checked]:before{background:#26ab33;border-color:#26ab33}.ck-content .todo-list .todo-list__label>input[checked]:after{border-color:#fff}.ck-content .todo-list .todo-list__label .todo-list__label__description{vertical-align:middle}[dir=rtl] .todo-list .todo-list__label>input{left:0;margin-left:-15px;margin-right:0;right:-25px}.ck-editor__editable .todo-list .todo-list__label>input{cursor:pointer}.ck-editor__editable .todo-list .todo-list__label>input:hover:before{box-shadow:0 0 0 5px rgba(0,0,0,.1)}',""]);const r=s},609:t=>{"use strict";t.exports=function(t){var e=[];return e.toString=function(){return this.map((function(e){var i=t(e);return e[2]?"@media ".concat(e[2]," {").concat(i,"}"):i})).join("")},e.i=function(t,i,n){"string"==typeof t&&(t=[[null,t,""]]);var s={};if(n)for(var r=0;r<this.length;r++){var o=this[r][0];null!=o&&(s[o]=!0)}for(var l=0;l<t.length;l++){var a=[].concat(t[l]);n&&s[a[0]]||(i&&(a[2]?a[2]="".concat(i," and ").concat(a[2]):a[2]=i),e.push(a))}},e}},62:(t,e,i)=>{"use strict";var n,s=function(){return void 0===n&&(n=Boolean(window&&document&&document.all&&!window.atob)),n},r=function(){var t={};return function(e){if(void 0===t[e]){var i=document.querySelector(e);if(window.HTMLIFrameElement&&i instanceof window.HTMLIFrameElement)try{i=i.contentDocument.head}catch(t){i=null}t[e]=i}return t[e]}}(),o=[];function l(t){for(var e=-1,i=0;i<o.length;i++)if(o[i].identifier===t){e=i;break}return e}function a(t,e){for(var i={},n=[],s=0;s<t.length;s++){var r=t[s],a=e.base?r[0]+e.base:r[0],c=i[a]||0,d="".concat(a," ").concat(c);i[a]=c+1;var u=l(d),m={css:r[1],media:r[2],sourceMap:r[3]};-1!==u?(o[u].references++,o[u].updater(m)):o.push({identifier:d,updater:g(m,e),references:1}),n.push(d)}return n}function c(t){var e=document.createElement("style"),n=t.attributes||{};if(void 0===n.nonce){var s=i.nc;s&&(n.nonce=s)}if(Object.keys(n).forEach((function(t){e.setAttribute(t,n[t])})),"function"==typeof t.insert)t.insert(e);else{var o=r(t.insert||"head");if(!o)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");o.appendChild(e)}return e}var d,u=(d=[],function(t,e){return d[t]=e,d.filter(Boolean).join("\n")});function m(t,e,i,n){var s=i?"":n.media?"@media ".concat(n.media," {").concat(n.css,"}"):n.css;if(t.styleSheet)t.styleSheet.cssText=u(e,s);else{var r=document.createTextNode(s),o=t.childNodes;o[e]&&t.removeChild(o[e]),o.length?t.insertBefore(r,o[e]):t.appendChild(r)}}function h(t,e,i){var n=i.css,s=i.media,r=i.sourceMap;if(s?t.setAttribute("media",s):t.removeAttribute("media"),r&&"undefined"!=typeof btoa&&(n+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(r))))," */")),t.styleSheet)t.styleSheet.cssText=n;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(n))}}var p=null,f=0;function g(t,e){var i,n,s;if(e.singleton){var r=f++;i=p||(p=c(e)),n=m.bind(null,i,r,!1),s=m.bind(null,i,r,!0)}else i=c(e),n=h.bind(null,i,e),s=function(){!function(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t)}(i)};return n(t),function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap)return;n(t=e)}else s()}}t.exports=function(t,e){(e=e||{}).singleton||"boolean"==typeof e.singleton||(e.singleton=s());var i=a(t=t||[],e);return function(t){if(t=t||[],"[object Array]"===Object.prototype.toString.call(t)){for(var n=0;n<i.length;n++){var s=l(i[n]);o[s].references--}for(var r=a(t,e),c=0;c<i.length;c++){var d=l(i[c]);0===o[d].references&&(o[d].updater(),o.splice(d,1))}i=r}}}},704:(t,e,i)=>{t.exports=i(79)("./src/core.js")},492:(t,e,i)=>{t.exports=i(79)("./src/engine.js")},331:(t,e,i)=>{t.exports=i(79)("./src/enter.js")},181:(t,e,i)=>{t.exports=i(79)("./src/typing.js")},273:(t,e,i)=>{t.exports=i(79)("./src/ui.js")},209:(t,e,i)=>{t.exports=i(79)("./src/utils.js")},79:t=>{"use strict";t.exports=CKEditor5.dll}},e={};function i(n){var s=e[n];if(void 0!==s)return s.exports;var r=e[n]={id:n,exports:{}};return t[n](r,r.exports,i),r.exports}i.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return i.d(e,{a:e}),e},i.d=(t,e)=>{for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),i.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};(()=>{"use strict";i.r(n),i.d(n,{DocumentList:()=>ht,DocumentListEditing:()=>G,DocumentListProperties:()=>zt,DocumentListPropertiesEditing:()=>It,List:()=>Xt,ListEditing:()=>Jt,ListProperties:()=>de,ListPropertiesEditing:()=>se,ListPropertiesUI:()=>Et,ListUI:()=>mt,TodoList:()=>Ie,TodoListEditing:()=>ve,TodoListUI:()=>we});var t=i(704),e=i(331),s=i(181),r=i(209);class o{constructor(t,e){this._startElement=t,this._referenceIndent=t.getAttribute("listIndent"),this._isForward="forward"==e.direction,this._includeSelf=!!e.includeSelf,this._sameAttributes=(0,r.toArray)(e.sameAttributes||[]),this._sameIndent=!!e.sameIndent,this._lowerIndent=!!e.lowerIndent,this._higherIndent=!!e.higherIndent}static first(t,e){const i=new this(t,e)[Symbol.iterator]();return(0,r.first)(i)}*[Symbol.iterator](){const t=[];for(const{node:e}of l(this._getStartNode(),this._isForward?"forward":"backward")){const i=e.getAttribute("listIndent");if(i<this._referenceIndent){if(!this._lowerIndent)break;this._referenceIndent=i}else if(i>this._referenceIndent){if(!this._higherIndent)continue;if(!this._isForward){t.push(e);continue}}else{if(!this._sameIndent){if(this._higherIndent){t.length&&(yield*t,t.length=0);break}continue}if(this._sameAttributes.some((t=>e.getAttribute(t)!==this._startElement.getAttribute(t))))break}t.length&&(yield*t,t.length=0),yield e}}_getStartNode(){return this._includeSelf?this._startElement:this._isForward?this._startElement.nextSibling:this._startElement.previousSibling}}function*l(t,e="forward"){const i="forward"==e;let n=null;for(;d(t);)yield{node:t,previous:n},n=t,t=i?t.nextSibling:t.previousSibling}class a{constructor(t){this._listHead=t}[Symbol.iterator](){return l(this._listHead,"forward")}}class c{static next(){return(0,r.uid)()}}function d(t){return!!t&&t.is("element")&&t.hasAttribute("listItemId")}function u(t,e={}){return[...m(t,{...e,direction:"backward"}),...m(t,{...e,direction:"forward"})]}function m(t,e={}){const i="forward"==e.direction,n=Array.from(new o(t,{...e,includeSelf:i,sameIndent:!0,sameAttributes:"listItemId"}));return i?n:n.reverse()}function h(t){const e=new o(t,{sameIndent:!0,sameAttributes:"listType"}),i=new o(t,{sameIndent:!0,sameAttributes:"listType",includeSelf:!0,direction:"forward"});return[...Array.from(e).reverse(),...i]}function p(t){return!o.first(t,{sameIndent:!0,sameAttributes:"listItemId"})}function f(t){return!o.first(t,{direction:"forward",sameIndent:!0,sameAttributes:"listItemId"})}function g(t,e={}){t=(0,r.toArray)(t);const i=!1!==e.withNested,n=new Set;for(const e of t)for(const t of u(e,{higherIndent:i}))n.add(t);return k(n)}function b(t){t=(0,r.toArray)(t);const e=new Set;for(const i of t)for(const t of h(i))e.add(t);return k(e)}function v(t,e){const i=m(t,{direction:"forward"}),n=c.next();for(const t of i)e.setAttribute("listItemId",n,t);return i}function w(t,e,i){const n={};for(const[t,i]of e.getAttributes())t.startsWith("list")&&(n[t]=i);const s=m(t,{direction:"forward"});for(const t of s)i.setAttributes(n,t);return s}function y(t,e,{expand:i,indentBy:n=1}={}){t=(0,r.toArray)(t);const s=i?g(t):t;for(const t of s){const i=t.getAttribute("listIndent")+n;i<0?A(t,e):e.setAttribute("listIndent",i,t)}return s}function A(t,e){t=(0,r.toArray)(t);for(const i of t)for(const t of i.getAttributeKeys())t.startsWith("list")&&e.removeAttribute(t,i);return t}function I(t){if(!t.length)return!1;const e=t[0].getAttribute("listItemId");return!!e&&!t.some((t=>t.getAttribute("listItemId")!=e))}function k(t){return Array.from(t).filter((t=>"$graveyard"!==t.root.rootName)).sort(((t,e)=>t.index-e.index))}function x(t){const e=t.document.selection.getSelectedElement();return e&&t.schema.isObject(e)&&t.schema.isBlock(e)?e:null}function T(t,e,i){return m(e,{direction:"forward"}).pop().index>t.index?w(t,e,i):[]}class S extends t.Command{constructor(t,e){super(t),this._direction=e}refresh(){this.isEnabled=this._checkEnabled()}execute(){const t=this.editor.model,e=_(t.document.selection);t.change((t=>{const i=[];I(e)&&!p(e[0])?("forward"==this._direction&&i.push(...y(e,t)),i.push(...v(e[0],t))):"forward"==this._direction?i.push(...y(e,t,{expand:!0})):i.push(...function(t,e){const i=g(t=(0,r.toArray)(t)),n=new Set,s=Math.min(...i.map((t=>t.getAttribute("listIndent")))),l=new Map;for(const t of i)l.set(t,o.first(t,{lowerIndent:!0}));for(const t of i){if(n.has(t))continue;n.add(t);const i=t.getAttribute("listIndent")-1;if(i<0)A(t,e);else{if(t.getAttribute("listIndent")==s){const i=T(t,l.get(t),e);for(const t of i)n.add(t);if(i.length)continue}e.setAttribute("listIndent",i,t)}}return k(n)}(e,t));for(const e of i){if(!e.hasAttribute("listType"))continue;const i=o.first(e,{sameIndent:!0});i&&t.setAttribute("listType",i.getAttribute("listType"),e)}this._fireAfterExecute(i)}))}_fireAfterExecute(t){this.fire("afterExecute",k(new Set(t)))}_checkEnabled(){let t=_(this.editor.model.document.selection),e=t[0];if(!e)return!1;if("backward"==this._direction)return!0;if(I(t)&&!p(t[0]))return!0;t=g(t),e=t[0];const i=o.first(e,{sameIndent:!0});return!!i&&i.getAttribute("listType")==e.getAttribute("listType")}}function _(t){const e=Array.from(t.getSelectedBlocks()),i=e.findIndex((t=>!d(t)));return-1!=i&&(e.length=i),e}class C extends t.Command{constructor(t,e){super(t),this.type=e}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(t={}){const e=this.editor.model,i=e.document,n=x(e),s=Array.from(i.selection.getSelectedBlocks()).filter((t=>e.schema.checkAttribute(t,"listType"))),r=void 0!==t.forceValue?!t.forceValue:this.value;e.change((t=>{if(r){const e=s[s.length-1],i=m(e,{direction:"forward"}),n=[];i.length>1&&n.push(...v(i[1],t)),n.push(...A(s,t)),n.push(...function(t,e){const i=[];let n=Number.POSITIVE_INFINITY;for(const{node:s}of l(t.nextSibling,"forward")){const t=s.getAttribute("listIndent");if(0==t)break;t<n&&(n=t);const r=t-n;e.setAttribute("listIndent",r,s),i.push(s)}return i}(e,t)),this._fireAfterExecute(n)}else if((n||i.selection.isCollapsed)&&d(s[0])){const e=h(n||s[0]);for(const i of e)t.setAttribute("listType",this.type,i);this._fireAfterExecute(e)}else{const e=[];for(const i of s)if(i.hasAttribute("listType"))for(const n of g(i,{withNested:!1}))n.getAttribute("listType")!=this.type&&(t.setAttribute("listType",this.type,n),e.push(n));else t.setAttributes({listIndent:0,listItemId:c.next(),listType:this.type},i),e.push(i);this._fireAfterExecute(e)}}))}_fireAfterExecute(t){this.fire("afterExecute",k(new Set(t)))}_getValue(){const t=this.editor.model.document.selection,e=Array.from(t.getSelectedBlocks());if(!e.length)return!1;for(const t of e)if(t.getAttribute("listType")!=this.type)return!1;return!0}_checkEnabled(){const t=this.editor.model.document.selection,e=this.editor.model.schema,i=Array.from(t.getSelectedBlocks());if(!i.length)return!1;if(this.value)return!0;for(const t of i)if(e.checkAttribute(t,"listType"))return!0;return!1}}class L extends t.Command{constructor(t,e){super(t),this._direction=e}refresh(){this.isEnabled=this._checkEnabled()}execute({shouldMergeOnBlocksContentLevel:t=!1}={}){const e=this.editor.model,i=e.document.selection,n=[];e.change((s=>{const{firstElement:r,lastElement:l}=this._getMergeSubjectElements(i,t),a=r.getAttribute("listIndent")||0,c=l.getAttribute("listIndent"),d=l.getAttribute("listItemId");if(a!=c){const t=(u=l,Array.from(new o(u,{direction:"forward",higherIndent:!0})));n.push(...y([l,...t],s,{indentBy:a-c,expand:a<c}))}var u;if(t){let t=i;i.isCollapsed&&(t=s.createSelection(s.createRange(s.createPositionAt(r,"end"),s.createPositionAt(l,0)))),e.deleteContent(t,{doNotResetEntireContent:i.isCollapsed});const o=t.getLastPosition().parent,a=o.nextSibling;n.push(o),a&&a!==l&&a.getAttribute("listItemId")==d&&n.push(...w(a,o,s))}else n.push(...w(l,r,s));this._fireAfterExecute(n)}))}_fireAfterExecute(t){this.fire("afterExecute",k(new Set(t)))}_checkEnabled(){const t=this.editor.model,e=t.document.selection,i=x(t);if(e.isCollapsed||i){const t=i||e.getFirstPosition().parent;if(!d(t))return!1;const n="backward"==this._direction?t.previousSibling:t.nextSibling;if(!n)return!1;if(I([t,n]))return!1}else{const t=e.getLastPosition(),i=e.getFirstPosition();if(t.parent===i.parent)return!1;if(!d(t.parent))return!1}return!0}_getMergeSubjectElements(t,e){const i=x(this.editor.model);let n,s;if(t.isCollapsed||i){const r=i||t.getFirstPosition().parent,l=p(r);"backward"==this._direction?(s=r,n=l&&!e?o.first(r,{sameIndent:!0,lowerIndent:!0}):r.previousSibling):(n=r,s=r.nextSibling)}else n=t.getFirstPosition().parent,s=t.getLastPosition().parent;return{firstElement:n,lastElement:s}}}class V extends t.Command{constructor(t,e){super(t),this._direction=e}refresh(){this.isEnabled=this._checkEnabled()}execute(){this.editor.model.change((t=>{const e=v(this._getStartBlock(),t);this._fireAfterExecute(e)}))}_fireAfterExecute(t){this.fire("afterExecute",k(new Set(t)))}_checkEnabled(){const t=this.editor.model.document.selection,e=this._getStartBlock();return t.isCollapsed&&d(e)&&!p(e)}_getStartBlock(){const t=this.editor.model.document.selection.getFirstPosition().parent;return"before"==this._direction?t:t.nextSibling}}function E(t){return t.is("element","ol")||t.is("element","ul")}function P(t){return t.is("element","li")}function z(t){let e=0,i=t.parent;for(;i;){if(P(i))e++;else{const t=i.previousSibling;t&&P(t)&&e++}i=i.parent}return e}function B(t,e,i,n=R(i,e)){return t.createAttributeElement(M(i),null,{priority:2*e/100-100,id:n})}function N(t,e,i){return t.createAttributeElement("li",null,{priority:(2*e+1)/100-100,id:i})}function M(t){return"numbered"==t?"ol":"ul"}function R(t,e){return`list-${t}-${e}`}function H(t,e){const i=t.nodeBefore;if(d(i)){let t=i;for({node:t}of l(t,"backward"))if(e.has(t))return;e.set(i,t)}else{const i=t.nodeAfter;d(i)&&e.set(i,i)}}var O=i(492);function D(){return(t,e,i)=>{if(!i.consumable.test(e.viewItem,{name:!0}))return;const n=new O.UpcastWriter(e.viewItem.document);for(const t of Array.from(e.viewItem.getChildren()))P(t)||E(t)||n.remove(t)}}function F(t,e,i){const n=function(t){return(e,i)=>{const n=[];for(const i of t)e.hasAttribute(i)&&n.push(`attribute:${i}`);return!!n.every((t=>!1!==i.test(e,t)))&&(n.forEach((t=>i.consume(e,t))),!0)}}(t);return(s,r,l)=>{const{writer:a,mapper:c,consumable:d}=l,u=r.item;if(!t.includes(r.attributeKey))return;if(!n(u,d))return;const m=function(t,e,i){const n=i.createRangeOn(t);return e.toViewRange(n).getTrimmed().getContainedElement()}(u,c,i);!function(t,e){let i=t.parent;for(;i.is("attributeElement")&&["ul","ol","li"].includes(i.name);){const n=i.parent;e.unwrap(e.createRangeOn(t),i),i=n}}(m,a),function(t,e,i,n){if(!t.hasAttribute("listIndent"))return;const s=t.getAttribute("listIndent");let r=t;for(let t=s;t>=0;t--){const s=N(n,t,r.getAttribute("listItemId")),l=B(n,t,r.getAttribute("listType"));for(const t of i)r.hasAttribute(t.attributeName)&&t.setAttributeOnDowncast(n,r.getAttribute(t.attributeName),"list"==t.scope?l:s);if(e=n.wrap(e,s),e=n.wrap(e,l),0==t)break;if(r=o.first(r,{lowerIndent:!0}),!r)break}}(u,a.createRangeOn(m),e,a)}}function j(t,{dataPipeline:e}={}){return(i,{writer:n})=>{if(!U(i,t))return;const s=n.createContainerElement("span",{class:"ck-list-bogus-paragraph"});return e&&n.setCustomProperty("dataPipeline:transparentRendering",!0,s),s}}function U(t,e,i=u(t)){if(!d(t))return!1;for(const i of t.getAttributeKeys())if(!i.startsWith("selection:")&&!e.includes(i))return!1;return i.length<2}var q=i(62),K=i.n(q),Z=i(78),$={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};K()(Z.Z,$);Z.Z.locals;const W=["listType","listIndent","listItemId"];class G extends t.Plugin{static get pluginName(){return"DocumentListEditing"}static get requires(){return[e.Enter,s.Delete]}constructor(t){super(t),this._downcastStrategies=[]}init(){const t=this.editor,e=t.model;if(t.plugins.has("ListEditing"))throw new r.CKEditorError("document-list-feature-conflict",this,{conflictPlugin:"ListEditing"});e.schema.extend("$container",{allowAttributes:W}),e.schema.extend("$block",{allowAttributes:W}),e.schema.extend("$blockObject",{allowAttributes:W});for(const t of W)e.schema.setAttributeProperties(t,{copyOnReplace:!0});e.on("insertContent",function(t){return(e,[i,n])=>{const s=i.is("documentFragment")?i.getChild(0):i;if(!d(s))return;let r;r=n?t.createSelection(n):t.document.selection;const o=r.getFirstPosition();let a=null;if(d(o.parent)?a=o.parent:d(o.nodeBefore)&&(a=o.nodeBefore),!a)return;const c=a.getAttribute("listIndent")-s.getAttribute("listIndent");c<=0||t.change((t=>{for(const{node:e}of l(s,"forward"))t.setAttribute("listIndent",e.getAttribute("listIndent")+c,e)}))}}(e),{priority:"high"}),t.commands.add("numberedList",new C(t,"numbered")),t.commands.add("bulletedList",new C(t,"bulleted")),t.commands.add("indentList",new S(t,"forward")),t.commands.add("outdentList",new S(t,"backward")),t.commands.add("mergeListItemBackward",new L(t,"backward")),t.commands.add("mergeListItemForward",new L(t,"forward")),t.commands.add("splitListItemBefore",new V(t,"before")),t.commands.add("splitListItemAfter",new V(t,"after")),this._setupDeleteIntegration(),this._setupEnterIntegration(),this._setupTabIntegration()}afterInit(){const t=this.editor.commands,e=t.get("indent"),i=t.get("outdent");e&&e.registerChildCommand(t.get("indentList"),{priority:"high"}),i&&i.registerChildCommand(t.get("outdentList"),{priority:"lowest"}),this._setupModelPostFixing(),this._setupConversion()}registerDowncastStrategy(t){this._downcastStrategies.push(t)}_getListAttributeNames(){return[...W,...this._downcastStrategies.map((t=>t.attributeName))]}_setupDeleteIntegration(){const t=this.editor,e=t.commands.get("mergeListItemBackward"),i=t.commands.get("mergeListItemForward");this.listenTo(t.editing.view.document,"delete",((n,s)=>{const r=t.model.document.selection;x(t.model)||t.model.change((()=>{const l=r.getFirstPosition();if(r.isCollapsed&&"backward"==s.direction){if(!l.isAtStart)return;const i=l.parent;if(!d(i))return;if(o.first(i,{sameAttributes:"listType",sameIndent:!0})||0!==i.getAttribute("listIndent")){if(!e.isEnabled)return;e.execute({shouldMergeOnBlocksContentLevel:Y(t.model,"backward")})}else f(i)||t.execute("splitListItemAfter"),t.execute("outdentList");s.preventDefault(),n.stop()}else{if(r.isCollapsed&&!r.getLastPosition().isAtEnd)return;if(!i.isEnabled)return;i.execute({shouldMergeOnBlocksContentLevel:Y(t.model,"forward")}),s.preventDefault(),n.stop()}}))}),{context:"li"})}_setupEnterIntegration(){const t=this.editor,e=t.model,i=t.commands,n=i.get("enter");this.listenTo(t.editing.view.document,"enter",((i,n)=>{const s=e.document,r=s.selection.getFirstPosition().parent;if(s.selection.isCollapsed&&d(r)&&r.isEmpty&&!n.isSoft){const e=p(r),s=f(r);e&&s?(t.execute("outdentList"),n.preventDefault(),i.stop()):e&&!s?(t.execute("splitListItemAfter"),n.preventDefault(),i.stop()):s&&(t.execute("splitListItemBefore"),n.preventDefault(),i.stop())}}),{context:"li"}),this.listenTo(n,"afterExecute",(()=>{const e=i.get("splitListItemBefore");if(e.refresh(),!e.isEnabled)return;2===u(t.model.document.selection.getLastPosition().parent).length&&e.execute()}))}_setupTabIntegration(){const t=this.editor;this.listenTo(t.editing.view.document,"tab",((e,i)=>{const n=i.shiftKey?"outdentList":"indentList";this.editor.commands.get(n).isEnabled&&(t.execute(n),i.stopPropagation(),i.preventDefault(),e.stop())}),{context:"li"})}_setupConversion(){const t=this.editor,e=t.model,i=this._getListAttributeNames();t.conversion.for("upcast").elementToElement({view:"li",model:"paragraph"}).add((t=>{t.on("element:li",((t,e,i)=>{const{writer:n,schema:s}=i;if(!e.modelRange)return;const r=Array.from(e.modelRange.getItems({shallow:!0})).filter((t=>s.checkAttribute(t,"listItemId")));if(!r.length)return;const o={listItemId:c.next(),listIndent:z(e.viewItem),listType:e.viewItem.parent&&"ol"==e.viewItem.parent.name?"numbered":"bulleted"};for(const t of r)d(t)||n.setAttributes(o,t);r.length>1&&r[1].getAttribute("listItemId")!=o.listItemId&&i.keepEmptyElement(r[0])})),t.on("element:ul",D(),{priority:"high"}),t.on("element:ol",D(),{priority:"high"})})),t.conversion.for("editingDowncast").elementToElement({model:"paragraph",view:j(i),converterPriority:"high"}),t.conversion.for("dataDowncast").elementToElement({model:"paragraph",view:j(i,{dataPipeline:!0}),converterPriority:"high"}),t.conversion.for("downcast").add((t=>{t.on("attribute",F(i,this._downcastStrategies,e))})),this.listenTo(e.document,"change:data",function(t,e,i,n){return()=>{const n=t.document.differ.getChanges(),o=[],l=new Map,a=new Set;for(const t of n)if("insert"==t.type&&"$text"!=t.name)H(t.position,l),t.attributes.has("listItemId")?a.add(t.position.nodeAfter):H(t.position.getShiftedBy(t.length),l);else if("remove"==t.type&&t.attributes.has("listItemId"))H(t.position,l);else if("attribute"==t.type){const e=t.range.start.nodeAfter;i.includes(t.attributeKey)?(H(t.range.start,l),null===t.attributeNewValue?(H(t.range.start.getShiftedBy(1),l),r(e)&&o.push(e)):a.add(e)):d(e)&&r(e)&&o.push(e)}for(const t of l.values())o.push(...s(t,a));for(const t of new Set(o))e.reconvertItem(t)};function s(t,e){const n=[],s=new Set,a=[];for(const{node:c,previous:d}of l(t,"forward")){if(s.has(c))continue;const t=c.getAttribute("listIndent");d&&t<d.getAttribute("listIndent")&&(a.length=t+1),a[t]=Object.fromEntries(Array.from(c.getAttributes()).filter((([t])=>i.includes(t))));const l=m(c,{direction:"forward"});for(const t of l)s.add(t),(r(t,l)||o(t,a,e))&&n.push(t)}return n}function r(t,n){if(!t.is("element","paragraph"))return!1;const s=e.mapper.toViewElement(t);if(!s)return!1;const r=U(t,i,n);return!(!r||!s.is("element","p"))||!(r||!s.is("element","span"))}function o(t,i,s){if(s.has(t))return!1;const r=e.mapper.toViewElement(t);let o=i.length-1;for(let t=r.parent;!t.is("editableElement");t=t.parent){const e=P(t),s=E(t);if(!s&&!e)continue;const r="checkAttributes:"+(e?"item":"list");if(n.fire(r,{viewElement:t,modelAttributes:i[o]}))break;if(s&&(o--,o<0))return!1}return!0}}(e,t.editing,i,this)),this.on("checkAttributes:item",((t,{viewElement:e,modelAttributes:i})=>{e.id!=i.listItemId&&(t.return=!0,t.stop())})),this.on("checkAttributes:list",((t,{viewElement:e,modelAttributes:i})=>{e.name==M(i.listType)&&e.id==R(i.listType,i.listIndent)||(t.return=!0,t.stop())}))}_setupModelPostFixing(){const t=this.editor.model,e=this._getListAttributeNames();t.document.registerPostFixer((i=>function(t,e,i,n){const s=t.document.differ.getChanges(),r=new Map;let o=!1;for(const n of s)if("insert"==n.type&&"$text"!=n.name){const s=n.position.nodeAfter;if(!t.schema.checkAttribute(s,"listItemId"))for(const t of Array.from(s.getAttributeKeys()))i.includes(t)&&(e.removeAttribute(t,s),o=!0);H(n.position,r),n.attributes.has("listItemId")||H(n.position.getShiftedBy(n.length),r);for(const{item:e,previousPosition:i}of t.createRangeIn(s))d(e)&&H(i,r)}else"remove"==n.type?H(n.position,r):"attribute"==n.type&&i.includes(n.attributeKey)&&(H(n.range.start,r),null===n.attributeNewValue&&H(n.range.start.getShiftedBy(1),r));const l=new Set;for(const t of r.values())o=n.fire("postFixer",{listNodes:new a(t),listHead:t,writer:e,seenIds:l})||o;return o}(t,i,e,this))),this.on("postFixer",((t,{listNodes:e,writer:i})=>{t.return=function(t,e){let i=0,n=-1,s=null,r=!1;for(const{node:o}of t){const t=o.getAttribute("listIndent");if(t>i){let l;null===s?(s=t-i,l=i):(s>t&&(s=t),l=t-s),l>n+1&&(l=n+1),e.setAttribute("listIndent",l,o),r=!0,n=l}else s=null,i=t+1,n=t}return r}(e,i)||t.return}),{priority:"high"}),this.on("postFixer",((t,{listNodes:e,writer:i,seenIds:n})=>{t.return=function(t,e,i){const n=new Set;let s=!1;for(const{node:r}of t){if(n.has(r))continue;let t=r.getAttribute("listType"),o=r.getAttribute("listItemId");e.has(o)&&(o=c.next()),e.add(o);for(const e of m(r,{direction:"forward"}))n.add(e),e.getAttribute("listType")!=t&&(o=c.next(),t=e.getAttribute("listType")),e.getAttribute("listItemId")!=o&&(i.setAttribute("listItemId",o,e),s=!0)}return s}(e,n,i)||t.return}),{priority:"high"})}}function Y(t,e){const i=t.document.selection;if(!i.isCollapsed)return!x(t);if("forward"===e)return!0;const n=i.getFirstPosition().parent,s=n.previousSibling;return!t.schema.isObject(s)&&(!!s.isEmpty||I([n,s]))}var J=i(273);function Q(t,e){const i=e.mapper,n=e.writer,s="numbered"==t.getAttribute("listType")?"ol":"ul",r=function(t){const e=t.createContainerElement("li");return e.getFillerOffset=ct,e}(n),o=n.createContainerElement(s,null);return n.insert(n.createPositionAt(o,0),r),i.bindElements(t,r),r}function X(t,e,i,n){const s=e.parent,r=i.mapper,o=i.writer;let l=r.toViewPosition(n.createPositionBefore(t));const a=it(t.previousSibling,{sameIndent:!0,smallerIndent:!0,listIndent:t.getAttribute("listIndent")}),c=t.previousSibling;if(a&&a.getAttribute("listIndent")==t.getAttribute("listIndent")){const t=r.toViewElement(a);l=o.breakContainer(o.createPositionAfter(t))}else if(c&&"listItem"==c.name){l=r.toViewPosition(n.createPositionAt(c,"end"));const t=r.findMappedViewAncestor(l),e=st(t);l=e?o.createPositionBefore(e):o.createPositionAt(t,"end")}else l=r.toViewPosition(n.createPositionBefore(t));if(l=et(l),o.insert(l,s),c&&"listItem"==c.name){const t=r.toViewElement(c),i=o.createRange(o.createPositionAt(t,0),l).getWalker({ignoreElementEnd:!0});for(const t of i)if(t.item.is("element","li")){const n=o.breakContainer(o.createPositionBefore(t.item)),s=t.item.parent,r=o.createPositionAt(e,"end");tt(o,r.nodeBefore,r.nodeAfter),o.move(o.createRangeOn(s),r),i.position=n}}else{const i=s.nextSibling;if(i&&(i.is("element","ul")||i.is("element","ol"))){let n=null;for(const e of i.getChildren()){const i=r.toModelElement(e);if(!(i&&i.getAttribute("listIndent")>t.getAttribute("listIndent")))break;n=e}n&&(o.breakContainer(o.createPositionAfter(n)),o.move(o.createRangeOn(n.parent),o.createPositionAt(e,"end")))}}tt(o,s,s.nextSibling),tt(o,s.previousSibling,s)}function tt(t,e,i){return!e||!i||"ul"!=e.name&&"ol"!=e.name||e.name!=i.name||e.getAttribute("class")!==i.getAttribute("class")?null:t.mergeContainers(t.createPositionAfter(e))}function et(t){return t.getLastMatchingPosition((t=>t.item.is("uiElement")))}function it(t,e){const i=!!e.sameIndent,n=!!e.smallerIndent,s=e.listIndent;let r=t;for(;r&&"listItem"==r.name;){const t=r.getAttribute("listIndent");if(i&&s==t||n&&s>t)return r;r="forward"===e.direction?r.nextSibling:r.previousSibling}return null}function nt(t,e,i,n){t.ui.componentFactory.add(e,(s=>{const r=t.commands.get(e),o=new J.ButtonView(s);return o.set({label:i,icon:n,tooltip:!0,isToggleable:!0}),o.bind("isOn","isEnabled").to(r,"value","isEnabled"),o.on("execute",(()=>{t.execute(e),t.editing.view.focus()})),o}))}function st(t){for(const e of t.getChildren())if("ul"==e.name||"ol"==e.name)return e;return null}function rt(t,e){const i=[],n=t.parent,s={ignoreElementEnd:!0,startPosition:t,shallow:!0,direction:e},r=n.getAttribute("listIndent"),o=[...new O.TreeWalker(s)].filter((t=>t.item.is("element"))).map((t=>t.item));for(const t of o){if(!t.is("element","listItem"))break;if(t.getAttribute("listIndent")<r)break;if(!(t.getAttribute("listIndent")>r)){if(t.getAttribute("listType")!==n.getAttribute("listType"))break;if(t.getAttribute("listStyle")!==n.getAttribute("listStyle"))break;if(t.getAttribute("listReversed")!==n.getAttribute("listReversed"))break;if(t.getAttribute("listStart")!==n.getAttribute("listStart"))break;"backward"===e?i.unshift(t):i.push(t)}}return i}function ot(t){let e=[...t.document.selection.getSelectedBlocks()].filter((t=>t.is("element","listItem"))).map((e=>{const i=t.change((t=>t.createPositionAt(e,0)));return[...rt(i,"backward"),...rt(i,"forward")]})).flat();return e=[...new Set(e)],e}const lt=["disc","circle","square"],at=["decimal","decimal-leading-zero","lower-roman","upper-roman","lower-latin","upper-latin"];function ct(){const t=!this.isEmpty&&("ul"==this.getChild(0).name||"ol"==this.getChild(0).name);return this.isEmpty||t?0:O.getFillerOffset.call(this)}const dt='<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M7 5.75c0 .414.336.75.75.75h9.5a.75.75 0 1 0 0-1.5h-9.5a.75.75 0 0 0-.75.75zM3.5 3v5H2V3.7H1v-1h2.5V3zM.343 17.857l2.59-3.257H2.92a.6.6 0 1 0-1.04 0H.302a2 2 0 1 1 3.995 0h-.001c-.048.405-.16.734-.333.988-.175.254-.59.692-1.244 1.312H4.3v1h-4l.043-.043zM7 14.75a.75.75 0 0 1 .75-.75h9.5a.75.75 0 1 1 0 1.5h-9.5a.75.75 0 0 1-.75-.75z"/></svg>',ut='<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M7 5.75c0 .414.336.75.75.75h9.5a.75.75 0 1 0 0-1.5h-9.5a.75.75 0 0 0-.75.75zm-6 0C1 4.784 1.777 4 2.75 4c.966 0 1.75.777 1.75 1.75 0 .966-.777 1.75-1.75 1.75C1.784 7.5 1 6.723 1 5.75zm6 9c0 .414.336.75.75.75h9.5a.75.75 0 1 0 0-1.5h-9.5a.75.75 0 0 0-.75.75zm-6 0c0-.966.777-1.75 1.75-1.75.966 0 1.75.777 1.75 1.75 0 .966-.777 1.75-1.75 1.75-.966 0-1.75-.777-1.75-1.75z"/></svg>';class mt extends t.Plugin{static get pluginName(){return"ListUI"}init(){const t=this.editor.t;nt(this.editor,"numberedList",t("Numbered List"),dt),nt(this.editor,"bulletedList",t("Bulleted List"),ut)}}class ht extends t.Plugin{static get requires(){return[G,mt]}static get pluginName(){return"DocumentList"}}class pt extends t.Command{refresh(){const t=this._getValue();this.value=t,this.isEnabled=null!=t}execute(t={}){const e=this.editor.model,i=e.document;let n=Array.from(i.selection.getSelectedBlocks()).filter((t=>d(t)&&"numbered"==t.getAttribute("listType")));n=b(n),e.change((e=>{for(const i of n)e.setAttribute("listStart",t.startIndex||1,i)}))}_getValue(){const t=this.editor.model.document,e=(0,r.first)(t.selection.getSelectedBlocks());return e&&d(e)&&"numbered"==e.getAttribute("listType")?e.getAttribute("listStart"):null}}const ft=["disc","circle","square"],gt=["decimal","decimal-leading-zero","lower-roman","upper-roman","lower-latin","upper-latin","lower-alpha","upper-alpha"];function bt(t){return ft.includes(t)?"bulleted":gt.includes(t)?"numbered":null}class vt extends t.Command{constructor(t,e){super(t),this._defaultType=e}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(t={}){const e=this.editor.model,i=e.document;e.change((e=>{this._tryToConvertItemsToList(t);let n=Array.from(i.selection.getSelectedBlocks()).filter((t=>t.hasAttribute("listType")));if(n.length){n=b(n);for(const i of n)e.setAttribute("listStyle",t.type||this._defaultType,i)}}))}_getValue(){const t=(0,r.first)(this.editor.model.document.selection.getSelectedBlocks());return d(t)?t.getAttribute("listStyle"):null}_checkEnabled(){const t=this.editor,e=t.commands.get("numberedList"),i=t.commands.get("bulletedList");return e.isEnabled||i.isEnabled}_tryToConvertItemsToList(t){if(!t.type)return;const e=bt(t.type);if(!e)return;const i=this.editor,n=e+"List";i.commands.get(n).value||i.execute(n)}}class wt extends t.Command{refresh(){const t=this._getValue();this.value=t,this.isEnabled=null!=t}execute(t={}){const e=this.editor.model,i=e.document;let n=Array.from(i.selection.getSelectedBlocks()).filter((t=>d(t)&&"numbered"==t.getAttribute("listType")));n=b(n),e.change((e=>{for(const i of n)e.setAttribute("listReversed",!!t.reversed,i)}))}_getValue(){const t=this.editor.model.document,e=(0,r.first)(t.selection.getSelectedBlocks());return d(e)&&"numbered"==e.getAttribute("listType")?e.getAttribute("listReversed"):null}}function yt(t){return(e,i,n)=>{const{writer:s,schema:r,consumable:o}=n;if(!1===o.test(i.viewItem,t.viewConsumables))return;i.modelRange||Object.assign(i,n.convertChildren(i.viewItem,i.modelCursor));let l=!1;for(const e of i.modelRange.getItems({shallow:!0}))r.checkAttribute(e,t.attributeName)&&t.appliesToListItem(e)&&(e.hasAttribute(t.attributeName)||(s.setAttribute(t.attributeName,t.getAttributeOnUpcast(i.viewItem),e),l=!0));l&&o.consume(i.viewItem,t.viewConsumables)}}const At="default";class It extends t.Plugin{static get requires(){return[G]}static get pluginName(){return"DocumentListPropertiesEditing"}constructor(t){super(t),t.config.define("list",{properties:{styles:!0,startIndex:!1,reversed:!1}})}init(){const t=this.editor,e=t.model,i=t.plugins.get(G),n=function(t){const e=[];t.styles&&e.push({attributeName:"listStyle",defaultValue:At,viewConsumables:{styles:"list-style-type"},addCommand(t){t.commands.add("listStyle",new vt(t,At))},appliesToListItem:()=>!0,hasValidAttribute(t){if(!t.hasAttribute("listStyle"))return!1;const e=t.getAttribute("listStyle");return e==At||bt(e)==t.getAttribute("listType")},setAttributeOnDowncast(t,e,i){e&&e!==At?t.setStyle("list-style-type",e,i):t.removeStyle("list-style-type",i)},getAttributeOnUpcast:t=>t.getStyle("list-style-type")||At});t.reversed&&e.push({attributeName:"listReversed",defaultValue:!1,viewConsumables:{attributes:"reversed"},addCommand(t){t.commands.add("listReversed",new wt(t))},appliesToListItem:t=>"numbered"==t.getAttribute("listType"),hasValidAttribute(t){return this.appliesToListItem(t)==t.hasAttribute("listReversed")},setAttributeOnDowncast(t,e,i){e?t.setAttribute("reversed","reversed",i):t.removeAttribute("reversed",i)},getAttributeOnUpcast:t=>t.hasAttribute("reversed")});t.startIndex&&e.push({attributeName:"listStart",defaultValue:1,viewConsumables:{attributes:"start"},addCommand(t){t.commands.add("listStart",new pt(t))},appliesToListItem:t=>"numbered"==t.getAttribute("listType"),hasValidAttribute(t){return this.appliesToListItem(t)==t.hasAttribute("listStart")},setAttributeOnDowncast(t,e,i){e&&e>1?t.setAttribute("start",e,i):t.removeAttribute("start",i)},getAttributeOnUpcast:t=>t.getAttribute("start")||1});return e}(t.config.get("list.properties"));for(const s of n)s.addCommand(t),e.schema.extend("$container",{allowAttributes:s.attributeName}),e.schema.extend("$block",{allowAttributes:s.attributeName}),e.schema.extend("$blockObject",{allowAttributes:s.attributeName}),i.registerDowncastStrategy({scope:"list",attributeName:s.attributeName,setAttributeOnDowncast(t,e,i){s.setAttributeOnDowncast(t,e,i)}});t.conversion.for("upcast").add((t=>{for(const e of n)t.on("element:ol",yt(e)),t.on("element:ul",yt(e))})),i.on("checkAttributes:list",((t,{viewElement:e,modelAttributes:i})=>{for(const s of n)s.getAttributeOnUpcast(e)!=i[s.attributeName]&&(t.return=!0,t.stop())})),this.listenTo(t.commands.get("indentList"),"afterExecute",((t,i)=>{e.change((t=>{for(const e of i)for(const i of n)i.appliesToListItem(e)&&t.setAttribute(i.attributeName,i.defaultValue,e)}))})),i.on("postFixer",((t,{listNodes:e,writer:i})=>{for(const{node:s}of e)for(const e of n)e.hasValidAttribute(s)||(e.appliesToListItem(s)?i.setAttribute(e.attributeName,e.defaultValue,s):i.removeAttribute(e.attributeName,s),t.return=!0)})),i.on("postFixer",((t,{listNodes:e,writer:i})=>{const s=[];for(const{node:r,previous:o}of e){if(!o)continue;const e=r.getAttribute("listIndent"),l=o.getAttribute("listIndent");let a=null;if(e>l?s[l]=o:e<l?(a=s[e],s.length=e):a=o,a&&a.getAttribute("listType")==r.getAttribute("listType"))for(const e of n){const{attributeName:n}=e;if(!e.appliesToListItem(r))continue;const s=a.getAttribute(n);r.getAttribute(n)!=s&&(i.setAttribute(n,s,r),t.return=!0)}}}))}}var kt=i(389),xt={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};K()(kt.Z,xt);kt.Z.locals;class Tt extends J.View{constructor(t,e){super(t);const i=this.bindTemplate;this.set("isCollapsed",!1),this.set("label",""),this.buttonView=this._createButtonView(),this.children=this.createCollection(),this.set("_collapsibleAriaLabelUid"),e&&this.children.addMany(e),this.setTemplate({tag:"div",attributes:{class:["ck","ck-collapsible",i.if("isCollapsed","ck-collapsible_collapsed")]},children:[this.buttonView,{tag:"div",attributes:{class:["ck","ck-collapsible__children"],role:"region",hidden:i.if("isCollapsed","hidden"),"aria-labelledby":i.to("_collapsibleAriaLabelUid")},children:this.children}]})}render(){super.render(),this._collapsibleAriaLabelUid=this.buttonView.labelView.element.id}_createButtonView(){const t=new J.ButtonView(this.locale),e=t.bindTemplate;return t.set({withText:!0,icon:'<svg viewBox="0 0 10 10" xmlns="http://www.w3.org/2000/svg"><path d="M.941 4.523a.75.75 0 1 1 1.06-1.06l3.006 3.005 3.005-3.005a.75.75 0 1 1 1.06 1.06l-3.549 3.55a.75.75 0 0 1-1.168-.136L.941 4.523z"/></svg>'}),t.extendTemplate({attributes:{"aria-expanded":e.to("isOn",(t=>String(t)))}}),t.bind("label").to(this),t.bind("isOn").to(this,"isCollapsed",(t=>!t)),t.on("execute",(()=>{this.isCollapsed=!this.isCollapsed})),t}}var St=i(543),_t={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};K()(St.Z,_t);St.Z.locals;class Ct extends J.View{constructor(t,{enabledProperties:e,styleButtonViews:i,styleGridAriaLabel:n}){super(t);const s=["ck","ck-list-properties"];this.children=this.createCollection(),this.stylesView=null,this.additionalPropertiesCollapsibleView=null,this.startIndexFieldView=null,this.reversedSwitchButtonView=null,this.focusTracker=new r.FocusTracker,this.keystrokes=new r.KeystrokeHandler,this.focusables=new J.ViewCollection,this.focusCycler=new J.FocusCycler({focusables:this.focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}}),e.styles?(this.stylesView=this._createStylesView(i,n),this.children.add(this.stylesView)):s.push("ck-list-properties_without-styles"),(e.startIndex||e.reversed)&&(this._addNumberedListPropertyViews(e,i),s.push("ck-list-properties_with-numbered-properties")),this.setTemplate({tag:"div",attributes:{class:s},children:this.children})}render(){if(super.render(),this.stylesView){for(const t of this.stylesView.children)this.focusables.add(t),this.focusTracker.add(t.element);(this.startIndexFieldView||this.reversedSwitchButtonView)&&(this.focusables.add(this.children.last.buttonView),this.focusTracker.add(this.children.last.buttonView.element))}if(this.startIndexFieldView){this.focusables.add(this.startIndexFieldView),this.focusTracker.add(this.startIndexFieldView.element),this.listenTo(this.startIndexFieldView.element,"selectstart",((t,e)=>{e.stopPropagation()}),{priority:"high"});const t=t=>t.stopPropagation();this.keystrokes.set("arrowright",t),this.keystrokes.set("arrowleft",t),this.keystrokes.set("arrowup",t),this.keystrokes.set("arrowdown",t)}this.reversedSwitchButtonView&&(this.focusables.add(this.reversedSwitchButtonView),this.focusTracker.add(this.reversedSwitchButtonView.element)),this.keystrokes.listenTo(this.element)}focus(){this.focusCycler.focusFirst()}focusLast(){this.focusCycler.focusLast()}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}_createStylesView(t,e){const i=new J.View(this.locale);return i.children=i.createCollection(this.locale),i.children.addMany(t),i.setTemplate({tag:"div",attributes:{"aria-label":e,class:["ck","ck-list-styles-list"]},children:i.children}),i.children.delegate("execute").to(this),i}_addNumberedListPropertyViews(t){const e=this.locale.t,i=[];t.startIndex&&(this.startIndexFieldView=this._createStartIndexField(),i.push(this.startIndexFieldView)),t.reversed&&(this.reversedSwitchButtonView=this._createReversedSwitchButton(),i.push(this.reversedSwitchButtonView)),t.styles?(this.additionalPropertiesCollapsibleView=new Tt(this.locale,i),this.additionalPropertiesCollapsibleView.set({label:e("List properties"),isCollapsed:!0}),this.additionalPropertiesCollapsibleView.buttonView.bind("isEnabled").toMany(i,"isEnabled",((...t)=>t.some((t=>t)))),this.additionalPropertiesCollapsibleView.buttonView.on("change:isEnabled",((t,e,i)=>{i||(this.additionalPropertiesCollapsibleView.isCollapsed=!0)})),this.children.add(this.additionalPropertiesCollapsibleView)):this.children.addMany(i)}_createStartIndexField(){const t=this.locale.t,e=new J.LabeledFieldView(this.locale,J.createLabeledInputNumber);return e.set({label:t("Start at"),class:"ck-numbered-list-properties__start-index"}),e.fieldView.set({min:1,step:1,value:1,inputMode:"numeric"}),e.fieldView.on("input",(()=>{const i=e.fieldView.element,n=i.valueAsNumber;Number.isNaN(n)||(i.checkValidity()?this.fire("listStart",{startIndex:n}):e.errorText=t("Start index must be greater than 0."))})),e}_createReversedSwitchButton(){const t=this.locale.t,e=new J.SwitchButtonView(this.locale);return e.set({withText:!0,label:t("Reversed order"),class:"ck-numbered-list-properties__reversed-order"}),e.delegate("execute").to(this,"listReversed"),e}}var Lt=i(657),Vt={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};K()(Lt.Z,Vt);Lt.Z.locals;class Et extends t.Plugin{static get pluginName(){return"ListPropertiesUI"}init(){const t=this.editor,e=t.locale.t,i=t.config.get("list.properties");i.styles&&t.ui.componentFactory.add("bulletedList",Pt({editor:t,parentCommandName:"bulletedList",buttonLabel:e("Bulleted List"),buttonIcon:ut,styleGridAriaLabel:e("Bulleted list styles toolbar"),styleDefinitions:[{label:e("Toggle the disc list style"),tooltip:e("Disc"),type:"disc",icon:'<svg viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg"><path d="M35 29a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17z" fill-opacity=".163"/><path d="M11 27a3 3 0 1 1 0 6 3 3 0 0 1 0-6zm0-9a3 3 0 1 1 0 6 3 3 0 0 1 0-6zm0-9a3 3 0 1 1 0 6 3 3 0 0 1 0-6z"/></svg>'},{label:e("Toggle the circle list style"),tooltip:e("Circle"),type:"circle",icon:'<svg viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg"><path d="M35 29a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17z" fill-opacity=".163"/><path d="M11 27a3 3 0 1 1 0 6 3 3 0 0 1 0-6zm0 1a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm0-10a3 3 0 1 1 0 6 3 3 0 0 1 0-6zm0 1a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm0-10a3 3 0 1 1 0 6 3 3 0 0 1 0-6zm0 1a2 2 0 1 0 0 4 2 2 0 0 0 0-4z"/></svg>'},{label:e("Toggle the square list style"),tooltip:e("Square"),type:"square",icon:'<svg viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg"><path d="M35 29a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17z" fill-opacity=".163"/><path d="M14 27v6H8v-6h6zm0-9v6H8v-6h6zm0-9v6H8V9h6z"/></svg>'}]})),(i.styles||i.startIndex||i.reversed)&&t.ui.componentFactory.add("numberedList",Pt({editor:t,parentCommandName:"numberedList",buttonLabel:e("Numbered List"),buttonIcon:dt,styleGridAriaLabel:e("Numbered list styles toolbar"),styleDefinitions:[{label:e("Toggle the decimal list style"),tooltip:e("Decimal"),type:"decimal",icon:'<svg viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg"><path d="M35 29a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17z" fill-opacity=".163"/><path d="M10.29 15V8.531H9.286c-.14.393-.4.736-.778 1.03-.378.295-.728.495-1.05.6v1.121a4.257 4.257 0 0 0 1.595-.936V15h1.235zm3.343 0v-1.235h-1.235V15h1.235zM11.3 24v-1.147H8.848c.064-.111.148-.226.252-.343.104-.117.351-.354.74-.712.39-.357.66-.631.81-.821.225-.288.39-.562.494-.824.104-.263.156-.539.156-.829 0-.51-.182-.936-.545-1.279-.363-.342-.863-.514-1.499-.514-.58 0-1.063.148-1.45.444-.387.296-.617.784-.69 1.463l1.23.124c.024-.36.112-.619.264-.774.153-.155.358-.233.616-.233.26 0 .465.074.613.222.148.148.222.36.222.635 0 .25-.085.501-.255.756-.126.185-.468.536-1.024 1.055-.692.641-1.155 1.156-1.389 1.544-.234.389-.375.8-.422 1.233H11.3zm2.333 0v-1.235h-1.235V24h1.235zM9.204 34.11c.615 0 1.129-.2 1.542-.598.413-.398.62-.88.62-1.446 0-.39-.11-.722-.332-.997a1.5 1.5 0 0 0-.886-.532c.619-.337.928-.788.928-1.353 0-.399-.151-.756-.453-1.073-.366-.386-.852-.58-1.459-.58a2.25 2.25 0 0 0-.96.2 1.617 1.617 0 0 0-.668.55c-.16.232-.28.544-.358.933l1.138.194c.032-.282.123-.495.272-.642.15-.146.33-.22.54-.22.215 0 .386.065.515.194s.193.302.193.518c0 .255-.087.46-.263.613-.176.154-.43.227-.765.218l-.136 1.006c.22-.061.409-.092.567-.092.24 0 .444.09.61.272.168.182.251.428.251.739 0 .328-.087.589-.261.782a.833.833 0 0 1-.644.29.841.841 0 0 1-.607-.242c-.167-.16-.27-.394-.307-.698l-1.196.145c.062.542.285.98.668 1.316.384.335.868.503 1.45.503zm4.43-.11v-1.235h-1.236V34h1.235z"/></svg>'},{label:e("Toggle the decimal with leading zero list style"),tooltip:e("Decimal with leading zero"),type:"decimal-leading-zero",icon:'<svg viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg"><path d="M35 29a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17z" fill-opacity=".163"/><path d="M5.714 15.11c.624 0 1.11-.22 1.46-.66.421-.533.632-1.408.632-2.627 0-1.222-.21-2.096-.629-2.624-.351-.445-.839-.668-1.463-.668-.624 0-1.11.22-1.459.66-.422.533-.633 1.406-.633 2.619 0 1.236.192 2.095.576 2.577.384.482.89.723 1.516.723zm0-1.024a.614.614 0 0 1-.398-.14c-.115-.094-.211-.283-.287-.565-.077-.283-.115-.802-.115-1.558s.043-1.294.128-1.613c.064-.246.155-.417.272-.512a.617.617 0 0 1 .4-.143.61.61 0 0 1 .398.143c.116.095.211.284.288.567.076.283.114.802.114 1.558s-.043 1.292-.128 1.608c-.064.246-.155.417-.272.512a.617.617 0 0 1-.4.143zm6.078.914V8.531H10.79c-.14.393-.4.736-.778 1.03-.378.295-.728.495-1.05.6v1.121a4.257 4.257 0 0 0 1.595-.936V15h1.235zm3.344 0v-1.235h-1.235V15h1.235zm-9.422 9.11c.624 0 1.11-.22 1.46-.66.421-.533.632-1.408.632-2.627 0-1.222-.21-2.096-.629-2.624-.351-.445-.839-.668-1.463-.668-.624 0-1.11.22-1.459.66-.422.533-.633 1.406-.633 2.619 0 1.236.192 2.095.576 2.577.384.482.89.723 1.516.723zm0-1.024a.614.614 0 0 1-.398-.14c-.115-.094-.211-.283-.287-.565-.077-.283-.115-.802-.115-1.558s.043-1.294.128-1.613c.064-.246.155-.417.272-.512a.617.617 0 0 1 .4-.143.61.61 0 0 1 .398.143c.116.095.211.284.288.567.076.283.114.802.114 1.558s-.043 1.292-.128 1.608c-.064.246-.155.417-.272.512a.617.617 0 0 1-.4.143zm7.088.914v-1.147H10.35c.065-.111.149-.226.253-.343.104-.117.35-.354.74-.712.39-.357.66-.631.81-.821.225-.288.39-.562.493-.824.104-.263.156-.539.156-.829 0-.51-.181-.936-.544-1.279-.364-.342-.863-.514-1.499-.514-.58 0-1.063.148-1.45.444-.387.296-.617.784-.69 1.463l1.23.124c.024-.36.112-.619.264-.774.152-.155.357-.233.615-.233.261 0 .465.074.613.222.148.148.222.36.222.635 0 .25-.085.501-.255.756-.126.185-.467.536-1.024 1.055-.691.641-1.154 1.156-1.388 1.544-.235.389-.375.8-.422 1.233h4.328zm2.334 0v-1.235h-1.235V24h1.235zM5.714 34.11c.624 0 1.11-.22 1.46-.66.421-.533.632-1.408.632-2.627 0-1.222-.21-2.096-.629-2.624-.351-.445-.839-.668-1.463-.668-.624 0-1.11.22-1.459.66-.422.533-.633 1.406-.633 2.619 0 1.236.192 2.095.576 2.577.384.482.89.723 1.516.723zm0-1.024a.614.614 0 0 1-.398-.14c-.115-.094-.211-.283-.287-.565-.077-.283-.115-.802-.115-1.558s.043-1.294.128-1.613c.064-.246.155-.417.272-.512a.617.617 0 0 1 .4-.143.61.61 0 0 1 .398.143c.116.095.211.284.288.567.076.283.114.802.114 1.558s-.043 1.292-.128 1.608c-.064.246-.155.417-.272.512a.617.617 0 0 1-.4.143zm4.992 1.024c.616 0 1.13-.2 1.543-.598.413-.398.62-.88.62-1.446 0-.39-.111-.722-.332-.997a1.5 1.5 0 0 0-.886-.532c.618-.337.927-.788.927-1.353 0-.399-.15-.756-.452-1.073-.366-.386-.853-.58-1.46-.58a2.25 2.25 0 0 0-.96.2 1.617 1.617 0 0 0-.667.55c-.16.232-.28.544-.359.933l1.139.194c.032-.282.123-.495.272-.642.15-.146.33-.22.54-.22.214 0 .386.065.515.194s.193.302.193.518c0 .255-.088.46-.264.613-.175.154-.43.227-.764.218l-.136 1.006c.22-.061.408-.092.566-.092.24 0 .444.09.611.272.167.182.25.428.25.739 0 .328-.086.589-.26.782a.833.833 0 0 1-.644.29.841.841 0 0 1-.607-.242c-.167-.16-.27-.394-.308-.698l-1.195.145c.062.542.284.98.668 1.316.384.335.867.503 1.45.503zm4.43-.11v-1.235h-1.235V34h1.235z"/></svg>'},{label:e("Toggle the lower–roman list style"),tooltip:e("Lower–roman"),type:"lower-roman",icon:'<svg viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg"><path d="M35 29a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17z" fill-opacity=".163"/><path d="M11.88 8.7V7.558h-1.234V8.7h1.234zm0 5.3V9.333h-1.234V14h1.234zm2.5 0v-1.235h-1.234V14h1.235zm-4.75 4.7v-1.142H8.395V18.7H9.63zm0 5.3v-4.667H8.395V24H9.63zm2.5-5.3v-1.142h-1.234V18.7h1.235zm0 5.3v-4.667h-1.234V24h1.235zm2.501 0v-1.235h-1.235V24h1.235zM7.38 28.7v-1.142H6.145V28.7H7.38zm0 5.3v-4.667H6.145V34H7.38zm2.5-5.3v-1.142H8.646V28.7H9.88zm0 5.3v-4.667H8.646V34H9.88zm2.5-5.3v-1.142h-1.234V28.7h1.235zm0 5.3v-4.667h-1.234V34h1.235zm2.501 0v-1.235h-1.235V34h1.235z"/></svg>'},{label:e("Toggle the upper–roman list style"),tooltip:e("Upper-roman"),type:"upper-roman",icon:'<svg viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg"><path d="M35 29a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17z" fill-opacity=".163"/><path d="M11.916 15V8.558h-1.301V15h1.3zm2.465 0v-1.235h-1.235V15h1.235zM9.665 25v-6.442h-1.3V25h1.3zm2.5 0v-6.442h-1.3V25h1.3zm2.466 0v-1.235h-1.235V25h1.235zm-7.216 9v-6.442h-1.3V34h1.3zm2.5 0v-6.442h-1.3V34h1.3zm2.501 0v-6.442h-1.3V34h1.3zm2.465 0v-1.235h-1.235V34h1.235z"/></svg>'},{label:e("Toggle the lower–latin list style"),tooltip:e("Lower-latin"),type:"lower-latin",icon:'<svg viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg"><path d="M35 29a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17z" fill-opacity=".163"/><path d="M9.62 14.105c.272 0 .528-.05.768-.153s.466-.257.677-.462c.009.024.023.072.044.145.047.161.086.283.119.365h1.221a2.649 2.649 0 0 1-.222-.626c-.04-.195-.059-.498-.059-.908l.013-1.441c0-.536-.055-.905-.165-1.105-.11-.201-.3-.367-.569-.497-.27-.13-.68-.195-1.23-.195-.607 0-1.064.108-1.371.325-.308.217-.525.55-.65 1.002l1.12.202c.076-.217.176-.369.299-.455.123-.086.294-.13.514-.13.325 0 .546.05.663.152.118.101.176.27.176.508v.123c-.222.093-.622.194-1.2.303-.427.082-.755.178-.982.288-.227.11-.403.268-.53.474a1.327 1.327 0 0 0-.188.706c0 .398.138.728.415.988.277.261.656.391 1.136.391zm.368-.87a.675.675 0 0 1-.492-.189.606.606 0 0 1-.193-.448c0-.176.08-.32.241-.435.106-.07.33-.142.673-.215a7.19 7.19 0 0 0 .751-.19v.247c0 .296-.016.496-.048.602a.773.773 0 0 1-.295.409 1.07 1.07 0 0 1-.637.22zm4.645.765v-1.235h-1.235V14h1.235zM10.2 25.105c.542 0 1.003-.215 1.382-.646.38-.43.57-1.044.57-1.84 0-.771-.187-1.362-.559-1.774a1.82 1.82 0 0 0-1.41-.617c-.522 0-.973.216-1.354.65v-2.32H7.594V25h1.147v-.686a1.9 1.9 0 0 0 .67.592c.26.133.523.2.79.2zm-.299-.975c-.354 0-.638-.164-.852-.492-.153-.232-.229-.59-.229-1.073 0-.468.098-.818.295-1.048a.93.93 0 0 1 .738-.345c.302 0 .55.118.743.354.193.236.29.62.29 1.154 0 .5-.096.868-.288 1.1-.192.233-.424.35-.697.35zm4.478.87v-1.235h-1.234V25h1.234zm-4.017 9.105c.6 0 1.08-.142 1.437-.426.357-.284.599-.704.725-1.261l-1.213-.207c-.061.326-.167.555-.316.688a.832.832 0 0 1-.576.2.916.916 0 0 1-.75-.343c-.185-.228-.278-.62-.278-1.173 0-.498.091-.853.274-1.066.183-.212.429-.318.736-.318.232 0 .42.061.565.184.145.123.238.306.28.55l1.216-.22c-.146-.501-.387-.874-.722-1.119-.336-.244-.788-.366-1.356-.366-.695 0-1.245.214-1.653.643-.407.43-.61 1.03-.61 1.8 0 .762.202 1.358.608 1.788.406.431.95.646 1.633.646zM14.633 34v-1.235h-1.235V34h1.235z"/></svg>'},{label:e("Toggle the upper–latin list style"),tooltip:e("Upper-latin"),type:"upper-latin",icon:'<svg viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg"><path d="M35 29a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17z" fill-opacity=".163"/><path d="m7.88 15 .532-1.463h2.575L11.549 15h1.415l-2.58-6.442H9.01L6.5 15h1.38zm2.69-2.549H8.811l.87-2.39.887 2.39zM14.88 15v-1.235h-1.234V15h1.234zM9.352 25c.83-.006 1.352-.02 1.569-.044.346-.038.636-.14.872-.305.236-.166.422-.387.558-.664.137-.277.205-.562.205-.855 0-.372-.106-.695-.317-.97-.21-.276-.512-.471-.905-.585a1.51 1.51 0 0 0 .661-.567 1.5 1.5 0 0 0 .244-.83c0-.28-.066-.53-.197-.754a1.654 1.654 0 0 0-.495-.539 1.676 1.676 0 0 0-.672-.266c-.25-.042-.63-.063-1.14-.063H7.158V25h2.193zm.142-3.88H8.46v-1.49h.747c.612 0 .983.007 1.112.022.217.026.38.102.49.226.11.125.165.287.165.486a.68.68 0 0 1-.192.503.86.86 0 0 1-.525.23 11.47 11.47 0 0 1-.944.023h.18zm.17 2.795H8.46v-1.723h1.05c.592 0 .977.03 1.154.092.177.062.313.16.406.295a.84.84 0 0 1 .14.492c0 .228-.06.41-.181.547a.806.806 0 0 1-.473.257c-.126.026-.423.04-.892.04zM14.88 25v-1.235h-1.234V25h1.234zm-5.018 9.11c.691 0 1.262-.17 1.711-.512.45-.341.772-.864.965-1.567l-1.261-.4c-.109.472-.287.818-.536 1.037-.25.22-.547.33-.892.33-.47 0-.85-.173-1.143-.519-.293-.345-.44-.925-.44-1.74 0-.767.15-1.322.447-1.665.297-.343.684-.514 1.162-.514.346 0 .64.096.881.29.242.193.4.457.477.79l1.288-.307c-.147-.516-.367-.911-.66-1.187-.492-.465-1.132-.698-1.92-.698-.902 0-1.63.296-2.184.89-.554.593-.83 1.426-.83 2.498 0 1.014.275 1.813.825 2.397.551.585 1.254.877 2.11.877zM14.88 34v-1.235h-1.234V34h1.234z"/></svg>'}]}))}}function Pt({editor:t,parentCommandName:e,buttonLabel:i,buttonIcon:n,styleGridAriaLabel:s,styleDefinitions:r}){const o=t.commands.get(e);return l=>{const a=(0,J.createDropdown)(l,J.SplitButtonView),c=a.buttonView;a.bind("isEnabled").to(o),a.class="ck-list-styles-dropdown",c.on("execute",(()=>{t.execute(e),t.editing.view.focus()})),c.set({label:i,icon:n,tooltip:!0,isToggleable:!0}),c.bind("isOn").to(o,"value",(t=>!!t));const d=function({editor:t,dropdownView:e,parentCommandName:i,styleDefinitions:n,styleGridAriaLabel:s}){const r=t.locale,o=t.config.get("list.properties");let l;"numberedList"!=i&&(o.startIndex=!1,o.reversed=!1);if(o.styles){const e=t.commands.get("listStyle"),s=function({editor:t,listStyleCommand:e,parentCommandName:i}){const n=t.locale,s=t.commands.get(i);return({label:i,type:r,icon:o,tooltip:l})=>{const a=new J.ButtonView(n);return a.set({label:i,icon:o,tooltip:l}),e.on("change:value",(()=>{a.isOn=e.value===r})),a.on("execute",(()=>{s.value?e.value!==r?t.execute("listStyle",{type:r}):t.execute("listStyle",{type:e._defaultType}):t.model.change((()=>{t.execute("listStyle",{type:r})})),t.editing.view.focus()})),a}}({editor:t,parentCommandName:i,listStyleCommand:e});l=n.map(s)}const a=new Ct(r,{styleGridAriaLabel:s,enabledProperties:o,styleButtonViews:l});if(o.startIndex){const e=t.commands.get("listStart");a.startIndexFieldView.bind("isEnabled").to(e),a.startIndexFieldView.fieldView.bind("value").to(e),a.on("listStart",((e,i)=>t.execute("listStart",i)))}if(o.reversed){const e=t.commands.get("listReversed");a.reversedSwitchButtonView.bind("isEnabled").to(e),a.reversedSwitchButtonView.bind("isOn").to(e,"value"),a.on("listReversed",(()=>{const i=e.value;t.execute("listReversed",{reversed:!i})}))}return a.delegate("execute").to(e),a}({editor:t,dropdownView:a,parentCommandName:e,styleGridAriaLabel:s,styleDefinitions:r});return a.panelView.children.add(d),a}}class zt extends t.Plugin{static get requires(){return[It,Et]}static get pluginName(){return"DocumentListProperties"}}class Bt extends t.Command{constructor(t,e){super(t),this.type=e}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(t={}){const e=this.editor.model,i=e.document,n=Array.from(i.selection.getSelectedBlocks()).filter((t=>Mt(t,e.schema))),s=void 0!==t.forceValue?!t.forceValue:this.value;e.change((t=>{if(s){let e=n[n.length-1].nextSibling,i=Number.POSITIVE_INFINITY,s=[];for(;e&&"listItem"==e.name&&0!==e.getAttribute("listIndent");){const t=e.getAttribute("listIndent");t<i&&(i=t);const n=t-i;s.push({element:e,listIndent:n}),e=e.nextSibling}s=s.reverse();for(const e of s)t.setAttribute("listIndent",e.listIndent,e.element)}if(!s){let t=Number.POSITIVE_INFINITY;for(const e of n)e.is("element","listItem")&&e.getAttribute("listIndent")<t&&(t=e.getAttribute("listIndent"));t=0===t?1:t,Nt(n,!0,t),Nt(n,!1,t)}for(const e of n.reverse())s&&"listItem"==e.name?t.rename(e,"paragraph"):s||"listItem"==e.name?s||"listItem"!=e.name||e.getAttribute("listType")==this.type||t.setAttribute("listType",this.type,e):(t.setAttributes({listType:this.type,listIndent:0},e),t.rename(e,"listItem"));this.fire("_executeCleanup",n)}))}_getValue(){const t=(0,r.first)(this.editor.model.document.selection.getSelectedBlocks());return!!t&&t.is("element","listItem")&&t.getAttribute("listType")==this.type}_checkEnabled(){if(this.value)return!0;const t=this.editor.model.document.selection,e=this.editor.model.schema,i=(0,r.first)(t.getSelectedBlocks());return!!i&&Mt(i,e)}}function Nt(t,e,i){const n=e?t[0]:t[t.length-1];if(n.is("element","listItem")){let s=n[e?"previousSibling":"nextSibling"],r=n.getAttribute("listIndent");for(;s&&s.is("element","listItem")&&s.getAttribute("listIndent")>=i;)r>s.getAttribute("listIndent")&&(r=s.getAttribute("listIndent")),s.getAttribute("listIndent")==r&&t[e?"unshift":"push"](s),s=s[e?"previousSibling":"nextSibling"]}}function Mt(t,e){return e.checkChild(t.parent,"listItem")&&!e.isObject(t)}class Rt extends t.Command{constructor(t,e){super(t),this._indentBy="forward"==e?1:-1}refresh(){this.isEnabled=this._checkEnabled()}execute(){const t=this.editor.model,e=t.document;let i=Array.from(e.selection.getSelectedBlocks());t.change((t=>{const e=i[i.length-1];let n=e.nextSibling;for(;n&&"listItem"==n.name&&n.getAttribute("listIndent")>e.getAttribute("listIndent");)i.push(n),n=n.nextSibling;this._indentBy<0&&(i=i.reverse());for(const e of i){const i=e.getAttribute("listIndent")+this._indentBy;i<0?t.rename(e,"paragraph"):t.setAttribute("listIndent",i,e)}this.fire("_executeCleanup",i)}))}_checkEnabled(){const t=(0,r.first)(this.editor.model.document.selection.getSelectedBlocks());if(!t||!t.is("element","listItem"))return!1;if(this._indentBy>0){const e=t.getAttribute("listIndent"),i=t.getAttribute("listType");let n=t.previousSibling;for(;n&&n.is("element","listItem")&&n.getAttribute("listIndent")>=e;){if(n.getAttribute("listIndent")==e)return n.getAttribute("listType")==i;n=n.previousSibling}return!1}return!0}}function Ht(t){return(e,i,n)=>{const s=n.consumable;if(!s.test(i.item,"insert")||!s.test(i.item,"attribute:listType")||!s.test(i.item,"attribute:listIndent"))return;s.consume(i.item,"insert"),s.consume(i.item,"attribute:listType"),s.consume(i.item,"attribute:listIndent");const r=i.item;X(r,Q(r,n),n,t)}}function Ot(t,e,i){if(!i.consumable.test(e.item,t.name))return;const n=i.mapper.toViewElement(e.item),s=i.writer;s.breakContainer(s.createPositionBefore(n)),s.breakContainer(s.createPositionAfter(n));const r=n.parent,o="numbered"==e.attributeNewValue?"ol":"ul";s.rename(o,r)}function Dt(t,e,i){i.consumable.consume(e.item,t.name);const n=i.mapper.toViewElement(e.item).parent,s=i.writer;tt(s,n,n.nextSibling),tt(s,n.previousSibling,n)}function Ft(t,e,i){if(i.consumable.test(e.item,t.name)&&"listItem"!=e.item.name){let t=i.mapper.toViewPosition(e.range.start);const n=i.writer,s=[];for(;("ul"==t.parent.name||"ol"==t.parent.name)&&(t=n.breakContainer(t),"li"==t.parent.name);){const e=t,i=n.createPositionAt(t.parent,"end");if(!e.isEqual(i)){const t=n.remove(n.createRange(e,i));s.push(t)}t=n.createPositionAfter(t.parent)}if(s.length>0){for(let e=0;e<s.length;e++){const i=t.nodeBefore;if(t=n.insert(t,s[e]).end,e>0){const e=tt(n,i,i.nextSibling);e&&e.parent==i&&t.offset--}}tt(n,t.nodeBefore,t.nodeAfter)}}}function jt(t,e,i){const n=i.mapper.toViewPosition(e.position),s=n.nodeBefore,r=n.nodeAfter;tt(i.writer,s,r)}function Ut(t,e,i){if(i.consumable.consume(e.viewItem,{name:!0})){const t=i.writer,n=t.createElement("listItem"),s=function(t){let e=0,i=t.parent;for(;i;){if(i.is("element","li"))e++;else{const t=i.previousSibling;t&&t.is("element","li")&&e++}i=i.parent}return e}(e.viewItem);t.setAttribute("listIndent",s,n);const r=e.viewItem.parent&&"ol"==e.viewItem.parent.name?"numbered":"bulleted";if(t.setAttribute("listType",r,n),!i.safeInsert(n,e.modelCursor))return;const o=function(t,e,i){const{writer:n,schema:s}=i;let r=n.createPositionAfter(t);for(const o of e)if("ul"==o.name||"ol"==o.name)r=i.convertItem(o,r).modelCursor;else{const e=i.convertItem(o,n.createPositionAt(t,"end")),l=e.modelRange.start.nodeAfter;l&&l.is("element")&&!s.checkChild(t,l.name)&&(t=e.modelCursor.parent.is("element","listItem")?e.modelCursor.parent:Wt(e.modelCursor),r=n.createPositionAfter(t))}return r}(n,e.viewItem.getChildren(),i);e.modelRange=t.createRange(e.modelCursor,o),i.updateConversionResult(n,e)}}function qt(t,e,i){if(i.consumable.test(e.viewItem,{name:!0})){const t=Array.from(e.viewItem.getChildren());for(const e of t){!(e.is("element","li")||Yt(e))&&e._remove()}}}function Kt(t,e,i){if(i.consumable.test(e.viewItem,{name:!0})){if(0===e.viewItem.childCount)return;const t=[...e.viewItem.getChildren()];let i=!1;for(const e of t)i&&!Yt(e)&&e._remove(),Yt(e)&&(i=!0)}}function Zt(t){return(e,i)=>{if(i.isPhantom)return;const n=i.modelPosition.nodeBefore;if(n&&n.is("element","listItem")){const e=i.mapper.toViewElement(n),s=e.getAncestors().find(Yt),r=t.createPositionAt(e,0).getWalker();for(const t of r){if("elementStart"==t.type&&t.item.is("element","li")){i.viewPosition=t.previousPosition;break}if("elementEnd"==t.type&&t.item==s){i.viewPosition=t.nextPosition;break}}}}}function $t(t,[e,i]){let n,s=e.is("documentFragment")?e.getChild(0):e;if(n=i?this.createSelection(i):this.document.selection,s&&s.is("element","listItem")){const t=n.getFirstPosition();let e=null;if(t.parent.is("element","listItem")?e=t.parent:t.nodeBefore&&t.nodeBefore.is("element","listItem")&&(e=t.nodeBefore),e){const t=e.getAttribute("listIndent");if(t>0)for(;s&&s.is("element","listItem");)s._setAttribute("listIndent",s.getAttribute("listIndent")+t),s=s.nextSibling}}}function Wt(t){const e=new O.TreeWalker({startPosition:t});let i;do{i=e.next()}while(!i.value.item.is("element","listItem"));return i.value.item}function Gt(t,e,i,n,s,r){const o=it(e.nodeBefore,{sameIndent:!0,smallerIndent:!0,listIndent:t,foo:"b"}),l=s.mapper,a=s.writer,c=o?o.getAttribute("listIndent"):null;let d;if(o)if(c==t){const t=l.toViewElement(o).parent;d=a.createPositionAfter(t)}else{const t=r.createPositionAt(o,"end");d=l.toViewPosition(t)}else d=i;d=et(d);for(const t of[...n.getChildren()])Yt(t)&&(d=a.move(a.createRangeOn(t),d).end,tt(a,t,t.nextSibling),tt(a,t.previousSibling,t))}function Yt(t){return t.is("element","ol")||t.is("element","ul")}class Jt extends t.Plugin{static get pluginName(){return"ListEditing"}static get requires(){return[e.Enter,s.Delete]}init(){const t=this.editor;t.model.schema.register("listItem",{inheritAllFrom:"$block",allowAttributes:["listType","listIndent"]});const e=t.data,i=t.editing;var n;t.model.document.registerPostFixer((e=>function(t,e){const i=t.document.differ.getChanges(),n=new Map;let s=!1;for(const n of i)if("insert"==n.type&&"listItem"==n.name)r(n.position);else if("insert"==n.type&&"listItem"!=n.name){if("$text"!=n.name){const i=n.position.nodeAfter;i.hasAttribute("listIndent")&&(e.removeAttribute("listIndent",i),s=!0),i.hasAttribute("listType")&&(e.removeAttribute("listType",i),s=!0),i.hasAttribute("listStyle")&&(e.removeAttribute("listStyle",i),s=!0),i.hasAttribute("listReversed")&&(e.removeAttribute("listReversed",i),s=!0),i.hasAttribute("listStart")&&(e.removeAttribute("listStart",i),s=!0);for(const e of Array.from(t.createRangeIn(i)).filter((t=>t.item.is("element","listItem"))))r(e.previousPosition)}r(n.position.getShiftedBy(n.length))}else"remove"==n.type&&"listItem"==n.name?r(n.position):("attribute"==n.type&&"listIndent"==n.attributeKey||"attribute"==n.type&&"listType"==n.attributeKey)&&r(n.range.start);for(const t of n.values())o(t),l(t);return s;function r(t){const e=t.nodeBefore;if(e&&e.is("element","listItem")){let t=e;if(n.has(t))return;for(let e=t.previousSibling;e&&e.is("element","listItem");e=t.previousSibling)if(t=e,n.has(t))return;n.set(e,t)}else{const e=t.nodeAfter;e&&e.is("element","listItem")&&n.set(e,e)}}function o(t){let i=0,n=null;for(;t&&t.is("element","listItem");){const r=t.getAttribute("listIndent");if(r>i){let o;null===n?(n=r-i,o=i):(n>r&&(n=r),o=r-n),e.setAttribute("listIndent",o,t),s=!0}else n=null,i=t.getAttribute("listIndent")+1;t=t.nextSibling}}function l(t){let i=[],n=null;for(;t&&t.is("element","listItem");){const r=t.getAttribute("listIndent");if(n&&n.getAttribute("listIndent")>r&&(i=i.slice(0,r+1)),0!=r)if(i[r]){const n=i[r];t.getAttribute("listType")!=n&&(e.setAttribute("listType",n,t),s=!0)}else i[r]=t.getAttribute("listType");n=t,t=t.nextSibling}}}(t.model,e))),i.mapper.registerViewToModelLength("li",Qt),e.mapper.registerViewToModelLength("li",Qt),i.mapper.on("modelToViewPosition",Zt(i.view)),i.mapper.on("viewToModelPosition",(n=t.model,(t,e)=>{const i=e.viewPosition,s=i.parent,r=e.mapper;if("ul"==s.name||"ol"==s.name){if(i.isAtEnd){const t=r.toModelElement(i.nodeBefore),s=r.getModelLength(i.nodeBefore);e.modelPosition=n.createPositionBefore(t).getShiftedBy(s)}else{const t=r.toModelElement(i.nodeAfter);e.modelPosition=n.createPositionBefore(t)}t.stop()}else if("li"==s.name&&i.nodeBefore&&("ul"==i.nodeBefore.name||"ol"==i.nodeBefore.name)){const o=r.toModelElement(s);let l=1,a=i.nodeBefore;for(;a&&Yt(a);)l+=r.getModelLength(a),a=a.previousSibling;e.modelPosition=n.createPositionBefore(o).getShiftedBy(l),t.stop()}})),e.mapper.on("modelToViewPosition",Zt(i.view)),t.conversion.for("editingDowncast").add((e=>{e.on("insert",Ft,{priority:"high"}),e.on("insert:listItem",Ht(t.model)),e.on("attribute:listType:listItem",Ot,{priority:"high"}),e.on("attribute:listType:listItem",Dt,{priority:"low"}),e.on("attribute:listIndent:listItem",function(t){return(e,i,n)=>{if(!n.consumable.consume(i.item,"attribute:listIndent"))return;const s=n.mapper.toViewElement(i.item),r=n.writer;r.breakContainer(r.createPositionBefore(s)),r.breakContainer(r.createPositionAfter(s));const o=s.parent,l=o.previousSibling,a=r.createRangeOn(o);r.remove(a),l&&l.nextSibling&&tt(r,l,l.nextSibling),Gt(i.attributeOldValue+1,i.range.start,a.start,s,n,t),X(i.item,s,n,t);for(const t of i.item.getChildren())n.consumable.consume(t,"insert")}}(t.model)),e.on("remove:listItem",function(t){return(e,i,n)=>{const s=n.mapper.toViewPosition(i.position).getLastMatchingPosition((t=>!t.item.is("element","li"))).nodeAfter,r=n.writer;r.breakContainer(r.createPositionBefore(s)),r.breakContainer(r.createPositionAfter(s));const o=s.parent,l=o.previousSibling,a=r.createRangeOn(o),c=r.remove(a);l&&l.nextSibling&&tt(r,l,l.nextSibling),Gt(n.mapper.toModelElement(s).getAttribute("listIndent")+1,i.position,a.start,s,n,t);for(const t of r.createRangeIn(c).getItems())n.mapper.unbindViewElement(t);e.stop()}}(t.model)),e.on("remove",jt,{priority:"low"})})),t.conversion.for("dataDowncast").add((e=>{e.on("insert",Ft,{priority:"high"}),e.on("insert:listItem",Ht(t.model))})),t.conversion.for("upcast").add((t=>{t.on("element:ul",qt,{priority:"high"}),t.on("element:ol",qt,{priority:"high"}),t.on("element:li",Kt,{priority:"high"}),t.on("element:li",Ut)})),t.model.on("insertContent",$t,{priority:"high"}),t.commands.add("numberedList",new Bt(t,"numbered")),t.commands.add("bulletedList",new Bt(t,"bulleted")),t.commands.add("indentList",new Rt(t,"forward")),t.commands.add("outdentList",new Rt(t,"backward"));const s=i.view.document;this.listenTo(s,"enter",((t,e)=>{const i=this.editor.model.document,n=i.selection.getLastPosition().parent;i.selection.isCollapsed&&"listItem"==n.name&&n.isEmpty&&(this.editor.execute("outdentList"),e.preventDefault(),t.stop())}),{context:"li"}),this.listenTo(s,"delete",((t,e)=>{if("backward"!==e.direction)return;const i=this.editor.model.document.selection;if(!i.isCollapsed)return;const n=i.getFirstPosition();if(!n.isAtStart)return;const s=n.parent;if("listItem"!==s.name)return;s.previousSibling&&"listItem"===s.previousSibling.name||(this.editor.execute("outdentList"),e.preventDefault(),t.stop())}),{context:"li"}),this.listenTo(t.editing.view.document,"tab",((e,i)=>{const n=i.shiftKey?"outdentList":"indentList";this.editor.commands.get(n).isEnabled&&(t.execute(n),i.stopPropagation(),i.preventDefault(),e.stop())}),{context:"li"})}afterInit(){const t=this.editor.commands,e=t.get("indent"),i=t.get("outdent");e&&e.registerChildCommand(t.get("indentList")),i&&i.registerChildCommand(t.get("outdentList"))}}function Qt(t){let e=1;for(const i of t.getChildren())if("ul"==i.name||"ol"==i.name)for(const t of i.getChildren())e+=Qt(t);return e}class Xt extends t.Plugin{static get requires(){return[Jt,mt]}static get pluginName(){return"List"}}class te extends t.Command{constructor(t,e){super(t),this._defaultType=e}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(t={}){this._tryToConvertItemsToList(t);const e=this.editor.model,i=ot(e);i.length&&e.change((e=>{for(const n of i)e.setAttribute("listStyle",t.type||this._defaultType,n)}))}_getValue(){const t=this.editor.model.document.selection.getFirstPosition().parent;return t&&t.is("element","listItem")?t.getAttribute("listStyle"):null}_checkEnabled(){const t=this.editor,e=t.commands.get("numberedList"),i=t.commands.get("bulletedList");return e.isEnabled||i.isEnabled}_tryToConvertItemsToList(t){if(!t.type)return;const e=(i=t.type,lt.includes(i)?"bulleted":at.includes(i)?"numbered":null);var i;if(!e)return;const n=this.editor,s=e+"List";n.commands.get(s).value||n.execute(s)}}class ee extends t.Command{refresh(){const t=this._getValue();this.value=t,this.isEnabled=null!=t}execute(t={}){const e=this.editor.model,i=ot(e).filter((t=>"numbered"==t.getAttribute("listType")));e.change((e=>{for(const n of i)e.setAttribute("listReversed",!!t.reversed,n)}))}_getValue(){const t=this.editor.model.document.selection.getFirstPosition().parent;return t&&t.is("element","listItem")&&"numbered"==t.getAttribute("listType")?t.getAttribute("listReversed"):null}}class ie extends t.Command{refresh(){const t=this._getValue();this.value=t,this.isEnabled=null!=t}execute(t={}){const e=this.editor.model,i=ot(e).filter((t=>"numbered"==t.getAttribute("listType")));e.change((e=>{for(const n of i)e.setAttribute("listStart",t.startIndex||1,n)}))}_getValue(){const t=this.editor.model.document.selection.getFirstPosition().parent;return t&&t.is("element","listItem")&&"numbered"==t.getAttribute("listType")?t.getAttribute("listStart"):null}}const ne="default";class se extends t.Plugin{static get requires(){return[Jt]}static get pluginName(){return"ListPropertiesEditing"}constructor(t){super(t),t.config.define("list",{properties:{styles:!0,startIndex:!1,reversed:!1}})}init(){const t=this.editor,e=t.model,i=function(t){const e=[];t.styles&&e.push({attributeName:"listStyle",defaultValue:ne,addCommand(t){t.commands.add("listStyle",new te(t,ne))},appliesToListItem:()=>!0,setAttributeOnDowncast(t,e,i){e&&e!==ne?t.setStyle("list-style-type",e,i):t.removeStyle("list-style-type",i)},getAttributeOnUpcast:t=>t.getStyle("list-style-type")||ne});t.reversed&&e.push({attributeName:"listReversed",defaultValue:!1,addCommand(t){t.commands.add("listReversed",new ee(t))},appliesToListItem:t=>"numbered"==t.getAttribute("listType"),setAttributeOnDowncast(t,e,i){e?t.setAttribute("reversed","reversed",i):t.removeAttribute("reversed",i)},getAttributeOnUpcast:t=>t.hasAttribute("reversed")});t.startIndex&&e.push({attributeName:"listStart",defaultValue:1,addCommand(t){t.commands.add("listStart",new ie(t))},appliesToListItem:t=>"numbered"==t.getAttribute("listType"),setAttributeOnDowncast(t,e,i){1!=e?t.setAttribute("start",e,i):t.removeAttribute("start",i)},getAttributeOnUpcast:t=>t.getAttribute("start")||1});return e}(t.config.get("list.properties"));e.schema.extend("listItem",{allowAttributes:i.map((t=>t.attributeName))});for(const e of i)e.addCommand(t);var n;this.listenTo(t.commands.get("indentList"),"_executeCleanup",function(t,e){return(i,n)=>{const s=n[0],r=s.getAttribute("listIndent"),o=n.filter((t=>t.getAttribute("listIndent")===r));let l=null;s.previousSibling.getAttribute("listIndent")+1!==r&&(l=it(s.previousSibling,{sameIndent:!0,direction:"backward",listIndent:r})),t.model.change((t=>{for(const i of o)for(const n of e)if(n.appliesToListItem(i)){const e=null==l?n.defaultValue:l.getAttribute(n.attributeName);t.setAttribute(n.attributeName,e,i)}}))}}(t,i)),this.listenTo(t.commands.get("outdentList"),"_executeCleanup",function(t,e){return(i,n)=>{if(!(n=n.reverse().filter((t=>t.is("element","listItem")))).length)return;const s=n[0].getAttribute("listIndent"),r=n[0].getAttribute("listType");let o=n[0].previousSibling;if(o.is("element","listItem"))for(;o.getAttribute("listIndent")!==s;)o=o.previousSibling;else o=null;o||(o=n[n.length-1].nextSibling),o&&o.is("element","listItem")&&o.getAttribute("listType")===r&&t.model.change((t=>{const i=n.filter((t=>t.getAttribute("listIndent")===s));for(const n of i)for(const i of e)if(i.appliesToListItem(n)){const e=i.attributeName,s=o.getAttribute(e);t.setAttribute(e,s,n)}}))}}(t,i)),this.listenTo(t.commands.get("bulletedList"),"_executeCleanup",le(t)),this.listenTo(t.commands.get("numberedList"),"_executeCleanup",le(t)),e.document.registerPostFixer(function(t,e){return i=>{let n=!1;const s=ae(t.model.document.differ.getChanges()).filter((t=>"todo"!==t.getAttribute("listType")));if(!s.length)return n;let r=s[s.length-1].nextSibling;if((!r||!r.is("element","listItem"))&&(r=s[0].previousSibling,r)){const t=s[0].getAttribute("listIndent");for(;r.is("element","listItem")&&r.getAttribute("listIndent")!==t&&(r=r.previousSibling,r););}for(const t of e){const e=t.attributeName;for(const o of s)if(t.appliesToListItem(o))if(o.hasAttribute(e)){const s=o.previousSibling;oe(s,o,t.attributeName)&&(i.setAttribute(e,s.getAttribute(e),o),n=!0)}else re(r,o,t)?i.setAttribute(e,r.getAttribute(e),o):i.setAttribute(e,t.defaultValue,o),n=!0;else i.removeAttribute(e,o)}return n}}(t,i)),t.conversion.for("upcast").add((n=i,t=>{t.on("element:li",((t,e,i)=>{const s=e.viewItem.parent;if(!s)return;const r=e.modelRange.start.nodeAfter||e.modelRange.end.nodeBefore;for(const t of n)if(t.appliesToListItem(r)){const e=t.getAttributeOnUpcast(s);i.writer.setAttribute(t.attributeName,e,r)}}),{priority:"low"})})),t.conversion.for("downcast").add(function(t){return i=>{for(const n of t)i.on(`attribute:${n.attributeName}:listItem`,((t,i,s)=>{const r=s.writer,o=i.item,l=it(o.previousSibling,{sameIndent:!0,listIndent:o.getAttribute("listIndent"),direction:"backward"}),a=s.mapper.toViewElement(o);e(o,l)||r.breakContainer(r.createPositionBefore(a)),n.setAttributeOnDowncast(r,i.attributeNewValue,a.parent)}),{priority:"low"})};function e(t,e){return e&&t.getAttribute("listType")===e.getAttribute("listType")&&t.getAttribute("listIndent")===e.getAttribute("listIndent")&&t.getAttribute("listStyle")===e.getAttribute("listStyle")&&t.getAttribute("listReversed")===e.getAttribute("listReversed")&&t.getAttribute("listStart")===e.getAttribute("listStart")}}(i)),this._mergeListAttributesWhileMergingLists(i)}afterInit(){const t=this.editor;t.commands.get("todoList")&&t.model.document.registerPostFixer(function(t){return e=>{const i=ae(t.model.document.differ.getChanges()).filter((t=>"todo"===t.getAttribute("listType")&&(t.hasAttribute("listStyle")||t.hasAttribute("listReversed")||t.hasAttribute("listStart"))));if(!i.length)return!1;for(const t of i)e.removeAttribute("listStyle",t),e.removeAttribute("listReversed",t),e.removeAttribute("listStart",t);return!0}}(t))}_mergeListAttributesWhileMergingLists(t){const e=this.editor.model;let i;this.listenTo(e,"deleteContent",((t,[e])=>{const n=e.getFirstPosition(),s=e.getLastPosition();if(n.parent===s.parent)return;if(!n.parent.is("element","listItem"))return;const r=s.parent.nextSibling;if(!r||!r.is("element","listItem"))return;const o=it(n.parent,{sameIndent:!0,listIndent:r.getAttribute("listIndent")});o&&o.getAttribute("listType")===r.getAttribute("listType")&&(i=o)}),{priority:"high"}),this.listenTo(e,"deleteContent",(()=>{i&&(e.change((e=>{const n=it(i.nextSibling,{sameIndent:!0,listIndent:i.getAttribute("listIndent"),direction:"forward"});if(!n)return void(i=null);const s=[n,...rt(e.createPositionAt(n,0),"forward")];for(const n of s)for(const s of t)if(s.appliesToListItem(n)){const t=s.attributeName,r=i.getAttribute(t);e.setAttribute(t,r,n)}})),i=null)}),{priority:"low"})}}function re(t,e,i){if(!t)return!1;const n=t.getAttribute(i.attributeName);return!!n&&(n!=i.defaultValue&&t.getAttribute("listType")===e.getAttribute("listType"))}function oe(t,e,i){if(!t||!t.is("element","listItem"))return!1;if(e.getAttribute("listType")!==t.getAttribute("listType"))return!1;const n=t.getAttribute("listIndent");if(n<1||n!==e.getAttribute("listIndent"))return!1;const s=t.getAttribute(i);return!(!s||s===e.getAttribute(i))}function le(t){return(e,i)=>{i=i.filter((t=>t.is("element","listItem"))),t.model.change((t=>{for(const e of i)t.removeAttribute("listStyle",e)}))}}function ae(t){const e=[];for(const i of t){const t=ce(i);t&&t.is("element","listItem")&&e.push(t)}return e}function ce(t){return"attribute"===t.type?t.range.start.nodeAfter:"insert"===t.type?t.position.nodeAfter:null}class de extends t.Plugin{static get requires(){return[se,Et]}static get pluginName(){return"ListProperties"}}const ue="todoListChecked";class me extends t.Command{constructor(t){super(t),this._selectedElements=[],this.on("execute",(()=>{this.refresh()}),{priority:"highest"})}refresh(){this._selectedElements=this._getSelectedItems(),this.value=this._selectedElements.every((t=>!!t.getAttribute("todoListChecked"))),this.isEnabled=!!this._selectedElements.length}_getSelectedItems(){const t=this.editor.model,e=t.schema,i=t.document.selection.getFirstRange(),n=i.start.parent,s=[];e.checkAttribute(n,ue)&&s.push(n);for(const t of i.getItems())e.checkAttribute(t,ue)&&!s.includes(t)&&s.push(t);return s}execute(t={}){this.editor.model.change((e=>{for(const i of this._selectedElements){(void 0===t.forceValue?!this.value:t.forceValue)?e.setAttribute(ue,!0,i):e.removeAttribute(ue,i)}}))}}function he(t,e,i){const n=e.modelCursor,s=n.parent,r=e.viewItem;if("checkbox"!=r.getAttribute("type")||"listItem"!=s.name||!n.isAtStart)return;if(!i.consumable.consume(r,{name:!0}))return;const o=i.writer;o.setAttribute("listType","todo",s),e.viewItem.hasAttribute("checked")&&o.setAttribute("todoListChecked",!0,s),e.modelRange=o.createRange(n)}function pe(t){return(e,i)=>{const n=i.modelPosition,s=n.parent;if(!s.is("element","listItem")||"todo"!=s.getAttribute("listType"))return;const r=ge(i.mapper.toViewElement(s),t);r&&(i.viewPosition=i.mapper.findPositionIn(r,n.offset))}}function fe(t,e,i,n){return e.createUIElement("label",{class:"todo-list__label",contenteditable:!1},(function(e){const s=(0,r.createElement)(document,"input",{type:"checkbox"});i&&s.setAttribute("checked","checked"),s.addEventListener("change",(()=>n(t)));const o=this.toDomElement(e);return o.appendChild(s),o}))}function ge(t,e){const i=e.createRangeIn(t);for(const t of i)if(t.item.is("containerElement","span")&&t.item.hasClass("todo-list__label__description"))return t.item}const be=(0,r.parseKeystroke)("Ctrl+Enter");class ve extends t.Plugin{static get pluginName(){return"TodoListEditing"}static get requires(){return[Jt]}init(){const t=this.editor,{editing:e,data:i,model:n}=t;n.schema.extend("listItem",{allowAttributes:["todoListChecked"]}),n.schema.addAttributeCheck(((t,e)=>{const i=t.last;if("todoListChecked"==e&&"listItem"==i.name&&"todo"!=i.getAttribute("listType"))return!1})),t.commands.add("todoList",new Bt(t,"todo"));const s=new me(t);var o,l;t.commands.add("checkTodoList",s),t.commands.add("todoListCheck",s),i.downcastDispatcher.on("insert:listItem",function(t){return(e,i,n)=>{const s=n.consumable;if(!s.test(i.item,"insert")||!s.test(i.item,"attribute:listType")||!s.test(i.item,"attribute:listIndent"))return;if("todo"!=i.item.getAttribute("listType"))return;const r=i.item;s.consume(r,"insert"),s.consume(r,"attribute:listType"),s.consume(r,"attribute:listIndent"),s.consume(r,"attribute:todoListChecked");const o=n.writer,l=Q(r,n);o.addClass("todo-list",l.parent);const a=o.createContainerElement("label",{class:"todo-list__label"}),c=o.createEmptyElement("input",{type:"checkbox",disabled:"disabled"}),d=o.createContainerElement("span",{class:"todo-list__label__description"});r.getAttribute("todoListChecked")&&o.setAttribute("checked","checked",c),o.insert(o.createPositionAt(l,0),a),o.insert(o.createPositionAt(a,0),c),o.insert(o.createPositionAfter(c),d),X(r,l,n,t)}}(n),{priority:"high"}),i.upcastDispatcher.on("element:input",he,{priority:"high"}),e.downcastDispatcher.on("insert:listItem",function(t,e){return(i,n,s)=>{const r=s.consumable;if(!r.test(n.item,"insert")||!r.test(n.item,"attribute:listType")||!r.test(n.item,"attribute:listIndent"))return;if("todo"!=n.item.getAttribute("listType"))return;const o=n.item;r.consume(o,"insert"),r.consume(o,"attribute:listType"),r.consume(o,"attribute:listIndent"),r.consume(o,"attribute:todoListChecked");const l=s.writer,a=Q(o,s),c=!!o.getAttribute("todoListChecked"),d=fe(o,l,c,e),u=l.createContainerElement("span",{class:"todo-list__label__description"});l.addClass("todo-list",a.parent),l.insert(l.createPositionAt(a,0),d),l.insert(l.createPositionAfter(d),u),X(o,a,s,t)}}(n,(t=>this._handleCheckmarkChange(t))),{priority:"high"}),e.downcastDispatcher.on("attribute:listType:listItem",(o=t=>this._handleCheckmarkChange(t),l=e.view,(t,e,i)=>{if(!i.consumable.consume(e.item,t.name))return;const n=i.mapper.toViewElement(e.item),s=i.writer,r=function(t,e){const i=e.createRangeIn(t);for(const t of i)if(t.item.is("uiElement","label"))return t.item}(n,l);if("todo"==e.attributeNewValue){const t=!!e.item.getAttribute("todoListChecked"),i=fe(e.item,s,t,o),r=s.createContainerElement("span",{class:"todo-list__label__description"}),l=s.createRangeIn(n),a=st(n),c=et(l.start),d=a?s.createPositionBefore(a):l.end,u=s.createRange(c,d);s.addClass("todo-list",n.parent),s.move(u,s.createPositionAt(r,0)),s.insert(s.createPositionAt(n,0),i),s.insert(s.createPositionAfter(i),r)}else if("todo"==e.attributeOldValue){const t=ge(n,l);s.removeClass("todo-list",n.parent),s.remove(r),s.move(s.createRangeIn(t),s.createPositionBefore(t)),s.remove(t)}})),e.downcastDispatcher.on("attribute:todoListChecked:listItem",function(t){return(e,i,n)=>{if("todo"!=i.item.getAttribute("listType"))return;if(!n.consumable.consume(i.item,"attribute:todoListChecked"))return;const{mapper:s,writer:r}=n,o=!!i.item.getAttribute("todoListChecked"),l=s.toViewElement(i.item).getChild(0),a=fe(i.item,r,o,t);r.insert(r.createPositionAfter(l),a),r.remove(l)}}((t=>this._handleCheckmarkChange(t)))),e.mapper.on("modelToViewPosition",pe(e.view)),i.mapper.on("modelToViewPosition",pe(e.view)),this.listenTo(e.view.document,"arrowKey",function(t,e){return(i,n)=>{if("left"!=(0,r.getLocalizedArrowKeyCodeDirection)(n.keyCode,e.contentLanguageDirection))return;const s=t.schema,o=t.document.selection;if(!o.isCollapsed)return;const l=o.getFirstPosition(),a=l.parent;if("listItem"===a.name&&"todo"==a.getAttribute("listType")&&l.isAtStart){const e=s.getNearestSelectionRange(t.createPositionBefore(a),"backward");e&&t.change((t=>t.setSelection(e))),n.preventDefault(),n.stopPropagation(),i.stop()}}}(n,t.locale),{context:"li"}),this.listenTo(e.view.document,"keydown",((e,i)=>{(0,r.getCode)(i)===be&&(t.execute("checkTodoList"),e.stop())}),{priority:"high"});const a=new Set;this.listenTo(n,"applyOperation",((t,e)=>{const i=e[0];if("rename"==i.type&&"listItem"==i.oldName){const t=i.position.nodeAfter;t.hasAttribute("todoListChecked")&&a.add(t)}else if("changeAttribute"==i.type&&"listType"==i.key&&"todo"===i.oldValue)for(const t of i.range.getItems())t.hasAttribute("todoListChecked")&&"todo"!==t.getAttribute("listType")&&a.add(t)})),n.document.registerPostFixer((t=>{let e=!1;for(const i of a)t.removeAttribute("todoListChecked",i),e=!0;return a.clear(),e}))}_handleCheckmarkChange(t){const e=this.editor,i=e.model,n=Array.from(i.document.selection.getRanges());i.change((i=>{i.setSelection(t,"end"),e.execute("checkTodoList"),i.setSelection(n)}))}}class we extends t.Plugin{static get pluginName(){return"TodoListUI"}init(){const t=this.editor.t;nt(this.editor,"todoList",t("To-do List"),'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="m2.315 14.705 2.224-2.24a.689.689 0 0 1 .963 0 .664.664 0 0 1 0 .949L2.865 16.07a.682.682 0 0 1-.112.089.647.647 0 0 1-.852-.051L.688 14.886a.635.635 0 0 1 0-.903.647.647 0 0 1 .91 0l.717.722zm5.185.045a.75.75 0 0 1 .75-.75h9.5a.75.75 0 1 1 0 1.5h-9.5a.75.75 0 0 1-.75-.75zM2.329 5.745l2.21-2.226a.689.689 0 0 1 .963 0 .664.664 0 0 1 0 .95L2.865 7.125a.685.685 0 0 1-.496.196.644.644 0 0 1-.468-.187L.688 5.912a.635.635 0 0 1 0-.903.647.647 0 0 1 .91 0l.73.736zM7.5 5.75A.75.75 0 0 1 8.25 5h9.5a.75.75 0 1 1 0 1.5h-9.5a.75.75 0 0 1-.75-.75z"/></svg>')}}var ye=i(250),Ae={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};K()(ye.Z,Ae);ye.Z.locals;class Ie extends t.Plugin{static get requires(){return[ve,we]}static get pluginName(){return"TodoList"}}})(),(window.CKEditor5=window.CKEditor5||{}).list=n})();
\ No newline at end of file
diff --git a/web/core/assets/vendor/underscore/underscore-min.js b/web/core/assets/vendor/underscore/underscore-min.js
index a452023a76..3ef30a5aa1 100644
--- a/web/core/assets/vendor/underscore/underscore-min.js
+++ b/web/core/assets/vendor/underscore/underscore-min.js
@@ -1,6 +1,6 @@
 !function(n,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define("underscore",r):(n="undefined"!=typeof globalThis?globalThis:n||self,function(){var t=n._,e=n._=r();e.noConflict=function(){return n._=t,e}}())}(this,(function(){
-//     Underscore.js 1.13.2
+//     Underscore.js 1.13.3
 //     https://underscorejs.org
-//     (c) 2009-2021 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors
+//     (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors
 //     Underscore may be freely distributed under the MIT license.
-var n="1.13.2",r="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||Function("return this")()||{},t=Array.prototype,e=Object.prototype,u="undefined"!=typeof Symbol?Symbol.prototype:null,o=t.push,i=t.slice,a=e.toString,f=e.hasOwnProperty,c="undefined"!=typeof ArrayBuffer,l="undefined"!=typeof DataView,s=Array.isArray,p=Object.keys,v=Object.create,h=c&&ArrayBuffer.isView,y=isNaN,d=isFinite,g=!{toString:null}.propertyIsEnumerable("toString"),b=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],m=Math.pow(2,53)-1;function j(n,r){return r=null==r?n.length-1:+r,function(){for(var t=Math.max(arguments.length-r,0),e=Array(t),u=0;u<t;u++)e[u]=arguments[u+r];switch(r){case 0:return n.call(this,e);case 1:return n.call(this,arguments[0],e);case 2:return n.call(this,arguments[0],arguments[1],e)}var o=Array(r+1);for(u=0;u<r;u++)o[u]=arguments[u];return o[r]=e,n.apply(this,o)}}function _(n){var r=typeof n;return"function"===r||"object"===r&&!!n}function w(n){return void 0===n}function A(n){return!0===n||!1===n||"[object Boolean]"===a.call(n)}function x(n){var r="[object "+n+"]";return function(n){return a.call(n)===r}}var S=x("String"),O=x("Number"),M=x("Date"),E=x("RegExp"),B=x("Error"),N=x("Symbol"),I=x("ArrayBuffer"),T=x("Function"),k=r.document&&r.document.childNodes;"function"!=typeof/./&&"object"!=typeof Int8Array&&"function"!=typeof k&&(T=function(n){return"function"==typeof n||!1});var D=T,R=x("Object"),F=l&&R(new DataView(new ArrayBuffer(8))),V="undefined"!=typeof Map&&R(new Map),P=x("DataView");var q=F?function(n){return null!=n&&D(n.getInt8)&&I(n.buffer)}:P,U=s||x("Array");function W(n,r){return null!=n&&f.call(n,r)}var z=x("Arguments");!function(){z(arguments)||(z=function(n){return W(n,"callee")})}();var L=z;function $(n){return O(n)&&y(n)}function C(n){return function(){return n}}function K(n){return function(r){var t=n(r);return"number"==typeof t&&t>=0&&t<=m}}function J(n){return function(r){return null==r?void 0:r[n]}}var G=J("byteLength"),H=K(G),Q=/\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;var X=c?function(n){return h?h(n)&&!q(n):H(n)&&Q.test(a.call(n))}:C(!1),Y=J("length");function Z(n,r){r=function(n){for(var r={},t=n.length,e=0;e<t;++e)r[n[e]]=!0;return{contains:function(n){return!0===r[n]},push:function(t){return r[t]=!0,n.push(t)}}}(r);var t=b.length,u=n.constructor,o=D(u)&&u.prototype||e,i="constructor";for(W(n,i)&&!r.contains(i)&&r.push(i);t--;)(i=b[t])in n&&n[i]!==o[i]&&!r.contains(i)&&r.push(i)}function nn(n){if(!_(n))return[];if(p)return p(n);var r=[];for(var t in n)W(n,t)&&r.push(t);return g&&Z(n,r),r}function rn(n,r){var t=nn(r),e=t.length;if(null==n)return!e;for(var u=Object(n),o=0;o<e;o++){var i=t[o];if(r[i]!==u[i]||!(i in u))return!1}return!0}function tn(n){return n instanceof tn?n:this instanceof tn?void(this._wrapped=n):new tn(n)}function en(n){return new Uint8Array(n.buffer||n,n.byteOffset||0,G(n))}tn.VERSION=n,tn.prototype.value=function(){return this._wrapped},tn.prototype.valueOf=tn.prototype.toJSON=tn.prototype.value,tn.prototype.toString=function(){return String(this._wrapped)};var un="[object DataView]";function on(n,r,t,e){if(n===r)return 0!==n||1/n==1/r;if(null==n||null==r)return!1;if(n!=n)return r!=r;var o=typeof n;return("function"===o||"object"===o||"object"==typeof r)&&function n(r,t,e,o){r instanceof tn&&(r=r._wrapped);t instanceof tn&&(t=t._wrapped);var i=a.call(r);if(i!==a.call(t))return!1;if(F&&"[object Object]"==i&&q(r)){if(!q(t))return!1;i=un}switch(i){case"[object RegExp]":case"[object String]":return""+r==""+t;case"[object Number]":return+r!=+r?+t!=+t:0==+r?1/+r==1/t:+r==+t;case"[object Date]":case"[object Boolean]":return+r==+t;case"[object Symbol]":return u.valueOf.call(r)===u.valueOf.call(t);case"[object ArrayBuffer]":case un:return n(en(r),en(t),e,o)}var f="[object Array]"===i;if(!f&&X(r)){if(G(r)!==G(t))return!1;if(r.buffer===t.buffer&&r.byteOffset===t.byteOffset)return!0;f=!0}if(!f){if("object"!=typeof r||"object"!=typeof t)return!1;var c=r.constructor,l=t.constructor;if(c!==l&&!(D(c)&&c instanceof c&&D(l)&&l instanceof l)&&"constructor"in r&&"constructor"in t)return!1}o=o||[];var s=(e=e||[]).length;for(;s--;)if(e[s]===r)return o[s]===t;if(e.push(r),o.push(t),f){if((s=r.length)!==t.length)return!1;for(;s--;)if(!on(r[s],t[s],e,o))return!1}else{var p,v=nn(r);if(s=v.length,nn(t).length!==s)return!1;for(;s--;)if(p=v[s],!W(t,p)||!on(r[p],t[p],e,o))return!1}return e.pop(),o.pop(),!0}(n,r,t,e)}function an(n){if(!_(n))return[];var r=[];for(var t in n)r.push(t);return g&&Z(n,r),r}function fn(n){var r=Y(n);return function(t){if(null==t)return!1;var e=an(t);if(Y(e))return!1;for(var u=0;u<r;u++)if(!D(t[n[u]]))return!1;return n!==hn||!D(t[cn])}}var cn="forEach",ln="has",sn=["clear","delete"],pn=["get",ln,"set"],vn=sn.concat(cn,pn),hn=sn.concat(pn),yn=["add"].concat(sn,cn,ln),dn=V?fn(vn):x("Map"),gn=V?fn(hn):x("WeakMap"),bn=V?fn(yn):x("Set"),mn=x("WeakSet");function jn(n){for(var r=nn(n),t=r.length,e=Array(t),u=0;u<t;u++)e[u]=n[r[u]];return e}function _n(n){for(var r={},t=nn(n),e=0,u=t.length;e<u;e++)r[n[t[e]]]=t[e];return r}function wn(n){var r=[];for(var t in n)D(n[t])&&r.push(t);return r.sort()}function An(n,r){return function(t){var e=arguments.length;if(r&&(t=Object(t)),e<2||null==t)return t;for(var u=1;u<e;u++)for(var o=arguments[u],i=n(o),a=i.length,f=0;f<a;f++){var c=i[f];r&&void 0!==t[c]||(t[c]=o[c])}return t}}var xn=An(an),Sn=An(nn),On=An(an,!0);function Mn(n){if(!_(n))return{};if(v)return v(n);var r=function(){};r.prototype=n;var t=new r;return r.prototype=null,t}function En(n){return U(n)?n:[n]}function Bn(n){return tn.toPath(n)}function Nn(n,r){for(var t=r.length,e=0;e<t;e++){if(null==n)return;n=n[r[e]]}return t?n:void 0}function In(n,r,t){var e=Nn(n,Bn(r));return w(e)?t:e}function Tn(n){return n}function kn(n){return n=Sn({},n),function(r){return rn(r,n)}}function Dn(n){return n=Bn(n),function(r){return Nn(r,n)}}function Rn(n,r,t){if(void 0===r)return n;switch(null==t?3:t){case 1:return function(t){return n.call(r,t)};case 3:return function(t,e,u){return n.call(r,t,e,u)};case 4:return function(t,e,u,o){return n.call(r,t,e,u,o)}}return function(){return n.apply(r,arguments)}}function Fn(n,r,t){return null==n?Tn:D(n)?Rn(n,r,t):_(n)&&!U(n)?kn(n):Dn(n)}function Vn(n,r){return Fn(n,r,1/0)}function Pn(n,r,t){return tn.iteratee!==Vn?tn.iteratee(n,r):Fn(n,r,t)}function qn(){}function Un(n,r){return null==r&&(r=n,n=0),n+Math.floor(Math.random()*(r-n+1))}tn.toPath=En,tn.iteratee=Vn;var Wn=Date.now||function(){return(new Date).getTime()};function zn(n){var r=function(r){return n[r]},t="(?:"+nn(n).join("|")+")",e=RegExp(t),u=RegExp(t,"g");return function(n){return n=null==n?"":""+n,e.test(n)?n.replace(u,r):n}}var Ln={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},$n=zn(Ln),Cn=zn(_n(Ln)),Kn=tn.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g},Jn=/(.)^/,Gn={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},Hn=/\\|'|\r|\n|\u2028|\u2029/g;function Qn(n){return"\\"+Gn[n]}var Xn=/^\s*(\w|\$)+\s*$/;var Yn=0;function Zn(n,r,t,e,u){if(!(e instanceof r))return n.apply(t,u);var o=Mn(n.prototype),i=n.apply(o,u);return _(i)?i:o}var nr=j((function(n,r){var t=nr.placeholder,e=function(){for(var u=0,o=r.length,i=Array(o),a=0;a<o;a++)i[a]=r[a]===t?arguments[u++]:r[a];for(;u<arguments.length;)i.push(arguments[u++]);return Zn(n,e,this,this,i)};return e}));nr.placeholder=tn;var rr=j((function(n,r,t){if(!D(n))throw new TypeError("Bind must be called on a function");var e=j((function(u){return Zn(n,e,r,this,t.concat(u))}));return e})),tr=K(Y);function er(n,r,t,e){if(e=e||[],r||0===r){if(r<=0)return e.concat(n)}else r=1/0;for(var u=e.length,o=0,i=Y(n);o<i;o++){var a=n[o];if(tr(a)&&(U(a)||L(a)))if(r>1)er(a,r-1,t,e),u=e.length;else for(var f=0,c=a.length;f<c;)e[u++]=a[f++];else t||(e[u++]=a)}return e}var ur=j((function(n,r){var t=(r=er(r,!1,!1)).length;if(t<1)throw new Error("bindAll must be passed function names");for(;t--;){var e=r[t];n[e]=rr(n[e],n)}return n}));var or=j((function(n,r,t){return setTimeout((function(){return n.apply(null,t)}),r)})),ir=nr(or,tn,1);function ar(n){return function(){return!n.apply(this,arguments)}}function fr(n,r){var t;return function(){return--n>0&&(t=r.apply(this,arguments)),n<=1&&(r=null),t}}var cr=nr(fr,2);function lr(n,r,t){r=Pn(r,t);for(var e,u=nn(n),o=0,i=u.length;o<i;o++)if(r(n[e=u[o]],e,n))return e}function sr(n){return function(r,t,e){t=Pn(t,e);for(var u=Y(r),o=n>0?0:u-1;o>=0&&o<u;o+=n)if(t(r[o],o,r))return o;return-1}}var pr=sr(1),vr=sr(-1);function hr(n,r,t,e){for(var u=(t=Pn(t,e,1))(r),o=0,i=Y(n);o<i;){var a=Math.floor((o+i)/2);t(n[a])<u?o=a+1:i=a}return o}function yr(n,r,t){return function(e,u,o){var a=0,f=Y(e);if("number"==typeof o)n>0?a=o>=0?o:Math.max(o+f,a):f=o>=0?Math.min(o+1,f):o+f+1;else if(t&&o&&f)return e[o=t(e,u)]===u?o:-1;if(u!=u)return(o=r(i.call(e,a,f),$))>=0?o+a:-1;for(o=n>0?a:f-1;o>=0&&o<f;o+=n)if(e[o]===u)return o;return-1}}var dr=yr(1,pr,hr),gr=yr(-1,vr);function br(n,r,t){var e=(tr(n)?pr:lr)(n,r,t);if(void 0!==e&&-1!==e)return n[e]}function mr(n,r,t){var e,u;if(r=Rn(r,t),tr(n))for(e=0,u=n.length;e<u;e++)r(n[e],e,n);else{var o=nn(n);for(e=0,u=o.length;e<u;e++)r(n[o[e]],o[e],n)}return n}function jr(n,r,t){r=Pn(r,t);for(var e=!tr(n)&&nn(n),u=(e||n).length,o=Array(u),i=0;i<u;i++){var a=e?e[i]:i;o[i]=r(n[a],a,n)}return o}function _r(n){var r=function(r,t,e,u){var o=!tr(r)&&nn(r),i=(o||r).length,a=n>0?0:i-1;for(u||(e=r[o?o[a]:a],a+=n);a>=0&&a<i;a+=n){var f=o?o[a]:a;e=t(e,r[f],f,r)}return e};return function(n,t,e,u){var o=arguments.length>=3;return r(n,Rn(t,u,4),e,o)}}var wr=_r(1),Ar=_r(-1);function xr(n,r,t){var e=[];return r=Pn(r,t),mr(n,(function(n,t,u){r(n,t,u)&&e.push(n)})),e}function Sr(n,r,t){r=Pn(r,t);for(var e=!tr(n)&&nn(n),u=(e||n).length,o=0;o<u;o++){var i=e?e[o]:o;if(!r(n[i],i,n))return!1}return!0}function Or(n,r,t){r=Pn(r,t);for(var e=!tr(n)&&nn(n),u=(e||n).length,o=0;o<u;o++){var i=e?e[o]:o;if(r(n[i],i,n))return!0}return!1}function Mr(n,r,t,e){return tr(n)||(n=jn(n)),("number"!=typeof t||e)&&(t=0),dr(n,r,t)>=0}var Er=j((function(n,r,t){var e,u;return D(r)?u=r:(r=Bn(r),e=r.slice(0,-1),r=r[r.length-1]),jr(n,(function(n){var o=u;if(!o){if(e&&e.length&&(n=Nn(n,e)),null==n)return;o=n[r]}return null==o?o:o.apply(n,t)}))}));function Br(n,r){return jr(n,Dn(r))}function Nr(n,r,t){var e,u,o=-1/0,i=-1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=tr(n)?n:jn(n)).length;a<f;a++)null!=(e=n[a])&&e>o&&(o=e);else r=Pn(r,t),mr(n,(function(n,t,e){((u=r(n,t,e))>i||u===-1/0&&o===-1/0)&&(o=n,i=u)}));return o}var Ir=/[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;function Tr(n){return n?U(n)?i.call(n):S(n)?n.match(Ir):tr(n)?jr(n,Tn):jn(n):[]}function kr(n,r,t){if(null==r||t)return tr(n)||(n=jn(n)),n[Un(n.length-1)];var e=Tr(n),u=Y(e);r=Math.max(Math.min(r,u),0);for(var o=u-1,i=0;i<r;i++){var a=Un(i,o),f=e[i];e[i]=e[a],e[a]=f}return e.slice(0,r)}function Dr(n,r){return function(t,e,u){var o=r?[[],[]]:{};return e=Pn(e,u),mr(t,(function(r,u){var i=e(r,u,t);n(o,r,i)})),o}}var Rr=Dr((function(n,r,t){W(n,t)?n[t].push(r):n[t]=[r]})),Fr=Dr((function(n,r,t){n[t]=r})),Vr=Dr((function(n,r,t){W(n,t)?n[t]++:n[t]=1})),Pr=Dr((function(n,r,t){n[t?0:1].push(r)}),!0);function qr(n,r,t){return r in t}var Ur=j((function(n,r){var t={},e=r[0];if(null==n)return t;D(e)?(r.length>1&&(e=Rn(e,r[1])),r=an(n)):(e=qr,r=er(r,!1,!1),n=Object(n));for(var u=0,o=r.length;u<o;u++){var i=r[u],a=n[i];e(a,i,n)&&(t[i]=a)}return t})),Wr=j((function(n,r){var t,e=r[0];return D(e)?(e=ar(e),r.length>1&&(t=r[1])):(r=jr(er(r,!1,!1),String),e=function(n,t){return!Mr(r,t)}),Ur(n,e,t)}));function zr(n,r,t){return i.call(n,0,Math.max(0,n.length-(null==r||t?1:r)))}function Lr(n,r,t){return null==n||n.length<1?null==r||t?void 0:[]:null==r||t?n[0]:zr(n,n.length-r)}function $r(n,r,t){return i.call(n,null==r||t?1:r)}var Cr=j((function(n,r){return r=er(r,!0,!0),xr(n,(function(n){return!Mr(r,n)}))})),Kr=j((function(n,r){return Cr(n,r)}));function Jr(n,r,t,e){A(r)||(e=t,t=r,r=!1),null!=t&&(t=Pn(t,e));for(var u=[],o=[],i=0,a=Y(n);i<a;i++){var f=n[i],c=t?t(f,i,n):f;r&&!t?(i&&o===c||u.push(f),o=c):t?Mr(o,c)||(o.push(c),u.push(f)):Mr(u,f)||u.push(f)}return u}var Gr=j((function(n){return Jr(er(n,!0,!0))}));function Hr(n){for(var r=n&&Nr(n,Y).length||0,t=Array(r),e=0;e<r;e++)t[e]=Br(n,e);return t}var Qr=j(Hr);function Xr(n,r){return n._chain?tn(r).chain():r}function Yr(n){return mr(wn(n),(function(r){var t=tn[r]=n[r];tn.prototype[r]=function(){var n=[this._wrapped];return o.apply(n,arguments),Xr(this,t.apply(tn,n))}})),tn}mr(["pop","push","reverse","shift","sort","splice","unshift"],(function(n){var r=t[n];tn.prototype[n]=function(){var t=this._wrapped;return null!=t&&(r.apply(t,arguments),"shift"!==n&&"splice"!==n||0!==t.length||delete t[0]),Xr(this,t)}})),mr(["concat","join","slice"],(function(n){var r=t[n];tn.prototype[n]=function(){var n=this._wrapped;return null!=n&&(n=r.apply(n,arguments)),Xr(this,n)}}));var Zr=Yr({__proto__:null,VERSION:n,restArguments:j,isObject:_,isNull:function(n){return null===n},isUndefined:w,isBoolean:A,isElement:function(n){return!(!n||1!==n.nodeType)},isString:S,isNumber:O,isDate:M,isRegExp:E,isError:B,isSymbol:N,isArrayBuffer:I,isDataView:q,isArray:U,isFunction:D,isArguments:L,isFinite:function(n){return!N(n)&&d(n)&&!isNaN(parseFloat(n))},isNaN:$,isTypedArray:X,isEmpty:function(n){if(null==n)return!0;var r=Y(n);return"number"==typeof r&&(U(n)||S(n)||L(n))?0===r:0===Y(nn(n))},isMatch:rn,isEqual:function(n,r){return on(n,r)},isMap:dn,isWeakMap:gn,isSet:bn,isWeakSet:mn,keys:nn,allKeys:an,values:jn,pairs:function(n){for(var r=nn(n),t=r.length,e=Array(t),u=0;u<t;u++)e[u]=[r[u],n[r[u]]];return e},invert:_n,functions:wn,methods:wn,extend:xn,extendOwn:Sn,assign:Sn,defaults:On,create:function(n,r){var t=Mn(n);return r&&Sn(t,r),t},clone:function(n){return _(n)?U(n)?n.slice():xn({},n):n},tap:function(n,r){return r(n),n},get:In,has:function(n,r){for(var t=(r=Bn(r)).length,e=0;e<t;e++){var u=r[e];if(!W(n,u))return!1;n=n[u]}return!!t},mapObject:function(n,r,t){r=Pn(r,t);for(var e=nn(n),u=e.length,o={},i=0;i<u;i++){var a=e[i];o[a]=r(n[a],a,n)}return o},identity:Tn,constant:C,noop:qn,toPath:En,property:Dn,propertyOf:function(n){return null==n?qn:function(r){return In(n,r)}},matcher:kn,matches:kn,times:function(n,r,t){var e=Array(Math.max(0,n));r=Rn(r,t,1);for(var u=0;u<n;u++)e[u]=r(u);return e},random:Un,now:Wn,escape:$n,unescape:Cn,templateSettings:Kn,template:function(n,r,t){!r&&t&&(r=t),r=On({},r,tn.templateSettings);var e=RegExp([(r.escape||Jn).source,(r.interpolate||Jn).source,(r.evaluate||Jn).source].join("|")+"|$","g"),u=0,o="__p+='";n.replace(e,(function(r,t,e,i,a){return o+=n.slice(u,a).replace(Hn,Qn),u=a+r.length,t?o+="'+\n((__t=("+t+"))==null?'':_.escape(__t))+\n'":e?o+="'+\n((__t=("+e+"))==null?'':__t)+\n'":i&&(o+="';\n"+i+"\n__p+='"),r})),o+="';\n";var i,a=r.variable;if(a){if(!Xn.test(a))throw new Error("variable is not a bare identifier: "+a)}else o="with(obj||{}){\n"+o+"}\n",a="obj";o="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+o+"return __p;\n";try{i=new Function(a,"_",o)}catch(n){throw n.source=o,n}var f=function(n){return i.call(this,n,tn)};return f.source="function("+a+"){\n"+o+"}",f},result:function(n,r,t){var e=(r=Bn(r)).length;if(!e)return D(t)?t.call(n):t;for(var u=0;u<e;u++){var o=null==n?void 0:n[r[u]];void 0===o&&(o=t,u=e),n=D(o)?o.call(n):o}return n},uniqueId:function(n){var r=++Yn+"";return n?n+r:r},chain:function(n){var r=tn(n);return r._chain=!0,r},iteratee:Vn,partial:nr,bind:rr,bindAll:ur,memoize:function(n,r){var t=function(e){var u=t.cache,o=""+(r?r.apply(this,arguments):e);return W(u,o)||(u[o]=n.apply(this,arguments)),u[o]};return t.cache={},t},delay:or,defer:ir,throttle:function(n,r,t){var e,u,o,i,a=0;t||(t={});var f=function(){a=!1===t.leading?0:Wn(),e=null,i=n.apply(u,o),e||(u=o=null)},c=function(){var c=Wn();a||!1!==t.leading||(a=c);var l=r-(c-a);return u=this,o=arguments,l<=0||l>r?(e&&(clearTimeout(e),e=null),a=c,i=n.apply(u,o),e||(u=o=null)):e||!1===t.trailing||(e=setTimeout(f,l)),i};return c.cancel=function(){clearTimeout(e),a=0,e=u=o=null},c},debounce:function(n,r,t){var e,u,o,i,a,f=function(){var c=Wn()-u;r>c?e=setTimeout(f,r-c):(e=null,t||(i=n.apply(a,o)),e||(o=a=null))},c=j((function(c){return a=this,o=c,u=Wn(),e||(e=setTimeout(f,r),t&&(i=n.apply(a,o))),i}));return c.cancel=function(){clearTimeout(e),e=o=a=null},c},wrap:function(n,r){return nr(r,n)},negate:ar,compose:function(){var n=arguments,r=n.length-1;return function(){for(var t=r,e=n[r].apply(this,arguments);t--;)e=n[t].call(this,e);return e}},after:function(n,r){return function(){if(--n<1)return r.apply(this,arguments)}},before:fr,once:cr,findKey:lr,findIndex:pr,findLastIndex:vr,sortedIndex:hr,indexOf:dr,lastIndexOf:gr,find:br,detect:br,findWhere:function(n,r){return br(n,kn(r))},each:mr,forEach:mr,map:jr,collect:jr,reduce:wr,foldl:wr,inject:wr,reduceRight:Ar,foldr:Ar,filter:xr,select:xr,reject:function(n,r,t){return xr(n,ar(Pn(r)),t)},every:Sr,all:Sr,some:Or,any:Or,contains:Mr,includes:Mr,include:Mr,invoke:Er,pluck:Br,where:function(n,r){return xr(n,kn(r))},max:Nr,min:function(n,r,t){var e,u,o=1/0,i=1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=tr(n)?n:jn(n)).length;a<f;a++)null!=(e=n[a])&&e<o&&(o=e);else r=Pn(r,t),mr(n,(function(n,t,e){((u=r(n,t,e))<i||u===1/0&&o===1/0)&&(o=n,i=u)}));return o},shuffle:function(n){return kr(n,1/0)},sample:kr,sortBy:function(n,r,t){var e=0;return r=Pn(r,t),Br(jr(n,(function(n,t,u){return{value:n,index:e++,criteria:r(n,t,u)}})).sort((function(n,r){var t=n.criteria,e=r.criteria;if(t!==e){if(t>e||void 0===t)return 1;if(t<e||void 0===e)return-1}return n.index-r.index})),"value")},groupBy:Rr,indexBy:Fr,countBy:Vr,partition:Pr,toArray:Tr,size:function(n){return null==n?0:tr(n)?n.length:nn(n).length},pick:Ur,omit:Wr,first:Lr,head:Lr,take:Lr,initial:zr,last:function(n,r,t){return null==n||n.length<1?null==r||t?void 0:[]:null==r||t?n[n.length-1]:$r(n,Math.max(0,n.length-r))},rest:$r,tail:$r,drop:$r,compact:function(n){return xr(n,Boolean)},flatten:function(n,r){return er(n,r,!1)},without:Kr,uniq:Jr,unique:Jr,union:Gr,intersection:function(n){for(var r=[],t=arguments.length,e=0,u=Y(n);e<u;e++){var o=n[e];if(!Mr(r,o)){var i;for(i=1;i<t&&Mr(arguments[i],o);i++);i===t&&r.push(o)}}return r},difference:Cr,unzip:Hr,transpose:Hr,zip:Qr,object:function(n,r){for(var t={},e=0,u=Y(n);e<u;e++)r?t[n[e]]=r[e]:t[n[e][0]]=n[e][1];return t},range:function(n,r,t){null==r&&(r=n||0,n=0),t||(t=r<n?-1:1);for(var e=Math.max(Math.ceil((r-n)/t),0),u=Array(e),o=0;o<e;o++,n+=t)u[o]=n;return u},chunk:function(n,r){if(null==r||r<1)return[];for(var t=[],e=0,u=n.length;e<u;)t.push(i.call(n,e,e+=r));return t},mixin:Yr,default:tn});return Zr._=Zr,Zr}));
\ No newline at end of file
+var n="1.13.3",r="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||Function("return this")()||{},t=Array.prototype,e=Object.prototype,u="undefined"!=typeof Symbol?Symbol.prototype:null,o=t.push,i=t.slice,a=e.toString,f=e.hasOwnProperty,c="undefined"!=typeof ArrayBuffer,l="undefined"!=typeof DataView,s=Array.isArray,p=Object.keys,v=Object.create,h=c&&ArrayBuffer.isView,y=isNaN,d=isFinite,g=!{toString:null}.propertyIsEnumerable("toString"),b=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],m=Math.pow(2,53)-1;function j(n,r){return r=null==r?n.length-1:+r,function(){for(var t=Math.max(arguments.length-r,0),e=Array(t),u=0;u<t;u++)e[u]=arguments[u+r];switch(r){case 0:return n.call(this,e);case 1:return n.call(this,arguments[0],e);case 2:return n.call(this,arguments[0],arguments[1],e)}var o=Array(r+1);for(u=0;u<r;u++)o[u]=arguments[u];return o[r]=e,n.apply(this,o)}}function _(n){var r=typeof n;return"function"===r||"object"===r&&!!n}function w(n){return void 0===n}function A(n){return!0===n||!1===n||"[object Boolean]"===a.call(n)}function x(n){var r="[object "+n+"]";return function(n){return a.call(n)===r}}var S=x("String"),O=x("Number"),M=x("Date"),E=x("RegExp"),B=x("Error"),N=x("Symbol"),I=x("ArrayBuffer"),T=x("Function"),k=r.document&&r.document.childNodes;"function"!=typeof/./&&"object"!=typeof Int8Array&&"function"!=typeof k&&(T=function(n){return"function"==typeof n||!1});var D=T,R=x("Object"),F=l&&R(new DataView(new ArrayBuffer(8))),V="undefined"!=typeof Map&&R(new Map),P=x("DataView");var q=F?function(n){return null!=n&&D(n.getInt8)&&I(n.buffer)}:P,U=s||x("Array");function W(n,r){return null!=n&&f.call(n,r)}var z=x("Arguments");!function(){z(arguments)||(z=function(n){return W(n,"callee")})}();var L=z;function $(n){return O(n)&&y(n)}function C(n){return function(){return n}}function K(n){return function(r){var t=n(r);return"number"==typeof t&&t>=0&&t<=m}}function J(n){return function(r){return null==r?void 0:r[n]}}var G=J("byteLength"),H=K(G),Q=/\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;var X=c?function(n){return h?h(n)&&!q(n):H(n)&&Q.test(a.call(n))}:C(!1),Y=J("length");function Z(n,r){r=function(n){for(var r={},t=n.length,e=0;e<t;++e)r[n[e]]=!0;return{contains:function(n){return!0===r[n]},push:function(t){return r[t]=!0,n.push(t)}}}(r);var t=b.length,u=n.constructor,o=D(u)&&u.prototype||e,i="constructor";for(W(n,i)&&!r.contains(i)&&r.push(i);t--;)(i=b[t])in n&&n[i]!==o[i]&&!r.contains(i)&&r.push(i)}function nn(n){if(!_(n))return[];if(p)return p(n);var r=[];for(var t in n)W(n,t)&&r.push(t);return g&&Z(n,r),r}function rn(n,r){var t=nn(r),e=t.length;if(null==n)return!e;for(var u=Object(n),o=0;o<e;o++){var i=t[o];if(r[i]!==u[i]||!(i in u))return!1}return!0}function tn(n){return n instanceof tn?n:this instanceof tn?void(this._wrapped=n):new tn(n)}function en(n){return new Uint8Array(n.buffer||n,n.byteOffset||0,G(n))}tn.VERSION=n,tn.prototype.value=function(){return this._wrapped},tn.prototype.valueOf=tn.prototype.toJSON=tn.prototype.value,tn.prototype.toString=function(){return String(this._wrapped)};var un="[object DataView]";function on(n,r,t,e){if(n===r)return 0!==n||1/n==1/r;if(null==n||null==r)return!1;if(n!=n)return r!=r;var o=typeof n;return("function"===o||"object"===o||"object"==typeof r)&&function n(r,t,e,o){r instanceof tn&&(r=r._wrapped);t instanceof tn&&(t=t._wrapped);var i=a.call(r);if(i!==a.call(t))return!1;if(F&&"[object Object]"==i&&q(r)){if(!q(t))return!1;i=un}switch(i){case"[object RegExp]":case"[object String]":return""+r==""+t;case"[object Number]":return+r!=+r?+t!=+t:0==+r?1/+r==1/t:+r==+t;case"[object Date]":case"[object Boolean]":return+r==+t;case"[object Symbol]":return u.valueOf.call(r)===u.valueOf.call(t);case"[object ArrayBuffer]":case un:return n(en(r),en(t),e,o)}var f="[object Array]"===i;if(!f&&X(r)){if(G(r)!==G(t))return!1;if(r.buffer===t.buffer&&r.byteOffset===t.byteOffset)return!0;f=!0}if(!f){if("object"!=typeof r||"object"!=typeof t)return!1;var c=r.constructor,l=t.constructor;if(c!==l&&!(D(c)&&c instanceof c&&D(l)&&l instanceof l)&&"constructor"in r&&"constructor"in t)return!1}o=o||[];var s=(e=e||[]).length;for(;s--;)if(e[s]===r)return o[s]===t;if(e.push(r),o.push(t),f){if((s=r.length)!==t.length)return!1;for(;s--;)if(!on(r[s],t[s],e,o))return!1}else{var p,v=nn(r);if(s=v.length,nn(t).length!==s)return!1;for(;s--;)if(p=v[s],!W(t,p)||!on(r[p],t[p],e,o))return!1}return e.pop(),o.pop(),!0}(n,r,t,e)}function an(n){if(!_(n))return[];var r=[];for(var t in n)r.push(t);return g&&Z(n,r),r}function fn(n){var r=Y(n);return function(t){if(null==t)return!1;var e=an(t);if(Y(e))return!1;for(var u=0;u<r;u++)if(!D(t[n[u]]))return!1;return n!==hn||!D(t[cn])}}var cn="forEach",ln="has",sn=["clear","delete"],pn=["get",ln,"set"],vn=sn.concat(cn,pn),hn=sn.concat(pn),yn=["add"].concat(sn,cn,ln),dn=V?fn(vn):x("Map"),gn=V?fn(hn):x("WeakMap"),bn=V?fn(yn):x("Set"),mn=x("WeakSet");function jn(n){for(var r=nn(n),t=r.length,e=Array(t),u=0;u<t;u++)e[u]=n[r[u]];return e}function _n(n){for(var r={},t=nn(n),e=0,u=t.length;e<u;e++)r[n[t[e]]]=t[e];return r}function wn(n){var r=[];for(var t in n)D(n[t])&&r.push(t);return r.sort()}function An(n,r){return function(t){var e=arguments.length;if(r&&(t=Object(t)),e<2||null==t)return t;for(var u=1;u<e;u++)for(var o=arguments[u],i=n(o),a=i.length,f=0;f<a;f++){var c=i[f];r&&void 0!==t[c]||(t[c]=o[c])}return t}}var xn=An(an),Sn=An(nn),On=An(an,!0);function Mn(n){if(!_(n))return{};if(v)return v(n);var r=function(){};r.prototype=n;var t=new r;return r.prototype=null,t}function En(n){return U(n)?n:[n]}function Bn(n){return tn.toPath(n)}function Nn(n,r){for(var t=r.length,e=0;e<t;e++){if(null==n)return;n=n[r[e]]}return t?n:void 0}function In(n,r,t){var e=Nn(n,Bn(r));return w(e)?t:e}function Tn(n){return n}function kn(n){return n=Sn({},n),function(r){return rn(r,n)}}function Dn(n){return n=Bn(n),function(r){return Nn(r,n)}}function Rn(n,r,t){if(void 0===r)return n;switch(null==t?3:t){case 1:return function(t){return n.call(r,t)};case 3:return function(t,e,u){return n.call(r,t,e,u)};case 4:return function(t,e,u,o){return n.call(r,t,e,u,o)}}return function(){return n.apply(r,arguments)}}function Fn(n,r,t){return null==n?Tn:D(n)?Rn(n,r,t):_(n)&&!U(n)?kn(n):Dn(n)}function Vn(n,r){return Fn(n,r,1/0)}function Pn(n,r,t){return tn.iteratee!==Vn?tn.iteratee(n,r):Fn(n,r,t)}function qn(){}function Un(n,r){return null==r&&(r=n,n=0),n+Math.floor(Math.random()*(r-n+1))}tn.toPath=En,tn.iteratee=Vn;var Wn=Date.now||function(){return(new Date).getTime()};function zn(n){var r=function(r){return n[r]},t="(?:"+nn(n).join("|")+")",e=RegExp(t),u=RegExp(t,"g");return function(n){return n=null==n?"":""+n,e.test(n)?n.replace(u,r):n}}var Ln={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},$n=zn(Ln),Cn=zn(_n(Ln)),Kn=tn.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g},Jn=/(.)^/,Gn={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},Hn=/\\|'|\r|\n|\u2028|\u2029/g;function Qn(n){return"\\"+Gn[n]}var Xn=/^\s*(\w|\$)+\s*$/;var Yn=0;function Zn(n,r,t,e,u){if(!(e instanceof r))return n.apply(t,u);var o=Mn(n.prototype),i=n.apply(o,u);return _(i)?i:o}var nr=j((function(n,r){var t=nr.placeholder,e=function(){for(var u=0,o=r.length,i=Array(o),a=0;a<o;a++)i[a]=r[a]===t?arguments[u++]:r[a];for(;u<arguments.length;)i.push(arguments[u++]);return Zn(n,e,this,this,i)};return e}));nr.placeholder=tn;var rr=j((function(n,r,t){if(!D(n))throw new TypeError("Bind must be called on a function");var e=j((function(u){return Zn(n,e,r,this,t.concat(u))}));return e})),tr=K(Y);function er(n,r,t,e){if(e=e||[],r||0===r){if(r<=0)return e.concat(n)}else r=1/0;for(var u=e.length,o=0,i=Y(n);o<i;o++){var a=n[o];if(tr(a)&&(U(a)||L(a)))if(r>1)er(a,r-1,t,e),u=e.length;else for(var f=0,c=a.length;f<c;)e[u++]=a[f++];else t||(e[u++]=a)}return e}var ur=j((function(n,r){var t=(r=er(r,!1,!1)).length;if(t<1)throw new Error("bindAll must be passed function names");for(;t--;){var e=r[t];n[e]=rr(n[e],n)}return n}));var or=j((function(n,r,t){return setTimeout((function(){return n.apply(null,t)}),r)})),ir=nr(or,tn,1);function ar(n){return function(){return!n.apply(this,arguments)}}function fr(n,r){var t;return function(){return--n>0&&(t=r.apply(this,arguments)),n<=1&&(r=null),t}}var cr=nr(fr,2);function lr(n,r,t){r=Pn(r,t);for(var e,u=nn(n),o=0,i=u.length;o<i;o++)if(r(n[e=u[o]],e,n))return e}function sr(n){return function(r,t,e){t=Pn(t,e);for(var u=Y(r),o=n>0?0:u-1;o>=0&&o<u;o+=n)if(t(r[o],o,r))return o;return-1}}var pr=sr(1),vr=sr(-1);function hr(n,r,t,e){for(var u=(t=Pn(t,e,1))(r),o=0,i=Y(n);o<i;){var a=Math.floor((o+i)/2);t(n[a])<u?o=a+1:i=a}return o}function yr(n,r,t){return function(e,u,o){var a=0,f=Y(e);if("number"==typeof o)n>0?a=o>=0?o:Math.max(o+f,a):f=o>=0?Math.min(o+1,f):o+f+1;else if(t&&o&&f)return e[o=t(e,u)]===u?o:-1;if(u!=u)return(o=r(i.call(e,a,f),$))>=0?o+a:-1;for(o=n>0?a:f-1;o>=0&&o<f;o+=n)if(e[o]===u)return o;return-1}}var dr=yr(1,pr,hr),gr=yr(-1,vr);function br(n,r,t){var e=(tr(n)?pr:lr)(n,r,t);if(void 0!==e&&-1!==e)return n[e]}function mr(n,r,t){var e,u;if(r=Rn(r,t),tr(n))for(e=0,u=n.length;e<u;e++)r(n[e],e,n);else{var o=nn(n);for(e=0,u=o.length;e<u;e++)r(n[o[e]],o[e],n)}return n}function jr(n,r,t){r=Pn(r,t);for(var e=!tr(n)&&nn(n),u=(e||n).length,o=Array(u),i=0;i<u;i++){var a=e?e[i]:i;o[i]=r(n[a],a,n)}return o}function _r(n){var r=function(r,t,e,u){var o=!tr(r)&&nn(r),i=(o||r).length,a=n>0?0:i-1;for(u||(e=r[o?o[a]:a],a+=n);a>=0&&a<i;a+=n){var f=o?o[a]:a;e=t(e,r[f],f,r)}return e};return function(n,t,e,u){var o=arguments.length>=3;return r(n,Rn(t,u,4),e,o)}}var wr=_r(1),Ar=_r(-1);function xr(n,r,t){var e=[];return r=Pn(r,t),mr(n,(function(n,t,u){r(n,t,u)&&e.push(n)})),e}function Sr(n,r,t){r=Pn(r,t);for(var e=!tr(n)&&nn(n),u=(e||n).length,o=0;o<u;o++){var i=e?e[o]:o;if(!r(n[i],i,n))return!1}return!0}function Or(n,r,t){r=Pn(r,t);for(var e=!tr(n)&&nn(n),u=(e||n).length,o=0;o<u;o++){var i=e?e[o]:o;if(r(n[i],i,n))return!0}return!1}function Mr(n,r,t,e){return tr(n)||(n=jn(n)),("number"!=typeof t||e)&&(t=0),dr(n,r,t)>=0}var Er=j((function(n,r,t){var e,u;return D(r)?u=r:(r=Bn(r),e=r.slice(0,-1),r=r[r.length-1]),jr(n,(function(n){var o=u;if(!o){if(e&&e.length&&(n=Nn(n,e)),null==n)return;o=n[r]}return null==o?o:o.apply(n,t)}))}));function Br(n,r){return jr(n,Dn(r))}function Nr(n,r,t){var e,u,o=-1/0,i=-1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=tr(n)?n:jn(n)).length;a<f;a++)null!=(e=n[a])&&e>o&&(o=e);else r=Pn(r,t),mr(n,(function(n,t,e){((u=r(n,t,e))>i||u===-1/0&&o===-1/0)&&(o=n,i=u)}));return o}var Ir=/[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;function Tr(n){return n?U(n)?i.call(n):S(n)?n.match(Ir):tr(n)?jr(n,Tn):jn(n):[]}function kr(n,r,t){if(null==r||t)return tr(n)||(n=jn(n)),n[Un(n.length-1)];var e=Tr(n),u=Y(e);r=Math.max(Math.min(r,u),0);for(var o=u-1,i=0;i<r;i++){var a=Un(i,o),f=e[i];e[i]=e[a],e[a]=f}return e.slice(0,r)}function Dr(n,r){return function(t,e,u){var o=r?[[],[]]:{};return e=Pn(e,u),mr(t,(function(r,u){var i=e(r,u,t);n(o,r,i)})),o}}var Rr=Dr((function(n,r,t){W(n,t)?n[t].push(r):n[t]=[r]})),Fr=Dr((function(n,r,t){n[t]=r})),Vr=Dr((function(n,r,t){W(n,t)?n[t]++:n[t]=1})),Pr=Dr((function(n,r,t){n[t?0:1].push(r)}),!0);function qr(n,r,t){return r in t}var Ur=j((function(n,r){var t={},e=r[0];if(null==n)return t;D(e)?(r.length>1&&(e=Rn(e,r[1])),r=an(n)):(e=qr,r=er(r,!1,!1),n=Object(n));for(var u=0,o=r.length;u<o;u++){var i=r[u],a=n[i];e(a,i,n)&&(t[i]=a)}return t})),Wr=j((function(n,r){var t,e=r[0];return D(e)?(e=ar(e),r.length>1&&(t=r[1])):(r=jr(er(r,!1,!1),String),e=function(n,t){return!Mr(r,t)}),Ur(n,e,t)}));function zr(n,r,t){return i.call(n,0,Math.max(0,n.length-(null==r||t?1:r)))}function Lr(n,r,t){return null==n||n.length<1?null==r||t?void 0:[]:null==r||t?n[0]:zr(n,n.length-r)}function $r(n,r,t){return i.call(n,null==r||t?1:r)}var Cr=j((function(n,r){return r=er(r,!0,!0),xr(n,(function(n){return!Mr(r,n)}))})),Kr=j((function(n,r){return Cr(n,r)}));function Jr(n,r,t,e){A(r)||(e=t,t=r,r=!1),null!=t&&(t=Pn(t,e));for(var u=[],o=[],i=0,a=Y(n);i<a;i++){var f=n[i],c=t?t(f,i,n):f;r&&!t?(i&&o===c||u.push(f),o=c):t?Mr(o,c)||(o.push(c),u.push(f)):Mr(u,f)||u.push(f)}return u}var Gr=j((function(n){return Jr(er(n,!0,!0))}));function Hr(n){for(var r=n&&Nr(n,Y).length||0,t=Array(r),e=0;e<r;e++)t[e]=Br(n,e);return t}var Qr=j(Hr);function Xr(n,r){return n._chain?tn(r).chain():r}function Yr(n){return mr(wn(n),(function(r){var t=tn[r]=n[r];tn.prototype[r]=function(){var n=[this._wrapped];return o.apply(n,arguments),Xr(this,t.apply(tn,n))}})),tn}mr(["pop","push","reverse","shift","sort","splice","unshift"],(function(n){var r=t[n];tn.prototype[n]=function(){var t=this._wrapped;return null!=t&&(r.apply(t,arguments),"shift"!==n&&"splice"!==n||0!==t.length||delete t[0]),Xr(this,t)}})),mr(["concat","join","slice"],(function(n){var r=t[n];tn.prototype[n]=function(){var n=this._wrapped;return null!=n&&(n=r.apply(n,arguments)),Xr(this,n)}}));var Zr=Yr({__proto__:null,VERSION:n,restArguments:j,isObject:_,isNull:function(n){return null===n},isUndefined:w,isBoolean:A,isElement:function(n){return!(!n||1!==n.nodeType)},isString:S,isNumber:O,isDate:M,isRegExp:E,isError:B,isSymbol:N,isArrayBuffer:I,isDataView:q,isArray:U,isFunction:D,isArguments:L,isFinite:function(n){return!N(n)&&d(n)&&!isNaN(parseFloat(n))},isNaN:$,isTypedArray:X,isEmpty:function(n){if(null==n)return!0;var r=Y(n);return"number"==typeof r&&(U(n)||S(n)||L(n))?0===r:0===Y(nn(n))},isMatch:rn,isEqual:function(n,r){return on(n,r)},isMap:dn,isWeakMap:gn,isSet:bn,isWeakSet:mn,keys:nn,allKeys:an,values:jn,pairs:function(n){for(var r=nn(n),t=r.length,e=Array(t),u=0;u<t;u++)e[u]=[r[u],n[r[u]]];return e},invert:_n,functions:wn,methods:wn,extend:xn,extendOwn:Sn,assign:Sn,defaults:On,create:function(n,r){var t=Mn(n);return r&&Sn(t,r),t},clone:function(n){return _(n)?U(n)?n.slice():xn({},n):n},tap:function(n,r){return r(n),n},get:In,has:function(n,r){for(var t=(r=Bn(r)).length,e=0;e<t;e++){var u=r[e];if(!W(n,u))return!1;n=n[u]}return!!t},mapObject:function(n,r,t){r=Pn(r,t);for(var e=nn(n),u=e.length,o={},i=0;i<u;i++){var a=e[i];o[a]=r(n[a],a,n)}return o},identity:Tn,constant:C,noop:qn,toPath:En,property:Dn,propertyOf:function(n){return null==n?qn:function(r){return In(n,r)}},matcher:kn,matches:kn,times:function(n,r,t){var e=Array(Math.max(0,n));r=Rn(r,t,1);for(var u=0;u<n;u++)e[u]=r(u);return e},random:Un,now:Wn,escape:$n,unescape:Cn,templateSettings:Kn,template:function(n,r,t){!r&&t&&(r=t),r=On({},r,tn.templateSettings);var e=RegExp([(r.escape||Jn).source,(r.interpolate||Jn).source,(r.evaluate||Jn).source].join("|")+"|$","g"),u=0,o="__p+='";n.replace(e,(function(r,t,e,i,a){return o+=n.slice(u,a).replace(Hn,Qn),u=a+r.length,t?o+="'+\n((__t=("+t+"))==null?'':_.escape(__t))+\n'":e?o+="'+\n((__t=("+e+"))==null?'':__t)+\n'":i&&(o+="';\n"+i+"\n__p+='"),r})),o+="';\n";var i,a=r.variable;if(a){if(!Xn.test(a))throw new Error("variable is not a bare identifier: "+a)}else o="with(obj||{}){\n"+o+"}\n",a="obj";o="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+o+"return __p;\n";try{i=new Function(a,"_",o)}catch(n){throw n.source=o,n}var f=function(n){return i.call(this,n,tn)};return f.source="function("+a+"){\n"+o+"}",f},result:function(n,r,t){var e=(r=Bn(r)).length;if(!e)return D(t)?t.call(n):t;for(var u=0;u<e;u++){var o=null==n?void 0:n[r[u]];void 0===o&&(o=t,u=e),n=D(o)?o.call(n):o}return n},uniqueId:function(n){var r=++Yn+"";return n?n+r:r},chain:function(n){var r=tn(n);return r._chain=!0,r},iteratee:Vn,partial:nr,bind:rr,bindAll:ur,memoize:function(n,r){var t=function(e){var u=t.cache,o=""+(r?r.apply(this,arguments):e);return W(u,o)||(u[o]=n.apply(this,arguments)),u[o]};return t.cache={},t},delay:or,defer:ir,throttle:function(n,r,t){var e,u,o,i,a=0;t||(t={});var f=function(){a=!1===t.leading?0:Wn(),e=null,i=n.apply(u,o),e||(u=o=null)},c=function(){var c=Wn();a||!1!==t.leading||(a=c);var l=r-(c-a);return u=this,o=arguments,l<=0||l>r?(e&&(clearTimeout(e),e=null),a=c,i=n.apply(u,o),e||(u=o=null)):e||!1===t.trailing||(e=setTimeout(f,l)),i};return c.cancel=function(){clearTimeout(e),a=0,e=u=o=null},c},debounce:function(n,r,t){var e,u,o,i,a,f=function(){var c=Wn()-u;r>c?e=setTimeout(f,r-c):(e=null,t||(i=n.apply(a,o)),e||(o=a=null))},c=j((function(c){return a=this,o=c,u=Wn(),e||(e=setTimeout(f,r),t&&(i=n.apply(a,o))),i}));return c.cancel=function(){clearTimeout(e),e=o=a=null},c},wrap:function(n,r){return nr(r,n)},negate:ar,compose:function(){var n=arguments,r=n.length-1;return function(){for(var t=r,e=n[r].apply(this,arguments);t--;)e=n[t].call(this,e);return e}},after:function(n,r){return function(){if(--n<1)return r.apply(this,arguments)}},before:fr,once:cr,findKey:lr,findIndex:pr,findLastIndex:vr,sortedIndex:hr,indexOf:dr,lastIndexOf:gr,find:br,detect:br,findWhere:function(n,r){return br(n,kn(r))},each:mr,forEach:mr,map:jr,collect:jr,reduce:wr,foldl:wr,inject:wr,reduceRight:Ar,foldr:Ar,filter:xr,select:xr,reject:function(n,r,t){return xr(n,ar(Pn(r)),t)},every:Sr,all:Sr,some:Or,any:Or,contains:Mr,includes:Mr,include:Mr,invoke:Er,pluck:Br,where:function(n,r){return xr(n,kn(r))},max:Nr,min:function(n,r,t){var e,u,o=1/0,i=1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=tr(n)?n:jn(n)).length;a<f;a++)null!=(e=n[a])&&e<o&&(o=e);else r=Pn(r,t),mr(n,(function(n,t,e){((u=r(n,t,e))<i||u===1/0&&o===1/0)&&(o=n,i=u)}));return o},shuffle:function(n){return kr(n,1/0)},sample:kr,sortBy:function(n,r,t){var e=0;return r=Pn(r,t),Br(jr(n,(function(n,t,u){return{value:n,index:e++,criteria:r(n,t,u)}})).sort((function(n,r){var t=n.criteria,e=r.criteria;if(t!==e){if(t>e||void 0===t)return 1;if(t<e||void 0===e)return-1}return n.index-r.index})),"value")},groupBy:Rr,indexBy:Fr,countBy:Vr,partition:Pr,toArray:Tr,size:function(n){return null==n?0:tr(n)?n.length:nn(n).length},pick:Ur,omit:Wr,first:Lr,head:Lr,take:Lr,initial:zr,last:function(n,r,t){return null==n||n.length<1?null==r||t?void 0:[]:null==r||t?n[n.length-1]:$r(n,Math.max(0,n.length-r))},rest:$r,tail:$r,drop:$r,compact:function(n){return xr(n,Boolean)},flatten:function(n,r){return er(n,r,!1)},without:Kr,uniq:Jr,unique:Jr,union:Gr,intersection:function(n){for(var r=[],t=arguments.length,e=0,u=Y(n);e<u;e++){var o=n[e];if(!Mr(r,o)){var i;for(i=1;i<t&&Mr(arguments[i],o);i++);i===t&&r.push(o)}}return r},difference:Cr,unzip:Hr,transpose:Hr,zip:Qr,object:function(n,r){for(var t={},e=0,u=Y(n);e<u;e++)r?t[n[e]]=r[e]:t[n[e][0]]=n[e][1];return t},range:function(n,r,t){null==r&&(r=n||0,n=0),t||(t=r<n?-1:1);for(var e=Math.max(Math.ceil((r-n)/t),0),u=Array(e),o=0;o<e;o++,n+=t)u[o]=n;return u},chunk:function(n,r){if(null==r||r<1)return[];for(var t=[],e=0,u=n.length;e<u;)t.push(i.call(n,e,e+=r));return t},mixin:Yr,default:tn});return Zr._=Zr,Zr}));
\ No newline at end of file
diff --git a/web/core/assets/vendor/underscore/underscore-min.js.map b/web/core/assets/vendor/underscore/underscore-min.js.map
index 36b3a8eea0..8901c41ce4 100644
--- a/web/core/assets/vendor/underscore/underscore-min.js.map
+++ b/web/core/assets/vendor/underscore/underscore-min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["modules/_setup.js","modules/restArguments.js","modules/isObject.js","modules/isUndefined.js","modules/isBoolean.js","modules/_tagTester.js","modules/isString.js","modules/isNumber.js","modules/isDate.js","modules/isRegExp.js","modules/isError.js","modules/isSymbol.js","modules/isArrayBuffer.js","modules/isFunction.js","modules/_hasObjectTag.js","modules/_stringTagBug.js","modules/isDataView.js","modules/isArray.js","modules/_has.js","modules/isArguments.js","modules/isNaN.js","modules/constant.js","modules/_createSizePropertyCheck.js","modules/_shallowProperty.js","modules/_getByteLength.js","modules/_isBufferLike.js","modules/isTypedArray.js","modules/_getLength.js","modules/_collectNonEnumProps.js","modules/keys.js","modules/isMatch.js","modules/underscore.js","modules/_toBufferView.js","modules/isEqual.js","modules/allKeys.js","modules/_methodFingerprint.js","modules/isMap.js","modules/isWeakMap.js","modules/isSet.js","modules/isWeakSet.js","modules/values.js","modules/invert.js","modules/functions.js","modules/_createAssigner.js","modules/extend.js","modules/extendOwn.js","modules/defaults.js","modules/_baseCreate.js","modules/toPath.js","modules/_toPath.js","modules/_deepGet.js","modules/get.js","modules/identity.js","modules/matcher.js","modules/property.js","modules/_optimizeCb.js","modules/_baseIteratee.js","modules/iteratee.js","modules/_cb.js","modules/noop.js","modules/random.js","modules/now.js","modules/_createEscaper.js","modules/_escapeMap.js","modules/escape.js","modules/unescape.js","modules/_unescapeMap.js","modules/templateSettings.js","modules/template.js","modules/uniqueId.js","modules/_executeBound.js","modules/partial.js","modules/bind.js","modules/_isArrayLike.js","modules/_flatten.js","modules/bindAll.js","modules/delay.js","modules/defer.js","modules/negate.js","modules/before.js","modules/once.js","modules/findKey.js","modules/_createPredicateIndexFinder.js","modules/findIndex.js","modules/findLastIndex.js","modules/sortedIndex.js","modules/_createIndexFinder.js","modules/indexOf.js","modules/lastIndexOf.js","modules/find.js","modules/each.js","modules/map.js","modules/_createReduce.js","modules/reduce.js","modules/reduceRight.js","modules/filter.js","modules/every.js","modules/some.js","modules/contains.js","modules/invoke.js","modules/pluck.js","modules/max.js","modules/toArray.js","modules/sample.js","modules/_group.js","modules/groupBy.js","modules/indexBy.js","modules/countBy.js","modules/partition.js","modules/_keyInObj.js","modules/pick.js","modules/omit.js","modules/initial.js","modules/first.js","modules/rest.js","modules/difference.js","modules/without.js","modules/uniq.js","modules/union.js","modules/unzip.js","modules/zip.js","modules/_chainResult.js","modules/mixin.js","modules/underscore-array-methods.js","modules/index-default.js","modules/isNull.js","modules/isElement.js","modules/isFinite.js","modules/isEmpty.js","modules/pairs.js","modules/create.js","modules/clone.js","modules/tap.js","modules/has.js","modules/mapObject.js","modules/propertyOf.js","modules/times.js","modules/result.js","modules/chain.js","modules/memoize.js","modules/throttle.js","modules/debounce.js","modules/wrap.js","modules/compose.js","modules/after.js","modules/findWhere.js","modules/reject.js","modules/where.js","modules/min.js","modules/shuffle.js","modules/sortBy.js","modules/size.js","modules/last.js","modules/compact.js","modules/flatten.js","modules/intersection.js","modules/object.js","modules/range.js","modules/chunk.js"],"names":["VERSION","root","self","global","Function","ArrayProto","Array","prototype","ObjProto","Object","SymbolProto","Symbol","push","slice","toString","hasOwnProperty","supportsArrayBuffer","ArrayBuffer","supportsDataView","DataView","nativeIsArray","isArray","nativeKeys","keys","nativeCreate","create","nativeIsView","isView","_isNaN","isNaN","_isFinite","isFinite","hasEnumBug","propertyIsEnumerable","nonEnumerableProps","MAX_ARRAY_INDEX","Math","pow","restArguments","func","startIndex","length","max","arguments","rest","index","call","this","args","apply","isObject","obj","type","isUndefined","isBoolean","tagTester","name","tag","isString","isNumber","isDate","isRegExp","isError","isSymbol","isArrayBuffer","isFunction","nodelist","document","childNodes","Int8Array","isFunction$1","hasObjectTag","hasStringTagBug","isIE11","Map","isDataView","isDataView$1","getInt8","buffer","has","key","isArguments","isArguments$1","constant","value","createSizePropertyCheck","getSizeProperty","collection","sizeProperty","shallowProperty","getByteLength","isBufferLike","typedArrayPattern","isTypedArray$1","test","getLength","collectNonEnumProps","hash","l","i","contains","emulatedSet","nonEnumIdx","constructor","proto","prop","isMatch","object","attrs","_keys","_","_wrapped","toBufferView","bufferSource","Uint8Array","byteOffset","valueOf","toJSON","String","tagDataView","eq","a","b","aStack","bStack","deepEq","className","areArrays","isTypedArray","aCtor","bCtor","pop","allKeys","ie11fingerprint","methods","weakMapMethods","forEachName","hasName","commonInit","mapTail","mapMethods","concat","setMethods","isMap","isWeakMap","isSet","isWeakSet","values","invert","result","functions","names","sort","createAssigner","keysFunc","defaults","source","extend","extendOwn","baseCreate","Ctor","toPath","path","deepGet","get","defaultValue","identity","matcher","property","optimizeCb","context","argCount","accumulator","baseIteratee","iteratee","Infinity","cb","noop","random","min","floor","now","Date","getTime","createEscaper","map","escaper","match","join","testRegexp","RegExp","replaceRegexp","string","replace","escapeMap","&","<",">","\"","'","`","_escape","_unescape","templateSettings","evaluate","interpolate","escape","noMatch","escapes","\\","\r","\n","
","
","escapeRegExp","escapeChar","bareIdentifier","idCounter","executeBound","sourceFunc","boundFunc","callingContext","partial","boundArgs","placeholder","bound","position","bind","TypeError","callArgs","isArrayLike","flatten","input","depth","strict","output","idx","j","len","bindAll","Error","delay","wait","setTimeout","defer","negate","predicate","before","times","memo","once","findKey","createPredicateIndexFinder","dir","array","findIndex","findLastIndex","sortedIndex","low","high","mid","createIndexFinder","predicateFind","item","indexOf","lastIndexOf","find","each","results","currentKey","createReduce","reducer","initial","reduce","reduceRight","filter","list","every","some","fromIndex","guard","invoke","contextPath","method","pluck","computed","lastComputed","v","reStrSymbol","toArray","sample","n","last","rand","temp","group","behavior","partition","groupBy","indexBy","countBy","pass","keyInObj","pick","omit","first","difference","without","otherArrays","uniq","isSorted","seen","union","arrays","unzip","zip","chainResult","instance","_chain","chain","mixin","nodeType","parseFloat","pairs","props","interceptor","_has","accum","text","settings","oldSettings","offset","render","argument","variable","e","template","data","fallback","prefix","id","hasher","memoize","cache","address","options","timeout","previous","later","leading","throttled","_now","remaining","clearTimeout","trailing","cancel","immediate","passed","debounced","_args","wrapper","start","criteria","left","right","Boolean","_flatten","argsLength","stop","step","ceil","range","count"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"sources":["modules/_setup.js","modules/restArguments.js","modules/isObject.js","modules/isUndefined.js","modules/isBoolean.js","modules/_tagTester.js","modules/isString.js","modules/isNumber.js","modules/isDate.js","modules/isRegExp.js","modules/isError.js","modules/isSymbol.js","modules/isArrayBuffer.js","modules/isFunction.js","modules/_hasObjectTag.js","modules/_stringTagBug.js","modules/isDataView.js","modules/isArray.js","modules/_has.js","modules/isArguments.js","modules/isNaN.js","modules/constant.js","modules/_createSizePropertyCheck.js","modules/_shallowProperty.js","modules/_getByteLength.js","modules/_isBufferLike.js","modules/isTypedArray.js","modules/_getLength.js","modules/_collectNonEnumProps.js","modules/keys.js","modules/isMatch.js","modules/underscore.js","modules/_toBufferView.js","modules/isEqual.js","modules/allKeys.js","modules/_methodFingerprint.js","modules/isMap.js","modules/isWeakMap.js","modules/isSet.js","modules/isWeakSet.js","modules/values.js","modules/invert.js","modules/functions.js","modules/_createAssigner.js","modules/extend.js","modules/extendOwn.js","modules/defaults.js","modules/_baseCreate.js","modules/toPath.js","modules/_toPath.js","modules/_deepGet.js","modules/get.js","modules/identity.js","modules/matcher.js","modules/property.js","modules/_optimizeCb.js","modules/_baseIteratee.js","modules/iteratee.js","modules/_cb.js","modules/noop.js","modules/random.js","modules/now.js","modules/_createEscaper.js","modules/_escapeMap.js","modules/escape.js","modules/unescape.js","modules/_unescapeMap.js","modules/templateSettings.js","modules/template.js","modules/uniqueId.js","modules/_executeBound.js","modules/partial.js","modules/bind.js","modules/_isArrayLike.js","modules/_flatten.js","modules/bindAll.js","modules/delay.js","modules/defer.js","modules/negate.js","modules/before.js","modules/once.js","modules/findKey.js","modules/_createPredicateIndexFinder.js","modules/findIndex.js","modules/findLastIndex.js","modules/sortedIndex.js","modules/_createIndexFinder.js","modules/indexOf.js","modules/lastIndexOf.js","modules/find.js","modules/each.js","modules/map.js","modules/_createReduce.js","modules/reduce.js","modules/reduceRight.js","modules/filter.js","modules/every.js","modules/some.js","modules/contains.js","modules/invoke.js","modules/pluck.js","modules/max.js","modules/toArray.js","modules/sample.js","modules/_group.js","modules/groupBy.js","modules/indexBy.js","modules/countBy.js","modules/partition.js","modules/_keyInObj.js","modules/pick.js","modules/omit.js","modules/initial.js","modules/first.js","modules/rest.js","modules/difference.js","modules/without.js","modules/uniq.js","modules/union.js","modules/unzip.js","modules/zip.js","modules/_chainResult.js","modules/mixin.js","modules/underscore-array-methods.js","modules/index-default.js","modules/isNull.js","modules/isElement.js","modules/isFinite.js","modules/isEmpty.js","modules/pairs.js","modules/create.js","modules/clone.js","modules/tap.js","modules/has.js","modules/mapObject.js","modules/propertyOf.js","modules/times.js","modules/result.js","modules/chain.js","modules/memoize.js","modules/throttle.js","modules/debounce.js","modules/wrap.js","modules/compose.js","modules/after.js","modules/findWhere.js","modules/reject.js","modules/where.js","modules/min.js","modules/shuffle.js","modules/sortBy.js","modules/size.js","modules/last.js","modules/compact.js","modules/flatten.js","modules/intersection.js","modules/object.js","modules/range.js","modules/chunk.js"],"names":["VERSION","root","self","global","Function","ArrayProto","Array","prototype","ObjProto","Object","SymbolProto","Symbol","push","slice","toString","hasOwnProperty","supportsArrayBuffer","ArrayBuffer","supportsDataView","DataView","nativeIsArray","isArray","nativeKeys","keys","nativeCreate","create","nativeIsView","isView","_isNaN","isNaN","_isFinite","isFinite","hasEnumBug","propertyIsEnumerable","nonEnumerableProps","MAX_ARRAY_INDEX","Math","pow","restArguments","func","startIndex","length","max","arguments","rest","index","call","this","args","apply","isObject","obj","type","isUndefined","isBoolean","tagTester","name","tag","isString","isNumber","isDate","isRegExp","isError","isSymbol","isArrayBuffer","isFunction","nodelist","document","childNodes","Int8Array","isFunction$1","hasObjectTag","hasStringTagBug","isIE11","Map","isDataView","isDataView$1","getInt8","buffer","has","key","isArguments","isArguments$1","constant","value","createSizePropertyCheck","getSizeProperty","collection","sizeProperty","shallowProperty","getByteLength","isBufferLike","typedArrayPattern","isTypedArray$1","test","getLength","collectNonEnumProps","hash","l","i","contains","emulatedSet","nonEnumIdx","constructor","proto","prop","isMatch","object","attrs","_keys","_","_wrapped","toBufferView","bufferSource","Uint8Array","byteOffset","valueOf","toJSON","String","tagDataView","eq","a","b","aStack","bStack","deepEq","className","areArrays","isTypedArray","aCtor","bCtor","pop","allKeys","ie11fingerprint","methods","weakMapMethods","forEachName","hasName","commonInit","mapTail","mapMethods","concat","setMethods","isMap","isWeakMap","isSet","isWeakSet","values","invert","result","functions","names","sort","createAssigner","keysFunc","defaults","source","extend","extendOwn","baseCreate","Ctor","toPath","path","deepGet","get","defaultValue","identity","matcher","property","optimizeCb","context","argCount","accumulator","baseIteratee","iteratee","Infinity","cb","noop","random","min","floor","now","Date","getTime","createEscaper","map","escaper","match","join","testRegexp","RegExp","replaceRegexp","string","replace","escapeMap","&","<",">","\"","'","`","_escape","_unescape","templateSettings","evaluate","interpolate","escape","noMatch","escapes","\\","\r","\n","
","
","escapeRegExp","escapeChar","bareIdentifier","idCounter","executeBound","sourceFunc","boundFunc","callingContext","partial","boundArgs","placeholder","bound","position","bind","TypeError","callArgs","isArrayLike","flatten","input","depth","strict","output","idx","j","len","bindAll","Error","delay","wait","setTimeout","defer","negate","predicate","before","times","memo","once","findKey","createPredicateIndexFinder","dir","array","findIndex","findLastIndex","sortedIndex","low","high","mid","createIndexFinder","predicateFind","item","indexOf","lastIndexOf","find","each","results","currentKey","createReduce","reducer","initial","reduce","reduceRight","filter","list","every","some","fromIndex","guard","invoke","contextPath","method","pluck","computed","lastComputed","v","reStrSymbol","toArray","sample","n","last","rand","temp","group","behavior","partition","groupBy","indexBy","countBy","pass","keyInObj","pick","omit","first","difference","without","otherArrays","uniq","isSorted","seen","union","arrays","unzip","zip","chainResult","instance","_chain","chain","mixin","nodeType","parseFloat","pairs","props","interceptor","_has","accum","text","settings","oldSettings","offset","render","argument","variable","e","template","data","fallback","prefix","id","hasher","memoize","cache","address","options","timeout","previous","later","leading","throttled","_now","remaining","clearTimeout","trailing","cancel","immediate","passed","debounced","_args","wrapper","start","criteria","left","right","Boolean","_flatten","argsLength","stop","step","ceil","range","count"],"mappings":"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"}
\ No newline at end of file
diff --git a/web/core/core.libraries.yml b/web/core/core.libraries.yml
index 4612cfeb28..f6644c17e9 100644
--- a/web/core/core.libraries.yml
+++ b/web/core/core.libraries.yml
@@ -2,10 +2,10 @@
 
 backbone:
   remote: https://github.com/jashkenas/backbone
-  version: "1.4.0"
+  version: "1.4.1"
   license:
     name: MIT
-    url: https://raw.githubusercontent.com/jashkenas/backbone/1.4.0/LICENSE
+    url: https://raw.githubusercontent.com/jashkenas/backbone/1.4.1/LICENSE
     gpl-compatible: true
   js:
     assets/vendor/backbone/backbone-min.js: { weight: -19, minified: true }
@@ -157,9 +157,10 @@ ckeditor5.link:
 
 ckeditor5.list:
   remote: https://github.com/ckeditor/ckeditor5
-  version: "34.0.0"
+  version: "34.0.1"
   license:
     name: GNU-GPL-2.0-or-later
+    # @todo A 34.0.1 link does not exist; https://www.drupal.org/project/drupal/issues/3277438 will make this in sync again.
     url: https://github.com/ckeditor/ckeditor5/blob/v34.0.0/LICENSE.md
     gpl-compatible: true
   js:
@@ -1136,10 +1137,10 @@ tabbable.jquery.shim:
 
 underscore:
   remote: https://github.com/jashkenas/underscore
-  version: "1.13.2"
+  version: "1.13.3"
   license:
     name: MIT
-    url: https://raw.githubusercontent.com/jashkenas/underscore/1.13.2/LICENSE
+    url: https://raw.githubusercontent.com/jashkenas/underscore/1.13.3/LICENSE
     gpl-compatible: true
   js:
     assets/vendor/underscore/underscore-min.js: { weight: -20, minified: true }
diff --git a/web/core/lib/Drupal.php b/web/core/lib/Drupal.php
index 2c3ab0d7ec..fdae9e86ed 100644
--- a/web/core/lib/Drupal.php
+++ b/web/core/lib/Drupal.php
@@ -75,7 +75,7 @@ class Drupal {
   /**
    * The current system version.
    */
-  const VERSION = '9.3.12';
+  const VERSION = '9.3.13';
 
   /**
    * Core API compatibility.
diff --git a/web/core/lib/Drupal/Core/Cron.php b/web/core/lib/Drupal/Core/Cron.php
index c45dfbd287..3b0a70c9d7 100644
--- a/web/core/lib/Drupal/Core/Cron.php
+++ b/web/core/lib/Drupal/Core/Cron.php
@@ -174,10 +174,10 @@ protected function processQueues() {
         $this->queueFactory->get($queue_name)->createQueue();
 
         $queue_worker = $this->queueManager->createInstance($queue_name);
-        $end = time() + ($info['cron']['time'] ?? 15);
+        $end = $this->time->getCurrentTime() + $info['cron']['time'];
         $queue = $this->queueFactory->get($queue_name);
-        $lease_time = isset($info['cron']['time']) ?: NULL;
-        while (time() < $end && ($item = $queue->claimItem($lease_time))) {
+        $lease_time = $info['cron']['time'];
+        while ($this->time->getCurrentTime() < $end && ($item = $queue->claimItem($lease_time))) {
           try {
             $queue_worker->processItem($item->data);
             $queue->deleteItem($item);
diff --git a/web/core/lib/Drupal/Core/Database/Schema.php b/web/core/lib/Drupal/Core/Database/Schema.php
index 9083b27492..1c3664de09 100644
--- a/web/core/lib/Drupal/Core/Database/Schema.php
+++ b/web/core/lib/Drupal/Core/Database/Schema.php
@@ -180,7 +180,12 @@ public function tableExists($table) {
    * Finds all tables that are like the specified base table name.
    *
    * @param string $table_expression
-   *   An SQL expression, for example "cache_%" (without the quotes).
+   *   A case-insensitive pattern against which table names are compared. Both
+   *   '_' and '%' are treated like wildcards in MySQL 'LIKE' expressions, where
+   *   '_' matches any single character and '%' matches an arbitrary number of
+   *   characters (including zero characters). So 'foo%bar' matches table names
+   *   like 'foobar', 'fooXBar', 'fooXBaR',  or 'fooXxBar'; whereas 'foo_bar'
+   *   matches 'fooXBar' and 'fooXBaR' but not 'fooBar' or 'fooXxxBar'.
    *
    * @return array
    *   Both the keys and the values are the matching tables.
diff --git a/web/core/lib/Drupal/Core/Queue/DatabaseQueue.php b/web/core/lib/Drupal/Core/Queue/DatabaseQueue.php
index 32a87feb32..2af4360dca 100644
--- a/web/core/lib/Drupal/Core/Queue/DatabaseQueue.php
+++ b/web/core/lib/Drupal/Core/Queue/DatabaseQueue.php
@@ -241,7 +241,7 @@ public function garbageCollection() {
     try {
       // Clean up the queue for failed batches.
       $this->connection->delete(static::TABLE_NAME)
-        ->condition('created', REQUEST_TIME - 864000, '<')
+        ->condition('created', \Drupal::time()->getRequestTime() - 864000, '<')
         ->condition('name', 'drupal_batch:%', 'LIKE')
         ->execute();
 
@@ -252,7 +252,7 @@ public function garbageCollection() {
           'expire' => 0,
         ])
         ->condition('expire', 0, '<>')
-        ->condition('expire', REQUEST_TIME, '<')
+        ->condition('expire', \Drupal::time()->getRequestTime(), '<')
         ->execute();
     }
     catch (\Exception $e) {
diff --git a/web/core/lib/Drupal/Core/Queue/QueueWorkerManager.php b/web/core/lib/Drupal/Core/Queue/QueueWorkerManager.php
index b1aa40f51c..818231d3bf 100644
--- a/web/core/lib/Drupal/Core/Queue/QueueWorkerManager.php
+++ b/web/core/lib/Drupal/Core/Queue/QueueWorkerManager.php
@@ -40,11 +40,16 @@ public function __construct(\Traversable $namespaces, CacheBackendInterface $cac
   public function processDefinition(&$definition, $plugin_id) {
     parent::processDefinition($definition, $plugin_id);
 
-    // Assign a default time if a cron is specified.
+    // Safeguard to ensure the default lease time is used in the case of a
+    // malformed queue worker annotation where cron is specified without a time,
+    // or an invalid time is provided.
+    //
+    // @see \Drupal\Core\Cron::processQueues()
     if (isset($definition['cron'])) {
-      $definition['cron'] += [
-        'time' => 15,
-      ];
+      $time = $definition['cron']['time'] ?? 0;
+      if ($time <= 0) {
+        $definition['cron']['time'] = self::DEFAULT_QUEUE_CRON_TIME;
+      }
     }
   }
 
diff --git a/web/core/lib/Drupal/Core/Queue/QueueWorkerManagerInterface.php b/web/core/lib/Drupal/Core/Queue/QueueWorkerManagerInterface.php
index cb473b1c24..7acf472186 100644
--- a/web/core/lib/Drupal/Core/Queue/QueueWorkerManagerInterface.php
+++ b/web/core/lib/Drupal/Core/Queue/QueueWorkerManagerInterface.php
@@ -9,4 +9,11 @@
  */
 interface QueueWorkerManagerInterface extends PluginManagerInterface {
 
+  /**
+   * The default time duration in seconds spent calling a queue worker.
+   *
+   * @var int
+   */
+  public const DEFAULT_QUEUE_CRON_TIME = 15;
+
 }
diff --git a/web/core/lib/Drupal/Core/Render/Element/FormElement.php b/web/core/lib/Drupal/Core/Render/Element/FormElement.php
index f911d72e85..17e2a1d350 100644
--- a/web/core/lib/Drupal/Core/Render/Element/FormElement.php
+++ b/web/core/lib/Drupal/Core/Render/Element/FormElement.php
@@ -56,6 +56,9 @@
  *   this suffix are wrapped in a <span> element, so the value should not
  *   contain block level HTML. Any HTML must also be valid, i.e. any tags
  *   introduce inside this suffix must also be terminated within the suffix.
+ * - #value: (mixed) A value that cannot be edited by the user.
+ * - #has_garbage_value: (bool) Internal only. Set to TRUE to indicate that the
+ *   #value property of an element should not be used or processed.
  * - #input: (bool, internal) Whether or not the element accepts input.
  * - #parents: (string[], read-only) Array of names of the element's parents
  *   for purposes of getting values out of $form_state. See also
diff --git a/web/core/lib/Drupal/Core/Render/Element/RenderElement.php b/web/core/lib/Drupal/Core/Render/Element/RenderElement.php
index 35814589b3..9f0374b3a9 100644
--- a/web/core/lib/Drupal/Core/Render/Element/RenderElement.php
+++ b/web/core/lib/Drupal/Core/Render/Element/RenderElement.php
@@ -66,6 +66,9 @@
  *   in some cases. See also #attached.
  * - #defaults_loaded: (bool) Set to TRUE during rendering when the defaults
  *   for the element #type have been added to the element.
+ * - #value: (mixed) A value that cannot be edited by the user.
+ * - #has_garbage_value: (bool) Internal only. Set to TRUE to indicate that the
+ *   #value property of an element should not be used or processed.
  * - #id: (string) The HTML ID on the element. This is automatically set for
  *   form elements, but not for all render elements; you can override the
  *   default value or add an ID by setting this property.
diff --git a/web/core/misc/cspell/dictionary.txt b/web/core/misc/cspell/dictionary.txt
index f1b3a56914..3aba30f0d3 100644
--- a/web/core/misc/cspell/dictionary.txt
+++ b/web/core/misc/cspell/dictionary.txt
@@ -32,6 +32,8 @@ alternatif
 amet
 amphibius
 ampm
+analyse
+analysed
 andif
 annot
 anonyme
@@ -203,6 +205,7 @@ camelize
 camelized
 canonicalized
 canonicalizing
+canvastext
 castable
 catalana
 catbro
@@ -254,6 +257,7 @@ codesniffer
 colgroups
 collegehumor
 colonpos
+colour
 colspans
 columnschange
 comida
@@ -758,6 +762,7 @@ linkback
 linkgenerator
 linkification
 linksby
+linktext
 lisu
 litererally
 llamaids
@@ -940,7 +945,6 @@ nodo
 noemptytag
 noevent
 nofields
-noindex
 nojs
 nolink
 nomask
@@ -1152,6 +1156,7 @@ readmore
 readonlydir
 readystate
 realelement
+realise
 realpaths
 realword
 rebuilder
diff --git a/web/core/modules/ckeditor5/ckeditor5.ckeditor5.yml b/web/core/modules/ckeditor5/ckeditor5.ckeditor5.yml
index ffcb033470..3267f83b8b 100644
--- a/web/core/modules/ckeditor5/ckeditor5.ckeditor5.yml
+++ b/web/core/modules/ckeditor5/ckeditor5.ckeditor5.yml
@@ -93,6 +93,52 @@ ckeditor5_wildcardHtmlSupport:
     # @see \Drupal\ckeditor5\Plugin\CKEditor5PluginManagerInterface::getEnabledDefinitions()
     conditions: []
 
+# https://html.spec.whatwg.org/multipage/dom.html#attr-dir
+ckeditor5_globalAttributeDir:
+  ckeditor5:
+    plugins: [htmlSupport.GeneralHtmlSupport]
+    config:
+      htmlSupport:
+        allow:
+          -
+            # @see \Drupal\ckeditor5\Plugin\CKEditor5Plugin\GlobalAttribute::getDynamicPluginConfig()
+            name: ~
+            attributes:
+              - key: dir
+                value:
+                  regexp:
+                    pattern: /^(ltr|rtl)$/
+  drupal:
+    label: Global `dir` attribute
+    class: \Drupal\ckeditor5\Plugin\CKEditor5Plugin\GlobalAttribute
+    # @see \Drupal\filter\Plugin\Filter\FilterHtml::getHTMLRestrictions()
+    elements:
+      - <* dir="ltr rtl">
+    library: core/ckeditor5.htmlSupport
+    conditions:
+      filter: filter_html
+
+# https://html.spec.whatwg.org/multipage/dom.html#attr-lang
+ckeditor5_globalAttributeLang:
+  ckeditor5:
+    plugins: [htmlSupport.GeneralHtmlSupport]
+    config:
+      htmlSupport:
+        allow:
+          -
+            # @see \Drupal\ckeditor5\Plugin\CKEditor5Plugin\GlobalAttribute::getDynamicPluginConfig()
+            name: ~
+            attributes: lang
+  drupal:
+    label: Global `lang` attribute
+    class: \Drupal\ckeditor5\Plugin\CKEditor5Plugin\GlobalAttribute
+    # @see \Drupal\filter\Plugin\Filter\FilterHtml::getHTMLRestrictions()
+    elements:
+      - <* lang>
+    library: core/ckeditor5.htmlSupport
+    conditions:
+      filter: filter_html
+
 ckeditor5_specialCharacters:
   ckeditor5:
     plugins:
@@ -117,7 +163,9 @@ ckeditor5_sourceEditing:
     class: \Drupal\ckeditor5\Plugin\CKEditor5Plugin\SourceEditing
     # This is the only CKEditor 5 plugin allowed to generate a superset of elements.
     # @see \Drupal\ckeditor5\Plugin\CKEditor5Plugin\SourceEditing::getElementsSubset()
-    elements: ['<*>']
+    # @see \Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition::validateDrupalAspects()
+    # @see \Drupal\ckeditor5\Plugin\CKEditor5PluginManager::getProvidedElements()
+    elements: []
     library: core/ckeditor5.sourceEditing
     admin_library: ckeditor5/admin.sourceEditing
     toolbar_items:
@@ -304,11 +352,21 @@ ckeditor5_linkMedia:
 
 ckeditor5_list:
   ckeditor5:
-    plugins: [list.List]
+    plugins:
+     - list.List
+     - list.ListProperties
+    config:
+      list:
+        properties:
+          reversed: true
+          startIndex: true
+          # @todo Make this configurable in https://www.drupal.org/project/drupal/issues/3274635
+          styles: false
   drupal:
     label: List
     library: core/ckeditor5.list
     admin_library: ckeditor5/admin.list
+    class: Drupal\ckeditor5\Plugin\CKEditor5Plugin\ListPlugin
     toolbar_items:
       bulletedList:
         label: Bulleted list
@@ -316,7 +374,7 @@ ckeditor5_list:
         label: Numbered list
     elements:
       - <ul>
-      - <ol>
+      - <ol reversed start>
       - <li>
 
 ckeditor5_horizontalLine:
@@ -427,9 +485,11 @@ ckeditor5_table:
     plugins:
       - table.Table
       - table.TableToolbar
+      - table.TableCaption
+      - table.PlainTableOutput
     config:
       table:
-        contentToolbar: [tableColumn, tableRow, mergeTableCells]
+        contentToolbar: [tableColumn, tableRow, mergeTableCells, toggleTableCaption]
   drupal:
     label: Table
     library: core/ckeditor5.table
@@ -445,6 +505,7 @@ ckeditor5_table:
       - <thead>
       - <tbody>
       - <tfoot>
+      - <caption>
 
 ckeditor5_image:
   ckeditor5:
@@ -569,6 +630,7 @@ media_media:
   ckeditor5:
     plugins:
       - drupalMedia.DrupalMedia
+      - drupalMedia.DrupalElementStyle
     config:
       drupalMedia:
         toolbar: [mediaImageTextAlternative]
@@ -582,7 +644,7 @@ media_media:
     library: ckeditor5/drupal.ckeditor5.media
     class: Drupal\ckeditor5\Plugin\CKEditor5Plugin\Media
     elements:
-      - <drupal-media data-entity-type data-entity-uuid alt>
+      - <drupal-media data-entity-type data-entity-uuid data-view-mode alt>
     conditions:
       filter: media_embed
 
@@ -609,20 +671,20 @@ media_mediaAlign:
       - drupalMedia.DrupalElementStyle
     config:
       drupalElementStyles:
-        options:
-          - name: 'alignRight'
+        align:
+          - name: 'right'
             title: 'Align right and wrap text'
             icon: 'objectRight'
             attributeName: 'data-align'
             attributeValue: 'right'
             modelElements: [ 'drupalMedia' ]
-          - name: 'alignLeft'
+          - name: 'left'
             title: 'Align left and wrap text'
             icon: 'objectLeft'
             attributeName: 'data-align'
             attributeValue: 'left'
             modelElements: [ 'drupalMedia' ]
-          - name: 'alignCenter'
+          - name: 'center'
             title: 'Align center and break text'
             icon: 'objectCenter'
             attributeName: 'data-align'
@@ -636,10 +698,10 @@ media_mediaAlign:
       drupalMedia:
         toolbar:
           - '|'
-          - 'drupalElementStyle:breakText'
-          - 'drupalElementStyle:alignLeft'
-          - 'drupalElementStyle:alignCenter'
-          - 'drupalElementStyle:alignRight'
+          - 'drupalElementStyle:align:breakText'
+          - 'drupalElementStyle:align:left'
+          - 'drupalElementStyle:align:center'
+          - 'drupalElementStyle:align:right'
           - '|'
   drupal:
     label: Media align
diff --git a/web/core/modules/ckeditor5/ckeditor5.libraries.yml b/web/core/modules/ckeditor5/ckeditor5.libraries.yml
index 87ffcf4687..7c9dd65800 100644
--- a/web/core/modules/ckeditor5/ckeditor5.libraries.yml
+++ b/web/core/modules/ckeditor5/ckeditor5.libraries.yml
@@ -111,16 +111,11 @@ ie11.filter.warnings:
 drupal.ckeditor5.filter.admin:
   js:
     js/ckeditor5.filter.admin.js: {}
-  css:
-    theme:
-      css/filter.admin.css: { }
   dependencies:
     - core/drupal
-    - core/drupal.message
     - core/once
     - core/drupal.ajax
     - core/drupalSettings
-    - core/drupal.message
 
 admin:
   js:
diff --git a/web/core/modules/ckeditor5/config/schema/ckeditor5.schema.yml b/web/core/modules/ckeditor5/config/schema/ckeditor5.schema.yml
index 09b8165759..03b39e4c08 100644
--- a/web/core/modules/ckeditor5/config/schema/ckeditor5.schema.yml
+++ b/web/core/modules/ckeditor5/config/schema/ckeditor5.schema.yml
@@ -85,3 +85,20 @@ ckeditor5.plugin.ckeditor5_sourceEditing:
         label: 'Allowed Tag'
         constraints:
           SourceEditingRedundantTags: []
+          SourceEditingPreventSelfXssConstraint: []
+
+# Plugin \Drupal\ckeditor5\Plugin\CKEditor5Plugin\ListPlugin
+ckeditor5.plugin.ckeditor5_list:
+  type: mapping
+  label: List
+  mapping:
+    reversed:
+      type: boolean
+      label: 'Allow reverse list'
+      constraints:
+        NotNull: []
+    startIndex:
+      type: boolean
+      label: 'Allow start index'
+      constraints:
+        NotNull: []
diff --git a/web/core/modules/ckeditor5/css/filter.admin.css b/web/core/modules/ckeditor5/css/filter.admin.css
deleted file mode 100644
index dc9c54cbb3..0000000000
--- a/web/core/modules/ckeditor5/css/filter.admin.css
+++ /dev/null
@@ -1,4 +0,0 @@
-.ckeditor5-filter-attention {
-  padding: 4px;
-  outline: 1px red dashed;
-}
diff --git a/web/core/modules/ckeditor5/js/build/drupalMedia.js b/web/core/modules/ckeditor5/js/build/drupalMedia.js
index 9a9dd05a30..6e3676c201 100644
--- a/web/core/modules/ckeditor5/js/build/drupalMedia.js
+++ b/web/core/modules/ckeditor5/js/build/drupalMedia.js
@@ -1 +1 @@
-!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.CKEditor5=t():(e.CKEditor5=e.CKEditor5||{},e.CKEditor5.drupalMedia=t())}(self,(function(){return function(){var e={"ckeditor5/src/core.js":function(e,t,i){e.exports=i("dll-reference CKEditor5.dll")("./src/core.js")},"ckeditor5/src/engine.js":function(e,t,i){e.exports=i("dll-reference CKEditor5.dll")("./src/engine.js")},"ckeditor5/src/ui.js":function(e,t,i){e.exports=i("dll-reference CKEditor5.dll")("./src/ui.js")},"ckeditor5/src/utils.js":function(e,t,i){e.exports=i("dll-reference CKEditor5.dll")("./src/utils.js")},"ckeditor5/src/widget.js":function(e,t,i){e.exports=i("dll-reference CKEditor5.dll")("./src/widget.js")},"dll-reference CKEditor5.dll":function(e){"use strict";e.exports=CKEditor5.dll}},t={};function i(n){var a=t[n];if(void 0!==a)return a.exports;var r=t[n]={exports:{}};return e[n](r,r.exports,i),r.exports}i.d=function(e,t){for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};var n={};return function(){"use strict";i.d(n,{default:function(){return se}});var e=i("ckeditor5/src/core.js"),t=i("ckeditor5/src/widget.js");class a extends e.Command{execute(e){const t=this.editor.plugins.get("DrupalMediaEditing"),i=Object.entries(t.attrs).reduce(((e,[t,i])=>(e[i]=t,e)),{}),n=Object.keys(e).reduce(((t,n)=>(i[n]&&(t[i[n]]=e[n]),t)),{});if(this.editor.plugins.has("DrupalElementStyleEditing")){const t=this.editor.plugins.get("DrupalElementStyleEditing");for(const i of t.normalizedStyles)if(e[i.attributeName]&&i.attributeValue===e[i.attributeName]){n.drupalElementStyle=i.name;break}}this.editor.model.change((e=>{this.editor.model.insertContent(function(e,t){return e.createElement("drupalMedia",t)}(e,n))}))}refresh(){const e=this.editor.model,t=e.document.selection,i=e.schema.findAllowedParent(t.getFirstPosition(),"drupalMedia");this.isEnabled=null!==i}}function r(e){return!!e&&e.is("element","drupalMedia")}function o(e){return(0,t.isWidget)(e)&&!!e.getCustomProperty("drupalMedia")}function l(e){const t=e.getSelectedElement();return r(t)?t:e.getFirstPosition().findAncestor("drupalMedia")}function s(e){const t=e.getSelectedElement();if(t&&o(t))return t;let i=e.getFirstPosition().parent;for(;i;){if(i.is("element")&&o(i))return i;i=i.parent}return null}function d(e){const t=typeof e;return null!=e&&("object"===t||"function"===t)}function u(e){for(const t of e){if(t.hasAttribute("data-drupal-media-preview"))return t;if(t.childCount){const e=u(t.getChildren());if(e)return e}}return null}class c extends e.Plugin{static get requires(){return[t.Widget]}init(){this.attrs={drupalMediaAlt:"alt",drupalMediaEntityType:"data-entity-type",drupalMediaEntityUuid:"data-entity-uuid",drupalMediaViewMode:"data-view-mode"};const e=this.editor.config.get("drupalMedia");if(!e)return;const{previewURL:t,themeError:i}=e;this.previewUrl=t,this.labelError=Drupal.t("Preview failed"),this.themeError=i||`\n      <p>${Drupal.t("An error occurred while trying to preview the media. Please save your work and reload this page.")}<p>\n    `,this._defineSchema(),this._defineConverters(),this.editor.commands.add("insertDrupalMedia",new a(this.editor))}async _fetchPreview(e){const t={text:this._renderElement(e),uuid:e.getAttribute("drupalMediaEntityUuid")},i=await fetch(`${this.previewUrl}?${new URLSearchParams(t)}`,{headers:{"X-Drupal-MediaPreview-CSRF-Token":this.editor.config.get("drupalMedia").previewCsrfToken}});if(i.ok){return{label:i.headers.get("drupal-media-label"),preview:await i.text()}}return{label:this.labelError,preview:this.themeError}}_defineSchema(){this.editor.model.schema.register("drupalMedia",{allowWhere:"$block",isObject:!0,isContent:!0,isBlock:!0,allowAttributes:Object.keys(this.attrs)}),this.editor.editing.view.domConverter.blockElements.push("drupal-media")}_defineConverters(){const e=this.editor.conversion;e.for("upcast").elementToElement({view:{name:"drupal-media"},model:"drupalMedia"}),e.for("dataDowncast").elementToElement({model:"drupalMedia",view:{name:"drupal-media"}}),e.for("editingDowncast").elementToElement({model:"drupalMedia",view:(e,{writer:i})=>{const n=i.createContainerElement("figure",{class:"drupal-media"});if(!this.previewUrl){const e=i.createRawElement("div",{"data-drupal-media-preview":"unavailable"});i.insert(i.createPositionAt(n,0),e)}return i.setCustomProperty("drupalMedia",!0,n),(0,t.toWidget)(n,i,{label:Drupal.t("Media widget")})}}).add((e=>{const t=(e,t,i)=>{const n=i.writer,a=t.item,r=i.mapper.toViewElement(t.item);let o=u(r.getChildren());if(o){if("ready"!==o.getAttribute("data-drupal-media-preview"))return;n.setAttribute("data-drupal-media-preview","loading",o)}else o=n.createRawElement("div",{"data-drupal-media-preview":"loading"}),n.insert(n.createPositionAt(r,0),o);this._fetchPreview(a).then((({label:e,preview:t})=>{o&&this.editor.editing.view.change((i=>{const n=i.createRawElement("div",{"data-drupal-media-preview":"ready","aria-label":e},(e=>{e.innerHTML=t}));i.insert(i.createPositionBefore(o),n),i.remove(o)}))}))};return e.on("attribute:drupalMediaEntityUuid:drupalMedia",t),e.on("attribute:drupalMediaViewMode:drupalMedia",t),e.on("attribute:drupalMediaEntityType:drupalMedia",t),e.on("attribute:drupalMediaAlt:drupalMedia",t),e})),e.for("editingDowncast").add((e=>{e.on("attribute:drupalElementStyle:drupalMedia",((e,t,i)=>{const n={alignLeft:"drupal-media-style-align-left",alignRight:"drupal-media-style-align-right",alignCenter:"drupal-media-style-align-center"},a=i.mapper.toViewElement(t.item),r=i.writer;n[t.attributeOldValue]&&r.removeClass(n[t.attributeOldValue],a),n[t.attributeNewValue]&&i.consumable.consume(t.item,e.name)&&r.addClass(n[t.attributeNewValue],a)}))})),Object.keys(this.attrs).forEach((t=>{const i={model:{key:t,name:"drupalMedia"},view:{name:"drupal-media",key:this.attrs[t]}};e.for("dataDowncast").attributeToAttribute(i),e.for("upcast").attributeToAttribute(i)}))}_renderElement(e){const t=this.editor.model.change((t=>{const i=t.createDocumentFragment(),n=t.cloneElement(e,!1);return["linkHref"].forEach((e=>{t.removeAttribute(e,n)})),t.append(n,i),i}));return this.editor.data.stringify(t)}static get pluginName(){return"DrupalMediaEditing"}}var m=i("ckeditor5/src/ui.js");class p extends e.Plugin{init(){const e=this.editor,t=this.editor.config.get("drupalMedia");if(!t)return;const{libraryURL:i,openDialog:n,dialogSettings:a={}}=t;i&&"function"==typeof n&&e.ui.componentFactory.add("drupalMedia",(t=>{const r=e.commands.get("insertDrupalMedia"),o=new m.ButtonView(t);return o.set({label:Drupal.t("Insert Drupal Media"),icon:'<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M19.1873 4.86414L10.2509 6.86414V7.02335H10.2499V15.5091C9.70972 15.1961 9.01793 15.1048 8.34069 15.3136C7.12086 15.6896 6.41013 16.8967 6.75322 18.0096C7.09631 19.1226 8.3633 19.72 9.58313 19.344C10.6666 19.01 11.3484 18.0203 11.2469 17.0234H11.2499V9.80173L18.1803 8.25067V14.3868C17.6401 14.0739 16.9483 13.9825 16.2711 14.1913C15.0513 14.5674 14.3406 15.7744 14.6836 16.8875C15.0267 18.0004 16.2937 18.5978 17.5136 18.2218C18.597 17.8877 19.2788 16.8982 19.1773 15.9011H19.1803V8.02687L19.1873 8.0253V4.86414Z" fill="black"/><path fill-rule="evenodd" clip-rule="evenodd" d="M13.5039 0.743652H0.386932V12.1603H13.5039V0.743652ZM12.3379 1.75842H1.55289V11.1454H1.65715L4.00622 8.86353L6.06254 10.861L9.24985 5.91309L11.3812 9.22179L11.7761 8.6676L12.3379 9.45621V1.75842ZM6.22048 4.50869C6.22048 5.58193 5.35045 6.45196 4.27722 6.45196C3.20398 6.45196 2.33395 5.58193 2.33395 4.50869C2.33395 3.43546 3.20398 2.56543 4.27722 2.56543C5.35045 2.56543 6.22048 3.43546 6.22048 4.50869Z" fill="black"/></svg>\n',tooltip:!0}),o.bind("isOn","isEnabled").to(r,"value","isEnabled"),this.listenTo(o,"execute",(()=>{n(i,(({attributes:t})=>{e.execute("insertDrupalMedia",t)}),a)})),o}))}}class g extends e.Plugin{static get requires(){return[t.WidgetToolbarRepository]}static get pluginName(){return"DrupalMediaToolbar"}afterInit(){const{editor:e}=this;var i;e.plugins.get(t.WidgetToolbarRepository).register("drupalMedia",{ariaLabel:Drupal.t("Drupal Media toolbar"),items:(i=e.config.get("drupalMedia.toolbar"),i.map((e=>d(e)?e.name:e))||[]),getRelatedElement:e=>s(e)})}}const h="METADATA_ERROR";class f extends e.Command{refresh(){const e=l(this.editor.model.document.selection);this.isEnabled=!!e&&e.getAttribute("drupalMediaIsImage")&&e.getAttribute("drupalMediaIsImage")!==h,this.isEnabled?this.value=e.getAttribute("drupalMediaAlt"):this.value=!1}execute(e){const{model:t}=this.editor,i=l(t.document.selection);e.newValue=e.newValue.trim(),t.change((t=>{e.newValue.length>0?t.setAttribute("drupalMediaAlt",e.newValue,i):t.removeAttribute("drupalMediaAlt",i)}))}}class b extends e.Plugin{init(){this._data=new WeakMap}getMetadata(e){if(this._data.get(e))return new Promise((t=>{t(this._data.get(e))}));const t=this.editor.config.get("drupalMedia");if(!t)return new Promise(((e,t)=>{t(new Error("drupalMedia configuration is required for parsing metadata."))}));if(!e.hasAttribute("drupalMediaEntityUuid"))return new Promise(((e,t)=>{t(new Error("drupalMedia element must have drupalMediaEntityUuid attribute to retrieve metadata."))}));const{metadataUrl:i}=t;return(async e=>{const t=await fetch(e);if(t.ok)return JSON.parse(await t.text());throw new Error("Fetching media embed metadata from the server failed.")})(`${i}&${new URLSearchParams({uuid:e.getAttribute("drupalMediaEntityUuid")})}`).then((t=>(this._data.set(e,t),t)))}static get pluginName(){return"DrupalMediaMetadataRepository"}}class w extends e.Plugin{static get requires(){return[b]}static get pluginName(){return"MediaImageTextAlternativeEditing"}_upcastDrupalMediaIsImage(e){const{model:t,plugins:i}=this.editor;i.get("DrupalMediaMetadataRepository").getMetadata(e).then((i=>{e&&t.enqueueChange({isUndoable:!1},(t=>{t.setAttribute("drupalMediaIsImage",!!i.imageSourceMetadata,e)}))})).catch((i=>{e&&(console.warn(i.toString()),t.enqueueChange({isUndoable:!1},(t=>{t.setAttribute("drupalMediaIsImage",h,e)})))}))}init(){const{editor:e,editor:{model:t,conversion:i}}=this;t.schema.extend("drupalMedia",{allowAttributes:["drupalMediaIsImage"]}),this.listenTo(t,"insertContent",((e,[t])=>{r(t)&&this._upcastDrupalMediaIsImage(t)})),i.for("upcast").add((e=>{e.on("element:drupal-media",((e,t)=>{const[i]=t.modelRange.getItems();r(i)&&this._upcastDrupalMediaIsImage(i)}),{priority:"lowest"})})),i.for("editingDowncast").add((e=>{e.on("attribute:drupalMediaIsImage",((e,t,i)=>{const{writer:n,mapper:a}=i,r=a.toViewElement(t.item);if(t.attributeNewValue!==h){const e=Array.from(r.getChildren()).find((e=>e.getCustomProperty("drupalMediaMetadataError")));return void(e&&(n.setCustomProperty("widgetLabel",e.getCustomProperty("drupalMediaOriginalWidgetLabel"),e),n.removeElement(e)))}const o=Drupal.t("Not all functionality may be available because some information could not be retrieved."),l=new m.TooltipView;l.text=o,l.position="sw";const s=new m.Template({tag:"span",children:[{tag:"span",attributes:{class:"drupal-media__metadata-error-icon"}},l]}).render(),d=n.createRawElement("div",{class:"drupal-media__metadata-error"},((e,t)=>{t.setContentOf(e,s.outerHTML)}));n.setCustomProperty("drupalMediaMetadataError",!0,d);const u=r.getCustomProperty("widgetLabel");n.setCustomProperty("drupalMediaOriginalWidgetLabel",u,d),n.setCustomProperty("widgetLabel",`${u} (${o})`,r),n.insert(n.createPositionAt(r,0),d)}),{priority:"low"})})),e.commands.add("mediaImageTextAlternative",new f(this.editor))}}function v(e){const t=e.editing.view,i=m.BalloonPanelView.defaultPositions;return{target:t.domConverter.viewToDom(t.document.selection.getSelectedElement()),positions:[i.northArrowSouth,i.northArrowSouthWest,i.northArrowSouthEast,i.southArrowNorth,i.southArrowNorthWest,i.southArrowNorthEast]}}var y=i("ckeditor5/src/utils.js");class E extends m.View{constructor(t){super(t),this.focusTracker=new y.FocusTracker,this.keystrokes=new y.KeystrokeHandler,this.labeledInput=this._createLabeledInputView(),this.set("defaultAltText",void 0),this.defaultAltTextView=this._createDefaultAltTextView(),this.saveButtonView=this._createButton(Drupal.t("Save"),e.icons.check,"ck-button-save"),this.saveButtonView.type="submit",this.cancelButtonView=this._createButton(Drupal.t("Cancel"),e.icons.cancel,"ck-button-cancel","cancel"),this._focusables=new m.ViewCollection,this._focusCycler=new m.FocusCycler({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}}),this.setTemplate({tag:"form",attributes:{class:["ck","ck-media-alternative-text-form","ck-vertical-form"],tabindex:"-1"},children:[this.defaultAltTextView,this.labeledInput,this.saveButtonView,this.cancelButtonView]}),(0,m.injectCssTransitionDisabler)(this)}render(){super.render(),this.keystrokes.listenTo(this.element),(0,m.submitHandler)({view:this}),[this.labeledInput,this.saveButtonView,this.cancelButtonView].forEach((e=>{this._focusables.add(e),this.focusTracker.add(e.element)}))}_createButton(e,t,i,n){const a=new m.ButtonView(this.locale);return a.set({label:e,icon:t,tooltip:!0}),a.extendTemplate({attributes:{class:i}}),n&&a.delegate("execute").to(this,n),a}_createLabeledInputView(){const e=new m.LabeledFieldView(this.locale,m.createLabeledInputText);return e.label=Drupal.t("Alternative text override"),e}_createDefaultAltTextView(){const e=m.Template.bind(this,this);return new m.Template({tag:"div",attributes:{class:["ck-media-alternative-text-form__default-alt-text",e.if("defaultAltText","ck-hidden",(e=>!e))]},children:[{tag:"strong",attributes:{class:"ck-media-alternative-text-form__default-alt-text-label"},children:[Drupal.t("Default alternative text:")]}," ",{tag:"span",attributes:{class:"ck-media-alternative-text-form__default-alt-text-value"},children:[{text:[e.to("defaultAltText")]}]}]})}}class M extends e.Plugin{static get requires(){return[m.ContextualBalloon]}static get pluginName(){return"MediaImageTextAlternativeUi"}init(){this._createButton(),this._createForm()}destroy(){super.destroy(),this._form.destroy()}_createButton(){const t=this.editor;t.ui.componentFactory.add("mediaImageTextAlternative",(i=>{const n=t.commands.get("mediaImageTextAlternative"),a=new m.ButtonView(i);return a.set({label:Drupal.t("Override media image alternative text"),icon:e.icons.lowVision,tooltip:!0}),a.bind("isVisible").to(n,"isEnabled"),this.listenTo(a,"execute",(()=>{this._showForm()})),a}))}_createForm(){const e=this.editor,t=e.editing.view.document;this._balloon=this.editor.plugins.get("ContextualBalloon"),this._form=new E(e.locale),this._form.render(),this.listenTo(this._form,"submit",(()=>{e.execute("mediaImageTextAlternative",{newValue:this._form.labeledInput.fieldView.element.value}),this._hideForm(!0)})),this.listenTo(this._form,"cancel",(()=>{this._hideForm(!0)})),this._form.keystrokes.set("Esc",((e,t)=>{this._hideForm(!0),t()})),this.listenTo(e.ui,"update",(()=>{s(t.selection)?this._isVisible&&function(e){const t=e.plugins.get("ContextualBalloon");if(s(e.editing.view.document.selection)){const i=v(e);t.updatePosition(i)}}(e):this._hideForm(!0)})),(0,m.clickOutsideHandler)({emitter:this._form,activator:()=>this._isVisible,contextElements:[this._balloon.view.element],callback:()=>this._hideForm()})}_showForm(){if(this._isVisible)return;const e=this.editor,t=e.commands.get("mediaImageTextAlternative"),i=e.plugins.get("DrupalMediaMetadataRepository"),n=this._form.labeledInput;this._form.disableCssTransitions(),this._isInBalloon||this._balloon.add({view:this._form,position:v(e)}),n.fieldView.element.value=t.value||"",n.fieldView.value=n.fieldView.element.value,this._form.defaultAltText="";const a=e.model.document.selection.getSelectedElement();r(a)&&i.getMetadata(a).then((e=>{this._form.defaultAltText=e.imageSourceMetadata?e.imageSourceMetadata.alt:""})).catch((e=>{console.warn(e.toString())})),this._form.labeledInput.fieldView.select(),this._form.enableCssTransitions()}_hideForm(e){this._isInBalloon&&(this._form.focusTracker.isFocused&&this._form.saveButtonView.focus(),this._balloon.remove(this._form),e&&this.editor.editing.view.focus())}get _isVisible(){return this._balloon.visibleView===this._form}get _isInBalloon(){return this._balloon.hasView(this._form)}}class k extends e.Plugin{static get requires(){return[w,M]}static get pluginName(){return"MediaImageTextAlternative"}}function C(e,t,i){if(t.attributes)for(const[n,a]of Object.entries(t.attributes))e.setAttribute(n,a,i);t.styles&&e.setStyle(t.styles,i),t.classes&&e.addClass(t.classes,i)}function _(e,t,i){if(!i.consumable.consume(t.item,e.name))return;const n=i.mapper.toViewElement(t.item);C(i.writer,t.attributeNewValue,n)}class A extends e.Plugin{constructor(e){if(super(e),!e.plugins.has("GeneralHtmlSupport"))return;e.plugins.has("DataFilter")&&e.plugins.has("DataSchema")||console.error("DataFilter and DataSchema plugins are required for Drupal Media to integrate with General HTML Support plugin.");const{schema:t}=e.model,{conversion:i}=e,n=this.editor.plugins.get("DataFilter");this.editor.plugins.get("DataSchema").registerBlockElement({model:"drupalMedia",view:"drupal-media"}),n.on("register:drupal-media",((e,a)=>{"drupalMedia"===a.model&&(t.extend("drupalMedia",{allowAttributes:["htmlLinkAttributes","htmlAttributes"]}),i.for("upcast").add(function(e){return t=>{t.on("element:drupal-media",((t,i,n)=>{function a(t,a){const r=e._consumeAllowedAttributes(t,n);r&&n.writer.setAttribute(a,r,i.modelRange)}const r=i.viewItem,o=r.parent;a(r,"htmlAttributes"),o.is("element","a")&&a(o,"htmlLinkAttributes")}),{priority:"low"})}}(n)),i.for("editingDowncast").add((e=>{e.on("attribute:linkHref:drupalMedia",((e,t,i)=>{if(!i.consumable.consume(t.item,"attribute:htmlLinkAttributes:drupalMedia"))return;const n=i.mapper.toViewElement(t.item),a=function(e,t,i){const n=e.createRangeOn(t);for(const{item:e}of n.getWalker())if(e.is("element",i))return e}(i.writer,n,"a");C(i.writer,t.item.getAttribute("htmlLinkAttributes"),a)}),{priority:"low"})})),i.for("dataDowncast").add((e=>{e.on("attribute:linkHref:drupalMedia",((e,t,i)=>{if(!i.consumable.consume(t.item,"attribute:htmlLinkAttributes:drupalMedia"))return;const n=i.mapper.toViewElement(t.item).parent;C(i.writer,t.item.getAttribute("htmlLinkAttributes"),n)}),{priority:"low"}),e.on("attribute:htmlAttributes:drupalMedia",_,{priority:"low"})})),e.stop())}))}static get pluginName(){return"DrupalMediaGeneralHtmlSupport"}}class x extends e.Plugin{static get requires(){return[c,A,p,g,k]}static get pluginName(){return"DrupalMedia"}}var D=i("ckeditor5/src/engine.js");function S(e){return Array.from(e.getChildren()).find((e=>"drupal-media"===e.name))}function V(e){return t=>{t.on(`attribute:${e.id}:drupalMedia`,((t,i,n)=>{const a=n.mapper.toViewElement(i.item);let r=Array.from(a.getChildren()).find((e=>"a"===e.name));if(r=!r&&a.is("element","a")?a:Array.from(a.getAncestors()).find((e=>"a"===e.name)),r){for(const[t,i]of(0,y.toMap)(e.attributes))n.writer.setAttribute(t,i,r);e.classes&&n.writer.addClass(e.classes,r);for(const t in e.styles)Object.prototype.hasOwnProperty.call(e.styles,t)&&n.writer.setStyle(t,e.styles[t],r)}}))}}function I(e,t){return e=>{e.on("element:a",((e,i,n)=>{const a=i.viewItem;if(!S(a))return;const r=new D.Matcher(t._createPattern()).match(a);if(!r)return;if(!n.consumable.consume(a,r.match))return;const o=i.modelCursor.nodeBefore;n.writer.setAttribute(t.id,!0,o)}),{priority:"high"})}}class T extends e.Plugin{static get requires(){return["LinkEditing","DrupalMediaEditing"]}static get pluginName(){return"DrupalLinkMediaEditing"}init(){const{editor:e}=this;e.model.schema.extend("drupalMedia",{allowAttributes:["linkHref"]}),e.conversion.for("upcast").add((e=>{e.on("element:a",((e,t,i)=>{const n=t.viewItem,a=S(n);if(!a)return;if(!i.consumable.consume(n,{attributes:["href"],name:!0}))return;const r=n.getAttribute("href");if(!r)return;const o=i.convertItem(a,t.modelCursor);t.modelRange=o.modelRange,t.modelCursor=o.modelCursor;const l=t.modelCursor.nodeBefore;l&&l.is("element","drupalMedia")&&i.writer.setAttribute("linkHref",r,l)}),{priority:"high"})})),e.conversion.for("editingDowncast").add((e=>{e.on("attribute:linkHref:drupalMedia",((e,t,i)=>{const{writer:n}=i;if(!i.consumable.consume(t.item,e.name))return;const a=i.mapper.toViewElement(t.item),r=Array.from(a.getChildren()).find((e=>"a"===e.name));if(r)t.attributeNewValue?n.setAttribute("href",t.attributeNewValue,r):(n.move(n.createRangeIn(r),n.createPositionAt(a,0)),n.remove(r));else{const e=Array.from(a.getChildren()).find((e=>e.getAttribute("data-drupal-media-preview"))),i=n.createContainerElement("a",{href:t.attributeNewValue});n.insert(n.createPositionAt(a,0),i),n.move(n.createRangeOn(e),n.createPositionAt(i,0))}}),{priority:"high"})})),e.conversion.for("dataDowncast").add((e=>{e.on("attribute:linkHref:drupalMedia",((e,t,i)=>{const{writer:n}=i;if(!i.consumable.consume(t.item,e.name))return;const a=i.mapper.toViewElement(t.item),r=n.createContainerElement("a",{href:t.attributeNewValue});n.insert(n.createPositionBefore(a),r),n.move(n.createRangeOn(a),n.createPositionAt(r,0))}),{priority:"high"})})),this._enableManualDecorators()}_enableManualDecorators(){const e=this.editor,t=e.commands.get("link");for(const i of t.manualDecorators)e.model.schema.extend("drupalMedia",{allowAttributes:i.id}),e.conversion.for("downcast").add(V(i)),e.conversion.for("upcast").add(I(0,i))}}class P extends e.Plugin{static get requires(){return["LinkEditing","LinkUI","DrupalMediaEditing"]}static get pluginName(){return"DrupalLinkMediaUi"}init(){const{editor:e}=this,t=e.editing.view.document;this.listenTo(t,"click",((t,i)=>{this._isSelectedLinkedMedia(e.model.document.selection)&&(i.preventDefault(),t.stop())}),{priority:"high"}),this._createToolbarLinkMediaButton()}_createToolbarLinkMediaButton(){const{editor:e}=this;e.ui.componentFactory.add("drupalLinkMedia",(t=>{const i=new m.ButtonView(t),n=e.plugins.get("LinkUI"),a=e.commands.get("link");return i.set({isEnabled:!0,label:Drupal.t("Link media"),icon:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="m11.077 15 .991-1.416a.75.75 0 1 1 1.229.86l-1.148 1.64a.748.748 0 0 1-.217.206 5.251 5.251 0 0 1-8.503-5.955.741.741 0 0 1 .12-.274l1.147-1.639a.75.75 0 1 1 1.228.86L4.933 10.7l.006.003a3.75 3.75 0 0 0 6.132 4.294l.006.004zm5.494-5.335a.748.748 0 0 1-.12.274l-1.147 1.639a.75.75 0 1 1-1.228-.86l.86-1.23a3.75 3.75 0 0 0-6.144-4.301l-.86 1.229a.75.75 0 0 1-1.229-.86l1.148-1.64a.748.748 0 0 1 .217-.206 5.251 5.251 0 0 1 8.503 5.955zm-4.563-2.532a.75.75 0 0 1 .184 1.045l-3.155 4.505a.75.75 0 1 1-1.229-.86l3.155-4.506a.75.75 0 0 1 1.045-.184z"/></svg>\n',keystroke:"Ctrl+K",tooltip:!0,isToggleable:!0}),i.bind("isEnabled").to(a,"isEnabled"),i.bind("isOn").to(a,"value",(e=>!!e)),this.listenTo(i,"execute",(()=>{this._isSelectedLinkedMedia(e.model.document.selection)?n._addActionsView():n._showUI(!0)})),i}))}_isSelectedLinkedMedia(e){const t=e.getSelectedElement();return!!t&&t.is("element","drupalMedia")&&t.hasAttribute("linkHref")}}class L extends e.Plugin{static get requires(){return[T,P]}static get pluginName(){return"DrupalLinkMedia"}}const{objectFullWidth:B,objectInline:N,objectLeft:O,objectRight:R,objectCenter:F,objectBlockLeft:j,objectBlockRight:U}=e.icons,H={get inline(){return{name:"inline",title:"In line",icon:N,modelElements:["imageInline"],isDefault:!0}},get alignLeft(){return{name:"alignLeft",title:"Left aligned image",icon:O,modelElements:["imageBlock","imageInline"],className:"image-style-align-left"}},get alignBlockLeft(){return{name:"alignBlockLeft",title:"Left aligned image",icon:j,modelElements:["imageBlock"],className:"image-style-block-align-left"}},get alignCenter(){return{name:"alignCenter",title:"Centered image",icon:F,modelElements:["imageBlock"],className:"image-style-align-center"}},get alignRight(){return{name:"alignRight",title:"Right aligned image",icon:R,modelElements:["imageBlock","imageInline"],className:"image-style-align-right"}},get alignBlockRight(){return{name:"alignBlockRight",title:"Right aligned image",icon:U,modelElements:["imageBlock"],className:"image-style-block-align-right"}},get block(){return{name:"block",title:"Centered image",icon:F,modelElements:["imageBlock"],isDefault:!0}},get side(){return{name:"side",title:"Side image",icon:R,modelElements:["imageBlock"],className:"image-style-side"}}},W={full:B,left:j,right:U,center:F,inlineLeft:O,inlineRight:R,inline:N},q=[{name:"imageStyle:wrapText",title:"Wrap text",defaultItem:"imageStyle:alignLeft",items:["imageStyle:alignLeft","imageStyle:alignRight"]},{name:"imageStyle:breakText",title:"Break text",defaultItem:"imageStyle:block",items:["imageStyle:alignBlockLeft","imageStyle:block","imageStyle:alignBlockRight"]}];function K(e){(0,y.logWarning)("image-style-configuration-definition-invalid",e)}var $={normalizeStyles:function(e){return(e.configuredStyles.options||[]).map((e=>function(e){e="string"==typeof e?H[e]?{...H[e]}:{name:e}:function(e,t){const i={...t};for(const n in e)Object.prototype.hasOwnProperty.call(t,n)||(i[n]=e[n]);return i}(H[e.name],e);"string"==typeof e.icon&&(e.icon=W[e.icon]||e.icon);return e}(e))).filter((t=>function(e,{isBlockPluginLoaded:t,isInlinePluginLoaded:i}){const{modelElements:n,name:a}=e;if(!(n&&n.length&&a))return K({style:e}),!1;{const a=[t?"imageBlock":null,i?"imageInline":null];if(!n.some((e=>a.includes(e))))return(0,y.logWarning)("image-style-missing-dependency",{style:e,missingPlugins:n.map((e=>"imageBlock"===e?"ImageBlockEditing":"ImageInlineEditing"))}),!1}return!0}(t,e)))},getDefaultStylesConfiguration:function(e,t){return e&&t?{options:["inline","alignLeft","alignRight","alignCenter","alignBlockLeft","alignBlockRight","block","side"]}:e?{options:["block","side"]}:t?{options:["inline","alignLeft","alignRight"]}:{}},getDefaultDropdownDefinitions:function(e){return e.has("ImageBlockEditing")&&e.has("ImageInlineEditing")?[...q]:[]},warnInvalidStyle:K,DEFAULT_OPTIONS:H,DEFAULT_ICONS:W,DEFAULT_DROPDOWN_DEFINITIONS:q};function z(e,t){const i=e.getSelectedElement();if(i&&t.checkAttribute(i,"drupalElementStyle"))return i;let n=e.getFirstPosition().parent;for(;n;){if(n.is("element")&&t.checkAttribute(n,"drupalElementStyle"))return n;n=n.parent}return null}class Z extends e.Command{constructor(e,t){super(e),this._styles=new Map(t.map((e=>[e.name,e])))}refresh(){const e=this.editor,t=z(e.model.document.selection,e.model.schema);if(this.isEnabled=!!t,this.isEnabled){if(this.value=t.getAttribute("drupalElementStyle"),!this.value)for(const[e,i]of this._styles.entries())if(i.isDefault){if(i.modelElements.find((e=>t.is("element",e)))){this.value=e;break}}}else this.value=!1}execute(e={}){const t=this.editor.model;t.change((i=>{const n=e.value,a=z(t.document.selection,t.schema);!n||this._styles.get(n).isDefault?i.removeAttribute("drupalElementStyle",a):i.setAttribute("drupalElementStyle",n,a)}))}}function G(e,t){for(const i of t)if(i.name===e)return i}class J extends e.Plugin{init(){const t=this.editor;t.config.define("drupalElementStyles",{options:[]});const i=t.config.get("drupalElementStyles").options;this.normalizedStyles=i.map((t=>("string"==typeof t.icon&&e.icons[t.icon]&&(t.icon=e.icons[t.icon]),t))).filter((e=>e.isDefault||e.attributeName&&e.attributeValue?e.modelElements&&Array.isArray(e.modelElements)?!!e.name||(console.warn("drupalElementStyles options must include a name."),!1):(console.warn("drupalElementStyles options must include an array of supported modelElements."),!1):(console.warn("drupalElementStyles options must include attributeName and attributeValue."),!1))),this._setupConversion(),t.commands.add("drupalElementStyle",new Z(t,this.normalizedStyles))}_setupConversion(){const e=this.editor,t=e.model.schema,i=(n=this.normalizedStyles,(e,t,i)=>{if(!i.consumable.consume(t.item,e.name))return;const a=G(t.attributeNewValue,n),r=G(t.attributeOldValue,n),o=i.mapper.toViewElement(t.item),l=i.writer;r&&("class"===r.attributeName?l.removeClass(r.attributeValue,o):l.removeAttribute(r.attributeName,o)),a&&("class"===a.attributeName?l.addClass(a.attributeValue,o):l.setAttribute(a.attributeName,a.attributeValue,o))});var n;const a=function(e){const t=e.filter((e=>!e.isDefault));return(e,i,n)=>{if(!i.modelRange)return;const a=i.viewItem,r=(0,y.first)(i.modelRange.getItems());if(r&&n.schema.checkAttribute(r,"drupalElementStyle"))for(const e of t)if("class"===e.attributeName)n.consumable.consume(a,{classes:e.attributeValue})&&n.writer.setAttribute("drupalElementStyle",e.name,r);else if(n.consumable.consume(a,{attributes:[e.attributeName]}))for(const e of t)e.attributeValue===a.getAttribute(e.attributeName)&&n.writer.setAttribute("drupalElementStyle",e.name,r)}}(this.normalizedStyles);e.editing.downcastDispatcher.on("attribute:drupalElementStyle",i),e.data.downcastDispatcher.on("attribute:drupalElementStyle",i);[...new Set(this.normalizedStyles.map((e=>e.modelElements)).flat())].forEach((e=>{t.extend(e,{allowAttributes:"drupalElementStyle"})})),e.data.upcastDispatcher.on("element",a,{priority:"low"})}static get pluginName(){return"DrupalElementStyleEditing"}}const X=e=>e,Q=(e,t)=>(e?`${e}: `:"")+t;function Y(e){return`drupalElementStyle:${e}`}class ee extends e.Plugin{static get requires(){return[J]}init(){const e=this.editor.plugins,t=this.editor.config.get("drupalMedia.toolbar")||[],i=Object.values(e.get("DrupalElementStyleEditing").normalizedStyles);i.forEach((e=>{this._createButton(e)}));t.filter(d).forEach((e=>{this._createDropdown(e,i)}))}_createDropdown(e,t){const i=this.editor.ui.componentFactory;i.add(e.name,(n=>{let a;const{defaultItem:r,items:o,title:l}=e,s=o.filter((e=>t.find((({name:t})=>Y(t)===e)))).map((e=>{const t=i.create(e);return e===r&&(a=t),t}));o.length!==s.length&&$.warnInvalidStyle({dropdown:e});const d=(0,m.createDropdown)(n,m.SplitButtonView),u=d.buttonView;return(0,m.addToolbarToDropdown)(d,s),u.set({label:Q(l,a.label),class:null,tooltip:!0}),u.bind("icon").toMany(s,"isOn",((...e)=>{const t=e.findIndex(X);return t<0?a.icon:s[t].icon})),u.bind("label").toMany(s,"isOn",((...e)=>{const t=e.findIndex(X);return Q(l,t<0?a.label:s[t].label)})),u.bind("isOn").toMany(s,"isOn",((...e)=>e.some(X))),u.bind("class").toMany(s,"isOn",((...e)=>e.some(X)?"ck-splitbutton_flatten":null)),u.on("execute",(()=>{s.some((({isOn:e})=>e))?d.isOpen=!d.isOpen:a.fire("execute")})),d.bind("isEnabled").toMany(s,"isEnabled",((...e)=>e.some(X))),d}))}_createButton(e){const t=e.name;this.editor.ui.componentFactory.add(Y(t),(i=>{const n=this.editor.commands.get("drupalElementStyle"),a=new m.ButtonView(i);return a.set({label:e.title,icon:e.icon,tooltip:!0,isToggleable:!0}),a.bind("isEnabled").to(n,"isEnabled"),a.bind("isOn").to(n,"value",(e=>e===t)),a.on("execute",this._executeCommand.bind(this,t)),a}))}_executeCommand(e){this.editor.execute("drupalElementStyle",{value:e}),this.editor.editing.view.focus()}static get pluginName(){return"DrupalElementStyleUi"}}class te extends e.Plugin{static get requires(){return[J,ee]}static get pluginName(){return"DrupalElementStyle"}}function ie(e){const t=e.getFirstPosition().findAncestor("caption");return t&&r(t.parent)?t:null}function ne(e){for(const t of e.getChildren())if(t&&t.is("element","caption"))return t;return null}class ae extends e.Command{refresh(){const e=this.editor.model.document.selection,t=e.getSelectedElement();if(!t)return this.isEnabled=!!l(e),void(this.value=!!ie(e));this.isEnabled=r(t),this.isEnabled?this.value=!!ne(t):this.value=!1}execute(e={}){const{focusCaptionOnShow:t}=e;this.editor.model.change((e=>{this.value?this._hideDrupalMediaCaption(e):this._showDrupalMediaCaption(e,t)}))}_showDrupalMediaCaption(e,t){const i=this.editor.model.document.selection,n=this.editor.plugins.get("DrupalMediaCaptionEditing"),a=l(i),r=n._getSavedCaption(a)||e.createElement("caption");e.append(r,a),t&&e.setSelection(r,"in")}_hideDrupalMediaCaption(e){const t=this.editor,i=t.model.document.selection,n=t.plugins.get("DrupalMediaCaptionEditing");let a,r=i.getSelectedElement();r?a=ne(r):(a=ie(i),r=l(i)),n._saveCaption(r,a),e.setSelection(r,"on"),e.remove(a)}}class re extends e.Plugin{static get requires(){return[]}static get pluginName(){return"DrupalMediaCaptionEditing"}constructor(e){super(e),this._savedCaptionsMap=new WeakMap}init(){const e=this.editor,t=e.model.schema;t.isRegistered("caption")?t.extend("caption",{allowIn:"drupalMedia"}):t.register("caption",{allowIn:"drupalMedia",allowContentOf:"$block",isLimit:!0}),e.commands.add("toggleMediaCaption",new ae(e)),this._setupConversion()}_setupConversion(){const e=this.editor,i=e.editing.view;var n;e.conversion.for("upcast").add(function(e){const t=(t,i,n)=>{const{viewItem:a}=i,{writer:r,consumable:o}=n;if(!i.modelRange||!o.consume(a,{attributes:["data-caption"]}))return;const l=r.createElement("caption"),s=i.modelRange.start.nodeAfter,d=e.data.processor.toView(a.getAttribute("data-caption")),u=r.createDocumentFragment();n.consumable.constructor.createFrom(d,n.consumable),n.convertChildren(d,u);for(const e of Array.from(u.getChildren()))r.append(e,l);r.append(l,s)};return e=>{e.on("element:drupal-media",t,{priority:"low"})}}(e)),e.conversion.for("editingDowncast").elementToElement({model:"caption",view:(e,{writer:n})=>{if(!r(e.parent))return null;const a=n.createEditableElement("figcaption");return(0,D.enablePlaceholder)({view:i,element:a,text:Drupal.t("Enter media caption"),keepOnFocus:!0}),(0,t.toWidgetEditable)(a,n)}}),e.editing.mapper.on("modelToViewPosition",(n=i,(e,t)=>{const i=t.modelPosition,a=i.parent;if(!r(a))return;const o=t.mapper.toViewElement(a);t.viewPosition=n.createPositionAt(o,i.offset+1)})),e.conversion.for("dataDowncast").add(function(e){return t=>{t.on("insert:caption",((t,i,n)=>{const{consumable:a,writer:o,mapper:l}=n;if(!r(i.item.parent)||!a.consume(i.item,"insert"))return;const s=e.model.createRangeIn(i.item),d=o.createDocumentFragment();l.bindElements(i.item,d);for(const{item:t}of Array.from(s)){const i={item:t,range:e.model.createRangeOn(t)},a=`insert:${t.name||"$text"}`;e.data.downcastDispatcher.fire(a,i,n);for(const a of t.getAttributeKeys())Object.assign(i,{attributeKey:a,attributeOldValue:null,attributeNewValue:i.item.getAttribute(a)}),e.data.downcastDispatcher.fire(`attribute:${a}`,i,n)}for(const e of o.createRangeIn(d).getItems())l.unbindViewElement(e);l.unbindViewElement(d);const u=e.data.processor.toData(d);if(u){const e=l.toViewElement(i.item.parent);o.setAttribute("data-caption",u,e)}}))}}(e))}_getSavedCaption(e){const t=this._savedCaptionsMap.get(e);return t?D.Element.fromJSON(t):null}_saveCaption(e,t){this._savedCaptionsMap.set(e,t.toJSON())}}class oe extends e.Plugin{static get requires(){return[]}static get pluginName(){return"DrupalMediaCaptionUI"}init(){const{editor:t}=this,i=t.editing.view;t.ui.componentFactory.add("toggleDrupalMediaCaption",(n=>{const a=new m.ButtonView(n),r=t.commands.get("toggleMediaCaption");return a.set({label:Drupal.t("Caption media"),icon:e.icons.caption,tooltip:!0,isToggleable:!0}),a.bind("isOn","isEnabled").to(r,"value","isEnabled"),a.bind("label").to(r,"value",(e=>e?Drupal.t("Toggle caption off"):Drupal.t("Toggle caption on"))),this.listenTo(a,"execute",(()=>{t.execute("toggleMediaCaption",{focusCaptionOnShow:!0});const e=ie(t.model.document.selection);if(e){const n=t.editing.mapper.toViewElement(e);i.scrollToTheSelection(),i.change((e=>{e.addClass("drupal-media__caption_highlighted",n)}))}})),a}))}}class le extends e.Plugin{static get requires(){return[re,oe]}static get pluginName(){return"DrupalMediaCaption"}}var se={DrupalMedia:x,MediaImageTextAlternative:k,MediaImageTextAlternativeEditing:w,MediaImageTextAlternativeUi:M,DrupalLinkMedia:L,DrupalMediaCaption:le,DrupalElementStyle:te}}(),n=n.default}()}));
\ No newline at end of file
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.CKEditor5=t():(e.CKEditor5=e.CKEditor5||{},e.CKEditor5.drupalMedia=t())}(self,(function(){return function(){var e={"ckeditor5/src/core.js":function(e,t,i){e.exports=i("dll-reference CKEditor5.dll")("./src/core.js")},"ckeditor5/src/engine.js":function(e,t,i){e.exports=i("dll-reference CKEditor5.dll")("./src/engine.js")},"ckeditor5/src/ui.js":function(e,t,i){e.exports=i("dll-reference CKEditor5.dll")("./src/ui.js")},"ckeditor5/src/utils.js":function(e,t,i){e.exports=i("dll-reference CKEditor5.dll")("./src/utils.js")},"ckeditor5/src/widget.js":function(e,t,i){e.exports=i("dll-reference CKEditor5.dll")("./src/widget.js")},"dll-reference CKEditor5.dll":function(e){"use strict";e.exports=CKEditor5.dll}},t={};function i(n){var a=t[n];if(void 0!==a)return a.exports;var r=t[n]={exports:{}};return e[n](r,r.exports,i),r.exports}i.d=function(e,t){for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};var n={};return function(){"use strict";i.d(n,{default:function(){return ue}});var e=i("ckeditor5/src/core.js"),t=i("ckeditor5/src/widget.js");function a(e){return!!e&&e.is("element","drupalMedia")}function r(e){return(0,t.isWidget)(e)&&!!e.getCustomProperty("drupalMedia")}function o(e){const t=e.getSelectedElement();return a(t)?t:e.getFirstPosition().findAncestor("drupalMedia")}function s(e){const t=e.getSelectedElement();if(t&&r(t))return t;let i=e.getFirstPosition().parent;for(;i;){if(i.is("element")&&r(i))return i;i=i.parent}return null}function l(e){const t=typeof e;return null!=e&&("object"===t||"function"===t)}function d(e){for(const t of e){if(t.hasAttribute("data-drupal-media-preview"))return t;if(t.childCount){const e=d(t.getChildren());if(e)return e}}return null}function u(e){return`drupalElementStyle${e[0].toUpperCase()+e.substring(1)}`}class c extends e.Command{execute(e){const t=this.editor.plugins.get("DrupalMediaEditing"),i=Object.entries(t.attrs).reduce(((e,[t,i])=>(e[i]=t,e)),{}),n=Object.keys(e).reduce(((t,n)=>(i[n]&&(t[i[n]]=e[n]),t)),{});if(this.editor.plugins.has("DrupalElementStyleEditing")){const t=this.editor.plugins.get("DrupalElementStyleEditing"),{normalizedStyles:i}=t;for(const a of Object.keys(i))for(const i of t.normalizedStyles[a])if(e[i.attributeName]&&i.attributeValue===e[i.attributeName]){const e=u(a);n[e]=i.name}}this.editor.model.change((e=>{this.editor.model.insertContent(function(e,t){return e.createElement("drupalMedia",t)}(e,n))}))}refresh(){const e=this.editor.model,t=e.document.selection,i=e.schema.findAllowedParent(t.getFirstPosition(),"drupalMedia");this.isEnabled=null!==i}}const m="METADATA_ERROR";class p extends e.Plugin{static get requires(){return[t.Widget]}init(){this.attrs={drupalMediaAlt:"alt",drupalMediaEntityType:"data-entity-type",drupalMediaEntityUuid:"data-entity-uuid"};const e=this.editor.config.get("drupalMedia");if(!e)return;const{previewURL:t,themeError:i}=e;this.previewUrl=t,this.labelError=Drupal.t("Preview failed"),this.themeError=i||`\n      <p>${Drupal.t("An error occurred while trying to preview the media. Please save your work and reload this page.")}<p>\n    `,this._defineSchema(),this._defineConverters(),this._defineListeners(),this.editor.commands.add("insertDrupalMedia",new c(this.editor))}upcastDrupalMediaIsImage(e){const{model:t,plugins:i}=this.editor;i.get("DrupalMediaMetadataRepository").getMetadata(e).then((i=>{e&&t.enqueueChange({isUndoable:!1},(t=>{t.setAttribute("drupalMediaIsImage",!!i.imageSourceMetadata,e)}))})).catch((i=>{e&&(console.warn(i.toString()),t.enqueueChange({isUndoable:!1},(t=>{t.setAttribute("drupalMediaIsImage",m,e)})))}))}upcastDrupalMediaType(e){this.editor.plugins.get("DrupalMediaMetadataRepository").getMetadata(e).then((t=>{e&&this.editor.model.enqueueChange({isUndoable:!1},(i=>{i.setAttribute("drupalMediaType",t.type,e)}))})).catch((t=>{e&&(console.warn(t.toString()),this.editor.model.enqueueChange({isUndoable:!1},(t=>{t.setAttribute("drupalMediaType",m,e)})))}))}async _fetchPreview(e){const t={text:this._renderElement(e),uuid:e.getAttribute("drupalMediaEntityUuid")},i=await fetch(`${this.previewUrl}?${new URLSearchParams(t)}`,{headers:{"X-Drupal-MediaPreview-CSRF-Token":this.editor.config.get("drupalMedia").previewCsrfToken}});if(i.ok){return{label:i.headers.get("drupal-media-label"),preview:await i.text()}}return{label:this.labelError,preview:this.themeError}}_defineSchema(){this.editor.model.schema.register("drupalMedia",{allowWhere:"$block",isObject:!0,isContent:!0,isBlock:!0,allowAttributes:Object.keys(this.attrs)}),this.editor.editing.view.domConverter.blockElements.push("drupal-media")}_defineConverters(){const e=this.editor.conversion,i=this.editor.plugins.get("DrupalMediaMetadataRepository");e.for("upcast").elementToElement({view:{name:"drupal-media"},model:"drupalMedia"}).add((e=>{e.on("element:drupal-media",((e,t)=>{const[n]=t.modelRange.getItems();i.getMetadata(n).then((e=>{n&&(this.upcastDrupalMediaIsImage(n),this.editor.model.enqueueChange({isUndoable:!1},(t=>{t.setAttribute("drupalMediaType",e.type,n)})))})).catch((e=>{console.warn(e.toString())}))}),{priority:"lowest"})})),e.for("dataDowncast").elementToElement({model:"drupalMedia",view:{name:"drupal-media"}}),e.for("editingDowncast").elementToElement({model:"drupalMedia",view:(e,{writer:i})=>{const n=i.createContainerElement("figure",{class:"drupal-media"});if(!this.previewUrl){const e=i.createRawElement("div",{"data-drupal-media-preview":"unavailable"});i.insert(i.createPositionAt(n,0),e)}return i.setCustomProperty("drupalMedia",!0,n),(0,t.toWidget)(n,i,{label:Drupal.t("Media widget")})}}).add((e=>{const t=(e,t,i)=>{const n=i.writer,a=t.item,r=i.mapper.toViewElement(t.item);let o=d(r.getChildren());if(o){if("ready"!==o.getAttribute("data-drupal-media-preview"))return;n.setAttribute("data-drupal-media-preview","loading",o)}else o=n.createRawElement("div",{"data-drupal-media-preview":"loading"}),n.insert(n.createPositionAt(r,0),o);this._fetchPreview(a).then((({label:e,preview:t})=>{o&&this.editor.editing.view.change((i=>{const n=i.createRawElement("div",{"data-drupal-media-preview":"ready","aria-label":e},(e=>{e.innerHTML=t}));i.insert(i.createPositionBefore(o),n),i.remove(o)}))}))};return e.on("attribute:drupalMediaEntityUuid:drupalMedia",t),e.on("attribute:drupalElementStyleViewMode:drupalMedia",t),e.on("attribute:drupalMediaEntityType:drupalMedia",t),e.on("attribute:drupalMediaAlt:drupalMedia",t),e})),e.for("editingDowncast").add((e=>{e.on("attribute:drupalElementStyleAlign:drupalMedia",((e,t,i)=>{const n={left:"drupal-media-style-align-left",right:"drupal-media-style-align-right",center:"drupal-media-style-align-center"},a=i.mapper.toViewElement(t.item),r=i.writer;n[t.attributeOldValue]&&r.removeClass(n[t.attributeOldValue],a),n[t.attributeNewValue]&&i.consumable.consume(t.item,e.name)&&r.addClass(n[t.attributeNewValue],a)}))})),Object.keys(this.attrs).forEach((t=>{const i={model:{key:t,name:"drupalMedia"},view:{name:"drupal-media",key:this.attrs[t]}};e.for("dataDowncast").attributeToAttribute(i),e.for("upcast").attributeToAttribute(i)}))}_defineListeners(){this.editor.model.on("insertContent",((e,[t])=>{a(t)&&(this.upcastDrupalMediaIsImage(t),this.upcastDrupalMediaType(t))}))}_renderElement(e){const t=this.editor.model.change((t=>{const i=t.createDocumentFragment(),n=t.cloneElement(e,!1);return["linkHref"].forEach((e=>{t.removeAttribute(e,n)})),t.append(n,i),i}));return this.editor.data.stringify(t)}static get pluginName(){return"DrupalMediaEditing"}}var g=i("ckeditor5/src/ui.js");class h extends e.Plugin{init(){const e=this.editor,t=this.editor.config.get("drupalMedia");if(!t)return;const{libraryURL:i,openDialog:n,dialogSettings:a={}}=t;i&&"function"==typeof n&&e.ui.componentFactory.add("drupalMedia",(t=>{const r=e.commands.get("insertDrupalMedia"),o=new g.ButtonView(t);return o.set({label:Drupal.t("Insert Drupal Media"),icon:'<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M19.1873 4.86414L10.2509 6.86414V7.02335H10.2499V15.5091C9.70972 15.1961 9.01793 15.1048 8.34069 15.3136C7.12086 15.6896 6.41013 16.8967 6.75322 18.0096C7.09631 19.1226 8.3633 19.72 9.58313 19.344C10.6666 19.01 11.3484 18.0203 11.2469 17.0234H11.2499V9.80173L18.1803 8.25067V14.3868C17.6401 14.0739 16.9483 13.9825 16.2711 14.1913C15.0513 14.5674 14.3406 15.7744 14.6836 16.8875C15.0267 18.0004 16.2937 18.5978 17.5136 18.2218C18.597 17.8877 19.2788 16.8982 19.1773 15.9011H19.1803V8.02687L19.1873 8.0253V4.86414Z" fill="black"/><path fill-rule="evenodd" clip-rule="evenodd" d="M13.5039 0.743652H0.386932V12.1603H13.5039V0.743652ZM12.3379 1.75842H1.55289V11.1454H1.65715L4.00622 8.86353L6.06254 10.861L9.24985 5.91309L11.3812 9.22179L11.7761 8.6676L12.3379 9.45621V1.75842ZM6.22048 4.50869C6.22048 5.58193 5.35045 6.45196 4.27722 6.45196C3.20398 6.45196 2.33395 5.58193 2.33395 4.50869C2.33395 3.43546 3.20398 2.56543 4.27722 2.56543C5.35045 2.56543 6.22048 3.43546 6.22048 4.50869Z" fill="black"/></svg>\n',tooltip:!0}),o.bind("isOn","isEnabled").to(r,"value","isEnabled"),this.listenTo(o,"execute",(()=>{n(i,(({attributes:t})=>{e.execute("insertDrupalMedia",t)}),a)})),o}))}}class f extends e.Plugin{static get requires(){return[t.WidgetToolbarRepository]}static get pluginName(){return"DrupalMediaToolbar"}afterInit(){const{editor:e}=this;var i;e.plugins.get(t.WidgetToolbarRepository).register("drupalMedia",{ariaLabel:Drupal.t("Drupal Media toolbar"),items:(i=e.config.get("drupalMedia.toolbar"),i.map((e=>l(e)?e.name:e))||[]),getRelatedElement:e=>s(e)})}}class b extends e.Command{refresh(){const e=o(this.editor.model.document.selection);this.isEnabled=!!e&&e.getAttribute("drupalMediaIsImage")&&e.getAttribute("drupalMediaIsImage")!==m,this.isEnabled?this.value=e.getAttribute("drupalMediaAlt"):this.value=!1}execute(e){const{model:t}=this.editor,i=o(t.document.selection);e.newValue=e.newValue.trim(),t.change((t=>{e.newValue.length>0?t.setAttribute("drupalMediaAlt",e.newValue,i):t.removeAttribute("drupalMediaAlt",i)}))}}class w extends e.Plugin{init(){this._data=new WeakMap}getMetadata(e){if(this._data.get(e))return new Promise((t=>{t(this._data.get(e))}));const t=this.editor.config.get("drupalMedia");if(!t)return new Promise(((e,t)=>{t(new Error("drupalMedia configuration is required for parsing metadata."))}));if(!e.hasAttribute("drupalMediaEntityUuid"))return new Promise(((e,t)=>{t(new Error("drupalMedia element must have drupalMediaEntityUuid attribute to retrieve metadata."))}));const{metadataUrl:i}=t;return(async e=>{const t=await fetch(e);if(t.ok)return JSON.parse(await t.text());throw new Error("Fetching media embed metadata from the server failed.")})(`${i}&${new URLSearchParams({uuid:e.getAttribute("drupalMediaEntityUuid")})}`).then((t=>(this._data.set(e,t),t)))}static get pluginName(){return"DrupalMediaMetadataRepository"}}class y extends e.Plugin{static get requires(){return[w]}static get pluginName(){return"MediaImageTextAlternativeEditing"}init(){const{editor:e,editor:{model:t,conversion:i}}=this;t.schema.extend("drupalMedia",{allowAttributes:["drupalMediaIsImage"]}),i.for("editingDowncast").add((e=>{e.on("attribute:drupalMediaIsImage",((e,t,i)=>{const{writer:n,mapper:a}=i,r=a.toViewElement(t.item);if(t.attributeNewValue!==m){const e=Array.from(r.getChildren()).find((e=>e.getCustomProperty("drupalMediaMetadataError")));return void(e&&(n.setCustomProperty("widgetLabel",e.getCustomProperty("drupalMediaOriginalWidgetLabel"),e),n.removeElement(e)))}const o=Drupal.t("Not all functionality may be available because some information could not be retrieved."),s=new g.TooltipView;s.text=o,s.position="sw";const l=new g.Template({tag:"span",children:[{tag:"span",attributes:{class:"drupal-media__metadata-error-icon"}},s]}).render(),d=n.createRawElement("div",{class:"drupal-media__metadata-error"},((e,t)=>{t.setContentOf(e,l.outerHTML)}));n.setCustomProperty("drupalMediaMetadataError",!0,d);const u=r.getCustomProperty("widgetLabel");n.setCustomProperty("drupalMediaOriginalWidgetLabel",u,d),n.setCustomProperty("widgetLabel",`${u} (${o})`,r),n.insert(n.createPositionAt(r,0),d)}),{priority:"low"})})),e.commands.add("mediaImageTextAlternative",new b(this.editor))}}function v(e){const t=e.editing.view,i=g.BalloonPanelView.defaultPositions;return{target:t.domConverter.viewToDom(t.document.selection.getSelectedElement()),positions:[i.northArrowSouth,i.northArrowSouthWest,i.northArrowSouthEast,i.southArrowNorth,i.southArrowNorthWest,i.southArrowNorthEast]}}var E=i("ckeditor5/src/utils.js");class M extends g.View{constructor(t){super(t),this.focusTracker=new E.FocusTracker,this.keystrokes=new E.KeystrokeHandler,this.labeledInput=this._createLabeledInputView(),this.set("defaultAltText",void 0),this.defaultAltTextView=this._createDefaultAltTextView(),this.saveButtonView=this._createButton(Drupal.t("Save"),e.icons.check,"ck-button-save"),this.saveButtonView.type="submit",this.cancelButtonView=this._createButton(Drupal.t("Cancel"),e.icons.cancel,"ck-button-cancel","cancel"),this._focusables=new g.ViewCollection,this._focusCycler=new g.FocusCycler({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}}),this.setTemplate({tag:"form",attributes:{class:["ck","ck-media-alternative-text-form","ck-vertical-form"],tabindex:"-1"},children:[this.defaultAltTextView,this.labeledInput,this.saveButtonView,this.cancelButtonView]}),(0,g.injectCssTransitionDisabler)(this)}render(){super.render(),this.keystrokes.listenTo(this.element),(0,g.submitHandler)({view:this}),[this.labeledInput,this.saveButtonView,this.cancelButtonView].forEach((e=>{this._focusables.add(e),this.focusTracker.add(e.element)}))}_createButton(e,t,i,n){const a=new g.ButtonView(this.locale);return a.set({label:e,icon:t,tooltip:!0}),a.extendTemplate({attributes:{class:i}}),n&&a.delegate("execute").to(this,n),a}_createLabeledInputView(){const e=new g.LabeledFieldView(this.locale,g.createLabeledInputText);return e.label=Drupal.t("Alternative text override"),e}_createDefaultAltTextView(){const e=g.Template.bind(this,this);return new g.Template({tag:"div",attributes:{class:["ck-media-alternative-text-form__default-alt-text",e.if("defaultAltText","ck-hidden",(e=>!e))]},children:[{tag:"strong",attributes:{class:"ck-media-alternative-text-form__default-alt-text-label"},children:[Drupal.t("Default alternative text:")]}," ",{tag:"span",attributes:{class:"ck-media-alternative-text-form__default-alt-text-value"},children:[{text:[e.to("defaultAltText")]}]}]})}}class k extends e.Plugin{static get requires(){return[g.ContextualBalloon]}static get pluginName(){return"MediaImageTextAlternativeUi"}init(){this._createButton(),this._createForm()}destroy(){super.destroy(),this._form.destroy()}_createButton(){const t=this.editor;t.ui.componentFactory.add("mediaImageTextAlternative",(i=>{const n=t.commands.get("mediaImageTextAlternative"),a=new g.ButtonView(i);return a.set({label:Drupal.t("Override media image alternative text"),icon:e.icons.lowVision,tooltip:!0}),a.bind("isVisible").to(n,"isEnabled"),this.listenTo(a,"execute",(()=>{this._showForm()})),a}))}_createForm(){const e=this.editor,t=e.editing.view.document;this._balloon=this.editor.plugins.get("ContextualBalloon"),this._form=new M(e.locale),this._form.render(),this.listenTo(this._form,"submit",(()=>{e.execute("mediaImageTextAlternative",{newValue:this._form.labeledInput.fieldView.element.value}),this._hideForm(!0)})),this.listenTo(this._form,"cancel",(()=>{this._hideForm(!0)})),this._form.keystrokes.set("Esc",((e,t)=>{this._hideForm(!0),t()})),this.listenTo(e.ui,"update",(()=>{s(t.selection)?this._isVisible&&function(e){const t=e.plugins.get("ContextualBalloon");if(s(e.editing.view.document.selection)){const i=v(e);t.updatePosition(i)}}(e):this._hideForm(!0)})),(0,g.clickOutsideHandler)({emitter:this._form,activator:()=>this._isVisible,contextElements:[this._balloon.view.element],callback:()=>this._hideForm()})}_showForm(){if(this._isVisible)return;const e=this.editor,t=e.commands.get("mediaImageTextAlternative"),i=e.plugins.get("DrupalMediaMetadataRepository"),n=this._form.labeledInput;this._form.disableCssTransitions(),this._isInBalloon||this._balloon.add({view:this._form,position:v(e)}),n.fieldView.element.value=t.value||"",n.fieldView.value=n.fieldView.element.value,this._form.defaultAltText="";const r=e.model.document.selection.getSelectedElement();a(r)&&i.getMetadata(r).then((e=>{this._form.defaultAltText=e.imageSourceMetadata?e.imageSourceMetadata.alt:""})).catch((e=>{console.warn(e.toString())})),this._form.labeledInput.fieldView.select(),this._form.enableCssTransitions()}_hideForm(e){this._isInBalloon&&(this._form.focusTracker.isFocused&&this._form.saveButtonView.focus(),this._balloon.remove(this._form),e&&this.editor.editing.view.focus())}get _isVisible(){return this._balloon.visibleView===this._form}get _isInBalloon(){return this._balloon.hasView(this._form)}}class A extends e.Plugin{static get requires(){return[y,k]}static get pluginName(){return"MediaImageTextAlternative"}}function D(e,t,i){if(t.attributes)for(const[n,a]of Object.entries(t.attributes))e.setAttribute(n,a,i);t.styles&&e.setStyle(t.styles,i),t.classes&&e.addClass(t.classes,i)}function C(e,t,i){if(!i.consumable.consume(t.item,e.name))return;const n=i.mapper.toViewElement(t.item);D(i.writer,t.attributeNewValue,n)}class _ extends e.Plugin{constructor(e){if(super(e),!e.plugins.has("GeneralHtmlSupport"))return;e.plugins.has("DataFilter")&&e.plugins.has("DataSchema")||console.error("DataFilter and DataSchema plugins are required for Drupal Media to integrate with General HTML Support plugin.");const{schema:t}=e.model,{conversion:i}=e,n=this.editor.plugins.get("DataFilter");this.editor.plugins.get("DataSchema").registerBlockElement({model:"drupalMedia",view:"drupal-media"}),n.on("register:drupal-media",((e,a)=>{"drupalMedia"===a.model&&(t.extend("drupalMedia",{allowAttributes:["htmlLinkAttributes","htmlAttributes"]}),i.for("upcast").add(function(e){return t=>{t.on("element:drupal-media",((t,i,n)=>{function a(t,a){const r=e._consumeAllowedAttributes(t,n);r&&n.writer.setAttribute(a,r,i.modelRange)}const r=i.viewItem,o=r.parent;a(r,"htmlAttributes"),o.is("element","a")&&a(o,"htmlLinkAttributes")}),{priority:"low"})}}(n)),i.for("editingDowncast").add((e=>{e.on("attribute:linkHref:drupalMedia",((e,t,i)=>{if(!i.consumable.consume(t.item,"attribute:htmlLinkAttributes:drupalMedia"))return;const n=i.mapper.toViewElement(t.item),a=function(e,t,i){const n=e.createRangeOn(t);for(const{item:e}of n.getWalker())if(e.is("element",i))return e}(i.writer,n,"a");D(i.writer,t.item.getAttribute("htmlLinkAttributes"),a)}),{priority:"low"})})),i.for("dataDowncast").add((e=>{e.on("attribute:linkHref:drupalMedia",((e,t,i)=>{if(!i.consumable.consume(t.item,"attribute:htmlLinkAttributes:drupalMedia"))return;const n=i.mapper.toViewElement(t.item).parent;D(i.writer,t.item.getAttribute("htmlLinkAttributes"),n)}),{priority:"low"}),e.on("attribute:htmlAttributes:drupalMedia",C,{priority:"low"})})),e.stop())}))}static get pluginName(){return"DrupalMediaGeneralHtmlSupport"}}class x extends e.Plugin{static get requires(){return[p,_,h,f,A]}static get pluginName(){return"DrupalMedia"}}var V=i("ckeditor5/src/engine.js");function S(e){return Array.from(e.getChildren()).find((e=>"drupal-media"===e.name))}function T(e){return t=>{t.on(`attribute:${e.id}:drupalMedia`,((t,i,n)=>{const a=n.mapper.toViewElement(i.item);let r=Array.from(a.getChildren()).find((e=>"a"===e.name));if(r=!r&&a.is("element","a")?a:Array.from(a.getAncestors()).find((e=>"a"===e.name)),r){for(const[t,i]of(0,E.toMap)(e.attributes))n.writer.setAttribute(t,i,r);e.classes&&n.writer.addClass(e.classes,r);for(const t in e.styles)Object.prototype.hasOwnProperty.call(e.styles,t)&&n.writer.setStyle(t,e.styles[t],r)}}))}}function I(e,t){return e=>{e.on("element:a",((e,i,n)=>{const a=i.viewItem;if(!S(a))return;const r=new V.Matcher(t._createPattern()).match(a);if(!r)return;if(!n.consumable.consume(a,r.match))return;const o=i.modelCursor.nodeBefore;n.writer.setAttribute(t.id,!0,o)}),{priority:"high"})}}class L extends e.Plugin{static get requires(){return["LinkEditing","DrupalMediaEditing"]}static get pluginName(){return"DrupalLinkMediaEditing"}init(){const{editor:e}=this;e.model.schema.extend("drupalMedia",{allowAttributes:["linkHref"]}),e.conversion.for("upcast").add((e=>{e.on("element:a",((e,t,i)=>{const n=t.viewItem,a=S(n);if(!a)return;if(!i.consumable.consume(n,{attributes:["href"],name:!0}))return;const r=n.getAttribute("href");if(!r)return;const o=i.convertItem(a,t.modelCursor);t.modelRange=o.modelRange,t.modelCursor=o.modelCursor;const s=t.modelCursor.nodeBefore;s&&s.is("element","drupalMedia")&&i.writer.setAttribute("linkHref",r,s)}),{priority:"high"})})),e.conversion.for("editingDowncast").add((e=>{e.on("attribute:linkHref:drupalMedia",((e,t,i)=>{const{writer:n}=i;if(!i.consumable.consume(t.item,e.name))return;const a=i.mapper.toViewElement(t.item),r=Array.from(a.getChildren()).find((e=>"a"===e.name));if(r)t.attributeNewValue?n.setAttribute("href",t.attributeNewValue,r):(n.move(n.createRangeIn(r),n.createPositionAt(a,0)),n.remove(r));else{const e=Array.from(a.getChildren()).find((e=>e.getAttribute("data-drupal-media-preview"))),i=n.createContainerElement("a",{href:t.attributeNewValue});n.insert(n.createPositionAt(a,0),i),n.move(n.createRangeOn(e),n.createPositionAt(i,0))}}),{priority:"high"})})),e.conversion.for("dataDowncast").add((e=>{e.on("attribute:linkHref:drupalMedia",((e,t,i)=>{const{writer:n}=i;if(!i.consumable.consume(t.item,e.name))return;const a=i.mapper.toViewElement(t.item),r=n.createContainerElement("a",{href:t.attributeNewValue});n.insert(n.createPositionBefore(a),r),n.move(n.createRangeOn(a),n.createPositionAt(r,0))}),{priority:"high"})})),this._enableManualDecorators()}_enableManualDecorators(){const e=this.editor,t=e.commands.get("link");for(const i of t.manualDecorators)e.model.schema.extend("drupalMedia",{allowAttributes:i.id}),e.conversion.for("downcast").add(T(i)),e.conversion.for("upcast").add(I(0,i))}}class P extends e.Plugin{static get requires(){return["LinkEditing","LinkUI","DrupalMediaEditing"]}static get pluginName(){return"DrupalLinkMediaUi"}init(){const{editor:e}=this,t=e.editing.view.document;this.listenTo(t,"click",((t,i)=>{this._isSelectedLinkedMedia(e.model.document.selection)&&(i.preventDefault(),t.stop())}),{priority:"high"}),this._createToolbarLinkMediaButton()}_createToolbarLinkMediaButton(){const{editor:e}=this;e.ui.componentFactory.add("drupalLinkMedia",(t=>{const i=new g.ButtonView(t),n=e.plugins.get("LinkUI"),a=e.commands.get("link");return i.set({isEnabled:!0,label:Drupal.t("Link media"),icon:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="m11.077 15 .991-1.416a.75.75 0 1 1 1.229.86l-1.148 1.64a.748.748 0 0 1-.217.206 5.251 5.251 0 0 1-8.503-5.955.741.741 0 0 1 .12-.274l1.147-1.639a.75.75 0 1 1 1.228.86L4.933 10.7l.006.003a3.75 3.75 0 0 0 6.132 4.294l.006.004zm5.494-5.335a.748.748 0 0 1-.12.274l-1.147 1.639a.75.75 0 1 1-1.228-.86l.86-1.23a3.75 3.75 0 0 0-6.144-4.301l-.86 1.229a.75.75 0 0 1-1.229-.86l1.148-1.64a.748.748 0 0 1 .217-.206 5.251 5.251 0 0 1 8.503 5.955zm-4.563-2.532a.75.75 0 0 1 .184 1.045l-3.155 4.505a.75.75 0 1 1-1.229-.86l3.155-4.506a.75.75 0 0 1 1.045-.184z"/></svg>\n',keystroke:"Ctrl+K",tooltip:!0,isToggleable:!0}),i.bind("isEnabled").to(a,"isEnabled"),i.bind("isOn").to(a,"value",(e=>!!e)),this.listenTo(i,"execute",(()=>{this._isSelectedLinkedMedia(e.model.document.selection)?n._addActionsView():n._showUI(!0)})),i}))}_isSelectedLinkedMedia(e){const t=e.getSelectedElement();return!!t&&t.is("element","drupalMedia")&&t.hasAttribute("linkHref")}}class B extends e.Plugin{static get requires(){return[L,P]}static get pluginName(){return"DrupalLinkMedia"}}const{objectFullWidth:O,objectInline:N,objectLeft:R,objectRight:j,objectCenter:F,objectBlockLeft:U,objectBlockRight:H}=e.icons,q={get inline(){return{name:"inline",title:"In line",icon:N,modelElements:["imageInline"],isDefault:!0}},get alignLeft(){return{name:"alignLeft",title:"Left aligned image",icon:R,modelElements:["imageBlock","imageInline"],className:"image-style-align-left"}},get alignBlockLeft(){return{name:"alignBlockLeft",title:"Left aligned image",icon:U,modelElements:["imageBlock"],className:"image-style-block-align-left"}},get alignCenter(){return{name:"alignCenter",title:"Centered image",icon:F,modelElements:["imageBlock"],className:"image-style-align-center"}},get alignRight(){return{name:"alignRight",title:"Right aligned image",icon:j,modelElements:["imageBlock","imageInline"],className:"image-style-align-right"}},get alignBlockRight(){return{name:"alignBlockRight",title:"Right aligned image",icon:H,modelElements:["imageBlock"],className:"image-style-block-align-right"}},get block(){return{name:"block",title:"Centered image",icon:F,modelElements:["imageBlock"],isDefault:!0}},get side(){return{name:"side",title:"Side image",icon:j,modelElements:["imageBlock"],className:"image-style-side"}}},$={full:O,left:U,right:H,center:F,inlineLeft:R,inlineRight:j,inline:N},W=[{name:"imageStyle:wrapText",title:"Wrap text",defaultItem:"imageStyle:alignLeft",items:["imageStyle:alignLeft","imageStyle:alignRight"]},{name:"imageStyle:breakText",title:"Break text",defaultItem:"imageStyle:block",items:["imageStyle:alignBlockLeft","imageStyle:block","imageStyle:alignBlockRight"]}];function K(e){(0,E.logWarning)("image-style-configuration-definition-invalid",e)}var z={normalizeStyles:function(e){return(e.configuredStyles.options||[]).map((e=>function(e){e="string"==typeof e?q[e]?{...q[e]}:{name:e}:function(e,t){const i={...t};for(const n in e)Object.prototype.hasOwnProperty.call(t,n)||(i[n]=e[n]);return i}(q[e.name],e);"string"==typeof e.icon&&(e.icon=$[e.icon]||e.icon);return e}(e))).filter((t=>function(e,{isBlockPluginLoaded:t,isInlinePluginLoaded:i}){const{modelElements:n,name:a}=e;if(!(n&&n.length&&a))return K({style:e}),!1;{const a=[t?"imageBlock":null,i?"imageInline":null];if(!n.some((e=>a.includes(e))))return(0,E.logWarning)("image-style-missing-dependency",{style:e,missingPlugins:n.map((e=>"imageBlock"===e?"ImageBlockEditing":"ImageInlineEditing"))}),!1}return!0}(t,e)))},getDefaultStylesConfiguration:function(e,t){return e&&t?{options:["inline","alignLeft","alignRight","alignCenter","alignBlockLeft","alignBlockRight","block","side"]}:e?{options:["block","side"]}:t?{options:["inline","alignLeft","alignRight"]}:{}},getDefaultDropdownDefinitions:function(e){return e.has("ImageBlockEditing")&&e.has("ImageInlineEditing")?[...W]:[]},warnInvalidStyle:K,DEFAULT_OPTIONS:q,DEFAULT_ICONS:$,DEFAULT_DROPDOWN_DEFINITIONS:W};function Z(e,t,i){for(const n of t)if(i.checkAttribute(e,n))return!0;return!1}function G(e,t,i){const n=e.getSelectedElement();if(n&&Z(n,i,t))return n;let{parent:a}=e.getFirstPosition();for(;a;){if(a.is("element")&&Z(a,i,t))return a;a=a.parent}return null}class J extends e.Command{constructor(e,t){super(e),this.styles={},Object.keys(t).forEach((e=>{this.styles[e]=new Map(t[e].map((e=>[e.name,e])))})),this.modelAttributes=[];for(const e of Object.keys(t)){const t=u(e);this.modelAttributes.push(t)}}refresh(){const{editor:e}=this,t=G(e.model.document.selection,e.model.schema,this.modelAttributes);this.isEnabled=!!t,this.isEnabled?this.value=this.getValue(t):this.value=!1}getValue(e){const t={};return Object.keys(this.styles).forEach((i=>{const n=u(i);if(e.hasAttribute(n))t[i]=e.getAttribute(n);else for(const[,e]of this.styles[i])e.isDefault&&(t[i]=e.name)})),t}execute(e={}){const{editor:{model:t}}=this,{value:i,group:n}=e,a=u(n);t.change((e=>{const r=G(t.document.selection,t.schema,this.modelAttributes);!i||this.styles[n].get(i).isDefault?e.removeAttribute(a,r):e.setAttribute(a,i,r)}))}}function X(e,t){for(const i of t)if(i.name===e)return i}class Q extends e.Plugin{init(){const{editor:t}=this,i=t.config.get("drupalElementStyles");this.normalizedStyles={},Object.keys(i).forEach((t=>{this.normalizedStyles[t]=i[t].map((t=>("string"==typeof t.icon&&e.icons[t.icon]&&(t.icon=e.icons[t.icon]),t.name&&(t.name=`${t.name}`),t))).filter((e=>e.isDefault||e.attributeName&&e.attributeValue?e.modelElements&&Array.isArray(e.modelElements)?!!e.name||(console.warn("drupalElementStyles options must include a name."),!1):(console.warn("drupalElementStyles options must include an array of supported modelElements."),!1):(console.warn(`${e.attributeValue} drupalElementStyles options must include attributeName and attributeValue.`),!1)))})),this._setupConversion(),t.commands.add("drupalElementStyle",new J(t,this.normalizedStyles))}_setupConversion(){const{editor:e}=this,{schema:t}=e.model;Object.keys(this.normalizedStyles).forEach((i=>{const n=u(i),a=(r=this.normalizedStyles[i],(e,t,i)=>{if(!i.consumable.consume(t.item,e.name))return;const n=X(t.attributeNewValue,r),a=X(t.attributeOldValue,r),o=i.mapper.toViewElement(t.item),s=i.writer;a&&("class"===a.attributeName?s.removeClass(a.attributeValue,o):s.removeAttribute(a.attributeName,o)),n&&("class"===n.attributeName?s.addClass(n.attributeValue,o):n.isDefault||s.setAttribute(n.attributeName,n.attributeValue,o))});var r;const o=function(e,t){const i=e.filter((e=>!e.isDefault));return(e,n,a)=>{if(!n.modelRange)return;const r=n.viewItem,o=(0,E.first)(n.modelRange.getItems());if(o&&a.schema.checkAttribute(o,t))for(const e of i)if("class"===e.attributeName)a.consumable.consume(r,{classes:e.attributeValue})&&a.writer.setAttribute(t,e.name,o);else if(a.consumable.consume(r,{attributes:[e.attributeName]}))for(const e of i)e.attributeValue===r.getAttribute(e.attributeName)&&a.writer.setAttribute(t,e.name,o)}}(this.normalizedStyles[i],n);e.editing.downcastDispatcher.on(`attribute:${n}`,a),e.data.downcastDispatcher.on(`attribute:${n}`,a);[...new Set(this.normalizedStyles[i].map((e=>e.modelElements)).flat())].forEach((e=>{t.extend(e,{allowAttributes:n})})),e.data.upcastDispatcher.on("element",o,{priority:"low"})}))}static get pluginName(){return"DrupalElementStyleEditing"}}const Y=e=>e,ee=(e,t)=>(e?`${e}: `:"")+t;function te(e,t){return`drupalElementStyle:${t}:${e}`}class ie extends e.Plugin{static get requires(){return[Q]}init(){const{plugins:e}=this.editor,t=this.editor.config.get("drupalMedia.toolbar")||[],i=e.get("DrupalElementStyleEditing").normalizedStyles;Object.keys(i).forEach((e=>{i[e].forEach((t=>{this._createButton(t,e,i[e])}))}));t.filter(l).filter((e=>{const t=[];if(!e.display)return console.warn("dropdown configuration must include a display key specifying either listDropdown or splitButton."),!1;e.items.includes(e.defaultItem)||console.warn("defaultItem must be part of items in the dropdown configuration.");for(const i of e.items){const e=i.split(":")[1];t.push(e)}return!!t.every((e=>e===t[0]))||(console.warn("dropdown configuration should only contain buttons from one group."),!1)})).forEach((e=>{if(e.items.length>=2){const t=e.name.split(":")[1];switch(e.display){case"splitButton":this._createDropdown(e,i[t]);break;case"listDropdown":this._createListDropdown(e,i[t])}}}))}updateOptionVisibility(e,t,i,n){const{selection:a}=this.editor.model.document,r={};r[n]=e;const o=a?a.getSelectedElement():G(a,this.editor.model.schema,r),s=e.filter((function(e){for(const[t,i]of(0,E.toMap)(e.modelAttributes))if(o&&o.hasAttribute(t))return i.includes(o.getAttribute(t));return!0}));i.hasOwnProperty("model")?s.includes(t)?i.model.set({class:""}):i.model.set({class:"ck-hidden"}):s.includes(t)?i.set({class:""}):i.set({class:"ck-hidden"})}_createDropdown(e,t){const i=this.editor.ui.componentFactory;i.add(e.name,(n=>{let a;const{defaultItem:r,items:o,title:s}=e,l=o.filter((e=>{const i=e.split(":")[1];return t.find((({name:t})=>te(t,i)===e))})).map((e=>{const t=i.create(e);return e===r&&(a=t),t}));o.length!==l.length&&z.warnInvalidStyle({dropdown:e});const d=(0,g.createDropdown)(n,g.SplitButtonView),u=d.buttonView;return(0,g.addToolbarToDropdown)(d,l),u.set({label:ee(s,a.label),class:null,tooltip:!0}),u.bind("icon").toMany(l,"isOn",((...e)=>{const t=e.findIndex(Y);return t<0?a.icon:l[t].icon})),u.bind("label").toMany(l,"isOn",((...e)=>{const t=e.findIndex(Y);return ee(s,t<0?a.label:l[t].label)})),u.bind("isOn").toMany(l,"isOn",((...e)=>e.some(Y))),u.bind("class").toMany(l,"isOn",((...e)=>e.some(Y)?"ck-splitbutton_flatten":null)),u.on("execute",(()=>{l.some((({isOn:e})=>e))?d.isOpen=!d.isOpen:a.fire("execute")})),d.bind("isEnabled").toMany(l,"isEnabled",((...e)=>e.some(Y))),d}))}_createButton(e,t,i){const n=e.name;this.editor.ui.componentFactory.add(te(n,t),(a=>{const r=this.editor.commands.get("drupalElementStyle"),o=new g.ButtonView(a);return o.set({label:e.title,icon:e.icon,tooltip:!0,isToggleable:!0}),o.bind("isEnabled").to(r,"isEnabled"),o.bind("isOn").to(r,"value",(e=>e&&e[t]===n)),o.on("execute",this._executeCommand.bind(this,n,t)),this.listenTo(this.editor.ui,"update",(()=>{this.updateOptionVisibility(i,e,o,t)})),o}))}getDropdownListItemDefinitions(e,t,i){const n=new E.Collection;return e.forEach((t=>{const a={type:"button",model:new g.Model({group:i,commandValue:t.name,label:t.title,withText:!0,class:""})};n.add(a),this.listenTo(this.editor.ui,"update",(()=>{this.updateOptionVisibility(e,t,a,i)}))})),n}_createListDropdown(e,t){const i=this.editor.ui.componentFactory;i.add(e.name,(n=>{let a;const{defaultItem:r,items:o,title:s,defaultText:l}=e,d=e.name.split(":")[1],u=o.filter((e=>t.find((({name:t})=>te(t,d)===e)))).map((e=>{const t=i.create(e);return e===r&&(a=t),t}));o.length!==u.length&&z.warnInvalidStyle({dropdown:e});const c=(0,g.createDropdown)(n,g.DropdownButtonView),m=c.buttonView;m.set({label:ee(s,a.label),class:null,tooltip:l,withText:!0});const p=this.editor.commands.get("drupalElementStyle");return m.bind("label").to(p,"value",(e=>{if(e&&e[d])for(const i of t)if(i.name===e[d])return i.title;return l})),c.bind("isOn").to(p),c.bind("isEnabled").to(this),(0,g.addListToDropdown)(c,this.getDropdownListItemDefinitions(t,p,d)),this.listenTo(c,"execute",(e=>{this._executeCommand(e.source.commandValue,e.source.group)})),c}))}_executeCommand(e,t){this.editor.execute("drupalElementStyle",{value:e,group:t}),this.editor.editing.view.focus()}static get pluginName(){return"DrupalElementStyleUi"}}class ne extends e.Plugin{static get requires(){return[Q,ie]}static get pluginName(){return"DrupalElementStyle"}}function ae(e){const t=e.getFirstPosition().findAncestor("caption");return t&&a(t.parent)?t:null}function re(e){for(const t of e.getChildren())if(t&&t.is("element","caption"))return t;return null}class oe extends e.Command{refresh(){const e=this.editor.model.document.selection,t=e.getSelectedElement();if(!t)return this.isEnabled=!!o(e),void(this.value=!!ae(e));this.isEnabled=a(t),this.isEnabled?this.value=!!re(t):this.value=!1}execute(e={}){const{focusCaptionOnShow:t}=e;this.editor.model.change((e=>{this.value?this._hideDrupalMediaCaption(e):this._showDrupalMediaCaption(e,t)}))}_showDrupalMediaCaption(e,t){const i=this.editor.model.document.selection,n=this.editor.plugins.get("DrupalMediaCaptionEditing"),a=o(i),r=n._getSavedCaption(a)||e.createElement("caption");e.append(r,a),t&&e.setSelection(r,"in")}_hideDrupalMediaCaption(e){const t=this.editor,i=t.model.document.selection,n=t.plugins.get("DrupalMediaCaptionEditing");let a,r=i.getSelectedElement();r?a=re(r):(a=ae(i),r=o(i)),n._saveCaption(r,a),e.setSelection(r,"on"),e.remove(a)}}class se extends e.Plugin{static get requires(){return[]}static get pluginName(){return"DrupalMediaCaptionEditing"}constructor(e){super(e),this._savedCaptionsMap=new WeakMap}init(){const e=this.editor,t=e.model.schema;t.isRegistered("caption")?t.extend("caption",{allowIn:"drupalMedia"}):t.register("caption",{allowIn:"drupalMedia",allowContentOf:"$block",isLimit:!0}),e.commands.add("toggleMediaCaption",new oe(e)),this._setupConversion()}_setupConversion(){const e=this.editor,i=e.editing.view;var n;e.conversion.for("upcast").add(function(e){const t=(t,i,n)=>{const{viewItem:a}=i,{writer:r,consumable:o}=n;if(!i.modelRange||!o.consume(a,{attributes:["data-caption"]}))return;const s=r.createElement("caption"),l=i.modelRange.start.nodeAfter,d=e.data.processor.toView(a.getAttribute("data-caption")),u=r.createDocumentFragment();n.consumable.constructor.createFrom(d,n.consumable),n.convertChildren(d,u);for(const e of Array.from(u.getChildren()))r.append(e,s);r.append(s,l)};return e=>{e.on("element:drupal-media",t,{priority:"low"})}}(e)),e.conversion.for("editingDowncast").elementToElement({model:"caption",view:(e,{writer:n})=>{if(!a(e.parent))return null;const r=n.createEditableElement("figcaption");return(0,V.enablePlaceholder)({view:i,element:r,text:Drupal.t("Enter media caption"),keepOnFocus:!0}),(0,t.toWidgetEditable)(r,n)}}),e.editing.mapper.on("modelToViewPosition",(n=i,(e,t)=>{const i=t.modelPosition,r=i.parent;if(!a(r))return;const o=t.mapper.toViewElement(r);t.viewPosition=n.createPositionAt(o,i.offset+1)})),e.conversion.for("dataDowncast").add(function(e){return t=>{t.on("insert:caption",((t,i,n)=>{const{consumable:r,writer:o,mapper:s}=n;if(!a(i.item.parent)||!r.consume(i.item,"insert"))return;const l=e.model.createRangeIn(i.item),d=o.createDocumentFragment();s.bindElements(i.item,d);for(const{item:t}of Array.from(l)){const i={item:t,range:e.model.createRangeOn(t)},a=`insert:${t.name||"$text"}`;e.data.downcastDispatcher.fire(a,i,n);for(const a of t.getAttributeKeys())Object.assign(i,{attributeKey:a,attributeOldValue:null,attributeNewValue:i.item.getAttribute(a)}),e.data.downcastDispatcher.fire(`attribute:${a}`,i,n)}for(const e of o.createRangeIn(d).getItems())s.unbindViewElement(e);s.unbindViewElement(d);const u=e.data.processor.toData(d);if(u){const e=s.toViewElement(i.item.parent);o.setAttribute("data-caption",u,e)}}))}}(e))}_getSavedCaption(e){const t=this._savedCaptionsMap.get(e);return t?V.Element.fromJSON(t):null}_saveCaption(e,t){this._savedCaptionsMap.set(e,t.toJSON())}}class le extends e.Plugin{static get requires(){return[]}static get pluginName(){return"DrupalMediaCaptionUI"}init(){const{editor:t}=this,i=t.editing.view;t.ui.componentFactory.add("toggleDrupalMediaCaption",(n=>{const a=new g.ButtonView(n),r=t.commands.get("toggleMediaCaption");return a.set({label:Drupal.t("Caption media"),icon:e.icons.caption,tooltip:!0,isToggleable:!0}),a.bind("isOn","isEnabled").to(r,"value","isEnabled"),a.bind("label").to(r,"value",(e=>e?Drupal.t("Toggle caption off"):Drupal.t("Toggle caption on"))),this.listenTo(a,"execute",(()=>{t.execute("toggleMediaCaption",{focusCaptionOnShow:!0});const e=ae(t.model.document.selection);if(e){const n=t.editing.mapper.toViewElement(e);i.scrollToTheSelection(),i.change((e=>{e.addClass("drupal-media__caption_highlighted",n)}))}})),a}))}}class de extends e.Plugin{static get requires(){return[se,le]}static get pluginName(){return"DrupalMediaCaption"}}var ue={DrupalMedia:x,MediaImageTextAlternative:A,MediaImageTextAlternativeEditing:y,MediaImageTextAlternativeUi:k,DrupalLinkMedia:B,DrupalMediaCaption:de,DrupalElementStyle:ne}}(),n=n.default}()}));
\ No newline at end of file
diff --git a/web/core/modules/ckeditor5/js/ckeditor5.admin.es6.js b/web/core/modules/ckeditor5/js/ckeditor5.admin.es6.js
index 9e3db776bf..c996d2f506 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5.admin.es6.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5.admin.es6.js
@@ -1,6 +1,6 @@
 /**
  * @file
- * Provides admin UI for the CKEditor 5.
+ * Provides the admin UI for CKEditor 5.
  */
 
 ((Drupal, drupalSettings, $, JSON, once, Sortable, { tabbable }) => {
@@ -49,14 +49,14 @@
     }
 
     /**
-     * Notifies subscribers about new value.
+     * Notifies subscribers about new values.
      */
     notify() {
       this._listeners.forEach((listener) => listener(this._value));
     }
 
     /**
-     * Subscribes to be notified for changes.
+     * Subscribes a listener callback to changes.
      *
      * @param {Function} listener
      *   The function to be called when a new value is set.
@@ -862,7 +862,7 @@
    * @return {string}
    *   The selected buttons markup.
    *
-   * @internal
+   * @private
    */
   Drupal.theme.ckeditor5SelectedButtons = ({ buttons }) => {
     return `
@@ -886,7 +886,7 @@
    * @return {string}
    *   The CKEditor 5 divider buttons markup.
    *
-   * @internal
+   * @private
    */
   Drupal.theme.ckeditor5DividerButtons = ({ buttons }) => {
     return `
@@ -910,7 +910,7 @@
    * @return {string}
    *   The CKEditor 5 available buttons markup.
    *
-   * @internal
+   * @private
    */
   Drupal.theme.ckeditor5AvailableButtons = ({ buttons }) => {
     return `
@@ -940,7 +940,7 @@
    * @return {string}
    *   The CKEditor 5 buttons markup.
    *
-   * @internal
+   * @private
    */
   Drupal.theme.ckeditor5Button = ({ button: { label, id }, listType }) => {
     const buttonInstructions = {
@@ -986,7 +986,7 @@
    * @return {string}
    *   The CKEditor 5 admin UI markup.
    *
-   * @internal
+   * @private
    */
   Drupal.theme.ckeditor5Admin = ({
     availableButtons,
diff --git a/web/core/modules/ckeditor5/js/ckeditor5.filter.admin.es6.js b/web/core/modules/ckeditor5/js/ckeditor5.filter.admin.es6.js
index 64cf95a6f4..6775bbf763 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5.filter.admin.es6.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5.filter.admin.es6.js
@@ -2,7 +2,6 @@
  * @file
  * Provides Text Editor UI improvements specific to CKEditor 5.
  */
-
 ((Drupal, once) => {
   Drupal.behaviors.allowedTagsListener = {
     attach: function attach(context) {
@@ -21,113 +20,12 @@
               'drupal-ajax',
               '[data-drupal-selector="filter-format-edit-form"] [disabled], [data-drupal-selector="filter-format-add-form"] [disabled]',
             )
+            // eslint-disable-next-line max-nested-callbacks
             .forEach((disabledElement) => {
               disabledElement.removeAttribute('disabled');
             });
         });
       });
-      once(
-        'allowed-tags-listener',
-        context.querySelector(
-          '[data-drupal-selector="edit-filters-filter-html-settings-allowed-html"]',
-        ),
-      ).forEach((textarea) => {
-        const editorSelect = document.querySelector(
-          '[data-drupal-selector="edit-editor-editor"]',
-        );
-        const filterCheckbox = document.querySelector(
-          '[data-drupal-selector="edit-filters-filter-html-status"]',
-        );
-        const formSubmit = document.querySelector(
-          '[data-drupal-selector="edit-actions-submit"]',
-        );
-        const wrapper = textarea.closest('div');
-
-        const resetChanges = () => {
-          const updateButtonContainer = document.querySelector(
-            '[data-ckeditor5-allowed-tags-info]',
-          );
-          if (updateButtonContainer) {
-            updateButtonContainer.remove();
-          }
-
-          const allowedTagsDisabledHelp = document.querySelector(
-            '[data-ckeditor5-allowed-tags-disabled-help]',
-          );
-          if (allowedTagsDisabledHelp) {
-            allowedTagsDisabledHelp.remove();
-          }
-
-          formSubmit.removeAttribute('disabled');
-          wrapper.classList.remove('ckeditor5-filter-attention');
-        };
-
-        resetChanges();
-
-        const addAllowedTagsUpdateButton = () => {
-          resetChanges();
-
-          if (
-            editorSelect.value === 'ckeditor5' &&
-            filterCheckbox &&
-            filterCheckbox.checked
-          ) {
-            if (!textarea.hasAttribute('readonly')) {
-              wrapper.classList.add('ckeditor5-filter-attention');
-
-              const container = document.createElement('div');
-              container.setAttribute('data-ckeditor5-allowed-tags-info', true);
-              const description = document.createElement('p');
-
-              description.innerText = Drupal.t(
-                'Switching to CKEditor 5 requires, at minimum, the tags "<p> <br>". After switching to CKEditor 5, this field will be read-only, and will be updated based on which CKEditor 5 plugins are enabled. When switching to CKEditor 5 from an existing text format with content, we recommend documenting what tags are in use and then enabling the CKEditor 5 plugins that support them.',
-              );
-
-              const updateButton = document.createElement('button');
-              updateButton.setAttribute(
-                'name',
-                'update-ckeditor5-allowed-tags',
-              );
-              updateButton.innerText = Drupal.t(
-                'Apply changes to allowed tags.',
-              );
-              updateButton.addEventListener('click', () => {
-                editorSelect.dispatchEvent(new CustomEvent('change'));
-                setTimeout(() => {
-                  resetChanges();
-                });
-              });
-
-              container.appendChild(description);
-              container.appendChild(updateButton);
-
-              wrapper.appendChild(container);
-
-              // In this very specific use case, submitting the filter form must
-              // be prevented.
-              // - CKEditor 5 is the selected editor, but it's not yet accepted
-              //   by the form because it's not passing the validation restraint
-              //   requiring CKEditor 5 compatible "Allowed Tags". This validator,
-              //   by necessity fires before CKEditor 5 is registered with the
-              //   form.
-              // - The registering of an editor with the form typically occurs
-              //   when a change
-              formSubmit.setAttribute('disabled', true);
-              const formSubmitHelp = document.createElement('p');
-              formSubmitHelp.setAttribute(
-                'data-ckeditor5-allowed-tags-disabled-help',
-                true,
-              );
-              formSubmitHelp.textContent = Drupal.t(
-                'This form is not submittable when the editor is set to CKEditor 5 unless the "Limit allowed HTML tags and correct faulty HTML" filter\'s "Allowed HTML tags" field includes the tags required by CKEditor 5',
-              );
-              formSubmit.parentNode.append(formSubmitHelp);
-            }
-          }
-        };
-        editorSelect.addEventListener('change', addAllowedTagsUpdateButton);
-        filterCheckbox.addEventListener('change', addAllowedTagsUpdateButton);
-      });
     },
   };
 
diff --git a/web/core/modules/ckeditor5/js/ckeditor5.filter.admin.js b/web/core/modules/ckeditor5/js/ckeditor5.filter.admin.js
index 5cb2e422f2..98a6ecd2ec 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5.filter.admin.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5.filter.admin.js
@@ -15,65 +15,6 @@
           });
         });
       });
-      once('allowed-tags-listener', context.querySelector('[data-drupal-selector="edit-filters-filter-html-settings-allowed-html"]')).forEach(function (textarea) {
-        var editorSelect = document.querySelector('[data-drupal-selector="edit-editor-editor"]');
-        var filterCheckbox = document.querySelector('[data-drupal-selector="edit-filters-filter-html-status"]');
-        var formSubmit = document.querySelector('[data-drupal-selector="edit-actions-submit"]');
-        var wrapper = textarea.closest('div');
-
-        var resetChanges = function resetChanges() {
-          var updateButtonContainer = document.querySelector('[data-ckeditor5-allowed-tags-info]');
-
-          if (updateButtonContainer) {
-            updateButtonContainer.remove();
-          }
-
-          var allowedTagsDisabledHelp = document.querySelector('[data-ckeditor5-allowed-tags-disabled-help]');
-
-          if (allowedTagsDisabledHelp) {
-            allowedTagsDisabledHelp.remove();
-          }
-
-          formSubmit.removeAttribute('disabled');
-          wrapper.classList.remove('ckeditor5-filter-attention');
-        };
-
-        resetChanges();
-
-        var addAllowedTagsUpdateButton = function addAllowedTagsUpdateButton() {
-          resetChanges();
-
-          if (editorSelect.value === 'ckeditor5' && filterCheckbox && filterCheckbox.checked) {
-            if (!textarea.hasAttribute('readonly')) {
-              wrapper.classList.add('ckeditor5-filter-attention');
-              var container = document.createElement('div');
-              container.setAttribute('data-ckeditor5-allowed-tags-info', true);
-              var description = document.createElement('p');
-              description.innerText = Drupal.t('Switching to CKEditor 5 requires, at minimum, the tags "<p> <br>". After switching to CKEditor 5, this field will be read-only, and will be updated based on which CKEditor 5 plugins are enabled. When switching to CKEditor 5 from an existing text format with content, we recommend documenting what tags are in use and then enabling the CKEditor 5 plugins that support them.');
-              var updateButton = document.createElement('button');
-              updateButton.setAttribute('name', 'update-ckeditor5-allowed-tags');
-              updateButton.innerText = Drupal.t('Apply changes to allowed tags.');
-              updateButton.addEventListener('click', function () {
-                editorSelect.dispatchEvent(new CustomEvent('change'));
-                setTimeout(function () {
-                  resetChanges();
-                });
-              });
-              container.appendChild(description);
-              container.appendChild(updateButton);
-              wrapper.appendChild(container);
-              formSubmit.setAttribute('disabled', true);
-              var formSubmitHelp = document.createElement('p');
-              formSubmitHelp.setAttribute('data-ckeditor5-allowed-tags-disabled-help', true);
-              formSubmitHelp.textContent = Drupal.t('This form is not submittable when the editor is set to CKEditor 5 unless the "Limit allowed HTML tags and correct faulty HTML" filter\'s "Allowed HTML tags" field includes the tags required by CKEditor 5');
-              formSubmit.parentNode.append(formSubmitHelp);
-            }
-          }
-        };
-
-        editorSelect.addEventListener('change', addAllowedTagsUpdateButton);
-        filterCheckbox.addEventListener('change', addAllowedTagsUpdateButton);
-      });
     }
   };
   var originalAjaxEventResponse = Drupal.Ajax.prototype.eventResponse;
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalEmphasis/src/drupalemphasis.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalEmphasis/src/drupalemphasis.js
index 8fc5bab542..faafd4770c 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalEmphasis/src/drupalemphasis.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalEmphasis/src/drupalemphasis.js
@@ -5,7 +5,9 @@ import { Plugin } from 'ckeditor5/src/core';
 import DrupalEmphasisEditing from './drupalemphasisediting';
 
 /**
- * @internal
+ * Drupal-specific plugin to alter the CKEditor 5 italic command.
+ *
+ * @private
  */
 class DrupalEmphasis extends Plugin {
   /**
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalEmphasis/src/drupalemphasisediting.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalEmphasis/src/drupalemphasisediting.js
index aba92b33e8..70f95ede17 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalEmphasis/src/drupalemphasisediting.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalEmphasis/src/drupalemphasisediting.js
@@ -2,10 +2,9 @@
 import { Plugin } from 'ckeditor5/src/core';
 
 /**
- * @internal
- */
-/**
- * Converts italic text into em.
+ * Alters the italic command to output `<em>` instead of `<i>`.
+ *
+ * @private
  */
 class DrupalEmphasisEditing extends Plugin {
   /**
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalEmphasis/src/index.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalEmphasis/src/index.js
index b557f9d2ee..d5966446e9 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalEmphasis/src/index.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalEmphasis/src/index.js
@@ -3,7 +3,7 @@
 import DrupalEmphasis from './drupalemphasis';
 
 /**
- * @internal
+ * @private
  */
 export default {
   DrupalEmphasis,
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/drupalhtmlbuilder.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/drupalhtmlbuilder.js
index 1bdf25e1bd..fb5846b3b4 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/drupalhtmlbuilder.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/drupalhtmlbuilder.js
@@ -3,7 +3,15 @@
 /**
  * HTML builder that converts document fragments into strings.
  *
- * @internal
+ * Escapes ampersand characters (`&`) and angle brackets (`<` and `>`) when
+ * transforming data to HTML. This is required because
+ * \Drupal\Component\Utility\Xss::filter fails to parse element attributes
+ * values containing unescaped HTML entities.
+ *
+ * @see https://www.drupal.org/project/drupal/issues/3227831
+ * @see DrupalHtmlBuilder._escapeAttribute
+ *
+ * @private
  */
 export default class DrupalHtmlBuilder {
   /**
@@ -41,7 +49,7 @@ export default class DrupalHtmlBuilder {
   }
 
   /**
-   * Converts document fragment into HTML string and appends to the value.
+   * Converts a document fragment into an HTML string appended to the value.
    *
    * @param {DocumentFragment} node
    *   A document fragment to be appended to the value.
@@ -57,7 +65,7 @@ export default class DrupalHtmlBuilder {
   }
 
   /**
-   * Appends element node to the value.
+   * Appends an element node to the value.
    *
    * @param {DocumentFragment} node
    *   A document fragment to be appended to the value.
@@ -122,7 +130,9 @@ export default class DrupalHtmlBuilder {
    * @private
    */
   _appendText(node) {
-    // Text node doesn't have innerHTML property and textContent doesn't encode
+    // Repack the text into another node and extract using innerHTML. This
+    // works around text nodes not having an innerHTML property and textContent
+    // not encoding entities.
     // entities. That's why the text is repacked into another node and extracted
     // using innerHTML.
     const doc = document.implementation.createHTMLDocument('');
@@ -133,7 +143,7 @@ export default class DrupalHtmlBuilder {
   }
 
   /**
-   * Appends string to the value.
+   * Appends a string to the value.
    *
    * @param {string} str
    *  A string to be appended to the value.
@@ -157,6 +167,9 @@ export default class DrupalHtmlBuilder {
    * @param {string} text
    *  A string to be escaped.
    *
+   * @return {string}
+   *  Escaped string.
+   *
    * @see https://www.w3.org/TR/2008/REC-xml-20081126/#NT-AttValue
    * @see https://html.spec.whatwg.org/multipage/parsing.html#attribute-value-(single-quoted)-state
    * @see https://www.drupal.org/project/drupal/issues/3227831
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/drupalhtmlengine.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/drupalhtmlengine.js
index 6b101b3260..e365d42d49 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/drupalhtmlengine.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/drupalhtmlengine.js
@@ -6,15 +6,13 @@ import DrupalHtmlWriter from './drupalhtmlwriter';
 /**
  * A plugin that overrides the CKEditor HTML writer.
  *
- * Override the CKEditor 5 HTML writer to escape ampersand characters (&) and
- * the angle brackets (< and >). This is required because
- * \Drupal\Component\Utility\Xss::filter fails to parse element attributes with
- * unescaped entities in value.
+ * Overrides the CKEditor 5 HTML writer to account for Drupal XSS filtering
+ * needs.
  *
  * @see https://www.drupal.org/project/drupal/issues/3227831
  * @see DrupalHtmlBuilder._escapeAttribute
  *
- * @internal
+ * @private
  */
 class DrupalHtmlEngine extends Plugin {
   /**
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/drupalhtmlwriter.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/drupalhtmlwriter.js
index 56fe94ff18..4851ebdc72 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/drupalhtmlwriter.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/drupalhtmlwriter.js
@@ -8,11 +8,11 @@ import DrupalHtmlBuilder from './drupalhtmlbuilder';
  * attributes.
  *
  * @see module:engine/dataprocessor/basichtmlwriter~BasicHtmlWriter
- * @implements {module:engine/dataprocessor/htmlwriter~HtmlWriter}
+ * @implements module:engine/dataprocessor/htmlwriter~HtmlWriter
  *
  * @see https://www.drupal.org/project/drupal/issues/3227831
  *
- * @internal
+ * @private
  */
 export default class DrupalHtmlWriter {
   /**
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/index.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/index.js
index f58f6764fd..0033665d56 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/index.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/index.js
@@ -2,7 +2,7 @@
 import DrupalHtmlEngine from './drupalhtmlengine';
 
 /**
- * @internal
+ * @private
  */
 export default {
   DrupalHtmlEngine,
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/README.md b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/README.md
deleted file mode 100644
index d127535e5c..0000000000
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/README.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# ckeditor5-drupal-image
-
-Drupal image plugin for CKEditor5
-
-Provides required attributes `data-entity-uuid` and `data-entity-type`.
-
-## Usage
-
-This project is for creating minified js for [Drupal CKEditor5](http://drupal.org/project/ckeditor5)
-
-## Build
-
-Run `npm run build:dll` to create the minified js.
-
-Check the file path in `webpack.config.js` to ensure it points to the dll
-manifest in your copy of `ckeditor5`.
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/drupalimage.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/drupalimage.js
index 5aa48e33e3..5b67bd18d0 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/drupalimage.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/drupalimage.js
@@ -6,7 +6,7 @@ import DrupalImageEditing from './drupalimageediting';
 import DrupalImageAlternativeText from './drupalimagealternativetext';
 
 /**
- * @internal
+ * @private
  */
 class DrupalImage extends Plugin {
   /**
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/drupalimagealternativetext.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/drupalimagealternativetext.js
index 32267ab2fb..e82ab82527 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/drupalimagealternativetext.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/drupalimagealternativetext.js
@@ -25,14 +25,14 @@ import DrupalImageAlternativeTextUi from './imagealternativetext/drupalimagealte
  */
 export default class DrupalImageAlternativeText extends Plugin {
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   static get requires() {
     return [DrupalImageAlternativeTextEditing, DrupalImageAlternativeTextUi];
   }
 
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   static get pluginName() {
     return 'DrupalImageAlternativeText';
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/drupalimageediting.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/drupalimageediting.js
index 72cab1aee7..60af9f2f59 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/drupalimageediting.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/drupalimageediting.js
@@ -1,25 +1,77 @@
 /* eslint-disable import/no-extraneous-dependencies */
-// cSpell:words conversionutils downcasted linkimageediting
+// cSpell:words conversionutils downcasted linkimageediting emptyelement downcastdispatcher
 import { Plugin } from 'ckeditor5/src/core';
 import { setViewAttributes } from '@ckeditor/ckeditor5-html-support/src/conversionutils';
 
+/**
+ * @typedef {function} converterHandler
+ *
+ * Callback for a CKEditor 5 event.
+ *
+ * @param {Event} event
+ *  The CKEditor 5 event object.
+ * @param {object} data
+ *  The data associated with the event.
+ * @param {module:engine/conversion/downcastdispatcher~DowncastConversionApi} conversionApi
+ *  The CKEditor 5 conversion API object.
+ */
+
+/**
+ * Provides an empty image element.
+ *
+ * @param {writer} writer
+ *  The CKEditor 5 writer object.
+ *
+ * @return {module:engine/view/emptyelement~EmptyElement}
+ *  The empty image element.
+ *
+ * @private
+ */
 function createImageViewElement(writer) {
   return writer.createEmptyElement('img');
 }
 
-// A simple helper method to detect number strings.
+/**
+ * A simple helper method to detect number strings.
+ *
+ * @param {*} value
+ *  The value to test.
+ *
+ * @return {boolean}
+ *  True if the value is a string containing a number.
+ *
+ * @private
+ */
 function isNumberString(value) {
   const parsedValue = parseFloat(value);
 
   return !Number.isNaN(parsedValue) && value === String(parsedValue);
 }
 
+/**
+ * Generates a callback that saves the entity UUID to an attribute on data
+ * downcast.
+ *
+ * @return {function}
+ *  Callback that binds an event to its parameter.
+ *
+ * @private
+ */
 function modelEntityUuidToDataAttribute() {
-  function converter(evt, data, conversionApi) {
+  /**
+   * Callback for the attribute:dataEntityUuid event.
+   *
+   * Saves the UUID value to the data-entity-uuid attribute.
+   *
+   * @param {Event} event
+   * @param {object} data
+   * @param {module:engine/conversion/downcastdispatcher~DowncastConversionApi} conversionApi
+   */
+  function converter(event, data, conversionApi) {
     const { item } = data;
     const { consumable, writer } = conversionApi;
 
-    if (!consumable.consume(item, evt.name)) {
+    if (!consumable.consume(item, event.name)) {
       return;
     }
 
@@ -40,6 +92,9 @@ function modelEntityUuidToDataAttribute() {
   };
 }
 
+/**
+ * @type {Array.<{dataValue: string, modelValue: string}>}
+ */
 const alignmentMapping = [
   {
     modelValue: 'alignCenter',
@@ -55,16 +110,31 @@ const alignmentMapping = [
   },
 ];
 
-// Downcast `caption` model to `data-caption` attribute with its content
-// downcasted to plain HTML. This is needed because CKEditor 5 uses <caption>
-// element internally in various places, which differs from Drupal which uses
-// an attribute. For now to support that we have to manually repeat work done in
-// the DowncastDispatcher's private methods.
+/**
+ * Downcasts `caption` model to `data-caption` attribute with its content
+ * downcasted to plain HTML.
+ *
+ * This is needed because CKEditor 5 uses the `<caption>` element internally in
+ * various places, which differs from Drupal which uses an attribute. For now
+ * to support that we have to manually repeat work done in the
+ * DowncastDispatcher's private methods.
+ *
+ * @param {module:core/editor/editor~Editor} editor
+ *  The editor instance to use.
+ *
+ * @return {function}
+ *  Callback that binds an event to its parameter.
+ *
+ * @private
+ */
 function viewCaptionToCaptionAttribute(editor) {
   return (dispatcher) => {
     dispatcher.on(
       'insert:caption',
-      (evt, data, conversionApi) => {
+      /**
+       * @type {converterHandler}
+       */
+      (event, data, conversionApi) => {
         const { consumable, writer, mapper } = conversionApi;
         const imageUtils = editor.plugins.get('ImageUtils');
 
@@ -142,12 +212,28 @@ function viewCaptionToCaptionAttribute(editor) {
   };
 }
 
+/**
+ * Generates a callback that saves the entity type value to an attribute on
+ * data downcast.
+ *
+ * @return {function}
+ *  Callback that binds an event to it's parameter.
+ *
+ * @private
+ */
 function modelEntityTypeToDataAttribute() {
-  function converter(evt, data, conversionApi) {
+  /**
+   * Callback for the attribute:dataEntityType event.
+   *
+   * Saves the UUID value to the data-entity-type attribute.
+   *
+   * @type {converterHandler}
+   */
+  function converter(event, data, conversionApi) {
     const { item } = data;
     const { consumable, writer } = conversionApi;
 
-    if (!consumable.consume(item, evt.name)) {
+    if (!consumable.consume(item, event.name)) {
       return;
     }
 
@@ -168,8 +254,24 @@ function modelEntityTypeToDataAttribute() {
   };
 }
 
+/**
+ * Generates a callback that saves the align value to an attribute on
+ * data downcast.
+ *
+ * @return {function}
+ *  Callback that binds an event to its parameter.
+ *
+ * @private
+ */
 function modelImageStyleToDataAttribute() {
-  function converter(evt, data, conversionApi) {
+  /**
+   * Callback for the attribute:imageStyle event.
+   *
+   * Saves the alignment value to the data-align attribute.
+   *
+   * @type {converterHandler}
+   */
+  function converter(event, data, conversionApi) {
     const { item } = data;
     const { consumable, writer } = conversionApi;
 
@@ -178,7 +280,7 @@ function modelImageStyleToDataAttribute() {
     );
 
     // Consume only for the values that can be converted into data-align.
-    if (!mappedAlignment || !consumable.consume(item, evt.name)) {
+    if (!mappedAlignment || !consumable.consume(item, event.name)) {
       return;
     }
 
@@ -199,12 +301,28 @@ function modelImageStyleToDataAttribute() {
   };
 }
 
+/**
+ * Generates a callback that saves the width value to an attribute on
+ * data downcast.
+ *
+ * @return {function}
+ *  Callback that binds an event to its parameter.
+ *
+ * @private
+ */
 function modelImageWidthToAttribute() {
-  function converter(evt, data, conversionApi) {
+  /**
+   * Callback for the attribute:width event.
+   *
+   * Saves the width value to the width attribute.
+   *
+   * @type {converterHandler}
+   */
+  function converter(event, data, conversionApi) {
     const { item } = data;
     const { consumable, writer } = conversionApi;
 
-    if (!consumable.consume(item, evt.name)) {
+    if (!consumable.consume(item, event.name)) {
       return;
     }
 
@@ -230,12 +348,28 @@ function modelImageWidthToAttribute() {
   };
 }
 
+/**
+ * Generates a callback that saves the height value to an attribute on
+ * data downcast.
+ *
+ * @return {function}
+ *  Callback that binds an event to its parameter.
+ *
+ * @private
+ */
 function modelImageHeightToAttribute() {
-  function converter(evt, data, conversionApi) {
+  /**
+   * Callback for the attribute:height event.
+   *
+   * Saves the height value to the height attribute.
+   *
+   * @type {converterHandler}
+   */
+  function converter(event, data, conversionApi) {
     const { item } = data;
     const { consumable, writer } = conversionApi;
 
-    if (!consumable.consume(item, evt.name)) {
+    if (!consumable.consume(item, event.name)) {
       return;
     }
 
@@ -261,8 +395,23 @@ function modelImageHeightToAttribute() {
   };
 }
 
+/**
+ * Generates a callback that handles the data downcast for the img element.
+ *
+ * @return {function}
+ *  Callback that binds an event to its parameter.
+ *
+ * @private
+ */
 function viewImageToModelImage(editor) {
-  function converter(evt, data, conversionApi) {
+  /**
+   * Callback for the element:img event.
+   *
+   * Handles the Drupal specific attributes.
+   *
+   * @type {converterHandler}
+   */
+  function converter(event, data, conversionApi) {
     const { viewItem } = data;
     const { writer, consumable, safeInsert, updateConversionResult, schema } =
       conversionApi;
@@ -396,10 +545,22 @@ function viewImageToModelImage(editor) {
   };
 }
 
-// Modified alternative implementation of linkimageediting.js' downcastImageLink.
+/**
+ * Modified alternative implementation of linkimageediting.js' downcastImageLink.
+ *
+ * @return {function}
+ *  Callback that binds an event to its parameter.
+ *
+ * @private
+ */
 function downcastBlockImageLink() {
-  function converter(evt, data, conversionApi) {
-    if (!conversionApi.consumable.consume(data.item, evt.name)) {
+  /**
+   * Callback for the attribute:linkHref event.
+   *
+   * @type {converterHandler}
+   */
+  function converter(event, data, conversionApi) {
+    if (!conversionApi.consumable.consume(data.item, event.name)) {
       return;
     }
 
@@ -444,9 +605,15 @@ function downcastBlockImageLink() {
 }
 
 /**
- * @internal
+ * Add handling of 'dataEntityUuid', 'dataEntityType', 'isDecorative', 'width',
+ * 'height' attributes on image elements.
+ *
+ * @private
  */
 export default class DrupalImageEditing extends Plugin {
+  /**
+   * @inheritdoc
+   */
   static get requires() {
     return ['ImageUtils'];
   }
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imagealternativetext/drupalimagealternativetextediting.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imagealternativetext/drupalimagealternativetextediting.js
index 6936e837bf..f931c874fe 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imagealternativetext/drupalimagealternativetextediting.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imagealternativetext/drupalimagealternativetextediting.js
@@ -19,14 +19,14 @@ import ImageTextAlternativeCommand from '@ckeditor/ckeditor5-image/src/imagetext
  */
 export default class DrupalImageTextAlternativeEditing extends Plugin {
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   static get requires() {
     return ['ImageUtils'];
   }
 
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   static get pluginName() {
     return 'DrupalImageAlternativeTextEditing';
@@ -45,7 +45,7 @@ export default class DrupalImageTextAlternativeEditing extends Plugin {
   }
 
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   init() {
     const editor = this.editor;
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imagealternativetext/drupalimagealternativetextui.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imagealternativetext/drupalimagealternativetextui.js
index ac7d83e01f..6d29ea5746 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imagealternativetext/drupalimagealternativetextui.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imagealternativetext/drupalimagealternativetextui.js
@@ -40,21 +40,21 @@ import MissingAlternativeTextView from './ui/missingalternativetextview';
  */
 export default class DrupalImageAlternativeTextUi extends Plugin {
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   static get requires() {
     return [ContextualBalloon];
   }
 
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   static get pluginName() {
     return 'DrupalImageTextAlternativeUI';
   }
 
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   init() {
     this._createButton();
@@ -112,7 +112,7 @@ export default class DrupalImageAlternativeTextUi extends Plugin {
   }
 
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   destroy() {
     super.destroy();
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imagealternativetext/ui/imagealternativetextformview.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imagealternativetext/ui/imagealternativetextformview.js
index 553646606b..df231866fe 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imagealternativetext/ui/imagealternativetextformview.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imagealternativetext/ui/imagealternativetextformview.js
@@ -28,7 +28,7 @@ import { icons } from 'ckeditor5/src/core';
  */
 export default class ImageAlternativeTextFormView extends View {
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   constructor(locale) {
     super(locale);
@@ -163,7 +163,7 @@ export default class ImageAlternativeTextFormView extends View {
   }
 
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   render() {
     super.render();
@@ -187,7 +187,7 @@ export default class ImageAlternativeTextFormView extends View {
   }
 
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   destroy() {
     super.destroy();
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imagealternativetext/ui/missingalternativetextview.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imagealternativetext/ui/missingalternativetextview.js
index b67c233994..ddd8f6e3b7 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imagealternativetext/ui/missingalternativetextview.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imagealternativetext/ui/missingalternativetextview.js
@@ -16,7 +16,7 @@ import { View, ButtonView } from 'ckeditor5/src/ui';
  */
 export default class MissingAlternativeTextView extends View {
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   constructor(locale) {
     super(locale);
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalfilerepository.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalfilerepository.js
index 3f0d1ca5cc..a851e38efe 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalfilerepository.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalfilerepository.js
@@ -7,7 +7,9 @@ import { logWarning } from 'ckeditor5/src/utils';
 import DrupalImageUploadAdapter from './drupalimageuploadadapter';
 
 /**
- * @internal
+ * Provides a Drupal upload adapter.
+ *
+ * @private
  */
 export default class DrupalFileRepository extends Plugin {
   /**
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalimageupload.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalimageupload.js
index 9123242e61..629f086cc9 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalimageupload.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalimageupload.js
@@ -6,9 +6,9 @@ import DrupalImageUploadEditing from './drupalimageuploadediting';
 import DrupalFileRepository from './drupalfilerepository';
 
 /**
- * Integrates the CKEditor image upload with the Drupal.
+ * Integrates the CKEditor image upload with Drupal.
  *
- * @internal
+ * @private
  */
 class DrupalImageUpload extends Plugin {
   /**
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalimageuploadadapter.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalimageuploadadapter.js
index 5986432a52..49532f59f5 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalimageuploadadapter.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalimageuploadadapter.js
@@ -2,10 +2,17 @@
 /* cspell:words simpleuploadadapter filerepository */
 
 /**
- * Upload adapter. Copied from @ckeditor5/ckeditor5-upload/src/adapters/simpleuploadadapter
+ * Upload adapter.
  *
- * @internal
- * @implements {module:upload/filerepository~UploadAdapter}
+ * Copied from @ckeditor5/ckeditor5-upload/src/adapters/simpleuploadadapter
+ * Adds a mapping from `response.uuid` to `dataEntityUuid` and
+ * `response.entity_type` to `dataEntityType` for the callback after the file
+ * upload in the `_initListeners` method.
+ *
+ * @todo use response.entity_type directly instead of converting it https://www.drupal.org/project/drupal/issues/3275237
+ *
+ * @private
+ * @implements module:upload/filerepository~UploadAdapter
  */
 export default class DrupalImageUploadAdapter {
   /**
@@ -78,9 +85,13 @@ export default class DrupalImageUploadAdapter {
    * Initializes XMLHttpRequest listeners
    *
    * @private
-   * @param {Function} resolve Callback function to be called when the request is successful.
-   * @param {Function} reject Callback function to be called when the request cannot be completed.
-   * @param {File} file Native File object.
+   *
+   * @param {Function} resolve
+   *  Callback function to be called when the request is successful.
+   * @param {Function} reject
+   *  Callback function to be called when the request cannot be completed.
+   * @param {File} file
+   *  Native File object.
    */
   _initListeners(resolve, reject, file) {
     const xhr = this.xhr;
@@ -99,7 +110,6 @@ export default class DrupalImageUploadAdapter {
             : genericErrorText,
         );
       }
-
       resolve({
         urls: { default: response.url },
         dataEntityUuid: response.uuid ? response.uuid : '',
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalimageuploadediting.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalimageuploadediting.js
index 61c43c5581..405417cb1f 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalimageuploadediting.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalimageuploadediting.js
@@ -2,7 +2,9 @@
 import { Plugin } from 'ckeditor5/src/core';
 
 /**
- * @internal
+ * Adds Drupal-specific attributes to the CKEditor 5 image element.
+ *
+ * @private
  */
 export default class DrupalImageUploadEditing extends Plugin {
   /**
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/index.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/index.js
index c7ca689835..a1d1bf2f23 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/index.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/index.js
@@ -4,7 +4,7 @@ import DrupalImage from './drupalimage';
 import DrupalImageUpload from './imageupload/drupalimageupload';
 
 /**
- * @internal
+ * @private
  */
 export default {
   DrupalImage,
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalelementstyle.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalelementstyle.js
index 9bfa5d571b..52d120693f 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalelementstyle.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalelementstyle.js
@@ -30,11 +30,11 @@ import DrupalElementStyleEditing from './drupalelementstyle/drupalelementstyleed
  * @see module:drupalMedia/drupalmediaediting~DrupalMediaEditing
  * @see module:drupalMedia/drupalmediatoolbar~DrupalMediaToolbar
  *
- * @internal
+ * @private
  */
 export default class DrupalElementStyle extends Plugin {
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   static get requires() {
     return [DrupalElementStyleEditing, DrupalElementStyleUi];
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalelementstyle/drupalelementstylecommand.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalelementstyle/drupalelementstylecommand.js
index ecaf3bef3f..b84ba1d441 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalelementstyle/drupalelementstylecommand.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalelementstyle/drupalelementstylecommand.js
@@ -1,56 +1,21 @@
 /* eslint-disable import/no-extraneous-dependencies */
-/* cspell:words documentselection */
 import { Command } from 'ckeditor5/src/core';
+import { getClosestElementWithElementStyleAttribute } from './utils';
+import { groupNameToModelAttributeKey } from '../utils';
 
 /**
  * @module drupalMedia/drupalelementstyle/drupalelementstylecommand
  */
 
-/**
- * Gets closest element that has drupalElementStyle attribute in schema.
- *
- * @param {module:engine/model/documentselection~DocumentSelection} selection
- *   The current document selection.
- * @param {module:engine/model/schema~Schema} schema
- *   The model schema.
- *
- * @return {null|module:engine/model/element~Element}
- *   The closest element that supports element styles.
- */
-function getClosestElementWithElementStyleAttribute(selection, schema) {
-  const selectedElement = selection.getSelectedElement();
-
-  if (
-    selectedElement &&
-    schema.checkAttribute(selectedElement, 'drupalElementStyle')
-  ) {
-    return selectedElement;
-  }
-
-  let parent = selection.getFirstPosition().parent;
-
-  while (parent) {
-    if (
-      parent.is('element') &&
-      schema.checkAttribute(parent, 'drupalElementStyle')
-    ) {
-      return parent;
-    }
-
-    parent = parent.parent;
-  }
-
-  return null;
-}
-
 /**
  * The Drupal Element style command.
  *
- * This is used to apply Drupal Element style option to supported model elements.
+ * This is used to apply the Drupal Element Style option to supported model
+ * elements.
  *
  * @extends module:core/command~Command
  *
- * @internal
+ * @private
  */
 export default class DrupalElementStyleCommand extends Command {
   /**
@@ -58,81 +23,112 @@ export default class DrupalElementStyleCommand extends Command {
    *
    * @param {module:core/editor/editor~Editor} editor
    *   The editor instance.
-   * @param {Drupal.CKEditor5~DrupalElementStyle[]} styles
+   * @param {Object<string, Drupal.CKEditor5~DrupalElementStyleDefinition>} styles
    *   All available Drupal Element Styles.
    */
   constructor(editor, styles) {
     super(editor);
-    this._styles = new Map(
-      styles.map((style) => {
-        return [style.name, style];
-      }),
-    );
+    this.styles = {};
+    Object.keys(styles).forEach((group) => {
+      this.styles[group] = new Map(
+        styles[group].map((style) => {
+          return [style.name, style];
+        }),
+      );
+    });
+    this.modelAttributes = [];
+    // eslint-disable-next-line no-restricted-syntax
+    for (const group of Object.keys(styles)) {
+      const modelAttribute = groupNameToModelAttributeKey(group);
+      // Generate list of model attributes.
+      this.modelAttributes.push(modelAttribute);
+    }
   }
 
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   refresh() {
-    const editor = this.editor;
+    const { editor } = this;
     const element = getClosestElementWithElementStyleAttribute(
       editor.model.document.selection,
       editor.model.schema,
+      this.modelAttributes,
     );
 
     this.isEnabled = !!element;
 
     if (this.isEnabled) {
-      this.value = element.getAttribute('drupalElementStyle');
+      // Assign value to be corresponding command value based on the element's modelAttribute.
+      this.value = this.getValue(element);
+    } else {
+      this.value = false;
+    }
+  }
 
-      // If value is falsy, check if there is a default style to apply to the
-      // element.
-      if (!this.value) {
+  /**
+   * Gets the command value including groups and values.
+   *
+   * @example {drupalAlign: 'left', drupalViewMode: 'full'}
+   *
+   * @param {module:engine/model/element~Element} element
+   *   The element.
+   *
+   * @return {Object}
+   *   The groups and values in the form of an object.
+   */
+  getValue(element) {
+    const value = {};
+    // Get value for each of the Drupal Element Style groups.
+    Object.keys(this.styles).forEach((group) => {
+      const modelAttribute = groupNameToModelAttributeKey(group);
+      if (element.hasAttribute(modelAttribute)) {
+        value[group] = element.getAttribute(modelAttribute);
+      } else {
         // eslint-disable-next-line no-restricted-syntax
-        for (const [name, style] of this._styles.entries()) {
+        for (const [, style] of this.styles[group]) {
+          // Set it to the default value.
           if (style.isDefault) {
-            const appliesToCurrentElement = style.modelElements.find(
-              (modelElement) => element.is('element', modelElement),
-            );
-            if (appliesToCurrentElement) {
-              this.value = name;
-              break;
-            }
+            value[group] = style.name;
           }
         }
       }
-    } else {
-      this.value = false;
-    }
+    });
+    return value;
   }
 
   /**
    * Executes the command and applies the style to the selected model element.
    *
    * @example
-   *    editor.execute('drupalElementStyle', { value: 'alignLeft' });
+   *    editor.execute('drupalElementStyle', { value: 'left', group: 'align'});
    *
    * @param {Object} options
    *   The command options.
    * @param {string} options.value
    *   The name of the style as configured in the Drupal Element style
    *   configuration.
+   * @param {string} options.group
+   *   The group name of the drupalElementStyle.
    */
   execute(options = {}) {
-    const editor = this.editor;
-    const model = editor.model;
-
+    const {
+      editor: { model },
+    } = this;
+    const { value, group } = options;
+    const modelAttribute = groupNameToModelAttributeKey(group);
     model.change((writer) => {
-      const requestedStyle = options.value;
       const element = getClosestElementWithElementStyleAttribute(
         model.document.selection,
         model.schema,
+        this.modelAttributes,
       );
-
-      if (!requestedStyle || this._styles.get(requestedStyle).isDefault) {
-        writer.removeAttribute('drupalElementStyle', element);
+      if (!value || this.styles[group].get(value).isDefault) {
+        // Remove attribute from the element.
+        writer.removeAttribute(modelAttribute, element);
       } else {
-        writer.setAttribute('drupalElementStyle', requestedStyle, element);
+        // Set the attribute value on the element.
+        writer.setAttribute(modelAttribute, value, element);
       }
     });
   }
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalelementstyle/drupalelementstyleediting.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalelementstyle/drupalelementstyleediting.js
index 2b28811c27..dd8eba70dd 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalelementstyle/drupalelementstyleediting.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalelementstyle/drupalelementstyleediting.js
@@ -3,6 +3,7 @@
 import { Plugin, icons } from 'ckeditor5/src/core';
 import { first } from 'ckeditor5/src/utils';
 import DrupalElementStyleCommand from './drupalelementstylecommand';
+import { groupNameToModelAttributeKey } from '../utils';
 
 /**
  * @module drupalMedia/drupalelementstyle/drupalelementstyleediting
@@ -13,7 +14,7 @@ import DrupalElementStyleCommand from './drupalelementstylecommand';
  *
  * @param {string} name
  *   The name of the style definition.
- * @param styles
+ * @param {object} styles
  *   The styles to search from.
  * @return {Drupal.CKEditor5~DrupalElementStyle}
  */
@@ -33,6 +34,9 @@ function getStyleDefinitionByName(name, styles) {
  * or attribute.
  *
  * Note that only one style can be applied to a single model element.
+ *
+ * @param {object} styles
+ *  Existing styles.
  */
 function modelToViewStyleAttribute(styles) {
   return (evt, data, conversionApi) => {
@@ -58,7 +62,10 @@ function modelToViewStyleAttribute(styles) {
     if (newStyle) {
       if (newStyle.attributeName === 'class') {
         viewWriter.addClass(newStyle.attributeValue, viewElement);
-      } else {
+      } else if (!newStyle.isDefault) {
+        // We only reach this condition if the style is not the default value.
+        // In those instances, there is no need to downcast as the default value
+        // is set automatically when necessary.
         viewWriter.setAttribute(
           newStyle.attributeName,
           newStyle.attributeValue,
@@ -75,9 +82,9 @@ function modelToViewStyleAttribute(styles) {
  * This view to model converted supports styles that are configured to use
  * either CSS class or an attribute.
  *
- * Note that only one style can be applied to each model element.
+ * Note that more than one style can be applied to each modelElement.
  */
-function viewToModelStyleAttribute(styles) {
+function viewToModelStyleAttribute(styles, modelAttribute) {
   // Convert only non–default styles.
   const nonDefaultStyles = styles.filter((style) => !style.isDefault);
 
@@ -94,11 +101,9 @@ function viewToModelStyleAttribute(styles) {
       return;
     }
 
-    // Stop conversion early if the drupalElementStyle attribute isn't allowed
+    // Stop conversion early if modelAttribute represents an attribute that isn't allowed
     // for the element.
-    if (
-      !conversionApi.schema.checkAttribute(modelElement, 'drupalElementStyle')
-    ) {
+    if (!conversionApi.schema.checkAttribute(modelElement, modelAttribute)) {
       return;
     }
 
@@ -114,7 +119,7 @@ function viewToModelStyleAttribute(styles) {
         ) {
           // And convert this style to model attribute.
           conversionApi.writer.setAttribute(
-            'drupalElementStyle',
+            modelAttribute,
             style.name,
             modelElement,
           );
@@ -131,7 +136,7 @@ function viewToModelStyleAttribute(styles) {
             viewElement.getAttribute(style.attributeName)
           ) {
             conversionApi.writer.setAttribute(
-              'drupalElementStyle',
+              modelAttribute,
               style.name,
               modelElement,
             );
@@ -145,41 +150,69 @@ function viewToModelStyleAttribute(styles) {
 /**
  * The Drupal Element Style editing plugin.
  *
- * Additional Drupal Element styles can be defined with `drupalElementStyles`
+ * Additional Drupal Element Styles can be defined with `drupalElementStyles`
  * configuration key.
  *
+ * Additional Drupal Element Styles can support multiple axes (e.g. media
+ * alignment and media view modes) by adding the new group under
+ * drupalElementStyles.
+ *
  * @example
  *    config:
  *      drupalElementStyles:
- *         options:
- *           - name: 'side'
- *             icon: 'objectBlockRight'
- *             title: 'Side image'
- *             attributeName: 'class'
- *             attributeValue: 'image-side'
- *             modelElement: ['drupalMedia']
+ *        side:
+ *          - name: 'side'
+ *            icon: 'objectBlockRight'
+ *            title: 'Side image'
+ *            attributeName: 'class'
+ *            attributeValue: 'image-side'
+ *            modelElements: ['drupalMedia']
+ *        align:
+ *           - name: 'right'
+ *             title: 'Right aligned media'
+ *             icon: 'objectRight'
+ *             attributeName: 'data-align'
+ *             modelElements: [ 'drupalMedia' ]
+ *           - name: 'left'
+ *             title: 'Left aligned media'
+ *             icon: 'objectLeft'
+ *             attributeName: 'data-align'
+ *             attributeValue: 'left'
+ *             modelElements: [ 'drupalMedia' ]
+ *        viewMode:
+ *           - name: 'full view mode'
+ *             title: 'Full view mode'
+ *             attributeName: 'data-view-mode'
+ *             attributeValue: 'full'
+ *             modelElements: [ 'drupalMedia' ]
+ *           - name: 'compact view mode'
+ *             title: 'Compact view mode'
+ *             attributeName: 'data-view-mode'
+ *             attributeValue: 'compact'
+ *             modelElements: [ 'drupalMedia' ]
  *
- * @see Drupal.CKEditor5~DrupalElementStyle
+ * @see Drupal.CKEditor5~DrupalElementStyleDefinition
  *
  * @extends module:core/plugin~Plugin
  *
- * @internal
+ * @private
  */
 export default class DrupalElementStyleEditing extends Plugin {
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   init() {
-    const editor = this.editor;
+    const { editor } = this;
 
-    // Ensure that the drupalElementStyles.options exists always.
-    editor.config.define('drupalElementStyles', { options: [] });
-    const stylesConfig = editor.config.get('drupalElementStyles').options;
+    const stylesConfig = editor.config.get('drupalElementStyles');
+    this.normalizedStyles = {};
 
     /**
-     * The Drupal Element Styles.
+     * The Drupal Element Style definitions.
      *
-     * @typedef {Object} Drupal.CKEditor5~DrupalElementStyle
+     * @typedef {Object} Drupal.CKEditor5~DrupalElementStyleDefinition
+     *   Object that contains an array of DrupalElementStyle objects for each
+     *   group.
      *
      * @prop {string} name
      *   The name of the style used for identifying the button.
@@ -195,43 +228,49 @@ export default class DrupalElementStyleEditing extends Plugin {
      *   An icon for the style button. This needs to either refer to an icon in
      *   the CKEditor 5 core icons, or this can be the XML content of the icon.
      *
-     * @type {Drupal.CKEditor5~DrupalElementStyle[]}
+     * @type {Drupal.CKEditor5~DrupalElementStyleDefinition}
      */
-    this.normalizedStyles = stylesConfig
-      .map((style) => {
-        // Allow defining style icon as a string that is referring to the
-        // CKEditor 5 default icons.
-        if (typeof style.icon === 'string') {
-          if (icons[style.icon]) {
-            style.icon = icons[style.icon];
+    Object.keys(stylesConfig).forEach((group) => {
+      this.normalizedStyles[group] = stylesConfig[group] // array of styles
+        .map((style) => {
+          // Allow defining style icon as a string that is referring to the
+          // CKEditor 5 default icons.
+          if (typeof style.icon === 'string') {
+            if (icons[style.icon]) {
+              style.icon = icons[style.icon];
+            }
+          }
+          if (style.name) {
+            // Make sure names are all strings.
+            style.name = `${style.name}`;
+          }
+          return style;
+        })
+        .filter((style) => {
+          if (
+            !style.isDefault &&
+            (!style.attributeName || !style.attributeValue)
+          ) {
+            console.warn(
+              `${style.attributeValue} drupalElementStyles options must include attributeName and attributeValue.`,
+            );
+            return false;
+          }
+          if (!style.modelElements || !Array.isArray(style.modelElements)) {
+            console.warn(
+              'drupalElementStyles options must include an array of supported modelElements.',
+            );
+            return false;
           }
-        }
-        return style;
-      })
-      .filter((style) => {
-        if (
-          !style.isDefault &&
-          (!style.attributeName || !style.attributeValue)
-        ) {
-          console.warn(
-            'drupalElementStyles options must include attributeName and attributeValue.',
-          );
-          return false;
-        }
-        if (!style.modelElements || !Array.isArray(style.modelElements)) {
-          console.warn(
-            'drupalElementStyles options must include an array of supported modelElements.',
-          );
-          return false;
-        }
 
-        if (!style.name) {
-          console.warn('drupalElementStyles options must include a name.');
-          return false;
-        }
+          if (!style.name) {
+            console.warn('drupalElementStyles options must include a name.');
+            return false;
+          }
 
-        return true;
-      });
+          return true;
+        });
+    });
 
     this._setupConversion();
 
@@ -250,52 +289,60 @@ export default class DrupalElementStyleEditing extends Plugin {
    * @private
    */
   _setupConversion() {
-    const editor = this.editor;
-    const schema = editor.model.schema;
+    const { editor } = this;
+    const { schema } = editor.model;
 
-    const modelToViewConverter = modelToViewStyleAttribute(
-      this.normalizedStyles,
-    );
-    const viewToModelConverter = viewToModelStyleAttribute(
-      this.normalizedStyles,
-    );
+    const groupNamesArr = Object.keys(this.normalizedStyles);
 
-    editor.editing.downcastDispatcher.on(
-      'attribute:drupalElementStyle',
-      modelToViewConverter,
-    );
-    editor.data.downcastDispatcher.on(
-      'attribute:drupalElementStyle',
-      modelToViewConverter,
-    );
+    groupNamesArr.forEach((group) => {
+      const modelAttribute = groupNameToModelAttributeKey(group);
 
-    // Allow drupalElementStyle on all model elements that have associated
-    // styles.
-    const modelElements = [
-      ...new Set(
-        this.normalizedStyles
-          .map((style) => {
-            return style.modelElements;
-          })
-          .flat(),
-      ),
-    ];
-    modelElements.forEach((modelElement) => {
-      schema.extend(modelElement, { allowAttributes: 'drupalElementStyle' });
-    });
+      const modelToViewConverter = modelToViewStyleAttribute(
+        this.normalizedStyles[group],
+      );
+      const viewToModelConverter = viewToModelStyleAttribute(
+        this.normalizedStyles[group],
+        modelAttribute,
+      );
 
-    // View to model converter that runs on all elements.
-    editor.data.upcastDispatcher.on(
-      'element',
-      viewToModelConverter,
-      // This needs to be set as low priority to ensure this runs always after
-      // the element has been converted to a model element.
-      { priority: 'low' },
-    );
+      editor.editing.downcastDispatcher.on(
+        `attribute:${modelAttribute}`,
+        modelToViewConverter,
+      );
+      editor.data.downcastDispatcher.on(
+        `attribute:${modelAttribute}`,
+        modelToViewConverter,
+      );
+
+      // Allow drupalElementStyle model attributes on all model elements that
+      // have associated styles.
+      const modelElements = [
+        ...new Set(
+          this.normalizedStyles[group]
+            .map((style) => {
+              return style.modelElements;
+            })
+            .flat(),
+        ),
+      ];
+      modelElements.forEach((modelElement) => {
+        schema.extend(modelElement, {
+          allowAttributes: modelAttribute,
+        });
+      });
+      // View to model converter that runs on all elements.
+      editor.data.upcastDispatcher.on(
+        'element',
+        viewToModelConverter,
+        // This needs to be set as low priority to ensure this runs always after
+        // the element has been converted to a model element.
+        { priority: 'low' },
+      );
+    });
   }
 
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   static get pluginName() {
     return 'DrupalElementStyleEditing';
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalelementstyle/drupalelementstyleui.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalelementstyle/drupalelementstyleui.js
index 6fa1fc93a7..21869fe57f 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalelementstyle/drupalelementstyleui.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalelementstyle/drupalelementstyleui.js
@@ -1,16 +1,20 @@
 /* eslint-disable import/no-extraneous-dependencies */
-/* cspell:words drupalelementstyleediting splitbutton imagestyle componentfactory */
+/* cspell:words drupalelementstyleediting splitbutton imagestyle componentfactory buttonview */
 import { Plugin } from 'ckeditor5/src/core';
+import { Collection, toMap } from 'ckeditor5/src/utils';
 import utils from '@ckeditor/ckeditor5-image/src/imagestyle/utils';
 import {
   addToolbarToDropdown,
+  addListToDropdown,
   ButtonView,
   createDropdown,
+  DropdownButtonView,
+  Model,
   SplitButtonView,
 } from 'ckeditor5/src/ui';
 import DrupalElementStyleEditing from './drupalelementstyleediting';
-
 import { isObject } from '../utils';
+import { getClosestElementWithElementStyleAttribute } from './utils';
 
 /**
  * @module drupalMedia/drupalelementstyle/drupalelementstyleui
@@ -49,14 +53,16 @@ const getDropdownButtonTitle = (dropdownTitle, buttonTitle) => {
  * components in the component factory.
  *
  * @param {string} name
- *   The name of the component.
+ *   The name of the style
+ * @param {string} group
+ *   The group of the style.
  * @return {string}
  *   The UI component name.
  *
  * @see module:ui/componentfactory~ComponentFactory
  */
-function getUIComponentName(name) {
-  return `drupalElementStyle:${name}`;
+function getUIComponentName(name, group) {
+  return `drupalElementStyle:${group}:${name}`;
 }
 
 /**
@@ -64,66 +70,194 @@ function getUIComponentName(name) {
  *
  * @extends module:core/plugin~Plugin
  *
- * @internal
+ * @private
  */
 export default class DrupalElementStyleUi extends Plugin {
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   static get requires() {
     return [DrupalElementStyleEditing];
   }
 
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   init() {
-    const plugins = this.editor.plugins;
+    const { plugins } = this.editor;
     const toolbarConfig = this.editor.config.get('drupalMedia.toolbar') || [];
+    const definedStyles = plugins.get(
+      'DrupalElementStyleEditing',
+    ).normalizedStyles;
 
-    const definedStyles = Object.values(
-      plugins.get('DrupalElementStyleEditing').normalizedStyles,
-    );
-
-    definedStyles.forEach((styleConfig) => {
-      this._createButton(styleConfig);
+    Object.keys(definedStyles).forEach((group) => {
+      definedStyles[group].forEach((style) => {
+        this._createButton(style, group, definedStyles[group]);
+      });
     });
 
     /**
      * A Drupal Element Style dropdown definition.
+     * One dropdown definition can only contain items from one group.
+     *
+     * List dropdown display configuration.
+     * @example
+     *    config:
+     *       drupalMedia:
+     *        toolbar:
+     *          - name: 'drupalMedia:viewMode'
+     *            display: 'listDropdown'
+     *            items:
+     *              - 'drupalElementStyle:viewMode:default'
+     *              - 'drupalElementStyle:viewMode:full'
+     *              - 'drupalElementStyle:viewMode:media_library'
+     *              - 'drupalElementStyle:viewMode:compact'
+     *            defaultItem: 'drupalElementStyle:viewMode:default'
+     *
+     * Split button dropdown display configuration.
+     * @example
+     *    config:
+     *       drupalMedia:
+     *        toolbar:
+     *          - name: 'drupalMedia:side'
+     *            display: 'splitButton'
+     *            items:
+     *              - 'drupalElementStyle:side:right'
+     *              - 'drupalElementStyle:side:left'
+     *            defaultItem: 'drupalElementStyle:side:right'
      *
+     * Toolbar buttons configuration (non-dropdown).
      * @example
      *    config:
      *       drupalMedia:
-     *         toolbar:
-     *           - name: 'drupalMedia:alignment'
-     *             title: 'Custom title for the dropdown'
-     *             items:
-     *               - 'drupalElementStyle:alignLeft'
-     *               - 'drupalElementStyle:alignCenter'
-     *               - 'drupalElementStyle:alignRight'
-     *             defaultItem: 'drupalElementStyle:alignCenter'
+     *        toolbar:
+     *          - 'drupalElementStyle:align:breakText'
+     *          - 'drupalElementStyle:align:left'
+     *          - 'drupalElementStyle:align:center'
+     *          - 'drupalElementStyle:align:right'
      *
      * @typedef {Object} Drupal.CKEditor5~drupalElementStyleDropdownDefinition
      *
+     * These properties are needed for a list or split button dropdown
+     * configuration. Buttons directly on the toolbar without a dropdown can be
+     * configured like in the align example above.
      * @prop {string} name
-     *   The name of the dropdown used for identifying the dropdown.
+     *   The name of the dropdown used for identifying the dropdown, either as a
+     *   list or icons.
+     * @prop {string} display
+     *   The type of the dropdown used. Available options are `listDropdown` and
+     *   `splitButton`.
      * @prop {string[]} items
      *   The items displayed in the dropdown. These must be styles defined in
-     *   `drupalElementStyles.options`.
+     *   `drupalElementStyles`.
      * @prop {string} defaultItem
      *   The default item of the dropdown. This must be a style defined in
-     *   `drupalElementStyles.options`.
+     *   `drupalElementStyles`.
      * @prop {string} [title]
      *   The title of the dropdown.
      *
      * @see module:drupalMedia/drupalelementstyle/drupalelementstyleediting:DrupalElementStyleEditing
      */
-    const definedDropdowns = toolbarConfig.filter(isObject);
+    const definedDropdowns = toolbarConfig.filter(isObject).filter((obj) => {
+      const items = [];
+      if (!obj.display) {
+        console.warn(
+          'dropdown configuration must include a display key specifying either listDropdown or splitButton.',
+        );
+        return false;
+      }
+      if (!obj.items.includes(obj.defaultItem)) {
+        console.warn(
+          'defaultItem must be part of items in the dropdown configuration.',
+        );
+      }
+      // eslint-disable-next-line no-restricted-syntax
+      for (const item of obj.items) {
+        const groupName = item.split(':')[1];
+        items.push(groupName);
+      }
+      if (!items.every((i) => i === items[0])) {
+        console.warn(
+          'dropdown configuration should only contain buttons from one group.',
+        );
+        return false;
+      }
+      return true;
+    });
 
     definedDropdowns.forEach((dropdownConfig) => {
-      this._createDropdown(dropdownConfig, definedStyles);
+      // Only create dropdowns if there are 2 or more items.
+      if (dropdownConfig.items.length >= 2) {
+        const groupName = dropdownConfig.name.split(':')[1];
+        switch (dropdownConfig.display) {
+          case 'splitButton':
+            this._createDropdown(dropdownConfig, definedStyles[groupName]);
+            break;
+          case 'listDropdown':
+            this._createListDropdown(dropdownConfig, definedStyles[groupName]);
+            break;
+          default:
+            break;
+        }
+      }
+    });
+  }
+
+  /**
+   * Updates the visibility of options depending on the selection's media type.
+   *
+   * @param {Drupal.CKEditor5~DrupalElementStyleDefinition[]} definedStyles
+   *   A list of defined styles of one group.
+   * @param {Drupal.CKEditor5~DrupalElementStyleDefinition} style
+   *   The style to check be checked against the media type's specific styles.
+   * @param {module:ui/dropdown/utils~ListDropdownItemDefinition|module:ui/button/buttonview} option
+   *   Dropdown item definition or ButtonView
+   * @param {string} group
+   *   Name of group of the defined styles.
+   */
+  updateOptionVisibility(definedStyles, style, option, group) {
+    const { selection } = this.editor.model.document;
+    // Convert DrupalElementStyle[] into an object.
+    const definedStylesObject = {};
+    definedStylesObject[group] = definedStyles;
+    const modelElement = selection
+      ? selection.getSelectedElement()
+      : getClosestElementWithElementStyleAttribute(
+          selection,
+          this.editor.model.schema,
+          definedStylesObject,
+        );
+
+    const filteredDefinedStyles = definedStyles.filter(function (item) {
+      // eslint-disable-next-line no-restricted-syntax
+      for (const [key, value] of toMap(item.modelAttributes)) {
+        if (modelElement && modelElement.hasAttribute(key)) {
+          return value.includes(modelElement.getAttribute(key));
+        }
+      }
+      return true;
     });
+
+    // List dropdown case.
+    // Classes are set on the model of the dropdown item definition for list
+    // dropdowns.
+    if (option.hasOwnProperty('model')) {
+      if (!filteredDefinedStyles.includes(style)) {
+        // Hide the style option if it is not available for the media type that
+        // the modelElement is.
+        option.model.set({ class: 'ck-hidden' });
+      } else {
+        // Un-hide the style option here after changing selection to a media
+        // type that should have the button visible.
+        option.model.set({ class: '' });
+      }
+      // Split button case and non-dropdown toolbar button case.
+      // Classes are set on the ButtonView.
+    } else if (!filteredDefinedStyles.includes(style)) {
+      option.set({ class: 'ck-hidden' });
+    } else {
+      option.set({ class: '' });
+    }
   }
 
   /**
@@ -132,7 +266,7 @@ export default class DrupalElementStyleUi extends Plugin {
    * @param {Drupal.CKEditor5~drupalElementStyleDropdownDefinition} dropdownConfig
    *   The dropdown configuration.
    * @param {Drupal.CKEditor5~DrupalElementStyle[]} definedStyles
-   *   A list of defined styles.
+   *   A list of defined styles of one group.
    *
    * @see module:ui/componentfactory~ComponentFactory
    *
@@ -146,11 +280,12 @@ export default class DrupalElementStyleUi extends Plugin {
 
       const { defaultItem, items, title } = dropdownConfig;
       const buttonViews = items
-        .filter((itemName) =>
-          definedStyles.find(
-            ({ name }) => getUIComponentName(name) === itemName,
-          ),
-        )
+        .filter((itemName) => {
+          const groupName = itemName.split(':')[1];
+          return definedStyles.find(
+            ({ name }) => getUIComponentName(name, groupName) === itemName,
+          );
+        })
         .map((buttonName) => {
           const button = factory.create(buttonName);
 
@@ -232,16 +367,20 @@ export default class DrupalElementStyleUi extends Plugin {
    *
    * @param {Drupal.CKEditor5~DrupalElementStyle} buttonConfig
    *   The button configuration.
+   * @param {string} group
+   *   The name of the group (e.g. 'align', 'viewMode').
+   * @param {Drupal.CKEditor5~DrupalElementStyleDefinition[]} definedStyles
+   *   A list of defined styles of one group.
    *
    * @see module:ui/componentfactory~ComponentFactory
    *
    * @private
    */
-  _createButton(buttonConfig) {
+  _createButton(buttonConfig, group, definedStyles) {
     const buttonName = buttonConfig.name;
 
     this.editor.ui.componentFactory.add(
-      getUIComponentName(buttonName),
+      getUIComponentName(buttonName, group),
       (locale) => {
         const command = this.editor.commands.get('drupalElementStyle');
         const view = new ButtonView(locale);
@@ -254,31 +393,162 @@ export default class DrupalElementStyleUi extends Plugin {
         });
 
         view.bind('isEnabled').to(command, 'isEnabled');
-        view.bind('isOn').to(command, 'value', (value) => value === buttonName);
-        view.on('execute', this._executeCommand.bind(this, buttonName));
+        view.bind('isOn').to(command, 'value', (value) => {
+          return value && value[group] === buttonName;
+        });
+
+        view.on('execute', this._executeCommand.bind(this, buttonName, group));
+
+        this.listenTo(this.editor.ui, 'update', () => {
+          this.updateOptionVisibility(definedStyles, buttonConfig, view, group);
+        });
 
         return view;
       },
     );
   }
 
+  /**
+   * A helper function that parses the different dropdown options and returns
+   * list item definitions ready for use in the dropdown.
+   *
+   * @param {Drupal.CKEditor5~DrupalElementStyleDefinition[]} definedStyles
+   *   A list of defined styles of one group.
+   * @param {module:drupalMedia/drupalelementstyle/drupalelementstylecommand} command
+   *   The drupalElementStyle command.
+   * @param {string} group
+   *   The name of the group (e.g. 'align', 'viewMode').
+   * @return {Iterable.<module:ui/dropdown/utils~ListDropdownItemDefinition>}
+   *   Dropdown item definitions.
+   *
+   * @private
+   */
+  getDropdownListItemDefinitions(definedStyles, command, group) {
+    const itemDefinitions = new Collection();
+    definedStyles.forEach((style) => {
+      const definition = {
+        type: 'button',
+        model: new Model({
+          group,
+          commandValue: style.name,
+          label: style.title,
+          withText: true,
+          class: '',
+        }),
+      };
+      itemDefinitions.add(definition);
+
+      // Handles selecting another element's list dropdown button's visibility.
+      // We need to listen to editor UI changes instead of selection because
+      // visibility of the styles can be impacted by either selection or
+      // changes to the model.
+      this.listenTo(this.editor.ui, 'update', () => {
+        this.updateOptionVisibility(definedStyles, style, definition, group);
+      });
+    });
+    return itemDefinitions;
+  }
+
+  /**
+   * A helper function that creates a list dropdown component.
+   *
+   * @param {Drupal.CKEditor5~drupalElementStyleDropdownDefinition} dropdownConfig
+   *   The dropdown configuration.
+   * @param {Drupal.CKEditor5~DrupalElementStyle[]} definedStyles
+   *   A list of defined styles of one group.
+   *
+   * @private
+   */
+  _createListDropdown(dropdownConfig, definedStyles) {
+    const factory = this.editor.ui.componentFactory;
+    factory.add(dropdownConfig.name, (locale) => {
+      let defaultButton;
+
+      const { defaultItem, items, title, defaultText } = dropdownConfig;
+      const group = dropdownConfig.name.split(':')[1];
+      const buttonViews = items
+        .filter((itemName) => {
+          return definedStyles.find(
+            ({ name }) => getUIComponentName(name, group) === itemName,
+          );
+        })
+        .map((buttonName) => {
+          const button = factory.create(buttonName);
+
+          if (buttonName === defaultItem) {
+            defaultButton = button;
+          }
+
+          return button;
+        });
+
+      if (items.length !== buttonViews.length) {
+        utils.warnInvalidStyle({ dropdown: dropdownConfig });
+      }
+
+      const dropdownView = createDropdown(locale, DropdownButtonView);
+      const dropdownButtonView = dropdownView.buttonView;
+
+      dropdownButtonView.set({
+        label: getDropdownButtonTitle(title, defaultButton.label),
+        class: null,
+        tooltip: defaultText,
+        withText: true,
+      });
+
+      const command = this.editor.commands.get('drupalElementStyle');
+
+      // If style is selected, use the label of the selected style as the
+      // default label of the splitbutton.
+      dropdownButtonView.bind('label').to(command, 'value', (commandValue) => {
+        if (commandValue && commandValue[group]) {
+          // eslint-disable-next-line no-restricted-syntax
+          for (const style of definedStyles) {
+            if (style.name === commandValue[group]) {
+              return style.title;
+            }
+          }
+        }
+        return defaultText;
+      });
+
+      dropdownView.bind('isOn').to(command);
+      dropdownView.bind('isEnabled').to(this);
+
+      addListToDropdown(
+        dropdownView,
+        this.getDropdownListItemDefinitions(definedStyles, command, group),
+      );
+      // Execute command when an item from the dropdown is selected.
+      this.listenTo(dropdownView, 'execute', (evt) => {
+        this._executeCommand(evt.source.commandValue, evt.source.group);
+      });
+      return dropdownView;
+    });
+  }
+
   /**
    * Executes the Drupal Element Style command.
    *
    * @param {string} name
    *   The name of the style that should be applied.
+   * @param {string} group
+   *   The name of the group (e.g. 'align', 'viewMode').
    *
    * @see module:drupalMedia/drupalelementstyle/drupalelementstylecommand~DrupalElementStyleCommand
    *
    * @private
    */
-  _executeCommand(name) {
-    this.editor.execute('drupalElementStyle', { value: name });
+  _executeCommand(name, group) {
+    this.editor.execute('drupalElementStyle', {
+      value: name,
+      group,
+    });
     this.editor.editing.view.focus();
   }
 
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   static get pluginName() {
     return 'DrupalElementStyleUi';
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalelementstyle/utils.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalelementstyle/utils.js
new file mode 100644
index 0000000000..4db1f8ee40
--- /dev/null
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalelementstyle/utils.js
@@ -0,0 +1,70 @@
+/* cspell:words documentselection */
+/**
+ * Checks the schema to see if drupalElementStyle is supported on the element.
+ *
+ * @param {module:engine/model/element~Element|null} selectedElement
+ *   The selected element.
+ * @param {string[]} modelAttributes
+ *   Array of model attribute keys.
+ * @param {module:engine/model/schema~Schema} schema
+ *   The model schema.
+ *
+ * @return {boolean}
+ *   Whether element supports any of the drupalElementStyle attributes.
+ *
+ * @internal
+ */
+export function elementSupportsDrupalElementStyles(
+  selectedElement,
+  modelAttributes,
+  schema,
+) {
+  // eslint-disable-next-line no-restricted-syntax
+  for (const modelAttribute of modelAttributes) {
+    if (schema.checkAttribute(selectedElement, modelAttribute)) {
+      return true;
+    }
+  }
+  return false;
+}
+
+/**
+ * Gets the closest element with any drupalElementStyle attribute in its schema.
+ *
+ * @param {module:engine/model/documentselection~DocumentSelection} selection
+ *   The current document selection.
+ * @param {module:engine/model/schema~Schema} schema
+ *   The model schema.
+ * @param {string[]} modelAttributes
+ *   All available Drupal Element Style model attributes.
+ *
+ * @return {null|module:engine/model/element~Element}
+ *   The closest element that supports element styles.
+ *
+ * @internal
+ */
+export function getClosestElementWithElementStyleAttribute(
+  selection,
+  schema,
+  modelAttributes,
+) {
+  const selectedElement = selection.getSelectedElement();
+  if (
+    selectedElement &&
+    elementSupportsDrupalElementStyles(selectedElement, modelAttributes, schema)
+  ) {
+    return selectedElement;
+  }
+  let { parent } = selection.getFirstPosition();
+
+  while (parent) {
+    if (parent.is('element')) {
+      // eslint-disable-next-line no-restricted-syntax
+      if (elementSupportsDrupalElementStyles(parent, modelAttributes, schema)) {
+        return parent;
+      }
+    }
+    parent = parent.parent;
+  }
+  return null;
+}
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupallinkmedia/drupallinkmedia.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupallinkmedia/drupallinkmedia.js
index 4e0bffd505..847f762b55 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupallinkmedia/drupallinkmedia.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupallinkmedia/drupallinkmedia.js
@@ -6,7 +6,7 @@ import DrupalLinkMediaEditing from './drupallinkmediaediting';
 import DrupalLinkMediaUI from './drupallinkmediaui';
 
 /**
- * @internal
+ * @private
  */
 export default class DrupalLinkMedia extends Plugin {
   /**
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupallinkmedia/drupallinkmediaediting.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupallinkmedia/drupallinkmediaediting.js
index c4d2ccd7b9..588c7e67d2 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupallinkmedia/drupallinkmediaediting.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupallinkmedia/drupallinkmediaediting.js
@@ -319,7 +319,7 @@ function upcastMediaLinkManualDecorator(editor, decorator) {
 /**
  * Model to view and view to model conversions for linked media elements.
  *
- * @internal
+ * @private
  *
  * @see https://github.com/ckeditor/ckeditor5/blob/v31.0.0/packages/ckeditor5-link/src/linkimage.js
  */
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupallinkmedia/drupallinkmediaui.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupallinkmedia/drupallinkmediaui.js
index 1764e04c28..c366ec2102 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupallinkmedia/drupallinkmediaui.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupallinkmedia/drupallinkmediaui.js
@@ -8,7 +8,7 @@ import linkIcon from '../../../../../icons/link.svg';
 /**
  * The link media UI plugin.
  *
- * @internal
+ * @private
  */
 export default class DrupalLinkMediaUI extends Plugin {
   /**
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmedia.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmedia.js
index d5d871792f..74167436c3 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmedia.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmedia.js
@@ -10,9 +10,21 @@ import MediaImageTextAlternative from './mediaimagetextalternative';
 import DrupalMediaGeneralHtmlSupport from './drupalmediageneralhtmlsupport';
 
 /**
- * @internal
+ * Main entrypoint to the Drupal media widget.
+ *
+ * See individual capabilities for details:
+ *  - {@link DrupalMediaEditing}
+ *  - {@link DrupalMediaGeneralHtmlSupport}
+ *  - {@link DrupalMediaUI}
+ *  - {@link DrupalMediaToolbar}
+ *  - {@link MediaImageTextAlternative}
+ *
+ * @private
  */
 export default class DrupalMedia extends Plugin {
+  /**
+   * @inheritdoc
+   */
   static get requires() {
     return [
       DrupalMediaEditing,
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediacaption.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediacaption.js
index 65950738c1..3abd8b45af 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediacaption.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediacaption.js
@@ -5,13 +5,21 @@ import DrupalMediaCaptionEditing from './drupalmediacaption/drupalmediacaptioned
 import DrupalMediaCaptionUI from './drupalmediacaption/drupalmediacaptionui';
 
 /**
- * @internal
+ * Provides the caption feature on Drupal media elements.
+ *
+ * @private
  */
 export default class DrupalMediaCaption extends Plugin {
+  /**
+   * @inheritdoc
+   */
   static get requires() {
     return [DrupalMediaCaptionEditing, DrupalMediaCaptionUI];
   }
 
+  /**
+   * @inheritdoc
+   */
   static get pluginName() {
     return 'DrupalMediaCaption';
   }
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediacaption/drupalmediacaptioncommand.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediacaption/drupalmediacaptioncommand.js
index fbdd45e455..1c99bf5eae 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediacaption/drupalmediacaptioncommand.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediacaption/drupalmediacaptioncommand.js
@@ -36,11 +36,11 @@ function getCaptionFromDrupalMediaModelElement(drupalMediaModelElement) {
  *
  * @extends module:core/command~Command
  *
- * @internal
+ * @private
  */
 export default class ToggleDrupalMediaCaptionCommand extends Command {
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   refresh() {
     const selection = this.editor.model.document.selection;
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediacaption/drupalmediacaptionediting.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediacaption/drupalmediacaptionediting.js
index f36a934144..aeebe89082 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediacaption/drupalmediacaptionediting.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediacaption/drupalmediacaptionediting.js
@@ -174,25 +174,25 @@ function modelCaptionToCaptionAttribute(editor) {
  *
  * @extends module:core/plugin~Plugin
  *
- * @internal
+ * @private
  */
 export default class DrupalMediaCaptionEditing extends Plugin {
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   static get requires() {
     return [];
   }
 
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   static get pluginName() {
     return 'DrupalMediaCaptionEditing';
   }
 
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   constructor(editor) {
     super(editor);
@@ -208,7 +208,7 @@ export default class DrupalMediaCaptionEditing extends Plugin {
   }
 
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   init() {
     const editor = this.editor;
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediacaption/drupalmediacaptionui.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediacaption/drupalmediacaptionui.js
index 4c9e53f244..f77ec17098 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediacaption/drupalmediacaptionui.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediacaption/drupalmediacaptionui.js
@@ -6,7 +6,7 @@ import { getMediaCaptionFromModelSelection } from './utils';
 /**
  * The caption media UI plugin.
  *
- * @internal
+ * @private
  */
 export default class DrupalMediaCaptionUI extends Plugin {
   /**
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediaediting.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediaediting.js
index 9e3fe6ce11..5f94ca7463 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediaediting.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediaediting.js
@@ -1,30 +1,40 @@
 /* eslint-disable import/no-extraneous-dependencies */
-/* cspell:words insertdrupalmedia drupalmediaediting */
+/* cspell:words insertdrupalmedia drupalmediaediting insertdrupalmediacommand drupalmediametadatarepository */
 
 import { Plugin } from 'ckeditor5/src/core';
 import { toWidget, Widget } from 'ckeditor5/src/widget';
 
 import InsertDrupalMediaCommand from './insertdrupalmedia';
-import { getPreviewContainer } from './utils';
+import { getPreviewContainer, isDrupalMedia } from './utils';
+import { METADATA_ERROR } from './mediaimagetextalternative/utils';
 
 /**
  * @module drupalMedia/drupalmediaediting
  */
 
 /**
- * @internal
+ * The Drupal Media Editing plugin.
+ *
+ * Handles the transformation from the CKEditor 5 UI to Drupal-specific markup.
+ *
+ * @private
  */
 export default class DrupalMediaEditing extends Plugin {
+  /**
+   * @inheritdoc
+   */
   static get requires() {
     return [Widget];
   }
 
+  /**
+   * @inheritdoc
+   */
   init() {
     this.attrs = {
       drupalMediaAlt: 'alt',
       drupalMediaEntityType: 'data-entity-type',
       drupalMediaEntityUuid: 'data-entity-uuid',
-      drupalMediaViewMode: 'data-view-mode',
     };
     const options = this.editor.config.get('drupalMedia');
     if (!options) {
@@ -43,6 +53,7 @@ export default class DrupalMediaEditing extends Plugin {
 
     this._defineSchema();
     this._defineConverters();
+    this._defineListeners();
 
     this.editor.commands.add(
       'insertDrupalMedia',
@@ -50,6 +61,99 @@ export default class DrupalMediaEditing extends Plugin {
     );
   }
 
+  /**
+   * Upcast `drupalMediaIsImage` from Drupal Media metadata.
+   *
+   * @param {module:engine/model/node~Node} modelElement
+   *   The `drupalMedia` model element.
+   *
+   * @see module:drupalMedia/drupalmediametadatarepository~DrupalMediaMetadataRepository
+   */
+  upcastDrupalMediaIsImage(modelElement) {
+    const { model, plugins } = this.editor;
+    const metadataRepository = plugins.get('DrupalMediaMetadataRepository');
+
+    // Get all metadata for drupalMedia elements to set value for
+    // drupalMediaIsImage attribute. When other plugins start using the
+    // metadata, this functionality will be handled more generically.
+    metadataRepository
+      .getMetadata(modelElement)
+      .then((metadata) => {
+        if (!modelElement) {
+          // Nothing to do if model element has been removed before
+          // promise was resolved.
+          return;
+        }
+        // Enqueue a model change that is not visible to the undo/redo feature.
+        model.enqueueChange({ isUndoable: false }, (writer) => {
+          writer.setAttribute(
+            'drupalMediaIsImage',
+            !!metadata.imageSourceMetadata,
+            modelElement,
+          );
+        });
+      })
+      .catch((e) => {
+        if (!modelElement) {
+          // Nothing to do if model element has been removed before
+          // promise was resolved.
+          return;
+        }
+        console.warn(e.toString());
+        model.enqueueChange({ isUndoable: false }, (writer) => {
+          writer.setAttribute(
+            'drupalMediaIsImage',
+            METADATA_ERROR,
+            modelElement,
+          );
+        });
+      });
+  }
+
+  /**
+   * Upcast `drupalMediaType` from Drupal Media metadata.
+   *
+   * @param {module:engine/model/node~Node} modelElement
+   *   The `drupalMedia` model element.
+   *
+   * @see module:drupalMedia/drupalmediametadatarepository~DrupalMediaMetadataRepository
+   *
+   * @private
+   */
+  upcastDrupalMediaType(modelElement) {
+    const metadataRepository = this.editor.plugins.get(
+      'DrupalMediaMetadataRepository',
+    );
+    // Get all metadata for drupalMedia elements to set value for
+    // drupalMediaType attribute. When other plugins start using the
+    // metadata, this functionality will be handled more generically.
+    metadataRepository
+      .getMetadata(modelElement)
+      .then((metadata) => {
+        if (!modelElement) {
+          // Nothing to do if model element has been removed before
+          // promise was resolved.
+          return;
+        }
+        // Enqueue a model change in `transparent` batch to make it
+        // invisible to the undo/redo functionality.
+        this.editor.model.enqueueChange({ isUndoable: false }, (writer) => {
+          writer.setAttribute('drupalMediaType', metadata.type, modelElement);
+        });
+      })
+      .catch((e) => {
+        if (!modelElement) {
+          // Nothing to do if model element has been removed before
+          // promise was resolved.
+          return;
+        }
+        console.warn(e.toString());
+        this.editor.model.enqueueChange({ isUndoable: false }, (writer) => {
+          writer.setAttribute('drupalMediaType', METADATA_ERROR, modelElement);
+        });
+      });
+  }
+
   /**
    * Fetches preview from the server.
    *
@@ -84,6 +188,11 @@ export default class DrupalMediaEditing extends Plugin {
     return { label: this.labelError, preview: this.themeError };
   }
 
+  /**
+   * Registers drupalMedia as a block element in the DOM converter.
+   *
+   * @private
+   */
   _defineSchema() {
     const schema = this.editor.model.schema;
     schema.register('drupalMedia', {
@@ -99,15 +208,65 @@ export default class DrupalMediaEditing extends Plugin {
     this.editor.editing.view.domConverter.blockElements.push('drupal-media');
   }
 
+  /**
+   * Defines handling of drupal media element in the content lifecycle.
+   *
+   * @private
+   */
   _defineConverters() {
     const conversion = this.editor.conversion;
+    const metadataRepository = this.editor.plugins.get(
+      'DrupalMediaMetadataRepository',
+    );
 
-    conversion.for('upcast').elementToElement({
-      view: {
-        name: 'drupal-media',
-      },
-      model: 'drupalMedia',
-    });
+    conversion
+      .for('upcast')
+      .elementToElement({
+        view: {
+          name: 'drupal-media',
+        },
+        model: 'drupalMedia',
+      })
+      .add((dispatcher) => {
+        dispatcher.on(
+          'element:drupal-media',
+          (evt, data) => {
+            const [modelElement] = data.modelRange.getItems();
+            metadataRepository
+              .getMetadata(modelElement)
+              .then((metadata) => {
+                if (!modelElement) {
+                  return;
+                }
+                // On upcast, get `drupalMediaIsImage` attribute value from media metadata
+                // repository.
+                this.upcastDrupalMediaIsImage(modelElement);
+                // Enqueue a model change after getting modelElement.
+                this.editor.model.enqueueChange(
+                  { isUndoable: false },
+                  (writer) => {
+                    writer.setAttribute(
+                      'drupalMediaType',
+                      metadata.type,
+                      modelElement,
+                    );
+                  },
+                );
+              })
+              .catch((e) => {
+                // There isn't any UI indication for errors because this should be
+                // always called after the Drupal Media has been upcast, which would
+                // already display an error in the UI.
+                console.warn(e.toString());
+              });
+          },
+          // This converter needs to have the lowest priority to ensure that the
+          // model element and its attributes have already been converted. It is only used
+          // to gather metadata to make the UI tailored to the specific media entity that
+          // is being dealt with.
+          { priority: 'lowest' },
+        );
+      });
 
     conversion.for('dataDowncast').elementToElement({
       model: 'drupalMedia',
@@ -202,7 +361,10 @@ export default class DrupalMediaEditing extends Plugin {
         // List all attributes that should trigger re-rendering of the
         // preview.
         dispatcher.on('attribute:drupalMediaEntityUuid:drupalMedia', converter);
-        dispatcher.on('attribute:drupalMediaViewMode:drupalMedia', converter);
+        dispatcher.on(
+          'attribute:drupalElementStyleViewMode:drupalMedia',
+          converter,
+        );
         dispatcher.on('attribute:drupalMediaEntityType:drupalMedia', converter);
         dispatcher.on('attribute:drupalMediaAlt:drupalMedia', converter);
 
@@ -211,12 +373,13 @@ export default class DrupalMediaEditing extends Plugin {
 
     conversion.for('editingDowncast').add((dispatcher) => {
       dispatcher.on(
-        'attribute:drupalElementStyle:drupalMedia',
+        'attribute:drupalElementStyleAlign:drupalMedia',
         (evt, data, conversionApi) => {
           const alignMapping = {
-            alignLeft: 'drupal-media-style-align-left',
-            alignRight: 'drupal-media-style-align-right',
-            alignCenter: 'drupal-media-style-align-center',
+            // This is a map of CSS classes representing Drupal element styles for alignments.
+            left: 'drupal-media-style-align-left',
+            right: 'drupal-media-style-align-right',
+            center: 'drupal-media-style-align-center',
           };
           const viewElement = conversionApi.mapper.toViewElement(data.item);
           const viewWriter = conversionApi.writer;
@@ -269,6 +432,29 @@ export default class DrupalMediaEditing extends Plugin {
     });
   }
 
+  /**
+   * Defines behavior when an drupalMedia element is inserted.
+   *
+   * Listen to `insertContent` event on the model to set `drupalMediaIsImage`
+   * and `drupalMediaType` attribute when `drupalMedia` model element is
+   * inserted directly to the model.
+   *
+   * @see module:drupalMedia/insertdrupalmediacommand~InsertDrupalMediaCommand
+   *
+   * @private
+   */
+  _defineListeners() {
+    this.editor.model.on('insertContent', (eventInfo, [modelElement]) => {
+      if (!isDrupalMedia(modelElement)) {
+        return;
+      }
+      this.upcastDrupalMediaIsImage(modelElement);
+      // Need to upcast DrupalMediaType to model so it can be used to show
+      // correct buttons based on bundle.
+      this.upcastDrupalMediaType(modelElement);
+    });
+  }
+
   /**
    * MediaFilterController::preview requires the saved element.
    *
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediageneralhtmlsupport.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediageneralhtmlsupport.js
index 4c8639ba06..d95c38209f 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediageneralhtmlsupport.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediageneralhtmlsupport.js
@@ -4,13 +4,14 @@ import { Plugin } from 'ckeditor5/src/core';
 import { setViewAttributes } from '@ckeditor/ckeditor5-html-support/src/conversionutils';
 
 /**
- * View-to-model conversion helper preserving allowed attributes on the Drupal Media model.
+ * View-to-model conversion helper for Drupal Media.
+ * Used for preserving allowed attributes on the Drupal Media model.
  *
  * @param {module:html-support/datafilter~DataFilter} dataFilter
  *   The General HTML support data filter.
  *
  * @return {function}
- *   function that adds an event listener to upcastDispatcher.
+ *   Function that adds an event listener to upcastDispatcher.
  */
 function viewToModelDrupalMediaAttributeConverter(dataFilter) {
   return (dispatcher) => {
@@ -134,7 +135,7 @@ function modelToEditingViewAttributeConverter() {
  * Model to data view attribute converter.
  *
  * @return {function}
- *   function that adds an event listener to downcastDispatcher.
+ *   Function that adds an event listener to downcastDispatcher.
  */
 function modelToDataViewAttributeConverter() {
   return (dispatcher) => {
@@ -172,7 +173,7 @@ function modelToDataViewAttributeConverter() {
 /**
  * Integrates Drupal Media with General HTML Support.
  *
- * @internal
+ * @private
  */
 export default class DrupalMediaGeneralHtmlSupport extends Plugin {
   /**
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediametadatarepository.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediametadatarepository.js
index e743904593..e7dd3f79ce 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediametadatarepository.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediametadatarepository.js
@@ -26,7 +26,7 @@ const _fetchMetadata = async (url) => {
 };
 
 /**
- * @internal
+ * @private
  */
 export default class DrupalMediaMetadataRepository extends Plugin {
   /**
@@ -37,10 +37,11 @@ export default class DrupalMediaMetadataRepository extends Plugin {
   }
 
   /**
-   * Gets metadata for `drupalMedia` model element.
+   * Gets metadata for a `drupalMedia` model element.
    *
    * @param {module:engine/model/element~Element} modelElement
-   *   The model element which metadata should be retrieved.
+   *   The model element from which metadata should be retrieved.
+   *
    * @return {Promise<Object>}
    */
   getMetadata(modelElement) {
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediatoolbar.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediatoolbar.js
index 4356ef3cc6..de4dc9e177 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediatoolbar.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediatoolbar.js
@@ -26,17 +26,26 @@ function normalizeDeclarativeConfig(config) {
 }
 
 /**
- * @internal
+ * @private
  */
 export default class DrupalMediaToolbar extends Plugin {
+  /**
+   * @inheritdoc
+   */
   static get requires() {
     return [WidgetToolbarRepository];
   }
 
+  /**
+   * @inheritdoc
+   */
   static get pluginName() {
     return 'DrupalMediaToolbar';
   }
 
+  /**
+   * @inheritdoc
+   */
   afterInit() {
     const { editor } = this;
     const widgetToolbarRepository = editor.plugins.get(WidgetToolbarRepository);
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediaui.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediaui.js
index 466990f4e2..162e042e5c 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediaui.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediaui.js
@@ -7,7 +7,9 @@ import { ButtonView } from 'ckeditor5/src/ui';
 import mediaIcon from '../theme/icons/medialibrary.svg';
 
 /**
- * @internal
+ * Provides the toolbar button to insert a Drupal media element.
+ *
+ * @private
  */
 export default class DrupalMediaUI extends Plugin {
   init() {
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/index.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/index.js
index 3610787a04..e0ea27218d 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/index.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/index.js
@@ -17,7 +17,7 @@ import MediaImageTextAlternativeEditing from './mediaimagetextalternative/mediai
 import MediaImageTextAlternativeUi from './mediaimagetextalternative/mediaimagetextalternativeui';
 
 /**
- * @internal
+ * @private
  */
 export default {
   DrupalMedia,
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/insertdrupalmedia.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/insertdrupalmedia.js
index 18509fa1a9..a84b8a267a 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/insertdrupalmedia.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/insertdrupalmedia.js
@@ -1,6 +1,7 @@
 /* eslint-disable import/no-extraneous-dependencies */
 // cSpell:words insertdrupalmediacommand
 import { Command } from 'ckeditor5/src/core';
+import { groupNameToModelAttributeKey } from './utils';
 
 /**
  * @module drupalMedia/insertdrupalmediacommand
@@ -11,9 +12,6 @@ function createDrupalMedia(writer, attributes) {
   return drupalMedia;
 }
 
-/**
- * @internal
- */
 /**
  * The insert media command.
  *
@@ -23,6 +21,7 @@ function createDrupalMedia(writer, attributes) {
  * In order to insert media at the current selection position, execute the
  * command and pass the attributes desired in the drupal-media element:
  *
+ * @example
  *    editor.execute('insertDrupalMedia', {
  *      'alt': 'Alt text',
  *      'data-align': 'left',
@@ -31,6 +30,8 @@ function createDrupalMedia(writer, attributes) {
  *      'data-entity-uuid': 'media-entity-uuid',
  *      'data-view-mode': 'default',
  *    });
+ *
+ * @private
  */
 export default class InsertDrupalMediaCommand extends Command {
   execute(attributes) {
@@ -67,14 +68,19 @@ export default class InsertDrupalMediaCommand extends Command {
       const elementStyleEditing = this.editor.plugins.get(
         'DrupalElementStyleEditing',
       );
+
+      const { normalizedStyles } = elementStyleEditing;
       // eslint-disable-next-line no-restricted-syntax
-      for (const style of elementStyleEditing.normalizedStyles) {
-        if (
-          attributes[style.attributeName] &&
-          style.attributeValue === attributes[style.attributeName]
-        ) {
-          modelAttributes.drupalElementStyle = style.name;
-          break;
+      for (const group of Object.keys(normalizedStyles)) {
+        // eslint-disable-next-line no-restricted-syntax
+        for (const style of elementStyleEditing.normalizedStyles[group]) {
+          if (
+            attributes[style.attributeName] &&
+            style.attributeValue === attributes[style.attributeName]
+          ) {
+            const modelAttribute = groupNameToModelAttributeKey(group);
+            modelAttributes[modelAttribute] = style.name;
+          }
         }
       }
     }
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative.js
index 53d9dd4d4f..48f621422e 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative.js
@@ -3,22 +3,21 @@ import { Plugin } from 'ckeditor5/src/core';
 import MediaImageTextAlternativeEditing from './mediaimagetextalternative/mediaimagetextalternativeediting';
 import MediaImageTextAlternativeUi from './mediaimagetextalternative/mediaimagetextalternativeui';
 
-/**
- * @internal
- */
 /**
  * The media image text alternative plugin.
+ *
+ * @private
  */
 export default class MediaImageTextAlternative extends Plugin {
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   static get requires() {
     return [MediaImageTextAlternativeEditing, MediaImageTextAlternativeUi];
   }
 
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   static get pluginName() {
     return 'MediaImageTextAlternative';
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative/mediaimagetextalternativecommand.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative/mediaimagetextalternativecommand.js
index 896cedae24..b4623eee77 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative/mediaimagetextalternativecommand.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative/mediaimagetextalternativecommand.js
@@ -15,7 +15,7 @@ export default class MediaImageTextAlternativeCommand extends Command {
    * The command value: `false` if there is no `alt` attribute, otherwise the value of the `alt` attribute.
 
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   refresh() {
     const drupalMediaElement = getClosestSelectedDrupalMediaElement(
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative/mediaimagetextalternativeediting.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative/mediaimagetextalternativeediting.js
index 864432018d..78021cd85f 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative/mediaimagetextalternativeediting.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative/mediaimagetextalternativeediting.js
@@ -5,7 +5,6 @@ import { Plugin } from 'ckeditor5/src/core';
 import { TooltipView, Template } from 'ckeditor5/src/ui';
 import MediaImageTextAlternativeCommand from './mediaimagetextalternativecommand';
 import DrupalMediaMetadataRepository from '../drupalmediametadatarepository';
-import { isDrupalMedia } from '../utils';
 import { METADATA_ERROR } from './utils';
 
 /**
@@ -17,72 +16,21 @@ import { METADATA_ERROR } from './utils';
  */
 export default class MediaImageTextAlternativeEditing extends Plugin {
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   static get requires() {
     return [DrupalMediaMetadataRepository];
   }
 
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   static get pluginName() {
     return 'MediaImageTextAlternativeEditing';
   }
 
   /**
-   * Upcasts `drupalMediaIsImage` from Drupal Media metadata.
-   *
-   * @param {module:engine/model/node~Node} modelElement
-   *   The `drupalMedia` model element.
-   *
-   * @see module:drupalMedia/drupalmediametadatarepository~DrupalMediaMetadataRepository
-   *
-   * @private
-   */
-  _upcastDrupalMediaIsImage(modelElement) {
-    const { model, plugins } = this.editor;
-    const metadataRepository = plugins.get('DrupalMediaMetadataRepository');
-
-    // Get all metadata for drupalMedia elements to set value for
-    // drupalMediaIsImage attribute. When other plugins start using the
-    // metadata, this functionality will be handled more generically.
-    metadataRepository
-      .getMetadata(modelElement)
-      .then((metadata) => {
-        if (!modelElement) {
-          // Nothing to do if model element has been removed before
-          // promise was resolved.
-          return;
-        }
-        // Enqueue a model change that is not visible to the undo/redo feature.
-        model.enqueueChange({ isUndoable: false }, (writer) => {
-          writer.setAttribute(
-            'drupalMediaIsImage',
-            !!metadata.imageSourceMetadata,
-            modelElement,
-          );
-        });
-      })
-      .catch((e) => {
-        if (!modelElement) {
-          // Nothing to do if model element has been removed before
-          // promise was resolved.
-          return;
-        }
-        console.warn(e.toString());
-        model.enqueueChange({ isUndoable: false }, (writer) => {
-          writer.setAttribute(
-            'drupalMediaIsImage',
-            METADATA_ERROR,
-            modelElement,
-          );
-        });
-      });
-  }
-
-  /**
-   * @inheritDoc
+   * @inheritdoc
    */
   init() {
     const {
@@ -94,37 +42,6 @@ export default class MediaImageTextAlternativeEditing extends Plugin {
       allowAttributes: ['drupalMediaIsImage'],
     });
 
-    // Listen to `insertContent` event on the model to set `drupalMediaIsImage`
-    // attribute when `drupalMedia` model element is inserted directly to the
-    // model.
-    // @see module:drupalMedia/insertdrupalmediacommand~InsertDrupalMediaCommand
-    this.listenTo(model, 'insertContent', (evt, [modelElement]) => {
-      if (!isDrupalMedia(modelElement)) {
-        return;
-      }
-
-      this._upcastDrupalMediaIsImage(modelElement);
-    });
-
-    // On upcast, get `drupalMediaIsImage` attribute value from media metadata
-    // repository.
-    conversion.for('upcast').add((dispatcher) => {
-      dispatcher.on(
-        'element:drupal-media',
-        (event, data) => {
-          const [modelElement] = data.modelRange.getItems();
-          if (!isDrupalMedia(modelElement)) {
-            return;
-          }
-
-          this._upcastDrupalMediaIsImage(modelElement);
-        },
-        // This converter needs to have the lowest priority to ensure that the
-        // model element and its attributes have been converted.
-        { priority: 'lowest' },
-      );
-    });
-
     // Display error in the editor if fetching Drupal Media metadata failed.
     conversion.for('editingDowncast').add((dispatcher) => {
       dispatcher.on(
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative/mediaimagetextalternativeui.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative/mediaimagetextalternativeui.js
index 34974757d2..4972715ebc 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative/mediaimagetextalternativeui.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative/mediaimagetextalternativeui.js
@@ -23,21 +23,21 @@ import TextAlternativeFormView from './ui/textalternativeformview';
  */
 export default class MediaImageTextAlternativeUi extends Plugin {
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   static get requires() {
     return [ContextualBalloon];
   }
 
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   static get pluginName() {
     return 'MediaImageTextAlternativeUi';
   }
 
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   init() {
     this._createButton();
@@ -45,7 +45,7 @@ export default class MediaImageTextAlternativeUi extends Plugin {
   }
 
   /**
-   * @inheritDoc
+   * @inheritdoc
    */
   destroy() {
     super.destroy();
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/ui/utils.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/ui/utils.js
index 3553fa539a..b77a2d27bb 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/ui/utils.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/ui/utils.js
@@ -12,7 +12,7 @@ import { getClosestSelectedDrupalMediaWidget } from '../utils';
  * @return {Object}
  *   The options.
  *
- * @internal
+ * @private
  */
 export function getBalloonPositionData(editor) {
   const editingView = editor.editing.view;
@@ -40,7 +40,7 @@ export function getBalloonPositionData(editor) {
  * @param {module:core/editor/editor~Editor} editor
  *   The editor instance.
  *
- * @internal
+ * @private
  */
 export function repositionContextualBalloon(editor) {
   const balloon = editor.plugins.get('ContextualBalloon');
diff --git a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/utils.js b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/utils.js
index 901f0197d6..249b32ecfc 100644
--- a/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/utils.js
+++ b/web/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/utils.js
@@ -8,9 +8,9 @@ import { isWidget } from 'ckeditor5/src/widget';
  * @param {module:engine/model/element~Element} modelElement
  *   The model element to be checked.
  * @return {boolean}
- *   A boolean indicating whether element is drupalMedia element.
+ *   A boolean indicating if the element is a drupalMedia element.
  *
- * @internal
+ * @private
  */
 export function isDrupalMedia(modelElement) {
   return !!modelElement && modelElement.is('element', 'drupalMedia');
@@ -22,9 +22,9 @@ export function isDrupalMedia(modelElement) {
  * @param {module:engine/view/element~Element} viewElement
  *   The view element.
  * @return {boolean}
- *   A boolean indicating whether element is <drupal-media> element.
+ *   A boolean indicating if the element is a <drupal-media> element.
  *
- * @internal
+ * @private
  */
 export function isDrupalMediaWidget(viewElement) {
   return (
@@ -37,12 +37,12 @@ export function isDrupalMediaWidget(viewElement) {
  *
  * @param {module:engine/model/selection~Selection|module:engine/model/documentselection~DocumentSelection} selection
  *   The current selection.
- * @returns {module:engine/model/element~Element|null}
+ * @return {module:engine/model/element~Element|null}
  *   The `drupalMedia` element which could be either the current selected an
  *   ancestor of the selection. Returns null if the selection has no Drupal
  *   Media element.
  *
- * @internal
+ * @private
  */
 export function getClosestSelectedDrupalMediaElement(selection) {
   const selectedElement = selection.getSelectedElement();
@@ -60,7 +60,7 @@ export function getClosestSelectedDrupalMediaElement(selection) {
  * @return {module:engine/view/element~Element|null}
  *   The currently selected Drupal Media widget or null.
  *
- * @internal
+ * @private
  */
 export function getClosestSelectedDrupalMediaWidget(selection) {
   const viewElement = selection.getSelectedElement();
@@ -98,7 +98,7 @@ export function isObject(value) {
 }
 
 /**
- * Gets preview container element from the media element.
+ * Gets the preview container element from the media element.
  *
  * @param {Iterable.<module:engine/view/element~Element>} children
  *   The child elements.
@@ -124,3 +124,22 @@ export function getPreviewContainer(children) {
 
   return null;
 }
+
+/**
+ * Gets model attribute key based on Drupal Element Style group.
+ *
+ * @example
+ *    Example: 'align' -> 'drupalElementStyleAlign'
+ *
+ * @param {string} group
+ *   The name of the group (ex. 'align', 'viewMode').
+ * @return {string}
+ *   Model attribute key.
+ *
+ * @internal
+ */
+export function groupNameToModelAttributeKey(group) {
+  // Manipulate string to have first letter capitalized to append in camel case.
+  const capitalizedFirst = group[0].toUpperCase() + group.substring(1);
+  return `drupalElementStyle${capitalizedFirst}`;
+}
diff --git a/web/core/modules/ckeditor5/src/Controller/CKEditor5MediaController.php b/web/core/modules/ckeditor5/src/Controller/CKEditor5MediaController.php
index 430ca11f00..0d144b9d42 100644
--- a/web/core/modules/ckeditor5/src/Controller/CKEditor5MediaController.php
+++ b/web/core/modules/ckeditor5/src/Controller/CKEditor5MediaController.php
@@ -102,6 +102,7 @@ public function mediaEntityMetadata(Request $request) {
     }
     $image_field = $this->getMediaImageSourceFieldName($media);
     $response = [];
+    $response['type'] = $media->bundle();
     if ($image_field) {
       $response['imageSourceMetadata'] = [
         'alt' => $this->entityRepository->getTranslationFromContext($media)->{$image_field}->alt,
diff --git a/web/core/modules/ckeditor5/src/HTMLRestrictions.php b/web/core/modules/ckeditor5/src/HTMLRestrictions.php
index 34c5a6dae7..af7cdeb178 100644
--- a/web/core/modules/ckeditor5/src/HTMLRestrictions.php
+++ b/web/core/modules/ckeditor5/src/HTMLRestrictions.php
@@ -38,7 +38,7 @@
  * @see ::WILDCARD_ELEMENT_METHODS
  *
  * NOTE: Currently only supports the 'allowed' portion.
- * @todo Add support for "forbidden" tags in https://www.drupal.org/project/drupal/issues/3231334
+ * @todo Add support for "forbidden" tags in https://www.drupal.org/project/drupal/issues/3231336
  *
  * @internal
  */
@@ -95,7 +95,7 @@ public function __construct(array $elements) {
    * - Is a string
    * - Does not contain leading or trailing whitespace
    * - Is a tag name, not a tag, e.g. `div` not `<div>`
-   * - Is a valid HTML tag name.
+   * - Is a valid HTML tag name (or the global attribute `*` tag).
    *
    * @param array $elements
    *   The allowed elements.
@@ -116,6 +116,13 @@ private static function validateAllowedRestrictionsPhase1(array $elements): void
       if (self::isWildcardTag($html_tag_name)) {
         continue;
       }
+      // Special case: the global attribute `*` HTML tag.
+      // @see https://html.spec.whatwg.org/multipage/dom.html#global-attributes
+      // @see validateAllowedRestrictionsPhase2()
+      // @see validateAllowedRestrictionsPhase4()
+      if ($html_tag_name === '*') {
+        continue;
+      }
       // HTML elements must have a valid tag name.
       // @see https://html.spec.whatwg.org/multipage/syntax.html#syntax-tag-name
       // @see https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name
@@ -135,6 +142,17 @@ private static function validateAllowedRestrictionsPhase1(array $elements): void
    */
   private static function validateAllowedRestrictionsPhase2(array $elements): void {
     foreach ($elements as $html_tag_name => $html_tag_restrictions) {
+      // The global attribute `*` HTML tag is a special case: it allows
+      // specifying specific attributes that are allowed on all tags (f.e.
+      // `lang`) or disallowed on all tags (f.e. `style`) as translations and
+      // security are concerns orthogonal to the configured HTML restrictions
+      // of a text format.
+      // @see https://html.spec.whatwg.org/multipage/dom.html#global-attributes
+      // @see validateAllowedRestrictionsPhase4()
+      if ($html_tag_name === '*' && !is_array($html_tag_restrictions)) {
+        throw new \InvalidArgumentException(sprintf('The value for the special "*" global attribute HTML tag must be an array of attribute restrictions.'));
+      }
+
       // The value must be either a boolean (FALSE means no attributes are
       // allowed, TRUE means all attributes are allowed), or an array of allowed
       // The value must be either:
@@ -201,6 +219,17 @@ private static function validateAllowedRestrictionsPhase4(array $elements): void
         if ($html_tag_attribute_restrictions === TRUE) {
           continue;
         }
+        // Special case: the global attribute `*` HTML tag.
+        // The global attribute `*` HTML tag is a special case: it allows
+        // specifying specific attributes that are allowed on all tags (f.e.
+        // `lang`) or disallowed on all tags (f.e. `style`) as translations and
+        // security are concerns orthogonal to the configured HTML restrictions
+        // of a text format.
+        // @see https://html.spec.whatwg.org/multipage/dom.html#global-attributes
+        // @see validateAllowedRestrictionsPhase2()
+        if ($html_tag_name === '*' && $html_tag_attribute_restrictions === FALSE) {
+          continue;
+        }
         if (!is_array($html_tag_attribute_restrictions)) {
           throw new \InvalidArgumentException(sprintf('The "%s" HTML tag has an attribute restriction "%s" which is neither TRUE nor an array of attribute value restrictions.', $html_tag_name, $html_tag_attribute_name));
         }
@@ -234,14 +263,17 @@ public function isUnrestricted(): bool {
   }
 
   /**
-   * Whether this is the empty set of HTML restrictions.
+   * Whether this set of HTML restrictions allows nothing.
    *
    * @return bool
    *
    * @see ::emptySet()
    */
-  public function isEmpty(): bool {
-    return count($this->elements) === 0;
+  public function allowsNothing(): bool {
+    return count($this->elements) === 0
+      // If there are only forbidden attributes on the global attribute `*` HTML
+      // tag, that is equivalent to the set of restrictions being empty.
+      || count($this->elements) === 1 && isset($this->elements['*']) && empty(array_filter($this->elements['*']));
   }
 
   /**
@@ -316,11 +348,6 @@ private static function fromObjectWithHtmlRestrictions(object $object): HTMLRest
     }
 
     $allowed = $restrictions['allowed'];
-    // @todo Validate attributes allowed or forbidden on all elements
-    //   https://www.drupal.org/project/ckeditor5/issues/3231334.
-    if (isset($allowed['*'])) {
-      unset($allowed['*']);
-    }
 
     return new self($allowed);
   }
@@ -338,13 +365,16 @@ private static function fromObjectWithHtmlRestrictions(object $object): HTMLRest
    */
   public static function fromString(string $elements_string): HTMLRestrictions {
     // Preprocess wildcard tags: convert `<$text-container>` to
-    // `<__preprocessed-wildcard-text-container__>`.
+    // `<__preprocessed-wildcard-text-container__>` and `<*>` to
+    // `<__preprocessed-global-attribute__>`.
     // Note: unknown wildcard tags will trigger a validation error in
     // ::validateAllowedRestrictionsPhase1().
     $replaced_wildcard_tags = [];
-    $elements_string = preg_replace_callback('/<(\$[a-z][0-9a-z\-]*)/', function ($matches) use (&$replaced_wildcard_tags) {
+    $elements_string = preg_replace_callback('/<(\$[a-z][0-9a-z\-]*|\*)/', function ($matches) use (&$replaced_wildcard_tags) {
       $wildcard_tag_name = $matches[1];
-      $replacement = sprintf("__preprocessed-wildcard-%s__", substr($wildcard_tag_name, 1));
+      $replacement = $wildcard_tag_name === '*'
+        ? '__preprocessed-global-attribute__'
+        : sprintf("__preprocessed-wildcard-%s__", substr($wildcard_tag_name, 1));
       $replaced_wildcard_tags[$replacement] = $wildcard_tag_name;
       return "<$replacement";
     }, $elements_string);
@@ -566,6 +596,16 @@ public function doIntersect(HTMLRestrictions $other): HTMLRestrictions {
           $intersection[$tag][$attr] = $this->elements[$tag][$attr];
           continue;
         }
+        // If either allows no attribute values, nor does the intersection.
+        if ($this->elements[$tag][$attr] === FALSE || $other->elements[$tag][$attr] === FALSE) {
+          // Special case: the global attribute `*` HTML tag.
+          // @see https://html.spec.whatwg.org/multipage/dom.html#global-attributes
+          // @see validateAllowedRestrictionsPhase2()
+          // @see validateAllowedRestrictionsPhase4()
+          assert($tag === '*');
+          $intersection[$tag][$attr] = FALSE;
+          continue;
+        }
         assert(is_array($this->elements[$tag][$attr]));
         assert(is_array($other->elements[$tag][$attr]));
         $intersection[$tag][$attr] = array_intersect_key($this->elements[$tag][$attr], $other->elements[$tag][$attr]);
@@ -579,6 +619,13 @@ public function doIntersect(HTMLRestrictions $other): HTMLRestrictions {
       // HTML tags must not have an empty array of allowed attributes.
       if ($intersection[$tag] === []) {
         $intersection[$tag] = FALSE;
+        // Special case: the global attribute `*` HTML tag.
+        // @see https://html.spec.whatwg.org/multipage/dom.html#global-attributes
+        // @see validateAllowedRestrictionsPhase2()
+        // @see validateAllowedRestrictionsPhase4()
+        if ($tag === '*') {
+          unset($intersection[$tag]);
+        }
       }
     }
 
@@ -688,11 +735,30 @@ public function merge(HTMLRestrictions $other): HTMLRestrictions {
         // If the HTML tag restrictions are arrays for both operands, similar
         // logic needs to be applied to the attribute-level restrictions.
         foreach ($tag_config as $html_tag_attribute_name => $html_tag_attribute_restrictions) {
-          if ($html_tag_attribute_restrictions === TRUE) {
+          if (is_bool($html_tag_attribute_restrictions)) {
             continue;
           }
 
           if (array_key_exists(0, $html_tag_attribute_restrictions)) {
+            // Special case: the global attribute `*` HTML tag.
+            // @see https://html.spec.whatwg.org/multipage/dom.html#global-attributes
+            // @see validateAllowedRestrictionsPhase2()
+            // @see validateAllowedRestrictionsPhase4()
+            if ($tag === '*') {
+              assert(is_bool($html_tag_attribute_restrictions[0]) || is_bool($html_tag_attribute_restrictions[1]));
+              // When both are boolean, pick the most permissive value.
+              if (is_bool($html_tag_attribute_restrictions[0]) && isset($html_tag_attribute_restrictions[1]) && is_bool($html_tag_attribute_restrictions[1])) {
+                $value = $html_tag_attribute_restrictions[0] || $html_tag_attribute_restrictions[1];
+              }
+              else {
+                $value = is_bool($html_tag_attribute_restrictions[0])
+                  ? $html_tag_attribute_restrictions[0]
+                  : $html_tag_attribute_restrictions[1];
+              }
+              $union[$tag][$html_tag_attribute_name] = $value;
+              continue;
+            }
+
             // The "twice FALSE" case cannot occur for attributes, because
             // attribute restrictions either have "TRUE" (to indicate any value
             // is allowed for the attribute) or a list of allowed attribute
@@ -955,10 +1021,27 @@ public function toCKEditor5ElementsArray(): array {
             $attribute_string .= "$attribute_name=\"$attribute_values_string\" ";
           }
           else {
+            // Special case: the global attribute `*` HTML tag.
+            // @see https://html.spec.whatwg.org/multipage/dom.html#global-attributes
+            // @see validateAllowedRestrictionsPhase2()
+            // @see validateAllowedRestrictionsPhase4()
+            if ($attribute_values === FALSE) {
+              assert($tag === '*');
+              continue;
+            }
             $attribute_string .= "$attribute_name ";
           }
         }
       }
+
+      // Special case: the global attribute `*` HTML tag.
+      // @see https://html.spec.whatwg.org/multipage/dom.html#global-attributes
+      // @see validateAllowedRestrictionsPhase2()
+      // @see validateAllowedRestrictionsPhase4()
+      if ($tag === '*' && empty(array_filter($attributes))) {
+        continue;
+      }
+
       $joined = '<' . $tag . (!empty($attribute_string) ? ' ' . trim($attribute_string) : '') . '>';
       array_push($readable, $joined);
     }
@@ -980,6 +1063,9 @@ public function toFilterHtmlAllowedTagsString(): string {
     // Resolve wildcard tags, because Drupal's filter_html filter plugin does
     // not support those.
     $concrete = self::resolveWildcards($this);
+    // The filter_html plugin does not allow configuring additional globally
+    // allowed or disallowed attributes. It uses a hardcoded list.
+    $concrete = new HTMLRestrictions(array_diff_key($concrete->getAllowedElements(FALSE), ['*' => NULL]));
     return implode(' ', $concrete->toCKEditor5ElementsArray());
   }
 
@@ -1015,7 +1101,11 @@ public function toGeneralHtmlSupportConfig(): array {
           if ($name === 'style') {
             continue;
           }
-          assert($value === TRUE || Inspector::assertAllStrings($value));
+          // Special case: the global attribute `*` HTML tag.
+          // @see https://html.spec.whatwg.org/multipage/dom.html#global-attributes
+          // @see validateAllowedRestrictionsPhase2()
+          // @see validateAllowedRestrictionsPhase4()
+          assert($value === TRUE || Inspector::assertAllStrings($value) || ($tag === '*' && $value === FALSE));
           // If a single attribute value is allowed, it must be TRUE (see the
           // assertion above). Otherwise, it must be an array of strings (see
           // the assertion above), which lists all allowed attribute values. To
diff --git a/web/core/modules/ckeditor5/src/Plugin/CKEditor4To5Upgrade/Contrib.php b/web/core/modules/ckeditor5/src/Plugin/CKEditor4To5Upgrade/Contrib.php
new file mode 100644
index 0000000000..ca24398b7b
--- /dev/null
+++ b/web/core/modules/ckeditor5/src/Plugin/CKEditor4To5Upgrade/Contrib.php
@@ -0,0 +1,59 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Drupal\ckeditor5\Plugin\CKEditor4To5Upgrade;
+
+use Drupal\ckeditor5\HTMLRestrictions;
+use Drupal\ckeditor5\Plugin\CKEditor4To5UpgradePluginInterface;
+use Drupal\Core\Plugin\PluginBase;
+use Drupal\filter\FilterFormatInterface;
+
+/**
+ * Provides the CKEditor 4 to 5 upgrade path for contrib plugins now in core.
+ *
+ * @CKEditor4To5Upgrade(
+ *   id = "contrib",
+ *   cke4_buttons = {
+ *     "Code"
+ *   },
+ *   cke4_plugin_settings = {
+ *   },
+ *   cke5_plugin_elements_subset_configuration = {
+ *   }
+ * )
+ *
+ * @internal
+ *   Plugin classes are internal.
+ */
+class Contrib extends PluginBase implements CKEditor4To5UpgradePluginInterface {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function mapCKEditor4ToolbarButtonToCKEditor5ToolbarItem(string $cke4_button, HTMLRestrictions $text_format_html_restrictions): ?array {
+    switch ($cke4_button) {
+      // @see https://www.drupal.org/project/codetag
+      case 'Code':
+        return ['code'];
+
+      default:
+        throw new \OutOfBoundsException();
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function mapCKEditor4SettingsToCKEditor5Configuration(string $cke4_plugin_id, array $cke4_plugin_settings): ?array {
+    throw new \OutOfBoundsException();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function computeCKEditor5PluginSubsetConfiguration(string $cke5_plugin_id, FilterFormatInterface $text_format): ?array {
+    throw new \OutOfBoundsException();
+  }
+
+}
diff --git a/web/core/modules/ckeditor5/src/Plugin/CKEditor4To5Upgrade/Core.php b/web/core/modules/ckeditor5/src/Plugin/CKEditor4To5Upgrade/Core.php
index 96265eb4a2..cabfefbe8c 100644
--- a/web/core/modules/ckeditor5/src/Plugin/CKEditor4To5Upgrade/Core.php
+++ b/web/core/modules/ckeditor5/src/Plugin/CKEditor4To5Upgrade/Core.php
@@ -59,6 +59,7 @@
  *   },
  *   cke5_plugin_elements_subset_configuration = {
  *    "ckeditor5_heading",
+ *    "ckeditor5_list",
  *   }
  * )
  *
@@ -226,6 +227,19 @@ public function computeCKEditor5PluginSubsetConfiguration(string $cke5_plugin_id
         }
         return $configuration;
 
+      case 'ckeditor5_list':
+        $restrictions = $text_format->getHtmlRestrictions();
+        if ($restrictions === FALSE) {
+          // The default is to allow a reversed list and a start index, which makes sense when there
+          // are no restrictions.
+          // @see \Drupal\ckeditor5\Plugin\CKEditor5Plugin\ListPlugin::default_configuration()
+          return NULL;
+        }
+        $configuration = [];
+        $configuration['reversed'] = !empty($restrictions['allowed']['ol']['reversed']);
+        $configuration['startIndex'] = !empty($restrictions['allowed']['ol']['start']);
+        return $configuration;
+
       default:
         throw new \OutOfBoundsException();
     }
diff --git a/web/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/GlobalAttribute.php b/web/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/GlobalAttribute.php
new file mode 100644
index 0000000000..f28b2a75b7
--- /dev/null
+++ b/web/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/GlobalAttribute.php
@@ -0,0 +1,48 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Drupal\ckeditor5\Plugin\CKEditor5Plugin;
+
+use Drupal\ckeditor5\HTMLRestrictions;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginDefault;
+use Drupal\editor\EditorInterface;
+
+/**
+ * CKEditor 5 Global Attribute for filter_html.
+ *
+ * Can be used for adding support for any "global attribute". For example:
+ * `<* lang>` to allow the `lang` attribute on all supported tags.
+ *
+ * @see https://html.spec.whatwg.org/multipage/dom.html#global-attributes
+ *
+ * @internal
+ *   Plugin classes are internal.
+ */
+class GlobalAttribute extends CKEditor5PluginDefault {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDynamicPluginConfig(array $static_plugin_config, EditorInterface $editor): array {
+    // This plugin is only loaded when filter_html is enabled.
+    assert($editor->getFilterFormat()->filters()->has('filter_html'));
+    $filter_html = $editor->getFilterFormat()->filters('filter_html');
+    $restrictions = HTMLRestrictions::fromFilterPluginInstance($filter_html);
+
+    // Determine which tags are allowed by filter_html, excluding the global
+    // attribute `*` HTML tag, because that's what we're expanding this to right
+    // now.
+    $allowed_elements = $restrictions->getAllowedElements();
+    unset($allowed_elements['*']);
+    $allowed_tags = array_keys($allowed_elements);
+
+    // Update the static plugin configuration: generate a `name` regular
+    // expression to match any of the HTML tags supported by filter_html.
+    // @see https://ckeditor.com/docs/ckeditor5/latest/features/general-html-support.html#configuration
+    $dynamic_plugin_config = $static_plugin_config;
+    $dynamic_plugin_config['htmlSupport']['allow'][0]['name']['regexp']['pattern'] = '/^(' . implode('|', $allowed_tags) . ')$/';
+    return $dynamic_plugin_config;
+  }
+
+}
diff --git a/web/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/Heading.php b/web/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/Heading.php
index 0dcd50a463..289890acd2 100644
--- a/web/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/Heading.php
+++ b/web/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/Heading.php
@@ -170,7 +170,7 @@ private static function generateCheckboxForHeadingOption(array $heading_option):
    * Filters the header options to those chosen in editor config.
    */
   public function getDynamicPluginConfig(array $static_plugin_config, EditorInterface $editor): array {
-    $enabled_headings = $this->getEnabledHeadings($editor);
+    $enabled_headings = $this->getEnabledHeadings();
     $all_heading_options = $static_plugin_config['heading']['options'];
 
     $configured_heading_options = array_filter($all_heading_options, function ($option) use ($enabled_headings) {
diff --git a/web/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/ListPlugin.php b/web/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/ListPlugin.php
new file mode 100644
index 0000000000..ae8f0fae33
--- /dev/null
+++ b/web/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/ListPlugin.php
@@ -0,0 +1,90 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Drupal\ckeditor5\Plugin\CKEditor5Plugin;
+
+use Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableInterface;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableTrait;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginDefault;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginElementsSubsetInterface;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\editor\EditorInterface;
+
+/**
+ * CKEditor 5 List plugin.
+ *
+ * @internal
+ *   Plugin classes are internal.
+ */
+class ListPlugin extends CKEditor5PluginDefault implements CKEditor5PluginConfigurableInterface, CKEditor5PluginElementsSubsetInterface {
+
+  use CKEditor5PluginConfigurableTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultConfiguration() {
+    return ['reversed' => TRUE, 'startIndex' => TRUE];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    $form['reversed'] = [
+      '#type' => 'checkbox',
+      '#title' => $this->t('Allow the user to reverse an ordered list'),
+      '#default_value' => $this->configuration['reversed'],
+    ];
+    $form['startIndex'] = [
+      '#type' => 'checkbox',
+      '#title' => $this->t('Allow the user to specify the start index of an ordered list'),
+      '#default_value' => $this->configuration['startIndex'],
+    ];
+
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {
+    $form_value = $form_state->getValue('reversed');
+    $form_state->setValue('reversed', (bool) $form_value);
+    $form_value = $form_state->getValue('startIndex');
+    $form_state->setValue('startIndex', (bool) $form_value);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
+    $this->configuration['reversed'] = $form_state->getValue('reversed');
+    $this->configuration['startIndex'] = $form_state->getValue('startIndex');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDynamicPluginConfig(array $static_plugin_config, EditorInterface $editor): array {
+    $static_plugin_config['list']['properties'] = array_merge(
+      $static_plugin_config['list']['properties'],
+      $this->getConfiguration()
+    );
+    return $static_plugin_config;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getElementsSubset(): array {
+    $subset = $this->getPluginDefinition()->getElements();
+    $subset = array_diff($subset, ['<ol reversed start>']);
+    $reversed_enabled = $this->getConfiguration()['reversed'];
+    $start_index_enabled = $this->getConfiguration()['startIndex'];
+    $subset[] = "<ol" . ($reversed_enabled ? ' reversed' : '') . ($start_index_enabled ? ' start' : '') . '>';
+    return $subset;
+  }
+
+}
diff --git a/web/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/Media.php b/web/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/Media.php
index 9055046e64..76f0a51c82 100644
--- a/web/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/Media.php
+++ b/web/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/Media.php
@@ -5,8 +5,13 @@
 namespace Drupal\ckeditor5\Plugin\CKEditor5Plugin;
 
 use Drupal\ckeditor5\Plugin\CKEditor5PluginDefault;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\Core\Url;
 use Drupal\editor\EditorInterface;
+use Drupal\media\Entity\MediaType;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Drupal\Core\Entity\EntityDisplayRepositoryInterface;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition;
 
 /**
  * CKEditor 5 Media plugin.
@@ -16,10 +21,145 @@
  * @internal
  *   Plugin classes are internal.
  */
-class Media extends CKEditor5PluginDefault {
+class Media extends CKEditor5PluginDefault implements ContainerFactoryPluginInterface {
 
   use DynamicPluginConfigWithCsrfTokenUrlTrait;
 
+  /**
+   * The entity display repository.
+   *
+   * @var \Drupal\Core\Entity\EntityDisplayRepositoryInterface
+   */
+  protected $entityDisplayRepository;
+
+  /**
+   * Media constructor.
+   *
+   * @param array $configuration
+   *   A configuration array containing information about the plugin instance.
+   * @param string $plugin_id
+   *   The plugin_id for the plugin instance.
+   * @param \Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition $plugin_definition
+   *   The plugin implementation definition.
+   * @param \Drupal\Core\Entity\EntityDisplayRepositoryInterface $entity_display_repository
+   *   The entity display repository.
+   */
+  public function __construct(array $configuration, string $plugin_id, CKEditor5PluginDefinition $plugin_definition, EntityDisplayRepositoryInterface $entity_display_repository) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+    $this->entityDisplayRepository = $entity_display_repository;
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $container->get('entity_display.repository'));
+  }
+
+  /**
+   * Configures allowed view modes.
+   *
+   * @param \Drupal\editor\EditorInterface $editor
+   *   A configured text editor object.
+   *
+   * @return array
+   *   An array containing view modes, style configuration,
+   *   and toolbar configuration.
+   */
+  private function configureViewModes(EditorInterface $editor) {
+    $element_style_configuration = [];
+    $toolbar_configuration = [];
+
+    $media_embed_filter = $editor->getFilterFormat()->filters('media_embed');
+    $media_bundles = MediaType::loadMultiple();
+    $bundles_per_view_mode = [];
+    $all_view_modes = $this->entityDisplayRepository->getViewModeOptions('media');
+    $allowed_view_modes = $media_embed_filter->settings['allowed_view_modes'];
+    $default_view_mode = $media_embed_filter->settings['default_view_mode'];
+    // @todo Remove in https://www.drupal.org/project/drupal/issues/3277049.
+    // This is a workaround until the above issue is fixed to prevent the
+    // editor from crashing because the frontend expects the default view mode
+    // to exist in drupalElementStyles.
+    if (!array_key_exists($default_view_mode, $allowed_view_modes)) {
+      $allowed_view_modes[$default_view_mode] = $default_view_mode;
+    }
+    // Return early since there is no need to configure if there
+    // are less than 2 view modes.
+    if ($allowed_view_modes < 2) {
+      return [];
+    }
+
+    // Configure view modes.
+    foreach (array_keys($media_bundles) as $bundle) {
+      $allowed_view_modes_by_bundle = $this->entityDisplayRepository->getViewModeOptionsByBundle('media', $bundle);
+
+      foreach (array_keys($allowed_view_modes_by_bundle) as $view_mode) {
+        // Get the bundles that have this view mode enabled.
+        $bundles_per_view_mode[$view_mode][] = $bundle;
+      }
+    }
+    // Limit to view modes allowed by filter.
+    $bundles_per_view_mode = array_intersect_key($bundles_per_view_mode, $allowed_view_modes);
+
+    // Configure view mode element styles.
+    foreach (array_keys($all_view_modes) as $view_mode) {
+      if (array_key_exists($view_mode, $bundles_per_view_mode)) {
+        $specific_bundles = $bundles_per_view_mode[$view_mode];
+        if ($view_mode == $default_view_mode) {
+          $element_style_configuration[] = [
+            'isDefault' => TRUE,
+            'name' => $default_view_mode,
+            'title' => $all_view_modes[$view_mode],
+            'attributeName' => 'data-view-mode',
+            'attributeValue' => $view_mode,
+            'modelElements' => ['drupalMedia'],
+            'modelAttributes' => [
+              'drupalMediaType' => array_keys($media_bundles),
+            ],
+          ];
+        }
+        else {
+          $element_style_configuration[] = [
+            'name' => $view_mode,
+            'title' => $all_view_modes[$view_mode],
+            'attributeName' => 'data-view-mode',
+            'attributeValue' => $view_mode,
+            'modelElements' => ['drupalMedia'],
+            'modelAttributes' => [
+              'drupalMediaType' => $specific_bundles,
+            ],
+          ];
+        }
+      }
+    }
+
+    $items = [];
+
+    foreach (array_keys($allowed_view_modes) as $view_mode) {
+      $items[] = "drupalElementStyle:viewMode:$view_mode";
+    }
+
+    $default_item = 'drupalElementStyle:viewMode:' . $default_view_mode;
+    if (!empty($allowed_view_modes)) {
+      // Configure toolbar dropdown menu.
+      $toolbar_configuration = [
+        'name' => 'drupalMedia:viewMode',
+        'display' => 'listDropdown',
+        'defaultItem' => $default_item,
+        'defaultText' => 'View mode',
+        'items' => $items,
+      ];
+    }
+    return [
+      $element_style_configuration,
+      $toolbar_configuration,
+    ];
+  }
+
   /**
    * {@inheritdoc}
    */
@@ -29,6 +169,11 @@ public function getDynamicPluginConfig(array $static_plugin_config, EditorInterf
       ->setRouteParameter('filter_format', $editor->getFilterFormat()->id())
       ->toString(TRUE)
       ->getGeneratedUrl();
+    [$element_style_configuration, $toolbar_configuration,
+    ] = self::configureViewModes($editor);
+
+    $dynamic_plugin_config['drupalElementStyles']['viewMode'] = $element_style_configuration;
+    $dynamic_plugin_config['drupalMedia']['toolbar'][] = $toolbar_configuration;
     $dynamic_plugin_config['drupalMedia']['metadataUrl'] = self::getUrlWithReplacedCsrfTokenPlaceholder(
       Url::fromRoute('ckeditor5.media_entity_metadata')
         ->setRouteParameter('editor', $editor->id())
diff --git a/web/core/modules/ckeditor5/src/Plugin/CKEditor5PluginDefinition.php b/web/core/modules/ckeditor5/src/Plugin/CKEditor5PluginDefinition.php
index 0222d76f2f..4cee5d1c5e 100644
--- a/web/core/modules/ckeditor5/src/Plugin/CKEditor5PluginDefinition.php
+++ b/web/core/modules/ckeditor5/src/Plugin/CKEditor5PluginDefinition.php
@@ -122,27 +122,23 @@ private function validateDrupalAspects(string $id, array $definition): void {
     if (!isset($definition['drupal']['elements'])) {
       throw new InvalidPluginDefinitionException($id, sprintf('The "%s" CKEditor 5 plugin definition must contain a "drupal.elements" key.', $id));
     }
+    // ckeditor5_sourceEditing is the edge case here: it is the only plugin that
+    // is allowed to return a superset. It's a special case because it is
+    // through configuring this particular plugin that additional HTML tags can
+    // be allowed.
+    // The list of tags it supports is generated dynamically. In its default
+    // configuration it does support any HTML tags.
+    // @see \Drupal\ckeditor5\Plugin\CKEditor5PluginManager::getProvidedElements()
+    elseif ($definition['id'] === 'ckeditor5_sourceEditing') {
+      assert($definition['drupal']['elements'] === []);
+    }
     elseif ($definition['drupal']['elements'] !== FALSE && !(is_array($definition['drupal']['elements']) && !empty($definition['drupal']['elements']) && Inspector::assertAllStrings($definition['drupal']['elements']))) {
       throw new InvalidPluginDefinitionException($id, sprintf('The "%s" CKEditor 5 plugin definition has a "drupal.elements" value that is neither a list of HTML tags/attributes nor false.', $id));
     }
     elseif (is_array($definition['drupal']['elements'])) {
       foreach ($definition['drupal']['elements'] as $index => $element) {
-        // ckeditor5_sourceEditing is the edge case here: it is the only plugin
-        // that is allowed to return a superset. It's a special case because it
-        // is through configuring this particular plugin that additional HTML
-        // tags can be allowed.
-        // Even though its plugin definition says '<*>' is supported, this is a
-        // little lie to convey that this plugin is capable of supporting any
-        // HTML tag … but which ones are actually supported depends on the
-        // configuration.
-        // This also means that without any configuration, it does not support
-        // any HTML tags.
-        // @see \Drupal\ckeditor5\Plugin\CKEditor5PluginManager::getProvidedElements()
-        if ($definition['id'] === 'ckeditor5_sourceEditing') {
-          continue;
-        }
         $parsed = HTMLRestrictions::fromString($element);
-        if ($parsed->isEmpty()) {
+        if ($parsed->allowsNothing()) {
           throw new InvalidPluginDefinitionException($id, sprintf('The "%s" CKEditor 5 plugin definition has a value at "drupal.elements.%d" that is not an HTML tag with optional attributes: "%s". Expected structure: "<tag allowedAttribute="allowedValue1 allowedValue2">".', $id, $index, $element));
         }
         if (count($parsed->getAllowedElements()) > 1) {
diff --git a/web/core/modules/ckeditor5/src/Plugin/CKEditor5PluginManager.php b/web/core/modules/ckeditor5/src/Plugin/CKEditor5PluginManager.php
index 8f628a9035..cf7c3259ab 100644
--- a/web/core/modules/ckeditor5/src/Plugin/CKEditor5PluginManager.php
+++ b/web/core/modules/ckeditor5/src/Plugin/CKEditor5PluginManager.php
@@ -177,7 +177,7 @@ public function getEnabledDefinitions(EditorInterface $editor): array {
 
     if (!isset($definitions['ckeditor5_arbitraryHtmlSupport'])) {
       $restrictions = new HTMLRestrictions($this->getProvidedElements(array_keys($definitions), $editor, FALSE));
-      if ($restrictions->getWildcardSubset()->isEmpty()) {
+      if ($restrictions->getWildcardSubset()->allowsNothing()) {
         // This is only reached if arbitrary HTML is not enabled. If wildcard
         // tags (such as $text-container) are present, they need to
         // be resolved via the wildcardHtmlSupport plugin.
@@ -318,12 +318,8 @@ public function getProvidedElements(array $plugin_ids = [], EditorInterface $edi
         // that is allowed to return a superset. It's a special case because it
         // is through configuring this particular plugin that additional HTML
         // tags can be allowed.
-        // Even though its plugin definition says '<*>' is supported, this is a
-        // little lie to convey that this plugin is capable of supporting any
-        // HTML tag … but which ones are actually supported depends on the
-        // configuration.
-        // This also means that without any configuration, it does not support
-        // any HTML tags.
+        // The list of tags it supports is generated dynamically. In its default
+        // configuration it does support any HTML tags.
         if ($id === 'ckeditor5_sourceEditing') {
           $defined_elements = !isset($editor) ? [] : $this->getPlugin($id, $editor)->getElementsSubset();
         }
@@ -333,7 +329,9 @@ public function getProvidedElements(array $plugin_ids = [], EditorInterface $edi
         // work: otherwise it would not be able to know which plugins to enable.
         elseif (isset($editor)) {
           $subset = $this->getPlugin($id, $editor)->getElementsSubset();
-          $subset_violations = array_diff($subset, $defined_elements);
+          $subset_restrictions = HTMLRestrictions::fromString(implode($subset));
+          $defined_restrictions = HTMLRestrictions::fromString(implode($defined_elements));
+          $subset_violations = $subset_restrictions->diff($defined_restrictions)->toCKEditor5ElementsArray();
           if (!empty($subset_violations)) {
             throw new \LogicException(sprintf('The "%s" CKEditor 5 plugin implements ::getElementsSubset() and did not return a subset, the following tags are absent from the plugin definition: "%s".', $id, implode(' ', $subset_violations)));
           }
diff --git a/web/core/modules/ckeditor5/src/Plugin/Editor/CKEditor5.php b/web/core/modules/ckeditor5/src/Plugin/Editor/CKEditor5.php
index 3e123a5bce..2103ca7e3c 100644
--- a/web/core/modules/ckeditor5/src/Plugin/Editor/CKEditor5.php
+++ b/web/core/modules/ckeditor5/src/Plugin/Editor/CKEditor5.php
@@ -18,6 +18,7 @@
 use Drupal\Core\Form\SubformState;
 use Drupal\Core\Form\SubformStateInterface;
 use Drupal\Core\Language\LanguageManagerInterface;
+use Drupal\Core\Messenger\MessengerInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\ckeditor5\SmartDefaultSettings;
 use Drupal\Core\Validation\Plugin\Validation\Constraint\PrimitiveTypeConstraint;
@@ -263,8 +264,15 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
       assert($editor->getSettings() === $this->getDefaultSettings());
       if (!$format->isNew()) {
         [$editor, $messages] = $this->smartDefaultSettings->computeSmartDefaultSettings($editor, $format);
-        foreach ($messages as $message) {
-          $this->messenger()->addMessage($message);
+        foreach ($messages as $type => $messages_per_type) {
+          foreach ($messages_per_type as $message) {
+            $this->messenger()->addMessage($message, $type);
+          }
+        }
+        if (isset($messages[MessengerInterface::TYPE_WARNING]) || isset($messages[MessengerInterface::TYPE_ERROR])) {
+          $this->messenger()->addMessage($this->t('Check <a href=":handbook">this handbook page</a> for details about compatibility issues of contrib modules.', [
+            ':handbook' => 'https://www.drupal.org/node/3273985',
+          ]), MessengerInterface::TYPE_WARNING);
         }
       }
       $eventual_editor_and_format = $this->getEventualEditorWithPrimedFilterFormat($form_state, $editor);
@@ -413,20 +421,28 @@ private function shouldHaveVisiblePluginSettingsForm(CKEditor5PluginDefinition $
     // due to isEnabled() returning false, that should still have its config
     // form provided:
     // 1 - A conditionally enabled plugin that does not depend on a toolbar item
-    // to be active AND the plugins it depends on are enabled.
+    // to be active AND the plugins it depends on are enabled (if any) AND the
+    // filter it depends on is enabled (if any).
     // 2 - A conditionally enabled plugin that does depend on a toolbar item,
     // and that toolbar item is active.
     if ($definition->hasConditions()) {
       $conditions = $definition->getConditions();
       if (!array_key_exists('toolbarItem', $conditions)) {
+        $conclusion = TRUE;
+        // The filter this plugin depends on must be enabled.
+        if (array_key_exists('filter', $conditions)) {
+          $required_filter = $conditions['filter'];
+          $format_filters = $editor->getFilterFormat()->filters();
+          $conclusion = $conclusion && $format_filters->has($required_filter) && $format_filters->get($required_filter)->status;
+        }
         // The CKEditor 5 plugins this plugin depends on must be enabled.
         if (array_key_exists('plugins', $conditions)) {
           $all_plugins = $this->ckeditor5PluginManager->getDefinitions();
           $dependencies = array_intersect_key($all_plugins, array_flip($conditions['plugins']));
           $unmet_dependencies = array_diff_key($dependencies, $enabled_plugins);
-          return empty($unmet_dependencies);
+          $conclusion = $conclusion && empty($unmet_dependencies);
         }
-        return TRUE;
+        return $conclusion;
       }
       elseif (in_array($conditions['toolbarItem'], $editor->getSettings()['toolbar']['items'], TRUE)) {
         return TRUE;
@@ -516,7 +532,16 @@ public static function validateSwitchingToCKEditor5(array $form, FormStateInterf
       ]);
       $submitted_filter_format = CKEditor5::getSubmittedFilterFormat($form_state);
       $fundamental_incompatibilities = CKEditor5::validatePair($minimal_ckeditor5_editor, $submitted_filter_format, FALSE);
+
       foreach ($fundamental_incompatibilities as $violation) {
+        // If the violation uses the nonAllowedElementsMessage template, it can
+        // be skipped because this is a violation that automatically fixed
+        // within SmartDefaultSettings, but SmartDefaultSettings does not
+        // execute until this validator passes.
+        if ($violation->getMessageTemplate() === $violation->getConstraint()->nonAllowedElementsMessage) {
+          continue;
+        }
+
         // @codingStandardsIgnoreLine
         $form_state->setErrorByName('editor][editor', t($violation->getMessageTemplate(), $violation->getParameters()));
       }
diff --git a/web/core/modules/ckeditor5/src/Plugin/Validation/Constraint/CKEditor5ElementConstraintValidator.php b/web/core/modules/ckeditor5/src/Plugin/Validation/Constraint/CKEditor5ElementConstraintValidator.php
index ca0854c693..285e57bc60 100644
--- a/web/core/modules/ckeditor5/src/Plugin/Validation/Constraint/CKEditor5ElementConstraintValidator.php
+++ b/web/core/modules/ckeditor5/src/Plugin/Validation/Constraint/CKEditor5ElementConstraintValidator.php
@@ -27,7 +27,7 @@ public function validate($element, $constraint) {
     }
 
     $parsed = HTMLRestrictions::fromString($element);
-    if ($parsed->isEmpty() || count($parsed->getAllowedElements()) > 1 || $element !== $parsed->toCKEditor5ElementsArray()[0]) {
+    if ($parsed->allowsNothing() || count($parsed->getAllowedElements()) > 1 || $element !== $parsed->toCKEditor5ElementsArray()[0]) {
       $this->context->buildViolation($constraint->message)
         ->setParameter('%provided_element', $element)
         ->addViolation();
diff --git a/web/core/modules/ckeditor5/src/Plugin/Validation/Constraint/FundamentalCompatibilityConstraintValidator.php b/web/core/modules/ckeditor5/src/Plugin/Validation/Constraint/FundamentalCompatibilityConstraintValidator.php
index 4101b8621a..8fec0f6992 100644
--- a/web/core/modules/ckeditor5/src/Plugin/Validation/Constraint/FundamentalCompatibilityConstraintValidator.php
+++ b/web/core/modules/ckeditor5/src/Plugin/Validation/Constraint/FundamentalCompatibilityConstraintValidator.php
@@ -115,7 +115,7 @@ private function checkNoMarkupFilters(FilterFormatInterface $text_format, Fundam
   private function checkHtmlRestrictionsAreCompatible(FilterFormatInterface $text_format, FundamentalCompatibilityConstraint $constraint): void {
     $fundamental = new HTMLRestrictions($this->pluginManager->getProvidedElements(self::FUNDAMENTAL_CKEDITOR5_PLUGINS));
 
-    // @todo Remove in favor of HTMLRestrictions::diff() in https://www.drupal.org/project/drupal/issues/3231334
+    // @todo Remove in favor of HTMLRestrictions::diff() in https://www.drupal.org/project/drupal/issues/3231336
     $html_restrictions = $text_format->getHtmlRestrictions();
     $minimum_tags = array_keys($fundamental->getAllowedElements());
     $forbidden_minimum_tags = isset($html_restrictions['forbidden_tags'])
@@ -129,11 +129,11 @@ private function checkHtmlRestrictionsAreCompatible(FilterFormatInterface $text_
         ->addViolation();
     }
 
-    // @todo Remove early return in https://www.drupal.org/project/drupal/issues/3231334
+    // @todo Remove early return in https://www.drupal.org/project/drupal/issues/3231336
     if (!isset($html_restrictions['allowed'])) {
       return;
     }
-    if (!$fundamental->diff(HTMLRestrictions::fromTextFormat($text_format))->isEmpty()) {
+    if (!$fundamental->diff(HTMLRestrictions::fromTextFormat($text_format))->allowsNothing()) {
       $offending_filter = static::findHtmlRestrictorFilterNotAllowingTags($text_format, $fundamental);
       $this->context->buildViolation($constraint->nonAllowedElementsMessage)
         ->setParameter('%filter_label', $offending_filter->getLabel())
@@ -165,18 +165,18 @@ private function checkHtmlRestrictionsMatch(EditorInterface $text_editor, Fundam
       $diff_allowed = $allowed->diff($provided);
       $diff_elements = $provided->diff($allowed);
 
-      if (!$diff_allowed->isEmpty()) {
+      if (!$diff_allowed->allowsNothing()) {
         $this->context->buildViolation($constraint->notSupportedElementsMessage)
-          ->setParameter('@list', $provided->toFilterHtmlAllowedTagsString())
-          ->setParameter('@diff', $diff_allowed->toFilterHtmlAllowedTagsString())
+          ->setParameter('@list', implode(' ', $provided->toCKEditor5ElementsArray()))
+          ->setParameter('@diff', implode(' ', $diff_allowed->toCKEditor5ElementsArray()))
           ->atPath("filters.$filter_plugin_id")
           ->addViolation();
       }
 
-      if (!$diff_elements->isEmpty()) {
+      if (!$diff_elements->allowsNothing()) {
         $this->context->buildViolation($constraint->missingElementsMessage)
-          ->setParameter('@list', $provided->toFilterHtmlAllowedTagsString())
-          ->setParameter('@diff', $diff_elements->toFilterHtmlAllowedTagsString())
+          ->setParameter('@list', implode(' ', $provided->toCKEditor5ElementsArray()))
+          ->setParameter('@diff', implode(' ', $diff_elements->toCKEditor5ElementsArray()))
           ->atPath("filters.$filter_plugin_id")
           ->addViolation();
       }
@@ -278,7 +278,7 @@ function (FilterInterface $filter) {
 
     foreach ($filters as $filter) {
       // Return any filter not allowing >=1 of the required tags.
-      if (!$required->diff(HTMLRestrictions::fromFilterPluginInstance($filter))->isEmpty()) {
+      if (!$required->diff(HTMLRestrictions::fromFilterPluginInstance($filter))->allowsNothing()) {
         return $filter;
       }
     }
diff --git a/web/core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingPreventSelfXssConstraint.php b/web/core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingPreventSelfXssConstraint.php
new file mode 100644
index 0000000000..3bf2e94cc4
--- /dev/null
+++ b/web/core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingPreventSelfXssConstraint.php
@@ -0,0 +1,28 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin\Validation\Constraint;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * For disallowing Source Editing configuration that allows self-XSS.
+ *
+ * @Constraint(
+ *   id = "SourceEditingPreventSelfXssConstraint",
+ *   label = @Translation("Source Editing should never allow self-XSS.", context = "Validation"),
+ * )
+ *
+ * @internal
+ */
+class SourceEditingPreventSelfXssConstraint extends Constraint {
+
+  /**
+   * When Source Editing is configured to allow self-XSS.
+   *
+   * @var string
+   */
+  public $message = 'The following tag in the Source Editing "Manually editable HTML tags" field is a security risk: %dangerous_tag.';
+
+}
diff --git a/web/core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingPreventSelfXssConstraintValidator.php b/web/core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingPreventSelfXssConstraintValidator.php
new file mode 100644
index 0000000000..2fd9632380
--- /dev/null
+++ b/web/core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingPreventSelfXssConstraintValidator.php
@@ -0,0 +1,121 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin\Validation\Constraint;
+
+use Drupal\ckeditor5\HTMLRestrictions;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * Ensures Source Editing cannot be configured to allow self-XSS.
+ *
+ * @internal
+ */
+class SourceEditingPreventSelfXssConstraintValidator extends ConstraintValidator {
+
+  use TextEditorObjectDependentValidatorTrait;
+
+  /**
+   * {@inheritdoc}
+   *
+   * @throws \Symfony\Component\Validator\Exception\UnexpectedTypeException
+   *   Thrown when the given constraint is not supported by this validator.
+   */
+  public function validate($value, Constraint $constraint) {
+    if (!$constraint instanceof SourceEditingPreventSelfXssConstraint) {
+      throw new UnexpectedTypeException($constraint, __NAMESPACE__ . '\SourceEditingPreventSelfXssConstraint');
+    }
+    if (empty($value)) {
+      return;
+    }
+
+    $restrictions = HTMLRestrictions::fromString($value);
+    // @todo Remove this early return in
+    //   https://www.drupal.org/project/drupal/issues/2820364. It is only
+    //   necessary because CKEditor5ElementConstraintValidator does not run
+    //   before this, which means that this validator cannot assume it receives
+    //   valid values.
+    if ($restrictions->allowsNothing() || count($restrictions->getAllowedElements()) > 1) {
+      return;
+    }
+
+    // This validation constraint only validates attributes, not tags; so if all
+    // attributes are allowed (TRUE) or no attributes are allowed (FALSE),
+    // return early. Only proceed when some attributes are allowed (an array).
+    $allowed_elements = $restrictions->getAllowedElements(FALSE);
+    assert(count($allowed_elements) === 1);
+    $tag = array_key_first($allowed_elements);
+    $attribute_restrictions = $allowed_elements[$tag];
+    if (!is_array($attribute_restrictions)) {
+      return;
+    }
+
+    $text_editor = $this->createTextEditorObjectFromContext();
+    $text_format_allowed_elements = HTMLRestrictions::fromTextFormat($text_editor->getFilterFormat())
+      ->getAllowedElements();
+    // Any XSS-prevention related measures imposed by filter plugins are relayed
+    // through their ::getHtmlRestrictions() return value. The global attribute
+    // `*` HTML tag allows attributes to be forbidden.
+    // @see https://html.spec.whatwg.org/multipage/dom.html#global-attributes
+    // @see \Drupal\ckeditor5\HTMLRestrictions::validateAllowedRestrictionsPhase4()
+    // @see \Drupal\filter\Plugin\Filter\FilterHtml::getHTMLRestrictions()
+    $forbidden_attributes = [];
+    if (array_key_exists('*', $text_format_allowed_elements)) {
+      $forbidden_attributes = array_keys(array_filter($text_format_allowed_elements['*'], function ($attribute_value_restriction, string $attribute_name) {
+        return $attribute_value_restriction === FALSE;
+      }, ARRAY_FILTER_USE_BOTH));
+    }
+
+    foreach ($forbidden_attributes as $forbidden_attribute_name) {
+      // Forbidden attributes not containing wildcards, such as `style`.
+      if (!self::isWildcardAttributeName($forbidden_attribute_name)) {
+        if (array_key_exists($forbidden_attribute_name, $attribute_restrictions)) {
+          $this->context->buildViolation($constraint->message)
+            ->setParameter('%dangerous_tag', $value)
+            ->addViolation();
+        }
+      }
+      // Forbidden attributes containing wildcards such as `on*`.
+      else {
+        $regex = self::getRegExForWildCardAttributeName($forbidden_attribute_name);
+        if (!empty(preg_grep($regex, array_keys($attribute_restrictions)))) {
+          $this->context->buildViolation($constraint->message)
+            ->setParameter('%dangerous_tag', $value)
+            ->addViolation();
+        }
+      }
+    }
+  }
+
+  /**
+   * Checks whether the given attribute name contains a wildcard, e.g. `data-*`.
+   *
+   * @param string $attribute_name
+   *   The attribute name to check.
+   *
+   * @return bool
+   *   Whether the given attribute name contains a wildcard.
+   */
+  private static function isWildcardAttributeName(string $attribute_name): bool {
+    assert($attribute_name !== '*');
+    return strpos($attribute_name, '*') !== FALSE;
+  }
+
+  /**
+   * Computes a regular expression for matching a wildcard attribute name.
+   *
+   * @param string $wildcard_attribute_name
+   *   The wildcard attribute name for which to compute a regular expression.
+   *
+   * @return string
+   *   The computed regular expression.
+   */
+  private static function getRegExForWildCardAttributeName(string $wildcard_attribute_name): string {
+    assert(self::isWildcardAttributeName($wildcard_attribute_name));
+    return '/^' . str_replace('*', '.*', $wildcard_attribute_name) . '$/';
+  }
+
+}
diff --git a/web/core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingRedundantTagsConstraintValidator.php b/web/core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingRedundantTagsConstraintValidator.php
index 9e401cea23..4fa9e6d792 100644
--- a/web/core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingRedundantTagsConstraintValidator.php
+++ b/web/core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingRedundantTagsConstraintValidator.php
@@ -82,7 +82,7 @@ public function validate($value, Constraint $constraint) {
       ->diff($enabled_plugin_overlap);
     foreach ([$enabled_plugin_overlap, $disabled_plugin_overlap] as $overlap) {
       $checking_enabled = $overlap === $enabled_plugin_overlap;
-      if (!$overlap->isEmpty()) {
+      if (!$overlap->allowsNothing()) {
         $plugins_to_check_against = $checking_enabled ? $enabled_plugins : $disabled_plugins;
         $tags_plugin_report = $this->pluginsSupplyingTagsMessage($overlap, $plugins_to_check_against, $enabled_plugin_tags);
         $message = $checking_enabled ? $constraint->enabledPluginsMessage : $constraint->availablePluginsMessage;
@@ -106,7 +106,7 @@ public function validate($value, Constraint $constraint) {
         // (for example `<foo bar baz>`), only CKEditor 5 plugins providing an
         // exact match (`<foo bar baz>`) or a superset (`<foo bar baz qux>`) can
         // trigger a violation, not subsets (`<foo>`).
-        if (!$source_enabled_tags->diff($overlap)->isEmpty()) {
+        if (!$source_enabled_tags->diff($overlap)->allowsNothing()) {
           continue;
         }
 
@@ -161,7 +161,7 @@ private function pluginsSupplyingTagsMessage(HTMLRestrictions $overlap, array $p
         $plugin_capabilities = HTMLRestrictions::fromString(implode(' ', $definition->getElements()));
 
         // If this plugin supports wildcards, resolve them.
-        if (!$plugin_capabilities->getWildcardSubset()->isEmpty()) {
+        if (!$plugin_capabilities->getWildcardSubset()->allowsNothing()) {
           $plugin_capabilities = $plugin_capabilities
             // Resolve wildcards.
             ->merge($enabled_plugin_restrictions)
@@ -172,7 +172,7 @@ private function pluginsSupplyingTagsMessage(HTMLRestrictions $overlap, array $p
         // actually provides the overlap.
         // For example: avoid listing the image alignment/captioning plugins
         // when matching `<img src>`; only lists the main image plugin.
-        if (!$overlap->diff($plugin_capabilities)->isEmpty()) {
+        if (!$overlap->diff($plugin_capabilities)->allowsNothing()) {
           continue;
         }
         foreach ($plugin_capabilities->intersect($overlap)->toCKEditor5ElementsArray() as $element) {
diff --git a/web/core/modules/ckeditor5/src/SmartDefaultSettings.php b/web/core/modules/ckeditor5/src/SmartDefaultSettings.php
index 636de082d0..2d275ff5c0 100644
--- a/web/core/modules/ckeditor5/src/SmartDefaultSettings.php
+++ b/web/core/modules/ckeditor5/src/SmartDefaultSettings.php
@@ -12,6 +12,7 @@
 use Drupal\ckeditor5\Plugin\CKEditor5PluginManagerInterface;
 use Drupal\Component\Assertion\Inspector;
 use Drupal\Component\Plugin\PluginManagerInterface;
+use Drupal\Core\Messenger\MessengerInterface;
 use Drupal\Core\StringTranslation\StringTranslationTrait;
 use Drupal\editor\EditorInterface;
 use Drupal\editor\Entity\Editor;
@@ -141,32 +142,47 @@ public function computeSmartDefaultSettings(?EditorInterface $text_editor, Filte
       $unsupported = $missing->diff($missing_attributes);
 
       if ($enabling_message_content) {
-        $messages[] = $this->t('The following plugins were enabled to support tags that are allowed by this text format: %enabling_message_content.',
+        $messages[MessengerInterface::TYPE_STATUS][] = $this->t('The following plugins were enabled to support tags that are allowed by this text format: %enabling_message_content.',
           ['%enabling_message_content' => $enabling_message_content],
         );
       }
       // Warn user about unsupported tags.
-      if (!$unsupported->isEmpty()) {
+      if (!$unsupported->allowsNothing()) {
         $this->addTagsToSourceEditing($editor, $unsupported);
-        $messages[] = $this->t("The following tags were permitted by this format's filter configuration, but no plugin was available that supports them. To ensure the tags remain supported by this text format, the following were added to the Source Editing plugin's <em>Manually editable HTML tags</em>: @unsupported_string.", [
+        $messages[MessengerInterface::TYPE_STATUS][] = $this->t("The following tags were permitted by this format's filter configuration, but no plugin was available that supports them. To ensure the tags remain supported by this text format, the following were added to the Source Editing plugin's <em>Manually editable HTML tags</em>: @unsupported_string.", [
           '@unsupported_string' => $unsupported->toFilterHtmlAllowedTagsString(),
         ]);
       }
 
       if ($enabled_for_attributes_message_content) {
-        $messages[] = $this->t('The following plugins were enabled to support specific attributes that are allowed by this text format: %enabled_for_attributes_message_content.',
+        $messages[MessengerInterface::TYPE_STATUS][] = $this->t('The following plugins were enabled to support specific attributes that are allowed by this text format: %enabled_for_attributes_message_content.',
           ['%enabled_for_attributes_message_content' => $enabled_for_attributes_message_content],
         );
       }
       // Warn user about supported tags but missing attributes.
-      if (!$missing_attributes->isEmpty()) {
+      if (!$missing_attributes->allowsNothing()) {
         $this->addTagsToSourceEditing($editor, $missing_attributes);
-        $messages[] = $this->t("This format's HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin's <em>Manually editable HTML tags</em>: @missing_attributes.", [
+        $messages[MessengerInterface::TYPE_STATUS][] = $this->t("This format's HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin's <em>Manually editable HTML tags</em>: @missing_attributes.", [
           '@missing_attributes' => $missing_attributes->toFilterHtmlAllowedTagsString(),
         ]);
       }
     }
 
+    if ($editor->getFilterFormat()->filters('filter_html')->status) {
+      $filter_html_restrictions = HTMLRestrictions::fromTextFormat($editor->getFilterFormat());
+      $fundamental = new HTMLRestrictions($this->pluginManager->getProvidedElements([
+        'ckeditor5_essentials',
+        'ckeditor5_paragraph',
+      ]));
+      $missing_tags = $fundamental->diff($filter_html_restrictions);
+      if (!$missing_tags->allowsNothing()) {
+        $editor->getFilterFormat()->setFilterConfig('filter_html', $filter_html_restrictions->merge($fundamental)->getAllowedElements());
+        $messages[MessengerInterface::TYPE_STATUS][] = $this->t("The following tag(s) were added to <em>Limit allowed HTML tags and correct faulty HTML</em>, because they are needed to provide fundamental CKEditor 5 functionality : @missing_tags.", [
+          '@missing_tags' => $missing_tags->toFilterHtmlAllowedTagsString(),
+        ]);
+      }
+    }
+
     // Finally: for all enabled plugins, find the ones that are configurable,
     // and add their default settings. For enabled plugins with element subsets,
     // compute the appropriate settings to achieve the subset that matches the
@@ -181,7 +197,7 @@ private function addTagsToSourceEditing(EditorInterface $editor, HTMLRestriction
     $messages = [];
     $settings = $editor->getSettings();
     if (!isset($settings['toolbar']['items']) || !in_array('sourceEditing', $settings['toolbar']['items'])) {
-      $messages[] = $this->t('The <em>Source Editing</em> plugin was enabled to support tags and/or attributes that are not explicitly supported by any available CKEditor 5 plugins.');
+      $messages[MessengerInterface::TYPE_STATUS][] = $this->t('The <em>Source Editing</em> plugin was enabled to support tags and/or attributes that are not explicitly supported by any available CKEditor 5 plugins.');
       $settings['toolbar']['items'][] = 'sourceEditing';
     }
     $allowed_tags_array = $settings['plugins']['ckeditor5_sourceEditing']['allowed_tags'] ?? [];
@@ -232,7 +248,7 @@ private function createSettingsFromCKEditor4(array $ckeditor4_settings, array $e
             $equivalent = $this->upgradePluginManager->mapCKEditor4ToolbarButtonToCKEditor5ToolbarItem($cke4_button, $text_format_html_restrictions);
           }
           catch (\OutOfBoundsException $e) {
-            $messages[] = $this->t('The CKEditor 4 button %button does not have a known upgrade path. If it allowed editing markup, then you can do so now through the Source Editing functionality.', [
+            $messages[MessengerInterface::TYPE_WARNING][] = $this->t('The CKEditor 4 button %button does not have a known upgrade path. If it allowed editing markup, then you can do so now through the Source Editing functionality.', [
               '%button' => $cke4_button,
             ]);
             continue;
@@ -270,7 +286,7 @@ private function createSettingsFromCKEditor4(array $ckeditor4_settings, array $e
         $settings['plugins'] += $cke5_plugin_settings;
       }
       catch (\OutOfBoundsException $e) {
-        $messages[] = $this->t('The %cke4_plugin_id plugin settings do not have a known upgrade path.', [
+        $messages[MessengerInterface::TYPE_WARNING][] = $this->t('The %cke4_plugin_id plugin settings do not have a known upgrade path.', [
           '%cke4_plugin_id' => $cke4_plugin_id,
         ]);
         continue;
@@ -457,7 +473,7 @@ private static function computeSurplusScore(HTMLRestrictions $surplus, HTMLRestr
    */
   private static function getCandidates(HTMLRestrictions $provided, HTMLRestrictions $still_needed, array $disabled_plugin_definitions): array {
     $plugin_candidates = [];
-    if (!$still_needed->isEmpty()) {
+    if (!$still_needed->allowsNothing()) {
       foreach ($disabled_plugin_definitions as $definition) {
         // Only proceed if the plugin has configured elements and the plugin
         // does not have conditions. In the future we could add support for
@@ -465,7 +481,7 @@ private static function getCandidates(HTMLRestrictions $provided, HTMLRestrictio
         // configuration cannot be modified.
         if (!$definition->hasConditions() && $definition->hasElements()) {
           [$net_new, $surplus_additions] = self::computeNetNewElementsForPlugin($provided, $still_needed, $definition);
-          if (!$net_new->isEmpty()) {
+          if (!$net_new->allowsNothing()) {
             $plugin_id = $definition->id();
             $surplus_score = static::computeSurplusScore($surplus_additions, $still_needed);
             foreach ($net_new->getAllowedElements() as $tag_name => $attributes_config) {
@@ -636,7 +652,7 @@ private function addToolbarItemsToMatchHtmlElementsInFormat(FilterFormatInterfac
     $provided = new HTMLRestrictions($provided_elements);
     $still_needed = HTMLRestrictions::fromTextFormat($format)->diff($provided);
 
-    if (!$still_needed->isEmpty()) {
+    if (!$still_needed->allowsNothing()) {
       $plugin_candidates = self::getCandidates($provided, $still_needed, $disabled_definitions);
       $selected_plugins = self::selectCandidate($plugin_candidates, $still_needed, array_keys($provided->getAllowedElements()));
 
@@ -762,7 +778,7 @@ private function computeSubsetSettingForEnabledPluginsWithSubsets(EditorInterfac
         $subset_configuration = $this->upgradePluginManager->computeCKEditor5PluginSubsetConfiguration($plugin_name, $text_format);
       }
       catch (\OutOfBoundsException $e) {
-        $messages[] = $this->t('The CKEditor 5 plugin %button has a configurable subset of elements, but does not have a known upgrade path to configure that subset to match your text format. Hence it is now using its default configuration.', [
+        $messages[MessengerInterface::TYPE_WARNING][] = $this->t('The CKEditor 5 plugin %button has a configurable subset of elements, but does not have a known upgrade path to configure that subset to match your text format. Hence it is now using its default configuration.', [
           '%plugin' => $plugin_name,
         ]);
         continue;
diff --git a/web/core/modules/ckeditor5/tests/modules/ckeditor5_drupalelementstyle_test/ckeditor5_drupalelementstyle_test.module b/web/core/modules/ckeditor5/tests/modules/ckeditor5_drupalelementstyle_test/ckeditor5_drupalelementstyle_test.module
index aed6f573cc..2be84aa25f 100644
--- a/web/core/modules/ckeditor5/tests/modules/ckeditor5_drupalelementstyle_test/ckeditor5_drupalelementstyle_test.module
+++ b/web/core/modules/ckeditor5/tests/modules/ckeditor5_drupalelementstyle_test/ckeditor5_drupalelementstyle_test.module
@@ -20,10 +20,11 @@ function ckeditor5_drupalelementstyle_test_ckeditor5_plugin_info_alter(array &$p
     0 => [
       'name' => 'drupalMedia:align',
       'title' => 'Test title',
+      'display' => 'splitButton',
       'items' => array_values(array_filter($media_align_plugin_definition['ckeditor5']['config']['drupalMedia']['toolbar'], function (string $toolbar_item): bool {
         return $toolbar_item !== '|';
       })),
-      'defaultItem' => 'drupalElementStyle:breakText',
+      'defaultItem' => 'drupalElementStyle:align:breakText',
     ],
   ];
   $plugin_definitions['media_mediaAlign'] = new CKEditor5PluginDefinition($media_align_plugin_definition);
diff --git a/web/core/modules/ckeditor5/tests/modules/ckeditor5_incompatible_filter_test/ckeditor5_incompatible_filter_test.info.yml b/web/core/modules/ckeditor5/tests/modules/ckeditor5_incompatible_filter_test/ckeditor5_incompatible_filter_test.info.yml
new file mode 100644
index 0000000000..f279515767
--- /dev/null
+++ b/web/core/modules/ckeditor5/tests/modules/ckeditor5_incompatible_filter_test/ckeditor5_incompatible_filter_test.info.yml
@@ -0,0 +1,6 @@
+name: CKEditor 5 Incompatible Filter Test
+type: module
+description: "Provides a filter incompatible with CKEditor 5"
+package: Testing
+dependencies:
+  - drupal:ckeditor5
diff --git a/web/core/modules/ckeditor5/tests/modules/ckeditor5_incompatible_filter_test/src/Plugin/Filter/FilterIsIncompatible.php b/web/core/modules/ckeditor5/tests/modules/ckeditor5_incompatible_filter_test/src/Plugin/Filter/FilterIsIncompatible.php
new file mode 100644
index 0000000000..e2f23131c8
--- /dev/null
+++ b/web/core/modules/ckeditor5/tests/modules/ckeditor5_incompatible_filter_test/src/Plugin/Filter/FilterIsIncompatible.php
@@ -0,0 +1,26 @@
+<?php
+
+namespace Drupal\ckeditor5_incompatible_filter_test\Plugin\Filter;
+
+use Drupal\filter\FilterProcessResult;
+use Drupal\filter\Plugin\FilterBase;
+
+/**
+ * Provides a filter incompatible with CKEditor 5.
+ *
+ * @Filter(
+ *   id = "filter_incompatible",
+ *   title = @Translation("A TYPE_MARKUP_LANGUAGE filter incompatible with CKEditor 5"),
+ *   type = Drupal\filter\Plugin\FilterInterface::TYPE_MARKUP_LANGUAGE
+ * )
+ */
+class FilterIsIncompatible extends FilterBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function process($text, $langcode) {
+    return new FilterProcessResult($text);
+  }
+
+}
diff --git a/web/core/modules/ckeditor5/tests/modules/ckeditor5_plugin_elements_subset/ckeditor5_plugin_elements_subset.ckeditor5.yml b/web/core/modules/ckeditor5/tests/modules/ckeditor5_plugin_elements_subset/ckeditor5_plugin_elements_subset.ckeditor5.yml
index c5218e7e2f..9e5e511f70 100644
--- a/web/core/modules/ckeditor5/tests/modules/ckeditor5_plugin_elements_subset/ckeditor5_plugin_elements_subset.ckeditor5.yml
+++ b/web/core/modules/ckeditor5/tests/modules/ckeditor5_plugin_elements_subset/ckeditor5_plugin_elements_subset.ckeditor5.yml
@@ -7,3 +7,6 @@ ckeditor5_plugin_elements_subset_sneakySuperset:
     elements:
       - <foo>
       - <bar>
+    # @todo Remove in https://www.drupal.org/project/drupal/issues/3269657
+    conditions:
+      filter: media_embed
diff --git a/web/core/modules/ckeditor5/tests/modules/ckeditor5_test/ckeditor5_test.ckeditor5.yml b/web/core/modules/ckeditor5/tests/modules/ckeditor5_test/ckeditor5_test.ckeditor5.yml
index 413dc0630b..91d332bfad 100644
--- a/web/core/modules/ckeditor5/tests/modules/ckeditor5_test/ckeditor5_test.ckeditor5.yml
+++ b/web/core/modules/ckeditor5/tests/modules/ckeditor5_test/ckeditor5_test.ckeditor5.yml
@@ -4,7 +4,7 @@ ckeditor5_test_layercake:
     plugins: []
     config:
       drupalElementStyles:
-        options:
+        layercake:
           - name: 'layerCakeSide'
             title: 'Media aligned to side'
             icon: '<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path opacity=".5" d="M2 3h16v1.5H2zm0 12h16v1.5H2z"/><path d="M18.003 7v5.5a1 1 0 0 1-1 1H8.996a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h8.007a1 1 0 0 1 1 1zm-1.506.5H9.5V12h6.997V7.5z"/></svg>'
diff --git a/web/core/modules/ckeditor5/tests/src/Functional/MediaEntityMetadataApiTest.php b/web/core/modules/ckeditor5/tests/src/Functional/MediaEntityMetadataApiTest.php
index 13a12a2551..fa7f45332b 100644
--- a/web/core/modules/ckeditor5/tests/src/Functional/MediaEntityMetadataApiTest.php
+++ b/web/core/modules/ckeditor5/tests/src/Functional/MediaEntityMetadataApiTest.php
@@ -89,7 +89,7 @@ protected function setUp(): void {
           'status' => TRUE,
           'weight' => -10,
           'settings' => [
-            'allowed_html' => "<p> <br> <drupal-media data-entity-type data-entity-uuid alt>",
+            'allowed_html' => "<p> <br> <drupal-media data-entity-type data-entity-uuid data-view-mode alt>",
             'filter_html_help' => TRUE,
             'filter_html_nofollow' => TRUE,
           ],
@@ -168,7 +168,7 @@ public function testApi() {
 
     $this->drupalGet($path, ['query' => ['uuid' => $uuid, 'token' => $token]]);
     $this->assertSession()->statusCodeEquals(200);
-    $this->assertSame(json_encode(['imageSourceMetadata' => ['alt' => 'default alt']]), $this->getSession()->getPage()->getContent());
+    $this->assertSame(json_encode(["type" => "image", 'imageSourceMetadata' => ['alt' => 'default alt']]), $this->getSession()->getPage()->getContent());
 
     $this->mediaImage->set('field_media_image', [
       'target_id' => 1,
@@ -177,11 +177,11 @@ public function testApi() {
     ])->save();
     $this->drupalGet($path, ['query' => ['uuid' => $uuid, 'token' => $token]]);
     $this->assertSession()->statusCodeEquals(200);
-    $this->assertSame(json_encode(['imageSourceMetadata' => ['alt' => '']]), $this->getSession()->getPage()->getContent());
+    $this->assertSame(json_encode(['type' => 'image', 'imageSourceMetadata' => ['alt' => '']]), $this->getSession()->getPage()->getContent());
 
     $this->drupalGet($path, ['query' => ['uuid' => $this->mediaFile->uuid(), 'token' => $token]]);
     $this->assertSession()->statusCodeEquals(200);
-    $this->assertSame(json_encode([]), $this->getSession()->getPage()->getContent());
+    $this->assertSame(json_encode(['type' => 'file']), $this->getSession()->getPage()->getContent());
 
     // Ensure that unpublished media returns 403.
     $this->mediaImage->setUnpublished()->save();
@@ -245,13 +245,13 @@ public function testApiTranslation(): void {
     $this->drupalGet($path, ['query' => ['uuid' => $uuid, 'token' => $token], 'language' => $media_fi->language()]);
     $this->assertSession()->statusCodeEquals(200);
     // cSpell:disable-next-line
-    $this->assertSame(json_encode(['imageSourceMetadata' => ['alt' => 'oletus alt-teksti kuvalle']]), $this->getSession()->getPage()->getContent());
+    $this->assertSame(json_encode(['type' => 'image', 'imageSourceMetadata' => ['alt' => 'oletus alt-teksti kuvalle']]), $this->getSession()->getPage()->getContent());
 
     // Ensure that default translation is returned when no language is
     // specified.
     $this->drupalGet($path, ['query' => ['uuid' => $uuid, 'token' => $token]]);
     $this->assertSession()->statusCodeEquals(200);
-    $this->assertSame(json_encode(['imageSourceMetadata' => ['alt' => 'default alt']]), $this->getSession()->getPage()->getContent());
+    $this->assertSame(json_encode(['type' => 'image', 'imageSourceMetadata' => ['alt' => 'default alt']]), $this->getSession()->getPage()->getContent());
   }
 
 }
diff --git a/web/core/modules/ckeditor5/tests/src/FunctionalJavascript/AdminUiTest.php b/web/core/modules/ckeditor5/tests/src/FunctionalJavascript/AdminUiTest.php
index 2b51e6b1f7..977c65a773 100644
--- a/web/core/modules/ckeditor5/tests/src/FunctionalJavascript/AdminUiTest.php
+++ b/web/core/modules/ckeditor5/tests/src/FunctionalJavascript/AdminUiTest.php
@@ -18,6 +18,9 @@ class AdminUiTest extends CKEditor5TestBase {
   protected static $modules = [
     'media_library',
     'ckeditor',
+    // @todo Remove in https://www.drupal.org/project/drupal/issues/3269657
+    'ckeditor5_plugin_elements_subset',
+    'ckeditor5_incompatible_filter_test',
   ];
 
   /**
@@ -68,11 +71,12 @@ public function testSettingsOnlyFireAjaxWithCkeditor5() {
     $assert_session->waitForText('Machine name');
     $page->checkField('roles[authenticated]');
 
-    // Enable a filter that is incompatible with CKEditor 5 if not configured
-    // correctly, so validation is triggered when attempting to switch.
+    // Enable a filter that is incompatible with CKEditor 5, so validation is
+    // triggered when attempting to switch.
+    $incompatible_filter_name = 'filters[filter_incompatible][status]';
     $number_ajax_instances_before = $this->getSession()->evaluateScript('Drupal.ajax.instances.length');
-    $this->assertTrue($page->hasUncheckedField('filters[filter_html][status]'));
-    $page->checkField('filters[filter_html][status]');
+    $this->assertTrue($page->hasUncheckedField($incompatible_filter_name));
+    $page->checkField($incompatible_filter_name);
     $this->assertEmpty($assert_session->waitForElement('css', '.ajax-progress-throbber'));
     $assert_session->assertWaitOnAjaxRequest();
     $number_ajax_instances_after = $this->getSession()->evaluateScript('Drupal.ajax.instances.length');
@@ -81,18 +85,20 @@ public function testSettingsOnlyFireAjaxWithCkeditor5() {
     $page->selectFieldOption('editor[editor]', 'ckeditor5');
     $assert_session->assertWaitOnAjaxRequest();
 
+    $filter_warning = 'CKEditor 5 only works with HTML-based text formats. The "A TYPE_MARKUP_LANGUAGE filter incompatible with CKEditor 5" (filter_incompatible) filter implies this text format is not HTML anymore.';
+
     // The presence of this validation error message confirms the AJAX callback
     // was invoked.
-    $assert_session->pageTextContains('CKEditor 5 needs at least the <p> and <br> tags to be allowed to be able to function. They are not allowed by the "Limit allowed HTML tags and correct faulty HTML" (filter_html) filter.');
+    $assert_session->pageTextContains($filter_warning);
 
     // Disable the incompatible filter. This should trigger another AJAX rebuild
     // which will include the removal of the validation error as the issue has
     // been corrected.
-    $this->assertTrue($page->hasCheckedField('filters[filter_html][status]'));
-    $page->uncheckField('filters[filter_html][status]');
+    $this->assertTrue($page->hasCheckedField($incompatible_filter_name));
+    $page->uncheckField($incompatible_filter_name);
     $this->assertNotEmpty($assert_session->waitForElement('css', '.ajax-progress-throbber'));
     $assert_session->assertWaitOnAjaxRequest();
-    $assert_session->pageTextNotContains('CKEditor 5 needs at least the <p> and <br> tags to be allowed to be able to function. They are not allowed by the "Limit allowed HTML tags and correct faulty HTML" (filter_html) filter.');
+    $assert_session->pageTextNotContains($filter_warning);
   }
 
   /**
@@ -215,6 +221,20 @@ public function testPluginSettingsFormSection() {
 
     // The source plugin config form should be present.
     $assert_session->elementExists('css', '[data-drupal-selector="edit-editor-settings-plugins-ckeditor5-sourceediting"]');
+
+    // The filter-dependent configurable plugin should not be present.
+    // @todo Change to `media_media` plugin in https://www.drupal.org/project/drupal/issues/3269657
+    // cSpell:disable-next-line
+    $assert_session->elementNotExists('css', '[data-drupal-selector="edit-editor-settings-plugins-ckeditor5-plugin-elements-subset-sneakysuperset"]');
+
+    // Enable the filter that the configurable plugin depends on.
+    $this->assertTrue($page->hasUncheckedField('filters[media_embed][status]'));
+    $page->checkField('filters[media_embed][status]');
+    $assert_session->assertWaitOnAjaxRequest();
+
+    // The filter-dependent configurable plugin should be present.
+    // cSpell:disable-next-line
+    $assert_session->elementExists('css', '[data-drupal-selector="edit-editor-settings-plugins-ckeditor5-plugin-elements-subset-sneakysuperset"]');
   }
 
   /**
diff --git a/web/core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5AllowedTagsTest.php b/web/core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5AllowedTagsTest.php
index 80b0636fcf..6a61cfe560 100644
--- a/web/core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5AllowedTagsTest.php
+++ b/web/core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5AllowedTagsTest.php
@@ -25,6 +25,7 @@ class CKEditor5AllowedTagsTest extends CKEditor5TestBase {
     'ckeditor5',
     'media',
     'media_library',
+    'ckeditor5_incompatible_filter_test',
   ];
 
   /**
@@ -41,6 +42,13 @@ class CKEditor5AllowedTagsTest extends CKEditor5TestBase {
    */
   protected $defaultElementsWhenUpdatingNotCkeditor5 = '<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id> <img src alt data-entity-type data-entity-uuid>';
 
+  /**
+   * The expected allowed elements after updating to CKEditor5.
+   *
+   * @var string
+   */
+  protected $defaultElementsAfterUpdatingToCkeditor5 = '<br> <p> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id> <cite> <dl> <dt> <dd> <a hreflang href> <blockquote cite> <ul type> <ol type start> <img src alt data-entity-type data-entity-uuid> <strong> <em> <code> <li>';
+
   /**
    * Test enabling CKEditor 5 in a way that triggers validation.
    */
@@ -48,25 +56,26 @@ public function testEnablingToVersion5Validation() {
     $page = $this->getSession()->getPage();
     $assert_session = $this->assertSession();
 
+    $incompatible_filter_name = 'filters[filter_incompatible][status]';
+    $filter_warning = 'CKEditor 5 only works with HTML-based text formats. The "A TYPE_MARKUP_LANGUAGE filter incompatible with CKEditor 5" (filter_incompatible) filter implies this text format is not HTML anymore.';
+
     $this->createNewTextFormat($page, $assert_session, 'ckeditor');
     $page->selectFieldOption('editor[editor]', 'ckeditor');
     $assert_session->assertWaitOnAjaxRequest();
     $page->checkField('filters[filter_html][status]');
+    $page->checkField($incompatible_filter_name);
     $assert_session->assertWaitOnAjaxRequest();
     $page->selectFieldOption('editor[editor]', 'ckeditor5');
     $assert_session->assertWaitOnAjaxRequest();
-    $assert_session->pageTextContains('CKEditor 5 needs at least the <p> and <br> tags to be allowed to be able to function. They are not allowed by the "Limit allowed HTML tags and correct faulty HTML" (filter_html) filter.');
+    $assert_session->pageTextContains($filter_warning);
 
-    // Add the tags that must be included in the html filter for CKEditor 5
-    // defaults.
-    $allowed_html_field = $assert_session->fieldExists('filters[filter_html][settings][allowed_html]');
-    $allowed_html_field->setValue('<p> <br>');
+    // Disable the incompatible filter.
+    $page->uncheckField($incompatible_filter_name);
 
     // Confirm there are no longer any warnings.
     $assert_session->waitForElementRemoved('css', '[data-drupal-messages] [role="alert"]');
 
-    $page->pressButton('update-ckeditor5-allowed-tags');
-    $assert_session->assertWaitOnAjaxRequest();
+    // Confirm the text format can be saved.
     $this->saveNewTextFormat($page, $assert_session);
   }
 
@@ -153,16 +162,9 @@ public function testSwitchToVersion5() {
     $page->selectFieldOption('editor[editor]', 'ckeditor5');
     $assert_session->assertWaitOnAjaxRequest();
 
-    $this->assertTrue($page->find('css', '[name="editor[editor]"]')->hasClass('error'));
-    $this->assertNotEmpty($assert_session->waitForElement('css', '[data-ckeditor5-allowed-tags-info]'));
-    $this->assertHtmlEsqueFieldValueEquals('filters[filter_html][settings][allowed_html]', $this->defaultElementsWhenUpdatingNotCkeditor5);
-
-    $allowed_html_field = $assert_session->fieldExists('filters[filter_html][settings][allowed_html]');
-    $allowed_html_field->setValue('<p> <br>');
+    $assert_session->pageTextContains('The following tag(s) were added to Limit allowed HTML tags and correct faulty HTML, because they are needed to provide fundamental CKEditor 5 functionality : <br> <p>');
+    $this->assertHtmlEsqueFieldValueEquals('filters[filter_html][settings][allowed_html]', $this->defaultElementsAfterUpdatingToCkeditor5);
 
-    $page->pressButton('update-ckeditor5-allowed-tags');
-    $assert_session->assertWaitOnAjaxRequest();
-    $this->assertFalse($page->find('css', '[name="editor[editor]"]')->hasClass('error'));
     $page->pressButton('Save configuration');
 
     $assert_session->pageTextContains('The Image upload toolbar item requires image uploads to be enabled.');
@@ -172,6 +174,15 @@ public function testSwitchToVersion5() {
     $page->checkField('editor[settings][plugins][ckeditor5_imageUpload][status]');
     $assert_session->assertWaitOnAjaxRequest();
     $page->pressButton('Save configuration');
+    $this->assertSession()->pageTextContains('The following attribute(s) are already supported by enabled plugins and should not be added to the Source Editing "Manually editable HTML tags" field: Image (<img src alt data-entity-uuid data-entity-type>)');
+
+    $assert_session->assertWaitOnAjaxRequest();
+    $assert_session->waitForText('Manually editable HTML tags');
+    $source_edit_tags_field = $assert_session->fieldExists('editor[settings][plugins][ckeditor5_sourceEditing][allowed_tags]');
+    $source_edit_tags_field_value = $source_edit_tags_field->getValue();
+    $source_edit_tags_field->setValue(str_replace('<img src alt data-entity-type data-entity-uuid>', '', $source_edit_tags_field_value));
+    $assert_session->assertWaitOnAjaxRequest();
+    $page->pressButton('Save configuration');
 
     $assert_session->pageTextContains('The text format ckeditor has been updated');
   }
@@ -372,7 +383,7 @@ public function testMediaElementAllowedTags() {
     $assert_session->assertWaitOnAjaxRequest();
     $assert_session->responseContains('Media types selectable in the Media Library');
 
-    $allowed_with_media = $this->allowedElements . ' <drupal-media data-entity-type data-entity-uuid alt>';
+    $allowed_with_media = $this->allowedElements . ' <drupal-media data-entity-type data-entity-uuid data-view-mode alt>';
     $assert_session->responseContains('Media types selectable in the Media Library');
     $this->assertHtmlEsqueFieldValueEquals('filters[filter_html][settings][allowed_html]', $allowed_with_media);
     $this->saveNewTextFormat($page, $assert_session);
@@ -392,7 +403,7 @@ public function testMediaElementAllowedTags() {
     // filter_align is enabled.
     $page->checkField('filters[filter_align][status]');
     $assert_session->assertWaitOnAjaxRequest();
-    $this->assertEquals($this->allowedElements . ' <drupal-media data-entity-type data-entity-uuid alt data-align>', $allowed_html_field->getValue());
+    $this->assertEquals($this->allowedElements . ' <drupal-media data-entity-type data-entity-uuid data-view-mode alt data-align>', $allowed_html_field->getValue());
 
     // Disable media embed.
     $this->assertTrue($page->hasCheckedField('filters[media_embed][status]'));
diff --git a/web/core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5Test.php b/web/core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5Test.php
index 0540e2bcfc..fb35f270c5 100644
--- a/web/core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5Test.php
+++ b/web/core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5Test.php
@@ -13,7 +13,7 @@
 use Drupal\user\RoleInterface;
 use Symfony\Component\Validator\ConstraintViolation;
 
-// cspell:ignore esque upcasted
+// cspell:ignore esque splitbutton upcasted
 
 /**
  * Tests for CKEditor5.
@@ -445,4 +445,131 @@ public function testEmphasis() {
     $assert_session->responseContains('<p>This is a <em>test!</em></p>');
   }
 
+  /**
+   * Tests list plugin.
+   */
+  public function testListPlugin() {
+    FilterFormat::create([
+      'format' => 'test_format',
+      'name' => 'CKEditor 5 with list',
+      'roles' => [RoleInterface::AUTHENTICATED_ID],
+    ])->save();
+    Editor::create([
+      'format' => 'test_format',
+      'editor' => 'ckeditor5',
+      'settings' => [
+        'toolbar' => [
+          'items' => ['sourceEditing', 'numberedList'],
+        ],
+        'plugins' => [
+          'ckeditor5_list' => [
+            'reversed' => FALSE,
+            'startIndex' => FALSE,
+          ],
+          'ckeditor5_sourceEditing' => [
+            'allowed_tags' => [],
+          ],
+        ],
+      ],
+    ])->save();
+    $this->assertSame([], array_map(
+      function (ConstraintViolation $v) {
+        return (string) $v->getMessage();
+      },
+      iterator_to_array(CKEditor5::validatePair(
+        Editor::load('test_format'),
+        FilterFormat::load('test_format')
+      ))
+    ));
+    $ordered_list_html = '<ol><li>apple</li><li>banana</li><li>cantaloupe</li></ol>';
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+    $this->drupalGet('node/add');
+    $page->fillField('title[0][value]', 'My test content');
+    $this->pressEditorButton('Source');
+    $source_text_area = $assert_session->waitForElement('css', '.ck-source-editing-area textarea');
+    $source_text_area->setValue($ordered_list_html);
+    // Click source again to make source inactive and have the numbered list
+    // splitbutton active.
+    $this->pressEditorButton('Source');
+    $numbered_list_dropdown_selector = '.ck-splitbutton__arrow';
+
+    // Check that there is no dropdown available for the numbered list because
+    // both reversed and startIndex are FALSE.
+    $assert_session->elementNotExists('css', $numbered_list_dropdown_selector);
+    // Save content so source content is kept after changing the editor config.
+    $page->pressButton('Save');
+    $edit_url = $this->getSession()->getCurrentURL() . '/edit';
+    $this->drupalGet($edit_url);
+    $this->waitForEditor();
+
+    // Enable the reversed functionality.
+    $editor = Editor::load('test_format');
+    $settings = $editor->getSettings();
+    $settings['plugins']['ckeditor5_list']['reversed'] = TRUE;
+    $editor->setSettings($settings);
+    $editor->save();
+    $this->getSession()->reload();
+    $this->waitForEditor();
+    $this->click($numbered_list_dropdown_selector);
+    $reversed_order_button_selector = '.ck.ck-button.ck-numbered-list-properties__reversed-order';
+    $assert_session->elementExists('css', $reversed_order_button_selector);
+    $assert_session->elementTextEquals('css', $reversed_order_button_selector, 'Reversed order');
+    $start_index_element_selector = '.ck.ck-numbered-list-properties__start-index';
+    $assert_session->elementNotExists('css', $start_index_element_selector);
+
+    // Have both the reversed and the start index enabled.
+    $editor = Editor::load('test_format');
+    $settings = $editor->getSettings();
+    $settings['plugins']['ckeditor5_list']['startIndex'] = TRUE;
+    $editor->setSettings($settings);
+    $editor->save();
+    $this->getSession()->reload();
+    $this->waitForEditor();
+    $this->click($numbered_list_dropdown_selector);
+    $assert_session->elementExists('css', $reversed_order_button_selector);
+    $assert_session->elementTextEquals('css', $reversed_order_button_selector, 'Reversed order');
+    $assert_session->elementExists('css', $start_index_element_selector);
+  }
+
+  /**
+   * Ensures that CKEditor 5 retains filter_html's allowed global attributes.
+   *
+   * FilterHtml always forbids the `style` and `on*` attributes, and always
+   * allows the `lang` attribute (with any value) and the `dir` attribute (with
+   * either `ltr` or `rtl` as value). It's important that those last two
+   * attributes are guaranteed to be retained.
+   *
+   * @see \Drupal\filter\Plugin\Filter\FilterHtml::getHTMLRestrictions()
+   * @see ckeditor5_globalAttributeDir
+   * @see ckeditor5_globalAttributeLang
+   * @see https://html.spec.whatwg.org/multipage/dom.html#global-attributes
+   */
+  public function testFilterHtmlAllowedGlobalAttributes(): void {
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+
+    // Add a node with text rendered via the Plain Text format.
+    $this->drupalGet('node/add');
+    $page->fillField('title[0][value]', 'Multilingual Hello World');
+    // cSpell:disable-next-line
+    $page->fillField('body[0][value]', '<p dir="ltr" lang="en">Hello World</p><p dir="rtl" lang="ar">مرحبا بالعالم</p>');
+    $page->pressButton('Save');
+
+    $this->createNewTextFormat($page, $assert_session);
+    $this->saveNewTextFormat($page, $assert_session);
+
+    $this->drupalGet('node/1/edit');
+    $page->selectFieldOption('body[0][format]', 'ckeditor5');
+    $this->assertNotEmpty($assert_session->waitForText('Change text format?'));
+    $page->pressButton('Continue');
+
+    $this->waitForEditor();
+    $page->pressButton('Save');
+
+    // @todo Remove the expected `xml:lang` attributes in https://www.drupal.org/project/drupal/issues/1333730
+    // cSpell:disable-next-line
+    $assert_session->responseContains('<p dir="ltr" lang="en" xml:lang="en">Hello World</p><p dir="rtl" lang="ar" xml:lang="ar">مرحبا بالعالم</p>');
+  }
+
 }
diff --git a/web/core/modules/ckeditor5/tests/src/FunctionalJavascript/ImageTest.php b/web/core/modules/ckeditor5/tests/src/FunctionalJavascript/ImageTest.php
index 9cbe3cb9ff..33b70b7a5f 100644
--- a/web/core/modules/ckeditor5/tests/src/FunctionalJavascript/ImageTest.php
+++ b/web/core/modules/ckeditor5/tests/src/FunctionalJavascript/ImageTest.php
@@ -398,8 +398,8 @@ public function testLinkability(string $image_type, bool $unrestricted) {
     $xpath = new \DOMXPath($this->getEditorDataAsDom());
     $this->assertCount(0, $xpath->query('//a[@href="http://www.drupal.org/association"]/img[@alt="drupalimage test image"]'));
     $this->assertCount(1, $xpath->query('//img[@alt="drupalimage test image"]'));
-    // @todo Remove the different assertion for the "inline, unrestricted" case when https://www.drupal.org/project/ckeditor5/issues/3247634 is fixed.
-    if ($image_type === 'inline' && $unrestricted) {
+    // @todo Remove the different assertion for the inline cases when https://www.drupal.org/project/ckeditor5/issues/3247634 is fixed.
+    if ($image_type === 'inline') {
       $this->assertCount(1, $xpath->query('//a'));
     }
     else {
diff --git a/web/core/modules/ckeditor5/tests/src/FunctionalJavascript/MediaLibraryTest.php b/web/core/modules/ckeditor5/tests/src/FunctionalJavascript/MediaLibraryTest.php
index f94987fb18..1cde072e9b 100644
--- a/web/core/modules/ckeditor5/tests/src/FunctionalJavascript/MediaLibraryTest.php
+++ b/web/core/modules/ckeditor5/tests/src/FunctionalJavascript/MediaLibraryTest.php
@@ -229,12 +229,7 @@ public function testAllowedMediaTypes() {
         ->setFilterConfig('media_embed', [
           'status' => TRUE,
           'settings' => [
-            'default_view_mode' => 'view_mode_1',
             'allowed_media_types' => $allowed_media_types,
-            'allowed_view_modes' => [
-              'view_mode_1' => 'view_mode_1',
-              'view_mode_2' => 'view_mode_2',
-            ],
           ],
         ])->save();
 
diff --git a/web/core/modules/ckeditor5/tests/src/FunctionalJavascript/MediaTest.php b/web/core/modules/ckeditor5/tests/src/FunctionalJavascript/MediaTest.php
index cbbfead2da..3a77e71807 100644
--- a/web/core/modules/ckeditor5/tests/src/FunctionalJavascript/MediaTest.php
+++ b/web/core/modules/ckeditor5/tests/src/FunctionalJavascript/MediaTest.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\Tests\ckeditor5\FunctionalJavascript;
 
+use Drupal\Core\Entity\Entity\EntityViewDisplay;
+use Drupal\Core\Entity\Entity\EntityViewMode;
 use Drupal\Core\Database\Database;
 use Drupal\editor\Entity\Editor;
 use Drupal\file\Entity\File;
@@ -45,6 +47,13 @@ class MediaTest extends WebDriverTestBase {
    */
   protected $media;
 
+  /**
+   * The second sample Media entity to embed used in one of the tests.
+   *
+   * @var \Drupal\media\MediaInterface
+   */
+  protected $mediaFile;
+
   /**
    * A host entity with a body field to embed media in.
    *
@@ -83,7 +92,7 @@ protected function setUp(): void {
         'filter_html' => [
           'status' => TRUE,
           'settings' => [
-            'allowed_html' => '<p> <br> <strong> <em> <a href> <drupal-media data-entity-type data-entity-uuid data-align data-caption alt>',
+            'allowed_html' => '<p> <br> <strong> <em> <a href> <drupal-media data-entity-type data-entity-uuid data-align data-view-mode data-caption alt>',
           ],
         ],
         'filter_align' => ['status' => TRUE],
@@ -147,6 +156,21 @@ function (ConstraintViolation $v) {
     ]);
     $this->media->save();
 
+    $this->createMediaType('file', ['id' => 'file']);
+    File::create([
+      'uri' => $this->getTestFiles('text')[0]->uri,
+    ])->save();
+    $this->mediaFile = Media::create([
+      'bundle' => 'file',
+      'name' => 'Information about screaming hairy armadillo',
+      'field_media_file' => [
+        [
+          'target_id' => 2,
+        ],
+      ],
+    ]);
+    $this->mediaFile->save();
+
     // Create a sample host entity to embed media in.
     $this->drupalCreateContentType(['type' => 'blog']);
     $this->host = $this->createNode([
@@ -227,7 +251,7 @@ public function testMediaArbitraryHtml() {
     $filter_format->setFilterConfig('filter_html', [
       'status' => TRUE,
       'settings' => [
-        'allowed_html' => '<p> <br> <strong> <em> <a href> <drupal-media data-entity-type data-entity-uuid data-align data-caption alt data-foo> <div data-bar>',
+        'allowed_html' => '<p> <br> <strong> <em> <a href> <drupal-media data-entity-type data-entity-uuid data-align data-caption alt data-foo data-view-mode> <div data-bar>',
       ],
     ]);
     $filter_format->save();
@@ -1119,7 +1143,7 @@ public function testDrupalMediaStyleWithClass() {
     $filter_format->setFilterConfig('filter_html', [
       'status' => TRUE,
       'settings' => [
-        'allowed_html' => '<p> <br> <h1 class> <div class> <section class> <drupal-media data-entity-type data-entity-uuid data-align data-caption alt class="layercake-side">',
+        'allowed_html' => '<p> <br> <h1 class> <div class> <section class> <drupal-media data-entity-type data-entity-uuid data-align data-caption data-view-mode alt class="layercake-side">',
       ],
     ]);
     $filter_format->save();
@@ -1167,11 +1191,307 @@ function (ConstraintViolation $v) {
   }
 
   /**
-   * Tests the EditorMediaDialog can set the data-view-mode attribute.
+   * Tests view mode integration.
+   *
+   * Tests that view mode is reflected onto the CKEditor 5 Widget wrapper, that
+   * the media style toolbar allows changing the view mode and that the changes
+   * are reflected on the widget and downcast drupal-media tag.
+   *
+   * @dataProvider providerTestViewMode
    */
-  public function testViewMode() {
-    // @todo Port in https://www.drupal.org/project/ckeditor5/issues/3245720
-    $this->markTestSkipped('Blocked on https://www.drupal.org/project/ckeditor5/issues/3245720.');
+  public function testViewMode(bool $with_alignment) {
+    EntityViewMode::create([
+      'id' => 'media.view_mode_1',
+      'targetEntityType' => 'media',
+      'status' => TRUE,
+      'enabled' => TRUE,
+      'label' => 'View Mode 1',
+    ])->save();
+    EntityViewMode::create([
+      'id' => 'media.22222',
+      'targetEntityType' => 'media',
+      'status' => TRUE,
+      'enabled' => TRUE,
+      'label' => 'View Mode 2 has Numeric ID',
+    ])->save();
+    EntityViewMode::create([
+      'id' => 'media.view_mode_3',
+      'targetEntityType' => 'media',
+      'status' => TRUE,
+      'enabled' => TRUE,
+      'label' => 'View Mode 3',
+    ])->save();
+    EntityViewMode::create([
+      'id' => 'media.view_mode_4',
+      'targetEntityType' => 'media',
+      'status' => TRUE,
+      'enabled' => TRUE,
+      'label' => 'View Mode 4',
+    ])->save();
+    // Enable view mode 1, 2, 4 for Image.
+    EntityViewDisplay::create([
+      'id' => 'media.image.view_mode_1',
+      'targetEntityType' => 'media',
+      'status' => TRUE,
+      'bundle' => 'image',
+      'mode' => 'view_mode_1',
+    ])->save();
+    EntityViewDisplay::create([
+      'id' => 'media.image.22222',
+      'targetEntityType' => 'media',
+      'status' => TRUE,
+      'bundle' => 'image',
+      'mode' => '22222',
+    ])->save();
+    EntityViewDisplay::create([
+      'id' => 'media.image.view_mode_4',
+      'targetEntityType' => 'media',
+      'status' => TRUE,
+      'bundle' => 'image',
+      'mode' => 'view_mode_4',
+    ])->save();
+
+    $filter_format = FilterFormat::load('test_format');
+    $filter_format->setFilterConfig('media_embed', [
+      'status' => TRUE,
+      'settings' => [
+        'default_view_mode' => 'view_mode_1',
+        'allowed_media_types' => [],
+        'allowed_view_modes' => [
+          'view_mode_1' => 'view_mode_1',
+          '22222' => '22222',
+          'view_mode_3' => 'view_mode_3',
+        ],
+      ],
+    ])->save();
+
+    if (!$with_alignment) {
+      $filter_format->filters('filter_align')->setConfiguration(array_merge($filter_format->filters('filter_align')->getConfiguration(), ['status' => FALSE]));
+    }
+
+    // Test that view mode dependencies are returned from the MediaEmbed
+    // filter's ::getDependencies() method.
+    $expected_config_dependencies = [
+      'core.entity_view_mode.media.view_mode_1',
+      'core.entity_view_mode.media.22222',
+      'core.entity_view_mode.media.view_mode_3',
+    ];
+
+    $dependencies = $filter_format->getDependencies();
+    $this->assertArrayHasKey('config', $dependencies);
+    $this->assertEqualsCanonicalizing($expected_config_dependencies, $dependencies['config']);
+    $assert_session = $this->assertSession();
+    $page = $this->getSession()->getPage();
+    $this->drupalGet($this->host->toUrl('edit-form'));
+    $this->waitForEditor();
+    // Wait for the media preview to load.
+    $this->assertNotEmpty($assert_session->waitForElementVisible('css', '.ck-widget.drupal-media img'));
+    $this->click('.ck-widget.drupal-media');
+    $this->assertVisibleBalloon('[aria-label="Drupal Media toolbar"]');
+    // Check that there is no data-view-mode set after embedding media.
+    $editor_dom = $this->getEditorDataAsDom();
+    $drupal_media_element = $editor_dom->getElementsByTagName('drupal-media')
+      ->item(0);
+    $this->assertFalse($drupal_media_element->hasAttribute('data-view-mode'));
+    $this->click('.ck-widget.drupal-media');
+    $this->assertVisibleBalloon('[aria-label="Drupal Media toolbar"]');
+    $this->getBalloonButton('View Mode 1')->click();
+
+    // Set view mode.
+    $this->getBalloonButton('View Mode 2 has Numeric ID')->click();
+    $editor_dom = $this->getEditorDataAsDom();
+    // Check that “data-view-mode” exists inside source editing.
+    $drupal_media_element = $editor_dom->getElementsByTagName('drupal-media')
+      ->item(0);
+    $this->assertEquals('22222', $drupal_media_element->getAttribute('data-view-mode'));
+
+    // Check that toolbar matches current view mode.
+    $dropdown_button = $page->find('css', 'button.ck-dropdown__button > span.ck-button__label');
+    $this->assertEquals('View Mode 2 has Numeric ID', $dropdown_button->getText());
+    // Enter source mode.
+    $this->pressEditorButton('Source');
+    // Leave source mode to force CKEditor 5 to upcast again to check data
+    // persistence.
+    $this->pressEditorButton('Source');
+    $this->click('.ck-widget.drupal-media');
+    $dropdown_button = $page->find('css', 'button.ck-dropdown__button > span.ck-button__label');
+    // Check that view mode 2 persisted.
+    $this->assertEquals('View Mode 2 has Numeric ID', $dropdown_button->getText());
+
+    // Check that selecting a caption that is the child of a drupal-media will
+    // inherit the drupalElementStyle of its parent element.
+    $this->assertVisibleBalloon('[aria-label="Drupal Media toolbar"]');
+    $this->getBalloonButton('Toggle caption off')->click();
+    $this->assertVisibleBalloon('[aria-label="Drupal Media toolbar"]');
+    // Select the caption by toggling it on.
+    $this->getBalloonButton('Toggle caption on')->click();
+    $this->assertNotEmpty($assert_session->waitForElementVisible('css', '.drupal-media figcaption'));
+    // Ensure that the media contextual toolbar is visible after toggling
+    // caption on.
+    $this->assertVisibleBalloon('[aria-label="Drupal Media toolbar"]');
+    $dropdown_button = $page->find('css', 'button.ck-dropdown__button > span.ck-button__label');
+    $this->assertEquals('View Mode 2 has Numeric ID', $dropdown_button->getText());
+
+    // Remove the current view mode by setting it to Default.
+    $this->click('.ck-widget.drupal-media');
+    $this->assertVisibleBalloon('[aria-label="Drupal Media toolbar"]');
+    $this->getBalloonButton('View Mode 2 has Numeric ID')->click();
+    // Unset view mode.
+    $this->getBalloonButton('View Mode 1')->click();
+    $this->waitForEditor();
+    $editor_dom = $this->getEditorDataAsDom();
+    $drupal_media_element = $editor_dom->getElementsByTagName('drupal-media')
+      ->item(0);
+    // Test that setting the view mode back to the default removes the
+    // `data-view-mode` attribute.
+    $this->assertFalse($drupal_media_element->hasAttribute('data-view-mode'));
+    $assert_session->elementExists('css', 'article.media--view-mode-view-mode-1');
+
+    // Check that the toolbar status matches "no view mode".
+    $dropdown_button = $page->find('css', 'button.ck-dropdown__button > span.ck-button__label');
+    $this->assertEquals('View Mode 1', $dropdown_button->getText());
+
+    // Test that setting the allowed_view_modes option to only one option hides
+    // the field (it requires more than one option).
+    $filter_format->setFilterConfig('media_embed', [
+      'status' => TRUE,
+      'settings' => [
+        'default_view_mode' => 'view_mode_1',
+        'allowed_media_types' => [],
+        'allowed_view_modes' => [
+          'view_mode_1' => 'view_mode_1',
+        ],
+      ],
+    ])->save();
+
+    // Test that the dependencies change when the allowed_view_modes change.
+    $dependencies = $filter_format->getDependencies();
+    $this->assertArrayHasKey('config', $dependencies);
+    $this->assertSame(['core.entity_view_mode.media.view_mode_1'], $dependencies['config']);
+    // Reload page to get new configuration.
+    $this->getSession()->reload();
+    $this->assertNotEmpty($assert_session->waitForElementVisible('css', '.ck-widget.drupal-media img'));
+    $this->click('.ck-widget.drupal-media');
+    // Check that view mode dropdown is gone because there is only one option.
+    $this->assertEmpty($assert_session->waitForElementVisible('css', '.ck.ck-dropdown', 1000));
+    $editor_dom = $this->getEditorDataAsDom();
+    $drupal_media_element = $editor_dom->getElementsByTagName('drupal-media')
+      ->item(0);
+    $this->assertFalse($drupal_media_element->hasAttribute('data-view-mode'));
+    $assert_session->elementExists('css', 'article.media--view-mode-view-mode-1');
+
+    // Test that setting allowed_view_modes back to two items restores the
+    // field.
+    $filter_format->setFilterConfig('media_embed', [
+      'status' => TRUE,
+      'settings' => [
+        'default_view_mode' => 'view_mode_1',
+        'allowed_media_types' => [],
+        'allowed_view_modes' => [
+          'view_mode_1' => 'view_mode_1',
+          '22222' => '22222',
+        ],
+      ],
+    ])->save();
+
+    // Test that the dependencies change when the allowed_view_modes change.
+    $expected_config_dependencies = [
+      'core.entity_view_mode.media.view_mode_1',
+      'core.entity_view_mode.media.22222',
+    ];
+    $dependencies = $filter_format->getDependencies();
+    $this->assertArrayHasKey('config', $dependencies);
+    $this->assertEqualsCanonicalizing($expected_config_dependencies, $dependencies['config']);
+    // Reload page to get new configuration.
+    $this->getSession()->reload();
+    $this->waitForEditor();
+
+    // Test that changing the view mode with an empty editable caption
+    // preserves the empty editable caption when the preview reloads.
+    $this->assertNotEmpty($assert_session->waitForElementVisible('css', '.drupal-media figcaption'));
+    $original_value = $this->host->body->value;
+    $this->host->body->value = str_replace('data-caption="baz"', '', $original_value);
+    $this->host->save();
+    $this->getSession()->reload();
+    $this->waitForEditor();
+    $assert_session->elementExists('css', 'article.media--view-mode-view-mode-1');
+
+    $this->assertEmpty($assert_session->waitForElementVisible('css', '.drupal-media figcaption'));
+    $this->click('.ck-widget.drupal-media');
+    $this->assertVisibleBalloon('[aria-label="Drupal Media toolbar"]');
+    $this->getBalloonButton('View Mode 1')->click();
+    $this->getBalloonButton('View Mode 2 has Numeric ID')->click();
+    $assert_session->elementExists('css', 'article.media--view-mode-_2222');
+    $this->assertEmpty($assert_session->waitForElementVisible('css', '.drupal-media figcaption'));
+
+    // Test that a media with no view modes configured will be
+    // set to the default view mode.
+    $filter_format->setFilterConfig('media_embed', [
+      'status' => TRUE,
+      'settings' => [
+        'default_view_mode' => 'view_mode_1',
+        'allowed_media_types' => [],
+        'allowed_view_modes' => [],
+      ],
+    ])->save();
+    $dependencies = $filter_format->getDependencies();
+    $this->assertArrayHasKey('config', $dependencies);
+    $this->assertSame(['core.entity_view_mode.media.view_mode_1'], $dependencies['config']);
+    $this->host->body->value = '<drupal-media data-caption="armadillo" data-entity-type="media" data-entity-uuid="' . $this->mediaFile->uuid() . '"></drupal-media>';
+    $this->host->save();
+    // Reload page to get new configuration.
+    $this->getSession()->reload();
+    $this->waitForEditor();
+    $assert_session->waitForElementVisible('css', 'article.media--view-mode-view-mode-1');
+
+    // Test that having a default_view_mode that is not an allowed_view_mode
+    // will still be added to the editor.
+    $filter_format->setFilterConfig('media_embed', [
+      'status' => TRUE,
+      'settings' => [
+        'default_view_mode' => 'view_mode_1',
+        'allowed_media_types' => [],
+        'allowed_view_modes' => [
+          '22222' => '22222',
+          'view_mode_4' => 'view_mode_4',
+        ],
+      ],
+    ])->save();
+
+    // Test that the dependencies change when the allowed_view_modes change.
+    $expected_config_dependencies = [
+      'core.entity_view_mode.media.22222',
+      'core.entity_view_mode.media.view_mode_1',
+      'core.entity_view_mode.media.view_mode_4',
+    ];
+    $dependencies = $filter_format->getDependencies();
+    $this->assertArrayHasKey('config', $dependencies);
+    $this->assertEqualsCanonicalizing($expected_config_dependencies, $dependencies['config']);
+    $this->host->body->value = '<drupal-media data-entity-type="media" data-entity-uuid="' . $this->media->uuid() . '" data-caption="baz"></drupal-media>';
+    $this->host->save();
+    // Reload page to get new configuration.
+    $this->getSession()->reload();
+    $this->waitForEditor();
+    // Wait for the media preview to load.
+    $this->assertNotEmpty($assert_session->waitForElementVisible('css', '.ck-widget.drupal-media img'));
+    $this->click('.ck-widget.drupal-media');
+    $this->assertVisibleBalloon('[aria-label="Drupal Media toolbar"]');
+    $this->click('.ck-widget.drupal-media');
+    // Check that all three view modes exist including the default view mode
+    // that was not originally included in the allowed_view_modes.
+    $this->assertNotEmpty($this->getBalloonButton('View Mode 1'));
+    $this->assertNotEmpty($this->getBalloonButton('View Mode 2 has Numeric ID'));
+    $this->assertNotEmpty($this->getBalloonButton('View Mode 4'));
+  }
+
+  /**
+   * For testing view modes in different scenarios.
+   */
+  public function providerTestViewMode(): array {
+    return [
+      'with alignment' => [TRUE],
+      'without alignment' => [FALSE],
+    ];
   }
 
   /**
diff --git a/web/core/modules/ckeditor5/tests/src/FunctionalJavascript/TableTest.php b/web/core/modules/ckeditor5/tests/src/FunctionalJavascript/TableTest.php
new file mode 100644
index 0000000000..2667474bbf
--- /dev/null
+++ b/web/core/modules/ckeditor5/tests/src/FunctionalJavascript/TableTest.php
@@ -0,0 +1,227 @@
+<?php
+
+namespace Drupal\Tests\ckeditor5\FunctionalJavascript;
+
+use Drupal\ckeditor5\Plugin\Editor\CKEditor5;
+use Drupal\editor\Entity\Editor;
+use Drupal\filter\Entity\FilterFormat;
+use Drupal\Tests\ckeditor5\Traits\CKEditor5TestTrait;
+use Symfony\Component\Validator\ConstraintViolation;
+
+/**
+ * For testing the table plugin.
+ *
+ * @group ckeditor5
+ * @internal
+ */
+class TableTest extends CKEditor5TestBase {
+
+  use CKEditor5TestTrait;
+
+  /**
+   * A host entity with a body field to embed images in.
+   *
+   * @var \Drupal\node\NodeInterface
+   */
+  protected $host;
+
+  /**
+   * Text added to captions.
+   *
+   * @var string
+   */
+  protected $captionText = 'some caption';
+
+  /**
+   * Text added to table cells.
+   *
+   * @var string
+   */
+  protected $tableCellText = 'table cell';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'ckeditor5',
+    'node',
+    'text',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stark';
+
+  protected function setUp(): void {
+    parent::setUp();
+
+    FilterFormat::create([
+      'format' => 'test_format',
+      'name' => 'Test format',
+      'filters' => [
+        'filter_html' => [
+          'status' => TRUE,
+          'settings' => [
+            'allowed_html' => '<br> <p> <table> <tr> <td rowspan colspan> <th rowspan colspan> <thead> <tbody> <tfoot> <caption>',
+          ],
+        ],
+      ],
+    ])->save();
+    Editor::create([
+      'editor' => 'ckeditor5',
+      'format' => 'test_format',
+      'settings' => [
+        'toolbar' => [
+          'items' => [
+            'insertTable',
+            'sourceEditing',
+          ],
+        ],
+        'plugins' => [
+          'ckeditor5_sourceEditing' => [
+            'allowed_tags' => [],
+          ],
+        ],
+      ],
+    ])->save();
+    $this->assertSame([], array_map(
+      function (ConstraintViolation $v) {
+        return (string) $v->getMessage();
+      },
+      iterator_to_array(CKEditor5::validatePair(
+        Editor::load('test_format'),
+        FilterFormat::load('test_format')
+      ))
+    ));
+
+    // Create a sample host entity.
+    $this->host = $this->createNode([
+      'type' => 'page',
+      'title' => 'Animals with strange names',
+      'body' => [
+        'value' => '<p>some content that will likely change</p>',
+        'format' => 'test_format',
+      ],
+    ]);
+    $this->host->save();
+
+    $this->drupalLogin($this->drupalCreateUser([
+      'use text format test_format',
+      'bypass node access',
+    ]));
+  }
+
+  /**
+   * Confirms tables convert to the expected markup.
+   */
+  public function testTableConversion() {
+    $assert_session = $this->assertSession();
+    $page = $this->getSession()->getPage();
+
+    // This is CKEditor 5's default table markup, but uses elements that are
+    // not allowed by the text format.
+    $this->host->body->value = '<figure class="table"><table><tbody><tr><td>table cell</td></tr></tbody></table> <figcaption>some caption</figcaption></figure>';
+    $this->host->save();
+    $this->drupalGet($this->host->toUrl('edit-form'));
+
+    $this->captionText = 'some caption';
+    $this->tableCellText = 'table cell';
+
+    $table_container = $assert_session->waitForElementVisible('css', 'figure.table');
+    $this->assertNotNull($table_container);
+    $caption = $page->find('css', 'figure.table > figcaption');
+    $this->assertEquals($this->captionText, $caption->getText());
+    $table = $page->find('css', 'figure.table > table');
+    $this->assertEquals($this->tableCellText, $table->getText());
+
+    $this->assertTableStructureInEditorData();
+    $this->assertTableStructureInRenderedPage();
+  }
+
+  /**
+   * Tests creating a table with caption in the UI.
+   */
+  public function testTableCaptionUi() {
+    $assert_session = $this->assertSession();
+    $page = $this->getSession()->getPage();
+
+    $this->drupalGet($this->host->toUrl('edit-form'));
+    $this->waitForEditor();
+
+    // Add a table via the editor buttons.
+    $table_button = $page->find('css', '.ck-dropdown button');
+    $table_button->click();
+
+    // Add a single table cell.
+    $grid_button = $assert_session->waitForElementVisible('css', '.ck-insert-table-dropdown-grid-box[data-row="1"][data-column="1"]');
+    $grid_button->click();
+
+    // Confirm the table has been added and no caption is present.
+    $this->assertNotNull($table_figure = $assert_session->waitForElementVisible('css', 'figure.table'));
+    $assert_session->elementNotExists('css', 'figure.table > figcaption');
+
+    // Enable captions and update caption content.
+    $caption_button = $this->getBalloonButton('Toggle caption on');
+    $caption_button->click();
+    $caption = $assert_session->waitForElementVisible('css', 'figure.table > figcaption');
+    $this->assertEmpty($caption->getText());
+    $this->getSession()->getDriver()->executeScript("document.querySelector('figure.table > figcaption').innerText = '$this->captionText'");
+    $this->assertEquals($this->captionText, $caption->getText());
+
+    // Update table cell content.
+    $this->getSession()->getDriver()->executeScript("document.querySelector('.ck-editor__nested-editable .ck-table-bogus-paragraph').innerText = '$this->tableCellText'");
+    $table_cell = $page->find('css', 'figure.table > table > tbody > tr > td');
+    $this->assertEquals($this->tableCellText, $table_cell->getText());
+
+    $this->assertTableStructureInEditorData();
+
+    // Disable caption, confirm the caption is no longer present.
+    $table_figure->click();
+    $caption_off_button = $this->getBalloonButton('Toggle caption off');
+    $caption_off_button->click();
+    $assert_session->assertNoElementAfterWait('css', 'figure.table > figcaption');
+
+    // Re-enable caption and confirm the value was retained.
+    $table_figure->click();
+    $caption_on_button = $this->getBalloonButton('Toggle caption on');
+    $caption_on_button->click();
+    $caption = $assert_session->waitForElementVisible('css', 'figure.table > figcaption');
+    $this->assertEquals($this->captionText, $caption->getText());
+
+    $this->assertTableStructureInRenderedPage();
+  }
+
+  /**
+   * Confirms the structure of the table within the editor data.
+   */
+  public function assertTableStructureInEditorData(): void {
+    $xpath = new \DOMXPath($this->getEditorDataAsDom());
+    $this->assertEmpty($xpath->query('//figure'), 'There should be no figure tag in editor data');
+    $this->assertNotEmpty($xpath->query('//table/caption'), 'A caption should be the immediate child of <table>');
+    $this->assertEquals($this->captionText, (string) $xpath->query('//table/caption')[0]->nodeValue, "The caption should say {$this->captionText}");
+    $this->assertNotEmpty($xpath->query('//table/tbody/tr/td'), 'There is an expected table structure.');
+    $this->assertEquals($this->tableCellText, (string) $xpath->query('//table/tbody/tr/td')[0]->nodeValue, "The table cell should say {$this->tableCellText}");
+  }
+
+  /**
+   * Confirms the saved page has the expected table structure.
+   */
+  public function assertTableStructureInRenderedPage(): void {
+    $assert_session = $this->assertSession();
+    $page = $this->getSession()->getPage();
+
+    $page->pressButton('Save');
+    $assert_session->waitForText('has been updated');
+
+    $assert_session->pageTextContains($this->tableCellText);
+    $assert_session->pageTextContains($this->captionText);
+
+    $assert_session->elementNotExists('css', 'figure');
+    $this->assertNotNull($table_cell = $page->find('css', 'table > tbody > tr > td'), 'Table on rendered page has expected structure');
+    $this->assertEquals($this->tableCellText, $table_cell->getText(), 'Table on rendered page has expected content');
+    $this->assertNotNull($table_caption = $page->find('css', 'table > caption '), 'Table caption is in expected structure.');
+    $this->assertEquals($this->captionText, $table_caption->getText(), 'Table caption has expected text');
+  }
+
+}
diff --git a/web/core/modules/ckeditor5/tests/src/Kernel/CKEditor4to5UpgradeCompletenessTest.php b/web/core/modules/ckeditor5/tests/src/Kernel/CKEditor4to5UpgradeCompletenessTest.php
index b350eed51a..753fcb664c 100644
--- a/web/core/modules/ckeditor5/tests/src/Kernel/CKEditor4to5UpgradeCompletenessTest.php
+++ b/web/core/modules/ckeditor5/tests/src/Kernel/CKEditor4to5UpgradeCompletenessTest.php
@@ -19,6 +19,19 @@
  */
 class CKEditor4to5UpgradeCompletenessTest extends KernelTestBase {
 
+  /**
+   * The CKEditor 4 toolbar buttons that no longer require a contrib module.
+   *
+   * @var string[]
+   *
+   * @see \Drupal\ckeditor5\Plugin\CKEditor4To5Upgrade\Contrib
+   */
+  const CONTRIB_BUTTONS_NOW_IN_CORE = [
+    // @see https://www.drupal.org/project/codetag
+    // @see ckeditor5_code's `basicStyles.Code` plugin
+    'Code',
+  ];
+
   /**
    * The "CKEditor 4 plugin" plugin manager.
    *
@@ -89,6 +102,7 @@ protected function setUp(): void {
    */
   public function testButtons(): void {
     $cke4_buttons = array_keys(NestedArray::mergeDeepArray($this->cke4PluginManager->getButtons()));
+    $cke4_buttons = array_merge($cke4_buttons, self::CONTRIB_BUTTONS_NOW_IN_CORE);
 
     foreach ($cke4_buttons as $button) {
       $equivalent = $this->upgradePluginManager->mapCKEditor4ToolbarButtonToCKEditor5ToolbarItem($button, HTMLRestrictions::emptySet());
diff --git a/web/core/modules/ckeditor5/tests/src/Kernel/CKEditor5PluginManagerTest.php b/web/core/modules/ckeditor5/tests/src/Kernel/CKEditor5PluginManagerTest.php
index d9b24457f8..747633aee7 100644
--- a/web/core/modules/ckeditor5/tests/src/Kernel/CKEditor5PluginManagerTest.php
+++ b/web/core/modules/ckeditor5/tests/src/Kernel/CKEditor5PluginManagerTest.php
@@ -982,7 +982,8 @@ public function testProvidedElementsInvalidElementSubset(): void {
 
     // Configure the sneaky superset plugin to have a random tag as the subset.
     $sneaky_plugin_id = 'ckeditor5_plugin_elements_subset_sneakySuperset';
-    $random_tag = "<{$this->randomMachineName()}>";
+    $random_tag_name = strtolower($this->randomMachineName());
+    $random_tag = "<$random_tag_name>";
     $text_editor = Editor::create([
       'format' => 'dummy',
       'editor' => 'ckeditor5',
@@ -1020,6 +1021,8 @@ public function testEnabledPlugins() {
       'ckeditor5_bold',
       'ckeditor5_emphasis',
       'ckeditor5_essentials',
+      'ckeditor5_globalAttributeDir',
+      'ckeditor5_globalAttributeLang',
       'ckeditor5_heading',
       'ckeditor5_paragraph',
       'ckeditor5_pasteFromOffice',
@@ -1030,6 +1033,7 @@ public function testEnabledPlugins() {
       'ckeditor5/drupal.ckeditor5.emphasis',
       'ckeditor5/drupal.ckeditor5.internal',
       'core/ckeditor5.basic',
+      'core/ckeditor5.htmlSupport',
       'core/ckeditor5.internal',
       'core/ckeditor5.pasteFromOffice',
     ];
@@ -1126,7 +1130,6 @@ public function testEnabledPlugins() {
     $this->assertSame(array_values($expected_plugins), $plugin_ids);
     $expected_libraries = array_merge($expected_libraries, [
       'core/ckeditor5.alignment',
-      'core/ckeditor5.htmlSupport',
     ]);
     sort($expected_libraries);
     $this->assertSame($expected_libraries, $this->manager->getEnabledLibraries($editor));
diff --git a/web/core/modules/ckeditor5/tests/src/Kernel/ConfigurablePluginTest.php b/web/core/modules/ckeditor5/tests/src/Kernel/ConfigurablePluginTest.php
index d444f726b5..f35ad49dd1 100644
--- a/web/core/modules/ckeditor5/tests/src/Kernel/ConfigurablePluginTest.php
+++ b/web/core/modules/ckeditor5/tests/src/Kernel/ConfigurablePluginTest.php
@@ -67,6 +67,10 @@ public function testDefaults() {
       'ckeditor5_sourceEditing' => [
         'allowed_tags' => [],
       ],
+      'ckeditor5_list' => [
+        'reversed' => TRUE,
+        'startIndex' => TRUE,
+      ],
       'ckeditor5_imageResize' => [
         'allow_resize' => TRUE,
       ],
diff --git a/web/core/modules/ckeditor5/tests/src/Kernel/SmartDefaultSettingsTest.php b/web/core/modules/ckeditor5/tests/src/Kernel/SmartDefaultSettingsTest.php
index 01579bb992..921a43285b 100644
--- a/web/core/modules/ckeditor5/tests/src/Kernel/SmartDefaultSettingsTest.php
+++ b/web/core/modules/ckeditor5/tests/src/Kernel/SmartDefaultSettingsTest.php
@@ -261,6 +261,30 @@ protected function setUp(): void {
       ],
     ])->save();
 
+    FilterFormat::create([
+      'format' => 'cke4_contrib_plugins_now_in_core',
+      'name' => 'All CKEditor 4 contrib plugins now in core',
+    ])->save();
+    Editor::create([
+      'format' => 'cke4_contrib_plugins_now_in_core',
+      'editor' => 'ckeditor',
+      'settings' => [
+        'toolbar' => [
+          'rows' => [
+            0 => [
+              [
+                'name' => 'Contributed modules providing buttons without settings',
+                'items' => [
+                  // @see https://www.drupal.org/project/codetag
+                  'Code',
+                ],
+              ],
+            ],
+          ],
+        ],
+        'plugins' => [],
+      ],
+    ])->save();
   }
 
   /**
@@ -363,7 +387,7 @@ public function test(string $format_id, array $filters_to_drop, array $expected_
       $unsupported_tags_attributes = $allowed_tags->diff($updated_allowed_tags);
       $superset_tags_attributes = $updated_allowed_tags->diff($allowed_tags);
       $this->assertSame($expected_superset, $superset_tags_attributes->toFilterHtmlAllowedTagsString());
-      $this->assertTrue($unsupported_tags_attributes->isEmpty(), "The following tags/attributes are not allowed in the updated text format:" . $unsupported_tags_attributes->toFilterHtmlAllowedTagsString());
+      $this->assertTrue($unsupported_tags_attributes->allowsNothing(), "The following tags/attributes are not allowed in the updated text format:" . implode(' ', $unsupported_tags_attributes->toCKEditor5ElementsArray()));
 
       // Update the text format like ckeditor5_form_filter_format_form_alter()
       // would.
@@ -380,9 +404,13 @@ public function test(string $format_id, array $filters_to_drop, array $expected_
     // The resulting pair should be valid.
     $this->assertSame([], $this->validatePairToViolationsArray($updated_text_editor, $updated_text_format, TRUE));
 
-    foreach ($messages as $key => $message) {
-      $messages[$key] = (string) $message;
+    // Transforms TranslatableMarkup objects to string.
+    foreach ($messages as $type => $messages_per_type) {
+      foreach ($messages_per_type as $key => $message) {
+        $messages[$type][$key] = (string) $message;
+      }
     }
+
     $this->assertSame($expected_messages, $messages);
   }
 
@@ -432,7 +460,7 @@ public function provider() {
               '<a hreflang>',
               '<blockquote cite>',
               '<ul type>',
-              '<ol start type>',
+              '<ol type>',
               '<h2 id>',
               '<h3 id>',
               '<h4 id>',
@@ -455,13 +483,19 @@ public function provider() {
           'ckeditor5_language' => [
             'language_list' => 'un',
           ],
+          'ckeditor5_list' => [
+            'reversed' => FALSE,
+            'startIndex' => TRUE,
+          ],
         ],
       ],
       'expected_superset' => '<span lang dir>',
       'expected_fundamental_compatibility_violations' => [],
       'expected_messages' => [
-        'The following plugins were enabled to support tags that are allowed by this text format: <em class="placeholder">Code (for tags: &lt;code&gt;) Language (for tags: &lt;span&gt;)</em>.',
-        'The following tags were permitted by this format\'s filter configuration, but no plugin was available that supports them. To ensure the tags remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;cite&gt; &lt;dl&gt; &lt;dt&gt; &lt;dd&gt;.',
+        'status' => [
+          'The following plugins were enabled to support tags that are allowed by this text format: <em class="placeholder">Code (for tags: &lt;code&gt;) Language (for tags: &lt;span&gt;)</em>.',
+          'The following tags were permitted by this format\'s filter configuration, but no plugin was available that supports them. To ensure the tags remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;cite&gt; &lt;dl&gt; &lt;dt&gt; &lt;dd&gt;.',
+        ],
       ],
     ];
 
@@ -469,7 +503,9 @@ public function provider() {
       $basic_html_test_case,
       [
         'expected_messages' => [
-          'This format\'s HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;a hreflang&gt; &lt;blockquote cite&gt; &lt;ul type&gt; &lt;ol start type&gt; &lt;h2 id&gt; &lt;h3 id&gt; &lt;h4 id&gt; &lt;h5 id&gt; &lt;h6 id&gt;.',
+          'status' => [
+            'This format\'s HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;a hreflang&gt; &lt;blockquote cite&gt; &lt;ul type&gt; &lt;ol type&gt; &lt;h2 id&gt; &lt;h3 id&gt; &lt;h4 id&gt; &lt;h5 id&gt; &lt;h6 id&gt;.',
+          ],
         ],
       ]
     );
@@ -490,7 +526,9 @@ public function provider() {
           ],
         ],
         'expected_messages' => [
-          'This format\'s HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;a hreflang&gt; &lt;blockquote cite&gt; &lt;ul type&gt; &lt;ol start type&gt; &lt;h2 id&gt; &lt;h3 id&gt; &lt;h4 id&gt; &lt;h5 id&gt; &lt;h6 id&gt; &lt;img data-caption&gt;.',
+          'status' => [
+            'This format\'s HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;a hreflang&gt; &lt;blockquote cite&gt; &lt;ul type&gt; &lt;ol type&gt; &lt;h2 id&gt; &lt;h3 id&gt; &lt;h4 id&gt; &lt;h5 id&gt; &lt;h6 id&gt; &lt;img data-caption&gt;.',
+          ],
         ],
       ]);
 
@@ -510,7 +548,9 @@ public function provider() {
           ],
         ],
         'expected_messages' => [
-          'This format\'s HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;a hreflang&gt; &lt;blockquote cite&gt; &lt;ul type&gt; &lt;ol start type&gt; &lt;h2 id&gt; &lt;h3 id&gt; &lt;h4 id&gt; &lt;h5 id&gt; &lt;h6 id&gt; &lt;img data-align&gt;.',
+          'status' => [
+            'This format\'s HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;a hreflang&gt; &lt;blockquote cite&gt; &lt;ul type&gt; &lt;ol type&gt; &lt;h2 id&gt; &lt;h3 id&gt; &lt;h4 id&gt; &lt;h5 id&gt; &lt;h6 id&gt; &lt;img data-align&gt;.',
+          ],
         ],
       ]);
 
@@ -535,14 +575,16 @@ public function provider() {
           ],
           'ckeditor5_imageResize' => ['allow_resize' => TRUE],
           'ckeditor5_language' => $basic_html_test_case['expected_ckeditor5_settings']['plugins']['ckeditor5_language'],
+          'ckeditor5_list' => ['reversed' => FALSE, 'startIndex' => TRUE],
         ],
       ],
       'expected_superset' => $basic_html_test_case['expected_superset'],
       'expected_fundamental_compatibility_violations' => $basic_html_test_case['expected_fundamental_compatibility_violations'],
-      'expected_messages' => array_merge(
-        $basic_html_test_case['expected_messages'],
-        ['This format\'s HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;a hreflang&gt; &lt;blockquote cite&gt; &lt;ul type&gt; &lt;ol start type&gt; &lt;h2 id&gt; &lt;h3 id&gt; &lt;h5 id&gt;.'],
-      ),
+      'expected_messages' => array_merge_recursive($basic_html_test_case['expected_messages'], [
+        'status' => [
+          'This format\'s HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;a hreflang&gt; &lt;blockquote cite&gt; &lt;ul type&gt; &lt;ol type&gt; &lt;h2 id&gt; &lt;h3 id&gt; &lt;h5 id&gt;.',
+        ],
+      ]),
     ];
 
     yield "basic_html_with_h1 can be switched to CKEditor 5 without problems, heading configuration computed automatically" => [
@@ -566,14 +608,16 @@ public function provider() {
           ],
           'ckeditor5_imageResize' => ['allow_resize' => TRUE],
           'ckeditor5_language' => $basic_html_test_case['expected_ckeditor5_settings']['plugins']['ckeditor5_language'],
+          'ckeditor5_list' => ['reversed' => FALSE, 'startIndex' => TRUE],
         ],
       ],
       'expected_superset' => $basic_html_test_case['expected_superset'],
       'expected_fundamental_compatibility_violations' => $basic_html_test_case['expected_fundamental_compatibility_violations'],
-      'expected_messages' => array_merge(
-        $basic_html_test_case['expected_messages'],
-        ['This format\'s HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;a hreflang&gt; &lt;blockquote cite&gt; &lt;ul type&gt; &lt;ol start type&gt; &lt;h2 id&gt; &lt;h3 id&gt; &lt;h4 id&gt; &lt;h5 id&gt; &lt;h6 id&gt;.'],
-      ),
+      'expected_messages' => array_merge_recursive($basic_html_test_case['expected_messages'], [
+        'status' => [
+          'This format\'s HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;a hreflang&gt; &lt;blockquote cite&gt; &lt;ul type&gt; &lt;ol type&gt; &lt;h2 id&gt; &lt;h3 id&gt; &lt;h4 id&gt; &lt;h5 id&gt; &lt;h6 id&gt;.',
+        ],
+      ]),
     ];
 
     yield "basic_html_without_headings can be switched to CKEditor 5 without problems, heading configuration computed automatically" => [
@@ -595,14 +639,16 @@ public function provider() {
           ],
           'ckeditor5_imageResize' => ['allow_resize' => TRUE],
           'ckeditor5_language' => $basic_html_test_case['expected_ckeditor5_settings']['plugins']['ckeditor5_language'],
+          'ckeditor5_list' => ['reversed' => FALSE, 'startIndex' => TRUE],
         ],
       ],
       'expected_superset' => $basic_html_test_case['expected_superset'],
       'expected_fundamental_compatibility_violations' => $basic_html_test_case['expected_fundamental_compatibility_violations'],
-      'expected_messages' => array_merge(
-        $basic_html_test_case['expected_messages'],
-        ['This format\'s HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;a hreflang&gt; &lt;blockquote cite&gt; &lt;ul type&gt; &lt;ol start type&gt;.'],
-      ),
+      'expected_messages' => array_merge_recursive($basic_html_test_case['expected_messages'], [
+        'status' => [
+          'This format\'s HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;a hreflang&gt; &lt;blockquote cite&gt; &lt;ul type&gt; &lt;ol type&gt;.',
+        ],
+      ]),
     ];
 
     yield "basic_html_with_pre can be switched to CKEditor 5 without problems, heading configuration computed automatically" => [
@@ -620,9 +666,11 @@ public function provider() {
       'expected_superset' => '<code class="language-*"> ' . $basic_html_test_case['expected_superset'],
       'expected_fundamental_compatibility_violations' => $basic_html_test_case['expected_fundamental_compatibility_violations'],
       'expected_messages' => [
-        'The following plugins were enabled to support tags that are allowed by this text format: <em class="placeholder">Code (for tags: &lt;code&gt;) Language (for tags: &lt;span&gt;) Code Block (for tags: &lt;pre&gt;)</em>.',
-        $basic_html_test_case['expected_messages'][1],
-        'This format\'s HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;a hreflang&gt; &lt;blockquote cite&gt; &lt;ul type&gt; &lt;ol start type&gt; &lt;h2 id&gt; &lt;h3 id&gt; &lt;h4 id&gt; &lt;h5 id&gt; &lt;h6 id&gt;.',
+        'status' => [
+          'The following plugins were enabled to support tags that are allowed by this text format: <em class="placeholder">Code (for tags: &lt;code&gt;) Language (for tags: &lt;span&gt;) Code Block (for tags: &lt;pre&gt;)</em>.',
+          $basic_html_test_case['expected_messages']['status'][1],
+          'This format\'s HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;a hreflang&gt; &lt;blockquote cite&gt; &lt;ul type&gt; &lt;ol type&gt; &lt;h2 id&gt; &lt;h3 id&gt; &lt;h4 id&gt; &lt;h5 id&gt; &lt;h6 id&gt;.',
+        ],
       ],
     ];
 
@@ -658,12 +706,12 @@ public function provider() {
         $basic_html_test_case['expected_superset'],
       ]),
       'expected_fundamental_compatibility_violations' => $basic_html_test_case['expected_fundamental_compatibility_violations'],
-      'expected_messages' => array_merge($basic_html_test_case['expected_messages'],
-
-        [
+      'expected_messages' => array_merge_recursive($basic_html_test_case['expected_messages'], [
+        'status' => [
           'The following plugins were enabled to support specific attributes that are allowed by this text format: <em class="placeholder">Align center ( for tag: &lt;p&gt; to support: class with value(s):  text-align-center), Justify ( for tag: &lt;p&gt; to support: class with value(s):  text-align-justify)</em>.',
-          'This format\'s HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;a hreflang&gt; &lt;blockquote cite&gt; &lt;ul type&gt; &lt;ol start type&gt; &lt;h2 id&gt; &lt;h3 id&gt; &lt;h4 id&gt; &lt;h5 id&gt; &lt;h6 id&gt;.',
-        ]),
+          'This format\'s HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;a hreflang&gt; &lt;blockquote cite&gt; &lt;ul type&gt; &lt;ol type&gt; &lt;h2 id&gt; &lt;h3 id&gt; &lt;h4 id&gt; &lt;h5 id&gt; &lt;h6 id&gt;.',
+        ],
+      ]),
     ];
 
     yield "basic_html with media_embed added => <drupal-media> needed => supported through sourceEditing (3 upgrade messages)" => [
@@ -679,10 +727,13 @@ public function provider() {
         ],
         'plugins' => $basic_html_test_case['expected_ckeditor5_settings']['plugins'],
       ],
-      'expected_superset' => $basic_html_test_case['expected_superset'],
+      // @todo: Remove data-view-mode in https://www.drupal.org/project/drupal/issues/3269657.
+      'expected_superset' => $basic_html_test_case['expected_superset'] . ' <drupal-media data-view-mode>',
       'expected_fundamental_compatibility_violations' => $basic_html_test_case['expected_fundamental_compatibility_violations'],
-      'expected_messages' => array_merge($basic_html_test_case['expected_messages'], [
-        "This format's HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin's <em>Manually editable HTML tags</em>: &lt;a hreflang&gt; &lt;blockquote cite&gt; &lt;ul type&gt; &lt;ol start type&gt; &lt;h2 id&gt; &lt;h3 id&gt; &lt;h4 id&gt; &lt;h5 id&gt; &lt;h6 id&gt;.",
+      'expected_messages' => array_merge_recursive($basic_html_test_case['expected_messages'], [
+        'status' => [
+          "This format's HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin's <em>Manually editable HTML tags</em>: &lt;a hreflang&gt; &lt;blockquote cite&gt; &lt;ul type&gt; &lt;ol type&gt; &lt;h2 id&gt; &lt;h3 id&gt; &lt;h4 id&gt; &lt;h5 id&gt; &lt;h6 id&gt;.",
+        ],
       ]),
     ];
 
@@ -702,10 +753,11 @@ public function provider() {
       ],
       'expected_superset' => $basic_html_test_case['expected_superset'],
       'expected_fundamental_compatibility_violations' => $basic_html_test_case['expected_fundamental_compatibility_violations'],
-      'expected_messages' => array_merge($basic_html_test_case['expected_messages'],
-        [
-          'This format\'s HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;a hreflang&gt; &lt;blockquote cite&gt; &lt;ul type&gt; &lt;ol start type&gt; &lt;h2 id&gt; &lt;h3 id&gt; &lt;h4 id&gt; &lt;h5 id&gt; &lt;h6 id&gt; &lt;img data-*&gt;.',
-        ]),
+      'expected_messages' => array_merge_recursive($basic_html_test_case['expected_messages'], [
+        'status' => [
+          'This format\'s HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;a hreflang&gt; &lt;blockquote cite&gt; &lt;ul type&gt; &lt;ol type&gt; &lt;h2 id&gt; &lt;h3 id&gt; &lt;h4 id&gt; &lt;h5 id&gt; &lt;h6 id&gt; &lt;img data-*&gt;.',
+        ],
+      ]),
     ];
 
     yield "restricted_html can be switched to CKEditor 5 after dropping the two markup-creating filters (3 upgrade messages)" => [
@@ -753,7 +805,7 @@ public function provider() {
               '<a hreflang>',
               '<blockquote cite>',
               '<ul type>',
-              '<ol start type>',
+              '<ol type>',
               '<h2 id>',
               '<h3 id>',
               '<h4 id>',
@@ -761,6 +813,10 @@ public function provider() {
               '<h6 id>',
             ],
           ],
+          'ckeditor5_list' => [
+            'reversed' => FALSE,
+            'startIndex' => TRUE,
+          ],
         ],
       ],
       'expected_superset' => '<br> <p>',
@@ -768,10 +824,14 @@ public function provider() {
         '' => 'CKEditor 5 needs at least the &lt;p&gt; and &lt;br&gt; tags to be allowed to be able to function. They are not allowed by the "<em class="placeholder">Limit allowed HTML tags and correct faulty HTML</em>" (<em class="placeholder">filter_html</em>) filter.',
       ],
       'expected_messages' => [
-        'The following plugins were enabled to support tags that are allowed by this text format: <em class="placeholder">Link (for tags: &lt;a&gt;) Block quote (for tags: &lt;blockquote&gt;) Code (for tags: &lt;code&gt;) List (for tags: &lt;ul&gt;&lt;ol&gt;&lt;li&gt;)</em>.',
-        'The following tags were permitted by this format\'s filter configuration, but no plugin was available that supports them. To ensure the tags remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;cite&gt; &lt;dl&gt; &lt;dt&gt; &lt;dd&gt;.',
-        'This format\'s HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;a hreflang&gt; &lt;blockquote cite&gt; &lt;ul type&gt; &lt;ol start type&gt; &lt;h2 id&gt; &lt;h3 id&gt; &lt;h4 id&gt; &lt;h5 id&gt; &lt;h6 id&gt;.',
+        'status' => [
+          'The following plugins were enabled to support tags that are allowed by this text format: <em class="placeholder">Link (for tags: &lt;a&gt;) Block quote (for tags: &lt;blockquote&gt;) Code (for tags: &lt;code&gt;) List (for tags: &lt;ul&gt;&lt;ol&gt;&lt;li&gt;)</em>.',
+          'The following tags were permitted by this format\'s filter configuration, but no plugin was available that supports them. To ensure the tags remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;cite&gt; &lt;dl&gt; &lt;dt&gt; &lt;dd&gt;.',
+          'This format\'s HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;a hreflang&gt; &lt;blockquote cite&gt; &lt;ul type&gt; &lt;ol type&gt; &lt;h2 id&gt; &lt;h3 id&gt; &lt;h4 id&gt; &lt;h5 id&gt; &lt;h6 id&gt;.',
+          'The following tag(s) were added to <em>Limit allowed HTML tags and correct faulty HTML</em>, because they are needed to provide fundamental CKEditor 5 functionality : &lt;br&gt; &lt;p&gt;.',
+        ],
       ],
+      'expected_post_filter_drop_fundamental_compatibility_violations' => [],
     ];
 
     yield "full_html can be switched to CKEditor 5 (no upgrade messages)" => [
@@ -816,6 +876,10 @@ public function provider() {
           'ckeditor5_imageResize' => [
             'allow_resize' => TRUE,
           ],
+          'ckeditor5_list' => [
+            'reversed' => TRUE,
+            'startIndex' => TRUE,
+          ],
           'ckeditor5_sourceEditing' => [
             'allowed_tags' => [],
           ],
@@ -865,7 +929,7 @@ public function provider() {
               '<a hreflang>',
               '<blockquote cite>',
               '<ul type>',
-              '<ol start type="1 A I">',
+              '<ol type="1 A I">',
               '<h2 id="jump-*">',
               '<h3 id>',
               '<h4 id>',
@@ -873,6 +937,10 @@ public function provider() {
               '<h6 id>',
             ],
           ],
+          'ckeditor5_list' => [
+            'reversed' => FALSE,
+            'startIndex' => TRUE,
+          ],
         ],
       ],
       'expected_superset' => '<br> <p>',
@@ -880,9 +948,12 @@ public function provider() {
         '' => 'CKEditor 5 needs at least the &lt;p&gt; and &lt;br&gt; tags to be allowed to be able to function. They are not allowed by the "<em class="placeholder">Limit allowed HTML tags and correct faulty HTML</em>" (<em class="placeholder">filter_html</em>) filter.',
       ],
       'expected_messages' => [
-        'The following plugins were enabled to support tags that are allowed by this text format: <em class="placeholder">Link (for tags: &lt;a&gt;) Block quote (for tags: &lt;blockquote&gt;) Code (for tags: &lt;code&gt;) List (for tags: &lt;ul&gt;&lt;ol&gt;&lt;li&gt;)</em>.',
-        'The following tags were permitted by this format\'s filter configuration, but no plugin was available that supports them. To ensure the tags remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;cite&gt; &lt;dl&gt; &lt;dt&gt; &lt;dd&gt;.',
-        'This format\'s HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;a hreflang&gt; &lt;blockquote cite&gt; &lt;ul type&gt; &lt;ol start type=&quot;1 A I&quot;&gt; &lt;h2 id=&quot;jump-*&quot;&gt; &lt;h3 id&gt; &lt;h4 id&gt; &lt;h5 id&gt; &lt;h6 id&gt;.',
+        'status' => [
+          'The following plugins were enabled to support tags that are allowed by this text format: <em class="placeholder">Link (for tags: &lt;a&gt;) Block quote (for tags: &lt;blockquote&gt;) Code (for tags: &lt;code&gt;) List (for tags: &lt;ul&gt;&lt;ol&gt;&lt;li&gt;)</em>.',
+          'The following tags were permitted by this format\'s filter configuration, but no plugin was available that supports them. To ensure the tags remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;cite&gt; &lt;dl&gt; &lt;dt&gt; &lt;dd&gt;.',
+          'This format\'s HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;a hreflang&gt; &lt;blockquote cite&gt; &lt;ul type&gt; &lt;ol type=&quot;1 A I&quot;&gt; &lt;h2 id=&quot;jump-*&quot;&gt; &lt;h3 id&gt; &lt;h4 id&gt; &lt;h5 id&gt; &lt;h6 id&gt;.',
+          'The following tag(s) were added to <em>Limit allowed HTML tags and correct faulty HTML</em>, because they are needed to provide fundamental CKEditor 5 functionality : &lt;br&gt; &lt;p&gt;.',
+        ],
       ],
     ];
 
@@ -904,8 +975,10 @@ public function provider() {
       'expected_superset' => '',
       'expected_fundamental_compatibility_violations' => [],
       'expected_messages' => [
-        'The CKEditor 4 button <em class="placeholder">Llama</em> does not have a known upgrade path. If it allowed editing markup, then you can do so now through the Source Editing functionality.',
-        'The <em class="placeholder">llama_contextual_and_button</em> plugin settings do not have a known upgrade path.',
+        'warning' => [
+          'The CKEditor 4 button <em class="placeholder">Llama</em> does not have a known upgrade path. If it allowed editing markup, then you can do so now through the Source Editing functionality.',
+          'The <em class="placeholder">llama_contextual_and_button</em> plugin settings do not have a known upgrade path.',
+        ],
       ],
     ];
 
@@ -924,6 +997,22 @@ public function provider() {
       'expected_fundamental_compatibility_violations' => [],
       'expected_messages' => [],
     ];
+
+    yield "cke4_contrib_plugins_now_in_core can be switched to CKEditor 5 without problems" => [
+      'format_id' => 'cke4_contrib_plugins_now_in_core',
+      'filters_to_drop' => [],
+      'expected_ckeditor5_settings' => [
+        'toolbar' => [
+          'items' => [
+            'code',
+          ],
+        ],
+        'plugins' => [],
+      ],
+      'expected_superset' => '',
+      'expected_fundamental_compatibility_violations' => [],
+      'expected_messages' => [],
+    ];
   }
 
 }
diff --git a/web/core/modules/ckeditor5/tests/src/Kernel/ValidatorsTest.php b/web/core/modules/ckeditor5/tests/src/Kernel/ValidatorsTest.php
index bebdcad961..52a6c460a9 100644
--- a/web/core/modules/ckeditor5/tests/src/Kernel/ValidatorsTest.php
+++ b/web/core/modules/ckeditor5/tests/src/Kernel/ValidatorsTest.php
@@ -13,6 +13,8 @@
 use Drupal\Tests\SchemaCheckTestTrait;
 use Symfony\Component\Yaml\Yaml;
 
+// cspell:ignore onhover
+
 /**
  * @covers \Drupal\ckeditor5\Plugin\Validation\Constraint\ToolbarItemConstraintValidator
  * @covers \Drupal\ckeditor5\Plugin\Validation\Constraint\ToolbarItemDependencyConstraintValidator
@@ -128,7 +130,12 @@ public function provider(): array {
             'foobar',
           ],
         ],
-        'plugins' => [],
+        'plugins' => [
+          'ckeditor5_list' => [
+            'reversed' => FALSE,
+            'startIndex' => FALSE,
+          ],
+        ],
       ],
       'violations' => [
         'settings.toolbar.items.5' => 'The provided toolbar item <em class="placeholder">foobar</em> is not valid.',
@@ -329,6 +336,7 @@ public function provider(): array {
    * @covers \Drupal\ckeditor5\Plugin\Validation\Constraint\ToolbarItemConstraintValidator
    * @covers \Drupal\ckeditor5\Plugin\Validation\Constraint\ToolbarItemDependencyConstraintValidator
    * @covers \Drupal\ckeditor5\Plugin\Validation\Constraint\EnabledConfigurablePluginsConstraintValidator
+   * @covers \Drupal\ckeditor5\Plugin\Validation\Constraint\SourceEditingPreventSelfXssConstraintValidator
    * @dataProvider providerPair
    *
    * @param array $ckeditor5_settings
@@ -593,7 +601,7 @@ public function providerPair(): array {
       'violations' => [
         'filters.filter_html' => sprintf(
           'The current CKEditor 5 build requires the following elements and attributes: <br><code>%s</code><br>The following elements are not supported: <br><code>%s</code>',
-          Html::escape('<br> <p>'),
+          Html::escape('<br> <p> <* dir="ltr rtl" lang>'),
           Html::escape('<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type="1 A I"> <li> <dl> <dt> <dd> <h2 id="jump-*"> <h3 id> <h4 id> <h5 id> <h6 id>'),
         ),
       ],
@@ -851,6 +859,79 @@ public function providerPair(): array {
       ],
       'violations' => [],
     ];
+    $self_xss_source_editing = [
+      // Dangerous attribute with all values allowed.
+      '<p onhover>',
+      '<img on*>',
+      '<blockquote style>',
+
+      // No danger.
+      '<marquee>',
+
+      // Dangerous attribute with some values allowed.
+      '<a onclick="javascript:*">',
+      '<code style="foo: bar;">',
+
+      // Also works on wildcard tags.
+      '<$text-container style>',
+    ];
+    $data['INVALID: SourceEditing plugin configuration: self-XSS detected when using filter_html'] = [
+      'settings' => [
+        'toolbar' => [
+          'items' => [
+            'sourceEditing',
+          ],
+        ],
+        'plugins' => [
+          'ckeditor5_sourceEditing' => [
+            'allowed_tags' => $self_xss_source_editing,
+          ],
+        ],
+      ],
+      'image_upload' => [
+        'status' => FALSE,
+      ],
+      'filters' => [
+        'filter_html' => [
+          'id' => 'filter_html',
+          'provider' => 'filter',
+          'status' => TRUE,
+          'weight' => 0,
+          'settings' => [
+            'allowed_html' => '<p onhover style> <br> <img on*> <blockquote style> <marquee> <a onclick="javascript:*"> <code style="foo: bar;">',
+            'filter_html_help' => TRUE,
+            'filter_html_nofollow' => TRUE,
+          ],
+        ],
+      ],
+      'violations' => [
+        'settings.plugins.ckeditor5_sourceEditing.allowed_tags.0' => 'The following tag in the Source Editing "Manually editable HTML tags" field is a security risk: <em class="placeholder">&lt;p onhover&gt;</em>.',
+        'settings.plugins.ckeditor5_sourceEditing.allowed_tags.1' => 'The following tag in the Source Editing "Manually editable HTML tags" field is a security risk: <em class="placeholder">&lt;img on*&gt;</em>.',
+        'settings.plugins.ckeditor5_sourceEditing.allowed_tags.2' => 'The following tag in the Source Editing "Manually editable HTML tags" field is a security risk: <em class="placeholder">&lt;blockquote style&gt;</em>.',
+        'settings.plugins.ckeditor5_sourceEditing.allowed_tags.4' => 'The following tag in the Source Editing "Manually editable HTML tags" field is a security risk: <em class="placeholder">&lt;a onclick=&quot;javascript:*&quot;&gt;</em>.',
+        'settings.plugins.ckeditor5_sourceEditing.allowed_tags.5' => 'The following tag in the Source Editing "Manually editable HTML tags" field is a security risk: <em class="placeholder">&lt;code style=&quot;foo: bar;&quot;&gt;</em>.',
+        'settings.plugins.ckeditor5_sourceEditing.allowed_tags.6' => 'The following tag in the Source Editing "Manually editable HTML tags" field is a security risk: <em class="placeholder">&lt;$text-container style&gt;</em>.',
+      ],
+    ];
+    $data['VALID: SourceEditing plugin configuration: self-XSS not detected when not using filter_html'] = [
+      'settings' => [
+        'toolbar' => [
+          'items' => [
+            'sourceEditing',
+          ],
+        ],
+        'plugins' => [
+          'ckeditor5_sourceEditing' => [
+            'allowed_tags' => $self_xss_source_editing,
+          ],
+        ],
+      ],
+      'image_upload' => [
+        'status' => FALSE,
+      ],
+      'filters' => [],
+      'violations' => [],
+    ];
 
     return $data;
   }
diff --git a/web/core/modules/ckeditor5/tests/src/Kernel/WildcardHtmlSupportTest.php b/web/core/modules/ckeditor5/tests/src/Kernel/WildcardHtmlSupportTest.php
index 746b42e1f9..85623982b4 100644
--- a/web/core/modules/ckeditor5/tests/src/Kernel/WildcardHtmlSupportTest.php
+++ b/web/core/modules/ckeditor5/tests/src/Kernel/WildcardHtmlSupportTest.php
@@ -85,7 +85,12 @@ function (ConstraintViolation $v) {
       ))
     ));
     $config = $this->manager->getCKEditor5PluginConfig($editor);
-    $this->assertEquals($expected_ghs_configuration, $config['config']['htmlSupport']['allow']);
+    $ghs_configuration = $config['config']['htmlSupport']['allow'];
+    // The first two entries in the GHS configuration are from the
+    // `ckeditor5_globalAttributeDir` and `ckeditor5_globalAttributeLang`
+    // plugins. They are out of scope for this test, so omit them.
+    $ghs_configuration = array_slice($ghs_configuration, 2);
+    $this->assertEquals($expected_ghs_configuration, $ghs_configuration);
   }
 
   public function providerGhsConfiguration(): array {
diff --git a/web/core/modules/ckeditor5/tests/src/Unit/HTMLRestrictionsTest.php b/web/core/modules/ckeditor5/tests/src/Unit/HTMLRestrictionsTest.php
index 1c90df254b..a662f79eed 100644
--- a/web/core/modules/ckeditor5/tests/src/Unit/HTMLRestrictionsTest.php
+++ b/web/core/modules/ckeditor5/tests/src/Unit/HTMLRestrictionsTest.php
@@ -101,16 +101,46 @@ public function providerConstruct(): \Generator {
       ['foo' => ['baz' => TRUE], 'bar' => ['qux' => ['a' => TRUE, 'b' => TRUE]]],
       NULL,
     ];
+
+    // Invalid global attribute `*` HTML tag restrictions.
+    yield 'INVALID: global attribute tag allowing no attributes' => [
+      ['*' => FALSE],
+      'The value for the special "*" global attribute HTML tag must be an array of attribute restrictions.',
+    ];
+    yield 'INVALID: global attribute tag allowing any attribute' => [
+      ['*' => TRUE],
+      'The value for the special "*" global attribute HTML tag must be an array of attribute restrictions.',
+    ];
+
+    // Valid global attribute `*` HTML tag restrictions.
+    yield 'VALID: global attribute tag with attribute allowed' => [
+      ['*' => ['foo' => TRUE]],
+      NULL,
+    ];
+    yield 'VALID: global attribute tag with attribute forbidden' => [
+      ['*' => ['foo' => FALSE]],
+      NULL,
+    ];
+    yield 'VALID: global attribute tag with attribute allowed, specific attribute values allowed' => [
+      ['*' => ['foo' => ['a' => TRUE, 'b' => TRUE]]],
+      NULL,
+    ];
+    // @todo Nothing in Drupal core uses this ability, and no custom/contrib
+    //   module is known to use this. Therefore this is left for the future.
+    yield 'VALID BUT NOT YET SUPPORTED: global attribute tag with attribute allowed, specific attribute values forbidden' => [
+      ['*' => ['foo' => ['a' => FALSE, 'b' => FALSE]]],
+      'The "*" HTML tag has attribute restriction "foo", but it is not an array of key-value pairs, with HTML tag attribute values as keys and TRUE as values.',
+    ];
   }
 
   /**
-   * @covers ::isEmpty()
+   * @covers ::allowsNothing()
    * @covers ::getAllowedElements()
    * @dataProvider providerCounting
    */
   public function testCounting(array $elements, bool $expected_is_empty, int $expected_concrete_only_count, int $expected_concrete_plus_wildcard_count): void {
     $r = new HTMLRestrictions($elements);
-    $this->assertSame($expected_is_empty, $r->isEmpty());
+    $this->assertSame($expected_is_empty, $r->allowsNothing());
     $this->assertCount($expected_concrete_only_count, $r->getAllowedElements());
     $this->assertCount($expected_concrete_only_count, $r->getAllowedElements(TRUE));
     $this->assertCount($expected_concrete_plus_wildcard_count, $r->getAllowedElements(FALSE));
@@ -124,26 +154,47 @@ public function providerCounting(): \Generator {
       0,
     ];
 
-    yield 'one' => [
+    yield 'one concrete tag' => [
       ['a' => TRUE],
       FALSE,
       1,
       1,
     ];
 
-    yield 'two' => [
+    yield 'one wildcard tag: considered to allow nothing because no concrete tag to resolve onto' => [
+      ['$text-container' => ['class' => ['text-align-left' => TRUE]]],
+      FALSE,
+      0,
+      1,
+    ];
+
+    yield 'two concrete tags' => [
       ['a' => TRUE, 'b' => FALSE],
       FALSE,
       2,
       2,
     ];
 
-    yield 'two of which one is a wildcard' => [
-      ['a' => TRUE, '$text-container' => FALSE],
+    yield 'one concrete tag, one wildcard tag' => [
+      ['a' => TRUE, '$text-container' => ['class' => ['text-align-left' => TRUE]]],
       FALSE,
       1,
       2,
     ];
+
+    yield 'only globally allowed attribute: considered to allow something' => [
+      ['*' => ['lang' => TRUE]],
+      FALSE,
+      1,
+      1,
+    ];
+
+    yield 'only globally forbidden attribute: considered to allow nothing' => [
+      ['*' => ['style' => FALSE]],
+      TRUE,
+      1,
+      1,
+    ];
   }
 
   /**
@@ -167,21 +218,22 @@ public function testConvenienceConstructors($input, array $expected, ?array $exp
     $this->assertSame($expected, HTMLRestrictions::fromTextFormat($text_format->reveal())->getAllowedElements());
     $this->assertSame($expected_raw, HTMLRestrictions::fromTextFormat($text_format->reveal())->getAllowedElements(FALSE));
 
+    // @see \Drupal\filter\Plugin\Filter\FilterHtml::getHTMLRestrictions()
+    $filter_html_additional_expectations = [
+      '*' => [
+        'style' => FALSE,
+        'on*' => FALSE,
+        'lang' => TRUE,
+        'dir' => ['ltr' => TRUE, 'rtl' => TRUE],
+      ],
+    ];
     // ::fromFilterPluginInstance()
     $filter_plugin_instance = $this->prophesize(FilterInterface::class);
     $filter_plugin_instance->getHTMLRestrictions()->willReturn([
-      'allowed' => $expected_raw + [
-        // @see \Drupal\filter\Plugin\Filter\FilterHtml::getHTMLRestrictions()
-        '*' => [
-          'style' => FALSE,
-          'on*' => FALSE,
-          'lang' => TRUE,
-          'dir' => ['ltr' => TRUE, 'rtl' => TRUE],
-        ],
-      ],
+      'allowed' => $expected_raw + $filter_html_additional_expectations,
     ]);
-    $this->assertSame($expected, HTMLRestrictions::fromFilterPluginInstance($filter_plugin_instance->reveal())->getAllowedElements());
-    $this->assertSame($expected_raw, HTMLRestrictions::fromFilterPluginInstance($filter_plugin_instance->reveal())->getAllowedElements(FALSE));
+    $this->assertSame($expected + $filter_html_additional_expectations, HTMLRestrictions::fromFilterPluginInstance($filter_plugin_instance->reveal())->getAllowedElements());
+    $this->assertSame($expected_raw + $filter_html_additional_expectations, HTMLRestrictions::fromFilterPluginInstance($filter_plugin_instance->reveal())->getAllowedElements(FALSE));
   }
 
   public function providerConvenienceConstructors(): \Generator {
@@ -1111,6 +1163,96 @@ public function providerOperands(): \Generator {
         'union' => 'b',
       ];
     }
+
+    // Global attribute `*` HTML tag + global attribute `*` HTML tag cases.
+    yield 'global attribute tag + global attribute tag: no overlap in attributes' => [
+      'a' => new HTMLRestrictions(['*' => ['foo' => TRUE, 'bar' => FALSE]]),
+      'b' => new HTMLRestrictions(['*' => ['baz' => FALSE]]),
+      'diff' => 'a',
+      'intersection' => HTMLRestrictions::emptySet(),
+      'union' => new HTMLRestrictions(['*' => ['foo' => TRUE, 'bar' => FALSE, 'baz' => FALSE]]),
+    ];
+    yield 'global attribute tag + global attribute tag: no overlap in attributes — vice versa' => [
+      'a' => new HTMLRestrictions(['*' => ['baz' => FALSE]]),
+      'b' => new HTMLRestrictions(['*' => ['foo' => TRUE, 'bar' => FALSE]]),
+      'diff' => 'a',
+      'intersection' => HTMLRestrictions::emptySet(),
+      'union' => new HTMLRestrictions(['*' => ['foo' => TRUE, 'bar' => FALSE, 'baz' => FALSE]]),
+    ];
+    yield 'global attribute tag + global attribute tag: overlap in attributes, same attribute value restrictions' => [
+      'a' => new HTMLRestrictions(['*' => ['foo' => TRUE, 'bar' => FALSE, 'dir' => ['ltr' => TRUE, 'rtl' => TRUE]]]),
+      'b' => new HTMLRestrictions(['*' => ['bar' => FALSE, 'dir' => ['ltr' => TRUE, 'rtl' => TRUE]]]),
+      'diff' => new HTMLRestrictions(['*' => ['foo' => TRUE]]),
+      'intersection' => 'b',
+      'union' => 'a',
+    ];
+    yield 'global attribute tag + global attribute tag: overlap in attributes, same attribute value restrictions — vice versa' => [
+      'a' => new HTMLRestrictions(['*' => ['bar' => FALSE, 'dir' => ['ltr' => TRUE, 'rtl' => TRUE]]]),
+      'b' => new HTMLRestrictions(['*' => ['foo' => TRUE, 'bar' => FALSE, 'dir' => ['ltr' => TRUE, 'rtl' => TRUE]]]),
+      'diff' => HTMLRestrictions::emptySet(),
+      'intersection' => 'a',
+      'union' => 'b',
+    ];
+    yield 'global attribute tag + global attribute tag: overlap in attributes, different attribute value restrictions' => [
+      'a' => new HTMLRestrictions(['*' => ['foo' => TRUE, 'bar' => FALSE, 'dir' => ['ltr' => TRUE, 'rtl' => TRUE]]]),
+      'b' => new HTMLRestrictions(['*' => ['bar' => TRUE, 'dir' => TRUE, 'foo' => FALSE]]),
+      'diff' => 'a',
+      'intersection' => new HTMLRestrictions(['*' => ['bar' => FALSE, 'dir' => ['ltr' => TRUE, 'rtl' => TRUE], 'foo' => FALSE]]),
+      'union' => new HTMLRestrictions(['*' => ['foo' => TRUE, 'bar' => TRUE, 'dir' => TRUE]]),
+    ];
+    yield 'global attribute tag + global attribute tag: overlap in attributes, different attribute value restrictions — vice versa' => [
+      'a' => new HTMLRestrictions(['*' => ['bar' => TRUE, 'dir' => TRUE, 'foo' => FALSE]]),
+      'b' => new HTMLRestrictions(['*' => ['foo' => TRUE, 'bar' => FALSE, 'dir' => ['ltr' => TRUE, 'rtl' => TRUE]]]),
+      'diff' => 'a',
+      'intersection' => new HTMLRestrictions(['*' => ['bar' => FALSE, 'dir' => ['ltr' => TRUE, 'rtl' => TRUE], 'foo' => FALSE]]),
+      'union' => new HTMLRestrictions(['*' => ['foo' => TRUE, 'bar' => TRUE, 'dir' => TRUE]]),
+    ];
+
+    // Global attribute `*` HTML tag + concrete tag.
+    yield 'global attribute tag + concrete tag' => [
+      'a' => new HTMLRestrictions(['*' => ['foo' => TRUE, 'bar' => FALSE]]),
+      'b' => new HTMLRestrictions(['p' => FALSE]),
+      'diff' => 'a',
+      'intersection' => HTMLRestrictions::emptySet(),
+      'union' => new HTMLRestrictions(['*' => ['foo' => TRUE, 'bar' => FALSE], 'p' => FALSE]),
+    ];
+    yield 'global attribute tag + concrete tag — vice versa' => [
+      'a' => new HTMLRestrictions(['p' => FALSE]),
+      'b' => new HTMLRestrictions(['*' => ['foo' => TRUE, 'bar' => FALSE]]),
+      'diff' => 'a',
+      'intersection' => HTMLRestrictions::emptySet(),
+      'union' => new HTMLRestrictions(['*' => ['foo' => TRUE, 'bar' => FALSE], 'p' => FALSE]),
+    ];
+    yield 'global attribute tag + concrete tag with allowed attribute' => [
+      'a' => new HTMLRestrictions(['*' => ['foo' => TRUE, 'bar' => FALSE]]),
+      'b' => new HTMLRestrictions(['p' => ['baz' => TRUE]]),
+      'diff' => 'a',
+      'intersection' => HTMLRestrictions::emptySet(),
+      'union' => new HTMLRestrictions(['*' => ['foo' => TRUE, 'bar' => FALSE], 'p' => ['baz' => TRUE]]),
+    ];
+    yield 'global attribute tag + concrete tag with allowed attribute — vice versa' => [
+      'a' => new HTMLRestrictions(['p' => ['baz' => TRUE]]),
+      'b' => new HTMLRestrictions(['*' => ['foo' => TRUE, 'bar' => FALSE]]),
+      'diff' => 'a',
+      'intersection' => HTMLRestrictions::emptySet(),
+      'union' => new HTMLRestrictions(['*' => ['foo' => TRUE, 'bar' => FALSE], 'p' => ['baz' => TRUE]]),
+    ];
+
+    // Global attribute `*` HTML tag + wildcard tag.
+    yield 'global attribute tag + wildcard tag' => [
+      'a' => new HTMLRestrictions(['*' => ['foo' => TRUE, 'bar' => FALSE]]),
+      'b' => new HTMLRestrictions(['$text-container' => ['class' => TRUE]]),
+      'diff' => 'a',
+      'intersection' => HTMLRestrictions::emptySet(),
+      'union' => new HTMLRestrictions(['*' => ['foo' => TRUE, 'bar' => FALSE], '$text-container' => ['class' => TRUE]]),
+    ];
+    yield 'global attribute tag + wildcard tag — vice versa' => [
+      'a' => new HTMLRestrictions(['$text-container' => ['class' => TRUE]]),
+      'b' => new HTMLRestrictions(['*' => ['foo' => TRUE, 'bar' => FALSE]]),
+      'diff' => 'a',
+      'intersection' => HTMLRestrictions::emptySet(),
+      'union' => new HTMLRestrictions(['*' => ['foo' => TRUE, 'bar' => FALSE], '$text-container' => ['class' => TRUE]]),
+    ];
   }
 
   /**
@@ -1137,9 +1279,15 @@ public function providerSubsets(): \Generator {
     ];
 
     yield 'with wildcards' => [
-      new HTMLRestrictions(['div' => FALSE, '$text-container' => ['data-llama' => TRUE]]),
+      new HTMLRestrictions(['div' => FALSE, '$text-container' => ['data-llama' => TRUE], '*' => ['on*' => FALSE, 'dir' => ['ltr' => TRUE, 'rtl' => TRUE]]]),
       new HTMLRestrictions(['$text-container' => ['data-llama' => TRUE]]),
-      new HTMLRestrictions(['div' => FALSE]),
+      new HTMLRestrictions(['div' => FALSE, '*' => ['on*' => FALSE, 'dir' => ['ltr' => TRUE, 'rtl' => TRUE]]]),
+    ];
+
+    yield 'wildcards and global attribute tag' => [
+      new HTMLRestrictions(['$text-container' => ['data-llama' => TRUE], '*' => ['on*' => FALSE, 'dir' => ['ltr' => TRUE, 'rtl' => TRUE]]]),
+      new HTMLRestrictions(['$text-container' => ['data-llama' => TRUE]]),
+      new HTMLRestrictions(['*' => ['on*' => FALSE, 'dir' => ['ltr' => TRUE, 'rtl' => TRUE]]]),
     ];
 
     yield 'only wildcards' => [
diff --git a/web/core/modules/ckeditor5/tests/src/Unit/HeadingPluginTest.php b/web/core/modules/ckeditor5/tests/src/Unit/HeadingPluginTest.php
new file mode 100644
index 0000000000..bd20e30d9f
--- /dev/null
+++ b/web/core/modules/ckeditor5/tests/src/Unit/HeadingPluginTest.php
@@ -0,0 +1,120 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Drupal\Tests\ckeditor5\Unit;
+
+use Drupal\ckeditor5\Plugin\CKEditor5Plugin\Heading;
+use Drupal\editor\EditorInterface;
+use Drupal\Tests\UnitTestCase;
+use Symfony\Component\Yaml\Yaml;
+
+/**
+ * @coversDefaultClass \Drupal\ckeditor5\Plugin\CKEditor5Plugin\Language
+ * @group ckeditor5
+ * @internal
+ */
+class HeadingPluginTest extends UnitTestCase {
+
+  /**
+   * Provides a list of configs to test.
+   */
+  public function providerGetDynamicPluginConfig(): array {
+    // Prepare headings matching ckeditor5.ckeditor5.yml to also protect
+    // against unexpected changes to the YAML file given the YAML file is used
+    // to generate the dynamic plugin configuration.
+    $paragraph = [
+      'model' => 'paragraph',
+      'title' => 'Paragraph',
+      'class' => 'ck-heading_paragraph',
+    ];
+    $headings = [];
+    foreach (range(2, 6) as $number) {
+      $headings[$number] = [
+        'model' => 'heading' . $number,
+        'view' => 'h' . $number,
+        'title' => 'Heading ' . $number,
+        'class' => 'ck-heading_heading' . $number,
+      ];
+    }
+
+    return [
+      'All headings' => [
+        Heading::DEFAULT_CONFIGURATION,
+        [
+          'heading' => [
+            'options' => [
+              $paragraph,
+              $headings[2],
+              $headings[3],
+              $headings[4],
+              $headings[5],
+              $headings[6],
+            ],
+          ],
+        ],
+      ],
+      'Only required headings' => [
+        [
+          'enabled_headings' => [],
+        ],
+        [
+          'heading' => [
+            'options' => [
+              $paragraph,
+            ],
+          ],
+        ],
+      ],
+      'Heading 2 only' => [
+        [
+          'enabled_headings' => [
+            'heading2',
+          ],
+        ],
+        [
+          'heading' => [
+            'options' => [
+              $paragraph,
+              $headings[2],
+            ],
+          ],
+        ],
+      ],
+      'Heading 2 and 3 only' => [
+        [
+          'enabled_headings' => [
+            'heading2',
+            'heading3',
+          ],
+        ],
+        [
+          'heading' => [
+            'options' => [
+              $paragraph,
+              $headings[2],
+              $headings[3],
+            ],
+          ],
+        ],
+      ],
+    ];
+  }
+
+  /**
+   * @covers ::getDynamicPluginConfig
+   * @dataProvider providerGetDynamicPluginConfig
+   */
+  public function testGetDynamicPluginConfig(array $configuration, array $expected_dynamic_config): void {
+    // Read the CKEditor 5 plugin's static configuration from YAML.
+    $ckeditor5_plugin_definitions = Yaml::parseFile(__DIR__ . '/../../../ckeditor5.ckeditor5.yml');
+    $static_plugin_config = $ckeditor5_plugin_definitions['ckeditor5_heading']['ckeditor5']['config'];
+
+    $plugin = new Heading($configuration, 'ckeditor5_heading', NULL);
+    $dynamic_plugin_config = $plugin->getDynamicPluginConfig($static_plugin_config, $this->prophesize(EditorInterface::class)
+      ->reveal());
+
+    $this->assertSame($expected_dynamic_config, $dynamic_plugin_config);
+  }
+
+}
diff --git a/web/core/modules/ckeditor5/tests/src/Unit/LanguagePluginTest.php b/web/core/modules/ckeditor5/tests/src/Unit/LanguagePluginTest.php
new file mode 100644
index 0000000000..162e759786
--- /dev/null
+++ b/web/core/modules/ckeditor5/tests/src/Unit/LanguagePluginTest.php
@@ -0,0 +1,110 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Drupal\Tests\ckeditor5\Unit;
+
+use Drupal\ckeditor5\Plugin\CKEditor5Plugin\Language;
+use Drupal\Core\Language\LanguageManager;
+use Drupal\editor\EditorInterface;
+use Drupal\Tests\UnitTestCase;
+
+/**
+ * @coversDefaultClass \Drupal\ckeditor5\Plugin\CKEditor5Plugin\Language
+ * @group ckeditor5
+ * @internal
+ */
+class LanguagePluginTest extends UnitTestCase {
+
+  /**
+   * Provides a list of configs to test.
+   */
+  public function providerGetDynamicPluginConfig(): array {
+    $un_expected_output = [
+      'language' => [
+        'textPartLanguage' => [
+          [
+            'title' => 'Arabic',
+            'languageCode' => 'ar',
+            'textDirection' => 'rtl',
+          ],
+          [
+            'title' => 'Chinese, Simplified',
+            'languageCode' => 'zh-hans',
+          ],
+          [
+            'title' => 'English',
+            'languageCode' => 'en',
+          ],
+          [
+            'title' => 'French',
+            'languageCode' => 'fr',
+          ],
+          [
+            'title' => 'Russian',
+            'languageCode' => 'ru',
+          ],
+          [
+            'title' => 'Spanish',
+            'languageCode' => 'es',
+          ],
+        ],
+      ],
+    ];
+    return [
+      'un' => [
+        ['language_list' => 'un'],
+        $un_expected_output,
+      ],
+      'all' => [
+        ['language_list' => 'all'],
+        [
+          'language' => [
+            'textPartLanguage' => $this->buildExpectedDynamicConfig(LanguageManager::getStandardLanguageList()),
+          ],
+        ],
+      ],
+      'default configuration' => [
+        [],
+        $un_expected_output,
+      ],
+    ];
+  }
+
+  /**
+   * Builds the expected dynamic configuration output given a language list.
+   *
+   * @param array $language_list
+   *   The languages list from the language manager.
+   *
+   * @return array
+   *   The expected output of the dynamic plugin configuration.
+   */
+  protected static function buildExpectedDynamicConfig(array $language_list) {
+    $expected_language_config = [];
+    foreach ($language_list as $language_code => $language_list_item) {
+      $item = [
+        'title' => $language_list_item[0],
+        'languageCode' => $language_code,
+      ];
+      if (isset($language_list_item[2])) {
+        $item['textDirection'] = $language_list_item[2];
+      }
+      $expected_language_config[$item['title']] = $item;
+    }
+    ksort($expected_language_config);
+    return array_values($expected_language_config);
+  }
+
+  /**
+   * @covers ::getDynamicPluginConfig
+   * @dataProvider providerGetDynamicPluginConfig
+   */
+  public function testGetDynamicPluginConfig(array $configuration, array $expected_dynamic_config): void {
+    $plugin = new Language($configuration, 'ckeditor5_language', NULL);
+    $dynamic_config = $plugin->getDynamicPluginConfig([], $this->prophesize(EditorInterface::class)
+      ->reveal());
+    $this->assertSame($expected_dynamic_config, $dynamic_config);
+  }
+
+}
diff --git a/web/core/modules/ckeditor5/tests/src/Unit/ListPluginTest.php b/web/core/modules/ckeditor5/tests/src/Unit/ListPluginTest.php
new file mode 100644
index 0000000000..7825ceaa51
--- /dev/null
+++ b/web/core/modules/ckeditor5/tests/src/Unit/ListPluginTest.php
@@ -0,0 +1,102 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Drupal\Tests\ckeditor5\Unit;
+
+use Drupal\ckeditor5\Plugin\CKEditor5Plugin\ListPlugin;
+use Drupal\editor\Entity\Editor;
+use Drupal\Tests\UnitTestCase;
+use Symfony\Component\Yaml\Yaml;
+
+/**
+ * @coversDefaultClass \Drupal\ckeditor5\Plugin\CKEditor5Plugin\ListPlugin
+ * @group ckeditor5
+ * @internal
+ */
+class ListPluginTest extends UnitTestCase {
+
+  /**
+   * Provides a list of configs to test.
+   */
+  public function providerGetDynamicPluginConfig(): array {
+    return [
+      'startIndex is false' => [
+        [
+          'reversed' => TRUE,
+          'startIndex' => FALSE,
+        ],
+        [
+          'list' => [
+            'properties' => [
+              'reversed' => TRUE,
+              'startIndex' => FALSE,
+              'styles' => FALSE,
+            ],
+          ],
+        ],
+      ],
+      'reversed is false' => [
+        [
+          'reversed' => FALSE,
+          'startIndex' => TRUE,
+        ],
+        [
+          'list' => [
+            'properties' => [
+              'reversed' => FALSE,
+              'startIndex' => TRUE,
+              'styles' => FALSE,
+            ],
+          ],
+        ],
+      ],
+      'both disabled' => [
+        [
+          'reversed' => FALSE,
+          'startIndex' => FALSE,
+        ],
+        [
+          'list' => [
+            'properties' => [
+              'reversed' => FALSE,
+              'startIndex' => FALSE,
+              'styles' => FALSE,
+            ],
+          ],
+        ],
+      ],
+      'both enabled' => [
+        [
+          'reversed' => TRUE,
+          'startIndex' => TRUE,
+        ],
+        [
+          'list' => [
+            'properties' => [
+              'reversed' => TRUE,
+              'startIndex' => TRUE,
+              'styles' => FALSE,
+            ],
+          ],
+        ],
+      ],
+    ];
+  }
+
+  /**
+   * @covers ::getDynamicPluginConfig
+   *
+   * @dataProvider providerGetDynamicPluginConfig
+   */
+  public function testGetDynamicPluginConfig(array $configuration, array $expected_dynamic_config): void {
+    // Read the CKEditor 5 plugin's static configuration from YAML.
+    $ckeditor5_plugin_definitions = Yaml::parseFile(__DIR__ . '/../../../ckeditor5.ckeditor5.yml');
+    $static_plugin_config = $ckeditor5_plugin_definitions['ckeditor5_list']['ckeditor5']['config'];
+    $plugin = new ListPlugin($configuration, 'ckeditor5_list', NULL);
+    $dynamic_plugin_config = $plugin->getDynamicPluginConfig($static_plugin_config, $this->prophesize(Editor::class)
+      ->reveal());
+    $this->assertSame($expected_dynamic_config, $dynamic_plugin_config);
+  }
+
+}
diff --git a/web/core/modules/ckeditor5/tests/src/Unit/SourceEditingPluginTest.php b/web/core/modules/ckeditor5/tests/src/Unit/SourceEditingPluginTest.php
new file mode 100644
index 0000000000..2a025b38fd
--- /dev/null
+++ b/web/core/modules/ckeditor5/tests/src/Unit/SourceEditingPluginTest.php
@@ -0,0 +1,179 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Drupal\Tests\ckeditor5\Unit;
+
+use Drupal\ckeditor5\Plugin\CKEditor5Plugin\SourceEditing;
+use Drupal\editor\EditorInterface;
+use Drupal\Tests\UnitTestCase;
+
+/**
+ * @coversDefaultClass \Drupal\ckeditor5\Plugin\CKEditor5Plugin\SourceEditing
+ * @group ckeditor5
+ * @internal
+ */
+class SourceEditingPluginTest extends UnitTestCase {
+
+  /**
+   * Provides a list of configs to test.
+   */
+  public function providerGetDynamicPluginConfig(): array {
+    return [
+      'Empty array of allowed tags' => [
+        [
+          'allowed_tags' => [],
+        ],
+        [
+          'htmlSupport' => [
+            'allow' => [],
+          ],
+        ],
+      ],
+      'Simple' => [
+        [
+          'allowed_tags' => [
+            '<foo1>',
+            '<foo2 bar>',
+            '<foo3 bar="baz">',
+            '<foo4 bar="baz qux">',
+            '<foo5 bar="baz" qux="foo">',
+          ],
+        ],
+        [
+          'htmlSupport' => [
+            'allow' => [
+              [
+                'name' => 'foo1',
+              ],
+              [
+                'name' => 'foo2',
+                'attributes' => [
+                  [
+                    'key' => 'bar',
+                    'value' => TRUE,
+                  ],
+                ],
+              ],
+              [
+                'name' => 'foo3',
+                'attributes' => [
+                  [
+                    'key' => 'bar',
+                    'value' => [
+                      'regexp' => [
+                        'pattern' => '/^(baz)$/',
+                      ],
+                    ],
+                  ],
+                ],
+              ],
+              [
+                'name' => 'foo4',
+                'attributes' => [
+                  [
+                    'key' => 'bar',
+                    'value' => [
+                      'regexp' => [
+                        'pattern' => '/^(baz|qux)$/',
+                      ],
+                    ],
+                  ],
+                ],
+              ],
+              [
+                'name' => 'foo5',
+                'attributes' => [
+                  [
+                    'key' => 'bar',
+                    'value' => [
+                      'regexp' => [
+                        'pattern' => '/^(baz)$/',
+                      ],
+                    ],
+                  ],
+                  [
+                    'key' => 'qux',
+                    'value' => [
+                      'regexp' => [
+                        'pattern' => '/^(foo)$/',
+                      ],
+                    ],
+                  ],
+                ],
+              ],
+            ],
+          ],
+        ],
+      ],
+      'Prefix wildcards' => [
+        [
+          'allowed_tags' => [
+            '<foo1 bar-*>',
+            '<foo2 bar-*="baz">',
+            '<foo3 bar-*="baz qux-*">',
+            '<foo2 bar="baz-*">',
+            '<foo3 bar="baz qux-*">',
+          ],
+        ],
+        [
+          'htmlSupport' => [
+            'allow' => [
+              [
+                'name' => 'foo1',
+                'attributes' => [
+                  [
+                    'key' => [
+                      'regexp' => [
+                        'pattern' => '/^bar-.*$/',
+                      ],
+                    ],
+                    'value' => TRUE,
+                  ],
+                ],
+              ],
+              [
+                'name' => 'foo2',
+                'attributes' => [
+                  [
+                    'key' => 'bar',
+                    'value' => [
+                      'regexp' => [
+                        'pattern' => '/^(baz-.*)$/',
+                      ],
+                    ],
+                  ],
+                ],
+              ],
+              [
+                'name' => 'foo3',
+                'attributes' => [
+                  [
+                    'key' => 'bar',
+                    'value' => [
+                      'regexp' => [
+                        'pattern' => '/^(baz|qux-.*)$/',
+                      ],
+                    ],
+                  ],
+                ],
+              ],
+            ],
+          ],
+        ],
+      ],
+    ];
+  }
+
+  /**
+   * @covers ::getDynamicPluginConfig
+   * @dataProvider providerGetDynamicPluginConfig
+   */
+  public function testGetDynamicPluginConfig(array $configuration, array $expected_dynamic_config): void {
+    $plugin = new SourceEditing($configuration, 'ckeditor5_sourceEditing', NULL);
+    $dynamic_plugin_config = $plugin->getDynamicPluginConfig([], $this->prophesize(EditorInterface::class)
+      ->reveal());
+    $this->assertSame($expected_dynamic_config, $dynamic_plugin_config);
+  }
+
+}
diff --git a/web/core/modules/contextual/contextual.module b/web/core/modules/contextual/contextual.module
index 2410f1db51..1e1038d355 100644
--- a/web/core/modules/contextual/contextual.module
+++ b/web/core/modules/contextual/contextual.module
@@ -103,7 +103,7 @@ function contextual_help($route_name, RouteMatchInterface $route_match) {
 /**
  * Implements hook_preprocess().
  *
- * @see contextual_pre_render_placeholder()
+ * @see \Drupal\contextual\Element\ContextualLinksPlaceholder
  * @see contextual_page_attachments()
  * @see \Drupal\contextual\ContextualController::render()
  */
diff --git a/web/core/modules/system/src/Controller/EntityAutocompleteController.php b/web/core/modules/system/src/Controller/EntityAutocompleteController.php
index 863c7535d6..80ca7c1b6d 100644
--- a/web/core/modules/system/src/Controller/EntityAutocompleteController.php
+++ b/web/core/modules/system/src/Controller/EntityAutocompleteController.php
@@ -80,28 +80,26 @@ public function handleAutocomplete(Request $request, $target_type, $selection_ha
     // Get the typed string from the URL, if it exists.
     if ($input = $request->query->get('q')) {
       $tag_list = Tags::explode($input);
-      if (!empty($tag_list)) {
-        $typed_string = mb_strtolower(array_pop($tag_list));
+      $typed_string = !empty($tag_list) ? mb_strtolower(array_pop($tag_list)) : '';
 
-        // Selection settings are passed in as a hashed key of a serialized array
-        // stored in the key/value store.
-        $selection_settings = $this->keyValue->get($selection_settings_key, FALSE);
-        if ($selection_settings !== FALSE) {
-          $selection_settings_hash = Crypt::hmacBase64(serialize($selection_settings) . $target_type . $selection_handler, Settings::getHashSalt());
-          if (!hash_equals($selection_settings_hash, $selection_settings_key)) {
-            // Disallow access when the selection settings hash does not match the
-            // passed-in key.
-            throw new AccessDeniedHttpException('Invalid selection settings key.');
-          }
+      // Selection settings are passed in as a hashed key of a serialized array
+      // stored in the key/value store.
+      $selection_settings = $this->keyValue->get($selection_settings_key, FALSE);
+      if ($selection_settings !== FALSE) {
+        $selection_settings_hash = Crypt::hmacBase64(serialize($selection_settings) . $target_type . $selection_handler, Settings::getHashSalt());
+        if (!hash_equals($selection_settings_hash, $selection_settings_key)) {
+          // Disallow access when the selection settings hash does not match the
+          // passed-in key.
+          throw new AccessDeniedHttpException('Invalid selection settings key.');
         }
-        else {
-          // Disallow access when the selection settings key is not found in the
-          // key/value store.
-          throw new AccessDeniedHttpException();
-        }
-
-        $matches = $this->matcher->getMatches($target_type, $selection_handler, $selection_settings, $typed_string);
       }
+      else {
+        // Disallow access when the selection settings key is not found in the
+        // key/value store.
+        throw new AccessDeniedHttpException();
+      }
+
+      $matches = $this->matcher->getMatches($target_type, $selection_handler, $selection_settings, $typed_string);
     }
 
     return new JsonResponse($matches);
diff --git a/web/core/modules/system/tests/modules/cron_queue_test/src/Plugin/QueueWorker/CronQueueTestLeaseTime.php b/web/core/modules/system/tests/modules/cron_queue_test/src/Plugin/QueueWorker/CronQueueTestLeaseTime.php
new file mode 100644
index 0000000000..2027bd69a4
--- /dev/null
+++ b/web/core/modules/system/tests/modules/cron_queue_test/src/Plugin/QueueWorker/CronQueueTestLeaseTime.php
@@ -0,0 +1,27 @@
+<?php
+
+namespace Drupal\cron_queue_test\Plugin\QueueWorker;
+
+use Drupal\Core\Queue\QueueWorkerBase;
+
+/**
+ * @QueueWorker(
+ *   id = "cron_queue_test_lease_time",
+ *   title = @Translation("Lease time test"),
+ *   cron = {"time" = 100}
+ * )
+ */
+class CronQueueTestLeaseTime extends QueueWorkerBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function processItem($data) {
+    $state = \Drupal::state();
+    $count = $state->get('cron_queue_test_lease_time', 0);
+    $count++;
+    $state->set('cron_queue_test_lease_time', $count);
+    throw new \Exception('Leave me queued and leased!');
+  }
+
+}
diff --git a/web/core/modules/system/tests/src/Kernel/System/CronQueueTest.php b/web/core/modules/system/tests/src/Kernel/System/CronQueueTest.php
index 7eef752060..c424552e21 100644
--- a/web/core/modules/system/tests/src/Kernel/System/CronQueueTest.php
+++ b/web/core/modules/system/tests/src/Kernel/System/CronQueueTest.php
@@ -5,6 +5,7 @@
 use Drupal\Core\Database\Database;
 use Drupal\Core\Queue\DatabaseQueue;
 use Drupal\Core\Queue\Memory;
+use Drupal\Core\Queue\QueueWorkerManagerInterface;
 use Drupal\KernelTests\KernelTestBase;
 use Drupal\cron_queue_test\Plugin\QueueWorker\CronQueueTestDatabaseDelayException;
 use Prophecy\Argument;
@@ -120,6 +121,36 @@ public function testDelayException() {
     $this->assertEquals($this->currentTime + $memory_lease_time, reset($memory_queue_internal)->expire);
   }
 
+  /**
+   * Tests that leases are expiring correctly, also within the same request.
+   */
+  public function testLeaseTime() {
+    $queue = $this->container->get('queue')->get('cron_queue_test_lease_time');
+    $queue->createItem([$this->randomMachineName() => $this->randomMachineName()]);
+    // Run initial queue job and ensure lease time variable is initialized.
+    $this->cron->run();
+    static::assertEquals(1, \Drupal::state()->get('cron_queue_test_lease_time'));
+    // Ensure the same queue job is not picked up due to the extended lease.
+    $this->cron->run();
+    static::assertEquals(1, \Drupal::state()->get('cron_queue_test_lease_time'));
+
+    // Set the expiration time to 3 seconds ago, so the lease should
+    // automatically expire.
+    \Drupal::database()
+      ->update(DatabaseQueue::TABLE_NAME)
+      ->fields(['expire' => $this->currentTime - 3])
+      ->execute();
+
+    // The queue job should now be picked back up since it's lease has expired,
+    // and the state variable should be consequently incremented.
+    $this->cron->run();
+    static::assertEquals(2, \Drupal::state()->get('cron_queue_test_lease_time'));
+    // Ensure the same queue job is not picked up again due to the extended
+    // lease.
+    $this->cron->run();
+    static::assertEquals(2, \Drupal::state()->get('cron_queue_test_lease_time'));
+  }
+
   /**
    * Tests that exceptions thrown by workers are handled properly.
    */
@@ -145,7 +176,7 @@ public function testExceptions() {
     // @see \Drupal\Core\Cron::processQueues()
     $this->connection->update('queue')
       ->condition('name', 'cron_queue_test_exception')
-      ->fields(['expire' => REQUEST_TIME - 1])
+      ->fields(['expire' => \Drupal::time()->getRequestTime() - 1])
       ->execute();
     $this->cron->run();
     $this->assertEquals(2, \Drupal::state()->get('cron_queue_test_exception'));
@@ -201,4 +232,33 @@ public function testDatabaseQueueReturnTypes(): void {
     static::assertFalse($queue->releaseItem($item));
   }
 
+  /**
+   * Test safeguard against invalid annotations in QueueWorkerManager.
+   */
+  public function testQueueWorkerManagerSafeguard(): void {
+    $queue_worker_manager = $this->container->get('plugin.manager.queue_worker');
+    $plugin_id = 'test_plugin_id';
+
+    // Ensure if no cron annotation is provided, none is added.
+    $definition = [];
+    $queue_worker_manager->processDefinition($definition, $plugin_id);
+    $this->assertArrayNotHasKey('cron', $definition);
+
+    // Ensure if an empty cron annotation is provided, the default lease time is
+    // added.
+    $definition = ['cron' => []];
+    $queue_worker_manager->processDefinition($definition, $plugin_id);
+    $this->assertArrayHasKey('time', $definition['cron']);
+    $this->assertEquals(QueueWorkerManagerInterface::DEFAULT_QUEUE_CRON_TIME, $definition['cron']['time']);
+
+    // Ensure if an invalid lease time (less-than 1 second) is provided, it is
+    // overridden with the default lease time.
+    $definition = ['cron' => ['time' => 0]];
+    $queue_worker_manager->processDefinition($definition, $plugin_id);
+    $this->assertEquals(QueueWorkerManagerInterface::DEFAULT_QUEUE_CRON_TIME, $definition['cron']['time']);
+    $definition = ['cron' => ['time' => -1]];
+    $queue_worker_manager->processDefinition($definition, $plugin_id);
+    $this->assertEquals(QueueWorkerManagerInterface::DEFAULT_QUEUE_CRON_TIME, $definition['cron']['time']);
+  }
+
 }
diff --git a/web/core/modules/update/tests/fixtures/release-history/drupal.sec.0.2-rc2-b.xml b/web/core/modules/update/tests/fixtures/release-history/drupal.sec.2.0-rc2-b.xml
similarity index 100%
rename from web/core/modules/update/tests/fixtures/release-history/drupal.sec.0.2-rc2-b.xml
rename to web/core/modules/update/tests/fixtures/release-history/drupal.sec.2.0-rc2-b.xml
diff --git a/web/core/modules/update/tests/fixtures/release-history/drupal.sec.0.2-rc2.xml b/web/core/modules/update/tests/fixtures/release-history/drupal.sec.2.0-rc2.xml
similarity index 100%
rename from web/core/modules/update/tests/fixtures/release-history/drupal.sec.0.2-rc2.xml
rename to web/core/modules/update/tests/fixtures/release-history/drupal.sec.2.0-rc2.xml
diff --git a/web/core/modules/update/tests/fixtures/release-history/semver_test.sec.0.2-rc2-b.xml b/web/core/modules/update/tests/fixtures/release-history/semver_test.sec.2.0-rc2-b.xml
similarity index 100%
rename from web/core/modules/update/tests/fixtures/release-history/semver_test.sec.0.2-rc2-b.xml
rename to web/core/modules/update/tests/fixtures/release-history/semver_test.sec.2.0-rc2-b.xml
diff --git a/web/core/modules/update/tests/fixtures/release-history/semver_test.sec.0.2-rc2.xml b/web/core/modules/update/tests/fixtures/release-history/semver_test.sec.2.0-rc2.xml
similarity index 100%
rename from web/core/modules/update/tests/fixtures/release-history/semver_test.sec.0.2-rc2.xml
rename to web/core/modules/update/tests/fixtures/release-history/semver_test.sec.2.0-rc2.xml
diff --git a/web/core/modules/update/tests/src/Functional/UpdateSemverTestBase.php b/web/core/modules/update/tests/src/Functional/UpdateSemverTestBase.php
index f16e4f1349..3198fe65c8 100644
--- a/web/core/modules/update/tests/src/Functional/UpdateSemverTestBase.php
+++ b/web/core/modules/update/tests/src/Functional/UpdateSemverTestBase.php
@@ -200,7 +200,7 @@ public function testSecurityUpdateAvailability($site_patch_version, array $expec
    *   - 8.0.2 Security update
    *   - 8.0.1 Insecure
    *   - 8.0.0 Insecure
-   * - [::$updateProject].sec.0.2-rc2.xml
+   * - [::$updateProject].sec.2.0-rc2.xml
    *   - 8.2.0-rc2 Security update
    *   - 8.2.0-rc1 Insecure
    *   - 8.2.0-beta2 Insecure
@@ -233,7 +233,7 @@ public function testSecurityUpdateAvailability($site_patch_version, array $expec
    *   'supported_branches' that does not contain '8.0.'. It is used to ensure
    *   that the "Security update required!" is displayed even if the currently
    *   installed version is in an unsupported branch.
-   * - [::$updateProject].sec.0.2-rc2-b.xml
+   * - [::$updateProject].sec.2.0-rc2-b.xml
    *   - 8.2.0-rc2
    *   - 8.2.0-rc1
    *   - 8.2.0-beta2
@@ -264,7 +264,7 @@ public function securityUpdateAvailabilityProvider() {
         'site_patch_version' => '0.2',
         'expected_security_release' => ['1.2', '2.0-rc2'],
         'expected_update_message_type' => static::UPDATE_AVAILABLE,
-        'fixture' => 'sec.0.2-rc2',
+        'fixture' => 'sec.2.0-rc2',
       ],
       // Two security releases available for site minor release 0.
       // 0.1 security release marked as insecure.
@@ -289,7 +289,7 @@ public function securityUpdateAvailabilityProvider() {
         'site_patch_version' => '0.0',
         'expected_security_releases' => ['0.2', '1.2', '2.0-rc2'],
         'expected_update_message_type' => static::SECURITY_UPDATE_REQUIRED,
-        'fixture' => 'sec.0.2-rc2',
+        'fixture' => 'sec.2.0-rc2',
       ],
       // No newer security release for site minor 1.
       // Previous minor has security release.
@@ -297,7 +297,7 @@ public function securityUpdateAvailabilityProvider() {
         'site_patch_version' => '1.2',
         'expected_security_releases' => [],
         'expected_update_message_type' => static::UPDATE_NONE,
-        'fixture' => 'sec.0.2-rc2',
+        'fixture' => 'sec.2.0-rc2',
       ],
       // No security release available for site minor release 0.
       // Security release available for next minor.
@@ -335,7 +335,7 @@ public function securityUpdateAvailabilityProvider() {
         'site_patch_version' => '2.0-rc2',
         'expected_security_releases' => [],
         'expected_update_message_type' => static::UPDATE_NONE,
-        'fixture' => 'sec.0.2-rc2',
+        'fixture' => 'sec.2.0-rc2',
       ],
       // Ensure that 8.0.2 security release is not shown because it is earlier
       // version than 1.0.
@@ -343,7 +343,7 @@ public function securityUpdateAvailabilityProvider() {
         'site_patch_version' => '1.0',
         'expected_security_releases' => ['1.2', '2.0-rc2'],
         'expected_update_message_type' => static::SECURITY_UPDATE_REQUIRED,
-        'fixture' => 'sec.0.2-rc2',
+        'fixture' => 'sec.2.0-rc2',
       ],
     ];
     $pre_releases = [
@@ -363,7 +363,7 @@ public function securityUpdateAvailabilityProvider() {
         'site_patch_version' => $pre_release,
         'expected_security_releases' => [],
         'expected_update_message_type' => $pre_release === '2.0-rc2' ? static::UPDATE_NONE : static::UPDATE_AVAILABLE,
-        'fixture' => 'sec.0.2-rc2-b',
+        'fixture' => 'sec.2.0-rc2-b',
       ];
       // If the site is on an alpha/beta/RC of an upcoming minor and there is
       // an RC version with a security update, it should be recommended.
@@ -371,7 +371,7 @@ public function securityUpdateAvailabilityProvider() {
         'site_patch_version' => $pre_release,
         'expected_security_releases' => $pre_release === '2.0-rc2' ? [] : ['2.0-rc2'],
         'expected_update_message_type' => $pre_release === '2.0-rc2' ? static::UPDATE_NONE : static::SECURITY_UPDATE_REQUIRED,
-        'fixture' => 'sec.0.2-rc2',
+        'fixture' => 'sec.2.0-rc2',
       ];
     }
     return $test_cases;
diff --git a/web/core/package.json b/web/core/package.json
index 22f79abc59..465b980196 100644
--- a/web/core/package.json
+++ b/web/core/package.json
@@ -48,7 +48,7 @@
     "@ckeditor/ckeditor5-indent": "~34.0.0",
     "@ckeditor/ckeditor5-language": "~34.0.0",
     "@ckeditor/ckeditor5-link": "~34.0.0",
-    "@ckeditor/ckeditor5-list": "~34.0.0",
+    "@ckeditor/ckeditor5-list": "~34.0.1",
     "@ckeditor/ckeditor5-paste-from-office": "~34.0.0",
     "@ckeditor/ckeditor5-remove-format": "~34.0.0",
     "@ckeditor/ckeditor5-source-editing": "~34.0.0",
@@ -60,18 +60,18 @@
     "@babel/core": "^7.0.0",
     "@babel/preset-env": "^7.0.0",
     "@babel/register": "^7.7.7",
-    "@drupal/once": "^1.0.1",
+    "@drupal/once": "1.0.x",
     "@popperjs/core": "^2.9.2 <2.11.0",
     "babel-plugin-add-header-comment": "^1.0.3",
-    "backbone": "1.4.0",
+    "backbone": "1.4.x",
     "chalk": "^4.1.0",
     "chokidar": "^3.3.1",
     "chromedriver": "^87.0.0",
     "cross-env": "^7.0.2",
     "cspell": "^5.0.0",
-    "css.escape": "^1.5.1",
+    "css.escape": "1.5.x",
     "dotenv-safe": "^8.2.0",
-    "es6-promise": "^4.2.8",
+    "es6-promise": "4.2.x",
     "eslint": "^7.10.0",
     "eslint-config-airbnb": "^18.0.1",
     "eslint-config-prettier": "^6.7.0",
@@ -85,18 +85,18 @@
     "farbtastic": "https://github.com/mattfarina/farbtastic/archive/1.3u.tar.gz",
     "glob": "^7.1.2",
     "joyride": "https://github.com/zurb/joyride/archive/refs/heads/v2.1.tar.gz",
-    "jquery": "^3.6.0",
-    "jquery-form": "^4.3.0",
-    "jquery-once": "^2.2.3",
-    "jquery-ui": "~1.13.1",
-    "js-cookie": "^3.0.1",
+    "jquery": "3.6.x",
+    "jquery-form": "4.3.x",
+    "jquery-once": "2.2.x",
+    "jquery-ui": "1.13.x",
+    "js-cookie": "3.0.x",
     "jsdom": "^18.0.1",
-    "loadjs": "^4.2.0",
+    "loadjs": "4.2.x",
     "minimist": "^1.2.2",
     "mkdirp": "^1.0.4",
     "nightwatch": "^1.6.3",
-    "normalize.css": "^8.0.1",
-    "picturefill": "^3.0.3",
+    "normalize.css": "8.0.x",
+    "picturefill": "3.0.x",
     "postcss": "^7.0.18",
     "postcss-calc": "^7.0.1",
     "postcss-header": "^2.0.0",
@@ -106,16 +106,16 @@
     "postcss-url": "^8.0.0",
     "prettier": "^2.1.2",
     "raw-loader": "^4.0.2",
-    "shepherd.js": "^8.3.1",
-    "sortablejs": "^1.13.0",
+    "shepherd.js": "8.3.x",
+    "sortablejs": "1.14.x",
     "stylelint": "^13.0.0",
     "stylelint-checkstyle-formatter": "^0.1.1",
     "stylelint-config-standard": "^20.0.0",
     "stylelint-order": "^4.0.0",
-    "tabbable": "^5.2.0",
+    "tabbable": "5.2.x",
     "terser": "^5.3.4",
     "terser-webpack-plugin": "^5.2.0",
-    "underscore": "^1.13.1",
+    "underscore": "1.13.x",
     "webpack": "^5.51.1",
     "webpack-cli": "^4.4.0"
   },
diff --git a/web/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/en/node/page.csv b/web/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/en/node/page.csv
index 492feb1ec9..04d49ff0a9 100644
--- a/web/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/en/node/page.csv
+++ b/web/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/en/node/page.csv
@@ -1,2 +1,2 @@
 id,title,body,author,slug
-1,About Umami,"<p>Umami is a fictional food magazine that has been created to demonstrate how you might build a Drupal site using functionality provided 'out of the box'.</p><p>For more information visit <a href='https://www.drupal.org/docs/8/umami-drupal-8-demonstration-installation-profile'>https://www.drupal.org/docs/8/umami-drupal-8-demonstration-installation-profile</a>.</p>",Samuel Adamson,about-umami
+1,About Umami,"<p>Umami is a fictional food magazine that has been created to demonstrate how you might build a Drupal site using functionality provided 'out of the box'.</p><p>For more information visit <a href='https://www.drupal.org/docs/umami-drupal-demonstration-installation-profile'>https://www.drupal.org/docs/umami-drupal-demonstration-installation-profile</a>.</p>",Samuel Adamson,about-umami
diff --git a/web/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/node/page.csv b/web/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/node/page.csv
index fd8690a538..f8759b52fc 100644
--- a/web/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/node/page.csv
+++ b/web/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/node/page.csv
@@ -1,2 +1,2 @@
 id,title,body,author,slug
-1,Acerca de Umami,"<p> Umami es una revista ficticia de alimentos que se ha creado para demostrar cómo se puede construir un sitio de Drupal con la funcionalidad que se proporciona 'fuera de la caja'. </p> <p> Para obtener más información, visite <a href='https://www.drupal.org/docs/8/umami-drupal-8-demonstration-installation-profile'>https://www.drupal.org/docs/8/umami-drupal-8-demonstration-installation-profile</a>.</p> ",Samuel Adamson,acerca-de-umami
+1,Acerca de Umami,"<p> Umami es una revista ficticia de alimentos que se ha creado para demostrar cómo se puede construir un sitio de Drupal con la funcionalidad que se proporciona 'fuera de la caja'. </p> <p> Para obtener más información, visite <a href='https://www.drupal.org/docs/umami-drupal-demonstration-installation-profile'>https://www.drupal.org/docs/umami-drupal-demonstration-installation-profile</a>.</p> ",Samuel Adamson,acerca-de-umami
diff --git a/web/core/profiles/demo_umami/themes/umami/README.txt b/web/core/profiles/demo_umami/themes/umami/README.txt
index f425a363a6..f141fe9060 100644
--- a/web/core/profiles/demo_umami/themes/umami/README.txt
+++ b/web/core/profiles/demo_umami/themes/umami/README.txt
@@ -7,5 +7,5 @@ The Umami theme uses Classy as its base theme.
 ABOUT DRUPAL THEMING
 --------------------
 
-See https://www.drupal.org/docs/8/theming for more information on Drupal
+See https://www.drupal.org/docs/theming-drupal for more information on Drupal
 theming.
diff --git a/web/core/tests/Drupal/KernelTests/Core/Asset/AttachedAssetsTest.php b/web/core/tests/Drupal/KernelTests/Core/Asset/AttachedAssetsTest.php
index 54700f93f0..159ca25053 100644
--- a/web/core/tests/Drupal/KernelTests/Core/Asset/AttachedAssetsTest.php
+++ b/web/core/tests/Drupal/KernelTests/Core/Asset/AttachedAssetsTest.php
@@ -290,7 +290,7 @@ public function testVersionQueryString() {
     $js_render_array = \Drupal::service('asset.js.collection_renderer')->render($js);
 
     $rendered_js = $this->renderer->renderPlain($js_render_array);
-    $this->assertStringContainsString('core/assets/vendor/backbone/backbone-min.js?v=1.4.0', $rendered_js, 'JavaScript version identifiers correctly appended to URLs');
+    $this->assertStringContainsString('core/assets/vendor/backbone/backbone-min.js?v=1.4.1', $rendered_js, 'JavaScript version identifiers correctly appended to URLs');
   }
 
   /**
diff --git a/web/core/tests/Drupal/KernelTests/Core/Database/SchemaTest.php b/web/core/tests/Drupal/KernelTests/Core/Database/SchemaTest.php
index 1788047762..1da84abbe3 100644
--- a/web/core/tests/Drupal/KernelTests/Core/Database/SchemaTest.php
+++ b/web/core/tests/Drupal/KernelTests/Core/Database/SchemaTest.php
@@ -1320,6 +1320,61 @@ public function testFindTables() {
     ];
     $this->assertEquals($expected, $tables, 'Two tables were found.');
 
+    // Check '_' and '%' wildcards.
+    $test_schema->createTable('test3table', $table_specification);
+    $test_schema->createTable('test4', $table_specification);
+    $test_schema->createTable('testTable', $table_specification);
+    $test_schema->createTable('test', $table_specification);
+
+    $tables = $test_schema->findTables('test%');
+    sort($tables);
+    $expected = [
+      'test',
+      'test3table',
+      'test4',
+      'testTable',
+      'test_1_table',
+      'test_2_table',
+    ];
+    $this->assertEquals($expected, $tables, 'All "test" prefixed tables were found.');
+
+    $tables = $test_schema->findTables('test_%');
+    sort($tables);
+    $expected = [
+      'test3table',
+      'test4',
+      'testTable',
+      'test_1_table',
+      'test_2_table',
+    ];
+    $this->assertEquals($expected, $tables, 'All "/^test..*?/" tables were found.');
+
+    $tables = $test_schema->findTables('test%table');
+    sort($tables);
+    $expected = [
+      'test3table',
+      'testTable',
+      'test_1_table',
+      'test_2_table',
+    ];
+    $this->assertEquals($expected, $tables, 'All "/^test.*?table/" tables were found.');
+
+    $tables = $test_schema->findTables('test_%table');
+    sort($tables);
+    $expected = [
+      'test3table',
+      'test_1_table',
+      'test_2_table',
+    ];
+    $this->assertEquals($expected, $tables, 'All "/^test..*?table/" tables were found.');
+
+    $tables = $test_schema->findTables('test_');
+    sort($tables);
+    $expected = [
+      'test4',
+    ];
+    $this->assertEquals($expected, $tables, 'All "/^test./" tables were found.');
+
     // Go back to the initial connection.
     Database::setActiveConnection('default');
   }
diff --git a/web/core/tests/Drupal/KernelTests/Core/Entity/EntityAutocompleteTest.php b/web/core/tests/Drupal/KernelTests/Core/Entity/EntityAutocompleteTest.php
index e6cb4de3ae..c39ede6184 100644
--- a/web/core/tests/Drupal/KernelTests/Core/Entity/EntityAutocompleteTest.php
+++ b/web/core/tests/Drupal/KernelTests/Core/Entity/EntityAutocompleteTest.php
@@ -89,9 +89,23 @@ public function testEntityReferenceAutocompletion() {
     ];
     $this->assertSame($target, reset($data), 'Autocomplete returns an entity label containing a comma and a slash.');
 
+    $input = '';
+    $data = $this->getAutocompleteResult($input);
+    $this->assertSame([], $data, 'Autocomplete of empty string returns empty result');
+
+    $input = ',';
+    $data = $this->getAutocompleteResult($input);
+    $this->assertSame(Html::escape($entity_1->name->value), $data[0]['label'], 'Autocomplete returned the first matching entity');
+    $this->assertSame(Html::escape($entity_2->name->value), $data[1]['label'], 'Autocomplete returned the second matching entity');
+    $this->assertSame(Html::escape($entity_3->name->value), $data[2]['label'], 'Autocomplete returned the third matching entity');
+
+    // Strange input that is mangled by
+    // \Drupal\Component\Utility\Tags::explode().
     $input = '"l!J>&Tw';
     $data = $this->getAutocompleteResult($input);
-    $this->assertSame([], $data, 'Autocomplete of invalid string returns empty result');
+    $this->assertSame(Html::escape($entity_1->name->value), $data[0]['label'], 'Autocomplete returned the first matching entity');
+    $this->assertSame(Html::escape($entity_2->name->value), $data[1]['label'], 'Autocomplete returned the second matching entity');
+    $this->assertSame(Html::escape($entity_3->name->value), $data[2]['label'], 'Autocomplete returned the third matching entity');
   }
 
   /**
diff --git a/web/core/themes/claro/css/components/action-link.css b/web/core/themes/claro/css/components/action-link.css
index 0349f46276..024ff53ad8 100644
--- a/web/core/themes/claro/css/components/action-link.css
+++ b/web/core/themes/claro/css/components/action-link.css
@@ -243,6 +243,16 @@
   }
 }
 
+@media (forced-colors: active) {
+  .action-link--icon-plus::before {
+    background: linktext !important;
+    -webkit-mask-repeat: no-repeat;
+    mask-repeat: no-repeat;
+    -webkit-mask-image: url("data:image/svg+xml,%3csvg height='16' stroke='%23d72222' stroke-width='2' width='16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M3 8h10M8 3v10'/%3e%3c/svg%3e");
+    mask-image: url("data:image/svg+xml,%3csvg height='16' stroke='%23d72222' stroke-width='2' width='16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M3 8h10M8 3v10'/%3e%3c/svg%3e");
+  }
+}
+
 /* Trash */
 
 .action-link--icon-trash::before {
@@ -278,6 +288,16 @@
   }
 }
 
+@media (forced-colors: active) {
+  .action-link--icon-trash::before {
+    background: linktext !important;
+    -webkit-mask-repeat: no-repeat;
+    mask-repeat: no-repeat;
+    -webkit-mask-image: url("data:image/svg+xml,%3csvg height='16' width='16' fill='%23d72222' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M14.9 2.9c-.1-.4-.2-.6-.2-.6-.1-.4-.4-.4-.8-.5l-2.3-.3c-.3 0-.3 0-.4-.3-.4-.7-.5-1.2-.9-1.2H5.7c-.4 0-.5.5-.9 1.3-.1.2-.1.2-.4.3l-2.3.3c-.4 0-.7.1-.8.4 0 0-.1.2-.2.5-.1.6-.2.5.3.5h13.2c.5 0 .4.1.3-.4zm-1.5 1.8H2.6c-.7 0-.8.1-.7.6l.8 10.1c.1.5.1.6.8.6h9.1c.6 0 .7-.1.8-.6l.8-10.1c0-.5-.1-.6-.8-.6z'/%3e%3c/svg%3e");
+    mask-image: url("data:image/svg+xml,%3csvg height='16' width='16' fill='%23d72222' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M14.9 2.9c-.1-.4-.2-.6-.2-.6-.1-.4-.4-.4-.8-.5l-2.3-.3c-.3 0-.3 0-.4-.3-.4-.7-.5-1.2-.9-1.2H5.7c-.4 0-.5.5-.9 1.3-.1.2-.1.2-.4.3l-2.3.3c-.4 0-.7.1-.8.4 0 0-.1.2-.2.5-.1.6-.2.5.3.5h13.2c.5 0 .4.1.3-.4zm-1.5 1.8H2.6c-.7 0-.8.1-.7.6l.8 10.1c.1.5.1.6.8.6h9.1c.6 0 .7-.1.8-.6l.8-10.1c0-.5-.1-.6-.8-.6z'/%3e%3c/svg%3e");
+  }
+}
+
 /* Ex */
 
 .action-link--icon-ex::before {
@@ -313,6 +333,16 @@
   }
 }
 
+@media (forced-colors: active) {
+  .action-link--icon-ex::before {
+    background: linktext !important;
+    -webkit-mask-repeat: no-repeat;
+    mask-repeat: no-repeat;
+    -webkit-mask-image: url("data:image/svg+xml,%3csvg height='16' stroke='%23d72222' stroke-width='1.5' width='16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M13 3L3 13M13 13L3 3'/%3e%3c/svg%3e");
+    mask-image: url("data:image/svg+xml,%3csvg height='16' stroke='%23d72222' stroke-width='1.5' width='16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M13 3L3 13M13 13L3 3'/%3e%3c/svg%3e");
+  }
+}
+
 /* Checkmark */
 
 .action-link--icon-checkmark::before {
@@ -348,6 +378,16 @@
   }
 }
 
+@media (forced-colors: active) {
+  .action-link--icon-checkmark::before {
+    background: linktext !important;
+    -webkit-mask-repeat: no-repeat;
+    mask-repeat: no-repeat;
+    -webkit-mask-image: url("data:image/svg+xml,%3csvg fill='none' height='16' stroke='%23d72222' stroke-width='2' width='16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M2 8.571L5.6 12 14 4'/%3e%3c/svg%3e");
+    mask-image: url("data:image/svg+xml,%3csvg fill='none' height='16' stroke='%23d72222' stroke-width='2' width='16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M2 8.571L5.6 12 14 4'/%3e%3c/svg%3e");
+  }
+}
+
 /* Cog */
 
 .action-link--icon-cog::before {
@@ -383,6 +423,16 @@
   }
 }
 
+@media (forced-colors: active) {
+  .action-link--icon-cog::before {
+    background: linktext !important;
+    -webkit-mask-repeat: no-repeat;
+    mask-repeat: no-repeat;
+    -webkit-mask-image: url("data:image/svg+xml,%3csvg height='16' fill='%23D72222' width='16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M15.426 9.249a7.29 7.29 0 00.076-.998c0-.36-.035-.71-.086-1.056l-2.275-.293a5.039 5.039 0 00-.498-1.201l1.396-1.808a7.3 7.3 0 00-1.459-1.452l-1.807 1.391a5.058 5.058 0 00-1.2-.499l-.292-2.252C8.943 1.033 8.604 1 8.252 1s-.694.033-1.032.082l-.291 2.251a5.076 5.076 0 00-1.2.499L3.924 2.441a7.3 7.3 0 00-1.459 1.452L3.86 5.701a5.076 5.076 0 00-.499 1.2l-2.276.294A7.35 7.35 0 001 8.251c0 .34.031.671.077.998l2.285.295c.115.426.284.826.499 1.2L2.444 12.58c.411.55.896 1.038 1.443 1.452l1.842-1.42c.374.215.774.383 1.2.498l.298 2.311c.337.047.677.08 1.025.08s.688-.033 1.021-.08l.299-2.311a5.056 5.056 0 001.201-.498l1.842 1.42a7.326 7.326 0 001.443-1.452l-1.416-1.837c.215-.373.383-.773.498-1.199zm-7.174 1.514a2.54 2.54 0 110-5.082 2.542 2.542 0 010 5.082z'/%3e%3c/svg%3e");
+    mask-image: url("data:image/svg+xml,%3csvg height='16' fill='%23D72222' width='16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M15.426 9.249a7.29 7.29 0 00.076-.998c0-.36-.035-.71-.086-1.056l-2.275-.293a5.039 5.039 0 00-.498-1.201l1.396-1.808a7.3 7.3 0 00-1.459-1.452l-1.807 1.391a5.058 5.058 0 00-1.2-.499l-.292-2.252C8.943 1.033 8.604 1 8.252 1s-.694.033-1.032.082l-.291 2.251a5.076 5.076 0 00-1.2.499L3.924 2.441a7.3 7.3 0 00-1.459 1.452L3.86 5.701a5.076 5.076 0 00-.499 1.2l-2.276.294A7.35 7.35 0 001 8.251c0 .34.031.671.077.998l2.285.295c.115.426.284.826.499 1.2L2.444 12.58c.411.55.896 1.038 1.443 1.452l1.842-1.42c.374.215.774.383 1.2.498l.298 2.311c.337.047.677.08 1.025.08s.688-.033 1.021-.08l.299-2.311a5.056 5.056 0 001.201-.498l1.842 1.42a7.326 7.326 0 001.443-1.452l-1.416-1.837c.215-.373.383-.773.498-1.199zm-7.174 1.514a2.54 2.54 0 110-5.082 2.542 2.542 0 010 5.082z'/%3e%3c/svg%3e");
+  }
+}
+
 /* Show */
 
 .action-link--icon-show::before {
@@ -418,6 +468,16 @@
   }
 }
 
+@media (forced-colors: active) {
+  .action-link--icon-show::before {
+    background: linktext !important;
+    -webkit-mask-repeat: no-repeat;
+    mask-repeat: no-repeat;
+    -webkit-mask-image: url("data:image/svg+xml,%3csvg fill-rule='evenodd' height='16' width='16' fill='%23D72222' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M8 3C4.364 3 1.258 5.073 0 8c1.258 2.927 4.364 5 8 5s6.742-2.073 8-5c-1.258-2.927-4.364-5-8-5zm0 8a3 3 0 100-6 3 3 0 000 6z'/%3e%3c/svg%3e");
+    mask-image: url("data:image/svg+xml,%3csvg fill-rule='evenodd' height='16' width='16' fill='%23D72222' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M8 3C4.364 3 1.258 5.073 0 8c1.258 2.927 4.364 5 8 5s6.742-2.073 8-5c-1.258-2.927-4.364-5-8-5zm0 8a3 3 0 100-6 3 3 0 000 6z'/%3e%3c/svg%3e");
+  }
+}
+
 /* Hide */
 
 .action-link--icon-hide::before {
@@ -453,6 +513,16 @@
   }
 }
 
+@media (forced-colors: active) {
+  .action-link--icon-hide::before {
+    background: linktext !important;
+    -webkit-mask-repeat: no-repeat;
+    mask-repeat: no-repeat;
+    -webkit-mask-image: url("data:image/svg+xml,%3csvg fill-rule='evenodd' height='16' fill='%23D72222' width='16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M2.01 1.696L2 1.707 14.072 13.78l-.696.697-2.078-2.078A9.232 9.232 0 018 13c-3.636 0-6.742-2.073-8-5 .647-1.505 1.783-2.784 3.228-3.672L1 2.1l.707-.707zM5 8c0-.546.146-1.058.4-1.5l4.1 4.1A3 3 0 015 8zM5.151 3.444l1.76 1.76a3 3 0 013.885 3.885l2.344 2.344C14.41 10.561 15.41 9.375 16 8c-1.258-2.927-4.364-5-8-5-.999 0-1.958.156-2.849.444z'/%3e%3c/svg%3e");
+    mask-image: url("data:image/svg+xml,%3csvg fill-rule='evenodd' height='16' fill='%23D72222' width='16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M2.01 1.696L2 1.707 14.072 13.78l-.696.697-2.078-2.078A9.232 9.232 0 018 13c-3.636 0-6.742-2.073-8-5 .647-1.505 1.783-2.784 3.228-3.672L1 2.1l.707-.707zM5 8c0-.546.146-1.058.4-1.5l4.1 4.1A3 3 0 015 8zM5.151 3.444l1.76 1.76a3 3 0 013.885 3.885l2.344 2.344C14.41 10.561 15.41 9.375 16 8c-1.258-2.927-4.364-5-8-5-.999 0-1.958.156-2.849.444z'/%3e%3c/svg%3e");
+  }
+}
+
 /* Key */
 
 .action-link--icon-key::before {
@@ -488,6 +558,16 @@
   }
 }
 
+@media (forced-colors: active) {
+  .action-link--icon-key::before {
+    background: linktext !important;
+    -webkit-mask-repeat: no-repeat;
+    mask-repeat: no-repeat;
+    -webkit-mask-image: url("data:image/svg+xml,%3csvg width='15' height='14' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M13.727 6.714A4.239 4.239 0 008.9 5.896L3.001 0H0v2h1v1.618L1.378 4H3v1h1v1.622h1.622l.864.862L5.5 8.5l.992.99a4.227 4.227 0 001.223 3.234 4.264 4.264 0 006.012 0 4.253 4.253 0 000-6.01zm-.829 5.182a1.653 1.653 0 11-2.338-2.338 1.653 1.653 0 112.338 2.338z' fill='%23d72222'/%3e%3c/svg%3e");
+    mask-image: url("data:image/svg+xml,%3csvg width='15' height='14' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M13.727 6.714A4.239 4.239 0 008.9 5.896L3.001 0H0v2h1v1.618L1.378 4H3v1h1v1.622h1.622l.864.862L5.5 8.5l.992.99a4.227 4.227 0 001.223 3.234 4.264 4.264 0 006.012 0 4.253 4.253 0 000-6.01zm-.829 5.182a1.653 1.653 0 11-2.338-2.338 1.653 1.653 0 112.338 2.338z' fill='%23d72222'/%3e%3c/svg%3e");
+  }
+}
+
 /* Question Mark */
 
 .action-link--icon-questionmark::before {
@@ -522,3 +602,13 @@
     background-image: url("data:image/svg+xml,%3csvg width='15' height='14' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M7.002 0a7 7 0 100 14 7 7 0 000-14zm3 5c0 .551-.16 1.085-.477 1.586l-.158.22c-.07.093-.189.241-.361.393a9.67 9.67 0 01-.545.447l-.203.189-.141.129-.096.17L8 8.369v.63H5.999v-.704c.026-.396.078-.73.204-.999a2.83 2.83 0 01.439-.688l.225-.21-.01-.015.176-.14.137-.128c.186-.139.357-.277.516-.417l.148-.18A.948.948 0 008.002 5 1.001 1.001 0 006 5H4a3 3 0 016.002 0zm-1.75 6.619a.627.627 0 01-.625.625h-1.25a.627.627 0 01-.626-.625v-1.238c0-.344.281-.625.626-.625h1.25c.344 0 .625.281.625.625v1.238z' fill='windowText'/%3e%3c/svg%3e") !important;
   }
 }
+
+@media (forced-colors: active) {
+  .action-link--icon-questionmark::before {
+    background: linktext !important;
+    -webkit-mask-repeat: no-repeat;
+    mask-repeat: no-repeat;
+    -webkit-mask-image: url("data:image/svg+xml,%3csvg width='15' height='14' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M7.002 0a7 7 0 100 14 7 7 0 000-14zm3 5c0 .551-.16 1.085-.477 1.586l-.158.22c-.07.093-.189.241-.361.393a9.67 9.67 0 01-.545.447l-.203.189-.141.129-.096.17L8 8.369v.63H5.999v-.704c.026-.396.078-.73.204-.999a2.83 2.83 0 01.439-.688l.225-.21-.01-.015.176-.14.137-.128c.186-.139.357-.277.516-.417l.148-.18A.948.948 0 008.002 5 1.001 1.001 0 006 5H4a3 3 0 016.002 0zm-1.75 6.619a.627.627 0 01-.625.625h-1.25a.627.627 0 01-.626-.625v-1.238c0-.344.281-.625.626-.625h1.25c.344 0 .625.281.625.625v1.238z' fill='%23d72222'/%3e%3c/svg%3e");
+    mask-image: url("data:image/svg+xml,%3csvg width='15' height='14' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M7.002 0a7 7 0 100 14 7 7 0 000-14zm3 5c0 .551-.16 1.085-.477 1.586l-.158.22c-.07.093-.189.241-.361.393a9.67 9.67 0 01-.545.447l-.203.189-.141.129-.096.17L8 8.369v.63H5.999v-.704c.026-.396.078-.73.204-.999a2.83 2.83 0 01.439-.688l.225-.21-.01-.015.176-.14.137-.128c.186-.139.357-.277.516-.417l.148-.18A.948.948 0 008.002 5 1.001 1.001 0 006 5H4a3 3 0 016.002 0zm-1.75 6.619a.627.627 0 01-.625.625h-1.25a.627.627 0 01-.626-.625v-1.238c0-.344.281-.625.626-.625h1.25c.344 0 .625.281.625.625v1.238z' fill='%23d72222'/%3e%3c/svg%3e");
+  }
+}
diff --git a/web/core/themes/claro/css/components/action-link.pcss.css b/web/core/themes/claro/css/components/action-link.pcss.css
index 389b88befd..cff3ecbdd7 100644
--- a/web/core/themes/claro/css/components/action-link.pcss.css
+++ b/web/core/themes/claro/css/components/action-link.pcss.css
@@ -211,6 +211,14 @@
   }
 }
 
+@media (forced-colors: active) {
+  .action-link--icon-plus::before {
+    background: linktext !important;
+    mask-repeat: no-repeat;
+    mask-image: url(../../images/icons/d72222/plus.svg);
+  }
+}
+
 /* Trash */
 .action-link--icon-trash::before {
   content: "";
@@ -240,6 +248,14 @@
   }
 }
 
+@media (forced-colors: active) {
+  .action-link--icon-trash::before {
+    background: linktext !important;
+    mask-repeat: no-repeat;
+    mask-image: url(../../images/icons/d72222/trash.svg);
+  }
+}
+
 /* Ex */
 .action-link--icon-ex::before {
   content: "";
@@ -269,6 +285,14 @@
   }
 }
 
+@media (forced-colors: active) {
+  .action-link--icon-ex::before {
+    background: linktext !important;
+    mask-repeat: no-repeat;
+    mask-image: url(../../images/icons/d72222/ex.svg);
+  }
+}
+
 /* Checkmark */
 .action-link--icon-checkmark::before {
   content: "";
@@ -298,6 +322,14 @@
   }
 }
 
+@media (forced-colors: active) {
+  .action-link--icon-checkmark::before {
+    background: linktext !important;
+    mask-repeat: no-repeat;
+    mask-image: url(../../images/icons/d72222/checkmark.svg);
+  }
+}
+
 /* Cog */
 .action-link--icon-cog::before {
   content: "";
@@ -327,6 +359,14 @@
   }
 }
 
+@media (forced-colors: active) {
+  .action-link--icon-cog::before {
+    background: linktext !important;
+    mask-repeat: no-repeat;
+    mask-image: url(../../images/icons/d72222/cog.svg);
+  }
+}
+
 /* Show */
 .action-link--icon-show::before {
   content: "";
@@ -356,6 +396,14 @@
   }
 }
 
+@media (forced-colors: active) {
+  .action-link--icon-show::before {
+    background: linktext !important;
+    mask-repeat: no-repeat;
+    mask-image: url(../../images/icons/d72222/show.svg);
+  }
+}
+
 /* Hide */
 .action-link--icon-hide::before {
   content: "";
@@ -385,6 +433,14 @@
   }
 }
 
+@media (forced-colors: active) {
+  .action-link--icon-hide::before {
+    background: linktext !important;
+    mask-repeat: no-repeat;
+    mask-image: url(../../images/icons/d72222/hide.svg);
+  }
+}
+
 /* Key */
 .action-link--icon-key::before {
   content: "";
@@ -414,6 +470,14 @@
   }
 }
 
+@media (forced-colors: active) {
+  .action-link--icon-key::before {
+    background: linktext !important;
+    mask-repeat: no-repeat;
+    mask-image: url(../../images/icons/d72222/key.svg);
+  }
+}
+
 /* Question Mark */
 .action-link--icon-questionmark::before {
   content: "";
@@ -442,3 +506,11 @@
     background-image: url("../../images/icons/windowText/questionmark.svg") !important;
   }
 }
+
+@media (forced-colors: active) {
+  .action-link--icon-questionmark::before {
+    background: linktext !important;
+    mask-repeat: no-repeat;
+    mask-image: url(../../images/icons/d72222/questionmark.svg);
+  }
+}
diff --git a/web/core/themes/claro/css/components/details.css b/web/core/themes/claro/css/components/details.css
index cc0808bcd0..0bb98c7906 100644
--- a/web/core/themes/claro/css/components/details.css
+++ b/web/core/themes/claro/css/components/details.css
@@ -164,15 +164,14 @@
   }
 }
 
-@media screen and (-ms-high-contrast: active) {
+@media (-ms-high-contrast: active), (forced-colors: active) {
   .claro-details__summary::before {
     width: 0.5625rem;
     height: 0.5625rem;
     transition: transform 0.12s ease-in 0s, margin 0.12s ease-in 0s;
     transform: rotate(135deg); /* LTR */
-    border: 0.125rem solid;
-    border-bottom-color: transparent;
-    border-left-color: transparent;
+    border-top: 0.125rem solid;
+    border-right: 0.125rem solid;
     background: none;
   }
 
@@ -286,7 +285,7 @@
   transform: rotate(-90deg); /* for LTR and RTL */
 }
 
-@media screen and (-ms-high-contrast: active) {
+@media (-ms-high-contrast: active), (forced-colors: active) {
   .claro-details__summary:hover::before,
   .claro-details__summary:hover:focus::before {
     background: none;
@@ -554,7 +553,7 @@
   font-weight: normal;
 }
 
-@media screen and (-ms-high-contrast: active) {
+@media (-ms-high-contrast: active), (forced-colors: active) {
   .collapse-processed[open] > .claro-details__summary--accordion .details-title:not(:focus)::after,
   .collapse-processed[open] > .claro-details__summary--accordion-item .details-title:not(:focus)::after,
   .collapse-processed[open] > .claro-details__summary--vertical-tabs-item .details-title:not(:focus)::after {
diff --git a/web/core/themes/claro/css/components/details.pcss.css b/web/core/themes/claro/css/components/details.pcss.css
index d34e44d907..6e1e5dc733 100644
--- a/web/core/themes/claro/css/components/details.pcss.css
+++ b/web/core/themes/claro/css/components/details.pcss.css
@@ -157,15 +157,14 @@
   }
 }
 
-@media screen and (-ms-high-contrast: active) {
+@media (-ms-high-contrast: active), (forced-colors: active) {
   .claro-details__summary::before {
     width: 0.5625rem;
     height: 0.5625rem;
     transition: transform var(--details-transform-transition-duration) ease-in 0s, margin var(--details-transform-transition-duration) ease-in 0s;
     transform: rotate(135deg); /* LTR */
-    border: 0.125rem solid;
-    border-bottom-color: transparent;
-    border-left-color: transparent;
+    border-top: 0.125rem solid;
+    border-right: 0.125rem solid;
     background: none;
   }
 
@@ -274,7 +273,7 @@
   transform: rotate(-90deg); /* for LTR and RTL */
 }
 
-@media screen and (-ms-high-contrast: active) {
+@media (-ms-high-contrast: active), (forced-colors: active) {
   .claro-details__summary:hover::before,
   .claro-details__summary:hover:focus::before {
     background: none;
@@ -530,7 +529,7 @@
   font-weight: normal;
 }
 
-@media screen and (-ms-high-contrast: active) {
+@media (-ms-high-contrast: active), (forced-colors: active) {
   .collapse-processed[open] > .claro-details__summary--accordion .details-title:not(:focus)::after,
   .collapse-processed[open] > .claro-details__summary--accordion-item .details-title:not(:focus)::after,
   .collapse-processed[open] > .claro-details__summary--vertical-tabs-item .details-title:not(:focus)::after {
diff --git a/web/core/themes/claro/css/components/dialog.css b/web/core/themes/claro/css/components/dialog.css
index caf61e4cd9..70a69cac69 100644
--- a/web/core/themes/claro/css/components/dialog.css
+++ b/web/core/themes/claro/css/components/dialog.css
@@ -168,6 +168,6 @@
   }
 
 #drupal-off-canvas .form-item .form-item__description {
-    color: var(--color-whitesmoke);
+    color: #f3f4f9;
     font-size: 0.75rem;
   }
diff --git a/web/core/themes/claro/css/components/dialog.pcss.css b/web/core/themes/claro/css/components/dialog.pcss.css
index 633e8b77d6..119827ca13 100644
--- a/web/core/themes/claro/css/components/dialog.pcss.css
+++ b/web/core/themes/claro/css/components/dialog.pcss.css
@@ -159,7 +159,7 @@
     margin-left: 0;
   }
   & .form-item .form-item__description {
-    color: var(--color-whitesmoke);
+    color: var(--color-gray-050);
     font-size: 0.75rem;
   }
 }
diff --git a/web/core/themes/claro/css/components/dropbutton.css b/web/core/themes/claro/css/components/dropbutton.css
index 6ff015d418..9e0f8917ca 100644
--- a/web/core/themes/claro/css/components/dropbutton.css
+++ b/web/core/themes/claro/css/components/dropbutton.css
@@ -190,7 +190,7 @@
 
 /* High contrast. */
 
-@media screen and (-ms-high-contrast: active) {
+@media (-ms-high-contrast: active), (forced-colors: active) {
   /* Default. */
   .dropbutton__toggle::before {
     width: 0.5625rem;
diff --git a/web/core/themes/claro/css/components/dropbutton.pcss.css b/web/core/themes/claro/css/components/dropbutton.pcss.css
index 9fd1754ecd..9e3dccde3c 100644
--- a/web/core/themes/claro/css/components/dropbutton.pcss.css
+++ b/web/core/themes/claro/css/components/dropbutton.pcss.css
@@ -184,7 +184,7 @@
 }
 
 /* High contrast. */
-@media screen and (-ms-high-contrast: active) {
+@media (-ms-high-contrast: active), (forced-colors: active) {
   /* Default. */
   .dropbutton__toggle::before {
     width: 0.5625rem;
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 f6edac5e75..4e0138a7ab 100644
--- a/web/core/themes/claro/css/components/form--password-confirm.css
+++ b/web/core/themes/claro/css/components/form--password-confirm.css
@@ -145,6 +145,20 @@
   background-color: #26a769;
 }
 
+@media (forced-colors: active) {
+    .password-strength__bar.is-weak,
+    .password-strength__bar.is-fair,
+    .password-strength__bar.is-good,
+    .password-strength__bar.is-strong {
+      background-color: canvastext;
+    }
+
+  .is-initial .password-strength__bar {
+    border-color: transparent;
+    background-color: transparent;
+  }
+}
+
 .is-initial.is-password-empty .password-strength__title {
   margin: 0;
   line-height: 0;
diff --git a/web/core/themes/claro/css/components/form--password-confirm.pcss.css b/web/core/themes/claro/css/components/form--password-confirm.pcss.css
index bdd5f81612..838457ac98 100644
--- a/web/core/themes/claro/css/components/form--password-confirm.pcss.css
+++ b/web/core/themes/claro/css/components/form--password-confirm.pcss.css
@@ -144,6 +144,22 @@
   background-color: var(--password-strength-bar--strong-bg-color);
 }
 
+@media (forced-colors: active) {
+  .password-strength__bar {
+    &.is-weak,
+    &.is-fair,
+    &.is-good,
+    &.is-strong {
+      background-color: canvastext;
+    }
+  }
+
+  .is-initial .password-strength__bar {
+    border-color: transparent;
+    background-color: transparent;
+  }
+}
+
 .is-initial.is-password-empty .password-strength__title {
   margin: 0;
   line-height: 0;
diff --git a/web/core/themes/claro/css/components/pager.css b/web/core/themes/claro/css/components/pager.css
index 13296c604e..e82d695c56 100644
--- a/web/core/themes/claro/css/components/pager.css
+++ b/web/core/themes/claro/css/components/pager.css
@@ -114,6 +114,36 @@
   background-position: center;
 }
 
+@media (forced-colors: active) {
+  .pager__item--first .pager__link::before {
+    -webkit-mask-image: url("data:image/svg+xml,%3csvg width='16' height='16' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M2 2v12M14 2L8 8l6 6' stroke='%23545560' stroke-width='2'/%3e%3c/svg%3e");
+    mask-image: url("data:image/svg+xml,%3csvg width='16' height='16' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M2 2v12M14 2L8 8l6 6' stroke='%23545560' stroke-width='2'/%3e%3c/svg%3e");
+  }
+  .pager__item--previous .pager__link::before {
+    -webkit-mask-image: url("data:image/svg+xml,%3csvg width='16' height='16' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M11 2L5 8l6 6' stroke='%23545560' stroke-width='2'/%3e%3c/svg%3e");
+    mask-image: url("data:image/svg+xml,%3csvg width='16' height='16' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M11 2L5 8l6 6' stroke='%23545560' stroke-width='2'/%3e%3c/svg%3e");
+  }
+  .pager__item--next .pager__link::after {
+    -webkit-mask-image: url("data:image/svg+xml,%3csvg width='16' height='16' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M5 14l6-6-6-6' stroke='%23545560' stroke-width='2'/%3e%3c/svg%3e");
+    mask-image: url("data:image/svg+xml,%3csvg width='16' height='16' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M5 14l6-6-6-6' stroke='%23545560' stroke-width='2'/%3e%3c/svg%3e");
+  }
+  .pager__item--last .pager__link::after {
+    -webkit-mask-image: url("data:image/svg+xml,%3csvg width='16' height='16' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M14 14V2M2 14l6-6-6-6' stroke='%23545560' stroke-width='2'/%3e%3c/svg%3e");
+    mask-image: url("data:image/svg+xml,%3csvg width='16' height='16' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M14 14V2M2 14l6-6-6-6' stroke='%23545560' stroke-width='2'/%3e%3c/svg%3e");
+  }
+  .pager__item--first .pager__link::before,
+  .pager__item--previous .pager__link::before,
+  .pager__item--next .pager__link::after,
+  .pager__item--last .pager__link::after {
+    background-color: linktext;
+    background-image: none;
+    -webkit-mask-repeat: no-repeat;
+    mask-repeat: no-repeat;
+    -webkit-mask-position: center;
+    mask-position: center;
+  }
+}
+
 [dir="rtl"] .pager__item--first .pager__link::before,
 [dir="rtl"] .pager__item--previous .pager__link::before,
 [dir="rtl"] .pager__item--next .pager__link::after,
@@ -158,7 +188,7 @@
   margin-left: 0.5rem;
 }
 
-@media (-ms-high-contrast: active) {
+@media (-ms-high-contrast: active), (forced-colors: active) {
   .pager__item a:hover {
     text-decoration: underline;
   }
diff --git a/web/core/themes/claro/css/components/pager.pcss.css b/web/core/themes/claro/css/components/pager.pcss.css
index 2e166ccad7..7c932adaf8 100644
--- a/web/core/themes/claro/css/components/pager.pcss.css
+++ b/web/core/themes/claro/css/components/pager.pcss.css
@@ -106,6 +106,31 @@
   background-repeat: no-repeat;
   background-position: center;
 }
+
+@media (forced-colors: active) {
+  .pager__item--first .pager__link::before {
+    mask-image: url(../../images/icons/545560/pager-first.svg);
+  }
+  .pager__item--previous .pager__link::before {
+    mask-image: url(../../images/icons/545560/pager-prev.svg);
+  }
+  .pager__item--next .pager__link::after {
+    mask-image: url(../../images/icons/545560/pager-next.svg);
+  }
+  .pager__item--last .pager__link::after {
+    mask-image: url(../../images/icons/545560/pager-last.svg);
+  }
+  .pager__item--first .pager__link::before,
+  .pager__item--previous .pager__link::before,
+  .pager__item--next .pager__link::after,
+  .pager__item--last .pager__link::after {
+    background-color: linktext;
+    background-image: none;
+    mask-repeat: no-repeat;
+    mask-position: center;
+  }
+}
+
 [dir="rtl"] .pager__item--first .pager__link::before,
 [dir="rtl"] .pager__item--previous .pager__link::before,
 [dir="rtl"] .pager__item--next .pager__link::after,
@@ -146,7 +171,7 @@
   margin-left: 0.5rem;
 }
 
-@media (-ms-high-contrast: active) {
+@media (-ms-high-contrast: active), (forced-colors: active) {
   .pager__item a:hover {
     text-decoration: underline;
   }
diff --git a/web/core/themes/claro/css/components/progress.css b/web/core/themes/claro/css/components/progress.css
index c11401e950..ecc94ebb3f 100644
--- a/web/core/themes/claro/css/components/progress.css
+++ b/web/core/themes/claro/css/components/progress.css
@@ -63,6 +63,12 @@
   }
 }
 
+@media (forced-colors: active) {
+  .progress__bar {
+    background-color: canvastext;
+  }
+}
+
 .progress__label {
   margin-bottom: 0.5rem;
   font-size: 1rem;
diff --git a/web/core/themes/claro/css/components/progress.pcss.css b/web/core/themes/claro/css/components/progress.pcss.css
index 609e5c4389..03ebe57e42 100644
--- a/web/core/themes/claro/css/components/progress.pcss.css
+++ b/web/core/themes/claro/css/components/progress.pcss.css
@@ -65,6 +65,12 @@
   }
 }
 
+@media (forced-colors: active) {
+  .progress__bar {
+    background-color: canvastext;
+  }
+}
+
 .progress__label {
   margin-bottom: var(--progress-bar-spacing-size);
   font-size: var(--progress-bar-label-font-size);
diff --git a/web/core/themes/claro/css/components/skip-link.css b/web/core/themes/claro/css/components/skip-link.css
index dc85eff1e2..a986f30027 100644
--- a/web/core/themes/claro/css/components/skip-link.css
+++ b/web/core/themes/claro/css/components/skip-link.css
@@ -19,10 +19,16 @@
   transform: translateX(-50%);
   color: #fff;
   border-radius: 0 0 0.625rem 0.625rem;
-  background: #444;
+  background: #55565b;
   font-size: 0.94em;
 }
 
+.skip-link:hover,
+.skip-link:active {
+  color: #fff;
+  background-color: #232429;
+}
+
 .skip-link:focus {
   text-decoration: none;
 }
diff --git a/web/core/themes/claro/css/components/skip-link.pcss.css b/web/core/themes/claro/css/components/skip-link.pcss.css
index 086a6605e1..2989f5308e 100644
--- a/web/core/themes/claro/css/components/skip-link.pcss.css
+++ b/web/core/themes/claro/css/components/skip-link.pcss.css
@@ -5,16 +5,23 @@
  * Allows keyboard users to quickly skip to the main content of the page.
  */
 
+@import "../base/variables.pcss.css";
+
 .skip-link {
   z-index: 50;
   left: 50%;
   padding: 1px 10px 2px;
   transform: translateX(-50%);
-  color: #fff;
+  color: var(--color-white);
   border-radius: 0 0 10px 10px;
-  background: #444;
+  background: var(--color-gray-800);
   font-size: 0.94em;
 }
+.skip-link:hover,
+.skip-link:active {
+  color: var(--color-white);
+  background-color: var(--color-gray);
+}
 .skip-link:focus {
   text-decoration: none;
 }
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 b32592676b..e9400b94f7 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
@@ -75,7 +75,20 @@
 [dir="rtl"] .admin-item__link::before {
   right: 0;
   left: auto;
-  background-image: url("data:image/svg+xml,%3csvg width='9' height='14' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M6.986.314l1.422 1.409-5.303 5.353 5.303 5.354-1.422 1.408L.29 7.076z' fill='%23004adc'/%3e%3c/svg%3e");
+  transform: scaleX(-1);
+}
+
+@media (forced-colors: active) {
+  .admin-item__link::before {
+    -webkit-mask-image: url("data:image/svg+xml,%3csvg width='9' height='14' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M1.71.314L.29 1.723l5.302 5.353L.289 12.43l1.422 1.408 6.697-6.762z' fill='%23004adc'/%3e%3c/svg%3e");
+    mask-image: url("data:image/svg+xml,%3csvg width='9' height='14' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M1.71.314L.29 1.723l5.302 5.353L.289 12.43l1.422 1.408 6.697-6.762z' fill='%23004adc'/%3e%3c/svg%3e");
+    -webkit-mask-repeat: no-repeat;
+    mask-repeat: no-repeat;
+    -webkit-mask-position: center center;
+    mask-position: center center;
+    background-color: linktext;
+    background-image: none;
+  }
 }
 
 .admin-item__description {
diff --git a/web/core/themes/claro/css/components/system-admin--admin-list.pcss.css b/web/core/themes/claro/css/components/system-admin--admin-list.pcss.css
index 8b547e1da3..58884073f4 100644
--- a/web/core/themes/claro/css/components/system-admin--admin-list.pcss.css
+++ b/web/core/themes/claro/css/components/system-admin--admin-list.pcss.css
@@ -60,8 +60,19 @@
 [dir="rtl"] .admin-item__link::before {
   right: 0;
   left: auto;
-  background-image: url(../../images/icons/004adc/arrow-left.svg);
+  transform: scaleX(-1);
 }
+
+@media (forced-colors: active) {
+  .admin-item__link::before {
+    mask-image: url(../../images/icons/004adc/arrow-right.svg);
+    mask-repeat: no-repeat;
+    mask-position: center center;
+    background-color: linktext;
+    background-image: none;
+  }
+}
+
 .admin-item__description {
   margin: 0.5em 0 0.25em;
   color: var(--color-gray-800);
diff --git a/web/core/themes/claro/css/components/system-status-counter.css b/web/core/themes/claro/css/components/system-status-counter.css
index a7e701c4ea..a96cef554a 100644
--- a/web/core/themes/claro/css/components/system-status-counter.css
+++ b/web/core/themes/claro/css/components/system-status-counter.css
@@ -52,6 +52,31 @@
   background-image: url("data:image/svg+xml,%3csvg fill='%2373b355' height='16' width='16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='m6.464 13.676c-.194.194-.513.194-.707 0l-4.96-4.955c-.194-.193-.194-.513 0-.707l1.405-1.407c.194-.195.512-.195.707 0l2.849 2.848c.194.193.513.193.707 0l6.629-6.626c.195-.194.514-.194.707 0l1.404 1.404c.193.194.193.513 0 .707z'/%3e%3c/svg%3e");
 }
 
+@media (forced-colors: active) {
+  .system-status-counter__status-icon:before {
+    background-color: canvastext;
+    background-image: none;
+    -webkit-mask-repeat: no-repeat;
+    mask-repeat: no-repeat;
+    -webkit-mask-position: right center;
+    mask-position: right center;
+    -webkit-mask-size: 2.5rem;
+    mask-size: 2.5rem;
+  }
+  .system-status-counter__status-icon--error:before {
+    -webkit-mask-image: url("data:image/svg+xml,%3csvg fill='%23e32700' height='16' width='16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='m8.002 1c-3.868 0-7.002 3.134-7.002 7s3.134 7 7.002 7c3.865 0 7-3.134 7-7s-3.135-7-7-7zm4.025 9.284c.062.063.1.149.1.239 0 .091-.037.177-.1.24l-1.262 1.262c-.064.062-.15.1-.24.1s-.176-.036-.24-.1l-2.283-2.283-2.286 2.283c-.064.062-.15.1-.24.1s-.176-.036-.24-.1l-1.261-1.262c-.063-.062-.1-.148-.1-.24 0-.088.036-.176.1-.238l2.283-2.285-2.283-2.284c-.063-.064-.1-.15-.1-.24s.036-.176.1-.24l1.262-1.262c.063-.063.149-.1.24-.1.089 0 .176.036.24.1l2.285 2.284 2.283-2.284c.064-.063.15-.1.24-.1s.176.036.24.1l1.262 1.262c.062.063.1.149.1.24 0 .089-.037.176-.1.24l-2.283 2.284z'/%3e%3c/svg%3e");
+    mask-image: url("data:image/svg+xml,%3csvg fill='%23e32700' height='16' width='16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='m8.002 1c-3.868 0-7.002 3.134-7.002 7s3.134 7 7.002 7c3.865 0 7-3.134 7-7s-3.135-7-7-7zm4.025 9.284c.062.063.1.149.1.239 0 .091-.037.177-.1.24l-1.262 1.262c-.064.062-.15.1-.24.1s-.176-.036-.24-.1l-2.283-2.283-2.286 2.283c-.064.062-.15.1-.24.1s-.176-.036-.24-.1l-1.261-1.262c-.063-.062-.1-.148-.1-.24 0-.088.036-.176.1-.238l2.283-2.285-2.283-2.284c-.063-.064-.1-.15-.1-.24s.036-.176.1-.24l1.262-1.262c.063-.063.149-.1.24-.1.089 0 .176.036.24.1l2.285 2.284 2.283-2.284c.064-.063.15-.1.24-.1s.176.036.24.1l1.262 1.262c.062.063.1.149.1.24 0 .089-.037.176-.1.24l-2.283 2.284z'/%3e%3c/svg%3e");
+  }
+  .system-status-counter__status-icon--warning:before {
+    -webkit-mask-image: url("data:image/svg+xml,%3csvg fill='%23e29700' height='16' width='16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='m14.66 12.316-5.316-10.633c-.738-1.476-1.946-1.476-2.685 0l-5.317 10.633c-.738 1.477.008 2.684 1.658 2.684h10.002c1.65 0 2.396-1.207 1.658-2.684zm-7.66-8.316h2.002v5h-2.002zm2.252 8.615c0 .344-.281.625-.625.625h-1.25c-.345 0-.626-.281-.626-.625v-1.239c0-.344.281-.625.626-.625h1.25c.344 0 .625.281.625.625z'/%3e%3c/svg%3e");
+    mask-image: url("data:image/svg+xml,%3csvg fill='%23e29700' height='16' width='16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='m14.66 12.316-5.316-10.633c-.738-1.476-1.946-1.476-2.685 0l-5.317 10.633c-.738 1.477.008 2.684 1.658 2.684h10.002c1.65 0 2.396-1.207 1.658-2.684zm-7.66-8.316h2.002v5h-2.002zm2.252 8.615c0 .344-.281.625-.625.625h-1.25c-.345 0-.626-.281-.626-.625v-1.239c0-.344.281-.625.626-.625h1.25c.344 0 .625.281.625.625z'/%3e%3c/svg%3e");
+  }
+  .system-status-counter__status-icon--checked:before {
+    -webkit-mask-image: url("data:image/svg+xml,%3csvg fill='%2373b355' height='16' width='16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='m6.464 13.676c-.194.194-.513.194-.707 0l-4.96-4.955c-.194-.193-.194-.513 0-.707l1.405-1.407c.194-.195.512-.195.707 0l2.849 2.848c.194.193.513.193.707 0l6.629-6.626c.195-.194.514-.194.707 0l1.404 1.404c.193.194.193.513 0 .707z'/%3e%3c/svg%3e");
+    mask-image: url("data:image/svg+xml,%3csvg fill='%2373b355' height='16' width='16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='m6.464 13.676c-.194.194-.513.194-.707 0l-4.96-4.955c-.194-.193-.194-.513 0-.707l1.405-1.407c.194-.195.512-.195.707 0l2.849 2.848c.194.193.513.193.707 0l6.629-6.626c.195-.194.514-.194.707 0l1.404 1.404c.193.194.193.513 0 .707z'/%3e%3c/svg%3e");
+  }
+}
+
 .system-status-counter__status-title {
   display: inline-block;
   padding: 0 1.125rem;
diff --git a/web/core/themes/claro/css/components/system-status-counter.pcss.css b/web/core/themes/claro/css/components/system-status-counter.pcss.css
index b779e72bfe..836649e878 100644
--- a/web/core/themes/claro/css/components/system-status-counter.pcss.css
+++ b/web/core/themes/claro/css/components/system-status-counter.pcss.css
@@ -42,6 +42,25 @@
   background-image: url(../../images/core/73b355/check.svg);
 }
 
+@media (forced-colors: active) {
+  .system-status-counter__status-icon:before {
+    background-color: canvastext;
+    background-image: none;
+    mask-repeat: no-repeat;
+    mask-position: right center;
+    mask-size: 40px;
+  }
+  .system-status-counter__status-icon--error:before {
+    mask-image: url(../../images/core/e32700/error.svg);
+  }
+  .system-status-counter__status-icon--warning:before {
+    mask-image: url(../../images/core/e29700/warning.svg);
+  }
+  .system-status-counter__status-icon--checked:before {
+    mask-image: url(../../images/core/73b355/check.svg);
+  }
+}
+
 .system-status-counter__status-title {
   display: inline-block;
   padding: 0 18px;
diff --git a/web/core/themes/claro/css/components/system-status-report-general-info.css b/web/core/themes/claro/css/components/system-status-report-general-info.css
index e0fe3e962a..fb3152a913 100644
--- a/web/core/themes/claro/css/components/system-status-report-general-info.css
+++ b/web/core/themes/claro/css/components/system-status-report-general-info.css
@@ -67,6 +67,41 @@
   background-image: url("data:image/svg+xml,%3csvg height='44.262' viewBox='0 0 38.847 44.262' width='38.847' xmlns='http://www.w3.org/2000/svg'%3e%3cg fill='%23fff'%3e%3cpath d='m19.745 0c5.74.123 12.272.953 16.9 4.668 1.865 1.498 2.786 3.91 1.597 6.126-1.255 2.34-4.13 3.733-6.518 4.6-5.63 2.04-12.113 2.38-18.014 1.573-2.92-.4-5.91-1.103-8.58-2.374-2.19-1.04-4.74-2.805-5.093-5.403-.532-3.925 4.23-6.23 7.264-7.3 3.986-1.408 8.239-1.853 12.444-1.89 4.302.092-3.334.03 0 0z'/%3e%3cpath d='m6.76 17.5c3.702 1.427 7.65 1.972 11.6 2.09 4.058.12 8.107-.424 12.023-1.523 4.227-1.186 7.227-3.624 8.463-6.145v5.965c-.076.524-.197 1.028-.384 1.5-.718 1.81-2.594 2.974-4.235 3.848-4.293 2.286-9.5 3.04-14.31 3.083-4.803.043-9.902-.542-14.3-2.575-1.906-.88-3.9-2.02-4.988-3.887-.66-1.135-.626-2.21-.626-3.486v-4.38c1.232 2.64 3.94 4.422 6.757 5.51z'/%3e%3cpath d='m6.76 26.436c3.702 1.428 7.65 1.973 11.6 2.09 4.058.12 8.107-.423 12.023-1.522 4.227-1.186 7.227-3.624 8.463-6.145v5.964c-.076.524-.197 1.028-.384 1.5-.718 1.81-2.594 2.974-4.235 3.848-4.293 2.286-9.5 3.04-14.31 3.083-4.803.043-9.902-.542-14.3-2.575-1.906-.88-3.9-2.02-4.988-3.887-.66-1.135-.626-2.21-.626-3.486v-4.38c1.232 2.64 3.94 4.422 6.757 5.51z'/%3e%3cpath d='m6.76 35.374c3.702 1.428 7.65 1.973 11.6 2.09 4.058.12 8.107-.423 12.023-1.522 4.227-1.186 7.227-3.624 8.463-6.145v5.965c-.076.524-.197 1.028-.384 1.5-.718 1.81-2.594 2.974-4.235 3.848-4.293 2.286-9.5 3.04-14.31 3.083-4.803.043-9.902-.542-14.3-2.575-1.906-.88-3.9-2.02-4.988-3.887-.66-1.134-.626-2.21-.626-3.485v-4.38c1.232 2.64 3.94 4.422 6.757 5.51z'/%3e%3c/g%3e%3c/svg%3e");
 }
 
+@media (forced-colors: active) {
+  .system-status-general-info__item-icon:before {
+    background-color: canvastext;
+    background-image: none;
+    -webkit-mask-repeat: no-repeat;
+    mask-repeat: no-repeat;
+    -webkit-mask-position: 50% center;
+    mask-position: 50% center;
+    -webkit-mask-size: 1.5rem;
+    mask-size: 1.5rem;
+  }
+  .system-status-general-info__item-icon--drupal:before {
+    -webkit-mask-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' class='drupal-logo' width='42.2' height='55.5' viewBox='0 0 42.2 55.5'%3e  %3cpath fill='%23ffffff' d='M29.8,11.7C25.9,7.9,22.2,4.2,21.1,0c-1.1,4.2-4.8,7.9-8.7,11.7C6.6,17.5,0,24.1,0,34c-0.3,11.6,9,21.3,20.6,21.5 s21.3-9,21.5-20.6c0-0.3,0-0.6,0-0.9C42.2,24.1,35.6,17.5,29.8,11.7z M10.8,35.9c-0.6,0.8-1.2,1.7-1.6,2.6 c-0.1,0.1-0.2,0.3-0.4,0.3H8.7c-0.5,0-1-0.9-1-0.9l0,0c-0.1-0.2-0.3-0.5-0.4-0.7L7.2,37C5.9,34.2,7,30.3,7,30.3l0,0 c0.5-1.9,1.4-3.8,2.5-5.4c0.7-1,1.5-2,2.3-3l1,1l4.7,4.8c0.2,0.2,0.2,0.5,0,0.7l-4.9,5.5l0,0L10.8,35.9z M21.3,49.7 c-4,0-7.3-3.3-7.2-7.3c0-1.8,0.7-3.5,1.8-4.8c1.5-1.8,3.4-3.6,5.5-6c2.4,2.6,4,4.3,5.5,6.3c0.1,0.1,0.2,0.3,0.3,0.5 c0.8,1.2,1.3,2.6,1.3,4.1C28.6,46.5,25.3,49.7,21.3,49.7C21.3,49.7,21.3,49.7,21.3,49.7z M35,38.1L35,38.1 c-0.1,0.3-0.4,0.5-0.7,0.6h-0.1c-0.3-0.1-0.5-0.3-0.7-0.5l0,0c-1.3-1.9-2.7-3.7-4.3-5.3l-1.9-2l-6.4-6.6c-1.3-1.2-2.6-2.6-3.8-3.9 c0-0.1-0.1-0.1-0.1-0.1c-0.2-0.3-0.4-0.6-0.5-1c0-0.1,0-0.1,0-0.2c-0.2-1.1,0.2-2.2,1-3c1.2-1.2,2.5-2.5,3.7-3.8 c1.3,1.4,2.7,2.8,4.1,4.2l0,0c2.8,2.6,5.3,5.5,7.6,8.6c1.9,2.7,2.9,5.8,2.9,9.1C35.6,35.4,35.4,36.8,35,38.1z'/%3e%3c/svg%3e");
+    mask-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' class='drupal-logo' width='42.2' height='55.5' viewBox='0 0 42.2 55.5'%3e  %3cpath fill='%23ffffff' d='M29.8,11.7C25.9,7.9,22.2,4.2,21.1,0c-1.1,4.2-4.8,7.9-8.7,11.7C6.6,17.5,0,24.1,0,34c-0.3,11.6,9,21.3,20.6,21.5 s21.3-9,21.5-20.6c0-0.3,0-0.6,0-0.9C42.2,24.1,35.6,17.5,29.8,11.7z M10.8,35.9c-0.6,0.8-1.2,1.7-1.6,2.6 c-0.1,0.1-0.2,0.3-0.4,0.3H8.7c-0.5,0-1-0.9-1-0.9l0,0c-0.1-0.2-0.3-0.5-0.4-0.7L7.2,37C5.9,34.2,7,30.3,7,30.3l0,0 c0.5-1.9,1.4-3.8,2.5-5.4c0.7-1,1.5-2,2.3-3l1,1l4.7,4.8c0.2,0.2,0.2,0.5,0,0.7l-4.9,5.5l0,0L10.8,35.9z M21.3,49.7 c-4,0-7.3-3.3-7.2-7.3c0-1.8,0.7-3.5,1.8-4.8c1.5-1.8,3.4-3.6,5.5-6c2.4,2.6,4,4.3,5.5,6.3c0.1,0.1,0.2,0.3,0.3,0.5 c0.8,1.2,1.3,2.6,1.3,4.1C28.6,46.5,25.3,49.7,21.3,49.7C21.3,49.7,21.3,49.7,21.3,49.7z M35,38.1L35,38.1 c-0.1,0.3-0.4,0.5-0.7,0.6h-0.1c-0.3-0.1-0.5-0.3-0.7-0.5l0,0c-1.3-1.9-2.7-3.7-4.3-5.3l-1.9-2l-6.4-6.6c-1.3-1.2-2.6-2.6-3.8-3.9 c0-0.1-0.1-0.1-0.1-0.1c-0.2-0.3-0.4-0.6-0.5-1c0-0.1,0-0.1,0-0.2c-0.2-1.1,0.2-2.2,1-3c1.2-1.2,2.5-2.5,3.7-3.8 c1.3,1.4,2.7,2.8,4.1,4.2l0,0c2.8,2.6,5.3,5.5,7.6,8.6c1.9,2.7,2.9,5.8,2.9,9.1C35.6,35.4,35.4,36.8,35,38.1z'/%3e%3c/svg%3e");
+  }
+  .system-status-general-info__item-icon--clock:before {
+    -webkit-mask-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='42.659' height='46.603' viewBox='0 0 42.659 46.603'%3e  %3cpath fill='%23FFF' d='M24.15 3.73V0h-8v3.915C6.15 6.13 0 14.717 0 24.978 0 36.92 9.975 46.603 21.918 46.603s20.74-9.682 20.74-21.625c0-10.576-8.507-19.372-18.507-21.25zm7 24.072H17.83V11h5v12.802h8.32v4z'/%3e%3c/svg%3e");
+    mask-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='42.659' height='46.603' viewBox='0 0 42.659 46.603'%3e  %3cpath fill='%23FFF' d='M24.15 3.73V0h-8v3.915C6.15 6.13 0 14.717 0 24.978 0 36.92 9.975 46.603 21.918 46.603s20.74-9.682 20.74-21.625c0-10.576-8.507-19.372-18.507-21.25zm7 24.072H17.83V11h5v12.802h8.32v4z'/%3e%3c/svg%3e");
+  }
+  .system-status-general-info__item-icon--server:before {
+    -webkit-mask-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='44' height='34' viewBox='0 0 44 34'%3e  %3cpath fill='%23FFF' d='M29.98 7.018H7.17c-1.208 0-2.197-.748-2.197-2s.99-2 2.2-2h22.81c1.208 0 2.198.748 2.198 2s-.99 2-2.2 2zM37.61 7c-1.104 0-2-.895-2-2s.896-2 2-2 2 .895 2 2-.894 2-2 2zM0 0v10h44V0H0zM29.98 31.018H7.17c-1.208 0-2.197-.748-2.197-2s.99-2 2.2-2h22.81c1.208 0 2.198.748 2.198 2s-.99 2-2.2 2zM37.61 31c-1.104 0-2-.895-2-2s.896-2 2-2 2 .895 2 2-.894 2-2 2zM0 24v10h44V24H0zM29.98 19.018H7.17c-1.208 0-2.197-.748-2.197-2s.99-2 2.2-2h22.81c1.208 0 2.198.748 2.198 2s-.99 2-2.2 2zM37.61 19c-1.104 0-2-.895-2-2s.896-2 2-2 2 .895 2 2-.894 2-2 2zM0 12v10h44V12H0z'/%3e%3c/svg%3e");
+    mask-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='44' height='34' viewBox='0 0 44 34'%3e  %3cpath fill='%23FFF' d='M29.98 7.018H7.17c-1.208 0-2.197-.748-2.197-2s.99-2 2.2-2h22.81c1.208 0 2.198.748 2.198 2s-.99 2-2.2 2zM37.61 7c-1.104 0-2-.895-2-2s.896-2 2-2 2 .895 2 2-.894 2-2 2zM0 0v10h44V0H0zM29.98 31.018H7.17c-1.208 0-2.197-.748-2.197-2s.99-2 2.2-2h22.81c1.208 0 2.198.748 2.198 2s-.99 2-2.2 2zM37.61 31c-1.104 0-2-.895-2-2s.896-2 2-2 2 .895 2 2-.894 2-2 2zM0 24v10h44V24H0zM29.98 19.018H7.17c-1.208 0-2.197-.748-2.197-2s.99-2 2.2-2h22.81c1.208 0 2.198.748 2.198 2s-.99 2-2.2 2zM37.61 19c-1.104 0-2-.895-2-2s.896-2 2-2 2 .895 2 2-.894 2-2 2zM0 12v10h44V12H0z'/%3e%3c/svg%3e");
+  }
+  .system-status-general-info__item-icon--php:before {
+    -webkit-mask-image: url("data:image/svg+xml,%3csvg height='33.447' viewBox='0 0 66 33.447' width='66' xmlns='http://www.w3.org/2000/svg'%3e%3cg fill='%23fff'%3e%3cpath d='m49.5 12.255h-2.7l-1.473 7h2.4c1.59 0 2.773-.342 3.55-.94.78-.6 1.304-1.62 1.577-3.023.26-1.345.142-1.975-.357-2.528-.5-.553-1.498-.51-2.996-.51z'/%3e%3cpath d='m33 0c-18.225 0-33 7.488-33 16.724s14.775 16.724 33 16.724 33-7.488 33-16.724-14.775-16.724-33-16.724zm-9.328 19.982c-.787.737-1.662 1.376-2.625 1.69-.963.313-2.19.583-3.68.583h-3.377l-.935 5h-3.945l3.52-18h7.584c2.28 0 3.946.34 4.992 1.537s1.36 2.74.944 4.885c-.172.884-.462 1.628-.87 2.36-.413.732-.947 1.338-1.608 1.945zm11.51 2.273 1.558-8.124c.177-.91.112-1.29-.196-1.62s-.962-.255-1.963-.255h-3.126l-2.016 10h-3.913l3.52-18h3.912l-.935 5h3.486c2.193 0 3.706.124 4.54.888.832.765 1.08 1.99.748 3.703l-1.637 8.41h-3.977zm21.747-6.708c-.173.884-.463 1.692-.872 2.424-.41.734-.944 1.404-1.605 2.01-.787.738-1.662 1.377-2.625 1.69-.963.314-2.19.584-3.68.584h-3.377l-.934 5h-3.944l3.518-18h7.584c2.282 0 3.946.34 4.992 1.537 1.046 1.2 1.36 2.61.943 4.757z'/%3e%3cpath d='m18.72 12.255h-2.703l-1.473 7h2.4c1.59 0 2.773-.342 3.552-.94.778-.6 1.303-1.62 1.576-3.023.26-1.345.142-1.975-.357-2.528-.5-.553-1.497-.51-2.996-.51z'/%3e%3c/g%3e%3c/svg%3e");
+    mask-image: url("data:image/svg+xml,%3csvg height='33.447' viewBox='0 0 66 33.447' width='66' xmlns='http://www.w3.org/2000/svg'%3e%3cg fill='%23fff'%3e%3cpath d='m49.5 12.255h-2.7l-1.473 7h2.4c1.59 0 2.773-.342 3.55-.94.78-.6 1.304-1.62 1.577-3.023.26-1.345.142-1.975-.357-2.528-.5-.553-1.498-.51-2.996-.51z'/%3e%3cpath d='m33 0c-18.225 0-33 7.488-33 16.724s14.775 16.724 33 16.724 33-7.488 33-16.724-14.775-16.724-33-16.724zm-9.328 19.982c-.787.737-1.662 1.376-2.625 1.69-.963.313-2.19.583-3.68.583h-3.377l-.935 5h-3.945l3.52-18h7.584c2.28 0 3.946.34 4.992 1.537s1.36 2.74.944 4.885c-.172.884-.462 1.628-.87 2.36-.413.732-.947 1.338-1.608 1.945zm11.51 2.273 1.558-8.124c.177-.91.112-1.29-.196-1.62s-.962-.255-1.963-.255h-3.126l-2.016 10h-3.913l3.52-18h3.912l-.935 5h3.486c2.193 0 3.706.124 4.54.888.832.765 1.08 1.99.748 3.703l-1.637 8.41h-3.977zm21.747-6.708c-.173.884-.463 1.692-.872 2.424-.41.734-.944 1.404-1.605 2.01-.787.738-1.662 1.377-2.625 1.69-.963.314-2.19.584-3.68.584h-3.377l-.934 5h-3.944l3.518-18h7.584c2.282 0 3.946.34 4.992 1.537 1.046 1.2 1.36 2.61.943 4.757z'/%3e%3cpath d='m18.72 12.255h-2.703l-1.473 7h2.4c1.59 0 2.773-.342 3.552-.94.778-.6 1.303-1.62 1.576-3.023.26-1.345.142-1.975-.357-2.528-.5-.553-1.497-.51-2.996-.51z'/%3e%3c/g%3e%3c/svg%3e");
+    -webkit-mask-size: 2rem;
+    mask-size: 2rem;
+  }
+  .system-status-general-info__item-icon--database:before {
+    -webkit-mask-image: url("data:image/svg+xml,%3csvg height='44.262' viewBox='0 0 38.847 44.262' width='38.847' xmlns='http://www.w3.org/2000/svg'%3e%3cg fill='%23fff'%3e%3cpath d='m19.745 0c5.74.123 12.272.953 16.9 4.668 1.865 1.498 2.786 3.91 1.597 6.126-1.255 2.34-4.13 3.733-6.518 4.6-5.63 2.04-12.113 2.38-18.014 1.573-2.92-.4-5.91-1.103-8.58-2.374-2.19-1.04-4.74-2.805-5.093-5.403-.532-3.925 4.23-6.23 7.264-7.3 3.986-1.408 8.239-1.853 12.444-1.89 4.302.092-3.334.03 0 0z'/%3e%3cpath d='m6.76 17.5c3.702 1.427 7.65 1.972 11.6 2.09 4.058.12 8.107-.424 12.023-1.523 4.227-1.186 7.227-3.624 8.463-6.145v5.965c-.076.524-.197 1.028-.384 1.5-.718 1.81-2.594 2.974-4.235 3.848-4.293 2.286-9.5 3.04-14.31 3.083-4.803.043-9.902-.542-14.3-2.575-1.906-.88-3.9-2.02-4.988-3.887-.66-1.135-.626-2.21-.626-3.486v-4.38c1.232 2.64 3.94 4.422 6.757 5.51z'/%3e%3cpath d='m6.76 26.436c3.702 1.428 7.65 1.973 11.6 2.09 4.058.12 8.107-.423 12.023-1.522 4.227-1.186 7.227-3.624 8.463-6.145v5.964c-.076.524-.197 1.028-.384 1.5-.718 1.81-2.594 2.974-4.235 3.848-4.293 2.286-9.5 3.04-14.31 3.083-4.803.043-9.902-.542-14.3-2.575-1.906-.88-3.9-2.02-4.988-3.887-.66-1.135-.626-2.21-.626-3.486v-4.38c1.232 2.64 3.94 4.422 6.757 5.51z'/%3e%3cpath d='m6.76 35.374c3.702 1.428 7.65 1.973 11.6 2.09 4.058.12 8.107-.423 12.023-1.522 4.227-1.186 7.227-3.624 8.463-6.145v5.965c-.076.524-.197 1.028-.384 1.5-.718 1.81-2.594 2.974-4.235 3.848-4.293 2.286-9.5 3.04-14.31 3.083-4.803.043-9.902-.542-14.3-2.575-1.906-.88-3.9-2.02-4.988-3.887-.66-1.134-.626-2.21-.626-3.485v-4.38c1.232 2.64 3.94 4.422 6.757 5.51z'/%3e%3c/g%3e%3c/svg%3e");
+    mask-image: url("data:image/svg+xml,%3csvg height='44.262' viewBox='0 0 38.847 44.262' width='38.847' xmlns='http://www.w3.org/2000/svg'%3e%3cg fill='%23fff'%3e%3cpath d='m19.745 0c5.74.123 12.272.953 16.9 4.668 1.865 1.498 2.786 3.91 1.597 6.126-1.255 2.34-4.13 3.733-6.518 4.6-5.63 2.04-12.113 2.38-18.014 1.573-2.92-.4-5.91-1.103-8.58-2.374-2.19-1.04-4.74-2.805-5.093-5.403-.532-3.925 4.23-6.23 7.264-7.3 3.986-1.408 8.239-1.853 12.444-1.89 4.302.092-3.334.03 0 0z'/%3e%3cpath d='m6.76 17.5c3.702 1.427 7.65 1.972 11.6 2.09 4.058.12 8.107-.424 12.023-1.523 4.227-1.186 7.227-3.624 8.463-6.145v5.965c-.076.524-.197 1.028-.384 1.5-.718 1.81-2.594 2.974-4.235 3.848-4.293 2.286-9.5 3.04-14.31 3.083-4.803.043-9.902-.542-14.3-2.575-1.906-.88-3.9-2.02-4.988-3.887-.66-1.135-.626-2.21-.626-3.486v-4.38c1.232 2.64 3.94 4.422 6.757 5.51z'/%3e%3cpath d='m6.76 26.436c3.702 1.428 7.65 1.973 11.6 2.09 4.058.12 8.107-.423 12.023-1.522 4.227-1.186 7.227-3.624 8.463-6.145v5.964c-.076.524-.197 1.028-.384 1.5-.718 1.81-2.594 2.974-4.235 3.848-4.293 2.286-9.5 3.04-14.31 3.083-4.803.043-9.902-.542-14.3-2.575-1.906-.88-3.9-2.02-4.988-3.887-.66-1.135-.626-2.21-.626-3.486v-4.38c1.232 2.64 3.94 4.422 6.757 5.51z'/%3e%3cpath d='m6.76 35.374c3.702 1.428 7.65 1.973 11.6 2.09 4.058.12 8.107-.423 12.023-1.522 4.227-1.186 7.227-3.624 8.463-6.145v5.965c-.076.524-.197 1.028-.384 1.5-.718 1.81-2.594 2.974-4.235 3.848-4.293 2.286-9.5 3.04-14.31 3.083-4.803.043-9.902-.542-14.3-2.575-1.906-.88-3.9-2.02-4.988-3.887-.66-1.134-.626-2.21-.626-3.485v-4.38c1.232 2.64 3.94 4.422 6.757 5.51z'/%3e%3c/g%3e%3c/svg%3e");
+  }
+}
+
 .system-status-general-info__item-details {
   position: relative;
   display: inline-block;
diff --git a/web/core/themes/claro/css/components/system-status-report-general-info.pcss.css b/web/core/themes/claro/css/components/system-status-report-general-info.pcss.css
index 55c55358b2..6bddf7ef03 100644
--- a/web/core/themes/claro/css/components/system-status-report-general-info.pcss.css
+++ b/web/core/themes/claro/css/components/system-status-report-general-info.pcss.css
@@ -56,6 +56,32 @@
   background-image: url(../../images/core/ffffff/database.svg);
 }
 
+@media (forced-colors: active) {
+  .system-status-general-info__item-icon:before {
+    background-color: canvastext;
+    background-image: none;
+    mask-repeat: no-repeat;
+    mask-position: 50% center;
+    mask-size: 24px;
+  }
+  .system-status-general-info__item-icon--drupal:before {
+    mask-image: url(../../images/core/ffffff/drupal-logo.svg);
+  }
+  .system-status-general-info__item-icon--clock:before {
+    mask-image: url(../../images/core/ffffff/clock.svg);
+  }
+  .system-status-general-info__item-icon--server:before {
+    mask-image: url(../../images/core/ffffff/server.svg);
+  }
+  .system-status-general-info__item-icon--php:before {
+    mask-image: url(../../images/core/ffffff/php-logo.svg);
+    mask-size: 32px;
+  }
+  .system-status-general-info__item-icon--database:before {
+    mask-image: url(../../images/core/ffffff/database.svg);
+  }
+}
+
 .system-status-general-info__item-details {
   position: relative;
   display: inline-block;
diff --git a/web/core/themes/claro/css/components/system-status-report.css b/web/core/themes/claro/css/components/system-status-report.css
index 5d98c434de..127d137f1e 100644
--- a/web/core/themes/claro/css/components/system-status-report.css
+++ b/web/core/themes/claro/css/components/system-status-report.css
@@ -104,6 +104,30 @@
   background-image: url("data:image/svg+xml,%3csvg fill='%23e29700' height='16' width='16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='m14.66 12.316-5.316-10.633c-.738-1.476-1.946-1.476-2.685 0l-5.317 10.633c-.738 1.477.008 2.684 1.658 2.684h10.002c1.65 0 2.396-1.207 1.658-2.684zm-7.66-8.316h2.002v5h-2.002zm2.252 8.615c0 .344-.281.625-.625.625h-1.25c-.345 0-.626-.281-.626-.625v-1.239c0-.344.281-.625.626-.625h1.25c.344 0 .625.281.625.625z'/%3e%3c/svg%3e");
 }
 
+@media (forced-colors: active) {
+  .system-status-report__status-title .details-title:before,
+  .details .system-status-report__status-icon:before {
+    background-color: canvastext;
+    background-image: none;
+    -webkit-mask-repeat: no-repeat;
+    mask-repeat: no-repeat;
+    -webkit-mask-position: top center;
+    mask-position: top center;
+    -webkit-mask-size: contain;
+    mask-size: contain;
+  }
+  .system-status-report__status-icon--error .details-title:before,
+  .details .system-status-report__status-icon--error:before {
+    -webkit-mask-image: url("data:image/svg+xml,%3csvg fill='%23e32700' height='16' width='16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='m8.002 1c-3.868 0-7.002 3.134-7.002 7s3.134 7 7.002 7c3.865 0 7-3.134 7-7s-3.135-7-7-7zm4.025 9.284c.062.063.1.149.1.239 0 .091-.037.177-.1.24l-1.262 1.262c-.064.062-.15.1-.24.1s-.176-.036-.24-.1l-2.283-2.283-2.286 2.283c-.064.062-.15.1-.24.1s-.176-.036-.24-.1l-1.261-1.262c-.063-.062-.1-.148-.1-.24 0-.088.036-.176.1-.238l2.283-2.285-2.283-2.284c-.063-.064-.1-.15-.1-.24s.036-.176.1-.24l1.262-1.262c.063-.063.149-.1.24-.1.089 0 .176.036.24.1l2.285 2.284 2.283-2.284c.064-.063.15-.1.24-.1s.176.036.24.1l1.262 1.262c.062.063.1.149.1.24 0 .089-.037.176-.1.24l-2.283 2.284z'/%3e%3c/svg%3e");
+    mask-image: url("data:image/svg+xml,%3csvg fill='%23e32700' height='16' width='16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='m8.002 1c-3.868 0-7.002 3.134-7.002 7s3.134 7 7.002 7c3.865 0 7-3.134 7-7s-3.135-7-7-7zm4.025 9.284c.062.063.1.149.1.239 0 .091-.037.177-.1.24l-1.262 1.262c-.064.062-.15.1-.24.1s-.176-.036-.24-.1l-2.283-2.283-2.286 2.283c-.064.062-.15.1-.24.1s-.176-.036-.24-.1l-1.261-1.262c-.063-.062-.1-.148-.1-.24 0-.088.036-.176.1-.238l2.283-2.285-2.283-2.284c-.063-.064-.1-.15-.1-.24s.036-.176.1-.24l1.262-1.262c.063-.063.149-.1.24-.1.089 0 .176.036.24.1l2.285 2.284 2.283-2.284c.064-.063.15-.1.24-.1s.176.036.24.1l1.262 1.262c.062.063.1.149.1.24 0 .089-.037.176-.1.24l-2.283 2.284z'/%3e%3c/svg%3e");
+  }
+  .system-status-report__status-icon--warning .details-title:before,
+  .details .system-status-report__status-icon--warning:before {
+    -webkit-mask-image: url("data:image/svg+xml,%3csvg fill='%23e29700' height='16' width='16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='m14.66 12.316-5.316-10.633c-.738-1.476-1.946-1.476-2.685 0l-5.317 10.633c-.738 1.477.008 2.684 1.658 2.684h10.002c1.65 0 2.396-1.207 1.658-2.684zm-7.66-8.316h2.002v5h-2.002zm2.252 8.615c0 .344-.281.625-.625.625h-1.25c-.345 0-.626-.281-.626-.625v-1.239c0-.344.281-.625.626-.625h1.25c.344 0 .625.281.625.625z'/%3e%3c/svg%3e");
+    mask-image: url("data:image/svg+xml,%3csvg fill='%23e29700' height='16' width='16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='m14.66 12.316-5.316-10.633c-.738-1.476-1.946-1.476-2.685 0l-5.317 10.633c-.738 1.477.008 2.684 1.658 2.684h10.002c1.65 0 2.396-1.207 1.658-2.684zm-7.66-8.316h2.002v5h-2.002zm2.252 8.615c0 .344-.281.625-.625.625h-1.25c-.345 0-.626-.281-.626-.625v-1.239c0-.344.281-.625.626-.625h1.25c.344 0 .625.281.625.625z'/%3e%3c/svg%3e");
+  }
+}
+
 .system-status-report__entry__value {
   box-sizing: border-box;
   padding: 0 1em 1em 3em; /* LTR */
diff --git a/web/core/themes/claro/css/components/system-status-report.pcss.css b/web/core/themes/claro/css/components/system-status-report.pcss.css
index bb20990073..ecf66895d4 100644
--- a/web/core/themes/claro/css/components/system-status-report.pcss.css
+++ b/web/core/themes/claro/css/components/system-status-report.pcss.css
@@ -87,6 +87,25 @@
   background-image: url(../../images/core/e29700/warning.svg);
 }
 
+@media (forced-colors: active) {
+  .system-status-report__status-title .details-title:before,
+  .details .system-status-report__status-icon:before {
+    background-color: canvastext;
+    background-image: none;
+    mask-repeat: no-repeat;
+    mask-position: top center;
+    mask-size: contain;
+  }
+  .system-status-report__status-icon--error .details-title:before,
+  .details .system-status-report__status-icon--error:before {
+    mask-image: url(../../images/core/e32700/error.svg);
+  }
+  .system-status-report__status-icon--warning .details-title:before,
+  .details .system-status-report__status-icon--warning:before {
+    mask-image: url(../../images/core/e29700/warning.svg);
+  }
+}
+
 .system-status-report__entry__value {
   box-sizing: border-box;
   padding: 0 1em 1em 3em; /* LTR */
diff --git a/web/core/themes/claro/css/components/tabledrag.css b/web/core/themes/claro/css/components/tabledrag.css
index edc188d6ea..493cbece91 100644
--- a/web/core/themes/claro/css/components/tabledrag.css
+++ b/web/core/themes/claro/css/components/tabledrag.css
@@ -138,6 +138,19 @@ body.drag {
   }
 }
 
+@media (forced-colors: active) {
+  .tabledrag-handle::after {
+    content: "";
+    background: linktext;
+    -webkit-mask-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17' viewBox='0 0 16 16'%3e%3cpath fill='%23222330' d='M14.103 5.476a.5.5 0 00-.701-.053.526.526 0 00-.082.713l1.1 1.346H8.512V1.62l1.32 1.113a.501.501 0 00.732-.054.528.528 0 00-.085-.744L8.328.119a.5.5 0 00-.647 0L5.529 1.935a.527.527 0 00-.085.744.504.504 0 00.732.054l1.32-1.113v5.862H1.588L2.68 6.136a.526.526 0 00-.1-.68.5.5 0 00-.675.02L.117 7.67a.525.525 0 000 .66l1.788 2.194a.5.5 0 00.702.053.526.526 0 00.081-.713l-1.1-1.346h5.908v5.862l-1.32-1.113a.501.501 0 00-.698.082.526.526 0 00.051.716l2.152 1.817v-.001a.5.5 0 00.647 0l2.151-1.816a.526.526 0 00.052-.716.501.501 0 00-.699-.082l-1.32 1.113V8.518h5.908l-1.091 1.346a.527.527 0 00.022.776.504.504 0 00.752-.116l1.78-2.194a.527.527 0 000-.66z'/%3e%3c/svg%3e");
+    mask-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17' viewBox='0 0 16 16'%3e%3cpath fill='%23222330' d='M14.103 5.476a.5.5 0 00-.701-.053.526.526 0 00-.082.713l1.1 1.346H8.512V1.62l1.32 1.113a.501.501 0 00.732-.054.528.528 0 00-.085-.744L8.328.119a.5.5 0 00-.647 0L5.529 1.935a.527.527 0 00-.085.744.504.504 0 00.732.054l1.32-1.113v5.862H1.588L2.68 6.136a.526.526 0 00-.1-.68.5.5 0 00-.675.02L.117 7.67a.525.525 0 000 .66l1.788 2.194a.5.5 0 00.702.053.526.526 0 00.081-.713l-1.1-1.346h5.908v5.862l-1.32-1.113a.501.501 0 00-.698.082.526.526 0 00.051.716l2.152 1.817v-.001a.5.5 0 00.647 0l2.151-1.816a.526.526 0 00.052-.716.501.501 0 00-.699-.082l-1.32 1.113V8.518h5.908l-1.091 1.346a.527.527 0 00.022.776.504.504 0 00.752-.116l1.78-2.194a.527.527 0 000-.66z'/%3e%3c/svg%3e");
+    -webkit-mask-repeat: no-repeat;
+    mask-repeat: no-repeat;
+    -webkit-mask-position: center;
+    mask-position: center;
+  }
+}
+
 .tabledrag-handle::after,
 .tabledrag-disabled .tabledrag-handle.tabledrag-handle.tabledrag-handle::after {
   transform: scale(1);
diff --git a/web/core/themes/claro/css/components/tabledrag.pcss.css b/web/core/themes/claro/css/components/tabledrag.pcss.css
index 7ffd616031..15fdec6a2e 100644
--- a/web/core/themes/claro/css/components/tabledrag.pcss.css
+++ b/web/core/themes/claro/css/components/tabledrag.pcss.css
@@ -119,6 +119,16 @@ body.drag {
   }
 }
 
+@media (forced-colors: active) {
+  .tabledrag-handle::after {
+    content: "";
+    background: linktext;
+    mask-image: url(../../images/icons/222330/tabledrag-handle.svg);
+    mask-repeat: no-repeat;
+    mask-position: center;
+  }
+}
+
 .tabledrag-handle::after,
 .tabledrag-disabled .tabledrag-handle.tabledrag-handle.tabledrag-handle::after {
   transform: scale(1);
diff --git a/web/core/themes/claro/css/components/tables.css b/web/core/themes/claro/css/components/tables.css
index 7bdcf31352..91c098e5fc 100644
--- a/web/core/themes/claro/css/components/tables.css
+++ b/web/core/themes/claro/css/components/tables.css
@@ -98,9 +98,19 @@ _:-ms-fullscreen, /* Only IE 11 */
   content: "";
   opacity: 0.5;
   background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='14' height='8'%3e%3cpath d='M1.75.25v1.5h10.5V.25zm0 3v1.5h7.5v-1.5zm0 3v1.5h4.5v-1.5z' fill='%23222330'/%3e%3c/svg%3e") no-repeat 50% 50%;
-  background-size: contain;
+  background-size: contain
 }
 
+@media (forced-colors: active) {
+
+.sortable-heading > a::after {
+    opacity: 1;
+    background: linktext;
+    -webkit-mask: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='14' height='8'%3e%3cpath d='M1.75.25v1.5h10.5V.25zm0 3v1.5h7.5v-1.5zm0 3v1.5h4.5v-1.5z' fill='%23222330'/%3e%3c/svg%3e") no-repeat 50% 50%;
+    mask: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='14' height='8'%3e%3cpath d='M1.75.25v1.5h10.5V.25zm0 3v1.5h7.5v-1.5zm0 3v1.5h4.5v-1.5z' fill='%23222330'/%3e%3c/svg%3e") no-repeat 50% 50%
+}
+  }
+
 /* stylelint-disable-next-line selector-type-no-unknown */
 
 _:-ms-fullscreen, /* Only IE 11 */
@@ -114,9 +124,18 @@ _:-ms-fullscreen, /* Only IE 11 */
 [dir="rtl"] .sortable-heading > a::after {
   right: auto;
   left: 1rem;
-  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='14' height='8'%3e%3cpath d='M12.25.25v1.5H1.75V.25zm0 3v1.5h-7.5v-1.5zm0 3v1.5h-4.5v-1.5z' fill='%23222330'/%3e%3c/svg%3e");
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='14' height='8'%3e%3cpath d='M12.25.25v1.5H1.75V.25zm0 3v1.5h-7.5v-1.5zm0 3v1.5h-4.5v-1.5z' fill='%23222330'/%3e%3c/svg%3e")
 }
 
+@media (forced-colors: active) {
+
+[dir="rtl"] .sortable-heading > a::after {
+    background: linktext;
+    -webkit-mask: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='14' height='8'%3e%3cpath d='M12.25.25v1.5H1.75V.25zm0 3v1.5h-7.5v-1.5zm0 3v1.5h-4.5v-1.5z' fill='%23222330'/%3e%3c/svg%3e") no-repeat 50% 50%;
+    mask: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='14' height='8'%3e%3cpath d='M12.25.25v1.5H1.75V.25zm0 3v1.5h-7.5v-1.5zm0 3v1.5h-4.5v-1.5z' fill='%23222330'/%3e%3c/svg%3e") no-repeat 50% 50%
+}
+  }
+
 /* stylelint-disable-next-line selector-type-no-unknown */
 
 _:-ms-fullscreen, /* Only IE 11 */
diff --git a/web/core/themes/claro/css/components/tables.pcss.css b/web/core/themes/claro/css/components/tables.pcss.css
index 5b70ab75c8..f5929c1d7c 100644
--- a/web/core/themes/claro/css/components/tables.pcss.css
+++ b/web/core/themes/claro/css/components/tables.pcss.css
@@ -82,6 +82,12 @@ _:-ms-fullscreen, /* Only IE 11 */
   opacity: 0.5;
   background: url(../../images/icons/222330/sort--inactive--ltr.svg) no-repeat 50% 50%;
   background-size: contain;
+
+  @media (forced-colors: active) {
+    opacity: 1;
+    background: linktext;
+    mask: url(../../images/icons/222330/sort--inactive--ltr.svg) no-repeat 50% 50%;
+  }
 }
 /* stylelint-disable-next-line selector-type-no-unknown */
 _:-ms-fullscreen, /* Only IE 11 */
@@ -95,6 +101,11 @@ _:-ms-fullscreen, /* Only IE 11 */
   right: auto;
   left: 1rem;
   background-image: url(../../images/icons/222330/sort--inactive--rtl.svg);
+
+  @media (forced-colors: active) {
+    background: linktext;
+    mask: url(../../images/icons/222330/sort--inactive--rtl.svg) no-repeat 50% 50%;
+  }
 }
 /* stylelint-disable-next-line selector-type-no-unknown */
 _:-ms-fullscreen, /* Only IE 11 */
diff --git a/web/core/themes/claro/css/components/tablesort-indicator.css b/web/core/themes/claro/css/components/tablesort-indicator.css
index 0a6260da19..4959b5fe54 100644
--- a/web/core/themes/claro/css/components/tablesort-indicator.css
+++ b/web/core/themes/claro/css/components/tablesort-indicator.css
@@ -19,9 +19,22 @@
   margin-top: -0.5rem; /* -8px */
   opacity: 0.5;
   background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='14' height='8'%3e%3cpath d='M1.75.25v1.5h10.5V.25zm0 3v1.5h7.5v-1.5zm0 3v1.5h4.5v-1.5z' fill='%23222330'/%3e%3c/svg%3e") no-repeat 0 50%;
-  background-size: auto;
+  background-size: auto
 }
 
+@media (forced-colors: active) {
+
+.tablesort {
+    background: linktext;
+    -webkit-mask-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='14' height='8'%3e%3cpath d='M1.75.25v1.5h10.5V.25zm0 3v1.5h7.5v-1.5zm0 3v1.5h4.5v-1.5z' fill='%23222330'/%3e%3c/svg%3e");
+    mask-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='14' height='8'%3e%3cpath d='M1.75.25v1.5h10.5V.25zm0 3v1.5h7.5v-1.5zm0 3v1.5h4.5v-1.5z' fill='%23222330'/%3e%3c/svg%3e");
+    -webkit-mask-repeat: no-repeat;
+    mask-repeat: no-repeat;
+    -webkit-mask-position: 0 50%;
+    mask-position: 0 50%
+}
+  }
+
 /* stylelint-disable-next-line selector-type-no-unknown */
 
 _:-ms-fullscreen, /* Only IE 11 */
@@ -35,9 +48,22 @@ _:-ms-fullscreen, /* Only IE 11 */
 [dir="rtl"] .tablesort {
   right: auto;
   left: 1rem; /* 16px */
-  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='14' height='8'%3e%3cpath d='M12.25.25v1.5H1.75V.25zm0 3v1.5h-7.5v-1.5zm0 3v1.5h-4.5v-1.5z' fill='%23222330'/%3e%3c/svg%3e");
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='14' height='8'%3e%3cpath d='M12.25.25v1.5H1.75V.25zm0 3v1.5h-7.5v-1.5zm0 3v1.5h-4.5v-1.5z' fill='%23222330'/%3e%3c/svg%3e")
 }
 
+@media (forced-colors: active) {
+
+[dir="rtl"] .tablesort {
+    background: linktext;
+    -webkit-mask-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='14' height='8'%3e%3cpath d='M12.25.25v1.5H1.75V.25zm0 3v1.5h-7.5v-1.5zm0 3v1.5h-4.5v-1.5z' fill='%23222330'/%3e%3c/svg%3e");
+    mask-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='14' height='8'%3e%3cpath d='M12.25.25v1.5H1.75V.25zm0 3v1.5h-7.5v-1.5zm0 3v1.5h-4.5v-1.5z' fill='%23222330'/%3e%3c/svg%3e");
+    -webkit-mask-repeat: no-repeat;
+    mask-repeat: no-repeat;
+    -webkit-mask-position: 0 50%;
+    mask-position: 0 50%
+}
+  }
+
 /* stylelint-disable-next-line selector-type-no-unknown */
 
 _:-ms-fullscreen, /* Only IE 11 */
@@ -50,11 +76,31 @@ _:-ms-fullscreen, /* Only IE 11 */
 .tablesort--asc,
 [dir="rtl"] .tablesort--asc {
   opacity: 1;
-  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='14' height='16' viewBox='0 0 10 12'%3e%3cpath d='M5 .44L.719 4.718 1.78 5.78 4.25 3.313v7.937h1.5V3.312l2.469 2.47L9.28 4.718 5 .439z' fill='%23004adc'/%3e%3c/svg%3e");
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='14' height='16' viewBox='0 0 10 12'%3e%3cpath d='M5 .44L.719 4.718 1.78 5.78 4.25 3.313v7.937h1.5V3.312l2.469 2.47L9.28 4.718 5 .439z' fill='%23004adc'/%3e%3c/svg%3e")
+}
+
+@media (forced-colors: active) {
+
+.tablesort--asc,
+[dir="rtl"] .tablesort--asc {
+    background: linktext;
+    -webkit-mask-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='14' height='16' viewBox='0 0 10 12'%3e%3cpath d='M5 .44L.719 4.718 1.78 5.78 4.25 3.313v7.937h1.5V3.312l2.469 2.47L9.28 4.718 5 .439z' fill='%23004adc'/%3e%3c/svg%3e");
+    mask-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='14' height='16' viewBox='0 0 10 12'%3e%3cpath d='M5 .44L.719 4.718 1.78 5.78 4.25 3.313v7.937h1.5V3.312l2.469 2.47L9.28 4.718 5 .439z' fill='%23004adc'/%3e%3c/svg%3e")
 }
+  }
 
 .tablesort--desc,
 [dir="rtl"] .tablesort--desc {
   opacity: 1;
-  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='14' height='16' viewBox='0 0 10 12'%3e%3cpath d='M4.25.75v7.938l-2.469-2.47L.72 7.282 5 11.561l4.281-4.28L8.22 6.22 5.75 8.687V.75h-1.5z' fill='%23004adc'/%3e%3c/svg%3e");
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='14' height='16' viewBox='0 0 10 12'%3e%3cpath d='M4.25.75v7.938l-2.469-2.47L.72 7.282 5 11.561l4.281-4.28L8.22 6.22 5.75 8.687V.75h-1.5z' fill='%23004adc'/%3e%3c/svg%3e")
+}
+
+@media (forced-colors: active) {
+
+.tablesort--desc,
+[dir="rtl"] .tablesort--desc {
+    background: linktext;
+    -webkit-mask-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='14' height='16' viewBox='0 0 10 12'%3e%3cpath d='M4.25.75v7.938l-2.469-2.47L.72 7.282 5 11.561l4.281-4.28L8.22 6.22 5.75 8.687V.75h-1.5z' fill='%23004adc'/%3e%3c/svg%3e");
+    mask-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='14' height='16' viewBox='0 0 10 12'%3e%3cpath d='M4.25.75v7.938l-2.469-2.47L.72 7.282 5 11.561l4.281-4.28L8.22 6.22 5.75 8.687V.75h-1.5z' fill='%23004adc'/%3e%3c/svg%3e")
 }
+  }
diff --git a/web/core/themes/claro/css/components/tablesort-indicator.pcss.css b/web/core/themes/claro/css/components/tablesort-indicator.pcss.css
index 1cbc493294..e6b942e20a 100644
--- a/web/core/themes/claro/css/components/tablesort-indicator.pcss.css
+++ b/web/core/themes/claro/css/components/tablesort-indicator.pcss.css
@@ -13,7 +13,15 @@
   opacity: 0.5;
   background: url(../../images/icons/222330/sort--inactive--ltr.svg) no-repeat 0 50%;
   background-size: auto;
+
+  @media (forced-colors: active) {
+    background: linktext;
+    mask-image: url(../../images/icons/222330/sort--inactive--ltr.svg);
+    mask-repeat: no-repeat;
+    mask-position: 0 50%;
+  }
 }
+
 /* stylelint-disable-next-line selector-type-no-unknown */
 _:-ms-fullscreen, /* Only IE 11 */
 .tablesort {
@@ -26,6 +34,13 @@ _:-ms-fullscreen, /* Only IE 11 */
   right: auto;
   left: 1rem; /* 16px */
   background-image: url(../../images/icons/222330/sort--inactive--rtl.svg);
+
+  @media (forced-colors: active) {
+    background: linktext;
+    mask-image: url(../../images/icons/222330/sort--inactive--rtl.svg);
+    mask-repeat: no-repeat;
+    mask-position: 0 50%;
+  }
 }
 /* stylelint-disable-next-line selector-type-no-unknown */
 _:-ms-fullscreen, /* Only IE 11 */
@@ -38,9 +53,19 @@ _:-ms-fullscreen, /* Only IE 11 */
 [dir="rtl"] .tablesort--asc {
   opacity: 1;
   background-image: url(../../images/icons/004adc/sort--asc.svg);
+
+  @media (forced-colors: active) {
+    background: linktext;
+    mask-image: url(../../images/icons/004adc/sort--asc.svg);
+  }
 }
 .tablesort--desc,
 [dir="rtl"] .tablesort--desc {
   opacity: 1;
   background-image: url(../../images/icons/004adc/sort--desc.svg);
+
+  @media (forced-colors: active) {
+    background: linktext;
+    mask-image: url(../../images/icons/004adc/sort--desc.svg);
+  }
 }
diff --git a/web/core/yarn.lock b/web/core/yarn.lock
index cc528e49db..13fbb2a0b2 100644
--- a/web/core/yarn.lock
+++ b/web/core/yarn.lock
@@ -3,11 +3,12 @@
 
 
 "@ampproject/remapping@^2.1.0":
-  version "2.1.2"
-  resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.1.2.tgz#4edca94973ded9630d20101cd8559cedb8d8bd34"
-  integrity sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d"
+  integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==
   dependencies:
-    "@jridgewell/trace-mapping" "^0.3.0"
+    "@jridgewell/gen-mapping" "^0.1.0"
+    "@jridgewell/trace-mapping" "^0.3.9"
 
 "@babel/code-frame@7.12.11":
   version "7.12.11"
@@ -23,40 +24,40 @@
   dependencies:
     "@babel/highlight" "^7.16.7"
 
-"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.4", "@babel/compat-data@^7.16.8", "@babel/compat-data@^7.17.0":
-  version "7.17.0"
-  resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.0.tgz#86850b8597ea6962089770952075dcaabb8dba34"
-  integrity sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==
+"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.17.0", "@babel/compat-data@^7.17.10":
+  version "7.17.10"
+  resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.10.tgz#711dc726a492dfc8be8220028b1b92482362baab"
+  integrity sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==
 
-"@babel/core@>=7.9.0", "@babel/core@^7.0.0", "@babel/core@^7.8.4":
-  version "7.17.5"
-  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.5.tgz#6cd2e836058c28f06a4ca8ee7ed955bbf37c8225"
-  integrity sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==
+"@babel/core@^7.0.0", "@babel/core@^7.17.9", "@babel/core@^7.8.4":
+  version "7.17.10"
+  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.10.tgz#74ef0fbf56b7dfc3f198fc2d927f4f03e12f4b05"
+  integrity sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA==
   dependencies:
     "@ampproject/remapping" "^2.1.0"
     "@babel/code-frame" "^7.16.7"
-    "@babel/generator" "^7.17.3"
-    "@babel/helper-compilation-targets" "^7.16.7"
-    "@babel/helper-module-transforms" "^7.16.7"
-    "@babel/helpers" "^7.17.2"
-    "@babel/parser" "^7.17.3"
+    "@babel/generator" "^7.17.10"
+    "@babel/helper-compilation-targets" "^7.17.10"
+    "@babel/helper-module-transforms" "^7.17.7"
+    "@babel/helpers" "^7.17.9"
+    "@babel/parser" "^7.17.10"
     "@babel/template" "^7.16.7"
-    "@babel/traverse" "^7.17.3"
-    "@babel/types" "^7.17.0"
+    "@babel/traverse" "^7.17.10"
+    "@babel/types" "^7.17.10"
     convert-source-map "^1.7.0"
     debug "^4.1.0"
     gensync "^1.0.0-beta.2"
-    json5 "^2.1.2"
+    json5 "^2.2.1"
     semver "^6.3.0"
 
-"@babel/generator@^7.17.3":
-  version "7.17.3"
-  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.3.tgz#a2c30b0c4f89858cb87050c3ffdfd36bdf443200"
-  integrity sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==
+"@babel/generator@^7.17.10":
+  version "7.17.10"
+  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.10.tgz#c281fa35b0c349bbe9d02916f4ae08fc85ed7189"
+  integrity sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg==
   dependencies:
-    "@babel/types" "^7.17.0"
+    "@babel/types" "^7.17.10"
+    "@jridgewell/gen-mapping" "^0.1.0"
     jsesc "^2.5.1"
-    source-map "^0.5.0"
 
 "@babel/helper-annotate-as-pure@^7.16.7":
   version "7.16.7"
@@ -73,30 +74,30 @@
     "@babel/helper-explode-assignable-expression" "^7.16.7"
     "@babel/types" "^7.16.7"
 
-"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7":
-  version "7.16.7"
-  resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b"
-  integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==
+"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.17.10":
+  version "7.17.10"
+  resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.10.tgz#09c63106d47af93cf31803db6bc49fef354e2ebe"
+  integrity sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==
   dependencies:
-    "@babel/compat-data" "^7.16.4"
+    "@babel/compat-data" "^7.17.10"
     "@babel/helper-validator-option" "^7.16.7"
-    browserslist "^4.17.5"
+    browserslist "^4.20.2"
     semver "^6.3.0"
 
 "@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7", "@babel/helper-create-class-features-plugin@^7.17.6":
-  version "7.17.6"
-  resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz#3778c1ed09a7f3e65e6d6e0f6fbfcc53809d92c9"
-  integrity sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==
+  version "7.17.9"
+  resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz#71835d7fb9f38bd9f1378e40a4c0902fdc2ea49d"
+  integrity sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==
   dependencies:
     "@babel/helper-annotate-as-pure" "^7.16.7"
     "@babel/helper-environment-visitor" "^7.16.7"
-    "@babel/helper-function-name" "^7.16.7"
-    "@babel/helper-member-expression-to-functions" "^7.16.7"
+    "@babel/helper-function-name" "^7.17.9"
+    "@babel/helper-member-expression-to-functions" "^7.17.7"
     "@babel/helper-optimise-call-expression" "^7.16.7"
     "@babel/helper-replace-supers" "^7.16.7"
     "@babel/helper-split-export-declaration" "^7.16.7"
 
-"@babel/helper-create-regexp-features-plugin@^7.16.7":
+"@babel/helper-create-regexp-features-plugin@^7.16.7", "@babel/helper-create-regexp-features-plugin@^7.17.0":
   version "7.17.0"
   resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz#1dcc7d40ba0c6b6b25618997c5dbfd310f186fe1"
   integrity sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==
@@ -132,21 +133,13 @@
   dependencies:
     "@babel/types" "^7.16.7"
 
-"@babel/helper-function-name@^7.16.7":
-  version "7.16.7"
-  resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f"
-  integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==
+"@babel/helper-function-name@^7.16.7", "@babel/helper-function-name@^7.17.9":
+  version "7.17.9"
+  resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz#136fcd54bc1da82fcb47565cf16fd8e444b1ff12"
+  integrity sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==
   dependencies:
-    "@babel/helper-get-function-arity" "^7.16.7"
     "@babel/template" "^7.16.7"
-    "@babel/types" "^7.16.7"
-
-"@babel/helper-get-function-arity@^7.16.7":
-  version "7.16.7"
-  resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419"
-  integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==
-  dependencies:
-    "@babel/types" "^7.16.7"
+    "@babel/types" "^7.17.0"
 
 "@babel/helper-hoist-variables@^7.16.7":
   version "7.16.7"
@@ -155,12 +148,12 @@
   dependencies:
     "@babel/types" "^7.16.7"
 
-"@babel/helper-member-expression-to-functions@^7.16.7":
-  version "7.16.7"
-  resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz#42b9ca4b2b200123c3b7e726b0ae5153924905b0"
-  integrity sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==
+"@babel/helper-member-expression-to-functions@^7.16.7", "@babel/helper-member-expression-to-functions@^7.17.7":
+  version "7.17.7"
+  resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz#a34013b57d8542a8c4ff8ba3f747c02452a4d8c4"
+  integrity sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==
   dependencies:
-    "@babel/types" "^7.16.7"
+    "@babel/types" "^7.17.0"
 
 "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7":
   version "7.16.7"
@@ -169,14 +162,14 @@
   dependencies:
     "@babel/types" "^7.16.7"
 
-"@babel/helper-module-transforms@^7.16.7":
-  version "7.17.6"
-  resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz#3c3b03cc6617e33d68ef5a27a67419ac5199ccd0"
-  integrity sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA==
+"@babel/helper-module-transforms@^7.16.7", "@babel/helper-module-transforms@^7.17.7":
+  version "7.17.7"
+  resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz#3943c7f777139e7954a5355c815263741a9c1cbd"
+  integrity sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==
   dependencies:
     "@babel/helper-environment-visitor" "^7.16.7"
     "@babel/helper-module-imports" "^7.16.7"
-    "@babel/helper-simple-access" "^7.16.7"
+    "@babel/helper-simple-access" "^7.17.7"
     "@babel/helper-split-export-declaration" "^7.16.7"
     "@babel/helper-validator-identifier" "^7.16.7"
     "@babel/template" "^7.16.7"
@@ -215,12 +208,12 @@
     "@babel/traverse" "^7.16.7"
     "@babel/types" "^7.16.7"
 
-"@babel/helper-simple-access@^7.16.7":
-  version "7.16.7"
-  resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7"
-  integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==
+"@babel/helper-simple-access@^7.17.7":
+  version "7.17.7"
+  resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz#aaa473de92b7987c6dfa7ce9a7d9674724823367"
+  integrity sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==
   dependencies:
-    "@babel/types" "^7.16.7"
+    "@babel/types" "^7.17.0"
 
 "@babel/helper-skip-transparent-expression-wrappers@^7.16.0":
   version "7.16.0"
@@ -256,28 +249,28 @@
     "@babel/traverse" "^7.16.8"
     "@babel/types" "^7.16.8"
 
-"@babel/helpers@^7.17.2":
-  version "7.17.2"
-  resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.2.tgz#23f0a0746c8e287773ccd27c14be428891f63417"
-  integrity sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==
+"@babel/helpers@^7.17.9":
+  version "7.17.9"
+  resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.9.tgz#b2af120821bfbe44f9907b1826e168e819375a1a"
+  integrity sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==
   dependencies:
     "@babel/template" "^7.16.7"
-    "@babel/traverse" "^7.17.0"
+    "@babel/traverse" "^7.17.9"
     "@babel/types" "^7.17.0"
 
 "@babel/highlight@^7.10.4", "@babel/highlight@^7.16.7":
-  version "7.16.10"
-  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88"
-  integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==
+  version "7.17.9"
+  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.17.9.tgz#61b2ee7f32ea0454612def4fccdae0de232b73e3"
+  integrity sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==
   dependencies:
     "@babel/helper-validator-identifier" "^7.16.7"
     chalk "^2.0.0"
     js-tokens "^4.0.0"
 
-"@babel/parser@^7.16.7", "@babel/parser@^7.17.3":
-  version "7.17.3"
-  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.3.tgz#b07702b982990bf6fdc1da5049a23fece4c5c3d0"
-  integrity sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==
+"@babel/parser@^7.16.7", "@babel/parser@^7.17.10":
+  version "7.17.10"
+  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.10.tgz#873b16db82a8909e0fbd7f115772f4b739f6ce78"
+  integrity sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==
 
 "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7":
   version "7.16.7"
@@ -312,7 +305,7 @@
     "@babel/helper-create-class-features-plugin" "^7.16.7"
     "@babel/helper-plugin-utils" "^7.16.7"
 
-"@babel/plugin-proposal-class-static-block@^7.16.7":
+"@babel/plugin-proposal-class-static-block@^7.17.6":
   version "7.17.6"
   resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz#164e8fd25f0d80fa48c5a4d1438a6629325ad83c"
   integrity sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA==
@@ -369,7 +362,7 @@
     "@babel/helper-plugin-utils" "^7.16.7"
     "@babel/plugin-syntax-numeric-separator" "^7.10.4"
 
-"@babel/plugin-proposal-object-rest-spread@^7.16.7":
+"@babel/plugin-proposal-object-rest-spread@^7.17.3":
   version "7.17.3"
   resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz#d9eb649a54628a51701aef7e0ea3d17e2b9dd390"
   integrity sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==
@@ -572,10 +565,10 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.16.7"
 
-"@babel/plugin-transform-destructuring@^7.16.7":
-  version "7.17.3"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.3.tgz#c445f75819641788a27a0a3a759d9df911df6abc"
-  integrity sha512-dDFzegDYKlPqa72xIlbmSkly5MluLoaC1JswABGktyt6NTXSBcUuse/kWE/wvKFWJHPETpi158qJZFS3JmykJg==
+"@babel/plugin-transform-destructuring@^7.17.7":
+  version "7.17.7"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.7.tgz#49dc2675a7afa9a5e4c6bdee636061136c3408d1"
+  integrity sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ==
   dependencies:
     "@babel/helper-plugin-utils" "^7.16.7"
 
@@ -641,23 +634,23 @@
     "@babel/helper-plugin-utils" "^7.16.7"
     babel-plugin-dynamic-import-node "^2.3.3"
 
-"@babel/plugin-transform-modules-commonjs@^7.16.8":
-  version "7.16.8"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz#cdee19aae887b16b9d331009aa9a219af7c86afe"
-  integrity sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==
+"@babel/plugin-transform-modules-commonjs@^7.17.9":
+  version "7.17.9"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.9.tgz#274be1a2087beec0254d4abd4d86e52442e1e5b6"
+  integrity sha512-2TBFd/r2I6VlYn0YRTz2JdazS+FoUuQ2rIFHoAxtyP/0G3D82SBLaRq9rnUkpqlLg03Byfl/+M32mpxjO6KaPw==
   dependencies:
-    "@babel/helper-module-transforms" "^7.16.7"
+    "@babel/helper-module-transforms" "^7.17.7"
     "@babel/helper-plugin-utils" "^7.16.7"
-    "@babel/helper-simple-access" "^7.16.7"
+    "@babel/helper-simple-access" "^7.17.7"
     babel-plugin-dynamic-import-node "^2.3.3"
 
-"@babel/plugin-transform-modules-systemjs@^7.16.7":
-  version "7.16.7"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz#887cefaef88e684d29558c2b13ee0563e287c2d7"
-  integrity sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==
+"@babel/plugin-transform-modules-systemjs@^7.17.8":
+  version "7.17.8"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz#81fd834024fae14ea78fbe34168b042f38703859"
+  integrity sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw==
   dependencies:
     "@babel/helper-hoist-variables" "^7.16.7"
-    "@babel/helper-module-transforms" "^7.16.7"
+    "@babel/helper-module-transforms" "^7.17.7"
     "@babel/helper-plugin-utils" "^7.16.7"
     "@babel/helper-validator-identifier" "^7.16.7"
     babel-plugin-dynamic-import-node "^2.3.3"
@@ -670,12 +663,12 @@
     "@babel/helper-module-transforms" "^7.16.7"
     "@babel/helper-plugin-utils" "^7.16.7"
 
-"@babel/plugin-transform-named-capturing-groups-regex@^7.16.8":
-  version "7.16.8"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz#7f860e0e40d844a02c9dcf9d84965e7dfd666252"
-  integrity sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==
+"@babel/plugin-transform-named-capturing-groups-regex@^7.17.10":
+  version "7.17.10"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.10.tgz#715dbcfafdb54ce8bccd3d12e8917296a4ba66a4"
+  integrity sha512-v54O6yLaJySCs6mGzaVOUw9T967GnH38T6CQSAtnzdNPwu84l2qAjssKzo/WSO8Yi7NF+7ekm5cVbF/5qiIgNA==
   dependencies:
-    "@babel/helper-create-regexp-features-plugin" "^7.16.7"
+    "@babel/helper-create-regexp-features-plugin" "^7.17.0"
 
 "@babel/plugin-transform-new-target@^7.16.7":
   version "7.16.7"
@@ -706,12 +699,12 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.16.7"
 
-"@babel/plugin-transform-regenerator@^7.16.7":
-  version "7.16.7"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz#9e7576dc476cb89ccc5096fff7af659243b4adeb"
-  integrity sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==
+"@babel/plugin-transform-regenerator@^7.17.9":
+  version "7.17.9"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.17.9.tgz#0a33c3a61cf47f45ed3232903683a0afd2d3460c"
+  integrity sha512-Lc2TfbxR1HOyn/c6b4Y/b6NHoTb67n/IoWLxTu4kC7h4KQnWlhCq2S8Tx0t2SVvv5Uu87Hs+6JEJ5kt2tYGylQ==
   dependencies:
-    regenerator-transform "^0.14.2"
+    regenerator-transform "^0.15.0"
 
 "@babel/plugin-transform-reserved-words@^7.16.7":
   version "7.16.7"
@@ -772,26 +765,26 @@
     "@babel/helper-plugin-utils" "^7.16.7"
 
 "@babel/preset-env@^7.0.0":
-  version "7.16.11"
-  resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.11.tgz#5dd88fd885fae36f88fd7c8342475c9f0abe2982"
-  integrity sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==
+  version "7.17.10"
+  resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.17.10.tgz#a81b093669e3eb6541bb81a23173c5963c5de69c"
+  integrity sha512-YNgyBHZQpeoBSRBg0xixsZzfT58Ze1iZrajvv0lJc70qDDGuGfonEnMGfWeSY0mQ3JTuCWFbMkzFRVafOyJx4g==
   dependencies:
-    "@babel/compat-data" "^7.16.8"
-    "@babel/helper-compilation-targets" "^7.16.7"
+    "@babel/compat-data" "^7.17.10"
+    "@babel/helper-compilation-targets" "^7.17.10"
     "@babel/helper-plugin-utils" "^7.16.7"
     "@babel/helper-validator-option" "^7.16.7"
     "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.7"
     "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.7"
     "@babel/plugin-proposal-async-generator-functions" "^7.16.8"
     "@babel/plugin-proposal-class-properties" "^7.16.7"
-    "@babel/plugin-proposal-class-static-block" "^7.16.7"
+    "@babel/plugin-proposal-class-static-block" "^7.17.6"
     "@babel/plugin-proposal-dynamic-import" "^7.16.7"
     "@babel/plugin-proposal-export-namespace-from" "^7.16.7"
     "@babel/plugin-proposal-json-strings" "^7.16.7"
     "@babel/plugin-proposal-logical-assignment-operators" "^7.16.7"
     "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.7"
     "@babel/plugin-proposal-numeric-separator" "^7.16.7"
-    "@babel/plugin-proposal-object-rest-spread" "^7.16.7"
+    "@babel/plugin-proposal-object-rest-spread" "^7.17.3"
     "@babel/plugin-proposal-optional-catch-binding" "^7.16.7"
     "@babel/plugin-proposal-optional-chaining" "^7.16.7"
     "@babel/plugin-proposal-private-methods" "^7.16.11"
@@ -817,7 +810,7 @@
     "@babel/plugin-transform-block-scoping" "^7.16.7"
     "@babel/plugin-transform-classes" "^7.16.7"
     "@babel/plugin-transform-computed-properties" "^7.16.7"
-    "@babel/plugin-transform-destructuring" "^7.16.7"
+    "@babel/plugin-transform-destructuring" "^7.17.7"
     "@babel/plugin-transform-dotall-regex" "^7.16.7"
     "@babel/plugin-transform-duplicate-keys" "^7.16.7"
     "@babel/plugin-transform-exponentiation-operator" "^7.16.7"
@@ -826,15 +819,15 @@
     "@babel/plugin-transform-literals" "^7.16.7"
     "@babel/plugin-transform-member-expression-literals" "^7.16.7"
     "@babel/plugin-transform-modules-amd" "^7.16.7"
-    "@babel/plugin-transform-modules-commonjs" "^7.16.8"
-    "@babel/plugin-transform-modules-systemjs" "^7.16.7"
+    "@babel/plugin-transform-modules-commonjs" "^7.17.9"
+    "@babel/plugin-transform-modules-systemjs" "^7.17.8"
     "@babel/plugin-transform-modules-umd" "^7.16.7"
-    "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.8"
+    "@babel/plugin-transform-named-capturing-groups-regex" "^7.17.10"
     "@babel/plugin-transform-new-target" "^7.16.7"
     "@babel/plugin-transform-object-super" "^7.16.7"
     "@babel/plugin-transform-parameters" "^7.16.7"
     "@babel/plugin-transform-property-literals" "^7.16.7"
-    "@babel/plugin-transform-regenerator" "^7.16.7"
+    "@babel/plugin-transform-regenerator" "^7.17.9"
     "@babel/plugin-transform-reserved-words" "^7.16.7"
     "@babel/plugin-transform-shorthand-properties" "^7.16.7"
     "@babel/plugin-transform-spread" "^7.16.7"
@@ -844,11 +837,11 @@
     "@babel/plugin-transform-unicode-escapes" "^7.16.7"
     "@babel/plugin-transform-unicode-regex" "^7.16.7"
     "@babel/preset-modules" "^0.1.5"
-    "@babel/types" "^7.16.8"
+    "@babel/types" "^7.17.10"
     babel-plugin-polyfill-corejs2 "^0.3.0"
     babel-plugin-polyfill-corejs3 "^0.5.0"
     babel-plugin-polyfill-regenerator "^0.3.0"
-    core-js-compat "^3.20.2"
+    core-js-compat "^3.22.1"
     semver "^6.3.0"
 
 "@babel/preset-modules@^0.1.5":
@@ -863,9 +856,9 @@
     esutils "^2.0.2"
 
 "@babel/register@^7.7.7", "@babel/register@^7.8.3":
-  version "7.17.0"
-  resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.17.0.tgz#8051e0b7cb71385be4909324f072599723a1f084"
-  integrity sha512-UNZsMAZ7uKoGHo1HlEXfteEOYssf64n/PNLHGqOKq/bgYcu/4LrQWAHJwSCb3BRZK8Hi5gkJdRcwrGTO2wtRCg==
+  version "7.17.7"
+  resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.17.7.tgz#5eef3e0f4afc07e25e847720e7b987ae33f08d0b"
+  integrity sha512-fg56SwvXRifootQEDQAu1mKdjh5uthPzdO0N6t358FktfL4XjAVXuH58ULoiW8mesxiOgNIrxiImqEwv0+hRRA==
   dependencies:
     clone-deep "^4.0.1"
     find-cache-dir "^2.0.0"
@@ -874,17 +867,17 @@
     source-map-support "^0.5.16"
 
 "@babel/runtime-corejs3@^7.10.2":
-  version "7.17.2"
-  resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.17.2.tgz#fdca2cd05fba63388babe85d349b6801b008fd13"
-  integrity sha512-NcKtr2epxfIrNM4VOmPKO46TvDMCBhgi2CrSHaEarrz+Plk2K5r9QemmOFTGpZaoKnWoGH5MO+CzeRsih/Fcgg==
+  version "7.17.9"
+  resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.17.9.tgz#3d02d0161f0fbf3ada8e88159375af97690f4055"
+  integrity sha512-WxYHHUWF2uZ7Hp1K+D1xQgbgkGUfA+5UPOegEXGt2Y5SMog/rYCVaifLZDbw8UkNXozEqqrZTy6bglL7xTaCOw==
   dependencies:
     core-js-pure "^3.20.2"
     regenerator-runtime "^0.13.4"
 
 "@babel/runtime@^7.10.2", "@babel/runtime@^7.16.3", "@babel/runtime@^7.8.4":
-  version "7.17.2"
-  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.2.tgz#66f68591605e59da47523c631416b18508779941"
-  integrity sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==
+  version "7.17.9"
+  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72"
+  integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==
   dependencies:
     regenerator-runtime "^0.13.4"
 
@@ -897,26 +890,26 @@
     "@babel/parser" "^7.16.7"
     "@babel/types" "^7.16.7"
 
-"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.0", "@babel/traverse@^7.17.3":
-  version "7.17.3"
-  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.3.tgz#0ae0f15b27d9a92ba1f2263358ea7c4e7db47b57"
-  integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==
+"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.10", "@babel/traverse@^7.17.3", "@babel/traverse@^7.17.9":
+  version "7.17.10"
+  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.10.tgz#1ee1a5ac39f4eac844e6cf855b35520e5eb6f8b5"
+  integrity sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw==
   dependencies:
     "@babel/code-frame" "^7.16.7"
-    "@babel/generator" "^7.17.3"
+    "@babel/generator" "^7.17.10"
     "@babel/helper-environment-visitor" "^7.16.7"
-    "@babel/helper-function-name" "^7.16.7"
+    "@babel/helper-function-name" "^7.17.9"
     "@babel/helper-hoist-variables" "^7.16.7"
     "@babel/helper-split-export-declaration" "^7.16.7"
-    "@babel/parser" "^7.17.3"
-    "@babel/types" "^7.17.0"
+    "@babel/parser" "^7.17.10"
+    "@babel/types" "^7.17.10"
     debug "^4.1.0"
     globals "^11.1.0"
 
-"@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.4.4":
-  version "7.17.0"
-  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b"
-  integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==
+"@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.17.10", "@babel/types@^7.4.4":
+  version "7.17.10"
+  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.10.tgz#d35d7b4467e439fcf06d195f8100e0fea7fc82c4"
+  integrity sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==
   dependencies:
     "@babel/helper-validator-identifier" "^7.16.7"
     to-fast-properties "^2.0.0"
@@ -970,12 +963,12 @@
     "@ckeditor/ckeditor5-utils" "^34.0.0"
     lodash-es "^4.17.15"
 
-"@ckeditor/ckeditor5-dev-utils@^30.1.1":
-  version "30.1.1"
-  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-dev-utils/-/ckeditor5-dev-utils-30.1.1.tgz#7204b9b5e4d9dec269e1adb2a37cb6700e668b02"
-  integrity sha512-hfdfWst0JiI8/D8wJw03BivgHa9N2HtinG5ROL9fd/Bsv4/EBNdKeFQdCh4NgrNenK8OVhBD0kJ6bd0jQVrf4A==
+"@ckeditor/ckeditor5-dev-utils@^30.1.1", "@ckeditor/ckeditor5-dev-utils@^30.1.3":
+  version "30.1.3"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-dev-utils/-/ckeditor5-dev-utils-30.1.3.tgz#c44decc3346784fa824074ef5158d98ec4e8467d"
+  integrity sha512-e1oRXBxe0PWJcfh4CW0ZPeDNpqGDazMX2s17GrJ5bQHjbbY70KJmHWyKwjf75T2eTihEtRxlX/2D87I4XVJ2iw==
   dependencies:
-    "@ckeditor/ckeditor5-dev-webpack-plugin" "^30.1.1"
+    "@ckeditor/ckeditor5-dev-webpack-plugin" "^30.1.3"
     acorn "^6.2.1"
     acorn-walk "^6.2.0"
     chalk "^3.0.0"
@@ -989,22 +982,22 @@
     javascript-stringify "^1.6.0"
     pofile "^1.0.9"
     postcss "^8.4.12"
-    postcss-import "^14.0.2"
+    postcss-import "^14.1.0"
     postcss-loader "^4.3.0"
-    postcss-mixins "^6.2.3"
-    postcss-nesting "^7.0.1"
+    postcss-mixins "^9.0.2"
+    postcss-nesting "^10.1.4"
     raw-loader "^4.0.1"
     shelljs "^0.8.1"
     style-loader "^2.0.0"
     terser-webpack-plugin "^4.2.3"
     through2 "^3.0.1"
 
-"@ckeditor/ckeditor5-dev-webpack-plugin@^30.1.1":
-  version "30.1.1"
-  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-dev-webpack-plugin/-/ckeditor5-dev-webpack-plugin-30.1.1.tgz#4441c4b5caaad22cbffda0c517e747067ad210d8"
-  integrity sha512-OfcRw8tsGJOzmops2bu03P7nn0bd+QRdjEY0B3uWxOG5233QzrfVfliSOus8FKkoPCUCuZzK5t95tm5GJPhBQw==
+"@ckeditor/ckeditor5-dev-webpack-plugin@^30.1.3":
+  version "30.1.3"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-dev-webpack-plugin/-/ckeditor5-dev-webpack-plugin-30.1.3.tgz#c11fece3d48cade67feb169163a529adaae5da4d"
+  integrity sha512-05aD8blgLO1iSYYARMkJoq3kJJq8wVgEMlq1i2LKjAeuBie/p5yjiq0H7Da9ITD239sgSLTFMUxg2QtNOM+RkA==
   dependencies:
-    "@ckeditor/ckeditor5-dev-utils" "^30.1.1"
+    "@ckeditor/ckeditor5-dev-utils" "^30.1.3"
     chalk "^4.0.0"
     rimraf "^3.0.2"
     semver "^7.3.4"
@@ -1104,10 +1097,10 @@
     ckeditor5 "^34.0.0"
     lodash-es "^4.17.15"
 
-"@ckeditor/ckeditor5-list@~34.0.0":
-  version "34.0.0"
-  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-list/-/ckeditor5-list-34.0.0.tgz#14ed9fd6cae1a90e0acd7bb0bff90fde8e504865"
-  integrity sha512-nYssUwqqSmpjFk+qjZZGnkaLJVL9vqKAzkRyg9VYtmXguYGyx+lbKoCMEKbNrnGJA6F0kHSVPhb+1v/nD1KfKQ==
+"@ckeditor/ckeditor5-list@~34.0.1":
+  version "34.0.1"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-list/-/ckeditor5-list-34.0.1.tgz#4a06c7d87ff36f0ebb122e2ed36e95b2a9911796"
+  integrity sha512-wLAr6Ar77OHsi8FwimuDCUYQZHcOobKKlDBOWaUNzau4xHh6BPrf3UZRzl/eEiEmaSdolQWosSjNbcFwPNnB9g==
   dependencies:
     "@ckeditor/ckeditor5-ui" "^34.0.0"
     ckeditor5 "^34.0.0"
@@ -1231,60 +1224,61 @@
     "@ckeditor/ckeditor5-utils" "^34.0.0"
     lodash-es "^4.17.15"
 
-"@cspell/cspell-bundled-dicts@^5.18.5":
-  version "5.18.5"
-  resolved "https://registry.yarnpkg.com/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-5.18.5.tgz#76beb90ad6e0ae5c42a2d2177c300f5a6d98f1b5"
-  integrity sha512-jFvwF8bb8HUYqMUPQiGZUHAf8zfriZRagzoCW8w4NLLJB1IZNGlQvQCQskQG9cYtOmKAYHCbOwm8SjA9FKwQow==
+"@cspell/cspell-bundled-dicts@^5.20.0":
+  version "5.20.0"
+  resolved "https://registry.yarnpkg.com/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-5.20.0.tgz#294106a2660baf825494535019a0d2230c3cc0c1"
+  integrity sha512-tCO32xVSuey4Tg8XuayBzcrCAfrAXL8J1PeYl26+/ZUl5zkAL4AuyL0Cf4e2PpeEomnUWP2y5noZLLbUeOIwnw==
   dependencies:
     "@cspell/dict-ada" "^2.0.0"
     "@cspell/dict-aws" "^2.0.0"
-    "@cspell/dict-bash" "^2.0.1"
-    "@cspell/dict-companies" "^2.0.2"
-    "@cspell/dict-cpp" "^2.0.0"
+    "@cspell/dict-bash" "^2.0.2"
+    "@cspell/dict-companies" "^2.0.4"
+    "@cspell/dict-cpp" "^2.0.3"
     "@cspell/dict-cryptocurrencies" "^2.0.0"
     "@cspell/dict-csharp" "^2.0.1"
     "@cspell/dict-css" "^2.0.0"
     "@cspell/dict-dart" "^1.1.0"
     "@cspell/dict-django" "^2.0.0"
-    "@cspell/dict-dotnet" "^2.0.0"
-    "@cspell/dict-elixir" "^2.0.0"
+    "@cspell/dict-dotnet" "^2.0.1"
+    "@cspell/dict-elixir" "^2.0.1"
     "@cspell/dict-en-gb" "^1.1.33"
-    "@cspell/dict-en_us" "^2.1.7"
+    "@cspell/dict-en_us" "^2.2.2"
     "@cspell/dict-filetypes" "^2.0.1"
     "@cspell/dict-fonts" "^2.0.0"
-    "@cspell/dict-fullstack" "^2.0.4"
+    "@cspell/dict-fullstack" "^2.0.5"
+    "@cspell/dict-git" "^1.0.1"
     "@cspell/dict-golang" "^2.0.0"
     "@cspell/dict-haskell" "^2.0.0"
-    "@cspell/dict-html" "^3.0.0"
+    "@cspell/dict-html" "^3.0.1"
     "@cspell/dict-html-symbol-entities" "^2.0.0"
     "@cspell/dict-java" "^2.0.0"
     "@cspell/dict-latex" "^2.0.0"
     "@cspell/dict-lorem-ipsum" "^2.0.0"
     "@cspell/dict-lua" "^2.0.0"
-    "@cspell/dict-node" "^2.0.0"
-    "@cspell/dict-npm" "^2.0.1"
+    "@cspell/dict-node" "^2.0.1"
+    "@cspell/dict-npm" "^2.0.3"
     "@cspell/dict-php" "^2.0.0"
     "@cspell/dict-powershell" "^2.0.0"
     "@cspell/dict-public-licenses" "^1.0.4"
-    "@cspell/dict-python" "^2.0.6"
+    "@cspell/dict-python" "^3.0.3"
     "@cspell/dict-r" "^1.0.2"
-    "@cspell/dict-ruby" "^2.0.0"
+    "@cspell/dict-ruby" "^2.0.1"
     "@cspell/dict-rust" "^2.0.0"
     "@cspell/dict-scala" "^2.0.0"
-    "@cspell/dict-software-terms" "^2.1.0"
+    "@cspell/dict-software-terms" "^2.1.5"
     "@cspell/dict-swift" "^1.0.2"
     "@cspell/dict-typescript" "^2.0.0"
     "@cspell/dict-vue" "^2.0.2"
 
-"@cspell/cspell-pipe@^5.18.5":
-  version "5.18.5"
-  resolved "https://registry.yarnpkg.com/@cspell/cspell-pipe/-/cspell-pipe-5.18.5.tgz#d8a1cdf0aa4c0e3383ec4ffca7112b10cd8bb43a"
-  integrity sha512-U/4e4Zm7Mm23SuJu6b49+9Do/2aS+c9sPQa1Z9ZZqHQ4BqswJagk5oZ0V45BjYJ/0acHSRpIxbndpVJ01cjf8A==
+"@cspell/cspell-pipe@^5.20.0":
+  version "5.20.0"
+  resolved "https://registry.yarnpkg.com/@cspell/cspell-pipe/-/cspell-pipe-5.20.0.tgz#964aa560c89ecdf4eea9145700ccd6ab4c235ed8"
+  integrity sha512-dGHf4XZgPlGqviYTD+5ZwSk3hpiywsuuDqnoPo9SeQ1xPon7uFVKsMiAAzvhGAkkBaKIBNP/nwPU0feYvLoCJg==
 
-"@cspell/cspell-types@^5.18.5":
-  version "5.18.5"
-  resolved "https://registry.yarnpkg.com/@cspell/cspell-types/-/cspell-types-5.18.5.tgz#7d3e6c8cdef15255aacfbdb2e3c8bb949fe2540d"
-  integrity sha512-yvDFCUa1CbjBuMkFCh+yUAAaG6VW5WXoewzLwhMFsMV1GZmkbftOcvZq0YuZviNsjdBViDH0dhKdlzwC953upg==
+"@cspell/cspell-types@^5.20.0":
+  version "5.20.0"
+  resolved "https://registry.yarnpkg.com/@cspell/cspell-types/-/cspell-types-5.20.0.tgz#4c9a47249e1ad534938f2f35fbba1221e7800570"
+  integrity sha512-p06/HAKgalqyGHfnowJvjO3SQHxuOzKdiJTUlUi8x1CrEk7PmZEHuORlt9tVVZ46Xf2qY9+QLeTtattlWPJ39A==
 
 "@cspell/dict-ada@^2.0.0":
   version "2.0.0"
@@ -1296,20 +1290,20 @@
   resolved "https://registry.yarnpkg.com/@cspell/dict-aws/-/dict-aws-2.0.0.tgz#9af72af4e59e96029dd4335271d87784843cb7dd"
   integrity sha512-NKz7pDZ7pwj/b33i3f4WLpC1rOOUMmENwYgftxU+giU2YBeKM2wZbMTSEIzsrel56r0UlQYmdIVlP/B4nnVaoQ==
 
-"@cspell/dict-bash@^2.0.1":
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/@cspell/dict-bash/-/dict-bash-2.0.1.tgz#76f6be974e9a968235d4e1b04c4ae76b16169057"
-  integrity sha512-pBx3T/5w7fPF8XD5cx3NwtRFvNpQYmYqzM043NKP2hDmlx4uFwbH599Lvt5mwCMZKfIoRXaNUQvq7se2gstQjw==
-
-"@cspell/dict-companies@^2.0.2":
+"@cspell/dict-bash@^2.0.2":
   version "2.0.2"
-  resolved "https://registry.yarnpkg.com/@cspell/dict-companies/-/dict-companies-2.0.2.tgz#de315b8315b868f877e6161f9fe70e8efc769931"
-  integrity sha512-LPKwBMAWRz+p1R8q+TV6E1sGOOTvxJOaJeXNN++CZQ7i6JMn5Rf+BSxagwkeK6z3o9vIC5ZE4AcQ5BMkvyjqGw==
+  resolved "https://registry.yarnpkg.com/@cspell/dict-bash/-/dict-bash-2.0.2.tgz#8bc3e0a6c1b9c0df1bd9a1b7694c58d9843fd16b"
+  integrity sha512-ASIgI/LmV2TYrD4mtk+gm4XmUSTRomOyRt7NDWyBpEww/AeawC2O2NH6FosyUT6dUU3GaXt2wgJRN7R78n1SGg==
 
-"@cspell/dict-cpp@^2.0.0":
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/@cspell/dict-cpp/-/dict-cpp-2.0.0.tgz#d5f04b693d96d41d67050cfe3ca0d342e141347b"
-  integrity sha512-EflHLs2pHEEXZM6jPfTGR/KHZKQtJlvzqgkg1zaA1YKv5HQNw9Wy5KVPGEV2bjPcFsZJO3xXjO1KBZcoOPjPmA==
+"@cspell/dict-companies@^2.0.4":
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/@cspell/dict-companies/-/dict-companies-2.0.4.tgz#2ba11418478d99d67a96004ea782a47a42c501a3"
+  integrity sha512-nLNVddo+iu4q/Mu03nkVTMnSPxBkoLyZ0MgpHJZWCqxVATbBkzoZNNNjsTkJhvkbrUIWydf8YW4U4wYY+kyh7Q==
+
+"@cspell/dict-cpp@^2.0.3":
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/@cspell/dict-cpp/-/dict-cpp-2.0.3.tgz#551bec166c4520f7ba36f8d263fb885d19f98db0"
+  integrity sha512-aWRvI3CQW2M3XeJpDVffItw/9n4hxsN5EPwyBa6Po6EnCxZZZLOqpieZk4JNz4pH0/xbnOX+sMMuSeKWr71r/w==
 
 "@cspell/dict-cryptocurrencies@^2.0.0":
   version "2.0.0"
@@ -1336,25 +1330,25 @@
   resolved "https://registry.yarnpkg.com/@cspell/dict-django/-/dict-django-2.0.0.tgz#a5f5f693a686e5873f9dfb547ee3b3142ef760b1"
   integrity sha512-GkJdJv6cmzrKcmq2/oxTXjKF5uv71r4eTqnFmgPbNBW1t+G4VYpzOf0QrVQrhx2RC4DdW5XfcTf+iS0FxHOTmw==
 
-"@cspell/dict-dotnet@^2.0.0":
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/@cspell/dict-dotnet/-/dict-dotnet-2.0.0.tgz#92729d95a71b9f72bf264fbba0c66a7b29f3993a"
-  integrity sha512-WOHfjwMuLbo76khDsDa1lJvP/dXcwXVwonWwfUFRt82BL/GtyMalh1HEtCWwKDuK/9f8PCEt/EZMkHT3D5ZV3w==
+"@cspell/dict-dotnet@^2.0.1":
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/@cspell/dict-dotnet/-/dict-dotnet-2.0.1.tgz#8ef56df758b63f0a2ba4d8681a427a6861ed34d5"
+  integrity sha512-b1n4crJRW0WZVf9Gp/52j/tDtjYiZ3N81fIyfqPlBrjsh/5AivfA697DYwQ2mr8ngNX7RsqRtYNQjealA1rEnQ==
 
-"@cspell/dict-elixir@^2.0.0":
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/@cspell/dict-elixir/-/dict-elixir-2.0.0.tgz#2633a290d2eab068ce6035d76529b24abd295b3b"
-  integrity sha512-NeDObcqiYuqWRrzMAQLZDSrZlChTEZwTA2zHdI2nPtpeDl4FQcTz2BHP8zVt6Lj6G2QHJmNGmQtSmDguX86NYA==
+"@cspell/dict-elixir@^2.0.1":
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/@cspell/dict-elixir/-/dict-elixir-2.0.1.tgz#1a9b422215b5edabb84568cfa5c0c70bc164a2ce"
+  integrity sha512-eTTTxZt1FqGkM780yFDxsGHvTbWqvlK8YISSccK8FyrB6ULW+uflQlNS5AnWg3uWKC48b7pQott+odYCsPJ+Ow==
 
 "@cspell/dict-en-gb@^1.1.33":
   version "1.1.33"
   resolved "https://registry.yarnpkg.com/@cspell/dict-en-gb/-/dict-en-gb-1.1.33.tgz#7f1fd90fc364a5cb77111b5438fc9fcf9cc6da0e"
   integrity sha512-tKSSUf9BJEV+GJQAYGw5e+ouhEe2ZXE620S7BLKe3ZmpnjlNG9JqlnaBhkIMxKnNFkLY2BP/EARzw31AZnOv4g==
 
-"@cspell/dict-en_us@^2.1.7":
-  version "2.1.7"
-  resolved "https://registry.yarnpkg.com/@cspell/dict-en_us/-/dict-en_us-2.1.7.tgz#1acb710b72364898a832b300d3e77211027efac0"
-  integrity sha512-7IeAHZjXiWSIKFx/3CIlY6misvg2KyJ2KO3tSVSKuAlC3UXHGVOcbcY0kQ95IJeKbB6Ot6aW/Aaw73Nzhuurrg==
+"@cspell/dict-en_us@^2.2.2":
+  version "2.2.3"
+  resolved "https://registry.yarnpkg.com/@cspell/dict-en_us/-/dict-en_us-2.2.3.tgz#e22c9d402c6d4638960cc320369e45348a0cd8a2"
+  integrity sha512-JV+aD4mzTcF0T3sZB/PC91ByLqtKIxz21xLQNq0ZGM+cK+EbMLqfKTYjB72WkLZtqkjsPhQ2Bv5JtIlLCCXDIw==
 
 "@cspell/dict-filetypes@^2.0.1":
   version "2.0.1"
@@ -1366,10 +1360,15 @@
   resolved "https://registry.yarnpkg.com/@cspell/dict-fonts/-/dict-fonts-2.0.0.tgz#76e7781b44cdda6933144e15cba80e978c29bd15"
   integrity sha512-AgkTalphfDPtKFPYmEExDcj8rRCh86xlOSXco8tehOEkYVYbksOk9XH0YVH34RFpy93YBd2nnVGLgyGVwagcPw==
 
-"@cspell/dict-fullstack@^2.0.4":
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/@cspell/dict-fullstack/-/dict-fullstack-2.0.4.tgz#d7d1c80863d9fd9bda51346edcc5a72de2cf81b4"
-  integrity sha512-+JtYO58QAXnetRN+MGVzI8YbkbFTLpYfl/Cw/tmNqy7U1IDVC4sTXQ2pZvbbeKQWFHBqYvBs0YASV+mTouXYBw==
+"@cspell/dict-fullstack@^2.0.5":
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/@cspell/dict-fullstack/-/dict-fullstack-2.0.5.tgz#ffe416f90b0b30f1586e75432c0bc09b4c1faf96"
+  integrity sha512-jnLnHZ4HcCFNUfN+q7m0CUDtISNKat0Jahe1GgnAdEwzcozqKBhlGAjV7mQWPtKpqfJU61JakDnrxzqefAfZHw==
+
+"@cspell/dict-git@^1.0.1":
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/@cspell/dict-git/-/dict-git-1.0.1.tgz#9de5ab2532abcdc8b10bd83ccb1f5e5dae0b6067"
+  integrity sha512-Rk+eTof/9inF11lvxmkCRK+gODatA3qai8kSASv6OG/JfPvpj7fTHErx/rdgPw/LOTDUafnoTjTYmj7B2MOQXg==
 
 "@cspell/dict-golang@^2.0.0":
   version "2.0.0"
@@ -1386,10 +1385,10 @@
   resolved "https://registry.yarnpkg.com/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-2.0.0.tgz#a25d39e62bd2dd7191ca5612714aa0a1b90ca10f"
   integrity sha512-71S5wGCe7dq6C+zGDwsEAe5msub/irrLi6SExeG11a/EkpA3RKAEheDGPk0hOY4+vOcIFHaApxOjLTtgQfYWfA==
 
-"@cspell/dict-html@^3.0.0":
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/@cspell/dict-html/-/dict-html-3.0.0.tgz#0f5411518eb3cb5b069fbcad70b16829f1733208"
-  integrity sha512-VzZs/UtyRe4spdaH5SWakik+K3vB2fTyW3kdgGQbzjPGHyb5OXI5fmxQcX0yaSv5RkL0igVROHhu2ARUudoTpw==
+"@cspell/dict-html@^3.0.1":
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/@cspell/dict-html/-/dict-html-3.0.1.tgz#d5d10ef9b62361d8250cf9fe8564606993faa9df"
+  integrity sha512-sbuFd+nSjgbrGf5eYwSddFhm1eLLePKWyH6Zn8Zb0OODrBK5e4vGn1/scI/MOH5a2IvNs8W9wp84uMBFJcQZtw==
 
 "@cspell/dict-java@^2.0.0":
   version "2.0.0"
@@ -1411,15 +1410,15 @@
   resolved "https://registry.yarnpkg.com/@cspell/dict-lua/-/dict-lua-2.0.0.tgz#b96d0363a28ac7e0483ad03edb21705c4f951459"
   integrity sha512-7WUEBEspSKtsq104WdIys1+DLqAxpJPzw74Py1TuE3fI5GvlzeSZkRFP2ya54GB2lCO4C3mq4M8EnitpibVDfw==
 
-"@cspell/dict-node@^2.0.0":
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/@cspell/dict-node/-/dict-node-2.0.0.tgz#f89ca72deac5bfc7ccd46b6b8880fad52ab44843"
-  integrity sha512-tPPl3liJORa/l6AoYqh/7rjoM7bdtaIXnIN6ox7CE0flZcBS5rWOB6mzEY3rpu/XJX0pjbBiIoqrolDkVl1RTQ==
-
-"@cspell/dict-npm@^2.0.1":
+"@cspell/dict-node@^2.0.1":
   version "2.0.1"
-  resolved "https://registry.yarnpkg.com/@cspell/dict-npm/-/dict-npm-2.0.1.tgz#90f9a0ffe0dfcdf998bf1a260b93a3d5ef47ff91"
-  integrity sha512-LRaJFSQfI0BIbbksPFE6fUjAyRFZRcknfOnYC/5c1wB/vsKH6KsqxTeCWNmHTYrk4KdBLZROhsHJXQIoqVTd4w==
+  resolved "https://registry.yarnpkg.com/@cspell/dict-node/-/dict-node-2.0.1.tgz#eda891ebdbce83f20829cb6c85cd209da8cf5cdd"
+  integrity sha512-ztBWzhvI+YaMehICSJ65cohhjQqoztxf9vrS3YckOiVGBFvUMaFVNdX9klQkvrLcS/O4+2PzoGeIEkmf99amLA==
+
+"@cspell/dict-npm@^2.0.3":
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/@cspell/dict-npm/-/dict-npm-2.0.3.tgz#044d71c36cf322f2816a77978bfd5dc21698667c"
+  integrity sha512-K/rnVhmHkR3jfdo7o8P2NDKyMcpVe9pUBiFDY1y2C0YqZXIxCz1f5hObm/hxyO+Vbn5VLU3TKU5fZ5z3LspXOg==
 
 "@cspell/dict-php@^2.0.0":
   version "2.0.0"
@@ -1436,20 +1435,20 @@
   resolved "https://registry.yarnpkg.com/@cspell/dict-public-licenses/-/dict-public-licenses-1.0.4.tgz#13c2af357e7139bf3896eba58e0feb9f51053b3f"
   integrity sha512-h4xULfVEDUeWyvp1OO19pcGDqWcBEQ7WGMp3QBHyYpjsamlzsyYYjCRSY2ZvpM7wruDmywSRFmRHJ/+uNFT7nA==
 
-"@cspell/dict-python@^2.0.6":
-  version "2.0.6"
-  resolved "https://registry.yarnpkg.com/@cspell/dict-python/-/dict-python-2.0.6.tgz#2c1b4f61d72c582db03382f72f08fb4192dcd378"
-  integrity sha512-54ICgMRiGwavorg8UJC38Fwx8tW8WKj8pimJmFUd0F/ImQ8wmeg4VrmyMach5MZVUaw1qUe2aP5uSyqA15Q0mg==
+"@cspell/dict-python@^3.0.3":
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/@cspell/dict-python/-/dict-python-3.0.3.tgz#6c55ee768ffe93a828e607bcab437ccf78c494c6"
+  integrity sha512-Mt415KczTfqmLvKTgeV8FzMzpms9baTS0P5HfULTW+UxQtZeroviYyRM9TJPJKJSoI0ISu0GiIDgmYlV7+YPog==
 
 "@cspell/dict-r@^1.0.2":
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/@cspell/dict-r/-/dict-r-1.0.2.tgz#4f21b240427e9bbaab8f82e0e20122d6b3cf7cee"
   integrity sha512-Rp3d4sgD6izW9TW5yVI3D//3HTl9oOGBuzTvXRdoHksVPRvzIu2liVhj8MnQ3XIRe5Kc6IhLBAm6izuV2BpGwQ==
 
-"@cspell/dict-ruby@^2.0.0":
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/@cspell/dict-ruby/-/dict-ruby-2.0.0.tgz#3f2c78ceb38bec272adc7187fda72bb47799cf4e"
-  integrity sha512-ux73GEIZrApxIG/BDnpdxWE7r9TY3n+3HFAEp+LDJjSjpwpn2VXopd7GsjwsvmlAv5F3Jch8tzgzujFZkvqdoA==
+"@cspell/dict-ruby@^2.0.1":
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/@cspell/dict-ruby/-/dict-ruby-2.0.1.tgz#1cbd4d8803428bd421a5562b2d2bb4b3bae80bce"
+  integrity sha512-qGqhYfFeoBOashv/l0Kj5o4ilyvfq0s+t+r32juPOkOnbHz+hzxnJo2tMMg/L/UdjVV7Y8ovg4LDBC/seVrMYQ==
 
 "@cspell/dict-rust@^2.0.0":
   version "2.0.0"
@@ -1461,10 +1460,10 @@
   resolved "https://registry.yarnpkg.com/@cspell/dict-scala/-/dict-scala-2.0.0.tgz#b8098103bb03a13406c1c79f1769052353aafac4"
   integrity sha512-MUwA2YKpqaQOSR4V1/CVGRNk8Ii5kf6I8Ch+4/BhRZRQXuwWbi21rDRYWPqdQWps7VNzAbbMA+PQDWsD5YY38g==
 
-"@cspell/dict-software-terms@^2.1.0":
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/@cspell/dict-software-terms/-/dict-software-terms-2.1.1.tgz#1f59b63de03b0b288156112fb40bc1e8401ad294"
-  integrity sha512-PmmqysKSvNwksjEfXrzD1wEVvctR6qppxDhwNc4IQQjwpjmtN8e+8HiXxIbCsBcll1rO0vOmnhpXUdl+d9apXQ==
+"@cspell/dict-software-terms@^2.1.5":
+  version "2.1.5"
+  resolved "https://registry.yarnpkg.com/@cspell/dict-software-terms/-/dict-software-terms-2.1.5.tgz#4e2aa08839f37aa933cf1ac5196dbc7005bc8d3e"
+  integrity sha512-ylXWCsOJlYuucaMoHaHQLVaB8HeDrsCZ42a3jrTC/i6F/SF9I+4tBg4lMivd4w31bXBgILdbIvVHtWzJf+5m0A==
 
 "@cspell/dict-swift@^1.0.2":
   version "1.0.2"
@@ -1487,11 +1486,11 @@
   integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==
 
 "@discoveryjs/json-ext@^0.5.0":
-  version "0.5.6"
-  resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz#d5e0706cf8c6acd8c6032f8d54070af261bbbb2f"
-  integrity sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==
+  version "0.5.7"
+  resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70"
+  integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==
 
-"@drupal/once@^1.0.1":
+"@drupal/once@1.0.x":
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/@drupal/once/-/once-1.0.1.tgz#7c1ef480aec6d5fa4b5ae986afa5a607afc38482"
   integrity sha512-O8tQmNDBgSm3ADuFZ5OZlGxsrdsc+pEqd1NBoMpSzWwiOnWwC91tqDwnlX+mDh7sBJoJ+4vVwFh0NLUV4LPFvg==
@@ -1530,32 +1529,37 @@
   resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
   integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
 
+"@jridgewell/gen-mapping@^0.1.0":
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996"
+  integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==
+  dependencies:
+    "@jridgewell/set-array" "^1.0.0"
+    "@jridgewell/sourcemap-codec" "^1.4.10"
+
 "@jridgewell/resolve-uri@^3.0.3":
-  version "3.0.5"
-  resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz#68eb521368db76d040a6315cdb24bf2483037b9c"
-  integrity sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==
+  version "3.0.6"
+  resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.6.tgz#4ac237f4dabc8dd93330386907b97591801f7352"
+  integrity sha512-R7xHtBSNm+9SyvpJkdQl+qrM3Hm2fea3Ef197M3mUug+v+yR+Rhfbs7PBtcBUVnIWJ4JcAdjvij+c8hXS9p5aw==
+
+"@jridgewell/set-array@^1.0.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.0.tgz#1179863356ac8fbea64a5a4bcde93a4871012c01"
+  integrity sha512-SfJxIxNVYLTsKwzB3MoOQ1yxf4w/E6MdkvTgrgAt1bfxjSrLUoHMKrDOykwN14q65waezZIdqDneUIPh4/sKxg==
 
 "@jridgewell/sourcemap-codec@^1.4.10":
-  version "1.4.11"
-  resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz#771a1d8d744eeb71b6adb35808e1a6c7b9b8c8ec"
-  integrity sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==
+  version "1.4.12"
+  resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.12.tgz#7ed98f6fa525ffb7c56a2cbecb5f7bb91abd2baf"
+  integrity sha512-az/NhpIwP3K33ILr0T2bso+k2E/SLf8Yidd8mHl0n6sCQ4YdyC8qDhZA6kOPDNDBA56ZnIjngVl0U3jREA0BUA==
 
-"@jridgewell/trace-mapping@^0.3.0":
-  version "0.3.4"
-  resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz#f6a0832dffd5b8a6aaa633b7d9f8e8e94c83a0c3"
-  integrity sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==
+"@jridgewell/trace-mapping@^0.3.9":
+  version "0.3.9"
+  resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9"
+  integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==
   dependencies:
     "@jridgewell/resolve-uri" "^3.0.3"
     "@jridgewell/sourcemap-codec" "^1.4.10"
 
-"@mrmlnc/readdir-enhanced@^2.2.1":
-  version "2.2.1"
-  resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde"
-  integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==
-  dependencies:
-    call-me-maybe "^1.0.1"
-    glob-to-regexp "^0.3.0"
-
 "@nodelib/fs.scandir@2.1.5":
   version "2.1.5"
   resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
@@ -1569,11 +1573,6 @@
   resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
   integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
 
-"@nodelib/fs.stat@^1.1.2":
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
-  integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==
-
 "@nodelib/fs.walk@^1.2.3":
   version "1.2.8"
   resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
@@ -1599,9 +1598,9 @@
     rimraf "^3.0.2"
 
 "@popperjs/core@^2.9.2":
-  version "2.11.2"
-  resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.2.tgz#830beaec4b4091a9e9398ac50f865ddea52186b9"
-  integrity sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA==
+  version "2.11.5"
+  resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.5.tgz#db5a11bf66bdab39569719555b0f76e138d7bd64"
+  integrity sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==
 
 "@popperjs/core@^2.9.2 <2.11.0":
   version "2.10.2"
@@ -1609,11 +1608,11 @@
   integrity sha512-IXf3XA7+XyN7CP9gGh/XB0UxVMlvARGEgGXLubFICsUMGz6Q+DU+i4gGlpOxTjKvXjkJDJC8YdqdKkDj9qZHEQ==
 
 "@stylelint/postcss-css-in-js@^0.37.2":
-  version "0.37.2"
-  resolved "https://registry.yarnpkg.com/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.2.tgz#7e5a84ad181f4234a2480803422a47b8749af3d2"
-  integrity sha512-nEhsFoJurt8oUmieT8qy4nk81WRHmJynmVwn/Vts08PL9fhgIsMhk1GId5yAN643OzqEEb5S/6At2TZW7pqPDA==
+  version "0.37.3"
+  resolved "https://registry.yarnpkg.com/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.3.tgz#d149a385e07ae365b0107314c084cb6c11adbf49"
+  integrity sha512-scLk3cSH1H9KggSniseb2KNAU5D9FWc3H7BxCSAIdtU9OWIyw0zkEZ9qEKHryRM+SExYXRKNb7tOOVNAsQ3iwg==
   dependencies:
-    "@babel/core" ">=7.9.0"
+    "@babel/core" "^7.17.9"
 
 "@stylelint/postcss-markdown@^0.36.2":
   version "0.36.2"
@@ -1652,9 +1651,9 @@
     "@types/estree" "*"
 
 "@types/eslint@*":
-  version "8.4.1"
-  resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.1.tgz#c48251553e8759db9e656de3efc846954ac32304"
-  integrity sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==
+  version "8.4.2"
+  resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.2.tgz#48f2ac58ab9c631cb68845c3d956b28f79fad575"
+  integrity sha512-Z1nseZON+GEnFjJc04sv4NSALGjhFwy6K0HXt7qsn5ArfAKtb63dXNJHf+1YW6IpOIYRBGUbu3GwJdj8DGnCjA==
   dependencies:
     "@types/estree" "*"
     "@types/json-schema" "*"
@@ -1673,9 +1672,9 @@
     "@types/node" "*"
 
 "@types/json-schema@*", "@types/json-schema@^7.0.8":
-  version "7.0.9"
-  resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d"
-  integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==
+  version "7.0.11"
+  resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
+  integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==
 
 "@types/json5@^0.0.29":
   version "0.0.29"
@@ -1700,9 +1699,9 @@
   integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==
 
 "@types/node@*":
-  version "17.0.21"
-  resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.21.tgz#864b987c0c68d07b4345845c3e63b75edd143644"
-  integrity sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==
+  version "17.0.31"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.31.tgz#a5bb84ecfa27eec5e1c802c6bbf8139bdb163a5d"
+  integrity sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==
 
 "@types/normalize-package-data@^2.4.0":
   version "2.4.1"
@@ -1720,9 +1719,9 @@
   integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==
 
 "@types/yauzl@^2.9.1":
-  version "2.9.2"
-  resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.9.2.tgz#c48e5d56aff1444409e39fa164b0b4d4552a7b7a"
-  integrity sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==
+  version "2.10.0"
+  resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599"
+  integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==
   dependencies:
     "@types/node" "*"
 
@@ -1874,10 +1873,10 @@
   resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
   integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
 
-abab@^2.0.3, abab@^2.0.5:
-  version "2.0.5"
-  resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a"
-  integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==
+abab@^2.0.5, abab@^2.0.6:
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291"
+  integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==
 
 acorn-globals@^6.0.0:
   version "6.0.0"
@@ -1923,9 +1922,9 @@ acorn@^7.1.1, acorn@^7.4.0:
   integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
 
 acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.0:
-  version "8.7.0"
-  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf"
-  integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==
+  version "8.7.1"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30"
+  integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==
 
 agent-base@6, agent-base@^6.0.0, agent-base@^6.0.2:
   version "6.0.2"
@@ -1958,9 +1957,9 @@ ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5:
     uri-js "^4.2.2"
 
 ajv@^8.0.1:
-  version "8.10.0"
-  resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.10.0.tgz#e573f719bd3af069017e3b66538ab968d040e54d"
-  integrity sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==
+  version "8.11.0"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f"
+  integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==
   dependencies:
     fast-deep-equal "^3.1.1"
     json-schema-traverse "^1.0.0"
@@ -1978,14 +1977,14 @@ ansi-colors@^4.1.1:
   integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
 
 ansi-regex@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
-  integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1"
+  integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==
 
 ansi-regex@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
-  integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed"
+  integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==
 
 ansi-regex@^5.0.1:
   version "5.0.1"
@@ -2034,29 +2033,14 @@ aria-query@^4.2.2:
     "@babel/runtime" "^7.10.2"
     "@babel/runtime-corejs3" "^7.10.2"
 
-arr-diff@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
-  integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
-
-arr-flatten@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
-  integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
-
-arr-union@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
-  integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
-
-array-includes@^3.1.3, array-includes@^3.1.4:
-  version "3.1.4"
-  resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9"
-  integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==
+array-includes@^3.1.4:
+  version "3.1.5"
+  resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb"
+  integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==
   dependencies:
     call-bind "^1.0.2"
-    define-properties "^1.1.3"
-    es-abstract "^1.19.1"
+    define-properties "^1.1.4"
+    es-abstract "^1.19.5"
     get-intrinsic "^1.1.1"
     is-string "^1.0.7"
 
@@ -2065,45 +2049,30 @@ array-timsort@^1.0.3:
   resolved "https://registry.yarnpkg.com/array-timsort/-/array-timsort-1.0.3.tgz#3c9e4199e54fb2b9c3fe5976396a21614ef0d926"
   integrity sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==
 
-array-union@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
-  integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=
-  dependencies:
-    array-uniq "^1.0.1"
-
 array-union@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
   integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
 
-array-uniq@^1.0.1:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
-  integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
-
-array-unique@^0.3.2:
-  version "0.3.2"
-  resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
-  integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
-
 array.prototype.flat@^1.2.5:
-  version "1.2.5"
-  resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz#07e0975d84bbc7c48cd1879d609e682598d33e13"
-  integrity sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b"
+  integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==
   dependencies:
     call-bind "^1.0.2"
     define-properties "^1.1.3"
-    es-abstract "^1.19.0"
+    es-abstract "^1.19.2"
+    es-shim-unscopables "^1.0.0"
 
 array.prototype.flatmap@^1.2.5:
-  version "1.2.5"
-  resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz#908dc82d8a406930fdf38598d51e7411d18d4446"
-  integrity sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz#a7e8ed4225f4788a70cd910abcf0791e76a5534f"
+  integrity sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==
   dependencies:
-    call-bind "^1.0.0"
+    call-bind "^1.0.2"
     define-properties "^1.1.3"
-    es-abstract "^1.19.0"
+    es-abstract "^1.19.2"
+    es-shim-unscopables "^1.0.0"
 
 arrify@^1.0.1:
   version "1.0.1"
@@ -2127,11 +2096,6 @@ assertion-error@1.1.0, assertion-error@^1.1.0:
   resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b"
   integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==
 
-assign-symbols@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
-  integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
-
 ast-types-flow@^0.0.7:
   version "0.0.7"
   resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
@@ -2149,21 +2113,16 @@ astral-regex@^2.0.0:
   resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
   integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
 
-async@0.9.x:
-  version "0.9.2"
-  resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
-  integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=
+async@^3.2.3:
+  version "3.2.3"
+  resolved "https://registry.yarnpkg.com/async/-/async-3.2.3.tgz#ac53dafd3f4720ee9e8a160628f18ea91df196c9"
+  integrity sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==
 
 asynckit@^0.4.0:
   version "0.4.0"
   resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
   integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
 
-atob@^2.1.2:
-  version "2.1.2"
-  resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
-  integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
-
 autoprefixer@^9.6.1, autoprefixer@^9.8.6:
   version "9.8.8"
   resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.8.tgz#fd4bd4595385fa6f06599de749a4d5f7a474957a"
@@ -2240,10 +2199,10 @@ babel-plugin-polyfill-regenerator@^0.3.0:
   dependencies:
     "@babel/helper-define-polyfill-provider" "^0.3.1"
 
-backbone@1.4.0:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/backbone/-/backbone-1.4.0.tgz#54db4de9df7c3811c3f032f34749a4cd27f3bd12"
-  integrity sha512-RLmDrRXkVdouTg38jcgHhyQ/2zjg7a8E6sz2zxfz21Hh17xDJYUHBZimVIt5fUyS8vbfpeSmTL3gUjTEvUV3qQ==
+backbone@1.4.x:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/backbone/-/backbone-1.4.1.tgz#099a78184bc07b034048a8332229c2ccca1e3e62"
+  integrity sha512-ADy1ztN074YkWbHi8ojJVFe3vAanO/lrzMGZWUClIP7oDD/Pjy2vrASraUP+2EVCfIiTtCW4FChVow01XneivA==
   dependencies:
     underscore ">=1.8.3"
 
@@ -2262,19 +2221,6 @@ balanced-match@^2.0.0:
   resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-2.0.0.tgz#dc70f920d78db8b858535795867bf48f820633d9"
   integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==
 
-base@^0.11.1:
-  version "0.11.2"
-  resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
-  integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
-  dependencies:
-    cache-base "^1.0.1"
-    class-utils "^0.3.5"
-    component-emitter "^1.2.1"
-    define-property "^1.0.0"
-    isobject "^3.0.1"
-    mixin-deep "^1.2.0"
-    pascalcase "^0.1.1"
-
 bcrypt-pbkdf@^1.0.0:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
@@ -2310,23 +2256,14 @@ brace-expansion@^1.1.7:
     balanced-match "^1.0.0"
     concat-map "0.0.1"
 
-braces@^2.3.1:
-  version "2.3.2"
-  resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
-  integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+brace-expansion@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
+  integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
   dependencies:
-    arr-flatten "^1.1.0"
-    array-unique "^0.3.2"
-    extend-shallow "^2.0.1"
-    fill-range "^4.0.0"
-    isobject "^3.0.1"
-    repeat-element "^1.1.2"
-    snapdragon "^0.8.1"
-    snapdragon-node "^2.0.1"
-    split-string "^3.0.2"
-    to-regex "^3.0.1"
+    balanced-match "^1.0.0"
 
-braces@^3.0.1, braces@~3.0.2:
+braces@^3.0.2, braces@~3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
   integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
@@ -2343,26 +2280,15 @@ browser-stdout@1.3.1:
   resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
   integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
 
-browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.17.5, browserslist@^4.19.1, browserslist@^4.6.4:
-  version "4.19.3"
-  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.3.tgz#29b7caad327ecf2859485f696f9604214bedd383"
-  integrity sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg==
-  dependencies:
-    caniuse-lite "^1.0.30001312"
-    electron-to-chromium "^1.4.71"
-    escalade "^3.1.1"
-    node-releases "^2.0.2"
-    picocolors "^1.0.0"
-
-browserslist@^4.16.6:
-  version "4.20.2"
-  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.2.tgz#567b41508757ecd904dab4d1c646c612cd3d4f88"
-  integrity sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==
+browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.20.2, browserslist@^4.20.3, browserslist@^4.6.4:
+  version "4.20.3"
+  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.3.tgz#eb7572f49ec430e054f56d52ff0ebe9be915f8bf"
+  integrity sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==
   dependencies:
-    caniuse-lite "^1.0.30001317"
-    electron-to-chromium "^1.4.84"
+    caniuse-lite "^1.0.30001332"
+    electron-to-chromium "^1.4.118"
     escalade "^3.1.1"
-    node-releases "^2.0.2"
+    node-releases "^2.0.3"
     picocolors "^1.0.0"
 
 buffer-crc32@~0.2.3:
@@ -2404,21 +2330,6 @@ cacache@^15.0.5:
     tar "^6.0.2"
     unique-filename "^1.1.1"
 
-cache-base@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
-  integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
-  dependencies:
-    collection-visit "^1.0.0"
-    component-emitter "^1.2.1"
-    get-value "^2.0.6"
-    has-value "^1.0.0"
-    isobject "^3.0.1"
-    set-value "^2.0.0"
-    to-object-path "^0.3.0"
-    union-value "^1.0.0"
-    unset-value "^1.0.0"
-
 call-bind@^1.0.0, call-bind@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
@@ -2427,11 +2338,6 @@ call-bind@^1.0.0, call-bind@^1.0.2:
     function-bind "^1.1.1"
     get-intrinsic "^1.0.2"
 
-call-me-maybe@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b"
-  integrity sha1-JtII6onje1y95gJQoV8DHBak1ms=
-
 callsites@^3.0.0, callsites@^3.1.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
@@ -2466,15 +2372,10 @@ caniuse-api@^3.0.0:
     lodash.memoize "^4.1.2"
     lodash.uniq "^4.5.0"
 
-caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001312:
-  version "1.0.30001312"
-  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz#e11eba4b87e24d22697dae05455d5aea28550d5f"
-  integrity sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==
-
-caniuse-lite@^1.0.30001317:
-  version "1.0.30001328"
-  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001328.tgz#0ed7a2ca65ec45872c613630201644237ba1e329"
-  integrity sha512-Ue55jHkR/s4r00FLNiX+hGMMuwml/QGqqzVeMQ5thUewznU2EdULFvI3JR7JJid6OrjJNfFvHY2G2dIjmRaDDQ==
+caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001332:
+  version "1.0.30001335"
+  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001335.tgz#899254a0b70579e5a957c32dced79f0727c61f2a"
+  integrity sha512-ddP1Tgm7z2iIxu6QTtbZUv6HJxSaV/PZeSrWFZtbY4JZ69tOeNhBCl3HyRQgeNZKE5AOn1kpV7fhljigy0Ty3w==
 
 caseless@~0.12.0:
   version "0.12.0"
@@ -2505,7 +2406,7 @@ chalk@^3.0.0:
     ansi-styles "^4.1.0"
     supports-color "^7.1.0"
 
-chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2:
+chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2:
   version "4.1.2"
   resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
   integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
@@ -2590,16 +2491,6 @@ ckeditor5@^34.0.0, ckeditor5@~34.0.0:
     "@ckeditor/ckeditor5-utils" "^34.0.0"
     "@ckeditor/ckeditor5-widget" "^34.0.0"
 
-class-utils@^0.3.5:
-  version "0.3.6"
-  resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
-  integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
-  dependencies:
-    arr-union "^3.1.0"
-    define-property "^0.2.5"
-    isobject "^3.0.0"
-    static-extend "^0.1.1"
-
 clean-stack@^2.0.0:
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
@@ -2655,14 +2546,6 @@ clone@^1.0.2:
   resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
   integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
 
-collection-visit@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
-  integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
-  dependencies:
-    map-visit "^1.0.0"
-    object-visit "^1.0.0"
-
 color-convert@^1.9.0:
   version "1.9.3"
   resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
@@ -2714,10 +2597,10 @@ commander@^7.0.0, commander@^7.2.0:
   resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
   integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
 
-commander@^9.0.0:
-  version "9.0.0"
-  resolved "https://registry.yarnpkg.com/commander/-/commander-9.0.0.tgz#86d58f24ee98126568936bd1d3574e0308a99a40"
-  integrity sha512-JJfP2saEKbQqvW+FI93OYUB4ByV5cizMpFMiiJI8xDbBvQvSkIk0VvQdn1CZ8mqAO8Loq2h0gYTYtDFUZUeERw==
+commander@^9.2.0:
+  version "9.2.0"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-9.2.0.tgz#6e21014b2ed90d8b7c9647230d8b7a94a4a419a9"
+  integrity sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==
 
 comment-json@^4.2.2:
   version "4.2.2"
@@ -2735,11 +2618,6 @@ commondir@^1.0.1:
   resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
   integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
 
-component-emitter@^1.2.1:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
-  integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
-
 concat-map@0.0.1:
   version "0.0.1"
   resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
@@ -2769,23 +2647,18 @@ convert-source-map@^1.7.0:
   dependencies:
     safe-buffer "~5.1.1"
 
-copy-descriptor@^0.1.0:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
-  integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
-
-core-js-compat@^3.20.2, core-js-compat@^3.21.0:
-  version "3.21.1"
-  resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.21.1.tgz#cac369f67c8d134ff8f9bd1623e3bc2c42068c82"
-  integrity sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g==
+core-js-compat@^3.21.0, core-js-compat@^3.22.1:
+  version "3.22.4"
+  resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.22.4.tgz#d700f451e50f1d7672dcad0ac85d910e6691e579"
+  integrity sha512-dIWcsszDezkFZrfm1cnB4f/J85gyhiCpxbgBdohWCDtSVuAaChTSpPV7ldOQf/Xds2U5xCIJZOK82G4ZPAIswA==
   dependencies:
-    browserslist "^4.19.1"
+    browserslist "^4.20.3"
     semver "7.0.0"
 
 core-js-pure@^3.20.2:
-  version "3.21.1"
-  resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.21.1.tgz#8c4d1e78839f5f46208de7230cebfb72bc3bdb51"
-  integrity sha512-12VZfFIu+wyVbBebyHmRTuEE/tZrB4tJToWcwAMcsp3h4+sHR+fMJWbKpYiCRWlhFBq+KNyO8rIV9rTkeVmznQ==
+  version "3.22.4"
+  resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.22.4.tgz#a992210f4cad8b32786b8654563776c56b0e0d0a"
+  integrity sha512-4iF+QZkpzIz0prAFuepmxwJ2h5t4agvE8WPYqs2mjLJMNNwJOnpch76w2Q7bUfCPEv/V7wpvOfog0w273M+ZSw==
 
 core-util-is@1.0.2:
   version "1.0.2"
@@ -2829,77 +2702,78 @@ crypto-random-string@^2.0.0:
   resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5"
   integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==
 
-cspell-gitignore@^5.18.5:
-  version "5.18.5"
-  resolved "https://registry.yarnpkg.com/cspell-gitignore/-/cspell-gitignore-5.18.5.tgz#fc8024f13475d85dae1f447864ef56aed3966fe3"
-  integrity sha512-YKYFYMswkia0Uc5CMOapLwo8OKRfP+QbqyODTJ7IJACT7KCOSEj7A3B250LR2mWyvThyIUB+2c7+6ePdFCnh2g==
+cspell-gitignore@^5.20.0:
+  version "5.20.0"
+  resolved "https://registry.yarnpkg.com/cspell-gitignore/-/cspell-gitignore-5.20.0.tgz#0c4f405559383663a9c24fab5cf829e7b19abed5"
+  integrity sha512-oWzoHcaidX6jFON6vwiH3cA1HqkGmawD1DWt+fPWKrea9/SuTcvFxm+RbqO4DjwXEAMIczyPOWo+SCM0VbcCrA==
   dependencies:
-    cspell-glob "^5.18.5"
+    cspell-glob "^5.20.0"
     find-up "^5.0.0"
 
-cspell-glob@^5.18.5:
-  version "5.18.5"
-  resolved "https://registry.yarnpkg.com/cspell-glob/-/cspell-glob-5.18.5.tgz#1cc757bb2028cc12bf5acd9336cfc505cd5cd311"
-  integrity sha512-Tr/wMHpJ5zvD4qV4d5is1WJ6OQZSQSjiWoLCQ8pslpltGJhjYXPh3W9A8n4Ghr4AUUJNLKEQyCX+Z1kcA3hgOQ==
+cspell-glob@^5.20.0:
+  version "5.20.0"
+  resolved "https://registry.yarnpkg.com/cspell-glob/-/cspell-glob-5.20.0.tgz#2bda5cc90bc6694ce2eb1a5aaee54196fc9b37a9"
+  integrity sha512-eyo8NYH4GapHxfilMarwvf1HIyGWT3gWuFlYkmQjYVx3KjzmfR1Y1x9S068wmwjp9kKCu9T6Vj71EGG+9R59Lw==
   dependencies:
-    micromatch "^4.0.4"
+    micromatch "^4.0.5"
 
-cspell-io@^5.18.5:
-  version "5.18.5"
-  resolved "https://registry.yarnpkg.com/cspell-io/-/cspell-io-5.18.5.tgz#320c0c67b7f0f5046b1d7e31d4372fe1a65366a6"
-  integrity sha512-Ar2shXmKtLP935Linv+162xY6SNqIrwLI3rBRXs0/KnD/YdcLJQB0iBgFqvfvg7TcPg+EZOf9Oc6EvTLg2eprg==
+cspell-io@^5.20.0:
+  version "5.20.0"
+  resolved "https://registry.yarnpkg.com/cspell-io/-/cspell-io-5.20.0.tgz#2f7fc676a068acc641f3bd77ddca7f72985b6ee5"
+  integrity sha512-wgqqpVIhtMh+/+3YfHt8cDfrD7OLF+xQlStlURj8AJwEJ0xu16zyI9S5zcig+83+0QyzuMdxfZiMgbdQxWEvOg==
 
-cspell-lib@^5.18.5:
-  version "5.18.5"
-  resolved "https://registry.yarnpkg.com/cspell-lib/-/cspell-lib-5.18.5.tgz#76b169399c5e635cde59381d86260019b6b42909"
-  integrity sha512-yrUk3MbRXy/YGNIcLfURDnw4fRiXcbHo9K5B6IhwYfHKc3VM6QgvEQ0ce44uzZ+AEZzWuQ++GbhUih+bSJ87DQ==
+cspell-lib@^5.20.0:
+  version "5.20.0"
+  resolved "https://registry.yarnpkg.com/cspell-lib/-/cspell-lib-5.20.0.tgz#0eb5797cb32ce03db7ad7e14649296c434e3d142"
+  integrity sha512-Fc7+3ExF2pNS8BsQTXSMkhR6ITbpyiMQf+y4ZH/aBml09+O6lrbj4j2tJx/oR4XvDEA8uQkV/5lMGdU+otC1KQ==
   dependencies:
-    "@cspell/cspell-bundled-dicts" "^5.18.5"
-    "@cspell/cspell-types" "^5.18.5"
+    "@cspell/cspell-bundled-dicts" "^5.20.0"
+    "@cspell/cspell-pipe" "^5.20.0"
+    "@cspell/cspell-types" "^5.20.0"
     clear-module "^4.1.2"
     comment-json "^4.2.2"
     configstore "^5.0.1"
     cosmiconfig "^7.0.1"
-    cspell-glob "^5.18.5"
-    cspell-io "^5.18.5"
-    cspell-trie-lib "^5.18.5"
-    fast-equals "^3.0.0"
+    cspell-glob "^5.20.0"
+    cspell-io "^5.20.0"
+    cspell-trie-lib "^5.20.0"
+    fast-equals "^3.0.2"
     find-up "^5.0.0"
-    fs-extra "^10.0.0"
+    fs-extra "^10.1.0"
     gensequence "^3.1.1"
     import-fresh "^3.3.0"
     resolve-from "^5.0.0"
     resolve-global "^1.0.0"
+    vscode-languageserver-textdocument "^1.0.4"
     vscode-uri "^3.0.3"
 
-cspell-trie-lib@^5.18.5:
-  version "5.18.5"
-  resolved "https://registry.yarnpkg.com/cspell-trie-lib/-/cspell-trie-lib-5.18.5.tgz#dff995e8773857564d4bda91e64626838c69674a"
-  integrity sha512-FifImmkcArPYiE8fLXcbB/yS15QyWwvHw/gpCPEkcuJMJH2gxC+HOE909JnBsyPyjCaX5gHWiIf7ePjdXlWsDg==
+cspell-trie-lib@^5.20.0:
+  version "5.20.0"
+  resolved "https://registry.yarnpkg.com/cspell-trie-lib/-/cspell-trie-lib-5.20.0.tgz#3a13ba0477a36ecb16311e85b270bcc2b4300f37"
+  integrity sha512-ET95dJh+OJ04PdLI9dKqAa+dDu47tXcUxCR6uKiZ+qZ18v1Zl986s8q89m9c+xpo7Leqh0rF6Zsw3M9Cjy6Jhw==
   dependencies:
-    "@cspell/cspell-pipe" "^5.18.5"
-    fs-extra "^10.0.0"
+    "@cspell/cspell-pipe" "^5.20.0"
+    fs-extra "^10.1.0"
     gensequence "^3.1.1"
 
 cspell@^5.0.0:
-  version "5.18.5"
-  resolved "https://registry.yarnpkg.com/cspell/-/cspell-5.18.5.tgz#944b27def0607d8938bcffeae6df38f60b26bf11"
-  integrity sha512-rfk7sSZO304olxBXUFfec3YZL0gIyvjggwicGEgsweuh0Efdeq0zMmUV2sMckSOH9TVJdxW/DxTqjG+DLz8w+A==
+  version "5.20.0"
+  resolved "https://registry.yarnpkg.com/cspell/-/cspell-5.20.0.tgz#580909fc1283aeda43f1c583188ea046417d340b"
+  integrity sha512-lXAS14ZlfJfOI3FgoAAfyl/AlTB8T+ayHmKrHxwuRRUvN4IBT4y8d7tdjWDj7/bsM4u5M5WrlAXg6vXH3Fg5bA==
   dependencies:
-    "@cspell/cspell-pipe" "^5.18.5"
+    "@cspell/cspell-pipe" "^5.20.0"
     chalk "^4.1.2"
-    commander "^9.0.0"
-    comment-json "^4.2.2"
-    cspell-gitignore "^5.18.5"
-    cspell-glob "^5.18.5"
-    cspell-lib "^5.18.5"
+    commander "^9.2.0"
+    cspell-gitignore "^5.20.0"
+    cspell-glob "^5.20.0"
+    cspell-lib "^5.20.0"
     fast-json-stable-stringify "^2.1.0"
     file-entry-cache "^6.0.1"
-    fs-extra "^10.0.0"
+    fs-extra "^10.1.0"
     get-stdin "^8.0.0"
-    glob "^7.2.0"
+    glob "^8.0.1"
     imurmurhash "^0.1.4"
-    semver "^7.3.5"
+    semver "^7.3.7"
     strip-ansi "^6.0.1"
     vscode-uri "^3.0.3"
 
@@ -2954,7 +2828,7 @@ css-what@^6.0.1:
   resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
   integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
 
-css.escape@^1.5.1:
+css.escape@1.5.x:
   version "1.5.1"
   resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb"
   integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=
@@ -3070,13 +2944,13 @@ data-uri-to-buffer@3:
   integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==
 
 data-urls@^3.0.1:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.1.tgz#597fc2ae30f8bc4dbcf731fcd1b1954353afc6f8"
-  integrity sha512-Ds554NeT5Gennfoo9KN50Vh6tpgtvYEwraYjejXnyTpu1C7oXKxdFk75REooENHE8ndTVOJuv+BEs4/J/xcozw==
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143"
+  integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==
   dependencies:
-    abab "^2.0.3"
+    abab "^2.0.6"
     whatwg-mimetype "^3.0.0"
-    whatwg-url "^10.0.0"
+    whatwg-url "^11.0.0"
 
 debug@3.2.6:
   version "3.2.6"
@@ -3086,9 +2960,9 @@ debug@3.2.6:
     ms "^2.1.1"
 
 debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1:
-  version "4.3.3"
-  resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664"
-  integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==
+  version "4.3.4"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+  integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
   dependencies:
     ms "2.1.2"
 
@@ -3099,7 +2973,7 @@ debug@4.3.1:
   dependencies:
     ms "2.1.2"
 
-debug@^2.2.0, debug@^2.3.3, debug@^2.6.9:
+debug@^2.6.9:
   version "2.6.9"
   resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
   integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
@@ -3131,11 +3005,6 @@ decimal.js@^10.3.1:
   resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783"
   integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==
 
-decode-uri-component@^0.2.0:
-  version "0.2.0"
-  resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
-  integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
-
 deep-is@^0.1.3, deep-is@~0.1.3:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
@@ -3153,34 +3022,13 @@ defaults@^1.0.3:
   dependencies:
     clone "^1.0.2"
 
-define-properties@^1.1.2, define-properties@^1.1.3:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
-  integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
-  dependencies:
-    object-keys "^1.0.12"
-
-define-property@^0.2.5:
-  version "0.2.5"
-  resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
-  integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
-  dependencies:
-    is-descriptor "^0.1.0"
-
-define-property@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
-  integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
-  dependencies:
-    is-descriptor "^1.0.0"
-
-define-property@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
-  integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
+define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1"
+  integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==
   dependencies:
-    is-descriptor "^1.0.2"
-    isobject "^3.0.1"
+    has-property-descriptors "^1.0.0"
+    object-keys "^1.1.1"
 
 degenerator@^3.0.1:
   version "3.0.2"
@@ -3240,14 +3088,6 @@ diff@3.5.0:
   resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
   integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
 
-dir-glob@2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034"
-  integrity sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==
-  dependencies:
-    arrify "^1.0.1"
-    path-type "^3.0.0"
-
 dir-glob@^3.0.1:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
@@ -3291,12 +3131,7 @@ domelementtype@1, domelementtype@^1.3.1:
   resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
   integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
 
-domelementtype@^2.0.1:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57"
-  integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==
-
-domelementtype@^2.2.0:
+domelementtype@^2.0.1, domelementtype@^2.2.0:
   version "2.3.0"
   resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
   integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
@@ -3372,21 +3207,16 @@ ecc-jsbn@~0.1.1:
     safer-buffer "^2.1.0"
 
 ejs@^3.1.6:
-  version "3.1.6"
-  resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.6.tgz#5bfd0a0689743bb5268b3550cceeebbc1702822a"
-  integrity sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==
+  version "3.1.7"
+  resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.7.tgz#c544d9c7f715783dd92f0bddcf73a59e6962d006"
+  integrity sha512-BIar7R6abbUxDA3bfXrO4DSgwo8I+fB5/1zgujl3HLLjwd6+9iOnrT+t3grn2qbk9vOgBubXOFwX2m9axoFaGw==
   dependencies:
-    jake "^10.6.1"
-
-electron-to-chromium@^1.4.71:
-  version "1.4.75"
-  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.75.tgz#d1ad9bb46f2f1bf432118c2be21d27ffeae82fdd"
-  integrity sha512-LxgUNeu3BVU7sXaKjUDD9xivocQLxFtq6wgERrutdY/yIOps3ODOZExK1jg8DTEg4U8TUCb5MLGeWFOYuxjF3Q==
+    jake "^10.8.5"
 
-electron-to-chromium@^1.4.84:
-  version "1.4.107"
-  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.107.tgz#564257014ab14033b4403a309c813123c58a3fb9"
-  integrity sha512-Huen6taaVrUrSy8o7mGStByba8PfOWWluHNxSHGBrCgEdFVLtvdQDBr9LBCF9Uci8SYxh28QNNMO0oC17wbGAg==
+electron-to-chromium@^1.4.118:
+  version "1.4.132"
+  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.132.tgz#b64599eb018221e52e2e4129de103b03a413c55d"
+  integrity sha512-JYdZUw/1068NWN+SwXQ7w6Ue0bWYGihvSUNNQwurvcDV/SM7vSiGZ3NuFvFgoEiCs4kB8xs3cX2an3wB7d4TBw==
 
 emoji-regex@^7.0.1:
   version "7.0.3"
@@ -3415,10 +3245,10 @@ end-of-stream@^1.1.0:
   dependencies:
     once "^1.4.0"
 
-enhanced-resolve@^5.8.3:
-  version "5.9.1"
-  resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.9.1.tgz#e898cea44d9199fd92137496cff5691b910fb43e"
-  integrity sha512-jdyZMwCQ5Oj4c5+BTnkxPgDZO/BJzh/ADDmKebayyzNwjVX1AFCeGkOfxNx0mHi2+8BKC5VxUYiw3TIvoT7vhw==
+enhanced-resolve@^5.9.2:
+  version "5.9.3"
+  resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz#44a342c012cbc473254af5cc6ae20ebd0aae5d88"
+  integrity sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==
   dependencies:
     graceful-fs "^4.2.4"
     tapable "^2.2.0"
@@ -3452,10 +3282,10 @@ error-ex@^1.3.1:
   dependencies:
     is-arrayish "^0.2.1"
 
-es-abstract@^1.19.0, es-abstract@^1.19.1:
-  version "1.19.1"
-  resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3"
-  integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==
+es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5:
+  version "1.19.5"
+  resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.5.tgz#a2cb01eb87f724e815b278b0dd0d00f36ca9a7f1"
+  integrity sha512-Aa2G2+Rd3b6kxEUKTF4TaW67czBLyAv3z7VOhYRU50YBx+bbsYZ9xQP4lMNazePuFlybXI0V4MruPos7qUo5fA==
   dependencies:
     call-bind "^1.0.2"
     es-to-primitive "^1.2.1"
@@ -3463,15 +3293,15 @@ es-abstract@^1.19.0, es-abstract@^1.19.1:
     get-intrinsic "^1.1.1"
     get-symbol-description "^1.0.0"
     has "^1.0.3"
-    has-symbols "^1.0.2"
+    has-symbols "^1.0.3"
     internal-slot "^1.0.3"
     is-callable "^1.2.4"
-    is-negative-zero "^2.0.1"
+    is-negative-zero "^2.0.2"
     is-regex "^1.1.4"
-    is-shared-array-buffer "^1.0.1"
+    is-shared-array-buffer "^1.0.2"
     is-string "^1.0.7"
-    is-weakref "^1.0.1"
-    object-inspect "^1.11.0"
+    is-weakref "^1.0.2"
+    object-inspect "^1.12.0"
     object-keys "^1.1.1"
     object.assign "^4.1.2"
     string.prototype.trimend "^1.0.4"
@@ -3483,6 +3313,13 @@ es-module-lexer@^0.9.0:
   resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19"
   integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==
 
+es-shim-unscopables@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241"
+  integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==
+  dependencies:
+    has "^1.0.3"
+
 es-to-primitive@^1.2.1:
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
@@ -3492,7 +3329,7 @@ es-to-primitive@^1.2.1:
     is-date-object "^1.0.1"
     is-symbol "^1.0.2"
 
-es6-promise@^4.2.8:
+es6-promise@4.2.x:
   version "4.2.8"
   resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a"
   integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==
@@ -3569,7 +3406,7 @@ eslint-import-resolver-node@^0.3.6:
     debug "^3.2.7"
     resolve "^1.20.0"
 
-eslint-module-utils@^2.7.2:
+eslint-module-utils@^2.7.3:
   version "2.7.3"
   resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee"
   integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==
@@ -3578,23 +3415,23 @@ eslint-module-utils@^2.7.2:
     find-up "^2.1.0"
 
 eslint-plugin-import@^2.13.0:
-  version "2.25.4"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz#322f3f916a4e9e991ac7af32032c25ce313209f1"
-  integrity sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==
+  version "2.26.0"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b"
+  integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==
   dependencies:
     array-includes "^3.1.4"
     array.prototype.flat "^1.2.5"
     debug "^2.6.9"
     doctrine "^2.1.0"
     eslint-import-resolver-node "^0.3.6"
-    eslint-module-utils "^2.7.2"
+    eslint-module-utils "^2.7.3"
     has "^1.0.3"
-    is-core-module "^2.8.0"
+    is-core-module "^2.8.1"
     is-glob "^4.0.3"
-    minimatch "^3.0.4"
+    minimatch "^3.1.2"
     object.values "^1.1.5"
-    resolve "^1.20.0"
-    tsconfig-paths "^3.12.0"
+    resolve "^1.22.0"
+    tsconfig-paths "^3.14.1"
 
 eslint-plugin-jquery@^1.5.1:
   version "1.5.1"
@@ -3627,14 +3464,14 @@ eslint-plugin-prettier@^3.1.2:
     prettier-linter-helpers "^1.0.0"
 
 eslint-plugin-react-hooks@^4.1.2:
-  version "4.3.0"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz#318dbf312e06fab1c835a4abef00121751ac1172"
-  integrity sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==
+  version "4.5.0"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.5.0.tgz#5f762dfedf8b2cf431c689f533c9d3fa5dcf25ad"
+  integrity sha512-8k1gRt7D7h03kd+SAAlzXkQwWK22BnK6GKZG+FJA6BAGy22CFvl8kCIXKpVux0cCxMWDQUPqSok0LKaZ0aOcCw==
 
 eslint-plugin-react@^7.10.0:
-  version "7.29.2"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.29.2.tgz#2d4da69d30d0a736efd30890dc6826f3e91f3f7c"
-  integrity sha512-ypEBTKOy5liFQXZWMchJ3LN0JX1uPI6n7MN7OPHKacqXAxq5gYC30TdO7wqGYQyxD1OrzpobdHC3hDmlRWDg9w==
+  version "7.29.4"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.29.4.tgz#4717de5227f55f3801a5fd51a16a4fa22b5914d2"
+  integrity sha512-CVCXajliVh509PcZYRFyu/BoUEz452+jtQJq2b3Bae4v3xBUWPLCmtmBM+ZinG4MzwmxJgJ2M5rMqhqLVn7MtQ==
   dependencies:
     array-includes "^3.1.4"
     array.prototype.flatmap "^1.2.5"
@@ -3802,53 +3639,11 @@ execall@^2.0.0:
   dependencies:
     clone-regexp "^2.1.0"
 
-expand-brackets@^2.1.4:
-  version "2.1.4"
-  resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
-  integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
-  dependencies:
-    debug "^2.3.3"
-    define-property "^0.2.5"
-    extend-shallow "^2.0.1"
-    posix-character-classes "^0.1.0"
-    regex-not "^1.0.0"
-    snapdragon "^0.8.1"
-    to-regex "^3.0.1"
-
-extend-shallow@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
-  integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
-  dependencies:
-    is-extendable "^0.1.0"
-
-extend-shallow@^3.0.0, extend-shallow@^3.0.2:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
-  integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
-  dependencies:
-    assign-symbols "^1.0.0"
-    is-extendable "^1.0.1"
-
 extend@^3.0.0, extend@~3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
   integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
 
-extglob@^2.0.4:
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
-  integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
-  dependencies:
-    array-unique "^0.3.2"
-    define-property "^1.0.0"
-    expand-brackets "^2.1.4"
-    extend-shallow "^2.0.1"
-    fragment-cache "^0.2.1"
-    regex-not "^1.0.0"
-    snapdragon "^0.8.1"
-    to-regex "^3.0.1"
-
 extract-zip@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a"
@@ -3884,24 +3679,12 @@ fast-diff@^1.1.2:
   resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03"
   integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==
 
-fast-equals@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-3.0.0.tgz#efbe679d4c0d74040f61d4dda3e6bcb3bdccab82"
-  integrity sha512-Af7nSOpf7617idrFg0MJY6x7yVDPoO80aSwtKTC0afT8B/SsmvTpA+2a+uPLmhVF5IHmY5NPuBAA3dJrp55rJA==
-
-fast-glob@^2.0.2:
-  version "2.2.7"
-  resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d"
-  integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==
-  dependencies:
-    "@mrmlnc/readdir-enhanced" "^2.2.1"
-    "@nodelib/fs.stat" "^1.1.2"
-    glob-parent "^3.1.0"
-    is-glob "^4.0.0"
-    merge2 "^1.2.3"
-    micromatch "^3.1.10"
+fast-equals@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-3.0.2.tgz#77f80047b381b6cb747130463ccc144e24c44097"
+  integrity sha512-iY0fAmW7fzxHp22VCRLpOgWbsWsF+DJWi1jhc8w+VGlJUiS+KcGZV2A8t+Q9oTQwhG3L1W8Lu/oe3ZyOPdhZjw==
 
-fast-glob@^3.0.3, fast-glob@^3.2.5, fast-glob@^3.2.9:
+fast-glob@^3.0.3, fast-glob@^3.2.11, fast-glob@^3.2.5, fast-glob@^3.2.9:
   version "3.2.11"
   resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9"
   integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==
@@ -3954,21 +3737,11 @@ file-uri-to-path@2:
   integrity sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==
 
 filelist@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.2.tgz#80202f21462d4d1c2e214119b1807c1bc0380e5b"
-  integrity sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==
-  dependencies:
-    minimatch "^3.0.4"
-
-fill-range@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
-  integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.3.tgz#448607750376484932f67ef1b9ff07386b036c83"
+  integrity sha512-LwjCsruLWQULGYKy7TX0OPtrL9kLpojOFKc5VCTxdFTV7w5zbsgqVKfnkKG7Qgjtq50gKfO56hJv88OfcGb70Q==
   dependencies:
-    extend-shallow "^2.0.1"
-    is-number "^3.0.0"
-    repeat-string "^1.6.1"
-    to-regex-range "^2.1.0"
+    minimatch "^5.0.1"
 
 fill-range@^7.0.1:
   version "7.0.1"
@@ -4051,14 +3824,9 @@ flatten@^1.0.2:
   integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==
 
 follow-redirects@^1.14.0:
-  version "1.14.9"
-  resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.9.tgz#dd4ea157de7bfaf9ea9b3fbd85aa16951f78d8d7"
-  integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==
-
-for-in@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
-  integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
+  version "1.15.0"
+  resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.0.tgz#06441868281c86d0dda4ad8bdaead2d02dca89d4"
+  integrity sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ==
 
 forever-agent@~0.6.1:
   version "0.6.1"
@@ -4083,17 +3851,10 @@ form-data@~2.3.2:
     combined-stream "^1.0.6"
     mime-types "^2.1.12"
 
-fragment-cache@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
-  integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
-  dependencies:
-    map-cache "^0.2.2"
-
-fs-extra@^10.0.0:
-  version "10.0.1"
-  resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.1.tgz#27de43b4320e833f6867cc044bfce29fdf0ef3b8"
-  integrity sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==
+fs-extra@^10.1.0:
+  version "10.1.0"
+  resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf"
+  integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==
   dependencies:
     graceful-fs "^4.2.0"
     jsonfile "^6.0.1"
@@ -4143,6 +3904,11 @@ functional-red-black-tree@^1.0.1:
   resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
   integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
 
+functions-have-names@^1.2.2:
+  version "1.2.3"
+  resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
+  integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
+
 gensequence@^3.1.1:
   version "3.1.1"
   resolved "https://registry.yarnpkg.com/gensequence/-/gensequence-3.1.1.tgz#95c1afc7c0680f92942c17f2d6f83f3d26ea97af"
@@ -4209,11 +3975,6 @@ get-uri@3:
     fs-extra "^8.1.0"
     ftp "^0.3.10"
 
-get-value@^2.0.3, get-value@^2.0.6:
-  version "2.0.6"
-  resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
-  integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
-
 getpass@^0.1.1:
   version "0.1.7"
   resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
@@ -4221,14 +3982,6 @@ getpass@^0.1.1:
   dependencies:
     assert-plus "^1.0.0"
 
-glob-parent@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
-  integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=
-  dependencies:
-    is-glob "^3.1.0"
-    path-dirname "^1.0.0"
-
 glob-parent@^5.1.2, glob-parent@~5.1.2:
   version "5.1.2"
   resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
@@ -4236,11 +3989,6 @@ glob-parent@^5.1.2, glob-parent@~5.1.2:
   dependencies:
     is-glob "^4.0.1"
 
-glob-to-regexp@^0.3.0:
-  version "0.3.0"
-  resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab"
-  integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=
-
 glob-to-regexp@^0.4.1:
   version "0.4.1"
   resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
@@ -4258,7 +4006,7 @@ glob@7.1.3:
     once "^1.3.0"
     path-is-absolute "^1.0.0"
 
-glob@^7.0.0, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0:
+glob@^7.0.0, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
   version "7.2.0"
   resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
   integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
@@ -4270,6 +4018,18 @@ glob@^7.0.0, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0:
     once "^1.3.0"
     path-is-absolute "^1.0.0"
 
+glob@^8.0.1:
+  version "8.0.1"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.1.tgz#00308f5c035aa0b2a447cd37ead267ddff1577d3"
+  integrity sha512-cF7FYZZ47YzmCu7dDy50xSRRfO3ErRfrXuLZcNIuyiJEco0XSrGtuilG19L5xp3NcwTx7Gn+X6Tv3fmsUPTbow==
+  dependencies:
+    fs.realpath "^1.0.0"
+    inflight "^1.0.4"
+    inherits "2"
+    minimatch "^5.0.1"
+    once "^1.3.0"
+    path-is-absolute "^1.0.0"
+
 global-dirs@^0.1.1:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445"
@@ -4299,9 +4059,9 @@ globals@^11.1.0:
   integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
 
 globals@^13.6.0, globals@^13.9.0:
-  version "13.12.1"
-  resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.1.tgz#ec206be932e6c77236677127577aa8e50bf1c5cb"
-  integrity sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==
+  version "13.13.0"
+  resolved "https://registry.yarnpkg.com/globals/-/globals-13.13.0.tgz#ac32261060d8070e2719dd6998406e27d2b5727b"
+  integrity sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==
   dependencies:
     type-fest "^0.20.2"
 
@@ -4331,19 +4091,6 @@ globby@^11.0.1, globby@^11.0.3:
     merge2 "^1.4.1"
     slash "^3.0.0"
 
-globby@^8.0.1:
-  version "8.0.2"
-  resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d"
-  integrity sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==
-  dependencies:
-    array-union "^1.0.1"
-    dir-glob "2.0.0"
-    fast-glob "^2.0.2"
-    glob "^7.1.2"
-    ignore "^3.3.5"
-    pify "^3.0.0"
-    slash "^1.0.0"
-
 globjoin@^0.1.4:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43"
@@ -4357,9 +4104,9 @@ gonzales-pe@^4.3.0:
     minimist "^1.2.5"
 
 graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4, graceful-fs@^4.2.9:
-  version "4.2.9"
-  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96"
-  integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==
+  version "4.2.10"
+  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
+  integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
 
 growl@1.10.5:
   version "1.10.5"
@@ -4384,10 +4131,10 @@ hard-rejection@^2.1.0:
   resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883"
   integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==
 
-has-bigints@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113"
-  integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==
+has-bigints@^1.0.1, has-bigints@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
+  integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==
 
 has-flag@^3.0.0:
   version "3.0.0"
@@ -4404,7 +4151,14 @@ has-own-prop@^2.0.0:
   resolved "https://registry.yarnpkg.com/has-own-prop/-/has-own-prop-2.0.0.tgz#f0f95d58f65804f5d218db32563bb85b8e0417af"
   integrity sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==
 
-has-symbols@^1.0.0, has-symbols@^1.0.1, has-symbols@^1.0.2:
+has-property-descriptors@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861"
+  integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==
+  dependencies:
+    get-intrinsic "^1.1.1"
+
+has-symbols@^1.0.0, has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
   integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
@@ -4416,37 +4170,6 @@ has-tostringtag@^1.0.0:
   dependencies:
     has-symbols "^1.0.2"
 
-has-value@^0.3.1:
-  version "0.3.1"
-  resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
-  integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
-  dependencies:
-    get-value "^2.0.3"
-    has-values "^0.1.4"
-    isobject "^2.0.0"
-
-has-value@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
-  integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
-  dependencies:
-    get-value "^2.0.6"
-    has-values "^1.0.0"
-    isobject "^3.0.0"
-
-has-values@^0.1.4:
-  version "0.1.4"
-  resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
-  integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
-
-has-values@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
-  integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
-  dependencies:
-    is-number "^3.0.0"
-    kind-of "^4.0.0"
-
 has@^1.0.3:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
@@ -4479,9 +4202,9 @@ html-encoding-sniffer@^3.0.0:
     whatwg-encoding "^2.0.0"
 
 html-tags@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140"
-  integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.2.0.tgz#dbb3518d20b726524e4dd43de397eb0a95726961"
+  integrity sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==
 
 htmlparser2@^3.10.0:
   version "3.10.1"
@@ -4534,9 +4257,9 @@ http-signature@~1.2.0:
     sshpk "^1.7.0"
 
 https-proxy-agent@5, https-proxy-agent@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2"
-  integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
+  integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
   dependencies:
     agent-base "6"
     debug "4"
@@ -4560,11 +4283,6 @@ iconv-lite@0.6.3:
   dependencies:
     safer-buffer ">= 2.1.2 < 3.0.0"
 
-ignore@^3.3.5:
-  version "3.3.10"
-  resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
-  integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==
-
 ignore@^4.0.6:
   version "4.0.6"
   resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
@@ -4663,20 +4381,6 @@ ip@^1.1.5:
   resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
   integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
 
-is-accessor-descriptor@^0.1.6:
-  version "0.1.6"
-  resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
-  integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
-  dependencies:
-    kind-of "^3.0.2"
-
-is-accessor-descriptor@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
-  integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
-  dependencies:
-    kind-of "^6.0.0"
-
 is-alphabetical@^1.0.0:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d"
@@ -4717,11 +4421,6 @@ is-boolean-object@^1.1.0:
     call-bind "^1.0.2"
     has-tostringtag "^1.0.0"
 
-is-buffer@^1.1.5:
-  version "1.1.6"
-  resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
-  integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
-
 is-buffer@^2.0.0, is-buffer@~2.0.3:
   version "2.0.5"
   resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191"
@@ -4732,27 +4431,13 @@ is-callable@^1.1.4, is-callable@^1.2.4:
   resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945"
   integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==
 
-is-core-module@^2.2.0, is-core-module@^2.5.0, is-core-module@^2.8.0, is-core-module@^2.8.1:
-  version "2.8.1"
-  resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211"
-  integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==
+is-core-module@^2.2.0, is-core-module@^2.5.0, is-core-module@^2.8.1:
+  version "2.9.0"
+  resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69"
+  integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==
   dependencies:
     has "^1.0.3"
 
-is-data-descriptor@^0.1.4:
-  version "0.1.4"
-  resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
-  integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
-  dependencies:
-    kind-of "^3.0.2"
-
-is-data-descriptor@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
-  integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
-  dependencies:
-    kind-of "^6.0.0"
-
 is-date-object@^1.0.1:
   version "1.0.5"
   resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
@@ -4765,37 +4450,7 @@ is-decimal@^1.0.0:
   resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5"
   integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==
 
-is-descriptor@^0.1.0:
-  version "0.1.6"
-  resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
-  integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
-  dependencies:
-    is-accessor-descriptor "^0.1.6"
-    is-data-descriptor "^0.1.4"
-    kind-of "^5.0.0"
-
-is-descriptor@^1.0.0, is-descriptor@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
-  integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
-  dependencies:
-    is-accessor-descriptor "^1.0.0"
-    is-data-descriptor "^1.0.0"
-    kind-of "^6.0.2"
-
-is-extendable@^0.1.0, is-extendable@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
-  integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
-
-is-extendable@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
-  integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
-  dependencies:
-    is-plain-object "^2.0.4"
-
-is-extglob@^2.1.0, is-extglob@^2.1.1:
+is-extglob@^2.1.1:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
   integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
@@ -4810,13 +4465,6 @@ is-fullwidth-code-point@^3.0.0:
   resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
   integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
 
-is-glob@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
-  integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
-  dependencies:
-    is-extglob "^2.1.0"
-
 is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
   version "4.0.3"
   resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
@@ -4834,25 +4482,18 @@ is-interactive@^1.0.0:
   resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e"
   integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==
 
-is-negative-zero@^2.0.1:
+is-negative-zero@^2.0.2:
   version "2.0.2"
   resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
   integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==
 
 is-number-object@^1.0.4:
-  version "1.0.6"
-  resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0"
-  integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc"
+  integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==
   dependencies:
     has-tostringtag "^1.0.0"
 
-is-number@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
-  integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
-  dependencies:
-    kind-of "^3.0.2"
-
 is-number@^7.0.0:
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
@@ -4883,7 +4524,7 @@ is-plain-obj@^2.0.0:
   resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
   integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
 
-is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+is-plain-object@^2.0.4:
   version "2.0.4"
   resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
   integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
@@ -4908,10 +4549,12 @@ is-regexp@^2.0.0:
   resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-2.1.0.tgz#cd734a56864e23b956bf4e7c66c396a4c0b22c2d"
   integrity sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==
 
-is-shared-array-buffer@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6"
-  integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==
+is-shared-array-buffer@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79"
+  integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==
+  dependencies:
+    call-bind "^1.0.2"
 
 is-stream@^2.0.0:
   version "2.0.1"
@@ -4947,18 +4590,13 @@ is-url@^1.2.4:
   resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52"
   integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==
 
-is-weakref@^1.0.1:
+is-weakref@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
   integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==
   dependencies:
     call-bind "^1.0.2"
 
-is-windows@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
-  integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
-
 is2@^2.0.6:
   version "2.0.7"
   resolved "https://registry.yarnpkg.com/is2/-/is2-2.0.7.tgz#d084e10cab3bd45d6c9dfde7a48599fcbb93fcac"
@@ -4973,24 +4611,12 @@ isarray@0.0.1:
   resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
   integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
 
-isarray@1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
-  integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
-
 isexe@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
   integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
 
-isobject@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
-  integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
-  dependencies:
-    isarray "1.0.0"
-
-isobject@^3.0.0, isobject@^3.0.1:
+isobject@^3.0.1:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
   integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
@@ -5000,13 +4626,13 @@ isstream@~0.1.2:
   resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
   integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
 
-jake@^10.6.1:
-  version "10.8.2"
-  resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.2.tgz#ebc9de8558160a66d82d0eadc6a2e58fbc500a7b"
-  integrity sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==
+jake@^10.8.5:
+  version "10.8.5"
+  resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46"
+  integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==
   dependencies:
-    async "0.9.x"
-    chalk "^2.4.2"
+    async "^3.2.3"
+    chalk "^4.0.2"
     filelist "^1.0.1"
     minimatch "^3.0.4"
 
@@ -5037,33 +4663,33 @@ jest-worker@^27.4.5:
   version "0.0.0"
   resolved "https://github.com/zurb/joyride/archive/refs/heads/v2.1.tar.gz#a2149b220318565de072ed0c956310cd7c30c7d7"
 
-jquery-form@^4.3.0:
+jquery-form@4.3.x:
   version "4.3.0"
   resolved "https://registry.yarnpkg.com/jquery-form/-/jquery-form-4.3.0.tgz#7d3961c314a1f2d15298f4af1d3943f54f4149c6"
   integrity sha512-q3uaVCEWdLOYUCI6dpNdwf/7cJFOsUgdpq6r0taxtGQ5NJSkOzofyWm4jpOuJ5YxdmL1FI5QR+q+HB63HHLGnQ==
   dependencies:
     jquery ">=1.7.2"
 
-jquery-once@^2.2.3:
+jquery-once@2.2.x:
   version "2.2.3"
   resolved "https://registry.yarnpkg.com/jquery-once/-/jquery-once-2.2.3.tgz#d5b266a1a7b47e5f86a5f25e83ee9467e13707a3"
   integrity sha512-5gbkmxjbqA15KbrNxcDhdBN3EvakY5w/JdxdGgPGsO/kp6TdiqOr6nbnEZGeyF1/yLXVvA8i9lisgXguSiNV+g==
   dependencies:
     jquery "*"
 
-jquery-ui@~1.13.1:
+jquery-ui@1.13.x:
   version "1.13.1"
   resolved "https://registry.yarnpkg.com/jquery-ui/-/jquery-ui-1.13.1.tgz#d0b7a42e73a04c31bb5706adf86f6f8942f64eaa"
   integrity sha512-2VlU59N5P4HaumDK1Z3XEVjSvegFbEOQRgpHUBaB2Ak98Axl3hFhJ6RFcNQNuk9SfL6WxIbuLst8dW/U56NSiA==
   dependencies:
     jquery ">=1.8.0 <4.0.0"
 
-jquery@*, jquery@>=1.7.2, "jquery@>=1.8.0 <4.0.0", jquery@^3.6.0:
+jquery@*, jquery@3.6.x, jquery@>=1.7.2, "jquery@>=1.8.0 <4.0.0":
   version "3.6.0"
   resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.0.tgz#c72a09f15c1bdce142f49dbf1170bdf8adac2470"
   integrity sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==
 
-js-cookie@^3.0.1:
+js-cookie@3.0.x:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-3.0.1.tgz#9e39b4c6c2f56563708d7d31f6f5f21873a92414"
   integrity sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==
@@ -5179,12 +4805,10 @@ json5@^1.0.1:
   dependencies:
     minimist "^1.2.0"
 
-json5@^2.1.2:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3"
-  integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==
-  dependencies:
-    minimist "^1.2.5"
+json5@^2.1.2, json5@^2.2.1:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c"
+  integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==
 
 jsonfile@^4.0.0:
   version "4.0.0"
@@ -5213,33 +4837,14 @@ jsprim@^1.2.2:
     verror "1.10.0"
 
 "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.2.1:
-  version "3.2.1"
-  resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz#720b97bfe7d901b927d87c3773637ae8ea48781b"
-  integrity sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.0.tgz#e624f259143b9062c92b6413ff92a164c80d3ccb"
+  integrity sha512-XzO9luP6L0xkxwhIJMTJQpZo/eeN60K08jHdexfD569AGxeNug6UketeHXEhROoM8aR7EcUoOQmIhcJQjcuq8Q==
   dependencies:
-    array-includes "^3.1.3"
+    array-includes "^3.1.4"
     object.assign "^4.1.2"
 
-kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
-  version "3.2.2"
-  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
-  integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
-  dependencies:
-    is-buffer "^1.1.5"
-
-kind-of@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
-  integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
-  dependencies:
-    is-buffer "^1.1.5"
-
-kind-of@^5.0.0:
-  version "5.1.0"
-  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
-  integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
-
-kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3:
+kind-of@^6.0.2, kind-of@^6.0.3:
   version "6.0.3"
   resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
   integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
@@ -5293,9 +4898,9 @@ lines-and-columns@^1.1.6:
   integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
 
 loader-runner@^4.2.0:
-  version "4.2.0"
-  resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384"
-  integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1"
+  integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==
 
 loader-utils@^2.0.0:
   version "2.0.2"
@@ -5306,7 +4911,7 @@ loader-utils@^2.0.0:
     emojis-list "^3.0.0"
     json5 "^2.1.2"
 
-loadjs@^4.2.0:
+loadjs@4.2.x:
   version "4.2.0"
   resolved "https://registry.yarnpkg.com/loadjs/-/loadjs-4.2.0.tgz#2a0336376397a6a43edf98c9ec3229ddd5abb6f6"
   integrity sha512-AgQGZisAlTPbTEzrHPb6q+NYBMD+DP9uvGSIjSUM5uG+0jG15cb8axWpxuOIqrmQjn6scaaH8JwloiP27b2KXA==
@@ -5449,6 +5054,11 @@ lodash.merge@^4.6.2:
   resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
   integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
 
+lodash.sortby@^4.7.0:
+  version "4.7.0"
+  resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
+  integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=
+
 lodash.truncate@^4.4.2:
   version "4.4.2"
   resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193"
@@ -5527,11 +5137,6 @@ make-dir@^3.0.0, make-dir@^3.0.2:
   dependencies:
     semver "^6.0.0"
 
-map-cache@^0.2.2:
-  version "0.2.2"
-  resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
-  integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
-
 map-obj@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
@@ -5542,13 +5147,6 @@ map-obj@^4.0.0:
   resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a"
   integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==
 
-map-visit@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
-  integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
-  dependencies:
-    object-visit "^1.0.0"
-
 mathml-tag-names@^2.1.3:
   version "2.1.3"
   resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3"
@@ -5623,44 +5221,25 @@ micromark@~2.11.0:
     debug "^4.0.0"
     parse-entities "^2.0.0"
 
-micromatch@^3.1.10:
-  version "3.1.10"
-  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
-  integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
-  dependencies:
-    arr-diff "^4.0.0"
-    array-unique "^0.3.2"
-    braces "^2.3.1"
-    define-property "^2.0.2"
-    extend-shallow "^3.0.2"
-    extglob "^2.0.4"
-    fragment-cache "^0.2.1"
-    kind-of "^6.0.2"
-    nanomatch "^1.2.9"
-    object.pick "^1.3.0"
-    regex-not "^1.0.0"
-    snapdragon "^0.8.1"
-    to-regex "^3.0.2"
-
-micromatch@^4.0.4:
-  version "4.0.4"
-  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9"
-  integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==
+micromatch@^4.0.4, micromatch@^4.0.5:
+  version "4.0.5"
+  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
+  integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
   dependencies:
-    braces "^3.0.1"
-    picomatch "^2.2.3"
+    braces "^3.0.2"
+    picomatch "^2.3.1"
 
-mime-db@1.51.0:
-  version "1.51.0"
-  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c"
-  integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==
+mime-db@1.52.0:
+  version "1.52.0"
+  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
+  integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
 
 mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.19:
-  version "2.1.34"
-  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24"
-  integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==
+  version "2.1.35"
+  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
+  integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
   dependencies:
-    mime-db "1.51.0"
+    mime-db "1.52.0"
 
 mime@^2.3.1:
   version "2.6.0"
@@ -5691,6 +5270,13 @@ minimatch@^3.0.4, minimatch@^3.1.2:
   dependencies:
     brace-expansion "^1.1.7"
 
+minimatch@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b"
+  integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==
+  dependencies:
+    brace-expansion "^2.0.1"
+
 minimist-options@4.1.0:
   version "4.1.0"
   resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619"
@@ -5700,10 +5286,10 @@ minimist-options@4.1.0:
     is-plain-obj "^1.1.0"
     kind-of "^6.0.3"
 
-minimist@^1.2.0, minimist@^1.2.2, minimist@^1.2.5:
-  version "1.2.5"
-  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
-  integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
+minimist@^1.2.0, minimist@^1.2.2, minimist@^1.2.5, minimist@^1.2.6:
+  version "1.2.6"
+  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
+  integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
 
 minipass-collect@^1.0.2:
   version "1.0.2"
@@ -5741,14 +5327,6 @@ minizlib@^2.1.1:
     minipass "^3.0.0"
     yallist "^4.0.0"
 
-mixin-deep@^1.2.0:
-  version "1.3.2"
-  resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
-  integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
-  dependencies:
-    for-in "^1.0.2"
-    is-extendable "^1.0.1"
-
 mkdirp@0.5.4:
   version "0.5.4"
   resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.4.tgz#fd01504a6797ec5c9be81ff43d204961ed64a512"
@@ -5757,11 +5335,11 @@ mkdirp@0.5.4:
     minimist "^1.2.5"
 
 mkdirp@^0.5.0:
-  version "0.5.5"
-  resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
-  integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
+  version "0.5.6"
+  resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
+  integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
   dependencies:
-    minimist "^1.2.5"
+    minimist "^1.2.6"
 
 mkdirp@^1.0.3, mkdirp@^1.0.4:
   version "1.0.4"
@@ -5827,27 +5405,10 @@ mute-stream@0.0.8:
   resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
   integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
 
-nanoid@^3.3.1:
-  version "3.3.2"
-  resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.2.tgz#c89622fafb4381cd221421c69ec58547a1eec557"
-  integrity sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA==
-
-nanomatch@^1.2.9:
-  version "1.2.13"
-  resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
-  integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
-  dependencies:
-    arr-diff "^4.0.0"
-    array-unique "^0.3.2"
-    define-property "^2.0.2"
-    extend-shallow "^3.0.2"
-    fragment-cache "^0.2.1"
-    is-windows "^1.0.2"
-    kind-of "^6.0.2"
-    object.pick "^1.3.0"
-    regex-not "^1.0.0"
-    snapdragon "^0.8.1"
-    to-regex "^3.0.1"
+nanoid@^3.3.3:
+  version "3.3.4"
+  resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab"
+  integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
 
 natural-compare@^1.4.0:
   version "1.4.0"
@@ -5899,10 +5460,10 @@ node-environment-flags@1.0.5:
     object.getownpropertydescriptors "^2.0.3"
     semver "^5.7.0"
 
-node-releases@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01"
-  integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==
+node-releases@^2.0.3:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.4.tgz#f38252370c43854dc48aa431c766c6c398f40476"
+  integrity sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==
 
 normalize-package-data@^2.5.0:
   version "2.5.0"
@@ -5944,7 +5505,7 @@ normalize-url@^6.0.1:
   resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a"
   integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==
 
-normalize.css@^8.0.1:
+normalize.css@8.0.x:
   version "8.0.1"
   resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-8.0.1.tgz#9b98a208738b9cc2634caacbc42d131c97487bf3"
   integrity sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==
@@ -5983,32 +5544,16 @@ object-assign@^4.1.1:
   resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
   integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
 
-object-copy@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
-  integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
-  dependencies:
-    copy-descriptor "^0.1.0"
-    define-property "^0.2.5"
-    kind-of "^3.0.3"
-
-object-inspect@^1.11.0, object-inspect@^1.9.0:
+object-inspect@^1.12.0, object-inspect@^1.9.0:
   version "1.12.0"
   resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0"
   integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==
 
-object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1:
+object-keys@^1.0.11, object-keys@^1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
   integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
 
-object-visit@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
-  integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
-  dependencies:
-    isobject "^3.0.0"
-
 object.assign@4.1.0:
   version "4.1.0"
   resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
@@ -6064,13 +5609,6 @@ object.hasown@^1.1.0:
     define-properties "^1.1.3"
     es-abstract "^1.19.1"
 
-object.pick@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
-  integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
-  dependencies:
-    isobject "^3.0.1"
-
 object.values@^1.1.5:
   version "1.1.5"
   resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac"
@@ -6270,16 +5808,6 @@ parse5@6.0.1:
   resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
   integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
 
-pascalcase@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
-  integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
-
-path-dirname@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
-  integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
-
 path-exists@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
@@ -6305,13 +5833,6 @@ path-parse@^1.0.6, path-parse@^1.0.7:
   resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
   integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
 
-path-type@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
-  integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
-  dependencies:
-    pify "^3.0.0"
-
 path-type@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
@@ -6337,12 +5858,12 @@ picocolors@^1.0.0:
   resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
   integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
 
-picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3:
+picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
   version "2.3.1"
   resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
   integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
 
-picturefill@^3.0.3:
+picturefill@3.0.x:
   version "3.0.3"
   resolved "https://registry.yarnpkg.com/picturefill/-/picturefill-3.0.3.tgz#a5c38eeb02d74def38e1790ff61e166166b4f224"
   integrity sha512-JDdx+3i4fs2pkqwWZJgGEM2vFWsq+01YsQFT9CKPGuv2Q0xSdrQZoxi9XwyNARTgxiOdgoAwWQRluLRe/JQX2g==
@@ -6352,11 +5873,6 @@ pify@^2.3.0:
   resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
   integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
 
-pify@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
-  integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
-
 pify@^4.0.1:
   version "4.0.1"
   resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
@@ -6386,11 +5902,6 @@ pofile@^1.0.9:
   resolved "https://registry.yarnpkg.com/pofile/-/pofile-1.1.3.tgz#e2c0d4052b9829f171b888bfb35c87791dbea297"
   integrity sha512-sk96pUvpNwDV6PLrnhr68Uu1S5NohsxqLKz0GuracgrDo40BdF/r1RhHnjakUk6Q4Z0OKIybOQ7GevLKGN1iYw==
 
-posix-character-classes@^0.1.0:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
-  integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
-
 postcss-attribute-case-insensitive@^4.0.1:
   version "4.0.2"
   resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz#d93e46b504589e94ac7277b0463226c68041a880"
@@ -6603,7 +6114,7 @@ postcss-import@^12.0.1:
     read-cache "^1.0.0"
     resolve "^1.1.7"
 
-postcss-import@^14.0.2:
+postcss-import@^14.1.0:
   version "14.1.0"
   resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-14.1.0.tgz#a7333ffe32f0b8795303ee9e40215dac922781f0"
   integrity sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==
@@ -6619,13 +6130,12 @@ postcss-initial@^3.0.0:
   dependencies:
     postcss "^7.0.2"
 
-postcss-js@^2.0.3:
-  version "2.0.3"
-  resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-2.0.3.tgz#a96f0f23ff3d08cec7dc5b11bf11c5f8077cdab9"
-  integrity sha512-zS59pAk3deu6dVHyrGqmC3oDXBdNdajk4k1RyxeVXCrcEDBUBHoIhE4QTsmhxgzXxsaqFDAkUZfmMa5f/N/79w==
+postcss-js@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.0.tgz#31db79889531b80dc7bc9b0ad283e418dce0ac00"
+  integrity sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==
   dependencies:
     camelcase-css "^2.0.1"
-    postcss "^7.0.18"
 
 postcss-lab-function@^2.0.1:
   version "2.0.1"
@@ -6723,18 +6233,24 @@ postcss-minify-selectors@^5.2.0:
   dependencies:
     postcss-selector-parser "^6.0.5"
 
-postcss-mixins@^6.2.3:
-  version "6.2.3"
-  resolved "https://registry.yarnpkg.com/postcss-mixins/-/postcss-mixins-6.2.3.tgz#021893ba455d04b5baa052bf196297ddd70e4af1"
-  integrity sha512-gfH5d09YilzDn/CLGFA9Lwv7GTezuyHgnAyXC8AfvhUMpl67ZTewhcpNuOgawClCOD+76XePE2IHO1xMgsOlvA==
+postcss-mixins@^9.0.2:
+  version "9.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-mixins/-/postcss-mixins-9.0.2.tgz#098969dafd1b9a98e2973fde024bef9d2563f604"
+  integrity sha512-LaFjXcR+7LRji+Sc6DRn1mUw43+Y9Lyh5JjFTQDedlIi4W6REAesRXRJLlms5424vb0zerBfCVZzS2ZHRxGZOA==
   dependencies:
-    globby "^8.0.1"
-    postcss "^7.0.21"
-    postcss-js "^2.0.3"
-    postcss-simple-vars "^5.0.2"
-    sugarss "^2.0.0"
+    fast-glob "^3.2.11"
+    postcss-js "^4.0.0"
+    postcss-simple-vars "^6.0.3"
+    sugarss "^4.0.1"
+
+postcss-nesting@^10.1.4:
+  version "10.1.4"
+  resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-10.1.4.tgz#80de9d1c2717bc44df918dd7f118929300192a7a"
+  integrity sha512-2ixdQ59ik/Gt1+oPHiI1kHdwEI8lLKEmui9B1nl6163ANLC+GewQn7fXMxJF2JSb4i2MKL96GU8fIiQztK4TTA==
+  dependencies:
+    postcss-selector-parser "^6.0.10"
 
-postcss-nesting@^7.0.0, postcss-nesting@^7.0.1:
+postcss-nesting@^7.0.0:
   version "7.0.1"
   resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-7.0.1.tgz#b50ad7b7f0173e5b5e3880c3501344703e04c052"
   integrity sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==
@@ -6966,15 +6482,7 @@ postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4:
     indexes-of "^1.0.1"
     uniq "^1.0.1"
 
-postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.5:
-  version "6.0.9"
-  resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz#ee71c3b9ff63d9cd130838876c13a2ec1a992b2f"
-  integrity sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==
-  dependencies:
-    cssesc "^3.0.0"
-    util-deprecate "^1.0.2"
-
-postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.9:
+postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9:
   version "6.0.10"
   resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d"
   integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==
@@ -6982,12 +6490,10 @@ postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.9:
     cssesc "^3.0.0"
     util-deprecate "^1.0.2"
 
-postcss-simple-vars@^5.0.2:
-  version "5.0.2"
-  resolved "https://registry.yarnpkg.com/postcss-simple-vars/-/postcss-simple-vars-5.0.2.tgz#e2f81b3d0847ddd4169816b6d141b91d51e6e22e"
-  integrity sha512-xWIufxBoINJv6JiLb7jl5oElgp+6puJwvT5zZHliUSydoLz4DADRB3NDDsYgfKVwojn4TDLiseoC65MuS8oGGg==
-  dependencies:
-    postcss "^7.0.14"
+postcss-simple-vars@^6.0.3:
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/postcss-simple-vars/-/postcss-simple-vars-6.0.3.tgz#e66516c7fe980da3498f4a8ad400b9c53861806c"
+  integrity sha512-fkNn4Zio8vN4vIig9IFdb8lVlxWnYR769RgvxCM6YWlFKie/nQaOcaMMMFz/s4gsfHW4/5bJW+i57zD67mQU7g==
 
 postcss-sorting@^5.0.1:
   version "5.0.1"
@@ -7056,11 +6562,11 @@ postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.18, postcss@^7.0.
     source-map "^0.6.1"
 
 postcss@^8.4.12:
-  version "8.4.12"
-  resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.12.tgz#1e7de78733b28970fa4743f7da6f3763648b1905"
-  integrity sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==
+  version "8.4.13"
+  resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.13.tgz#7c87bc268e79f7f86524235821dfdf9f73e5d575"
+  integrity sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==
   dependencies:
-    nanoid "^3.3.1"
+    nanoid "^3.3.3"
     picocolors "^1.0.0"
     source-map-js "^1.0.2"
 
@@ -7082,9 +6588,9 @@ prettier-linter-helpers@^1.0.0:
     fast-diff "^1.1.2"
 
 prettier@^2.1.2:
-  version "2.5.1"
-  resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a"
-  integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==
+  version "2.6.2"
+  resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.2.tgz#e26d71a18a74c3d0f0597f55f01fb6c06c206032"
+  integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==
 
 progress@^2.0.0:
   version "2.0.3"
@@ -7278,28 +6784,21 @@ regenerator-runtime@^0.13.4:
   resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52"
   integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==
 
-regenerator-transform@^0.14.2:
-  version "0.14.5"
-  resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4"
-  integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==
+regenerator-transform@^0.15.0:
+  version "0.15.0"
+  resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537"
+  integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==
   dependencies:
     "@babel/runtime" "^7.8.4"
 
-regex-not@^1.0.0, regex-not@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
-  integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
-  dependencies:
-    extend-shallow "^3.0.2"
-    safe-regex "^1.1.0"
-
-regexp.prototype.flags@^1.3.1:
-  version "1.4.1"
-  resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz#b3f4c0059af9e47eca9f3f660e51d81307e72307"
-  integrity sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==
+regexp.prototype.flags@^1.4.1:
+  version "1.4.3"
+  resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac"
+  integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==
   dependencies:
     call-bind "^1.0.2"
     define-properties "^1.1.3"
+    functions-have-names "^1.2.2"
 
 regexpp@^3.1.0:
   version "3.2.0"
@@ -7353,11 +6852,6 @@ remark@^13.0.0:
     remark-stringify "^9.0.0"
     unified "^9.1.0"
 
-repeat-element@^1.1.2:
-  version "1.1.4"
-  resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9"
-  integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==
-
 repeat-string@^1.0.0, repeat-string@^1.6.1:
   version "1.6.1"
   resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
@@ -7445,12 +6939,7 @@ resolve-global@^1.0.0:
   dependencies:
     global-dirs "^0.1.1"
 
-resolve-url@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
-  integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
-
-resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.9.0:
+resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.9.0:
   version "1.22.0"
   resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198"
   integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==
@@ -7475,11 +6964,6 @@ restore-cursor@^3.1.0:
     onetime "^5.1.0"
     signal-exit "^3.0.2"
 
-ret@~0.1.10:
-  version "0.1.15"
-  resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
-  integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
-
 reusify@^1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
@@ -7509,13 +6993,6 @@ safe-buffer@~5.1.1:
   resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
   integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
 
-safe-regex@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
-  integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
-  dependencies:
-    ret "~0.1.10"
-
 "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
   version "2.1.2"
   resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
@@ -7552,10 +7029,10 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0:
   resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
   integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
 
-semver@^7.2.1, semver@^7.3.4, semver@^7.3.5:
-  version "7.3.5"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
-  integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
+semver@^7.2.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7:
+  version "7.3.7"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
+  integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
   dependencies:
     lru-cache "^6.0.0"
 
@@ -7578,16 +7055,6 @@ set-blocking@^2.0.0:
   resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
   integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
 
-set-value@^2.0.0, set-value@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
-  integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
-  dependencies:
-    extend-shallow "^2.0.1"
-    is-extendable "^0.1.1"
-    is-plain-object "^2.0.3"
-    split-string "^3.0.1"
-
 setprototypeof@1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
@@ -7621,7 +7088,7 @@ shelljs@^0.8.1:
     interpret "^1.0.0"
     rechoir "^0.6.2"
 
-shepherd.js@^8.3.1:
+shepherd.js@8.3.x:
   version "8.3.1"
   resolved "https://registry.yarnpkg.com/shepherd.js/-/shepherd.js-8.3.1.tgz#131eeefc5eb2bc44c9e23d0da139db46b2b55339"
   integrity sha512-IhxZNhnK2m/pNTXudNfYrcwvcZNWkeYngQbQee8nC3xJ2GjeIatGqivhdZAMZ+LeogZvKMakB931d/V534uhrw==
@@ -7644,11 +7111,6 @@ signal-exit@^3.0.2, signal-exit@^3.0.3:
   resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
   integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
 
-slash@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
-  integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=
-
 slash@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
@@ -7673,36 +7135,6 @@ smoothscroll-polyfill@^0.4.4:
   resolved "https://registry.yarnpkg.com/smoothscroll-polyfill/-/smoothscroll-polyfill-0.4.4.tgz#3a259131dc6930e6ca80003e1cb03b603b69abf8"
   integrity sha512-TK5ZA9U5RqCwMpfoMq/l1mrH0JAR7y7KRvOBx0n2869aLxch+gT9GhN3yUfjiw+d/DiF1mKo14+hd62JyMmoBg==
 
-snapdragon-node@^2.0.1:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
-  integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
-  dependencies:
-    define-property "^1.0.0"
-    isobject "^3.0.0"
-    snapdragon-util "^3.0.1"
-
-snapdragon-util@^3.0.1:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
-  integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
-  dependencies:
-    kind-of "^3.2.0"
-
-snapdragon@^0.8.1:
-  version "0.8.2"
-  resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
-  integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
-  dependencies:
-    base "^0.11.1"
-    debug "^2.2.0"
-    define-property "^0.2.5"
-    extend-shallow "^2.0.1"
-    map-cache "^0.2.2"
-    source-map "^0.5.6"
-    source-map-resolve "^0.5.0"
-    use "^3.1.0"
-
 socks-proxy-agent@5, socks-proxy-agent@^5.0.0:
   version "5.0.1"
   resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz#032fb583048a29ebffec2e6a73fca0761f48177e"
@@ -7720,7 +7152,7 @@ socks@^2.3.3:
     ip "^1.1.5"
     smart-buffer "^4.2.0"
 
-sortablejs@^1.13.0:
+sortablejs@1.14.x:
   version "1.14.0"
   resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.14.0.tgz#6d2e17ccbdb25f464734df621d4f35d4ab35b3d8"
   integrity sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==
@@ -7735,17 +7167,6 @@ source-map-js@^1.0.2:
   resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
   integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
 
-source-map-resolve@^0.5.0:
-  version "0.5.3"
-  resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
-  integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
-  dependencies:
-    atob "^2.1.2"
-    decode-uri-component "^0.2.0"
-    resolve-url "^0.2.1"
-    source-map-url "^0.4.0"
-    urix "^0.1.0"
-
 source-map-support@^0.5.16, source-map-support@~0.5.20:
   version "0.5.21"
   resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
@@ -7754,25 +7175,17 @@ source-map-support@^0.5.16, source-map-support@~0.5.20:
     buffer-from "^1.0.0"
     source-map "^0.6.0"
 
-source-map-url@^0.4.0:
-  version "0.4.1"
-  resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56"
-  integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==
-
-source-map@^0.5.0, source-map@^0.5.6:
-  version "0.5.7"
-  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
-  integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
-
 source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
   version "0.6.1"
   resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
   integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
 
-source-map@~0.7.2:
-  version "0.7.3"
-  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
-  integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
+source-map@~0.8.0-beta.0:
+  version "0.8.0-beta.0"
+  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11"
+  integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==
+  dependencies:
+    whatwg-url "^7.0.0"
 
 spdx-correct@^3.0.0:
   version "3.1.1"
@@ -7805,13 +7218,6 @@ specificity@^0.4.1:
   resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019"
   integrity sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==
 
-split-string@^3.0.1, split-string@^3.0.2:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
-  integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
-  dependencies:
-    extend-shallow "^3.0.0"
-
 sprintf-js@~1.0.2:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
@@ -7844,14 +7250,6 @@ stable@^0.1.8:
   resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf"
   integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==
 
-static-extend@^0.1.1:
-  version "0.1.2"
-  resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
-  integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
-  dependencies:
-    define-property "^0.2.5"
-    object-copy "^0.1.0"
-
 statuses@2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
@@ -7889,34 +7287,36 @@ string-width@^4.2.2, string-width@^4.2.3:
     strip-ansi "^6.0.1"
 
 string.prototype.matchall@^4.0.6:
-  version "4.0.6"
-  resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz#5abb5dabc94c7b0ea2380f65ba610b3a544b15fa"
-  integrity sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==
+  version "4.0.7"
+  resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d"
+  integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==
   dependencies:
     call-bind "^1.0.2"
     define-properties "^1.1.3"
     es-abstract "^1.19.1"
     get-intrinsic "^1.1.1"
-    has-symbols "^1.0.2"
+    has-symbols "^1.0.3"
     internal-slot "^1.0.3"
-    regexp.prototype.flags "^1.3.1"
+    regexp.prototype.flags "^1.4.1"
     side-channel "^1.0.4"
 
 string.prototype.trimend@^1.0.4:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80"
-  integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0"
+  integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==
   dependencies:
     call-bind "^1.0.2"
-    define-properties "^1.1.3"
+    define-properties "^1.1.4"
+    es-abstract "^1.19.5"
 
 string.prototype.trimstart@^1.0.4:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed"
-  integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef"
+  integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==
   dependencies:
     call-bind "^1.0.2"
-    define-properties "^1.1.3"
+    define-properties "^1.1.4"
+    es-abstract "^1.19.5"
 
 string_decoder@^1.1.1:
   version "1.3.0"
@@ -8088,6 +7488,11 @@ sugarss@^2.0.0:
   dependencies:
     postcss "^7.0.2"
 
+sugarss@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-4.0.1.tgz#128a783ed71ee0fc3b489ce1f7d5a89bc1e24383"
+  integrity sha512-WCjS5NfuVJjkQzK10s8WOBY+hhDxxNt/N6ZaGwxFZ+wN3/lKKFSaaKUNecULcTTvE4urLcKaZFQD8vO0mOZujw==
+
 supports-color@6.0.0:
   version "6.0.0"
   resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a"
@@ -8144,7 +7549,7 @@ symbol-tree@^3.2.4:
   resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
   integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
 
-tabbable@^5.2.0:
+tabbable@5.2.x:
   version "5.2.1"
   resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-5.2.1.tgz#e3fda7367ddbb172dcda9f871c0fdb36d1c4cd9c"
   integrity sha512-40pEZ2mhjaZzK0BnI+QGNjJO8UYx9pP5v7BGe17SORTO0OEuuaAwQTkAp8whcZvqon44wKFOikD+Al11K3JICQ==
@@ -8212,13 +7617,13 @@ terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.2.0:
     terser "^5.7.2"
 
 terser@^5.3.4, terser@^5.7.2:
-  version "5.12.0"
-  resolved "https://registry.yarnpkg.com/terser/-/terser-5.12.0.tgz#728c6bff05f7d1dcb687d8eace0644802a9dae8a"
-  integrity sha512-R3AUhNBGWiFc77HXag+1fXpAxTAFRQTJemlJKjAgD9r8xXTpjNKqIXwHM/o7Rh+O0kUJtS3WQVdBeMKFk5sw9A==
+  version "5.13.1"
+  resolved "https://registry.yarnpkg.com/terser/-/terser-5.13.1.tgz#66332cdc5a01b04a224c9fad449fc1a18eaa1799"
+  integrity sha512-hn4WKOfwnwbYfe48NgrQjqNOH9jzLqRcIfbYytOXCOv46LBfWr9bDS17MQqOi+BWGD0sJK3Sj5NC/gJjiojaoA==
   dependencies:
     acorn "^8.5.0"
     commander "^2.20.0"
-    source-map "~0.7.2"
+    source-map "~0.8.0-beta.0"
     source-map-support "~0.5.20"
 
 text-table@^0.2.0:
@@ -8239,21 +7644,6 @@ to-fast-properties@^2.0.0:
   resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
   integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
 
-to-object-path@^0.3.0:
-  version "0.3.0"
-  resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
-  integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
-  dependencies:
-    kind-of "^3.0.2"
-
-to-regex-range@^2.1.0:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
-  integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
-  dependencies:
-    is-number "^3.0.0"
-    repeat-string "^1.6.1"
-
 to-regex-range@^5.0.1:
   version "5.0.1"
   resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
@@ -8261,16 +7651,6 @@ to-regex-range@^5.0.1:
   dependencies:
     is-number "^7.0.0"
 
-to-regex@^3.0.1, to-regex@^3.0.2:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
-  integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
-  dependencies:
-    define-property "^2.0.2"
-    extend-shallow "^3.0.2"
-    regex-not "^1.0.2"
-    safe-regex "^1.1.0"
-
 toidentifier@1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
@@ -8293,6 +7673,13 @@ tough-cookie@^4.0.0:
     punycode "^2.1.1"
     universalify "^0.1.2"
 
+tr46@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
+  integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=
+  dependencies:
+    punycode "^2.1.0"
+
 tr46@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9"
@@ -8310,20 +7697,20 @@ trough@^1.0.0:
   resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406"
   integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==
 
-tsconfig-paths@^3.12.0:
-  version "3.12.0"
-  resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz#19769aca6ee8f6a1a341e38c8fa45dd9fb18899b"
-  integrity sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==
+tsconfig-paths@^3.14.1:
+  version "3.14.1"
+  resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a"
+  integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==
   dependencies:
     "@types/json5" "^0.0.29"
     json5 "^1.0.1"
-    minimist "^1.2.0"
+    minimist "^1.2.6"
     strip-bom "^3.0.0"
 
 tslib@^2.0.1:
-  version "2.3.1"
-  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01"
-  integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==
+  version "2.4.0"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3"
+  integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==
 
 tunnel-agent@^0.6.0:
   version "0.6.0"
@@ -8379,19 +7766,19 @@ typedarray-to-buffer@^3.1.5:
     is-typedarray "^1.0.0"
 
 unbox-primitive@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471"
-  integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
+  integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==
   dependencies:
-    function-bind "^1.1.1"
-    has-bigints "^1.0.1"
-    has-symbols "^1.0.2"
+    call-bind "^1.0.2"
+    has-bigints "^1.0.2"
+    has-symbols "^1.0.3"
     which-boxed-primitive "^1.0.2"
 
-underscore@>=1.8.3, underscore@^1.13.1:
-  version "1.13.2"
-  resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.2.tgz#276cea1e8b9722a8dbed0100a407dda572125881"
-  integrity sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g==
+underscore@1.13.x, underscore@>=1.8.3:
+  version "1.13.3"
+  resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.3.tgz#54bc95f7648c5557897e5e968d0f76bc062c34ee"
+  integrity sha512-QvjkYpiD+dJJraRA8+dGAU4i7aBbb2s0S3jA45TFOvg2VgqvdCDd/3N6CqA8gluk1W91GLoXg5enMUx560QzuA==
 
 unicode-canonical-property-names-ecmascript@^2.0.0:
   version "2.0.0"
@@ -8428,16 +7815,6 @@ unified@^9.1.0:
     trough "^1.0.0"
     vfile "^4.0.0"
 
-union-value@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
-  integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
-  dependencies:
-    arr-union "^3.1.0"
-    get-value "^2.0.6"
-    is-extendable "^0.1.1"
-    set-value "^2.0.1"
-
 uniq@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
@@ -8498,14 +7875,6 @@ unpipe@1.0.0:
   resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
   integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
 
-unset-value@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
-  integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
-  dependencies:
-    has-value "^0.3.1"
-    isobject "^3.0.0"
-
 uri-js@^4.2.2:
   version "4.4.1"
   resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
@@ -8513,16 +7882,6 @@ uri-js@^4.2.2:
   dependencies:
     punycode "^2.1.0"
 
-urix@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
-  integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
-
-use@^3.1.0:
-  version "3.1.1"
-  resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
-  integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
-
 util-deprecate@^1.0.1, util-deprecate@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
@@ -8581,6 +7940,11 @@ vm2@^3.9.8:
     acorn "^8.7.0"
     acorn-walk "^8.2.0"
 
+vscode-languageserver-textdocument@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.4.tgz#3cd56dd14cec1d09e86c4bb04b09a246cb3df157"
+  integrity sha512-/xhqXP/2A2RSs+J8JNXpiiNVvvNM0oTosNVmQnunlKvq9o4mupHOBAnnzH0lwIPKazXKvAKsVp1kr+H/K4lgoQ==
+
 vscode-uri@^3.0.3:
   version "3.0.3"
   resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.3.tgz#a95c1ce2e6f41b7549f86279d19f47951e4f4d84"
@@ -8615,6 +7979,11 @@ wcwidth@^1.0.1:
   dependencies:
     defaults "^1.0.3"
 
+webidl-conversions@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
+  integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
+
 webidl-conversions@^7.0.0:
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a"
@@ -8668,9 +8037,9 @@ webpack-sources@^3.2.3:
   integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
 
 webpack@^5.51.1:
-  version "5.69.1"
-  resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.69.1.tgz#8cfd92c192c6a52c99ab00529b5a0d33aa848dc5"
-  integrity sha512-+VyvOSJXZMT2V5vLzOnDuMz5GxEqLk7hKWQ56YxPW/PQRUuKimPqmEIJOx8jHYeyo65pKbapbW464mvsKbaj4A==
+  version "5.72.0"
+  resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.72.0.tgz#f8bc40d9c6bb489a4b7a8a685101d6022b8b6e28"
+  integrity sha512-qmSmbspI0Qo5ld49htys8GY9XhS9CGqFoHTsOVAnjBdg0Zn79y135R+k4IR4rKK6+eKaabMhJwiVB7xw0SJu5w==
   dependencies:
     "@types/eslint-scope" "^3.7.3"
     "@types/estree" "^0.0.51"
@@ -8681,7 +8050,7 @@ webpack@^5.51.1:
     acorn-import-assertions "^1.7.6"
     browserslist "^4.14.5"
     chrome-trace-event "^1.0.2"
-    enhanced-resolve "^5.8.3"
+    enhanced-resolve "^5.9.2"
     es-module-lexer "^0.9.0"
     eslint-scope "5.1.1"
     events "^3.2.0"
@@ -8717,6 +8086,23 @@ whatwg-url@^10.0.0:
     tr46 "^3.0.0"
     webidl-conversions "^7.0.0"
 
+whatwg-url@^11.0.0:
+  version "11.0.0"
+  resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018"
+  integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==
+  dependencies:
+    tr46 "^3.0.0"
+    webidl-conversions "^7.0.0"
+
+whatwg-url@^7.0.0:
+  version "7.1.0"
+  resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06"
+  integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==
+  dependencies:
+    lodash.sortby "^4.7.0"
+    tr46 "^1.0.1"
+    webidl-conversions "^4.0.2"
+
 which-boxed-primitive@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
@@ -8789,9 +8175,9 @@ write-file-atomic@^3.0.0, write-file-atomic@^3.0.3:
     typedarray-to-buffer "^3.1.5"
 
 ws@^8.2.3:
-  version "8.5.0"
-  resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f"
-  integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==
+  version "8.6.0"
+  resolved "https://registry.yarnpkg.com/ws/-/ws-8.6.0.tgz#e5e9f1d9e7ff88083d0c0dd8281ea662a42c9c23"
+  integrity sha512-AzmM3aH3gk0aX7/rZLYvjdvZooofDu3fFOzGqcSnQ1tOcTWwhM/o+q++E8mAyVVIyUdajrkzWUGftaVSDLn1bw==
 
 xdg-basedir@^4.0.0:
   version "4.0.0"
-- 
GitLab